add skype : serialnew
Printable View
Another option that can be added is the option of modifying the string of commands, eg:Ā / post ---> / global
Shatter Hello again, I have some queries regarding the progress of the project. Read the changelog, I realized that two functions were removed or suspended from the dll, and I would see why?
Removed Features:
-ACC Slot from make command
-skill req level setting (see the requirement is to have the skill required to use the "x" as the twisting slash level, I think it is a good choice)
My question is why were removed? Cause problems or is just because I did not find him useful?
Doubt function:
- Zen Divizer: It is a function that performs a Zen divicion obtained or works differently?
They could add a Zen Multiplier? The function of this would just multiply the zen obtained by a number "x" to increase the amount obtained. For serious this? It would be helpful as Zen is based on experience so if the experience is high Zen obtained will be high, for that enters the splitter, but if the experience is low and a high drop zen like, entraria running the multiplier zen, in this way could increase the drop of zen, even with low experience.
Well I hope your answer, greetings.
Bug found = when relog char start with 0 hp and potion dont restore hp. And that would be all right, must come through new.
Bug combo = Skill -> TwistSlash - dont work when do reset. start work when get 100 lvl
When Will be next update ??
TwistSlash I should work at level 80 I'm not sure if the level requirement was first added
when will be next update ??
when will be next update ??
Hi. I need to add new items in this server. And i have a quastion, what is items limit in main.exe ? Is he equal to the existing amounts items or i or will I need change it on main.exe ?
@Shatter is away or abandoned it have no clue but you guys should stop expecting from shatter work for you he is released the code take if from here
and get it community project like IA Julia is - it will be better for everyone
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;
and Quest system ?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;
QuestSystem.cpp
Quest_List.cppCode:#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_Base.cppCode:#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");
}
QuestSystem.hCode:#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);
}
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);
Skill level requirement configurations were deleted from the files because you still need to edit Skill.bmd in client side for them to work correctly.
Meaning, even if you set the levels to 1 in server settings they won't work properly in-game unless you edit client side to match the settings.
- Shatter
what about HP Recovery ?
and i have porblem with BC reward i want to put there box +5 and i cant see itemcount who can help me with this ?
//------------------------------------------------------//
// Misc. Fixes //
//------------------------------------------------------//
MarlonQuestLvl1Fix = 0 ; For Reset Servers, Keep Marlon Quest (Combo)
PersonalShopLvl1Fix = 0 ; For Reset Servers, Keep Personal Shop After Reset
Just turn it to 1