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

Ronark monu hk

Önerilen Mesajlar

Arkadaslar merhabalar

Benım ronark land monument k_monster tablosundaydı. Cz de hakeret halındeydı ben k-monster den sıldım k-npc ye ekledım. Cz de monument gorunuyor suan problem yok orc olarak kesebılıyorum
1- monu yu kesınce yukarıda ... monumentı kesti diye yazı yazmıyor ( monster tablosunda eklıyken yazıyordu)
2- humanlar hıc kesemıyor monumentı

Acaba neyı eksık yapmıs olabılırım yardımcı olurmusunuz

Tesekkurler

İletiyi paylaş


Link to post
Sitelerde Paylaş

1-src tarafında ronarkland monument procces ekli olmadıgı icin src tarafından notite yollamıyor

2-ronarkland monument in prosedurlerini src tarafına ekledikten sonra db de k npc de ekli olan ronarkland monument kesildiginde yukarıdan yazıda gecer iki ırk ta atak yapar monument in hareket etmesi ise girilen X Z koordinatları ile alakalı ufak bi update ile o sorunu cozebilirsin

3-ronarkland monument in id si sanırım 32578 di sen genede knpc den ara bul olması lazım koordinata ekle dene eger sonuc degişmezse dedigim gibi src tarafında monument procces ekli degildir.

4-sana tekrar bi tavsiye o src ile ugrasma at cope sana daha once karsılastıgın soruınlar hakkında danıstıgında o.m ile anlatmıstım src un durumunu kısacası ugrasmana degmez o dosya ile

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı
1-src tarafında ronarkland monument procces ekli olmadıgı icin src tarafından notite yollamıyor

2-ronarkland monument in prosedurlerini src tarafına ekledikten sonra db de k npc de ekli olan ronarkland monument kesildiginde yukarıdan yazıda gecer iki ırk ta atak yapar monument in hareket etmesi ise girilen X Z koordinatları ile alakalı ufak bi update ile o sorunu cozebilirsin

3-ronarkland monument in id si sanırım 32578 di sen genede knpc den ara bul olması lazım koordinata ekle dene eger sonuc degişmezse dedigim gibi src tarafında monument procces ekli degildir.

4-sana tekrar bi tavsiye o src ile ugrasma at cope sana daha once karsılastıgın soruınlar hakkında danıstıgında o.m ile anlatmıstım src un durumunu kısacası ugrasmana degmez o dosya ile


kardesım selam

1. madde src de unit.cpp de ve npc.cpp de eklı prosedurler vardır kontrol ettım monument 32578 k_npc ye kendım ekledım kordınatlarıda var npc yerınde zaten suan humanlar kesemıyor orc lar kesıyor orclar kesse bıle yukarıdan yazı gecmıyor

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı
kardesım selam

1. madde src de unit.cpp de ve npc.cpp de eklı prosedurler vardır kontrol ettım monument 32578 k_npc ye kendım ekledım kordınatlarıda var npc yerınde zaten suan humanlar kesemıyor orc lar kesıyor orclar kesse bıle yukarıdan yazı gecmıyor


öncelikle monuyu tekrar k_npc ekle

srcden

unit.cpp -> ronark_land aratıp

burayla değiştir

m_zoneType = ZoneAbilityPVP;
m_zoneFlags = ZF_ATTACK_OTHER_NATION;
m_byMinLevel = MIN_LEVEL_RONARK_LAND, m_byMaxLevel = MAX_LEVEL;

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı
öncelikle monuyu tekrar k_npc ekle

srcden

unit.cpp -> ronark_land aratıp

burayla değiştir

m_zoneType = ZoneAbilityPVP;
m_zoneFlags = ZF_ATTACK_OTHER_NATION;
m_byMinLevel = MIN_LEVEL_RONARK_LAND, m_byMaxLevel = MAX_LEVEL;


kardesım selam

1- monu k_npc de eklı
2- case ZONE_RONARK_LAND:
m_zoneType = ZoneAbilityPVP;
m_zoneFlags = ZF_ATTACK_OTHER_NATION;
m_byMinLevel = MIN_LEVEL_RONARK_LAND, m_byMaxLevel = MAX_LEVEL;
break;

şeklınde eklı zaten kontrol ettım onu

İletiyi paylaş


Link to post
Sitelerde Paylaş
void CNpc::OnDeathProcess(Unit *pKiller) bak ordan mantığı anlayabilirsin

2. Monuda ırk olayı vardır karus keserse npc update yapar bu sefer karuslar atak yapamaz

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı
void CNpc::OnDeathProcess(Unit *pKiller) bak ordan mantığı anlayabilirsin

2. Monuda ırk olayı vardır karus keserse npc update yapar bu sefer karuslar atak yapamaz


dostum selam bılıyorum mantıga baktım ve sourcede cz monu process eklı gorunuyor benım yaptıgım tek sey db de k_monster de olan ronarkland monumentı k_npc tablosuna aldım kalan bısı degıstırmedım

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ş
Alıntı
..


@ byxox Gel paylaştığın kodu beraber inceleyelim.


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

// Bu npcnin ırkını, kesen kişinin ırkına geçir
g_pMain->NpcUpdate(GetProtoID(), m_bMonster, pUser->GetNation());
// Eğer kesen kişinin ırkı KARUS ise
if (pUser->GetNation() == KARUS)
{
// Eğer kesilen NPC'nin sPictureID(sPid) değeri 30092 ise
if (GetSpid() == 30092)
{
// sKillMonu stringinde bulunan yazıyı anons olarak geç
g_pMain->SendAnnouncement(sKillMonu.c_str());
// BLUE_TREASURE_CHEST itemini kesen kişiye ver
pUser->GiveItem(BLUE_TREASURE_CHEST,1);
// Kesen kişiye 150 NP ver
pUser->SendLoyaltyChange(150);
}
else
{
// sPid 30092 değilse,
// sRecoMonu stringindeki yazıyı anons olarak geç
g_pMain->SendAnnouncement(sRecoMonu.c_str());
}
}
else
{
// Kesen kişinin ırkı KARUS değilse (ELMORAD, TARAFSIZ, CANAVAR vs. hepsini kapsıyor)
// Kesilen NPC'nin sPictureID'si 30091 ise
if (GetSpid() == 30091)
{
// sKillMonu stringinde bulunan yazıyı anons olarak geç
g_pMain->SendAnnouncement(sKillMonu.c_str());
// BLUE_TREASURE_CHEST itemini kesen kişiye ver
pUser->GiveItem(BLUE_TREASURE_CHEST,1);
// Kesen kişiye 150 NP ver
pUser->SendLoyaltyChange(150);
}
else
{
// sPid 30091 değilse,
// sRecoMonu stringindeki yazıyı anons olarak geç
g_pMain->SendAnnouncement(sRecoMonu.c_str());
}
}
}



Öncelikle, bu kodu şu şekilde sadeleştirebiliriz.


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

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

// Bu npcnin ırkını, kesen kişinin ırkına geçir
g_pMain->NpcUpdate(GetProtoID(), m_bMonster, pUser->GetNation());

if(((pUser->GetNation() == KARUS) && (GetSpid() == 30092)) || ((pUser->GetNation() == ELMORAD) && (GetSpid() == 30091))){
// sKillMonu stringinde bulunan yazıyı anons olarak geç
g_pMain->SendAnnouncement(sKillMonu.c_str());
// BLUE_TREASURE_CHEST itemini kesen kişiye ver
pUser->GiveItem(BLUE_TREASURE_CHEST,1);
// Kesen kişiye 150 NP ver
pUser->SendLoyaltyChange(150);
}else{
// sRecoMonu stringindeki yazıyı anons olarak geç
g_pMain->SendAnnouncement(sRecoMonu.c_str());
}
}


Şimdi, sadeleşmiş hali üzerinden bakalım. Bu kodun 'monument kesildi' anonsunu geçmemesi için 2 koşul var.
1. -> Kesen user KARUS iken Monument'in SPID değerinin 30092 olmaması
2. -> Kesen user ELMORAD iken Monument'in SPID değerinin 30091 olmaması

Yukarıdaki iki koşul gerçekleşmezse, 'monument recovered' anonsu geçecek. Yani, bu fonksiyon eğer tetikleniyor ise,
öyle ya da böyle, anons geçmesi lazım.

Fonksiyonun başına breakpoint koyarak tetiklendiğinden emin ol. Monument kesildiğinde tetiklenmiyor ise, bu fonksiyonu çağıran noktaları bul ve
tetiklenmemesinin sebebini belirle.

Dipnot olarak, aynı konuları başka forumlarda da paylaştığını görüyorum, tarafını seç. Taraf olmayan bertaraf olur :cool:

Kolay gelsin.

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı
@ byxox Gel paylaştığın kodu beraber inceleyelim.
Spoiler



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

// Bu npcnin ırkını, kesen kişinin ırkına geçir
g_pMain->NpcUpdate(GetProtoID(), m_bMonster, pUser->GetNation());
// Eğer kesen kişinin ırkı KARUS ise
if (pUser->GetNation() == KARUS)
{
// Eğer kesilen NPC'nin sPictureID(sPid) değeri 30092 ise
if (GetSpid() == 30092)
{
// sKillMonu stringinde bulunan yazıyı anons olarak geç
g_pMain->SendAnnouncement(sKillMonu.c_str());
// BLUE_TREASURE_CHEST itemini kesen kişiye ver
pUser->GiveItem(BLUE_TREASURE_CHEST,1);
// Kesen kişiye 150 NP ver
pUser->SendLoyaltyChange(150);
}
else
{
// sPid 30092 değilse,
// sRecoMonu stringindeki yazıyı anons olarak geç
g_pMain->SendAnnouncement(sRecoMonu.c_str());
}
}
else
{
// Kesen kişinin ırkı KARUS değilse (ELMORAD, TARAFSIZ, CANAVAR vs. hepsini kapsıyor)
// Kesilen NPC'nin sPictureID'si 30091 ise
if (GetSpid() == 30091)
{
// sKillMonu stringinde bulunan yazıyı anons olarak geç
g_pMain->SendAnnouncement(sKillMonu.c_str());
// BLUE_TREASURE_CHEST itemini kesen kişiye ver
pUser->GiveItem(BLUE_TREASURE_CHEST,1);
// Kesen kişiye 150 NP ver
pUser->SendLoyaltyChange(150);
}
else
{
// sPid 30091 değilse,
// sRecoMonu stringindeki yazıyı anons olarak geç
g_pMain->SendAnnouncement(sRecoMonu.c_str());
}
}
}



Öncelikle, bu kodu şu şekilde sadeleştirebiliriz.


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

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

// Bu npcnin ırkını, kesen kişinin ırkına geçir
g_pMain->NpcUpdate(GetProtoID(), m_bMonster, pUser->GetNation());

if(((pUser->GetNation() == KARUS) && (GetSpid() == 30092)) || ((pUser->GetNation() == ELMORAD) && (GetSpid() == 30091))){
// sKillMonu stringinde bulunan yazıyı anons olarak geç
g_pMain->SendAnnouncement(sKillMonu.c_str());
// BLUE_TREASURE_CHEST itemini kesen kişiye ver
pUser->GiveItem(BLUE_TREASURE_CHEST,1);
// Kesen kişiye 150 NP ver
pUser->SendLoyaltyChange(150);
}else{
// sRecoMonu stringindeki yazıyı anons olarak geç
g_pMain->SendAnnouncement(sRecoMonu.c_str());
}
}


Şimdi, sadeleşmiş hali üzerinden bakalım. Bu kodun 'monument kesildi' anonsunu geçmemesi için 2 koşul var.
1. -> Kesen user KARUS iken Monument'in SPID değerinin 30092 olmaması
2. -> Kesen user ELMORAD iken Monument'in SPID değerinin 30091 olmaması

Yukarıdaki iki koşul gerçekleşmezse, 'monument recovered' anonsu geçecek. Yani, bu fonksiyon eğer tetikleniyor ise,
öyle ya da böyle, anons geçmesi lazım.

Fonksiyonun başına breakpoint koyarak tetiklendiğinden emin ol. Monument kesildiğinde tetiklenmiyor ise, bu fonksiyonu çağıran noktaları bul ve
tetiklenmemesinin sebebini belirle.

Dipnot olarak, aynı konuları başka forumlarda da paylaştığını görüyorum, tarafını seç. Taraf olmayan bertaraf olur :cool:

Kolay gelsin.



Tarafımız ve duruşumuz belli dostum [not : konuyu bılerek actım aldıgım yorumu da görmüşsündür. sonuç olarak hiç birşey bilmediğini ortaya çıkarmak için yaptım ve öyle de oldu :) ]

monu için dedıklerını deneyıp bılgı verecegım cok tesekkurler
-- mesaja ek olarak --
Merhabalar

yaptıklarımı sırayla yazayım

1- src de kodu yazdım oyunda gameserver log dan baktıgımda [ NPC - 0:27:57 ] Killer=GMbyxox,SID=32578,Target=Ronark Land Monument,Zone=71,X=1014,Z=1008 npc yı kestıgım gorunuyor fakat yukarıdan herhangı bır yazı geçmedı

2- 32578 olan monu yu k_monster e gerı ekledım ve gm charla kestıgımde yukarıdan yazı cıkıyor human ve orc tek tek denedım. monster gıbı hareket etmesın dıye atakrange ve tracıngrange yı 0 yaptım suanda atack yapmıyor etrafındakılere şuandakı problem skıll yemıyor monument sadece R ıle vurabılıyoruz monster tablosunda oldugu ıcınmı acaba yoksa baska bırsey yapmama gerek varmıdır

teşekkurler

İletiyi paylaş


Link to post
Sitelerde Paylaş

×
×
  • Yeni Oluştur...