byxox 67 #1 Oluşturuldu: Ekim 22, 2017 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 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
Anyone 56 #2 Ekim 22, 2017 tarihinde gönderildi 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 1 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
byxox 67 #3 Konu Sahibi Ekim 22, 2017 tarihinde gönderildi 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 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
aliemre123 25 #4 Ekim 22, 2017 tarihinde gönderildi 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; 1 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
byxox 67 #5 Konu Sahibi Ekim 23, 2017 tarihinde gönderildi 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 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
Anyone 56 #6 Ekim 23, 2017 tarihinde gönderildi kardesim senin src unda czmonu procces yok ondan bahsediyorum ben sana Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
HKS 341 #7 Ekim 23, 2017 tarihinde gönderildi void CNpc::OnDeathProcess(Unit *pKiller) bak ordan mantığı anlayabilirsin2. Monuda ırk olayı vardır karus keserse npc update yapar bu sefer karuslar atak yapamaz 1 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
byxox 67 #8 Konu Sahibi Ekim 23, 2017 tarihinde gönderildi 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()); } } } 1 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
PENTAGRAM 926 #9 Ekim 25, 2017 tarihinde gönderildi 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. 2 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
byxox 67 #10 Konu Sahibi Ekim 25, 2017 tarihinde gönderildi Alıntı@ byxox Gel paylaştığın kodu beraber inceleyelim.Spoilervoid 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 --Merhabalaryaptıklarımı sırayla yazayım1- 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ırteşekkurler Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
byxox 67 #11 Konu Sahibi Ekim 27, 2017 tarihinde gönderildi arkadaşlar monu ya sadece R ıle vurabılıyorum varmı yardımcı olabılcek Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş