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

QUEST Sayma Sorunu Hk.

Önerilen Mesajlar

Arkadaşlar QUEST Monster görevlerinde görev alma ile bir sorun yok. Fakat sayma konusunda problemim var bu konuda bana yardımcı olabilecek varmı?

QuestHandler.cpp de bulunan voidlerde bir problem varmı göremedim ?


void CUser::SaveEvent(uint16 sQuestID, uint8 bQuestState)

{
m_questMap[sQuestID] = bQuestState;

// Don't need to handle special/kill quests any further
Packet result(WIZ_QUEST, uint8(2));
result Send(&result);

_QUEST_MONSTER * pQuestMonster = g_pMain->m_QuestMonsterArray.GetData(sQuestID);
if (bQuestState == 1 && pQuestMonster)
if (pQuestMonster != nullptr && bQuestState == 1 && m_sEventDataIndex > 0)
return;

if (sQuestID >= QUEST_KILL_GROUP1)
return;

// Valid Finished Quest Count
if (bQuestState == 2 )
AchieveMainCount(0, 0, sQuestID, 0);

if (bQuestState == 2)
{
QuestV2MonsterDataDeleteAll();
QuestV2MonsterDataRequest(sQuestID);
}

if (bQuestState == 1 && pQuestMonster != nullptr)
{
// TODO: Decipher this into more meaningful code.
int16 v11 = ((int16)((uint32)(6711 * sQuestID) >> 16) >> 10) - (sQuestID >> 15);
int16 v12 = ((int16)((uint32)(5243 * (int16)(sQuestID - 10000 * v11)) >> 16) >> 3) - ((int16)(sQuestID - 10000 * v11) >> 15);

SaveEvent(32005, (uint8)v11);
SaveEvent(32006, (uint8)v12);
SaveEvent(32007, sQuestID - 100 * v12);

for(int i = 0; i {
_QUEST_DATA * uQuest = GetQuestID(i);

if (uQuest != nullptr)
continue;

uQuest->dQuestID = sQuestID;
break;
}
//m_sEventDataIndex = sQuestID;
QuestV2MonsterDataRequest(sQuestID);
}
}


void CUser::QuestV2MonsterCountAdd(uint16 sNpcID)

{
if (m_sEventDataIndex == 0)
return;

// it looks like they use an active quest ID which is kind of dumb
// we'd rather search through the player's active quests for applicable mob counts to increment
// but then, this system can't really handle that (static counts). More research is necessary.
uint16 sQuestNum = m_sEventDataIndex; // placeholder so that we can implement logic mockup
_QUEST_MONSTER *pQuestMonster = g_pMain->m_QuestMonsterArray.GetData(sQuestNum);

if (pQuestMonster == nullptr)
return;

// TODO: Implement obscure zone ID logic
for (int Count = 0; Count {
for (int i = 0; i {
if (pQuestMonster->sNum[Count][i] != sNpcID)
continue;

if (m_bKillCounts[Count] + 1 > pQuestMonster->sCount[Count])
return;

m_bKillCounts[Count]++;
SaveEvent(QUEST_KILL_GROUP1 + Count, m_bKillCounts[Count]);

Packet result(WIZ_QUEST, uint8(9));
result Send(&result);

if (m_bKillCounts[Count] >= pQuestMonster->sCount[Count]) //Closing conditions
{
uint8 bQuestState = 3;
SaveEvent(QUEST_KILL_GROUP1 + Count, bQuestState); //Fixed Number
Quest_Moster_Couner_Map::iterator itr = m_quest_moster_map.find(sQuestNum);
if(itr == m_quest_moster_map.end())
{
m_quest_moster_map.insert(std::make_pair(sQuestNum,m_bKillCounts[Count]));
}
else
{
itr->second = m_bKillCounts[Count];
}
} return;
}
}
}

uint8 CUser::QuestV2CheckMonsterCount(uint16 sQuestID)
{
if (sQuestID >= QUEST_KILL_GROUP1)
{
QuestMap::iterator itr = m_questMap.find(sQuestID);

// If it doesn't exist, it doesn't exist.
if (itr == m_questMap.end())
return 0;

return itr->second;
}
else
{
Quest_Moster_Couner_Map::iterator itr = m_quest_moster_map.find(sQuestID);
if(itr == m_quest_moster_map.end())
return 0;

return itr->second;
}
}


uint8 CUser::QuestV2CheckMonsterCount(uint16 sQuestID)

{
if (sQuestID >= QUEST_KILL_GROUP1)
{
QuestMap::iterator itr = m_questMap.find(sQuestID);

// If it doesn't exist, it doesn't exist.
if (itr == m_questMap.end())
return 0;

return itr->second;
}
else
{
Quest_Moster_Couner_Map::iterator itr = m_quest_moster_map.find(sQuestID);
if(itr == m_quest_moster_map.end())
return 0;

return itr->second;
}
}


uint8 CUser::CheckMonsterCount(uint8 bGroup)

{
_QUEST_MONSTER * pQuestMonster = g_pMain->m_QuestMonsterArray.GetData(m_sEventDataIndex);

if (pQuestMonster == nullptr || bGroup == 0 || bGroup >= QUEST_MOB_GROUPS)
return 0;

return m_bKillCounts[bGroup];
}

İletiyi paylaş


Link to post
Sitelerde Paylaş

Saveevent voidinde seventdataindex devredışı görüldüğü gibi //m_sEventDataIndex = sQuestID;
QuestV2MonsterDataRequest(sQuestID)
Questid eşitlemiyor sayma voidindede m_seventdataindex ==0 return görebiliyorsun bu yüzden görev saymıyordur. Ayrıca bu sistemde yalnızca tek monster quest yapabilirsin bilgilendireyim

m_sEventDataIndex = sQuestID

Şu şekilde aktif edersin

İletiyi paylaş


Link to post
Sitelerde Paylaş

Hayır orası eventindexini kontrol ediyor 0 a eşitse çalıştırmıyor. Sayma voidini biraz beklersen özelden dönüş yapacağım görev sistemini değişelim az işim var.

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı
Sorunum @ Mountain tarafından çözülmüştür. Kendisine çok teşekkür ediyorum. Konuyu çözülen kısmına taşıyabilirsiniz.


Nasıl çözüldüğünü anlatsaydınız da insanlar da faydalansaydı :S

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı
Sorunum @ Mountain tarafından çözülmüştür. Kendisine çok teşekkür ediyorum. Konuyu çözülen kısmına taşıyabilirsiniz.


Selam kardes nasıl cozdugunuzu yazarsanız herkes faydalansın lutfen.

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı

kardesm Source'den çok anlamadığım için şu diyip tarif edemiyecem malesef. TW verdim girdi hallediverdi çok sağolsun @ Mountain

 

 


Selam Dostum,

@ Mountain sorunu çözmüş sanırım. Bende aynı sorunla günlerdir uğraşıyorum. Rica etsem questhandler.cpp ekler misin buraya.

 

 

İletiyi paylaş


Link to post
Sitelerde Paylaş

benim böyle bir sorunum yok sadece konuya göz gezdiriyodum fakat konuyu açan arkadaş işimi halledeyim kaçayım kafasında heralde ki questhandler.cpp yi bile paylaşma ihtiyacı duymamış isimini not edin arkadaşın ki ilerde ona göre yardımcı olursunuz....

İletiyi paylaş


Link to post
Sitelerde Paylaş

Bende de görev sayma sorunu var. Kutu kırdırmada tepki vermiyordu onları lua değişerek çözdüm fakat aldığım görevleri saymıyor ve kutu kırdırırken exchange dediğimde tepki vermiyor. Sorunu hallolan arkadaşlar keşke nasıl olduğunu da yazsalar.

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı

Hayır orası eventindexini kontrol ediyor 0 a eşitse çalıştırmıyor. Sayma voidini biraz beklersen özelden dönüş yapacağım görev sistemini değişelim az işim var.

 

 


Bendede görev alıyor fakat saymıyor. Banada bir yardım edebilrmisiniz. Arkadaşın sorunu çözülmüş forumdan kaçmış galiba.

 

 

İletiyi paylaş


Link to post
Sitelerde Paylaş

×
×
  • Yeni Oluştur...