Meybe in next update can to insert Find Event ?
Code:
cFindEvent FindEvent;
void cFindEvent::Init();
{
//---------------------------------------------------------------------------------------
if(this->Config.FindEventEnabled == FALSE)
{
//-----------------------------------------------------------------------------------
Console.Write(1,0,"[FindEvent] Event is disabled, please check config!");
return;
//-----------------------------------------------------------------------------------
}
//---------------------------------------------------------------------------------------
this->Config.Started = false;
this->Config.Finished = false;
this->NPCCount = 0;
//---------------------------------------------------------------------------------------
this->InitMonsters();
//---------------------------------------------------------------------------------------
Console.Write(1,0,"FindEvent Config Initialized.");
}
void cFindEvent::InitMonsters()
{
//---------------------------------------------------------------------------------------
FILE *fp;
BOOL bRead = FALSE;
DWORD dwArgv = 0;
char sLineTxt[255] = {0};
//---------------------------------------------------------------------------------------
fp = fopen(NPCListINI,"r");
//---------------------------------------------------------------------------------------
if(!fp)
{
//-----------------------------------------------------------------------------------
Console.Write(1,1,"[FindEvent] Can't find %s",NPCListINI);
//-----------------------------------------------------------------------------------
this->Config.FindEventEnabled = FALSE;
//-----------------------------------------------------------------------------------
return;
}
//---------------------------------------------------------------------------------------
rewind(fp);
//---------------------------------------------------------------------------------------
while(fgets(sLineTxt, 255, fp) != NULL)
{
//-----------------------------------------------------------------------------------
if(sLineTxt[0] == '/')continue;
if(sLineTxt[0] == ';')continue;
if(sLineTxt[0] == '#')continue;
if(sLineTxt[0] == '-')continue;
if(sLineTxt[0] == '*')continue;
//-----------------------------------------------------------------------------------
int Map, X, Y, NPC;
//-----------------------------------------------------------------------------------
sscanf(sLineTxt, "%d %d %d %d", &NPC,&Map, &X, &Y);
//-----------------------------------------------------------------------------------
this->NPCList[this->NPCCount].NPC = NPC;
this->NPCList[this->NPCCount].Map = Map;
this->NPCList[this->NPCCount].X = X;
this->NPCList[this->NPCCount].Y = Y;
//-----------------------------------------------------------------------------------
this->NPCCount++;
//-----------------------------------------------------------------------------------
}
//---------------------------------------------------------------------------------------
rewind(fp);
fclose(fp);
//---------------------------------------------------------------------------------------
}
void cFindEvent::NPCSpeak(int aIndex,int NPC)
{
OBJECTSTRUCT *gObjNPC = (OBJECTSTRUCT*)OBJECT_POINTER(NPC);
OBJECTSTRUCT *gObj = (OBJECTSTRUCT*)OBJECT_POINTER(aIndex);
//---------------------------------------------------------------------------------------
if(this->Config.FindEventEnabled = FALSE)
{
//-----------------------------------------------------------------------------------
Console.Write(1,1,"[FindEvent] Event is disabled, please check config!");
//-----------------------------------------------------------------------------------
return;
//-----------------------------------------------------------------------------------
}
//---------------------------------------------------------------------------------------
if(this->Config.Started == false)
{
//-----------------------------------------------------------------------------------
return;
//-----------------------------------------------------------------------------------
}
//---------------------------------------------------------------------------------------
for(int min=0; min<this->NPCCount; min++)
{
//-----------------------------------------------------------------------------------
if(gObjNPC->Class == this->NPCList[min].NPC || gObjNPC->MapNumber == this->NPCList[min].Map || gObjNPC->X == this->NPCList[min].X || gObjNPC->Y == this->NPCList[min].Y)
{
//-------------------------------------------------------------------------------
if(this->Config.Finished == true)
{
//---------------------------------------------------------------------------
GameServer.DisplayNPCMessage(gObjNPC,aIndex,"Event was finished by %s",this->Config.Winner);
//---------------------------------------------------------------------------
return;
//---------------------------------------------------------------------------
}
//-------------------------------------------------------------------------------
GameServer.DisplayFirework(aIndex,4);
//-------------------------------------------------------------------------------
GameServer.DisplayNPCMessage(gObjNPC,aIndex,"Your prize has been dropped!");
//-------------------------------------------------------------------------------
this->Config.Winner = gObj->Name;
this->SendPrize(aIndex);
this->Clear();
//-------------------------------------------------------------------------------
this->Config.Started = false;
this->Config.Finished = false;
}
//-----------------------------------------------------------------------------------
}
//---------------------------------------------------------------------------------------
}
void cFindEvent::Clear()
{
//---------------------------------------------------------------------------------------
GameServer.SendAllTextMsg(0,"FindEvent is finished by %s",this->Config.Winner);
//---------------------------------------------------------------------------------------
Console.Write(1,0,"[FindEvent] Event is finished by %s",this->Config.Winner);
//---------------------------------------------------------------------------------------
this->Config.Started = false;
this->Config.Finished = false;
//---------------------------------------------------------------------------------------
for(int min=0; min<this->NPCCount; min++)
{
//-------------------------------------------------------------------------------
gObjDel(this->NPCList[min].Index);
//-------------------------------------------------------------------------------
Console.Write(1,0,"[FindEvent] Delete monster npc id %d",this->NPCList[min].NPC);
//-------------------------------------------------------------------------------
GameMonsterAllCloseAndReload();
//-------------------------------------------------------------------------------
Console.Write(1,0,"[FindEvent] All monsters has been reloaded!",this->NPCList[min].NPC);
}
//---------------------------------------------------------------------------------------
Free(this->Config.Winner);
}
int cFindEvent::Start()
{
//---------------------------------------------------------------------------------------
if(this->Config.FindEventEnabled == FALSE)
{
//-----------------------------------------------------------------------------------
return 0;
//-----------------------------------------------------------------------------------
}
//---------------------------------------------------------------------------------------
if(this->Config.Started == false)
{
//-----------------------------------------------------------------------------------
Config.Started = true;
//-----------------------------------------------------------------------------------
}
else
{
//-----------------------------------------------------------------------------------
return 1;
//-----------------------------------------------------------------------------------
}
//---------------------------------------------------------------------------------------
this->SpawnNPC();
//---------------------------------------------------------------------------------------
GameServer.SendAllTextMsg(0,"FindEvent has been started!",this->Config.Winner);
for(int min=0; min<this->NPCCount; min++)
{
GameServer.SendAllTextMsg(1,"Missing NPC's located on these maps: ",GameServer.GetMapName(this->NPCList[min].Map));
}
GameServer.SendAllTextMsg(0,"Your objective is to find them!",this->Config.Winner);
//---------------------------------------------------------------------------------------
return 2;
}
void cFindEvent::SpawnNPC()
{
for(int min=0; min<this->NPCCount; min++)
{
int npc = gObjAddMonsters(this->NPCList[min].Map);
//-----------------------------------------------------------------------------------
OBJECTSTRUCT *gObjNPC = (OBJECTSTRUCT*)OBJECT_POINTER(npc);
//-----------------------------------------------------------------------------------
gObjSetMonsters(npc, this->NPCList[min].NPC);
//-----------------------------------------------------------------------------------
gObjNPC->Class = this->NPCList[min].NPC;
gObjNPC->MapNumber = this->NPCList[min].Map;
gObjNPC->X = this->NPCList[min].X;
gObjNPC->Y = this->NPCList[min].Y;
this->NPCList[min].Index = npc;
}
}
void cFindEvent::SendPrize(int aIndex)
{
OBJECTSTRUCT *gObj = (OBJECTSTRUCT*)OBJECT_POINTER(aIndex);
//---------------------------------------------------------------------------------------
if(this->PrizeConfig.isZenReward == TRUE)
{
//-----------------------------------------------------------------------------------
GameServer.DropZen(gObj->MapNumber,gObj->X,gObj->Y,this->PrizeConfig.ZenAmount);
//-----------------------------------------------------------------------------------
}
//---------------------------------------------------------------------------------------
if(this->PrizeConfig.isItemReward == TRUE)
{
//-----------------------------------------------------------------------------------
int Exc = 0;
//-----------------------------------------------------------------------------------
if(RewardItem.Excellent == 1)
{
//-------------------------------------------------------------------------------
Exc = rand() % 6;
Exc++;
//-------------------------------------------------------------------------------
}
//-----------------------------------------------------------------------------------
if(cMuOnlineDB.isVip(aIndex) == TRUE)
{
ItemSerialCreateSend (aIndex,gObj->MapNumber,gObj->X,gObj->Y,this->GetRandomRewardItemVip(),RewardItem.Level,0,RewardItem.Skill,RewardItem.Luck,RewardItem.Option,aIndex,Exc,0);
}
else
{
ItemSerialCreateSend (aIndex,gObj->MapNumber,gObj->X,gObj->Y,this->GetRandomRewardItem(),RewardItem.Level,0,RewardItem.Skill,RewardItem.Luck,RewardItem.Option,aIndex,Exc,0);
}
//-----------------------------------------------------------------------------------
}
//---------------------------------------------------------------------------------------
Console.Write(1,0,"[FindEvent] Winner prize has been droped!");
}
DWORD cFindEvent::GetRandomRewardItem()
{
//---------------------------------------------------------------------------------------
FILE * garew = fopen (ITEM_REWARD,"r");
//---------------------------------------------------------------------------------------
char temp[1024];
int ItemType,ItemNr;
int i = 0;
int j = 0;
int licz = rand() % 100;
//---------------------------------------------------------------------------------------
while ( !feof(garew) && i <= licz)
{
//-----------------------------------------------------------------------------------
fgets(temp , 1024 , garew );
//-----------------------------------------------------------------------------------
if(temp[0] != '/' && temp[1] != '/')
{
//-------------------------------------------------------------------------------
sscanf(temp,"%d %d %d %d %d %d %d", &ItemType, &ItemNr, &RewardItem.Level, &RewardItem.Skill, &RewardItem.Luck, &RewardItem.Option, &RewardItem.Excellent);
if(ItemType >= 0)
{
//---------------------------------------------------------------------------
i++;
//---------------------------------------------------------------------------
}
//-------------------------------------------------------------------------------
}
//-----------------------------------------------------------------------------------
}
//---------------------------------------------------------------------------------------
fclose(garew);
//---------------------------------------------------------------------------------------
FILE * garew2 = fopen (ITEM_REWARD,"r");
//---------------------------------------------------------------------------------------
if(licz > i)
{
//-----------------------------------------------------------------------------------
int licz2 = rand() % i;
//-----------------------------------------------------------------------------------
while ( j <= licz2 )
{
//-------------------------------------------------------------------------------
fgets(temp , 1024 , garew2 );
//-------------------------------------------------------------------------------
if(temp[0] != '/' && temp[1] != '/')
{
//---------------------------------------------------------------------------
sscanf(temp,"%d %d %d %d %d %d %d", &ItemType, &ItemNr, &RewardItem.Level, &RewardItem.Skill, &RewardItem.Luck, &RewardItem.Option, &RewardItem.Excellent);
if(ItemType >= 0)
{
//-----------------------------------------------------------------------
j++;
//-----------------------------------------------------------------------
}
//---------------------------------------------------------------------------
}
//-------------------------------------------------------------------------------
}
//-----------------------------------------------------------------------------------
}
//---------------------------------------------------------------------------------------
fclose(garew2);
//---------------------------------------------------------------------------------------
DWORD Reward = DWORD ((ItemType * 512) + ItemNr);
//---------------------------------------------------------------------------------------
return Reward;
//---------------------------------------------------------------------------------------
}
DWORD cFindEvent::GetRandomRewardItemVip()
{
//---------------------------------------------------------------------------------------
FILE * garew = fopen (ITEM_REWARD_VIP,"r");
//---------------------------------------------------------------------------------------
char temp[1024];
int ItemType,ItemNr;
int i = 0;
int j = 0;
int licz = rand() % 100;
//---------------------------------------------------------------------------------------
while ( !feof(garew) && i <= licz)
{
//-----------------------------------------------------------------------------------
fgets(temp , 1024 , garew );
//-----------------------------------------------------------------------------------
if(temp[0] != '/' && temp[1] != '/')
{
//-------------------------------------------------------------------------------
sscanf(temp,"%d %d %d %d %d %d %d", &ItemType, &ItemNr, &RewardItem.Level, &RewardItem.Skill, &RewardItem.Luck, &RewardItem.Option, &RewardItem.Excellent);
if(ItemType >= 0)
{
//---------------------------------------------------------------------------
i++;
//---------------------------------------------------------------------------
}
//-------------------------------------------------------------------------------
}
//-----------------------------------------------------------------------------------
}
//---------------------------------------------------------------------------------------
fclose(garew);
//---------------------------------------------------------------------------------------
FILE * garew2 = fopen (ITEM_REWARD_VIP,"r");
//---------------------------------------------------------------------------------------
if(licz > i)
{
//-----------------------------------------------------------------------------------
int licz2 = rand() % i;
//-----------------------------------------------------------------------------------
while ( j <= licz2 )
{
//-------------------------------------------------------------------------------
fgets(temp , 1024 , garew2 );
//-------------------------------------------------------------------------------
if(temp[0] != '/' && temp[1] != '/')
{
//---------------------------------------------------------------------------
sscanf(temp,"%d %d %d %d %d %d %d", &ItemType, &ItemNr, &RewardItem.Level, &RewardItem.Skill, &RewardItem.Luck, &RewardItem.Option, &RewardItem.Excellent);
if(ItemType >= 0)
{
//-----------------------------------------------------------------------
j++;
//-----------------------------------------------------------------------
}
//---------------------------------------------------------------------------
}
//-------------------------------------------------------------------------------
}
//-----------------------------------------------------------------------------------
}
//---------------------------------------------------------------------------------------
fclose(garew2);
//---------------------------------------------------------------------------------------
DWORD Reward = DWORD ((ItemType * 512) + ItemNr);
//---------------------------------------------------------------------------------------
return Reward;
//---------------------------------------------------------------------------------------
}
extern cFindEvent FindEvent;
Code:
class cFindEvent
{
public:
void Init();
void InitMonsters();
void NPCSpeak(int aIndex,int NPC);
void Clear();
int Start();
void SpawnNPC();
void SendPrize(int aIndex);
DWORD GetRandomRewardItem();
DWORD GetRandomRewardItemVip();
private:
struct SNPCList
{
int NPC;
int Map;
int X;
int Y;
int Index;
};
struct EventConf
{
char* Winner;
bool Started;
bool Finished;
int FindEventEnabled;
};
struct PrizeConf
{
int isZenReward;
int isItemReward;
int ZenAmount;
};
struct RItem
{
int Type;
int Index;
int Level;
int Skill;
int Luck;
int Option;
int Excellent;
};
public:
int NPCCount;
SNPCList NPCList[255];
EventConf Config;
PrizeConf PrizeConfig;
RItem RewardItem;
};
extern cFindEvent FindEvent;
and Quest system ?
QuestSystem.cpp
Code:
#include "stdafx.h"
void ChatQuestSystem(DWORD aIndex,LPBYTE Protocol)
{
char Q1_Quest_Start[]="/quest_1";
if(!memcmp(&Protocol[13],Q1_Quest_Start,strlen(Q1_Quest_Start)))
{
Quest_1_Start(aIndex);
}
char Q1_Quest_End[]="/end_quest_1";
if(!memcmp(&Protocol[13],Q1_Quest_End,strlen(Q1_Quest_End)))
{
Quest_1_End(aIndex);
}
char Q2_Quest_Start[]="/quest_2";
if(!memcmp(&Protocol[13],Q2_Quest_Start,strlen(Q2_Quest_Start)))
{
Quest_2_Start(aIndex);
}
char Q2_Quest_End[]="/end_quest_2";
if(!memcmp(&Protocol[13],Q1_Quest_End,strlen(Q2_Quest_End)))
{
Quest_2_End(aIndex);
}
char Q3_Quest_Start[]="/quest_3";
if(!memcmp(&Protocol[13],Q3_Quest_Start,strlen(Q3_Quest_Start)))
{
Quest_3_Start(aIndex);
}
char Q3_Quest_End[]="/end_quest_3";
if(!memcmp(&Protocol[13],Q3_Quest_End,strlen(Q3_Quest_End)))
{
Quest_3_End(aIndex);
}
char Q4_Quest_Start[]="/quest_4";
if(!memcmp(&Protocol[13],Q4_Quest_Start,strlen(Q4_Quest_Start)))
{
Quest_4_Start(aIndex);
}
char Q4_Quest_End[]="/end_quest_4";
if(!memcmp(&Protocol[13],Q4_Quest_End,strlen(Q4_Quest_End)))
{
Quest_4_End(aIndex);
}
char Q5_Quest_Start[]="/quest_5";
if(!memcmp(&Protocol[13],Q5_Quest_Start,strlen(Q5_Quest_Start)))
{
Quest_5_Start(aIndex);
}
char Q5_Quest_End[]="/end_quest_5";
if(!memcmp(&Protocol[13],Q5_Quest_End,strlen(Q5_Quest_End)))
{
Quest_5_End(aIndex);
}
char Q6_Quest_Start[]="/quest_6";
if(!memcmp(&Protocol[13],Q6_Quest_Start,strlen(Q6_Quest_Start)))
{
Quest_6_Start(aIndex);
}
char Q6_Quest_End[]="/end_quest_6";
if(!memcmp(&Protocol[13],Q6_Quest_End,strlen(Q6_Quest_End)))
{
Quest_6_End(aIndex);
}
char Q7_Quest_Start[]="/quest_7";
if(!memcmp(&Protocol[13],Q7_Quest_Start,strlen(Q7_Quest_Start)))
{
Quest_7_Start(aIndex);
}
char Q7_Quest_End[]="/end_quest_7";
if(!memcmp(&Protocol[13],Q7_Quest_End,strlen(Q7_Quest_End)))
{
Quest_7_End(aIndex);
}
char Q8_Quest_Start[]="/quest_8";
if(!memcmp(&Protocol[13],Q8_Quest_Start,strlen(Q8_Quest_Start)))
{
Quest_8_Start(aIndex);
}
char Q8_Quest_End[]="/end_quest_8";
if(!memcmp(&Protocol[13],Q8_Quest_End,strlen(Q8_Quest_End)))
{
Quest_8_End(aIndex);
}
char Q9_Quest_Start[]="/quest_9";
if(!memcmp(&Protocol[13],Q9_Quest_Start,strlen(Q9_Quest_Start)))
{
Quest_9_Start(aIndex);
}
char Q9_Quest_End[]="/end_quest_9";
if(!memcmp(&Protocol[13],Q9_Quest_End,strlen(Q9_Quest_End)))
{
Quest_9_End(aIndex);
}
char Q10_Quest_Start[]="/quest_10";
if(!memcmp(&Protocol[13],Q10_Quest_Start,strlen(Q10_Quest_Start)))
{
Quest_10_Start(aIndex);
}
char Q10_Quest_End[]="/end_quest_10";
if(!memcmp(&Protocol[13],Q10_Quest_End,strlen(Q10_Quest_End)))
{
Quest_10_End(aIndex);
}
char Q11_Quest_Start[]="/quest_11";
if(!memcmp(&Protocol[13],Q11_Quest_Start,strlen(Q11_Quest_Start)))
{
Quest_11_Start(aIndex);
}
char Q11_Quest_End[]="/end_quest_11";
if(!memcmp(&Protocol[13],Q11_Quest_End,strlen(Q11_Quest_End)))
{
Quest_11_End(aIndex);
}
char Q12_Quest_Start[]="/quest_12";
if(!memcmp(&Protocol[13],Q12_Quest_Start,strlen(Q12_Quest_Start)))
{
Quest_12_Start(aIndex);
}
char Q12_Quest_End[]="/end_quest_12";
if(!memcmp(&Protocol[13],Q12_Quest_End,strlen(Q12_Quest_End)))
{
Quest_12_End(aIndex);
}
char Q13_Quest_Start[]="/quest_13";
if(!memcmp(&Protocol[13],Q13_Quest_Start,strlen(Q13_Quest_Start)))
{
Quest_13_Start(aIndex);
}
char Q13_Quest_End[]="/end_quest_13";
if(!memcmp(&Protocol[13],Q13_Quest_End,strlen(Q13_Quest_End)))
{
Quest_13_End(aIndex);
}
char Q14_Quest_Start[]="/quest_14";
if(!memcmp(&Protocol[13],Q14_Quest_Start,strlen(Q14_Quest_Start)))
{
Quest_14_Start(aIndex);
}
char Q14_Quest_End[]="/end_quest_14";
if(!memcmp(&Protocol[13],Q14_Quest_End,strlen(Q14_Quest_End)))
{
Quest_14_End(aIndex);
}
char Q15_Quest_Start[]="/quest_15";
if(!memcmp(&Protocol[13],Q15_Quest_Start,strlen(Q15_Quest_Start)))
{
Quest_15_Start(aIndex);
}
char Q15_Quest_End[]="/end_quest_15";
if(!memcmp(&Protocol[13],Q15_Quest_End,strlen(Q15_Quest_End)))
{
Quest_15_End(aIndex);
}
char Q16_Quest_Start[]="/quest_16";
if(!memcmp(&Protocol[13],Q16_Quest_Start,strlen(Q16_Quest_Start)))
{
Quest_16_Start(aIndex);
}
char Q16_Quest_End[]="/end_quest_16";
if(!memcmp(&Protocol[13],Q16_Quest_End,strlen(Q16_Quest_End)))
{
Quest_16_End(aIndex);
}
char Q17_Quest_Start[]="/quest_17";
if(!memcmp(&Protocol[13],Q17_Quest_Start,strlen(Q17_Quest_Start)))
{
Quest_17_Start(aIndex);
}
char Q17_Quest_End[]="/end_quest_17";
if(!memcmp(&Protocol[13],Q17_Quest_End,strlen(Q17_Quest_End)))
{
Quest_17_End(aIndex);
}
char Q18_Quest_Start[]="/quest_18";
if(!memcmp(&Protocol[13],Q18_Quest_Start,strlen(Q18_Quest_Start)))
{
Quest_18_Start(aIndex);
}
char Q18_Quest_End[]="/end_quest_18";
if(!memcmp(&Protocol[13],Q18_Quest_End,strlen(Q18_Quest_End)))
{
Quest_18_End(aIndex);
}
char Q19_Quest_Start[]="/quest_19";
if(!memcmp(&Protocol[13],Q19_Quest_Start,strlen(Q19_Quest_Start)))
{
Quest_19_Start(aIndex);
}
char Q19_Quest_End[]="/end_quest_19";
if(!memcmp(&Protocol[13],Q19_Quest_End,strlen(Q19_Quest_End)))
{
Quest_19_End(aIndex);
}
char Q20_Quest_Start[]="/quest_20";
if(!memcmp(&Protocol[13],Q20_Quest_Start,strlen(Q20_Quest_Start)))
{
Quest_20_Start(aIndex);
}
char Q20_Quest_End[]="/end_quest_20";
if(!memcmp(&Protocol[13],Q20_Quest_End,strlen(Q20_Quest_End)))
{
Quest_20_End(aIndex);
}
char Q21_Quest_Start[]="/quest_21";
if(!memcmp(&Protocol[13],Q21_Quest_Start,strlen(Q21_Quest_Start)))
{
Quest_21_Start(aIndex);
}
char Q21_Quest_End[]="/end_quest_21";
if(!memcmp(&Protocol[13],Q21_Quest_End,strlen(Q21_Quest_End)))
{
Quest_21_End(aIndex);
}
char Q22_Quest_Start[]="/quest_22";
if(!memcmp(&Protocol[13],Q22_Quest_Start,strlen(Q22_Quest_Start)))
{
Quest_22_Start(aIndex);
}
char Q22_Quest_End[]="/end_quest_22";
if(!memcmp(&Protocol[13],Q22_Quest_End,strlen(Q22_Quest_End)))
{
Quest_22_End(aIndex);
}
char Q23_Quest_Start[]="/quest_23";
if(!memcmp(&Protocol[13],Q23_Quest_Start,strlen(Q23_Quest_Start)))
{
Quest_23_Start(aIndex);
}
char Q23_Quest_End[]="/end_quest_23";
if(!memcmp(&Protocol[13],Q23_Quest_End,strlen(Q23_Quest_End)))
{
Quest_23_End(aIndex);
}
char Q24_Quest_Start[]="/quest_24";
if(!memcmp(&Protocol[13],Q24_Quest_Start,strlen(Q24_Quest_Start)))
{
Quest_24_Start(aIndex);
}
char Q24_Quest_End[]="/end_quest_24";
if(!memcmp(&Protocol[13],Q24_Quest_End,strlen(Q24_Quest_End)))
{
Quest_24_End(aIndex);
}
char Q25_Quest_Start[]="/quest_25";
if(!memcmp(&Protocol[13],Q25_Quest_Start,strlen(Q25_Quest_Start)))
{
Quest_25_Start(aIndex);
}
char Q25_Quest_End[]="/end_quest_25";
if(!memcmp(&Protocol[13],Q25_Quest_End,strlen(Q25_Quest_End)))
{
Quest_25_End(aIndex);
}
char Q26_Quest_Start[]="/quest_26";
if(!memcmp(&Protocol[13],Q26_Quest_Start,strlen(Q26_Quest_Start)))
{
Quest_26_Start(aIndex);
}
char Q26_Quest_End[]="/end_quest_26";
if(!memcmp(&Protocol[13],Q26_Quest_End,strlen(Q26_Quest_End)))
{
Quest_26_End(aIndex);
}
char Q27_Quest_Start[]="/quest_27";
if(!memcmp(&Protocol[13],Q27_Quest_Start,strlen(Q27_Quest_Start)))
{
Quest_27_Start(aIndex);
}
char Q27_Quest_End[]="/end_quest_27";
if(!memcmp(&Protocol[13],Q27_Quest_End,strlen(Q27_Quest_End)))
{
Quest_27_End(aIndex);
}
char Q28_Quest_Start[]="/quest_28";
if(!memcmp(&Protocol[13],Q28_Quest_Start,strlen(Q28_Quest_Start)))
{
Quest_28_Start(aIndex);
}
char Q28_Quest_End[]="/end_quest_28";
if(!memcmp(&Protocol[13],Q28_Quest_End,strlen(Q28_Quest_End)))
{
Quest_28_End(aIndex);
}
char Q29_Quest_Start[]="/quest_29";
if(!memcmp(&Protocol[13],Q29_Quest_Start,strlen(Q29_Quest_Start)))
{
Quest_29_Start(aIndex);
}
char Q29_Quest_End[]="/end_quest_29";
if(!memcmp(&Protocol[13],Q29_Quest_End,strlen(Q29_Quest_End)))
{
Quest_29_End(aIndex);
}
char Q30_Quest_Start[]="/quest_30";
if(!memcmp(&Protocol[13],Q30_Quest_Start,strlen(Q30_Quest_Start)))
{
Quest_30_Start(aIndex);
}
char Q30_Quest_End[]="/end_quest_30";
if(!memcmp(&Protocol[13],Q30_Quest_End,strlen(Q30_Quest_End)))
{
Quest_30_End(aIndex);
}
}
cQuestSystem QS;
bool cQuestSystem::Quest_ItemExist(int aIndex, int Item, int Level)
{
for(BYTE i = 12; i < 76 ; i ++ )
{
OBJECTSTRUCT * gObj = (OBJECTSTRUCT*)OBJECT_POINTER(aIndex);
if(gObj->pInventory[i].m_Type == Item && gObj->pInventory[i].m_Level == Level)
{
return true;
}
}
return false;
}
bool cQuestSystem::Quest_ItemRemove(int aIndex, int Item, int Level)
{
for(BYTE i = 12; i < 76 ; i ++ )
{
OBJECTSTRUCT * gObj = (OBJECTSTRUCT*)OBJECT_POINTER(aIndex);
if(gObj->pInventory[i].m_Type == Item && gObj->pInventory[i].m_Level == Level)
{
gObj->pInventory[i].m_Type = 0xFFFF;
gObj->pInventory[i].m_Level = 0;
}
}
return false;
}
void cQuestSystem::Quest_OnlyGM(int aIndex, int OnlyGM,char*QuestNoGMMSG)
{
if(OnlyGM == 1)
{
if(VerifyGM(aIndex) == false)
{
GCServerMsgStringSend(QuestNoGMMSG,aIndex,1);
return;
}
}
}
void cQuestSystem::Quest_Enabled(int aIndex,int QuestEnabled,char*QuestDisabledMSG)
{
if (QuestEnabled == 0)
{
GCServerMsgStringSend(QuestDisabledMSG,aIndex,1);
return;
}
}
void cQuestSystem::Quest_LevelMax(int aIndex,int Level,char*QuestLevelMSG)
{
if((int)gObj_GetInt(aIndex,gObjLvl)<Level)
{
GCServerMsgStringSend(QuestLevelMSG,aIndex,1);
return;
}
}
void cQuestSystem::Quest_Class(int aIndex,int ClassCheckEnabled,int Class_Code,char*QuestNotYourClassMSG)
{
if(ClassCheckEnabled == 1)
{
if(GetPlayerClass(aIndex) != Class_Code)
{
GCServerMsgStringSend(QuestNotYourClassMSG,aIndex,1);
return;
}
}
}
extern cQuestSystem QS;
void QuestSystemLoad()
{
FILE * hFile;
fopen_s(&hFile, ".\\Extras\\QuestSystem.ini", "r");
if(hFile == 0)
{
Console.Write("[Server][ER][QuestSystem.ini] File not found!");
return;
}
}
Quest_List.cpp
Code:
#include "stdafx.h"
void Quest_1_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 1");
}
void Quest_1_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 1");
}
void Quest_2_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 2");
}
void Quest_2_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 2");
}
void Quest_3_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 3");
}
void Quest_3_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 3");
}
void Quest_4_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 4");
}
void Quest_4_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 4");
}
void Quest_5_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 5");
}
void Quest_5_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 5");
}
void Quest_6_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 6");
}
void Quest_6_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 6");
}
void Quest_7_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 7");
}
void Quest_7_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 7");
}
void Quest_8_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 8");
}
void Quest_8_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 8");
}
void Quest_9_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 9");
}
void Quest_9_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 9");
}
void Quest_10_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 10");
}
void Quest_10_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 10");
}
void Quest_11_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 11");
}
void Quest_11_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 11");
}
void Quest_12_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 12");
}
void Quest_12_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 12");
}
void Quest_13_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 13");
}
void Quest_13_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 13");
}
void Quest_14_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 14");
}
void Quest_14_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 14");
}
void Quest_15_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 15");
}
void Quest_15_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 15");
}
void Quest_16_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 16");
}
void Quest_16_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 16");
}
void Quest_17_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 17");
}
void Quest_17_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 17");
}
void Quest_18_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 18");
}
void Quest_18_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 18");
}
void Quest_19_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 19");
}
void Quest_19_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 19");
}
void Quest_20_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 20");
}
void Quest_20_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 20");
}
void Quest_21_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 21");
}
void Quest_21_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 21");
}
void Quest_22_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 22");
}
void Quest_22_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 22");
}
void Quest_23_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 23");
}
void Quest_23_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 23");
}
void Quest_24_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 24");
}
void Quest_24_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 24");
}
void Quest_25_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 25");
}
void Quest_25_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 25");
}
void Quest_26_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 26");
}
void Quest_26_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 26");
}
void Quest_27_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 27");
}
void Quest_27_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 27");
}
void Quest_28_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 28");
}
void Quest_28_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 28");
}
void Quest_29_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 29");
}
void Quest_29_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 29");
}
void Quest_30_Start(DWORD aIndex)
{
_Quest_Start(aIndex,"Quest 30");
}
void Quest_30_End(DWORD aIndex)
{
_Quest_End(aIndex,"Quest 30");
}
Quest_Base.cpp
Code:
#include "stdafx.h"
char Bufs[255];
char Bufs2[255];
void _Quest_Start(DWORD aIndex,char*quest_id)
{
OBJECTSTRUCT *gObj = (OBJECTSTRUCT*)OBJECT_POINTER(aIndex);
int QuestEnabled = GetPrivateProfileInt(quest_id,"QuestEnabled",1,".\\Extras\\QuestSystem.ini");
int QuestLevelMax = GetPrivateProfileInt (quest_id,"QuestLevelMaxReq",50,".\\Extras\\QuestSystem.ini");
int QuestOnly = GetPrivateProfileInt (quest_id,"QuestOnlyGM",0,".\\Extras\\QuestSystem.ini");
char QuestStartMSG[255];
char QuestDisabledMSG[255];
char QuestLevelMSG[255];
char QuestRewardMSG[255];
char QuestInfoMSG[255];
char QuestNoGMMSG[255];
char QuestMiscMSG[255];
GetPrivateProfileString(quest_id,"QuestStartMessage","[Quest 1] The Beginning of the hero!",QuestStartMSG,255,".\\Extras\\QuestSystem.ini");
GetPrivateProfileString(quest_id,"QuestDisabledMessage","[Quest 1] Quest temporarily disabled!",QuestDisabledMSG,255,".\\Extras\\QuestSystem.ini");
GetPrivateProfileString(quest_id,"QuestLevelMessage","[Quest 1] You don't have required level for quest!",QuestLevelMSG,255,".\\Extras\\QuestSystem.ini");
GetPrivateProfileString(quest_id,"QuestRewardMessage","[Quest 1] Reward: Points 10, Item EXC Great Hammer!",QuestRewardMSG,255,".\\Extras\\QuestSystem.ini");
GetPrivateProfileString(quest_id,"QuestInfoMessage","[Quest 1] Info: Collect 10 renas to get reward!",QuestInfoMSG,255,".\\Extras\\QuestSystem.ini");
GetPrivateProfileString(quest_id,"QuestOnlyGMMessage","[Quest 1] This quest is only for gamemasters!",QuestNoGMMSG,255,".\\Extras\\QuestSystem.ini");
GetPrivateProfileString(quest_id,"QuestMiscMessage","[Quest 1] Other: Min level 1, Max level 10!",QuestMiscMSG,255,".\\Extras\\QuestSystem.ini");
//BASIC CHECK
QS.Quest_Enabled(aIndex,QuestEnabled,QuestDisabledMSG);
QS.Quest_OnlyGM(aIndex,QuestOnly,QuestNoGMMSG);
QS.Quest_LevelMax(aIndex,QuestLevelMax,QuestLevelMSG);
GCServerMsgStringSend(QuestStartMSG,aIndex,0);
GCServerMsgStringSend(QuestInfoMSG,aIndex,1);
GCServerMsgStringSend(QuestMiscMSG,aIndex,1);
GCServerMsgStringSend(QuestRewardMSG,aIndex,1);
sprintf_s(Bufs, "[Server][NO][QuestSystem][%s:%s] User has started quest!",gObj->AccountID,gObj->Name);
Console.Write(Bufs);
}
void _Quest_End(DWORD aIndex,char*quest_id)
{
OBJECTSTRUCT *gObj = (OBJECTSTRUCT*)OBJECT_POINTER(aIndex);
//DEFINITION
char QuestStartMSG[255];
char QuestDisabledMSG[255];
char QuestLevelMSG[255];
char QuestFinishMSG[255];
char QuestNoItemMSG[255];
char QuestRelogMSG[255];
char QuestNoGMMSG[255];
char QuestNotYourClassMSG[255];
GetPrivateProfileString(quest_id,"QuestStartMessage","[Quest 1] The Beginning of the hero!",QuestStartMSG,255,".\\Extras\\QuestSystem.ini");
GetPrivateProfileString(quest_id,"QuestDisabledMessage","[Quest 1] Quest temporarily disabled!",QuestDisabledMSG,255,".\\Extras\\QuestSystem.ini");
GetPrivateProfileString(quest_id,"QuestLevelMessage","[Quest 1] You don't have required level for quest!",QuestLevelMSG,255,".\\Extras\\QuestSystem.ini");
GetPrivateProfileString(quest_id,"QuestFinishMessage","[Quest 1] The Beginning of the hero - Finished!",QuestFinishMSG,255,".\\Extras\\QuestSystem.ini");
GetPrivateProfileString(quest_id,"QuestNoItemMessage","[Quest 1] You don't have required item!",QuestNoItemMSG,255,".\\Extras\\QuestSystem.ini");
GetPrivateProfileString(quest_id,"QuestRelogMessage","[Quest 1] Please relog, to complete quest and get reward!",QuestRelogMSG,255,".\\Extras\\QuestSystem.ini");
GetPrivateProfileString(quest_id,"QuestOnlyGMMessage","[Quest 1] This quest is only for gamemasters!",QuestNoGMMSG,255,".\\Extras\\QuestSystem.ini");
GetPrivateProfileString(quest_id,"QuestNotNeedClassMessage","[Quest 1] This quest is only for class name!",QuestNoGMMSG,255,".\\Extras\\QuestSystem.ini");
int QuestEnabled = GetPrivateProfileInt(quest_id,"QuestEnabled",1,".\\Extras\\QuestSystem.ini");
int QuestLevelMax = GetPrivateProfileInt (quest_id,"QuestLevelMaxReq",100,".\\Extras\\QuestSystem.ini");
int QuestClassCheck = GetPrivateProfileInt (quest_id,"QuestClassCheck",100,".\\Extras\\QuestSystem.ini");
int QuestClass = GetPrivateProfileInt (quest_id,"QuestClass",100,".\\Extras\\QuestSystem.ini");
int QuestItem = GetPrivateProfileInt (quest_id,"QuestItem",0x1C15,".\\Extras\\QuestSystem.ini");
int QuestOnly = GetPrivateProfileInt (quest_id,"QuestOnlyGM",0,".\\Extras\\QuestSystem.ini");
int Point = GetPrivateProfileInt (quest_id,"QuestPointReward",100,".\\Extras\\QuestSystem.ini");
int Exp = GetPrivateProfileInt (quest_id,"QuestExpReward",100,".\\Extras\\QuestSystem.ini");
int IsItemReward = GetPrivateProfileInt (quest_id,"QuestIsOnlyGM",1,".\\Extras\\QuestSystem.ini");
int ItemType = GetPrivateProfileInt (quest_id,"QuestItemTypeReward",1,".\\Extras\\QuestSystem.ini");
int ItemID = GetPrivateProfileInt (quest_id,"QuestItemIDReward",2,".\\Extras\\QuestSystem.ini");
int Level = GetPrivateProfileInt (quest_id,"QuestItemLevelReward",2,".\\Extras\\QuestSystem.ini");
int Skill = GetPrivateProfileInt (quest_id,"QuestItemSkillReward",2,".\\Extras\\QuestSystem.ini");
int Luck = GetPrivateProfileInt (quest_id,"QuestItemLuckReward",2,".\\Extras\\QuestSystem.ini");
int Option = GetPrivateProfileInt (quest_id,"QuestItemOptionReward",2,".\\Extras\\QuestSystem.ini");
int Excellent = GetPrivateProfileInt (quest_id,"QuestItemExcellentReward",2,".\\Extras\\QuestSystem.ini");
//BASIC CHECK
QS.Quest_Enabled(aIndex,QuestEnabled,QuestDisabledMSG);
QS.Quest_OnlyGM(aIndex,QuestOnly,QuestNoGMMSG);
QS.Quest_LevelMax(aIndex,QuestLevelMax,QuestLevelMSG);
QS.Quest_Class(aIndex,QuestClassCheck,QuestClass,QuestNotYourClassMSG);
//CHECK IF ITEM EXIST
if(QS.Quest_ItemExist(aIndex,QuestItem,0))
{
GCServerMsgStringSend(QuestFinishMSG,aIndex,1);
}
else
{
GCServerMsgStringSend(QuestNoItemMSG,aIndex,1);
return;
}
//REMOVE QUEST ITEM
QS.Quest_ItemRemove(aIndex,QuestItem,0);
//POINT REWARD
gObj->LevelUpPoint += Point;
//ITEM REWARD
if(IsItemReward == 1)
{
DWORD Reward = DWORD ((ItemType * 512) + ItemID);
ItemSerialCreateSend (aIndex,gObj_GetMap(aIndex),gObj_GetPosX(aIndex),gObj_GetPosY(aIndex),Reward,Level,0,Skill,Luck,Option,aIndex,Excellent,0);
}
//SEND RELOG MESSAGE
GCServerMsgStringSend(QuestRelogMSG,aIndex,1);
//SERVER LOG ADD
sprintf_s(Bufs2, "[Server][NO][QuestSystem][%s:%s] User has finished quest!!",gObj->AccountID,gObj->Name);
Console.Write(Bufs2);
}
QuestSystem.h
Code:
void _Quest_Start(DWORD aIndex,char*quest_id);
void _Quest_End(DWORD aIndex,char*quest_id);
void ChatQuestSystem(DWORD aIndex,LPBYTE Protocol);
class cQuestSystem
{
public:
bool Quest_ItemExist(int aIndex, int Item, int Level);
bool Quest_ItemRemove(int aIndex, int Item, int Level);
void Quest_OnlyGM(int aIndex, int OnlyGM,char*QuestNoGMMSG);
void Quest_Enabled(int aIndex,int QuestEnabled,char*QuestDisabledMSG);
void Quest_LevelMax(int aIndex,int Level,char*QuestLevelMSG);
void Quest_Class(int aIndex,int ClassCheckEnabled,int Class_Code,char*QuestNotYourClassMSG);
};
extern cQuestSystem QS;
void Quest_1_Start(DWORD aIndex);
void Quest_1_End(DWORD aIndex);
void Quest_2_Start(DWORD aIndex);
void Quest_2_End(DWORD aIndex);
void Quest_3_Start(DWORD aIndex);
void Quest_3_End(DWORD aIndex);
void Quest_4_Start(DWORD aIndex);
void Quest_4_End(DWORD aIndex);
void Quest_5_Start(DWORD aIndex);
void Quest_5_End(DWORD aIndex);
void Quest_6_Start(DWORD aIndex);
void Quest_6_End(DWORD aIndex);
void Quest_7_Start(DWORD aIndex);
void Quest_7_End(DWORD aIndex);
void Quest_8_Start(DWORD aIndex);
void Quest_8_End(DWORD aIndex);
void Quest_9_Start(DWORD aIndex);
void Quest_9_End(DWORD aIndex);
void Quest_10_Start(DWORD aIndex);
void Quest_10_End(DWORD aIndex);
void Quest_11_Start(DWORD aIndex);
void Quest_11_End(DWORD aIndex);
void Quest_12_Start(DWORD aIndex);
void Quest_12_End(DWORD aIndex);
void Quest_13_Start(DWORD aIndex);
void Quest_13_End(DWORD aIndex);
void Quest_14_Start(DWORD aIndex);
void Quest_14_End(DWORD aIndex);
void Quest_15_Start(DWORD aIndex);
void Quest_15_End(DWORD aIndex);
void Quest_16_Start(DWORD aIndex);
void Quest_16_End(DWORD aIndex);
void Quest_17_Start(DWORD aIndex);
void Quest_17_End(DWORD aIndex);
void Quest_18_Start(DWORD aIndex);
void Quest_18_End(DWORD aIndex);
void Quest_19_Start(DWORD aIndex);
void Quest_19_End(DWORD aIndex);
void Quest_20_Start(DWORD aIndex);
void Quest_20_End(DWORD aIndex);
void Quest_21_Start(DWORD aIndex);
void Quest_21_End(DWORD aIndex);
void Quest_22_Start(DWORD aIndex);
void Quest_22_End(DWORD aIndex);
void Quest_23_Start(DWORD aIndex);
void Quest_23_End(DWORD aIndex);
void Quest_24_Start(DWORD aIndex);
void Quest_24_End(DWORD aIndex);
void Quest_25_Start(DWORD aIndex);
void Quest_25_End(DWORD aIndex);
void Quest_26_Start(DWORD aIndex);
void Quest_26_End(DWORD aIndex);
void Quest_27_Start(DWORD aIndex);
void Quest_27_End(DWORD aIndex);
void Quest_28_Start(DWORD aIndex);
void Quest_28_End(DWORD aIndex);
void Quest_29_Start(DWORD aIndex);
void Quest_29_End(DWORD aIndex);
void Quest_30_Start(DWORD aIndex);
void Quest_30_End(DWORD aIndex);