knightonline/server/GameServer/GameServerDlg.h

828 lines
30 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#ifdef GAMESERVER
#include "resource.h"
#include "LuaEngine.h"
#include "Define.h"
#include "ChatHandler.h"
class C3DMap;
class CUser;
class CBot;
#include "LoadServerData.h"
#include "User.h"
#include "Bot.h"
#include "Pet.h"
#include "AISocket.h"
#include "../shared/ClientSocketMgr.h"
typedef std::map<std::string, CUser *> NameMap;
typedef std::map<std::string, CBot *> BotNameMap;
typedef std::map<uint16, uint16> ForgettenTempleMonsterList;
class CGameServerDlg
{
public:
CGameServerDlg();
bool Startup();
void GetTimeFromIni();
bool WordGuardSystem(std::string Word, uint8 WordStr);
uint8 GetTariffByZone(int zoneid);
bool LoadItemTable();
bool LoadItemDuper();
bool LoadIlegalItems();
bool LoadSetItemTable();
bool LoadAchieveMonsterTable();
bool LoadAchieveComTable();
bool LoadAchieveMainTable();
bool LoadAchieveNormalTable();
bool LoadAchieveWarTable();
bool LoadAchieveTitleTable();
bool LoadItemMiningTable();
bool LoadItemExchangeTable();
bool LoadItemExchangeExpTable();
bool LoadItemMixTable();
bool LoadItemUpgradeTable();
bool LoadItemOpTable();
bool LoadServerResourceTable();
bool LoadQuestHelperTable();
bool LoadQuestMonsterTable();
bool LoadMagicTable();
bool LoadMagicType1();
bool LoadMagicType2();
bool LoadMagicType3();
bool LoadMagicType4();
bool LoadMagicType5();
bool LoadMagicType6();
bool LoadMagicType7();
bool LoadMagicType8();
bool LoadMagicType9();
bool LoadItemCrashTable();
bool LoadRentalList();
bool LoadCoefficientTable();
bool LoadLevelUpTable();
bool LoadPetLevelUpTable();
bool LoadAllKnights(bool bIsslient = false);
bool ReloadAllKnights(bool bIsslient = false);
bool LoadAllKnightsUserData(bool bIsslient = false);
bool LoadKnightsAllianceTable(bool bIsslient = false);
bool LoadKnightsSiegeWarsTable();
bool LoadUserRankings();
void CleanupUserRankings();
bool LoadKnightsCapeTable();
bool LoadKnightsRankTable(bool bWarTime = false, bool bIsslient = false);
bool LoadStartPositionTable();
bool LoadStartPositionRandomTable();
bool LoadBattleTable();
bool LoadKingSystem();
bool LoadMonsterSummonListTable();
bool LoadMonsterSummonListZoneTable();
bool LoadMonsterRespawnListTable();
bool LoadMonsterRespawnListInformationTable();
bool LoadMonsterRespawnListRandomTable();
bool LoadPremiumItemTable();
bool LoadPremiumItemExpTable();
bool LoadPetTable();
bool LoadBotTable();
bool LoadCypherRingTable();
bool LoadUserDailyOpTable();
bool LoadEventTriggerTable();
bool LoadMonsterChallengeTable();
bool LoadEventTimesTable();
bool LoadMonsterChallengeSummonListTable();
bool LoadUserItemTable();
bool LoadObjectPosTable();
bool MapFileLoad();
bool LoadNoticeData();
bool LoadNoticeUpData();
void AIServerConnect();
static uint32 THREADCALL Timer_CheckGameEvents(void * lpParam);
static uint32 THREADCALL Timer_BifrostTime(void * lpParam);
static uint32 THREADCALL Timer_UpdateGameTime(void * lpParam);
static uint32 THREADCALL Timer_UpdateSessions(void * lpParam);
static uint32 THREADCALL Timer_UpdateConcurrent(void * lpParam);
void ReqUpdateConcurrent();
void SendFlyingSantaOrAngel();
void Send_CommandChat(Packet *pkt, int nation , CUser* pExceptUser = nullptr);
void SendItemZoneUsers(uint8 ZoneID, uint32 nItemID, uint16 sCount = 1, uint32 Time = 0);
void KickOutZoneUsers(uint8 ZoneID, uint8 TargetZoneID = 0, uint8 bNation = Nation::ALL);
void SendItemEventRoom(uint16 nEventRoom,uint32 nItemID, uint16 sCount = 1);
uint64 GenerateItemSerial();
int KickOutAllUsers();
void CheckAliveUser();
int GetKnightsGrade(uint32 nPoints);
void WritePacketLog();
uint16 GetKnightsAllMembers(uint16 sClanID, Packet & result, uint16 & pktSize, bool bClanLeader);
void GetUserRank(CUser *pUser);
void Announcement(uint16 type, int nation= Nation::ALL, int chat_type=8, CUser* pExceptUser = nullptr, CNpc *pExpectNpc = nullptr);
void SnowBanishLosers();
void SnowBattleZoneClose();
void SnowBattleZoneOpenTimer();
void ResetBattleZone();
void BanishLosers();
void BattleZoneVictoryCheck();
void BattleZoneOpenTimer();
void BattleZoneOpen(int nType, uint8 bZone = 0);
void CastleSiegeWarZoneOpen(int nType, uint8 bZone = 0);
void BattleZoneClose();
void BattleZoneResult(uint8 nation);
void BattleWinnerResult(BattleWinnerTypes winnertype);
void AliveUserCheck();
void TerminationFinish();
void Send_PartyMember(int party, Packet *result);
void Send_KnightsMember(int index, Packet *pkt);
void Send_KnightsAlliance(uint16 sAllianceID, Packet *pkt);
void SetGameTime();
void ResetPlayerRankings(uint8 ZoneID = 0);
void UpdateWeather();
void UpdateGameTime();
void ResetLoyaltyMonthly();
void SendAllUserInfo();
void DeleteAllNpcList(int flag = 0);
CNpc* FindNpcInZone(uint16 sPid, uint8 byZone);
CNpc* UpdateNpc();
void ForgettenTempleEventTimer();
void AutoNoticeEventTimer();
uint8 GetMonsterChallengeTime();
void EventZoneTimer();
int32 m_byEventTime;
int32 m_byEventRemainingTime;
int32 m_sEventTimeDelay;
int32 m_byEventOpenedTime;
void ArdreamEventOpen();
bool OpenArdream;
void CZEventOpen();
bool OpenCZ;
void ArdreamEventZoneClose();
void CZEventZoneClose();
void CheckEventTime();
time_t m_lastBlessTime;
time_t m_lastBorderTime;
uint8 GetEventZoneTime();
void TempleEventTimer();
void TempleEventStart();
void JuraidTempleEventStart();
void TempleEventTeleportUsers();
uint8 TempleEventGetRoomUsers(uint16 nEventRoom = 0,uint8 nNation = 0);
void MonsterStoneSummon(uint16 EventRoom, uint8 ZoneID);
void TempleEventSummon();
void TempleEventFinish(uint16 m_sEventRoom = 0, uint8 m_bNation = 0);
void TempleEventGetActiveEventTime(CUser *pUser);
void TempleEventSendActiveEventTime(CUser *pUser);
void TempleEventKickOutUser(CUser *pUser);
void TempleEventReset();
void AddEventUser(CUser * pUser);
void Send_Noah_Knights(Packet *pkt);
void LunarGoldShells(CUser *pUser = nullptr);
void NereidsMonumentEvent(uint8 TrapNumber = 0, uint8 bNation = 0, CUser * pUser = nullptr);
void DeleteLunarGoldShells();
void RemoveEventUser(CUser * pUser);
void UpdateEventUser(CUser * pUser, uint16 nEventRoom = 0);
void SetEventUser(CUser *pUser);
std::string GetBattleAndNationMonumentName(int16 TrapNumber = -1, uint8 ZoneID = 0);
void CheckNationMonumentRewards();
bool IsBusy1[MAX_MONSTER_STONE_EVENT_ROOM];
uint32 Zone1[MAX_MONSTER_STONE_EVENT_ROOM];
uint32 Zone2[MAX_MONSTER_STONE_EVENT_ROOM];
uint32 Zone3[MAX_MONSTER_STONE_EVENT_ROOM];
uint8 Zone1Family[MAX_MONSTER_STONE_EVENT_ROOM];
uint8 Zone2Family[MAX_MONSTER_STONE_EVENT_ROOM];
uint8 Zone3Family[MAX_MONSTER_STONE_EVENT_ROOM];
uint16 Zone1Boss[MAX_MONSTER_STONE_EVENT_ROOM];
uint16 Zone2Boss[MAX_MONSTER_STONE_EVENT_ROOM];
uint16 Zone3Boss[MAX_MONSTER_STONE_EVENT_ROOM];
bool IsBusy2[MAX_MONSTER_STONE_EVENT_ROOM];
bool IsBusy3[MAX_MONSTER_STONE_EVENT_ROOM];
uint32 KCmiktari,KCmiktari2;
uint32 LastPetID;
uint32 LastRingID;
bool KCaktifmi, onbesinde,RoyalG1,KCaktifmi2;
bool AutoNovice,AutoMaster,AutoSkills;
Packet BoardCache[2];
void ReloadKnightAndUserRanks();
void SetPlayerRankingRewards(uint16 ZoneID);
bool OfflineMerchanting;
uint8 Dakika1,Dakika2;
uint8 HediyeKC,HediyeKC2;
bool CastleSiegeWarAttack(CUser *pUser, CUser *pTargetUser);
void UpdateSiege(int16 m_sCastleIndex, int16 m_sMasterKnights, int16 m_bySiegeType, int16 m_byWarDay, int16 m_byWarTime, int16 m_byWarMinute);
void UpdateSiegeTax(uint8 Zone, int16 ZoneTarrif);
bool IsDuplicateItem(uint32 nItemID, uint64 nItemSerial);
void AddUserItem(uint32 nItemID, uint64 nItemSerial);
void AddDatabaseRequest(Packet & pkt, CUser *pUser = nullptr);
// TerminitionTime
void TerminitionTime(uint8 sNewZone,uint16 Time);
// Get info for NPCs in regions around user (WIZ_REQ_NPCIN)
void NpcInOutForMe(CUser* pSendUser);
// Get info for NPCs in region
void GetRegionNpcIn(C3DMap* pMap, uint16 region_x, uint16 region_z, Packet & pkt, uint16 & t_count, uint16 nEventRoom, CUser* pSendUser);
// Get list of NPC IDs in region
void GetRegionNpcList(C3DMap* pMap, uint16 region_x, uint16 region_z, Packet & pkt, uint16 & t_count, uint16 nEventRoom = 0);
// Get list of NPCs for regions around user (WIZ_NPC_REGION)
void RegionNpcInfoForMe(CUser* pSendUser);
// Get raw list of all units in regions surrounding pOwner.
void GetUnitListFromSurroundingRegions(Unit * pOwner, std::vector<uint16> * pList);
// Get info for users in regions around user (WIZ_REQ_USERIN)
void UserInOutForMe(CUser* pSendUser);
// Get list of user IDs in region
void GetRegionUserList(C3DMap* pMap, uint16 region_x, uint16 region_z, Packet & pkt, uint16 & t_count, uint16 nEventRoom = 0);
// Get list of users for regions around user (WIZ_REGIONCHANGE)
void RegionUserInOutForMe(CUser* pSendUser);
// Get info for merchants in regions around user
void MerchantUserInOutForMe(CUser* pSendUser);
// Get war status
INLINE bool isWarOpen() { return m_byBattleOpen != NO_BATTLE;}
// Get list of merchants in region
void GetRegionMerchantUserIn(C3DMap* pMap, uint16 region_x, uint16 region_z, Packet & pkt, uint16 & t_count, uint16 nEventRoom = 0);
void SendHelpDescription(CUser *pUser, std::string sHelpMessage);
INLINE bool isPermanentMessageSet() { return m_bPermanentChatMode; }
void SetPermanentMessage(const char * format, ...);
void HandleConsoleCommand(const char * msg);
template <ChatType chatType>
INLINE void SendChat(const char * msg, uint8 byNation = Nation::ALL, bool bFormatNotice = false)
{
Packet result;
std::string buffer;
if (bFormatNotice)
GetServerResource(IDP_ANNOUNCEMENT, &buffer, msg);
else
buffer = msg;
ChatPacket::Construct(&result, (uint8) chatType, &buffer);
Send_All(&result, nullptr, byNation);
}
template <ChatType chatType>
INLINE void SendChatToZone(const char * msg, uint8 ZoneID, uint8 byNation = Nation::ALL, bool bFormatNotice = false)
{
Packet result;
std::string buffer;
if (bFormatNotice)
GetServerResource(IDP_ANNOUNCEMENT, &buffer, msg);
else
buffer = msg;
ChatPacket::Construct(&result, (uint8) chatType, &buffer);
Send_Zone(&result, ZoneID, nullptr, byNation);
}
template <ChatType chatType>
INLINE void SendFormattedChat(const char * msg, uint8 byNation = Nation::ALL, bool bFormatNotice = false, va_list args = nullptr)
{
char buffer[512];
vsnprintf(buffer, sizeof(buffer), msg, args);
SendChat<chatType>(buffer, byNation, bFormatNotice);
va_end(args);
}
template <ChatType chatType>
void SendFormattedChat(const char * msg, uint8 byNation = Nation::ALL, bool bFormatNotice = false, ...)
{
va_list ap;
va_start(ap, byNation);
SendFormattedChat<chatType>(msg, byNation, bFormatNotice, ap);
va_end(ap);
}
/* The following are simply wrappers for more readable SendChat() calls */
INLINE void SendNotice(const char *msg, uint8 byNation = Nation::ALL)
{
SendChat<PUBLIC_CHAT>(msg, byNation, true);
}
template <ChatType chatType>
INLINE void SendNotice(const char *msg, uint8 ZoneID, uint8 byNation = Nation::ALL, bool bFormatNotice = false)
{
SendChatToZone<chatType>(msg, ZoneID, byNation, bFormatNotice);
}
void SendFormattedNotice(const char *msg, uint8 byNation = Nation::ALL, ...)
{
va_list ap;
va_start(ap, byNation);
SendFormattedChat<PUBLIC_CHAT>(msg, byNation, true, ap);
va_end(ap);
}
INLINE void SendAnnouncement(const char *msg, uint8 byNation = Nation::ALL)
{
SendChat<WAR_SYSTEM_CHAT>(msg, byNation, true);
}
void SendFormattedAnnouncement(const char *msg, uint8 byNation = Nation::ALL, ...)
{
va_list ap;
va_start(ap, byNation);
SendFormattedChat<WAR_SYSTEM_CHAT>(msg, byNation, true, ap);
va_end(ap);
}
void SendFormattedResource(uint32 nResourceID, uint8 byNation = Nation::ALL, bool bIsNotice = true, ...);
void Send_Region(Packet *pkt, C3DMap *pMap, int x, int z, CUser* pExceptUser = nullptr, uint16 nEventRoom = 0);
void Send_UnitRegion(Packet *pkt, C3DMap *pMap, int x, int z, CUser* pExceptUser = nullptr, uint16 nEventRoom = 0);
void Send_OldRegions(Packet *pkt, int old_x, int old_z, C3DMap *pMap, int x, int z, CUser* pExceptUser = nullptr, uint16 nEventRoom = 0);
void Send_NewRegions(Packet *pkt, int new_x, int new_z, C3DMap *pMap, int x, int z, CUser* pExceptUser = nullptr, uint16 nEventRoom = 0);
void Send_NearRegion(Packet *pkt, C3DMap *pMap, int region_x, int region_z, float curx, float curz, CUser* pExceptUser=nullptr, uint16 nEventRoom = 0);
void Send_FilterUnitRegion(Packet *pkt, C3DMap *pMap, int x, int z, float ref_x, float ref_z, CUser* pExceptUser=nullptr, uint16 nEventRoom = 0);
void Send_Zone_Matched_Class(Packet *pkt, uint8 bZoneID, CUser* pExceptUser, uint8 nation, uint8 seekingPartyOptions, uint16 nEventRoom = 0);
void Send_Zone(Packet *pkt, uint8 bZoneID, CUser* pExceptUser = nullptr, uint8 nation = Nation::ALL, uint16 nEventRoom = 0, float fRange = 0.0f);
void Send_All(Packet *pkt, CUser* pExceptUser = nullptr, uint8 nation = Nation::ALL, uint8 ZoneID = 0, bool isSendEventUsers = false, uint16 nEventRoom = 0);
void Send_AIServer(Packet *pkt);
void GetServerResource(int nResourceID, std::string * result, ...);
_START_POSITION *GetStartPosition(int nZoneID);
int64 GetExpByLevel(int nLevel);
int64 GetPetExpByLevel(int nLevel);
C3DMap * GetZoneByID(int zoneID);
CBot * GetBotPtr(std::string findName, NameType type);
CUser * GetUserPtr(std::string findName, NameType type);
CUser * GetUserPtr(uint16 sUserId);
CNpc * GetNpcPtr(uint16 sNpcId);
_ACHIEVE_MONSTER * GetAchieveMonsterPointer(uint32 ID);
_ACHIEVE_WAR * GetAchieveWarPointer(uint32 ID);
_ACHIEVE_TITLE * GetAchieveTitlePointer(uint32 ID);
_ACHIEVE_COM * GetAchieveComPointer(uint32 ID);
_ACHIEVE_NORMAL * GetAchieveNormalPointer(uint32 ID);
_ACHIEVE_MAIN * GetAchieveMainPointer(uint32 ID);
Unit * GetUnitPtr(uint16 id);
// Spawns an event NPC/monster
void SpawnEventNpc(uint16 sSid, bool bIsMonster, uint8 byZone, float fX, float fY, float fZ, uint16 sCount = 1, uint16 sRadius = 0, uint16 sDuration = 0, uint8 nation = 0, int16 socketID = -1, uint16 nEventRoom = 0, bool nIsPet = false, std::string strPetName = "", std::string strUserName = "", uint64 nSerial = 1, uint16 UserId = -1);
uint16 SpawnBot(int Minute, uint8 byZone, float fX, float fY, float fZ, uint8 Restipi, uint8 minlevel = 1);
// Kill a Npc/Monster
void KillNpc(uint16 sNid);
// Change NPC/Monster properties for Respawn
void NpcUpdate(uint16 sSid, bool bIsMonster, uint8 byGroup = 0, uint16 sPid = 0);
// Adds the account name & session to a hashmap (on login)
void AddAccountName(CUser *pSession);
// Adds the character name & session to a hashmap (when in-game)
void AddCharacterName(CUser *pSession);
// Removes an existing character name/session from the hashmap, replaces the character's name
// and reinserts the session with the new name into the hashmap.
void ReplaceCharacterName(CUser *pSession, std::string & strNewUserID);
// Removes the account name & character names from the hashmaps (on logout)
void RemoveSessionNames(CUser *pSession);
// Send to Zone NPC Effect
void ShowNpcEffect(uint16 sNpcID, uint32 nEffectID, uint8 ZoneID, uint16 EventRoom);
_PARTY_GROUP * GetPartyPtr(uint16 sPartyID);
CKnights * GetClanPtr(uint16 sClanID);
_KNIGHTS_ALLIANCE * GetAlliancePtr(uint16 sAllianceID);
_ITEM_TABLE * GetItemPtr(uint32 nItemID);
CPet * GetPetPtr(uint64 nItemSerial);
_CYPHERRING_DATA * GetCypherRingPtr(uint64 nItemSerial);
_KNIGHTS_SIEGE_WARFARE * GetSiegeMasterKnightsPtr(uint16 sMasterKnights);
_PARTY_GROUP * CreateParty(CUser *pLeader);
void DeleteParty(uint16 sIndex);
_EVENT_STATUS pTempleEvent;
~CGameServerDlg();
char m_ppNotice[20][128];
char m_peNotice[20][128];
std::string m_AIServerIP;
uint32 m_AIServerPort;
NpcArray m_arNpcArray;
BotArray m_arBotArray;
ZoneArray m_ZoneArray;
ItemtableArray m_ItemtableArray;
SetItemArray m_SetItemArray;
AchieveNormalArray ACHIEVE_NORMAL;
AchieveTitleArray ACHIEVE_TITLE;
AchieveWarArray ACHIEVE_WAR;
AchieveMainArray ACHIEVE_MAIN;
AchieveComArray ACHIEVE_COM;
AchieveMonsterArray ACHIEVE_MONSTER;
ItemMiningArray m_ItemMiningArray;
MagictableArray m_MagictableArray;
Magictype1Array m_Magictype1Array;
Magictype2Array m_Magictype2Array;
Magictype3Array m_Magictype3Array;
Magictype4Array m_Magictype4Array;
Magictype5Array m_Magictype5Array;
Magictype6Array m_Magictype6Array;
Magictype7Array m_Magictype7Array;
Magictype8Array m_Magictype8Array;
Magictype9Array m_Magictype9Array;
CoefficientArray m_CoefficientArray;
LevelUpArray m_LevelUpArray;
LevelUpArray m_PetLevelUpArray;
PartyArray m_PartyArray;
KnightsArray m_KnightsArray;
KnightsRatingArray m_KnightsRatingArray[2]; // one for both nations
KnightsAllianceArray m_KnightsAllianceArray;
KnightsUserArray m_KnightsUserArray;
KnightsSiegeWarfareArray m_KnightsSiegeWarfareArray;
KnightsCapeArray m_KnightsCapeArray;
UserNameRankMap m_UserPersonalRankMap;
UserNameRankMap m_UserKnightsRankMap;
UserRankMap m_playerRankings[2]; // one for both nations
UserRankMap m_playerPersonalRankings[2]; // one for both nations
std::recursive_mutex m_userRankingsLock;
StartPositionArray m_StartPositionArray;
ServerResourceArray m_ServerResourceArray;
QuestHelperArray m_QuestHelperArray;
QuestNpcList m_QuestNpcList;
QuestMonsterArray m_QuestMonsterArray;
RentalItemArray m_RentalItemArray;
ItemExchangeArray m_ItemExchangeArray;
ItemExchangeExpArray m_ItemExchangeExpArray;
ItemMixArray m_ItemMixArray;
ItemUpgradeArray m_ItemUpgradeArray;
ItemOpArray m_ItemOpArray;
KingSystemArray m_KingSystemArray;
EventTriggerArray m_EventTriggerArray;
MonsterChallengeArray m_MonsterChallengeArray;
MonsterChallengeSummonListArray m_MonsterChallengeSummonListArray;
EventTimesArray m_EventTimesArray;
MonsterSummonListArray m_MonsterSummonList;
MonsterSummonListZoneArray m_MonsterSummonListZoneArray;
MonsterRespawnListArray m_MonsterRespawnListArray;
MonsterRespawnListInformationArray m_MonsterRespawnListInformationArray;
MonsterRespawnListRandomArray m_MonsterRespawnListRandomArray;
PremiumItemArray m_PremiumItemArray;
PremiumItemExpArray m_PremiumItemExpArray;
CypherRingArray m_CypherRingArray;
std::recursive_mutex m_PetArraylock;
PetArray m_PetArray;
PetArray m_LivingPetArray;
UserRankingArray m_UserRankingArray[2];
UserDailyOpMap m_UserDailyOpMap;
TempleEventUserArray m_TempleEventUserArray;
NationMonumentInformationArray m_NationMonumentInformationArray;
StartPositionRandomArray m_StartPositionRandomArray;
UserItemArray m_UserItemArray;
ObjectEventArray m_ObjectEventArray;
ChatRoomArray m_ChatRoomArray;
ItemCrashArray m_ItemCrashArray;
ItemDupersArray m_ItemDupersArray;
IlegalItemsArray m_IlegalItemsArray;
MerchantListArray m_MerchantListArray;
Atomic<uint16> m_sPartyIndex;
short m_sZoneCount; // AI Server <20><><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD>
bool m_bFirstServerFlag; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><ECBFA1> 1, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 0
bool m_bServerCheckFlag;
bool m_bPointCheckFlag; // AI<41><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NPC<50><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (true:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, false:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
short m_sErrorSocketCount; // <20>̻<EFBFBD><CCBB><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ÿ<EFBFBD>
uint16 m_sYear, m_sMonth, m_sDate, m_sHour, m_sMin, m_sSec;
uint8 m_byWeather;
uint16 m_sWeatherAmount;
int m_nCastleCapture;
uint8 m_ReloadKnightAndUserRanksMinute , m_DevakillSecond;
uint8 m_byBattleOpen, m_byOldBattleOpen;
uint8 m_byBattleZone, m_byBattleZoneType, m_bVictory, m_byOldVictory, m_bResultDelayVictory, m_bKarusFlag, m_bElmoradFlag, m_bMiddleStatueNation;
int32 m_byBattleOpenedTime;
int32 m_byBattleTime;
int32 m_byBattleRemainingTime;
int32 m_sBattleTimeDelay;
int32 m_sBattleResultDelay;
int32 m_byBattleSiegeWarStartTime;
uint8 m_SiegeWarNoticeTime;
std::string m_SiegeWarWinKnightsNotice;
bool m_byBattleSiegeWarOpen;
uint16 m_byBattleSiegeWarOccupy;
bool m_byBattleSiegeWarMomument;
bool m_byBattleSiegeWarTeleport;
uint8 m_sKilledKarusNpc, m_sKilledElmoNpc;
uint8 m_sKarusMonuments, m_sElmoMonuments;
uint8 m_sNereidsMonumentNation[7];
uint16 m_sKarusMonumentPoint, m_sElmoMonumentPoint;
bool m_byKarusOpenFlag, m_byElmoradOpenFlag, m_byBanishFlag, m_byBattleSave, m_bResultDelay, m_bySnowBanishFlag;
short m_sDiscount;
short m_sKarusDead, m_sElmoradDead, m_sBanishDelay;
std::string m_sBattleZoneOpenDays;
std::string m_sEventZoneOpenDays1;
std::string m_sEventZoneOpenDays2;
std::string m_sEventZoneOpenDays3;
uint8 m_nBattleZoneOpenHourStart[WAR_TIME_COUNT], m_nBattlezoneOpenWarZone[WAR_ZONE_COUNT];
std::string m_strKarusCaptain, m_strElmoradCaptain;
uint8 m_nBorderDefenseWarTime[BORDER_DEFENSE_WAR_EVENT_COUNT], m_nChaosTime[CHAOS_EVENT_COUNT], m_nJuraidTime[JURAD_MOUNTAIN_EVENT_COUNT];
uint32 m_nBorderDefenseWarPrizeWonItemNo1[BORDER_DEFENSE_WAR_EVENT_COUNT];
uint32 m_nBorderDefenseWarPrizeWonItemNo2[BORDER_DEFENSE_WAR_EVENT_COUNT];
uint32 m_nBorderDefenseWarPrizeWonItemNo3[BORDER_DEFENSE_WAR_EVENT_COUNT];
uint32 m_nBorderDefenseWarPrizeWonItemNo4_K[BORDER_DEFENSE_WAR_EVENT_COUNT];
uint32 m_nBorderDefenseWarPrizeWonItemNo4_H[BORDER_DEFENSE_WAR_EVENT_COUNT];
uint32 m_nBorderDefenseWarPrizeWonLoyalty[BORDER_DEFENSE_WAR_EVENT_COUNT];
uint32 m_nBorderDefenseWarPrizeWonKnightCash[BORDER_DEFENSE_WAR_EVENT_COUNT];
uint32 m_nBorderDefenseWarPrizeLoserKnightCash[BORDER_DEFENSE_WAR_EVENT_COUNT];
uint32 m_nBorderDefenseWarPrizeLoserLoyalty[BORDER_DEFENSE_WAR_EVENT_COUNT];
uint32 m_nBorderDefenseWarPrizeLoserItem[BORDER_DEFENSE_WAR_EVENT_COUNT];
uint8 m_nBorderDefenseWarMAXLEVEL[BORDER_DEFENSE_WAR_EVENT_COUNT];
uint8 m_nBorderDefenseWarMINLEVEL[BORDER_DEFENSE_WAR_EVENT_COUNT];
bool m_nJuraidMountainOdulTipi[JURAD_MOUNTAIN_EVENT_COUNT];
uint32 m_nJuraidMountainPrizeWonItemNo1[JURAD_MOUNTAIN_EVENT_COUNT];
uint32 m_nJuraidMountainPrizeWonItemNo2[JURAD_MOUNTAIN_EVENT_COUNT];
uint32 m_nJuraidMountainPrizeWonItemNo3[JURAD_MOUNTAIN_EVENT_COUNT];
uint32 m_nJuraidMountainPrizeWonItemNo4_K[JURAD_MOUNTAIN_EVENT_COUNT];
uint32 m_nJuraidMountainPrizeWonItemNo4_H[JURAD_MOUNTAIN_EVENT_COUNT];
uint32 m_nJuraidMountainPrizeWonLoyalty[JURAD_MOUNTAIN_EVENT_COUNT];
uint32 m_nJuraidMountainPrizeWonExp[JURAD_MOUNTAIN_EVENT_COUNT];
uint32 m_nJuraidMountainPrizeWonKnightCash[JURAD_MOUNTAIN_EVENT_COUNT];
uint32 m_nJuraidMountainPrizeLoserKnightCash[JURAD_MOUNTAIN_EVENT_COUNT];
uint32 m_nJuraidMountainPrizeLoserLoyalty[JURAD_MOUNTAIN_EVENT_COUNT];
uint32 m_nJuraidMountainPrizeLoserItem[JURAD_MOUNTAIN_EVENT_COUNT];
uint32 m_nJuraidMountainPrizeLoserExp[JURAD_MOUNTAIN_EVENT_COUNT];
uint8 m_nJuraidMountainMAXLEVEL[JURAD_MOUNTAIN_EVENT_COUNT];
uint8 m_nJuraidMountainMINLEVEL[JURAD_MOUNTAIN_EVENT_COUNT];
uint32 m_nChaosPrizeWonItemNo1[CHAOS_EVENT_COUNT];
uint32 m_nChaosPrizeWonItemNo2[CHAOS_EVENT_COUNT];
uint32 m_nChaosPrizeWonItemNo3[CHAOS_EVENT_COUNT];
uint32 m_nChaosPrizeWonItemNo4_K[CHAOS_EVENT_COUNT];
uint32 m_nChaosPrizeWonItemNo4_H[CHAOS_EVENT_COUNT];
uint32 m_nChaosPrizeWonLoyalty[CHAOS_EVENT_COUNT];
uint32 m_nChaosPrizeWonExp[CHAOS_EVENT_COUNT];
uint32 m_nChaosPrizeWonKnightCash[CHAOS_EVENT_COUNT];
uint32 m_nChaosPrizeLoserKnightCash[CHAOS_EVENT_COUNT];
uint32 m_nChaosPrizeLoserLoyalty[CHAOS_EVENT_COUNT];
uint32 m_nChaosPrizeLoserItem[CHAOS_EVENT_COUNT];
uint32 m_nChaosPrizeLoserExp[CHAOS_EVENT_COUNT];
uint8 m_nPVPMonumentNation[MAX_ZONE_ID];
uint8 m_nEventMonumentNation[MAX_ZONE_ID];
uint32 m_GameServerPort;
int32 m_nGameMasterRHitDamage;
int32 m_nBonusTimeInterval, m_nBonusTimeGold, m_nBonusPVPWarItem;
uint16 m_CountofTickets;
uint8 m_nPlayerRankingResetTime;
std::string m_sPlayerRankingsRewardZones;
uint32 m_nPlayerRankingKnightCashReward;
uint32 m_nPlayerRankingLoyaltyReward,m_Grade1,m_Grade2,m_Grade3,m_Grade4,m_Drop1,m_Drop2,m_Drop3,m_Drop4,m_Drop5,m_gDrop1,m_gDrop2,
m_gDrop3,m_gDrop4,m_gDrop5,m_sling,f_Drop1,f_Drop2,f_Drop3,gf_Drop1,gf_Drop2,gf_Drop3;
uint8 m_AutoNoticeIsActive;
std::string m_AutoNotice;
std::string m_AutoNoticeText;
uint16 m_nTempleEventRemainSeconds;
uint8 m_bMaxRegenePoint;
bool m_bPermanentChatMode;
std::string m_strPermanentChat;
uint8 m_bSantaOrAngel;
uint8 m_sRankResetHour;
int TotalMiningExchangeRate;
int TotalGoldenMiningExchangeRate;
uint32 bRandArrayNormalMattock[10000];
uint32 bRandArrayGoldenMattock[10000];
// National Points Settings
int m_Loyalty_Ardream_Source;
int m_Loyalty_Ardream_Target;
int m_Loyalty_Ronark_Land_Base_Source;
int m_Loyalty_Ronark_Land_Base_Target;
int m_Loyalty_Ronark_Land_Source;
int m_Loyalty_Ronark_Land_Target;
int m_Loyalty_Other_Zone_Source;
int m_Loyalty_Other_Zone_Target;
int m_Loyalty_Mini_Pvp_Source;
int m_Loyalty_Mini_Pvp_Target;
// Bifrost
uint8 m_nBifrostTime[BIFROST_EVENT_COUNT];
uint8 m_BifrostVictory;
uint8 m_sBifrostVictoryAll;
uint16 m_sBifrostRemainingTime;
uint16 m_sBifrostTime;
bool m_sBifrostWarStart;
uint8 m_sBifrostVictoryNoticeAll;
uint16 m_xBifrostRemainingTime;
uint16 m_xJoinOtherNationBifrostTime;
uint16 m_xBifrostTime;
uint16 m_xBifrostMonumentAttackTime;
bool m_bAttackBifrostMonument;
void SendEventRemainingTime(bool bSendAll = false, CUser *pUser = nullptr, uint8 ZoneID = 0);
uint16 CalcEventRemainingTime();
bool m_IsMagicTableInUpdateProcess;
bool m_IsPlayerRankingUpdateProcess;
// Forgetten Temple
std::vector<uint16> m_nForgettenTempleUsers;
bool m_bForgettenTempleIsActive;
int8 m_nForgettenTempleStartHour;
int8 m_nForgettenTempleLevelMin;
int8 m_nForgettenTempleLevelMax;
int32 m_nForgettenTempleStartTime;
uint8 m_nForgettenTempleChallengeTime;
bool m_bForgettenTempleSummonMonsters;
uint8 m_nForgettenTempleCurrentStage;
uint8 m_nForgettenTempleLastStage;
ForgettenTempleMonsterList m_ForgettenTempleMonsterList;
uint32 m_nForgettenTempleLastSummonTime;
bool m_nForgettenTempleBanishFlag;
uint8 m_nForgettenTempleBanishTime;
// Event Zones
std::vector<uint16> m_nEventZoneUsers;
bool m_bEventZoneIsActive;
int8 m_nEventZoneStartHour;
int8 m_nEventZoneLevelMin;
int8 m_nEventZoneLevelMax;
int32 m_nEventZoneStartTime;
uint8 m_nEventZoneTime;
bool m_nEventZoneBanishFlag;
uint8 m_nEventZoneBanishTime;
// zone server info
int m_nServerNo, m_nServerGroupNo;
int m_nServerGroup; // server<65><72> <20><>ȣ(0:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 1:<3A><><EFBFBD><EFBFBD>1<EFBFBD><31>, 2:<3A><><EFBFBD><EFBFBD>2<EFBFBD><32>)
ServerArray m_ServerArray;
ServerArray m_ServerGroupArray;
NameMap m_accountNameMap,
m_characterNameMap;
BotNameMap m_BotcharacterNameMap;
std::recursive_mutex m_accountNameLock,
m_characterNameLock, m_BotcharacterNameLock,
m_questNpcLock;
bool m_IsDupeUpdateProcess;
bool m_IlegalItemsUpdateProcess;
// Controlled weather events set by Kings
uint8 m_byKingWeatherEvent;
uint8 m_byKingWeatherEvent_Day;
uint8 m_byKingWeatherEvent_Hour;
uint8 m_byKingWeatherEvent_Minute;
// Military Camps
uint8 KarusBaseMilitaryCampCount, ElmoradBaseMilitaryCampCount, KarusEslantMilitaryCampCount, ElmoradEslantMilitaryCampCount, MoradonMilitaryCampCount;
// XP/coin/NP events
uint8 m_byNPEventAmount, m_byExpEventAmount, m_byCoinEventAmount,m_byPKZoneExpEventAmount,Reskillmoney,Restatmoney;
uint8 MAXLVLINI;
uint8 MaxLevel62Control;
// EXP 2, EXP 10 , EXP 50, EXP 100, EXP 500, EXP 1000, EXP TOTAL
int m_byExpx2, m_byExpx10, m_byExpx50, m_byExpx100, m_byExpx500, m_byExpx1000, m_byExpTotal;
// Gold 2, Gold 10 , Gold 50, Gold 100, Gold 500, Gold 1000, Gold TOTAL
int m_byGoldx2, m_byGoldx10, m_byGoldx50, m_byGoldx100, m_byGoldx500, m_byGoldx1000, m_byGoldTotal;
INLINE CLuaEngine * GetLuaEngine() { return &m_luaEngine; }
KOSocketMgr<CUser> m_socketMgr;
ClientSocketMgr<CAISocket> m_aiSocketMgr;
FILE *m_fpDeathUser;
FILE *m_fpDeathNpc;
FILE *m_fpChat;
FILE *m_fpGM;
FILE *m_upgradelog;
FILE *m_fpCheat;
FILE *m_fpMerchant;
FILE *m_fpTrade;
void WriteMerchantUserLogFile(std::string & logMessage);
void WriteTradeUserLogFile(std::string & logMessage);
void WriteDeathUserLogFile(std::string & logMessage);
void WriteDeathNpcLogFile(std::string & logMessage);
void WriteChatLogFile(std::string & logMessage);
void WriteGMLogFile(std::string & logMessage);
void WriteUpgradeLogFile(std::string & logMessage);
void WriteCheatLogFile(std::string & logMessage);
private:
CLuaEngine m_luaEngine;
std::string m_strGameDSN, m_strAccountDSN;
std::string m_strGameUID, m_strAccountUID;
std::string m_strGamePWD, m_strAccountPWD;
bool m_bMarsEnabled;
bool ProcessServerCommand(std::string & command);
public:
void InitServerCommands();
void CleanupServerCommands();
static ServerCommandTable s_commandTable;
COMMAND_HANDLER(HandleReloadDupeCommand);
COMMAND_HANDLER(HandleReloadIlegalItemsCommand);
COMMAND_HANDLER(HandleNoticeCommand);
COMMAND_HANDLER(HandleNoticeallCommand);
COMMAND_HANDLER(HandleKillUserCommand);
COMMAND_HANDLER(HandleWar1OpenCommand);
COMMAND_HANDLER(HandleWar2OpenCommand);
COMMAND_HANDLER(HandleWar3OpenCommand);
COMMAND_HANDLER(HandleWar4OpenCommand);
COMMAND_HANDLER(HandleWar5OpenCommand);
COMMAND_HANDLER(HandleWar6OpenCommand);
COMMAND_HANDLER(HandleOpenArdreamCommand);
COMMAND_HANDLER(HandleOpenCZCommand);
COMMAND_HANDLER(HandleCloseCZEventCommand);
COMMAND_HANDLER(HandleCloseArdreamEventCommand);
COMMAND_HANDLER(HandleSnowWarOpenCommand);
COMMAND_HANDLER(HandleSiegeWarOpenCommand);
COMMAND_HANDLER(HandleWarCloseCommand);
COMMAND_HANDLER(HandleShutdownCommand);
COMMAND_HANDLER(HandleDiscountCommand);
COMMAND_HANDLER(HandleGlobalDiscountCommand);
COMMAND_HANDLER(HandleDiscountOffCommand);
COMMAND_HANDLER(HandleCaptainCommand);
COMMAND_HANDLER(HandleSantaCommand);
COMMAND_HANDLER(HandleSantaOffCommand);
COMMAND_HANDLER(HandleAngelCommand);
COMMAND_HANDLER(HandlePermanentChatCommand);
COMMAND_HANDLER(HandlePermanentChatOffCommand);
COMMAND_HANDLER(HandleReloadNoticeCommand);
COMMAND_HANDLER(HandleItemTablesCommand);
COMMAND_HANDLER(HandleReloadTablesCommand);
COMMAND_HANDLER(HandleReloadMagicsCommand);
COMMAND_HANDLER(HandleReloadBotsCommand);
COMMAND_HANDLER(HandleReloadQuestCommand);
COMMAND_HANDLER(HandleReloadRanksCommand);
COMMAND_HANDLER(HandleNPAddCommand);
COMMAND_HANDLER(HandleExpAddCommand);
COMMAND_HANDLER(HandleGiveItemCommand);
COMMAND_HANDLER(HandleMoneyAddCommand);
COMMAND_HANDLER(HandleTeleportAllCommand);
COMMAND_HANDLER(HandleCountCommand);
COMMAND_HANDLER(HandlePermitConnectCommand);
COMMAND_HANDLER(HandleWarResultCommand);
COMMAND_HANDLER(HandleMonSummonCommand);
COMMAND_HANDLER(HandleSnowWarCloseCommand);
};
extern CGameServerDlg * g_pMain;
#endif