CerfiN 67 #1 Oluşturuldu: Kasım 13, 2017 Uzun zamandır source a bakmaya fırsatım olmadı ufaktan ufaktan bakıyorum göz ucuyla. Şu çalışmayan uyutma skilleri var priestin yavaş yavaş onunla uğraşıyorum. Aklımda ufak bi mantık geliştirdim GameServer'dan AI'ye paket atarak npc lerin ve mobların durumlarını değiştirip skilli çalıştırabilirim diye. Bi kaç fonksiyon yazmayı denedim kendimce yeni bir paket oluşturup da pek bi çözüme ulaşamadım. Yapan arkadaşlar nasıl bir yol izlediklerini yazabilirler mi bende eksikleri görüp ona göre hareket edeyim. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
PENTAGRAM 920 #2 Kasım 13, 2017 tarihinde gönderildi Alıntı Uzun zamandır source a bakmaya fırsatım olmadı ufaktan ufaktan bakıyorum göz ucuyla. Şu çalışmayan uyutma skilleri var priestin yavaş yavaş onunla uğraşıyorum. Aklımda ufak bi mantık geliştirdim GameServer'dan AI'ye paket atarak npc lerin ve mobların durumlarını değiştirip skilli çalıştırabilirim diye. Bi kaç fonksiyon yazmayı denedim kendimce yeni bir paket oluşturup da pek bi çözüme ulaşamadım. Yapan arkadaşlar nasıl bir yol izlediklerini yazabilirler mi bende eksikleri görüp ona göre hareket edeyim. Önce yeni bir opcode tanımla. Örneğin; #define AG_MONSTER_SET_SLEEP 0xCC Daha sonra paket yapısını oluştur. Packet result(AG_MONSTER_SET_SLEEP); result <GetID()) ; // Uyutulacak/uyandırılacak npc idsi result << uint8(1); // 1 = uyuyor / 0 = uyanık g_pMain->Send2AI(result); // ai server'a gönder (pnpc-> AIServer paket handler fonksiyonuna yeni opcode için case ekle case AG_MONSTER_SET_SLEEP: { uint16 sTargetNpcID = pkt.read(); uint8 status = pkt.read(); CNpc * pNpc = g_AIServer->GetNpcPtr(sTargetNpcID); if(!pNpc) return; pNpc->m_NpcState = status == 1 ? NPC_SLEEPING:NPC_STANDING; } break; Fonksiyon adları farklılık gösterebilir, tamamen kafamda kurguladım. Tabi, ufak bir detay daha var. NPC'nin bulunduğu regiona 'zzz' efektini göstermek amacıyla WIZ_STATE_CHANGE paketini de göndermen lazım. Şimdiden kolay gelsin. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
CerfiN 67 #3 Konu Sahibi Kasım 13, 2017 tarihinde gönderildi Alıntı Önce yeni bir opcode tanımla. Örneğin; #define AG_MONSTER_SET_SLEEP 0xCC Daha sonra paket yapısını oluştur. Packet result(AG_MONSTER_SET_SLEEP); result <GetID()) ; // Uyutulacak/uyandırılacak npc idsi result << uint8(1); // 1 = uyuyor / 0 = uyanık g_pMain->Send2AI(result); // ai server'a gönder (pnpc-> AIServer paket handler fonksiyonuna yeni opcode için case ekle case AG_MONSTER_SET_SLEEP: { uint16 sTargetNpcID = pkt.read(); uint8 status = pkt.read(); CNpc * pNpc = g_AIServer->GetNpcPtr(sTargetNpcID); pNpc->m_NpcState = status == 1 ? NPC_SLEEPING:NPC_STANDING; } break; Fonksiyon adları farklılık gösterebilir, tamamen kafamda kurguladım. Tabi, ufak bir detay daha var. NPC'nin bulunduğu regiona 'zzz' efektini göstermek amacıyla WIZ_STATE_CHANGE paketini de göndermen lazım. Şimdiden kolay gelsin. Teşekkür ederim bu bilgiler doğrultusunda çalışmaya devam ediyorum. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
CerfiN 67 #4 Konu Sahibi Kasım 14, 2017 tarihinde gönderildi ExecuteType7 fonksiyonuna şu şekilde ekledim; else if (pType->bTargetChange == 2 && pSkillTarget->isNPC()) { Packet result(AG_MONSTER_SET_SLEEP); result << uint16(pSkillTarget->GetID()); result << uint8(1); g_pMain->Send_AIServer(&result); return true; Ardından AI>GameSocket.cpp ye HandlePacket kısmına şu şekilde bir fonksiyon oluşturarak ekledim; case AG_MONSTER_SET_SLEEP: StateChangeNpc(pkt); break; En alta da fonksiyonu ekledim; void CGameSocket::StateChangeNpc(Packet & pkt) { uint16 sTargetNpcID = pkt.read(); uint8 status = pkt.read(); CNpc * pNpc = g_pMain->GetNpcPtr(sTargetNpcID); if (pNpc) pNpc->m_NpcState = status == 1 ? NPC_SLEEPING:NPC_STANDING; } Ancak çalışmadı. Biraz kurcaladığımda ise skilli bastığım mobun bir anda yeri değişiyor. Gözden kaçırdığım kısım neresi acaba? Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
PENTAGRAM 920 #5 Kasım 14, 2017 tarihinde gönderildi Alıntı ExecuteType7 fonksiyonuna şu şekilde ekledim; else if (pType->bTargetChange == 2 && pSkillTarget->isNPC()) { Packet result(AG_MONSTER_SET_SLEEP); result << uint16(pSkillTarget->GetID()); result << uint8(1); g_pMain->Send_AIServer(&result); return true; Ardından AI>GameSocket.cpp ye HandlePacket kısmına şu şekilde bir fonksiyon oluşturarak ekledim; case AG_MONSTER_SET_SLEEP: StateChangeNpc(pkt); break; En alta da fonksiyonu ekledim; void CGameSocket::StateChangeNpc(Packet & pkt) { uint16 sTargetNpcID = pkt.read(); uint8 status = pkt.read(); CNpc * pNpc = g_pMain->GetNpcPtr(sTargetNpcID); if (pNpc) pNpc->m_NpcState = status == 1 ? NPC_SLEEPING:NPC_STANDING; } Ancak çalışmadı. Biraz kurcaladığımda ise skilli bastığım mobun bir anda yeri değişiyor. Gözden kaçırdığım kısım neresi acaba? NPC_SLEEPING durumu için tanımlanmış bir fonksiyon var mı? Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
CerfiN 67 #6 Konu Sahibi Kasım 14, 2017 tarihinde gönderildi time_t CNpc::NpcSleeping() { if (UNIXTIME < m_tFaintingTime) return m_sStandTime; m_NpcState = NPC_SLEEPING; m_tFaintingTime = 0; Packet result(AG_MONSTER_SET_SLEEP); result << uint16(GetID()) << uint8(1); return false; } Bu fonksiyon var dı paket eklenmemişti şimdi ekledim. Tekli skilli kullandığımda mob duruyor ama geri çözülmüyor o şekilde kalıyor. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
Terry 19 #7 Kasım 14, 2017 tarihinde gönderildi Alıntı time_t CNpc::NpcSleeping() { if (UNIXTIME < m_tFaintingTime) return m_sStandTime; m_NpcState = NPC_SLEEPING; m_tFaintingTime = 0; Packet result(AG_MONSTER_SET_SLEEP); result << uint16(GetID()) << uint8(1); return false; } Bu fonksiyon var dı paket eklenmemişti şimdi ekledim. Tekli skilli kullandığımda mob duruyor ama geri çözülmüyor o şekilde kalıyor. Timer'e bağla type7check filan diye. süresi bitince eski standing yapsın. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
CerfiN 67 #8 Konu Sahibi Kasım 14, 2017 tarihinde gönderildi Alıntı Timer'e bağla type7check filan diye. süresi bitince eski standing yapsın. Olabilir skill sonunda eski state'e dönmeside olabilir kurcalıyorum henüz. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
CerfiN 67 #9 Konu Sahibi Kasım 14, 2017 tarihinde gönderildi WIZ_STATE_CHANGE paketini göndericem ama içinde bir çok case var StateChangeServerDirect fonksiyonu altında. Yeni bir case oluşturacağım da efekt vermesi açısından ne yazacağım bilmiyorum kastettiğiniz bu kısım mı acaba?@ PENTAGRAM Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
PENTAGRAM 920 #10 Kasım 14, 2017 tarihinde gönderildi Alıntı time_t CNpc::NpcSleeping() { if (UNIXTIME < m_tFaintingTime) return m_sStandTime; m_NpcState = NPC_SLEEPING; m_tFaintingTime = 0; Packet result(AG_MONSTER_SET_SLEEP); result << uint16(GetID()) << uint8(1); return false; } Bu fonksiyon var dı paket eklenmemişti şimdi ekledim. Tekli skilli kullandığımda mob duruyor ama geri çözülmüyor o şekilde kalıyor. Paket oraya eklenmeyecek, ki gördüğün üzere AIServer içerisindesin, ve yarattığın paketi göndermemişsin dahi. Aşağıdaki blogu fonksiyondan kaldır. Packet result(AG_MONSTER_SET_SLEEP); result << uint16(GetID()) << uint8(1); return false; NPC'yi tekrardan uyandırmak için yine gameserver'dan paket göndermen gerekecek. NPC saldırı aldığında, AIServer'a paket gidiyor olması lazım zaten. O paketin handler fonksiyonu içerisinde, eğer NPC durumu sleeping ise, durumu NPC_STANDING olarak ayarlamalısın. 1 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
CerfiN 67 #11 Konu Sahibi Kasım 15, 2017 tarihinde gönderildi Alıntı Paket oraya eklenmeyecek, ki gördüğün üzere AIServer içerisindesin, ve yarattığın paketi göndermemişsin dahi. Aşağıdaki blogu fonksiyondan kaldır. Packet result(AG_MONSTER_SET_SLEEP); result << uint16(GetID()) << uint8(1); return false; NPC'yi tekrardan uyandırmak için yine gameserver'dan paket göndermen gerekecek. NPC saldırı aldığında, AIServer'a paket gidiyor olması lazım zaten. O paketin handler fonksiyonu içerisinde, eğer NPC durumu sleeping ise, durumu NPC_STANDING olarak ayarlamalısın. NPC'nin saldırı aldığında AI'ye nasıl paket gönderdiğini bulamadım. Mobları uyuttuktan sonra ilk dalışımda oda bana dalıyor ama tekrar uyuttuğumda dalmıyor. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
y396com 0 #12 Kasım 18, 2017 tarihinde gönderildi Hey friend,can you tell me how to cancel the 'zzz' effect? i just know how to send 'zzz' effect to the monster。Thanks.:) Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
CerfiN 67 #13 Konu Sahibi Kasım 18, 2017 tarihinde gönderildi Hey friend,can you tell me how to cancel the 'zzz' effect? i just know how to send 'zzz' effect to the monster。Thanks.:) How do I send the effect I have not done it yet :) Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
PENTAGRAM 920 #14 Kasım 19, 2017 tarihinde gönderildi AlıntıNPC'nin saldırı aldığında AI'ye nasıl paket gönderdiğini bulamadım. Mobları uyuttuktan sonra ilk dalışımda oda bana dalıyor ama tekrar uyuttuğumda dalmıyor. Aslında AI'ye zaten paket gidiyor. O yüzden saldırı aldığında, AIServer'a otomatik olarak NPC'yi uyandırmasının söyleyebilirsin. Kendi altyapımda aiserver-gameserver birleşik olduğu için, elimde var olan başka bir source üzerinden anlatacağım. void CNpc::RecvAttackReq(int nDamage, uint16 sAttackerID, AttributeType attributeType /*= AttributeNone*/) { if (isDead() || nDamage return; Unit * pAttacker = g_pMain->GetUnitPtr(sAttackerID); if (pAttacker != nullptr && pAttacker->isPlayer()) { Guard lock(m_damageListLock); m_DamagedUserList[pAttacker->GetID()] += nDamage; } m_TotalDamage += nDamage; HpChange(-nDamage, pAttacker, false); if (pAttacker == nullptr) return; if (!pAttacker->isPlayer()) { ChangeNTarget(TO_NPC(pAttacker)); return; } if (attributeType == AttributeLightning && m_NpcState != NPC_FAINTING) { int iRandom = myrand(1, 100); int iLightningR = (int)(10 + (40 - 40 * ((double)m_sLightningR / 80))); if (COMPARE(iRandom, 0, iLightningR)) { m_NpcState = NPC_FAINTING; m_Delay = 0; m_tFaintingTime = UNIXTIME; } else { ChangeTarget(0, TO_USER(pAttacker)); } } } Yukarıdaki fonksiyonun sonuna if(m_NpcState == NPC_SLEEPING){ m_NpcState = NPC_STANDING; ChangeTarget(0, TO_USER(pAttacker)); } kodunu eklersen, NPC saldırı aldığında NPC state eğer NPC_SLEEPING ise, state NPC_STANDING olarak güncellenecek, ve daha sonra ChangeTarget fonksiyonu tetiklenecektir (NPC_ATTACKING, NPC_FIGHTING bu fonksiyon tarafından ayarlanır) Sonuç : Spoiler void CNpc::RecvAttackReq(int nDamage, uint16 sAttackerID, AttributeType attributeType /*= AttributeNone*/) { if (isDead() || nDamage return; Unit * pAttacker = g_pMain->GetUnitPtr(sAttackerID); if (pAttacker != nullptr && pAttacker->isPlayer()) { Guard lock(m_damageListLock); m_DamagedUserList[pAttacker->GetID()] += nDamage; } m_TotalDamage += nDamage; HpChange(-nDamage, pAttacker, false); if (pAttacker == nullptr) return; if (!pAttacker->isPlayer()) { ChangeNTarget(TO_NPC(pAttacker)); return; } if (attributeType == AttributeLightning && m_NpcState != NPC_FAINTING) { int iRandom = myrand(1, 100); int iLightningR = (int)(10 + (40 - 40 * ((double)m_sLightningR / 80))); if (COMPARE(iRandom, 0, iLightningR)) { m_NpcState = NPC_FAINTING; m_Delay = 0; m_tFaintingTime = UNIXTIME; } else { ChangeTarget(0, TO_USER(pAttacker)); } } if(m_NpcState == NPC_SLEEPING){ m_NpcState = NPC_STANDING; ChangeTarget(0, TO_USER(pAttacker)); } } Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
y396com 0 #15 Kasım 19, 2017 tarihinde gönderildi Hey friend,can you tell me how to cancel the 'zzz' effect? i just know how to send 'zzz' effect to the monster。Thanks.:) I've solved it by myself,thank you.-- mesaja ek olarak --AlıntıHow do I send the effect I have not done it yet :) send a packet with "WIZ_STATE_CHANGE" opcode,type 4 is sleep. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
CerfiN 67 #16 Konu Sahibi Kasım 19, 2017 tarihinde gönderildi AlıntıAslında AI'ye zaten paket gidiyor. O yüzden saldırı aldığında, AIServer'a otomatik olarak NPC'yi uyandırmasının söyleyebilirsin. Kendi altyapımda aiserver-gameserver birleşik olduğu için, elimde var olan başka bir source üzerinden anlatacağım. void CNpc::RecvAttackReq(int nDamage, uint16 sAttackerID, AttributeType attributeType /*= AttributeNone*/) { if (isDead() || nDamage return; Unit * pAttacker = g_pMain->GetUnitPtr(sAttackerID); if (pAttacker != nullptr && pAttacker->isPlayer()) { Guard lock(m_damageListLock); m_DamagedUserList[pAttacker->GetID()] += nDamage; } m_TotalDamage += nDamage; HpChange(-nDamage, pAttacker, false); if (pAttacker == nullptr) return; if (!pAttacker->isPlayer()) { ChangeNTarget(TO_NPC(pAttacker)); return; } if (attributeType == AttributeLightning && m_NpcState != NPC_FAINTING) { int iRandom = myrand(1, 100); int iLightningR = (int)(10 + (40 - 40 * ((double)m_sLightningR / 80))); if (COMPARE(iRandom, 0, iLightningR)) { m_NpcState = NPC_FAINTING; m_Delay = 0; m_tFaintingTime = UNIXTIME; } else { ChangeTarget(0, TO_USER(pAttacker)); } } } Yukarıdaki fonksiyonun sonuna if(m_NpcState == NPC_SLEEPING){ m_NpcState = NPC_STANDING; ChangeTarget(0, TO_USER(pAttacker)); } kodunu eklersen, NPC saldırı aldığında NPC state eğer NPC_SLEEPING ise, state NPC_STANDING olarak güncellenecek, ve daha sonra ChangeTarget fonksiyonu tetiklenecektir (NPC_ATTACKING, NPC_FIGHTING bu fonksiyon tarafından ayarlanır) Sonuç : Spoiler void CNpc::RecvAttackReq(int nDamage, uint16 sAttackerID, AttributeType attributeType /*= AttributeNone*/) { if (isDead() || nDamage return; Unit * pAttacker = g_pMain->GetUnitPtr(sAttackerID); if (pAttacker != nullptr && pAttacker->isPlayer()) { Guard lock(m_damageListLock); m_DamagedUserList[pAttacker->GetID()] += nDamage; } m_TotalDamage += nDamage; HpChange(-nDamage, pAttacker, false); if (pAttacker == nullptr) return; if (!pAttacker->isPlayer()) { ChangeNTarget(TO_NPC(pAttacker)); return; } if (attributeType == AttributeLightning && m_NpcState != NPC_FAINTING) { int iRandom = myrand(1, 100); int iLightningR = (int)(10 + (40 - 40 * ((double)m_sLightningR / 80))); if (COMPARE(iRandom, 0, iLightningR)) { m_NpcState = NPC_FAINTING; m_Delay = 0; m_tFaintingTime = UNIXTIME; } else { ChangeTarget(0, TO_USER(pAttacker)); } } if(m_NpcState == NPC_SLEEPING){ m_NpcState = NPC_STANDING; ChangeTarget(0, TO_USER(pAttacker)); } } Teşekkür ederim ben direk olarak NpcSleeping içerisine ufak bir eklenti yapmıştım şu şekilde; if (m_Target.id = m_TotalDamage > 0) { m_NpcState = NPC_STANDING; m_Delay = 0; } tabi bu direk olarak uyandırıyordu olmadı çeviricem diğer koda. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
CerfiN 67 #17 Konu Sahibi Kasım 21, 2017 tarihinde gönderildi Şu efekt mevzunu hala anlamadım. WIZ_STATE_CHANGE'i gönderirken npc uyuyorsa ona göre state durumunu yapmaya çalıştım da hala efekt vermedi. Zaten Type7 de ki alan skilleri çalışmıyor proveke de öyle. Muhtemelen efekt olmadığından. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
mjw62335 3 #18 Şubat 7, 2018 tarihinde gönderildi Am I adding or not working? Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
OzkanOzdemir 1.531 Admin #19 Şubat 7, 2018 tarihinde gönderildi AlıntıŞu efekt mevzunu hala anlamadım. WIZ_STATE_CHANGE'i gönderirken npc uyuyorsa ona göre state durumunu yapmaya çalıştım da hala efekt vermedi. Zaten Type7 de ki alan skilleri çalışmıyor proveke de öyle. Muhtemelen efekt olmadığından. AIServer üzerinde çalışıyorum şuan sıfırdan sade bir AIServer yazıyorum kendi kafama göre aslında mantığın tam nasıl olduğunu açıklayayım. En başta AIServer.cpp THREADCALL içerisindeki döngünün başında isSleeping() kontrolüyle bakıyorum eğer ki Unit uyuyor ise herhangi bir işleme tabi tutmuyorum. Çünkü uyuduğu anda ne attack yapıyor ne yürüyor ne de etrafında düşman arıyor. İkinci bir olay ise bende AIServer diye bir program yok birleşik olduğu için söyle anlatayım siz onu AIServer bildirmek zorundasınız. Siz Unite attack yaptığınızda HpChange olur yada hangi fonksiyonu kullanıyorsanız onun içerisine NpcState değerini değiştireceksiniz artık Sleeping olarak çıkacak. Çıktıktan sonra yine AIServer.cpp içerisinde kontrole yakalanmayacak ve normal hareketlerine devam edecek yani uyanmış olacak. Tabi uyuduğunu etrafa göstermek zorundasın bunun içinde uyutma skillini kullandığında nerede ne tetikleniyor dosyalarda neresinde switch case ile kontrol ediyor o skilli bulacaksın ondan sonra WIZ_STATE_CHANGE paketini atacaksın. Aşağıda vereceğim o sistemi ona göre bakarsınız. Oyun içerisinde şöyle bir sıkıntı var eğer ki sen herhangi bir Unit'i uyutursan ve sonradan region dışı biri gelip Unit'i görürse onun uyuduğunu göremiyor. Böyle bir paket gitmiyor yani NPC_INOUT paketlerinin içerisinde uyuduğunu gösterecek herhangi bir değer yok. Yani town atmış yada sonradan yanına gelen birisi göremeyecek. Bunun içinde ben NPC_INOUT paketlerini gönderirken gönderdiği Unit SocketID std::set içerisine atıyorum. Ardından tüm NPC_INOUT gönderildikten sonra client taraflı bir paket tanımladım .dll yöntemiyle bunu siz tabi tek tek gönderebilirsiniz. Uyuyan Unit'leri sonradan etraftaki clientlere algılatıyorum. Yani bu ne işe yarıyor. Ben wormu uyuttum ardından town attım geri geldim normalde worm hala uyuması gerekiyorken bende uyumuyor olarak gözüküyor. Kafasında zzZZ effecti çıkmıyor. Bu olay bunu engelliyor ve sorunsuz hale getiriyor. Gizli İçerik Gizli içeriği görmek için bu konuya bir mesaj yazın. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
CerfiN 67 #20 Konu Sahibi Şubat 7, 2018 tarihinde gönderildi Şuan birkez daha girip denedim ve bende olay şöyle. Yaratıkları tekli skill ile uyutuyorum uyuyorlar ve ben atak yapınca yada süresi bitince çözülüyorlar. Farklı zone dan farklı charlarla geçtiğim de yine aynı şekilde yaratıkları uyuyor olarak görüyorum. Ama efekt çıkmıyor ve toplu olarak uyutma şu anda aktif değil. Yukarıda ki fonksiyon üzerinde tekrar gözden geçiricem şu aralar BDW konusun da çalışıyordum o bitti sayılır tekrar dan bu konuya dönücem ama mantığımda tam oturması lazım.@ OzkanOzdemir Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
OzkanOzdemir 1.531 Admin #21 Şubat 7, 2018 tarihinde gönderildi AlıntıŞuan birkez daha girip denedim ve bende olay şöyle. Yaratıkları tekli skill ile uyutuyorum uyuyorlar ve ben atak yapınca yada süresi bitince çözülüyorlar. Farklı zone dan farklı charlarla geçtiğim de yine aynı şekilde yaratıkları uyuyor olarak görüyorum. Ama efekt çıkmıyor ve toplu olarak uyutma şu anda aktif değil. Yukarıda ki fonksiyon üzerinde tekrar gözden geçiricem şu aralar BDW konusun da çalışıyordum o bitti sayılır tekrar dan bu konuya dönücem ama mantığımda tam oturması lazım. @ OzkanOzdemir İşte aslında uyuyorlar ama sonradan gelen yani town atan dediğimiz kişiler zzZZ effectini görmüyorlar. Bunun için tekrardan yukarıda yaptığım gibi WIZ_STATE_CHANGE paketi atman gerekiyor böylelikle sorunsuz hale geliyor. Benim bir sorum var ben mesela baştan AIServer dosyalarını yazdığım için uyuma süresini eklemedim ne kadar sürüyor uyumaları kendilerine gelmeleri yani? Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
CerfiN 67 #22 Konu Sahibi Şubat 7, 2018 tarihinde gönderildi Alıntıİşte aslında uyuyorlar ama sonradan gelen yani town atan dediğimiz kişiler zzZZ effectini görmüyorlar. Bunun için tekrardan yukarıda yaptığım gibi WIZ_STATE_CHANGE paketi atman gerekiyor böylelikle sorunsuz hale geliyor.Benim bir sorum var ben mesela baştan AIServer dosyalarını yazdığım için uyuma süresini eklemedim ne kadar sürüyor uyumaları kendilerine gelmeleri yani?20 saniye sürüyor uyumaları ve kendine gelmeleri zaten yanlış hatırlamıyorsam skill süresi o kadar. Bende şu an 20 saniye olarak ayarlı. İşte bende sorun zzz efekti komple yok orda kalmıştım en son. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
mjw62335 3 #23 Şubat 7, 2018 tarihinde gönderildi AlıntıAIServer üzerinde çalışıyorum şuan sıfırdan sade bir AIServer yazıyorum kendi kafama göre aslında mantığın tam nasıl olduğunu açıklayayım.En başta AIServer.cpp THREADCALL içerisindeki döngünün başında isSleeping() kontrolüyle bakıyorum eğer ki Unit uyuyor ise herhangi bir işleme tabi tutmuyorum. Çünkü uyuduğu anda ne attack yapıyor ne yürüyor ne de etrafında düşman arıyor.İkinci bir olay ise bende AIServer diye bir program yok birleşik olduğu için söyle anlatayım siz onu AIServer bildirmek zorundasınız. Siz Unite attack yaptığınızda HpChange olur yada hangi fonksiyonu kullanıyorsanız onun içerisine NpcState değerini değiştireceksiniz artık Sleeping olarak çıkacak.Çıktıktan sonra yine AIServer.cpp içerisinde kontrole yakalanmayacak ve normal hareketlerine devam edecek yani uyanmış olacak.Tabi uyuduğunu etrafa göstermek zorundasın bunun içinde uyutma skillini kullandığında nerede ne tetikleniyor dosyalarda neresinde switch case ile kontrol ediyor o skilli bulacaksın ondan sonra WIZ_STATE_CHANGE paketini atacaksın. Aşağıda vereceğim o sistemi ona göre bakarsınız.Oyun içerisinde şöyle bir sıkıntı var eğer ki sen herhangi bir Unit'i uyutursan ve sonradan region dışı biri gelip Unit'i görürse onun uyuduğunu göremiyor. Böyle bir paket gitmiyor yani NPC_INOUT paketlerinin içerisinde uyuduğunu gösterecek herhangi bir değer yok. Yani town atmış yada sonradan yanına gelen birisi göremeyecek. Bunun içinde ben NPC_INOUT paketlerini gönderirken gönderdiği Unit SocketID std::set içerisine atıyorum. Ardından tüm NPC_INOUT gönderildikten sonra client taraflı bir paket tanımladım .dll yöntemiyle bunu siz tabi tek tek gönderebilirsiniz. Uyuyan Unit'leri sonradan etraftaki clientlere algılatıyorum.Yani bu ne işe yarıyor. Ben wormu uyuttum ardından town attım geri geldim normalde worm hala uyuması gerekiyorken bende uyumuyor olarak gözüküyor. Kafasında zzZZ effecti çıkmıyor. Bu olay bunu engelliyor ve sorunsuz hale getiriyor.*** hidden content ***Teacher,Add it to that place? Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
CerfiN 67 #24 Konu Sahibi Şubat 10, 2018 tarihinde gönderildi ZzZ efektini hallettim town atan yada aynı harita içinden gelenler görüyor ancak efekt silinmiyor tekrar yollatıp durumu değiştirmek gerekiyor henüz bakmadım ona.@ OzkanOzdemir Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
Mountain 49 #25 Şubat 18, 2018 tarihinde gönderildi 0x05 utkudan uyandırma opcodesi. Kullanabilirsin eğer bulamadıysanız. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş