KODevelopers 438 #1 Oluşturuldu: Ağustos 1, 2017 30 35 dk falan sürünce. saniye saniye GameServer patlıyor neden kaynaklıyor.. void CAISocket::RecvNpcAttack(Packet & pkt) { CNpc * pAttacker; Unit * pTarget; uint16 sAttackerID, sTargetID; int16 sDamage; uint8 bResult = ATTACK_FAIL; pkt >> sAttackerID >> sTargetID; pAttacker = g_pMain->GetNpcPtr(sAttackerID); pTarget = g_pMain->GetUnitPtr(sTargetID); if (pAttacker == nullptr || pAttacker->isPlayer() || pTarget == nullptr || pAttacker->isDead() || pTarget->isDead() || TO_USER(pTarget)->isTransformed() || (TO_USER(pTarget)->isTransformed() && TO_NPC(pAttacker)->GetDamage(TO_USER(pTarget)) != 1)) return; if (pAttacker->GetEventRoom() != pTarget->GetEventRoom()) return; // TODO: Wrap this up into its own virtual method sDamage = pAttacker->GetDamage(pTarget); if (sDamage > 0) { pTarget->HpChange(-(sDamage), pAttacker); if (pTarget->isDead()) bResult = ATTACK_TARGET_DEAD; else bResult = ATTACK_SUCCESS; // Every hit takes a little of the defender's armour durability. if (pTarget->isPlayer()) TO_USER(pTarget)->ItemWoreOut(DEFENCE, sDamage); } Packet result(WIZ_ATTACK, uint8(LONG_ATTACK)); result << bResult << sAttackerID << sTargetID; pAttacker->SendToRegion(&result); } Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
KODevelopers 438 #2 Konu Sahibi Ağustos 1, 2017 tarihinde gönderildi @ EveryBodyFool@ Nero@ Dawn Yardımcı olabilir misin yada yardım etmicekse sorun yok. Gene de teşekkür ederim. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
Anyone 56 #3 Ağustos 1, 2017 tarihinde gönderildi sanırm o patlamanın sebebi void MagicInstance::Type6Cancel ile alakalı void MagicInstance::Type6Cancel(bool bForceRemoval /*= false*/) { if (!pSkillCaster->isPlayer() || !TO_USER(pSkillCaster)->isTransformed()) return; Packet result(WIZ_MAGIC_PROCESS, uint8(MAGIC_CANCEL_TRANSFORMATION)); TO_USER(pSkillCaster)->m_transformationType = TransformationNone; TO_USER(pSkillCaster)->Send(&result); TO_USER(pSkillCaster)->SetUserAbility(); TO_USER(pSkillCaster)->RemoveSavedMagic(nSkillID); TO_USER(pSkillCaster)->StateChangeServerDirect(3, ABNORMAL_NORMAL); TO_USER(pSkillCaster)->m_savedMagicMap.erase(TO_USER(pSkillCaster)->m_bAbnormalType); } bununla degiştir sorunun duzelir skype dan da yazdım ama burdan da konuya bakanlar aynı sıkıntı yasıyosa cozum u gorsun 😉 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
KODevelopers 438 #4 Konu Sahibi Ağustos 1, 2017 tarihinde gönderildi @ Anyone Teşekkür ederim Deniyorum.. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
EveryBodyFool 198 #5 Ağustos 1, 2017 tarihinde gönderildi Call Stack dan bak nereden geliyor oraya değişkenlere bak sonra belli olur patlama sebebi. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
KODevelopers 438 #6 Konu Sahibi Ağustos 1, 2017 tarihinde gönderildi @ EveryBodyFool Bakdım İşaretli veriyorum.. Mavi boyadım oraya kadar geliyor.. void CAISocket::RecvNpcAttack(Packet & pkt) { CNpc * pAttacker; Unit * pTarget; uint16 sAttackerID, sTargetID; int16 sDamage; uint8 bResult = ATTACK_FAIL; pkt >> sAttackerID >> sTargetID; pAttacker = g_pMain->GetNpcPtr(sAttackerID); pTarget = g_pMain->GetUnitPtr(sTargetID); if (pAttacker == nullptr || pAttacker->isPlayer() || pTarget == nullptr || pAttacker->isDead() || pTarget->isDead() || TO_USER(pTarget)->isTransformed() || (TO_USER(pTarget)->isTransformed() && TO_NPC(pAttacker)->GetDamage(TO_USER(pTarget)) != 1)) return; if (pAttacker->GetEventRoom() != pTarget->GetEventRoom()) return; // TODO: Wrap this up into its own virtual method sDamage = pAttacker->GetDamage(pTarget); if (sDamage > 0) { pTarget->HpChange(-(sDamage), pAttacker); if (pTarget->isDead()) bResult = ATTACK_TARGET_DEAD; else bResult = ATTACK_SUCCESS; // Every hit takes a little of the defender's armour durability. if (pTarget->isPlayer()) TO_USER(pTarget)->ItemWoreOut(DEFENCE, sDamage); } Packet result(WIZ_ATTACK, uint8(LONG_ATTACK)); result << bResult << sAttackerID << sTargetID; pAttacker->SendToRegion(&result); } Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
EveryBodyFool 198 #7 Ağustos 1, 2017 tarihinde gönderildi Hayır call stack çıktısını at onu diyorum. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
PENTAGRAM 921 #8 Ağustos 1, 2017 tarihinde gönderildi pTarget'in player olup olmadığını kontrol etmeden TO_USER() kullanarak unit pointerini playere cast etmişsin. pTarget Unit olduğu için o anda player,npc veya pet olabilir. Patladığı anda büyük ihtimalle pTarget pointerine bir npc ataması denk geliyor, sende kontrol etmeden direkt olarak cast ettiğin için NPC sınıfında var olmayan bir fonksiyonu, yani isTransformed() fonksiyonunu çağırıyorsun. Hatanın sebebi bu. Düzeltilmiş hali; if (pAttacker == nullptr || pAttacker->isPlayer() || pTarget == nullptr || pAttacker->isDead() || pTarget->isDead() || (pTarget->isPlayer () &&TO_USER(pTarget)->isTransformed()) || pTarget->isPlayer() && ((TO_USER(pTarget)->isTransformed() && TO_NPC(pAttacker)->GetDamage(TO_USER(pTarget)) != 1))) return; 1 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
KODevelopers 438 #9 Konu Sahibi Ağustos 2, 2017 tarihinde gönderildi Alıntı Hayır call stack çıktısını at onu diyorum. Tamam akşama bakıcagım.. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
KODevelopers 438 #10 Konu Sahibi Ağustos 2, 2017 tarihinde gönderildi Alıntı pTarget'in player olup olmadığını kontrol etmeden TO_USER() kullanarak unit pointerini playere cast etmişsin. pTarget Unit olduğu için o anda player,npc veya pet olabilir. Patladığı anda büyük ihtimalle pTarget pointerine bir npc ataması denk geliyor, sende kontrol etmeden direkt olarak cast ettiğin için NPC sınıfında var olmayan bir fonksiyonu, yani isTransformed() fonksiyonunu çağırıyorsun. Hatanın sebebi bu. Düzeltilmiş hali; if (pAttacker == nullptr || pAttacker->isPlayer() || pTarget == nullptr || pAttacker->isDead() || pTarget->isDead() || (pTarget->isPlayer () &&TO_USER(pTarget)->isTransformed()) || pTarget->isPlayer() && ((TO_USER(pTarget)->isTransformed() && TO_NPC(pAttacker)->GetDamage(TO_USER(pTarget)) != 1))) return; Teşekkür ederim bi bakam deneyim.. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
donz05 30 #11 Ağustos 30, 2017 tarihinde gönderildi keşke sana olduğu gibi sende başkalarına yardımcı olabilsen düzeltiyorum olmak istesen kira.... Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
KODevelopers 438 #12 Konu Sahibi Ağustos 30, 2017 tarihinde gönderildi @ donz05 olabilir fazla yardımcı olmuyor ama sıkındı yok 😕 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
donz05 30 #13 Ağustos 30, 2017 tarihinde gönderildi benim içinde sıkıntı yok sadece nasıl alıp nasıl vermediğini başkalarınında görmesini istedim yani iyiki forumu sen kurmamışsın yoksa 4 kişiden ibaret olurdu sadece bilenden alıp kimseye vermediğin için 😉 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
YNG 55 #14 Ağustos 30, 2017 tarihinde gönderildi Alıntı keşke sana olduğu gibi sende başkalarına yardımcı olabilsen düzeltiyorum olmak istesen kira.... Yardım Olayı İnsanın İçinden Gelen Bişey İçinden Gelirse Yardım Eder Biz Bu Yardımcı Olmuyor Su Yardımcı Olmuyor Gibi Düsünmüyoruz.. Örnek Ben İyi Zamanımdayım diyelim Benden İstediğin Herseyi Alırsın Skype Anında Cevap Alırsın Ama Kötü Zamanımda Birak Dosyayı Tırnagımı Bile Veremem Mantık Bile Sole Desen Mantıgı Bile Acıklamam Skype Naber Desen iyi diye Yazarım Gerisini Senden Naber Bile demem Biraz Sert Bir Acıklama Oldu K Bakmayın Benımde Yapım Bu Sekildedir. 1 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
donz05 30 #15 Ağustos 30, 2017 tarihinde gönderildi yng yapına saygı duyarım dostum kimseye zorla yardımcı ol deme hakkımız yok zaten konu yardımcı olmaktan ziyade karşındakini insan yerine koyup delikanlı gibi yardımcı olmak istemiyorum diyebilmek benimde yapım gereği "geliyorum" "bi sn" "bakıcam" diyip bitarafları oynayan insanlara uyuz olmam... delikanlı olucan bakamam kardeş diyip gidicen bukadar basit. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş