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

CZ monument sorunu

Önerilen Mesajlar

Merhaba üstadlar CZ monument kesilince yukarıdan yazı geçmiyor ve kesen ırk kestikce tekrar kesebiliyor. kesen IRK a geçmiyor yani ne yapabilirim

simdiden teşekkürler.

İletiyi paylaş


Link to post
Sitelerde Paylaş
Admin

void CNpc::OnDeathProcess(Unit * pKiller)


fonksiyonu içerisinde aşağıdaki kontrol yok ise ekleyeceksin.


if (!m_bMonster)
{
switch (m_tNpcType)
{
case NPC_BIFROST_MONUMENT:
bUser->BifrostProcess(bUser);
break;
case NPC_PVP_MONUMENT:
PVPMonumentProcess(bUser);
break;
case NPC_CZ_MONUMENT:
CZMonumentProcess(bUser);
break;
case NPC_BORDER_MONUMENT:
BorderMonumentProcess(bUser);
break;
case NPC_BATTLE_MONUMENT:
BattleMonumentProcess(bUser);
break;
case NPC_HUMAN_MONUMENT:
NationMonumentProcess(bUser);
break;
case NPC_KARUS_MONUMENT:
NationMonumentProcess(bUser);
break;
case NPC_DESTROYED_ARTIFACT:
bUser->CastleSiegeWarProcess(bUser);
break;
}
}


Daha sonra aşağıdaki fonksiyon yok ise ekleyeceksin.


void CNpc::CZMonumentProcess(CUser *pUser)
{
if (pUser == nullptr)
return;

std::string sKillMonu;
std::string sRecoMonu;

sKillMonu = string_format("%s has destroyed the %s at Ronark Land!",pUser->GetName().c_str(),GetName().c_str());
sRecoMonu = string_format("%s has recovered the %s at Ronark Land!",pUser->GetName().c_str(),GetName().c_str());

s_pGameMain->NpcUpdate(GetProtoID(), m_bMonster, pUser->GetNation());

if (pUser->GetNation() == E_NATION::E_NATION_KARUS)
{
if (GetSpid() == 30092)
{
s_pGameMain->SendAnnouncement(sKillMonu.c_str());
pUser->GiveItem(BLUE_TREASURE_CHEST,1);
pUser->SendLoyaltyChange(150);
}
else
{
s_pGameMain->SendAnnouncement(sRecoMonu.c_str());
}
}
else
{
if (GetSpid() == 30091)
{
s_pGameMain->SendAnnouncement(sKillMonu.c_str());
pUser->GiveItem(BLUE_TREASURE_CHEST,1);
pUser->SendLoyaltyChange(150);
}
else
{
s_pGameMain->SendAnnouncement(sRecoMonu.c_str());
}
}
}

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı

void CNpc::OnDeathProcess(Unit * pKiller)


fonksiyonu içerisinde aşağıdaki kontrol yok ise ekleyeceksin.


if (!m_bMonster)
{
switch (m_tNpcType)
{
case NPC_BIFROST_MONUMENT:
bUser->BifrostProcess(bUser);
break;
case NPC_PVP_MONUMENT:
PVPMonumentProcess(bUser);
break;
case NPC_CZ_MONUMENT:
CZMonumentProcess(bUser);
break;
case NPC_BORDER_MONUMENT:
BorderMonumentProcess(bUser);
break;
case NPC_BATTLE_MONUMENT:
BattleMonumentProcess(bUser);
break;
case NPC_HUMAN_MONUMENT:
NationMonumentProcess(bUser);
break;
case NPC_KARUS_MONUMENT:
NationMonumentProcess(bUser);
break;
case NPC_DESTROYED_ARTIFACT:
bUser->CastleSiegeWarProcess(bUser);
break;
}
}


Daha sonra aşağıdaki fonksiyon yok ise ekleyeceksin.


void CNpc::CZMonumentProcess(CUser *pUser)
{
if (pUser == nullptr)
return;

std::string sKillMonu;
std::string sRecoMonu;

sKillMonu = string_format("%s has destroyed the %s at Ronark Land!",pUser->GetName().c_str(),GetName().c_str());
sRecoMonu = string_format("%s has recovered the %s at Ronark Land!",pUser->GetName().c_str(),GetName().c_str());

s_pGameMain->NpcUpdate(GetProtoID(), m_bMonster, pUser->GetNation());

if (pUser->GetNation() == E_NATION::E_NATION_KARUS)
{
if (GetSpid() == 30092)
{
s_pGameMain->SendAnnouncement(sKillMonu.c_str());
pUser->GiveItem(BLUE_TREASURE_CHEST,1);
pUser->SendLoyaltyChange(150);
}
else
{
s_pGameMain->SendAnnouncement(sRecoMonu.c_str());
}
}
else
{
if (GetSpid() == 30091)
{
s_pGameMain->SendAnnouncement(sKillMonu.c_str());
pUser->GiveItem(BLUE_TREASURE_CHEST,1);
pUser->SendLoyaltyChange(150);
}
else
{
s_pGameMain->SendAnnouncement(sRecoMonu.c_str());
}
}
}


teşekkurler aynı hatayla bende boğuşuyordum

İletiyi paylaş


Link to post
Sitelerde Paylaş
Admin
Alıntı
Teşekkür ederim
-- mesaja ek olarak --
üstad bu kodlar bende var sourcede ekli evet buna rağmen atak yapmama sorunu var.


Böyle durumlarda görsel ekleyin ki tam ne demek istediğinizi anlayalım.

İletiyi paylaş


Link to post
Sitelerde Paylaş
Admin
Alıntı

bu keserken üstad
vJlXdD.jpg
buda kestikten sonra..
a1adqd.jpg

 


Olması gereken bu zaten sen ne istiyorsun ki?
Monument öldükten sonra NpcUpdate ile öldüren kişinin ırkına geçer böylelikle aynı ırk bir daha kesemez.

Daha iyi anlaman için Karus ırkı monumenti keserse karus ırkı monumente attack yapamaz. Elmorad ırkı keserse elmorad ırkı attack yapamaz ama karşı ırk yapabilir.

 

İletiyi paylaş


Link to post
Sitelerde Paylaş

işte ustad sorun burada mesela KARUS kestiği zaman KARUS ırkı tekrar atak yapabiliyor.
KARUS kestiği zaman yukarıdan yazı geçmiyor yani sürekli kesebiliyor her iki ırk ta

İletiyi paylaş


Link to post
Sitelerde Paylaş
Admin
Alıntı
işte ustad sorun burada mesela KARUS kestiği zaman KARUS ırkı tekrar atak yapabiliyor.
KARUS kestiği zaman yukarıdan yazı geçmiyor yani sürekli kesebiliyor her iki ırk ta


Başta diyorsun ki attack yapılmıyor şimdi de bir daha kestiğinde bir daha kesiliyor bir dediğin bir dediğini tutmuyor.

İletiyi paylaş


Link to post
Sitelerde Paylaş

üstad o yukarda bahsettiklerinden switch case olayını anlamadım yalnız benim Sourcedeki kodlar şu şekilde..


void CNpc::CZMonumentProcess(CUser *pUser)
{
if (pUser == nullptr)
return;

std::string sKillMonu;
std::string sRecoMonu;

sKillMonu = string_format("%s has destroyed the %s at Ronark Land!",pUser->GetName().c_str(),GetName().c_str());
sRecoMonu = string_format("%s has recovered the %s at Ronark Land!",pUser->GetName().c_str(),GetName().c_str());

g_pMain->NpcUpdate(GetProtoID(), m_bMonster, pUser->GetNation());

if (pUser->GetNation() == KARUS)
{
if (GetSpid() == 30092)
{
g_pMain->SendAnnouncement(sKillMonu.c_str());
pUser->GiveItem(BLUE_TREASURE_CHEST,1);
pUser->SendLoyaltyChange(150);
}
else
{
g_pMain->SendAnnouncement(sRecoMonu.c_str());
}
}
else
{
if (GetSpid() == 30091)
{
g_pMain->SendAnnouncement(sKillMonu.c_str());
pUser->GiveItem(BLUE_TREASURE_CHEST,1);
pUser->SendLoyaltyChange(150);
}
else
{
g_pMain->SendAnnouncement(sRecoMonu.c_str());
}
}
}

İletiyi paylaş


Link to post
Sitelerde Paylaş
Admin

SQL açacaksın database içerisinden K_NPC değerlerini kontrol edeceksin.
Aşağıdaki vereceğim kodu uyguladıktan sonra karşına çıkan değerleri kontrol et.

Kodu uyguladıktan sonra yapacakların;

  • Eğer karşına herhangi bir sonuç çıkmıyorsa senin kestiğin monumentlerin byType değerleri 220 eşit değil ve bunun için yukarıdan notice geçmiyor.
  • Eğer karşına değer gelir ve sPid değerleri 30092 ve 30091 değerine eşit değilse bu yüzden yukarıdan notice atmıyor.




SELECT * FROM K_NPC WHERE byType = '220'

İletiyi paylaş


Link to post
Sitelerde Paylaş
LOXZLo.jpg

buyur ustad DB tarafında sıkıntı yok sanırım, ayrıca SOURCE'de monuyu kestiğin zaman 150 NP gitme olayıda ekli kesince 150 NP geliyor ustad valla çözemedim sıkıntıyı ya
-- mesaja ek olarak --
5G3g9D.jpg

buda SRC deki czmonumentprocess içerisinden bir görüntü ustad, senide yoruyorum kusura bakma..

İletiyi paylaş


Link to post
Sitelerde Paylaş

×
×
  • Yeni Oluştur...