- Mesaj
- 638
- Çözümler
- 46
- Beğeni
- 1.013
- Puan
- 1.130
- Ticaret Puanı
- 1
Kendinizde denemeden uygulamayın.
İlk olarak CancelServerTimers ile ilgili bir core sorunu için küçük bir değişiklik yapalım. Olayın nasıl tetiklendiğini bende çözemedim. Şeytan kulesinde 4. katta town attım ve aşağıdaki gibi core verdi. Bir şekilde timer sıkışması oldu ama ben bulamadım.
---------------------------------
Burası Mainline alt yapı kullananlar içindir.
void CQuestManager::Kill(unsigned int pc, unsigned int npc) içerisinde m_mapNPC[npc].OnKill(*pPC); bu kısım için marty nin //@fixme109 unu uyguladıktan sonra en basitinden kulede kestiğiniz bazı moblar bile saymamaya başlıyor. Bunu mümkünse kullanmayın. Bunun yerine aşağıdakini kullanmaya çalışın.
---------------------------------
@MT2Dev hocam sizin de bu konular hakkında yorumunuzu merak ediyorum.
İlk olarak CancelServerTimers ile ilgili bir core sorunu için küçük bir değişiklik yapalım. Olayın nasıl tetiklendiğini bende çözemedim. Şeytan kulesinde 4. katta town attım ve aşağıdaki gibi core verdi. Bir şekilde timer sıkışması oldu ama ben bulamadım.
game/questmanager.cpp:
//Bul
void CQuestManager::CancelServerTimers (DWORD arg)
{
itertype (m_mapServerTimer) it = m_mapServerTimer.begin();
for (; it != m_mapServerTimer.end(); ++it)
{
if (it->first.second == arg)
{
LPEVENT event = it->second;
event_cancel (&event);
m_mapServerTimer.erase (it);
}
}
}
//Değiştir
void CQuestManager::CancelServerTimers(DWORD arg)
{
itertype(m_mapServerTimer) it = m_mapServerTimer.begin();
for (; it != m_mapServerTimer.end();) {
if (it->first.second == arg) {
LPEVENT event = it->second;
event_cancel(&event);
m_mapServerTimer.erase(it++);
}
else {
++it;
}
}
}
---------------------------------
Burası Mainline alt yapı kullananlar içindir.
void CQuestManager::Kill(unsigned int pc, unsigned int npc) içerisinde m_mapNPC[npc].OnKill(*pPC); bu kısım için marty nin //@fixme109 unu uyguladıktan sonra en basitinden kulede kestiğiniz bazı moblar bile saymamaya başlıyor. Bunu mümkünse kullanmayın. Bunun yerine aşağıdakini kullanmaya çalışın.
game/questmanager.cpp:
void CQuestManager::Kill(unsigned int pc, unsigned int npc)
{
//m_CurrentNPCRace = npc;
PC * pPC;
sys_log(0, "CQuestManager::Kill QUEST_KILL_EVENT (pc=%d, npc=%d)", pc, npc);
if ((pPC = GetPC(pc)))
{
if (!CheckQuestLoaded(pPC))
return;
m_mapNPC[npc].OnKill(*pPC);
LPCHARACTER ch = GetCurrentCharacterPtr();
LPPARTY pParty = ch->GetParty();
LPCHARACTER leader = pParty ? pParty->GetLeaderCharacter() : ch;
if (leader)
{
m_pCurrentPartyMember = ch;
if (m_mapNPC[npc].OnPartyKill(*GetPC(leader->GetPlayerID())))
return;
pPC = GetPC(pc);
}
if (npc != QUEST_NO_NPC)
m_mapNPC[QUEST_NO_NPC].OnKill(*pPC);
return;
if (leader)
{
m_pCurrentPartyMember = ch;
if (m_mapNPC[npc].OnPartyKill(*GetPC(leader->GetPlayerID())))
return;
pPC = GetPC(pc);
}
if (m_mapNPC[QUEST_NO_NPC].OnKill(*pPC))
return;
if (leader)
{
m_pCurrentPartyMember = ch;
m_mapNPC[QUEST_NO_NPC].OnPartyKill(*GetPC(leader->GetPlayerID()));
}
}
else
sys_err("QUEST: no such pc id : %d", pc);
}
@MT2Dev hocam sizin de bu konular hakkında yorumunuzu merak ediyorum.