Jump to content
Araştır
  • Diğer seçenekler ...
Sonuçları bul ...
Sonuçları bul ...
KODevelopers

21xx TransFornationNone Patlama Sorun var

Önerilen Mesajlar

30 35 dk falan sürünce.

saniye saniye GameServer patlıyor neden kaynaklıyor..

r2agY1.png
 


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);

}

İletiyi paylaş


Link to post
Sitelerde Paylaş

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 😉

İletiyi paylaş


Link to post
Sitelerde Paylaş

@ 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);
}

İletiyi paylaş


Link to post
Sitelerde Paylaş

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;

İletiyi paylaş


Link to post
Sitelerde Paylaş
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..

 

İletiyi paylaş


Link to post
Sitelerde Paylaş

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 😉

İletiyi paylaş


Link to post
Sitelerde Paylaş
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.

 

İletiyi paylaş


Link to post
Sitelerde Paylaş

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.

İletiyi paylaş


Link to post
Sitelerde Paylaş

×
×
  • Yeni Oluştur...