From cfca023bf6c06ada8e512364186c0765a2f1f4d1 Mon Sep 17 00:00:00 2001 From: dudusiao <12389329292@ww.xx> Date: Sun, 10 Jan 2021 04:21:29 +0100 Subject: [PATCH 1/2] small part of work 4 DBSets 100% done --- .gitignore | 3 + DataServer/CQuery.h | 15 +- DataServer/Dataserver.vcxproj | 16 +- DataServer/Dataserver.vcxproj.filters | 6 - DataServer/DbSet/AccountCharDBSet.cpp | 389 +- DataServer/DbSet/AccountCharDBSet.h | 53 +- DataServer/DbSet/ArcaBattleDBSet.cpp | 1424 +++--- DataServer/DbSet/ArcaBattleDBSet.h | 77 +- DataServer/DbSet/BlockChatUserDBSet.cpp | 119 +- DataServer/DbSet/BlockChatUserDBSet.h | 22 +- DataServer/DbSet/BombHuntDBSet.cpp | 121 +- DataServer/DbSet/BombHuntDBSet.h | 24 +- DataServer/MainFrm.cpp | 28 +- DataServer/common/ItemSocketOptionDefine.h | 182 - DataServer/common/zzzitem.cpp | 27 - DataServer/include/Sprodef.h | 1459 +----- DataServer/include/define.h | 4960 +------------------- DataServer/include/public.h | 183 +- DataServer/protocol.cpp | 707 --- DataServer/stdafx.h | 28 +- 20 files changed, 1250 insertions(+), 8593 deletions(-) create mode 100644 .gitignore delete mode 100644 DataServer/common/ItemSocketOptionDefine.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7cdd089 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/.vs +/DataServer/Debug +/DataServer/Dataserver.vcxproj.user diff --git a/DataServer/CQuery.h b/DataServer/CQuery.h index dff4084..6f0ba57 100644 --- a/DataServer/CQuery.h +++ b/DataServer/CQuery.h @@ -4,9 +4,17 @@ class CQuery { public: - // ִ ÷, BLOB , NULL ʵ尪 - enum { MAXCOL=100, BLOBBATCH=10000, CQUERYNULL=-100, CQUERYEOF=-101, - CQUERYNOCOL=-102, CQUERYERROR=-103 }; + + enum + { + MAXCOL = 100, + BLOBBATCH = 10000, + CQUERYNULL = -100, + CQUERYEOF = -101, + CQUERYNOCOL = -102, + CQUERYERROR = -103 + }; + private: SQLHENV hEnv; // ȯ ڵ SQLHDBC hDbc; // ڵ @@ -20,6 +28,7 @@ class CQuery int FindCol(char *name); // ÷ ̸κ ȣ ãش. BOOL ReConnect(); + public: SQLINTEGER AffectCount; // ڵ SQLHSTMT hStmt; // ڵ. Ƿ public diff --git a/DataServer/Dataserver.vcxproj b/DataServer/Dataserver.vcxproj index c8250cd..0e6a6bd 100644 --- a/DataServer/Dataserver.vcxproj +++ b/DataServer/Dataserver.vcxproj @@ -21,21 +21,21 @@ {31FCC9EC-F161-4F2D-9709-27F984C95106} Dataserver - 8.1 + 10.0 MFCProj Application true - v141 + v142 MultiByte Dynamic Application false - v140_xp + v141_xp false MultiByte Dynamic @@ -43,14 +43,14 @@ Application true - v141 + v142 Unicode Dynamic Application false - v141 + v142 true Unicode Dynamic @@ -75,15 +75,20 @@ true + $(ExecutablePath) + $(ProjectDir);$(IncludePath) true + $(ProjectDir);$(IncludePath) false + $(ProjectDir);$(IncludePath) false + $(ProjectDir);$(IncludePath) @@ -202,7 +207,6 @@ - diff --git a/DataServer/Dataserver.vcxproj.filters b/DataServer/Dataserver.vcxproj.filters index fed649f..b3c7dd7 100644 --- a/DataServer/Dataserver.vcxproj.filters +++ b/DataServer/Dataserver.vcxproj.filters @@ -31,9 +31,6 @@ {87b90925-a7f7-4013-a19d-f08b81f8c780} - - {247cb460-1a57-4be0-a8c8-b938c53108ed} - @@ -261,9 +258,6 @@ Include - - Common - Common diff --git a/DataServer/DbSet/AccountCharDBSet.cpp b/DataServer/DbSet/AccountCharDBSet.cpp index 1a64370..7b01d3f 100644 --- a/DataServer/DbSet/AccountCharDBSet.cpp +++ b/DataServer/DbSet/AccountCharDBSet.cpp @@ -1,27 +1,17 @@ -// AccountCharDBSet.cpp: implementation of the CAccountCharDBSet class. -// Decompilation Completed -> All Same as WebZen -////////////////////////////////////////////////////////////////////// - #include "stdafx.h" #include "AccountCharDBSet.h" -////////////////////////////////////////////////////////////////////// -// Construction/Destruction -////////////////////////////////////////////////////////////////////// - CAccountCharDBSet::CAccountCharDBSet() { - } CAccountCharDBSet::~CAccountCharDBSet() { - } BOOL CAccountCharDBSet::Connect() { - if(m_DBQuery.Connect(3,szDbConnectDsn,szDbConnectID,szDbConnectPass) == FALSE) + if (m_DBQuery.Connect(3, szDbConnectDsn, szDbConnectID, szDbConnectPass) == FALSE) { MsgBox(" DB "); return FALSE; @@ -34,20 +24,22 @@ BOOL CAccountCharDBSet::CreateAccountCharacter(char* id) { CString qSQL; qSQL.Format("INSERT AccountCharacter (Id) VALUES ('%s')", id); + if (m_DBQuery.Exec(qSQL) == TRUE) { return TRUE; } + return FALSE; } int CAccountCharDBSet::DeleteAccountCharacter(char* id, char* gameid) { CString qSQL; - char gid[MAX_IDSTRING+1]; + char gid[MAX_IDSTRING + 1]; qSQL.Format("SELECT * FROM AccountCharacter where Id='%s'", id); - + if (m_DBQuery.Exec(qSQL) == FALSE) { m_DBQuery.Clear(); @@ -62,58 +54,56 @@ int CAccountCharDBSet::DeleteAccountCharacter(char* id, char* gameid) m_DBQuery.GetStr("GameID1", gid); - if(strcmp(gid, gameid) == 0) + if (strcmp(gid, gameid) == 0) { m_DBQuery.Clear(); - this->SaveAccountCharacter(id, 0, ""); + SaveAccountCharacter(id, 0, ""); return 0; } m_DBQuery.GetStr("GameID2", gid); - if(strcmp(gid, gameid) == 0) + if (strcmp(gid, gameid) == 0) { m_DBQuery.Clear(); - this->SaveAccountCharacter(id, 1, ""); + SaveAccountCharacter(id, 1, ""); return 1; } m_DBQuery.GetStr("GameID3", gid); - if(strcmp(gid, gameid) == 0) + if (strcmp(gid, gameid) == 0) { m_DBQuery.Clear(); - this->SaveAccountCharacter(id, 2, ""); + SaveAccountCharacter(id, 2, ""); return 2; } m_DBQuery.GetStr("GameID4", gid); - if(strcmp(gid, gameid) == 0) + if (strcmp(gid, gameid) == 0) { m_DBQuery.Clear(); - this->SaveAccountCharacter(id, 3, ""); + SaveAccountCharacter(id, 3, ""); return 3; } m_DBQuery.GetStr("GameID5", gid); - if(strcmp(gid, gameid) == 0) + if (strcmp(gid, gameid) == 0) { m_DBQuery.Clear(); - this->SaveAccountCharacter(id, 4, ""); + SaveAccountCharacter(id, 4, ""); return 4; } m_DBQuery.Clear(); - return -1; } BOOL CAccountCharDBSet::SaveAccountCharacter(char* id, char* GameID1, char* GameID2, char* GameID3, char* GameID4, char* GameID5) { CString qSQL; - qSQL.Format("UPDATE AccountCharacter SET GameID1='%s',GameID2='%s', GameID3='%s', GameID4='%s', GameID5='%s' WHERE Id='%s'", GameID1, GameID2, GameID3, GameID4, GameID5, id); if (m_DBQuery.Exec(qSQL) == TRUE) @@ -128,26 +118,26 @@ BOOL CAccountCharDBSet::SaveAccountCharacter(char* id, int pos, char* GameID) { CString qSQL; - switch(pos) - { - case 0: - qSQL.Format("UPDATE AccountCharacter SET GameID1='%s' WHERE Id='%s'", GameID, id); - break; - case 1: - qSQL.Format("UPDATE AccountCharacter SET GameID2='%s' WHERE Id='%s'", GameID, id); - break; - case 2: - qSQL.Format("UPDATE AccountCharacter SET GameID3='%s' WHERE Id='%s'", GameID, id); - break; - case 3: - qSQL.Format("UPDATE AccountCharacter SET GameID4='%s' WHERE Id='%s'", GameID, id); - break; - case 4: - qSQL.Format("UPDATE AccountCharacter SET GameID5='%s' WHERE Id='%s'", GameID, id); - break; - default: - LogAdd("error : %s %d pos: %d ", __FILE__, __LINE__, pos); - break; + switch (pos) + { + case 0: + qSQL.Format("UPDATE AccountCharacter SET GameID1='%s' WHERE Id='%s'", GameID, id); + break; + case 1: + qSQL.Format("UPDATE AccountCharacter SET GameID2='%s' WHERE Id='%s'", GameID, id); + break; + case 2: + qSQL.Format("UPDATE AccountCharacter SET GameID3='%s' WHERE Id='%s'", GameID, id); + break; + case 3: + qSQL.Format("UPDATE AccountCharacter SET GameID4='%s' WHERE Id='%s'", GameID, id); + break; + case 4: + qSQL.Format("UPDATE AccountCharacter SET GameID5='%s' WHERE Id='%s'", GameID, id); + break; + default: + LogAdd("error : %s %d pos: %d ", __FILE__, __LINE__, pos); + break; } if (m_DBQuery.Exec(qSQL) == TRUE) @@ -161,7 +151,6 @@ BOOL CAccountCharDBSet::SaveAccountCharacter(char* id, int pos, char* GameID) BOOL CAccountCharDBSet::GetAccountId(char* Id) { CString qSQL; - qSQL.Format("SELECT Id FROM AccountCharacter WHERE Id='%s'", Id); char buffer[256]; @@ -177,7 +166,6 @@ BOOL CAccountCharDBSet::GetAccountId(char* Id) BOOL CAccountCharDBSet::GetAccountInfo(char* Id, LPAccountCharacterInfo lpACInfo) { CString qSQL; - qSQL.Format("SELECT * FROM AccountCharacter WHERE Id='%s'", Id); if (m_DBQuery.Exec(qSQL) == FALSE) @@ -189,45 +177,43 @@ BOOL CAccountCharDBSet::GetAccountInfo(char* Id, LPAccountCharacterInfo lpACInfo if (m_DBQuery.Fetch() == SQL_NO_DATA) { m_DBQuery.Clear(); - return FALSE; + return FALSE; } m_DBQuery.GetStr("Id", lpACInfo->AccountId); - - if( strlen(lpACInfo->AccountId) < 1 ) + + if (strlen(lpACInfo->AccountId) < 1) { m_DBQuery.Clear(); - return FALSE; + return FALSE; } - if( strcmp(lpACInfo->AccountId,Id) != 0) + if (strcmp(lpACInfo->AccountId, Id) != 0) { - LogAddC(2,"error-L1:'%s' '%s' ̵ ʴ.", lpACInfo->AccountId, Id); + LogAddC(2, "error-L1:'%s' '%s' ̵ ʴ.", lpACInfo->AccountId, Id); m_DBQuery.Clear(); - return FALSE; + return FALSE; } - + int ctl_code = 0; - + lpACInfo->DBNumber = m_DBQuery.GetInt("Number"); - m_DBQuery.GetStr("GameID1", lpACInfo->GameID1); m_DBQuery.GetStr("GameID2", lpACInfo->GameID2); m_DBQuery.GetStr("GameID3", lpACInfo->GameID3); m_DBQuery.GetStr("GameID4", lpACInfo->GameID4); m_DBQuery.GetStr("GameID5", lpACInfo->GameID5); - + int movecount = m_DBQuery.GetInt("MoveCnt"); - + if (movecount < 0) { movecount = 0; } lpACInfo->MoveCnt = movecount; - LogAddTD("CharName : %s 1[%s] 2[%s] 3[%s] 4[%s] 5[%s]", Id, lpACInfo->GameID1, lpACInfo->GameID2, lpACInfo->GameID3, lpACInfo->GameID4, lpACInfo->GameID5); - + m_DBQuery.Clear(); return TRUE; } @@ -235,33 +221,31 @@ BOOL CAccountCharDBSet::GetAccountInfo(char* Id, LPAccountCharacterInfo lpACInfo BYTE CAccountCharDBSet::GetAccountCharCtlCode(char* Id) { CString qSQL; - int ctl_code = 0; - - qSQL.Format("SELECT CtlCode FROM AccountCharacter WHERE Id=%s",Id); - + + qSQL.Format("SELECT CtlCode FROM AccountCharacter WHERE Id=%s", Id); + if (m_DBQuery.Exec(qSQL) == FALSE) { LogAdd("%s CtlCode . #1", Id); return 0; } - + if (m_DBQuery.Fetch() == SQL_NO_DATA) { m_DBQuery.Clear(); LogAdd("%s CtlCode . #2", Id); - return 0; + return 0; } - + ctl_code = m_DBQuery.GetInt("CtlCode"); - + if (ctl_code < 0) { ctl_code = 0; } - + m_DBQuery.Clear(); - return ctl_code; } @@ -269,8 +253,8 @@ int CAccountCharDBSet::GetAccountCharBlank(char* Id) { CString qSQL; - char GameID[5][MAX_IDSTRING+1]; - char szAccountId[MAX_IDSTRING+1]; + char GameID[MAXUSERCHARACTER][MAX_IDSTRING + 1]; + char szAccountId[MAX_IDSTRING + 1]; qSQL.Format("SELECT * FROM AccountCharacter WHERE Id='%s'", Id); @@ -279,81 +263,78 @@ int CAccountCharDBSet::GetAccountCharBlank(char* Id) m_DBQuery.Clear(); return 0; } - + m_DBQuery.Fetch(); m_DBQuery.GetStr("Id", szAccountId); - - if ( strlen(szAccountId) < 1) + + if (strlen(szAccountId) < 1) { LogAdd(" . 1"); m_DBQuery.Clear(); - return -1; + return -1; } - - if ( strcmp(szAccountId,Id) != 0) + + if (strcmp(szAccountId, Id) != 0) { LogAdd(" . 2 %s %s", szAccountId, Id); m_DBQuery.Clear(); - return -1; + return -1; } - - m_DBQuery.GetStr("GameID1",GameID[0]); - - if ( strlen(GameID[0]) < 1) + + m_DBQuery.GetStr("GameID1", GameID[0]); + + if (strlen(GameID[0]) < 1) { m_DBQuery.Clear(); - return 0; + return 0; } - - m_DBQuery.GetStr("GameID2",GameID[1]); - - if ( strlen(GameID[1]) < 1) + + m_DBQuery.GetStr("GameID2", GameID[1]); + + if (strlen(GameID[1]) < 1) { m_DBQuery.Clear(); - return 1; + return 1; } - - m_DBQuery.GetStr("GameID3",GameID[2]); - - if ( strlen(GameID[2]) < 1) + + m_DBQuery.GetStr("GameID3", GameID[2]); + + if (strlen(GameID[2]) < 1) { m_DBQuery.Clear(); - return 2; + return 2; } - - m_DBQuery.GetStr("GameID4",GameID[3]); - - if ( strlen(GameID[3]) < 1) + + m_DBQuery.GetStr("GameID4", GameID[3]); + + if (strlen(GameID[3]) < 1) { m_DBQuery.Clear(); - return 3; + return 3; } - - m_DBQuery.GetStr("GameID5",GameID[4]); - - if ( strlen(GameID[4]) < 1) + + m_DBQuery.GetStr("GameID5", GameID[4]); + + if (strlen(GameID[4]) < 1) { m_DBQuery.Clear(); - return 4; + return 4; } m_DBQuery.Clear(); - return -1; } BOOL CAccountCharDBSet::CurAccountCharacterSet(char* id, char* GameID) { CString qSQL; - qSQL.Format("UPDATE AccountCharacter SET GameIDC='%s' WHERE Id='%s'", GameID, id); - + m_DBQuery.Exec(qSQL); - return TRUE; } -BOOL CAccountCharDBSet::GetSummonerCardInfo(char* Id) +BYTE CAccountCharDBSet::GetSummonerCardInfo(char* Id) { CString qSQL; @@ -370,22 +351,16 @@ BOOL CAccountCharDBSet::GetSummonerCardInfo(char* Id) m_DBQuery.Clear(); return FALSE; } - - if (m_DBQuery.GetInt(1) == FALSE) - { - m_DBQuery.Clear(); - return FALSE; - } - + + BYTE btCharacterCardInfo = m_DBQuery.GetInt(1); m_DBQuery.Clear(); - return TRUE; + return btCharacterCardInfo; } -BOOL CAccountCharDBSet::SetSummonerCardInfo(char* Id) +BYTE CAccountCharDBSet::SetSummonerCardInfo(char* Id, BYTE btCharacterCardInfo) { CString qSQL; - - qSQL.Format("UPDATE AccountCharacter SET Summoner = 1 WHERE Id = '%s'", Id); + qSQL.Format("UPDATE AccountCharacter SET Summoner = %d WHERE Id = '%s'", btCharacterCardInfo, Id); if (m_DBQuery.Exec(qSQL) == FALSE) { @@ -393,39 +368,71 @@ BOOL CAccountCharDBSet::SetSummonerCardInfo(char* Id) return FALSE; } - return TRUE; + return btCharacterCardInfo; } -BOOL CAccountCharDBSet::SetCharacterExGameServerCode(char* Name, short sExGameServerCode) +BOOL CAccountCharDBSet::SetCharacterSlotCount(char* Name, BYTE btAddSlotCount) { - CString qSQL; - BYTE btSlotCount = 0; + CString qSql; + qSql.Format("SELECT SlotCount FROM AccountCharacter WHERE Id = '%s'", Name); - qSQL.Format("SELECT ExtendedInvenCount FROM Character WHERE Name = '%s'", Name); - - if (m_DBQuery.Exec(qSQL) == FALSE) + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return FALSE; } + if (m_DBQuery.Fetch() == SQL_NO_DATA) { m_DBQuery.Clear(); - return FALSE; + return FALSE; } + BYTE btSlotCount = m_DBQuery.GetInt(1); m_DBQuery.Clear(); - - qSQL.Empty(); - - qSQL.Format("UPDATE Character SET ExGameServerCode = %d WHERE Name = '%s'", sExGameServerCode, Name); - - if (m_DBQuery.Exec(qSQL) == FALSE) + + if (btAddSlotCount + btSlotCount > 5) + { + return FALSE; + } + + qSql.Empty(); + qSql.Format("UPDATE AccountCharacter SET SlotCount = SlotCount + %d WHERE Id = '%s'", btAddSlotCount, Name); + + if (m_DBQuery.Exec(qSql) == FALSE) + { + m_DBQuery.Clear(); + return FALSE; + } + + return TRUE; +} + +BOOL CAccountCharDBSet::GetCharacterSlotCount(char* Name, BYTE& btSlotCount) +{ + CString qSql; + qSql.Format("SELECT SlotCount FROM AccountCharacter WHERE Id = '%s'", Name); + + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return FALSE; } + if (m_DBQuery.Fetch() == SQL_NO_DATA) + { + m_DBQuery.Clear(); + return FALSE; + } + + btSlotCount = m_DBQuery.GetInt(1); + + if (btSlotCount > MAXUSERCHARACTER) + { + btSlotCount = MAXUSERCHARACTER; + } + + m_DBQuery.Clear(); return TRUE; } @@ -449,17 +456,15 @@ BOOL CAccountCharDBSet::SetCharacterExtendedInvenCountAdd(char* Name, BYTE btAdd } btSlotCount = m_DBQuery.GetInt(1); - m_DBQuery.Clear(); - if (btSlotCount + btAddExtendedInvenCount > 2) + if (btSlotCount + btAddExtendedInvenCount > MAX_EXTENDINVENTORY) { LogAdd("error : %s %d btSlotCount + btAddExtendedInvenCount: %d ", __FILE__, __LINE__, btSlotCount + btAddExtendedInvenCount); return FALSE; } qSQL.Empty(); - qSQL.Format("UPDATE Character SET ExtendedInvenCount = %d WHERE Name = '%s'", btSlotCount + btAddExtendedInvenCount, Name); if (m_DBQuery.Exec(qSQL) == FALSE) @@ -492,14 +497,13 @@ BOOL CAccountCharDBSet::SetCharacterExtendedInvenCountReplace(char* Name, BYTE b m_DBQuery.Clear(); - if (btReplaceExtendedInvenCount > 2) + if (btReplaceExtendedInvenCount > MAX_EXTENDINVENTORY) { LogAdd("error : %s %d btReplaceExtendedInvenCount: %d ", __FILE__, __LINE__, btReplaceExtendedInvenCount); return FALSE; } qSQL.Empty(); - qSQL.Format("UPDATE Character SET ExtendedInvenCount = %d WHERE Name = '%s'", btReplaceExtendedInvenCount, Name); if (m_DBQuery.Exec(qSQL) == FALSE) @@ -511,10 +515,9 @@ BOOL CAccountCharDBSet::SetCharacterExtendedInvenCountReplace(char* Name, BYTE b return TRUE; } -BOOL CAccountCharDBSet::GetCharacterExtendedInvenCount(char* Name, char* btAddExtendedInvenCount) +BOOL CAccountCharDBSet::GetCharacterExtendedInvenCount(char* Name, LPBYTE btAddExtendedInvenCount) { - CString qSQL; - + CString qSQL; qSQL.Format("SELECT ExtendedInvenCount FROM Character WHERE Name = '%s'", Name); if (m_DBQuery.Exec(qSQL) == FALSE) @@ -531,13 +534,12 @@ BOOL CAccountCharDBSet::GetCharacterExtendedInvenCount(char* Name, char* btAddEx *btAddExtendedInvenCount = m_DBQuery.GetInt(1); - if (*btAddExtendedInvenCount > 2) + if (*btAddExtendedInvenCount > MAX_EXTENDINVENTORY) { - *btAddExtendedInvenCount = 2; + *btAddExtendedInvenCount = MAX_EXTENDINVENTORY; } m_DBQuery.Clear(); - return TRUE; } @@ -560,18 +562,16 @@ BOOL CAccountCharDBSet::SetCharacterExtendedWarehouseCountAdd(char* Name, BYTE b return FALSE; } - btSlotCount = m_DBQuery.GetInt(1); - + btSlotCount = m_DBQuery.GetInt(1); m_DBQuery.Clear(); - if (btSlotCount + btAddExtendedWarehouseCount > 1) + if (btSlotCount + btAddExtendedWarehouseCount > MAX_EXTENDWAREHOUSE) { LogAdd("error : %s %d btSlotCount + btAddExtendedWarehouseCount: %d ", __FILE__, __LINE__, btSlotCount + btAddExtendedWarehouseCount); return FALSE; } - qSQL.Empty(); - + qSQL.Empty(); qSQL.Format("UPDATE AccountCharacter SET ExtendedWarehouseCount = %d WHERE Id = '%s'", btSlotCount + btAddExtendedWarehouseCount, Name); if (m_DBQuery.Exec(qSQL) == FALSE) @@ -604,14 +604,13 @@ BOOL CAccountCharDBSet::SetCharacterExtendedWarehouseCountReplace(char* Name, BY m_DBQuery.Clear(); - if (btReplaceExtendedWarehouseCount > 1) + if (btReplaceExtendedWarehouseCount > MAX_EXTENDWAREHOUSE) { LogAdd("error : %s %d btReplaceExtendedWarehouseCount: %d ", __FILE__, __LINE__, btReplaceExtendedWarehouseCount); return FALSE; } qSQL.Empty(); - qSQL.Format("UPDATE AccountCharacter SET ExtendedWarehouseCount = %d WHERE Id = '%s'", btReplaceExtendedWarehouseCount, Name); if (m_DBQuery.Exec(qSQL) == FALSE) @@ -623,7 +622,7 @@ BOOL CAccountCharDBSet::SetCharacterExtendedWarehouseCountReplace(char* Name, BY return TRUE; } -BOOL CAccountCharDBSet::GetCharacterExtendedWarehouseCount(char* Name, BYTE* btAddExtendedWarehouseCount) +BOOL CAccountCharDBSet::GetCharacterExtendedWarehouseCount(char* Name, LPBYTE btAddExtendedWarehouseCount) { CString qSQL; @@ -643,87 +642,11 @@ BOOL CAccountCharDBSet::GetCharacterExtendedWarehouseCount(char* Name, BYTE* btA *btAddExtendedWarehouseCount = m_DBQuery.GetInt(1); - if (*btAddExtendedWarehouseCount > 1) + if (*btAddExtendedWarehouseCount > MAX_EXTENDWAREHOUSE) { - *btAddExtendedWarehouseCount = 1; + *btAddExtendedWarehouseCount = MAX_EXTENDWAREHOUSE; } m_DBQuery.Clear(); - return TRUE; -} - -BOOL CAccountCharDBSet::SetCharacterSlotCount(char *Name, BYTE btAddSlotCount) -{ - int result; - unsigned __int8 btSlotCount; - CString qSql; - - qSql.Format("SELECT SlotCount FROM AccountCharacter WHERE Id = '%s'",Name); - - if (this->m_DBQuery.Exec(qSql)) - { - if (this->m_DBQuery.Fetch() == SQL_NO_DATA) - { - this->m_DBQuery.Clear(); - result = 0; - } - else - { - btSlotCount = this->m_DBQuery.GetInt(1); - this->m_DBQuery.Clear(); - if (btAddSlotCount + btSlotCount <= 5) - { - qSql.Format("UPDATE AccountCharacter SET SlotCount = SlotCount + %d WHERE Id = '%s'",btAddSlotCount,Name); - if (this->m_DBQuery.Exec(qSql)) - { - result = 1; - } - else - { - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - result = 0; - } - } - } - else - { - this->m_DBQuery.Clear(); - result = 0; - } - return result; -} - -BOOL CAccountCharDBSet::GetCharacterSlotCount(char *Name, BYTE *btSlotCount) -{ - int result; - CString qSql; - - qSql.Format("SELECT SlotCount FROM AccountCharacter WHERE Id = '%s'",Name); - if (this->m_DBQuery.Exec(qSql)) - { - if (this->m_DBQuery.Fetch() == 100) - { - this->m_DBQuery.Clear(); - result = 0; - } - else - { - *btSlotCount = this->m_DBQuery.GetInt(1); - if (*btSlotCount > 5) - *btSlotCount = 5; - this->m_DBQuery.Clear(); - result = 1; - } - } - else - { - this->m_DBQuery.Clear(); - } - return result; -} +} \ No newline at end of file diff --git a/DataServer/DbSet/AccountCharDBSet.h b/DataServer/DbSet/AccountCharDBSet.h index 5dc9970..c38571c 100644 --- a/DataServer/DbSet/AccountCharDBSet.h +++ b/DataServer/DbSet/AccountCharDBSet.h @@ -1,29 +1,21 @@ -// AccountCharDBSet.h: interface for the CAccountCharDBSet class. -// -////////////////////////////////////////////////////////////////////// - -#if !defined(AFX_ACCOUNTCHARDBSET_H__01C748D6_E836_4267_AF43_66BD9D34C7DC__INCLUDED_) -#define AFX_ACCOUNTCHARDBSET_H__01C748D6_E836_4267_AF43_66BD9D34C7DC__INCLUDED_ - -#if _MSC_VER > 1000 +#ifndef __ACCOUNTCHARSETDB_H__ +#define __ACCOUNTCHARSETDB_H__ #pragma once -#endif // _MSC_VER > 1000 -//#include "Include\ProDef.h" #include "..\include\Sprodef.h" -typedef struct +typedef struct AccountCharacterInfo { int DBNumber; - char AccountId[MAX_IDSTRING+1]; - char GameID1[MAX_IDSTRING+1]; - char GameID2[MAX_IDSTRING+1]; - char GameID3[MAX_IDSTRING+1]; - char GameID4[MAX_IDSTRING+1]; - char GameID5[MAX_IDSTRING+1]; + char AccountId[MAX_IDSTRING + 1]; + char GameID1[MAX_IDSTRING + 1]; + char GameID2[MAX_IDSTRING + 1]; + char GameID3[MAX_IDSTRING + 1]; + char GameID4[MAX_IDSTRING + 1]; + char GameID5[MAX_IDSTRING + 1]; BYTE CtlCode; BYTE MoveCnt; -}AccountCharacterInfo, *LPAccountCharacterInfo; +} *LPAccountCharacterInfo; class CAccountCharDBSet @@ -33,29 +25,36 @@ class CAccountCharDBSet virtual ~CAccountCharDBSet(); BOOL Connect(); + BOOL CreateAccountCharacter(char* id); BOOL SaveAccountCharacter(char* id, int pos, char* GameID); BOOL SaveAccountCharacter(char* id, char* GameID1, char* GameID2, char* GameID3, char* GameID4, char* GameID5); int DeleteAccountCharacter(char* id, char* gameid); + BOOL GetAccountId(char* Id); BOOL GetAccountInfo(char* Id, LPAccountCharacterInfo lpACInfo); int GetAccountCharBlank(char* Id); + BOOL CurAccountCharacterSet(char* id, char* GameID); + BYTE GetAccountCharCtlCode(char* Id); - BOOL GetSummonerCardInfo(char* Id); - BOOL SetSummonerCardInfo(char* Id); - BOOL SetCharacterExGameServerCode(char* Name, short sExGameServerCode); + + BYTE GetSummonerCardInfo(char* Id); + BYTE SetSummonerCardInfo(char* Id, BYTE btCharacterCardInfo); + + BOOL SetCharacterSlotCount(char* Name, BYTE btAddSlotCount); + BOOL GetCharacterSlotCount(char* Name, BYTE& btSlotCount); + BOOL SetCharacterExtendedInvenCountAdd(char* Name, BYTE btAddExtendedInvenCount); + BOOL GetCharacterExtendedInvenCount(char* Name, LPBYTE btAddExtendedInvenCount); BOOL SetCharacterExtendedInvenCountReplace(char* Name, BYTE btReplaceExtendedInvenCount); - BOOL GetCharacterExtendedInvenCount(char* Name, char* btAddExtendedInvenCount); + BOOL SetCharacterExtendedWarehouseCountAdd(char* Name, BYTE btAddExtendedWarehouseCount); BOOL SetCharacterExtendedWarehouseCountReplace(char* Name, BYTE btReplaceExtendedWarehouseCount); - BOOL GetCharacterExtendedWarehouseCount(char* Name, BYTE* btAddExtendedWarehouseCount); - //S12 - BOOL SetCharacterSlotCount(char *Name, BYTE btAddSlotCount); - BOOL GetCharacterSlotCount(char *Name, BYTE *btSlotCount); + BOOL GetCharacterExtendedWarehouseCount(char* Name, LPBYTE btAddExtendedWarehouseCount); + public: CQuery m_DBQuery; }; -#endif // !defined(AFX_ACCOUNTCHARDBSET_H__01C748D6_E836_4267_AF43_66BD9D34C7DC__INCLUDED_) +#endif \ No newline at end of file diff --git a/DataServer/DbSet/ArcaBattleDBSet.cpp b/DataServer/DbSet/ArcaBattleDBSet.cpp index 6a34b5c..4eb7dc3 100644 --- a/DataServer/DbSet/ArcaBattleDBSet.cpp +++ b/DataServer/DbSet/ArcaBattleDBSet.cpp @@ -11,1048 +11,894 @@ CArcaBattleDBSet::~CArcaBattleDBSet() BOOL CArcaBattleDBSet::Connect() { - //return this->CDBConBase::Connect(szDbConnectID, szDbConnectPass); - if (m_DBQuery.Connect(3, szDbConnectDsn, szDbConnectID, szDbConnectPass)) - return 1; - MsgBox("CArcaBattleDBSet ODBC Connect Fail"); - return 0; + if (m_Query.Connect(3, szDbConnectDsn, szDbConnectID, szDbConnectPass) == FALSE) + { + MsgBox("CArcaBattleDBSet ODBC Connect Fail"); + return FALSE; + } + + return TRUE; } -int CArcaBattleDBSet::DBSelectArcaBattleGuildJoin(char *szName, int *iResult) +BOOL CArcaBattleDBSet::DBSelectArcaBattleGuildJoin(char* szName, int& iResult) { - int result; - __int16 sqlReturn; - CString QueryStr; int iReturnCode = 0; int iItemCount = 0; - QueryStr.Format( - "WZ_ArcaBattleGuildSelect '%s'", - szName); - - if (this->m_DBQuery.Exec(QueryStr)) + CString QueryStr; + QueryStr.Format("WZ_ArcaBattleGuildSelect '%s'", szName); + + if (m_Query.Exec(QueryStr) == FALSE) { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - *iResult = this->m_DBQuery.GetInt(1); - if (*iResult == -1) - { - this->m_DBQuery.Clear(); - LogAddTD( - "error-L3 : [ArcaBattle] GuildInsert #3 %s %d", __FILE__, __LINE__); - result = 0; - } - else - { - this->m_DBQuery.Clear(); - result = 1; - } - } - else - { - this->m_DBQuery.Clear(); - LogAddTD( - "error-L3 : [ArcaBattle] GuildSelect #2 %d %s %d", - sqlReturn, __FILE__, __LINE__); - result = 0; - } + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] GuildSelect #1 %s %d", __FILE__, __LINE__); + return FALSE; } - else + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) { - this->m_DBQuery.Clear(); - LogAddTD( - "error-L3 : [ArcaBattle] GuildSelect #1 %s %d", __FILE__, __LINE__); - result = 0; + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] GuildSelect #2 %d %s %d", sqlReturn, __FILE__, __LINE__); + return FALSE; } - return result; + + iResult = m_Query.GetInt(1); + + if (iResult == -1) + { + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] GuildInsert #3 %s %d", __FILE__, __LINE__); + return FALSE; + } + + m_Query.Clear(); + return TRUE; } -// 5CD7B4: using guessed type int `CArcaBattleDBSet::DBSelectArcaBattleGuildJoin'::`2'::__LINE__Var; -//----- (00429310) -------------------------------------------------------- -int CArcaBattleDBSet::DBInsertArcaBattleGuildJoin(char *szName, char *szGuildName, unsigned int dwGuild, int *iResult) +BOOL CArcaBattleDBSet::DBInsertArcaBattleGuildJoin(char* szName, char* szGuildName, DWORD dwGuild, int& iResult) { - int result; // eax - __int16 sqlReturn; // [esp+104h] [ebp-44h] - CString QueryStr; // [esp+110h] [ebp-38h] - int iReturnCode; // [esp+11Ch] [ebp-2Ch] - int iItemCount; // [esp+128h] [ebp-20h] + int iItemCount = 0; + int iReturnCode = 0; - iItemCount = 0; - iReturnCode = 0; + CString QueryStr; + QueryStr.Format("WZ_ArcaBattleGuildInsert '%s', '%s', %d ", szGuildName, szName, dwGuild); - QueryStr.Format("WZ_ArcaBattleGuildInsert '%s', '%s', %d ",szGuildName,szName,dwGuild); - - if (this->m_DBQuery.Exec(QueryStr)) + if (m_Query.Exec(QueryStr) == FALSE) { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - *iResult = this->m_DBQuery.GetInt(1); - if (*iResult == -1) - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] GuildInsert #3 %s %d", __FILE__, __LINE__); - result = 0; - } - else - { - this->m_DBQuery.Clear(); - result = 1; - } - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] GuildInsert #2 %d %s %d",sqlReturn, __FILE__, __LINE__); - result = 0; - } + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] GuildInsert #1 %s %d", __FILE__, __LINE__); + return FALSE; } - else + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] GuildInsert #1 %s %d", __FILE__, __LINE__); - result = 0; + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] GuildInsert #2 %d %s %d", sqlReturn, __FILE__, __LINE__); + return FALSE; } - return result; + + iResult = m_Query.GetInt(1); + + if (iResult == -1) + { + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] GuildInsert #3 %s %d", __FILE__, __LINE__); + return FALSE; + } + + m_Query.Clear(); + return TRUE; } -// 5CD7B8: using guessed type int `CArcaBattleDBSet::DBInsertArcaBattleGuildJoin'::`2'::__LINE__Var; -//----- (00429570) -------------------------------------------------------- -int CArcaBattleDBSet::DBInsertArcaBattleGuildMemberJoin(char *szName, char *szGuildName, unsigned int dwGuild, int *iResult) +BOOL CArcaBattleDBSet::DBInsertArcaBattleGuildMemberJoin(char* szName, char* szGuildName, DWORD dwGuild, int& iResult) { - int result; - __int16 sqlReturn; + int iItemCount = 0; + int iReturnCode = 0; + CString QueryStr; - int iReturnCode; - int iItemCount; + QueryStr.Format("WZ_ArcaBattleGuildMemberInsert '%s', '%s', %d ", szGuildName, szName, dwGuild); - iItemCount = 0; - iReturnCode = 0; + if (m_Query.Exec(QueryStr) == FALSE) + { + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] GuildMemberInsert #1 %s %d", __FILE__, __LINE__); + return FALSE; + } - QueryStr.Format("WZ_ArcaBattleGuildMemberInsert '%s', '%s', %d ",szGuildName,szName,dwGuild); - - if (this->m_DBQuery.Exec(QueryStr)) + SQLRETURN sqlReturn = this->m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - *iResult = this->m_DBQuery.GetInt(1); - if (*iResult == -1) - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] GuildMemberInsert #3 %s %d", __FILE__, __LINE__); - result = 0; - } - else - { - this->m_DBQuery.Clear(); - result = 1; - } - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] GuildMemberInsert #2 %d %s %d",sqlReturn, __FILE__, __LINE__); - result = 0; - } + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] GuildMemberInsert #2 %d %s %d", sqlReturn, __FILE__, __LINE__); + return FALSE; } - else + + iResult = m_Query.GetInt(1); + + if (iResult == -1) { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] GuildMemberInsert #1 %s %d", __FILE__, __LINE__); - result = 0; + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] GuildMemberInsert #3 %s %d", __FILE__, __LINE__); + return FALSE; } - return result; -} + m_Query.Clear(); + return TRUE; +} -int CArcaBattleDBSet::DBInsertArcaBattleWinGuild(_stABWinGuildInfoDS *pABWinGuildInfoDS, int iGuildCnt) +BOOL CArcaBattleDBSet::DBInsertArcaBattleWinGuild(_stABWinGuildInfoDS* pABWinGuildInfoDS, int iGuildCnt) { - CString QueryStr; - int iReturnCode; - int iItemCount; + int iItemCount = 0; + int iReturnCode = 0; - iItemCount = 0; - iReturnCode = 0; + CString QueryStr; - for (int i = 0; i < iGuildCnt; ++i) + for (int i = 0; i < iGuildCnt; i++) { - QueryStr.Format("WZ_ArcaBattleWinGuildInsert '%s', %d, %d, %d, %d", - &pABWinGuildInfoDS[i], - pABWinGuildInfoDS[i].dwGuild, - pABWinGuildInfoDS[i].wOccupyObelisk, - pABWinGuildInfoDS[i].wObeliskGroup, - 100); - - if (!this->m_DBQuery.Exec(QueryStr)) + QueryStr.Format("WZ_ArcaBattleWinGuildInsert '%s', %d, %d, %d, %d", pABWinGuildInfoDS[i].szGuildName, pABWinGuildInfoDS[i].dwGuild, pABWinGuildInfoDS[i].wOccupyObelisk, pABWinGuildInfoDS[i].wObeliskGroup, 100); + + if (m_Query.Exec(QueryStr) == FALSE) { - this->m_DBQuery.Clear(); + m_Query.Clear(); LogAddTD("error-L3 : [ArcaBattle] WZ_ArcaBattleWinGuildInsert #1 %s %d", __FILE__, __LINE__); - return 0; + return FALSE; } - this->m_DBQuery.Clear(); + + m_Query.Clear(); } - this->m_DBQuery.Clear(); - return 1; -} + m_Query.Clear(); + return TRUE; +} -int CArcaBattleDBSet::DBSelectArcaBattleWinGuild(_stABWinGuildInfoDS *pABGuildInfo, int *iGuildCnt) +BOOL CArcaBattleDBSet::DBSelectArcaBattleWinGuild(_stABWinGuildInfoDS* pABGuildInfo, int& iGuildCnt) { - int result; - __int16 sqlReturn; + int iItemCount = 0; + int iReturnCode = 0; + int iCnt = 0; + CString QueryStr; - int iCnt; - int iReturnCode; - int iItemCount; + QueryStr.Format("WZ_ArcaBattleWinGuildSelect"); - iItemCount = 0; - iReturnCode = 0; - iCnt = 0; + if (m_Query.Exec(QueryStr) == FALSE) + { + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] WZ_ArcaBattleWinGuildSelect #1 %s %d", __FILE__, __LINE__); + return FALSE; + } - QueryStr.Format("WZ_ArcaBattleWinGuildSelect"); - - if (this->m_DBQuery.Exec(QueryStr)) + SQLRETURN sqlReturn = m_Query.Fetch(); + + while (sqlReturn != SQL_NO_DATA && sqlReturn != SQL_NULL_DATA) { - for (sqlReturn = this->m_DBQuery.Fetch(); sqlReturn != 100; sqlReturn = this->m_DBQuery.Fetch()) + m_Query.GetStr("G_Name", pABGuildInfo[iCnt].szGuildName); + pABGuildInfo[iCnt].wOccupyObelisk = m_Query.GetInt("OuccupyObelisk"); + pABGuildInfo[iCnt].wObeliskGroup = m_Query.GetInt("ObeliskGroup"); + iCnt++; + + if (iCnt >= MAX_AB_OBELISK_INFO) { - if (sqlReturn == -1) - break; - this->m_DBQuery.GetStr("G_Name", pABGuildInfo[iCnt].szGuildName); - pABGuildInfo[iCnt].wOccupyObelisk = this->m_DBQuery.GetInt("OuccupyObelisk"); - pABGuildInfo[iCnt++].wObeliskGroup = this->m_DBQuery.GetInt("ObeliskGroup"); - if (iCnt >= 5) - break; + break; } - *iGuildCnt = iCnt; - this->m_DBQuery.Clear(); - result = 1; - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] WZ_ArcaBattleWinGuildSelect #1 %s %d", __FILE__, __LINE__); - result = 0; + + sqlReturn = m_Query.Fetch(); } - return result; + + iGuildCnt = iCnt; + m_Query.Clear(); + return TRUE; } -int CArcaBattleDBSet::DBIsArcaBattleEnter(char *szName, int *iResult) +BOOL CArcaBattleDBSet::DBIsArcaBattleEnter(char* szName, int& iResult) { - int result; - __int16 sqlReturn; + int iItemCount = 0; + int iReturnCode = 0; + CString QueryStr; - int iReturnCode; - int iItemCount; + QueryStr.Format("WZ_ArcaBattleMemberSelect '%s'", szName); - iItemCount = 0; - iReturnCode = 0; + if (m_Query.Exec(QueryStr) == FALSE) + { + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBIsArcaBattleEnter #1 %s %d", __FILE__, __LINE__); + return FALSE; + } - QueryStr.Format("WZ_ArcaBattleMemberSelect '%s'",szName); - - if (this->m_DBQuery.Exec(QueryStr)) + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - *iResult = this->m_DBQuery.GetInt(1); - if (*iResult == -1) - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBIsArcaBattleEnter #3 %s %d", __FILE__, __LINE__); - result = 0; - } - else - { - this->m_DBQuery.Clear(); - result = 1; - } - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBIsArcaBattleEnter #2 %d %s %d",sqlReturn, __FILE__, __LINE__); - result = 0; - } + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBIsArcaBattleEnter #2 %d %s %d", sqlReturn, __FILE__, __LINE__); + return FALSE; } - else + + iResult = m_Query.GetInt(1); + + if (iResult == -1) { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBIsArcaBattleEnter #1 %s %d", __FILE__, __LINE__); - result = 0; + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBIsArcaBattleEnter #3 %s %d", __FILE__, __LINE__); + return FALSE; } - return result; -} + m_Query.Clear(); + return TRUE; +} -int CArcaBattleDBSet::DBSelectArcaBattleGuildGroupNum(char *szName, int *iGroupNum) +BOOL CArcaBattleDBSet::DBSelectArcaBattleGuildGroupNum(char* szName, int& iGroupNum) { - int result; - __int16 sqlReturn; + int iItemCount = 0; + int iReturnCode = 0; + CString QueryStr; - int iReturnCode; - int iItemCount; + QueryStr.Format("WZ_ArcaBattleGuildGroupNumSelect '%s'", szName); - iItemCount = 0; - iReturnCode = 0; + if (m_Query.Exec(QueryStr) == FALSE) + { + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleGuildGroupNum #1 %s %d", __FILE__, __LINE__); + return FALSE; + } - QueryStr.Format("WZ_ArcaBattleGuildGroupNumSelect '%s'",szName); - - if (this->m_DBQuery.Exec(QueryStr)) + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA) { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn == 100) - { - this->m_DBQuery.Clear(); - result = 2; - } - else if (sqlReturn != 100 && sqlReturn != -1) - { - *iGroupNum = this->m_DBQuery.GetInt(1); - this->m_DBQuery.Clear(); - result = 1; - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleGuildGroupNum #2 %d %s %d",sqlReturn, __FILE__, __LINE__); - result = 0; - } + m_Query.Clear(); + return 2; } - else + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleGuildGroupNum #1 %s %d", __FILE__, __LINE__); - result = 0; + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleGuildGroupNum #2 %d %s %d", sqlReturn, __FILE__, __LINE__); + return FALSE; } - return result; + + iGroupNum = m_Query.GetInt(1); + m_Query.Clear(); + return TRUE; } -int CArcaBattleDBSet::DBDeleteArcaBattleInfo() +BOOL CArcaBattleDBSet::DBDeleteArcaBattleInfo() { - int result; // eax - CString QueryStr; // [esp+F8h] [ebp-38h] - int iReturnCode; // [esp+104h] [ebp-2Ch] - int iItemCount; - - iItemCount = 0; - iReturnCode = 0; + int iItemCount = 0; + int iReturnCode = 0; + CString QueryStr; QueryStr.Format("WZ_ArcaBattleInfoDelete"); - if (this->m_DBQuery.Exec(QueryStr)) + + if (m_Query.Exec(QueryStr) == FALSE) { - if (this->m_DBQuery.Fetch() == 100) - { - this->m_DBQuery.Clear(); - result = -1; - } - else - { - iReturnCode = this->m_DBQuery.GetInt(1); - this->m_DBQuery.Clear(); - result = 1; - } + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBDeleteArcaBattleInfo #1 %s %d", __FILE__, __LINE__); + return FALSE; } - else + + if (m_Query.Fetch() == SQL_NO_DATA) { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBDeleteArcaBattleInfo #1 %s %d", __FILE__, __LINE__); - result = 0; + m_Query.Clear(); + return -1; } - return result; + + iReturnCode = m_Query.GetInt(1); + m_Query.Clear(); + return TRUE; } -int CArcaBattleDBSet::DBSelectArcaBattleJoinMemberUnder(_stGuildUnderMember *pGuildMemberCnt, char *btGuildCnt) +BOOL CArcaBattleDBSet::DBSelectArcaBattleJoinMemberUnder(_stGuildUnderMember* pGuildMemberCnt, BYTE& btGuildCnt) { - int result; // eax - __int16 sqlReturn; // [esp+11Ch] [ebp-50h] - int iCnt; // [esp+128h] [ebp-44h] - CString QueryStr; // [esp+134h] [ebp-38h] - int iReturnCode; // [esp+140h] [ebp-2Ch] - int iItemCount; // [esp+14Ch] [ebp-20h] - // [esp+158h] [ebp-14h] - int v17; // [esp+168h] [ebp-4h] + int iItemCount = 0; + int iReturnCode = 0; + CString QueryStr; + int iCnt = 0; + QueryStr.Format("WZ_ArcaBattleGuildNamesSelect"); - iItemCount = 0; - iReturnCode = 0; + if (m_Query.Exec(QueryStr) == FALSE) + { + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleJoinMemberUnder #1 %s %d", __FILE__, __LINE__); + return FALSE; + } - v17 = 0; - iCnt = 0; - QueryStr.Format("WZ_ArcaBattleGuildNamesSelect"); - - if (this->m_DBQuery.Exec(QueryStr)) + SQLRETURN sqlReturn = m_Query.Fetch(); + + while (sqlReturn != SQL_NO_DATA && sqlReturn != SQL_NULL_DATA) { - for (sqlReturn = this->m_DBQuery.Fetch(); sqlReturn != 100; sqlReturn = this->m_DBQuery.Fetch()) - { - if (sqlReturn == -1) - break; - this->m_DBQuery.GetStr("G_Name", pGuildMemberCnt[iCnt++].szGuildNames); - if (iCnt >= 6) - break; - } - *btGuildCnt = iCnt; - this->m_DBQuery.Clear(); - for (int i = 0; i < iCnt; ++i) + m_Query.GetStr("G_Name", pGuildMemberCnt[iCnt].szGuildNames); + iCnt++; + + if (iCnt >= 6) { - QueryStr.Format("WZ_ArcaBattleMemberUnderSelect '%s'", - pGuildMemberCnt[i].szGuildNames); - - if (!this->m_DBQuery.Exec(QueryStr)) - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleJoinMemberUnder #2 %s %d",__FILE__, __LINE__); - return 0; - } - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn == 100 || sqlReturn == -1) - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleJoinMemberUnder #3 %d %s %d", sqlReturn, __FILE__, __LINE__); - return 0; - } - pGuildMemberCnt[i].btGuildMemberCnt = this->m_DBQuery.GetInt(1); - this->m_DBQuery.Clear(); + break; } - this->m_DBQuery.Clear(); - result = 1; - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleJoinMemberUnder #1 %s %d", __FILE__, __LINE__); - result = 0; - } - return result; -} + sqlReturn = m_Query.Fetch(); + } -int CArcaBattleDBSet::DBInsertArcaBattleProc(int iABProc) -{ - int result; - __int16 sqlReturn; - CString QueryStr; + btGuildCnt = iCnt; + m_Query.Clear(); - QueryStr.Format("WZ_ArcaBattleProcInsert %d", iABProc); - - if (this->m_DBQuery.Exec(QueryStr)) + for (int i = 0; i < iCnt; i++) { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) + QueryStr.Format("WZ_ArcaBattleMemberUnderSelect '%s'", pGuildMemberCnt[i].szGuildNames); + + if (m_Query.Exec(QueryStr) == FALSE) { - this->m_DBQuery.Clear(); - result = 1; + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleJoinMemberUnder #2 %s %d", __FILE__, __LINE__); + return FALSE; } - else + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBInsertArcaBattleProc #2 %d %s %d",sqlReturn, __FILE__, __LINE__); - result = 0; + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleJoinMemberUnder #3 %d %s %d", sqlReturn, __FILE__, __LINE__); + return FALSE; } + + pGuildMemberCnt[i].btGuildMemberCnt = m_Query.GetInt(1); + m_Query.Clear(); } - else + + m_Query.Clear(); + return TRUE; +} + +BOOL CArcaBattleDBSet::DBInsertArcaBattleProc(int iABProc) +{ + CString QueryStr; + QueryStr.Format("WZ_ArcaBattleProcInsert %d", iABProc); + + if (m_Query.Exec(QueryStr) == FALSE) { - this->m_DBQuery.Clear(); + m_Query.Clear(); LogAddTD("error-L3 : [ArcaBattle] DBInsertArcaBattleProc #1 %s %d", __FILE__, __LINE__); - result = 0; + return FALSE; } - return result; -} + SQLRETURN sqlReturn = m_Query.Fetch(); -int CArcaBattleDBSet::DBSelectArcaBattleProc(int *iABProc) -{ - int result; - __int16 sqlReturn; - CString QueryStr; + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) + { + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBInsertArcaBattleProc #2 %d %s %d", sqlReturn, __FILE__, __LINE__); + return FALSE; + } + m_Query.Clear(); + return TRUE; +} + +BOOL CArcaBattleDBSet::DBSelectArcaBattleProc(int& iABProc) +{ + CString QueryStr; QueryStr.Format("WZ_ArcaBattleProcSelect"); - - if (this->m_DBQuery.Exec(QueryStr)) + + if (m_Query.Exec(QueryStr) == FALSE) { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn == 100) - { - this->m_DBQuery.Clear(); - result = 0; - } - else if (sqlReturn != 100 && sqlReturn != -1) - { - *iABProc = this->m_DBQuery.GetInt(1); - this->m_DBQuery.Clear(); - result = 1; - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleProc #2 %d %s %d",sqlReturn, __FILE__, __LINE__); - result = 0; - } + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleProc #1 %s %d", __FILE__, __LINE__); + return FALSE; } - else + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA) { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleProc #1 %s %d", __FILE__, __LINE__); - result = 0; + m_Query.Clear(); + return FALSE; } - return result; -} + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) + { + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleProc #2 %d %s %d", sqlReturn, __FILE__, __LINE__); + return FALSE; + } + + iABProc = m_Query.GetInt(1); + m_Query.Clear(); + return TRUE; +} -int CArcaBattleDBSet::DBSelectArcaBattleCancelGuild(_stCancelGuildNames *pstCancelGuildNames, int iMinGuildMemNum, char *btGuildCnt) +BOOL CArcaBattleDBSet::DBSelectArcaBattleCancelGuild(_stCancelGuildNames* pstCancelGuildNames, int iMinGuildMemNum, BYTE& btGuildCnt) { - int result; - int iResult; - __int16 sqlReturn; - _stCancelGuildNames CancelGuildNames[6]; - int iCancelGuildCnt; - int iCnt; CString QueryStr; + int iCnt = 0; + int iCancelGuildCnt = 0; - iCnt = 0; - iCancelGuildCnt = 0; QueryStr.Format("WZ_ArcaBattleGuildNamesSelect"); - if (this->m_DBQuery.Exec(QueryStr)) + if (m_Query.Exec(QueryStr) == FALSE) + { + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleCancelGuild #1 %s %d", __FILE__, __LINE__); + return FALSE; + } + + _stCancelGuildNames CancelGuildNames[6]; + SQLRETURN sqlReturn = m_Query.Fetch(); + + while (sqlReturn != SQL_NO_DATA && sqlReturn != SQL_NULL_DATA) { - for (sqlReturn = this->m_DBQuery.Fetch(); sqlReturn != 100; sqlReturn = this->m_DBQuery.Fetch()) + m_Query.GetStr("G_Name", CancelGuildNames[iCnt].szGuildNames); + iCnt++; + + if (iCnt >= 6) { - if (sqlReturn == -1) - break; - this->m_DBQuery.GetStr("G_Name", CancelGuildNames[iCnt++].szGuildNames); - if (iCnt >= 6) - break; + break; } - this->m_DBQuery.Clear(); - for (int i = 0; i < iCnt; ++i) + + sqlReturn = m_Query.Fetch(); + } + + m_Query.Clear(); + + for (int i = 0; i < iCnt; i++) + { + QueryStr.Format("WZ_ArcaBattleMinGuildSelect '%s', %d", CancelGuildNames[i].szGuildNames, iMinGuildMemNum); + + if (m_Query.Exec(QueryStr) == FALSE) { - QueryStr.Format("WZ_ArcaBattleMinGuildSelect '%s', %d", - &CancelGuildNames[i], - iMinGuildMemNum); - if (!this->m_DBQuery.Exec(QueryStr)) - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleCancelGuild #2 %s %d", __FILE__, __LINE__); - return 0; - } - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn == 100 || sqlReturn == -1) - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleCancelGuild #3 %d %s %d", sqlReturn, __FILE__, __LINE__); - return 0; - } - iResult = this->m_DBQuery.GetInt(1); - if (iResult < 0) - { - memcpy(pstCancelGuildNames[iCancelGuildCnt].szGuildNames, CancelGuildNames[i].szGuildNames, 8u); - pstCancelGuildNames[iCancelGuildCnt++].szGuildNames[8] = 0; - } - this->m_DBQuery.Clear(); + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleCancelGuild #2 %s %d", __FILE__, __LINE__); + return FALSE; } - if (DBDeleteArcaBattleCancelGuild(pstCancelGuildNames, iCancelGuildCnt)) + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) { - *btGuildCnt = iCancelGuildCnt; - result = 1; + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleCancelGuild #3 %d %s %d", sqlReturn, __FILE__, __LINE__); + return FALSE; } - else + + int iResult = m_Query.GetInt(1); + + if (iResult < 0) { - result = 0; + memcpy(pstCancelGuildNames[iCancelGuildCnt].szGuildNames, CancelGuildNames[i].szGuildNames, MAX_GUILDNAMESTRING); + pstCancelGuildNames[iCancelGuildCnt].szGuildNames[MAX_GUILDNAMESTRING] = '\0'; + iCancelGuildCnt++; } + + m_Query.Clear(); } - else + + BOOL bCancelGuild = DBDeleteArcaBattleCancelGuild(pstCancelGuildNames, iCancelGuildCnt); + + if (bCancelGuild == FALSE) { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleCancelGuild #1 %s %d", __FILE__, __LINE__); - result = 0; + return FALSE; } - return result; -} + btGuildCnt = iCancelGuildCnt; + return TRUE; +} -int CArcaBattleDBSet::DBDeleteArcaBattleCancelGuild(_stCancelGuildNames *pstCancelGuildNames, int iGuildCnt) +BOOL CArcaBattleDBSet::DBDeleteArcaBattleCancelGuild(_stCancelGuildNames* pstCancelGuildNames, int iGuildCnt) { - int iReturnCode; CString QueryStr; + int iReturnCode = 0; - iReturnCode = 0; - for (int i = 0; i < iGuildCnt; ++i) + for (int i = 0; i < iGuildCnt; i++) { - QueryStr.Format( - "WZ_ArcaBattleMinGuildDelete '%s'",&pstCancelGuildNames[i]); + QueryStr.Format("WZ_ArcaBattleMinGuildDelete '%s'", pstCancelGuildNames[i].szGuildNames); - if (!this->m_DBQuery.Exec(QueryStr)) + if (m_Query.Exec(QueryStr) == FALSE) { - this->m_DBQuery.Clear(); + m_Query.Clear(); LogAddTD("error-L3 : [ArcaBattle] DBDeleteArcaBattleCancelGuild #1 %s %d", __FILE__, __LINE__); - return 0; + return FALSE; } - if (this->m_DBQuery.Fetch() == 100) + + if (m_Query.Fetch() == SQL_NO_DATA) { - this->m_DBQuery.Clear(); + m_Query.Clear(); LogAddTD("error-L3 : [ArcaBattle] DBDeleteArcaBattleCancelGuild #2 %s %d", __FILE__, __LINE__); - return 0; + return FALSE; } - iReturnCode = this->m_DBQuery.GetInt(1); - this->m_DBQuery.Clear(); + + iReturnCode = m_Query.GetInt(1); + m_Query.Clear(); } - return 1; -} + return TRUE; +} -int CArcaBattleDBSet::DBSelectABRegisteredMemberCnt(unsigned int dwGuild, char *btRegMemCnt) +BOOL CArcaBattleDBSet::DBSelectABRegisteredMemberCnt(DWORD dwGuild, BYTE& btRegMemCnt) { - int result; // eax - __int16 sqlReturn; - int iReturnCode; CString QueryStr; + int iReturnCode = 0; - iReturnCode = 0; - QueryStr.Format("WZ_ArcaBattleGuildMemberSelect %d",dwGuild); - - if (this->m_DBQuery.Exec(QueryStr)) + QueryStr.Format("WZ_ArcaBattleGuildMemberSelect %d", dwGuild); + + if (m_Query.Exec(QueryStr) == FALSE) { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - iReturnCode = this->m_DBQuery.GetInt(1); - if (iReturnCode == -1) - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] GuildMemberSelect #3 %s %d", __FILE__, __LINE__); - result = 0; - } - else - { - *btRegMemCnt = iReturnCode; - this->m_DBQuery.Clear(); - result = 1; - } - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] GuildMemberSelect #2 %d %s %d",sqlReturn, __FILE__, __LINE__); - result = 0; - } + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] GuildMemberSelect #1 %s %d", __FILE__, __LINE__); + return FALSE; } - else + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] GuildMemberSelect #1 %s %d", __FILE__, __LINE__); - result = 0; + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] GuildMemberSelect #2 %d %s %d", sqlReturn, __FILE__, __LINE__); + return FALSE; + } + + iReturnCode = m_Query.GetInt(1); + + if (iReturnCode == -1) + { + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] GuildMemberSelect #3 %s %d", __FILE__, __LINE__); + return FALSE; } - return result; -} + btRegMemCnt = iReturnCode; + m_Query.Clear(); + return TRUE; +} -int CArcaBattleDBSet::DBSelectArcaBattleIsTopRank(unsigned int dwGuildNumber) +BOOL CArcaBattleDBSet::DBSelectArcaBattleIsTopRank(DWORD dwGuildNumber) { - int result; - int iResult; - __int16 sqlReturn; - CString QueryStr; + CString QueryStr; + QueryStr.Format("WZ_ArcaBattleMarkRankSelect %d", dwGuildNumber); - QueryStr.Format("WZ_ArcaBattleMarkRankSelect %d",dwGuildNumber); - - if (this->m_DBQuery.Exec(QueryStr)) + if (m_Query.Exec(QueryStr) == FALSE) { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn == 100) - { - this->m_DBQuery.Clear(); - result = -1; - } - else if (sqlReturn != 100 && sqlReturn != -1) - { - iResult = this->m_DBQuery.GetInt(1); - if (iResult > 6 || iResult <= 0) - iResult = 6; - else - iResult = 0; - this->m_DBQuery.Clear(); - result = iResult; - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleIsTopRank #2 %d %s %d",sqlReturn, __FILE__, __LINE__); - result = -1; - } + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleIsTopRank #1 %s %d", __FILE__, __LINE__); + return -1; } - else + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA) { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleIsTopRank #1 %s %d", __FILE__, __LINE__); - result = -1; + m_Query.Clear(); + return -1; } - return result; -} + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) + { + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleIsTopRank #2 %d %s %d", sqlReturn, __FILE__, __LINE__); + return -1; + } -int CArcaBattleDBSet::DBSelectArcaBattleMarkCnt(unsigned int dwGuildNumber) -{ - int result; - int iResult; - __int16 sqlReturn; - CString QueryStr; + int iResult = m_Query.GetInt(1); - QueryStr.Format("WZ_ArcaBattleMarkCntSelect %d",dwGuildNumber); - - if (this->m_DBQuery.Exec(QueryStr)) + if (iResult <= 6 && iResult > 0) { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn == 100) - { - this->m_DBQuery.Clear(); - result = -2; - } - else if (sqlReturn != 100 && sqlReturn != -1) - { - iResult = this->m_DBQuery.GetInt(1); - this->m_DBQuery.Clear(); - result = iResult; - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleMarkCnt #2 %d %s %d",sqlReturn, __FILE__, __LINE__); - result = -2; - } + iResult = 0; } + else { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleMarkCnt #1 %s %d", __FILE__, __LINE__); - result = -2; + iResult = 6; } - return result; -} + m_Query.Clear(); + return iResult; +} -int CArcaBattleDBSet::DBInsertArcaBattleRegMark(char *szGuildName, unsigned int dwGuildNum, char *szGuildMaster, unsigned int dwMarkCnt) +BOOL CArcaBattleDBSet::DBSelectArcaBattleMarkCnt(DWORD dwGuildNumber) { - int result; - __int16 sqlReturn; - CString QueryStr; + CString QueryStr; + QueryStr.Format("WZ_ArcaBattleMarkCntSelect %d", dwGuildNumber); - QueryStr.Format("WZ_ArcaBattleMarkInsert '%s', %d, '%s', %u", - szGuildName,dwGuildNum,szGuildMaster,dwMarkCnt); - - if (this->m_DBQuery.Exec(QueryStr)) + if (m_Query.Exec(QueryStr) == FALSE) { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - this->m_DBQuery.Clear(); - result = 1; - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBInsertArcaBattleRegMark #2 %d %s %d",sqlReturn, __FILE__, __LINE__); - result = 0; - } + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleMarkCnt #1 %s %d", __FILE__, __LINE__); + return -2; } - else + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA) { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBInsertArcaBattleRegMark #1 %s %d", __FILE__, __LINE__); - result = 0; + m_Query.Clear(); + return -2; } - return result; -} + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) + { + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleMarkCnt #2 %d %s %d", sqlReturn, __FILE__, __LINE__); + return -2; + } + + int iResult = m_Query.GetInt(1); + m_Query.Clear(); + return iResult; +} -int CArcaBattleDBSet::DBSelectArcaBattleTopRank(_stArcaBattleMarkTopRank *pArcaBattleMarkTopRank, char *btGuildCnt) +BOOL CArcaBattleDBSet::DBInsertArcaBattleRegMark(char* szGuildName, DWORD dwGuildNum, char* szGuildMaster, DWORD dwMarkCnt) { - int result; - __int16 sqlReturn; CString QueryStr; + QueryStr.Format("WZ_ArcaBattleMarkInsert '%s', %d, '%s', %u", szGuildName, dwGuildNum, szGuildMaster, dwMarkCnt); - QueryStr.Format("WZ_ArcaBattleTopRankSelect"); - - if (this->m_DBQuery.Exec(QueryStr)) + if (m_Query.Exec(QueryStr) == FALSE) { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn == 100) - { - this->m_DBQuery.Clear(); - result = 0; - } - else - { - int iCnt = 0; - while (sqlReturn != 100) - { - if (sqlReturn == -1) - break; - this->m_DBQuery.GetStr("G_Name", pArcaBattleMarkTopRank[iCnt].szGuildNames); - pArcaBattleMarkTopRank[iCnt].dwMarkCnt = this->m_DBQuery.GetInt64("MarkCnt"); - pArcaBattleMarkTopRank[iCnt].btRank = iCnt + 1; - if (++iCnt >= 6) - break; - sqlReturn = this->m_DBQuery.Fetch(); - } - *btGuildCnt = iCnt; - this->m_DBQuery.Clear(); - result = 1; - } + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBInsertArcaBattleRegMark #1 %s %d", __FILE__, __LINE__); + return FALSE; } - else + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleTopRank #1 %s %d", __FILE__, __LINE__); - result = 0; + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBInsertArcaBattleRegMark #2 %d %s %d", sqlReturn, __FILE__, __LINE__); + return FALSE; } - return result; + + m_Query.Clear(); + return TRUE; } -// 5CD7F8: using guessed type int `CArcaBattleDBSet::DBSelectArcaBattleTopRank'::`2'::__LINE__Var; -//----- (0042BAA0) -------------------------------------------------------- -int CArcaBattleDBSet::DBSelectArcaBattleMyGuildRank(unsigned int dwGuildNumber, char *btMyGuildRank, unsigned int *dwMarkCnt) +BOOL CArcaBattleDBSet::DBSelectArcaBattleTopRank(_stArcaBattleMarkTopRank* pArcaBattleMarkTopRank, BYTE& btGuildCnt) { - int result; // eax - int v6; // [esp+14h] [ebp-11Ch] - int v7; // [esp+2Ch] [ebp-104h] - __int16 sqlReturn; // [esp+104h] [ebp-2Ch] - CString QueryStr; // [esp+110h] [ebp-20h] - // [esp+11Ch] [ebp-14h] - int v11; // [esp+12Ch] [ebp-4h] + CString QueryStr; + QueryStr.Format("WZ_ArcaBattleTopRankSelect"); + if (m_Query.Exec(QueryStr) == FALSE) + { + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleTopRank #1 %s %d", __FILE__, __LINE__); + return FALSE; + } + SQLRETURN sqlReturn = m_Query.Fetch(); - v11 = 0; - QueryStr.Format( - "WZ_ArcaBattleMarkRankSelect %d", - dwGuildNumber); - if (this->m_DBQuery.Exec(QueryStr)) + if (sqlReturn == SQL_NO_DATA) { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn == 100) - { - this->m_DBQuery.Clear(); - v11 = -1; - result = 0; - } - else if (sqlReturn != 100 && sqlReturn != -1) - { - *btMyGuildRank = this->m_DBQuery.GetInt(1); - *dwMarkCnt = this->m_DBQuery.GetInt64(2); - this->m_DBQuery.Clear(); - v11 = -1; - result = 1; - } - else + m_Query.Clear(); + return FALSE; + } + + int iCnt = 0; + + while (sqlReturn != SQL_NO_DATA && sqlReturn != SQL_NULL_DATA) + { + m_Query.GetStr("G_Name", pArcaBattleMarkTopRank[iCnt].szGuildNames); + pArcaBattleMarkTopRank[iCnt].dwMarkCnt = m_Query.GetInt64("MarkCnt"); + pArcaBattleMarkTopRank[iCnt].btRank = iCnt + 1; + iCnt++; + + if (iCnt >= 6) { - this->m_DBQuery.Clear(); - LogAddTD( - "error-L3 : [ArcaBattle] DBSelectArcaBattleMarkCnt #2 %d %s %d", - sqlReturn, __FILE__, __LINE__); - v7 = 0; - v11 = -1; - result = v7; + break; } + + sqlReturn = m_Query.Fetch(); } - else + + btGuildCnt = iCnt; + m_Query.Clear(); + return TRUE; +} + +BOOL CArcaBattleDBSet::DBSelectArcaBattleMyGuildRank(DWORD dwGuildNumber, BYTE& btMyGuildRank, DWORD& dwMarkCnt) +{ + CString QueryStr; + QueryStr.Format("WZ_ArcaBattleMarkRankSelect %d", dwGuildNumber); + + if (m_Query.Exec(QueryStr) == FALSE) { - this->m_DBQuery.Clear(); - LogAddTD( - "error-L3 : [ArcaBattle] DBSelectArcaBattleMarkCnt #1 %s %d", __FILE__, __LINE__); - v6 = 0; - v11 = -1; - result = v6; + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleMarkCnt #1 %s %d", __FILE__, __LINE__); + return FALSE; } - return result; + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA) + { + m_Query.Clear(); + return FALSE; + } + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) + { + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBSelectArcaBattleMarkCnt #2 %d %s %d", sqlReturn, __FILE__, __LINE__); + return FALSE; + } + + btMyGuildRank = m_Query.GetInt(1); + dwMarkCnt = m_Query.GetInt64(2); + m_Query.Clear(); + return TRUE; } -// 5CD7FC: using guessed type int `CArcaBattleDBSet::DBSelectArcaBattleMyGuildRank'::`2'::__LINE__Var; -//----- (0042BCE0) -------------------------------------------------------- -int CArcaBattleDBSet::DBDeleteArcaBattleMarkReg(unsigned int dwGuildNumber) +BOOL CArcaBattleDBSet::DBDeleteArcaBattleMarkReg(DWORD dwGuildNumber) { - int result; - int iResult; - __int16 sqlReturn; CString QueryStr; + QueryStr.Format("WZ_ArcaBattleMarkRegDel %d", dwGuildNumber); - QueryStr.Format("WZ_ArcaBattleMarkRegDel %d",dwGuildNumber); - - if (this->m_DBQuery.Exec(QueryStr)) + if (m_Query.Exec(QueryStr) == FALSE) { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - iResult = this->m_DBQuery.GetInt(1); - if (iResult == -1) - LogAddTD("error-L3 : [ArcaBattle] DBDeleteArcaBattleMarkReg #3 %d %s %d", - sqlReturn, __FILE__, __LINE__); - this->m_DBQuery.Clear(); - result = 1; - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBDeleteArcaBattleMarkReg #2 %d %s %d", - sqlReturn, __FILE__, __LINE__); - result = 0; - } + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBDeleteArcaBattleMarkReg #1 %s %d", __FILE__, __LINE__); + return FALSE; } - else + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBDeleteArcaBattleMarkReg #1 %s %d", __FILE__, __LINE__); - result = 0; + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBDeleteArcaBattleMarkReg #2 %d %s %d", sqlReturn, __FILE__, __LINE__); + return FALSE; } - return result; -} + int iResult = m_Query.GetInt(1); + + if (iResult == -1) + { + LogAddTD("error-L3 : [ArcaBattle] DBDeleteArcaBattleMarkReg #3 %d %s %d", sqlReturn, __FILE__, __LINE__); + } + + m_Query.Clear(); + return TRUE; +} void CArcaBattleDBSet::DBDeleteAllArcaBattleGuildReg() { CString QueryStr; - int v4; - v4 = 0; QueryStr.Format("WZ_ArcaBattleGuildMarkInfoAllDel"); - if (this->m_DBQuery.Exec(QueryStr)) - { - this->m_DBQuery.Clear(); - v4 = -1; - } - else + if (m_Query.Exec(QueryStr) == FALSE) { - this->m_DBQuery.Clear(); + m_Query.Clear(); LogAddTD("error-L3 : [ArcaBattle] DBDeleteAllArcaBattleGuildReg %s %d", __FILE__, __LINE__); - v4 = -1; + return; } -} + m_Query.Clear(); +} void CArcaBattleDBSet::DBDeleteArcaBattleGuildReg() { CString QueryStr; - QueryStr.Format("delete T_ARCA_BATTLE_MEMBER_JOIN_INFO"); - if (this->m_DBQuery.Exec(QueryStr)) - { - this->m_DBQuery.Clear(); - QueryStr.Format( - "delete T_ARCA_BATTLE_GUILD_JOIN_INFO"); - - if (this->m_DBQuery.Exec(QueryStr)) - { - this->m_DBQuery.Clear(); - QueryStr.Format("delete T_ARCA_BATTLE_GUILDMARK_REG"); - - if (this->m_DBQuery.Exec(QueryStr)) - { - this->m_DBQuery.Clear(); - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBDeleteArcaBattleGuildReg #3 %s %d", __FILE__, __LINE__); - } - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [ArcaBattle] DBDeleteArcaBattleGuildReg #2 %s %d", __FILE__, __LINE__); - } - } - else + if (m_Query.Exec(QueryStr) == FALSE) { - this->m_DBQuery.Clear(); + m_Query.Clear(); LogAddTD("error-L3 : [ArcaBattle] DBDeleteArcaBattleGuildReg #1 %s %d", __FILE__, __LINE__); + return; } -} + m_Query.Clear(); + QueryStr.Format("delete T_ARCA_BATTLE_GUILD_JOIN_INFO"); -void CArcaBattleDBSet::DBUpdateArcaBattleGuildReg(BYTE *lpRecv, int aIndex) -{ - CString QueryStr; - _tagPMSG_REQ_AB_MARK_REG_UPDATE_DS *lpMsg; - lpMsg = (_tagPMSG_REQ_AB_MARK_REG_UPDATE_DS *)lpRecv; + if (m_Query.Exec(QueryStr) == FALSE) + { + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBDeleteArcaBattleGuildReg #2 %s %d", __FILE__, __LINE__); + return; + } + m_Query.Clear(); + QueryStr.Format("delete T_ARCA_BATTLE_GUILDMARK_REG"); - QueryStr.Format("UPDATE T_ARCA_BATTLE_GUILDMARK_REG SET MarkCnt = %d WHERE G_Number = %d",lpMsg->dwMarkCnt,lpMsg->dwGuildNum); - - if (this->m_DBQuery.Exec(QueryStr)) + if (m_Query.Exec(QueryStr) == FALSE) { - this->m_DBQuery.Clear(); + m_Query.Clear(); + LogAddTD("error-L3 : [ArcaBattle] DBDeleteArcaBattleGuildReg #3 %s %d", __FILE__, __LINE__); + return; } - else + + m_Query.Clear(); +} + +void CArcaBattleDBSet::DBUpdateArcaBattleGuildReg(LPBYTE lpRecv, int aIndex) +{ + LPPMSG_REQ_AB_MARK_REG_UPDATE_DS lpMsg = (LPPMSG_REQ_AB_MARK_REG_UPDATE_DS)lpRecv; + + CString QueryStr; + QueryStr.Format("UPDATE T_ARCA_BATTLE_GUILDMARK_REG SET MarkCnt = %d WHERE G_Number = %d", lpMsg->dwMarkCnt, lpMsg->dwGuildNum); + + if (m_Query.Exec(QueryStr) == FALSE) { - this->m_DBQuery.Clear(); + m_Query.Clear(); LogAddTD("error-L3 : [ArcaBattle] DBDeleteArcaBattleGuildReg #1 %s %d", __FILE__, __LINE__); + return; } -} + m_Query.Clear(); +} -void CArcaBattleDBSet::DBSelectArcaBattleAllGuildMark(_stABAllGuildMark *pABAllGuildMark, int *iGuildCnt) +void CArcaBattleDBSet::DBSelectArcaBattleAllGuildMark(_stABAllGuildMark* pABAllGuildMark, int& iGuildCnt) { - SQLRETURN i; // [esp+D4h] [ebp-FE4h] - CString QueryStr; _stABAllGuildMark _stABAllGuildMark[250]; + CString QueryStr; QueryStr.Format("WZ_ArcaBattleAllMarkCntSelect"); - if (this->m_DBQuery.Exec(QueryStr)) + if (m_Query.Exec(QueryStr) == FALSE) { - int wGuildCnt = 0; - for (i = this->m_DBQuery.Fetch(); i != 100; i = this->m_DBQuery.Fetch()) - { - if (i == -1) - break; - this->m_DBQuery.GetStr("G_Name", pABAllGuildMark[wGuildCnt].szGuildName); - pABAllGuildMark[wGuildCnt++].dwMarkCnt = this->m_DBQuery.GetInt("MarkCnt"); - if (wGuildCnt >= 250) - break; - } - *iGuildCnt = wGuildCnt; - this->m_DBQuery.Clear(); + LogAddC(LOGC_RED, "Error WZ_ArcaBattleAllMarkCntSelect m_Query.Exec %s %d", __FILE__, __LINE__); + m_Query.Clear(); + return; } - else + + int iCnt = 0; + + SQLRETURN sqlReturn = m_Query.Fetch(); + + while (sqlReturn != SQL_NO_DATA && sqlReturn != SQL_NULL_DATA) { - LogAddC(2,"Error WZ_ArcaBattleAllMarkCntSelect m_DBQuery.Exec %s %d", __FILE__, __LINE__); - this->m_DBQuery.Clear(); + m_Query.GetStr("G_Name", pABAllGuildMark[iCnt].szGuildName); + pABAllGuildMark[iCnt].dwMarkCnt = m_Query.GetInt("MarkCnt"); + iCnt++; + + if (iCnt >= 250) + { + break; + } + + sqlReturn = m_Query.Fetch(); } + + iGuildCnt = iCnt; + m_Query.Clear(); } -int CArcaBattleDBSet::DBSelectABAllJoinUser(_stABJoinUserInfoDS *pABJoinUserInfo, char *btUserCnt) +BOOL CArcaBattleDBSet::DBSelectABAllJoinUser(_stABJoinUserInfoDS* pABJoinUserInfo, BYTE& btUserCnt) { - int result; - SQLRETURN sqlRet; - CString szQuery; int iCnt = 0; - + + CString szQuery; szQuery.Format("WZ_ArcaBattleAllJoinUserSelect"); - if (this->m_DBQuery.Exec(szQuery)) + + if (m_Query.Exec(szQuery) == FALSE) { - for (sqlRet = this->m_DBQuery.Fetch(); sqlRet != 100; sqlRet = this->m_DBQuery.Fetch()) - { - if (sqlRet == SQL_NULL_DATA) - break; - this->m_DBQuery.GetStr("G_Name", pABJoinUserInfo[iCnt].szGuildName); - pABJoinUserInfo[iCnt].dwGuild = this->m_DBQuery.GetInt("Number"); - this->m_DBQuery.GetStr("CharName", pABJoinUserInfo[iCnt++].szUserName); - if (iCnt >= 200) - break; - } - *btUserCnt = iCnt; - this->m_DBQuery.Clear(); - result = 1; + LogAddC(LOGC_RED, "Error WZ_ArcaBattleAllJoinUserSelect m_Query.Exec %s %d", __FILE__, __LINE__); + m_Query.Clear(); + return FALSE; } - else + + SQLRETURN sqlReturn = m_Query.Fetch(); + + while (sqlReturn != SQL_NO_DATA && sqlReturn != SQL_NULL_DATA) { - LogAddC(2,"Error WZ_ArcaBattleAllJoinUserSelect m_DBQuery.Exec %s %d", __FILE__, __LINE__); - this->m_DBQuery.Clear(); - result = 0; + m_Query.GetStr("G_Name", pABJoinUserInfo[iCnt].szGuildName); + pABJoinUserInfo[iCnt].dwGuild = m_Query.GetInt("Number"); + m_Query.GetStr("CharName", pABJoinUserInfo[iCnt].szUserName); + iCnt++; + + if (iCnt >= 200) + { + break; + } + + sqlReturn = m_Query.Fetch(); } - return result; + + btUserCnt = iCnt; + m_Query.Clear(); + return TRUE; } \ No newline at end of file diff --git a/DataServer/DbSet/ArcaBattleDBSet.h b/DataServer/DbSet/ArcaBattleDBSet.h index 609b4f7..d31ef8b 100644 --- a/DataServer/DbSet/ArcaBattleDBSet.h +++ b/DataServer/DbSet/ArcaBattleDBSet.h @@ -1,42 +1,55 @@ +#ifndef __ARCABATTLEDBSET_H__ +#define __ARCABATTLEDBSET_H__ #pragma once -//#include "Include\ProDef.h" -#include "..\Include\Sprodef.h" +#include "..\Include\Sprodef.h" #include "DBConBase.h" - class CArcaBattleDBSet : public CDBConBase { public: - CArcaBattleDBSet(); virtual ~CArcaBattleDBSet(); - int Connect(); - int DBSelectArcaBattleGuildJoin(char *szName, int *iResult); // idb - int DBInsertArcaBattleGuildJoin(char *szName, char *szGuildName, unsigned int dwGuild, int *iResult); // idb - int DBInsertArcaBattleGuildMemberJoin(char *szName, char *szGuildName, unsigned int dwGuild, int *iResult); // idb - int DBInsertArcaBattleWinGuild(_stABWinGuildInfoDS *pABWinGuildInfoDS, int iGuildCnt); // idb - int DBSelectArcaBattleWinGuild(_stABWinGuildInfoDS *pABGuildInfo, int *iGuildCnt); // idb - int DBIsArcaBattleEnter(char *szName, int *iResult); // idb - int DBSelectArcaBattleGuildGroupNum(char *szName, int *iGroupNum); // idb - int DBDeleteArcaBattleInfo(); // idb - int DBSelectArcaBattleJoinMemberUnder(_stGuildUnderMember *pGuildMemberCnt, char *btGuildCnt); // idb - int DBInsertArcaBattleProc(int iABProc); // idb - int DBSelectArcaBattleProc(int *iABProc); // idb - int DBSelectArcaBattleCancelGuild(_stCancelGuildNames *pstCancelGuildNames, int iMinGuildMemNum, char *btGuildCnt); // idb - int DBDeleteArcaBattleCancelGuild(_stCancelGuildNames *pstCancelGuildNames, int iGuildCnt); // idb - int DBSelectABRegisteredMemberCnt(unsigned int dwGuild, char *btRegMemCnt); // idb - int DBSelectArcaBattleIsTopRank(unsigned int dwGuildNumber); // idb - int DBSelectArcaBattleMarkCnt(unsigned int dwGuildNumber); // idb - int DBInsertArcaBattleRegMark(char *szGuildName, unsigned int dwGuildNum, char *szGuildMaster, unsigned int dwMarkCnt); // idb - int DBSelectArcaBattleTopRank(_stArcaBattleMarkTopRank *pArcaBattleMarkTopRank, char *btGuildCnt); // idb - int DBSelectArcaBattleMyGuildRank(unsigned int dwGuildNumber, char *btMyGuildRank, unsigned int *dwMarkCnt); // idb - int DBDeleteArcaBattleMarkReg(unsigned int dwGuildNumber); // idb - void DBDeleteAllArcaBattleGuildReg(); // idb - void DBDeleteArcaBattleGuildReg(); // idb - void DBUpdateArcaBattleGuildReg(BYTE *lpRecv, int aIndex); // idb - void DBSelectArcaBattleAllGuildMark(_stABAllGuildMark *pABAllGuildMark, int *iGuildCnt); // idb - int DBSelectABAllJoinUser(_stABJoinUserInfoDS *pABJoinUserInfo, char *btUserCnt); // idb - -}; \ No newline at end of file + BOOL Connect(); + + BOOL DBSelectArcaBattleGuildJoin(char* szName, int& iResult); + BOOL DBInsertArcaBattleGuildJoin(char* szName, char* szGuildName, DWORD dwGuild, int& iResult); + BOOL DBInsertArcaBattleGuildMemberJoin(char* szName, char* szGuildName, DWORD dwGuild, int& iResult); + BOOL DBInsertArcaBattleWinGuild(_stABWinGuildInfoDS* pABWinGuildInfoDS, int iGuildCnt); + BOOL DBSelectArcaBattleWinGuild(_stABWinGuildInfoDS* pABGuildInfo, int& iGuildCnt); + + BOOL DBIsArcaBattleEnter(char* szName, int& iResult); + + BOOL DBSelectArcaBattleGuildGroupNum(char* szName, int& iGroupNum); + + BOOL DBDeleteArcaBattleInfo(); + BOOL DBSelectArcaBattleJoinMemberUnder(_stGuildUnderMember* pGuildMemberCnt, BYTE& btGuildCnt); + + BOOL DBInsertArcaBattleProc(int iABProc); + BOOL DBSelectArcaBattleProc(int& iABProc); + + BOOL DBSelectArcaBattleCancelGuild(_stCancelGuildNames* pstCancelGuildNames, int iMinGuildMemNum, BYTE& btGuildCnt); + BOOL DBDeleteArcaBattleCancelGuild(_stCancelGuildNames* pstCancelGuildNames, int iGuildCnt); + + BOOL DBSelectABRegisteredMemberCnt(DWORD dwGuild, BYTE& btRegMemCnt); + + BOOL DBSelectArcaBattleIsTopRank(DWORD dwGuildNumber); + BOOL DBSelectArcaBattleMarkCnt(DWORD dwGuildNumber); + BOOL DBInsertArcaBattleRegMark(char* szGuildName, DWORD dwGuildNum, char* szGuildMaster, DWORD dwMarkCnt); + BOOL DBSelectArcaBattleTopRank(_stArcaBattleMarkTopRank* pArcaBattleMarkTopRank, BYTE& btGuildCnt); + BOOL DBSelectArcaBattleMyGuildRank(DWORD dwGuildNumber, BYTE& btMyGuildRank, DWORD& dwMarkCnt); + BOOL DBDeleteArcaBattleMarkReg(DWORD dwGuildNumber); + + void DBDeleteAllArcaBattleGuildReg(); + void DBDeleteArcaBattleGuildReg(); + void DBUpdateArcaBattleGuildReg(LPBYTE lpRecv, int aIndex); + + void DBSelectArcaBattleAllGuildMark(_stABAllGuildMark* pABAllGuildMark, int& iGuildCnt); + BOOL DBSelectABAllJoinUser(_stABJoinUserInfoDS* pABJoinUserInfo, BYTE& btUserCnt); + +public: + CQuery m_Query; +}; + +#endif \ No newline at end of file diff --git a/DataServer/DbSet/BlockChatUserDBSet.cpp b/DataServer/DbSet/BlockChatUserDBSet.cpp index 85e14a2..86944dc 100644 --- a/DataServer/DbSet/BlockChatUserDBSet.cpp +++ b/DataServer/DbSet/BlockChatUserDBSet.cpp @@ -11,95 +11,80 @@ CBlockChatUserDBSet::~CBlockChatUserDBSet() BOOL CBlockChatUserDBSet::Connect() { - if (m_DBQuery.Connect(3, szDbConnectDsn, szDbConnectID, szDbConnectPass)) - return 1; - MsgBox("CBlockChatUserDbSet ODBC Connect Fail"); - return 0; -} + if (m_DBQuery.Connect(3, szDbConnectDsn, szDbConnectID, szDbConnectPass) == FALSE) + { + MsgBox("CBlockChatUserDbSet ODBC Connect Fail"); + return FALSE; + } + return TRUE; +} -//----- (0042CA60) -------------------------------------------------------- -bool CBlockChatUserDBSet::DSDB_SelectBlockChatUser(char *Name, SDHP_ANS_BLOCK_CHAT_USER_INFO *lpSendMsg) +BOOL CBlockChatUserDBSet::DSDB_SelectBlockChatUser(char* Name, LPSDHP_ANS_BLOCK_CHAT_USER_INFO lpSendMsg) { - int result; - __int16 sqlReturn; - char btSlotNum; - int nCnt; CString QueryStr; + int nCnt = 0; + BYTE btSlotNum = 0; - nCnt = 0; - btSlotNum = 0; QueryStr.Format("WZ_ChattingBlockUserLoad '%s'", Name); - if (this->m_DBQuery.Exec(QueryStr)) + + if (m_DBQuery.Exec(QueryStr) == FALSE) { - for (sqlReturn = this->m_DBQuery.Fetch(); sqlReturn != SQL_NO_DATA; sqlReturn = this->m_DBQuery.Fetch()) - { - if (sqlReturn == -1) - break; - btSlotNum = this->m_DBQuery.GetInt("SlotNum"); - lpSendMsg->BlockCharList[btSlotNum].bIsUsed = 1; - lpSendMsg->BlockCharList[btSlotNum].btSlotNum = btSlotNum; - this->m_DBQuery.GetStr("BlockUser", lpSendMsg->BlockCharList[btSlotNum].szCharName); - lpSendMsg->BlockCharList[btSlotNum].szCharName[10] = 0; - if (++nCnt >= 20) - break; - } - lpSendMsg->btUserCnt = nCnt; - this->m_DBQuery.Clear(); - result = 1; + m_DBQuery.Clear(); + LogAddTD("error-L3 : [BlockChatUser] DSDB_SelectBlockChatUser #1 %s %d", __FILE__, __LINE__); + return FALSE; } - else + + SQLRETURN sqlReturn = m_DBQuery.Fetch(); + + while (sqlReturn != SQL_NO_DATA && sqlReturn != SQL_NULL_DATA) { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [BlockChatUser] DSDB_SelectBlockChatUser #1 %s %d",__FILE__,__LINE__); - result = 0; - } - return result; -} + btSlotNum = m_DBQuery.GetInt("SlotNum"); + lpSendMsg->BlockCharList[btSlotNum].bIsUsed = true; + lpSendMsg->BlockCharList[btSlotNum].btSlotNum = btSlotNum; + m_DBQuery.GetStr("BlockUser", lpSendMsg->BlockCharList[btSlotNum].szCharName); + lpSendMsg->BlockCharList[btSlotNum].szCharName[MAX_IDSTRING] = '\0'; + nCnt++; + if (nCnt >= 20) + { + break; + } + } + lpSendMsg->btUserCnt = nCnt; + m_DBQuery.Clear(); + return TRUE; +} -int CBlockChatUserDBSet::DSDB_AddBlockChatUser(SDHP_REQ_ADD_BLOCK_CHAT_USER_INFO *lpRecv) +BOOL CBlockChatUserDBSet::DSDB_AddBlockChatUser(LPSDHP_REQ_ADD_BLOCK_CHAT_USER_INFO lpRecv) { - int result; CString qSql; + qSql.Format("EXEC WZ_ChattingBlockUserInsert '%s', %d ,'%s'", lpRecv->szCharName, lpRecv->szBlockChar.btSlotNum, lpRecv->szBlockChar.szCharName); - qSql.Format("EXEC WZ_ChattingBlockUserInsert '%s', %d ,'%s'",lpRecv->szCharName,lpRecv->szBlockChar.btSlotNum,lpRecv->szBlockChar.szCharName); - - if (this->m_DBQuery.Exec(qSql)) - { - this->m_DBQuery.Clear(); - result = 1; - } - else + if (m_DBQuery.Exec(qSql) == FALSE) { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [BlockChatUser] DSDB_AddBlockChatUser [%s] %s %d",lpRecv->szCharName, __FILE__, __LINE__); - result = 0; + m_DBQuery.Clear(); + LogAddTD("error-L3 : [BlockChatUser] DSDB_AddBlockChatUser [%s] %s %d", lpRecv->szCharName, __FILE__, __LINE__); + return FALSE; } - return result; -} - + m_DBQuery.Clear(); + return TRUE; +} -int CBlockChatUserDBSet::DSDB_DelBlockChatUser(SDHP_REQ_DEL_BLOCK_CHAT_USER_INFO *lpRecv) +BOOL CBlockChatUserDBSet::DSDB_DelBlockChatUser(LPSDHP_REQ_DEL_BLOCK_CHAT_USER_INFO lpRecv) { - int result; CString qSql; + qSql.Format("EXEC WZ_ChattingBlockUserDel '%s' ,'%s'", lpRecv->szCharName, lpRecv->szBlockChar.szCharName); - qSql.Format("EXEC WZ_ChattingBlockUserDel '%s' ,'%s'", - lpRecv->szCharName,lpRecv->szBlockChar.szCharName); - if (this->m_DBQuery.Exec(qSql)) + if (m_DBQuery.Exec(qSql) == FALSE) { - this->m_DBQuery.Clear(); - result = 1; + m_DBQuery.Clear(); + LogAddTD("error-L3 : [BlockChatUser] DSDB_DelBlockChatUser [%s] %s %d", lpRecv->szCharName, __FILE__, __LINE__); + return FALSE; } - else - { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [BlockChatUser] DSDB_DelBlockChatUser [%s] %s %d", - lpRecv->szCharName, __FILE__, __LINE__); - result = 0; - } - return result; + + m_DBQuery.Clear(); + return TRUE; } \ No newline at end of file diff --git a/DataServer/DbSet/BlockChatUserDBSet.h b/DataServer/DbSet/BlockChatUserDBSet.h index 1f7a55e..840bd9c 100644 --- a/DataServer/DbSet/BlockChatUserDBSet.h +++ b/DataServer/DbSet/BlockChatUserDBSet.h @@ -1,18 +1,24 @@ +#ifndef __BLOCKCHATUSERDBSET_H__ +#define __BLOCKCHATUSERDBSET_H__ #pragma once -//#include "Include\ProDef.h" -#include "..\Include\Sprodef.h" +#include "..\Include\Sprodef.h" #include "DBConBase.h" class CBlockChatUserDBSet : public CDBConBase { public: - CBlockChatUserDBSet(); virtual ~CBlockChatUserDBSet(); - int Connect(); // idb - bool DSDB_SelectBlockChatUser(char *Name, SDHP_ANS_BLOCK_CHAT_USER_INFO *lpSendMsg); // idb - int DSDB_AddBlockChatUser(SDHP_REQ_ADD_BLOCK_CHAT_USER_INFO *lpRecv); // idb - int DSDB_DelBlockChatUser(SDHP_REQ_DEL_BLOCK_CHAT_USER_INFO *lpRecv); // idb -}; \ No newline at end of file + BOOL Connect(); + + BOOL DSDB_SelectBlockChatUser(char* Name, LPSDHP_ANS_BLOCK_CHAT_USER_INFO lpSendMsg); + BOOL DSDB_AddBlockChatUser(LPSDHP_REQ_ADD_BLOCK_CHAT_USER_INFO lpRecv); + BOOL DSDB_DelBlockChatUser(LPSDHP_REQ_DEL_BLOCK_CHAT_USER_INFO lpRecv); + +public: + CQuery m_DBQuery; +}; + +#endif \ No newline at end of file diff --git a/DataServer/DbSet/BombHuntDBSet.cpp b/DataServer/DbSet/BombHuntDBSet.cpp index deb6a40..1eb5eb9 100644 --- a/DataServer/DbSet/BombHuntDBSet.cpp +++ b/DataServer/DbSet/BombHuntDBSet.cpp @@ -11,115 +11,92 @@ CBombHuntDBSet::~CBombHuntDBSet() BOOL CBombHuntDBSet::Connect() { - if (m_DBQuery.Connect(3, szDbConnectDsn, szDbConnectID, szDbConnectPass)) - return 1; - MsgBox("CBombHuntDBSet ODBC Connect Fail"); - return 0; + if (m_Query.Connect(3, szDbConnectDsn, szDbConnectID, szDbConnectPass) == FALSE) + { + MsgBox("CBombHuntDBSet ODBC Connect Fail"); + return FALSE; + } + + return TRUE; } -int CBombHuntDBSet::DBSelectBombHunt(char *szAccountID, char *szName, unsigned __int16 *wOutScore, char *btOutGameState, char *szOutTileState) +BOOL CBombHuntDBSet::DBSelectBombHunt(char* szAccountID, char* szName, WORD& wOutScore, BYTE& btOutGameState, char* szOutTileState) { - int result; - CString QueryStr; - int iItemCount = 0; int iReturnCode = 0; - + CString QueryStr; QueryStr.Format("EXEC WZ_BombHuntSetSelect '%s', '%s'", szAccountID, szName); - if (this->m_DBQuery.Exec(QueryStr)) + if (m_Query.Exec(QueryStr) == FALSE) { - if (this->m_DBQuery.Fetch() == 100) - { - this->m_DBQuery.Clear(); - result = 0; - } - else - { - *wOutScore = this->m_DBQuery.GetInt("Score"); - *btOutGameState = this->m_DBQuery.GetInt("GameState"); - this->m_DBQuery.GetStr("TileState", szOutTileState); - this->m_DBQuery.Clear(); - result = 1; - } + m_Query.Clear(); + LogAddTD("error-L3 : [BombHuntDBSet] DBSelectBombHuntInfo #1 [%s][%s] %s %d", szAccountID, szName, __FILE__, __LINE__); + return FALSE; } - else + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA) { - this->m_DBQuery.Clear(); - LogAddTD("error-L3 : [BombHuntDBSet] DBSelectBombHuntInfo #1 [%s][%s] %s %d", szAccountID, szName, __FILE__, __LINE__); - result = 0; + m_Query.Clear(); + return FALSE; } - return result; + + wOutScore = m_Query.GetInt("Score"); + btOutGameState = m_Query.GetInt("GameState"); + m_Query.GetStr("TileState", szOutTileState); + m_Query.Clear(); + return TRUE; } -int CBombHuntDBSet::DBInsertBombHunt(char *szAccountID, char *szName, unsigned __int16 wScore, unsigned __int16 wGameState, char *szTileState) +BOOL CBombHuntDBSet::DBInsertBombHunt(char *szAccountID, char *szName, WORD wScore, WORD wGameState, char *szTileState) { - int result; - CString QueryStr; int iItemCount = 0; int iReturnCode = 0; + CString QueryStr; QueryStr.Format("EXEC WZ_BombHuntSetSave '%s', '%s', %d, %d, '%s'", szAccountID, szName, wGameState, wScore, szTileState); - if (this->m_DBQuery.Exec(QueryStr)) - { - this->m_DBQuery.Clear(); - result = 1; - } - else + if (m_Query.Exec(QueryStr) == FALSE) { - this->m_DBQuery.Clear(); + m_Query.Clear(); LogAddTD("error-L3 : [BombHunt] DBInsertBombHunt #1 [%s][%s] %s %d", szAccountID, szName, __FILE__, __LINE__); - result = 0; + return FALSE; } - return result; + + m_Query.Clear(); + return TRUE; } -int CBombHuntDBSet::DBDeleteBombHunt(char *szAccountID, char *szName) +BOOL CBombHuntDBSet::DBDeleteBombHunt(char *szAccountID, char *szName) { - int result; CString QueryStr; + QueryStr.Format("EXEC WZ_BombHuntSetDelete '%s', '%s'", szAccountID, szName); - QueryStr.Format( - "EXEC WZ_BombHuntSetDelete '%s', '%s'", - szAccountID, - szName); - if (this->m_DBQuery.Exec(QueryStr)) - { - this->m_DBQuery.Clear(); - result = 1; - } - else + if (m_Query.Exec(QueryStr) == FALSE) { - this->m_DBQuery.Clear(); - LogAddTD( - "error-L3 : [BombHunt] DBDeleteBombHunt #1 [%s][%s] %s %d", - szAccountID, - szName, __FILE__, __LINE__); - result = 0; + m_Query.Clear(); + LogAddTD("error-L3 : [BombHunt] DBDeleteBombHunt #1 [%s][%s] %s %d", szAccountID, szName, __FILE__, __LINE__); + return FALSE; } - return result; + + m_Query.Clear(); + return TRUE; } -int CBombHuntDBSet::DBInsertBombHuntLog(char *szAccountID, char *szName, unsigned __int16 wScore, char btClear) +BOOL CBombHuntDBSet::DBInsertBombHuntLog(char *szAccountID, char *szName, WORD wScore, BYTE btClear) { - int result; CString QueryStr; - QueryStr.Format("EXEC WZ_BombHuntLogSetSave '%s', '%s', %d, %d", szAccountID, szName, wScore, btClear); - if (this->m_DBQuery.Exec(QueryStr)) - { - this->m_DBQuery.Clear(); - result = 1; - } - else + if (m_Query.Exec(QueryStr) == FALSE) { - this->m_DBQuery.Clear(); + m_Query.Clear(); LogAddTD("error-L3 : [MuRummy] DBInsertBombHuntLog #1 [%s][%s] %s %d", szAccountID, szName, __FILE__, __LINE__); - - result = 0; + return FALSE; } - return result; + + m_Query.Clear(); + return TRUE; } \ No newline at end of file diff --git a/DataServer/DbSet/BombHuntDBSet.h b/DataServer/DbSet/BombHuntDBSet.h index 863f5c4..2f223e2 100644 --- a/DataServer/DbSet/BombHuntDBSet.h +++ b/DataServer/DbSet/BombHuntDBSet.h @@ -1,10 +1,10 @@ +#ifndef __BOMBHUNTDBSET_H__ +#define __BOMBHUNTDBSET_H__ #pragma once -//#include "Include\ProDef.h" -#include "..\Include\Sprodef.h" +#include "..\Include\Sprodef.h" #include "DBConBase.h" - class CBombHuntDBSet : public CDBConBase { public: @@ -12,9 +12,15 @@ class CBombHuntDBSet : public CDBConBase CBombHuntDBSet(); virtual ~CBombHuntDBSet(); - int Connect(); - int DBSelectBombHunt(char *szAccountID, char *szName, unsigned __int16 *wOutScore, char *btOutGameState, char *szOutTileState); // idb - int DBInsertBombHunt(char *szAccountID, char *szName, unsigned __int16 wScore, unsigned __int16 wGameState, char *szTileState); // idb - int DBDeleteBombHunt(char *szAccountID, char *szName); // idb - int DBInsertBombHuntLog(char *szAccountID, char *szName, unsigned __int16 wScore, char btClear); // idb -}; \ No newline at end of file + BOOL Connect(); + + BOOL DBSelectBombHunt(char *szAccountID, char *szName, WORD& wOutScore, BYTE& btOutGameState, char *szOutTileState); + BOOL DBInsertBombHunt(char *szAccountID, char *szName, WORD wScore, WORD wGameState, char *szTileState); + BOOL DBDeleteBombHunt(char *szAccountID, char *szName); + BOOL DBInsertBombHuntLog(char *szAccountID, char *szName, WORD wScore, BYTE btClear); + +public: + CQuery m_Query; +}; + +#endif \ No newline at end of file diff --git a/DataServer/MainFrm.cpp b/DataServer/MainFrm.cpp index d3db8d0..2c719ad 100644 --- a/DataServer/MainFrm.cpp +++ b/DataServer/MainFrm.cpp @@ -1,22 +1,11 @@ - -// MainFrm.cpp : implementation of the CMainFrame class -// - #include "stdafx.h" #include "Dataserver.h" - #include "MainFrm.h" #include "ServerPrc.h" #include "WZIPCheck.h" #include "BadSyntaxChk.h" #include "MapServerManager_DS.h" -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - char szVersion[] = DATASERVER_VERSION; CActiveMng cAM; @@ -44,8 +33,6 @@ CWarehouseDBSet CWhDBSet; CZenEvenDb CZenEvenDBSet; CCharPreviewDBSet gCharPreDBSet; LuckyItemDBSet g_LuckyItemDBSet; - -//season 12+ CMonsterKillInfoDbSet g_MonsterKillInfoDbSet; CBlockChatUserDBSet g_BlockChatUserDBSet; LabyrinthDBSet g_LabyrinthDBSet; @@ -69,24 +56,16 @@ CRuudLogDbSet g_RuudLogDBSet; CGremoryCaseDBSet g_CGremoryCaseDBSet; CDevilSquareFinalDBSet g_DSFDBset; ChaosCastleFinalDBSet g_CCFDbSet; -int gbIsJumpingServer; +BOOL gbIsJumpingServer; CQuestExpDBSet g_QuestExpDBSet; CPeriodItemExDBSet PeriodItemExDBSet; -#ifdef MASTER_LEVEL_UP_SYSTEM_20070912 CMasterLevelSystemDBSet MasterLevelSystemDBSet; -#endif CQuestMonKillDBSet QuestMonKillDBSet; -#ifdef MU_CRYWOLF_DS_PROTOCOL_20050505 CCrywolfDBSet CrywolfDBSet; -#endif -#ifdef MU_CASTLESIEGE_DS_PROTOCOL_20041105 CCastleDBSet CastleDBSet; -#endif -#ifdef DARKLORD_WORK CPetDBSet PetDBSet; -#endif CCharDBSet gCharDbSet; CAccountCharDBSet gACDbSet; @@ -100,10 +79,7 @@ char szDbConnectDsn[52]; #define WM_ASYNCSELECTMSG_CLIENT (WM_USER+1001) -#define WM_ASYNCSELECTMSG_SERVERACCEPT (WM_USER+1002) // 서버의 접속을 기다리는 메시지 - -///////////////////////////////////////////////////////////////////////////// -// CMainFrame +#define WM_ASYNCSELECTMSG_SERVERACCEPT (WM_USER+1002) IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd) diff --git a/DataServer/common/ItemSocketOptionDefine.h b/DataServer/common/ItemSocketOptionDefine.h deleted file mode 100644 index 11bbf70..0000000 --- a/DataServer/common/ItemSocketOptionDefine.h +++ /dev/null @@ -1,182 +0,0 @@ -#ifndef _SOCKETOPTIONDEFINE_ -#define _SOCKETOPTIONDEFINE_ - -#define MAX_SEED_TYPE 6 -#define MAX_SEED_COUNT 50 -#define MAX_SPHERE_LEVEL 5 -#define MAX_SEEDSPHERE MAX_SEED_COUNT - -#define MAX_BONUS_OPTION 6 -#define MAX_SET_OPTION 2 - -#define MAX_SOCKET_SLOT 5 - -#define MAX_EQUIP_SOCKET_ITEM 7 - -#define MAX_SEEDSPHERE_OPTION_DATA ( MAX_EQUIP_SOCKET_ITEM * MAX_SOCKET_SLOT ) -#define MAX_BONUS_OPTION_DATA MAX_EQUIP_SOCKET_ITEM -#define MAX_SET_OPTION_DATA MAX_SET_OPTION -#define MAX_USER_SOCKET_OPTION_DATA ( ( MAX_EQUIP_SOCKET_ITEM * MAX_SOCKET_SLOT ) + MAX_BONUS_OPTION + MAX_SET_OPTION ) - -// -#define MAX_SEED_EXTRACT_SUCCESS_RATE 90 -#define MAX_SEEDSPHERE_COMPOSITE_SUCCESS_RATE 90 - -//#define MAX_USER_SEEDSPHERE_EQUIP 7 -//#define MAX_USER_SEEDSPHERE_DATA ( MAX_USER_SEEDSPHERE_EQUIP * MAX_SOCKET_SLOT ) - -#define MAX_OPTION_STRING 30 - -#define SOCKETSLOT_NONE 0xFF -#define SOCKETSLOT_EMPTY 0xFE - -enum -{ - SEED_TYPE_NONE = 0, - SEED_TYPE_FIRE = 1, - SEED_TYPE_WATER = 2, - SEED_TYPE_ICE = 3, - SEED_TYPE_WIND = 4, - SEED_TYPE_LIGHTNING = 5, - SEED_TYPE_EARTH = 6, - SEED_TYPE_UNIQUE = 7, - SEED_TYPE_MAX -}; - -enum -{ - SOCKET_OPTION_TYPE_NONE = 0, - SOCKET_OPTION_TYPE_SEED = 1, - SOCKET_OPTION_TYPE_BONUS = 2, - SOCKET_OPTION_TYPE_SET = 3, -}; - -enum -{ - SEED_OPTION_TYPE_NONE = 0, - SEED_OPTION_TYPE_VALUE = 1, - SEED_OPTION_TYPE_RATE = 2, - SEED_OPTION_TYPE_PER_LEVEL = 3, - SEED_OPTION_TYPE_PER_HP = 4, - SEED_OPTION_TYPE_PER_MP = 5, -}; - -// ʽ ɼ Ÿ -enum -{ - // - BONUS_OPTION_WEAPON_ATTACK_POWER = 0, - BONUS_OPTION_WEAPON_ATTACK_SKILL_POWER = 1, - // ̷ -#ifdef MODIFY_SOCKET_ITEM_NEW_OPTION_20080818 - BONUS_OPTION_STAFF_ATTACK_POWER = 2, -#else - BONUS_OPTION_STAFF_MAGIC_POWER = 2, -#endif // MODIFY_SOCKET_ITEM_NEW_OPTION_20080818 - BONUS_OPTION_STAFF_ATTACK_SKILL_POWER = 3, - //  - BONUS_OPTION_PROTECT_BLOCK_POWER = 4, - BONUS_OPTION_PROTECT_MAX_HP_INC = 5, -}; - -enum -{ - SET_OPTION_DOUBLE_DAMAGE_RATE_INC = 0, - SET_OPTION_IGNORE_ENEMY_DEFENSE = 1, -}; - -// õ彺Ǿ ε ɷġ Ÿ -enum -{ - // Ӽ ( ȭ) - SEED_EFFECT_TYPE_FIRE_BEGIN = 0, - SEED_EFFECT_TYPE_ATTACK_POWER = 0, - SEED_EFFECT_TYPE_ATTACK_SPEED = 1, - SEED_EFFECT_TYPE_MAX_ATTACK_POWER = 2, - SEED_EFFECT_TYPE_MIN_ATTACK_POWER = 3, - SEED_EFFECT_TYPE_MIN_MAX_ATTACK_POWER = 4, -#ifdef MODIFY_SOCKET_ITEM_NEW_OPTION_20080818 - SEED_EFFECT_TYPE_REDUCE_AG_RATE = 5, // AGҸ𷮰 (ű) -#else - SEED_EFFECT_TYPE_ATTACK_SKILL_POWER = 5, // ųݷ» ( -> ) - SEED_EFFECT_TYPE_ATTACK_ACCURACY = 6, // ݼ ( -> ) - SEED_EFFECT_TYPE_PERSONAL_ATTACK_ACCURACY = 7, // ΰݼ () - SEED_EFFECT_TYPE_MAGIC_POWER = 8, // () -#endif // MODIFY_SOCKET_ITEM_NEW_OPTION_20080818 - SEED_EFFECT_TYPE_FIRE_END = 9, - // Ӽ ( ȭ) - SEED_EFFECT_TYPE_WATER_BEGIN = 10, - SEED_EFFECT_TYPE_SUCCESS_BLOCK = 10, - SEED_EFFECT_TYPE_BLOCK_POWER = 11, - SEED_EFFECT_TYPE_SHIELD_BLOCK_POWER = 12, - SEED_EFFECT_TYPE_REDUCE_DAMAGE = 13, - SEED_EFFECT_TYPE_REFLECT_DAMAGE = 14, - SEED_EFFECT_TYPE_WATER_END = 15, - // Ӽ ( ȭ) - SEED_EFFECT_TYPE_ICE_BEGIN = 16, - SEED_EFFECT_TYPE_MONSTER_KILL_REFILL_HP = 16, - SEED_EFFECT_TYPE_MONSTER_KILL_REFILL_MP = 17, -#ifdef MODIFY_SOCKET_ITEM_NEW_OPTION_20080818 - SEED_EFFECT_TYPE_ATTACK_SKILL_POWER = 18, - SEED_EFFECT_TYPE_ATTACK_ACCURACY = 19, - SEED_EFFECT_TYPE_ITEM_DURABILITY_IMPROVE = 20, // ۳°ȭ (ű) -#else - SEED_EFFECT_TYPE_SD_POINT_REDUCE_RATE_INC = 18, // ųݷ» ( -> ) - SEED_EFFECT_TYPE_SD_IGNORE_RATE_INC = 19, // ݼ ( -> ) -#endif // MODIFY_SOCKET_ITEM_NEW_OPTION_20080818 - SEED_EFFECT_TYPE_ICE_END = 20, - // ٶ Ӽ ( ȭ) - SEED_EFFECT_TYPE_WIND_BEGIN = 21, - SEED_EFFECT_TYPE_REFILL_HP_INC = 21, - SEED_EFFECT_TYPE_MAX_HP_INC = 22, - SEED_EFFECT_TYPE_MAX_MP_INC = 23, - SEED_EFFECT_TYPE_REFILL_MP_INC = 24, - SEED_EFFECT_TYPE_MAX_AG_INC = 25, - SEED_EFFECT_TYPE_REFILL_AG_INC = 26, - SEED_EFFECT_TYPE_MONSTER_KILL_ZEN_INC = 27, - SEED_EFFECT_TYPE_WIND_END = 28, - // Ӽ ( ȭ) - SEED_EFFECT_TYPE_THUNDER_BEGIN = 29, - SEED_EFFECT_TYPE_EXCELLENT_DAMAGE_INC = 29, - SEED_EFFECT_TYPE_EXCELLENT_DAMAGE_RATE_INC = 30, - SEED_EFFECT_TYPE_CRITICAL_DAMAGE_INC = 31, - SEED_EFFECT_TYPE_CRITICAL_DAMAGE_RATE_INC = 32, - SEED_EFFECT_TYPE_THUNDER_END = 33, - // Ӽ ( ȭ) - SEED_EFFECT_TYPE_EARTH_BEGIN = 34, - SEED_EFFECT_TYPE_STRENGTH_INC = 34, - SEED_EFFECT_TYPE_DEXTERITY_INC = 35, - SEED_EFFECT_TYPE_VITALITY_INC = 36, - SEED_EFFECT_TYPE_ENERGY_INC = 37, - SEED_EFFECT_TYPE_REQUIRE_STRENGTH_DEC = 38, - SEED_EFFECT_TYPE_REQUIRE_DEXTERITY_DEC = 39, - SEED_EFFECT_TYPE_EARTH_END = 40, - // ũ ɼ - SEED_EFFECT_TYPE_UNIQUE_BEGIN = 41, - SEED_EFFECT_TYPE_UNIQUE_1 = 41, - SEED_EFFECT_TYPE_UNIQUE_2 = 42, - SEED_EFFECT_TYPE_UNIQUE_END = 43, - // Ʈ ɼ - SEED_EFFECT_TYPE_SET_BEGIN = 44, - SEED_EFFECT_TYPE_SET_DOUBLE_DAMAGE_RATE_INC = 44, - SEED_EFFECT_TYPE_SET_IGNORE_ENERMY_DEFENSE = 45, - SEED_EFFECT_TYPE_SET_END = 45, -}; - -typedef struct -{ - BYTE m_SocketOptionIndex; - BYTE m_SocketOptionValueType; - WORD m_SocketOptionValue; - BYTE m_SocketOptionCount; - - void Clear() - { - m_SocketOptionIndex = SOCKETSLOT_NONE; - m_SocketOptionValue = 0; - m_SocketOptionValueType = 0; - m_SocketOptionCount = 0; - } -}SOCKET_OPTION_LIST, *LPSOCKET_OPTION_LIST; - -#endif // _SOCKETOPTIONDEFINE_ \ No newline at end of file diff --git a/DataServer/common/zzzitem.cpp b/DataServer/common/zzzitem.cpp index 9eaa22c..020737d 100644 --- a/DataServer/common/zzzitem.cpp +++ b/DataServer/common/zzzitem.cpp @@ -6,39 +6,12 @@ #include "..\\Include\\ReadScript.h" #include "..\\common\\Winutil.h" #include "ZzzItem.h" - -#ifdef SCRIPT_DECODE_WORK -#include "..\\common\\WZScriptEncode.h" -#endif - #include "..\\common\\SetItemOption.h" -#ifdef AUTH_GAMESERVER -#include "..\\common\\WzMemScript.h" -#endif - -#ifndef CHARACTERDB_SERVER -#ifdef ADD_ITEM_SOCKET_OPTION_SYSTEM_20080415 -#include "ItemSocketOptionDefine.h" -extern CItemSocketOptionSystem g_SocketOptionSystem; -#endif // ADD_ITEM_SOCKET_OPTION_SYSTEM_20080415 -#endif - -#ifdef DARKLORD_WORK CPetItemExp gPetItemExp; -#endif - -#ifdef ADD_RANDOM_RANGE_OF_ITEMINDEX_20050808 int g_MaxItemIndexOfEachItemType[MAX_ITEM_TYPE] = { 0, }; -#endif - - -//extern void GCServerMsgStringSend(char *szMsg, int aIndex, BYTE type); - ITEM_ATTRIBUTE ItemAttribute[MAX_ITEM]; -//---------------------------------------------------------------------------- -// 아이템 정보를 초기화 한다. CItem::CItem() { Clear(); diff --git a/DataServer/include/Sprodef.h b/DataServer/include/Sprodef.h index a038ee6..ed2b5cd 100644 --- a/DataServer/include/Sprodef.h +++ b/DataServer/include/Sprodef.h @@ -1,10 +1,6 @@ #ifndef __SPRODEF_H__ #define __SPRODEF_H__ -#define VER_CHATWINDOW_OPTION - -//#define PROPERTY_ITEM_WORK // 고유정보가 들어가 있는 아이템 - // Server Header Protocol BYTE(Size) typedef struct { @@ -26,19 +22,12 @@ typedef struct BYTE Subcode; } SHPW_HEAD, *LPSHPW_HEAD; -//---------------------------------------------------------------------------- -// 결과 공통 -//---------------------------------------------------------------------------- typedef struct { PBMSG_HEAD h; BYTE Result; } SDHP_DEFAULT_RESULT, *LPSDHP_DEFAULT_RESULT; - -//---------------------------------------------------------------------------- -// 결과를 보낼때 사용 -//---------------------------------------------------------------------------- typedef struct { PBMSG_HEAD h; @@ -697,79 +686,6 @@ short Number; } SDHP_ACCOUNTRESULT, *LPSDHP_ACCOUNTRESULT; */ -//---------------------------------------------------------------------------- -// [0x20] 특정아이디의 비번질문을 얻고자 요청한다. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - char Id[MAX_IDSTRING]; -} SDHP_PASSQUESTION_QUERY, *LPSDHP_PASSQUESTION_QUERY; - -//---------------------------------------------------------------------------- -// [0x20] 특정아이디의 비번질문을 얻고자 요청한다. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - BYTE Result; - char Question[MAX_QUESTIONSTR]; -} SDHP_PASSQUESTION_QUERY_RESULT, *LPSDHP_PASSQUESTION_QUERY_RESULT; - - -//---------------------------------------------------------------------------- -// [0x21] 비밀번호 문의 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - char Id[MAX_IDSTRING]; - char JoominN[MAX_JOOMINNUMBERSTR]; - char Answer[MAX_ANSWERSTR]; - char IpAddress[17]; -} SDHP_PASSQUERY, *LPSDHP_PASSQUERY; - -//---------------------------------------------------------------------------- -// [0x21] 비밀번호 문의 결과 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - BYTE Result; - char Password[MAX_IDSTRING]; -} SDHP_PASSQUERY_RESULT, *LPSDHP_PASSQUERY_RESULT; - - -//---------------------------------------------------------------------------- -// [0x22] 비밀번호 변경신청 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - char Id[MAX_IDSTRING]; - char PassOld[MAX_IDSTRING]; - char PassNew[MAX_IDSTRING]; - char JoominN[MAX_JOOMINNUMBERSTR]; - char IpAddress[17]; -} SDHP_PASSCHANGE, *LPSDHP_PASSCHANGE; - - -//---------------------------------------------------------------------------- -// [0x22] 비밀번호 변경신청 결과 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - BYTE Result; -} SDHP_PASSCHANGE_RESULT, *LPSDHP_PASSCHANGE_RESULT; - - //---------------------------------------------------------------------------- // [0x2D] 고유 아이템 정보를 요청한다. //---------------------------------------------------------------------------- @@ -1523,9 +1439,7 @@ typedef struct BYTE QkeyDefine; BYTE WkeyDefine; BYTE EkeyDefine; -#ifdef VER_CHATWINDOW_OPTION BYTE ChatWindow; -#endif #ifdef ADD_SEASON_3_NEW_UI_20071122 BYTE RkeyDefine; @@ -1561,1215 +1475,212 @@ typedef struct char chAccountID[MAX_IDSTRING + 1]; // char chCharacterName[MAX_IDSTRING + 1]; // - int m_iRuleIndex; // - BOOL m_bClearStat; // - int m_iLevelAfterReset; // - int m_iLevelUpPoint; // - BOOL m_bReqSpecialItem; // - BOOL m_bBornPlace; // - int m_iResetNumber; // - BOOL m_bClearBuffState; // - BOOL m_bClearMagicList; // -}PMSG_REQ_SAVE_CHARACTER_RESET, *LPPMSG_REQ_SAVE_CHARACTER_RESET; - -typedef struct -{ - PBMSG_HEAD h; // C1:17 - int iUserIndex; // 4 - - int m_iRuleIndex; // - BOOL m_bClearStat; // - int m_iLevelAfterReset; // - int m_iLevelUpPoint; // - BOOL m_bReqSpecialItem; // - BOOL m_bBornPlace; // - int m_iResetNumber; // - BOOL m_bClearBuffState; // - BOOL m_bClearMagicList; // -}PMSG_ANS_SAVE_CHARACTER_RESET, *LPPMSG_ANS_SAVE_CHARACTER_RESET; - -typedef struct -{ - PBMSG_HEAD h; // C1:17 - char chAccountID[MAX_IDSTRING + 1]; - int iUserIndex; - BYTE AccountType; - INT64 EndTime; -}PMSG_REQ_VIP, *LPPMSG_REQ_VIP; - -typedef struct -{ - PBMSG_HEAD h; // C1:17 - int iUserIndex; - BYTE AccountType; - INT64 EndTime; -}PMSG_ANS_VIP, *LPPMSG_ANS_VIP; - -//---------------------------------------------------------------------------- -// [0x60] 옵션 키 값을 받는다. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - int aIndex; - char Name[MAX_IDSTRING]; -#ifdef UPDATE_SKILLKEY_EXPAND_20080804 - BYTE SkillKeyBuffer[20]; -#else // UPDATE_SKILLKEY_EXPAND_20080804 - BYTE SkillKeyBuffer[10]; -#endif // UPDATE_SKILLKEY_EXPAND_20080804 - BYTE GameOption; - BYTE QkeyDefine; - BYTE WkeyDefine; - BYTE EkeyDefine; - -#ifdef VER_CHATWINDOW_OPTION - BYTE ChatWindow; -#endif - -#ifdef ADD_SEASON_3_NEW_UI_20071122 - BYTE RkeyDefine; -#endif - -#ifdef UPDATE_OPTIONKEY_LEVEL_20080116 - int QWERLevel; // 클라이언트는 BYTE QWERLevel[4] 사용 -#endif - BYTE EnableTransfromMode; - short PlayGuideLv; - BYTE PlayGuideCheck; -} SDHP_SKILLKEYDATA_SEND, *LPSDHP_SKILLKEYDATA_SEND; - - -//---------------------------------------------------------------------------- -// [0x60] 이벤트 시작을 알린다. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - BYTE Event; -} SDHP_EVENTSTART, *LPSDHP_EVENTSTART; - - -//---------------------------------------------------------------------------- -// [0x61] 인증서버에서 이벤트 시작 또는 종료를 알린다 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - BYTE Event; // 이벤트 번호 - BYTE Stat; // 상태 0 : 종료 1 : 시작 -} SDHP_EVENTCONTROL, *LPSDHP_EVENTCONTROL; - - -//---------------------------------------------------------------------------- -// [0x62] 인증서버에서 Reload 설정을 알린다 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - BYTE Option; // 옵션 번호 -} SDHP_OPTIONCONTROL, *LPSDHP_OPTIONCONTROL; - -// 0x30 -typedef struct -{ - PBMSG_HEAD h; - char Account[MAX_IDSTRING]; - char Name[MAX_IDSTRING]; -} SDHP_LOVEHEARTEVENT, *LPSDHP_LOVEHEARTEVENT; - -// 0x30 -typedef struct -{ - PBMSG_HEAD h; - - BYTE Result; - - char Name[MAX_IDSTRING]; - int Number; - -} SDHP_LOVEHEARTEVENT_RESULT, *LPSDHP_LOVEHEARTEVENT_RESULT; - -// 0x40 전체 공지 -typedef struct -{ - PBMSG_HEAD h; - char Notice[61]; -} SDHP_NOTICE, *LPSDHP_NOTICE; - -// 0x41 유저 공지 -typedef struct -{ - PBMSG_HEAD h; - char szId[10]; - char Notice[61]; -} SDHP_USER_NOTICE, *LPSDHP_USER_NOTICE; - - -// 0x42 게임 블럭 -typedef struct -{ - PBMSG_HEAD h; - int ClientIndex; - char AccountID[MAX_IDSTRING]; - BYTE ServerNum; - char CharName[MAX_IDSTRING]; - BYTE Type; -} SDHP_GAME_BLOCK, *LPSDHP_GAME_BLOCK; - -// 0x42 게임 블럭 결과 -typedef struct -{ - PBMSG_HEAD h; - BYTE Result; -} SDHP_GAME_BLOCK_RESULT, *LPSDHP_GAME_BLOCK_RESULT; - - -// 0xCF 캐릭터 이동 -typedef struct -{ - PBMSG_HEAD h; - char Account[MAX_IDSTRING]; - short Number; -} SDHP_CHARACTER_TRANSFER, *LPSDHP_CHARACTER_TRANSFER; - -typedef struct -{ - PBMSG_HEAD h; - char Account[MAX_IDSTRING]; - short Number; - BYTE Result; -} SDHP_CHARACTER_TRANSFER_RESULT, *LPSDHP_CHARACTER_TRANSFER_RESULT; - -#ifdef UPDATE_CHANGE_CHARACTERNAME_20080410 // 캐릭명 변경 프로토콜 -//---------------------------------------------------------------------------- -// GD[0x16] 캐릭터 변경을 요청. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - int aIndex; - char AccountId[MAX_IDSTRING]; - char OldName[MAX_IDSTRING]; - char NewName[MAX_IDSTRING]; -} SDHP_CHANGE_NAME, *LPSDHP_CHANGE_NAME; - -//---------------------------------------------------------------------------- -// DG[0x16] 캐릭터 변경을 요청 결과. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - int aIndex; - char AccountId[MAX_IDSTRING]; - char OldName[MAX_IDSTRING]; - char NewName[MAX_IDSTRING]; - BYTE btResult; // 0: 성공, 1: 동일 캐릭터명 존재 -} SDHP_CHANGE_NAME_RESULT, *LPSDHP_CHANGE_NAME_RESULT; -#endif // UPDATE_CHANGE_CHARACTERNAME_20080410 - -//##__FRIEND_WORK__ -#ifdef __FRIEND_WORK__ - -//---------------------------------------------------------------------------- -// GD[0x60] 친구 리스트를 요청한다. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - char Name[MAX_IDSTRING]; - BYTE pServer; -} FHP_FRIENDLIST_REQ, *LPFHP_FRIENDLIST_REQ; - -//---------------------------------------------------------------------------- -// DG[0x60] 친구 리스트를 요청에 대한 결과 -//---------------------------------------------------------------------------- -typedef struct -{ - PWMSG_HEAD h; - short Number; - char Name[MAX_IDSTRING]; - BYTE Count; - BYTE MailCount; -} FHP_FRIENDLIST_COUNT, *LPFHP_FRIENDLIST_COUNT; - -//---------------------------------------------------------------------------- -// DG[0x60] 친구 리스트를 요청에 대한 결과 -//---------------------------------------------------------------------------- -typedef struct -{ - char Name[MAX_IDSTRING]; - BYTE Server; -} FHP_FRIENDLIST, *LPFHP_FRIENDLIST; - -//---------------------------------------------------------------------------- -// GD[0x61] 대기중인 친구 리스트를 요청한다. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - char Name[MAX_IDSTRING]; -} FHP_WAITFRIENDLIST_REQ, *LPFHP_WAITFRIENDLIST_REQ; - -//---------------------------------------------------------------------------- -// DG[0x61] 대기중인 친구 리스트를 요청 결과 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - char Name[MAX_IDSTRING]; - char FriendName[MAX_IDSTRING]; -} FHP_WAITFRIENDLIST_COUNT, *LPFHP_WAITFRIENDLIST_COUNT; - -//---------------------------------------------------------------------------- -// GD[0x62] 상태를 알린다. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - char Name[MAX_IDSTRING]; - BYTE State; -} FHP_FRIEND_STATE_C, *LPFHP_FRIEND_STATE_C; - -//---------------------------------------------------------------------------- -// DG[0x62] 상태를 알린다. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - char Name[MAX_IDSTRING]; - char FriendName[MAX_IDSTRING]; - BYTE State; -} FHP_FRIEND_STATE, *LPFHP_FRIEND_STATE; - -//---------------------------------------------------------------------------- -// GD[0x63] 친구 추가 요청 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - char Name[MAX_IDSTRING]; - char FriendName[MAX_IDSTRING]; -} FHP_FRIEND_ADD_REQ, *LPFHP_FRIEND_ADD_REQ; - - -//---------------------------------------------------------------------------- -// DG[0x63] 친구 추가 요청 결과 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - BYTE Result; - char Name[MAX_IDSTRING]; - char FriendName[MAX_IDSTRING]; - BYTE Server; -} FHP_FRIEND_ADD_RESULT, *LPFHP_FRIEND_ADD_RESULT; - - -//---------------------------------------------------------------------------- -// GD[0x64] 대기중인 친구 추가 요청 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - BYTE Result; - short Number; - char Name[MAX_IDSTRING]; - char FriendName[MAX_IDSTRING]; -} FHP_WAITFRIEND_ADD_REQ, *LPFHP_WAITFRIEND_ADD_REQ; - -//---------------------------------------------------------------------------- -// DG[0x64] 대기중인 친구 추가 요청 결과 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - BYTE Result; - char Name[MAX_IDSTRING]; - char FriendName[MAX_IDSTRING]; - BYTE pServer; -} FHP_WAITFRIEND_ADD_RESULT, *LPFHP_WAITFRIEND_ADD_RESULT; - - -//---------------------------------------------------------------------------- -// GD[0x65] 친구를 삭제한다. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - char Name[MAX_IDSTRING]; - char FriendName[MAX_IDSTRING]; -} FHP_FRIEND_DEL_REQ, *LPFHP_FRIEND_DEL_REQ; - -//---------------------------------------------------------------------------- -// DG[0x65] 친구를 삭제 결과를 알린다. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - BYTE Result; - char Name[MAX_IDSTRING]; - char FriendName[MAX_IDSTRING]; -} FHP_FRIEND_DEL_RESULT, *LPFHP_FRIEND_DEL_RESULT; - - - -//---------------------------------------------------------------------------- -// GD[0x66] 대화방 개설을 요청한다. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - char Name[MAX_IDSTRING]; - char fName[MAX_IDSTRING]; // 대화 상대 - -} FHP_FRIEND_CHATROOM_CREATE_REQ, *LPFHP_FRIEND_CHATROOM_CREATE_REQ; - -//---------------------------------------------------------------------------- -// GD[0x66] 대화방 개설을 요청결과 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - BYTE Result; - short Number; - char Name[MAX_IDSTRING]; - char FriendName[MAX_IDSTRING]; - char ServerIp[15]; - WORD RoomNumber; - DWORD Ticket; - BYTE Type; -} FHP_FRIEND_CHATROOM_CREATE_RESULT, *LPFHP_FRIEND_CHATROOM_CREATE_RESULT; - -//---------------------------------------------------------------------------- -// GD[0x70] 다른유저에게 쪽지를 보낸다. -//---------------------------------------------------------------------------- -typedef struct -{ - PWMSG_HEAD h; - short Number; - DWORD WindowGuid; - char Name[MAX_IDSTRING]; - char ToName[MAX_IDSTRING]; - char Subject[MAX_MEMO_SUBJECT]; - BYTE Dir; - BYTE Action; - short MemoSize; - -#ifdef ITEM_INDEX_EXTEND_20050706 - BYTE Photo[MAX_PREVIEWCHARSET + 9]; -#else -#ifdef DARKLORD_WORK - BYTE Photo[MAX_PREVIEWCHARSET + 4]; -#else - BYTE Photo[MAX_PREVIEWCHARSET + 3]; -#endif -#endif - - char Memo[MAX_MEMO]; -} FHP_FRIEND_MEMO_SEND, *LPFHP_FRIEND_MEMO_SEND; - -//---------------------------------------------------------------------------- -// GD[0x70] 다른 유저에게 쪽지를 보낸 결과 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - char Name[MAX_IDSTRING]; - BYTE Result; - DWORD WindowGuid; -} FHP_FRIEND_MEMO_SEND_RESULT, *LPFHP_FRIEND_MEMO_SEND_RESULT; - -//---------------------------------------------------------------------------- -// GD[0x71] 쪽지 리스트 요청 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - WORD Number; - char Name[MAX_IDSTRING]; -} FHP_FRIEND_MEMO_LIST_REQ, *LPFHP_FRIEND_MEMO_LIST_REQ; - - -//---------------------------------------------------------------------------- -// DG[0x71] 쪽지 리스트를 보낸다. -//---------------------------------------------------------------------------- -typedef struct -{ - PWMSG_HEAD h; - WORD Number; - WORD MemoIndex; - char SendName[MAX_IDSTRING]; - char RecvName[MAX_IDSTRING]; - char Date[MAX_DATE]; - char Subject[MAX_MEMO_SUBJECT]; - BYTE read; -} FHP_FRIEND_MEMO_LIST, *LPFHP_FRIEND_MEMO_LIST; - - -//---------------------------------------------------------------------------- -// GD[0x72] 쪽지 내용을 보내달라고 요청 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - WORD MemoIndex; - char Name[MAX_IDSTRING]; -} FHP_FRIEND_MEMO_RECV_REQ, *LPFHP_FRIEND_MEMO_RECV_REQ; - -//---------------------------------------------------------------------------- -// DG[0x72] 쪽지 내용을 보낸다. -//---------------------------------------------------------------------------- -typedef struct -{ - PWMSG_HEAD h; - short Number; - char Name[MAX_IDSTRING]; - WORD MemoIndex; - short MemoSize; - -#ifdef ITEM_INDEX_EXTEND_20050706 - BYTE Photo[MAX_PREVIEWCHARSET + 9]; -#else -#ifdef DARKLORD_WORK - BYTE Photo[MAX_PREVIEWCHARSET + 4]; -#else - BYTE Photo[MAX_PREVIEWCHARSET + 3]; -#endif -#endif - - BYTE Dir; - BYTE Action; - char Memo[MAX_MEMO]; -} FHP_FRIEND_MEMO_RECV, *LPFHP_FRIEND_MEMO_RECV; - -//---------------------------------------------------------------------------- -// GD[0x73] 쪽지 삭제 요청 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - WORD MemoIndex; - char Name[MAX_IDSTRING]; -} FHP_FRIEND_MEMO_DEL_REQ, *LPFHP_FRIEND_MEMO_DEL_REQ; - -//---------------------------------------------------------------------------- -// DG[0x73] 쪽지 삭제 요청 결과 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - BYTE Result; - WORD MemoIndex; - short Number; - char Name[MAX_IDSTRING]; -} FHP_FRIEND_MEMO_DEL_RESULT, *LPFHP_FRIEND_MEMO_DEL_RESULT; - -//---------------------------------------------------------------------------- -// GD[0x74] 친구 초대 요청 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - short Number; - char Name[MAX_IDSTRING]; - char FriendName[MAX_IDSTRING]; - WORD RoomNumber; - DWORD WindowGuid; -} FHP_FRIEND_INVITATION_REQ, *LPFHP_FRIEND_INVITATION_REQ; - -//---------------------------------------------------------------------------- -// DG[0x74] 친구 초대 요청 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - BYTE Result; - short Number; - char Name[MAX_IDSTRING]; - DWORD WindowGuid; -} FHP_FRIEND_INVITATION_RET, *LPFHP_FRIEND_INVITATION_RET; - - -#ifdef MAP_SERVER_WORK_20041030 // 서버 맵분할 관련 패킷 - 게임서버 <-> 인증서버 - -//---------------------------------------------------------------------------- -// GJ [0x7A] 인증서버에게 특정 사용자가 맵서버를 이동해야 함을 알림 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - INT iIndex; // 게임서버 사용자 인덱스 - CHAR szAccountID[MAX_IDSTRING + 1]; // 인증받을 ID - CHAR szCharName[MAX_IDSTRING + 1]; // 인증받을 케릭명 - WORD wCurMapSvrCode; // 현재의 맵서버 코드 (이전 서버코드가 될것임) - WORD wDstMapSvrCode; // 이동할 맵서버 코드 (목적 서버코드가 될것임) - WORD wMapNumber; // 이동할 맵번호 - BYTE btX; // 이동활 좌표 X - BYTE btY; // 이동활 좌표 Y -#ifdef MAP_SERVER_ADDINFO_20050509 -#ifdef PCBANG_ADVANTAGE // 한국전용 (FOR_KOREA) - BYTE bPcBangUser; // PC방 사용자인지 여부 -#endif -#endif -#ifdef MAP_SERVER_ADDINFO_ADULT_20050610 // 태국전용 (FOR_THAILAND) - BYTE bIsAdult; // 성인인지 여부 -#endif -#ifdef CHN_PLAYTIME_LIMIT_SYSTEM_20050818 - INT iAddPlayTime; // 중국 피로드 - 게임시간 (5시간 지나면 게임혜택 0%) -#endif -#ifdef VTM_PLAYTIME_LIMIT_SYSTEM_20060626 - INT iAddPlayTime; // 베트남 피로도 - 게임시간 (5시간 지나면 게임혜택 0%) -#endif -} PMSG_REQ_MAPSVRMOVE, *LPPMSG_REQ_MAPSVRMOVE; - - -//---------------------------------------------------------------------------- -// JG [0x7A] 인증서버가 특정 사용자의 맵서버 이동에 대한 결과를 알림 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - INT iIndex; // 게임서버 사용자 인덱스 - CHAR szAccountID[MAX_IDSTRING + 1]; // 인증받은 ID - CHAR szCharName[MAX_IDSTRING + 1]; // 인증받은 케릭명 - WORD wCurMapSvrCode; // 현재의 맵서버 코드 (이전 서버코드가 될것임) - WORD wDstMapSvrCode; // 이동할 맵서버 코드 (목적 서버코드가 될것임) - WORD wMapNumber; // 이동할 맵번호 - BYTE btX; // 이동활 좌표 X - BYTE btY; // 이동활 좌표 Y - INT iResult; // 이동요청 결과 (0:성공/1:계정틀림/2:게임서버인덱스없음/3:대상서버풀/4:이미이동요청중) - // 0 : 실패 - // 1 : 성공 - INT iJoinAuthCode1; // 인증 AUTH 코드 - 1 - INT iJoinAuthCode2; // 인증 AUTH 코드 - 2 - INT iJoinAuthCode3; // 인증 AUTH 코드 - 3 - INT iJoinAuthCode4; // 인증 AUTH 코드 - 4 -#ifdef MAP_SERVER_ADDINFO_20050509 -#ifdef PCBANG_ADVANTAGE - BYTE bPcBangUser; // PC방 사용자인지 여부 -#endif -#endif -#ifdef MAP_SERVER_ADDINFO_ADULT_20050610 // 태국전용 (FOR_THAILAND) - BYTE bIsAdult; // 성인인지 여부 -#endif -#ifdef CHN_PLAYTIME_LIMIT_SYSTEM_20050818 - INT iAddPlayTime; // 중국 피로드 - 게임시간 (5시간 지나면 게임혜택 0%) -#endif -#ifdef VTM_PLAYTIME_LIMIT_SYSTEM_20060626 - INT iAddPlayTime; // 베트남 피로도 - 게임시간 (5시간 지나면 게임혜택 0%) -#endif -} PMSG_ANS_MAPSVRMOVE, *LPPMSG_ANS_MAPSVRMOVE; - - -//---------------------------------------------------------------------------- -// GJ [0x7B] 인증서버에게 특정 사용자가 맵서버 이동 후 인증을 요청함을 알림 (0xC1) -> 인증서버는 해당 사용자의 게임서버 코드도 갱신 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - INT iIndex; // 게임서버 사용자 인덱스 - CHAR szAccountID[MAX_IDSTRING + 1]; // 인증받을 ID - CHAR szCharName[MAX_IDSTRING + 1]; // 인증받을 케릭명 - WORD wDstMapSvrCode; // 사용자가 이동한 게임서버 코드 (현재 접속한 게임서버에서 넣어줌) - INT iJoinAuthCode1; // 인증 AUTH 코드 - 1 - INT iJoinAuthCode2; // 인증 AUTH 코드 - 2 - INT iJoinAuthCode3; // 인증 AUTH 코드 - 3 - INT iJoinAuthCode4; // 인증 AUTH 코드 - 4 -} PMSG_REQ_MAPSVRAUTH, *LPPMSG_REQ_MAPSVRAUTH; - - -//---------------------------------------------------------------------------- -// JG [0x7B] 인증서버에게 특정 사용자가 맵서버 이동 후 인증요청에 대한 결과 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - INT iIndex; // 게임서버 사용자 인덱스 - CHAR szAccountID[MAX_IDSTRING + 1]; // 인증받을 ID (인증서버에서 다시 보냄) - CHAR szCharName[MAX_IDSTRING + 1]; // 인증받을 케릭명 (인증서버에서 다시 보냄) - WORD wPrevMapSvrCode; // 이전 게임서버 코드 - WORD wMapNumber; // 이동할 맵번호 - BYTE btX; // 이동활 좌표 X - BYTE btY; // 이동활 좌표 Y - INT iResult; // 이동요청 결과 (0:성공/1:계정틀림/2:인증코드틀림/3:서버코드틀림/4:서버이동중아님) - - // 아래는 기존의 인증결과 정보 들 - INT iUserNumber; - INT iDBNumber; -#ifdef UPDATE_USERPASSWORD_LENGTH_20090424 - CHAR cJoominNumber[13];//[MAX_JOOMINNUMBER_LENGTH]; // 주민번호 뒷자리 -#else - CHAR cJoominNumber[13]; // 주민번호 뒷자리 -#endif // UPDATE_USERPASSWORD_LENGTH_20090424 - - BYTE btBlockCode; // 블록코드는 별도로 받음 -#ifdef FOR_THAILAND - CHAR AuthAdult; // 성인 인증 코드 -#endif -#ifdef ADD_PROTOCOL_PCBANG_GUID - INT iPcBangGuid; -#endif -#ifdef MAP_SERVER_ADDINFO_20050509 -#ifdef PCBANG_ADVANTAGE - BYTE bPcBangUser; // PC방 사용자인지 여부 -#endif -#endif -#ifdef MAP_SERVER_ADDINFO_ADULT_20050610 // 태국전용 (FOR_THAILAND) - BYTE bIsAdult; // 성인인지 여부 -#endif -#ifdef CHN_PLAYTIME_LIMIT_SYSTEM_20050818 -#ifdef MODIFY_CHN_PLAYTIME_LIMIT_SYSTEM_01_20070509 - int iVerifiedType; // 중국 피로도 성인 인증 타입 ( 0 : 성인, 1 : 미성년자, 2 : 오류 ) -#endif // MODIFY_CHN_PLAYTIME_LIMIT_SYSTEM_01_20070509 - INT iAddPlayTime; // 중국 피로드 - 게임시간 (5시간 지나면 게임혜택 0%) -#endif -#ifdef VTM_PLAYTIME_LIMIT_SYSTEM_20060626 - INT iAddPlayTime; // 베트남 피로도 - 게임시간 (5시간 지나면 게임혜택 0%) -#endif -} PMSG_ANS_MAPSVRAUTH, *LPPMSG_ANS_MAPSVRAUTH; - -#ifdef ADD_HACKING_TOOL_BLOCK_20090311 -//---------------------------------------------------------------------------- -// GJ [0x8A] 인증서버에 해킹 프로그램의 사용 여부 확인의 브로드 캐스팅을 요청한다. (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - - char chHackToolFilename[64]; -} PMSG_HACKTOOL_USE_STATISTICS_REQ, *LPPMSG_HACKTOOL_USE_STATISTICS_REQ; - -//---------------------------------------------------------------------------- -// JG [0x8A] 전체 게임서버에 해킹 프로그램의 사용 여부 확인을 요청한다. (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - - char chHackToolFilename[64]; -} PMSG_HACKTOOL_USE_STATISTICS, *LPPMSG_HACKTOOL_USE_STATISTICS; - -//---------------------------------------------------------------------------- -// GJ [0x8B] 인증서버에 해킹 프로그램의 사용자의 맵이동 제한을 요청한다. (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - - BYTE btModifyType; // 설정 타입 ( 1 : 추가, 2 : 수정, 3 : 삭제 ) - DWORD dwReservationTime; // 블록 시작 시간 - DWORD dwBlockTerm; // 블록 기간 (단위 : 초) - WORD wBlockRate; // 블록 확률 - char chHackToolFilename[64]; -} PMSG_RESERVE_HACKTOOL_MAP_MOVE_REQ, *LPPMSG_RESERVE_HACKTOOL_MAP_MOVE_REQ; - -//---------------------------------------------------------------------------- -// GC [0x8B] 전체 게임서버에 해킹 프로그램의 사용자의 맵이동 제한을 요청한다. (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - - BYTE btModifyType; // 설정 타입 ( 1 : 추가, 2 : 수정, 3 : 삭제 ) - DWORD dwReservationTime; // 블록 시작 시간 - DWORD dwBlockTerm; // 블록 기간 (단위 : 초) - WORD wBlockRate; // 블록 확률 - char chHackToolFilename[64]; -} PMSG_RESERVE_HACKTOOL_MAP_MOVE, *LPPMSG_RESERVE_HACKTOOL_MAP_MOVE; - -//---------------------------------------------------------------------------- -// GJ [0x8C] 전체 게임서버에 해킹 프로그램의 통계를 인증서버로 전달한다. (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - - WORD wCurrentUserCount; - WORD wHackToolUserCount; - char chHackToolFilename[64]; -} PMSG_HACKTOOL_USE_STATISTICS_ANS, *LPPMSG_HACKTOOL_USE_STATISTICS_ANS; - -//---------------------------------------------------------------------------- -// GJ [0x8C] 전체 게임서버에 해킹 프로그램의 통계를 인증서버로 전달한다. (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - - char chMessage[256]; -}PMSG_HACKTOOL_USE_STATISTICS_TOTAL, *LPPMSG_HACKTOOL_USE_STATISTICS_TOTAL; -#endif // ADD_HACKING_TOOL_BLOCK_20090311 - -//---------------------------------------------------------------------------- -// JG [0x7C] 특정 게임서버의 현재 최대 사용자 수를 주기적으로 보냄 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - INT iSvrCode; // 사용자가 이동한 게임서버 코드 (게임서버에서 넣어줌) - INT iMaxUserCount; // 현재 서버의 최대 사용자 수 - INT iCurUserCount; // 현재 서버의 접속 사용자 수 -} PMSG_NOTIFY_MAXUSER, *LPPMSG_NOTIFY_MAXUSER; - -#endif - -#ifdef UPDATE_RESEND_GETCHARlIST_DISABLE_20090605 -//---------------------------------------------------------------------------- -// GJ [0x8F] 블럭시킬 아이피를 등록한다. (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - - char BlockIp[17]; -} PMSG_BLOCK_IP, *LPPMSG_BLOCK_IP; -#endif // UPDATE_RESEND_GETCHARlIST_DISABLE_20090605 - -//---------------------------------------------------------------------------- -// 채팅 서버와의 프로토콜 교환 -//---------------------------------------------------------------------------- - -//---------------------------------------------------------------------------- -// DG[0xA0] 채팅 서버에 방 개설을 요청한다. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - char Name[MAX_IDSTRING]; // 방 개설을 요청한 사람 - char FriendName[MAX_IDSTRING]; // 최초 대화 상대 - short UserNumber; - short ServerNumber; - short FriendNumber; - short FriendServerNumber; -} FHP_CHAT_ROOMCREATE, *LPFHP_CHAT_ROOMCREATE; - -//---------------------------------------------------------------------------- -// DG[0xA0] 채팅 서버에 방 개설을 요청 결과 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - BYTE Result; - WORD RoomNumber; - char Name[MAX_IDSTRING]; // 방 개설을 요청한 사람 - char FriendName[MAX_IDSTRING]; // 대화 상대 - short UserNumber; - short ServerNumber; - DWORD Ticket; - DWORD FriendTicket; - BYTE Type; -} FHP_CHAT_ROOMCREATE_RESULT, *LPFHP_CHAT_ROOMCREATE_RESULT; - -//---------------------------------------------------------------------------- -// DG[0xA1] 채팅 서버에 친구를 초대한다. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - WORD RoomNumber; - char Name[MAX_IDSTRING]; // 방 개설을 요청한 사람 - short UserNumber; - short ServerNumber; - BYTE Type; -} FHP_CHAT_JOINUSER_REQ, *LPFHP_CHAT_JOINUSER_REQ; - -//---------------------------------------------------------------------------- -// DG[0xA1] 채팅 서버에 친구를 초대한 결과 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - BYTE Result; - WORD RoomNumber; - char Name[MAX_IDSTRING]; // 방 개설을 요청한 사람 - short UserNumber; - short ServerNumber; - DWORD Ticket; - DWORD FriendTicket; -} FHP_CHAT_JOINUSER_RESULT, *LPFHP_CHAT_JOINUSER_RESULT; - -//---------------------------------------------------------------------------- -// CD[0xA2] 상대에게 말을 걸어 초대한다. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - WORD RoomNumber; - char Name[MAX_IDSTRING]; // 말을 건 사용자 - DWORD Ticket; - char Msg[100]; -} FHP_CHAT_ROOMINVITATION, *LPFHP_CHAT_ROOMINVITATION; - - -#endif -//##__FRIEND_WORK__ - - - -//---------------------------------------------------------------------------- -// 길드 & 연합 서버그룹(마야 등) 채팅 프로토콜 -// -// Lastest : 20050706 -// -//---------------------------------------------------------------------------- - -#ifdef ADD_SERVERGROUP_CHATTING_FOR_GUILD_UNION_01_20050706 - -//---------------------------------------------------------------------------- -// GEXD[0x50] 서버그룹 길드 채팅 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - INT iGuildNum; - char szCharacterName[MAX_IDSTRING]; - char szChattingMsg[MAX_CHAT]; - -} EXSDHP_SERVERGROUP_GUILD_CHATTING_SEND, *LPEXSDHP_SERVERGROUP_GUILD_CHATTING_SEND; - -typedef struct -{ - PBMSG_HEAD h; - INT iGuildNum; - char szCharacterName[MAX_IDSTRING]; - char szChattingMsg[MAX_CHAT]; - -} EXSDHP_SERVERGROUP_GUILD_CHATTING_RECV, *LPEXSDHP_SERVERGROUP_GUILD_CHATTING_RECV; - + int m_iRuleIndex; // + BOOL m_bClearStat; // + int m_iLevelAfterReset; // + int m_iLevelUpPoint; // + BOOL m_bReqSpecialItem; // + BOOL m_bBornPlace; // + int m_iResetNumber; // + BOOL m_bClearBuffState; // + BOOL m_bClearMagicList; // +}PMSG_REQ_SAVE_CHARACTER_RESET, *LPPMSG_REQ_SAVE_CHARACTER_RESET; -//---------------------------------------------------------------------------- -// GEXD[0x51] 서버그룹 연합 채팅 -//---------------------------------------------------------------------------- typedef struct { - PBMSG_HEAD h; - INT iUnionNum; - char szCharacterName[MAX_IDSTRING]; - char szChattingMsg[MAX_CHAT]; + PBMSG_HEAD h; // C1:17 + int iUserIndex; // 4 -} EXSDHP_SERVERGROUP_UNION_CHATTING_SEND, *LPEXSDHP_SERVERGROUP_UNION_CHATTING_SEND; + int m_iRuleIndex; // + BOOL m_bClearStat; // + int m_iLevelAfterReset; // + int m_iLevelUpPoint; // + BOOL m_bReqSpecialItem; // + BOOL m_bBornPlace; // + int m_iResetNumber; // + BOOL m_bClearBuffState; // + BOOL m_bClearMagicList; // +}PMSG_ANS_SAVE_CHARACTER_RESET, *LPPMSG_ANS_SAVE_CHARACTER_RESET; typedef struct { - PBMSG_HEAD h; - INT iUnionNum; - char szCharacterName[MAX_IDSTRING]; - char szChattingMsg[MAX_CHAT]; - -} EXSDHP_SERVERGROUP_UNION_CHATTING_RECV, *LPEXSDHP_SERVERGROUP_UNION_CHATTING_RECV; - -#endif - - - - -//---------------------------------------------------------------------------- -// 새로운 길드 시스템 프로토콜 -// -// Lastest : 20040913, 20040922, 20041006 -// -//---------------------------------------------------------------------------- - -#ifdef ADD_NEW_GUILD_01_20040913 + PBMSG_HEAD h; // C1:17 + char chAccountID[MAX_IDSTRING + 1]; + int iUserIndex; + BYTE AccountType; + INT64 EndTime; +}PMSG_REQ_VIP, *LPPMSG_REQ_VIP; -//---------------------------------------------------------------------------- -// GEXD[0xE1] 직책을 임명 / 변경 / 해제 요청 -//---------------------------------------------------------------------------- typedef struct { - PBMSG_HEAD h; - WORD wUserIndex; // 임명하는 유저(길마, 부길마) 인덱스 - BYTE btType; // 임명(0x01) / 변경(0x02) / 해제(0x03) - - BYTE btGuildStatus; // 임명하는 직책. - char szGuildName[MAX_GUILDNAMESTRING + 1]; // 길드 이름. - char szTargetName[MAX_IDSTRING + 1]; // 대상 유저 이름. - -} EXSDHP_GUILD_ASSIGN_STATUS_REQ, *LPEXSDHP_GUILD_ASSIGN_STATUS_REQ; - + PBMSG_HEAD h; // C1:17 + int iUserIndex; + BYTE AccountType; + INT64 EndTime; +}PMSG_ANS_VIP, *LPPMSG_ANS_VIP; //---------------------------------------------------------------------------- -// EXDG[0xE1] 직책을 임명 / 변경 / 해제 결과 +// [0x60] 옵션 키 값을 받는다. //---------------------------------------------------------------------------- typedef struct { PBMSG_HEAD h; - BYTE btFlag; // 요청서버인지 판단. - WORD wUserIndex; // 임명하는 유저(길마, 부길마) 인덱스 - BYTE btType; // 임명(0x01) / 변경(0x02) / 해제(0x03) - BYTE btResult; // 결과 + int aIndex; + char Name[MAX_IDSTRING]; +#ifdef UPDATE_SKILLKEY_EXPAND_20080804 + BYTE SkillKeyBuffer[20]; +#else // UPDATE_SKILLKEY_EXPAND_20080804 + BYTE SkillKeyBuffer[10]; +#endif // UPDATE_SKILLKEY_EXPAND_20080804 + BYTE GameOption; + BYTE QkeyDefine; + BYTE WkeyDefine; + BYTE EkeyDefine; - BYTE btGuildStatus; // 임명된 직책. - char szGuildName[MAX_GUILDNAMESTRING + 1]; // 길드 이름. - char szTargetName[MAX_IDSTRING + 1]; // 대상 유저 이름. + BYTE ChatWindow; -} EXSDHP_GUILD_ASSIGN_STATUS_RESULT, *LPEXSDHP_GUILD_ASSIGN_STATUS_RESULT; +#ifdef ADD_SEASON_3_NEW_UI_20071122 + BYTE RkeyDefine; +#endif +#ifdef UPDATE_OPTIONKEY_LEVEL_20080116 + int QWERLevel; // 클라이언트는 BYTE QWERLevel[4] 사용 #endif -// ## ADD_NEW_GUILD_01_20040913 - + BYTE EnableTransfromMode; + short PlayGuideLv; + BYTE PlayGuideCheck; +} SDHP_SKILLKEYDATA_SEND, *LPSDHP_SKILLKEYDATA_SEND; -#ifdef ADD_NEW_GUILD_02_20040922 //---------------------------------------------------------------------------- -// GEXD[0xE2] 길드 타입을 설정하는 요청 +// [0x60] 이벤트 시작을 알린다. //---------------------------------------------------------------------------- typedef struct { PBMSG_HEAD h; - WORD wUserIndex; // 길드타입을 설정하는 유저 인덱스 - BYTE btGuildType; // 설정할 길드타입 일반길드(0x01) / 용병길드(0x02) / 클랜(0x03) - - char szGuildName[MAX_GUILDNAMESTRING + 1]; // 길드 이름. - -} EXSDHP_GUILD_ASSIGN_TYPE_REQ, *LPEXSDHP_GUILD_ASSIGN_TYPE_REQ; + BYTE Event; +} SDHP_EVENTSTART, *LPSDHP_EVENTSTART; //---------------------------------------------------------------------------- -// EXDG[0xE2] 길드 타입을 설정하는 요청 +// [0x61] 인증서버에서 이벤트 시작 또는 종료를 알린다 //---------------------------------------------------------------------------- typedef struct { PBMSG_HEAD h; - BYTE btFlag; // 요청서버인지 판단. - WORD wUserIndex; // 임명하는 유저(길마, 부길마) 인덱스 - BYTE btGuildType; // 설정할 길드타입 일반길드(0x01) / 용병길드(0x02) / 클랜(0x03) - BYTE btResult; // 결과 - - char szGuildName[MAX_GUILDNAMESTRING + 1]; // 길드 이름. - -} EXSDHP_GUILD_ASSIGN_TYPE_RESULT, *LPEXSDHP_GUILD_ASSIGN_TYPE_RESULT; - -#endif + BYTE Event; // 이벤트 번호 + BYTE Stat; // 상태 0 : 종료 1 : 시작 +} SDHP_EVENTCONTROL, *LPSDHP_EVENTCONTROL; -#ifdef ADD_NEW_UNION_01_20041006 -typedef struct {}__UNION_SPROTOCOL_H___; //---------------------------------------------------------------------------- -// GEXD[0xE5] Union, Rival 관계 맺기 +// [0x62] 인증서버에서 Reload 설정을 알린다 //---------------------------------------------------------------------------- typedef struct { PBMSG_HEAD h; - WORD wRequestUserIndex; - WORD wTargetUserIndex; - - BYTE btRelationShipType; - - INT iRequestGuildNum; - INT iTargetGuildNum; - -} EXSDHP_RELATIONSHIP_JOIN_REQ, *LPEXSDHP_RELATIONSHIP_JOIN_REQ; + BYTE Option; // 옵션 번호 +} SDHP_OPTIONCONTROL, *LPSDHP_OPTIONCONTROL; -//---------------------------------------------------------------------------- -// EXDG[0xE5] Union, Rival 관계 맺기 결과 -//---------------------------------------------------------------------------- +// 0x30 typedef struct { PBMSG_HEAD h; - BYTE btFlag; // 요청서버인지 판단. - WORD wRequestUserIndex; - WORD wTargetUserIndex; - - BYTE btResult; // 결과 - - BYTE btRelationShipType; - - INT iRequestGuildNum; - INT iTargetGuildNum; - - CHAR szRequestGuildName[MAX_GUILDNAMESTRING + 1]; - CHAR szTargetGuildName[MAX_GUILDNAMESTRING + 1]; - -} EXSDHP_RELATIONSHIP_JOIN_RESULT, *LPEXSDHP_RELATIONSHIP_JOIN_RESULT; + char Account[MAX_IDSTRING]; + char Name[MAX_IDSTRING]; +} SDHP_LOVEHEARTEVENT, *LPSDHP_LOVEHEARTEVENT; -//---------------------------------------------------------------------------- -// GEXD[0xE6] Union, Rival 관계 끊기 -//---------------------------------------------------------------------------- +// 0x30 typedef struct { PBMSG_HEAD h; - WORD wRequestUserIndex; - WORD wTargetUserIndex; // 임명하는 유저(길마, 부길마) 인덱스 - - BYTE btRelationShipType; + BYTE Result; - INT iRequestGuildNum; - INT iTargetGuildNum; + char Name[MAX_IDSTRING]; + int Number; -} EXSDHP_RELATIONSHIP_BREAKOFF_REQ, *LPEXSDHP_RELATIONSHIP_BREAKOFF_REQ; +} SDHP_LOVEHEARTEVENT_RESULT, *LPSDHP_LOVEHEARTEVENT_RESULT; -//---------------------------------------------------------------------------- -// EXDG[0xE6] Union, Rival 관계 끊기 결과 -//---------------------------------------------------------------------------- +// 0x40 전체 공지 typedef struct { PBMSG_HEAD h; - BYTE btFlag; // 요청서버인지 판단. - - WORD wRequestUserIndex; - WORD wTargetUserIndex; - - BYTE btResult; // 결과 - - BYTE btRelationShipType; - - INT iRequestGuildNum; - INT iTargetGuildNum; - -} EXSDHP_RELATIONSHIP_BREAKOFF_RESULT, *LPEXSDHP_RELATIONSHIP_BREAKOFF_RESULT; - - -//---------------------------------------------------------------------------- -// ★ EXDG[0xE7] 특정 Union 의 RelationShip 리스트 전송 ( BroadCastring 됨 ) -//---------------------------------------------------------------------------- + char Notice[61]; +} SDHP_NOTICE, *LPSDHP_NOTICE; -// 모든 길드는 유니온이다. -// '공식적인 유니온'은 '유니온 2개 이상의 결합 유니온' 이다. -// -> 공식유니온 = 유니온 + 유니온 + 유니온 + ... +// 0x41 유저 공지 typedef struct { - PWMSG_HEAD h; - - BYTE btFlag; // 요청서버인지 판단. - - BYTE btRelationShipType; - BYTE btRelationShipMemberCount; - -#ifdef ADD_UNION_GET_UNIONMARK_01_20041222 - BYTE pUnionMasterGuildMark[MAX_GUILDMARKSIZE]; -#endif + PBMSG_HEAD h; + char szId[10]; + char Notice[61]; +} SDHP_USER_NOTICE, *LPSDHP_USER_NOTICE; - CHAR szUnionMasterGuildName[MAX_GUILDNAMESTRING + 1]; - INT iUnionMasterGuildNumber; - INT iRelationShipMember[MAX_RELATIONSHIP_COUNT]; -} EXSDHP_UNION_RELATIONSHIP_LIST, *LPEXSDHP_UNION_RELATIONSHIP_LIST; -//---------------------------------------------------------------------------- -// ★ EXDG[0xE8] 길드의 RelationShip 변경을 Notification 한다. ( BroadCastring 됨 ) -//---------------------------------------------------------------------------- +// 0x42 게임 블럭 typedef struct { - PWMSG_HEAD h; - - BYTE btFlag; // 요청서버인지 판단. - BYTE btUpdateFlag; // 갱신된 목록에 대한 상세 정보 - - // [0x10] 유니온 해체 됐다. - - - BYTE btGuildListCount; // Guild 카운트. - INT iGuildList[MAX_RELATIONSHIP_COUNT]; // Update 될 길드 리스트. - -} EXSDHP_NOTIFICATION_RELATIONSHIP, *LPEXSDHP_NOTIFICATION_RELATIONSHIP; + PBMSG_HEAD h; + int ClientIndex; + char AccountID[MAX_IDSTRING]; + BYTE ServerNum; + char CharName[MAX_IDSTRING]; + BYTE Type; +} SDHP_GAME_BLOCK, *LPSDHP_GAME_BLOCK; -//---------------------------------------------------------------------------- -// ★ EXDG[0xE9] 연합 리스트를 보내준다. ( P2P 됨 ) -//---------------------------------------------------------------------------- +// 0x42 게임 블럭 결과 typedef struct { PBMSG_HEAD h; + BYTE Result; +} SDHP_GAME_BLOCK_RESULT, *LPSDHP_GAME_BLOCK_RESULT; - WORD wRequestUserIndex; - INT iUnionMasterGuildNumber; - -} EXSDHP_UNION_LIST_REQ, *LPEXSDHP_UNION_LIST_REQ; +// 0xCF 캐릭터 이동 typedef struct { - PWMSG_HEAD h; - BYTE btCount; - BYTE btResult; - - WORD wRequestUserIndex; - INT iTimeStamp; // 캐싱을 위한 최근 갱신 시간을 보내준다. - - BYTE btRivalMemberNum; - BYTE btUnionMemberNum; - -} EXSDHP_UNION_LIST_COUNT, *LPEXSDHP_UNION_LIST_COUNT; + PBMSG_HEAD h; + char Account[MAX_IDSTRING]; + short Number; +} SDHP_CHARACTER_TRANSFER, *LPSDHP_CHARACTER_TRANSFER; typedef struct { - BYTE btMemberNum; - BYTE Mark[MAX_GUILDMARKSIZE]; - char szGuildName[MAX_GUILDNAMESTRING]; - -} EXSDHP_UNION_LIST, *LPEXSDHP_UNION_LIST; - - -#endif - -#ifdef ADD_ABILITY_OF_UNIONMASTER_TO_KICK_OUT_UNIONMEMBER_01_20050418 + PBMSG_HEAD h; + char Account[MAX_IDSTRING]; + short Number; + BYTE Result; +} SDHP_CHARACTER_TRANSFER_RESULT, *LPSDHP_CHARACTER_TRANSFER_RESULT; +#ifdef UPDATE_CHANGE_CHARACTERNAME_20080410 // 캐릭명 변경 프로토콜 //---------------------------------------------------------------------------- -// GEXD[0xEB][0x01] Union Member 강제 탈퇴 요청 +// GD[0x16] 캐릭터 변경을 요청. //---------------------------------------------------------------------------- typedef struct { - PBMSG_HEAD2 h; - - WORD wRequestUserIndex; - - BYTE btRelationShipType; - - char szUnionMasterGuildName[MAX_GUILDNAMESTRING]; - char szUnionMemberGuildName[MAX_GUILDNAMESTRING]; - -} EXSDHP_KICKOUT_UNIONMEMBER_REQ, *LPEXSDHP_KICKOUT_UNIONMEMBER_REQ; + PBMSG_HEAD h; + int aIndex; + char AccountId[MAX_IDSTRING]; + char OldName[MAX_IDSTRING]; + char NewName[MAX_IDSTRING]; +} SDHP_CHANGE_NAME, *LPSDHP_CHANGE_NAME; //---------------------------------------------------------------------------- -// EXDG[0xEB][0x01] Union Member 강제 탈퇴 결과 +// DG[0x16] 캐릭터 변경을 요청 결과. //---------------------------------------------------------------------------- typedef struct { - PBMSG_HEAD2 h; - BYTE btFlag; // 요청서버인지 판단. - - WORD wRequestUserIndex; - BYTE btRelationShipType; - - BYTE btResult; // 결과 - - char szUnionMasterGuildName[MAX_GUILDNAMESTRING + 1]; - char szUnionMemberGuildName[MAX_GUILDNAMESTRING + 1]; - -} EXSDHP_KICKOUT_UNIONMEMBER_RESULT, *LPEXSDHP_KICKOUT_UNIONMEMBER_RESULT; - -#endif - + PBMSG_HEAD h; + int aIndex; + char AccountId[MAX_IDSTRING]; + char OldName[MAX_IDSTRING]; + char NewName[MAX_IDSTRING]; + BYTE btResult; // 0: 성공, 1: 동일 캐릭터명 존재 +} SDHP_CHANGE_NAME_RESULT, *LPSDHP_CHANGE_NAME_RESULT; +#endif // UPDATE_CHANGE_CHARACTERNAME_20080410 -#ifdef ADD_MANAGER_SENDMAIL -//---------------------------------------------------------------------------- -// CG [0x63] 인증서버 -> 게임서버 쪽지 보내기 -//---------------------------------------------------------------------------- -typedef struct -{ - PWMSG_HEAD h; - char Name[MAX_IDSTRING]; - char TargetName[MAX_IDSTRING]; - char Subject[MAX_MEMO_SUBJECT]; - short MemoSize; - char Memo[MAX_MEMO]; -} PMSG_JG_MEMO_SEND, *LPPMSG_JG_MEMO_SEND; -#endif #ifdef MU_CASTLESIEGE_DS_PROTOCOL_20041105 // 공성전 관련 추가된 프로토콜 (GS <-> DS) @@ -3990,48 +2901,51 @@ struct _tagSDHP_REQ_EVENT_MONSTER_KILL_INFO_SAVE __int64 DamageScore; }; -/* 706 */ -struct _ST_BLOCK_CHATTING_USER +typedef struct _ST_BLOCK_CHATTING_USER { + _ST_BLOCK_CHATTING_USER() + { + bIsUsed = false; + btSlotNum = 0; + memset(szCharName, 0, sizeof(szCharName)); + } + bool bIsUsed; - char btSlotNum; - char szCharName[11]; + BYTE btSlotNum; + char szCharName[MAX_IDSTRING + 1]; }; -/* 707 */ -struct SDHP_ANS_BLOCK_CHAT_USER_INFO +typedef struct SDHP_REQ_BLOCK_CHAT_USER_INFO { - PWMSG_HEAD2 h; + PBMSG_HEAD h; // C1:6E:00 GS->DS + int iUserIndex; + char szCharName[MAX_IDSTRING + 1]; +} *LPSDHP_REQ_BLOCK_CHAT_USER_INFO; + +typedef struct SDHP_ANS_BLOCK_CHAT_USER_INFO +{ + PWMSG_HEAD2 h; // C2:6E:00 DS->GS int nUserIndex; - char szCharName[11]; - char btUserCnt; + char szCharName[MAX_IDSTRING + 1]; + BYTE btUserCnt; _ST_BLOCK_CHATTING_USER BlockCharList[20]; -}; +} *LPSDHP_ANS_BLOCK_CHAT_USER_INFO; -/* 708 */ -struct SDHP_REQ_ADD_BLOCK_CHAT_USER_INFO +typedef struct SDHP_REQ_ADD_BLOCK_CHAT_USER_INFO { - PBMSG_HEAD2 h; + PBMSG_HEAD2 h; // C1:6E:01 GS->DS int nUserIndex; - char szCharName[11]; + char szCharName[MAX_IDSTRING + 1]; _ST_BLOCK_CHATTING_USER szBlockChar; -}; +} *LPSDHP_REQ_ADD_BLOCK_CHAT_USER_INFO; -/* 709 */ -struct SDHP_REQ_DEL_BLOCK_CHAT_USER_INFO +typedef struct SDHP_REQ_DEL_BLOCK_CHAT_USER_INFO { - PBMSG_HEAD2 h; + PBMSG_HEAD2 h; // C1:6E:02 GS->DS int nUserIndex; - char szCharName[11]; + char szCharName[MAX_IDSTRING + 1]; _ST_BLOCK_CHATTING_USER szBlockChar; -}; -/* 1127 */ -struct SDHP_REQ_BLOCK_CHAT_USER_INFO -{ - PBMSG_HEAD h; - int iUserIndex; - char szCharName[11]; -}; +} *LPSDHP_REQ_DEL_BLOCK_CHAT_USER_INFO; struct _SDHP_REQ_RESTORE_ITEM_LIST_SAVE { @@ -5128,7 +4042,7 @@ struct _tagPMSG_REQ_JEWEL_UPGRADE_INFO_INSERT_DS struct SDHP_REQ_SAVE_ITL_GUILDPOINT { PBMSG_HEAD2 h; - char GuildName[9]; + char GuildName[MAX_GUILDNAMESTRING + 1]; int nType; char byWin; char byLose; @@ -5140,7 +4054,7 @@ struct SDHP_REQ_SAVE_ITL_GUILDPOINT struct SDHP_REQ_SAVE_ITL_GUILDCOUNT { PBMSG_HEAD2 h; - char GuildName[9]; + char GuildName[MAX_GUILDNAMESTRING + 1]; char byCount; }; @@ -5149,7 +4063,7 @@ struct SDHP_REQ_SAVE_ITL_USERPOINT { PBMSG_HEAD2 h; char UserName[11]; - char GName[9]; + char GName[MAX_GUILDNAMESTRING + 1]; int nOccupiedCount; int nKillP; int nInvalidationCount; @@ -5162,7 +4076,7 @@ struct SDHP_REQ_SAVE_ITL_USERPOINT struct _tagPMSG_REQ_ITL_GUILDCOUNTREQ { PBMSG_HEAD2 h; - char GuildName[9]; + char GuildName[MAX_GUILDNAMESTRING + 1]; int nUserIndex; unsigned __int16 wMapSverNum; }; @@ -5241,7 +4155,7 @@ struct _tagPMSG_ANS_ITL_REWARDLIST struct _tagPMSG_REQ_ITL_USERCOUNTREQ { PBMSG_HEAD2 h; - char UserName[9]; + char UserName[MAX_GUILDNAMESTRING + 1]; int nUserIndex; }; @@ -5373,12 +4287,12 @@ struct _tagSDHP_REQ_GREMORY_CASE_SELECT /* 816 */ struct _stCancelGuildNames { - char szGuildNames[9]; + char szGuildNames[MAX_GUILDNAMESTRING + 1]; }; /* 814 */ struct _stABWinGuildInfoDS { - char szGuildName[9]; + char szGuildName[MAX_GUILDNAMESTRING + 1]; DWORD dwGuild; WORD wOccupyObelisk; WORD wObeliskGroup; @@ -5397,7 +4311,7 @@ struct _tagPMSG_REQ_ARCA_BATTLE_GUILD_JOIN_DS { PBMSG_HEAD2 h; char szGuildMaster[11]; - char szGuildName[9]; + char szGuildName[MAX_GUILDNAMESTRING + 1]; unsigned int dwGuild; unsigned __int16 wNumber; }; @@ -5415,7 +4329,7 @@ struct _tagPMSG_REQ_ARCA_BATTLE_GUILD_MEMBER_JOIN_DS { PBMSG_HEAD2 h; char szCharName[11]; - char szGuildName[9]; + char szGuildName[MAX_GUILDNAMESTRING + 1]; unsigned int dwGuild; unsigned __int16 wNumber; }; @@ -5524,7 +4438,7 @@ struct _tagPMSG_REQ_AB_JOIN_MEMBER_UNDER_DS struct _stGuildUnderMember { char btGuildMemberCnt; - char szGuildNames[9]; + char szGuildNames[MAX_GUILDNAMESTRING + 1]; }; /* 985 */ @@ -5579,7 +4493,7 @@ struct _tagPMSG_REQ_REMOVE_GUILD_BUFF_DS { PBMSG_HEAD2 h; unsigned __int16 wMapSvrNum; - char szGuildName[9]; + char szGuildName[MAX_GUILDNAMESTRING + 1]; }; /* 1024 */ @@ -5831,7 +4745,7 @@ struct PMSG_REQ_SAVE_DSF_USERPOINT { PBMSG_HEAD2 h; char UserName[11]; - char GName[9]; + char GName[MAX_GUILDNAMESTRING + 1]; int nPoint; int Type; int nEnterCount; @@ -5957,7 +4871,7 @@ struct _stDSFRewardList { char byRank; char szCharName[11]; - char szGuildName[9]; + char szGuildName[MAX_GUILDNAMESTRING + 1]; char byEnterCount; char byPoint; char byGotReward; @@ -6165,36 +5079,36 @@ struct _stDSFGoFinalPartyInfo char btEnterDay; }; -/* 817 */ -struct _stArcaBattleMarkTopRank +typedef struct _stArcaBattleMarkTopRank { - _stArcaBattleMarkTopRank::_stArcaBattleMarkTopRank() + _stArcaBattleMarkTopRank() { - this->btRank = 0; - this->dwMarkCnt = 0; - memset(this->szGuildNames, 0, 9u); + btRank = 0; + dwMarkCnt = 0; + memset(szGuildNames, 0, sizeof(szGuildNames)); } - char btRank; - char szGuildNames[9]; + + BYTE btRank; + char szGuildNames[MAX_GUILDNAMESTRING + 1]; BYTE dwMarkCnt; }; -/* 818 */ -struct _stABAllGuildMark +typedef struct _stABAllGuildMark { _stABAllGuildMark() { - this->dwMarkCnt = 0; - memset(this->szGuildName, 0, 9); + dwMarkCnt = 0; + memset(szGuildName, 0, sizeof(szGuildName)); } - char szGuildName[9]; + + char szGuildName[MAX_GUILDNAMESTRING + 1]; DWORD dwMarkCnt; }; /* 819 */ struct _stABJoinUserInfoDS { - char szGuildName[9]; + char szGuildName[MAX_GUILDNAMESTRING + 1]; unsigned int dwGuild; char szUserName[11]; }; @@ -6204,7 +5118,7 @@ struct _stABJoinUserInfoDS struct _tagPMSG_ANS_REMOVE_GUILD_BUFF_DS { PBMSG_HEAD2 h; - char szGuildName[9]; + char szGuildName[MAX_GUILDNAMESTRING + 1]; }; /* 1006 */ @@ -6229,7 +5143,7 @@ struct _tagPMSG_REQ_ARCA_BATTLE_MARK_REG_DS PBMSG_HEAD2 h; unsigned __int16 wNumber; char szGuildMaster[11]; - char szGuildName[9]; + char szGuildName[MAX_GUILDNAMESTRING + 1]; unsigned int dwMarkCnt; unsigned int dwGuildNum; }; @@ -6261,13 +5175,12 @@ struct _tagPMSG_REQ_ARCA_BATTLE_IS_TOP_RANK unsigned int dwGuildNum; }; -/* 1011 */ -struct _tagPMSG_REQ_AB_MARK_REG_UPDATE_DS +typedef struct _tagPMSG_REQ_AB_MARK_REG_UPDATE_DS { - PBMSG_HEAD2 h; - unsigned int dwGuildNum; - unsigned int dwMarkCnt; -}; + PBMSG_HEAD2 h; // C1:F8:57 GS->DS + DWORD dwGuildNum; + DWORD dwMarkCnt; +} *LPPMSG_REQ_AB_MARK_REG_UPDATE_DS; /* 997 */ struct _tagPMSG_ANS_AE_PLAY_DS @@ -6330,7 +5243,7 @@ struct _stITLRewardList { char byRank; char szCharName[11]; - char szGuildName[9]; + char szGuildName[MAX_GUILDNAMESTRING + 1]; char byEnterCount; char byPoint; char byGotReward; @@ -6339,7 +5252,7 @@ struct _stITLRewardList /* 834 */ struct _stITLRankingInfo { - char szGuildName[9]; + char szGuildName[MAX_GUILDNAMESTRING + 1]; char byRank; char byITLType; char byWin; diff --git a/DataServer/include/define.h b/DataServer/include/define.h index 941951c..e88c00e 100644 --- a/DataServer/include/define.h +++ b/DataServer/include/define.h @@ -1,11 +1,7 @@ -//---------------------------------------------------------------------------- -// MU 서버프로젝트 전반에 걸쳐 정의되어 사용되어지는 것들.. -//---------------------------------------------------------------------------- -#ifndef __DEFINE_H__ +#ifndef __DEFINE_H__ #define __DEFINE_H__ -#include "..\\Include\\Public.h" -//---------------------------------------------------------------------------- +#include "..\include\public.h" enum DB_CLASS_TYPE { @@ -26,4939 +22,53 @@ enum AMS AM_ACTIVE = 0x1, }; +#define LOG_PRINT 1 +//#define DEBUG_IOCP_LOG -//---------------------------------------------------------------------------- -// 컴파일시에 사용되는 것 -//#define _DEBUG_PROTOCOL // 프로토콜을 디버그 시에 사용 -#define LOG_PRINT 1 // 로그를 출력할것인가? -#define SPEEDHACK_CHECK 1 // 스피드핵을 체크할것인가? +#define ST_JOINSERVER 0 +#define ST_GAMESERVER 1 -#define TESTSERVER 0 // Service:0 테스트 서버인가.. -#define LOCALCONNECT 0 // Service:0 사내에서만 접속 가능하게.. -#define DATANOSAVE 0 // Service:0 데이터가 저장되지 않게 한다. +#define DEFMAPSERVERPORT 55900 +#define DEFJOINSERVERPORT 55970 +#define DEFDATASERVERPORT 55960 +#define DEFEXDBSERVERPORT 55906 -#define DBGUILDLOAD 1 // Service:1, DB서버에 접속해서 길드 정보를 가지고 오는가.. +#define MAX_CHAT 60 +#define MAX_GUILDNOTICE 60 +#define MAX_IDSTRING 10 -/*enum GAME_VERSION_ENUM -{ -G_V_97D, -G_V_99B, -G_V_S1, -G_V_S2, -G_V_S2_2, -G_V_S3_E1, -G_V_S3_E2, -G_V_S4_5, -G_V_S4_6, //S4.5.1 -};*/ - -#define G_V_97D 0 -#define G_V_97_99 1 -#define G_V_99B 2 -#define G_V_S1 3 -#define G_V_S1_512 4 -#define G_V_S2 5 -#define G_V_S2_2 6 -#define G_V_S3_E1 7 -#define G_V_S3_E2 8 -#define G_V_S4_5 9 -#define G_V_S4_6 10 -#define CHARACTERDB_SERVER -#define GAME_VERSION G_V_S4_6 - -//#define ADD_ANTI_HACK_01_20051027 //SpeedHack FIX! - BAD - -#if GAME_VERSION >= G_V_S4_6 -//#define KOREAN_S4_6 -//#define GLOBAL_S4_6 -#define JAPAN_S4_6 -#endif - -#if GAME_VERSION >= G_V_99B -#define EVENT_STONE -#define EVENT_RENA_20040909 -#define EVENT_LOTTO -#define USER_ENTER_BLOODCASTLE7_WITH6_20040330 -#define EVENT_FRIENDSHIP_20040204 -#define EVENT_STONE_OF_FRIENDSHIP_20040206 -#define MODIFY_INVEN_CLEAR_MACRO_20071212 -#endif - - - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -//#endif -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - -//#ifdef USA -#if GAME_VERSION >= G_V_S4_6 -// 미국 버전 테스트를 위한 데이터로딩 검사. -// #define TEST_LOADING_STEP_20060211 - -// 1) 유저 인증 시 레벨 캡(현재 60 레벨) 적용을 위한 작업 -// 2) 인증 서버에 존재하는 계정, 캐릭터, 레벨 정보 테이블의 무결성을 위한 작업 -// 3) 캐릭터 삭제 시 인증서버에 알려 해당 테이블에서 삭제해준다. (apple) - -// [업데이트] 캐릭터 리스트 중복요청금지(goni) -#define UPDATE_RESEND_GETCHARlIST_DISABLE_20090605 - -// [버그수정] 중국 접속 공격 차단 -#define MODIFY_CONNNECT_HACK_ATTACK_20090409 -#ifdef MODIFY_CONNNECT_HACK_ATTACK_20090409 -#define TEMPLOG_PRINT 0 // 1 이면 로그 파일을 따로 생성,출력 한다. -#endif - -#define NOTIFY_CHARACTER_DELETE_FROM_GS_TO_JS_20060322 - -// MuLog 기록 값 변경 -#define LOGINSERVER_MULOG - -// 패스워드 길이 20바이트로 증가 -#define PW_KUZIMO -#ifdef GLOBAL_S4_6 -#define UPDATE_USERPASSWORD_LENGTH_20090424 -#endif - -// [업데이트] 통합빌링 추가(goni) -#define UPDATE_UNIFICATIONBILL_20090203 - -//#define MODIFY_HACKLOG_OF_ATTACK_20050714 // 공격 핵 로그 수정 (b4nfter) -//#define MODIFY_HACKLOG_OF_ATTACK_20050518 // 공격 핵 로그 수정 (u4us) -//#define CHECK_ATTACK_AREA - -// [업데이트] 화이트엔젤 아이템 지급 이벤트 (RKFKA) -#define WHITEANGEL_GET_ITEM_EVENT_20060822 - -#endif - -#if defined ( FOR_KOREA ) || defined ( EVENT_FRIENDSHIP_20040204 ) || defined ( EVENT_LOTTO ) -#define ADD_ITEM_OF_FRIENDSHIP_EVENT_20040729 -#endif - -/////////////////////////////////////////////////////////////////////////////// -// 이벤트 관련 설정 코드 -// -// 주의: 두개 이상의 이벤트 실행시 버그 발생 확인 요망 -/////////////////////////////////////////////////////////////////////////////// - -// EVENT_SERVER_OPEN_COMMEMORATION_20050510 // 서버 오픈 기념 이벤트 (u4us) -// EVENT_RENA_20040909 // 레나 이벤트 (u4us) -// EVENT_LOTTO // 복권 이벤트 (u4us) - -// EVENT_STONE_OF_FRIENDSHIP_20040206 -// EVENT_RENA_FOR_CASTLE_SIEGE_20041116 -// EVENT_FRIENDSHIP_20040204 - - -/////////////////////////////////////////////////////////////////////////////// - -#if GAME_VERSION >= G_V_99B -#define DELETE_DARKLORD_PET_SERIAL_ZERO_20050617 // 일본 버그패치 -#define DARKLORD_PET_INFO_FORCE_TO_SET_20050531 // 상점에서 다크로드 펫을 살 경우 기본정보를 강제로 세팅 -#endif - -#define APPLY_TESTSERVER // 테스트 서버에만 적용중 또는 적용 예정 중인것들 - -// 테스트 서버에 적용되는 것들은 여기에 추가!!!!! -#ifdef APPLY_TESTSERVER - -#if TESTSERVER == 1 -// [업데이트] 3차 전직을 하여 마스터 레벨인 경우만 MasterLevelSystem 정보를 로딩하고 저장하도록 수정 2008-12-12 by riverstyx -// 현재 마스터레벨이 아닌유저도 MasterLevelSystem에 정보를 저장하고 로딩하는 불필요한 로직을 사용함 -//#define MODIFY_3RDCHANGEUP_MASTERLEVEL -#endif - -#ifndef FOR_KOREA - -// EventItembag 번호 겹치는 문제(pelero) -#define MODIFY_FIRECRACKER_EVENTITEMBAG_NUMBER_CHANGE_20090930 - -// 해외 부분유료화 7차 업데이트 (pelero) -#define ADD_PARTIALY_CHARGE_SYSTEM_07_20090915 -#ifdef ADD_PARTIALY_CHARGE_SYSTEM_07_20090915 -// 엘리트 SD 회복 물약 추가(pelero) -#define ADD_ELITE_SD_POTION_20090918 -// 파티시 경험치 증가 스크롤 추가(pelero) -#define ADD_PARTY_EXP_INCREASE_SCROLL_20090916 -// 오라 아이템 추가(pelero) -#define ADD_AURA_CASH_ITEM_20090915 -// 유니콘 펫 추가(pelero) -#define ADD_UNICORN_PET_20090915 -// 치명 마법 반지 추가(pelero) -#define ADD_CRITICAL_WIZARD_RING_20090915 -#endif // ADD_PARTIALY_CHARGE_SYSTEM_07_20090915 - -// 크리스가 창고에 안 들어가는 버그(pelero) -#define MODIFY_KRIS_MOVE_WAREHOUSE_BUGFIX_20090904 - -// 캐쉬 아이템중 공격력, 방어력, 마나, 생명을 증가시켜주는 아이템 사용시 -// 아이템 이펙트와 버프이펙트 중복 적용되는 버그 (musang33) -#define MODIFY_CASHITEM_EFFECT_REITERATION_APPLY_20090903 - -// 갬블링시에 엑설런트 장비에도 행운 옵션이 붙을 수 있도록 변경(pelero) -#define MODIFY_GAMBLING_ATTACH_LUCK_OPTION_20090901 - -// 환영 사원 종료 후 맵 이동시 아이템 삭제 버그(pelero) -#define MODIFY_ILLUSIONTEMPLE_MOVEGATE_ITEM_DELETE_BUGFIX_20090826 - -// 결투장에서 다크스피릿이 재착용해야 사용되는 버그(pelero) -#define MODIFY_PKFIELD_DARK_SPRIT_BUGFIX_20090804 - -// 벚꽃 이벤트 관련 NPC를 등록(pelero) -#define MODIFY_CHEREEY_NPC_REGISTER_NPC_GROUP_20090803 - -// 수호 부적과 보호 부적은 각각 중복으로 사용하지 못하도록 처리(pelero) -#define MODIFY_CHARM_GUARDIAN_CHARM_PROTECTITEM_NON_DUPLICATION_20090720 - -// 결투중 결투 종료 카운트 중에 또다시 결투 종료 요청시 카운트가 초기화 되는 버그(pelero) -#define MODIFY_NEWPVP_ENDING_COUNTDOWN_BUGFIX_20090715 - -// 불카누스에서 인장류가 검투사의 명예보다 우선 적용 되도록 수정(pelero) -#define MODIFY_PCS_MARKS_GLORYOFGLADIATOR_SEQUENCE_20090715 - -// 결투중 종료시에 초기화 문제(pelero) -#define MODIFY_NEWPVP_GAME_CLOSING_BUGFIX_20070715 - -// 눈사람 변신 반지, 팬더 변신 반지 버그 수정(pelero) -#define MODIFY_SNOW_MAN_PANDA_POLYMORPH_RING_BUGFIX_20090715 - -// 여름 불꽃놀이 이벤트(pelero) -#define ADD_SUMMER_FIRECRACKER_MONSTER_EVENT_20090610 - -// 황금 군단 이벤트 리뉴얼 20090311 (natinda) -//#define ADD_GOLDEN_EVENT_RENEWAL_20090311 DESACTIVADO POR 007JODEX - -// 쿤둔&벚꽃 아이템백 리뉴얼 작업 by natinda -#define MODIFY_KUNDUN_EVENTBAG_RENEWAL_2009_02_04 -#endif // FOR_KOREA - -// [버그 수정] PathFind 버그수정(goni) -#define MODIFY_PATHFIND_BUGFIX_20090609 -#if GAME_VERSION >= G_V_S4_6 -// [보상 변경] 카오스 캐슬 보상 관련 변경 by natinda -#define MODIFY_CHAOSCASTLE_REWARD_20090608 -#endif - -#if defined( FOR_KOREA ) && GAME_VERSION >= G_V_S4_6// 수리비 공식 국내만 적용 -// [공식 수정] 자동 수리비 공식 관련 변경 -#define MODIFY_AUTOREPAIR_CALC_20090608 -#endif // FOR_KOREA - -// [버그 수정] 전체 수리비용 관련 문제 (natinda) -#if GAME_VERSION >= G_V_S4_6 -#define MODIFY_CALREPAIRRATE_20090528 -#endif - -#if GAME_VERSION >= G_V_S4_6 -// [업데이트] EventItemBag 확장_addoption 값에 따라 옵션을 넣어줌.(goni) -#define UPDATE_PROBABILITYITEMBAG_ADDOPTION_VALUE_20090526 - -// 프리미엄아이템 추가(팬더변신반지, 팬더펫) 2009-04-30 by riverstyx -// #define PREMIUMITEM_20090106 활성화 되어있어야 함 -#define ADD_PREMIUMITEM_PANDA - -// [버그 수정] 무기 스킬을 강화한 후 무기를 장착 해제하면 -// 스킬트리가 비정상적으로 표시 되는 버그(pelero) -#define MODIFY_WEAPONSKILL_STRENGTHEN_ICON_BUGFIX_2ND_20090514 - -// [설정수정] 이벤트맵 진입시 스킬 버프를 지우도록 수정(pelero) -#define ADD_EVENT_MAP_BUFF_EFFECT_DELETE_20090421 -#endif - -// [버그수정] 인피니티 에로우 시전시 +2화살의 마나감소 버그(pelero) -#define MODIFY_INFINITY_ARROW_USE_MANA_BUGFIX_20090416 - -#if GAME_VERSION >= G_V_S4_5 -// [버그수정] 피의 환영사원 입장권(두루마리/피의두루마리)의 내구도가 0되어도 삭제 안되는 버그 수정 -// 국내도 발생가능 TW_0074(riverstyx) - 국내로 옮겨옴 20090416 -#define MODIFY_ILLUSIONTEMPLE_FREE_TICK_20080617 - -// [버그수정] 환영 사원에서 라이트닝 쇼크 사용시 버그(pelero) -#define MODIFY_LIGHTNINGSHOCK_ILLUSIONTEMPLE_BUGFIX_20090414 - -// [버그수정] 눈사람 변신 반지 장비창에서 창고로 넣을때 변신 안풀리는 버그(pelero) -#define MODIFY_SNOW_MAN_POLYMORPH_RING_BUGFIX_20090414 -#endif - -// [버그수정] 물건을 수리시 수리비용보다 소유젠이 많아야 수리되는 버그(pelero) -// 소유젠이 수리비와 같을 때도 수리되도록 수정 -#define MODIFY_ITEM_REPAIR_HIRE_BUGFIX_20090415 - -// [버그수정] 창고에서 물건을 찾을 때 사용료보다 소유젠이 많아야 찾아지는 버그(pelero) -// 소유젠이 사용료와 같을 때도 찾아지도록 수정 -#define MODIFY_WAREHOUSE_HIRE_BUGFIX_20090413 - -#if GAME_VERSION >= G_V_S4_5 -// [버그수정] 피씨방버프 부분유료화 버프 처리 로직 개선 2008-04-08 by riverstyx -// 디파인으로 구분되어 처리되던 피씨방, 해외 부분 유료화 아이템 버프 처리 로직을 하나로 합친다. -// CheckItemOptForGetExpEx <- (CheckItemOptForGetExp, CPCBangPointSystem::CheckItemOptForGetExp, CNewPVP::CheckItemOptForGetExp) 통합 -// 안정화되면 아래 디파인은 정리할 예정 -// 기존 버프 처리 디파인은 제거 -// MODIFY_MARKITEM_20080506 - 제거 -// MODIFY_EVENTMAP_REWARD_BUGFIX_20080404 - 제거 -// MODIFY_BUFF_SYSTEM_EXTENTION_CASHSHOP_20080318 - 버프 처리 로직에서 제거 -// BUGFIX_BUFF_EFFECT_SYSTEM_FOR_PCBANG_ITEM_20071205 - 버프 처리 로직에서 제거 -#define MODIFY_BUFF_EFFECT_SYSTEM_CHECKLOGIC -#endif - - -// 루아 -//#define MODIFY_LUA_SCRIPT_20090430 - -// [버그수정] 공성전 시 공성전 참여길드인데도 PK카운트가 올라가는 현상 수정 2009-04-30 by riverstyx -#define MODIFY_CASTLESIEGE_STATENOTIFY_JOINGUILD_BUGFIX - -// [업데이트] 해킹 툴 블록 기능을 전체 서버에 가능하도록 인증서버와의 연동 기능 추가 (hnine) -#define MODIFY_HACKTOOL_BLOCK_ALL_SESSION_20090422 -#if GAME_VERSION >= G_V_S3_E1 -// [버그수정] 3차날개 조합가격 버그수정(goni) -#define MODIFY_THIRD_WING_EXITEMMONEY_BUGFIX_20090423 -#endif -// [버그수정] Movereq.txt 파일의 최대 맵 인덱스 제한 상승 40 -> 50 (hnine) -#define MODIFY_MOVEREQ_MAP_INDEX_LITMIT_20090421 - -#ifdef FOR_KOREA // 현재는 국내만 적용 -// [업데이트] 맵이동을 채팅 메시지가 아닌 맵 이동 요청 프로토콜로 변경 (hnine) -#if GAME_VERSION >= G_V_S4_6 -//#define ADD_MAPMOVE_PROTOCOL_20090327 //TEST MOVE -#endif -#define USE_MAPMOVE_KEY_GENERATOR_SERVER_SIDE -#endif // FOR_KOREA - -// [업데이트] 해킹 툴 블록 기능을 단일 서버에만 적용되도록 임시 수정 (hnine) -#define MODIFY_HACKING_TOOL_BLOCK_SINGLE_SERVER_20090325 - -// [버그수정] 드래곤 어택 이벤트 몹에서 떨군 축석을 상점에 판매시 4억이 넘는 금액으로 팔리는 문제. by natinda 20090410 -#define MODIFY_JEWELOFBLESS_SELL_BUGFIX - -// [업데이트] 통합빌링 추가(goni) -#define UPDATE_UNIFICATIONBILL_20090203 - -// [버그수정] 파워 슬레쉬 거리 버그 수정 테스트 후 삭제(grooving) -#define MLS_POWERSLASH_DISTANCE_20090216 -#if GAME_VERSION >= G_V_S4_5 -// [업데이트] 아이로봇 및 해킹 툴 블록 기능 추가 (hnine) -#define ADD_HACKING_TOOL_BLOCK_20090311 - -// [버그수정] 크로스 실드 엑설런트 옵션 적용(pelero) -#define MODIFY_CROSS_SHIELD_EX_OPTION_APPLY_20090326 -#endif - -#if GAME_VERSION >= G_V_S4_5 -// [버그수정] 벚꽃관련 아이템의 판매 가격에 갯수 적용(pelero) -#define MODIFY_CHERRYBLOSSOM_SELL_MONEY_BUGFIX_20090325 -#endif - -// [버그수정] 캐쉬샵 리스트가 없을경우(등록되지 않거나 샵서버와의 연결 문제로 못받았을경우) empty packet을 보내지 않도록 한다. by natinda 20090218 -#define MODIFY_BUGFIX_CASHSHOP_OPEN_INTERFACE - -// [업데이트] 이벤트 아이템 발급 로그에 발급된 아이템 정보 추가 2009-03-18 by riverstyx -#define ADD_COUPON_EVENTITEM_LOG - -// [버그수정] Teleport 시 타켓 좌표 Y를 OBJECTSTRUCT.TX 에 입력하는 버그수정 2009-03-12 by riverstyx -#define MODIFY_TELEPORT_TARGETPOSITION_BUGFIX - -// [버그수정] 카오스카드 조합 - 개인상점 오픈시 카오스 조합 불가 2009-03-12 by riverstyx -#define MODIFY_PCS_CHAOSMIX_PSHOP_BUGFIX - -#if GAME_VERSION >= G_V_S4_6 -// [업데이트] 불카누스, PK Field 2009-01-08 by riverstyx -#define ADD_NEWPVP_PKFIELD - -// [업데이트] 겜블링 시스템 업데이트(pelero) -#define ADD_GAMBLING_20090120 -#endif - -#ifdef ADD_NEWPVP_PKFIELD -// PKField 작업중에 셋트 Life 버그 발견 우선 PKField 반영시에 적용할 예정이다. -// [버그수정] Life 최대 값 감소시 현재 감소된 값 전송.아이템 효과 적용에서 분리 2009-02-02 by riverstyx -// 삭제예정 -//#define MODIFY_LIFE_CHANGEMAXVALUE - -// [버그수정] Life, Shield 백분율로 100%(Life > MaxLife + AddLife) 넘어가는 버그수정(NewPVP에서만 사용) 2009-04-17 by riverstyx -#define MODIFY_LIFE_CHANGEMAXVALUE_BUGFIX -// [업데이트] 벚꽃상자 불카누스에서만 드랍되도록 수정(pelero) -#define MODIFY_CHERRYBLOSSOM_DROP_VULCANUS_20090324 -#endif // ADD_NEWPVP_PKFIELD - -#ifdef ADD_GAMBLING_20090120 -// [업데이트] 겜블링 시스템 보완 -#define MODIFY_GAMBLING_COMPLEMENT_20090513 -// [업데이트] 겜블링 진행여부 스크립트 적용 -#define ADD_IS_ENABLED_GAMBLING_20090504 -// [버그수정] 겜블링 시스템 1차 버그 수정(pelero) -#define MODIFY_GAMBLING_BUGFIX_1_20090323 -// [업데이트] 스트라이커 셉터 처리 추가(pelero) -#define ADD_STRIKER_SCEPTER_20090317 -// [업데이트] 에어린보우 추가(pelero) -#define ADD_AERINBOW_20090309 -#endif // ADD_GAMBLING_20090120 - -#if GAME_VERSION >= G_V_S2_2 -// 국내 프리미엄 아이템(카오스카드) 추가 -#define ADD_PCS_LOTTERY_SYSTEM_20070117 -#define MODIFY_PCS_CHAOSMIX_REFACTORING_20070903 -#endif - -#if GAME_VERSION >= G_V_S3_E2 -// [버그수정] 마스터레벨 경험치 비율을 정수형으로 읽어오는 버그(pelero) -#define MODIFY_MASTER_LEVEL_ADD_EXPERIENCE_BUGFIX_20090304 -#endif - -#if GAME_VERSION >= G_V_S4_5 -// [버그수정] 피씨방 이용자 경험치(Rate) 설정 2009-02-19 by riverstyx -#define UPDATE_PCBANGPOINTSYSTEM_BUGFIX -#endif - -#if GAME_VERSION >= G_V_S4_6 -// [업데이트] 수성측길드나 수성측연합길드인지 판단(goni) -#define UPDATE_CHECK_CASTLE_OWNERMEMBER_20090217 -#endif - -#if GAME_VERSION >= G_V_S4_5 -// [업데이트] 피씨방 이용자 경험치(Rate) 설정 2009-02-16 by riverstyx -#define ADD_PCBANG_EXPRATE -#endif - -#if GAME_VERSION >= G_V_S4_5 -// [버그수정] 디비렉으로 인한 카오스 조합 복사 버그수정(goni) -#define MODIFY_CHAOS_ITEM_COPY_BUGFIX_20090211 - -// [버그수정] 서버에서 몬스터 리로드 옵션 기능 수행시 세루판이 바보가 된 채로 리젠(pelero) -#define MODIFY_SELUPAN_REGEN_MONSTER_RELOADING_BUGFIX_20090128 -#endif - -// [업데이트] GM 기능 강화 2008-12-16 by riverstyx -#define GMCOMMAND_EX -#if defined( GMCOMMAND_EX ) && GAME_VERSION >= G_V_S4_5 -#define GMCOMMAND_EX_1ST_BUGFIX -#endif // GMCOMMAND_EX - -#if GAME_VERSION >= G_V_99B -// [업데이트] GM 기능 강화 2009-01-14 by riverstyx -#define MODIFY_SETITEM_LEADERSHIP_BUGFIX -#endif - -// [업데이트] 다크로드보완_카오틱디세이어 수정(goni) -#define UPDATE_CHAOTICDESAIR_SKILL_20090109 - -#if GAME_VERSION >= G_V_99B -// [업데이트] 다크로드 보완(다크스피릿, 다크호스 인벤수리가능)(goni) -#define UPDATE_DARKROAD_PET_ITEMREPAIR_20090109 -#endif - -#if GAME_VERSION >= G_V_S4_6 -// [업데이트] 국내 프리미엄 아이템판매(grooving) -#define PREMIUMITEM_20090106 -#endif - -#ifdef PREMIUMITEM_20090106 -#define EVENT_LOTTO -// [업데이트] 쿠폰 이벤트 아이템 리스트(grooving) -#define COUPON_EVENT_ITEMLIST_20081022 -// [업데이트] 카오스 부적. 카오스부적 실패시 소멸되는 아이템 보호(grooving) -#define ADD_CHAOSMIXCHARM_ITEM_20080702 -#endif - -#if GAME_VERSION >= G_V_S4_5 -// 국내에두 적용함 -// [업데이트] 수호 아이템. 기존 수호천사 아이템 업그레이드 형태. //grooving -#define ADD_SAFEGUARD_ITEM_20080702 - -// 쿨러틴이 데비아스에서 바보인 상태로 리젠되는 버그 수정(pelero) -#define MODIFY_REGEN_SELUPAN_SUMMON_MONSTER_IN_DEVIAS_BUGFIX_20081205 - -// [업데이트] 해외 크리스마스 이벤트 맵 추가 (riverstyx) -#define UPDATE_XMASEVENT_MAP_20080930 -#endif - -#ifdef UPDATE_XMASEVENT_MAP_20080930 -// [업데이트] 해외 크리스마스 (grooving) -#define ADD_XMASEVENT_PET_20080930 - -// [업데이트] 해외 크리스마스 아이템 지급 관련 (natinda) -#define ADD_GIFTITEM_XMASEVENT_20081030 - -// [업데이트] 해외 크리스마스 산타클로스 군단 -#define ADD_ITEM_ATTACK_XMASEVENT_20081014 - -// [업데이트] 해외 크리스마스 이벤트 Npc 추가 -#define ADD_NPC_XMASEVENT_20080930 - -// [업데이트] 해외 크리스마스 이벤트 버프 추가 -#define ADD_BUFF_XMASEVENT_20080930 - -// [업데이트] 해외 크리스마스 변신 반지 추가 -#define ADD_XMASEVENT_POLYMORPH_RING_20080930 - -// [업데이트] 해외 크리스마스 아이템 지급 처리 추가 (riverstyx) -#define ADD_PAYITEM_20081030 -// [업데이트] EventDB 확장 (riverstyx) -#define EVENTDB_PROTOCOLEX - -// [버그수정] 15레벨 미만 사용자 산타의 마을 입장 레벨제한 설정 2008-12-17 by riverstyx -#define MODIFY_SANTACLAUSVILLAGE_VISITLEVEL - -// [버그수정] 산타의 강화 마력도 +30 적용(소환술사-공방에 저주력추가) 되도록 변경 2008-12-17 by riverstyx -#define MDOFIY_BUFF_POWER_UP - -// [업데이트] 산타의 마을 NPC 선물 설정 파일로 변경 2008-12-17 by riverstyx -#define ADD_XMASEVENT_LUCKNUMBER - -// [버그수정] 산타의 마을 초대장이 수리되는 버그 수정 2008-12-18 by riverstyx -#define MODIFY_SANTACLAUSVILLAGE_INVITATION - -// [버그수정] 루돌프펫, 눈사람 변신반지 전체수리 제외 2008-12-19 by riverstyx -#define MODIFY_XMASEVENTITEM_REPAIR -#endif // UPDATE_XMASEVENT_MAP_20080930 - -// [버그수정] 누적버그수정(goni) -#define MODIFY_BUGFIX_20081119 - -//[버그수정] 적대길드로 설정되있지 않은 유저에게도 데미지가 적용되는 버그(pelero) -#define MODIFY_FIRESCREAM_SPLASH_DAMAGE_BUGFIX_20081121 - -#if GAME_VERSION >= G_V_S4_6 -// [버그수정] 같은 레벨의 다크스팅거가 엑알바트로스보우보다 데미지가 높은 버그(pelero) -#define MODIFY_DARKSTINGER_BUGFIX_20081119 - -// [버그수정] 스피드 핵 임시 처리 (riverstyx) -#define MODIFY_SPEEDHACK_20080605 -#endif - -#if GAME_VERSION >= G_V_99B -// [버그수정] 이벤트맵에서 이벤트가 종료되면 순간이동 스킬 사용 못하게..(pelero) -#define MODIFY_DONT_TELEPORT_EVNET_ENDING_IN_EVENTMAP_20081118 -#endif - -// [업데이트] 요정 +3 화살 추가(pelero) -#define UPDATE_ADD_ARROW_TYPE_PLUS_3_20081106 - -#if GAME_VERSION >= G_V_S4_5 -// [업데이트] 신섭 추가로 변경된 정보를 적용 가능하게 설정 추가 2008-11-13 by riverstyx -#define ADD_NEWSERVER_20081113 -#endif - -#ifdef ADD_NEWSERVER_20081113 -// [업데이트] 신섭 카오스캐슬 몬스터 사냥 시 드롭되는 보상 내역 추가 2008-11-13 by riverstyx -#ifndef MODIFY_CHAOSCASTLE_REWARD_20090608 -#define ADD_NEWSERVER_CHAOSCASTLE_MONSTERITEMS_20081113 -#endif -// [업데이트] 신섭 이벤트 Off -#define ADD_NEWSERVER_EVENTOFF_20081114 -#endif // ADD_NEWSERVER_20081113 - -#if GAME_VERSION >= G_V_S4_6 -// [업데이트] 상용화 7주년 이벤트(행운의 동전)(goni) -#define UPDATE_LUCKY_COIN_EVENT_20081029 -#endif - -// 인벤에서 수리할경우 마을서 수리할때 비해 3배요금 부과(goni) -#define UPDATE_INVEN_REPAIREMONEY_INC_20081112 - -#if GAME_VERSION >= G_V_S4_5 -//[버그수정] 세루판 등장전 부화장 내에서 셔먼 스킬을 사용할 경우 파티원들이 바로 입구로 튕기는 버그 2008-11-07 by natinda -#define MODIFY_RECALLSKIL_BUGFIX_20081107 -#endif - -// [해킹] NPC에 보내지는 비정상적인 요청 차단(거래, 친구추가, 길드추가, 파티초대) - 2008-11-06 by riverstyx -#define MODIFY_REQUESTNPC_HACK - -// [버그수정] 보석복사 버그수정 - riverstyx -// 유저간 거래상태에서 보석조합을(묶음) 요청 후 거래 취소를 요청하여 복사 -#define MODIFY_JEWELMIXSYSTEM_BUGFIX_20081020 - -// [버그수정] 맵이동시시 이동 위치 버그수정(goni) -#define MODIFY_MAPMOVE_POSITION_SYNC_BUGFIX_200981024 - -#if GAME_VERSION >= G_V_S4_5 -// [수치조정] 데몬과 정령의 내구도 감소율 조정(natinda) -#define MODIFY_DEMON_AND_SPRITE_DURABILITY_20081023 -#endif - -// [버그수정] 파이어스크림 강화시 스플래시 데미지가 적용 안되는 버그(pelero) -#define MODIFY_STRENGTHEN_FIRESCREAM_SPLASH_DAMAGE_BUGFIX_20081017 - -// [버그수정] 소켓조합 후 카오스박스 아이템 안내려오는 버그수정(goni) -#define MODIFY_SOCKET_CHAOSMIX_ITEM_MOVE_BUGFIX_200801021 - -// [버그수정] 포이즌 소뿔전사 변화 반지 착용시 체인 라이트닝 데미지가 이상적으로 증가하여 벨런스 붕괴 (일본/중국) 국내에도 적용해야 될 것으로 보임..(natinda) -#define MODIFY_CHAIN_LIGHTNING_BUGFIX_20081022 - -#ifdef CHAOS_MIX_UPGRADE -// [버그수정] 착용장비를 카오스 조합시 인벤토리가 풀일 경우 올라간 스탯 때문에 입지도 버리지도 못하는 문제 (natinda) -#define MODIFY_MIXSYSTEM_BUGFIX_20081016 -#endif - -// [버그수정] 마검스킬 보완및 수정(goni) -#define MODIFY_MAGUMSA_SKILL_BUGFIX_20081015 - -// [버그수정] GetBuffData 리턴값 NULL 검사(goni) -#define MODIFY_GETBUFFDATA_RETURNVALUE_NULLCHECK_BUGFIX_20080923 - -// [업데이트] 환영사원 랭킹서버 SendData 수정(goni) -#define UPDATE_ILLUTIONTEMPLE_RANKINGSERVER_SENDDATA_FIX_20080925 - -#if GAME_VERSION >= G_V_S3_E2 -// 라이브 그룹 4차 버그수정 -#define ADD_LIVE_GROUP_4TH_BUGFIX_20080908 -#endif - -#ifdef ADD_LIVE_GROUP_4TH_BUGFIX_20080908 -// [업데이트] 이카루스 지역에서 다크로드 셔먼 스킬로 날개(3차 날개, 소환술사용, 다크호스)를 -// 착용했는데도 소환이 안되는 버그(pelero) - WOPS번호:30852 -#define MODIFY_RECALL_PARTY_SKILL_SUMMONER_BUGFIX_20080829 -// [업데이트] 생명력 증가 버프가 있는 상황에서 스탯 부족으로 -// 착용이 불가능한 아이템 착용시 생명력 증가 버프 효과가 2배로 -// 증가하는 버그(pelero) - WOPS번호:30867 -#define MODIFY_INCREASE_LIFE_AND_SETITEM_BUGFIX_20080829 -// [업데이트] 마스터 레벨 캐릭터일 경우 엑설런트 옵션인 공격력증가+레벨/20 옵션이 -// 접속 직후에는 레벨+마스터레벨/20이 적용이 안되는 버그(pelero) - WOPS번호:30853 -#define MODIFY_MASTER_LEVEL_ATTACK20UP_BUGFIX_20080828 -// [업데이트] 다크스피릿으로 공격시 엑설런트데미지, 더블데미지가 -// 적용되지 않는 버그 (pelero) - WOPS번호:28829, 26208 -//#define MODIFY_EX_DAMAGE_DARKSPRIT_BUGFIX_20080826 -// [업데이트] 흑마법사 헬버스트 시전시 순간이동 스킬을 사용하여도 -// 헬버스트 지속시간이 누적되는 버그(pelero) - WOPS번호:29010 -#define MODIFY_TELEPORT_USING_HELLBURST_BUGFIX_20080822 -// [업데이트] 환영사원에서 칼리마 마석이 생성되는 버그(pelero) - WOPS번호:27964 -#define MODIFY_ILLUSION_TEMPLE_USE_KALIMA_GATE_BUGFIX_20080821 -// [업데이트] 소환술사의 체인 라이트닝 스킬이 로스트타워 함정에 사용되는 버그(pelero) - WOPS번호:22175 -#define MODIFY_CHAIN_LIGHTNING_USE_TRAP_BUGFIX_20080820 -// [업데이트] 엘리트해골 변신 반지와 크리스마스 변신반지를 함께 착용할 경우 -// 엘리트해골 변신 반지의 내구도만 감소하는 버그, 또한 (13, 10)의 변신반지(0~6)을 -// 제외한 변신 반지들은 2중으로 내구도가 감소하고 있던 것을 수정(pelero) - WOPS번호:20886 -#define MODIFY_CHANGE_RING_DURABILITY_BUGFIX_20080820 -#endif // ADD_LIVE_GROUP_4TH_BUGFIX_20080908 - -// [버그수정] 마스터스킬 거리수정(goni) -#define MODIFY_MASTER_SKILL_DISTANCE_BUGFIX_20080909 - -// [버그수정] 플러스 조합시 날개 아이템을 일반 아이템 조합으로 설정 (hnine) -#define MODIFY_PLUS_ITEM_MIX_WING_SET_NORMAL_ITEM_20080916 - -// [버그수정] 시드스피어 조합 이후에 아이템 이동 불가 버그 수정 (hnine) -#define MODIFY_SOCKET_CHAOSMIX_ITEM_MOVE_BUGFIX_20080910 - -#ifdef MASTER_LEVEL_SKILL_SYSTEM_20071122 -// [버그수정] 마스터스킬 방어력 증가값 수정(goni) -#define BUGFIX_MASTERSKILL_INC_DEFENSE_BUGFIX_20080917 -#endif - -// [업데이트] 열매공식 수정(goni) -#define UPDATE_FRUITPOINT_SUCCESSRATE_FIX_200809017 - -// [업데이트] 라클리온 보스존에서 로그인할 경우 무조건 안전지대로 이동(pelero) -#define MODIFY_RAKLION_BOSS_ZONE_BANISH_USER_2ND_20080917 - -// [업데이트] 라클리온 보스전 실패 후 보스 바로 삭제하도록 수정(pelero) -#define MODIFY_BATTLE_OF_SELUPAN_FAIL_DELETE_IMMEDIATELY_20080917 - -// [업데이트] 라클리온 보스전 참여 리스트에서 유저 삭제가 제대로 안되는 문제(pelero) -#define MODIFY_RAKLION_BATTLE_USER_DELETE_BUGFIX_20080916 - -// [업데이트] R단축키 저장이 제대로 안되는 버그(pelero) -#define MODIFY_R_HOTKEY_SAVE_BUGFIX_20080910 - -// [업데이트] 크라이울프에서 라클리온으로 이동되지 않는 버그(pelero) -#define MODIFY_CRYWOLF_MOVE_RAKLION_BUGFIX_20080910 - -#if GAME_VERSION >= G_V_S4_5 -// [버그수정] 시즌4 신규스킬 보완 (goni) -#define MODIFY_SEASON4_NEWSKILL_20080909 -#endif - -#if GAME_VERSION >= G_V_S3_E1 -// 라이브 그룹 3차 버그수정 -#define ADD_LIVE_GROUP_3TH_BUGFIX_20080908 -#endif - -#ifdef ADD_LIVE_GROUP_3TH_BUGFIX_20080908 -// [업데이트] 알바트로스 보우 사용시 내구도가 줄지 않는 버그(pelero) - WOPS번호:28574 -#define MODIFY_ALBATROS_BOW_DURABILITY_BUGFIX_20080813 -// [업데이트] 계정을 생성하고 처음으로 창고를 열경우 -// 창고젠을 보내주지 않는 현상 수정(pelero) - WOPS번호:27340 -#define MODIFY_NEW_ACCOUNT_WAREHOUSE_ZEN_BUGFIX_20080812 -// [업데이트] 기사가 마스터 스킬중 액티브 스킬(회오리베기, 블로어, 분노의 일격)을 -// 배운 상태에서 콤보를 사용할 경우 2번째 스킬과 3번째 스킬이 같아도 -// 콤보가 발동 되는 버그 (pelero) - WOPS번호:27647 -#define MODIFY_MASTER_LEVEL_COMBO_SKILL_BUGFIX_20080805 -// [업데이트] 마스터레벨 액티브 스킬에 투자한 스킬을 슬롯에 -// 저장하고 재접속하면 리셋되는 버그 (pelero) - WOPS번호:27127 -#define MODIFY_MASTER_SKILL_HOTKEY_BUGFIX_20080804 -// [업데이트] 내구도가 0인 문스톤 팬던트를 착용하고 있어도 효과가 -// 적용되는 버그(즉사하지 않는 버그) (pelero) - WOPS번호:26919 -#define MODIFY_BATTLE_OF_NIGHTMARE_MOONSTONE_PENDANT_BUGFIX_20080731 -// [업데이트] 환영 사원에서도 쉐도우팬텀의 공방 버프가 유지되는 버그(pelero) - WOPS번호:26834 -#define MODIFY_SHADOW_PHANTOM_BUFF_IN_ILLUSION_TEMPLE_BUGFIX_20080731 -// [업데이트] 이카루스에서 펜릴을 장착했는데도 날개가 벗어지지 않는 버그(pelero) -// 다크호스만 착용했을때 이카루스로 이동하지 못하는 버그 -#define MODIFY_SKYLAND_FENRIR_AND_WING_BUGFIX_20080730 -// [업데이트]지팡이류에 민첩성 감소 옵션이 적용되지 않는 버그(pelero) - WOPS번호:26206 -#define MODIFY_STAFF_DECREASE_DEXTERITY_BUGFIX_20080729 -// [업데이트]이동불가 스킬에 당한 상태에서 스킬에 의한 밀림현상 수정(pelero) - WOPS번호:29691 -#define MODIFY_BACK_SPRING_SKILL_BUGFIX_20080716 -#endif // ADD_LIVE_GROUP_3TH_BUGFIX_20080908 - -// [버그수정] 플러스 아이템 조합에서 소켓 아이템이 380아이템으로 적용되는 버그를 수정 (hnine) -#define MODIFY_PLUSITEMMIX_SOCKET_ITEM_DIVISION_20080905 - -#ifdef ADD_MASTER_LEVEL_SKILL_SYSTEM_ACTIVE_20080107 -// [업데이트] 공격시 안전지역이면 데미지 적용하지 않고 안전지대로 이동시킨다(pelero) -// 라클리온 이동 버그 관련하여 수정함 -#define MODIFY_SAFEZONE_CHECK_ATTACK_20080903 -#endif - -// [업데이트] 고블린 카오스조합 아이템 레벨 성공확률 조정(goni) -#define UPDATE_CHAOSMIX_LEVELUP_RATE_20080904 - -// 뭉친패킷 처리(kuzimo) -#define HACKTOOL_KUZIMO - -// [버그수정] 체인라이트닝 버그수정(goni) -#define MODIFY_CHAINLIGHTNING_BUGFIX_20080902 - -// [버그수정] 몬스터 걸치기 작업수정(goni) -#define MODIFY_MONSTER_ATTACK_BUGFIX_20080902 - -// [ 버그수정] 스피어 드럽 버그수정(goni) -//#define MODIFY_SPEAR_DROP_BUGFIX_20080901 -#if GAME_VERSION >= G_V_S4_5 -// [업데이트] 시즌4 추가 시세밸런스(goni) -#define UPDATE_SEASON4_MARKET_CONDITIONS_BALANCE_20080828 - -// [업데이트] 시즌 4 업데이트 - 소켓 아이템 드롭을 라클리온 맵으로 한정 (hnine) -#define MODIFY_LIMIT_SOCKET_ITEM_DROP_MAP_RAKLION_20080825 - -// [업데이트] 시즌 4 업데이트 - 로그추가 2차 (hnine) -#define ADD_SOCKET_OPTION_LOG_02_20080821 - -// [업데이트] 시즌 4 업데이트 - 신규 소켓 옵션 추가 (hnine) -//#define MODIFY_SOCKET_ITEM_NEW_OPTION_20080818 - -// [업데이트] 시즌 4 업데이트 - 상점에서 판매되는 소켓 아이템에 소켓 슬롯 생성 추가 (hnine) -#define MODIFY_SEASON4_SHOP_SOCKET_ITEM_MAKE_SLOT_20080808 -#endif - -#ifdef MASTER_LEVEL_SKILL_SYSTEM_20071122 -// [업데이트] 마스터스킬 추가 작업(goni) -#define UPDATE_MASTER_SKILL_4RANK_ADDITION_20080808 -#endif - -#if GAME_VERSION >= G_V_S4_5 -// [업데이트] 이벤트맵 입장권 조합재료 가격 설정 -#define UPDATE_EVENT_MAP_MIXiTEM_VALUE_200800808 -#endif - -// [업데이트] 젠 드랍율 축소(goni) -#define UPDATE_ZEN_DROP_DOWN_20080806 - -#if GAME_VERSION >= G_V_S4_5 -//[버그수정] 무기스킬강화시 스킬 아이콘수정(goni) -#define MODIFY_WEAPONSKILL_STRENGTHEN_ICON_BUGFIX_20080807 - -// [업데이트] 스킬키 단축기 확장(goni) -#define UPDATE_SKILLKEY_EXPAND_20080804 - -// [버그수정] 시즌 4 업데이트 - 버그수정 2차 (hnine) -#define MODIFY_SEASON4_UPDATE_BUGFIX_02_20080804 - -// [버그수정] 콤보스킬 데이터구조체의 스킬값 확장(goni) -#define MODIFY_COMBOSKILLDATA_SKILLNUMBER_20080801 -#endif - -#if GAME_VERSION >= G_V_S4_5 -// [버그수정] 재접속시 추가생명력 적용문제 수정(goni) -#define MODIFY_ADDLIFE_BUGFIX_20080730 -#endif - -// [업데이트] 시즌 4 업데이트 - 소켓 아이템 시스템 수정 (hnine) -#define MODIFY_SOCKET_OPTION_SYSTEM_20080725 - -// [버그수정] 맵서버이동시 인증부분 삭제 제거(goni) -#define MODIFY_GAMEGARD_AUTH_MAPSERVER_MOVE_20080723 - -// [업데이트]공성 성문, 석상 보완 작업(최대HP 값 증가) (pelero) -#define MODIFY_GATE_AND_STATUE_INCREASE_MAX_HP_20080718 - -#if GAME_VERSION >= G_V_S4_5 -// [버그수정] 시즌 4 업데이트 - 버그수정 1차 (hnine) -#define MODIFY_SEASON4_UPDATE_BUGFIX_01_20080722 - -// [업데이트] 시즌 4 업데이트 - 소켓 아이템 버그 수정 5차 (hnine) -#define MODIFY_ITEM_SOCKET_OPTION_BUGFIX_05_20080715 - -// [업데이트] 시즌 4 업데이트 - 소켓 아이템 로그 추가 (hnine) -#define ADD_SOCKET_OPTION_LOG_20080715 - -// [업데이트] skill(kor).txt 스크립트 확장 - 스킬 타입(riverstyx) -// 일단 해외만 적용 국내도 적용해야함 -#define ADD_EXPAND_SKILL_SCRIPT_FOR_SKILLTYPE_20080515 - -// [업데이트] 시즌 4 업데이트 - 소켓 아이템 버그 수정 4차 (hnine) -#define MODIFY_ITEM_SOCKET_OPTION_BUGFIX_04_20080710 -#endif - -// [버그수성] 타겟유저,소환몬인덱스 체크(goni) -#define MODIFY_TARGETNUMBER_RECALLMON_INDEX_BUFGIX_20080711 - -// [버그수정] 스킬 최종 요구에너지버그 수정(riverstyx) -#define MODIFY_SKILL_REQUIREENERGY_20080423 - -#if GAME_VERSION >= G_V_99B -// [버그수정] 유저 접속시 다크 스피릿 스킬 초기화 안되는 버그(pelero) - WOPS번호:20295 -#define MODIFY_DARK_SPRIT_SKILL_INITIALIZE_BUGFIX_20080702 -#endif - -// [버그수정] 마검사가 가이온 세트 아이템 착용 후 힘스탯이 올라간 상태에서 블러드어택을 배우고 -// 세트 아이템을 벗어 블러드어택 사용 가능 스탯이 아닌 상태에서도 블러드어택이 시전되는 버그(pelero) - WOPS번호:20674 -#define MODIFY_BLOOD_ATTACK_AND_ADD_STRENGTH_BUGFIX_20080701 - -// [버그수정] 회오리베기 강화 스킬 습득시 스킬 범위가 줄어드는 버그(pelero) - WOPS번호:26969 -#define MODIFY_ML_STRENGTHEN_WHEEL_RANGE_BUGFIX_20080630 - -// [버그수정] 칸투르 보스전 다크호스 버그(pelero) - WOPS번호:20444 -#define MODIFY_KANTURU_ENTERANCE_DARKHORSE_BUGFIX_20080627 - -#if GAME_VERSION >= G_V_S4_5 -// [버그수정] 다크로드 펫의 생명력 버그 수정(pelero) - WOPS번호:19787 -#define MODIFY_DARKLORD_SEND_INFO_PROTOCOL_EXTEND_20080626 -#endif - -#ifdef MASTER_LEVEL_UP_SYSTEM_20070912 -// [버그수정] 마스터 레벨끼리 악마의 광장에서 파티시 경험치 분배 버그 수정(pelero) - WOPS번호:29466 -#define MODIFY_MASTER_LEVEL_DEVIL_SQUARE_PARTY_EXP_BUGFIX_20080625 -#endif - -// [버그수정] 3차 날개 옵션 5% 확률로 생명력 완전 회복 버그 수정(pelero) - WOPS번호:28215 -#define MODIFY_THIRD_WING_OPTION_5_PERCENT_REFILL_ALL_BUGFIX_20080624 - -// [업데이트] GM 매크로 최대 확장 (hnine) -#define MODIFY_MAX_GMCMD_EXTEND_20080630 - -#if GAME_VERSION >= G_V_S4_5 -// [업데이트] 시즌 4 업데이트 - 시즌 4 업데이트 추가 패치는 해당 디파인으로 On/off -#define ADD_SEASON_4_UPDATE_20080617 -#endif - -#ifdef ADD_SEASON_4_UPDATE_20080617 -// [버그수정] 블러드캐슬 유저 인덱스 수정(goni) -#define MODIFY_BLOODCASTLE_USERINDEX_BUGFIX_20080709 - -// [업데이트] 시즌 4 업데이트 - 아이템 업그레이드/조합 수정 (hnine) -#define MODIFY_ITEM_UPGRADE_MIX_RATE_FIX_20080627 -// [업데이트] 시즌 4 업데이트 - 마이너스 열매 공식 수정 (hnine) -#define MODIFY_MINUS_FRUIT_POINT_CALC_20080627 - -// [업데이트] 시즌4 블러드캐슬 스케줄 변경(goni) -#define UPDATE_BLOODECASTLE_SCADULE_20080624 -// [업데이트] 시즌4 신규스킬 추가(goni) -#define ADD_SEASON4_NEW_SKILL_20080522 -// [업데이트] 시즌4 신규캐릭터 환수스킬(Pollution)추가(goni) -#define UPDATE_ADD_SUMMONER_SKILL_POLLUTION_20080425 -// [업데이트] 시즌 4 업데이트 - 소켓 아이템 시스템 (hnien) -//#define ADD_ITEM_SOCKET_OPTION_SYSTEM_20080415 -// [업데이트] 시즌 4 업데이트 - 아이템 소켓 데이터 부분 확장 (hnine) -//#define ADD_ITEM_SOCKET_OPTION_EXTEND_20080422 -// [업데이트] 시즌 4 업데이트 - 소켓 아이템 조합 NPC (hnine) -#define ADD_ITEM_SOCKET_OPTION_MIX_20080415 -// [업데이트] 시즌 4 업데이트 - 카오스 조합 프로토콜 확장 (hnine) -#define MODIFY_CHAOSMIX_PROTOCOL_EXTEND_20080526 -// [업데이트] 라클리온 쿨러틴, 아이언 나이트 리젠시 좌표 버그(pelero) -#define MODIFY_RAKLION_COOLUTIN_AND_IRON_KNIGHT_REGEN_BUGFIX_20080828 -// [업데이트] 부화장 폐쇄 후 유저의 처리(pelero) -#define MODIFY_RAKLION_BOSS_ZONE_BANISH_USER_20080818 -// [업데이트] 세루판이 이동하면서 스킬을 사용하는 버그(pelero) -#define MODIFY_RAKLION_SELUPAN_MOVING_USE_SKILL_BUGFIX_20080813 -// [업데이트]간혹 세루판이 나오지 않아서 라클리온 보스전의 전체 스케쥴이 멈추는 버그(pelero) -#define MODIFY_RAKLION_SELUPAN_NO_REGEN_BUGFIX_20080730 -// [업데이트]세루판 등장 스킬 타겟 수정(pelero) -#define MODIFY_RAKLION_SELUPAN_FIRST_SKILL_BUGFIX_20080721 -// [업데이트] 시즌4 이벤트용 로그 추가(pelero) -#define UPDATE_SEASON_4_EVENT_LOG_200800715 -// [업데이트] 시즌4 업데이트 - 라클리온 보스전 버그 수정 2차(pelero) -#define MODIFY_RAKLION_BUGFIX_2ND_20080710 -// [업데이트] 시즌4 업데이트 - 라클리온 보스전 버그 수정(pelero) -#define MODIFY_RAKLION_BUGFIX_20080707 -// [업데이트] 신규맵 라클리온 추가(pelero) -#define ADD_RAKLION_20080408 -// [업데이트] 라클리온에서 사용하는 프로토콜(pelero) -#define RAKLION_PROTOCOL_20080625 -// [업데이트] 세루판 관련 몬스터 스킬 갯수 추가 TSkillDefine.h (pelero) -#define UPDATE_MONSTER_SKILLUNIT_SLOT_EXTEND_20080514 -// 시즌4 안정화 후에 삭제 바랍니다. -#define SEASON4_PATCH_GROOVING -#endif // ADD_SEASON_4_UPDATE_20080617 - -#ifdef ADD_ITEM_SOCKET_OPTION_SYSTEM_20080415 -// [버그수정] 시드 추출 실패시 아이템의 레벨을 0~2 다운되도록 수정 (hnine) -#define MODIFY_SEED_EXTRACT_FAIL_RESULT_20080903 - -// [버그수정] 시드와 스피어의 드롭 확률을 설정 가능하도록 수정 (hnine) -#define MODIFY_SET_SEED_SPHERE_DROP_RATE_20080903 -#endif - -#ifdef ADD_ITEM_SOCKET_OPTION_SYSTEM_20080415 -// [버그수정] 시즌 4 업데이트 - 소켓 아이템 드롭 기능 수정 (hnine) -#define MODIFY_SOCKET_ITEM_DROP_SYSTEM_FIX_20080828 -#endif - -#ifdef ADD_ITEM_SOCKET_OPTION_SYSTEM_20080415 -// [업데이트] 시즌 4 업데이트 - 소켓 아이템 버그 수정 3차 (hnine) -#define MODIFY_ITEM_SOCKET_OPTION_BUGFIX_03_20080704 - -// [업데이트] 시즌 4 업데이트 - 소켓 아이템 버그 수정 2차 (hnine) -#define MODIFY_ITEM_SOCKET_OPTION_BUGFIX_02_20080630 -#endif - -// [버그수정] OBJECTSTRUCT생성시에 문제 가능성이 있어 재수정.테스트 요함. -#define MEM2_KUZIMO - -// [버그수정] LNK4084 경고 메시지 제거를 위한 OBJECTSTRUCT gObj[MAX_OBJECT]의 Heap메모리 이동. 기타 버그 수정. -#define MEM_KUZIMO - - -#ifdef FOR_KOREA -// [업데이트] 시즌4 PC방 포인트 관련 수정 -#ifdef PCBANG_POINT_SYSTEM_20070206 -#define PCBANG_KUZIMO -#endif -// [보완작업] 패스워드 길이 12bytes로 수정(kuzimo) -//#define PW_KUZIMO -#endif // FOR_KOREA - -// [버그수정] 악령 버그수정(goni) -#define MODIFY_EVIL_BUGFIX_20080618 - -#ifdef MASTER_LEVEL_SKILL_SYSTEM_20071122 -// [버그수정] 몬스터 킬 시 SD, 마나 중첩 회복 버그수정(goni) -#define MODIFY_SKILL_ML_MONSTER_KILL_SD_BUGFIX_20080514 -#endif - -// [버그수정] AddMonster 수정(goni) -#define MODIFY_ADDMONSTER_BUGFIX_20080423 - -//[업데이트] 세트아이템 드랍 로그수정 (goni) -#define UPDATE_SET_ITEM_DROP_LOG_20080420 - -// [버그수정] 공성서버 진입 불가 관련 추적 로그 (hnine) -//#define MODIFY_CASTLE_MAP_MOVE_TRACE_LOG_20080418 - -#if GAME_VERSION >= G_V_S4_5 -// [업데이트] 캐릭명 변경(goni) -#define UPDATE_CHANGE_CHARACTERNAME_20080410 -#endif - -#if GAME_VERSION >= G_V_S4_5 -// [업데이트] NPC 레오 이벤트 아이템 백 셋트적용(goni) -#define UPDATE_NPC_REO_NEW_EVENTITEMBACK_20080408 -#endif - -//[버그수정] 아이템 겹치는 문제 수정(goni) -#define MODIFY_ITEMDURABILITY_BUGFIX_20080408 - -// [버그수정] 소환술사 위크니스, 이너베이션 PVP 적용시간 수정(goni) -#define MODIFY_SUMMONER_WEAKENESS_ENERVATION_PVPEFFECTTIME_BUGFIX_20080404 - -// [버그수정] 공성 직인등록시간 리셋수정(goni) -#define MODIFY_CASTLE_CROWN_ACCESS_TIME_CHECK_BUGFIX_20080403 - -#if GAME_VERSION >= G_V_S4_5 -// [업데이트] 이벤트 아이템 백에 셋트아이템 추가(goni) -#define UPDATE_PROBABILITYiTEMBAG_ADD_SETITEM_20080329 - -// [업데이트] ItemSetOption(kor)에 소환술사 클래스 확장(goni) -#define UPDATE_SETOPTION_SCRIPT_ADD_CLASS_20080321 - -// [업데이트] 벚꽃놀이 이벤트(riverstyx) -#define ADD_EVENT_CHERRYBLOSSOM_20080312 - -// [업데이트] 각 이벤트맵 보상 경험치 배율 추가(pelero) -#define UPDATE_ADD_EVENT_MAP_EXP_RATE_20080320 - -// [업데이트] 마검사, 다크로드, 소환술사 파티 세트 경험치 추가(pelero) -#define UPDATE_ADD_NEW_PARTY_SET_EXP_20080325 - -// [업데이트] 아이템 시리얼 확장 (hnine) -#define MODIFY_ITEM_SERIAL_EXPAND_20080227 -#endif - -// [업데이트] 아이템 시리얼 중복체크 옵션 리로드 가능하도록 수정 (hnine) -#define MODIFY_SERIAL_CHECK_OPTION_RELOAD_20080212 - -//[버그수정] 스킬리스트 사이즈 수정(goni) -#define MODIFY_SKLL_LIST_SIZE_BUFFIX_20080221 - -// [업데이트] 쉐도운팬텀공방 최대레벨 스크립트로 변경(goni) -#define UPDATE_SHADOW_PHANTOM_MAX_LAVEL_LOAD_SCRIPT_20080220 - -// [업데이트] "/요청 off"시 적대관계 맺기/끊기 요청에대한 거부도 추가(goni) -#define UPDATE_REQUEST_OFF_ADD_RELATIONSHIP_20080219 - -#if GAME_VERSION >= G_V_S4_5 -//해외로 빌드시 컴파일 에러가 발생하여 상위 디파인조건을 추가함 riverstyx -#ifdef FOR_KOREA -// [버그수정] 피씨방포인트상점 종료시 처리(goni) -#define MODIFY_PCBANGPOINTSHOP_CLOSEWINDOWS_BUGFIX_20080218 -#endif // FOR_KOREA -#endif - -////////////////////////////////////////////////////////////////////////// -// 시즌3plus 신규캐릭터 스킬추가 -////////////////////////////////////////////////////////////////////////// -#if GAME_VERSION >= G_V_S2 -// 380 아이템 엑 안떨어지게(goni) -#define MODIFY_380_EXCELENT_ITEM_DISABLE_20080212 -#endif - -// [버그수정] 슬립시킬 성공률 수정(goni) -#define MODIFY_SLEEP_SKILL_SUCCESSRATE_BUGFIX_20080125 - -// [업데이트] 로그추가(goni) -#define UPDATE_ADD_LOG_20080117 - -#if GAME_VERSION >= G_V_S4_5 -// [업데이트] 옵션 키 레벨추가(goni) -#define UPDATE_OPTIONKEY_LEVEL_20080116 - -// [업데이트] 신규캐릭터 신규스킬 추가(goni) -#define UPDATE_SUMMONER_NEW_SKILL_20080111 -#endif - -// [버그수정] 신규캐릭터 summoner 3차날개 버그수정(goni) -#define MODIFY_SUMMONER_THIRD_WING_BUFGIX_20090109 - -#if GAME_VERSION >= G_V_S4_5 -// [업데이트] 신규맵 평온의 늪 추가(goni) -#define UPDATE_NEWMAP_SWAMP_OF_CALMNESS_20080108 -#endif -////////////////////////////////////////////////////////////////////////// - -// [버그수정] 마라쥬 NPC 한테 말을 걸경우 상정 종료되 문제 수정(goni) -#define MODIFY_MIRAGE_NPC_ACT_CLOSESHOP_BUGFIX_20080123 - -#if GAME_VERSION >= G_V_S4_5 -// [업데이트] 마스터레벨 입장 이벤트맵 입장권 재료 드롭확률 조정(goni) -#define UPDATE_MASTER_LEVEL_EVENTMAP_TICKET_METERIAL_DROPRATE_20080123 -#endif - -// [버그수정] 몬스터 생성시 락을 검(goni) -// #define MODIFY_ADDMONSTER_ADDLOCK_20080117 - -// [버그수정] 버프 시스템 확장 7차 수정 (hnine) -#define MODIFY_BUFFSYSTEM_BUGFIX_07_20080109 - -// [버그수정] 이동제한 버그수정(goni) -#define MODIFY_MOVEMAP_BUGFIX_20080109 - -#ifdef DUEL_SYSTEM_20031028 -//[버그수정] 상대방을 PK시 데미지 반사로 자신이 죽을경우 상데방이 PK적용 안되게 수정(goni) -#define MOIDFY_PK_DAMAGE_REFLECT_NOPK_BUGFIX_20081202 -#endif - -#if GAME_VERSION >= G_V_S3_E2 -// [버그수정] 버프 시스템 확장 6차 수정 (hnine) -#define MODIFY_BUFFSYSTEM_BUGFIX_06_20080102 -#endif - -// [버그수정] 정당방위 시간 및 최대 인원수 수정(goni) -#define MODIFY_SELFDEFENSETIME_MAXSELFDEFIENSE_20071221 -#if GAME_VERSION >= G_V_S3_E2 -// [버그수정] 신규캐릭터 버그수정_1(goni) -#define MODIFY_SUMMONER_BUGFIX_1_20071221 -#endif - -#ifdef MODIFY_BUFF_SYSTEM_EXTENTION_20070917 -// [버그수정] 버프 시스템 확장 5차 수정 (hnine) -#define MODIFY_BUFFSYSTEM_BUGFIX_05_20071220 - -// [버그수정] 버프 시스템 확장 4차 수정 (hnine) -#define MODIFY_BUFFSYSTEM_BUGFIX_04_20071216 -#endif - -#if GAME_VERSION >= G_V_S3_E2 -// [버그수정] 공성시 공성 마크가 제대로 출력되지 않는 버그 수정 (hnine) -#define MODIFY_CASTLESIEGE_MARK_DISPLAY_20071216 - -// [버그수정] 신규캐릭터 장비 내구소 감소 버그수정(goni) -#define MODIFY_SUMMONER_ITEM_DURABILITY_DOWN_BUGFIX_20071213 -#endif - -// [업데이트] 해외 부분유료화 메크로 국내용으로 수정 (hnine) -#define MODIFY_INVEN_CLEAR_MACRO_20071212 - -#ifdef MODIFY_BUFF_SYSTEM_EXTENTION_20070917 -// [업데이트] 버프 시스템 확장 3차 수정 (hnine) -#define MODIFY_BUFFSYSTEM_BUGFIX_03_20071211 -#endif - -// [로그추가] 일본 요청으로 경험치 출력 로그에 몬스터 인덱스와 이벤트 타입 추가(hnine) -#define MODIFY_EXP_LOG_MONSTER_EVENT_INDEX_20060906 - -// [버그수정] 클라이언트 접속시 끊기는 문제수정(goni) -#define MODIFY_JOIN_ERROR_BUGFIX_20071211 - -#ifdef MODIFY_BUFF_SYSTEM_EXTENTION_20070917 -// [업데이트] 버프 시스템 확장 2차 수정 (hnine) -#define MODIFY_BUFFSYSTEM_BUGFIX_02_20071204 -#endif - -#if GAME_VERSION >= G_V_S3_E2 -// [업데이트] 신규캐릭터 3차날개 조합생성( 차원의 날개 ) (goni) -#define ADD_SUMMONER_THIRD_WING_MIX_20071203 - -// [업데이트] 신규캐릭터 2차, 3차날개 (절망의 날개, 차원의 날개) (goni) -#define ADD_SUMMONER_SECOND_THIRD_WING_20071130 -#endif - -#ifdef MODIFY_BUFF_SYSTEM_EXTENTION_20070917 -// [업데이트] 버프 시스템 확장 1차 수정 (hnine) -#define MODIFY_BUFFSYSTEM_BUGFIX_01_20071128 -#endif - -#if GAME_VERSION >= G_V_S3_E2 -// [업데이트] 신규 UI 추가_단축키, 입장횟수(goni) -#define ADD_SEASON_3_NEW_UI_20071122 - -// [버그수정] 뷰포트 내의 유저들을 위한 버프 추가 삭제 프로토콜 변경 (hnine) -#define MODIFY_SEND_BUFFEFFECT_IN_VIEWPORT_20071121 -#endif - -// [버그수정] 카오스 조합시 조합 가격이 초과할 경우 확률이 마이너스 값을 가지는 버그 수정 (hnine) -#define MODIFY_CHAOSMIX_MONEY_OVER_MAX_FIX_RATE_20071114 - -#if GAME_VERSION >= G_V_S3_E2 -// [업데이트] 시즌 3 신규 캐릭터 추가(goni) -#define ADD_SEASON_3_NEW_CHARACTER_SUMMONER_20070912 -#endif - -// [버그수정] 인벤토리에서 같은 위치로 아이템 이동시 아이템 사라지는 문제(goni) -#define MODIFY_INVENTORY_ITEM_MOVE_BUGFIX_20071113 - -#if GAME_VERSION >= G_V_S3_E2 -// [업데이트] 행운의 호박 드롭레벨 설정(goni) -#define UPDATE_PUMPKIN_OF_LUCK_DROP_LEVEL_20071026 -#endif - -// [버그수정] 파티시 정방설정 관련 버그수정(goni) -#define MODIFY_PARTY_SELFDEFENSE_BUG_FIX_20071022 - -// [업데이트] 타이틀바에 버전정보추가(goni) -#define UPDATE_TITLEBAR_VERSION_INFO_120071004 - -#if GAME_VERSION >= G_V_S3_E2 -// [업데이트] 마스터레벨 시스템(RKFKA) -#define MASTER_LEVEL_SYSTEM_20070912 - -// [업데이트] 버프 시스템 전면 수정 (hnine) -#define MODIFY_BUFF_SYSTEM_EXTENTION_20070917 - -// [업데이트] 버프 시스템 확장에 따른 기존 스킬 버프 효과 변경 (hnine) -#define MODIFY_OLD_BUFF_EFFECT_SYSTEM_20071004 -#endif - -#if GAME_VERSION >= G_V_S3_E1 -// [업데이트] ItemAddOption에서 카테고리 별로 로드 하도록 설정 (hnine) -#define MODIFY_ITEMADDOPTION_LOAD_CATEGORY_20070712 -#endif - -#if GAME_VERSION >= G_V_S3_E2 -// [업데이트] 시즌 3 신규 맵 엘베란드 추가(goni) -#define ADD_SEASON_3_NEW_MAP_20070910 - -// [버그수정] 공성전 사이클 조정 (RKFKA) -#define MODIFY_CASTLE_SIEGE_CYCLE_RESET_20071009 -#endif - -// [업데이트] 해외 부분유료화 on/off (hnine) -//#define ADD_PARTIALY_CHARGE_ON - -// [업데이트] 해외 부분유료화 디파인 정리 (hnine) -#ifdef ADD_PARTIALY_CHARGE_ON -// [버그수정] 비약류 사용시 처리 순서 변경 (hnine) -//#define MODIFY_IMPROVE_POTION_CALC_PROCEDURE_20071023 - -// [업데이트] 부분유료화 : 환영사원 보상 경험치에 인장류 아이템 효과 설정 (hnine) -#define MODIFY_SET_MARK_EFFECT_AT_ILLUSIONTEMPLE_20071018 -// [업데이트] 부분유료화 : 국내 아이템과 해외 아이템 중 인덱스가 겹치는 부분 수정 (hnine) -// 이동의 인장(13,52)->(13,59), 면죄부(13,53)->(13,60) -#define MODIFY_PCS_OVERLAP_ITEM_BUFF_INDEX_20071011 - -// [업데이트] 부분유료화 : 행운의 부적의 조합확률 적용을 환영사원 입장권과 3차날개 추가 (hnine) -#define MODIFY_PCS_LUCKY_CHARM_TICKET_3RD_WING_20071011 - -// [업데이트] 부분유료화 : 환영사원 자유 입장권 추가 (hnine) -#define ADD_PCS_ILLUSION_TEMPLE_FREE_TICKET_20071011 - -// 해외 부분유료화 1차 업데이트 (hnine) -#define ADD_PARTIALY_CHARGE_SYSTEM_01_20070110 -// 해외 부분유료화 2차 업데이트 (hnine) -#define ADD_PARTIALY_CHARGE_SYSTEM_02_20070423 -#if GAME_VERSION >= G_V_S3_E2 -// 해외 부분유료화 3차 업데이트 (riverstyx, hnine) -#define ADD_PARTIALY_CHARGE_SYSTEM_03_20080407 -// 해외 부분유료화 4차 업데이트 (riverstyx) -#define ADD_PARTIALY_CHARGE_SYSTEM_04_20080723 -// 해외 부분유료화 5차 업데이트 (grooving) -#define ADD_PARTIALY_CHARGE_SYSTEM_05_20080930 -// 해외 부분유료화 6차 업데이트 (natinda) -#define ADD_PARTIALY_CHARGE_SYSTEM_06_20090129 -// 해외 부분유료화 7차 업데이트 (pelero) -//#define ADD_PARTIALY_CHARGE_SYSTEM_07_20090915 -#endif - -// 해외 부분유료화 2차는 1차 업데이트가 필요함. -#if defined ( ADD_PARTIALY_CHARGE_SYSTEM_02_20070423 ) && !defined ( ADD_PARTIALY_CHARGE_SYSTEM_01_20070110 ) -#define ADD_PARTIALY_CHARGE_SYSTEM_01_20070110 -#endif -// [업데이트] 국내 시즌 2.5와 해외 부분유료화 통합시 발생 에러 수정 (hnine) -#define MODIFY_SEASON25_PCS_UNIFICATION_20070903 -// [업데이트] 해외부분유료화 조합 관련 리팩토링 추가 (hnine) -#define MODIFY_PCS_CHAOSMIX_REFACTORING_20070903 - -// [버그수정] 환영사원 보상경험치 인장 혜택 삭제 (hnine) -// #define MODIFY_REMOVE_MARK_BENEFIT_ILLUSIONTEMPLE_REWARD_20071116 - -// [업데이트] 환영사원 메시지 로컬라이징 (hnine) -// #define MODIFY_ILLUSIONTEMPLE_MESSAGE_LOCALIZING_20071104 -// -> MODIFY_ILLUSIONTEMPLE_MESSAGE_20080417 - -// [업데이트] 공성 물약 조합시 행운의 부적 사용 차단 (hnine) -#define MODIFY_LUCKYCHARM_BLOCK_USE_CASTLEPOTION_20071105 - -#if GAME_VERSION >= G_V_S3_E2 -// [버그수정] 해외 블러드 캐슬 MasterLevel 입장 버그 수정(riverstyx) -#define MODIFY_MASTER_LEVEL_SYSTEM_20080414 - -// [버그수정] 해외 이동명령 버그 수정 (riverstyx) -#define MODIFY_MOVECOMMAND_20080415 - -// [업데이트] 환영사원 출력 메시지 업데이트 (riverstyx) -// 일단 해외만 적용 -#define MODIFY_ILLUSIONTEMPLE_MESSAGE_20080417 - -// [업데이트] 마스터레벨을 0으로 설정할 수 있도록 수정(riverstyx) -#define MODIFY_MASTER_LEVEL_SYSTEM_COMMAND_20080417 - -// [버그수정] 10이하 유저 경험치 및 젠 손실 버그 수정(riverstyx) -// 국내도 있는 버그 일단 해외만 적용 -#define MODIFY_MINLEVEL_EXPRATE_20080630 - -// [업데이트] 장착된 아이템은 못 팔도록 수정(riverstyx) -// 클라이언트 버그로 확인됨 디파인 삭제 예정 20081024 (riverstyx) -//#define ADD_NOT_SELL_EQUIPITEM_20080625 - -// [버그수정] 악마의 광장 확장된 맴에 종료 30초전 메시지 안가는 버그 수정 (riverstyx) -// 국내도 있는 버그 일단 해외만 적용 -#define MODIFY_DEVILSQUARE_CLOSE_MSG_20080717 - -// 악마의 광장 조합 아이템 드랍 관련 - 해외만 적용(grooving) -#define DEVILSQARE_COMBINE_ITEM_DROP_20090114 - -// 전투축구 이벤트 일반 유저 명령어로 실행 불능 버그 수정 - 해외만 수정(grooving) -#define BATTLESOCCERWAR_COMMAND_BUGFIX_20090310 - -// [버그수정] 세트 아이템 버그 수정(riverstyx) -//#define MODIFY_SETITEM_BUGFIX_20080731 - -// [버그수정] 공성서버 접속 사용자가 월드서버(사용자 MAX)로 이동시 발생하는 투명 버그 수정 -// 국내도 발생가능(riverstyx) -#define MODIFY_MOVECOMMAND_BUGFIX_20080806 - -// [버그수정] 장착된 아이템 내구도 체크 (riverstyx) -// 일단 EQUIPMENT_WEAPON_RIGHT, EQUIPMENT_WEAPON_LEFT 체크 - 국내도 있는 버그 일단 해외만 적용 -#define MODIFY_EQUIPITEM_CHECKDURABILITY_20080811 - -// [버그수정] 아이템 구매/판매 시 구매(60) 판매(18) 제한에 걸린경우 처리함(riverstyx) -#define MODIFY_SELLBUYITEM_20080811 - -// [버그수정] 요정 세트 아이템 착용 후 힘스탯이 올라간 상태에서 아이스애로우를 배우고 -// 세트 아이템을 벗어 아이스애로우 사용 가능 스탯이 아닌 상태에서도 시전되는 버그(riverstyx) -#define MODIFY_SKILL_ICEARROW_AND_ADD_DEXTERITY_BUGFIX_20080820 -#endif - -// 해외 부분유료화가 켜 있는 상태에서는 설정되면 안되는 디파인들 -#else -#ifdef FOR_KOREA -#if GAME_VERSION >= G_V_S2_2 -// [업데이트] 로그 추가 6차 (hnine) -#define EXTEND_LOG_SYSTEM_06_20070308 -#endif -////////////////////////////////////////////////////////////////////////// -// -// ** 아이템을 지급하는 NPC 정리(RKFKA) -// 루크(PC방 활성화): PC방에서 지급 / EventDB에 등록된 유저 / 한 번 / 아이템백에서 랜덤 지급 -// 레오(화이트엔젤) : 접속하면 지급 / EventDB에 등록된 유저 / 한 번 / 아이템백에서 랜덤 지급 -// 앨런(레드이벤트) : 접속하면 지급 / 모든 유저 / 하루에 한 번 / 아이템백에서 랜덤 지급 -// -////////////////////////////////////////////////////////////////////////// -#if GAME_VERSION >= G_V_S3_E2 -// [업데이트] 아이템지급 NPC 도우미 앨런 추가(RKFKA) -#define ADD_ITEM_GIVE_NPC_ALAN_20070823 -#endif -#endif // FOR_KOREA -#endif // ADD_PARTIALY_CHARGE_ON - -#if GAME_VERSION >= G_V_S4_5 -// 해외 부부분유료화 아이템구매 요청결과 추가(goni) -#define UPDATE_BUY_CASHITEM_ERROR_CODE_20090410 -#endif - -// 해외 부분유료화 5차 업데이트 (grooving) -#ifdef ADD_PARTIALY_CHARGE_SYSTEM_05_20080930 -// [업데이트] 5차 부분유료화 부활, 이동 부적 (grooving) -#define ADD_TELEPORT_CHARM_ITEM_20080930 -#endif //ADD_PARTIALY_CHARGE_SYSTEM_05_20080930 - -// 부분유료화 4차 업데이트 -#ifdef ADD_PARTIALY_CHARGE_SYSTEM_04_20080723 -// [업데이트] 카오스 부적. 카오스부적 실패시 소멸되는 아이템 보호 //grooving -#define ADD_CHAOSMIXCHARM_ITEM_20080702 - -// [업데이트] 4차 아이템 추가(치유의 인장, 신성의 인장) riverstyx -#define ADD_CASHITEM_4RD_MARK_20080723 - -// [업데이트] 4차 아이템 추가(전투의 스크롤, 강화의 스크롤) riverstyx -#define ADD_CASHITEM_4RD_SCROLL_20080723 -#endif // ADD_PARTIALY_CHARGE_SYSTEM_04_20080723 - -// 부분유료화 3차 업데이트 -#ifdef ADD_PARTIALY_CHARGE_SYSTEM_03_20080407 -// [업데이트] 카오스카드 조합 시스템 확장 (hnine) -#define MODIFY_EXPEND_CHAOSCARD_SYSTEM_20080326 - -// [업데이트] 소환술사 캐릭터 카드 (riverstyx) -#define ADD_CHARCARD_SUMMONER_20080313 - -// [업데이트] 버프 아이템 캐쉬˜伺낯 -#define MODIFY_BUFF_SYSTEM_EXTENTION_CASHSHOP_20080318 - -#ifdef MODIFY_BUFF_SYSTEM_EXTENTION_CASHSHOP_20080318 -// [버그수정] 버프 아이템(비약) 사용만료 후 능력치 계산을 다시 하도록 수정(riverstyx) -#define MODIFY_BUFFITEM_MEDICINE_20080424 -#endif // MODIFY_BUFF_SYSTEM_EXTENTION_CASHSHOP_20080318 - -// [버그수정] 버프 아이템(비약) 셋트 아이템 능력치 계산 부분 수정(riverstyx) -#define MODIFY_BUFFITEM_MEDICINE_SETITEM_20080424 - -// [버그수정] 버프 아이템(인장) 유지의 인장 사용시 블러드 캐슬 경험치가 증가되는 버그 수정(riverstyx) -#define MODIFY_MARKITEM_20080506 - -// [버그수정] 버프 아이템(비약) 셋트 아이템 능력치 계산 부분 수정(riverstyx) -#define MODIFY_BUFFITEM_MEDICINE_SETITEM_20080709 -#endif // ADD_PARTIALY_CHARGE_SYSTEM_03_20080407 - -// [업데이트] 인장 아이템 추가 (hnine) -#define ADD_PCS_MARK_OF_EXP_20070205 - -#ifdef ADD_PARTIALY_CHARGE_SYSTEM_02_20070423 -// [버그수정] 칼리마 자유 입장권 사용 실패 부분 처리 추가 (hnine) -#define MODIFY_KALIMA_FREETICKET_USE_RESULT_20070830 - -// [버그수정] 리셋열매 결과 코드 추가 (hnine) -#define MODIFY_RESET_FRUITS_RESULT_TYPE_20070821 -// [버그수정] 엘도라도 이벤트의 옵션 로드 순서를 바꿈 (hnine) -#define MODIFY_ELDORADO_EVENT_OPTION_LOAD_SEQUEANCE_20070821 - -// [버그수정] ItemAddOption의 추가효과를 Add변수로 적용시키도록 변경 (hnine) -#define MODIFY_ITEMADDOPTION_VARIABLE_20070725 -// [업데이트] 확장 열매 사용시 감소 스텟이 기본 스텟 이하일 경우 기본 스텟 까지만 초기화 되도록 수정 (hnine) -#define MODIFY_PCS_FRUITS_EX_DECREASE_POINT_SET_DEFAULT_20070806 -// [버그수정] 캐쉬 아이템 이동 옵션에 희귀 아이템 티켓 6 추가 (hnine) -#define MODIFY_ADD_CASHITEM_MOVE_CHECK_ITEM_20070821 -// [버그수정] ItemAddOption의 옵션은 할로윈 아이템과 부분유료화 아이템의 효과를 분리해서 적용시킨다. -#define MODIFY_ITEMADDOPTION_SET_EFFECT_20070801 -// [업데이트] 아이탬 구매시 아이템의 최대 겹치기 갯수만큼 더해주도록 설정 (hnine) -#define MODIFY_OVERLAP_ITEM_DURATION_20070730 -// [업데이트] ItemAddOption에서 카테고리 별로 로드 하도록 설정 (hnine) -#define MODIFY_ITEMADDOPTION_LOAD_CATEGORY_20070712 -// [업데이트] 기간제 아이템 슬롯 확장 (hnine) -#define MODIFY_PERIODITEM_SLOT_EXTEND_20070423 -// [업데이트] 캐쉬 아이템 리스트 우선 순위 추가 (hnine) -#define ADD_CASH_ITEMLIST_RATIO_20070430 -// [업데이트] 엘리트 물약 (풀 회복 물약) 추가 (hnine) -#define ADD_FULL_RECOVERY_POTION_20070719 -// [업데이트] 열매 시스템 확장 (hnine) -#define ADD_PCS_FRUITS_POINT_EXTENTION_20070430 -// [업데이트] 면죄부 추가 (hnine) -#define ADD_PCS_INDULGENCE_20070504 -// [업데이트] 100% 회복 물약 추가 (hnine) -#define ADD_PCS_FULL_RECOVERY_POTION_20070508 -// [업데이트] 멥 이동 제한을 확인하는 상태 수정 (hnine) -#define MODIFY_MAPMOVEBOUNCE_CHECK_OPTION_20070521 -// [업데이트] 강화의 비약 추가 (hnine) -#define ADD_PCS_IMPROVE_POTION_20070718 -// [업데이트] 엘리트 스크롤 추가 (hnine) -#define ADD_ELITE_SCROLL_20070521 -#endif // ADD_PARTIALY_CHARGE_SYSTEM_02_20070423 - -#ifdef ADD_PARTIALY_CHARGE_SYSTEM_01_20070110 -// [버그수정] 개인 상점을 연 상태로 카오스 카도 조합을 할 수 없음. (hnine) -#define MODIFY_CHAOSCARD_MIX_BLOCK_PSHOP_USE_20070713 - -// [버그수정] 블러드캐슬 자유 입장권 관련 버그 수정 (hnine) -#define MODIFY_BLOODCASTLE_ENTER_ITEMCHECK_20070627 - -// [버그수정] 기간제 아이템 관리를 위한 크리티컬섹션 추가 (hnine) -//#define MODIFY_PERIOD_ITEM_SYSTEM_CRITICALSECTION_20070619 - -// [버그수정] 기간제 아이템 구입 시 DB에 이미 사용 중인 아이템이 있는지 확인 한다. (hnine) - 임시 삭제 -//#define MODIFY_CHECK_PERIOD_ITEM_LIST_AT_ITEMBUY_20070619 - -#if GAME_VERSION >= G_V_S2_2 -#ifndef FOR_JAPAN -// [업데이트] 인장 효과를 다른 유저에게도 보여준다. (hnine) -#define MODIFY_PERIODITEM_EFFECT_ADD_VIEWPORT_20070601 -#endif // FOR_JAPAN - -// [버그수정] 블러드 캐슬 자유 입장권 사용시 메시지 버그 수정 (hnine) -#define MODIFY_FREE_BLOODCASTLE_ENTER_CHECK_20070531 - -// [버그수정] 인장 효과 크라이울프 보상 적험치 적용 (hnine) -#define MODIFY_MARKITEM_EFFECT_USE_CRYWOLF_REWARD_20070502 - -// [버그수정] 유지의 인장 효과가 접속 종료 시간에 사라지는 버그 수정 (hnine) -#define MODIFY_PERIODITEM_EFFECT_DURING_CLOSETIME_20070416 -#endif - -// [버그수정] 플러스 아이템 조합시 로그 변경 (hnine) -#define MODIFY_PLUSITEM_CHAOSMIX_LOG_BUGFIX_20070330 - -#if GAME_VERSION >= G_V_S2_2 -// [버그수정] 이벤트 맵에서의 인장 아이템 효과 삭제 - 유지의 인장 제외 (hnine) -#define MODIFY_MARKITEM_EFFECT_REMOVE_IN_EVENTMAP_20070328 - -// [버그수정] 행운의 부적 사용 범위에 날개 조합 추가 (hnine) -#define MODIFY_LUCKYCHARM_ADD_WINGMIX_20070328 -#endif - -// [버그수정] 게임 종료시 카오스 조합 아이템 리스트 저장 (hnine) -#define MODIFY_SAVE_CHAOSBOX_ITEMLIST_AT_LOGOUT_20070328 - -// [버그수정] 부분 유료화 기간제 시스템 1차 수정 (hnine) -#define MODIFY_PERIOD_ITEM_SYSTEM_BUGFIX_20070326 - -#if GAME_VERSION >= G_V_S2_2 -// [버그수정] 잭 오 랜턴의 축복 물약 사용시 튕기는 버그 수정 (hnine) -#define MODIFY_JOL_BLESS_POTION_USE_EFFECT_20061030 -// [업데이트] 할로윈 데이 이벤트 작업 (hnine) -#define HALLOWINDAY_JACK_O_LANTERN_EVENT_20061017 -#endif - -// [업데이트] 캐쉬 샵 시스템 추가 (hnine) -#define ADD_PARTIALY_CHARGE_CASH_SHOP_20070117 -// [업데이트] 캐쉬 아이템 기간제 시스템 추가 (hnine) -#define ADD_PARTIALY_CHARGE_PERIOD_SYSTEM_20070205 -// [업데이트] 복권 아이템 (hnine) -#define ADD_PCS_LOTTERY_SYSTEM_20070117 -// [업데이트] 인장 아이템의 맵 이동 제한 (hnine) -#define ADD_PCS_MARKITEM_MAP_MOVE_BOUND_20070221 -// [업데이트] 이벤트 맵 자유 입장권 -#define ADD_PCS_EVENT_MAP_FREE_TICKET_20070110 -// [업데이트] 조합률 상승 아이템 -#define ADD_PCS_CHAOSMIX_SUCCESS_RATE_UPGRADE_CHARM_20070111 -// [업데이트] 카오스 조합 확률 조정 -#define MODIFY_CHAOSMIX_RATE_FIX_20070304 -// 2차 업데이트 예정 컨텐츠 -#endif // ADD_PARTIALY_CHARGE_SYSTEM_01_20070110 - -#if GAME_VERSION >= G_V_S2_2 -// 부분 유료화 아이템 추가를 위해 필요한 디파인들. -// [업데이트] 캐쉬 아이템 효과 적용을 위한 ItemAddOption.h 추가 -#define ITEM_ADD_OPTION_20061019 -#endif - -// [업데이트] 젠증가 옵션 추가(commonserver.cfg) (RKFKA) -#define ADD_ZEN_OPTION_20070903 - -#if GAME_VERSION >= G_V_S3_E1 -// [업데이트] 이벤트 맵_환영 사원(goni) -#define ADD_EVENT_MAP_ILLUSION_TEMPLE_20070328 -#endif - -#ifdef ADD_EVENT_MAP_ILLUSION_TEMPLE_20070328 -// [버그수정] 피의두루마리 조합재료 가격표시 오류 수정 (goni) -#define MODIFY_ILLUSIONTEMPLE_ITEMVALUE_BUFGIX_20070904 -#endif - -// [버그수정] 개인이 개인 공격시 정방 안걸리는 버그 수정 (goni) -#define MODIFY_SELFDEFENSE_20070904 - -#if GAME_VERSION >= G_V_S3_E1 -// [업데이트] 추석 몬스터 이벤트(RKFKA) -#define CHUSEOK_MONSTER_EVENT_20070823 - -// [업데이트] 공성 직인 등록중 실패시 누적시간 감소 패널티 삭제 (RKFKA) -#define MODIFY_CASTLE_CROWN_ACCESS_TIME_20070828 -#endif - -// [업데이트] 아이템 백을 읽을 때 기본으로 사용할 함수 설정 (RKFKA) -#define MODIFY_EVENTITEMBAG_BASIC_SET_20070823 - -// [버그수정[ 8 월 버그수정(goni) -#define MODIFY_0708_BUFFIX_20070820 - -#ifdef ADD_EVENT_MAP_ILLUSION_TEMPLE_20070328 -// [버그수정] 환영사원 버그수정_6 (goni) -#define MODIFY_ILLUSIONTEMPLE_BUGFIX_6_200708013 -#endif - -#if GAME_VERSION >= G_V_S3_E1 -// [업데이트] 로그 추가 8차 (hnine) -#define EXTEND_LOG_SYSTEM_08_20070810 -#endif - -// [버그수정] 시련의땅 입장 금액 조건확인 수정 (RKFKA) -#define MODIFY_CASTLE_HUNTZONE_TAX_BUGFIX_20070806 - -#ifdef ADD_EVENT_MAP_ILLUSION_TEMPLE_20070328 -// [버그수정] 환영사원 버그수정_5(goni) -#define MODIFY_ILLUSIONTEMPLE_BUGFIX_5_20070807 - -// [버그수정] 환영사원 버그수정_4(goni) -#define MODIFY_ILLUSIONTEMPLE_BUGFIX_4_20070802 -#endif - -// [버그수정] PK 시스템 개선 버그수정_공성시 PK 유저 파티 패널티 제거(goni) -#define MODIFY_PK_SYSTEM_BUGFIX_2_20070731 - -#ifdef ADD_EVENT_MAP_ILLUSION_TEMPLE_20070328 -// [버그수정] 환영사원 버그수정_3, MAX_OBJ증가(goni) -#define MODIFY_ILLUSIONTEMPLE_BUGFIX_3_20070731 -#endif - -#if GAME_VERSION >= G_V_S3_E1 -// [로그수정] 3차전직 로그수정(RKFKA) -#define MODIFY_LOG_THIRD_CHANGEUP_20070801 - -// [로그추가] 환영사원 로그추가(goni) -#define ADD_LOG_ILLUSION_TEMPLE_1_20070727 -#endif - -#ifdef ADD_EVENT_MAP_ILLUSION_TEMPLE_20070328 -// [버그수정] 환영사원 버그수정_2(goni) -#define MODIFY_ILLUSIONTEMPLE_BUGFIX_2_20070724 - -// [버그수정] 환영사원 버그수정_1(goni) -#define MODIFY_ILLUSIONTEMPLE_BUGFIX_1_20070723 -#endif - -// [버그수정] 최대 대미지 유저 검색시 버그수정(goni) -#define MODIFY_MAXHITUSER_BUG_FIX_20070711 - -#if GAME_VERSION >= G_V_S3_E1 -// 환영사원 스크립트 보강( 보상경험치 증가율, 최소 Skill 사용 횟수 )(goni) -#define UPDATE_ILLUSION_TEMPLE_SCRIPT_20070710 -#endif - -#if GAME_VERSION >= G_V_S3_E1 -// [버그수정] 블러드 캐슬 시작 시간 변경 버그 수정(goni) -#define MODIFY_BLOODECASTLE_SCADULE_BUGFIX_20070710 -#endif - -#if GAME_VERSION >= G_V_S3_E1 -// [업데이트] 환영사원 비활성화시 수정(goni) -#define MODIFY_ILLUSION_TEMPLE_SCEDULE_20070703 - -// [업데이트] 환영 펜릴 추가(goni) -#define ADD_ILLUSION_FENRIR_20070703 -#endif - -#ifdef MODIFY_QUEST_SYSTEM_20070525 -// [버그수정] 퀘스트 몬스터 킬카운트 정보 초기화 버그 수정 (RKFKA) -#define MODIFY_QUEST_MONSTER_KILL_COUNT_BUGFIX_20070704 -#endif - -#if GAME_VERSION >= G_V_S3_E1 -// [업데이트] 블러드 캐슬 시작 시간대(짝수 홀수) 스크립트로 변경(goni) -#define UPDATE_BLOODECASTLE_SCADULE_20070702 - -// [업데이트] 환영사원 들어가기전 MAX_MAP 수정(goni) -#define UPDATE_BEFORE_ILLUSION_TEMPLE_MAX_MAP_20070702 - -// [버그수정] 환영사원 버그수정(goni) -#define MODIFY_ILLUSION_TEMPLE_20070629 - -// [업데이트]400레벨 달성시 파티원로그 추가(goni) -#define ADD_LOG_400LEVELUP_PARTY_20070628 - -// [업데이트] 3차 날개 추가 (RKFKA) -#define ADD_THIRD_WING_20070525 -// [업데이트] 3차 전직 시스템 (RKFKA) -#define THIRD_CHANGEUP_SYSTEM_20070507 - -// [버그수정] 퀘스트 시스템 버그수정 및 보완 (RKFKA) -#define MODIFY_QUEST_SYSTEM_20070525 - -// [업데이트] 악마의 광장 시작시간 스케줄 추가(goni) -#define UPDATE_DEVIL_SQUARE_START_TIME_20070511 -#endif - -// [업데이트] 조합 시스템 개선 (RKFKA) -#define MODIFY_MIX_SYSTEM_20070518 - -// [버그수정] 라이프스톤을 던지자마자 적용되는 버그(생성시간 이후에 적용되어야 함) (RKFKA) -#define MODIFY_LIFESTONE_BUGFIX_20070426 - - -#if GAME_VERSION >= G_V_S3_E1 -// [업데이트] Shop14 추가-> WzVersionManager, WzAuthGs, WzFsGate 같이 수정(RKFKA) -#define ADD_SHOP_14_20070308 -#endif - -// [버그수정] 레알서버 고가품 등록아이템 드랍버그 수정(goni) -#define MODIFY_VALUABLE_ITME_BUGFIX_20070828 - -// [버그수정] 용사, 전사, 마법의 반지 거래 버그수정(goni) -#define MODIFY_MAGICIARINGRING_TRADE_BUGFIX_20070328 - -// [버그수정] PK 시스템 개선 버그 수정_2단계 이상 살인마와 파티중인 캐릭을 죽였을경우 살인마가 되는부분 수정(goni) -#define MODIFY_PK_SYSTEM_BUGFIX_20070323 - -#if GAME_VERSION >= G_V_S3_E1 -// [업데이트] 로그 추가 7차 (hnine) -#define EXTEND_LOG_SYSTEM_07_20070320 - -// [업데이트] 블러드 캐슬 성문 생성 로그 추가(goni) -#define ADD_LOG_BLOODCASTLE_DOOR_20070321 -#endif - -// [버그수정] 카오 유저가 블러드 캐슬에 입장을 위해 천사와 대화시 메시지 수정(goni) -#define MODIFY_BLOODCASTLE_PK_USER_ENTER_MESSAGE_20070321 - -// [버그수정] 정당방위 종료시 종료 실패 메시지 추가(goni) -#define MODIFY_SELFDEFENSE_CLOSE_20070321 - -// [버그수정] 파티 경험치 획득 버그 2차 수정(goni) -#define MODIFY_PARTY_PLAY_EXPERIENCE_2_20070320 - -// [버그수정] 카오스캐슬 안전지대에서만 입장가능으로 수정(goni) -#define MODIFY_ENTER_CHOSCASTLE_BUGFIX_20070316 - -#if GAME_VERSION >= G_V_S3_E1 -// [업데이트] 변신 반지 착용시 뷰포트 정보에 장비정보 추가(goni) -#define UPDATE_VIEWPORTCREATE_CHANGE_ADD_CHARSET_20070314 - -// [업데이트] 고가품 설정 아이템 추가 및 삭제(goni) -#define UPDATE_VALUABLE_ITEM_20070307 - -// [버그수정] 잃어버린표식 이동시 아이템 사라지는 버그수정(goni) -#define MODIFY_MOVE_KUNDUN_MARK_20070307 - -// [업데이트] 폭죽판매 NPC(goni) -#define ADD_FIRECRACKER_NPC_20070306 - -#if GAME_VERSION >= G_V_S4_6 -// [업데이트] PK 시스템 개선(goni) -#define UPDATE_PK_SYSTEM_20070302 -#endif - -// [업데이트] 세도우 팬텀 공방 보완(goni) -#define UPDATE_SHADOW_PHANTOM_20070302 - -// [업데이트] GM 기능 추가: GM 선물상자추가, GM 소환지역 추가, GM 마크 활성화, GM 콘솔 기능 추가, GM 캐릭터 변신반지 추가(goni) -#define UPDATE_GM_FUNCTION_20070228 - -// [업데이트] 이벤트 아이템 상자 드롭엑설런트 아이템 로그 추가(goni) -#define ADD_LOG_EVENT_DROP_EXITEM_20070308 -#endif - -// [버그 수정] 상자 발 밑에 떨어지는 현상 수정(goni) -#define MODIFY_BOX_DROP_POSITION_20070308 - -// [버그수정] 공성전 시작시 시련의 땅에 있는 모든 유저를 로랜협곡 앞마당으로 보낸다.(RKFKA) -#define MODIFY_CASTLEHUNTZONE_USER_BUGFIX_20070223 - -// [소스수정] 데빌스퀘어에서 랭킹서버로 보내는 주기적인 메세지 삭제(RKFKA) -#define DELETE_DEVILSQURE_MESSAGE_TO_RANKINGSERVER_20070223 - -#if GAME_VERSION >= G_V_S3_E1 -// [버그 수정] 변신반지 거래 버그(goni) -#define MODEFY_CHAGNE_RING_TRADE_INVENTORY_20070213 - -// [버그 수정] 잃어버린 지도를 수동으로 겹칠때 표식이 사라지지 않는 버그(goni) -#define MODIFY_CREATE_LOSTMAP_ITEM_20070209 - -// [버그 수정] 파티후 다른지역에서 사냥시 경험치 획득 버그_레벨차 200이상(goni) -#define MODIFY_PARTY_PLAY_EXPERIENCE_20070208 - -// [업데이트] 발렌타인데이 상자 드롭엑설런트 아이템 로그 추가(goni) -#define ADD_LOG_VALENTINES_DAY_DROP_EXITEM_20070212 - -// [버그 수정] 발렌타인데이 상자 발 밑에 떨어지는 현상 수정(goni) -#define MODIFY_VALENTINES_DAY_BOX_DROP_20070202 - -// [업데이트] 설날복주머니 추가(goni) -#define UPDATE_NEWYEAR_LUCKYBAG_MONSTER_20070131 - -// [업데이트] 카오스캐슬 시스템변경 - 시간이 끝나 유저가 1명 남으면 몬스터가 있어도 성공(RKFKA)->적용 보류 -//#define MODIFY_CHAOSCASTLE_SYSTEM_CHANGE_SUCCESS_FLOW_20070129 - -// [업데이트] 물자보급관 파멜라, 안젤라 추가(goni) -#define UPDATE_QUARTERMASTER_NPC_20070122 -#endif - -// [업데이트] 확률 별 이벤트 아이템 가방 추가(goni) -#define UPDATE_EVENT_ITEM_BAG_EXTEND_20070131 - -// [업데이트] 카오스캐슬에서 몬스터 남은 수를 판단하는 루틴 변경(RKFKA) -#define MODIFY_CHOSCASTLE_MONSTER_COUNT_RECAL_20070119 - -// [버그수정] 법사 스킬 악령 서버판단으로 변경 (RKFKA) -> 적용보류 -//#define MODIFY_SKILL_EVEIL_AT_SERVER_20070117 - -#if GAME_VERSION >= G_V_S3_E1 -// [업데이트] 용사, 전사(우정의 돌)의 반지 추가/수정(goni) -#define UPDATE_LOWLEVEL_SUPPORT_RING_20070119 - -// [버그추적] 카오스캐슬에서 몬스터가 남아 실패한 경우 몬스터의 좌표를 로그로 남긴다.(RKFKA) -#define ADD_LOG_CHAOSCASTLE_LEFT_MONSTER_ATTR_20070118 - -// [업데이트] 방어력/공격력향상 스킬 적용시 이전보다 조건이 나쁘면 적용하지 않는다.(RKFKA) -#define MODIFY_ELF_DEFENCE_ATTACK_VALUE_UP_SKILL_20070110 -#endif - -// [버그수정] 알바트로스 보우 버그 수정 (goni) -#define MODIFY_ALBATROS_BOW_BUGFIX_20070105 - -#if GAME_VERSION >= G_V_S2_2 -// [업데이트] 크리스마스의 별 아이템 추가 (RKFKA) -#define CHRISTMAS_STAR_20061211 - -// [업데이트] 크리스마스 이벤트 산타크로스 변신반지 (hnine) -#define CHRISTMAS_SANTA_POLYMORPH_RING_20061117 - -// [업데이트] 공성전 참여길드로 선정된 길드의 점수를 표기한다. (RKFKA) -#define ADD_CASTLE_TOTAL_GUILD_SCORE_20061123 - -// [업데이트] 로그 추가 5차 (hnine) -#define EXTEND_LOG_SYSTEM_05_20060823 - -// [버그수정] 행운의 호박이 드롭되는 버그 수정 (hnine) -#define MODIFY_BLOCK_PUMPKIN_OF_LUCK_DROP_20061120 -#endif - -// [버그수정] 카오스캐슬 버그 수정 2차 (RKFKA) -#define MODIFY_CHAOSCASTLE_BUGFIX2_20061026 - -#if GAME_VERSION >= G_V_S2_2 -// [버그수정] 잭 오 랜턴의 축복 물약 사용시 튕기는 버그 수정 (hnine) -#define MODIFY_JOL_BLESS_POTION_USE_EFFECT_20061030 - -// [버그수정] 조화의 보석 옵션의 초기값이 FF로 저장되는 버그 수정 (hnine) -#define MODIFY_HARMONY_OPTION_INIT_VALUE_FIX_20061019 - -// [업데이트] 할로윈 데이 이벤트 작업 (hnine) -#define HALLOWINDAY_JACK_O_LANTERN_EVENT_20061017 - -// [업데이트] 할로윈 변신반지 작업 (hnine) -#define HALLOWINDAY_JACK_O_LANTERN_MORPH_RING_20061017 -#endif - -#if GAME_VERSION >= G_V_99B -// 카오스 캐슬 -#define CHAOSCASTLE_SYSTEM_20040408 // 카오스 캐슬 이벤트 -#define CHAOSCASTLE_TIME_BUGFIX_20040508 // 카오스 캐슬 시간 버그 수정 - -// 반지의 제왕 이벤트 -> 반지 던지기 이벤트 -#define RING_EVENT_ITEMBOX_20031124 - -// 내 친구 이벤트 관련 (b4nfter) -//#define FRIENDSHIP_STONE_EXCHANGE_20040206 // 우정의돌 환전 시 체크 -#define FRIENDSHIP_EVENT_RING_BOX_20040211 // 전사의반지 이벤트 -#endif - -#ifdef CHAOSCASTLE_SYSTEM_20040408 -// [버그수정] 카오스캐슬 버그 수정 (RKFKA) -#define MODIFY_CHAOSCASTLE_BUGFIX_20060919 -#endif - -#if GAME_VERSION >= G_V_S2_2 -// [업데이트] 카오스캐슬 제도 보상을 삭제한다. (hnine) -#define MODIFY_DELETE_ZETTO_EVENT_20061121 -#endif - -#if GAME_VERSION >= G_V_S4_5 -// [업데이트] PC방 미납자 메시지를 주기적으로 출력하도록 수정 (hnine) -#define MODIFY_PCBANG_DEFAULTER_MESSAGE_20061011 -#endif - -// [버그수정] 칸투르 나이트메어전 성공,실패 초기화 버그 수정(RKFKA) -#define MODIFY_KANTURU_NIGHTMARE_INIT_BUGFIX_20061010 - -#ifdef NEW_SKILL_FORSKYLAND -// [버그수정] 요정 아이스애로우스킬. 미스가 난 경우 아이스적용 안되도록 수정. ( hjlim ) -#define MODIFY_ELF_ICEARROWSKILL_BUGFIX_20060914 -#endif - -// [버그수정] 다크로드 - 어스퀘이크 스킬. 필요에너지 버그 ( hjlim ) -#define MODIFY_DARKLORD_EARTHQUAKE_REQENERGY_BUGFIX_20060914 - -// [버그수정] 380 아이템 드롭시 380옵션이 사라지는 버그 수정 (hnine) -#define MODIFY_380_ITEM_OPTION_DELETE_AT_DROP_20060919 - -// [버그추적] 카오스캐슬, 블러드캐슬 버그 추적 로그 추가(RKFKA) -#define ADD_LOG_FOR_CASTLE_BUG_20060911 - -// [업데이트] 해외 시즌 2 패치를 위한 수정 ( PC방 전용 이벤트의 에러를 처리를 위한 디파인) -#ifndef FOR_KOREA -#define MODIFY_SEASON_02_20060908 -#endif - -#if !defined( MODIFY_SEASON_02_20060908 ) && GAME_VERSION >= G_V_S4_5 -// [업데이트] PC방 활성화 이벤트 (RKFKA) - PC방 쿠폰이벤트를 그대로 사용하되 아이템 드랍처리만 변경되었다. -#define PCBANG_REVITALIZATION_EVENT_20060830 - -// [업데이트] 화이트엔젤 아이템 지급 이벤트 (RKFKA) -#define WHITEANGEL_GET_ITEM_EVENT_20060822 - -// [버그수정] PC방 이벤트 카오스캐슬 무료 입장 - 버그 수정(RKFKA) -#define MODIFY_PCBANG_EVENT_FREE_CHAOSCASTLE_20060331 - -// [업데이트] PC방 이벤트 - 카오스캐슬 무료입장 (RKFKA) -#define PCBANG_EVENT_FREE_CHAOSCASTLE_20060307 - -// [업데이트] PC방 전용 이벤트 - 쿠폰발행 이벤트 (hnine) -#define PCBANG_COUPON_EVENT_20060124 - -// [업데이트] PC방 전용 이벤트 - 칼리마 무료이동 이벤트 (hnine) -#define PCBANG_FREE_KALIMA_EVENT_20060124 -#endif - -// [버그추적] 캐슬 몬스터 버그 추적 로그 추가 (RKFKA) -#define ADD_LOG_CASTLE_MONSTER_BUG_FIX_20060911 - -#ifdef ADD_NEW_SKILL_FOR_CASTLE_01_20041116 -// [버그수정] 착용한 변신반지를 빼면 클라이언트에서 정보를 리셋함 - 킬카운트 정보를 보내준다. -#define MODIFY_KILL_COUNT_BUGFIX_20060908 -#endif - -#if GAME_VERSION >= G_V_S2_2 -// [업데이트] 엘리트해골전사변신반지 추가(RKFKA) -#define ADD_ELITE_SKELETON_WORRIOR_CHANGE_RING_20060830 -#endif - -// [버그수정] AI Automata 딜레이 적용 버그 수정 ( hjlim ) -#define MODIFY_MONSTERAI_AUTOMATA_DELAY_BUGFIX_20060907 - -#if GAME_VERSION >= G_V_S2_2 -// [버그수정] 크라이울프 보스 몬스터는 경험치를 주지 않는다. - 발가스, 다크엘프, 발리스타 (hnine) -#define MODIFY_NON_EXP_IN_CRYWOLF_MONSTER_20060530 - -// [버그수정] 맵 이동시 칼리마 게이트 채크 부분 수정 (hnine) -#define MODIFY_MAP_MOVE_LEVEL_MESSAGE_SEND_20060830 - -// [버그수정] 로그 시스템 확장 (2,3차) 내용 수정 (hnine) -#define MODIFY_LOG_SYSTEM_2_3_20060828 - -// [버그수정] 파이어스크림스크롤 드랍 가능하게 수정 - 시즌2 전용 (apple) -#define MODIFY_ITEM_DROP_FIRESCREAMSCROLL_20060830 -#endif - -// [버그수정] 아이템 드랍 버그 수정 (apple) -// 1) Type 당 배정되어 있는 Index 의 최대값에 해당되는 아이템 드랍 안 되는 버그 수정 -// 2) 법서의 드랍 가능 Index 최대 범위 수정 -#define MODIFY_ITEM_DROP_MAXINDEX_20060830 - -// [버그수정] 크라이울프 HeroList 로그 버그 ( hjlim ) -#define MODIFY_CRYWOLF_HEROLIST_LOG_BUGFIX_20060828 - -#if GAME_VERSION >= G_V_S2_2 -// [업데이트] 로그 시스템 확장 - 3차 (hnine) -#define EXTEND_LOG_SYSTEM_04_20060823 -#endif - -// [업데이트] 칸투르 보스전 타임어택 이벤트 (RKFKA) - 20061018 이벤트 종료로 삭제(RKFKA) -//#define KANTURU_TIMEATTACK_EVENT_20060822 -#if GAME_VERSION >= G_V_99B -// [버그수정] 맵 서버 이동 시 캐릭터 저장 Flag 수정(중국적용 후 모두 적용) ( hjlim ) -#define MODIFY_MAPSERVERMOVE_FLAG_BUGFIX_20060817 -#endif - -#if GAME_VERSION >= G_V_S2_2 -// [업데이트] 조화의보석 메시지 WTF 추가 ( hjlim ) -#define ADD_JEWEL_OF_HARMONY_WTFMESSAGE_20060818 - -// [업데이트] 로그 시스템 확장 - 2차 (hnine) -#define EXTEND_LOG_SYSTEM_03_20060816 - -// [버그수정] 380 추가 옵션 스크립트 타입 확장 ( hjlim ) -#define MODIFY_380ITEM_SCRIPTTYPE_EXTEND_20060811 - -//[업데이트] PC방 전용 체험서버에서 접속시 이동 가능 맵 설정 (hnine) -#define MODIFY_KANTURU_MAPNUMBER_CHECK_20060807 - -// [업데이트] 타겟을 가지는 트랩을 위해 PMSG_ACTIONRESULT에 타겟 인덱스 추가(hnine) -#define ADD_TRAP_OBJECT_EXTEND_20060731 - -// [업데이트] 몬스터 AI & 스킬 수정 ( hjlim_RKFKA ) -#define MODIFY_NEW_MONSTER_AI_01_2006724 -#define MODIFY_NEW_MONSTER_SKILL_01_20060724 -#endif - -// [버그수정] 350 아이템 2차 버그 수정. 신규아이템추가 시 주의 ( hjlim ) -#define MODIFY_350ITEM_BUGFIX2_20060823 - -// [버그수정] 몬스터 밀기 스킬 기본값 적용 / 독 딜레이 없이 즉시 처리 적용 ( hjlim ) -#define MODIFY_MONSTERSKILL_SPRING_POISON_BUGFIX_20060817 - -//[버그수정] 350 아이템 추가 버그 수정 ( hjlim ) -#define MODIFY_350ITEM_BUGFIX_20060811 - -// [버그수정] 맵이동 최소 레벨 체크 수정 ( hjlim ) -#define MODIFY_CHECK_MOVELEVEL_20060731 - -#if !defined(GAMESERVER_TO_CASTLESIEGESERVER) && GAME_VERSION >= G_V_S2_2 -// [업데이트] 칸투르 보스전 추가(RKFKA) -#define ADD_KANTURU_20060627 -#endif - - -//[버그수정] 조화의보석/380아이템 DB버전 관련 버그 수정.매우 중요. ( hjlim ) -#define MODIFY_JEWELOFHARMONY_380OPTION_DBVERSION_BUGFIX_20060727 - -#if GAME_VERSION >= G_V_S2_2 -// [업데이트] 다크로드 스킬 파이어 스크림 추가(RKFKA) -#define ADD_SKILL_DARKLOAD_FIRESCREAM_20060601 - -// [업데이트] 마이너스 스탯 열매 개선 ( hjlim ) -#define MODIFY_MINUS_FRUIT_POINT_20060622 -#endif - -// [버그수정] 유저 종료 시 귓말 캐시에서 캐릭터명 삭제하지 않는 버그 ( hjlim ) -#define MODIFY_WHISPER_CASH_BUGFIX_20060704 - -#if GAME_VERSION >= G_V_S2_2 -// [업데이트] 380 아이템 추가 옵션 시스템 ( hjlim ) -//#define ADD_380ITEM_NEWOPTION_20060711 - -// [업데이트] 조화의 보석 시스템 (hjlim) -//#define ADD_JEWEL_OF_HARMONY_SYSTEM_20060530 -#endif - -#if GAME_VERSION >= G_V_99B -// [버그수정] 개인상점 오픈 후 공성서버->로랜시아 이동 시 -// RegenMapNumber 초기화 안해서 생기는 위치 버그 수정(apple) -// !!주의!! gObjMoveGate()에서 RegenMapNumber 가 초기화 된다 -#define MODIFY_MOVEGATE_CHECK_PERSONALSHOP_OPEN_20060704 -#endif - -// [버그수정][ExDB] 서로 다른 서버에서 친구 추가 시 서버정보 오류 버그 ( hjlim ) -#define MODIFY_RE_ADDFRIEND_BUG_20060623 - -// [버그수정][ExDB] 캐릭터 종료 시 길드인 경우 친구 종료처리 하지않는 버그 ( hjlim ) -#define MODIFY_CHARCLOSE_BUG_20060623 - -// [버그수정] 스웰라이프 초기화 버그 재수정 ( hjlim ) -#define MODIFY_SWELLLIFE_BUG_FIXAGIAN_20060628 - -// [버그수정] 익스플로젼 블레이드 추가 마력 반영 되지 않는 버그 ( hjlim ) -#define MODIFY_EXPLOSION_BLADE_WEAPON_MAGICDAMAGE_BUG_20060623 - -// [버그수정] 엑설런트 엘리멘탈 방패 생증 옵션 버그 (hjlim) -#define MODIFY_EXCELLENT_SHILED_BUG_20060615 - -#if GAME_VERSION >= G_V_S2_2 -// [버그수정] 성문, 석상 업그레이드 할 때 수호보석을 삭제한 후 업그레이드를 실행한다. (RKFKA) -#define MODIFY_CASTLE_NPC_UPGRADE_PROCESS_20060619 -#endif - -// [버그수정] 주민번호를 제대로 체크하지 않는 버그 - USA 국가코드가 추가되면서 해당 처리가 빠졌음(RKFKA) -#define MODIFY_JOOMINCHECK_FOR_USA - -// [버그수정] 수호석상 & 라이프 스톤 회복 - 최대 HP,MP,AG 버그 (hjlim) -#define MODIFY_GUARDIANSTATUE_LIFESTONE_REFILLBUG_FIX_20060609 - -// [버그수정] 공성 직책 스킬 - 투명 스킬 타겟 설정 버그 ( hjlim ) -#define MODIFY_CLOAKING_TARGET_BUGFIX_20060608 - -// [버그수정] 연합길드 방출 시 생기는 버그 (hjlim) -#define MODIFY_UNIONGUILD_KICKOUT_BUGFIX_20060529 - -// [버그수정] 법사 순간 이동시 뷰포트 버그 재수정 (hjlim) -#define MODIFY_WIZARD_TELEPORT_VIEWPORT_20060526 - -// [버그수정] 결투 종료 후 다크스피릿 타겟 해제 (hjlim) -#define MODIFY_DARKSPIRTI_TARGETRELEASE_ON_DUEL_20060524 - -// [버그수정] 엑설런트 아이템 드랍시 내구도 버그 (hjlim) -#define MODIFY_EXCELLENT_DROP_DURATION_BUG_20060524 - -// [업데이트] 게임가드 2.5버전에서 맵 서버 이동시에는 인증을 하지 않는다. (hnine) -#ifdef NPROTECT_GAME_GAURD_FOR_SERVER_VERSION_25_20060123 -#define MODIFY_GAMEGUARD_NOT_AUTH_MAPSERVER_MOVE_20060513 -#endif - -// [업데이트] 카오스 캐슬에서는 쉴드 파괴 이펙트를 출력하지 않는다. (hnine) -#define MODIFY_NO_SHOW_SHIELDBROKE_EFFECT_IN_CHAOSCASTLE_20060523 - -// [누적버그수정] 헬 버스트 스킬 시전 시간 문제 수정 (hnine) -#define MODIFY_HELLBURST_SKILL_TIME_20060522 - -// [버그수정] 아이템 최대 내구도 계산 버그 (0527삭제) (hjlim) -//#define MODIFY_CALC_DURABILITY_20060523 - -// [버그수정] 몬스터 저항력 100% 저항 설정 (hjlim) -#define MODIFY_MONSTER_RESISTANCE_IMMUNE_20060523 - -// [버그수정] 쿤둔 관련 뷰포트 버그 (hjlim) -#define MODIFY_KUNDUN_VIEWPORT_20060523 - -#if GAME_VERSION >= G_V_S2_2 -// [버그수정] 펜릴 엑설런트 옵션 버그(젠증가/방성증가 버그) (hjlim) -// MODIFY_DESTRUCTION_FENRIR_GET_MONEY_20060515 삭제 -#define MODIFY_FENRIR_EXOPTION_BUG_20060522 -#endif - -// [버그수정] 로랜협곡/크라이울프 맵에서 펜릴 공격시 상대 내구력 감소 하지 않는 버그 (hjlim) -#define MODIFY_CASTLEMAP_FENRIR_DURATION_20060522 - -// [버그수정] 쉴드/마나 최대 값 감소시 현재 감소된 값 전송.아이템 효과 적용에서 분리 ( hjlim ) -#define MODIFY_SHIELD_MANA_CHANGEMAXVALUE_20060526 - -// [버그수정] 아이템 효과 적용 순서 변경. 엑설런트아이템/세트아이템 ( hjlim ) -//#define MODIFY_ITEM_EFFECT_FLOW_20060519 -//#define MODIFY_ITEM_EFFECT_FLOW_20060519_2 - -// [버그수정] 레벨업시 체력증가 옵션 적용안되는 버그 및 재접후 깍이는 버그(0527재수정) (hjlim) -#define MODIFY_LIFEANDMANA_BUG_LEVELUP_RELOGIN_20065018 - -#if GAME_VERSION >= G_V_S2_2 -// [스킬보완] 인피니티 애로우 스킬 취소 적용 (RKFKA) -#define ADD_INFINITY_ARROW_CANCEL_20060516 -#endif - -#ifdef MAP_SERVER_WORK_20041030 -// [버그수정] 맵 이동시 아이템 드롭으로 인한 아이템 복사 버그 수정 (hnine) -#define MODIFY_ITEM_DUPLICATION_USING_ITEMDROP_20060518 -#endif - -#if GAME_VERSION >= G_V_S2_2 -// [버그수정] 드롭이 안되는 고가의 아이템 추가 (hnine) -#define ADD_NON_DROP_VALUABLE_ITEM_20060518 -#endif - -// [버그수정] 일본 스웰라이프 초기화 버그 수정 (hnine) -#define MODIFY_SWELLLIFE_INIT_BUGFIX_20060411 - -// [버그수정] 텔레포트 중 잔상 버그 수정 (삭제) (hnine) -//#define MODIFY_AFTERIMAGE_BUGFIX_20060215 - -// [버그수정] 일본 공성 서버 종료 시간 3초 버그 수정 (hnine) -#define MODIFY_SIEGE_END_DATE_BUG_FIX_20060116 - -#if GAME_VERSION >= G_V_S2_2 -// [버그수정] 같은 맵으로 맵 이동시에 유저가 안 보이는 버그 수정 (hnine) -#define MODIFY_MOVEMAP_RESET_VIEWPORT_BUGFIX_20060511 -#endif - -// [버그수정] 축복의 물약, 영혼의 물약을 겹칠수 있는 최대 수 조정 160 ->250 (RKFKA) -#define MODIFY_SIEGE_POTION_OVERLAP_COUNT_20060511 - -// [버그수정] 해외 컴파일시 오류 부분 수정 (HAPPY_CAT으로 인한 버그 수정) (hnine) -// 해외 컴파일 시에만 켜 져야 함 -#ifndef FOR_KOREA -#define MODIFY_SEASON_01_20060317 -#endif - -#if GAME_VERSION >= G_V_S2_2 -// [업데이트] 로그 시스템 확장 (hnine) -#define EXTEND_LOG_SYSTEM_02_20060516 -#endif - -// [누적버그수정] 카오스 캐슬에서 쉴드 데미지 이상 버그 (hnine) -#define MODIFY_SHIELDDAMAGE_BUGFIX_IN_CHAOSCASTLE_20060516 - -// [누적버그수정] 로렌시아 강제 이동 버그 (hjlim) -#define MODIFY_FORCEMOVE_TO_LORENCIA_20060515 - -#if GAME_VERSION >= G_V_S2_2 -// [누적버그수정] 마검사 볼케이노 세트 착용시 세트 방어력 추가 (hjlim) -#define MODIFY_MAGUMSA_VOLCANOSET_DEFENSE_20060515 - -// [누적버그수정] 군주의망토 업그레이드시 내구력 계산 버그 (hjlim) -#define MODIFY_UPGRADE_DARKLORDMANTLE_20060515 -#endif - -// [누적버그수정] 공성맵 입장 유저 리젠 좌표 재설정 수정 (RKFKA) -#define MODIFY_LOGINUSER_SET_REGEN_COORD_AT_CASTLE_MAP_20060511 - -// [누적버그수정] 수성 길드인 경우 길드 해체 불가 (RKFKA) -#define MODIFY_CASTLE_OWNER_GUILD_DESTROY_LIMIT_20060418 - -// [누적버그수정] 공성전 NPC 초기화 버그 수정 (RKFKA) -#define MODIFY_CASTLE_NPC_INITIALIZE_BUG_20060406 - -// [버그수정] 공성시에 유저를 텔레포트 시킬 수 있는 버그 수정 (hnine) -#define MODIFY_TELEPORT_SKILL_USING_PARTY_MEMBER_20060504 - -// [버그수정 베트남] - 메세지 전송시 문자열 길이 계산 버그 수정 (RKFKA) -#define MODIFY_VIETNAM_MEMCPY_BUG_20060502 - -// [업데이트] 쉴드 게이지 공식 변경 (hjlim) -#define UPDATE_SHIELD_CALCULATE_GAGE_20060428 - -#ifdef ADD_SHIELD_POINT_01_20060403 -// [기능추가] 쉴드 시스템 콤보 적용 옵션 & 물약 조합 확률 (hjlim) -#define UPDATE_SHIELD_OPTION_20060427 -#endif - -#ifdef FOR_ONAIR -// [기능추가] 방송용 서버 설정 매크로 추가 (hnine) -#define ADD_MACRO_FOR_SETITEM_20060424 -#endif - -// [버그수정] 아이디 암호 임력 창에서 Connect 후 무한 대기 가능한 문제 해결 (apple) -#define MODIFY_CONNECTTIME_CHECK_20060424 - -#if GAME_VERSION >= G_V_S2_2 -// [기능추가] 인피니티 애로우 스킬 사용시 추가 MP 소모량 조정 매크로 (RKFKA) -#define ADD_MACRO_INIFINITY_ARROW_CONTROL_20060410 -// [업데이트] CSkillAdditionInfo 추가 (RKFKA) -#define ADD_SKILL_ADDITION_INFO_CLASS_20060407 -// [업데이트] 뮤즈엘프 스킬 '인피니티 애로우' 추가 (RKFKA) -#define ADD_SKILL_MUSE_ELF_INFINITYARROW_20060406 - -// [업데이트] 칼리마 NPC 레이라 추가 (RKFKA) -#define ADD_SHOP_KALIMA_NPC_REIRA_20060403 -#endif - -// [업데이트] 카오유저 이벤트( 카오스캐슬, 데빌스퀘어, 블러드캐슬) 입장 금지 (RKFKA) -#define ADD_PK_USER_ENTER_LIMIT_EVENT_MAP_20060411 - -#if GAME_VERSION >= G_V_S2_2 -// [공방보완] 공방전 성공시 아이템 보상 (RKFKA) -#define ADD_CRYWOLF_SUCCESS_REWARD_20060404 -// [공방보완] 제단에 계약하는 요정 캐릭터의 제한 레벨 350 -> 260 변경 (RKFKA) -#define MODIFY_CRYWOLF_ELF_ALTAR_LIMIT_LEVEL_CHANGE_20060404 -// [공방보완] 크라이울프 몬스터 다크엘프, 발가스 아이템 드랍 (RKFKA) -#define ADD_CRYWOLF_MONSTER_ITEMDROP_20060404 - -// 쉴드 시스템 디버그 메시지 출력 (삭제) : 사내 개발서버에서만 활성화. -//#define SHIELD_POINT_DEBUGLOG - -// [업데이트] 쉴드 시스템(포인트) 추가 (hnine) -#define ADD_SHIELD_POINT_01_20060403 -#endif - -// [버그수정] 스킬 공격 범위 체크 추가 보완 (hjlim) -#define MODIFY_SKILL_CHECK_DISTANCE_UPDATE_02_20060421 - -// [버그수정] 스킬 공격 범위 체크 수정 및 보완 (hjlim) -#define MODIFY_SKILL_CHECK_DISTANCE_UPDATE_20060417 - -// [버그수정] 스킬 공격 범위 체크 (hjlim) -#define MODIFY_SKILL_CHECK_DISTANCE_20060413 - -// [기능추가] 게임서버 정보 추가 (apple) -// 테스트/서비스 서버구분, 각종 서버들과의 연결 상태 정보 보여주기 -#define ADD_SERVER_INFO_DISPLAY_EXTEND_01_20060313 - -// 맵 조인 프로토콜을 받았는지 체크 한다. (Server Dev.) -#define BLOCK_INVALID_CHARACTER_DELETE_01_20060327 - -// [버그수정] 러브팡팡(러브러브) 이벤트와 인증서버와의 연결관계 제거 (apple) -#define REMOVE_LOVELOVE_EVENT_COUPLING_WITH_JOINSERVER_20060319 - -// [기능수정] 크라이울프 몬스터 체력하락 자동화 & 쿤둔 자생 제거 옵션화 (apple) -#define MODIFY_CRYWOLF_BENEFIT_01_20060315 - -// [버그감시] 카오스캐슬, 블러드캐슬 버그 추적 로그 ( RKFKA ) -#define ADD_LOG_CHECK_CAHOSCASTLE_BLOODCASTLE_EVENT_20060314 - -// [기능추가] FSGate 연결 안 됐을때 Option Reload 방지 (apple) -// #define ADD_SERVER_FUNC_OPTION_RELOAD_CHECK_01_20060313 - -#if GAME_VERSION >= G_V_S2_2 -// [업데이트] 화이트데이 사탕상자 이벤트 ( RKFKA ) -#define WHITEDAY_CANDY_BOX_EVENT_20060222 - -// [로그추가] 쿤둔 아이템 드랍 로그 추가( RKFKA ) -// ADD_KUNDUN_ITEM_DROP_LOG_20060309 -#endif - -// [업데이트] 로컬라이징 데이터(.wtf) 추가 -// 0.99.60 - 0.99.94 -#define MODIFY_LOCALIZING_WTF_20060309 - -// [버그수정] 칼리마 이동 버그 수정 (hnine) -#define MODIFY_KALIMAMOVE_BUGFIX_20060221 - -// [버그수정] 마법사의 반지 내구력 버그 수정 (hnine) -#define MODIFY_MAGICIANRING_DURATION_BUGFIX_20060221 - -#ifdef ADD_KUNDUN_CONTROL_20040923 -// 쿤둔 이벤트 관련 로그 저장 파일명 변경(임시) (hnine) -#define MODIFY_KUNDUN_EVENT_LOG_FILENAME_20060220 -#endif - -#if GAME_VERSION >= G_V_S2_2 -// [업데이트] 로그 시스템 확장 20060202 (hnine) -#define EXTEND_LOG_SYSTEM_20060202 - -// [버그수정] 쿤둔 아이템이 칼리마가 아닌 맵에서 드랍되는 버그 수정 (RKFKA) -#define MODIFY_KUNDUN_ITEM_DROP_MAP_20060216 -#endif - -// [업데이트] 경험치 계산 방식 및 파티/셋트 경험치 수정 (hnine) -#define MODIFY_GETTING_EXP_RATE_20060214 -// 경험치 공식 변경 관련 기존 MODIFY_GETTING_EXP_RATE_20060213 삭제 (hnine) -// MODIFY_GETTING_EXP_RATE_20060213 (RKFKA) -// [업데이트] 경험치 획득 증가 (apple) -//#define MODIFY_GETTING_EXP_RATE_20051116 - -// [로그수정] 1) 쿤둔 관련 로그 수정 KALIMA(6) -> KALIMA(7) -// 2) 6칼리마에 있는 모든 유저정보 로그 부분 주석처리 (RKFKA) -// MODIFY_KUNDUN_LOG_20060201 - -// [버그감시] 유효하지 않은 영역으로 인해 로랜시아 이동 추적 로그 (apple) -#define ADD_LOG_CHECK_INVLIDE_X_Y_POSITION_20060131 - -// [버그감시] 경험치 획득 맵, 좌표 정보 추가 (apple) -#define ADD_LOG_GETTING_EXP_MAP_X_Y_INFO_20060131 - -#if GAME_VERSION >= G_V_S2_2 -// [업데이트] 발렌타인데이 상자 이벤트 (RKFKA) -#define VALENTINES_DAY_BOX_EVENT_20060124 - -// [버그수정] 펜릴 젠으로 수리 되는 버그 수정 (apple) -#define MODIFY_FENRIR_ZEN_REPAIR_20060124 -#endif - -#ifdef PERSONAL_SHOP_20040113 -// [버그수정] 맵서버 이동 시 개인상점 아이템 복사 발생 (apple) -#define MODIFY_ITEM_DUPLICATION_IN_MAPSERVER_MOVING_20051219 -#endif - -// [버그수정] 공성 진행에 다른 연합은 SOMMON 되지 않는다. (apple) -#define MODIFY_DARKLORD_RECALL_IN_CASTLESIEGE_TIME_20051219 - -// [버그수정] 수호석상이 파괴 되지 않았으면, 직인 등록을 할 수 없다. (apple) -#define MODIFY_CASTLE_CROWN_ACCESS_BY_CHECKING_STATUE_20051219 - -#if GAME_VERSION >= G_V_S2_2 -// [업데이트] 크리스마스 리본상자 이벤트 (RKFKA) -#define CHRISTMAS_RIBBONBOX_EVENT_20051212 -#endif - -// [업데이트] 저레벨 육성 관련 수정 (hnine) -#define UPDATE_LOWLEVEL_SUPPORT_1_20051215 - -// [버그수정] 게임 중이 아니면 NPC와 이야기 할수 없다. (apple) -#define MODIFY_NPCTALK_REQUIREMENT_20051212 - -#if GAME_VERSION >= G_V_S2_2 -// [업데이트] 신규 몬스터 AI 추가 (apple) -#define ADD_NEW_MONSTER_SYSTEM_02_20050725 // Monster AI - -// ☆★ 크라이울프 (apple) -#ifdef GAMESERVER_TO_CRYWOLFSERVER -#define CRYWOLF_PRECEDENCE_PATCH_20050413 -#define CRYWOLF_COMMON_PATCH_20050413 -#define CRYWOLF_ONLY_PATCH_20050413 -#else -#define CRYWOLF_PRECEDENCE_PATCH_20050413 -#define CRYWOLF_COMMON_PATCH_20050413 -#endif - -// [업데이트] 신규 탈것 펜릴(Fenrir) 추가 (apple) -#define ADD_ITEM_FENRIR_01_20051110 -#endif - -// [안티해킹] 시리얼 0 보석 생성 및 거래에 대한 처리 (apple) -#define ANTIHACKING_SERIAL_0_ITEM_20051202 - -// [버그수정] 몬스터 범위상에 랜덤 생성일 경우 Rand() -> GetLargeRand()로 변경 (apple) -#define MODIFY_MONSTER_RANDOM_POS_CREATION_20051202 - -// [버그수정] 맵상에서 캐릭삭제 가능으로 인한 복사 버그 수정 (apple) -#define MODIFY_CHARACTER_DELETE_IN_MAP_20051121 - -// [버그수정] (중국) 핵툴사용 117문자 채팅메세지 전송 시 팅 버그 방지 (apple) -#define PREVENT_117_CHATTING_MSG_BUG_20051114 - -// [로그추가] 공성전 시작, 종료 날짜 DB 업데이트 대한 로그 추가 (apple) -#define ADD_CASTLESIEGE_DATE_UPDATING_LOG_20051103 - -// [버그수정] 다크로드 소환 5초 카운트 시 유니리아 착용 가능 버그 수정 (apple) -#define MODIFY_DARKLORD_RECALL_BUGFIX_20051103 - -// [버그수정] 공성서버에서 변신반지 착용시 공&수성 정보를 보낸다 (apple) -#define MODIFY_CASTLESIEGE_VIEWPORT_BY_CANGE_RING_20051103 - -// [버그수정] 공성서버에서 변신반지를 제거했을 때 자신의 뷰포트와 창/방패 정보를 보낸다.. (apple) -#define MODIFY_VIEWPORT_REMOVE_CHANGE_RING_20051013 - -// [파일수정] 로랜 협곡 이벤트 메세지를 wtf 파일로 수정 (apple) -#define MODIFY_CASTLEDEEP_EVENT_MESSAGE_20051013 - -// [공성보완] 직인 등록 시 왕관 스위치 등록자 정보를 검색하고 가능 여부 판단 (apple) -#define MODIFY_CASTLE_CROWN_ACCESS_ALLOWED_BY_CROWNSWITCH_20051102 - -// [공성보완] 공성시작 후 수호석상이 없을 경우 생성시키는 루틴 제거 (apple) -#define REMOVE_CASTLESIEGE_AUTO_REVIVE_GUARDIANSTATUE_20051101 - -// [공성보완] 다크호스를 착용하고 직인 등록 중인 길드 마스터는 밀려나지 않는다. (apple) -#define MODIFY_CASTLESIEGE_GUILDMASTER_BACKSPRING_20051018 - -// [공성보완] 왕관 스위치 등록자 정보를 알린다. (apple) -#define MODIFY_CASTLESIEGE_NOTIFY_CROWNSWITCH_USER_20051017 - -// [공성보완] 공성 물약 조합 결과 개수 5->10으로 변경, 지속 시간 확장 (apple) -#define MODIFY_CASTLE_POTION_20051017 - -// [공성보완] 직인 등록 시간 누적 시스템 (apple) -#define MODIFY_CASTLESIEGE_CALC_CROWN_ACCESSTIME_20051014 - -// [공성보완] 공성 길드간 구별을 위한 식별 시스템 (apple) -#define MODIFY_CASTLESIEGE_IDENTIFICATION_20051012 - - - - -//---------------------------------------------------------------------------------------------------------- -// -// ◆ OLD Style.. -// -//---------------------------------------------------------------------------------------------------------- - - -// T_CurCharName 에 캐릭터 정보를 쌓지 않는다 (apple) -#define REMOVE_CONNECTED_CHARACTER_NAME_INFO_20051004 - -// 뮤매니저 전체공지 발생 시 로그 기록 (apple) -#define ADD_LOG_GM_TOOL_NOTICE_20051004 - -// 몬스터 응답이상 버그 : 아이스에로우와 같이 움직임을 멈추는 스킬 주의! (apple) -#define MODIFY_MONSTER_ACT_BY_ICEARROW_20050914 - -#if GAME_VERSION >= G_V_S2_2 -// 숨겨진 보물상자 이벤트 (b4nfter) -#define HIDDEN_TREASUREBOX_EVENT_20050804 - -// 한국 공인 IP주소 변경 (b4nfter) -#define MODIFY_WEBZEN_PUBLIC_IPADDRESS_20050822 - -// 에로우바이퍼 등 활, 석궁 수치 적용 수정 (apple) -#define MODIFY_APPLYING_BOW_01_20050825 - -// 신규 아이템 추가 (apple) -#define ADD_NEW_ITEM_01_20050823 - -// 마이너스 스탯 열매 추가 (apple) -#define ADD_MINUS_STAT_SYSTEM_USING_FRUIT_20050712 -#endif - -#if GAME_VERSION >= G_V_99B -// item.txt 파일 확장 (apple) -// < 필요요구치 확장 > -// 힘,민첩,에너지 -> 레벨,힘,민첩,에너지,체력,통솔 -#define EXPAND_ITEMSCRIPT_01_20050808 -#endif - -// 애로우바이퍼 화살 +2 작용시 데미지 적용 (apple) -#define MODIFY_ARROWVIPER_2PERCENT_DAMAGE_20050816 - -#if GAME_VERSION >= G_V_99B -// ExDB 친구 기능 ON/OFF 추가 (apple) -#define ADD_FRIEND_FUNCTION_ON_OFF_20050811 - -// 파란 복주머니 사용 후 '이동 칼리마' 명령 사용 적용 수정 -#define MODIFY_KALIMAMOVE_COMMAND_FOR_BLUEPOUCH_20050811 - -// 아이템인덱스 확장으로 인한 드랍리스트 관리 (apple) -// 랜덤 범위를 한정 짓는다. -// 랜덤으로 세트아이템 만들기 수정 -#define ADD_RANDOM_RANGE_OF_ITEMINDEX_20050808 - -#if GAME_VERSION >= G_V_S1_512 -// 히든 칼리마 추가 (b4nfter) -#define HIDDEN_KALIMA_20050706 -#endif - -// 파티원 맺을 때 로그 오류 수정 (b4nfter) -#define PARTY_ADD_LOGFIX_20050801 - -// 쿤둔은 경험치를 주지 않는다 (apple) -#define DISABLE_GETTING_EXP_FROM_KUNDUN_20070801 -#endif - -// 게임서버 파라메터 추가 (DataServerIp2, DataServerPort2, ExDbIp, ExDbPort) (b4nfter) -#define ADD_GAMESERVER_PARAMETER_20050728 - -#if GAME_VERSION >= G_V_S1_512 -// 아이템 인덱스 확장 (b4nfter) -#define ITEM_INDEX_EXTEND_20050706 - -// DB크기 확장 (b4nfter) -#define ITEM_DBSIZE_EXTEND_20050706 - -// 아이다 맵 추가 (apple) -#define ADD_NEW_MAP_AIDA_20050617 - -// 새로운 몬스터 시스템 추가 (apple) -#define ADD_NEW_MONSTER_SYSTEM_01_20050714 // Monster SKILL - -// EXDB에서 적대가 있는 상태에서는 다른 적대를 맺지 못하도록 함! (apple) -#define MODIFY_EXDB_RIVAL_CHECK -#endif - -// 공성 운영자 명령 wtf 로 수정(apple) -#define MODIFY_CASTLESIEGE_GM_MESSAGE_20050722 - -// 배틀사커를 이용해 PK 안되게 하는 버그 수정 (apple) -#define MODIFY_BATTLESOCCER_PKCHECK_20050714 - -// 다크로드 최대 생성가능 스탯 버그 수정(apple) -#define MODIFY_DARKLORD_CREATION_MAXSTAT_USING_FRUIT_20050712 - -// 축복, 영혼의 물약 조합 핵톨 사용 가능 취약점 수정. (apple) -#define MODIFY_BLESS_SOUL_POTION_CREATION_BUG_20050711 - -#if GAME_VERSION >= G_V_S1_512 -// 대천사의 절대 셉터 추가. item.txt 수정 필요(apple) -#define ADD_WEAPON_OF_ARCHANGEL_SCEPTER_20050706 - -// 길드 채팅 / 연합 채팅을 서버그룹단위로 가능하게 한다. (apple) -// GS <-> ExDB <-> GS 간에 데이터 교환 -#define ADD_SERVERGROUP_CHATTING_FOR_GUILD_UNION_01_20050706 - -// 길드전,배틀사커가 자신의 길드에 되는 버그 수정. (서버가 죽음 ㅠ_ㅠ) (apple) -#define MODIFY_GUILDWAR_REQUEST_PROCESS_20050704 - -// WhatsUp과 Console 화면 상에서 서버의 이상을 체크한다. (apple) -// #define ADD_SERVER_ALERT_USING_WHATSUP_01_20050628 - -// 캐릭터 직책 스킬 보강. skill.txt 수정 필요(apple) -#define ADD_NEW_SKILL_FOR_CASTLE_02_20050531 - -// 블러드 캐슬, 카오스 캐슬, 광장에서는 SHADOW PAHTOM의 기능을 없앤다(apple) -#define MODIFY_NPC_SHADOW_PAHTOM_20050628 - -// 몬스터의 아이템 드롭 최대 레벨 조정 (u4us) -#define MODIFY_DROP_MAX_ITEM_LEVEL_6_OF_MONSTER_20050624 -// 반지 및 목걸이 레벨 5 이상 몬스터 드롭 방지 (u4us) -#define MODIFY_DROP_PREVENT_OF_RING_N_NECKLACE_LV_5_OVER_20050623 -// 캐릭터 공격력 & 방어력 향상 제공 NPC Shadow Phantom 추가 (u4us) -#define ADD_NPC_SHADOW_PHANTOM_20050616 -// 캐릭터 자동 회복 시스템 (u4us) -#define CHARACTER_AUTO_RECUPERATION_SYSTEM_20050614 -// 사과 아이템 레벨 0 - 1 사용시 즉시 회복 (u4us) -#define IMMEDIATELY_HP_MP_AG_RECUPERATION_20050614 -#endif - -// [소스수정] Shop15번 파일 추가 삭제 -> ADD_SHOP_15_20050613 삭제(RKFKA) -// 공성전 맵에 상점추가 -> WzVersionManager, WzAuthGs, WzFsGate 같이 수정 (b4nfter) -// #define ADD_SHOP_15_20050613 - -// 최고 레벨이 되면 더이상 경험치를 얻지 못한다. -#define MAX_LEVEL_BLOCK_GAIN_EXPERIENCE_20050613 - -// 에로힘과 쿤둔의 아이템 드랍이 몹이 존재하는 맵이 되도록 변경 (apple) -#define MODIFY_ITEM_DROP_MAP_OF_EROHIM_KUNDUN_20050610 - -// 이벤트 운영자(GM) 권한 추가 (u4us) -#define ADD_AUTHORITY_CODE_OF_EVENT_GM_20050602 - -#if GAME_VERSION >= G_V_S1_512 -// 데빌스퀘어 확장 -> 기존 4개에서 6개 (b4nfter) -#define DEVILSQUARE_EXTEND_20050221 -#endif - -// [누적버그수정 1차] 다크로드 PET 보상 경험치 적용 수정. (apple) -#define MODIFY_ACCUMULATED_BUG_DARKLORD_PET_EXP_01_20050603 -// [누적버그수정 1차] 성주의 표식 판매가격 버그 수정. (apple) -#define MODIFY_ACCUMULATED_BUG_MARKOFLORD_SELL_VALUE_01_20050531 -// [누적버그수정 1차] 캐논타워에 죽을 경우 경험치 하락 버그 수정. (apple) -#define MODIFY_ACCUMULATED_BUG_DEAD_BY_CANNONTOWER_01_20050531 -// [누적버그수정 1차] 스웰라이프 파티 시 정상 적용 되도록 수정. (apple) -#define MODIFY_ACCUMULATED_BUG_SWELLLIFE_ON_PARTY_01_20050531 -// [누적버그수정 1차] 기술목걸이, 마법의반지 자생 적용 제거. (apple) -#define MODIFY_ACCUMULATED_BUG_AMULETRING_WRONG_OPTION_01_20050531 -// [누적버그수정 1차] 군주의 망또 +10~13 방어력 적용 수정. (apple) -#define MODIFY_ACCUMULATED_BUG_SLEEVEOFLORD_01_20050531 - - -// 에로힘 아이템 루팅은 MAXHIT 유저로 한다. (apple) -// 에로힘 아이템 루팅은 LastHit 유저로 한다. (apple) -#define MODIFY_ITEM_LOOTING_FROM_EROHIM_20050610 -#define MODIFY_ITEM_LOOTING_FROM_EROHIM_20050530 - -// 변신 캐릭터으로 부활시 자신의 뷰포트 정보 갱신 (u4us) -#define BUGFIX_UPDATE_VIEWPORT_INFO_FOR_SELF_20050510 - -#if GAME_VERSION >= G_V_S1_512 -// 맵서버 관련 추가정보 -#define MAP_SERVER_ADDINFO_20050509 -#endif - -// 공성 사냥터의 보스몹인 에로힘은 경험치를 주지 않는다. (apple) -// 경험치 버그로 인해 수정 함. -#define DISABLE_GETTING_EXP_FROM_EROHIM_20050509 - -// NPC 대화창 금지 (클라이언트 요청) (b4nfter) -#define DISABLE_NPC_MESSAGE_20050506 - -#ifdef DARKLORD_WORK -// 다크로드의 팻을 위한 아이템 판매가격 버그 수정 (u4us) -#define BUGFIX_SELL_PRICE_OF_DARKLOAD_PETS_20050310 -#endif - -// [공성보완] 성주 길드는 다른 길드에 연합 가입 할수 없다. (apple) -#define MODIFY_UNION_JOIN_CASTLE_OWNER_GUILD_20050502 - -// 카오스 조합 열매 & 날개 추가 (u4us) -#define ADD_FRUIT_N_WING_OF_CHAOS_MIX_20050502 - -#if GAME_VERSION >= G_V_S1_512 -// 보석 조합 시스템 (b4nfter) -#define JEWEL_MIX_SYSTEM_20050309 - -// [공성보완] 연합 길드마스터 길드 연합 방출 기능 추가 (apple) -#define ADD_ABILITY_OF_UNIONMASTER_TO_KICK_OUT_UNIONMEMBER_01_20050418 - -// [공성보완] 연합 길드 수 조정 (7->3) (apple) -#define MODIFY_MAX_UNION_MEMBER_01_20050418 -#endif - -// 개인상점 젠복사 버그 패치 -#define BUGFIX_PERSONALSHOP_ZENCOPY_20050426 - -// 운영 캐릭 명령어처리 로그 추가 수정. (apple) -// 명령 대상에 대한 정보 추가. -#define ADD_LOG_GM_COMMAND_20050426 - -// 레나 및 이벤트칩 복사 시도 방지 및 로그 기록 (u4us) -#define BUGFIX_EVENT_CHIP_DUPLICATE_PREVENT_20050422 - -// MaxUser 수 Commonserver.cfg에서 조절 기능 추가. (apple) -// Commonserver.cfg 추가 내용 : -// 1) NumberOfMaxUser = 500 -// 2) NumberOfCastleSiegeMaxUser = 1500 -#define ADD_CONTROL_MAXUSER_20050420 - -// X 주민등록번호 체크부 수정 (u4us) -#define BUGFIX_X_RESIDENT_REGISTRATION_OF_USER_20050419 - -// 데스 블레이드 크리티컬 데미지 처리 추가 (u4us) -#define ADD_CRITICAL_DAMAGE_OF_DEATH_BLADE_20050419 - -// Send Buffer 확장. (apple) -#define EXPAND_MAX_SENDBUFFER_20050413 - -// #LOGADD_CASTLESIEGE_20050404 (b4nfter) - -// 길드이름 리셋 (b4nfter) -#define GUILDNAME_MEMSET_20050410 - -// 아이템을 주을 때 생기는 논리적 오류 수정 (b4nfter) -#define ITEM_GET_BUGFIX_20050406 - -// 객체 삭제 시 서있던 위치의 속성을 리셋해줌 (b4nfter) -#define CLEAR_STANDATTR_OBJDEL_20050325 - -// PK를 자유롭게 할 수 있도록 변경 (b4nfter) -> ServerInfo.dat 의 PkLimitFree = 1 이 되어야 적용 -#define ADD_PK_LIMIT_FREE_OPTION_20050324 - -// 개인상점 인벤토리 초기화 시 메모리 침범으로 발생혔던 오류수정 (b4nfter) -#define PSHOP_INVENTORY_CLEAR_BUGFIX_20050321 - -// 종료 시 인벤토리가 사라지는 버그 수정 (b4nfter) -#define INVENTORY_CLEAR_BUGFIX_20050226 - -// 쿤둔 이벤트 종료에 따른 설정 변경 (apple) -// 1) 아이템 드랍 5->2개로 변경 -// 2) 쿤둔 HP 메세지 삭제. -#define CHANGE_KUNDUN_SETTING_01_20050221 - -// 특정 몹의 죽었다는 상태 Q 처리를 우선시한다. (apple) -#define ADD_QPROCESSING_STATE_OF_DEAD_20050221 - -// DB아이템 데이터에서 아이템이 없는 슬롯 체크방법 -// 단순히 배열 첫자리를 0xFF 경우 없는 것으로 할때 9비트 아이템타입 형식에서 0xFF (-> 7/31) 아이템을 만들었을 경우 문제 발생 -#define INVENTORY_EMPTYSLOT_CHECK_20050217 - -// 블러드 캐슬, 데빌스퀘어 복사 버그 수정 -// 한국에는 비활성화 되어 있던것을 활성화 시킴. (20050216) (apple) -#define BLOOD_DEVILSQUARE_TRADE_BUG_FIX - -// 캐릭터 선택 창에서 캐릭터 삭제시 레벨을 알수 없으므로 해당 코드 삭제(apple) -#define DEL_CODE_LIMIT_OF_DEL_CHARACTER_LEVEL_20050215 - -// 친구 리스트 + 쪽지 리스트 요청 순서 변경. -// 맵서버 연결과 관련. (b4nfter_apple) -#define MODIFY_ORDER_REQUEST_FRIENDLIST_20050205 - -#ifdef PERSONAL_SHOP_20040113 -// 레벨 5 이하의 케릭터들의 경우 최초 접속 시 개인상점 영역을 초기화 하고 시작한다. -#define PERSONAL_SHOP_DELETE_UNDER_LV5_20050203 -#endif - -// EXDB DB 객체 동기화를 위한 수정. (apple) -// EXDB Server에만 적용됨. -// ExDB Server : 0.40.G에 적용됨. -#define MODIFY_EXDB_SYNC_01_20050128 - -#if GAME_VERSION >= G_V_S1_512 -// 캐릭터 리스트 정보에 길드 정보도 추가한다. (apple) -// Dataserver에도 적용된다. : 0.55.09T 부터 적용 -// 공성용 Dataserver서버에만 적용!! -#define ADD_CHARACTERLIST_GUILD_STATUS_01_20050126 -#endif - -// 카오스 조합시 팝업 메세지 뜨지 않도록 메세지 제거 (apple) -#define REMOVE_CHAOSMIX_NPC_MESSAGE_20050125 - -#define ADD_OPTION_RELOAD_ITEM_TO_JOINSERVER - -// 공성전에 따라 길드해체, 연합끊기 제한설정. (apple) -// ExDB Server에 적용됨. -// ExDB Server : 0.40.F 이상 적용 -#define EXDB_APPLY_CASTLEUPDATE_01_20050111 - -// 이벤트 매니저 (전체 이벤트를 특정 시간으로 분할하여 순차적으로 실행시키고 싶을 경우 사용) (b4nfter_apple) -#define EVENT_MANAGEMENT_20040711 - -#if GAME_VERSION >= G_V_S1_512 -// 캐릭생성시 Class 정보 보내기 (apple) -#define ADD_CLASSINFO_ON_CHARCTER_CREATION_20041224 - -// 연합 마크 얻기 (apple) - EXDB 수정 필요 -// #define ADD_UNION_GET_UNIONMARK_01_20041222 - -// 연합 이름 얻기 (apple) -#define ADD_UNION_GET_UNIONNAME_01_20041222 -#endif - -// 인증서버 종료 시 프로세스 종료가 아닌 1분 종료가 되도록 수정 -// #define MODIFY_AUTHSERVER_CLOSE_20041207 - -// 액설런트 아이템 내구력 수정 (apple) -#define MODIFY_EXCELLENT_ITEM_DUR_01_20041202 - -// 몬스터 아이템 드롭 로그에 몬스터 이름을 추가한다. (b4nfter) -#define MONSTER_ITEMDROP_LOG_ADD_NAME_20041202 - -#if GAME_VERSION >= G_V_S1_512 -// 거래 시 관계 정보 초기화 보완. (apple) -#define MODIFY_NEW_UNION_02_20041201 - -// 연합 채팅 기능 (apple) -#define ADD_UNION_CHATTING_01_20041201 -#endif - -#if GAME_VERSION >= G_V_99B -// 매니저에서 메일보내기 (foguy) -#define ADD_MANAGER_SENDMAIL - -// 길드원이 다른 길드원 방출 할수 있는 것 수정 (apple) -#define ADD_NAMECHECK_DISMISS_GUILDMEMBER_20041129 - -// 마석은 카오스캐슬, 블러드캐슬, 악마의광장에서 열 수 없다. (apple) -#define ADD_MAPCHECK_OPEN_KALIMAGATE_20041129 -#endif - -// 카오스캐슬 입장시간 표시 오류 수정 (apple) -#define MODIFY_OPENTIME_CHAOS_CASTLE_20041129 - -// 로크의 깃털 가격 수정 (apple) -#define MODIFY_PRICE_FEATHE_OF_LOCH_20041129 - -#if GAME_VERSION >= G_V_S1_512 -// 맵서버 분할 작업 (b4nfter) -#define MAP_SERVER_WORK_20041030 -#endif - -// 체크섬 파일의 정보를 캡션바에 보여서 보여준다.(apple) -#define ADD_DISPLAY_CHECKSUM_INFO_20041127 - -// GM 명령 User State 다크로드 추가 (apple) -// 20041127 message_kor.wtf 적용되어야 합니다~! -// #define MODIFY_GMCOMMAND_USERSTAT_20041127 - -// 대만 게임패스워드(창고비밀번호) 적용 (apple) -#define MODIFY_GAMEPASSWORD_20041126 - -// 직책 임명 오류 수정. (apple) -#define MODIFY_ASSIGN_GUILD_STATUS_20041123 - -// 데이터 파일 국가별 선택 방식 변경. (apple) -// DataServer, ExDB Server에 적용됨. -// !!주의 - Commonserver.cfg에 CountryCode 가 추가 되야함. -// !!주의 - 해외 통합버전에 적용됨. -// !!주의 - DataServer : 0.55.07 ExDB Server : 0.40.B -#define MODIFY_LOAD_DATAFILE_FOR_DBSERVER_20041117 - -// 다크호스, 스피릿 조합 수정 (apple) -#define MODIFY_DARKLORD_PETITEM_CHAOS_MIX_20041117 - -#ifdef DARKLORD_WORK -// 다크로드 열매 버그 수정 (apple) -#define MODIFY_DARKLORD_ACQUIRING_EXTRA_POINT_20041117 -#endif - -#ifdef CASTLE_SIEGE_COMMON_PATCH_20041018 -// 공성 준비 레나 이벤트(왕의직인 대신 일시적 이벤트) (apple) -#define ADD_RENAEVENT_FOR_CASTLE_SIEGE_20041116 -#endif - -#ifdef DARKLORD_WORK -// 마법 배우고 사용할 때 배울 수 있는 레벨인지 체크.. (apple) -#define ADD_CHECKING_LEVEL_TO_LEARN_MAGIC_20041115 -#endif - -#if GAME_VERSION >= G_V_S1 -// 공성전 작업 (b4nfter) -#ifdef GAMESERVER_TO_CASTLESIEGESERVER -// 공성서버 모드 -#define CASTLE_SIEGE_COMMON_PATCH_20041018 // 공성전 서버와 일반 서버간에 공통되는 패치부분 -#define CASTLE_SIEGE_ONLY_PATCH_20041018 // 공성전 서버만 필요한 패치부분 -#else -// 일반서버 모드 -#define CASTLE_SIEGE_COMMON_PATCH_20041018 // 공성전 서버와 일반 서버간에 공통되는 패치부분 -#endif -#endif - -#if GAME_VERSION >= G_V_S1 -// New Guild System (apple) -// 해당 수정사항을 적용하기 위해서는 ExDB를 40.C 이상 버전으로 변경 해야 함. -// [C <-> GS] 0xE0 ~ 부터 사용. -// [EDS <-> GS] 0xE0 ~ 부터 사용 -#define MODIFY_NEW_UNION_01_20041122 // 거래 시 길드 정보 초기화 보완. - -#define ADD_NEW_UNION_02_20041118 // 연합 조건 -#define ADD_NEW_UNION_01_20041006 // 연합 -#define ADD_NEW_GUILD_02_20040922 // 용병 -#define ADD_NEW_GUILD_01_20040913 // 직책 -#endif - -// 월드 토너먼트 이벤트 -// #define WORLD_TOURNAMENT_EVENT_SETTING - -// 망토 엑셀옵션 버그 수정(무조건 공증옵션이 들어가야 되는데 생증도 들어가는 버그) -#define SLEEVEOFLORD_OPTION_BUG_PATCH - -// 중국 카오스 조합을 이용한 복사 버그 수정 -#define CHAOS_BOX_ITEMCOPY_FIX_20041112_FOR_CHS - -// 흑마법사 텔레포트 시 뷰포트에 맵이동한 케릭이 남아있는 현상 수정 (b4nfter) -#define BUGFIX_WIZARD_TELEPORT_MAGIC_20041018 - -// 공지 보낼때 버퍼복사방식 수정 (b4nfter) -// #define MODIFY_SERVER_NOTICE_BUFFERCOPY_20041018 - -// WzJoinServerCli.cpp 에서 Send() 시 버퍼가 무한히 쌓이는 문제 수정 (그동안 DB소켓 등의 데이터 전송 문제의 원인으로 추정됨) (b4nfter) -// #define BUGFIX_WSJOINCLIENT_SENDLENGTH_20041011 - -// GS -> DS 서버로 지속적인 LIVE신호 보냄 -// #define GS_DS_LIVECHECK_20041008 - -#if GAME_VERSION >= G_V_99B -// (1) 게임서버 업그레이드 (apple) -// : 몬스터 OBJ 경량화 -#define UPGRADE_GAMESERVER_01_20041006 - -// 마석 사리지는 버그 수정 (b4nfter) -#define BUGFIX_KALIMAGATE_VANISHING_20041006 // 칼리마 게이트 사라지는 현상 수정 - -// #BUGFIX_DARKSPRITE_DINORANT_DAMAGE_20041005 // 다크스피릿 공격 시 디노란트 착용하면 추가 데미지가 들어가는 버그 - -// 쿤둔 피 조절 및 모니터링을 위한 명령어추가 등(apple) -#define ADD_KUNDUN_CONTROL_20040923 - -// 몬스터 HP 회복 (쿤둔 이벤트를 위해 추가) (apple) -// HP가 20%이하일때 부하 몬스터 x 마리 소환! -#define ADD_ABILLITY_KUNDUN_01_20040920 -#endif - -#ifdef _NEW_EXDB_ -// 길드 파괴 시 길드전 해제 않되던 점 수정 (b4nfter) -#define BUGFIX_GUILD_DESTROY_WAR_BLOCK_20040922 -#endif - -// 콤보 데미지도 PVP시 50% 데미지 감소 되도록 수정 -#define MODIFY_CC_PVP_COMBO_DAMAGE_LOWER_50_20040917 - -// 마검사 아스릴세트 방어력. 방어률 적용 (apple) -#define MODIFY_10_11_12_13_SET_DEFENSE_20040916 - -#ifdef ADD_KUNDUN_CONTROL_20040923 -// 쿤둔을 잡은 보상 수정 및 로그 추가 (apple) -#define MODIFY_KUNDUN_REWARD_01_20040915 -#endif - -// 특정 몬스터를 죽였을 때 보상으로 여러개의 아이템을 드랍한다. (apple) -#define ADD_MONSTER_DIE_REWARD_ITEMS_20040915 - -// 몬스터 전체 공격 수정 (apple) -// 유저도 사용하는 CGBeattackRecv 사용으로 4개이상의 타겟에게 데미지 주지 못하는것 수정. -#define MODIFY_MONSTER_ENTIRE_ATTACK_20040915 - -// 특정 유저 이름이 영문 3글자인 경우 처리를 위해 길드가입, 길드생성 수정. (apple) -// ExDB BUG FIX로 추가. ExDB 40.B 이상 버전으로 변경 해야 함. -#define MODIFY_GUILDMEMBER_NAME_LIMIT_200040914 - -// DSProtocol 과 EDSProtocol 에 혼재해 있던 코드 정리 (apple) -// DSProtocol 주석처리. -> 삭제 요망. -#define BLOCK_PREVIOUS_DSPROTOCOL_FOR_GUILD_20040913 - -#if GAME_VERSION >= G_V_99B -// 길드 Number 0x36(DB프로토콜) 부분 수정 : WORD -> INT (apple) -// ExDB DeadLock 해결 -// 해당 수정사항을 적용하기 위해서는 ExDB를 40.A으로 변경 해야 함. -#define MODIFY_GUILD_VIEWPORT_03_20040913 -#endif - -// 다크스피릿 "타겟지정" 공격 직접 타격 공격으로 변경 (apple) -#define MODIFY_DARKSPIRIT_TAGET_ATTACK_01_20040906 - -// 쿤둔의 표식 드랍 -> 각 표식 등급별로 처리하도록 변경 (apple) -#define MODIFY_KALIMA_KUNDUNMARK_DROP_01_20040906 - -// 다크로드 파티원 SOMMON 스킬 이동 구역 수정 (apple) -// DARKLORD_WORK <-- ON 되어 있어야 함. -#define MODIFY_DARKLORD_SKILL_RECALL_PARTY_20040831 - -#if GAME_VERSION >= G_V_99B -// 새로 길드 뷰포트 시스템 수정 (apple) -// 기존 GuildNumber를 WORD로 인식했던 부분.(OLD 뷰포트 버전 역시 문제 있음) -#define MODIFY_GUILD_VIEWPORT_02_20040830 -#endif - -// 아이템 복사방지 관련 수정 (b4nfter) -#define ITEM_DUPLICATE_PREVENT_PATCH_BUGFIX_20040825 - -// ConnectMember.txt의 계정개수 무제한 (b4nfter) -#define CONNECT_MEMBER_COUNT_INFINITE_20040823 - -#if GAME_VERSION >= G_V_99B -// 캐릭터이동.. -#define CHARACTER_MOVE_20040810 -#endif - -#if GAME_VERSION >= G_V_99B -// 스킬에 물리/마법 속성 들어감 (b4nfter) -#define SKILL_ADD_PHYSICS_MAGIC_TYPE_20040812 - -// 다크로드의 마음 이벤트 (b4nfter) -#define DARK_LORD_HEART_EVENT_20040810 -#endif - -// 블러드캐슬에 대천사의 무기 드롭을 직접 하도록 수정 (b4nfter) -#define BLOODCASTLE_ITEMDROP_DIRECTLY_20040728 - -// 거래 버그 수정 (창닫히는 부분에 대한) -#define TRADE_BUG_FIX_CLOSE_WINDOWS_20040727 - -// 새로운 형태의 NPC_A Type 추가 (apple) -//#define ADD_NPC_TYPE_A_01_20040708 - -// 아이템 복사 방지 패치 (b4nfter) -#define ITEM_DUPLICATE_PREVENT_PATCH_20040719 - -// 데빌스퀘어 하루 입장수 제한 (b4nfter) -//#define DEVILSQUARE_CHECK_ENTERCOUNT_20040715 -#if GAME_VERSION >= G_V_S1 -// Guild Viewport 작업 (apple) -#define MODIFY_GUILD_VIEWPORT_01_20040701 -#endif - -#if GAME_VERSION >= G_V_99B -// 지속 마법 핵 방지 (apple) -#define APPLY_DURATION_MAGIC_HACK_CLEANER_20040504 - -// 신규맵 - 칼리마 (b4nfter) -#define ADD_NEW_MAP_KALIMA_20040518 - -// 게임서버에서 접속서버로 보내주는 추가적인 정보들 [0xF4][0x07] -//#define GAMESERVER_INFO_EXTENDED_20040625 - -// 고유 정보 아이템 (apple) -//#define ADD_PROPERTY_ITEM_SYSTEM_01_20040609 - -// PVP 시스템 보완 1차 (apple) -//#define ADD_PVP_SYSTEM_01_20040517 - -// 몬스터 타입 BYTE -> WORD 로 확장 (b4nfter) -#define ENHANCE_MONSTER_TYPE_TO_WORD_20040618 -#endif - -#ifdef ADD_NEW_MAP_KALIMA_20040518 -// 쿤둔 죽었을 경우 세트 아이템 드랍(apple) -#define ADD_REWARD_ABOUT_KALIMA_BOSS_01_20040907 -#endif - -// 물약 가격 재수정(foguy) -#define HP_POTION_VALUE_CHANGE_20040618 - -#if GAME_VERSION >= G_V_99B -// ExDB 길드 작업 재수정 -#define EX_DB_GUILD_REWORK_RETOUCH -// GuildClass 수정작업 -#define MODIFY_GUILD_CLASS_20040608 -#endif - -// 죽었을 때 용사, 전사의 반지 않떨구도록 한다 (b4nfter) -#define USER_DIE_NOT_DROP_HERORING_20040330 - -// 블러드캐슬 입장시 레벨 6 아이템으로 7광장에 입장할 수 있게 한다. (b4nfter) -//#define USER_ENTER_BLOODCASTLE7_WITH6_20040330 - -// 상대방을 사탄, 날개를 착용하고 공격하다 자신이 체력감소로 죽을 때 상대방을 카오로 만드는 버그 (b4nfter) -#define USER_DIE_MAKE_OPPOSIT_PK_20040329 - -// 캐릭터 사망시 아이템 가질수 없도록 (b4nfter) -#define USER_DIE_ITEMGET_BUG_PATCH_20040322 - -// 죽었을 때 젠이 증가하는 버그 수정 (b4nfter) -#define USER_DIE_ZEN_BUG_PATCH_20040319 -// 죽었을 때 젠 감소하는 수치 조정 (b4nfter) -#define USER_DIE_ZEN_MODIFY_20040318 - -////////////////////////////////////////////////////////////////// -// 2004년 2월 5일 본섭 패치 내용 -// 아이템 복사버그 패치 (b4nfter) -#define ITEMCOPY_BUGFIX_20040112 -#if GAME_VERSION >= G_V_99B -// 내친구 적용 (saemsong) -#define __FRIEND_WORK__ -#endif - -#if GAME_VERSION >= G_V_S1 -// 길드 뷰포트 수정 (foguy) -#define GUILD_VIEWPORT_MODIFY -#endif - -// 블러드 캐슬 데빌스퀘어 입장시 아이템 복사 버그 수정 (foguy) -#define BLOOD_DEVILUSQARE_TRADE_BUG_FIX -// 캐릭터 사망시 경험치 손실 소정 (foguy) -#define USER_DIE_EXPERIENCE_MODIFY -// 이동 명령어 스크립트 추가 (foguy) -#define ADD_MOVE_COMMAND_SCRIPT -#if GAME_VERSION >= G_V_S1 -// 파티원에게 자신이 먹은 아이템 정보를 준다 (foguy) -#define SEND_GETITEMINFO_FOR_MYPARTY -#endif -// 로크의 깃털 이카루스에서만 떨어지게 제한 -#define FEATHEROFLOKE_ITEMDROP_CHECK -////////////////////////////////////////////////////////////////// - - -// 길드 포인터 참조 에러 수정 -#define CHINA_GUILD_POINTER_REF_ERROR - -// 카오스 조합 -> 비정상 종료 시 인벤토리 RollBack / Commit 하도록 수정 -#define CHAOS_MIX_TRANSACTION_BUXFIX_20040610 - -// DbVersion 이 0 인 사용자들이 접속했을 때 개인상점 영역을 초기화 -#define PERSONAL_SHOP_DBVER_0_FIX_200406016 - -// 개인상점 영역에서 물건 가격을 조정하고 사고 팔기 전 복사아이템 체크 -#define PERSONAL_SHOP_CHECK_COPYITEM_200406016 - -// 블러드 캐슬, 데빌스퀘어 복사 버그 수정 -//#define BLOOD_DEVILSQUARE_TRADE_BUG_FIX - -// 카오스 캐슬 결투 및 길드전 신청응답 안되게 수정 -#define CHAOSCASTLE_DUAL_GUILDWAR_CHANGE_20040614 -// 관통 스킬 하나의 시리얼에 하나의 몬스터만 맞게 수정 -#define CHECK_PENETRATION_SKILL - -// 파티원 아이템 정보 전송 프토로콜 레벨 추가 -#define SEND_GETITEMINFO_FOR_MYPARTY_ADD_LEVEL - -#if GAME_VERSION >= G_V_99B -#define GUILD_REWORK // 길드 다시 작업중 수정(SaemSong) -#endif - -// 없는 아이템 삭제 -> 않하도록 변경 (b4nfter) -//#define ITEMDELETE_MODIFY_20040604 - -// 블러드 캐슬에서 점수 저장 시 접속 끊긴 인원들도 저장되도록 수정 (b4nfter) -//#define BLOODCASTLE_SENDPOINT_BUGFIX_20040604 - -// 파티 멤버 생명력 리스트 중에 멤버 퇴장 시 퇴장한 멤버의 값으로 잘 못 보이는 것. (b4nfter) -#define PARTYMEMBER_LIFELIST_FIX_20040531 - - -// 마검 이동 레벨 공식 클라이언트와 맞춤 (NeedLevel = ((NeedLevel/3)*2) -> NeedLevel = ((NeedLevel*2)/3); -#define MODIFY_MAGUMSA_MOVE_LEVEL_20040517 - -// 2차 날개 카오스 조합확률(-454%) 버그 수정 (apple) -#define MODIFY_WINGMIX_454BUG_20040512 - -// 거래를 이용한 아이템 복사 버그 수정(foguy)(현재 중국만 수정됨) -//#define TRADE_ITEM_COPY_BUG_FIX_20040511 - - -// 세트 아이템용 버퍼 클리어 -#define SETITEM_BUFFER_CLEAR - -// 물약을 먹을때 이전에 채울께 남아 있으면, 그것도 채우고 다음 물약을 먹인다 -#define USE_PREV_HP_POTION - -//#define FOR_ANTI_HACK // 핵테스트(사용못함) -// 천공 1차 -#define MONSTER_SKILL // 몬스터 스킬 -//#define RENA_CHANGE -#define CHANGE_VIEWSTATE // ViewStat BYTE에서 WORD로 확장 - -#define NEW_SKILL_FORSKYLAND // 천공을 위한 새로운 스킬 - -#define SERVERCODE_EXPAND // 서버 코드 확장 - -#if GAME_VERSION >= G_V_S1 -#define GAMESERVER_DIVISION // 서버 분할작업 -#endif -// 천공 1차 끝 - -// 천공 2차 -// 다중 체크섬 -//#define MULTI_CHECKSUM -// 다중 체크섬 끝 - -#define CHANGE_MAGICATTACKPACKET // 마법 공격패킷을 받을때, 마법 순서 번호 대신, 스킬번호를 받게 수정 - -#define EXP_CAL_CHANGE // 경험치 계산 방법 변경 -// 천공 추가 수정을 위한 디파인 -#define NEW_FORSKYLAND3 -// 천공 추가 수정을 위한 디파인 끝 - -#define VER_CHATWINDOW_OPTION // 채팅옵션 저장 - -#define NEW_FORSKYLAND2 // 천공 2차를 위핸... - -#define APPLY_PACKETCHECKSUM // 체크섬 체크 - -#define HACK_LOG -// 천공 2차 끝 - -#define CHANGE_CLIENTHACKCHECK_MSG // 핵체크 관련 메시지 변경 - -#define FOR_STONE_EXCHANGE // 스톤 환전 -#define FOR_LOTTO_EVENT // 상용화 2주년 기념 복권 이벤트 관련 - -#if GAME_VERSION >= G_V_99B -// 스킬추가 (2003.10.21) -#define ADD_SKILL_20031022 -// 스킬추가 끝 - -// 아이템 추가 -#define ADD_ITEM -// 아이템 추가 끝 - -// 변신 반지 아이템 드롭 설정 -#define ITEMDROP_RINGOFTRANSFORM -// 변신 반지 아이템 드롭 설정 끝 - -// 스킬 추가 -#define ADD_SKILL_WITH_COMBO - -// 0x1E패킷 확장 (강제 공격시 강제 공격대상) -#define EXPAND_ATTACK_PACKET_0X1E -#endif - -// 트레이드를 이용한 스킬 버그 수정 -#define TRADE_SKILLBUG_FIX - -// 카오스 일반날개 아이템 생성 레벨 조정 -#define CHAOS_MIX_WING_ITEMLEVEL_FIX - -// 캐릭터 실시간 통계를 위해서 한시간 간격으로 아이템 저장할때.. 실시간 정보를 기록하라고 DB서버에 알림 -#define ITEMSAVE_MODIFY_FORSTATICS - -// WhatsUp용 더미 포트 -#define WHATSUP_DUMMY_SERVER - -// 날개 조합 변경 -#define WING_MIX_MODIFY - -// 창고 아이템 복사 버그 수정 -#define WAREHOUSE_ITEMCOPY_BUG_FIX - -// 아이템백 업그레이드 -#define EVENT_ITEMBAG_UPGRADE - -///////////////////////////////////////////////////////// -// 테섭에 적용 중인 것들 -///////////////////////////////////////////////////////// - -// 마검사 방어력 = 민첩 / 5 로 적용 되어 있지 않았음.. (apple) -// 절대 사용금지 -> 마이너스 패치. -//#define MODIFY_CALC_MAGUMSA_DEFENSE_20040511 - -// M: 드라이브 연결 체크, 서버종료메세지 후 프로세스 종료 (apple) -#define APPLY_SERVER_UTIL_20040504 - -// 데미지 반사에 의한 화살 내구력 감소. 요정 화살 감소 수정 (apple) -#define MODIFY_ARROW_DECREASE_ELF_20040503 - -// 로그 무한 증가 1차 Check & Modify (apple) -#define CHECK_LOG_INFINITE_20040426 - -// 세트 방어 미적용 버그 수정 (apple) -#define MODIFY_10_11_12_13_SET_DEFENSE_20040421 - -// 운영 캐릭 명령어처리 로그 (apple) -// [IP][AccountID][Name][Command] -#define ADD_LOG_GM_COMMAND_20040420 - -// 물약 겹치기 버그 수정 (apple) -#define ADD_HP_POTION_LEVEL1_FIX_20040420 - -#if GAME_VERSION >= G_V_99B -// 공지사항 수정 (apple) -// Speed : 25 Default -// Delay : 0 -// Type : 10-15 -#define MODIFY_NOTICE_20040325 -#endif - -// 캐릭터의 최대 소유 ZEN MAX 설정 : MAX 20억 (apple) -#define MODIFY_ZEN_MAX_20040414 - -// 아이템 가격 40억 초과시 40억으로 고정 (apple) -// 아이템 가격 재조정 : 사는 가격 최대 30억(foguy)_밑에 디파인 사용하는거 없어서 대신 사용. -// 아이템 가격 재조정 : 사는 가격 최대 20억(apple) -#define MODIFY_ITEM_PRICE_MAXFIX - -// 아이템 수리 가격 재조정 (최대 4억으로 고정(아이템 가격 재조정에 따른 수리 비용 증가를 막기 위함) -#define MODIFY_ITEM_REPAIRE_MAXMONEY - -// 올미스 처리 변경 (apple) -#define MODIFY_SUCCESSBLOCKING_ALLMISS_20040408 - -// 명령어 처리 추가 (생왕창, 아이템인덱스, 스탯수정등..) (apple) -#define JS_ADD_TEST_COMMAND - -#if GAME_VERSION >= G_V_99B -// 12, 13 아이템 추가 && 물약추가 (apple) -// CHAOS_MIX_UPGRADE 같이 들어가야 함.! -// Viewport 관련 아이템레벨 변환 함수 변경 : 기존 0~7 -> 새로 0~6 -#define ITEM_12_13_20040401 - -// 물약 먹었을때 다른 사람한테 효과 보여주기 (apple) -//#define ADD_EFFECT_POTION_20040401 - -// 레벨업 했을 때 다른 사람한테 효과 보여주기 -// Effect 보내는 함수, 프로토콜 여기서 포함됨 (apple) -#define ADD_EFFECT_LEVELUP_20040401 -#endif - -#if GAME_VERSION >= G_V_99B -// 카오스 조합 타입별로 구분 업그레드 (foguy) -// +12, +13과 같이 패치 되어야함 (apple) -#define CHAOS_MIX_UPGRADE -#endif -// HP 생명 물약 +1 추가 (apple) -#define ADD_HP_POTION_LEVEL1_20040401 - -// 이벤트 관련 옵션 리로드 -> commonserver.cfg 에 데이터는 그대로 있고 읽는 경로만 ReadCommonServerInfo() 와 분리 (b4nfter) -#define EVENT_OPTION_RELOAD_20040305 - -// 이벤트 외의 옵션 리로드 -> commonserver.cfg 에 데이터는 그대로 있고 이벤트 외의 게임옵션 리로드 (b4nfter) -#define ETC_OPTION_RELOAD_20040308 - -// 사용자가 종료를 선택했을때 로그 남김 (foguy) -#define ADD_LOG_USER_CLOSE_SET - -#if GAME_VERSION >= G_V_99B -// 이동, 공격, 패킷 변경(foguy) -#define PACKET_CHANGE -#endif - -// 길드워 종료 처리 시간 조정 -#define CHANGE_GUILD_WAR_END_DELAYTIME - -// 게임서버 정보 -> 접속서버 군 전달 - 접속서버가 분산구조로 바뀜에 따라 추가 (b4nfter) -// #define GAMESERVER_INFO_TO_CSS_20040317 - -// 세트 아이템 옵션 정보(foguy) -// [20060821 코드 삭제] -// #define ADD_SET_ITEM_OPTION - - -///////////////////////////////////////////////////////// -// 기능은 되었는데 안쓰는것 -// 접속 <-> 게임서버 정보전달 TCP (b4nfter) -// #define GAMESERVER_INFO_TCP_20031203 -// 부활 영웅시스템 (b4nfter) -// #define HERO_SYSTEM_MODIFY -// 부활 영웅시스템 끝 -///////////////////////////////////////////////////////// -#endif - - -/////////////////////////////////////////////////////////////////// -// -// ◆ 마스터레벨 시스템 ◆ -// -/////////////////////////////////////////////////////////////////// -#ifdef MASTER_LEVEL_SYSTEM_20070912 -// 마스터레벨 성장 시스템 -#define MASTER_LEVEL_UP_SYSTEM_20070912 - -// 마스터레벨 전용등급 이벤트맵 추가 -#define ADD_DEVILSQURE_FOR_MASTER_LEVEL_20071010 // 데빌스퀘어7 추가 -#define ADD_BLOODCASTLE_FOR_MASTER_LEVEL_20071010 // 블러드캐슬8 추가 -#define ADD_CHAOSCASTLE_FOR_MASTER_LEVEL_20071010 // 카오스캐슬7 추가 -#define ADD_ILLUSIONTEMPLE_FOR_MASTER_LEVEL_20071010 // 환영사원6 사용 (비활성화 된 레벨을 활성화) - -// 명령어 -#define ADD_MASTER_LEVEL_SYSTEM_COMMAND_20071122 // 마스터레벨 관련 테스트용 명령어 추가 - -// 마스터레벨 스킬 시스템 -#define EXPAND_SKILL_SCRIPT_FOR_MASTER_LEVEL_20071122 // skill(kor).txt 스크립트 확장 -#define MASTER_LEVEL_SKILL_SYSTEM_20071122 // 마스터레벨 스킬 시스템 - -//해외로 빌드시 컴파일 에러가 발생하여 임시로 상위 디파인조건을 추가함 - riverstyx -#ifdef PCBANG_POINT_SYSTEM_20070206 -// PC방 아이템 관련 버프시스템 수정 -#define BUGFIX_BUFF_EFFECT_SYSTEM_FOR_PCBANG_ITEM_20071205 - -// PC방 관련해서 해외 적용 되지 않음.(20081106-grooving) -// [버그수정] 환영사원 보상경험치 풍용의 인장 제거(goni) -#define MODIFY_EVENTMAP_REWARD_BUGFIX_20080404 -#endif // PCBANG_POINT_SYSTEM_20070206 - -// [버그수정] 레벨업을 했을 때 경험치가 추가로 클라이언트에 전송되는 문제 수정 -// 기존에 있던 클라이언트 버그를 서버에서 처리함. -// 마스터레벨 시스템 관련하여 경험치 계산 부분을 INT64로 변경. -#define BUGFIX_GAIN_EXP_20071210 - -// [버그수정] 스킬 기본 요구에너지 값 변경 (RKFKA) -#define MODIFY_BASIC_SKILL_REQENG_20080102 - -// [코드삭제] DS에 데이터 요청 두번 하는 것 수정 -#define DELETE_GD_REQUEST_20080110 - -// 시즌 3+ 마스터레벨 스킬 추가 -#define ADD_MASTER_LEVEL_SKILL_PASSIVE_20080107 // 패시브 스킬 추가 -#define ADD_MASTER_LEVEL_SKILL_SYSTEM_ACTIVE_20080107 // 액티브스킬 시스템 및 액티브스킬 추가 - -#ifdef ADD_SEASON_4_UPDATE_20080617 -// [업데이트] 마스터레벨 4랭크 추가(goni) -#define UPDATE_MASTER_LEVEL_4RANK_20080428 -#endif // ADD_SEASON_4_UPDATE_20080617 - -// [테스트 메세지] -//#define TEST_MSG_MLS_ACTIVE_20080131 -#endif - -/////////////////////////////////////////////////////////////////// -// -// ◆ PC방 이벤트 ◆ -// -/////////////////////////////////////////////////////////////////// -#ifdef PCBANG_REVITALIZATION_EVENT_20060830 -#define ADD_ELITE_SKELETON_WORRIOR_CHANGE_RING_20060830 // 엘리트해골전사변신반지가 추가되어 있어야 한다. -#define PCBANG_COUPON_EVENT_20060124 // PC방 쿠폰이벤트를 기본으로 사용한다. -#endif - -/////////////////////////////////////////////////////////////////// -// -// ◆ 칸투르 ◆ -// -/////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////////////////// -#if GAME_VERSION >= G_V_S2_2 -#define KANTURU_MOONSTONEPENDANT_20060804 // 문스톤 펜던트 처리 추가 (RKFKA) -#define ADD_NEW_MAP_KANTURU_BOSS_20060627 // 칸투르 보스맵 추가 (RKFKA) -#define ADD_NEW_MAP_KANTURU_COMMON_20060523 // 칸투르 일반 맵 추가 (RKFKA) -#define KANTURU_PROTOCOL_20060705 // 칸투르 프로토콜 추가 (RKFKA) -#endif - -/////////////////////////////////////////////////////////////////// -#ifdef ADD_KANTURU_20060627 - -//#define KANTURU_TEST_200607119 // 칸투르 테스트용 디파인 - 작업이 끝나면 모두 삭제한다. (RKFKA) -#define KANTURU_BOSSMONSTER_EXP_NONE_20060809 // 칸투르 보스몬스터는 경험치를 주지 않는다. -#define KANTURU_SPECIAL_ITEMDROP_20060808 // 칸투르 조화의보석/문스톤 드랍 -#define KANTURU_MONSTER_ITEMDROP_20060807 // 칸투르 몬스터 마야손, 나이트메어 아이템 드롭 (RKFKA) -#define ADD_KANTURU_CONDITION_20060725 // 칸투르 기타 작업내용 보완 (hnine) -#define KANTURU_GM_COMMAND_20060709 // 칸투르 운영자용 명령어 추가 (RKFKA) -#define ADD_NEW_NPC_KANTURU_20060612 // 칸투르 NPC추가 (RKFKA) -#endif -//----------------------------------------------------------------- - - - - -/////////////////////////////////////////////////////////////////// -// -// ★ 크라이울프 ☆ -// -/////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////////////////// -#ifdef CRYWOLF_PRECEDENCE_PATCH_20050413 -//----------------------------------------------------------------- - -#ifndef CASTLE_SIEGE_COMMON_PATCH_20041018 -#define CASTLE_SIEGE_COMMON_PATCH_20041018 -#endif - -#ifndef DEVILSQUARE_EXTEND_20050221 -#if TESTSERVER == 1 -#define DEVILSQUARE_EXTEND_20050221 -#endif -#endif - -#ifndef ADD_NEW_MAP_AIDA_20050617 -#define ADD_NEW_MAP_AIDA_20050617 -#endif - -//----------------------------------------------------------------- -#endif -/////////////////////////////////////////////////////////////////// - - -/////////////////////////////////////////////////////////////////// -#ifdef CRYWOLF_COMMON_PATCH_20050413 -//----------------------------------------------------------------- -#define ADD_NEW_MAP_CRYWOLF_FIRSTZONE_20050414 // 크라이울프 1차 지역맵 추가 -#define ADD_NEW_MAP_CRYWOLF_SECONDZONE_20050414 // 크라이울프 2차 지역맵 추가 - -#define MU_CRYWOLF_SERVER_SYNC_20050505 // 크라이울프 관련 서버 간 동기화 작업 -#define MU_CRYWOLF_CL_PROTOCOL_20050505 // 크라이울프 - GS <-> CL 프로토콜 -#define MU_CRYWOLF_DS_PROTOCOL_20050505 // 크라이울프 - GS <-> DS 프로토콜 - -#define MU_CRYWOLF_BENEFIT_20051215 // 크라이울프 MVP 승리 혜택 -#define MU_CRYWOLF_PENALTY_20051215 // 크라이울프 MVP 패배 패널티 - -#define CRYWOLF_MVP_REWARD_RANK_20051215 // 크라이울프 MVP 결과에 대한 랭크 및 포상 - -//----------------------------------------------------------------- -#endif -/////////////////////////////////////////////////////////////////// - - -/////////////////////////////////////////////////////////////////// -#ifdef CRYWOLF_ONLY_PATCH_20050413 -//----------------------------------------------------------------- - -#define CRYWOLF_MAIN_SCHEDULER_20050505 // 크라이울프 일정과 데이터를 관리하는 스케쥴러 - -#define CRYWOLF_MONSTER_WORK_20050914 // 크라이울프 MONSTER 처리 -#define CRYWOLF_NPC_WORK_20050912 // 크라이울프 NPC 처리 -#define CRYWOLF_MAP_SETTING_20050915 // 크라이울프 점령 상태에 따라 맵 속성 설정 - -#define CRYWOLF_GM_COMMAND_20050525 // 크라이울프 운영자 명령어 - -#define CRYWOLF_MVP_DISABLE_USER_ITEMDROP_20051217 // 크라이울프 MVP 시에는 죽었을 때 아이템 드랍되지 않음 -#define CRYWOLF_MVP_DISABLE_USER_ZENDOWN_20060116 // 크라이울프 MVP 시에는 죽었을 때 젠이 감소 하지 않음 - -#define CRYWOLF_MODIFY_REGEN_POS_ON_MVP_20060116 // 크라이울프 MVP 시에 죽었을 때 리젠 위치 - - -//----------------------------------------------------------------- -#endif -/////////////////////////////////////////////////////////////////// - - - - -/////////////////////////////////////////////////////////////////// -// -// ★ 공성전 ☆ -// -/////////////////////////////////////////////////////////////////// - - -/////////////////////////////////////////////////////////////////// -#ifdef CASTLE_SIEGE_COMMON_PATCH_20041018 // 공성전 서버와 일반 서버간에 공통되는 패치부분 -//----------------------------------------------------------------- -//#define MODIFY_MARKOFLORD_OVERLAPPED_20050530 // 성주의 표식이 인벤토리 상에서 겹쳐지도록 수정 -#define ADD_NEW_MAP_CASTLE_20041115 // 공성전 맵 추가 -#define ADD_NEW_NPC_CASTLE_20041115 // 공성전 관련 NPC 추가 -#define MAP_SERVER_WORK_20041030 // 맵서버 분할 작업 - -#define MU_CASTLESIEGE_SERVER_SYNC_20041130 // 공성전 서버들 간에 동기화를 맞추는 일련의 작업들 -#define MU_CASTLESIEGE_CL_PROTOCOL_20041122 // 뮤 공성전 - 뮤 클라이언트 관련 프로토콜, 통신 부분 -#define MU_CASTLESIEGE_DS_PROTOCOL_20041105 // 뮤 공성전 - 데이터 서버 관련 프로토콜, 통신 부분 -#define MU_CASTLESIEGE_TAX_SYSTEM_20041219 // 성 경제 시스템 구현 관련 -#define MU_CASTLESIEGE_CS_MARKS_20041214 // 성주의 표식 아이템 관련 작업들 - -#define MODIFY_CASTLE_PK_01_20050309 // 성주 길드가 성에서 PK 했을 경우에 대한 처리 - -#define ADD_NEW_GEM_OF_DEFEND_FOR_CS_01_20050301 // 공성에서의 수호 보석 설정, 드랍률설정 가능. -#define ADD_NEW_CASTLE_FLAG_01_20041227 // Castle 깃발 및 장식 정보 -#define ADD_NEW_MERCENARY_FOR_CASTLE_01_20041214 // 공성 용병 NPC 추가 -#define ADD_NEW_ITEM_FOR_CASTLE_01_20041116 // ITEM 추가 -#define ADD_NEW_SKILL_FOR_CASTLE_01_20041116 // 캐릭터 스킬 추가 - -#define ADD_NEW_WEAPON_FOR_CASTLE_01_20041116 // 공성 무기 추가 -#define ADD_NEW_VIEWPORT_SYSTEM_01_20041201 // 공성 무기 뷰포트 시스템 -#define ADD_NEW_MAP_CASTLE_HUNTZONE_20041115 // 사냥터 맵 추가 -#define EXPAND_INTERFACE_BYTE_TO_DWORD_20041209 // m_IfState BYTE -> DWORD 로 확장 -#define EXPAND_VIEWSKILLSTATE_WORD_TO_INT_20041122 // ViewSkillState WORD -> INT 로 확장 -#define EXPAND_MAX_MAGICLIST_20_TO_60_20041126 // MagicList 확장 20개 -> 60개로 확장 -//----------------------------------------------------------------- -#endif //CASTLE_SIEGE_COMMON_PATCH_20041018 - - -#define MAP_SERVER_ADD_MONSTER_20041216 // 맵서버 분할 관련 몬스터 추가 함수 변경 (서버가 가지고 있는 맵만 추가되도록) - -// 인증서버에 서버코드 추가 (공성) -#define JOINSERVER_USING_SERVERCODE -// 인증서버에 서버코드 추가 끝 -/////////////////////////////////////////////////////////////////// - - -/////////////////////////////////////////////////////////////////// -#ifdef CASTLE_SIEGE_ONLY_PATCH_20041018 // 공성전 서버만 필요한 패치부분 -//----------------------------------------------------------------- -#define DISABLE_GETTING_EXP_FROM_GUARDTOWER_20070801 // 가드타워 파괴 시 경험치를 얻지 못하게 한다. -#define CASTLE_NPC_DONT_DROP_ITEM_20050517 // 공성전 NPC들은 아이템을 떨구지 않는다. -#define CASTLEDEEP_EVENT_20050413 // 로랜협곡 습격 이벤트 (b4nfter) -#define CASTLE_SPECIAL_ITEMMIX_20050425 // 성주혜택 특별 아이템 조합 (b4nfter) -#define MU_CASTLESIEGE_START_NOTIFY_20050418 // 공성전 시작 전 N분 부터 전 서버에 공성전 알람 시작 -#define MU_CASTLESIEGE_STATE_SEC_VIEW_20050413 // 공성전 상태 남은시간 표시 -//#define CASTLE_NPC_TEST_STATE_20050118 // 공성전 NPC에 테스트용 임시수치 적용 -#define CASTLE_SAVE_PCROOM_USERLIST_20050105 // PC방 이벤트 관련 - 공성전 참여자들의 PC방 정보 저장 -//#define CASTLE_TEST_SCHEDULER_20041218 // 테스트 스케쥴러를 사용한다. (모든 단계는 5분씩) -#define CASTLE_GM_COMMAND_20041222 // 공성전 운영자 명령어 -//#define CASTLE_POTION_NPC_20041222 // 공성전 맵의 물약파는 NPC 처리 -#define CASTLE_MAIN_SCHEDULER_20041111 // 공성전의 일정과 데이터를 관리하는 스케쥴러 -#define CASTLE_NPC_GATE_WORK_20041206 // 성문 처리와 관련된 작업들 -#define CASTLE_NPC_GUARDIANSTATUE_WORK_20041207 // 석상 처리와 관련된 작업들 -#define CASTLE_NPC_LIFESTONE_WORK_20041208 // 라이프스톤 (진지) 처리와 관련된 작업들 -#define CASTLE_NPC_CROWN_WORK_20041210 // 왕관 처리와 관련된 작업들 -#define CASTLE_NPC_CROWN_SWITCH_WORK_20041210 // 왕관 스위치 처리와 관련된 작업들 -#define CASTLE_NPC_CANNON_TOWER_20041223 // 캐논타워 처리와 관련된 작업들 -#define MU_CASTLESIEGE_JOINSIDE_VIEWPORT_20041209 // 공성전 시 공/수 양측의 소속 상태를 뷰포트에 추가하여 표시함 -#define MU_CASTLESIEGE_LOG_20050107 // 공성전 별도 로그 관리 -#define ADD_CASTLE_HUNTZONE_MONSTER_01_20050111 // 사냥터 몬스터. 특히 BOSS 몹 처리 -#define ADD_CASTLE_HUNTZONE_NPC_01_20050111 // 사냥터 문지기 등. -#define ADD_NEW_CASTLE_HUNTZONE_REWARD_01_20050303 // 공성 사냥터에서 보상 추가.(1.보스몹에 대해) -#define ADD_NEW_CASTLE_HUNTZONE_REWARD_02_20050314 // 공성 사냥터에서 세트아이템 드랍 추가.(2.시련의땅에서만) -#define MODIFY_RANGEATTACK_CHECK_20050113 // 범위 스킬 공격방식 변경 (공성맵에서 공성전 중일 때 사람도 맞도록) -#define MODIFY_UPDATING_VIEWPORT_20050118 // 반지 버릴 경우 캐릭터를 다시 그리라는 명령을 클라이언트에게 주지 않는다. - -#define MODIFY_ANS_GIVEUP_20050413 // 공성 선포 기간같이 공성포기기간이 아닐때 클라이언트로 보내주는 에러 처리 수정 (apple) -//----------------------------------------------------------------- -#endif //CASTLE_SIEGE_ONLY_PATCH_20041018 -/////////////////////////////////////////////////////////////////// - - - -/////////////////////////////////////////////////////////////////// -// -// ◆ 이벤트 ◆ - Old Style... -// -/////////////////////////////////////////////////////////////////// -// Blood Castle용 -#define FOR_BLOODCASTLE // 블러드 캐슬용임 -#define FOR_BLOODCASTLE2 // 블러드 캐슬용 추가 작업(foguy) -#define FOR_BLOODCASTLE3 // 블러드 캐슬용 추가 작업(b4nfter - 2003.10.21 패치) -#if GAME_VERSION >= G_V_99B -#define BLOODCASTLE_EXTEND_20040314 // 블러드캐슬 7개로 확장 (수정되는 리소스 gate.txt, MonsterSetBase.txt, BloodCastle.dat) -#define BLOODCASTLE_EVENT_3RD_20040401 // 블러드캐슬 3차 이벤트 (캐슬 남은시간 저장) (b4nfter) -#define BLOODCASTLE_EVENT_4TH_20040531 // 블러드캐슬 4차 이벤트 (캐슬 남은시간 저장) (b4nfter) -#define BLOODCASTLE_EVENT_5TH_20050531 // 블러드캐슬 5차이벤트. 파티중심으로 변경 (b4nfter) -#endif - -// 엘도라도의 상자이벤트 -#define ELEGORADO_EVENT -/////////////////////////////////////////////////////////////////// - - -#if GAME_VERSION >= G_V_99B -/////////////////////////////////////////////////////////////////// -// -// ◆ 기본 시스템 ◆ - Old Style... -// -/////////////////////////////////////////////////////////////////// -// 결투 시스템 -#define DUEL_SYSTEM_20031028 -#define DUEL_SYSTEM_FIX_20031224 - -// 2차 퀘스트 -#define SECOND_QUEST - -// 무리 몬스터 시스템 -#define MONSTER_HERD_SYSTEM_20031120 - -// 다크로드 작업 (아이템 스크립트 확장도 같이 들어감) -#define DARKLORD_WORK - -// 개인상점 추가 (b4nfter) -#define PERSONAL_SHOP_20040113 -#define PERSONAL_SHOP_BUG_FIX -#define ADD_SHOP_11_12 // 상점 추가 -#endif - -// 길드 서버 적용 -#define _NEW_EXDB_ - -#define QUEST_BUG_FIX // 퀘스트 버그 수정 - -/////////////////////////////////////////////////////////////////// - - -#ifdef MAP_SERVER_WORK_20041030 // 맵서버 분할 작업 관련 추가 패치 -//#define MAP_SERVER_ADD_MONSTER_20041216 // 맵서버 분할 관련 몬스터 추가 함수 변경 (서버가 가지고 있는 맵만 추가되도록) -#endif //MAP_SERVER_WORK_20041030 - - -#define LOLONG(l) ((DWORD)((UINT64)(l) & 0xFFFFFFFF)) -#define HILONG(l) ((DWORD)((UINT64)(l) >> 32)) -#define MAKELONGLONG(a, b) ((INT64)(((DWORD)((UINT64)(a) & 0xFFFFFFFF)) | ((INT64)((DWORD)((UINT64)(b) & 0xFFFFFFFF))) << 32)) - -#ifdef ADD_NEW_ITEM_FOR_CASTLE_01_20041116 -// D E F I N E : 공성 아이템 추가 -#ifdef MODIFY_SIEGE_POTION_OVERLAP_COUNT_20060511 -#define MAX_SPECIAL_POTION_OVERLAP_COUNT 250 -#else -#define MAX_SPECIAL_POTION_OVERLAP_COUNT 160 -#endif - -// 수정 MODIFY_CASTLE_POTION_20051017 -// BLESS:60 -> 120, SOUL:30 -> 60 -#define CASTLE_BLESSPOTION_ACTIVETIME 120 -#define CASTLE_SOULPOTION_ACTIVETIME 60 - - -// D E F I N E : 영혼의 물약 AG 회복값 -#define CASTLE_SOULPOTION_AG_REFILL_POINT 8 - -// D E F I N E : 영혼의 물약 저항력 증가값(%) -#define CASTLE_SOULPOTION_ADD_RESISTANCE 50 - - -#endif - -#ifdef ADD_NEW_SKILL_FOR_CASTLE_01_20041116 -// D E F I N E : 공성 스킬 추가 -enum SKILL_LIST_TYPE -{ - // 기본 - SKILL_LIST_TYPE_DEFALT = 0x00, - // 스킬 추가 - SKILL_LIST_TYPE_ADD = 0x01, - // 스킬 제거 - SKILL_LIST_TYPE_DEL = 0x02, - -}; - -enum KILLCOUNT_OPTION -{ - KILLCOUNT_RESET = 0x00, - KILLCOUNT_INC = 0x01, - KILLCOUNT_DEC = 0x02, -}; - -#endif - -#ifdef ADD_CASTLE_HUNTZONE_NPC_01_20050111 -// D E F I N E : 사냥터 NPC 추가 - -#define CASTLE_HUNTZONE_GATE_01 106 - -enum CASTLE_HUNTZONE_NPCTALK_RESULT -{ - CASTLE_HUNTZONE_ENTRANCE_DISABLE = 0x00, - CASTLE_HUNTZONE_ENTRANCE_ENABLE = 0x01, - CASTLE_HUNTZONE_ENTRANCE_ENABLE_TO_MEMBER = 0x02, - CASTLE_HUNTZONE_ENTRANCE_ENABLE_TO_OWNER = 0x03, -}; - -enum CASTLE_HUNTZONE_SETTING -{ - CASTLE_HUNTZONE_SETTING_FAIL = 0x00, - CASTLE_HUNTZONE_SETTING_SUCCESS = 0x01, - -}; - -enum CASTLE_HUNTZONE_USAGE -{ - CASTLE_HUNTZONE_USAGE_DISABLE = 0x00, - CASTLE_HUNTZONE_USAGE_ENABLE = 0x01, - -}; -#endif - - -/////////////////////////////////////////////////////////////////// -// -// 친구 시스템 -// -/////////////////////////////////////////////////////////////////////// -#ifdef __FRIEND_WORK__ -#define MAX_MEMO_SUBJECT 32 -#define MAX_MEMO 1000 -#define MAX_DATE 30 - -#define FRIENDSERVER_ONLINE 0 // 친구 서버 온라인 상태 -#define FRIENDSERVER_OFFLINE 1 // 친구 서버 오프라인 상태 -#define FRIENDSERVER_ONLINEREQUEST 2 // 친구 서버에 접속 요청 중 - -#endif - -////////////////////////////////////////////////////////////////////////// -// -// 인증 정보 -// -////////////////////////////////////////////////////////////////////////// -#ifdef UPDATE_UNIFICATIONBILL_20090203 -enum -{ - BILL_TYPE_NONE = 0, // 없음 - BILL_TYPE_PERSONAL_AMOUNT = 1, // 개인 정액 - BILL_TYPE_PCBANG_AMOUNT = 2, // PC방 정액 - BILL_TYPE_PCBANG_QUANTITY = 3, // PC방 정량 - BILL_TYPE_PERSONAL_QUANTITY = 4, // 개인 정량 - BILL_TYPE_COLLOR = 5, // 컬러 요금제(개인) -}; -#define MAX_LOGIN_COUNT 6 -#else // UPDATE_UNIFICATIONBILL_20090203 -#define MAX_LOGIN_COUNT 3 - -#define CERTIFYTYPE_ACCOUNT 0 // 계정인증 -#define CERTIFYTYPE_IP 1 // IP 인증 - -#define BILLTYPE_JUNGYANG 0 // 정량 -#define BILLTYPE_JUNGACK 1 // 정액 -#define BILLTYPE_JONGYANG 2 // 종량 -#define BILLTYPE_TIME 3 // 시간제 -#define BILLTYPE_DATE 4 // 날짜제 -#define BILLTYPE_NOCHARGE 5 // 무료 -#endif // UPDATE_UNIFICATIONBILL_20090203 -//---------------------------------------------------------------------------- -// 인증서버에 접속하는 프로그램의 타입 -#define ST_GAMESERVER 1 // 게임서버 번호 - -#define DEFMAPSERVERPORT 55900 // Map Server port number -#define DEFJOINSERVERPORT 55970 // Join Server port number -#define DEFDATASERVERPORT 55960 // Game Data Server Port number -#ifdef ADD_GAMESERVER_PARAMETER_20050728 -#define DEFEXDBSERVERPORT 55906 // ExDB Server Port number -#endif - -//---------------------------------------------------------------------------- -// 계정정보에 사용되는 정의들.. -#define MAX_JOOMINNUMBERSTR 13 // 주민등록번호 스트링 크기 -를 –A 크기이다. -#define MAX_QUESTIONSTR 30 // 질문 스트링 크기 -#define MAX_ANSWERSTR 30 // 답변 스트링 크기 -#define MAX_PHONENUMBERSTR 20 // 전화번호 스트링 크기 -#define MAX_EMAILSTR 50 // e-mail 스트링 크기 - - -////////////////////////////////////////////////////////////////////////// -// -// 서버 타입 정보 -// -////////////////////////////////////////////////////////////////////////// -// Server Type -#define ST_JOINSERVER 0 // 인증 접속 서버 -#define ST_GAMESERVER 1 // 게임 서버 -#define MAX_CHAT 60 // 대화 최대 크기 -#define MAX_GUILDNOTICE 60 // 최대 길드 공지 길이 - - -#ifdef GAMESERVER_INFO_TO_CSS_20040317 // 접속서버분산 - 매크로선언 -#define MAX_CS_COUNT 32 // 최대 접속서버의 개수 -#endif - -////////////////////////////////////////////////////////////////////////// -// -// 시스템 기본 정보 -// -////////////////////////////////////////////////////////////////////////// -#define MAX_ROADPATH 15 // 사용자가 이동하는 PATH 최대 크기 -#define MAX_PATHDIR 8 // 이동에 사용되는 방향 개수 -#define MAX_IDSTRING 10 // 아이디 크기 -#ifdef UPDATE_USERPASSWORD_LENGTH_20090424 -#define MAX_PASSWORD_LENGTH 20 -#define MAX_JOOMINNUMBER_LENGTH 20 -#else // UPDATE_USERPASSWORD_LENGTH_20090424 -#define MAX_PASSWORD_LENGTH 12 -#endif // UPDATE_USERPASSWORD_LENGTH_20090424 -#define DEFAULT_MONEY 0 // 초기 주어지는 돈 액수 - -#define MAX_LEVEL 1000 // 레벨 최대 크기 - -#ifdef MASTER_LEVEL_UP_SYSTEM_20070912 // 마스터레벨 최대 크기 -#define MAX_MASTER_LEVEL 200 -#endif - -#ifdef ITEM_12_13_20040401 -#define MAX_ITEMLEVEL 15 // 레벨 최대 크기 -#else -#define MAX_ITEMLEVEL 15 // 레벨 최대 크기 -#endif - -#define MAX_PRESENTNAME 50 // 최대 경품 이름 - -#ifdef MODIFY_ZEN_MAX_20040414 -#define MAX_ZEN 2000000000 -#else -#define MAX_ZEN 2000000000 -#endif - -#define MAXVIEWPORTOBJECT 75 // 뷰포트 최대 OBJECT 수 -#ifdef GAMESERVER_TO_CASTLESIEGESERVER // 공성전 전용서버 일때의 몬스터 뷰포트 변화 -#define MAX_MONVIEWPORTOBJECT 75 // 몬스터의 뷰에는 최대 50 마리 까지 표시 (공성전 전용서버 일 때만) -#else -#define MAX_MONVIEWPORTOBJECT 20 // 몬스터의 뷰에는 최대 20 마리 까지 표시 -#endif - -#define MAXUSERCHARACTER 5 // 유저당 가질수 있는 최대 캐릭터 수 - -#define MAX_GUILDNAMESTRING 8 // 길드 이름 스트링 길이 - -#define MAX_GUILDMARKSIZE 32 // 길드 마크 버퍼 크기 - -#define MAX_DBEQUIPMENT 120 // (12x10) 데이터베이스 읽기&저장되는 장비데이터 크기 - -#ifdef PERSONAL_SHOP_20040113 -#define MAX_PSHOP_TEXT 36 // 개인상점 텍스트의 최대크기 - -#ifdef ITEM_DBSIZE_EXTEND_20050706 -#define MAX_DBINVENTORY 3792//1728 // (8x8x10)+120+(8x4x10) 데이터베이스 읽기&저장되는 인벤토리데이터 크기 -#else -#define MAX_DBINVENTORY 1080 // (8x8x10)+120+(8x4x10) 데이터베이스 읽기&저장되는 인벤토리데이터 크기 -#endif - -#else -#define MAX_DBINVENTORY 760 // (8x8x10)+120 데이터베이스 읽기&저장되는 인벤토리데이터 크기 -#endif - -#ifdef ITEM_DBSIZE_EXTEND_20050706 -#define MAX_ITEMDBBYTE 16 // 아이템이 DB에 저장되는 바이트 수 -#define MAX_ITEMDBBYTE_V02 10 // 아이템이 DB에 저장되는 바이트 수 -#else -#define MAX_ITEMDBBYTE 10 // 아이템이 DB에 저장되는 바이트 수 -#endif - -#define MAX_ITEMDBBYTE_V00 7 // 아이템이 DB에 저장되는 바이트 수 - -#ifdef ITEM_INDEX_EXTEND_20050706 -#define ITEM_INDEX_NOT_EXIST 511 // 9비트 아이템 인덱스 (4비트 아이템 타입) 일 경우 존재하지 않는 갑옷류 아이템의 인덱스 -#endif - -#ifdef ADD_ITEM_SOCKET_OPTION_EXTEND_20080422 -#define ITEM_BUFFER_SIZE 12 // 아이템 패킷 버퍼 크기 -#else -#ifdef ITEM_INDEX_EXTEND_20050706 -#define ITEM_BUFFER_SIZE 7 // 아이템 패킷 버퍼 크기 -#elif GAME_VERSION >= G_V_99B -#define ITEM_BUFFER_SIZE 5 // 아이템 패킷 버퍼 크기 -#else -#define ITEM_BUFFER_SIZE 4 -#endif -#endif // ADD_ITEM_SOCKET_OPTION_EXTEND_20080422 - -#define MONEY_BUFFER_SIZE 4 // 젠 패킷 버퍼 크기 - -#ifdef ITEM_DBSIZE_EXTEND_20050706 -#define MAX_WAREHOUSEDBSIZE 3840//1920 -#else -#define MAX_WAREHOUSEDBSIZE 1200 -#endif - -#define MAX_WAREHOUSEITEMS (8*15) - -#define MAX_CHAOSBOXSIZE 8*4 -#define MAX_CHAOSBOXITEMS 8*4 - - -#define MAX_EQUIPMENT 12 -#define MAX_INVENTORYMAP 8*8 -#define MAX_INVENTORY (MAX_EQUIPMENT + MAX_INVENTORYMAP) // (8x8)+12 인벤토리 최대 개수 -#define MAX_TRADEITEM 32 // (8x4) -#define INVENTORY_EXT4_SIZE 204 - -#ifdef PERSONAL_SHOP_20040113 -#define MAX_PSHOPITEM 8*4 // (8x4) 개인상점창 -#define MAX_PSHOPITEMMAP 8*4 // (8x4) 개인상점창 맵 - //76 -#define MAX_INVENTORY_EXTEND (MAX_INVENTORY + MAX_PSHOPITEM) // (8x8)+12+(8*4) DB저장 시 인벤토리 최대 개수 -#endif - -#define MAX_DBMAGIC (MAX_MAGIC*3) // 데이터베이스에 저장되는 마법 데이터 크기 - -#ifdef ITEM_DBSIZE_EXTEND_20050706 -#define ITEM_BITSHIFT 9 -#else -#define ITEM_BITSHIFT 5 -#endif - -#ifdef ADD_NOT_SELL_EQUIPITEM_20080625 -#define IS_EQUIPITEM(pos) (pos >= EQUIPMENT_WEAPON_RIGHT && pos < MAX_EQUIPMENT) ? TRUE : FALSE -#endif // ADD_NOT_SELL_EQUIPITEM_20080625 - -////////////////////////////////////////////////////////////////////////// -// -// 캐릭터에 관련된 정의들 -// -////////////////////////////////////////////////////////////////////////// -#define PK_MINIMUM_LEVEL 5 // 사용자끼리 죽일수 있는 최소 레벨 - -#ifdef ADD_SEASON_3_NEW_CHARACTER_SUMMONER_20070912 // 채대 종족 개수 확장 -#define MAX_CLASSTYPE 8//6 // 최대 종족 개수 8for s12 -#else -#ifdef DARKLORD_WORK -#define MAX_CLASSTYPE 5 // 최대 종족 개수 -#else -#define MAX_CLASSTYPE 4 // 최대 종족 개수 -#endif -#endif // ADD_SEASON_3_NEW_CHARACTER_SUMMONER_20070912 - -#define MAX_PREVIEWCHARSET 9 // 캐릭터 세트 최대 크기( 미리보기용 버퍼 ) - -#define MAX_RESISTANCE 7 // 세트 아이템으로 인해 7로 증가 - - -#ifdef GAMESERVER_TO_CASTLESIEGESERVER // 공성전 전용서버는 사용자 오브젝트의 개수를 늘리고 몬스터 개수를 줄인다. -#if TESTSERVER == 1 -#define MAX_OBJECT 7400 // 게임서버의 최대 오브젝트(유저) 수 -#define MAX_MONSTER 5800 -#define MAX_CALLMONSTER 600 -#define MAX_USER 1000 -#else -#define MAX_OBJECT 4000 // 게임서버의 최대 오브젝트(유저) 수 -#define MAX_MONSTER 1500 -#define MAX_CALLMONSTER 1000 -#define MAX_USER 1500 -#endif // TESTSERVER - -#else - -#ifdef MODIFY_ILLUSIONTEMPLE_BUGFIX_3_20070731 -#define MAX_OBJECT 9000 // 게임서버의 최대 오브젝트(유저) 수 -#define MAX_MONSTER 7400 -#define MAX_CALLMONSTER 600 -#define MAX_USER 1000 -#else -#ifdef CHAOSCASTLE_SYSTEM_20040408 -#define MAX_OBJECT 7400 // 게임서버의 최대 오브젝트(유저) 수 -#define MAX_MONSTER 5800 -#define MAX_CALLMONSTER 600 -#define MAX_USER 1000 -#else -#define MAX_OBJECT 5650 // 게임서버의 최대 오브젝트(유저) 수 -#define MAX_MONSTER 4800 -#define MAX_CALLMONSTER 600 -#define MAX_USER 250 -#endif // CHAOSCASTLE_SYSTEM_20040408 -#endif // MODIFY_ILLUSIONTEMPLE_BUGFIX_3_20070731 -#endif // GAMESERVER_TO_CASTLESIEGESERVER - -#define ALLOC_USEROBJECTSTART (MAX_MONSTER+MAX_CALLMONSTER) // 게임서버의 최대 오브젝트(유저) 수 - -#define OBJTYPE_CHARACTER 1 // 오브젝트 타입이 유저캐릭터이다. -#define OBJTYPE_MONSTER 2 // 오브젝트 타입이 몬스터이다. -#define OBJTYPE_NPC 3 // 오브젝트 타입이 NPC 이다. -#define OBJTYPE_ITEM 5 // 아이템이다. - -//---------------------------------------------------------------------------- -// Killer Type ( 죽였을 -#define KT_CHAR 0 // 플레이어한테 죽었다. -#define KT_MONSTER 1 // 몬스터한테 죽엇따. -#define KT_GUILDWARCHAR 2 // 길드전에서 플레이어가 죽였다. - -#ifdef DUEL_SYSTEM_20031028 -#define KT_DUELCHAR 3 // 결투 중에 플레이어가 죽였다. -#endif - -////////////////////////////////////////////////////////////////////////// -// -// 게임에 사용되는 정의들 -// -////////////////////////////////////////////////////////////////////////// -#define MAX_LEVELUPPOINT 5 // 캐릭터당 레벨업 했을때 포인트 - -#ifdef ADD_GAMBLING_20090120 // 겜블링 상점개수 추가 -#define MAX_SHOP 20 -#else // ADD_GAMBLING_20090120 -#ifdef ADD_SEASON_3_NEW_MAP_20070910 // 엘베란드 상점개수 추가 -#define MAX_SHOP 18 -#else -#ifdef ADD_SHOP_14_20070308 -#define MAX_SHOP 15 -#else -#ifdef ADD_FIRECRACKER_NPC_20070306 // 상점 개수 추가 -#define MAX_SHOP 14 // 최대 상점 개수 -#else // ADD_FIRECRACKER_NPC_20070306 -#ifdef ADD_SHOP_11_12 -#define MAX_SHOP 13 // 최대 상점 개수 -#else -#define MAX_SHOP 12 // 최대 상점 개수 -#endif -#endif // ADD_FIRECRACKER_NPC_20070306 -#endif // ADD_SHOP_14_20070308 -#endif // ADD_SEASON_3_NEW_MAP_20070910 -#endif // ADD_GAMBLING_20090120 - -#define PK_LEVEL_DEFAULT 3 // PK Level 의 기본 값 - -#ifdef HERO_SYSTEM_MODIFY -#define PK_LEVEL_3_ITEMDROP 2 // PK Level 3 이상의 아이템 드롭율 -#define PK_LEVEL_2_ITEMDROP 4 // PK Level 2 이상의 아이템 드롭율 -#define PK_LEVEL_1_ITEMDROP 8 // PK Level 1 이상의 아이템 드롭율 - -#define PK_LEVEL_3_ITEMERASE 8 // PK Level 3 이상의 아이템 소멸율 -#define PK_LEVEL_2_ITEMERASE 16 // PK Level 2 이상의 아이템 소멸율 -#define PK_LEVEL_1_ITEMERASE 32 // PK Level 1 이상의 아이템 소멸율 -#endif - -// 퀘스트에서 사용되는 정의들 -#define MAX_QUEST 200 -#define MAX_DBQUEST 50 -#define MAX_QUEST_SUBINFO 10 -#define MAX_QUEST_CONDITION 10 - -#define APPLE_DROPRATE 2000 // 케릭터 레벨이 20 이하일 때 사과 드롭률 (n / 10000) - -//---------------------------------------------------------------------------- -#define PARTY_LENGTH 130 - -//---------------------------------------------------------------------------- -#ifdef ADD_ITEM_FENRIR_01_20051110 -#define MAX_OVERLAP_FENRIR_MIX_STUFF_01 20 // 갑옷 파편 -#define MAX_OVERLAP_FENRIR_MIX_STUFF_02 20 // 여신의 가호 -#define MAX_OVERLAP_FENRIR_MIX_STUFF_03 10 // 맹수의 발톱 - -#ifdef ADD_PCS_FULL_RECOVERY_POTION_20070508 -#define MAX_OVERLAP_FULL_RECOVERY_POTION 100 // 100% 회복물약 겹치는 갯수 -#endif // ADD_PCS_FULL_RECOVERY_POTION_20070508 - -#define MIN_FENRIR_EQUIP_LEVEL 300 // 300레벨 부터 착용 가능 -#define MAX_FENRIR_DAMAGE_INC_LEVEL 5 // 5레벨 마다 스킬데미지 1% 증가 +#define MAX_ITEMLEVEL 15 +#define MAX_ZEN 2000000000 -#endif // ADD_ITEM_FENRIR_01_2005 +#define MAXUSERCHARACTER 5 -#ifdef NPROTECT_GAME_GAURD_FOR_SERVER_VERSION_25_20060123 -#define MAX_USER_FOR_GAMEGUARD_AUTH 1500 -#endif // NPROTECT_GAME_GAURD_FOR_SERVER_VERSION_25_20060123 +#define MAX_GUILDNAMESTRING 8 +#define MAX_GUILDMARKSIZE 32 +#define MAX_DBEQUIPMENT 120 +#define MAX_DBINVENTORY 3792 +#define MAX_ITEMDBBYTE 16 -#ifdef UPDATE_SEASON4_MARKET_CONDITIONS_BALANCE_20080828 // 구슬, 스크롤 아이템 드랍 개수 -#ifdef MODIFY_SPEAR_DROP_BUGFIX_20080901 -#define MAX_BALLTABLE_SIZE 22 -#else // MODIFY_SPEAR_DROP_BUGFIX_20080901 -#define MAX_BALLTABLE_SIZE 22 -#endif // MODIFY_SPEAR_DROP_BUGFIX_20080901 -#else // UPDATE_SEASON4_MARKET_CONDITIONS_BALANCE_20080828 -#ifdef MODIFY_ITEM_DROP_FIRESCREAMSCROLL_20060830 -#define MAX_BALLTABLE_SIZE 17 -#else -#ifdef MODIFY_ITEM_DROP_MAXINDEX_20060830 -#define MAX_BALLTABLE_SIZE 16 -#endif // MODIFY_ITEM_DROP_MAXINDEX_20060830 -#endif // MODIFY_ITEM_DROP_FIRESCREAMSCROLL_20060830 -#endif // UPDATE_SEASON4_MARKET_CONDITIONS_BALANCE_20080828 +#define ITEM_BUFFER_SIZE 12 +#define MONEY_BUFFER_SIZE 4 -#ifdef MODIFY_EXP_LOG_MONSTER_EVENT_INDEX_20060906 -enum EXP_GETTING_EVENT_TYPE -{ - EVENT_TYPE_NONE = 0, - EVENT_TYPE_PARTY = 1, - EVENT_TYPE_DEVILSQUARE = 2, - EVENT_TYPE_CHAOSCASTLE = 3, - EVENT_TYPE_BLOODCASTLE = 4, - EVENT_TYPE_CRYWOLF = 5 -}; -#endif // MODIFY_EXP_LOG_MONSTER_EVENT_INDEX_20060906 - -#ifdef HALLOWINDAY_JACK_O_LANTERN_EVENT_20061017 -#define MAX_OVERLAP_JACK_O_LANTERN_POTION 3 // 할로윈 데이 이벤트 포션 겹쳐지는 갯수 -#endif - -#ifdef MODIFY_CHN_PLAYTIME_LIMIT_SYSTEM_01_20070509 -#define PLAYTIME_LIMIT_VERIFY_ADULT 0 -#define PLAYTIME_LIMIT_VERIFY_KID 1 -#define PLAYTIME_LIMIT_VERIFY_ERROR 2 -#endif // MODIFY_CHN_PLAYTIME_LIMIT_SYSTEM_01_20070509 - -#ifdef ADD_FULL_RECOVERY_POTION_20070719 -#define MAX_OVERLAP_ELITE_POTION 50 // 엘리트 물약의 최대 겹쳐지는 갯수 -#endif // ADD_FULL_RECOVERY_POTION_20070719 - -#ifdef ADD_PCS_IMPROVE_POTION_20070718 -#define MAX_OVERLAP_IMPROVE_POTION 3 // 비약의 최대 겹쳐지는 갯수 -#endif // ADD_PCS_IMPROVE_POTION_20070718 - -#ifdef ADD_EVENT_CHERRYBLOSSOM_20080312 -enum _enumMAXOVERLAP -{ - MAX_OVERLAP_CHERRYBLOSSOM_ITEM_DEFAULT = 3, - MAX_OVERLAP_CHERRYBLOSSOM_WHITE = 10, - MAX_OVERLAP_CHERRYBLOSSOM_RED = 30, -#ifdef FOR_KOREA - MAX_OVERLAP_CHERRYBLOSSOM_GOLD = 255, -#else // FOR_KOREA - MAX_OVERLAP_CHERRYBLOSSOM_GOLD = 50, -#endif // FOR_KOREA -}; -#endif // ADD_EVENT_CHERRYBLOSSOM_20080312 - -#ifdef UPDATE_LUCKY_COIN_EVENT_20081029 // 행운의 동전 겹치기 최대 개수 -#define MAX_OVERLAP_LUCKY_COIN 255 -#endif // UPDATE_LUCKY_COIN_EVENT_20081029 - - -////////////////////////////////////////////////////////////////////////// -// -// 뷰포트 관련 정보 -// -////////////////////////////////////////////////////////////////////////// -// 자신이 죽을때 이중에서 아이템을 떨어트리게 된다. -#define Max3(v1, v2, v3) (max((max(v1, v2)),v3)) - -//---------------------------------------------------------------------------- -// 유저의 뷰포트 안에 있는 다른 유저들 상태 정보 -#define STVP_NONE 0 // 등록이 안되어있다. -#define STVP_CREATE 1 // Create 되어야 한다. -#define STVP_PLAYING 2 // 활동 중이다. -#define STVP_DESTROY 3 // Destroy 되어야 한다. - -typedef struct -{ - char state; // 뷰포트에서의 상태 - short number; // 뷰포트에 등록된 오브젝트의 절대 번호 - BYTE type; // 등록된 오브젝트의 형태 (STVP_??????) 참고 - short index; // 등록된 오브젝트의 몇번째 등록이 되었는지.. - int dis; // 거리. -} VIEWPORT_PLAYER_STRUCT; - - -// 내 화면에 보여지는 사용자 리스트 -typedef struct -{ - char state; // 뷰포트에서의 상태 - short number; // 뷰포트에 등록된 오브젝트의 절대 번호 - BYTE type; // 등록된 오브젝트의 형태 (STVP_??????) 참고 - short index; // 등록된 오브젝트의 몇번째 등록이 되었는지.. - int dis; // 거리. - // short HitDamage; // 타격 데미지 (누구한테 얼만큼 맞았다) -} VIEWPORT_STRUCT; - - -#ifdef PERSONAL_SHOP_20040113 -// 내 화면에 보여지는 개인상점 리스트 (사람) -typedef struct -{ - bool bUsing; // 0:사용않함 / 1:사용함 - short iIndex; // 사용자객체 배열의 인덱스 -} PSHOP_VIEWPORT_STRUCT; -#endif - - -#define MAX_HITDAMAGE 40 - -typedef struct -{ - short number; // 타격을 가한 유저 번호 - int HitDamage; // 타격 데미지 (누구한테 얼만큼 맞았다) - DWORD LastHitTime; // 마지막 타격 시간.. - -} HITDAMAGE_STRUCT; // 몬스터 타격 데미지에 사용하기 위해 - - ////////////////////////////////////////////////////////////////////////// - // - // UI Type - // - ////////////////////////////////////////////////////////////////////////// -#define I_TRADE 1 // 교환 진행중 -#define I_PARTY 2 // 파티 진행중 -#define I_SHOP 3 -#define I_GUILD 4 // 길드 가입 인터페이스 -#define I_GUILDCREATE 5 // 길드 생성 인터페이스 -#define I_WAREHOUSE 6 // 창고 -#define I_CHAOSBOX 7 // 카오스 박스 -#define I_INVENTORY 8 // 인벤토리내 -#define I_EVENTCHIP 9 // 이벤트칩 -#define I_QUEST 10 // 퀘스트 -#define I_SERVERDIVISION 11 // 서버분할 -#define I_ETCWINDOW 12 // 서버분할 -#define I_DARK_TRAINER 13 // 다크호스 트레이너 - -#ifdef PERSONAL_SHOP_20040113 // 개인상점 인터페이스 코드 (I_SHOP과 같이 쓰고 싶었으나 종료시 초기화할 부분이 다른 관계로 따로 씀) -#define I_PSHOP_OPEN 12 // 개인상점 - 개설한 쪽 만 사용 (방문한 쪽은 I_SHOP) -#endif - -#ifdef ADD_NEW_UNION_01_20041006 -#define I_UNION 14 // 연합, 라이벌 관련 인터페이스. -#endif - -#ifdef ADD_NEW_WEAPON_FOR_CASTLE_01_20041116 -#define I_CS_MACHINE_ATTACK 15 // 공성 무기 -#define I_CS_MACHINE_DEFENSE 16 // 수성 무기 -#endif - -#ifdef ADD_CASTLE_HUNTZONE_NPC_01_20050111 -#define I_CS_HUNTZONE_GUARD 17 // 사냥터 문지기 -#endif - -#ifdef PCBANG_POINT_SYSTEM_20070206 // 상점 인덱스 -#define I_PCBANG_POINT_SHOP 18 // PC방 포인트 상점 -#endif - -#ifdef ADD_PARTIALY_CHARGE_CASH_SHOP_20070117 -#ifdef ADD_PARTIALY_CHARGE_ON -#define I_CASHSHOP_INTERFACE 19 -#else -#define I_CASHSHOP_INTERFACE 18 -#endif // ADD_PARTIALY_CHARGE_ON -#endif // ADD_PARTIALY_CHARGE_CASH_SHOP_20070117 - -#ifdef MODIFY_JEWELMIXSYSTEM_BUGFIX_20081020 -enum _eInterfaceState -{ - I_JEWEL = 20, -}; - -#define IS_MIXJEWEL(u, t) (u == 1 && t == I_JEWEL) ? TRUE : FALSE - -#endif // MODIFY_JEWELMIXSYSTEM_BUGFIX_20081020 - -#ifdef PERSONAL_SHOP_20040113 -// 아이템 이동 (0x24) 시 사용되는 위치 매크로 -#define ITEMMOVE_INVENTORY 0 // 이동위치 - 인벤토리 -#define ITEMMOVE_TRADEWND 1 // 이동위치 - 거래창 -#define ITEMMOVE_WAREHOUSE 2 // 이동위치 - 창고 -#define ITEMMOVE_CHAOSBOX 3 // 이동위치 - 카오스상자 -#define ITEMMOVE_PSHOPWND 4 // 이동위치 - 개인상점 -#else -#define ITEMMOVE_INVENTORY 0 // 이동위치 - 인벤토리 -#define ITEMMOVE_TRADEWND 1 // 이동위치 - 거래창 -#define ITEMMOVE_WAREHOUSE 2 // 이동위치 - 창고 -#define ITEMMOVE_CHAOSBOX 3 // 이동위치 - 카오스상자 -#define ITEMMOVE_PSHOPWND 4 // 이동위치 - 개인상점 -#endif - -#ifdef DARKLORD_WORK -#define ITEMMOVE_DARK_TRAINER 5 // 이동 위치 - 다크로드(조련사) -#endif - -#ifdef ADD_JEWEL_OF_HARMONY_SYSTEM_20060530 -#define ITEMMOVE_JEWELOFHARMONY_PURITY 6 // 이동 위치 - 조화의보석 정제 ( NPC ) -#define ITEMMOVE_JEWELOFHARMONY_SMELT 7 // 이동 위치 - 제련석 ( NPC ) -#define ITEMMOVE_JEWELOFHARMONY_RESTORE 8 // 이동 위치 - 환원 ( NPC ) -#endif // ADD_JEWEL_OF_HARMONY_SYSTEM_20060530 - -#ifdef ADD_PCS_LOTTERY_SYSTEM_20070117 -#define ITEMMOVE_LOTTERY_MIX 9 -#endif // ADD_PCS_LOTTERY_SYSTEM_20070117 - -#ifdef ADD_EVENT_CHERRYBLOSSOM_20080312 -#define ITEMMOVE_CHERRYBLOSSOM 10 -#endif // ADD_EVENT_CHERRYBLOSSOM_20080312 - -#ifdef ADD_ITEM_SOCKET_OPTION_MIX_20080415 -#define ITEMMOVE_SOCKET_ITEM_EXTRACT 11 -#define ITEMMOVE_SOCKET_ITEM_COMPOSIT 12 -#define ITEMMOVE_SOCKET_ITEM_EQUIP 13 -#define ITEMMOVE_SOCKET_ITEM_REMOVE 14 -#endif // ADD_ITEM_SOCKET_OPTION_MIX_20080415 - -#ifdef CASTLE_SPECIAL_ITEMMIX_20050425 -#define CASTLE_ITEM_MIX_MAXCOUNT 1 // 성주 조합 시 아이템 최대 조합가능 횟수 -#endif - -////////////////////////////////////////////////////////////////////////// -// -// 맵 관련 정보 -// -////////////////////////////////////////////////////////////////////////// -#define MAX_MAPITEM 300 - -#ifdef ADD_NEWPVP_PKFIELD -#define MAX_MAP 116//65 // 크리스마스 맵 -#else - -#ifdef UPDATE_XMASEVENT_MAP_20080930 -#define MAX_MAP 63 // 크리스마스 맵 -#else - -#ifdef ADD_RAKLION_20080408 -#define MAX_MAP 59 // 빙하호수 맵 -#else -#ifdef UPDATE_NEWMAP_SWAMP_OF_CALMNESS_20080108 -#define MAX_MAP 57 // 마스터레벨 전용 평온의늪 -#else -#ifdef ADD_CHAOSCASTLE_FOR_MASTER_LEVEL_20071010 -#define MAX_MAP 54 // 마스터레벨 전용등급 카오스캐슬 -#else -#ifdef ADD_BLOODCASTLE_FOR_MASTER_LEVEL_20071010 -#define MAX_MAP 53 // 마스터레벨 전용등급 블러드캐슬 -#else -#ifdef ADD_SEASON_3_NEW_MAP_20070910 -#define MAX_MAP 52 // 시즌 3 신규 맵 -#else -#ifdef ADD_EVENT_MAP_ILLUSION_TEMPLE_20070328 -#define MAX_MAP 51 // 신규 이벤트 맵 -#else -#ifdef UPDATE_BEFORE_ILLUSION_TEMPLE_MAX_MAP_20070702 -#define MAX_MAP 43 // 신규 이벤트 맵이전 최대 맵 수 재 설정 -#else -#ifdef UPDATE_GM_FUNCTION_20070228 -#define MAX_MAP 41 // GM 소환 지역 추가 -#else -#ifdef ADD_NEW_MAP_KANTURU_BOSS_20060627 -#define MAX_MAP 40 // 칸투르 보스맵 추가 -#else -#ifdef ADD_NEW_MAP_KANTURU_COMMON_20060523 -#define MAX_MAP 39 // 칸투르 일반 맵 추가 (2) -#else -#ifdef HIDDEN_KALIMA_20050706 -#define MAX_MAP 37 // 히든 칼리마 추가 -#else -#ifdef ADD_NEW_MAP_CRYWOLF_SECONDZONE_20050414 -#define MAX_MAP 36 // 크라이울프 2차맵이 추가 되었다. -#else -#ifdef ADD_NEW_MAP_CRYWOLF_FIRSTZONE_20050414 -#define MAX_MAP 35 // 크라이울프 1차맵이 추가 되었다. -#else -#ifdef ADD_NEW_MAP_AIDA_20050617 -#define MAX_MAP 34 // 아이다 맵이 추가 되었다. -#else -#ifdef DEVILSQUARE_EXTEND_20050221 // 데빌스퀘어 맵추가 -#define MAX_MAP 33 // 데빌스퀘어 맵이 확장 되었다. -#else -#ifdef ADD_NEW_MAP_CASTLE_HUNTZONE_20041115 -#define MAX_MAP 32 // 성 사냥터 맵이 추가 되었다. -#else -#ifdef ADD_NEW_MAP_CASTLE_20041115 -#define MAX_MAP 31 // 성 맵이 추가되었다. -#else -#ifdef ADD_NEW_MAP_KALIMA_20040518 -#define MAX_MAP 30 // 신규맵 칼리마가 추가되었다. -#else -#ifdef CHAOSCASTLE_SYSTEM_20040408 -#define MAX_MAP 24 // 카오스 캐슬이 추가되었다. -#else -#ifdef BLOODCASTLE_EXTEND_20040314 // 블러드캐슬 확장으로 인해 맵이 추가되었다. -#define MAX_MAP 18 -#else -#ifdef FOR_BLOODCASTLE -#define MAX_MAP 17 -#else -#ifdef NEW_SKILL_FORSKYLAND -#define MAX_MAP 11 -#else -#define MAX_MAP 10 -#endif -#endif // FOR_BLOODCASTLE -#endif // BLOODCASTLE_EXTEND_20040314 -#endif // CHAOSCASTLE_SYSTEM_20040408 -#endif // ADD_NEW_MAP_KALIMA_20040518 -#endif // ADD_NEW_MAP_CASTLE_20041115 -#endif // ADD_NEW_MAP_CASTLE_HUNTZONE_20041115 -#endif // DEVILSQUARE_EXTEND_20050221 -#endif // ADD_NEW_MAP_AIDA_20050617 -#endif // ADD_NEW_MAP_CRYWOLF_FIRSTZONE_20050414 -#endif // ADD_NEW_MAP_CRYWOLF_SECONDZONE_20050414 -#endif // HIDDEN_KALIMA_20050706 -#endif // ADD_NEW_MAP_KANTURU_COMMON_20060523 -#endif // ADD_NEW_MAP_KANTURU_BOSS_20060627 -#endif // UPDATE_GM_FUNCTION_20070228 -#endif // UPDATE_BEFORE_ILLUSION_TEMPLE_MAX_MAP_20070702 -#endif // ADD_EVENT_MAP_ILLUSION_TEMPLE_20070328 -#endif // ADD_SEASON_3_NEW_MAP_20070910 -#endif // ADD_BLOODCASTLE_FOR_MASTER_LEVEL_20071010 -#endif // ADD_CHAOSCASTLE_FOR_MASTER_LEVEL_20071010 -#endif // UPDATE_NEWMAP_SWAMP_OF_CALMNESS_20080108 -#endif // ADD_RAKLION_20080408 - -#endif // UPDATE_XMASEVENT_MAP_20080930 -#endif // ADD_NEWPVP_PKFIELD - -enum MAP_INDEX -{ - MAP_INDEX_RORENCIA = 0, - MAP_INDEX_DUNGEON = 1, - MAP_INDEX_DEVIAS = 2, - MAP_INDEX_NORIA = 3, - MAP_INDEX_LOSTTOWER = 4, - MAP_INDEX_RESERVED = 5, - MAP_INDEX_BATTLESOCCER = 6, - MAP_INDEX_ATHLANSE = 7, - MAP_INDEX_TARKAN = 8, - MAP_INDEX_DEVILSQUARE = 9, - MAP_INDEX_ICARUS = 10, - - // 블러드 캐슬 - MAP_INDEX_BLOODCASTLE1 = 11, - MAP_INDEX_BLOODCASTLE2 = 12, - MAP_INDEX_BLOODCASTLE3 = 13, - MAP_INDEX_BLOODCASTLE4 = 14, - MAP_INDEX_BLOODCASTLE5 = 15, - MAP_INDEX_BLOODCASTLE6 = 16, -#ifdef BLOODCASTLE_EXTEND_20040314 - MAP_INDEX_BLOODCASTLE7 = 17, -#endif - - -#ifdef CHAOSCASTLE_SYSTEM_20040408 // 카오스 캐슬 맵 인덱스 - MAP_INDEX_CHAOSCASTLE1 = 18, - MAP_INDEX_CHAOSCASTLE2 = 19, - MAP_INDEX_CHAOSCASTLE3 = 20, - MAP_INDEX_CHAOSCASTLE4 = 21, - MAP_INDEX_CHAOSCASTLE5 = 22, - MAP_INDEX_CHAOSCASTLE6 = 23, -#endif - -#ifdef ADD_NEW_MAP_KALIMA_20040518 // 칼리마 맵 인덱스 - MAP_INDEX_KALIMA1 = 24, - MAP_INDEX_KALIMA2 = 25, - MAP_INDEX_KALIMA3 = 26, - MAP_INDEX_KALIMA4 = 27, - MAP_INDEX_KALIMA5 = 28, - MAP_INDEX_KALIMA6 = 29, -#endif - -#ifdef CASTLE_SIEGE_COMMON_PATCH_20041018 // 성 맵 인덱스 - MAP_INDEX_CASTLESIEGE = 30, -#endif - -#ifdef ADD_NEW_MAP_CASTLE_HUNTZONE_20041115 // 성 사냥터 - MAP_INDEX_CASTLEHUNTZONE = 31, -#endif - -#ifdef DEVILSQUARE_EXTEND_20050221 // 데빌스퀘어 확장 - MAP_INDEX_DEVILSQUARE2 = 32, -#endif -#ifdef ADD_NEW_MAP_AIDA_20050617 - MAP_INDEX_AIDA = 33, // 아이다 맵 -#endif -#ifdef ADD_NEW_MAP_CRYWOLF_FIRSTZONE_20050414 - MAP_INDEX_CRYWOLF_FIRSTZONE = 34, // 크라이울프 1차맵 -#endif - -#ifdef ADD_NEW_MAP_CRYWOLF_SECONDZONE_20050414 - MAP_INDEX_CRYWOLF_SECONDZONE = 35, // 크라이울프 2차맵 -#endif - -#ifdef HIDDEN_KALIMA_20050706 - MAP_INDEX_KALIMA7 = 36, // 히든 칼리마 -#endif - -#ifdef ADD_NEW_MAP_KANTURU_COMMON_20060523 - MAP_INDEX_KANTURU1 = 37, // 칸투르 1차맵 - MAP_INDEX_KANTURU2 = 38, // 칸투르 2차맵 -#endif - -#ifdef ADD_NEW_MAP_KANTURU_BOSS_20060627 - MAP_INDEX_KANTURU_BOSS = 39, // 칸투르 보스맵 -#endif - -#ifdef UPDATE_GM_FUNCTION_20070228 - MAP_INDEX_GM_MAP = 40, // GM 소환 지역 -#endif - -#ifdef THIRD_CHANGEUP_SYSTEM_20070507 // 3차 전직 맵 인덱스 추가 - MAP_INDEX_3RD_CHANGEUP_QUEST = 41, // 3차 전직 퀘스트 맵 - MAP_INDEX_3RD_CHANGEUP_BOSS_QUEST = 42, // 3차 전직 퀘스트 보스맵 -#endif - -#ifdef ADD_SEASON_3_NEW_MAP_20070910 - MAP_INDEX_ILLUSION_TEMPLE1 = 45, // 제 1 환영 사원 맵번호 - MAP_INDEX_ILLUSION_TEMPLE2 = 46, // 제 2 환영 사원 맵번호 - MAP_INDEX_ILLUSION_TEMPLE3 = 47, // 제 3 환영 사원 맵번호 - MAP_INDEX_ILLUSION_TEMPLE4 = 48, // 제 4 환영 사원 맵번호 - MAP_INDEX_ILLUSION_TEMPLE5 = 49, // 제 5 환영 사원 맵번호 - MAP_INDEX_ILLUSION_TEMPLE6 = 50, // 제 6 환영 사원 맵번호 - - MAP_INDEX_ELBELAND = 51, // 신규캐릭터맵 '엘베란드' -#endif - -#ifdef ADD_BLOODCASTLE_FOR_MASTER_LEVEL_20071010 - MAP_INDEX_BLOODCASTLE8 = 52, // 블러드캐슬8 -#endif -#ifdef ADD_CHAOSCASTLE_FOR_MASTER_LEVEL_20071010 - MAP_INDEX_CHAOSCASTLE7 = 53, // 카오스캐슬7 -#endif -#ifdef UPDATE_NEWMAP_SWAMP_OF_CALMNESS_20080108 - MAP_INDEX_SWAMP_OF_CALMNESS = 56, // 평온의늪 -#endif -#ifdef ADD_RAKLION_20080408 - MAP_INDEX_RAKLION_FIELD = 57, // 빙하 호수 필드 - MAP_INDEX_RAKLION_BOSS = 58, // 빙하 호수 보스 존 -#endif // ADD_RAKLION_20080408 -#ifdef UPDATE_XMASEVENT_MAP_20080930 - MAP_INDEX_XMASEVENT = 62, //크리스마스 이벤트 맵 -#endif // UPDATE_XMASEVENT_MAP_20080930 -#ifdef ADD_NEWPVP_PKFIELD - MAP_INDEX_VULCANUS = 63, // 불카누스폐허 - MAP_INDEX_PKFIELD = 64, // PK 필드 -#endif // ADD_NEWPVP_PKFIELD -}; - - -////////////////////////////////////////////////////////////////////////// -// -// 국가별 패킷 -// -////////////////////////////////////////////////////////////////////////// - -// 0xDx 번대로 가자!!!!! ~_~ -#ifdef PACKET_CHANGE -#if GAME_VERSION == G_V_99B -#define CHINESE_PACKET -#define PACKET_CHANGE_CHINA_V3 -#elif GAME_VERSION == G_V_S2_2 -#define JAPAN_PACKET -#elif defined(JAPAN_S4_6) -#define JAPAN_PACKET -#elif GAME_VERSION == G_V_S4_6 || GAME_VERSION == G_V_S1_512 -#define KOREAN_PACKET -#endif - -#ifdef KOREAN_PACKET -#define PACKET_MOVE 0xD3 -#define PACKET_POSITION 0xDF -#define PACKET_MAGIC_ATTACK 0x10 -#define PACKET_ATTACK 0xD7 -#endif - -#ifdef JAPAN_PACKET -#define PACKET_MOVE 0X1D -#define PACKET_POSITION 0XD6 -#define PACKET_MAGIC_ATTACK 0XD7 -#define PACKET_ATTACK 0XDC -#endif - -#ifdef CHINESE_PACKET -#ifdef PACKET_CHANGE_CHINA_V3 -#define PACKET_MOVE 0XD7 -#ifdef MODIFY_PACKET_POSITION_PROTOCOL_CODE_20071126 -#define PACKET_POSITION 0XD2 -#else -#define PACKET_POSITION 0XD0 -#endif // MODIFY_PACKET_POSITION_PROTOCOL_CODE_20071126 -#define PACKET_MAGIC_ATTACK 0X1D -#define PACKET_ATTACK 0XD9 -#else -#define PACKET_MOVE 0XDD -#define PACKET_POSITION 0XD3 -#define PACKET_MAGIC_ATTACK 0XD9 -#define PACKET_ATTACK 0XDE -#endif -#endif - - -#ifdef TAIWAN_PACKET -#define PACKET_MOVE 0XD6 -#define PACKET_POSITION 0XDF -#ifdef MODIFY_PACKET_POSITION_PROTOCOL_CODE_20071126 -#define PACKET_MAGIC_ATTACK 0XD2 -#else -#define PACKET_MAGIC_ATTACK 0XD0 -#endif // MODIFY_PACKET_POSITION_PROTOCOL_CODE_20071126 -#define PACKET_ATTACK 0XDD -#endif - -#ifdef THAILAND_PACKET -#define PACKET_MOVE 0X11 -#define PACKET_POSITION 0XD4 -#define PACKET_MAGIC_ATTACK 0XD9 -#define PACKET_ATTACK 0XD6 -#endif - -#ifdef GLOBAL_PACKET -#define PACKET_MOVE 0XD4 -#define PACKET_POSITION 0X15 -#define PACKET_MAGIC_ATTACK 0XDB -#define PACKET_ATTACK 0X11 -#endif - -#ifdef FOR_PHILIPPINE -#define PACKET_MOVE 0XDD -#define PACKET_POSITION 0XDF -#define PACKET_MAGIC_ATTACK 0X11 -#define PACKET_ATTACK 0XD6 -#endif - -#ifdef FOR_VIETNAM // 베트남 -#define PACKET_MOVE 0xD9 -#define PACKET_POSITION 0xDC -#define PACKET_MAGIC_ATTACK 0x1D -#define PACKET_ATTACK 0x15 -#endif - -#ifdef FOR_USA -#define PACKET_MOVE 0XD4 -#define PACKET_POSITION 0X15 -#define PACKET_MAGIC_ATTACK 0XDB -#define PACKET_ATTACK 0X11 -#endif - -#else -#define PACKET_MOVE 0x10 -#define PACKET_POSITION 0x11 -#define PACKET_MAGIC_ATTACK 0x1D -#define PACKET_ATTACK 0x15 -#endif - -////////////////////////////////////////////////////////////////////////// -// -// 보안 -// -////////////////////////////////////////////////////////////////////////// -#define AUTH_CHECK_00 ((char)0x29) -#define AUTH_CHECK_01 ((char)0x23) -#define AUTH_CHECK_02 ((char)0xBE) -#define AUTH_CHECK_03 ((char)0x84) -#define AUTH_CHECK_04 ((char)0xE1) -#define AUTH_CHECK_05 ((char)0x6C) -#define AUTH_CHECK_06 ((char)0xD6) -#define AUTH_CHECK_07 ((char)0xAE) -#define AUTH_CHECK_08 ((char)0x52) -#define AUTH_CHECK_09 ((char)0x90) -#define AUTH_CHECK_10 ((char)0x49) -#define AUTH_CHECK_11 ((char)0xF1) -#define AUTH_CHECK_12 ((char)0xF1) -#define AUTH_CHECK_13 ((char)0xBB) -#define AUTH_CHECK_14 ((char)0xE9) -#define AUTH_CHECK_15 ((char)0xEB) -#define AUTH_CHECK_16 ((char)0xB3) -#define AUTH_CHECK_17 ((char)0xA6) -#define AUTH_CHECK_18 ((char)0xDB) -#define AUTH_CHECK_19 ((char)0x00) - - -////////////////////////////////////////////////////////////////////////// -// -// 조합 정보 -// -////////////////////////////////////////////////////////////////////////// -enum CHAOS_TYPE -{ - CHAOS_TYPE_DEFAULT = 1, - CHAOS_TYPE_DEVILSQUARE = 2, - CHAOS_TYPE_UPGRADE_10 = 3, - CHAOS_TYPE_UPGRADE_11 = 4, -#ifdef ITEM_12_13_20040401 - CHAOS_TYPE_UPGRADE_12 = 22, - CHAOS_TYPE_UPGRADE_13 = 23, -#endif - CHAOS_TYPE_DINORANT = 5, - CHAOS_TYPE_FRUIT = 6, - CHAOS_TYPE_SECOND_WING = 7, - CHAOS_TYPE_BLOODCATLE = 8, - CHAOS_TYPE_FIRST_WING = 11, -#ifdef ITEM_12_13_20040401 - CHAOS_TYPE_SETITEM = 12, -#endif -#ifdef DARKLORD_WORK - CHAOS_TYPE_DARKHORSE = 13, - CHAOS_TYPE_DARKSPIRIT = 14, - CHAOS_TYPE_CLOAK = 24, -#endif - -#ifdef ADD_NEW_ITEM_FOR_CASTLE_01_20041116 - CHAOS_TYPE_BLESS_POTION = 15, - CHAOS_TYPE_SOUL_POTION = 16, - CHAOS_TYPE_LIFE_STONE = 17, -#endif - -#ifdef CASTLE_SPECIAL_ITEMMIX_20050425 - CHAOS_TYPE_CASTLE_ITEM = 18, // 성주 혜택으로 특별하게 조합 가능한 아이템 -#endif - -#ifdef HIDDEN_TREASUREBOX_EVENT_20050804 // 숨겨진 보물상자 이벤트 - 수정조합 - CHAOS_TYPE_HT_BOX = 20, -#endif - -#ifdef ADD_ITEM_FENRIR_01_20051110 - CHAOS_TYPE_FENRIR_01 = 25, // 펜릴 조합 1단계 - 뿔피리 조각 - CHAOS_TYPE_FENRIR_02 = 26, // 펜릴 조합 2단계 - 부러진 뿔피리 - CHAOS_TYPE_FENRIR_03 = 27, // 펜릴 조합 3단계 - 펜릴의 뿔피리 - CHAOS_TYPE_FENRIR_04 = 28, // 펜릴 조합 4단계 - 펜릴의 뿔피리 업그레이드 -#endif - -#ifdef ADD_SHIELD_POINT_01_20060403 - CHAOS_TYPE_COMPOUNDPOTION_LV1 = 30, - CHAOS_TYPE_COMPOUNTPOTION_LV2 = 31, - CHAOS_TYPE_COMPOUNTPOTION_LV3 = 32, -#endif - -#ifdef ADD_JEWEL_OF_HARMONY_SYSTEM_20060530 - CHAOS_TYPE_JEWELOFHARMONY_PURITY = 33, // 조화의보석 원석 정제 - CHAOS_TYPE_JEWELOFHARMONY_MIX_SMELTINGITEM = 34, // 제련석 조합 - CHAOS_TYPE_JEWELOFHARMONY_RESTORE_ITEM = 35, // 강화아이템 환원 -#endif // ADD_JEWEL_OF_HARMONY_SYSTEM_20060530 - -#ifdef ADD_380ITEM_NEWOPTION_20060711 - CHAOS_TYPE_380_OPTIONITEM = 36, // 380 아이템 조합 -#endif // ADD_380ITEM_NEWOPTION_20060711 - -#ifdef ADD_EVENT_MAP_ILLUSION_TEMPLE_20070328 // 피의 두루마리 아이템 조합 타입 - CHAOS_TYPE_ILLUSION_TEMPLE_ITEM = 37, // 피의 두루마리 아이템 조합 -#endif - -#ifdef ADD_THIRD_WING_20070525 // 날개 조합 번호 - CHAOS_TYPE_THIRD_WING_1 = 38, // 3차 날개 조합 - 1차 - CHAOS_TYPE_THIRD_WING_2 = 39, // 3차 날개 조합 - 2차 -#endif - -#ifdef ADD_PCS_LOTTERY_SYSTEM_20070117 - CHAOS_TYPE_LOTTERY_MIX = 40, - /* - ADD_PCS_LOTTERY_SYSTEM_20070117 빌드로 임시로 처리 - #ifdef ADD_PARTIALY_CHARGE_ON - CHAOS_TYPE_LOTTERY_MIX = 40, - #else - CHAOS_TYPE_LOTTERY_MIX = 37, - #endif // ADD_PARTIALY_CHARGE_ON - */ -#endif // ADD_PCS_LOTTERY_SYSTEM_20070117 - -#ifdef ADD_EVENT_CHERRYBLOSSOM_20080312 - CHAOS_TYPE_CHERRY_MIX = 41, -#endif // ADD_EVENT_CHERRY_20080312 - -#ifdef ADD_ITEM_SOCKET_OPTION_MIX_20080415 - CHAOS_TYPE_SEED_EXTRACT = 42, - CHAOS_TYPE_SEED_COMPOSIT = 43, - CHAOS_TYPE_SEED_EQUIP = 44, - CHAOS_TYPE_SEED_REMOVE = 45, -#endif // ADD_ITEM_SOCKET_OPTION_MIX_20080415 -}; - -////////////////////////////////////////////////////////////////////////// -// -// 옵션 정보 -// -////////////////////////////////////////////////////////////////////////// -#ifdef EVENT_OPTION_RELOAD_20040305 // 뮤의 이벤트 옵션만 다시 읽기 위함 - -enum MU_EVENT_TYPE { - MU_EVENT_ALL = 0, // 모든 이벤트의 옵션을 읽음 - - MU_EVENT_DEVILSQUARE = 1, // 데빌스퀘어 - MU_EVENT_BLOODCASTLE = 2, // 블러드캐슬 - - MU_EVENT_ATTACKEVENTTROOP = 3, // 지하 군단 - MU_EVENT_GOLDENTROOP = 4, // 황금 군단 - MU_EVENT_WHITEMAGETROOP = 5, // 백색마법사 군단 - - MU_EVENT_LOVEPANGPANG = 6, // 러브팡팡 이벤트 (몬스터에게서 하루 일정개수의 사랑의하트 (14,12) 드롭됨, 수호길드 이벤트) - MU_EVENT_FIRECRACKER = 7, // 폭죽 이벤트 (몬스터 죽일 때 폭죽 (14,11) 드롭됨 -> 한국은 아틀라스 이하등 특정지역만) - MU_EVENT_MEDALION = 8, // 메달 이벤트 (뮤월드 각 지역에 따라 은메달, 금메달 등이 나온다.) - MU_EVENT_XMASSTAR = 9, // 성탄의별 이벤트 (몬스터에게서 성탄의별이 드롭됨) - MU_EVENT_HEARTOFLOVE = 10, // 사랑의하트 이벤트 (몬스터에게서 사랑의하트가 드롭됨) - - MU_EVENT_SAY_HAPPYNEWYEAR = 11, // NPC가 새해인사를 한다. - MU_EVENT_SAY_MERRYXMAS = 12, // NPC가 메리 크리스마스라고 말한다. - -#ifdef CHAOSCASTLE_SYSTEM_20040408 - MU_EVENT_CHAOSCASTLE = 13, // 카오스캐슬 -#endif - -#ifdef CHRISTMAS_RIBBONBOX_EVENT_20051212 - MU_EVENT_CHRISTMAS_RIBBONBOX = 14, // 크리스마스 리본상자 이벤트( 몬스터에게서 빨강,초록,파랑 리본상자가 드롭됨 ) -#endif - -#ifdef VALENTINES_DAY_BOX_EVENT_20060124 - MU_EVENT_VALENTINESDAY_CHOCOLATEBOX = 15, // 발렌타인데이 초콜릿상자 이벤트( 몬스터에게서 분송,빨강,파랑 초콜릿상자가 드롭됨 ) -#endif - -#ifdef WHITEDAY_CANDY_BOX_EVENT_20060222 - MU_EVENT_WHITEDAY_CANDYBOX = 16, // 화이트데이 사탕상자 이벤트( 몬스터에게서 연보라,주황,감청 사탕상자가 드롭됨 ) -#endif - -}; - -#endif - - -#ifdef ETC_OPTION_RELOAD_20040308 // 뮤의 옵션 중 이벤트 외의 것들만 리로드 - -enum MU_ETC_TYPE -{ - MU_ETC_ALL = 0, // 모든 게임외의 옵션 리로드 - MU_ETC_CREATECHARACTER = 1, // 케릭터 생성 - MU_ETC_GUILD = 2, // 길드 생성 - MU_ETC_TRADE = 3, // 거래 - MU_ETC_USECHAOSBOX = 4, // 카오스박스 사용 - MU_ETC_PERSONALSHOP = 5, // 개인상점 - MU_ETC_PKITEMDROP = 6, // PK시 아이템 드롭여부 - MU_ETC_ITEMDROPRATE = 7, // 아이템 드롭확률 - MU_ETC_SPEEDHACK = 8, // 스피드핵 - MU_ETC_GAMEGUARD = 9, // 게임가드 체크섬 체크여부 -}; - -#endif - - -enum DATA_FILE_INDEX // !!! . 이 번호가 WzVersionManager 에서 GetPrivateProfileString() 으로 읽은 뒤 연결해주는 파일 ID번호와 같아야 함 -{ - FILE_ITEM = 0, // Item(kor).txt - FILE_ITEMLOCAL = 1, // 국가별 Item.txt - FILE_SKILL = 2, // Skill(kor).txt - FILE_SKILLLOCAL = 3, // 국가별 skill.txt - FILE_QUEST = 4, // Quest(kor).txt - FILE_QUESTLOCAL = 5, // 국가별 Quest.txt - FILE_CHECKSUM = 6, // Checksum.dat - FILE_MONSTER = 7, // Monster.txt - FILE_GATE = 8, // Gate.txt - FILE_MONSTERSETBASE = 9, // MonsterSetBase.txt - FILE_NPGGAUTH = 10, // CSAuth.dat - FILE_SHOP0 = 11, // Shop0.txt - FILE_SHOP1 = 12, // Shop1.txt - FILE_SHOP2 = 13, // Shop2.txt - FILE_SHOP3 = 14, // Shop3.txt - FILE_SHOP4 = 15, // Shop4.txt - FILE_SHOP5 = 16, // Shop5.txt - FILE_SHOP6 = 17, // Shop6.txt - FILE_SHOP7 = 18, // Shop7.txt - FILE_SHOP8 = 19, // Shop8.txt - FILE_SHOP9 = 20, // Shop9.txt - FILE_SHOP10 = 21, // Shop10.txt - FILE_SHOP11 = 22, // Shop11.txt - FILE_SHOP12 = 23, // Shop12.txt - - FILE_MOVEREQ = 24, // movereq(local).txt - FILE_MOVEREQLOCAL = 25, // 국가별 movereq.txt - FILE_SETITEMOPTION = 26, // itemsetoption(Kor).txt - FILE_SETITEMOPTIONLOCAL = 27, // (국가별) itemsetoption.txt - FILE_SETITEMTYPE = 28, // itemsettype(Kor).txt - FILE_SETITEMTYPELOCAL = 29, // (국가별) itemsettype.txt - - // 앞으로 SHOP이나 다른 데이터르 추가할 때는 기존 요청번호가 밀리지 않도록 뒤로 들어가야 한다. -#ifdef ADD_FIRECRACKER_NPC_20070306 - FILE_SHOP13 = 30, // Shop13.txt -#endif -#ifdef ADD_SHOP_14_20070308 - FILE_SHOP14 = 31, // Shop14.txt -#endif -#ifdef ADD_SEASON_3_NEW_MAP_20070910 // 엘베란드 상점목록 - FILE_SHOP15 = 32, // Shop15.txt - FILE_SHOP16 = 33, // Shop16.txt - FILE_SHOP17 = 34, // Shop17.txt -#endif -#ifdef ADD_GAMBLING_20090120 // 겜블링 상점 - FILE_SHOP18 = 35, // Shop18.txt -#endif // ADD_GAMBLING_20090120 -}; - - -// 메인 이벤트 -#define EVENTMASK_DevilSquareEvent 0x00000001 // 데빌스퀘어 -#define EVENTMASK_BloodCastleEvent 0x00000002 // 블러드캐슬 - -// 서브 이벤트 -#define EVENTMASK_XMasEvent 0X00000100 // 성탄의별 -#define EVENTMASK_FireCrackerEvent 0X00000200 // 폭죽 -#define EVENTMASK_HeartOfLoveEvent 0X00000400 // 사랑의 하트 -#define EVENTMASK_MedalEvent 0X00000800 // 메달이벤트 -#define EVENTMASK_RingAttackEvent 0X00001000 // 반지이벤트 -#define EVENTMASK_EventChipEvent 0X00002000 // 레나이벤트 -#define EVENTMASK_IsEledoradoEvent 0X00004000 // 황금정예이벤트 - -// 기타 설정 -#define EVENTMASK_UseNPGGChecksum 0X00010000 // 게임가드 사용 - - - -/////////////////////////////////////////////////////////////////// -// -// 연합 시스템 (apple) -// -/////////////////////////////////////////////////////////////////////// -#ifdef ADD_NEW_GUILD_01_20040913 - -#define MIN_UNION_MASTER_GUILD_MEMBERCOUNT 20 -#define MAX_RELATIONSHIP_COUNT 100 -#define INVALID_USER_INDEX -1 - -#ifdef MODIFY_MAX_UNION_MEMBER_01_20050418 - -#ifdef FOR_KOREA -#define MAX_UNION_MEMBER_COUNT 3 -#define MAX_TESTSERVER_UNION_MEMBER_COUNT 3 -#else -#define MAX_UNION_MEMBER_COUNT 5 -#define MAX_TESTSERVER_UNION_MEMBER_COUNT 5 -#endif - -#else - -#define MAX_UNION_MEMBER_COUNT 7 -#define MAX_TESTSERVER_UNION_MEMBER_COUNT 12 - -#endif - - -enum GUILD_NOTIFICATION -{ - G_NOTIFICATION_SET = 0x01, - G_NOTIFICATION_UNION_BREAKOFF = 0x10 - -}; - -enum GUILD_OPERATION_ERRORCODE -{ - G_ERROR_NONE = 0 - - // 0x10~ Common Result - -}; - -enum GUILD_RELATION_OPERATION -{ - G_RELATION_OPERATION_JOIN = 1, - G_RELATION_OPERATION_BREAKOFF = 2 -}; - -enum GUILD_RELATIONSHIP -{ - G_RELATIONSHIP_NONE = 0, - G_RELATIONSHIP_UNION = 0x01, - G_RELATIONSHIP_RIVAL = 0x02, - G_RELATIONSHIP_UNIONMASTER = 0x04, - G_RELATIONSHIP_RIVALMASTER = 0x08, - -}; - -enum GUILD_TYPE -{ - G_TYPE_NONE = -1, - G_TYPE_COMMON = 0, - G_TYPE_GUARD = 1 // 수호 길드. - // G_TYPE_MERCENARY = 1, - // G_TYPE_CLAN = 2 -}; - -enum GUILD_STATUS -{ - G_NONE = -1, - G_PERSON = 0, // 일반 - G_MASTER = 128, // 길드마스터 - G_SUB_MASTER = 64, // 부길드마스터 - G_BATTLE_MASTER = 32 // 배틀마스터 -}; - -enum GUILD_REQ_COMMON_RESULT -{ - // 길드가 없음 - GUILD_ANS_NOTEXIST_GUILD = 0x10, - // 공성전으로 인하여 연합기능이 제한됩니다. - GUILD_ANS_UNIONFAIL_BY_CASTLE = 0x10, - // 권한 없음 - GUILD_ANS_NOTEXIST_PERMISSION = 0x11, - - // 임명 할 수 있는 계급이 없음 - GUILD_ANS_NOTEXIST_EXTRA_STATUS = 0x12, - // 임명 할 수 있는 타입이 없음 - GUILD_ANS_NOTEXIST_EXTRA_TYPE = 0x13, - - // 관계 유 & 무 - GUILD_ANS_EXIST_RELATIONSHIP_UNION = 0x15, - GUILD_ANS_EXIST_RELATIONSHIP_RIVAL = 0x16, - - // 연합 유 & 무 - GUILD_ANS_EXIST_UNION = 0x17, - GUILD_ANS_EXIST_RIVAL = 0x18, - GUILD_ANS_NOTEXIST_UNION = 0x19, - GUILD_ANS_NOTEXIST_RIVAL = 0x1A, - - // 연합 마스터가 아님 - GUIDL_ANS_NOT_UNION_MASTER = 0x1B, - - // 적대 길드가 아님 - GUILD_ANS_NOT_GUILD_RIVAL = 0x1C, - - // 상대방이 연합 마스터 길드의 조건을 갖추지 못함. - GUILD_ANS_CANNOT_BE_UNION_MASTER = 0x1D, - - // 최대 길드 연합 개수 초과 함 - GUILD_ANS_EXCEED_MAX_UNION_MEMBER = 0x1E, - - // 신청이 취소되었습니다. - GUILD_ANS_CANCLE_REQUEST = 0x20 - -}; - -enum EXDB_DATA_TRANSFER_TYPE -{ - EX_SEND_P2P = 0x01, // 요청 서버에만 - EX_SEND_BROADCASTING = 0x00 // 브로드캐스팅 -}; - -enum EXDB_RESULT -{ - EX_RESULT_SUCCESS = 0x01, - EX_RESULT_FAIL = 0x00, - EX_RESULT_FAIL_FOR_CASTLE = 0x10, // GUILD_ANS_UNIONFAIL_BY_CASTLE 와 같음. -}; -#endif // ADD_NEW_GUILD_01_20040913 - -////////////////////////////////////////////////////////////////////////// -// -// 스탯 열매 관련 정보 -// -////////////////////////////////////////////////////////////////////////// -#ifdef ADD_MINUS_STAT_SYSTEM_USING_FRUIT_20050712 - -enum FRUIT_ITEM_TYPE -{ - FRUIT_ENERGY = 0, - FRUIT_VITALITY = 1, - FRUIT_DEXTERITY = 2, - FRUIT_STRENGTH = 3, - FRUIT_LEADERSHIP = 4 -}; - -enum STAT_FRUIT_USING_RESULT -{ - STAT_PLUS_SUCCESS = 0x00, // 스탯생성 성공 - STAT_PLUS_FAILED = 0x01, // 스탯생성 실패 - STAT_PLUS_PREVENTED = 0x02, // 열매를 Stat Plus에 사용 불가 - - STAT_MINUS_SUCCESS = 0x03, // 스탯감소 성공 - STAT_MINUS_FAILED = 0x04, // 스탯감소 실패 - STAT_MINUS_PREVENTED = 0x05, // 열매를 Stat Minus에 사용 불가 - -#ifdef MODIFY_RESET_FRUITS_RESULT_TYPE_20070821 - STAT_MINUS_EX_SUCCESS = 0x06, // 리셋열매 결과 코드 성공 - STAT_MINUS_EX_FAILED = 0x07, // 리셋열매 결과 코드 실패 - STAT_MINUS_EX_PREVENTED = 0x08, // 리셋열매 사용 불가 -#endif // MODIFY_RESET_FRUITS_RESULT_TYPE_20070821 +#define MAX_WAREHOUSEDBSIZE 3840 +#define MAX_WAREHOUSEITEMS (8*15) - STAT_FRUIT_USING_PREVENTED_BY_ITEMEQUIPMENT = 0x10, // 아이템을 착용해서 사용불가능 +#define MAX_EQUIPMENT 12 +#define MAX_INVENTORY 237 +#define INVENTORY_EXT4_SIZE 204 - STAT_PLUS_PREVENTED_BY_MAX = 0x21, // 생성 최대치까지 사용 했음 - STAT_MINUS_PREVENTED_BY_MAX = 0x25, // 감소 최대치까지 사용 했음 - STAT_MINUS_PREVENTED_BY_DEFAULT = 0x26, // 기본값 이하로는 감소 할 수 없음 -}; +#define ITEM_BITSHIFT 9 -#endif // ADD_MINUS_STAT_SYSTEM_USING_FRUIT_20050712 +#define MAX_DBMAGIC (MAX_MAGIC*3) +#define MAX_DBQUEST 50 -#ifdef ADD_MAPMOVE_PROTOCOL_20090327 -enum MAP_MOVE_RESULT -{ - MAPMOVE_SUCCESS = 0, // 이동 성공 - MAPMOVE_FAILED, // 이동 실패 (이동 불가능한 다른 경우) - MAPMOVE_FAILED_TELEPORT, // 이동 실패 (텔레포트 중) - MAPMOVE_FAILED_PSHOP_OPEN, // 이동 실패 (개인상점이 열려있는 경우) - MAPMOVE_FAILED_RECALLED, // 이동 실패 (소환되는 도중) - MAPMOVE_FAILED_NOT_ENOUGH_EQUIP, // 이동 실패 (해당 맵으로 이동하기 위한 장비 부족) - MAPMOVE_FAILED_WEARING_EQUIP, // 이동 실패 (해당 맵에 입장시 장비하지 못하는 장비 착용) - MAPMOVE_FAILED_MURDERER, // 이동 실패 (살인마 일 경우 맵 이동 불가) - MAPMOVE_FAILED_NOT_ENOUGH_LEVEL, // 이동 실패 (레벨 부족) - MAPMOVE_FAILED_NOT_ENOUGH_ZEN, // 이동 실패 (소유 젠 부족) - MAPMOVE_FAILED_EVENT_END, // 이동 실패 (해당 맵의 이벤트가 이미 종료되었음) - MAPMOVE_FAILED_HACKTOOL_BLOCK, // 이동 실패 (핵툴 사용자로 맵 이동이 차단되었음) - MAPMOVE_FAILED_CHECKSUM_ERROR, // 이동 실패 (사용자가 보낸 체크섬 값이 맞지 않는다.) - MAPMOVE_FORCED_EVENT_END = 20, // 강제 이동 (이벤트 종료에 의한 강제 이동) - MAPMOVE_FORCED_GM // 강제 이동 (GM에 의한 강제 이동) -}; +#define MAX_EXTENDINVENTORY 2 +#define MAX_EXTENDWAREHOUSE 1 -#endif // ADD_MAPMOVE_PROTOCOL_20090327 +#define MAX_AB_JOINUSERINFO 200 +#define MAX_AB_OBELISK_INFO 5 #endif diff --git a/DataServer/include/public.h b/DataServer/include/public.h index 9de566c..d8991e1 100644 --- a/DataServer/include/public.h +++ b/DataServer/include/public.h @@ -1,15 +1,6 @@ -//---------------------------------------------------------------------------- -// 서버와 클라이언트가 공유하는 헤더 정의 -//---------------------------------------------------------------------------- -#ifndef __PUBLIC_H__ +#ifndef __PUBLIC_H__ #define __PUBLIC_H__ -#ifndef GAME_VERSION -#include "define.h" -#endif - -//---------------------------------------------------------------------------- -// 캐릭터 번호 enum ClassNumber { CLASS_WIZARD, @@ -22,149 +13,22 @@ enum ClassNumber CLASS_LANCER }; +#define MAX_MAGIC 150 -//#define MAX_MAGIC 20 // 사용자당 최대 마법 개수 -//#ifdef ADD_NEW_SKILL_FOR_CASTLE_01_20041116// 공성전 패치 때 마법개수 늘림 -#define MAX_MAGIC 150//60 // 사용자당 최대 마법 개수 -//#endif - -#define MAX_TOTALMAGIC100 // 마법최대 개수 - -#define DEF_DARKLORD_LEVEL 1 // 다크로드 캐릭터 생성시 기본 레벨 -//---------------------------------------------------------------------------- -// 저항력 번호 -// -1: 없음, 0: 얼음, 1: 독, 2:번개, 3:불, 4:땅, 5:바람, 6:물 -#define RESISTANCE_COLD0 -#define RESISTANCE_POISON 1 -#define RESISTANCE_THUNDER 2 -#define RESISTANCE_FIRE3 - -#define RESISTANCE_EARTH 4 -#define RESISTANCE_WIND5 -#define RESISTANCE_WATER 6 - -//#ifdef ADD_MASTER_LEVEL_SKILL_SYSTEM_ACTIVE_20080107 // MAX_SKILL 수정 -#define MAX_SKILL 600 -//#endif - - -// View 상태 -#define STATE_NONE 0 // 보통. -#define STATE_POISON0x00000001 // 독 걸린상태. -#define STATE_FREEZE0x00000002 // 얼음 걸린상태. -#define STATE_ATTACK0x00000004 // 공격력 증가. -#define STATE_DEFENSE0x00000008 // 방어력 증가. -#define STATE_ADD_LIFE0x00000010 // 생명력 증가. -#define STATE_HARDEN0x00000020 // 석화. -#define STATE_REDUCE_DEFENSE0x00000040 // 방어감소(마검사) (몬스터 스킬도 같이 사용) -#define STATE_REDUCE_ATTACKDAMAGE 0x00000080 // 공격감소(법사) - - -#define STATE_REDUCE_MAGICDEFENSE 0x00000100 // 방어력증가(법사) -#define STATE_REDUCE_MAGICPOWER0x00000200 // 마법 능력 감소 (몬스터 스킬) -#define STATE_ADD_AG0x00000400 // AG증가 속도 향상 -#define STATE_ADD_CRITICAL_DAMAGE 0x00000800 // 크리티컬 데미지 증가 - -//#ifdef ADD_AUTHORITY_CODE_OF_EVENT_GM_20050602 -#define STATE_ADD_GM_MARK 0x01000000 // GM 마크 스킨 추가 -//#endif - -#define STATE_IMMUNE_TO_MAGIC0x00000080 // 마법방어 무적(몹한테만.) (STATE_REDUCE_ATTACKDAMAGE = 법사, 소울바리어) -#define STATE_IMMUNE_TO_HARM0x00000008 // 물리방어 무적(몹한테만.) (STATE_DEFENSE = 요정, 방어력향상) - - -//#ifdef ADD_NEW_SKILL_FOR_CASTLE_01_20041116 -#define STATE_BRAND_OF_SKILL0x00000200 // 다크로드가 보장하는 기술 브랜드 ^^ -#define STATE_STUNED0x00001000 // 스턴 걸린 상태. -#define STATE_ADD_MANA0x00002000 // 마나 증가. -#define STATE_CLOAKING0x00004000 // 투명 상태. -#define STATE_BLESS_POTION 0x00008000 // 축복의 물약. -#define STATE_SOUL_POTION 0x00010000 // 영혼의 물약. -#define STATE_REMOVAL_MAGIC 0x00100000 // 마법 해제. -//#endif - -//#ifdef ADD_NEW_MONSTER_SYSTEM_01_20050714 -#define STATE_IMMUNE_TO_SKILL0x00200000 // 특정 스킬에 IMMUNE 상태 -//#endif - -//#ifdef ADD_SKILL_MUSE_ELF_INFINITYARROW_20060406 -#define STATE_INFINITY_ARROW0x04000000 // 인피니티 애로우(뮤즈엘프) 스킬 -//#endif - -//#ifdef CASTLE_NPC_GATE_WORK_20041206 -#define STATE_CASTLE_GATE 0x00020000 // 성문의 여닫힌 상태 -//#endif -//#ifdef CASTLE_NPC_CROWN_WORK_20041210 -#define STATE_CASTLE_CROWN 0x00020000 // 왕관의 등록 중 상태 -//#endif - -//#ifdef MU_CASTLESIEGE_JOINSIDE_VIEWPORT_20041209 -#define STATE_JOIN_SIDE_DEFEND0x00040000 // 공성전 시 공/수 구분 -#define STATE_JOIN_SIDE_ATTACK0x00080000 // 공성전 시 공/수 구분 - 공성 01 -//#endif - -//#ifdef MODIFY_CASTLESIEGE_IDENTIFICATION_20051012 -#define STATE_JOIN_SIDE_ATTACK_2 0x00400000 // 공성전 시 공/수 구분 - 공성 02 -#define STATE_JOIN_SIDE_ATTACK_3 0x00800000 // 공성전 시 공/수 구분 - 공성 03 -//#endif - - -//#ifdef ADD_NPC_SHADOW_PHANTOM_20050616 -#define STATE_NPC_HELP 0x02000000 // 쉐도우 팬텀 공격력 향상 & 방어력 향상 스킬 상태 -//#endif - -//#ifdef CRYWOLF_NPC_WORK_20050912 -#define STATE_BESERKER 0x00800000 // BERSERKER 상태 - -#define STATE_CRYWOLF_NPC_HIDE 0x10000000 // 크라이울프 ONLY - NPC HIDE 상태 - -#define STATE_CRYWOLF_STATUE_SHIELD1 0x00000001 // 늑대의 신상 ONLY - 1단계 방어막 생성 상태 -#define STATE_CRYWOLF_STATUE_SHIELD2 0x00000002 // 늑대의 신상 ONLY - 2단계 방어막 생성 상태 -#define STATE_CRYWOLF_STATUE_SHIELD3 0x00000004 // 늑대의 신상 ONLY - 3단계 방어막 생성 상태 -#define STATE_CRYWOLF_STATUE_SHIELD4 0x00000008 // 늑대의 신상 ONLY - 4단계 방어막 생성 상태 -#define STATE_CRYWOLF_STATUE_SHIELD5 0x00000100 // 늑대의 신상 ONLY - 5단계 방어막 생성 상태 - -#define STATE_CRYWOLF_ALTAR_ENABLE0x00010000 // 늑대의 제단 ONLY - 계약 가능 상태 -#define STATE_CRYWOLF_ALTAR_DISABLE0x00020000 // 늑대의 제단 ONLY - 계약 불능 상태 -#define STATE_CRYWOLF_ALTAR_CONTRACTED 0x00040000 // 늑대의 제단 ONLY - 계약 되어 있는 상태 -#define STATE_CRYWOLF_ALTAR_ATTEMPT0x00080000 // 늑대의 제단 ONLY - 계약 시도 상태 -#define STATE_CRYWOLF_ALTAR_OCCUFIED 0x00100000 // 늑대의 제단 ONLY - 점령 당한 상태 -//#endif - -//#ifdef PCBANG_POINT_SYSTEM_20070206// 인장 버퍼 -#define STATE_SEAL_ITEM 0x08000000 // PC방 포인트 인장 아이템 -//#endif - -//#ifdef ADD_PCS_MARK_OF_EXP_20070205 -#define STATE_MARK_USE 0x08000000 -//#endif // ADD_PCS_MARK_OF_EXP_20070205 - -//#ifdef ADD_EVENT_MAP_ILLUSION_TEMPLE_20070328 // 환영 사원 전용 스킬 -#define STATE_ILLUSION_TEMPLE_PRODECTION0x00040000 // 보호의 주문 -#define STATE_ILLUSION_TEMPLE_RESTRAINT 0x00080000 // 속박의 주문 -//#endif - -//#ifdef EXPAND_VIEWSKILLSTATE_WORD_TO_INT_20041122 -#define DEL_VIEWSKILLSTATE( x, y )( x &= ~ y ) -#define ADD_VIEWSKILLSTATE( x, y )( x |= y ) -//#endif - -//ifdef CHARACTER_AUTO_RECUPERATION_SYSTEM_20050614 enum CHARACTER_AUTO_RECUPERATION_TIME { CART_10_SEC = 1000 * 10, CART_15_SEC = 1000 * 15, CART_25_SEC = 1000 * 25, }; + enum HP_MP_AG_VALUE_PER_TIME { VPT_HP_MP_AG_1_PER_1_SEC = 1, VPT_HP_MP_AG_5_PER_1_SEC = 5, VPT_HP_MP_AG_10_PER_1_SEC = 10 }; -//#endif -//#ifdef DARKLORD_WORK enum eSkillType { AT_SKILL_POISON = 0x1, @@ -363,46 +227,5 @@ enum eOptionType AT_SET_IMPROVE_VITALITY = 0xC7, }; -//#ifdef ADD_JEWEL_OF_HARMONY_SYSTEM_20060530 -enum eJewelOfHarmonyItemOption -{ - // 공통 - AT_JEWELOFHARMONY_NOT_STRENGTHEN_ITEM = 0, // 효과 없음 : 강화되지 않은 아이템 - - // 무기류 옵션 - AT_JEWELOFHARMONY_WEAPON_IMPROVE_MINATTACKDAMAGE = 1, // 최소 공격력 상승 (값) - AT_JEWELOFHARMONY_WEAPON_IMPROVE_MAXATTACKDAMAGE = 2, // 최대 공격력 상승 (값) - AT_JEWELOFHARMONY_WEAPON_DECREASE_REQUIRE_STR = 3, // 필요 힘 감소 (값) - AT_JEWELOFHARMONY_WEAPON_DECREASE_REQUIRE_DEX = 4, // 필요 민첩 감소 (값) - AT_JEWELOFHARMONY_WEAPON_IMPROVE_ATTACKDAMAGE_BOTH = 5, // 공격력 상승 (최소,최대) (값) - AT_JEWELOFHARMONY_WEAPON_IMPROVE_CRITICALDAMAGE = 6, // 크리티컬 데미지 상승 (값) - AT_JEWELOFHARMONY_WEAPON_IMPROVE_SKILLDAMAGE = 7, // 스킬 공격력 상승 (값) - AT_JEWELOFHARMONY_WEAPON_IMPROVE_ATTACKSUCCESRATE_PVP = 8, // 공격 성공율 상승 (PVP) (값) - AT_JEWELOFHARMONY_WEAPON_DECREASE_SD_RATE = 9, // SD 감소율 상승 (실드 데미지 흡수율 감소. 직접 HP에 주는 데미지가 증가) (값) - AT_JEWELOFHARMONY_WEAPON_IMPROVE_IGNORE_SD_RATE = 10, // 공격시 SD 무시 확률 상승 : SD를 무시하고 직접 HP에 데미지를 가한다. (값) - - // 지팡이류 - AT_JEWELOFHARMONY_STAFF_IMPROVE_MAGICDAMAGE = 1, // 마력 상승(값) - AT_JEWELOFHARMONY_STAFF_DECREASE_REQUIRE_STR = 2, // 필요 힘 감소 (값) - AT_JEWELOFHARMONY_STAFF_DECREASE_REQUIRE_DEX = 3, // 필요 민첩 감소 (값) - AT_JEWELOFHARMONY_STAFF_IMPROVE_SKILLDAMAGE = 4, // 스킬 공격력 상승 (값) - AT_JEWELOFHARMONY_STAFF_IMPROVE_CRITICALDAMAGE = 5, // 크리티컬 데미지 상승 (값) - AT_JEWELOFHARMONY_STAFF_DECREASE_SD_RATE = 6, // SD 감소율 상승 (실드 데미지 흡수율 감소. 직접 HP에 주는 데미지가 증가) (값)//#endif - AT_JEWELOFHARMONY_STAFF_IMPROVE_ATTACKSUCCESRATE_PVP = 7, // 공격 성공율 상승 (PVP) (값) - AT_JEWELOFHARMONY_STAFF_IMPROVE_IGNORE_SD_RATE = 8, // 공격시 SD 무시 확률 상승 : SD를 무시하고 직접 HP에 데미지를 가한다. (값) - - // 방어구류 - AT_JEWELOFHARMONY_DEFENSE_IMPROVE_DEFENSE = 1, // 방어력 상승 (값) - AT_JEWELOFHARMONY_DEFENSE_IMPROVE_MAX_AG = 2, // 최대 AG 상승 (값) - AT_JEWELOFHARMONY_DEFENSE_IMPROVE_MAX_HP = 3, // 최대 HP 상승 (값) - AT_JEWELOFHARMONY_DEFENSE_IMPROVE_AUTO_REFILL_HP = 4, // 생명력 자동 증가량 상승 - AT_JEWELOFHARMONY_DEFENSE_IMPROVE_AUTO_REFILL_MP = 5, // 마나 자동 증가량 상승 - AT_JEWELOFHARMONY_DEFENSE_IMPROVE_BLOCKSUCCESRATE_PVP = 6, // 방어 성공률 상승 (PVP) 값 - AT_JEWELOFHARMONY_DEFENSE_IMPROVE_DAMAGE_DECREASE = 7, // 데미지 감소 % 상승 - AT_JEWELOFHARMONY_DEFENSE_IMPROVE_SD_RATE = 8 // SD 비율 상승 ( PVP시에 SD 비율이 높아짐 ) -}; - - - #endif diff --git a/DataServer/protocol.cpp b/DataServer/protocol.cpp index c5d844b..4e3e777 100644 --- a/DataServer/protocol.cpp +++ b/DataServer/protocol.cpp @@ -1,7 +1,6 @@ #include "stdafx.h" #include "protocol.h" #include "Include\sprodef.h" -//#include "Include\ProDef.h" #include "MainFrm.h" #include "ServerPrc.h" #include "common\winutil.h" @@ -29,23 +28,17 @@ void GDReqQuestMonKillInfoSave(BYTE*lpRecv, int aIndex); void GetGameServerInfo(LPSDHP_GAMESERVERINFO lpMsg, short aIndex); void DSSendResultSend(int aIndex, BYTE headcode, BYTE result); void GDLoadMedalInfo(LPSDHP_LOAD_MEDALINFO lpMsg, int aIndex); -#ifdef MASTER_LEVEL_UP_SYSTEM_20070912 void GDReqMasterLevelInfo(LPMLP_REQ_MASTERLEVEL_INFO lpMsg, int aIndex); void GDReqMasterLevelInfoSave(LPMLP_REQ_MASTERLEVEL_INFOSAVE lpMsg, int aIndex); -#endif void GDSkillKeyDataRecv(LPSDHP_SKILLKEYDATA lpMsg); void GDSkillKeyDataSend(char *name, int userindex, int aIndex); void GDZenSave(LPSDHP_ZENSAVE lpMsg, int aIndex); void GDItemCreate(SDHP_ITEMCREATE *lpMsg, int aIndex); void GDPropertyItemCreate(LPSDHP_PROPERTY_ITEMCREATE lpMsg, int aIndex); -//void GDDeleteTempUserInfo(LPSDHP_DELETE_TEMPUSERINFO lpMsg); void GDCharacterTransfer(LPSDHP_CHARACTER_TRANSFER lpMsg, int aIndex); -#ifdef DARKLORD_WORK void GDPetItemCreate(LPSDHP_PET_ITEMCREATE lpMsg, int aIndex); void DGGetPetItemInfo(BYTE *lpRecv, int aIndex); void DGSetPetItemInfo(BYTE *lpRecv, int aIndex); -#endif -#ifdef MU_CASTLESIEGE_DS_PROTOCOL_20041105 void DS_GDReqCastleTotalInfo(BYTE *lpRecv, int aIndex); void DS_GDReqOwnerGuildMaster(BYTE *lpRecv, int aIndex); void DS_GDReqCastleNpcBuy(BYTE *lpRecv, int aIndex); @@ -79,38 +72,25 @@ void DS_GDReqCsGuildUnionInfo(BYTE *lpRecv, int aIndex); void DS_GDReqCsSaveTotalGuildInfo(BYTE *lpRecv, int aIndex); void DS_GDReqCsLoadTotalGuildInfo(BYTE *lpRecv, int aIndex); void DS_GDReqCastleNpcUpdate(BYTE *lpRecv, int aIndex); -#endif -#ifdef MU_CRYWOLF_DS_PROTOCOL_20050505 void GDReqCrywolfSync(BYTE *lpRecv, int aIndex); void GDReqCrywolfInfoLoad(BYTE *lpRecv, int aIndex); void GDReqCrywolfInfoSave(BYTE *lpRecv, int aIndex); -#endif void GDReqPeriodItemExInsert(BYTE *lpRecv, int aIndex); void GDReqPeriodItemExDelete(BYTE *lpRecv, int aIndex); void GDReqPeriodItemExSelect(BYTE *lpRecv, int aIndex); void GDReqUserID(BYTE *lpRecv, int aIndex); void DGChangeName(LPSDHP_CHANGE_NAME lpMsg, int aIndex); -#ifdef ADD_CHARCARD_SUMMONER_20080313 void GJPSetAccountInfo(LPSDHP_REQ_SETACCOUNTINFO lpMsg, int aIndex); -#endif void GDReqQuestExpInfoSave(_PMSG_QUESTEXP_INFO *lpMsg); void GDReqQuestExpInfoLoad(PMSG_REQ_QUESTEXP_INFO *lpMsg, int aIndex); void GDReqLuckyItemInsert(BYTE *lpRecv, int aIndex); void GDReqLuckyItemInsert2nd(BYTE *lpRecv, int aIndex); void GDReqLuckyItemDelete(BYTE *lpRecv, int aIndex); void GDReqLuckyItemSelect(BYTE *lpRecv, int aIndex); -//void GDSetExGameServerCode(LPSDHP_REQ_SET_EXGAMESERVERCODE lpMsg, int aIndex); void GDSetExtendedInvenCount(SDHP_REQ_SET_EXTENDEDINVEN_COUNT *lpMsg, int aIndex); void GDSetExtendedWarehouseCount(SDHP_REQ_SET_EXTENDEDWAREHOUSE_COUNT *lpMsg, int aIndex); void GDMacroLoad(SDHP_MACRODATA *lpMsg, int aIndex); void GDMacroSave(LPSDHP_MACRODATA lpMsg, int aIndex); -//void GDBroadcastPostMessage(BYTE *lpRecv, int aIndex); -//void DGShellExecution(LPBYTE pMsg, int aIndex); -//void DGRequestVip(LPPMSG_REQ_VIP pMsg, int aIndex); -//void DGRequestUpdateResetInfo(LPPMSG_REQ_SAVE_CHARACTER_RESET pMsg, int aIndex); -//void DGRequestResetInfo(LPPMSG_CHARACTER_RESET pMsg, int aIndex); - -//season 12+ void GD_RuudTokenUpdate(SDHP_RUUDTOKENUPDATE *lpRecv); void GDSnsLoad(SDHP_SNSDATA *lpMsg, int aIndex); void GDSnsSave(SDHP_SNSDATA *lpMsg); @@ -253,7 +233,6 @@ void GD_Req_Get_EventMapEnterCount(SDHP_GET_EVENTMAPENTERCOUNT *lpRecv, int aInd void GD_Req_Set_EventMapEnterCount(SDHP_SET_EVENTMAPENTERCOUNT *lpRecv); void GD_ReqEventMapIntegration_AllNotify(SDHP_SEND_EVENTMAP_INFO_ALL_SVR *lpRecv); -//-- struct PMSG_DEFAULT { PBMSG_HEAD h; @@ -1433,692 +1412,6 @@ void GJPCharacterListRequestCS(SDHP_GETCHARLIST *lpCLMsg, int aIndex) wsjServer.DataSend(aIndex, (char*)SendBuf, lOfs); } #endif -#ifdef DEV - -void GJPCharacterListRequestCS(SDHP_GETCHARLIST *lpCLMsg, int aIndex) -{ - //DGAccountInfoSend(lpCLMsg->Index, lpCLMsg->Account); - BYTE Buffer[520]; - SDHP_CHARLISTCOUNT pMsg; - int size = sizeof(pMsg); - pMsg.header.set(0x01, size); - memcpy(pMsg.AccountId, lpCLMsg->Id, sizeof(pMsg.AccountId)); - pMsg.GenerableClass = 0; - pMsg.Count = 0; - pMsg.Index = lpCLMsg->Number; - - if (gACDbSet.GetAccountId(lpCLMsg->Id) == false && - gACDbSet.CreateAccountCharacter(lpCLMsg->Id) == false) - { - memcpy(Buffer, &pMsg, sizeof(pMsg)); - wsjServer.DataSend(aIndex, (char*)Buffer, size); - return; - } - BYTE btSlotCount = 0; - if (gACDbSet.GetCharacterSlotCount(lpCLMsg->Id, &btSlotCount) == TRUE) - { - pMsg.CharacterSlotCount = btSlotCount; - } - BYTE btAddExtendedWarehouseCount = 0; - if (gACDbSet.GetCharacterExtendedWarehouseCount(lpCLMsg->Id, &btAddExtendedWarehouseCount) == TRUE) - { - pMsg.ExtendedWarehouseCount = btAddExtendedWarehouseCount; - } - AccountCharacterInfo ACInfo; - - memset(&ACInfo, 0, sizeof(ACInfo)); - if (gACDbSet.GetAccountInfo(lpCLMsg->Id, &ACInfo) == false) - { - memcpy(Buffer, &pMsg, sizeof(pMsg)); - wsjServer.DataSend(aIndex, (char*)Buffer, size); - return; - } - char Names[MAXUSERCHARACTER][11]; - memcpy(Names[0], ACInfo.GameID1, sizeof(ACInfo.GameID1)); - memcpy(Names[1], ACInfo.GameID2, sizeof(ACInfo.GameID2)); - memcpy(Names[2], ACInfo.GameID3, sizeof(ACInfo.GameID3)); - memcpy(Names[3], ACInfo.GameID4, sizeof(ACInfo.GameID4)); - memcpy(Names[4], ACInfo.GameID5, sizeof(ACInfo.GameID5)); - pMsg.MoveCnt = ACInfo.MoveCnt; SDHP_CHARLIST info; - for (int i = 0; i < MAXUSERCHARACTER; ++i) - { - int Len = strlen(Names[i]); - if (Len <= 0 || Len > 10) - { - continue; - } - BYTE _ctlcode = 0; - BYTE _dbverstion = 0; - BYTE _pkLevel = 0; - BYTE _btGuildStatus = -1; - int _level = 0; - int _class = 0; - BYTE Inventory[MAX_DBINVENTORY];// [3800]; - memset(Inventory, 0xFF, sizeof(Inventory)); - - if (gCharPreDBSet.GetChar(Names[i], lpCLMsg->Id, &_level, &_class, Inventory, &_ctlcode, &_dbverstion, &_pkLevel, &_btGuildStatus) == false) - { - continue; - } - info.Index = i; - info.Level = _level; - info.Class = _class; - info.CtlCode = _ctlcode; - info.DbVersion = _dbverstion; // Cambiar a una funcion la migracion del SpeedServer - if (_pkLevel & 0x80) - { - LogAdd("Speed server migration [Account:%s][Name:%s][level:%d]", lpCLMsg->Id, Names[i], _level); - _pkLevel &= 0x7F; - WORD MasterLevel = 0; - MLP_ANS_MASTERLEVEL_INFO MasterInfo; - if (_level >= 400 && MasterLevelSystemDBSet.DSDB_QueryMasterLevelSystemLoad(Names[i], &MasterInfo) == false) - { - MasterLevel = MasterInfo.nMLevel; - } - BYTE ClassType = 4 * DCInfo.GetCharacterClassByDBClass(_class); - if (ClassType == 0xFF) - { - continue; - } - BYTE InventoryData[(MAX_ITEM - 1)*MAX_EQUIPMENT]; - memset(InventoryData, -1, sizeof(InventoryData)); - if ((MasterLevel + _level) >= 600) - { - ItemByteConvert16(InventoryData, DCInfo.JumpingEquipment[ClassType + 3], INVENTORY_EXT4_SIZE); - } - else if ((MasterLevel + _level) >= 500) - { - ItemByteConvert16(InventoryData, DCInfo.JumpingEquipment[ClassType + 1], INVENTORY_EXT4_SIZE); - } - else if (_level >= 400) - { - ItemByteConvert16(InventoryData, DCInfo.JumpingEquipment[ClassType], INVENTORY_EXT4_SIZE); - } - else if (_level >= 380) - { - ItemByteConvert16(InventoryData, DCInfo.JumpingEquipment[ClassType + 2], INVENTORY_EXT4_SIZE); - } - else - { - CItem ItemInfo[(MAX_EQUIPMENT + 1)]; - for (int k = 0; k < (MAX_EQUIPMENT + 1); ++k) - { - ItemInfo[k].Clear(); - } - WORD type = ItemGetNumberMake(14, 286); - ItemInfo[12].Convert(type, 0, 0, 0, 0, 0, 3); - ItemByteConvert16(InventoryData, ItemInfo, (MAX_EQUIPMENT + 1)); - } - gCharDbSet.RewardJumpingItem(Names[i], InventoryData); - } - // ----------- - info.PK_Level = _pkLevel; - info.btGuildStatus = _btGuildStatus; - memcpy(info.UnityBFOfRealName, "", sizeof(info.UnityBFOfRealName)); - info.ServerCodeOfHomeWorld = 0; - gCharPreDBSet.GetRealNameAndServerCode(Names[i], info.UnityBFOfRealName, &info.ServerCodeOfHomeWorld, lpCLMsg->IsUnityBattleFiledServer); - - memcpy(info.Name, Names[i], sizeof(info.Name)); - - if ((_ctlcode & 0x80) == 0 && _level >= 150) - { - if (_level < 200 && pMsg.GenerableClass < 2) - { - pMsg.GenerableClass = 1; - } - else if (_level >= 200 && pMsg.GenerableClass < 3) - { - pMsg.GenerableClass = 2; - } - else if (_level >= 220 && pMsg.GenerableClass < 4) - { - pMsg.GenerableClass = 3; - } - else if (_level >= 250 && pMsg.GenerableClass < 5) - { - pMsg.GenerableClass = 4; - } - else if (_level >= 400) - { - pMsg.GenerableClass = 5; - } - } - for (int n = 0; n < MAX_EQUIPMENT; ++n) - { - switch (_dbverstion) - { - case 0x00: - memcpy(&info.dbInventory[2 * n], &Inventory[7 * n], sizeof(WORD)); - continue; - case 0x01: - case 0x02: - memcpy(&info.dbInventory[3 * n], &Inventory[10 * n], sizeof(WORD)); - info.dbInventory[3 * n + 2] = Inventory[10 * n + 7]; - continue; - case 0x03: - memcpy(&info.dbInventory[4 * n], &Inventory[16 * n], sizeof(WORD)); - info.dbInventory[4 * n + 2] = Inventory[16 * n + 7]; - info.dbInventory[4 * n + 3] = Inventory[16 * n + 9]; - continue; - } - } - memcpy(&Buffer[size], &info, sizeof(info)); - size += sizeof(info); - pMsg.Count++; - } - pMsg.header.sizeH/*[0]*/ = HIBYTE(size); - pMsg.header.sizeL/*[1]*/ = LOBYTE(size); - memcpy(Buffer, &pMsg, sizeof(pMsg)); - wsjServer.DataSend(aIndex, (char*)Buffer, size); - // pCount.h.c = PMHC_WORD; - // pCount.h.headcode = 1; - // pCount.Number = lpCLMsg->Number; - // pCount.Count = Count; - // pCount.h.sizeH = HIBYTE(lOfs); - // pCount.h.sizeL = LOBYTE(lOfs); - // memcpy(SendBuf, &pCount, sizeof(SDHP_CHARLISTCOUNT)); - // wsjServer.DataSend(aIndex, (char*)SendBuf, lOfs); -} -#endif - -//void GJPCharacterListRequestCS(SDHP_GETCHARLIST *lpCLMsg, int aIndex) -//{ -// CharacterInfo_Struct tCharInfo; -// MLP_ANS_MASTERLEVEL_INFO ReqInfo; -// AccountCharacterInfo ACInfo; -// CString strCharId[5]; -// char SendBuf[520]; -// SDHP_CHARLIST pCharList; -// -// int IsUBFServer; -// SDHP_CHARLISTCOUNT pCount; -// -// SDHP_ANS_ACCOUNTINFO Result; -// -// memset(Result.AccountId, 0, MAX_IDSTRING + 1); -// memcpy(Result.AccountId, lpCLMsg->Id, MAX_IDSTRING); -// Result.h.set((LPBYTE)&Result, 0xA1, sizeof(SDHP_ANS_ACCOUNTINFO)); -// Result.Number = lpCLMsg->Number; -// Result.bSummoner = gACDbSet.GetSummonerCardInfo(Result.AccountId); -// Result.Result = 0; -// wsjServer.DataSend(aIndex, (char*)&Result, sizeof(SDHP_ANS_ACCOUNTINFO)); -// -// BYTE result = 1; -// int listcount = 0; -// IsUBFServer = lpCLMsg->IsUnityBattleFiledServer; -// int lOfs = 0; -// int Count = 0; -// int v74 = 0; -// -// char szId[MAX_IDSTRING + 1]; -// char characterName[MAX_IDSTRING + 1]; -// -// memset(&pCharList, 0, sizeof(SDHP_CHARLIST)); -// memset(pCount.AccountId, 0, MAX_IDSTRING + 1); -// memset(szId, 0, MAX_IDSTRING + 1); -// -// memcpy(szId, lpCLMsg->Id, MAX_IDSTRING); -// memcpy(pCount.AccountId, lpCLMsg->Id, MAX_IDSTRING); -// -// memset(SendBuf, 0, 512); -// pCount.GenerableClass = 0; -// -// lOfs += sizeof(SDHP_CHARLISTCOUNT); -// -// if (result == 1) -// { -// if (gACDbSet.GetAccountId(szId) == 1) -// { -// result = 1; -// } -// else -// { -// result = 0; -// if (gACDbSet.CreateAccountCharacter(szId) == 1) -// result = 1; -// } -// } -// if (result == 1) -// { -// BYTE btSlotCount = 0; -// if (gACDbSet.GetCharacterSlotCount(szId, &btSlotCount) == 1) -// { -// pCount.CharacterSlotCount = btSlotCount; -// } -// BYTE btAddExtendedWarehouseCount = 0; -// if (gACDbSet.GetCharacterExtendedWarehouseCount(szId, &btAddExtendedWarehouseCount) == 1) -// { -// pCount.ExtendedWarehouseCount = btAddExtendedWarehouseCount; -// } -// memset(&ACInfo, 0, sizeof(AccountCharacterInfo)); -// -// if (gACDbSet.GetAccountInfo(szId, &ACInfo)) -// { -// result = 1; -// -// strCharId[0] = ACInfo.GameID1; -// strCharId[1] = ACInfo.GameID2; -// strCharId[2] = ACInfo.GameID3; -// strCharId[3] = ACInfo.GameID4; -// strCharId[4] = ACInfo.GameID5; -// pCount.MoveCnt = ACInfo.MoveCnt; -// -// int listcount = 0; -// -// for (int i = 0; i < 5; ++i) -// { -// int n; -// if (strCharId[n].GetLength() > 0 && strCharId[n].GetLength() <= MAX_IDSTRING) -// { -// memset(characterName, 0, MAX_IDSTRING + 1); -// -// strcpy(characterName, strCharId[n].GetBuffer(MAX_IDSTRING)); -// -// int _level; -// int _class; -// -// BYTE Inventory[MAX_DBINVENTORY]; -// -// BOOL bGetPrevChar = 0; -// BYTE _ctlcode = 0; -// BYTE _dbverstion = 0; -// char _pkLevel = 0; -// BYTE _btGuildStatus = 0xFF; -// //(characterName, _level, _class, Inventory, _ctlcode, _dbverstion, _btGuildStatus); -// bGetPrevChar = gCharPreDBSet.GetChar(characterName, szId, &_level, &_class, Inventory, _ctlcode, _dbverstion, &_pkLevel, _btGuildStatus); -// -// if (bGetPrevChar == TRUE) -// { -// pCharList.Index = i; -// pCharList.Level = _level; -// pCharList.Class = _class; -// pCharList.CtlCode = _ctlcode; -// pCharList.DbVersion = _dbverstion; -// -// if (_pkLevel & 0x80) -// { -// //LogAddTD(&byte_591B4C, szId, characterName, _level); -// _pkLevel &= 0x7Fu; -// int v17 = 0; -// int v16 = 0xFF; -// if (_level >= 400 && !MasterLevelSystemDBSet.DSDB_QueryMasterLevelSystemLoad(characterName, &ReqInfo)) -// { -// v17 = ReqInfo.nMLevel; -// } -// classdef _classdef; -// v16 = 4 * _classdef.GetCharacterClassByDBClass(_class); -// if (v16 != 255) -// { -// for (int j = 0; j < 236; ++j) -// memset(&tCharInfo.dbInventory[16 * j], 255, 0x10u); -// if (v17 + _level < 600) -// { -// if (v17 + _level < 500) -// { -// if (_level < 400) -// { -// if (_level < 380) -// { -// //`vector constructor iterator'(__t, 0xA8u, 13, CItem::CItem); -// /* for (k = 0; k < 13; ++k) -// Inventory.Clear([168 * k]); -// type = ItemGetNumberMake(14, 286); -// v12.Convert(type, 0, 0, 0, 0, 0, 3); -// ItemByteConvert16(tCharInfo.dbInventory, Inventory, 13);*/ -// } -// else -// { -// ItemByteConvert16(tCharInfo.dbInventory, DCInfo.JumpingEquipment[v16 + 2], 204); -// } -// } -// else -// { -// ItemByteConvert16(tCharInfo.dbInventory, DCInfo.JumpingEquipment[v16], 204); -// } -// } -// else -// { -// ItemByteConvert16(tCharInfo.dbInventory, DCInfo.JumpingEquipment[v16 + 1], 204); -// } -// } -// else -// { -// //ItemByteConvert16(tCharInfo.dbInventory, DCInfo.DefClass[defclass].Equipment, MAX_EQUIPMENT + 2); -// ItemByteConvert16(tCharInfo.dbInventory, DCInfo.JumpingEquipment[v16 + 3], 204); -// } -// gCharDbSet.RewardJumpingItem(characterName, tCharInfo.dbInventory); -// } -// } -// pCharList.PK_Level = _pkLevel; -// pCharList.btGuildStatus = _btGuildStatus; -// int ServerCodeOfHomeWorld = 0; -// int ServerCode = 0; -// char szRealName; -// if (IsUBFServer == 1) -// -// pCharList.ServerCodeOfHomeWorld = gCharPreDBSet.GetRealNameAndServerCode(characterName, &szRealName, &ServerCode, 1); -// if (IsUBFServer != 1 || ServerCodeOfHomeWorld != 1) -// { -// //memcpy(&v41, &GameID, MAX_IDSTRING); -// int ServerCodeOfHomeWorld = 0; -// } -// else -// { -// //memcpy(&v41, &szRealName, MAX_IDSTRING); -// ServerCodeOfHomeWorld = ServerCode; -// } -// char v40; -// memcpy(&v40, characterName, MAX_IDSTRING); -// if (!(_ctlcode & 0x80) && _level >= 150) -// { -// if (_level < 400) -// { -// if (_level < 250) -// { -// if (_level < 220) -// { -// if (_level < 200) -// { -// if (pCount.GenerableClass < 2) -// pCount.GenerableClass = 1; -// } -// else if (pCount.GenerableClass < 3) -// { -// pCount.GenerableClass = 2; -// } -// } -// else if (pCount.GenerableClass < 4) -// { -// pCount.GenerableClass = 3; -// } -// } -// else if (pCount.GenerableClass < 5) -// { -// pCount.GenerableClass = 4; -// } -// } -// else -// { -// pCount.GenerableClass = 5; -// } -// } -// if (_dbverstion) -// { -// if (_dbverstion != 1 && _dbverstion != 2) -// { -// for (int l = 0; l < MAX_EQUIPMENT; ++l) -// { -// memcpy(&pCharList.dbInventory[4 * l], &Inventory[16 * l], 2); -// pCharList.dbInventory[4 * l + 2] = Inventory[16 * l + 7]; -// pCharList.dbInventory[4 * l + 3] = Inventory[16 * l + 9]; -// } -// } -// else -// { -// for (int k = 0; k < MAX_EQUIPMENT; ++k) -// { -// memcpy(&pCharList.dbInventory[3 * k], &Inventory[10 * k], 2); -// pCharList.dbInventory[3 * k + 2] = Inventory[10 * k + 7]; -// } -// } -// } -// else -// { -// for (int n = 0; n < MAX_EQUIPMENT; ++n) -// memcpy(&pCharList.dbInventory[2 * n], &Inventory[7 * n], 2); -// } -// memcpy(&SendBuf[lOfs], &pCharList, sizeof(SDHP_CHARLIST)); -// lOfs += sizeof(SDHP_CHARLIST);; -// ++Count; -// } -// } -// } -// } -// else -// { -// result = 0; -// } -// } -// pCount.h.c = PMHC_WORD; -// pCount.h.headcode = 1; -// pCount.Number = lpCLMsg->Number; -// pCount.Count = Count; -// pCount.h.sizeH = HIBYTE(lOfs); -// pCount.h.sizeL = LOBYTE(lOfs); -// memcpy(SendBuf, &pCount, sizeof(SDHP_CHARLISTCOUNT)); -// wsjServer.DataSend(aIndex, (char*)SendBuf, lOfs); -//} - -#ifdef WORKIG_PREVIEW -void GJPCharacterListRequestCS(LPSDHP_GETCHARLIST lpCLMsg, int aIndex) -{ -#ifdef ADD_CHARCARD_SUMMONER_20080313 - SDHP_ANS_ACCOUNTINFO Result; -#endif - - char characterName[MAX_IDSTRING + 1]; - char szId[MAX_IDSTRING + 1]; - -#ifdef ADD_CHARCARD_SUMMONER_20080313 - memset(Result.AccountId, 0, MAX_IDSTRING + 1); - memcpy(Result.AccountId, lpCLMsg->Id, MAX_IDSTRING); - - Result.h.set((LPBYTE)&Result, 0xA1, sizeof(SDHP_ANS_ACCOUNTINFO)); - - Result.Number = lpCLMsg->Number; - - Result.bSummoner = gACDbSet.GetSummonerCardInfo(Result.AccountId); - - Result.Result = 0; - - wsjServer.DataSend(aIndex, (char*)&Result, sizeof(SDHP_ANS_ACCOUNTINFO)); -#endif - - int IsUBFServer = lpCLMsg->IsUnityBattleFiledServer;//s12 - BYTE result = 1; - int listcount = 0; - - int n; - SDHP_CHARLISTCOUNT pCount; - SDHP_CHARLIST pCharList; - char SendBuf[512]; - - int lOfs = 0; - int Count = 0; - - CString strCharId[5]; - - memset(&pCharList, 0, sizeof(SDHP_CHARLIST)); - memset(pCount.AccountId, 0, sizeof(pCount.AccountId)); - memset(szId, 0, MAX_IDSTRING + 1); - - memcpy(szId, lpCLMsg->Id, MAX_IDSTRING); - memcpy(pCount.AccountId, lpCLMsg->Id, MAX_IDSTRING); - - memset(SendBuf, 0, 512); - pCount.GenerableClass = 0; - - lOfs += sizeof(SDHP_CHARLISTCOUNT); - - if (result == 1) - { - if (gACDbSet.GetAccountId(szId) == 1) - { - result = 1; - } - else - { - result = 0; - - if (gACDbSet.CreateAccountCharacter(szId) == 1) - { - result = 1; - } - } - } - - AccountCharacterInfo ACInfo; - - if (result == 1) - { - BYTE btSlotCount = 0; - if (gACDbSet.GetCharacterSlotCount(szId, &btSlotCount) == TRUE) - pCount.CharacterSlotCount = btSlotCount; - - BYTE btExtendedWarehouseCount = 0; - if (gACDbSet.GetCharacterExtendedWarehouseCount(szId, &btExtendedWarehouseCount) == TRUE) - { - pCount.ExtendedWarehouseCount = btExtendedWarehouseCount; - } - - memset(&ACInfo, 0, sizeof(AccountCharacterInfo)); - - if (gACDbSet.GetAccountInfo(szId, &ACInfo) == FALSE) - { - result = 0; - } - else - { - result = 1; - - strCharId[0] = ACInfo.GameID1; - strCharId[1] = ACInfo.GameID2; - strCharId[2] = ACInfo.GameID3; - strCharId[3] = ACInfo.GameID4; - strCharId[4] = ACInfo.GameID5; -#ifdef CHARACTER_MOVE_20040810 - pCount.MoveCnt = ACInfo.MoveCnt; -#endif - listcount = 0; - - for (n = 0; n < 5; n++) - { - if (strCharId[n].GetLength() > 0 && strCharId[n].GetLength() <= MAX_IDSTRING) - { - memset(characterName, 0, MAX_IDSTRING + 1); - strcpy(characterName, strCharId[n].GetBuffer(MAX_IDSTRING)); - - int _level; - int _class; - BYTE Inventory[MAX_DBINVENTORY]; - - BOOL bGetPrevChar = FALSE; - BYTE _ctlcode = 0; - BYTE _dbverstion = 0; - char _pkLevel = 0; - BYTE _btGuildStatus = 0xFF; - - //bGetPrevChar = gCharPreDBSet.GetChar(characterName, _level, _class, Inventory, _ctlcode, _dbverstion, _btGuildStatus); - bGetPrevChar = gCharPreDBSet.GetChar( - characterName, - szId, - &_level, - &_class, - Inventory, - _ctlcode, - _dbverstion, - &_pkLevel, - _btGuildStatus); - - if (bGetPrevChar == TRUE) - { - pCharList.Index = n; - pCharList.Level = _level; - pCharList.Class = _class; - - pCharList.CtlCode = _ctlcode; - pCharList.DbVersion = _dbverstion; -#ifdef ADD_CHARACTERLIST_GUILD_STATUS_01_20050126 - pCharList.btGuildStatus = _btGuildStatus; -#endif - memcpy(pCharList.Name, characterName, MAX_IDSTRING); - - if ((_ctlcode & 0x80) == FALSE) - { - /*int v17 = 0; - if (_level >= 400 && !MasterLevelSystemDBSet.DSDB_QueryMasterLevelSystemLoad(&Name, &ReqInfo)) - { - v17 = ReqInfo.nMLevel; - }*/ -#ifdef ADD_SEASON_3_NEW_CHARACTER_SUMMONER_20070912 - if (_level >= 150) -#else - if (_level >= 220) -#endif - { -#ifdef DARKLORD_WORK -#ifdef ADD_SEASON_3_NEW_CHARACTER_SUMMONER_20070912 - if (_level >= 250) - { - pCount.GenerableClass = 3; - } - else -#endif - if (_level >= 220) - { - if (pCount.GenerableClass < 2) - { - pCount.GenerableClass = 2; - } - } - else if (pCount.GenerableClass < 2) -#endif - { - pCount.GenerableClass = 1; - } - } - } - - if (_dbverstion == 0) - { - for (int i = 0; i < MAX_EQUIPMENT; i++) - { - memcpy(&pCharList.dbInventory[2 * i], &Inventory[7 * i], 2); - } - } - else -#if GAME_VERSION >= G_V_S1_512 - if (_dbverstion == 1 || _dbverstion == 2) -#endif - { - for (int k = 0; k < MAX_EQUIPMENT; k++) - { - memcpy(&pCharList.dbInventory[3 * k], &Inventory[10 * k], 2); - pCharList.dbInventory[3 * k + 2] = Inventory[10 * k + 7]; - } - } -#if GAME_VERSION >= G_V_S1_512 - else - { - for (int j = 0; j < MAX_EQUIPMENT; j++) - { - memcpy(&pCharList.dbInventory[4 * j], &Inventory[16 * j], 2); - pCharList.dbInventory[4 * j + 2] = Inventory[16 * j + 7]; - pCharList.dbInventory[4 * j + 3] = Inventory[16 * j + 9]; - } - } -#endif - - memcpy(&SendBuf[lOfs], &pCharList, sizeof(SDHP_CHARLIST)); - lOfs += sizeof(SDHP_CHARLIST); - Count++; - } - } - } - } - } - - pCount.h.c = PMHC_WORD; - pCount.h.headcode = 0x01; - pCount.Number = lpCLMsg->Number; - pCount.Count = Count; - pCount.h.sizeH = HIBYTE(lOfs); - pCount.h.sizeL = LOBYTE(lOfs); - memcpy(SendBuf, &pCount, sizeof(SDHP_CHARLISTCOUNT)); - - wsjServer.DataSend(aIndex, (char*)SendBuf, lOfs); -} -#endif void GDCharacterClose(LPSDHP_USERCLOSE lpMsg, short aIndex) { diff --git a/DataServer/stdafx.h b/DataServer/stdafx.h index 7602c13..bdd5dad 100644 --- a/DataServer/stdafx.h +++ b/DataServer/stdafx.h @@ -1,25 +1,16 @@ - -// stdafx.h : include file for standard system include files, -// or project specific include files that are used frequently, -// but are changed infrequently - +#ifndef __STDAFX_H__ +#define __STDAFX_H__ #pragma once -#ifndef VC_EXTRALEAN -#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers -#endif - #pragma warning ( disable : 4786 ) -#pragma warning ( disable :4566) - -#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit +#pragma warning ( disable : 4566 ) -// turns off MFC's hiding of some common and often safely ignored warning messages -#define _AFX_ALL_WARNINGS +#define VC_EXTRALEAN +#define _WIN32_WINNT 0x500 #include // MFC core and standard components #include // MFC extensions - +#include // MFC Automation classes #ifndef _AFX_NO_DB_SUPPORT #include // MFC ODBC database classes @@ -35,16 +26,13 @@ #include // MFC support for Windows Common Controls #endif // _AFX_NO_AFXCMN_SUPPORT -#include // MFC support for ribbons and control bars - -#define DATASERVER_VERSION "0.75.00"//"0.73.00" +#define DATASERVER_VERSION "0.75.00" #include "Include\define.h" #include "common\Logproc.h" #include "LogToFile.h" #include "common\winutil.h" #include "Include\ProDef.h" -#include "common\ItemSocketOptionDefine.h" #define DB_CONNECT_DSN "MuOnlineJoinDB" #define DB_CONNECT_UID "MuOnlineAdmin" @@ -57,5 +45,3 @@ extern char szDbConnectDsn[]; #include "CQuery.h" extern char g_szDBID_DESC[]; - -//#define DEBUG_IOCP_LOG From 2c11e723ab63a72d31bf20ea23278ea391687e40 Mon Sep 17 00:00:00 2001 From: dudusiao <12389329292@ww.xx> Date: Tue, 12 Jan 2021 00:27:37 +0100 Subject: [PATCH 2/2] - 5 dbsets and conbase 100% --- DataServer/DbSet/CastleDBSet.cpp | 482 +++-- DataServer/DbSet/CastleDBSet.h | 81 +- DataServer/DbSet/ChaosCastleFinalDBSet.cpp | 1467 +++++++------- DataServer/DbSet/ChaosCastleFinalDBSet.h | 51 +- DataServer/DbSet/CharDBSet.cpp | 944 +++------ DataServer/DbSet/CharDBSet.h | 150 +- DataServer/DbSet/CharPreviewDBSet.cpp | 267 +-- DataServer/DbSet/CharPreviewDBSet.h | 21 +- DataServer/DbSet/CrywolfDBSet.cpp | 40 +- DataServer/DbSet/CrywolfDBSet.h | 16 +- DataServer/DbSet/DBConBase.cpp | 18 +- DataServer/DbSet/DBConBase.h | 13 +- DataServer/include/Sprodef.h | 2031 ++++++++------------ DataServer/include/define.h | 8 +- DataServer/include/public.h | 26 + 15 files changed, 2277 insertions(+), 3338 deletions(-) diff --git a/DataServer/DbSet/CastleDBSet.cpp b/DataServer/DbSet/CastleDBSet.cpp index 67e80dd..8d66589 100644 --- a/DataServer/DbSet/CastleDBSet.cpp +++ b/DataServer/DbSet/CastleDBSet.cpp @@ -1,40 +1,27 @@ -// CastleDBSet.cpp: implementation of the CCastleDBSet class. -// Decompilation Completed -> All Same as WebZen -////////////////////////////////////////////////////////////////////// - #include "stdafx.h" -#ifdef MU_CASTLESIEGE_DS_PROTOCOL_20041105 #include "CastleDBSet.h" -//#include "..\common\winutil.h" - -////////////////////////////////////////////////////////////////////// -// Construction/Destruction -////////////////////////////////////////////////////////////////////// CCastleDBSet::CCastleDBSet() { - } CCastleDBSet::~CCastleDBSet() { - } BOOL CCastleDBSet::Connect() { - return this->CDBConBase::Connect(szDbConnectID, szDbConnectPass); + return CDBConBase::Connect(szDbConnectID, szDbConnectPass); } -BOOL CCastleDBSet::DSDB_QueryCastleTotalInfo(int iMapSvrGroup, int iCastleEventCycle, CASTLE_DATA* lpCastleData) +BOOL CCastleDBSet::DSDB_QueryCastleTotalInfo(int iMapSvrGroup, int iCastleEventCycle, LPCASTLE_DATA lpCastleData) { - if(lpCastleData == NULL) + if (lpCastleData == NULL) { return TRUE; } CString qSql; - qSql.Format("EXEC WZ_CS_GetCastleTotalInfo %d, %d", iMapSvrGroup, iCastleEventCycle); if (m_DBQuery.Exec(qSql) == FALSE) @@ -43,9 +30,9 @@ BOOL CCastleDBSet::DSDB_QueryCastleTotalInfo(int iMapSvrGroup, int iCastleEventC return TRUE; } - short sqlRet = m_DBQuery.Fetch(); + SQLRETURN sqlRet = m_DBQuery.Fetch(); - if(sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA) + if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA) { m_DBQuery.Clear(); return TRUE; @@ -70,7 +57,7 @@ BOOL CCastleDBSet::DSDB_QueryCastleTotalInfo(int iMapSvrGroup, int iCastleEventC return FALSE; } -BOOL CCastleDBSet::DSDB_QueryOwnerGuildMaster(int iMapSvrGroup, CSP_ANS_OWNERGUILDMASTER* lpOwnerGuildMaster) +BOOL CCastleDBSet::DSDB_QueryOwnerGuildMaster(int iMapSvrGroup, LPCSP_ANS_OWNERGUILDMASTER lpOwnerGuildMaster) { if (lpOwnerGuildMaster == NULL) { @@ -78,7 +65,6 @@ BOOL CCastleDBSet::DSDB_QueryOwnerGuildMaster(int iMapSvrGroup, CSP_ANS_OWNERGUI } CString qSql; - qSql.Format("EXEC WZ_CS_GetOwnerGuildMaster %d", iMapSvrGroup); if (m_DBQuery.Exec(qSql) == FALSE) @@ -87,30 +73,30 @@ BOOL CCastleDBSet::DSDB_QueryOwnerGuildMaster(int iMapSvrGroup, CSP_ANS_OWNERGUI return TRUE; } - short sqlRet = m_DBQuery.Fetch(); - - if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA ) + SQLRETURN sqlRet = m_DBQuery.Fetch(); + + if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA) { m_DBQuery.Clear(); - return NULL; + return FALSE; } - - char szOwnerGuild[MAX_GUILDNAMESTRING+MAX_GUILDNAMESTRING] = {'\0'}; - char szOwnerGuildMaster[MAX_GUILDNAMESTRING+MAX_GUILDNAMESTRING] = {'\0'}; - + + char szOwnerGuild[MAX_GUILDNAMESTRING + MAX_GUILDNAMESTRING] = { '\0' }; + char szOwnerGuildMaster[MAX_GUILDNAMESTRING + MAX_GUILDNAMESTRING] = { '\0' }; + lpOwnerGuildMaster->iResult = m_DBQuery.GetInt("QueryResult"); - + m_DBQuery.GetStr("OwnerGuild", szOwnerGuild); m_DBQuery.GetStr("OwnerGuildMaster", szOwnerGuildMaster); - + memcpy(lpOwnerGuildMaster->szCastleOwnGuild, szOwnerGuild, MAX_GUILDNAMESTRING); memcpy(lpOwnerGuildMaster->szCastleOwnGuildMaster, szOwnerGuildMaster, MAX_IDSTRING); - + m_DBQuery.Clear(); - return FALSE; -} + return FALSE; +}; -int CCastleDBSet::DSDB_QueryCastleNpcBuy(int iMapSvrGroup, CSP_REQ_NPCBUY* lpNpcBuy, int* lpiResult) +BOOL CCastleDBSet::DSDB_QueryCastleNpcBuy(int iMapSvrGroup, LPCSP_REQ_NPCBUY lpNpcBuy, int* lpiResult) { if (lpiResult == NULL || lpNpcBuy == NULL) { @@ -118,10 +104,7 @@ int CCastleDBSet::DSDB_QueryCastleNpcBuy(int iMapSvrGroup, CSP_REQ_NPCBUY* lpNpc } CString qSql; - - qSql.Format("EXEC WZ_CS_ReqNpcBuy %d, %d, %d, %d, %d, %d, %d, %d, %d, %d", - iMapSvrGroup, lpNpcBuy->iNpcNumber, lpNpcBuy->iNpcIndex, lpNpcBuy->iNpcDfLevel, - lpNpcBuy->iNpcRgLevel, lpNpcBuy->iNpcMaxHp, lpNpcBuy->iNpcHp, lpNpcBuy->btNpcX, lpNpcBuy->btNpcY, lpNpcBuy->btNpcDIR); + qSql.Format("EXEC WZ_CS_ReqNpcBuy %d, %d, %d, %d, %d, %d, %d, %d, %d, %d", iMapSvrGroup, lpNpcBuy->iNpcNumber, lpNpcBuy->iNpcIndex, lpNpcBuy->iNpcDfLevel, lpNpcBuy->iNpcRgLevel, lpNpcBuy->iNpcMaxHp, lpNpcBuy->iNpcHp, lpNpcBuy->btNpcX, lpNpcBuy->btNpcY, lpNpcBuy->btNpcDIR); if (m_DBQuery.Exec(qSql) == FALSE) { @@ -129,7 +112,7 @@ int CCastleDBSet::DSDB_QueryCastleNpcBuy(int iMapSvrGroup, CSP_REQ_NPCBUY* lpNpc return TRUE; } - short sqlRet = m_DBQuery.Fetch(); + SQLRETURN sqlRet = m_DBQuery.Fetch(); if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA ) { @@ -143,7 +126,7 @@ int CCastleDBSet::DSDB_QueryCastleNpcBuy(int iMapSvrGroup, CSP_REQ_NPCBUY* lpNpc return FALSE; } -BOOL CCastleDBSet::DSDB_QueryCastleNpcRepair(int iMapSvrGroup, CSP_REQ_NPCREPAIR* lpNpcRepair, CSP_ANS_NPCREPAIR* lpNpcRepairResult, int* lpiResult) +BOOL CCastleDBSet::DSDB_QueryCastleNpcRepair(int iMapSvrGroup, LPCSP_REQ_NPCREPAIR lpNpcRepair, LPCSP_ANS_NPCREPAIR lpNpcRepairResult, int* lpiResult) { if (lpNpcRepair == NULL || lpNpcRepairResult == NULL) { @@ -151,8 +134,7 @@ BOOL CCastleDBSet::DSDB_QueryCastleNpcRepair(int iMapSvrGroup, CSP_REQ_NPCREPAIR } CString qSql; - qSql.Format("EXEC WZ_CS_ReqNpcRepair %d, %d, %d", - iMapSvrGroup, lpNpcRepair->iNpcNumber, lpNpcRepair->iNpcIndex); + qSql.Format("EXEC WZ_CS_ReqNpcRepair %d, %d, %d", iMapSvrGroup, lpNpcRepair->iNpcNumber, lpNpcRepair->iNpcIndex); if (m_DBQuery.Exec(qSql) == FALSE) { @@ -160,7 +142,7 @@ BOOL CCastleDBSet::DSDB_QueryCastleNpcRepair(int iMapSvrGroup, CSP_REQ_NPCREPAIR return TRUE; } - short sqlRet = m_DBQuery.Fetch(); + SQLRETURN sqlRet = m_DBQuery.Fetch(); if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA ) { @@ -169,7 +151,7 @@ BOOL CCastleDBSet::DSDB_QueryCastleNpcRepair(int iMapSvrGroup, CSP_REQ_NPCREPAIR } *lpiResult = m_DBQuery.GetInt("QueryResult"); - + lpNpcRepairResult->iNpcHp = m_DBQuery.GetInt("NPC_HP"); lpNpcRepairResult->iNpcMaxHp = m_DBQuery.GetInt("NPC_MAXHP"); @@ -177,7 +159,7 @@ BOOL CCastleDBSet::DSDB_QueryCastleNpcRepair(int iMapSvrGroup, CSP_REQ_NPCREPAIR return FALSE; } -BOOL CCastleDBSet::DSDB_QueryCastleNpcUpgrade(int iMapSvrGroup, CSP_REQ_NPCUPGRADE* lpNpcUpgrade) +BOOL CCastleDBSet::DSDB_QueryCastleNpcUpgrade(int iMapSvrGroup, LPCSP_REQ_NPCUPGRADE lpNpcUpgrade) { if (lpNpcUpgrade == NULL) { @@ -193,7 +175,7 @@ BOOL CCastleDBSet::DSDB_QueryCastleNpcUpgrade(int iMapSvrGroup, CSP_REQ_NPCUPGRA return TRUE; } - short sqlRet = m_DBQuery.Fetch(); + SQLRETURN sqlRet = m_DBQuery.Fetch(); if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA) { @@ -210,11 +192,10 @@ BOOL CCastleDBSet::DSDB_QueryCastleNpcUpgrade(int iMapSvrGroup, CSP_REQ_NPCUPGRA } m_DBQuery.Clear(); - return FALSE; } -BOOL CCastleDBSet::DSDB_QueryTaxInfo(int iMapSvrGroup, CSP_ANS_TAXINFO* lpTaxInfo) +BOOL CCastleDBSet::DSDB_QueryTaxInfo(int iMapSvrGroup, LPCSP_ANS_TAXINFO lpTaxInfo) { if (lpTaxInfo == NULL) { @@ -230,7 +211,7 @@ BOOL CCastleDBSet::DSDB_QueryTaxInfo(int iMapSvrGroup, CSP_ANS_TAXINFO* lpTaxInf return TRUE; } - short sqlRet = m_DBQuery.Fetch(); + SQLRETURN sqlRet = m_DBQuery.Fetch(); if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA ) { @@ -242,12 +223,12 @@ BOOL CCastleDBSet::DSDB_QueryTaxInfo(int iMapSvrGroup, CSP_ANS_TAXINFO* lpTaxInf lpTaxInfo->iTaxRateChaos = m_DBQuery.GetInt("TAX_RATE_CHAOS"); lpTaxInfo->iTaxRateStore = m_DBQuery.GetInt("TAX_RATE_STORE"); lpTaxInfo->iTaxHuntZone = m_DBQuery.GetInt("TAX_HUNT_ZONE"); + m_DBQuery.Clear(); - return FALSE; } -BOOL CCastleDBSet::DSDB_QueryTaxRateChange(int iMapSvrGroup, int iTaxType, int iTaxRate, CSP_ANS_TAXRATECHANGE* lpTaxRateChange, int* lpiResult) +BOOL CCastleDBSet::DSDB_QueryTaxRateChange(int iMapSvrGroup, int iTaxType, int iTaxRate, LPCSP_ANS_TAXRATECHANGE lpTaxRateChange, int* lpiResult) { if (lpiResult == NULL || lpTaxRateChange == NULL) { @@ -263,7 +244,7 @@ BOOL CCastleDBSet::DSDB_QueryTaxRateChange(int iMapSvrGroup, int iTaxType, int i return TRUE; } - short sqlRet = m_DBQuery.Fetch(); + SQLRETURN sqlRet = m_DBQuery.Fetch(); if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA ) { @@ -276,8 +257,7 @@ BOOL CCastleDBSet::DSDB_QueryTaxRateChange(int iMapSvrGroup, int iTaxType, int i lpTaxRateChange->iTaxKind = m_DBQuery.GetInt("TaxKind"); lpTaxRateChange->iTaxRate = m_DBQuery.GetInt("TaxRate"); - m_DBQuery.Clear(); - + m_DBQuery.Clear(); return FALSE; } @@ -298,7 +278,7 @@ BOOL CCastleDBSet::DSDB_QueryCastleMoneyChange(int iMapSvrGroup, int iMoneyChang return TRUE; } - short sqlRet = m_DBQuery.Fetch(); + SQLRETURN sqlRet = m_DBQuery.Fetch(); if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA ) { @@ -313,7 +293,7 @@ BOOL CCastleDBSet::DSDB_QueryCastleMoneyChange(int iMapSvrGroup, int iMoneyChang return FALSE; } -BOOL CCastleDBSet::DSDB_QuerySiegeDateChange(int iMapSvrGroup, CSP_REQ_SDEDCHANGE* lpSdEdChange, int* lpiResult) +BOOL CCastleDBSet::DSDB_QuerySiegeDateChange(int iMapSvrGroup, LPCSP_REQ_SDEDCHANGE lpSdEdChange, int* lpiResult) { if (lpSdEdChange == NULL) { @@ -321,9 +301,7 @@ BOOL CCastleDBSet::DSDB_QuerySiegeDateChange(int iMapSvrGroup, CSP_REQ_SDEDCHANG } CString qSql; - qSql.Format("EXEC WZ_CS_ModifyCastleSchedule %d, '%d-%d-%d 00:00:00', '%d-%d-%d 00:00:00'", - iMapSvrGroup, lpSdEdChange->wStartYear, lpSdEdChange->btStartMonth, lpSdEdChange->btStartDay, - lpSdEdChange->wEndYear, lpSdEdChange->btEndMonth, lpSdEdChange->btEndDay); + qSql.Format("EXEC WZ_CS_ModifyCastleSchedule %d, '%d-%d-%d 00:00:00', '%d-%d-%d 00:00:00'", iMapSvrGroup, lpSdEdChange->wStartYear, lpSdEdChange->btStartMonth, lpSdEdChange->btStartDay, lpSdEdChange->wEndYear, lpSdEdChange->btEndMonth, lpSdEdChange->btEndDay); if (m_DBQuery.Exec(qSql) == FALSE) { @@ -331,7 +309,7 @@ BOOL CCastleDBSet::DSDB_QuerySiegeDateChange(int iMapSvrGroup, CSP_REQ_SDEDCHANG return TRUE; } - short sqlRet = m_DBQuery.Fetch(); + SQLRETURN sqlRet = m_DBQuery.Fetch(); if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA) { @@ -340,14 +318,14 @@ BOOL CCastleDBSet::DSDB_QuerySiegeDateChange(int iMapSvrGroup, CSP_REQ_SDEDCHANG } *lpiResult = m_DBQuery.GetInt("QueryResult"); + m_DBQuery.Clear(); - return FALSE; } -BOOL CCastleDBSet::DSDB_QueryGuildMarkRegInfo(int iMapSvrGroup, char* lpszGuildName, CSP_ANS_GUILDREGINFO* lpGuildRegInfo, int* lpiResult) +BOOL CCastleDBSet::DSDB_QueryGuildMarkRegInfo(int iMapSvrGroup, char* lpszGuildName, LPCSP_ANS_GUILDREGINFO lpGuildRegInfo, int* lpiResult) { - if (lpszGuildName == NULL || lpGuildRegInfo == NULL) + if (lpszGuildName == NULL || lpGuildRegInfo == NULL) { return TRUE; } @@ -358,43 +336,43 @@ BOOL CCastleDBSet::DSDB_QueryGuildMarkRegInfo(int iMapSvrGroup, char* lpszGuildN } CString qSql; - qSql.Format("EXEC WZ_CS_GetGuildMarkRegInfo %d, '%s'", iMapSvrGroup, lpszGuildName); - + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return TRUE; } - short sqlRet = m_DBQuery.Fetch(); - - if (sqlRet == SQL_NULL_DATA ) + SQLRETURN sqlRet = m_DBQuery.Fetch(); + + if (sqlRet == SQL_NULL_DATA) { m_DBQuery.Clear(); return TRUE; } memcpy(lpGuildRegInfo->szGuildName, lpszGuildName, MAX_GUILDNAMESTRING); - - if (sqlRet == SQL_NO_DATA ) + + if (sqlRet == SQL_NO_DATA) { lpGuildRegInfo->iRegMarkCount = 0; *lpiResult = 2; } + else { *lpiResult = 1; lpGuildRegInfo->iRegMarkCount = m_DBQuery.GetInt("REG_MARKS"); lpGuildRegInfo->btRegRank = m_DBQuery.GetInt("SEQ_NUM"); - lpGuildRegInfo->bIsGiveUp = (m_DBQuery.GetInt("IS_GIVEUP") > 0)?true:false; + lpGuildRegInfo->bIsGiveUp = m_DBQuery.GetInt("IS_GIVEUP") > 0 ? true : false; } m_DBQuery.Clear(); return FALSE; } -BOOL CCastleDBSet::DSDB_QuerySiegeEndedChange(int iMapSvrGroup, int bIsCastleSiegeEnded, int* lpiResult) +BOOL CCastleDBSet::DSDB_QuerySiegeEndedChange(int iMapSvrGroup, BOOL bIsCastleSiegeEnded, int* lpiResult) { if (lpiResult == NULL) { @@ -410,7 +388,7 @@ BOOL CCastleDBSet::DSDB_QuerySiegeEndedChange(int iMapSvrGroup, int bIsCastleSie return TRUE; } - short sqlRet = m_DBQuery.Fetch(); + SQLRETURN sqlRet = m_DBQuery.Fetch(); if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA ) { @@ -424,16 +402,16 @@ BOOL CCastleDBSet::DSDB_QuerySiegeEndedChange(int iMapSvrGroup, int bIsCastleSie return FALSE; } -BOOL CCastleDBSet::DSDB_QueryCastleOwnerChange(int iMapSvrGroup, CSP_REQ_CASTLEOWNERCHANGE* lpCastleOwnerInfo, CSP_ANS_CASTLEOWNERCHANGE* lpCastleOwnerInfoResult, int* lpiResult) +BOOL CCastleDBSet::DSDB_QueryCastleOwnerChange(int iMapSvrGroup, LPCSP_REQ_CASTLEOWNERCHANGE lpCastleOwnerInfo, LPCSP_ANS_CASTLEOWNERCHANGE lpCastleOwnerInfoResult, int* lpiResult) { if (lpCastleOwnerInfo == NULL || lpCastleOwnerInfoResult == NULL || lpiResult == NULL) { return TRUE; } - char szGuildName[MAX_GUILDNAMESTRING+1] = {'\0'}; + char szGuildName[MAX_GUILDNAMESTRING + 1] = { '\0' }; memcpy(szGuildName, lpCastleOwnerInfo->szOwnerGuildName, MAX_GUILDNAMESTRING); - + if (SQLSyntexCheck(szGuildName) == FALSE) { return TRUE; @@ -441,71 +419,71 @@ BOOL CCastleDBSet::DSDB_QueryCastleOwnerChange(int iMapSvrGroup, CSP_REQ_CASTLEO lpCastleOwnerInfoResult->bIsCastleOccupied = lpCastleOwnerInfo->bIsCastleOccupied; memcpy(lpCastleOwnerInfoResult->szOwnerGuildName, lpCastleOwnerInfo->szOwnerGuildName, MAX_GUILDNAMESTRING); - + CString qSql; - qSql.Format("EXEC WZ_CS_ModifyCastleOwnerInfo %d, %d, '%s'", iMapSvrGroup, lpCastleOwnerInfo->bIsCastleOccupied,szGuildName); - + qSql.Format("EXEC WZ_CS_ModifyCastleOwnerInfo %d, %d, '%s'", iMapSvrGroup, lpCastleOwnerInfo->bIsCastleOccupied, szGuildName); + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return TRUE; } - short sqlRet = m_DBQuery.Fetch(); - - if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA ) + SQLRETURN sqlRet = m_DBQuery.Fetch(); + + if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA) { m_DBQuery.Clear(); - return TRUE; + return TRUE; } *lpiResult = m_DBQuery.GetInt("QueryResult"); - + m_DBQuery.Clear(); return FALSE; } -BOOL CCastleDBSet::DSDB_QueryRegAttackGuild(int iMapSvrGroup, CSP_REQ_REGATTACKGUILD* lpRegAttackGuild, CSP_ANS_REGATTACKGUILD* lpRegAttackGuildResult, int* lpiResult) +BOOL CCastleDBSet::DSDB_QueryRegAttackGuild(int iMapSvrGroup, LPCSP_REQ_REGATTACKGUILD lpRegAttackGuild, LPCSP_ANS_REGATTACKGUILD lpRegAttackGuildResult, int* lpiResult) { if (lpRegAttackGuild == NULL || lpRegAttackGuildResult == NULL || lpiResult == NULL) { return TRUE; } - char szGuildName[MAX_GUILDNAMESTRING+1] = {'\0'}; + char szGuildName[MAX_GUILDNAMESTRING + 1] = { '\0' }; memcpy(szGuildName, lpRegAttackGuild->szEnemyGuildName, MAX_GUILDNAMESTRING); - + if (SQLSyntexCheck(szGuildName) == FALSE) { return TRUE; } memcpy(lpRegAttackGuild->szEnemyGuildName, lpRegAttackGuildResult->szEnemyGuildName, MAX_GUILDNAMESTRING); - + CString qSql; qSql.Format("EXEC WZ_CS_ReqRegAttackGuild %d, '%s'", iMapSvrGroup, szGuildName); - + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return TRUE; } - short sqlRet = m_DBQuery.Fetch(); - - if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA ) + SQLRETURN sqlRet = m_DBQuery.Fetch(); + + if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA) { m_DBQuery.Clear(); - return TRUE; + return TRUE; } *lpiResult = m_DBQuery.GetInt("QueryResult"); - + m_DBQuery.Clear(); return FALSE; } -BOOL CCastleDBSet::DSDB_QueryRestartCastleState(int iMapSvrGroup, CSP_REQ_CASTLESIEGEEND* lpCastleSiegeEnd, int* lpiResult) +BOOL CCastleDBSet::DSDB_QueryRestartCastleState(int iMapSvrGroup, LPCSP_REQ_CASTLESIEGEEND lpCastleSiegeEnd, int* lpiResult) { if (lpCastleSiegeEnd == NULL) { @@ -521,7 +499,7 @@ BOOL CCastleDBSet::DSDB_QueryRestartCastleState(int iMapSvrGroup, CSP_REQ_CASTLE return TRUE; } - short sqlRet = m_DBQuery.Fetch(); + SQLRETURN sqlRet = m_DBQuery.Fetch(); if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA ) { @@ -532,51 +510,48 @@ BOOL CCastleDBSet::DSDB_QueryRestartCastleState(int iMapSvrGroup, CSP_REQ_CASTLE *lpiResult = m_DBQuery.GetInt("QueryResult"); m_DBQuery.Clear(); - return FALSE; } -BOOL CCastleDBSet::DSDB_QueryGuildMarkRegMark(int iMapSvrGroup, char* lpszGuildName, CSP_ANS_GUILDREGMARK* lpGuildRegMark, int* lpiResult) +BOOL CCastleDBSet::DSDB_QueryGuildMarkRegMark(int iMapSvrGroup, char* lpszGuildName, LPCSP_ANS_GUILDREGMARK lpGuildRegMark, int* lpiResult) { if (lpszGuildName == NULL || lpGuildRegMark == NULL) { return TRUE; } - if ( !SQLSyntexCheck(lpszGuildName) ) + if (SQLSyntexCheck(lpszGuildName) == FALSE) { return TRUE; } CString qSql; - qSql.Format("EXEC WZ_CS_ReqRegGuildMark %d, '%s'",iMapSvrGroup,lpszGuildName); - + qSql.Format("EXEC WZ_CS_ReqRegGuildMark %d, '%s'", iMapSvrGroup, lpszGuildName); + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return TRUE; } - short sqlRet = m_DBQuery.Fetch(); - - if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA ) + SQLRETURN sqlRet = m_DBQuery.Fetch(); + + if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA) { m_DBQuery.Clear(); - return TRUE; + return TRUE; } - + memcpy(lpGuildRegMark->szGuildName, lpszGuildName, MAX_GUILDNAMESTRING); - + *lpiResult = m_DBQuery.GetInt("QueryResult"); - lpGuildRegMark->iRegMarkCount = m_DBQuery.GetInt("REG_MARKS"); - + m_DBQuery.Clear(); - return FALSE; } -BOOL CCastleDBSet::DSDB_QueryGuildMarkReset(int iMapSvrGroup, char* lpszGuildName, CSP_ANS_GUILDRESETMARK* lpGuildResetMark) +BOOL CCastleDBSet::DSDB_QueryGuildMarkReset(int iMapSvrGroup, char* lpszGuildName, LPCSP_ANS_GUILDRESETMARK lpGuildResetMark) { if (lpszGuildName == NULL || lpGuildResetMark == NULL) { @@ -587,103 +562,103 @@ BOOL CCastleDBSet::DSDB_QueryGuildMarkReset(int iMapSvrGroup, char* lpszGuildNam { return TRUE; } - + CString qSql; - qSql.Format("EXEC WZ_CS_ModifyGuildMarkReset %d, '%s'",iMapSvrGroup,lpszGuildName); - + qSql.Format("EXEC WZ_CS_ModifyGuildMarkReset %d, '%s'", iMapSvrGroup, lpszGuildName); + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return TRUE; } - - short sqlRet = m_DBQuery.Fetch(); - if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA ) + SQLRETURN sqlRet = m_DBQuery.Fetch(); + + if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA) { m_DBQuery.Clear(); - return TRUE; + return TRUE; } - + memcpy(lpGuildResetMark->szGuildName, lpszGuildName, MAX_GUILDNAMESTRING); - + lpGuildResetMark->iResult = m_DBQuery.GetInt("QueryResult"); lpGuildResetMark->iRegMarkCount = m_DBQuery.GetInt("DEL_MARKS"); - + m_DBQuery.Clear(); return FALSE; } -BOOL CCastleDBSet::DSDB_QueryGuildSetGiveUp(int iMapSvrGroup, char* lpszGuildName, int bIsGiveUp, CSP_ANS_GUILDSETGIVEUP* lpGuildSetGiveUp) +BOOL CCastleDBSet::DSDB_QueryGuildSetGiveUp(int iMapSvrGroup, char* lpszGuildName, BOOL bIsGiveUp, LPCSP_ANS_GUILDSETGIVEUP lpGuildSetGiveUp) { if (lpszGuildName == NULL || lpGuildSetGiveUp == NULL) { return TRUE; } - + if (SQLSyntexCheck(lpszGuildName) == FALSE) { return TRUE; } CString qSql; - qSql.Format("EXEC WZ_CS_ModifyGuildGiveUp %d, '%s', %d",iMapSvrGroup,lpszGuildName,bIsGiveUp); - + qSql.Format("EXEC WZ_CS_ModifyGuildGiveUp %d, '%s', %d", iMapSvrGroup, lpszGuildName, bIsGiveUp); + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return TRUE; } - - short sqlRet = m_DBQuery.Fetch(); - if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA ) + SQLRETURN sqlRet = m_DBQuery.Fetch(); + + if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA) { m_DBQuery.Clear(); - return TRUE; + return TRUE; } - + memcpy(lpGuildSetGiveUp->szGuildName, lpszGuildName, MAX_GUILDNAMESTRING); - + lpGuildSetGiveUp->bIsGiveUp = bIsGiveUp; lpGuildSetGiveUp->iResult = m_DBQuery.GetInt("QueryResult"); lpGuildSetGiveUp->iRegMarkCount = m_DBQuery.GetInt("DEL_MARKS"); - + m_DBQuery.Clear(); return FALSE; } -BOOL CCastleDBSet::DSDB_QueryCastleNpcRemove(int iMapSvrGroup, CSP_REQ_NPCREMOVE* lpNpcRemove, int* lpiResult) +BOOL CCastleDBSet::DSDB_QueryCastleNpcRemove(int iMapSvrGroup, LPCSP_REQ_NPCREMOVE lpNpcRemove, int* lpiResult) { if (lpNpcRemove == NULL) { return TRUE; } - + CString qSql; - qSql.Format("EXEC WZ_CS_ReqNpcRemove %d, %d, %d",iMapSvrGroup,lpNpcRemove->iNpcNumber,lpNpcRemove->iNpcIndex); - + qSql.Format("EXEC WZ_CS_ReqNpcRemove %d, %d, %d", iMapSvrGroup, lpNpcRemove->iNpcNumber, lpNpcRemove->iNpcIndex); + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return TRUE; } - short sqlRet = m_DBQuery.Fetch(); + SQLRETURN sqlRet = m_DBQuery.Fetch(); - if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA ) + if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA) { m_DBQuery.Clear(); - return TRUE; + return TRUE; } *lpiResult = m_DBQuery.GetInt("QueryResult"); - + m_DBQuery.Clear(); return FALSE; } -int CCastleDBSet::DSDB_QueryResetCastleTaxInfo(int iMapSvrGroup, int* lpiResult) +BOOL CCastleDBSet::DSDB_QueryResetCastleTaxInfo(int iMapSvrGroup, int* lpiResult) { CString qSql; qSql.Format("EXEC WZ_CS_ResetCastleTaxInfo %d",iMapSvrGroup); @@ -694,7 +669,7 @@ int CCastleDBSet::DSDB_QueryResetCastleTaxInfo(int iMapSvrGroup, int* lpiResult) return TRUE; } - short sqlRet = m_DBQuery.Fetch(); + SQLRETURN sqlRet = m_DBQuery.Fetch(); if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA ) { @@ -708,7 +683,7 @@ int CCastleDBSet::DSDB_QueryResetCastleTaxInfo(int iMapSvrGroup, int* lpiResult) return FALSE; } -int CCastleDBSet::DSDB_QueryResetSiegeGuildInfo(int iMapSvrGroup, int* lpiResult) +BOOL CCastleDBSet::DSDB_QueryResetSiegeGuildInfo(int iMapSvrGroup, int* lpiResult) { CString qSql; qSql.Format("EXEC WZ_CS_ResetSiegeGuildInfo %d",iMapSvrGroup); @@ -719,7 +694,7 @@ int CCastleDBSet::DSDB_QueryResetSiegeGuildInfo(int iMapSvrGroup, int* lpiResult return TRUE; } - short sqlRet = m_DBQuery.Fetch(); + SQLRETURN sqlRet = m_DBQuery.Fetch(); if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA ) { @@ -733,7 +708,7 @@ int CCastleDBSet::DSDB_QueryResetSiegeGuildInfo(int iMapSvrGroup, int* lpiResult return FALSE; } -int CCastleDBSet::DSDB_QueryResetRegSiegeInfo(int iMapSvrGroup, int* lpiResult) +BOOL CCastleDBSet::DSDB_QueryResetRegSiegeInfo(int iMapSvrGroup, int* lpiResult) { CString qSql; qSql.Format("EXEC WZ_CS_ResetRegSiegeInfo %d",iMapSvrGroup); @@ -744,7 +719,7 @@ int CCastleDBSet::DSDB_QueryResetRegSiegeInfo(int iMapSvrGroup, int* lpiResult) return TRUE; } - short sqlRet = m_DBQuery.Fetch(); + SQLRETURN sqlRet = m_DBQuery.Fetch(); if (sqlRet == SQL_NO_DATA || sqlRet == SQL_NULL_DATA ) { @@ -758,28 +733,28 @@ int CCastleDBSet::DSDB_QueryResetRegSiegeInfo(int iMapSvrGroup, int* lpiResult) return FALSE; } -int CCastleDBSet::DSDB_QueryCastleNpcInfo(int iMapSvrGroup, CSP_NPCDATA* lpNpcData, int* lpiCount) +BOOL CCastleDBSet::DSDB_QueryCastleNpcInfo(int iMapSvrGroup, LPCSP_NPCDATA lpNpcData, int* lpiCount) { if (lpNpcData == NULL || lpiCount == NULL) { return TRUE; } - + int iMAX_COUNT = *lpiCount; - *lpiCount=0; + *lpiCount = 0; CString qSql; - qSql.Format("EXEC WZ_CS_GetCastleNpcInfo %d",iMapSvrGroup); - + qSql.Format("EXEC WZ_CS_GetCastleNpcInfo %d", iMapSvrGroup); + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return TRUE; } - short sqlRet = m_DBQuery.Fetch(); - - while(sqlRet != SQL_NO_DATA && sqlRet != SQL_NULL_DATA) + SQLRETURN sqlRet = m_DBQuery.Fetch(); + + while (sqlRet != SQL_NO_DATA && sqlRet != SQL_NULL_DATA) { if (*lpiCount > iMAX_COUNT) { @@ -795,23 +770,22 @@ int CCastleDBSet::DSDB_QueryCastleNpcInfo(int iMapSvrGroup, CSP_NPCDATA* lpNpcDa lpNpcData[*lpiCount].btNpcX = m_DBQuery.GetInt("NPC_X"); lpNpcData[*lpiCount].btNpcY = m_DBQuery.GetInt("NPC_Y"); lpNpcData[*lpiCount].btNpcDIR = m_DBQuery.GetInt("NPC_DIR"); - + *lpiCount = *lpiCount + 1; - sqlRet = m_DBQuery.Fetch(); } - + if (sqlRet == SQL_NULL_DATA) { m_DBQuery.Clear(); return TRUE; } - + m_DBQuery.Clear(); return FALSE; } -BOOL CCastleDBSet::DSDB_QueryAllGuildMarkRegInfo(int iMapSvrGroup, CSP_GUILDREGINFO* lpGuildRegInfo, int* lpiCount) +BOOL CCastleDBSet::DSDB_QueryAllGuildMarkRegInfo(int iMapSvrGroup, LPCSP_GUILDREGINFO lpGuildRegInfo, int* lpiCount) { if (lpGuildRegInfo == NULL || lpiCount == NULL) { @@ -819,26 +793,26 @@ BOOL CCastleDBSet::DSDB_QueryAllGuildMarkRegInfo(int iMapSvrGroup, CSP_GUILDREGI } int iMAX_COUNT = *lpiCount; - - if ( iMAX_COUNT > 100 ) + + if (iMAX_COUNT > 100) { iMAX_COUNT = 100; } - - *lpiCount=0; - + + *lpiCount = 0; + CString qSql; - qSql.Format("EXEC WZ_CS_GetAllGuildMarkRegInfo %d",iMapSvrGroup); - + qSql.Format("EXEC WZ_CS_GetAllGuildMarkRegInfo %d", iMapSvrGroup); + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return TRUE; } - short sqlRet = m_DBQuery.Fetch(); + SQLRETURN sqlRet = m_DBQuery.Fetch(); - while(sqlRet != SQL_NO_DATA && sqlRet != SQL_NULL_DATA) + while (sqlRet != SQL_NO_DATA && sqlRet != SQL_NULL_DATA) { if (*lpiCount > iMAX_COUNT) { @@ -847,36 +821,35 @@ BOOL CCastleDBSet::DSDB_QueryAllGuildMarkRegInfo(int iMapSvrGroup, CSP_GUILDREGI m_DBQuery.GetStr("REG_SIEGE_GUILD", lpGuildRegInfo[*lpiCount].szGuildName); lpGuildRegInfo[*lpiCount].iRegMarkCount = m_DBQuery.GetInt("REG_MARKS"); - lpGuildRegInfo[*lpiCount].bIsGiveUp = (m_DBQuery.GetInt("IS_GIVEUP") > 0)?true:false; + lpGuildRegInfo[*lpiCount].bIsGiveUp = m_DBQuery.GetInt("IS_GIVEUP") > 0 ? true : false; lpGuildRegInfo[*lpiCount].btRegRank = m_DBQuery.GetInt("SEQ_NUM"); - + *lpiCount = *lpiCount + 1; - sqlRet = m_DBQuery.Fetch(); } - + if (sqlRet == SQL_NULL_DATA) { m_DBQuery.Clear(); return TRUE; } - + m_DBQuery.Clear(); return FALSE; } -BOOL CCastleDBSet::DSDB_QueryFirstCreateNPC(int iMapSvrGroup, CSP_REQ_NPCSAVEDATA* lpNpcSaveData) +BOOL CCastleDBSet::DSDB_QueryFirstCreateNPC(int iMapSvrGroup, LPCSP_REQ_NPCSAVEDATA lpNpcSaveData) { if (lpNpcSaveData == NULL) { return TRUE; } - - CSP_NPCSAVEDATA* lpMsgBody = (CSP_NPCSAVEDATA*)&lpNpcSaveData[1]; - + + LPCSP_NPCSAVEDATA lpMsgBody = (LPCSP_NPCSAVEDATA)&lpNpcSaveData[1]; + CString qSql; - qSql.Format("DELETE MuCastle_NPC WHERE MAP_SVR_GROUP = %d",iMapSvrGroup); - + qSql.Format("DELETE MuCastle_NPC WHERE MAP_SVR_GROUP = %d", iMapSvrGroup); + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); @@ -887,86 +860,80 @@ BOOL CCastleDBSet::DSDB_QueryFirstCreateNPC(int iMapSvrGroup, CSP_REQ_NPCSAVEDAT for (int iNPC_COUNT = 0; iNPC_COUNT < lpNpcSaveData->iCount; iNPC_COUNT++) { - qSql.Format("EXEC WZ_CS_ReqNpcBuy %d, %d, %d, %d, %d, %d, %d, %d, %d, %d", - iMapSvrGroup,lpMsgBody[iNPC_COUNT].iNpcNumber,lpMsgBody[iNPC_COUNT].iNpcIndex, - lpMsgBody[iNPC_COUNT].iNpcDfLevel,lpMsgBody[iNPC_COUNT].iNpcRgLevel, - lpMsgBody[iNPC_COUNT].iNpcMaxHp,lpMsgBody[iNPC_COUNT].iNpcHp, - lpMsgBody[iNPC_COUNT].btNpcX,lpMsgBody[iNPC_COUNT].btNpcY, - lpMsgBody[iNPC_COUNT].btNpcDIR); - + qSql.Format("EXEC WZ_CS_ReqNpcBuy %d, %d, %d, %d, %d, %d, %d, %d, %d, %d", iMapSvrGroup, lpMsgBody[iNPC_COUNT].iNpcNumber, lpMsgBody[iNPC_COUNT].iNpcIndex, lpMsgBody[iNPC_COUNT].iNpcDfLevel, lpMsgBody[iNPC_COUNT].iNpcRgLevel, lpMsgBody[iNPC_COUNT].iNpcMaxHp, lpMsgBody[iNPC_COUNT].iNpcHp, lpMsgBody[iNPC_COUNT].btNpcX, lpMsgBody[iNPC_COUNT].btNpcY, lpMsgBody[iNPC_COUNT].btNpcDIR); + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return TRUE; } - + m_DBQuery.Clear(); } return FALSE; } -BOOL CCastleDBSet::DSDB_QueryCalcRegGuildList(int iMapSvrGroup, CSP_CALCREGGUILDLIST* lpCalcRegGuildList, int* lpiCount) +BOOL CCastleDBSet::DSDB_QueryCalcRegGuildList(int iMapSvrGroup, LPCSP_CALCREGGUILDLIST lpCalcRegGuildList, int* lpiCount) { if (lpCalcRegGuildList == NULL || lpiCount == NULL) { return TRUE; } - + int iMAX_COUNT = *lpiCount; - - if ( iMAX_COUNT > 100 ) + + if (iMAX_COUNT > 100) { iMAX_COUNT = 100; } - - *lpiCount=0; - + + *lpiCount = 0; + CString qSql; - qSql.Format("EXEC WZ_CS_GetCalcRegGuildList %d",iMapSvrGroup); - + qSql.Format("EXEC WZ_CS_GetCalcRegGuildList %d", iMapSvrGroup); + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return TRUE; } - short sqlRet = m_DBQuery.Fetch(); - - while(sqlRet != SQL_NO_DATA && sqlRet != SQL_NULL_DATA) + SQLRETURN sqlRet = m_DBQuery.Fetch(); + + while (sqlRet != SQL_NO_DATA && sqlRet != SQL_NULL_DATA) { if (*lpiCount > iMAX_COUNT) { break; } - char szGuildName[MAX_GUILDNAMESTRING+MAX_GUILDNAMESTRING] = {'\0'}; - + char szGuildName[MAX_GUILDNAMESTRING + MAX_GUILDNAMESTRING] = { '\0' }; + m_DBQuery.GetStr("REG_SIEGE_GUILD", szGuildName); - + memcpy(&lpCalcRegGuildList[*lpiCount], szGuildName, MAX_GUILDNAMESTRING); - + lpCalcRegGuildList[*lpiCount].iRegMarkCount = m_DBQuery.GetInt("REG_MARKS"); lpCalcRegGuildList[*lpiCount].iGuildMemberCount = m_DBQuery.GetInt("GUILD_MEMBER"); lpCalcRegGuildList[*lpiCount].iGuildMasterLevel = m_DBQuery.GetInt("GM_LEVEL"); lpCalcRegGuildList[*lpiCount].iSeqNum = m_DBQuery.GetInt("SEQ_NUM"); - + *lpiCount = *lpiCount + 1; - sqlRet = m_DBQuery.Fetch(); } - + if (sqlRet == SQL_NULL_DATA) { m_DBQuery.Clear(); return TRUE; } - + m_DBQuery.Clear(); return FALSE; } -BOOL CCastleDBSet::DSDB_QueryCsGuildUnionInfo(int iMapSvrGroup, char* lpszGuildName, int iCsGuildID, CSP_CSGUILDUNIONINFO* lpCsGuildUnionInfo, int* lpiCount) +BOOL CCastleDBSet::DSDB_QueryCsGuildUnionInfo(int iMapSvrGroup, char* lpszGuildName, int iCsGuildID, LPCSP_CSGUILDUNIONINFO lpCsGuildUnionInfo, int* lpiCount) { if (lpszGuildName == NULL || lpCsGuildUnionInfo == NULL || lpiCount == NULL) { @@ -974,75 +941,68 @@ BOOL CCastleDBSet::DSDB_QueryCsGuildUnionInfo(int iMapSvrGroup, char* lpszGuildN } int iRET_COUNT = *lpiCount; - - if ( iRET_COUNT < 0 ) + + if (iRET_COUNT < 0) { return TRUE; } - + CString qSql; - qSql.Format("EXEC WZ_CS_GetCsGuildUnionInfo '%s'",lpszGuildName); - + qSql.Format("EXEC WZ_CS_GetCsGuildUnionInfo '%s'", lpszGuildName); + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return TRUE; } - short sqlRet = m_DBQuery.Fetch(); + SQLRETURN sqlRet = m_DBQuery.Fetch(); - while(sqlRet != SQL_NO_DATA && sqlRet != SQL_NULL_DATA) + while (sqlRet != SQL_NO_DATA && sqlRet != SQL_NULL_DATA) { if (iRET_COUNT > 100) { break; } - char szGuildName[MAX_GUILDNAMESTRING+MAX_GUILDNAMESTRING] = {'\0'}; - + char szGuildName[MAX_GUILDNAMESTRING + MAX_GUILDNAMESTRING] = { '\0' }; + m_DBQuery.GetStr("GUILD_NAME", szGuildName); - + memcpy(&lpCsGuildUnionInfo[iRET_COUNT], szGuildName, MAX_GUILDNAMESTRING); lpCsGuildUnionInfo[iRET_COUNT].iCsGuildID = iCsGuildID; - + iRET_COUNT++; - sqlRet = m_DBQuery.Fetch(); } - + if (sqlRet == SQL_NULL_DATA) { m_DBQuery.Clear(); return TRUE; } - + m_DBQuery.Clear(); - *lpiCount = iRET_COUNT; - return FALSE; } BOOL CCastleDBSet::DSDB_QueryCsClearTotalGuildInfo(int iMapSvrGroup) { CString qSql; - qSql.Format("DELETE MuCastle_SIEGE_GUILDLIST WHERE MAP_SVR_GROUP = %d",iMapSvrGroup); - + qSql.Format("DELETE MuCastle_SIEGE_GUILDLIST WHERE MAP_SVR_GROUP = %d", iMapSvrGroup); + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return TRUE; } - + m_DBQuery.Clear(); return FALSE; } -#ifdef ADD_CASTLE_TOTAL_GUILD_SCORE_20061123 BOOL CCastleDBSet::DSDB_QueryCsSaveTotalGuildInfo(int iMapSvrGroup, char* lpszGuildName, int iCsGuildID, int iCsGuildInvolved, int iCsGuildScore) -#else -BOOL CCastleDBSet::DSDB_QueryCsSaveTotalGuildInfo(int iMapSvrGroup, char* lpszGuildName, int iCsGuildID, int iCsGuildInvolved) -#endif { if (lpszGuildName == NULL) { @@ -1050,13 +1010,7 @@ BOOL CCastleDBSet::DSDB_QueryCsSaveTotalGuildInfo(int iMapSvrGroup, char* lpszGu } CString qSql; -#ifdef ADD_CASTLE_TOTAL_GUILD_SCORE_20061123 - qSql.Format("EXEC WZ_CS_SetSiegeGuildInfo %d, '%s', %d, %d, %d", - iMapSvrGroup, lpszGuildName, iCsGuildID, iCsGuildInvolved, iCsGuildScore); -#else - qSql.Format("EXEC WZ_CS_SetSiegeGuildInfo %d, '%s', %d, %d", - iMapSvrGroup, lpszGuildName, iCsGuildID, iCsGuildInvolved); -#endif + qSql.Format("EXEC WZ_CS_SetSiegeGuildInfo %d, '%s', %d, %d, %d", iMapSvrGroup, lpszGuildName, iCsGuildID, iCsGuildInvolved, iCsGuildScore); if (m_DBQuery.Exec(qSql) == FALSE) { @@ -1090,53 +1044,51 @@ BOOL CCastleDBSet::DSDB_QueryCsSaveTotalGuildOK(int iMapSvrGroup, int* lpiResult return FALSE; } -BOOL CCastleDBSet::DSDB_QueryCsLoadTotalGuildInfo(int iMapSvrGroup, CSP_CSLOADTOTALGUILDINFO* lpLoadTotalGuildInfo, int* lpiCount) +BOOL CCastleDBSet::DSDB_QueryCsLoadTotalGuildInfo(int iMapSvrGroup, LPCSP_CSLOADTOTALGUILDINFO lpLoadTotalGuildInfo, int* lpiCount) { if (lpLoadTotalGuildInfo == NULL || lpiCount == NULL) { return TRUE; } - + int iMAX_COUNT = *lpiCount; - - if ( iMAX_COUNT > 100 ) + + if (iMAX_COUNT > 100) { iMAX_COUNT = 100; } - - *lpiCount=0; - + + *lpiCount = 0; + CString qSql; - qSql.Format("EXEC WZ_CS_GetSiegeGuildInfo %d",iMapSvrGroup); + qSql.Format("EXEC WZ_CS_GetSiegeGuildInfo %d", iMapSvrGroup); if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return TRUE; } - short sqlRet = m_DBQuery.Fetch(); - while(sqlRet != SQL_NO_DATA && sqlRet != SQL_NULL_DATA) + SQLRETURN sqlRet = m_DBQuery.Fetch(); + + while (sqlRet != SQL_NO_DATA && sqlRet != SQL_NULL_DATA) { if (*lpiCount > iMAX_COUNT) { break; } - - char szGuildName[MAX_GUILDNAMESTRING+MAX_GUILDNAMESTRING] = {'\0'}; - + + char szGuildName[MAX_GUILDNAMESTRING + MAX_GUILDNAMESTRING] = { '\0' }; + m_DBQuery.GetStr("GUILD_NAME", szGuildName); - + memcpy(&lpLoadTotalGuildInfo[*lpiCount], szGuildName, MAX_GUILDNAMESTRING); - + lpLoadTotalGuildInfo[*lpiCount].iCsGuildID = m_DBQuery.GetInt("GUILD_ID"); lpLoadTotalGuildInfo[*lpiCount].iGuildInvolved = m_DBQuery.GetInt("GUILD_INVOLVED"); -#ifdef ADD_CASTLE_TOTAL_GUILD_SCORE_20061123 lpLoadTotalGuildInfo[*lpiCount].iGuildScore = m_DBQuery.GetInt("GUILD_SCORE"); -#endif - + *lpiCount = *lpiCount + 1; - sqlRet = m_DBQuery.Fetch(); } @@ -1145,19 +1097,19 @@ BOOL CCastleDBSet::DSDB_QueryCsLoadTotalGuildInfo(int iMapSvrGroup, CSP_CSLOADTO m_DBQuery.Clear(); return TRUE; } - + m_DBQuery.Clear(); return FALSE; } -BOOL CCastleDBSet::DSDB_QueryCastleNpcUpdate(int iMapSvrGroup, CSP_REQ_NPCUPDATEDATA* lpNpcSaveData) +BOOL CCastleDBSet::DSDB_QueryCastleNpcUpdate(int iMapSvrGroup, LPCSP_REQ_NPCUPDATEDATA lpNpcSaveData) { if (lpNpcSaveData == NULL) { return TRUE; } - CSP_NPCSAVEDATA* lpMsgBody = (CSP_NPCSAVEDATA*)&lpNpcSaveData[1]; + LPCSP_NPCSAVEDATA lpMsgBody = (LPCSP_NPCSAVEDATA)&lpNpcSaveData[1]; CString qSql; qSql.Format("DELETE MuCastle_NPC WHERE MAP_SVR_GROUP = %d",iMapSvrGroup); @@ -1172,12 +1124,7 @@ BOOL CCastleDBSet::DSDB_QueryCastleNpcUpdate(int iMapSvrGroup, CSP_REQ_NPCUPDATE for (int iNPC_COUNT = 0; iNPC_COUNT < lpNpcSaveData->iCount; iNPC_COUNT++) { - qSql.Format("EXEC WZ_CS_ReqNpcUpdate %d, %d, %d, %d, %d, %d, %d, %d, %d, %d", - iMapSvrGroup,lpMsgBody[iNPC_COUNT].iNpcNumber,lpMsgBody[iNPC_COUNT].iNpcIndex, - lpMsgBody[iNPC_COUNT].iNpcDfLevel,lpMsgBody[iNPC_COUNT].iNpcRgLevel, - lpMsgBody[iNPC_COUNT].iNpcMaxHp,lpMsgBody[iNPC_COUNT].iNpcHp, - lpMsgBody[iNPC_COUNT].btNpcX,lpMsgBody[iNPC_COUNT].btNpcY, - lpMsgBody[iNPC_COUNT].btNpcDIR); + qSql.Format("EXEC WZ_CS_ReqNpcUpdate %d, %d, %d, %d, %d, %d, %d, %d, %d, %d", iMapSvrGroup,lpMsgBody[iNPC_COUNT].iNpcNumber,lpMsgBody[iNPC_COUNT].iNpcIndex, lpMsgBody[iNPC_COUNT].iNpcDfLevel,lpMsgBody[iNPC_COUNT].iNpcRgLevel, lpMsgBody[iNPC_COUNT].iNpcMaxHp,lpMsgBody[iNPC_COUNT].iNpcHp, lpMsgBody[iNPC_COUNT].btNpcX,lpMsgBody[iNPC_COUNT].btNpcY, lpMsgBody[iNPC_COUNT].btNpcDIR); if (m_DBQuery.Exec(qSql) == FALSE) { @@ -1189,5 +1136,4 @@ BOOL CCastleDBSet::DSDB_QueryCastleNpcUpdate(int iMapSvrGroup, CSP_REQ_NPCUPDATE } return FALSE; -} -#endif \ No newline at end of file +} \ No newline at end of file diff --git a/DataServer/DbSet/CastleDBSet.h b/DataServer/DbSet/CastleDBSet.h index 83ddb63..ea2dd7a 100644 --- a/DataServer/DbSet/CastleDBSet.h +++ b/DataServer/DbSet/CastleDBSet.h @@ -1,20 +1,11 @@ -// CastleDBSet.h: interface for the CCastleDBSet class. -// -////////////////////////////////////////////////////////////////////// - -#if !defined(AFX_CASTLEDBSET_H__866EE47E_B854_4D47_8664_64C3026FFE59__INCLUDED_) && defined(MU_CASTLESIEGE_DS_PROTOCOL_20041105) -#define AFX_CASTLEDBSET_H__866EE47E_B854_4D47_8664_64C3026FFE59__INCLUDED_ - -#if _MSC_VER > 1000 +#ifndef __CASTLEDBSET_H__ +#define __CASTLEDBSET_H__ #pragma once -#endif // _MSC_VER > 1000 -//#include "Include\ProDef.h" #include "..\Include\Sprodef.h" - #include "DBConBase.h" -struct CASTLE_DATA +typedef struct CASTLE_DATA { WORD wStartYear; BYTE btStartMonth; @@ -25,56 +16,52 @@ struct CASTLE_DATA BYTE btIsSiegeGuildList; BYTE btIsSiegeEnded; BYTE btIsCastleOccupied; - char szCastleOwnGuild[MAX_GUILDNAMESTRING+1]; + char szCastleOwnGuild[MAX_GUILDNAMESTRING + 1]; __int64 i64CastleMoney; int iTaxRateChaos; int iTaxRateStore; int iTaxHuntZone; int iFirstCreate; -}; +} *LPCASTLE_DATA; -class CCastleDBSet : public CDBConBase +class CCastleDBSet : public CDBConBase { public: CCastleDBSet(); virtual ~CCastleDBSet(); - + BOOL Connect(); - BOOL DSDB_QueryCastleTotalInfo(int iMapSvrGroup, int iCastleEventCycle, CASTLE_DATA* lpCastleData); - BOOL DSDB_QueryOwnerGuildMaster(int iMapSvrGroup, CSP_ANS_OWNERGUILDMASTER* lpOwnerGuildMaster); - BOOL DSDB_QueryCastleNpcBuy(int iMapSvrGroup, CSP_REQ_NPCBUY* lpNpcBuy, int* lpiResult); - BOOL DSDB_QueryCastleNpcRepair(int iMapSvrGroup, CSP_REQ_NPCREPAIR* lpNpcRepair, CSP_ANS_NPCREPAIR* lpNpcRepairResult, int* lpiResult); - BOOL DSDB_QueryCastleNpcUpgrade(int iMapSvrGroup, CSP_REQ_NPCUPGRADE* lpNpcUpgrade); - BOOL DSDB_QueryTaxInfo(int iMapSvrGroup, CSP_ANS_TAXINFO* lpTaxInfo); - BOOL DSDB_QueryTaxRateChange(int iMapSvrGroup, int iTaxType, int iTaxRate, CSP_ANS_TAXRATECHANGE* lpTaxRateChange, int* lpiResult); - BOOL DSDB_QueryCastleMoneyChange(int iMapSvrGroup, int iMoneyChange, __int64* i64ResultMoney, int* lpiResult); - BOOL DSDB_QuerySiegeDateChange(int iMapSvrGroup, CSP_REQ_SDEDCHANGE* lpSdEdChange, int* lpiResult); - BOOL DSDB_QueryGuildMarkRegInfo(int iMapSvrGroup, char* lpszGuildName, CSP_ANS_GUILDREGINFO* lpGuildRegInfo, int* lpiResult); - BOOL DSDB_QuerySiegeEndedChange(int iMapSvrGroup, int bIsCastleSiegeEnded, int* lpiResult); - BOOL DSDB_QueryCastleOwnerChange(int iMapSvrGroup, CSP_REQ_CASTLEOWNERCHANGE* lpCastleOwnerInfo, CSP_ANS_CASTLEOWNERCHANGE* lpCastleOwnerInfoResult, int* lpiResult); - BOOL DSDB_QueryRegAttackGuild(int iMapSvrGroup, CSP_REQ_REGATTACKGUILD* lpRegAttackGuild, CSP_ANS_REGATTACKGUILD* lpRegAttackGuildResult, int* lpiResult); - BOOL DSDB_QueryRestartCastleState(int iMapSvrGroup, CSP_REQ_CASTLESIEGEEND* lpCastleSiegeEnd, int* lpiResult); - BOOL DSDB_QueryGuildMarkRegMark(int iMapSvrGroup, char* lpszGuildName, CSP_ANS_GUILDREGMARK* lpGuildRegMark, int* lpiResult); - BOOL DSDB_QueryGuildMarkReset(int iMapSvrGroup, char* lpszGuildName, CSP_ANS_GUILDRESETMARK* lpGuildResetMark); - BOOL DSDB_QueryGuildSetGiveUp(int iMapSvrGroup, char* lpszGuildName, int bIsGiveUp, CSP_ANS_GUILDSETGIVEUP* lpGuildSetGiveUp); - BOOL DSDB_QueryCastleNpcRemove(int iMapSvrGroup, CSP_REQ_NPCREMOVE* lpNpcRemove, int* lpiResult); + BOOL DSDB_QueryCastleTotalInfo(int iMapSvrGroup, int iCastleEventCycle, LPCASTLE_DATA lpCastleData); + BOOL DSDB_QueryOwnerGuildMaster(int iMapSvrGroup, LPCSP_ANS_OWNERGUILDMASTER lpOwnerGuildMaster); + BOOL DSDB_QueryCastleNpcBuy(int iMapSvrGroup, LPCSP_REQ_NPCBUY lpNpcBuy, int* lpiResult); + BOOL DSDB_QueryCastleNpcRepair(int iMapSvrGroup, LPCSP_REQ_NPCREPAIR lpNpcRepair, LPCSP_ANS_NPCREPAIR lpNpcRepairResult, int* lpiResult); + BOOL DSDB_QueryCastleNpcUpgrade(int iMapSvrGroup, LPCSP_REQ_NPCUPGRADE lpNpcUpgrade); + BOOL DSDB_QueryTaxInfo(int iMapSvrGroup, LPCSP_ANS_TAXINFO lpTaxInfo); + BOOL DSDB_QueryTaxRateChange(int iMapSvrGroup, int iTaxType, int iTaxRate, LPCSP_ANS_TAXRATECHANGE lpTaxRateChange, int* lpiResult); + BOOL DSDB_QueryCastleMoneyChange(int iMapSvrGroup, int iMoneyChange, __int64* i64ResultMoney, int* lpiResult); + BOOL DSDB_QuerySiegeDateChange(int iMapSvrGroup, LPCSP_REQ_SDEDCHANGE lpSdEdChange, int* lpiResult); + BOOL DSDB_QueryGuildMarkRegInfo(int iMapSvrGroup, char* lpszGuildName, LPCSP_ANS_GUILDREGINFO lpGuildRegInfo, int* lpiResult); + BOOL DSDB_QuerySiegeEndedChange(int iMapSvrGroup, BOOL bIsCastleSiegeEnded, int* lpiResult); + BOOL DSDB_QueryCastleOwnerChange(int iMapSvrGroup, LPCSP_REQ_CASTLEOWNERCHANGE lpCastleOwnerInfo, LPCSP_ANS_CASTLEOWNERCHANGE lpCastleOwnerInfoResult, int* lpiResult); + BOOL DSDB_QueryRegAttackGuild(int iMapSvrGroup, LPCSP_REQ_REGATTACKGUILD lpRegAttackGuild, LPCSP_ANS_REGATTACKGUILD lpRegAttackGuildResult, int* lpiResult); + BOOL DSDB_QueryRestartCastleState(int iMapSvrGroup, LPCSP_REQ_CASTLESIEGEEND lpCastleSiegeEnd, int* lpiResult); + BOOL DSDB_QueryGuildMarkRegMark(int iMapSvrGroup, char* lpszGuildName, LPCSP_ANS_GUILDREGMARK lpGuildRegMark, int* lpiResult); + BOOL DSDB_QueryGuildMarkReset(int iMapSvrGroup, char* lpszGuildName, LPCSP_ANS_GUILDRESETMARK lpGuildResetMark); + BOOL DSDB_QueryGuildSetGiveUp(int iMapSvrGroup, char* lpszGuildName, BOOL bIsGiveUp, LPCSP_ANS_GUILDSETGIVEUP lpGuildSetGiveUp); + BOOL DSDB_QueryCastleNpcRemove(int iMapSvrGroup, LPCSP_REQ_NPCREMOVE lpNpcRemove, int* lpiResult); BOOL DSDB_QueryResetCastleTaxInfo(int iMapSvrGroup, int* lpiResult); BOOL DSDB_QueryResetSiegeGuildInfo(int iMapSvrGroup, int* lpiResult); BOOL DSDB_QueryResetRegSiegeInfo(int iMapSvrGroup, int* lpiResult); - BOOL DSDB_QueryCastleNpcInfo(int iMapSvrGroup, CSP_NPCDATA* lpNpcData, int* lpiCount); - BOOL DSDB_QueryAllGuildMarkRegInfo(int iMapSvrGroup, CSP_GUILDREGINFO* lpGuildRegInfo, int* lpiCount); - BOOL DSDB_QueryFirstCreateNPC(int iMapSvrGroup, CSP_REQ_NPCSAVEDATA* lpNpcSaveData); - BOOL DSDB_QueryCalcRegGuildList(int iMapSvrGroup, CSP_CALCREGGUILDLIST* lpCalcRegGuildList, int* lpiCount); - BOOL DSDB_QueryCsGuildUnionInfo(int iMapSvrGroup, char* lpszGuildName, int iCsGuildID, CSP_CSGUILDUNIONINFO* lpCsGuildUnionInfo, int* lpiCount); + BOOL DSDB_QueryCastleNpcInfo(int iMapSvrGroup, LPCSP_NPCDATA lpNpcData, int* lpiCount); + BOOL DSDB_QueryAllGuildMarkRegInfo(int iMapSvrGroup, LPCSP_GUILDREGINFO lpGuildRegInfo, int* lpiCount); + BOOL DSDB_QueryFirstCreateNPC(int iMapSvrGroup, LPCSP_REQ_NPCSAVEDATA lpNpcSaveData); + BOOL DSDB_QueryCalcRegGuildList(int iMapSvrGroup, LPCSP_CALCREGGUILDLIST lpCalcRegGuildList, int* lpiCount); + BOOL DSDB_QueryCsGuildUnionInfo(int iMapSvrGroup, char* lpszGuildName, int iCsGuildID, LPCSP_CSGUILDUNIONINFO lpCsGuildUnionInfo, int* lpiCount); BOOL DSDB_QueryCsClearTotalGuildInfo(int iMapSvrGroup); -#ifdef ADD_CASTLE_TOTAL_GUILD_SCORE_20061123 - BOOL DSDB_QueryCsSaveTotalGuildInfo(int iMapSvrGroup, char* lpszGuildName, int iCsGuildID, int iCsGuildInvolved, int iCsGuildScore); -#else - BOOL DSDB_QueryCsSaveTotalGuildInfo(int iMapSvrGroup, char* lpszGuildName, int iCsGuildID, int iCsGuildInvolved); -#endif + BOOL DSDB_QueryCsSaveTotalGuildInfo(int iMapSvrGroup, char* lpszGuildName, int iCsGuildID, int iCsGuildInvolved, int iCsGuildScore); BOOL DSDB_QueryCsSaveTotalGuildOK(int iMapSvrGroup, int* lpiResult); - BOOL DSDB_QueryCsLoadTotalGuildInfo(int iMapSvrGroup, CSP_CSLOADTOTALGUILDINFO* lpLoadTotalGuildInfo, int* lpiCount); - BOOL DSDB_QueryCastleNpcUpdate(int iMapSvrGroup, CSP_REQ_NPCUPDATEDATA* lpNpcSaveData); + BOOL DSDB_QueryCsLoadTotalGuildInfo(int iMapSvrGroup, LPCSP_CSLOADTOTALGUILDINFO lpLoadTotalGuildInfo, int* lpiCount); + BOOL DSDB_QueryCastleNpcUpdate(int iMapSvrGroup, LPCSP_REQ_NPCUPDATEDATA lpNpcSaveData); }; -#endif // !defined(AFX_CASTLEDBSET_H__866EE47E_B854_4D47_8664_64C3026FFE59__INCLUDED_) +#endif diff --git a/DataServer/DbSet/ChaosCastleFinalDBSet.cpp b/DataServer/DbSet/ChaosCastleFinalDBSet.cpp index bcdf4f0..e4d0aa9 100644 --- a/DataServer/DbSet/ChaosCastleFinalDBSet.cpp +++ b/DataServer/DbSet/ChaosCastleFinalDBSet.cpp @@ -11,963 +11,804 @@ ChaosCastleFinalDBSet::~ChaosCastleFinalDBSet() BOOL ChaosCastleFinalDBSet::Connect() { - if (m_DBQuery.Connect(3, szDbConnectDsn, szDbConnectID, szDbConnectPass)) - return 1; - MsgBox("ChaosCastleFinalDBSet ODBC Connect Fail"); - return 0; + if (m_Query.Connect(3, szDbConnectDsn, szDbConnectID, szDbConnectPass) == FALSE) + { + MsgBox("ChaosCastleFinalDBSet ODBC Connect Fail"); + return FALSE; + } + + return TRUE; } -int ChaosCastleFinalDBSet::ReqCCFRanking(_stCCFRankingInfo *CCFRankingInfo, int nCCFtype, char *btUserCount, int nServerCategory) +BOOL ChaosCastleFinalDBSet::ReqCCFRanking(_stCCFRankingInfo* CCFRankingInfo, int nCCFtype, BYTE& btUserCount, int nServerCategory) { - int result; - __int16 sqlRetrun; - CString szquery; int iCnt = 0; - if (this->m_DBQuery.IsConnected()) + if (m_Query.IsConnected() == FALSE) { - if (nServerCategory == 1) - szquery.Format("WZ_ChaosCastleFinal_GetRank_r %d",nCCFtype); - else - szquery.Format("WZ_ChaosCastleFinal_GetRank %d",nCCFtype); - if (this->m_DBQuery.Exec(szquery)) - { - for (sqlRetrun = this->m_DBQuery.Fetch(); sqlRetrun != 100; sqlRetrun = this->m_DBQuery.Fetch()) - { - if (sqlRetrun == -1) - break; - - CCFRankingInfo[iCnt].byRank = this->m_DBQuery.GetInt("mRank"); - this->m_DBQuery.GetStr("mName", CCFRankingInfo[iCnt].szCharName); - CCFRankingInfo[iCnt++].nPoint = this->m_DBQuery.GetInt("mPoint"); - if (iCnt >= 50) - break; - } - *btUserCount = iCnt; - this->m_DBQuery.Clear(); - result = 0; - } - else - { - LogAddC(2,"Error WZ_CCF_GET_RANKLIST m_DBQuery.Exec %s %d", __FILE__, __LINE__); - this->m_DBQuery.Clear(); - result = -1; - } + LogAddTD("[UBF] m_Query.IsConnected: FALSE"); + return -1; } + + CString szquery; + + if (nServerCategory == 1) + { + szquery.Format("WZ_ChaosCastleFinal_GetRank_r %d", nCCFtype); + } + else { - LogAddTD("[UBF] this->m_DBQuery.IsConnected: FALSE"); - result = -1; + szquery.Format("WZ_ChaosCastleFinal_GetRank %d", nCCFtype); } - return result; -} + if (m_Query.Exec(szquery) == FALSE) + { + LogAddC(LOGC_RED, "Error WZ_CCF_GET_RANKLIST m_Query.Exec %s %d", __FILE__, __LINE__); + m_Query.Clear(); + return -1; + } + + SQLRETURN sqlRetrun = m_Query.Fetch(); + + while (sqlRetrun != SQL_NO_DATA && sqlRetrun != SQL_NULL_DATA) + { + CCFRankingInfo[iCnt].byRank = m_Query.GetInt("mRank"); + m_Query.GetStr("mName", CCFRankingInfo[iCnt].szCharName); + CCFRankingInfo[iCnt].nPoint = m_Query.GetInt("mPoint"); + iCnt++; + + if (iCnt >= 50) + { + break; + } + + sqlRetrun = m_Query.Fetch(); + } + + btUserCount = iCnt; + m_Query.Clear(); + return FALSE; +} void ChaosCastleFinalDBSet::Save_CCF_Point(char *Name, int nPoint, int nCCFType) { - __int16 sqlReturn; + if (m_Query.IsConnected() == FALSE) + { + LogAddTD("[UBF] m_Query.IsConnected: FALSE"); + return; + } + CString qSql; + qSql.Format("WZ_ChaosCastleFinal_Save '%s', %d, %d",Name,nPoint,nCCFType); - if (this->m_DBQuery.IsConnected()) + if (m_Query.Exec(qSql) == FALSE) { - - qSql.Format("WZ_ChaosCastleFinal_Save '%s', %d, %d",Name,nPoint,nCCFType); - if (!this->m_DBQuery.Exec(qSql)) - LogAddTD("Error-L1 [ChaosCastleFinal] [WZ_ChaosCastleFinal_Save] NAME:%s, Point:%d ,CCFType:%d ",Name,nPoint,nCCFType); - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn == 100 || sqlReturn == -1) - LogAddTD("Error-L2 [ChaosCastleFinal] [WZ_ChaosCastleFinal_Save] %d, %s , %d",sqlReturn, __FILE__, __LINE__); - this->m_DBQuery.Clear(); + LogAddTD("Error-L1 [ChaosCastleFinal] [WZ_ChaosCastleFinal_Save] NAME:%s, Point:%d ,CCFType:%d ", Name, nPoint, nCCFType); } - else + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) { - LogAddTD("[UBF] this->m_DBQuery.IsConnected: FALSE"); + LogAddTD("Error-L2 [ChaosCastleFinal] [WZ_ChaosCastleFinal_Save] %d, %s , %d", sqlReturn, __FILE__, __LINE__); } -} + m_Query.Clear(); +} -int ChaosCastleFinalDBSet::CCFRankRenew(char byCCFType) +BOOL ChaosCastleFinalDBSet::CCFRankRenew(BYTE byCCFType) { int result; CString q; - if (this->m_DBQuery.IsConnected()) + if (m_Query.IsConnected() == FALSE) { - q.Format("WZ_ChaosCastleFinal_Renew %d", byCCFType); - if (this->m_DBQuery.Exec(q)) - { - this->m_DBQuery.Clear(); - result = 0; - } - else - { - LogAddTD("Error-L1 [ChaosCastleFinalDBSet][WZ_ChaosCastleFinal_Renew]"); - result = -1; - } + LogAddTD("[UBF] m_Query.IsConnected: FALSE"); + return -1; } - else + + CString q; + q.Format("WZ_ChaosCastleFinal_Renew %d", byCCFType); + + if (m_Query.Exec(q) == FALSE) { - LogAddTD("[UBF] this->m_DBQuery.IsConnected: FALSE"); - result = -1; + LogAddTD("Error-L1 [ChaosCastleFinalDBSet][WZ_ChaosCastleFinal_Renew]"); + return -1; } - return result; -} + m_Query.Clear(); + return FALSE; +} -void ChaosCastleFinalDBSet::GetPermission(char *Name, int nCCFType, int *nReturn) +void ChaosCastleFinalDBSet::GetPermission(char* Name, int nCCFType, int& nReturn) { - __int16 sqlReturn; + if (m_Query.IsConnected() == FALSE) + { + LogAddTD("[UBF] m_Query.IsConnected: FALSE"); + nReturn = 1; + return; + } + CString qSql; + qSql.Format("WZ_ChaosCastleFinal_GetPermission '%s' , %d", Name, nCCFType); - if (this->m_DBQuery.IsConnected()) + if (m_Query.Exec(qSql) == FALSE) { - qSql.Format("WZ_ChaosCastleFinal_GetPermission '%s' , %d",Name,nCCFType); - if (this->m_DBQuery.Exec(qSql)) - { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - *nReturn = this->m_DBQuery.GetInt(1); - if (*nReturn == -1) - LogAddTD("error-L3 : [ChaosCastleFinalDBSet] WZ_ChaosCastleFinal_GetPermission #3 %d %s %d", - sqlReturn, __FILE__, __LINE__); - this->m_DBQuery.Clear(); - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_ChaosCastleFinal_GetPermission][A2] %s %d Return %d,%s,%d ", - Name,nCCFType,sqlReturn, __FILE__, __LINE__); - } - } - else - { - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_ChaosCastleFinal_GetPermission][A1] %s %d ", Name, nCCFType); - } + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_ChaosCastleFinal_GetPermission][A1] %s %d ", Name, nCCFType); + return; } - else + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) { - LogAddTD("[UBF] this->m_DBQuery.IsConnected: FALSE"); - *nReturn = 1; + m_Query.Clear(); + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_ChaosCastleFinal_GetPermission][A2] %s %d Return %d,%s,%d ", Name, nCCFType, sqlReturn, __FILE__, __LINE__); + return; } + + nReturn = m_Query.GetInt(1); + + if (nReturn == -1) + { + LogAddTD("error-L3 : [ChaosCastleFinalDBSet] WZ_ChaosCastleFinal_GetPermission #3 %d %s %d", sqlReturn, __FILE__, __LINE__); + } + + m_Query.Clear(); } -int ChaosCastleFinalDBSet::Save_ChaosCastle_KillPoint(char *szName, int nPoint, int CastleIndex, int *SubResult, int *CurrntPoint, int *TotalPoint) +BOOL ChaosCastleFinalDBSet::Save_ChaosCastle_KillPoint(char* szName, int nPoint, int CastleIndex, int& SubResult, int& CurrntPoint, int& TotalPoint) { - int result; - __int16 sqlReturn; - CString qSql; - char szCharName[11]; - - if (this->m_DBQuery.IsConnected()) + if (m_Query.IsConnected() == FALSE) { - szCharName[10] = 0; - memcpy(szCharName, szName, 0xAu); - - if (strlen(szCharName) && (strlen(szCharName) <= 0xA)) - { - qSql.Format("EXEC WZ_ChaosCastle_SaveKillPoint '%s', %d ,%d ",szName,nPoint,CastleIndex); - - if (this->m_DBQuery.Exec(qSql)) - { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - *SubResult = this->m_DBQuery.GetInt("Result"); - *CurrntPoint = this->m_DBQuery.GetInt("CurrentPoint"); - *TotalPoint = this->m_DBQuery.GetInt("TotalPoint"); - this->m_DBQuery.Clear(); - result = 1; - } - else - { - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][Save_ChaosCastle_KillPoint] [%s] nPoint:%d CastleIndex: %d Return %d,%s,%d ", - szName,nPoint,CastleIndex,sqlReturn, __FILE__, __LINE__); - this->m_DBQuery.Clear(); - - result = 0; - } - } - else - { - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][Save_ChaosCastle_KillPoint] [%s] KillPoint:%d CastleIndex :%d ", - szCharName,nPoint,CastleIndex); - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - LogAddC(2,"%s] ؎֥ ߡׯ %s %d",szCharName, __FILE__, __LINE__); - result = 0; - } + LogAddTD("[UBF] m_Query.IsConnected: FALSE"); + SubResult = -1; + CurrntPoint = 0; + TotalPoint = 0; + return FALSE; } - else + + char szCharName[MAX_IDSTRING + 1]; + szCharName[MAX_IDSTRING] = '\0'; + memcpy(szCharName, szName, MAX_IDSTRING); + + if (strlen(szCharName) == 0 || strlen(szCharName) > MAX_IDSTRING) { - LogAddTD("[UBF] this->m_DBQuery.IsConnected: FALSE"); - *SubResult = -1; - *CurrntPoint = 0; - *TotalPoint = 0; - result = 0; + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szCharName, __FILE__, __LINE__); + return FALSE; } - return result; -} - -int ChaosCastleFinalDBSet::GetUBFAccountUserInfo(char *szAccountID, char *szName, int nServerCode, int IsUnityBattleFieldServer, PMSG_ANS_UBF_ACCOUNT_USERINFO *pMsg) -{ - int result; // eax - __int16 sqlReturn; CString qSql; - char szCharName[11]; - char szId[11]; + qSql.Format("EXEC WZ_ChaosCastle_SaveKillPoint '%s', %d ,%d ", szName, nPoint, CastleIndex); - - if (this->m_DBQuery.IsConnected()) + if (m_Query.Exec(qSql) == FALSE) { - szId[10] = 0; - memcpy(szId, szAccountID, 0xAu); + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][Save_ChaosCastle_KillPoint] [%s] KillPoint:%d CastleIndex :%d ", szCharName, nPoint, CastleIndex); + m_Query.Clear(); + return FALSE; + } - if (strlen(szId) && (strlen(szId) <= 0xA)) - { - szCharName[10] = 0; - memcpy(szCharName, szName, 0xAu); - if (strlen(szCharName) && (strlen(szCharName) <= 0xA)) - { - qSql.Format("EXEC WZ_UnityBattleFieldAccountUserInfoSelect_r '%s', '%s', %d, %d", - szAccountID,szName,nServerCode,IsUnityBattleFieldServer); - if (this->m_DBQuery.Exec(qSql)) - { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn == 100) - { - LogAddTD("[CCF][WZ_UnityBattleFieldAccountUserInfoSelect_r] No Result Not Error [%s][%s]ServerCode:%d Return %d,%s,%d ", - szId,szName,nServerCode,sqlReturn, __FILE__, __LINE__); - this->m_DBQuery.Clear(); - result = 0; - } - else if (sqlReturn == -1) - { - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldAccountUserInfoSelect_r] [%s][%s]ServerCode:%d Return %d,%s,%d ", - szId,szName,nServerCode,sqlReturn, __FILE__, __LINE__); - this->m_DBQuery.Clear(); - result = 0; - } - else - { - pMsg->btRegisterState = this->m_DBQuery.GetInt("RegisterState"); - pMsg->btRegisterMonth = this->m_DBQuery.GetInt("RegisterMonth"); - pMsg->btRegisterDay = this->m_DBQuery.GetInt("RegisterDay"); - this->m_DBQuery.Clear(); - result = 1; - } - } - else - { - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldAccountUserInfoSelect_r] [%s][%s] ServerCode:%d, ServerType:%d ", - szId,szCharName,nServerCode,IsUnityBattleFieldServer); - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - LogAddC(2,"%s] ؎֥ ߡׯ %s %d",szCharName, __FILE__, __LINE__); - result = 0; - } - } - else - { - LogAddC(2,"%s] ؎֥ ߡׯ %s %d",szId, __FILE__, __LINE__); - result = 0; - } + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) + { + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][Save_ChaosCastle_KillPoint] [%s] nPoint:%d CastleIndex: %d Return %d,%s,%d ", szName, nPoint, CastleIndex, sqlReturn, __FILE__, __LINE__); + m_Query.Clear(); + return FALSE; } - else + + SubResult = m_Query.GetInt("Result"); + CurrntPoint = m_Query.GetInt("CurrentPoint"); + TotalPoint = m_Query.GetInt("TotalPoint"); + + m_Query.Clear(); + return TRUE; +} + +BOOL ChaosCastleFinalDBSet::GetUBFAccountUserInfo(char* szAccountID, char* szName, int nServerCode, BOOL IsUnityBattleFieldServer, LPPMSG_ANS_UBF_ACCOUNT_USERINFO pMsg) +{ + if (m_Query.IsConnected() == FALSE) { - LogAddTD("[UBF] this->m_DBQuery.IsConnected: FALSE"); + LogAddTD("[UBF] m_Query.IsConnected: FALSE"); pMsg->btRegisterState = 0; pMsg->btRegisterMonth = 0; pMsg->btRegisterDay = 0; - result = 0; + return FALSE; } - return result; -} + char szId[MAX_IDSTRING + 1]; + szId[MAX_IDSTRING] = '\0'; + memcpy(szId, szAccountID, MAX_IDSTRING); -int ChaosCastleFinalDBSet::RegisterUBFAccountUser(char *szAccountID, char *szName, char *szBattleName, int nServerCode, int nRegisterState, int nRegisterMonth, int nRegisterDay, char *nResult, unsigned __int16 *nLeftSec) -{ - int result; - __int16 sqlReturn; - CString qSql; - char szUBFName[11]; - char szCharName[11]; - char szId[11]; + if (strlen(szId) == 0 || strlen(szId) > MAX_IDSTRING) + { + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szId, __FILE__, __LINE__); + return FALSE; + } + char szCharName[MAX_IDSTRING + 1]; + szCharName[MAX_IDSTRING] = '\0'; + memcpy(szCharName, szName, MAX_IDSTRING); - if (this->m_DBQuery.IsConnected()) + if (strlen(szCharName) == 0 || strlen(szCharName) > MAX_IDSTRING) { - szId[10] = 0; - memcpy(szId, szAccountID, 0xAu); + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szCharName, __FILE__, __LINE__); + return FALSE; + } - if (strlen(szId) && (strlen(szId) <= 0xA)) - { - szCharName[10] = 0; - memcpy(szCharName, szName, 0xAu); - strlen(szCharName); - if (strlen(szCharName) && (strlen(szCharName) <= 0xA)) - { - szUBFName[10] = 0; - memcpy(szUBFName, szBattleName, 0xAu); - strlen(szUBFName); - if (strlen(szUBFName) && (strlen(szUBFName) <= 0xA)) - { - - qSql.Format("EXEC WZ_UnityBattleFieldAccountUserAdd_r '%s', '%s', %d, %d, %d, %d", - szId,szCharName,nServerCode,nRegisterState,nRegisterMonth,nRegisterDay); - if (this->m_DBQuery.Exec(qSql)) - { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - *nResult = this->m_DBQuery.GetInt("Result"); - *nLeftSec = this->m_DBQuery.GetInt("Left_Second"); - this->m_DBQuery.Clear(); - result = 1; - } - else - { - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldAccountUserAdd_r] [%s][%s] sqlReturn:%d,%s,%d ", - szId,szCharName,sqlReturn, __FILE__, __LINE__); - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldAccountUserAdd_r] '%s', '%s', %d, %d, %d, %d ", - szId,szCharName,nServerCode,nRegisterState,nRegisterMonth,nRegisterDay); - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - LogAddC(2,"%s] ؎֥ ߡׯ %s %d",szUBFName, __FILE__, __LINE__); - result = 0; - } - } - else - { - LogAddC(2, "%s] ؎֥ ߡׯ %s %d",szCharName, __FILE__, __LINE__); - result = 0; - } - } - else - { - LogAddC(2,"%s] ؎֥ ߡׯ %s %d",szId, __FILE__, __LINE__); - result = 0; - } + CString qSql; + qSql.Format("EXEC WZ_UnityBattleFieldAccountUserInfoSelect_r '%s', '%s', %d, %d", szAccountID, szName, nServerCode, IsUnityBattleFieldServer); + + if (m_Query.Exec(qSql) == FALSE) + { + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldAccountUserInfoSelect_r] [%s][%s] ServerCode:%d, ServerType:%d ", szId, szCharName, nServerCode, IsUnityBattleFieldServer); + m_Query.Clear(); + return FALSE; } - else + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA) { - LogAddTD("[UBF] this->m_DBQuery.IsConnected: FALSE"); - *nResult = -1; - *nLeftSec = 0; - result = 0; + LogAddTD("[CCF][WZ_UnityBattleFieldAccountUserInfoSelect_r] No Result Not Error [%s][%s]ServerCode:%d Return %d,%s,%d ", szId, szName, nServerCode, sqlReturn, __FILE__, __LINE__); + m_Query.Clear(); + return FALSE; } - return result; -} + if (sqlReturn == SQL_NULL_DATA) + { + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldAccountUserInfoSelect_r] [%s][%s]ServerCode:%d Return %d,%s,%d ", szId, szName, nServerCode, sqlReturn, __FILE__, __LINE__); + m_Query.Clear(); + return FALSE; + } -bool ChaosCastleFinalDBSet::CopyUBFAccountUser(char *szAccountID, char *szName, __int16 GameServerCode, BYTE* subResult) + pMsg->btRegisterState = m_Query.GetInt("RegisterState"); + pMsg->btRegisterMonth = m_Query.GetInt("RegisterMonth"); + pMsg->btRegisterDay = m_Query.GetInt("RegisterDay"); + + m_Query.Clear(); + return TRUE; +} + +BOOL ChaosCastleFinalDBSet::RegisterUBFAccountUser(char* szAccountID, char* szName, char* szBattleName, int nServerCode, int nRegisterState, int nRegisterMonth, int nRegisterDay, BYTE& nResult, WORD& nLeftSec) { - int result; - __int16 sqlReturn; - CString qSql; - char szCharName[11]; - char szId[11]; + if (m_Query.IsConnected() == FALSE) + { + LogAddTD("[UBF] m_Query.IsConnected: FALSE"); + nResult = -1; + nLeftSec = 0; + return FALSE; + } - if (this->m_DBQuery.IsConnected()) + char szId[MAX_IDSTRING + 1]; + szId[MAX_IDSTRING] = '\0'; + memcpy(szId, szAccountID, MAX_IDSTRING); + + if (strlen(szId) == 0 || strlen(szId) > MAX_IDSTRING) { - szId[10] = 0; - memcpy(szId, szAccountID, 0xAu); - if (strlen(szId) && (strlen(szId) <= 0xA)) - { - szCharName[10] = 0; - memcpy(szCharName, szName, 0xAu); - if (strlen(szCharName) && (strlen(szCharName) <= 0xA)) - { - - qSql.Format("EXEC WZ_UnityBattleFieldAccountUserDataCopy_r '%s', '%s',%d", - szId,szCharName,GameServerCode); - if (this->m_DBQuery.Exec(qSql)) - { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - *subResult = this->m_DBQuery.GetInt(1); - this->m_DBQuery.Clear(); - result = 1; - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldAccountUserDataCopy] [%s][%s] sqlReturn:%d,%s,%d ", - szId,szCharName,sqlReturn, __FILE__, __LINE__); - result = 0; - } - } - else - { - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldAccountUserDataCopy_r] '%s', '%s'", - szId,szCharName); - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - LogAddC(2,"%s] ؎֥ ߡׯ %s %d",szCharName, __FILE__, __LINE__); - result = 0; - } - } - else - { - LogAddC(2, "%s] ؎֥ ߡׯ %s %d",szId, __FILE__, __LINE__); - result = 0; - } + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szId, __FILE__, __LINE__); + return FALSE; } - else + + char szCharName[MAX_IDSTRING + 1]; + szCharName[MAX_IDSTRING] = '\0'; + memcpy(szCharName, szName, MAX_IDSTRING); + + if (strlen(szCharName) == 0 || strlen(szCharName) > MAX_IDSTRING) { - LogAddTD("[UBF] this->m_DBQuery.IsConnected: FALSE"); - *subResult = 0; - result = 0; + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szCharName, __FILE__, __LINE__); + return FALSE; } - return result; -} + char szUBFName[MAX_IDSTRING + 1]; + szUBFName[MAX_IDSTRING] = '\0'; + memcpy(szUBFName, szBattleName, MAX_IDSTRING); + + if (strlen(szUBFName) == 0 || strlen(szUBFName) > MAX_IDSTRING) + { + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szUBFName, __FILE__, __LINE__); + return FALSE; + } -bool ChaosCastleFinalDBSet::CopyUBFAccountUserPromotionMode(char *szAccountID, char *szName, __int16 GameServerCode, BYTE *subResult) -{ - int result; - __int16 sqlReturn; CString qSql; - char szCharName[11]; - char szId[11]; + qSql.Format("EXEC WZ_UnityBattleFieldAccountUserAdd_r '%s', '%s', %d, %d, %d, %d", szId, szCharName, nServerCode, nRegisterState, nRegisterMonth, nRegisterDay); + if (m_Query.Exec(qSql) == FALSE) + { + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldAccountUserAdd_r] '%s', '%s', %d, %d, %d, %d ", szId, szCharName, nServerCode, nRegisterState, nRegisterMonth, nRegisterDay); + m_Query.Clear(); + return FALSE; + } + + SQLRETURN sqlReturn = m_Query.Fetch(); - if (this->m_DBQuery.IsConnected()) + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) { - szId[10] = 0; - memcpy(szId, szAccountID, 0xAu); + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldAccountUserAdd_r] [%s][%s] sqlReturn:%d,%s,%d ", szId, szCharName, sqlReturn, __FILE__, __LINE__); + m_Query.Clear(); + return FALSE; + } - if (strlen(szId) && (strlen(szId) <= 0xA)) - { - szCharName[10] = 0; - memcpy(szCharName, szName, 0xAu); - - if (strlen(szCharName) && (strlen(szCharName) <= 0xA)) - { - qSql.Format("EXEC WZ_UnityBattleFieldAccountUserDataCopy_Promotion '%s', '%s',%d", - szId,szCharName,GameServerCode); - if (this->m_DBQuery.Exec(qSql)) - { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - *subResult = this->m_DBQuery.GetInt(1); - this->m_DBQuery.Clear(); - result = 1; - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("Error-L3 [CCFDBSet][WZ_UnityBattleFieldAccountUserDataCopy_Promotion] [%s][%s] sqlReturn:%d,%s,%d ", - szId,szCharName,sqlReturn, __FILE__, __LINE__); - result = 0; - } - } - else - { - LogAddTD("Error-L3 [CCFDBSet][WZ_UnityBattleFieldAccountUserDataCopy_Promotion] '%s', '%s'", szId, szCharName); - this->m_DBQuery.Clear(); - - result = 0; - } - } - else - { - LogAddC(2,"%s] ؎֥ ߡׯ %s %d",szCharName, __FILE__, __LINE__); - result = 0; - } - } - else - { - LogAddC(2,"%s] ؎֥ ߡׯ %s %d",szId, __FILE__, __LINE__); - result = 0; - } + nResult = m_Query.GetInt("Result"); + nLeftSec = m_Query.GetInt("Left_Second"); + + m_Query.Clear(); + return TRUE; +} + +BOOL ChaosCastleFinalDBSet::CopyUBFAccountUser(char* szAccountID, char* szName, WORD GameServerCode, BYTE& subResult) +{ + if (m_Query.IsConnected() == FALSE) + { + LogAddTD("[UBF] m_Query.IsConnected: FALSE"); + subResult = 0; + return FALSE; } - else + + char szId[MAX_IDSTRING + 1]; + szId[MAX_IDSTRING] = '\0'; + memcpy(szId, szAccountID, MAX_IDSTRING); + + if (strlen(szId) == 0 || strlen(szId) > MAX_IDSTRING) { - LogAddTD("[UBF] this->m_DBQuery.IsConnected: FALSE"); - *subResult = 0; - result = 0; + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szId, __FILE__, __LINE__); + return FALSE; } - return result; -} + char szCharName[MAX_IDSTRING + 1]; + szCharName[MAX_IDSTRING] = '\0'; + memcpy(szCharName, szName, MAX_IDSTRING); -int ChaosCastleFinalDBSet::GetWinAllRewardInfoOfUBF(char *szCharName, int nServerCode, char btServerKind, char btContentsType, PMSG_ANS_UBF_GET_REWARD *pMsg) -{ - int result; // eax - __int16 sqlReturn; // [esp+F8h] [ebp-44h] - CString qSql; // [esp+104h] [ebp-38h] - char szName[11]; // [esp+110h] [ebp-2Ch] - - szName[10] = 0; - memcpy(szName, szCharName, 0xAu); - - if (strlen(szName) && (strlen(szName) <= 0xA)) - { - qSql.Format("EXEC WZ_All_GetAndUpdate_RewardInfoOfUnityBattleField %d, '%s', %d, %d ", - btServerKind, - szName, - nServerCode, - btContentsType); - if (this->m_DBQuery.Exec(qSql)) - { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - pMsg->btResult = this->m_DBQuery.GetInt("Result"); - pMsg->btContentsType = this->m_DBQuery.GetInt("ContentsType"); - pMsg->btArrayCCF_Reward[0] = this->m_DBQuery.GetInt("CCF_Reward_PreLeague"); - pMsg->btArrayCCF_Reward[1] = this->m_DBQuery.GetInt("CCF_Reward_SemiLeague"); - pMsg->btArrayCCF_Reward[2] = this->m_DBQuery.GetInt("CCF_Reward_FinalLeague"); - pMsg->btArrayCCF_Reward[3] = this->m_DBQuery.GetInt("CCF_Reward_LastWinner"); - pMsg->btArrayDSF_Reward[0] = this->m_DBQuery.GetInt("DSF_Reward_PreLeague"); - pMsg->btArrayDSF_Reward[1] = this->m_DBQuery.GetInt("DSF_Reward_SemiLeague"); - pMsg->btArrayDSF_Reward[2] = this->m_DBQuery.GetInt("DSF_Reward_FinalLeague"); - pMsg->btArrayDSF_Reward[3] = this->m_DBQuery.GetInt("DSF_Reward_LastWinner"); - pMsg->btArrayCCN_Reward[0] = this->m_DBQuery.GetInt("CC_Reward_General"); - pMsg->btArrayCCN_Reward[1] = this->m_DBQuery.GetInt("CC_Reward_LastWinner"); - pMsg->btArrayDSN_Reward[0] = this->m_DBQuery.GetInt("DSN_Reward_Type_1"); - pMsg->btArrayDSN_Reward[1] = this->m_DBQuery.GetInt("DSN_Reward_Type_2"); - pMsg->btArrayDSN_Reward[2] = this->m_DBQuery.GetInt("DSN_Reward_Type_3"); - pMsg->btArrayDSN_Reward[3] = this->m_DBQuery.GetInt("DSN_Reward_Type_4"); - pMsg->btArrayDSN_Reward[4] = this->m_DBQuery.GetInt("DSN_Reward_Type_5"); - pMsg->btArrayDSN_Reward[5] = this->m_DBQuery.GetInt("DSN_Reward_Type_6"); - pMsg->btArrayDSN_Reward[6] = this->m_DBQuery.GetInt("DSN_Reward_Type_7"); - pMsg->btArrayDSN_Reward[7] = this->m_DBQuery.GetInt("DSN_Reward_Type_8"); - pMsg->btArrayDSN_Reward[8] = this->m_DBQuery.GetInt("DSN_Reward_Type_9"); - pMsg->btArrayDSN_Reward[9] = this->m_DBQuery.GetInt("DSN_Reward_Type_10"); - pMsg->btArrayDSN_Reward[10] = this->m_DBQuery.GetInt("DSN_Reward_Type_11"); - pMsg->btArrayDSN_Reward[11] = this->m_DBQuery.GetInt("DSN_Reward_Type_12"); - pMsg->btArrayDSN_Reward[12] = this->m_DBQuery.GetInt("DSN_Reward_Type_13"); - pMsg->btArrayDSN_Reward[13] = this->m_DBQuery.GetInt("DSN_Reward_Type_14"); - this->m_DBQuery.Clear(); - result = 1; - } - else - { - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_All_GetAndUpdate_RewardInfoOfUnityBattleField] [%s][%d] Return %d,%s,%d ", - szName,nServerCode,sqlReturn, __FILE__, __LINE__); - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_All_GetAndUpdate_RewardInfoOfUnityBattleField] [ServerKind:%d][%s][%d][%d]", - btServerKind,szName,nServerCode,btContentsType); - this->m_DBQuery.Clear(); - result = 0; - } + if (strlen(szCharName) == 0 || strlen(szCharName) > MAX_IDSTRING) + { + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szCharName, __FILE__, __LINE__); + return FALSE; } - else + + CString qSql; + qSql.Format("EXEC WZ_UnityBattleFieldAccountUserDataCopy_r '%s', '%s',%d", szId, szCharName, GameServerCode); + + if (m_Query.Exec(qSql) == FALSE) { - LogAddC(2,"%s] ؎֥ ߡׯ %s %d",szName, __FILE__, __LINE__); - result = 0; + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldAccountUserDataCopy_r] '%s', '%s'", szId, szCharName); + m_Query.Clear(); + return FALSE; } - return result; -} + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) + { + m_Query.Clear(); + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldAccountUserDataCopy] [%s][%s] sqlReturn:%d,%s,%d ", szId, szCharName, sqlReturn, __FILE__, __LINE__); + return FALSE; + } -int ChaosCastleFinalDBSet::SetReceivedWinnerItemOfUBF(char *szCharName, int nServerCode, char btReceived, char *SubResult) + subResult = m_Query.GetInt(1); + + m_Query.Clear(); + return TRUE; +} + +BOOL ChaosCastleFinalDBSet::CopyUBFAccountUserPromotionMode(char* szAccountID, char* szName, WORD GameServerCode, BYTE& subResult) { - int result; // eax - __int16 sqlReturn; // [esp+F8h] [ebp-44h] - CString qSql; // [esp+104h] [ebp-38h] - char szName[11]; // [esp+110h] [ebp-2Ch] + if (m_Query.IsConnected() == FALSE) + { + LogAddTD("[UBF] m_Query.IsConnected: FALSE"); + subResult = 0; + return FALSE; + } + + char szId[MAX_IDSTRING + 1]; + szId[MAX_IDSTRING] = '\0'; + memcpy(szId, szAccountID, MAX_IDSTRING); - if (this->m_DBQuery.IsConnected()) + if (strlen(szId) == 0 || strlen(szId) > MAX_IDSTRING) { - szName[10] = 0; - memcpy(szName, szCharName, 0xAu); + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szId, __FILE__, __LINE__); + return FALSE; + } - if (strlen(szName) && (strlen(szName) <= 0xA)) - { - qSql.Format("EXEC WZ_UnityBattleField_SetReceivedWinnerItem_r '%s', %d, %d", - szName,nServerCode,btReceived); - if (this->m_DBQuery.Exec(qSql)) - { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - *SubResult = this->m_DBQuery.GetInt(1); - this->m_DBQuery.Clear(); - result = 1; - } - else - { - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleField_SetReceivedWinnerItem_r] [%s][%d] Return %d,%s,%d ", - szName,nServerCode,sqlReturn, __FILE__, __LINE__); - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleField_SetReceivedWinnerItem_r] [%s][%d][%d]", - szName,nServerCode,btReceived); - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - LogAddC(2,"%s] ؎֥ ߡׯ %s %d",szName, __FILE__, __LINE__); - result = 0; - } + char szCharName[MAX_IDSTRING + 1]; + szCharName[MAX_IDSTRING] = '\0'; + memcpy(szCharName, szName, MAX_IDSTRING); + + if (strlen(szCharName) == 0 || strlen(szCharName) > MAX_IDSTRING) + { + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szCharName, __FILE__, __LINE__); + return FALSE; } - else + + CString qSql; + qSql.Format("EXEC WZ_UnityBattleFieldAccountUserDataCopy_Promotion '%s', '%s',%d", szId, szCharName, GameServerCode); + + if (m_Query.Exec(qSql) == FALSE) { - LogAddTD("[UBF] this->m_DBQuery.IsConnected: FALSE"); - *SubResult = 0; - result = 0; + LogAddTD("Error-L3 [CCFDBSet][WZ_UnityBattleFieldAccountUserDataCopy_Promotion] '%s', '%s'", szId, szCharName); + m_Query.Clear(); + return FALSE; } - return result; -} + SQLRETURN sqlReturn = m_Query.Fetch(); -int ChaosCastleFinalDBSet::SetCancelToJionUnityBattlefiled(char *szAccountID, char *szName, __int16 GameServerCode, char *subResult) + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) + { + m_Query.Clear(); + LogAddTD("Error-L3 [CCFDBSet][WZ_UnityBattleFieldAccountUserDataCopy_Promotion] [%s][%s] sqlReturn:%d,%s,%d ", szId, szCharName, sqlReturn, __FILE__, __LINE__); + return FALSE; + } + + subResult = m_Query.GetInt(1); + + m_Query.Clear(); + return TRUE; +} + +BOOL ChaosCastleFinalDBSet::GetWinAllRewardInfoOfUBF(char* szCharName, int nServerCode, BYTE btServerKind, BYTE btContentsType, LPPMSG_ANS_UBF_GET_REWARD pMsg) { - int result; - __int16 sqlReturn; + char szName[MAX_IDSTRING + 1]; + szName[MAX_IDSTRING] = '\0'; + memcpy(szName, szCharName, MAX_IDSTRING); + + if (strlen(szName) == 0 || strlen(szName) > MAX_IDSTRING) + { + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szName, __FILE__, __LINE__); + return FALSE; + } + CString qSql; - char Return; - char szCharName[11]; - char szId[11]; + qSql.Format("EXEC WZ_All_GetAndUpdate_RewardInfoOfUnityBattleField %d, '%s', %d, %d ", btServerKind, szName, nServerCode, btContentsType); + + if (m_Query.Exec(qSql) == FALSE) + { + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_All_GetAndUpdate_RewardInfoOfUnityBattleField] [ServerKind:%d][%s][%d][%d]", btServerKind, szName, nServerCode, btContentsType); + m_Query.Clear(); + return FALSE; + } + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) + { + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_All_GetAndUpdate_RewardInfoOfUnityBattleField] [%s][%d] Return %d,%s,%d ", szName, nServerCode, sqlReturn, __FILE__, __LINE__); + m_Query.Clear(); + return FALSE; + } + + enum + { + REWARD_TYPE_1 = 0x0, + REWARD_TYPE_2 = 0x1, + REWARD_TYPE_3 = 0x2, + REWARD_TYPE_4 = 0x3, + REWARD_TYPE_5 = 0x4, + REWARD_TYPE_6 = 0x5, + REWARD_TYPE_7 = 0x6, + REWARD_TYPE_8 = 0x7, + REWARD_TYPE_9 = 0x8, + REWARD_TYPE_10 = 0x9, + REWARD_TYPE_11 = 0xA, + REWARD_TYPE_12 = 0xB, + REWARD_TYPE_13 = 0xC, + REWARD_TYPE_14 = 0xD, + }; + + + pMsg->btResult = m_Query.GetInt("Result"); + pMsg->btContentsType = m_Query.GetInt("ContentsType"); + + pMsg->btArrayCCF_Reward[REWARD_TYPE_1] = m_Query.GetInt("CCF_Reward_PreLeague"); + pMsg->btArrayCCF_Reward[REWARD_TYPE_2] = m_Query.GetInt("CCF_Reward_SemiLeague"); + pMsg->btArrayCCF_Reward[REWARD_TYPE_3] = m_Query.GetInt("CCF_Reward_FinalLeague"); + pMsg->btArrayCCF_Reward[REWARD_TYPE_4] = m_Query.GetInt("CCF_Reward_LastWinner"); + pMsg->btArrayDSF_Reward[REWARD_TYPE_1] = m_Query.GetInt("DSF_Reward_PreLeague"); + pMsg->btArrayDSF_Reward[REWARD_TYPE_2] = m_Query.GetInt("DSF_Reward_SemiLeague"); + pMsg->btArrayDSF_Reward[REWARD_TYPE_3] = m_Query.GetInt("DSF_Reward_FinalLeague"); + pMsg->btArrayDSF_Reward[REWARD_TYPE_4] = m_Query.GetInt("DSF_Reward_LastWinner"); + pMsg->btArrayCCN_Reward[REWARD_TYPE_1] = m_Query.GetInt("CC_Reward_General"); + pMsg->btArrayCCN_Reward[REWARD_TYPE_2] = m_Query.GetInt("CC_Reward_LastWinner"); + pMsg->btArrayDSN_Reward[REWARD_TYPE_1] = m_Query.GetInt("DSN_Reward_Type_1"); + pMsg->btArrayDSN_Reward[REWARD_TYPE_2] = m_Query.GetInt("DSN_Reward_Type_2"); + pMsg->btArrayDSN_Reward[REWARD_TYPE_3] = m_Query.GetInt("DSN_Reward_Type_3"); + pMsg->btArrayDSN_Reward[REWARD_TYPE_4] = m_Query.GetInt("DSN_Reward_Type_4"); + pMsg->btArrayDSN_Reward[REWARD_TYPE_5] = m_Query.GetInt("DSN_Reward_Type_5"); + pMsg->btArrayDSN_Reward[REWARD_TYPE_6] = m_Query.GetInt("DSN_Reward_Type_6"); + pMsg->btArrayDSN_Reward[REWARD_TYPE_7] = m_Query.GetInt("DSN_Reward_Type_7"); + pMsg->btArrayDSN_Reward[REWARD_TYPE_8] = m_Query.GetInt("DSN_Reward_Type_8"); + pMsg->btArrayDSN_Reward[REWARD_TYPE_9] = m_Query.GetInt("DSN_Reward_Type_9"); + pMsg->btArrayDSN_Reward[REWARD_TYPE_10] = m_Query.GetInt("DSN_Reward_Type_10"); + pMsg->btArrayDSN_Reward[REWARD_TYPE_11] = m_Query.GetInt("DSN_Reward_Type_11"); + pMsg->btArrayDSN_Reward[REWARD_TYPE_12] = m_Query.GetInt("DSN_Reward_Type_12"); + pMsg->btArrayDSN_Reward[REWARD_TYPE_13] = m_Query.GetInt("DSN_Reward_Type_13"); + pMsg->btArrayDSN_Reward[REWARD_TYPE_14] = m_Query.GetInt("DSN_Reward_Type_14"); + + m_Query.Clear(); + return TRUE; +} +BOOL ChaosCastleFinalDBSet::SetReceivedWinnerItemOfUBF(char* szCharName, int nServerCode, BYTE btReceived, BYTE& SubResult) +{ + if (m_Query.IsConnected() == FALSE) + { + LogAddTD("[UBF] m_Query.IsConnected: FALSE"); + SubResult = 0; + return FALSE; + } + + char szName[MAX_IDSTRING + 1]; + szName[MAX_IDSTRING] = '\0'; + memcpy(szName, szCharName, MAX_IDSTRING); - if (this->m_DBQuery.IsConnected()) + if (strlen(szName) == 0 || strlen(szName) > MAX_IDSTRING) { - szId[10] = 0; - memcpy(szId, szAccountID, 0xAu); - szCharName[10] = 0; - memcpy(szCharName, szName, 0xAu); - Return = 0; + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szName, __FILE__, __LINE__); + return FALSE; + } - if (strlen(szId) && (strlen(szId) <= 0xA)) - { + CString qSql; + qSql.Format("EXEC WZ_UnityBattleField_SetReceivedWinnerItem_r '%s', %d, %d", szName, nServerCode, btReceived); - if (strlen(szCharName) && (strlen(szCharName) <= 0xA)) - { - - qSql.Format("EXEC WZ_UnityBattleFieldCancelToJoin_r '%s','%s',%d", - szId,szCharName,GameServerCode); - if (this->m_DBQuery.Exec(qSql)) - { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - *subResult = this->m_DBQuery.GetInt(1); - this->m_DBQuery.Clear(); - result = 1; - } - else - { - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][SetCancelToJionUnityBattlefiled] [%s][%d] Return %d,%s,%d ", - szName,GameServerCode,sqlReturn, __FILE__, __LINE__); - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - LogAddTD("Error-L3 [UBF][WZ_UnityBattleFieldCancelToJoin_r] [%s][%s][%d]", szId, szCharName, GameServerCode); - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - LogAddC(2,"%s] ؎֥ ߡׯ %s %d",szId, __FILE__, __LINE__); - result = 0; - } - } - else - { - LogAddC(2, "%s] ؎֥ ߡׯ %s %d",szId, __FILE__, __LINE__); - result = 0; - } + if (m_Query.Exec(qSql) == FALSE) + { + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleField_SetReceivedWinnerItem_r] [%s][%d][%d]", szName, nServerCode, btReceived); + m_Query.Clear(); + return FALSE; } - else + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) { - LogAddTD("[UBF] this->m_DBQuery.IsConnected: FALSE"); - *subResult = 0; - result = 0; + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleField_SetReceivedWinnerItem_r] [%s][%d] Return %d,%s,%d ", szName, nServerCode, sqlReturn, __FILE__, __LINE__); + m_Query.Clear(); + return FALSE; } - return result; + + SubResult = m_Query.GetInt(1); + + m_Query.Clear(); + return TRUE; } - -char ChaosCastleFinalDBSet::DeleteCharacterUnityBattlefiled(char *szAccountID, char *szName, __int16 GameServerCode) +BOOL ChaosCastleFinalDBSet::SetCancelToJionUnityBattlefiled(char* szAccountID, char* szName, WORD GameServerCode, BYTE& subResult) { - char result; - __int16 sqlReturn; - CString qSql; - char Return; - char szCharName[11]; - char szId[11]; + if (m_Query.IsConnected() == FALSE) + { + LogAddTD("[UBF] m_Query.IsConnected: FALSE"); + subResult = 0; + return FALSE; + } + + char szId[MAX_IDSTRING + 1]; + szId[MAX_IDSTRING] = '\0'; + memcpy(szId, szAccountID, MAX_IDSTRING); + + char szCharName[MAX_IDSTRING + 1]; + szCharName[MAX_IDSTRING] = '\0'; + memcpy(szCharName, szName, MAX_IDSTRING); + + BYTE Return = 0; - if (this->m_DBQuery.IsConnected()) + if (strlen(szId) == 0 || strlen(szId) > MAX_IDSTRING) { - szId[10] = 0; - memcpy(szId, szAccountID, 0xAu); - szCharName[10] = 0; - memcpy(szCharName, szName, 0xAu); - Return = 0; + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szId, __FILE__, __LINE__); + return FALSE; + } - if (strlen(szId) && (strlen(szId) <= 0xA)) - { - if (strlen(szCharName) && (strlen(szCharName) <= 0xA)) - { - qSql.Format("EXEC WZ_UnityBattleFieldDeleteCharacter_r '%s','%s',%d", - szId,szCharName,GameServerCode); - if (this->m_DBQuery.Exec(qSql)) - { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - Return = this->m_DBQuery.GetInt(1); - this->m_DBQuery.Clear(); - result = Return; - } - else - { - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldDeleteCharacter_r] [%s] Return %d,%s,%d ", - szCharName,sqlReturn, __FILE__, __LINE__); - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("Error-L3 [UBF][WZ_UnityBattleFieldDeleteCharacter_r] [%s][%s][%d]", - szId,szCharName,GameServerCode); - result = 2; - } - } - else - { - LogAddC(2, "%s] ؎֥ ߡׯ %s %d",szId, __FILE__, __LINE__); - result = 0; - } - } - else - { - LogAddC(2,"%s] ؎֥ ߡׯ %s %d",szId, __FILE__, __LINE__); - result = 0; - } + if (strlen(szCharName) == 0 || strlen(szCharName) > MAX_IDSTRING) + { + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szId, __FILE__, __LINE__); + return FALSE; } - else + + CString qSql; + qSql.Format("EXEC WZ_UnityBattleFieldCancelToJoin_r '%s','%s',%d", szId, szCharName, GameServerCode); + + if (m_Query.Exec(qSql) == FALSE) { - LogAddTD("[UBF] this->m_DBQuery.IsConnected: FALSE"); - result = 0; + LogAddTD("Error-L3 [UBF][WZ_UnityBattleFieldCancelToJoin_r] [%s][%s][%d]", szId, szCharName, GameServerCode); + m_Query.Clear(); + return FALSE; } - return result; -} + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) + { + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][SetCancelToJionUnityBattlefiled] [%s][%d] Return %d,%s,%d ", szName, GameServerCode, sqlReturn, __FILE__, __LINE__); + m_Query.Clear(); + return FALSE; + } -int ChaosCastleFinalDBSet::GetRealNameAndServerCode(char *szUBFName, PMSG_ANS_GET_UBF_REAL_NAME *pMsg) + subResult = m_Query.GetInt(1); + + m_Query.Clear(); + return TRUE; +} + +BYTE ChaosCastleFinalDBSet::DeleteCharacterUnityBattlefiled(char* szAccountID, char* szName, WORD GameServerCode) { - int result; - __int16 sqlReturn; - CString qSql; - char szCahrUBFName[11]; + if (m_Query.IsConnected() == FALSE) + { + LogAddTD("[UBF] m_Query.IsConnected: FALSE"); + return FALSE; + } + + char szId[MAX_IDSTRING + 1]; + szId[MAX_IDSTRING] = '\0'; + memcpy(szId, szAccountID, MAX_IDSTRING); + + char szCharName[MAX_IDSTRING + 1]; + szCharName[MAX_IDSTRING] = '\0'; + memcpy(szCharName, szName, MAX_IDSTRING); + BYTE Return = 0; - if (this->m_DBQuery.IsConnected()) + if (strlen(szId) == 0 || strlen(szId) > MAX_IDSTRING) { - szCahrUBFName[10] = 0; - memcpy(szCahrUBFName, szUBFName, 0xAu); - if (strlen(szCahrUBFName) && (strlen(szCahrUBFName) <= 0xA)) - { - qSql.Format("EXEC WZ_UnityBattleFieldGetRealName_r '%s'", - szCahrUBFName); - if (this->m_DBQuery.Exec(qSql)) - { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - this->m_DBQuery.GetStr("Name", pMsg->szRealName); - pMsg->iServerCode = this->m_DBQuery.GetInt("ServerCode"); - memcpy(pMsg->szUBFName, szCahrUBFName, 0xAu); - this->m_DBQuery.Clear(); - result = 1; - } - else - { - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldGetRealName_r] [%s] Return %d,%s,%d ", - szCahrUBFName,sqlReturn, __FILE__, __LINE__); - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - LogAddTD("Error-L3 [UBF][WZ_UnityBattleFieldGetRealName_r] [%s]", szCahrUBFName); - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - LogAddC(2,"%s] ؎֥ ߡׯ %s %d",szUBFName, __FILE__, __LINE__); - result = 0; - } + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szId, __FILE__, __LINE__); + return FALSE; } - else + + if (strlen(szCharName) == 0 || strlen(szCharName) > MAX_IDSTRING) { - LogAddTD("[UBF] this->m_DBQuery.IsConnected: FALSE"); - result = 0; + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szId, __FILE__, __LINE__); + return FALSE; } - return result; -} + CString qSql; + qSql.Format("EXEC WZ_UnityBattleFieldDeleteCharacter_r '%s','%s',%d", szId, szCharName, GameServerCode); -int ChaosCastleFinalDBSet::GetRealNameAndServerCode(char *szUBFName, char *szRealName, int *ServerCode, int IsUBFServer) + if (m_Query.Exec(qSql) == FALSE) + { + m_Query.Clear(); + LogAddTD("Error-L3 [UBF][WZ_UnityBattleFieldDeleteCharacter_r] [%s][%s][%d]", szId, szCharName, GameServerCode); + return 2; + } + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) + { + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldDeleteCharacter_r] [%s] Return %d,%s,%d ", szCharName, sqlReturn, __FILE__, __LINE__); + m_Query.Clear(); + return FALSE; + } + + Return = m_Query.GetInt(1); + + m_Query.Clear(); + return Return; +} + +BOOL ChaosCastleFinalDBSet::GetRealNameAndServerCode(char* szUBFName, LPPMSG_ANS_GET_UBF_REAL_NAME pMsg) { - int result; - __int16 sqlReturn; + if (m_Query.IsConnected() == FALSE) + { + LogAddTD("[UBF] m_Query.IsConnected: FALSE"); + return FALSE; + } + + char szCahrUBFName[MAX_IDSTRING + 1]; + szCahrUBFName[MAX_IDSTRING] = '\0'; + memcpy(szCahrUBFName, szUBFName, MAX_IDSTRING); + + if (strlen(szCahrUBFName) == 0 || strlen(szCahrUBFName) > MAX_IDSTRING) + { + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szUBFName, __FILE__, __LINE__); + return FALSE; + } + CString qSql; - char szCahrUBFName[11]; + qSql.Format("EXEC WZ_UnityBattleFieldGetRealName_r '%s'", szCahrUBFName); - if (this->m_DBQuery.IsConnected()) + if (m_Query.Exec(qSql) == FALSE) { - szCahrUBFName[10] = 0; - memcpy(szCahrUBFName, szUBFName, 0xAu); - strlen(szCahrUBFName); - if (strlen(szCahrUBFName) && (strlen(szCahrUBFName) <= 0xA)) - { - qSql.Format("EXEC WZ_UnityBattleFieldGetRealName_r '%s'",szCahrUBFName); - if (this->m_DBQuery.Exec(qSql)) - { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - this->m_DBQuery.GetStr("Name", szRealName); - *ServerCode = this->m_DBQuery.GetInt("ServerCode"); - this->m_DBQuery.Clear(); - result = 1; - } - else - { - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldGetRealName_r] [%s] Return %d,%s,%d ", - szCahrUBFName,sqlReturn, __FILE__, __LINE__); - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - LogAddTD("Error-L3 [UBF][WZ_UnityBattleFieldGetRealName_r] [%s]", szCahrUBFName); - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - LogAddC(2, "%s] ؎֥ ߡׯ %s %d",szUBFName, __FILE__, __LINE__); - result = 0; - } + LogAddTD("Error-L3 [UBF][WZ_UnityBattleFieldGetRealName_r] [%s]", szCahrUBFName); + m_Query.Clear(); + return FALSE; } - else + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) { - LogAddTD("[UBF] this->m_DBQuery.IsConnected: FALSE"); - result = 0; + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldGetRealName_r] [%s] Return %d,%s,%d ", szCahrUBFName, sqlReturn, __FILE__, __LINE__); + m_Query.Clear(); + return FALSE; } - return result; + + m_Query.GetStr("Name", pMsg->szRealName); + pMsg->iServerCode = m_Query.GetInt("ServerCode"); + memcpy(pMsg->szUBFName, szCahrUBFName, MAX_IDSTRING); + + m_Query.Clear(); + return TRUE; } +BOOL ChaosCastleFinalDBSet::GetRealNameAndServerCode(char* szUBFName, char* szRealName, int* ServerCode, BOOL IsUBFServer) +{ + if (m_Query.IsConnected() == FALSE) + { + LogAddTD("[UBF] m_Query.IsConnected: FALSE"); + return FALSE; + } + + char szCahrUBFName[MAX_IDSTRING + 1]; + szCahrUBFName[MAX_IDSTRING] = '\0'; + memcpy(szCahrUBFName, szUBFName, MAX_IDSTRING); + + if (strlen(szCahrUBFName) == 0 || strlen(szCahrUBFName) > MAX_IDSTRING) + { + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szUBFName, __FILE__, __LINE__); + return FALSE; + } + + CString qSql; + qSql.Format("EXEC WZ_UnityBattleFieldGetRealName_r '%s'", szCahrUBFName); + + if (m_Query.Exec(qSql) == FALSE) + { + LogAddTD("Error-L3 [UBF][WZ_UnityBattleFieldGetRealName_r] [%s]", szCahrUBFName); + m_Query.Clear(); + return FALSE; + } + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) + { + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldGetRealName_r] [%s] Return %d,%s,%d ", szCahrUBFName, sqlReturn, __FILE__, __LINE__); + m_Query.Clear(); + return FALSE; + } + + m_Query.GetStr("Name", szRealName); + *ServerCode = m_Query.GetInt("ServerCode"); -int ChaosCastleFinalDBSet::SetRewardInfoOfUnityBattleField(char *btResult, char btServerKind, char *szAccountID, char *szName, __int16 wServerCode, char btContentsType, char btSubContentsType, int iItemCode, char btItemCount, char btTakeState) + m_Query.Clear(); + return TRUE; +} + +BOOL ChaosCastleFinalDBSet::SetRewardInfoOfUnityBattleField(BYTE& btResult, BYTE btServerKind, char* szAccountID, char* szName, WORD wServerCode, BYTE btContentsType, BYTE btSubContentsType, int iItemCode, BYTE btItemCount, BYTE btTakeState) { - int result; - __int16 sqlReturn; + char szId[MAX_IDSTRING + 1]; + szId[MAX_IDSTRING] = '\0'; + memcpy(szId, szAccountID, MAX_IDSTRING); + + char szCahrName[MAX_IDSTRING + 1]; + szCahrName[MAX_IDSTRING] = '\0'; + memcpy(szCahrName, szName, MAX_IDSTRING); + + if (strlen(szCahrName) == 0 || strlen(szCahrName) > MAX_IDSTRING || strlen(szId) == 0 || strlen(szId) > MAX_IDSTRING) + { + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szCahrName, __FILE__, __LINE__); + return FALSE; + } + CString qSql; - char szCahrName[11]; - char szId[11]; - - szId[10] = 0; - memcpy(szId, szAccountID, 0xAu); - szCahrName[10] = 0; - memcpy(szCahrName, szName, 0xAu); - - if (strlen(szCahrName) && (strlen(szCahrName) <= 0xA) && - (strlen(szId)) && (strlen(szId) <= 0xA)) -#pragma message ("check this!!!") - { - qSql.Format("EXEC WZ_Set_RewardInfoOfUnityBattleField %d, '%s','%s', %d, %d, %d,% d, %d, %d ", - btServerKind, - szId, - szCahrName, - wServerCode, - btContentsType, - btSubContentsType, - iItemCode, - btItemCount, - btTakeState); - if (this->m_DBQuery.Exec(qSql)) - { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - *btResult = this->m_DBQuery.GetInt("Result"); - this->m_DBQuery.Clear(); - result = 1; - } - else - { - LogAddTD( - "Error-L3 [ChaosCastleFinalDBSet][WZ_Set_RewardInfoOfUnityBattleField] [%s][%s][%d][%d] Return %d,%s,%d ", - szId, - szCahrName, - btContentsType, - btTakeState, - sqlReturn, __FILE__, __LINE__); - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - LogAddTD("Error-L3 [UBF][WZ_Set_RewardInfoOfUnityBattleField] [%s][%s][%d][%d]", - szId, - szCahrName, - btContentsType, - btTakeState); - this->m_DBQuery.Clear(); - result = 0; - } + qSql.Format("EXEC WZ_Set_RewardInfoOfUnityBattleField %d, '%s','%s', %d, %d, %d, %d, %d, %d ", btServerKind, szId, szCahrName, wServerCode, btContentsType, btSubContentsType, iItemCode, btItemCount, btTakeState); + + if (m_Query.Exec(qSql) == FALSE) + { + LogAddTD("Error-L3 [UBF][WZ_Set_RewardInfoOfUnityBattleField] [%s][%s][%d][%d]", szId, szCahrName, btContentsType, btTakeState); + m_Query.Clear(); + return FALSE; } - else + + SQLRETURN sqlReturn = m_Query.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) { - LogAddC(2,"%s] ؎֥ ߡׯ %s %d",szCahrName, __FILE__, __LINE__); - result = 0; + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_Set_RewardInfoOfUnityBattleField] [%s][%s][%d][%d] Return %d,%s,%d ", szId, szCahrName, btContentsType, btTakeState, sqlReturn, __FILE__, __LINE__); + m_Query.Clear(); + return FALSE; } - return result; + + btResult = m_Query.GetInt("Result"); + + m_Query.Clear(); + return TRUE; } \ No newline at end of file diff --git a/DataServer/DbSet/ChaosCastleFinalDBSet.h b/DataServer/DbSet/ChaosCastleFinalDBSet.h index 77ec83d..eeaddd0 100644 --- a/DataServer/DbSet/ChaosCastleFinalDBSet.h +++ b/DataServer/DbSet/ChaosCastleFinalDBSet.h @@ -1,33 +1,40 @@ +#ifndef __CHAOSCASTLEFINALDBSET_H__ +#define __CHAOSCASTLEFINALDBSET_H__ #pragma once -//#include "Include\ProDef.h" -#include "..\Include\Sprodef.h" +#include "..\Include\Sprodef.h" #include "DBConBase.h" class ChaosCastleFinalDBSet : public CDBConBase { public: - ChaosCastleFinalDBSet(); virtual ~ChaosCastleFinalDBSet(); - int Connect(); - int ReqCCFRanking(_stCCFRankingInfo *CCFRankingInfo, int nCCFtype, char *btUserCount, int nServerCategory); // idb - void Save_CCF_Point(char *Name, int nPoint, int nCCFType); // idb - int CCFRankRenew(char byCCFType); // idb - void GetPermission(char *Name, int nCCFType, int *nReturn); // idb - int Save_ChaosCastle_KillPoint(char *szName, int nPoint, int CastleIndex, int *SubResult, int *CurrntPoint, int *TotalPoint); // idb - int GetUBFAccountUserInfo(char *szAccountID, char *szName, int nServerCode, int IsUnityBattleFieldServer, PMSG_ANS_UBF_ACCOUNT_USERINFO *pMsg); // idb - int RegisterUBFAccountUser(char *szAccountID, char *szName, char *szBattleName, int nServerCode, int nRegisterState, int nRegisterMonth, int nRegisterDay, char *nResult, unsigned __int16 *nLeftSec); // idb - bool CopyUBFAccountUser(char *szAccountID, char *szName, __int16 GameServerCode, BYTE* subResult); // idb - bool CopyUBFAccountUserPromotionMode(char *szAccountID, char *szName, __int16 GameServerCode, BYTE* subResult); // idb - int GetWinAllRewardInfoOfUBF(char *szCharName, int nServerCode, char btServerKind, char btContentsType, PMSG_ANS_UBF_GET_REWARD *pMsg); // idb - int SetReceivedWinnerItemOfUBF(char *szCharName, int nServerCode, char btReceived, char *SubResult); // idb - int SetCancelToJionUnityBattlefiled(char *szAccountID, char *szName, __int16 GameServerCode, char *subResult); // idb - char DeleteCharacterUnityBattlefiled(char *szAccountID, char *szName, __int16 GameServerCode); // idb - int GetRealNameAndServerCode(char *szUBFName, PMSG_ANS_GET_UBF_REAL_NAME *pMsg); // idb - int GetRealNameAndServerCode(char *szUBFName, char *szRealName, int *ServerCode, int IsUBFServer); // idb - int SetRewardInfoOfUnityBattleField(char *btResult, char btServerKind, char *szAccountID, char *szName, __int16 wServerCode, char btContentsType, char btSubContentsType, int iItemCode, char btItemCount, char btTakeState); // idb - -}; \ No newline at end of file + BOOL Connect(); + + BOOL ReqCCFRanking(_stCCFRankingInfo* CCFRankingInfo, int nCCFtype, BYTE& btUserCount, int nServerCategory); + void Save_CCF_Point(char* Name, int nPoint, int nCCFType); + BOOL CCFRankRenew(BYTE byCCFType); + void GetPermission(char* Name, int nCCFType, int& nReturn); + + BOOL Save_ChaosCastle_KillPoint(char* szName, int nPoint, int CastleIndex, int& SubResult, int& CurrntPoint, int& TotalPoint); + + BOOL GetUBFAccountUserInfo(char* szAccountID, char* szName, int nServerCode, BOOL IsUnityBattleFieldServer, LPPMSG_ANS_UBF_ACCOUNT_USERINFO pMsg); + BOOL RegisterUBFAccountUser(char* szAccountID, char* szName, char* szBattleName, int nServerCode, int nRegisterState, int nRegisterMonth, int nRegisterDay, BYTE& nResult, WORD& nLeftSec); + BOOL CopyUBFAccountUser(char* szAccountID, char* szName, WORD GameServerCode, BYTE& subResult); + BOOL CopyUBFAccountUserPromotionMode(char* szAccountID, char* szName, WORD GameServerCode, BYTE& subResult); + BOOL GetWinAllRewardInfoOfUBF(char* szCharName, int nServerCode, BYTE btServerKind, BYTE btContentsType, LPPMSG_ANS_UBF_GET_REWARD pMsg); + BOOL SetReceivedWinnerItemOfUBF(char* szCharName, int nServerCode, BYTE btReceived, BYTE& SubResult); + BOOL SetCancelToJionUnityBattlefiled(char* szAccountID, char* szName, WORD GameServerCode, BYTE& subResult); + BYTE DeleteCharacterUnityBattlefiled(char* szAccountID, char* szName, WORD GameServerCode); + BOOL GetRealNameAndServerCode(char* szUBFName, LPPMSG_ANS_GET_UBF_REAL_NAME pMsg); + BOOL GetRealNameAndServerCode(char* szUBFName, char* szRealName, int* ServerCode, BOOL IsUBFServer); + BOOL SetRewardInfoOfUnityBattleField(BYTE& btResult, BYTE btServerKind, char* szAccountID, char* szName, WORD wServerCode, BYTE btContentsType, BYTE btSubContentsType, int iItemCode, BYTE btItemCount, BYTE btTakeState); + +public: + CQuery m_Query; +}; + +#endif \ No newline at end of file diff --git a/DataServer/DbSet/CharDBSet.cpp b/DataServer/DbSet/CharDBSet.cpp index 75cb2c2..f3f47fa 100644 --- a/DataServer/DbSet/CharDBSet.cpp +++ b/DataServer/DbSet/CharDBSet.cpp @@ -1,60 +1,50 @@ -// CharDBSet.cpp: implementation of the CCharDBSet class. -// Decompilation Completed -> All Same as WebZen -////////////////////////////////////////////////////////////////////// - -#include "stdafx.h" +#include "stdafx.h" #include "CharDBSet.h" #include "..\MainFrm.h" -////////////////////////////////////////////////////////////////////// -// Construction/Destruction -////////////////////////////////////////////////////////////////////// - CCharDBSet::CCharDBSet() { - } CCharDBSet::~CCharDBSet() { - } BOOL CCharDBSet::Connect() { - if( m_DBQuery.Connect(3, szDbConnectDsn, szDbConnectID, szDbConnectPass) == FALSE ) + if (m_DBQuery.Connect(3, szDbConnectDsn, szDbConnectID, szDbConnectPass) == FALSE) { MsgBox("Character DB Connect Fail"); return FALSE; } - if(this->CheckSP_WZ_CreateCharacterGetVersion() == FALSE) + if (CheckSP_WZ_CreateCharacterGetVersion() == FALSE) { - MsgBox("Error : WZ_CreateChracter Stored Procedure Version : %d", this->m_CreateCharacterVer); + MsgBox("Error : WZ_CreateChracter Stored Procedure Version : %d", m_CreateCharacterVer); return FALSE; } - this->DefaultCreateCharacterAllDelete(); + DefaultCreateCharacterAllDelete(); + DefaultCharacterCreate(DB_CLASS_TYPE_WIZARD); + DefaultCharacterCreate(DB_CLASS_TYPE_KNIGHT); + DefaultCharacterCreate(DB_CLASS_TYPE_ELF); + DefaultCharacterCreate(DB_CLASS_TYPE_MAGUMSA); + DefaultCharacterCreate(DB_CLASS_TYPE_DARKLORD); + DefaultCharacterCreate(DB_CLASS_TYPE_SUMMONER); + DefaultCharacterCreate(DB_CLASS_TYPE_MONK); + DefaultCharacterCreate(DB_CLASS_TYPE_GROWLANCER); - this->DefaultCharacterCreate(DB_CLASS_TYPE_WIZARD); - this->DefaultCharacterCreate(DB_CLASS_TYPE_KNIGHT); - this->DefaultCharacterCreate(DB_CLASS_TYPE_ELF); - this->DefaultCharacterCreate(DB_CLASS_TYPE_MAGUMSA); - this->DefaultCharacterCreate(DB_CLASS_TYPE_DARKLORD); - this->DefaultCharacterCreate(DB_CLASS_TYPE_SUMMONER); - this->DefaultCharacterCreate(DB_CLASS_TYPE_MONK); - this->DefaultCharacterCreate(DB_CLASS_TYPE_LANCER); return TRUE; } -BOOL CCharDBSet::GetCharacter(char *name) +BOOL CCharDBSet::GetCharacter(char* name) { CString qSQL; char buffer[256]; qSQL.Format("SELECT Name FROM Character WHERE Name='%s'", name); - if(m_DBQuery.ExecGetStr(qSQL, buffer) == FALSE) + if (m_DBQuery.ExecGetStr(qSQL, buffer) == FALSE) { return FALSE; } @@ -64,72 +54,68 @@ BOOL CCharDBSet::GetCharacter(char *name) int CCharDBSet::DeleteCharacter(char* AccoundID, char* CharacterID) { - if( strlen(CharacterID) < 1) + if (strlen(CharacterID) < 1) { return 3; } CString qSql; - qSql.Format("DELETE FROM Character WHERE AccountID='%s' AND Name='%s' ", AccoundID, CharacterID); - if(m_DBQuery.Exec(qSql) == FALSE) + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return 2; } m_DBQuery.Clear(); - return 1; } int CCharDBSet::DeleteCharacter_DregInfo(char* CharacterID) { CString qSql; - qSql.Format("EXEC WZ_Delete_C_DregInfo '%s'", CharacterID); - if(m_DBQuery.Exec(qSql) == FALSE) + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return 2; } m_DBQuery.Clear(); - return 1; } int CCharDBSet::CreateCharacter(CString accountId, CString Name, BYTE Class) { CString qSql; - int result = 3; qSql.Format("WZ_CreateCharacter '%s', '%s', '%d'", accountId, Name, Class); - if(m_DBQuery.Exec(qSql) == FALSE) + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); - if (gbIsJumpingServer) - { - this->CreateCharacterMoneyUpdate(Name); - } return result; } - if(m_DBQuery.Fetch() != SQL_NO_DATA) + if (m_DBQuery.Fetch() != SQL_NO_DATA) { result = m_DBQuery.GetInt(1); } m_DBQuery.Clear(); + if (gbIsJumpingServer != FALSE) + { + CreateCharacterMoneyUpdate(Name); + } + return result; } -__int64 CCharDBSet::DefaultCharacterCreate(BYTE classskin) +BOOL CCharDBSet::DefaultCharacterCreate(BYTE classskin) { CharacterInfo_Struct tCharInfo; BYTE defclass; @@ -137,7 +123,7 @@ __int64 CCharDBSet::DefaultCharacterCreate(BYTE classskin) defclass = classskin >> 4; - if(defclass > MAX_CLASSTYPE-1) + if (defclass > MAX_CLASSTYPE - 1) { MsgBox("error-L3 : Class over value %s %d", __FILE__, __LINE__); defclass = CLASS_KNIGHT; @@ -164,49 +150,41 @@ __int64 CCharDBSet::DefaultCharacterCreate(BYTE classskin) tCharInfo.PkLevel = PK_LEVEL_DEFAULT; tCharInfo.PkTime = 0; -#ifdef PERSONAL_SHOP_20040113 - for (n = 0; n < MAX_INVENTORY_EXTEND; n++) - { - memset(&tCharInfo.dbInventory[MAX_ITEMDBBYTE * n], 0xFF, MAX_ITEMDBBYTE); - } -#else for (n = 0; n < MAX_INVENTORY; n++) { memset(&tCharInfo.dbInventory[MAX_ITEMDBBYTE * n], 0xFF, MAX_ITEMDBBYTE); } -#endif - for ( n = 0; n < MAX_MAGIC; n++ ) + for (n = 0; n < MAX_MAGIC; n++) { tCharInfo.dbMagicList[3 * n] = 0xFF; tCharInfo.dbMagicList[3 * n + 1] = 0; tCharInfo.dbMagicList[3 * n + 2] = 0; } - - for ( n = 0; n < MAX_DBQUEST; n++ ) + + for (n = 0; n < MAX_DBQUEST; n++) { tCharInfo.dbQuest[n] = 0xFF; } - if(defclass == CLASS_WIZARD) + if (defclass == CLASS_WIZARD) { tCharInfo.dbMagicList[0] = AT_SKILL_ENERGYBALL; } - if(defclass == CLASS_DARKLORD) + if (defclass == CLASS_DARKLORD) { tCharInfo.dbMagicList[0] = AT_SKILL_SPEAR; } - ItemByteConvert16(tCharInfo.dbInventory, DCInfo.DefClass[defclass].Equipment, MAX_EQUIPMENT+2); - - this->DefaultCreateCharacterInsert(&tCharInfo); + ItemByteConvert16(tCharInfo.dbInventory, DCInfo.DefClass[defclass].Equipment, MAX_EQUIPMENT + 3); + DefaultCreateCharacterInsert(&tCharInfo); return TRUE; } void CCharDBSet::SetSP_WZ_CreateCharacterGetVersion(int version) { - this->m_CreateCharacterVer = version; + m_CreateCharacterVer = version; } BOOL CCharDBSet::CheckSP_WZ_CreateCharacterGetVersion() @@ -216,16 +194,16 @@ BOOL CCharDBSet::CheckSP_WZ_CreateCharacterGetVersion() qSql.Format("exec WZ_CreateCharacter_GetVersion"); - if(m_DBQuery.Exec(qSql) == FALSE) + if (m_DBQuery.Exec(qSql) == FALSE) { return FALSE; } - if(m_DBQuery.Fetch() != SQL_NO_DATA) + if (m_DBQuery.Fetch() != SQL_NO_DATA) { version = m_DBQuery.GetInt(1); - if(version == this->m_CreateCharacterVer) + if (version == m_CreateCharacterVer) { m_DBQuery.Clear(); return TRUE; @@ -233,34 +211,32 @@ BOOL CCharDBSet::CheckSP_WZ_CreateCharacterGetVersion() } m_DBQuery.Clear(); - return FALSE; } BOOL CCharDBSet::DefaultCreateCharacterAllDelete() { - if(m_DBQuery.Exec("DELETE FROM DefaultClassType") == FALSE) + if (m_DBQuery.Exec("DELETE FROM DefaultClassType") == FALSE) { LogAddTD("error-L3 : DELETE FROM DefaultClassType %s %d", __FILE__, __LINE__); return FALSE; } + return TRUE; } BOOL CCharDBSet::DefaultCreateCharacterInsert(LPCharacterInfo_Struct lpObj) { CString qSql; - qSql.Format("INSERT INTO DefaultClassType (Level, Class, Strength, Dexterity, Vitality, Energy, Life, MaxLife, Mana, MaxMana, MapNumber, MapPosX, MapPosY, DbVersion, LevelUpPoint,Leadership) VALUES (%d,%d,%d,%d,%d, %d, %f,%f,%f,%f, %d,%d,%d, %d, %d, %d)", lpObj->Level, lpObj->Class, lpObj->Strength, lpObj->Dexterity, lpObj->Vitality, lpObj->Energy, lpObj->Life, lpObj->MaxLife, lpObj->Mana, lpObj->MaxMana, lpObj->MapNumber, lpObj->MapX, lpObj->MapY, 3, lpObj->LevelUpPoint, lpObj->Leadership); - if(m_DBQuery.Exec(qSql) == FALSE) + if (m_DBQuery.Exec(qSql) == FALSE) { return FALSE; } - //qSql.Format("UPDATE DefaultClassType SET Inventory=? where Class=%d", lpObj->Class); - qSql.Format("WZ_SetDefaultCharacter %d, ?",lpObj->Class); + qSql.Format("WZ_SetDefaultCharacter %d, ?", lpObj->Class); m_DBQuery.WriteBlob(qSql, lpObj->dbInventory, MAX_DBINVENTORY); qSql.Format("UPDATE DefaultClassType SET MagicList=? where Class=%d", lpObj->Class); @@ -277,7 +253,7 @@ BYTE CCharDBSet::CurCharNameSave(char* Name) CString qSql; qSql.Format("INSERT INTO T_CurCharName (Name) VALUES('%s')", Name); - if(m_DBQuery.Exec(qSql) == FALSE) + if (m_DBQuery.Exec(qSql) == FALSE) { return 0x00; } @@ -287,15 +263,10 @@ BYTE CCharDBSet::CurCharNameSave(char* Name) BYTE CCharDBSet::SaveCharacter(char* Name, LPCharacterInfo_Struct lpObj) { - int sresult; - char chBuffer[512]; - char result; + BYTE result = 1; CString qSql; - result = 1; - strcpy(chBuffer, "UPDATE Character SET cLevel=%d, Class=%d, LevelUpPoint=%d, Experience=%d, Strength=%d, Dexterity=%d, Vitality=%d, En" - "ergy=%d, Money=%d, Life=%f, MaxLife=%f, Mana=%f, MaxMana=%f, MapNumber=%d, MapPosX=%d, MapPosY=%d, MapDir=%d, PkCount=%d, "); - memset(&chBuffer[239], 0, 0x111u); + char chBuffer[512] = "UPDATE Character SET cLevel=%d, Class=%d, LevelUpPoint=%d, Experience=%d, Strength=%d, Dexterity=%d, Vitality=%d, Energy=%d, Money=%d, Life=%f, MaxLife=%f, Mana=%f, MaxMana=%f, MapNumber=%d, MapPosX=%d, MapPosY=%d, MapDir=%d, PkCount=%d, "; strcat(chBuffer, " PkLevel=%d, "); strcat(chBuffer, " PkTime=%d, "); strcat(chBuffer, " DbVersion=3, "); @@ -305,76 +276,46 @@ BYTE CCharDBSet::SaveCharacter(char* Name, LPCharacterInfo_Struct lpObj) strcat(chBuffer, " LDate = getdate() "); strcat(chBuffer, " where Name = '%s' "); - qSql.Format(chBuffer, - lpObj->Level, - lpObj->Class, - lpObj->LevelUpPoint, - lpObj->Experience, - lpObj->Strength, - lpObj->Dexterity, - lpObj->Vitality, - lpObj->Energy, - lpObj->Money, - lpObj->Life, - lpObj->MaxLife, - lpObj->Mana, - lpObj->MaxMana, - lpObj->MapNumber, - lpObj->MapX, - lpObj->MapY, - lpObj->Dir, - lpObj->PkCount, - lpObj->PkLevel, - lpObj->PkTime, - lpObj->Leadership, - lpObj->ChatLitmitTime, - lpObj->FruitPoint, - Name); - if (this->m_DBQuery.Exec(qSql)) - { - qSql.Format("WZ_SetSaveItem '%s', '%s', ?", lpObj->AccountID, Name); - this->m_DBQuery.WriteBlob(qSql, lpObj->dbInventory, 3792); - qSql.Format("UPDATE Character SET MagicList=? where Name='%s'", Name); - this->m_DBQuery.WriteBlob(qSql, lpObj->dbMagicList, 450); - qSql.Format("UPDATE Character SET Quest=? where Name='%s'", Name); - - this->m_DBQuery.WriteBlob(qSql, lpObj->dbQuest, 50); - sresult = 1; - } - else + qSql.Format(chBuffer, lpObj->Level, lpObj->Class, lpObj->LevelUpPoint, lpObj->Experience, lpObj->Strength, lpObj->Dexterity, lpObj->Vitality, lpObj->Energy, lpObj->Money, lpObj->Life, lpObj->MaxLife, lpObj->Mana, lpObj->MaxMana, lpObj->MapNumber, lpObj->MapX, lpObj->MapY, lpObj->Dir, lpObj->PkCount, lpObj->PkLevel, lpObj->PkTime, lpObj->Leadership, lpObj->ChatLitmitTime, lpObj->FruitPoint, Name); + + if (m_DBQuery.Exec(qSql) == FALSE) { - sresult = 0; + return 0; } - return sresult; - return 0x01; + qSql.Format("WZ_SetSaveItem '%s', '%s', ?", lpObj->AccountID, Name); + m_DBQuery.WriteBlob(qSql, lpObj->dbInventory, MAX_DBINVENTORY); + + qSql.Format("UPDATE Character SET MagicList=? where Name='%s'", Name); + m_DBQuery.WriteBlob(qSql, lpObj->dbMagicList, MAX_DBMAGIC); + + qSql.Format("UPDATE Character SET Quest=? where Name='%s'", Name); + m_DBQuery.WriteBlob(qSql, lpObj->dbQuest, MAX_DBQUEST); + + return 1; } -//#define OLD_GETCHAR -#ifdef OLD_GETCHAR + BOOL CCharDBSet::GetCharacter(char* szAccountID, char* Name, LPCharacterInfo_Struct lpObj) { CString qSql; char chBuffer[512] = "SELECT AccountID, cLevel, Class, LevelUpPoint, Experience, Strength, Dexterity, Vitality, Energy, Money, Life, MaxLife, Mana, MaxMana, MapNumber, MapPosX, MapPosY, MapDir, PkCount, PkLevel, PkTime, CtlCode,"; - strcat(chBuffer, " Leadership, "); - strcat(chBuffer, " ChatLimitTime, "); strcat(chBuffer, " FruitPoint, "); - strcat(chBuffer, " ExGameServerCode, "); strcat(chBuffer, " ExtendedInvenCount, "); strcat(chBuffer, " DbVersion "); strcat(chBuffer, " FROM Character where Name = '%s' "); qSql.Format(chBuffer, Name); - if(m_DBQuery.Exec(qSql) == FALSE) + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return FALSE; } - if(m_DBQuery.Fetch() == SQL_NO_DATA) + if (m_DBQuery.Fetch() == SQL_NO_DATA) { m_DBQuery.Clear(); return FALSE; @@ -382,7 +323,7 @@ BOOL CCharDBSet::GetCharacter(char* szAccountID, char* Name, LPCharacterInfo_Str m_DBQuery.GetStr("AccountID", lpObj->AccountID); - if( strcmp(lpObj->AccountID, szAccountID) != 0) + if (strcmp(lpObj->AccountID, szAccountID) != 0) { LogAddC(LOGC_RED, "error-L1 :ij¸¯ÅÍÀÇ °èÁ¤°ú ¿äûÇÑ °èÁ¤ÀÌ ¸ÂÁö¾Ê´Ù.%s %s", lpObj->AccountID, szAccountID); m_DBQuery.Clear(); @@ -412,65 +353,64 @@ BOOL CCharDBSet::GetCharacter(char* szAccountID, char* Name, LPCharacterInfo_Str int ctlcode = m_DBQuery.GetInt("CtlCode"); - if(ctlcode < 0) + if (ctlcode < 0) { ctlcode = 0; } lpObj->CtlCode = ctlcode; - + int dbversion = m_DBQuery.GetInt("DbVersion"); - - if(dbversion < 0) + + if (dbversion < 0) { dbversion = 0; } lpObj->DbVersion = dbversion; - + int leadership = m_DBQuery.GetInt("Leadership"); - if(leadership < 0) + if (leadership < 0) { leadership = 0; } int ChatLitmitTime = m_DBQuery.GetInt("ChatLimitTime"); - - if(ChatLitmitTime < 0) + + if (ChatLitmitTime < 0) { ChatLitmitTime = 0; } lpObj->Leadership = leadership; lpObj->ChatLitmitTime = ChatLitmitTime; - + int iFruitPoint = m_DBQuery.GetInt("FruitPoint"); - if(iFruitPoint < 0) + if (iFruitPoint < 0) { lpObj->FruitPoint = 0; LogAddC(LOGC_RED, "[Fruit System] [%s][%s] Fruit Ä÷³ %d -> 0 À¸·Î ¼öÁ¤ ", lpObj->AccountID, Name, iFruitPoint); } + else { lpObj->FruitPoint = iFruitPoint; } lpObj->btExtendedInvenCount = m_DBQuery.GetInt("ExtendedInvenCount"); - //lpObj->sExGameServerCode = m_DBQuery.GetInt("ExGameServerCode"); - m_DBQuery.Clear(); - /////////////////////////////////// + qSql.Format("SELECT ExtendedWarehouseCount from AccountCharacter where Id='%s'", szAccountID); - if(m_DBQuery.Exec(qSql) == FALSE) + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return FALSE; } - if(m_DBQuery.Fetch() == SQL_NO_DATA) + if (m_DBQuery.Fetch() == SQL_NO_DATA) { m_DBQuery.Clear(); return FALSE; @@ -478,283 +418,110 @@ BOOL CCharDBSet::GetCharacter(char* szAccountID, char* Name, LPCharacterInfo_Str lpObj->btExtendedWarehouseCount = m_DBQuery.GetInt("ExtendedWarehouseCount"); m_DBQuery.Clear(); - /////////////////////////////////// - - /////////////////////////////////// - qSql.Format("SELECT Inventory from Character where Name='%s'", Name); + qSql.Format("WZ_GetLoadInventory '%s', '%s'", szAccountID, Name); int nRet = m_DBQuery.ReadBlob(qSql, lpObj->dbInventory); - if(nRet == 0) + if (nRet == 0) { - for(int n = 0; n < MAX_DBINVENTORY; n++) + for (int i = 0; i < MAX_DBINVENTORY; i++) { - lpObj->dbInventory[n] = 0xFF; + lpObj->dbInventory[i] = 0xFF; } } - else if(nRet == -1) + + else if (nRet == -1) { return FALSE; } - else if(nRet == 760) + + else if (nRet == 760) { - for(int n = 760; n < MAX_DBINVENTORY; n++) + for (int i = 760; i < MAX_DBINVENTORY; i++) { - lpObj->dbInventory[n] = 0xFF; + lpObj->dbInventory[i] = 0xFF; } } - else if(nRet > 0 && nRet < MAX_DBINVENTORY) + + else if (nRet > 0 && nRet < MAX_DBINVENTORY) { - for(int n = nRet; n < MAX_DBINVENTORY; n++) + for (int i = nRet; i < MAX_DBINVENTORY; i++) { - lpObj->dbInventory[n] = 0xFF; + lpObj->dbInventory[i] = 0xFF; } } - /////////////////////////////////// - /////////////////////////////////// qSql.Format("SELECT MagicList from Character where Name='%s'", Name); nRet = m_DBQuery.ReadBlob(qSql, lpObj->dbMagicList); - if(nRet == 0) + if (nRet == 0) { - for (int n = 0; n < MAX_MAGIC; n++ ) + for (int n = 0; n < MAX_MAGIC; n++) { lpObj->dbMagicList[3 * n] = 0xFF; lpObj->dbMagicList[3 * n + 1] = 0; lpObj->dbMagicList[3 * n + 2] = 0; } } - else if(nRet == -1) + + else if (nRet == -1) { return FALSE; } - else if(nRet > 0 && nRet < MAX_DBMAGIC) - { - int n = nRet; - while(n < MAX_DBMAGIC) + else if (nRet > 0 && nRet < MAX_MAGIC) + { + for (int i = nRet; i < MAX_MAGIC; i += 3) { - lpObj->dbMagicList[n] = 0xFF; - lpObj->dbMagicList[n + 1] = 0; - lpObj->dbMagicList[n + 2] = 0; - n += 3; + lpObj->dbMagicList[i] = 0xFF; + lpObj->dbMagicList[i + 1] = 0; + lpObj->dbMagicList[i + 2] = 0; } } - /////////////////////////////////// - /////////////////////////////////// qSql.Format("SELECT Quest from Character where Name='%s'", Name); nRet = m_DBQuery.ReadBlob(qSql, lpObj->dbQuest); - if(nRet == 0) + if (nRet == 0) { - for (int n = 0; n < MAX_DBQUEST; n++ ) + for (int i = 0; i < MAX_DBQUEST; i++) { - lpObj->dbQuest[n] = 0xFF; + lpObj->dbQuest[i] = 0xFF; } } - else if(nRet == -1) - { - return FALSE; - } - /////////////////////////////////// - - return TRUE; -} -#else -int CCharDBSet::GetCharacter(char *szAccountID, char *Name, CharacterInfo_Struct *lpObj) -{ - CString qSql; - - char chBuffer[512] = "SELECT AccountID, cLevel, Class, LevelUpPoint, Experience, Strength, Dexterity, Vitality, Energy, Money, Life, MaxLife, Mana, MaxMana, MapNumber, MapPosX, MapPosY, MapDir, PkCount, PkLevel, PkTime, CtlCode,"; - - strcat(chBuffer, " Leadership, "); - strcat(chBuffer, " ChatLimitTime, "); - strcat(chBuffer, " FruitPoint, "); - strcat(chBuffer, " ExtendedInvenCount, "); - strcat(chBuffer, " DbVersion "); - strcat(chBuffer, " FROM Character where Name = '%s' "); - - qSql.Format(chBuffer, Name); - if (!this->m_DBQuery.Exec(qSql)) + else if (nRet == -1) { - this->m_DBQuery.Clear(); - return 0; - } - if (this->m_DBQuery.Fetch() == SQL_NO_DATA) - { - this->m_DBQuery.Clear(); - return 0; - } - this->m_DBQuery.GetStr("AccountID", lpObj->AccountID); - - if (strcmp(lpObj->AccountID, szAccountID) != 0) - { - LogAddC(LOGC_RED, "error-L1 :ij¸¯ÅÍÀÇ °èÁ¤°ú ¿äûÇÑ °èÁ¤ÀÌ ¸ÂÁö¾Ê´Ù.%s %s", lpObj->AccountID, szAccountID); - this->m_DBQuery.Clear(); - return 0; - } - lpObj->Level = this->m_DBQuery.GetInt("cLevel"); - lpObj->Class = this->m_DBQuery.GetInt("Class"); - lpObj->LevelUpPoint = this->m_DBQuery.GetInt("LevelUpPoint"); - lpObj->Experience = this->m_DBQuery.GetInt("Experience"); - lpObj->Strength = this->m_DBQuery.GetInt("Strength"); - lpObj->Dexterity = this->m_DBQuery.GetInt("Dexterity"); - lpObj->Vitality = this->m_DBQuery.GetInt("Vitality"); - lpObj->Energy = this->m_DBQuery.GetInt("Energy"); - lpObj->Money = this->m_DBQuery.GetInt("Money"); - lpObj->Life = this->m_DBQuery.GetFloat("Life"); - lpObj->MaxLife = this->m_DBQuery.GetFloat("MaxLife"); - lpObj->Mana = this->m_DBQuery.GetFloat("Mana"); - lpObj->MaxMana = this->m_DBQuery.GetFloat("MaxMana"); - lpObj->MapNumber = this->m_DBQuery.GetInt("MapNumber"); - lpObj->MapX = this->m_DBQuery.GetInt("MapPosX"); - lpObj->MapY = this->m_DBQuery.GetInt("MapPosY"); - lpObj->Dir = this->m_DBQuery.GetInt("MapDir"); - lpObj->PkCount = this->m_DBQuery.GetInt("PkCount"); - lpObj->PkLevel = this->m_DBQuery.GetInt("PkLevel"); - lpObj->PkTime = this->m_DBQuery.GetInt("PkTime"); - int ctlcode = this->m_DBQuery.GetInt("CtlCode"); - - if (ctlcode < 0) - ctlcode = 0; - lpObj->CtlCode = ctlcode; - int dbversion = this->m_DBQuery.GetInt("DbVersion"); - if (dbversion < 0) - dbversion = 0; - lpObj->DbVersion = dbversion; - int leadership = this->m_DBQuery.GetInt("Leadership"); - if (leadership < 0) - leadership = 0; - int ChatLitmitTime = this->m_DBQuery.GetInt("ChatLimitTime"); - if (ChatLitmitTime < 0) - ChatLitmitTime = 0; - lpObj->Leadership = leadership; - lpObj->ChatLitmitTime = ChatLitmitTime; - int iFruitPoint = this->m_DBQuery.GetInt("FruitPoint"); - if (iFruitPoint >= 0) - { - lpObj->FruitPoint = iFruitPoint; - } - else - { - lpObj->FruitPoint = 0; - LogAddC(LOGC_RED, "[Fruit System] [%s][%s] Fruit Ä÷³ %d -> 0 À¸·Î ¼öÁ¤ ", lpObj->AccountID, Name, iFruitPoint); - } - lpObj->btExtendedInvenCount = this->m_DBQuery.GetInt("ExtendedInvenCount"); - this->m_DBQuery.Clear(); - qSql.Format("SELECT ExtendedWarehouseCount from AccountCharacter where Id='%s'", szAccountID); - - if (!this->m_DBQuery.Exec(qSql)) - { - this->m_DBQuery.Clear(); - return 0; - } - if (this->m_DBQuery.Fetch() == 100) - { - this->m_DBQuery.Clear(); - return 0; - } - lpObj->btExtendedWarehouseCount = this->m_DBQuery.GetInt("ExtendedWarehouseCount"); - this->m_DBQuery.Clear(); - - qSql.Format("WZ_GetLoadInventory '%s', '%s'", szAccountID, Name); - - int nRet = this->m_DBQuery.ReadBlob(qSql, lpObj->dbInventory); - if (nRet) - { - if (nRet == -1) - { - return 0; - } - if (nRet == 760) - { - for (int j = 760; j < MAX_DBINVENTORY; ++j) - lpObj->dbInventory[j] = 0xFF; - } - else if (nRet > 0 && nRet < MAX_DBINVENTORY) - { - for (int k = nRet; k < MAX_DBINVENTORY; ++k) - lpObj->dbInventory[k] = 0xFF; - } - } - else - { - for (int i = 0; i < MAX_DBINVENTORY; ++i) - lpObj->dbInventory[i] = 0xFF; - } - qSql.Format("SELECT MagicList from Character where Name='%s'", Name); - - nRet = this->m_DBQuery.ReadBlob(qSql, lpObj->dbMagicList); - if (nRet) - { - if (nRet == -1) - { - return 0; - } - if (nRet > 0 && nRet < MAX_MAGIC) - { - for (int l = nRet; l < MAX_MAGIC; l += 3) - { - lpObj->dbMagicList[l] = 0xFF; - lpObj->dbMagicList[l + 1] = 0; - lpObj->dbMagicList[l + 2] = 0; - } - } - } - else - { - for (int n = 0; n < MAX_MAGIC; ++n) - { - lpObj->dbMagicList[3 * n] = 0xFF; - lpObj->dbMagicList[3 * n + 1] = 0; - lpObj->dbMagicList[3 * n + 2] = 0; - } - } - qSql.Format("SELECT Quest from Character where Name='%s'", Name); - nRet = this->m_DBQuery.ReadBlob(qSql, lpObj->dbQuest); - if (nRet) - { - if (nRet == -1) - { - return 0; - } - } - else - { - for (int m = 0; m < MAX_DBQUEST; ++m) - lpObj->dbQuest[m] = 0xFF; + return FALSE; } - /////////////////////////////////// return TRUE; } -#endif -void CCharDBSet::SaveMacroInfo(char* szAccountID, char* Name, BYTE* lpMacroInfo) + +void CCharDBSet::SaveMacroInfo(char* szAccountID, char* Name, LPBYTE lpMacroInfo) { CString qSql; qSql.Format("EXEC WZ_MACROINFO_SAVE '%s', '%s', ?", szAccountID, Name); - m_DBQuery.WriteBlob(qSql, lpMacroInfo, 256); + m_DBQuery.WriteBlob(qSql, lpMacroInfo, 511); } -BOOL CCharDBSet::LoadMacroInfo(char* szAccountID, char* Name, BYTE* lpMacroInfo) +BOOL CCharDBSet::LoadMacroInfo(char* szAccountID, char* Name, LPBYTE lpMacroInfo) { CString qSql; qSql.Format("EXEC WZ_MACROINFO_LOAD '%s', '%s'", szAccountID, Name); int nRet = m_DBQuery.ReadBlob(qSql, lpMacroInfo); - if(nRet == 0) + if (nRet == 0) { - for(int n = 0; n < 256; n++) + for (int n = 0; n < 511; n++) { lpMacroInfo[n] = 0xFF; } } - else if(nRet == -1) + + else if (nRet == -1) { return FALSE; } @@ -762,75 +529,51 @@ BOOL CCharDBSet::LoadMacroInfo(char* szAccountID, char* Name, BYTE* lpMacroInfo) return TRUE; } -BOOL CCharDBSet::SaveItem(char *Name, BYTE* ItemBuf, char *AccountId)//changed +BOOL CCharDBSet::SaveItem(char *Name, LPBYTE ItemBuf, char *AccountId) { CString qSql; - int result; - qSql.Format("UPDATE Character SET DbVersion=3 where Name = '%s'", Name); - if (this->m_DBQuery.Exec(qSql)) - { - qSql.Format("WZ_SetSaveItem '%s', '%s', ?", AccountId, Name); - m_DBQuery.WriteBlob(qSql, ItemBuf, MAX_DBINVENTORY); - result = 1; -} - else + + if (m_DBQuery.Exec(qSql) == FALSE) { - result = 0; + return FALSE; } - return result; - // CString qSql; - // - //#ifdef ITEM_DBSIZE_EXTEND_20050706 - // qSql.Format("UPDATE Character SET DbVersion=3 where Name = '%s'", Name); - //#elif defined(PERSONAL_SHOP_20040113) - // qSql.Format("UPDATE Character SET DbVersion=2 where Name = '%s'", Name); - //#else - // qSql.Format("UPDATE Character SET DbVersion=1 where Name = '%s'", Name); - //#endif - // - // if(m_DBQuery.Exec(qSql) == FALSE) - // { - // return FALSE; - // } - // - // qSql.Format("UPDATE Character SET Inventory=? where Name='%s'", Name); - // m_DBQuery.WriteBlob(qSql, ItemBuf, MAX_DBINVENTORY); - // - // return TRUE; + + qSql.Format("WZ_SetSaveItem '%s', '%s', ?", AccountId, Name); + m_DBQuery.WriteBlob(qSql, ItemBuf, MAX_DBINVENTORY); + + return TRUE; } -int CCharDBSet::CharServerMove(char* Name) +BOOL CCharDBSet::CharServerMove(char* Name) { CString qSql; - qSql.Format("SP_CHARACTER_TRANSFER '%s'", Name); - if(m_DBQuery.Exec(qSql) == FALSE) + if (m_DBQuery.Exec(qSql) == FALSE) { - LogAddC(LOGC_BLUE,"SP_CHARACTER_TRANSFER error return #1"); - return 1; + LogAddC(LOGC_BLUE, "SP_CHARACTER_TRANSFER error return #1"); + return TRUE; } - if(m_DBQuery.Fetch() == SQL_NO_DATA) + if (m_DBQuery.Fetch() == SQL_NO_DATA) { - LogAddC(LOGC_BLUE,"SP_CHARACTER_TRANSFER error return #2"); + LogAddC(LOGC_BLUE, "SP_CHARACTER_TRANSFER error return #2"); m_DBQuery.Clear(); - return 1; + return TRUE; } int error = m_DBQuery.GetInt(1); - m_DBQuery.Clear(); - LogAddC(LOGC_BLUE,"SP_CHARACTER_TRANSFER result %d", error); + LogAddC(LOGC_BLUE, "SP_CHARACTER_TRANSFER result %d", error); - if(error != 0) + if (error != 0) { return error; } - return 0; + return FALSE; } int CCharDBSet::ChangeName(char* AccountId, char* OldName, char* NewName) @@ -840,48 +583,43 @@ int CCharDBSet::ChangeName(char* AccountId, char* OldName, char* NewName) qSql.Format("WZ_ChangeCharacterName '%s', '%s', '%s'", AccountId, OldName, NewName); - if(m_DBQuery.Exec(qSql) == FALSE) + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return 5; } - if(m_DBQuery.Fetch() != SQL_NO_DATA) + if (m_DBQuery.Fetch() != SQL_NO_DATA) { result = m_DBQuery.GetInt(1); } m_DBQuery.Clear(); - return result; } int CCharDBSet::GetCharacterID(char* chName, char* chUserID) { CString qSql; - qSql.Format("SELECT AccountID FROM Character WHERE Name = '%s'", chName); - if(m_DBQuery.Exec(qSql) == FALSE) + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return 1; } - if(m_DBQuery.Fetch() == SQL_NO_DATA) + if (m_DBQuery.Fetch() == SQL_NO_DATA) { m_DBQuery.Clear(); return 2; } - char chBuffer[MAX_IDSTRING+1]; - + char chBuffer[MAX_IDSTRING + 1]; m_DBQuery.GetStr(1, chBuffer); - - memcpy(chUserID, chBuffer, MAX_IDSTRING+1); + memcpy(chUserID, chBuffer, sizeof(chBuffer)); m_DBQuery.Clear(); - return 0; } @@ -892,13 +630,13 @@ DWORD CCharDBSet::GetCharacterClass(char* chName) qSql.Format("SELECT Class FROM Character WHERE Name = '%s'", chName); - if(m_DBQuery.Exec(qSql) == FALSE) + if (m_DBQuery.Exec(qSql) == FALSE) { m_DBQuery.Clear(); return -1; } - if(m_DBQuery.Fetch() == SQL_NO_DATA) + if (m_DBQuery.Fetch() == SQL_NO_DATA) { m_DBQuery.Clear(); return -2; @@ -907,319 +645,277 @@ DWORD CCharDBSet::GetCharacterClass(char* chName) dwReturn = m_DBQuery.GetInt(1); m_DBQuery.Clear(); - return dwReturn; } -//Season 12+ -void CCharDBSet::RuudToken_Update(char *AccountID, char *Name, unsigned int dwRuudCnt) +void CCharDBSet::SaveUserSetting(char* szAccountID, LPBYTE lpSaveData) { - int nRetrun; - __int16 sqlReturn; - CString sql; - char szCahrName[11]; // [esp+F8h] [ebp-40h] - char szId[MAX_IDSTRING + 1]; // [esp+10Ch] [ebp-2Ch] - - szId[10] = 0; - memcpy(szId, AccountID, 0xAu); - szCahrName[10] = 0; - memcpy(szCahrName, Name, 0xAu); + CString qSql; + qSql.Format("EXEC WZ_UserSettingInfo_Save '%s', ?", szAccountID); - if (strlen(szCahrName) && (strlen(szCahrName) <= 0xA) && - (strlen(szId)) && (strlen(szId) <= 0xA)) - { - - sql.Format("WZ_RuudTokenUpdate '%s','%s', %d", - szId, - szCahrName, - dwRuudCnt); - if (m_DBQuery.Exec(sql)) - { - sqlReturn = m_DBQuery.Fetch(); - if (sqlReturn != SQL_NO_DATA || sqlReturn != -1) - { - nRetrun = m_DBQuery.GetInt(1); - if (nRetrun) - { - LogAddTD("RuudToken_Update return %d ACC:%s , Name:%s, ruud :%d ", nRetrun, szId, szCahrName, dwRuudCnt); - LogAddTD("RuudToken_Update -1 == UpdateFail, -2 == InsertFail"); - } - m_DBQuery.Clear(); - } - else - { - LogAddTD( - "Error-L2 [CAccountCharDBSet] [RuudToken_Update] %d, %s , %d", - sqlReturn,__FILE__,__LINE__); - m_DBQuery.Clear(); - } - } - else - { - LogAddTD("Error-L1 [CAccountCharDBSet][RuudToken_Update] ACC:%s NAME:%s, Ruud:%d ", szId, szCahrName, dwRuudCnt); - m_DBQuery.Clear(); - } - } - else - { - LogAddC(2,"%s] ؎֥ ߡׯ %s %d",szCahrName,__FILE__, __LINE__); - } + m_DBQuery.WriteBlob(qSql, lpSaveData, 255); } -BOOL CCharDBSet::LoadSnsInfo(char *szAccountID, char *Name, BYTE *lpSnsInfo) +BOOL CCharDBSet::LoadUserSetting(char* szAccountID, LPBYTE lpSaveData) { - int result; CString qSql; + qSql.Format("EXEC WZ_UserSettingInfo_Load '%s'", szAccountID); - qSql.Format("EXEC WZ_SnsInfo_Load '%s', '%s'",szAccountID,Name); - int nRet = m_DBQuery.ReadBlob(qSql, lpSnsInfo); - if (nRet) + int nRet = m_DBQuery.ReadBlob(qSql, lpSaveData); + + if (nRet == 0) { - if (nRet == -1) + for (int i = 0; i < 255; i++) { - result = 2; - } - else - { - result = 0; + lpSaveData[i] = 0xFF; } + + return TRUE; } - else + + if (nRet == -1) { - for (int i = 0; i < 255; ++i) - lpSnsInfo[i] = -1; - result = 1; + return 2; } - return result; + + return FALSE; } -int CCharDBSet::DeleteSnsInfo(char *szAccountID, char *szName) +BOOL CCharDBSet::DeleteUserSetting(char* szAccountID) { - - int result; CString qSql; + qSql.Format("exec WZ_DeleteUserSettingInfo '%s', '%s'", szAccountID); - qSql.Format("exec WZ_DeleteSnsInfo '%s', '%s'",szAccountID,szName); - - if (this->m_DBQuery.Exec(qSql) == 1) - { - this->m_DBQuery.Clear(); - result = 1; - } - else + if (m_DBQuery.Exec(qSql) == TRUE) { - this->m_DBQuery.Clear(); - result = 0; + m_DBQuery.Clear(); + return TRUE; } - return result; + + m_DBQuery.Clear(); + return FALSE; } -void CCharDBSet::SaveSnsInfo(char *szAccountID, char *Name, BYTE *lpSnsInfo) +void CCharDBSet::SaveSnsInfo(char* szAccountID, char* Name, LPBYTE lpSnsInfo) { CString qSql; + qSql.Format("EXEC WZ_SnsInfo_Save '%s', '%s', ?", szAccountID, Name); - qSql.Format("EXEC WZ_SnsInfo_Save '%s', '%s', ?",szAccountID,Name); m_DBQuery.WriteBlob(qSql, lpSnsInfo, 255); } -//----- (00437040) -------------------------------------------------------- -void CCharDBSet::SaveUserSetting(char *szAccountID, BYTE *lpSaveData) +BOOL CCharDBSet::LoadSnsInfo(char* szAccountID, char* Name, LPBYTE lpSnsInfo) { CString qSql; + qSql.Format("EXEC WZ_SnsInfo_Load '%s', '%s'", szAccountID, Name); - qSql.Format("EXEC WZ_UserSettingInfo_Save '%s', ?",szAccountID); - m_DBQuery.WriteBlob(qSql, lpSaveData, 255); -} - -//----- (00437120) -------------------------------------------------------- -int CCharDBSet::LoadUserSetting(char *szAccountID, BYTE *lpSaveData) -{ - int result; - CString qSql; + int nRet = m_DBQuery.ReadBlob(qSql, lpSnsInfo); - qSql.Format("EXEC WZ_UserSettingInfo_Load '%s'",szAccountID); - int nRet = m_DBQuery.ReadBlob(qSql, lpSaveData); - if (nRet) + if (nRet == 0) { - if (nRet == -1) + for (int i = 0; i < 255; i++) { - result = 2; - } - else - { - result = 0; + lpSnsInfo[i] = 0xFF; } + + return TRUE; } - else + + if (nRet == -1) { - for (int i = 0; i < 255; ++i) - lpSaveData[i] = -1; - result = 1; + return 2; } - return result; + + return FALSE; } -BOOL CCharDBSet::DeleteUserSetting(char *szAccountID) +BOOL CCharDBSet::DeleteSnsInfo(char* szAccountID, char* szName) { - int result; CString qSql; - - qSql.Format("exec WZ_DeleteUserSettingInfo '%s', '%s'",szAccountID); + qSql.Format("exec WZ_DeleteSnsInfo '%s', '%s'", szAccountID, szName); - if (this->m_DBQuery.Exec(qSql) == 1) + if (m_DBQuery.Exec(qSql) == TRUE) { - this->m_DBQuery.Clear(); - result = 1; - } - else - { - this->m_DBQuery.Clear(); - result = 0; + m_DBQuery.Clear(); + return TRUE; } - return result; + + m_DBQuery.Clear(); + return FALSE; } -__int64 CCharDBSet::SaveEventInvenItem(char *Name, BYTE *ItemBuf, char *AccountId) +BOOL CCharDBSet::SaveEventInvenItem(char* Name, LPBYTE ItemBuf, char* AccountId) { CString qSql; qSql.Format("WZ_SetSaveEventInventory '%s', '%s', ?", AccountId, Name); - this->m_DBQuery.WriteBlob(qSql, ItemBuf, 512); - this->m_DBQuery.Clear(); + m_DBQuery.WriteBlob(qSql, ItemBuf, MAX_DBEVENTINVENTORY); + + m_DBQuery.Clear(); return TRUE; } -int CCharDBSet::LoadEventInvenItem(char *Name, char *ItemBuf, char *AccountId, int *DbVersion) +BOOL CCharDBSet::LoadEventInvenItem(char* Name, char* ItemBuf, char* AccountId, int& DbVersion) { - int result; CString qSql; + qSql.Format("WZ_GetLoadEventInventory '%s', '%s'", AccountId, Name); - qSql.Format("WZ_GetLoadEventInventory '%s', '%s'",AccountId,Name); - - if (this->m_DBQuery.ReadBlob(qSql, ItemBuf) == -1) + int nRet = m_DBQuery.ReadBlob(qSql, ItemBuf); + + if (nRet == -1) + { + m_DBQuery.Clear(); + return FALSE; + } + + qSql.Format("SELECT DbVersion from T_Event_Inventory where AccountID='%s'", AccountId); + + if (m_DBQuery.Exec(qSql) == FALSE) { - this->m_DBQuery.Clear(); - result = 0; + m_DBQuery.Clear(); + return FALSE; } - else + + if (m_DBQuery.Fetch() == SQL_NO_DATA) { - qSql.Format("SELECT DbVersion from T_Event_Inventory where AccountID='%s'",AccountId); - if (this->m_DBQuery.Exec(qSql)) - { - if (this->m_DBQuery.Fetch() == 100) - { - this->m_DBQuery.Clear(); - result = 0; - } - else - { - *DbVersion = this->m_DBQuery.GetInt(1); - this->m_DBQuery.Clear(); - result = 1; - } - } - else - { - this->m_DBQuery.Clear(); - result = 0; - } + m_DBQuery.Clear(); + return FALSE; } - return result; + + DbVersion = m_DBQuery.GetInt(1); + + m_DBQuery.Clear(); + return TRUE; } -int CCharDBSet::CreateCharacterMoneyUpdate(CString Name) +void CCharDBSet::RuudToken_Update(char* AccountID, char* Name, DWORD dwRuudCnt) { - int result; + char szId[MAX_IDSTRING + 1]; + szId[MAX_IDSTRING] = '\0'; + memcpy(szId, AccountID, MAX_IDSTRING); + + char szCahrName[MAX_IDSTRING + 1]; + szCahrName[MAX_IDSTRING] = '\0'; + memcpy(szCahrName, Name, MAX_IDSTRING); + + if (strlen(szCahrName) == 0 || strlen(szCahrName) > MAX_IDSTRING || strlen(szId) == 0 || strlen(szId) > MAX_IDSTRING) + { + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szCahrName, __FILE__, __LINE__); + return; + } + CString qSql; + qSql.Format("WZ_RuudTokenUpdate '%s','%s', %d", szId, szCahrName, dwRuudCnt); - qSql.Format("UPDATE Character SET Money = 1000000000 WHERE Name = '%s'",Name); - - if (this->m_DBQuery.Exec(qSql)) + if (m_DBQuery.Exec(qSql) == FALSE) { - this->m_DBQuery.Clear(); - result = 1; + LogAddTD("Error-L1 [CAccountCharDBSet][RuudToken_Update] ACC:%s NAME:%s, Ruud:%d ", szId, szCahrName, dwRuudCnt); + m_DBQuery.Clear(); + return; } - else + + SQLRETURN sqlReturn = m_DBQuery.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) { - this->m_DBQuery.Clear(); - result = 0; + LogAddTD("Error-L2 [CAccountCharDBSet] [RuudToken_Update] %d, %s , %d", sqlReturn, __FILE__, __LINE__); + m_DBQuery.Clear(); + return; } - return result; + + int nRetrun = m_DBQuery.GetInt(1); + + if (nRetrun != 0) + { + LogAddTD("RuudToken_Update return %d ACC:%s , Name:%s, ruud :%d ", nRetrun, szId, szCahrName, dwRuudCnt); + LogAddTD("RuudToken_Update -1 == UpdateFail, -2 == InsertFail"); + } + + m_DBQuery.Clear(); } -BOOL CCharDBSet::RestoreJumpingPkLevel(char *Name, BYTE btPkLevel) +void CCharDBSet::RuudToken_LoadCount(char* AccountID, char* Name, int& nRuudCnt) { - int result; - CString qSql; + char szId[MAX_IDSTRING + 1]; + szId[MAX_IDSTRING] = '\0'; + memcpy(szId, AccountID, MAX_IDSTRING); - qSql.Format("UPDATE Character SET PkLevel = %d WHERE Name = '%s'", - btPkLevel, - Name); + char szCahrName[MAX_IDSTRING + 1]; + szCahrName[MAX_IDSTRING] = '\0'; + memcpy(szCahrName, Name, MAX_IDSTRING); - if (this->m_DBQuery.Exec(qSql)) + if (strlen(szCahrName) == 0 || strlen(szCahrName) > MAX_IDSTRING || strlen(szId) == 0 || strlen(szId) > MAX_IDSTRING) { - this->m_DBQuery.Clear(); - result = 1; + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szCahrName, __FILE__, __LINE__); + return; } - else + + CString q; + nRuudCnt = 0; + + q.Format("WZ_RuudTokenLoad '%s','%s'", szId, szCahrName); + + if (m_DBQuery.Exec(q) == FALSE) { - this->m_DBQuery.Clear(); - result = 0; + LogAddTD("Error-L3 [CAccountCharDBSet][WZ_RuudTokenLoad][A1] %s %s", szId, szCahrName); + return; } - return result; -} + + SQLRETURN sqlReturn = m_DBQuery.Fetch(); -void CCharDBSet::RuudToken_LoadCount(char *AccountID, char *Name, int *nRuudCnt) -{ - __int16 sqlReturn; - CString qSql; - char szCahrName[11]; - char szId[MAX_IDSTRING + 1]; + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) + { + m_DBQuery.Clear(); + LogAddTD("Error-L3 [CAccountCharDBSet][WZ_RuudTokenLoad][A2] ACC:%s,NAME:%s sqlReturn:%d File %s Line %d ", szId, szCahrName, sqlReturn, __FILE__, __LINE__); + return; + } - szId[10] = 0; - memcpy(szId, AccountID, 0xAu); - szCahrName[10] = 0; - memcpy(szCahrName, Name, 0xAu); + nRuudCnt = m_DBQuery.GetInt(1); + LogAddTD("[RuudToken_LoadCount]Acc:%s,Name:%s,Ruud:%d", szId, szCahrName, nRuudCnt); - if (strlen(szCahrName) && (strlen(szCahrName) <= 0xA) && (strlen(szId)) && (strlen(szId) <= 0xA)) + if (nRuudCnt == -1) { - *nRuudCnt = 0; - qSql.Format("WZ_RuudTokenLoad '%s','%s'",szId,szCahrName); - if (this->m_DBQuery.Exec(qSql)) - { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - *nRuudCnt = this->m_DBQuery.GetInt(1); - LogAddTD("[RuudToken_LoadCount]Acc:%s,Name:%s,Ruud:%d", szId, szCahrName, *nRuudCnt); - if (*nRuudCnt == -1) - *nRuudCnt = 0; - this->m_DBQuery.Clear(); - } - else - { - this->m_DBQuery.Clear(); - LogAddTD("Error-L3 [CAccountCharDBSet][WZ_RuudTokenLoad][A2] ACC:%s,NAME:%s sqlReturn:%d File %s Line %d ", - szId,szCahrName,sqlReturn, __FILE__, __LINE__); - } - } - else - { - LogAddTD("Error-L3 [CAccountCharDBSet][WZ_RuudTokenLoad][A1] %s %s", szId, szCahrName); - } + nRuudCnt = 0; } - else + + m_DBQuery.Clear(); +} + +BOOL CCharDBSet::CreateCharacterMoneyUpdate(CString Name) +{ + CString qSql; + qSql.Format("UPDATE Character SET Money = 1000000000 WHERE Name = '%s'",Name); + + if (m_DBQuery.Exec(qSql) == FALSE) { - LogAddC(2,"%s",szCahrName, __FILE__, __LINE__); + m_DBQuery.Clear(); + return FALSE; } + + m_DBQuery.Clear(); + return TRUE; } +BOOL CCharDBSet::RestoreJumpingPkLevel(char* Name, BYTE btPkLevel) +{ + CString qSql; + qSql.Format("UPDATE Character SET PkLevel = %d WHERE Name = '%s'", btPkLevel, Name); -void CCharDBSet::RewardJumpingItem(char *Name, BYTE *JumpingInventoryBuf) + if (m_DBQuery.Exec(qSql) == FALSE) + { + m_DBQuery.Clear(); + return FALSE; + } + + m_DBQuery.Clear(); + return TRUE; +} + +void CCharDBSet::RewardJumpingItem(char* Name, LPBYTE JumpingInventoryBuf) { + CString qSql; + qSql.Format("UPDATE Character SET Inventory=? where Name='%s'", Name); - CString qSql; // [esp+D4h] [ebp-20h] - qSql.Format("UPDATE Character SET Inventory=? where Name='%s'",Name); - this->m_DBQuery.WriteBlob(qSql, JumpingInventoryBuf, 3776); - this->m_DBQuery.Clear(); + m_DBQuery.WriteBlob(qSql, JumpingInventoryBuf, MAX_DBINVENTORY - MAX_ITEMDBBYTE); + m_DBQuery.Clear(); } diff --git a/DataServer/DbSet/CharDBSet.h b/DataServer/DbSet/CharDBSet.h index 0f06566..1d0d8eb 100644 --- a/DataServer/DbSet/CharDBSet.h +++ b/DataServer/DbSet/CharDBSet.h @@ -1,68 +1,25 @@ -// CharDBSet.h: interface for the CCharDBSet class. -// -////////////////////////////////////////////////////////////////////// - -#if !defined(AFX_CHARDBSET_H__BED5C4C4_EA0B_4126_A05F_9584C5F0E889__INCLUDED_) -#define AFX_CHARDBSET_H__BED5C4C4_EA0B_4126_A05F_9584C5F0E889__INCLUDED_ - -#if _MSC_VER > 1000 +#ifndef __CHARDBSET_H__ +#define __CHARDBSET_H__ #pragma once -#endif // _MSC_VER > 1000 -//#include "Include\ProDef.h" #include "..\Include\Sprodef.h" -typedef struct +typedef struct CharacterInfo_Struct { - /*int registry; - char AccountID[11]; - char Name[11]; - char Class; - int Level; - int LevelUpPoint; - int Experience; - int NextExperience; - int Money; - __int16 Strength; - __int16 Dexterity; - __int16 Vitality; - __int16 Energy; - __int16 Leadership; - unsigned __int16 ChatLitmitTime; - float Life; - float MaxLife; - float Mana; - float MaxMana; - int PkCount; - int PkLevel; - int PkTime; - BYTE dbInventory[3792]; - BYTE dbMagicList[450]; - BYTE dbQuest[50]; - char MapNumber; - char MapX; - char MapY; - char Dir; - char CtlCode; - char DbVersion; - int FruitPoint; - char btExtendedInvenCount; - char btExtendedWarehouseCount; - int iUserGuid;*/ int registry; - char AccountID[MAX_IDSTRING+1]; - char Name[MAX_IDSTRING+1]; + char AccountID[MAX_IDSTRING + 1]; + char Name[MAX_IDSTRING + 1]; BYTE Class; int Level; int LevelUpPoint; int Experience; int NextExperience; int Money; - WORD Strength; - WORD Dexterity; - WORD Vitality; - WORD Energy; - WORD Leadership; + short Strength; + short Dexterity; + short Vitality; + short Energy; + short Leadership; WORD ChatLitmitTime; float Life; float MaxLife; @@ -84,50 +41,65 @@ typedef struct BYTE btExtendedInvenCount; BYTE btExtendedWarehouseCount; int iUserGuid; -}CharacterInfo_Struct, *LPCharacterInfo_Struct; +} *LPCharacterInfo_Struct; -class CCharDBSet +class CCharDBSet { public: CCharDBSet(); virtual ~CCharDBSet(); - BOOL Connect();// - BOOL GetCharacter(char *name);// - int DeleteCharacter(char* AccoundID, char* CharacterID);// - int DeleteCharacter_DregInfo(char* CharacterID);// - int CreateCharacter(CString accountId, CString Name, BYTE Class);// - __int64 DefaultCharacterCreate(BYTE classskin); - void SetSP_WZ_CreateCharacterGetVersion(int version);// - BOOL CheckSP_WZ_CreateCharacterGetVersion();// - BOOL DefaultCreateCharacterAllDelete();// - BOOL DefaultCreateCharacterInsert(LPCharacterInfo_Struct lpObj);// - BYTE CurCharNameSave(char *Name);// - BYTE SaveCharacter(char *Name, LPCharacterInfo_Struct lpObj);// - BOOL GetCharacter(char *szAccountID, char *Name, LPCharacterInfo_Struct lpObj);// - void SaveMacroInfo(char *szAccountID, char* Name, BYTE* lpMacroInfo);// - BOOL LoadMacroInfo(char *szAccountID, char* Name, BYTE* lpMacroInfo);// - BOOL SaveItem(char *Name, BYTE* ItemBuf, char *AccountId);// - int CharServerMove(char *Name);// - int ChangeName(char* AccountId, char* OldName, char* NewName);// - int GetCharacterID(char* chName, char* chUserID);// - DWORD GetCharacterClass(char *chName);// - void SaveUserSetting(char *szAccountID, BYTE *lpSaveData);// - int LoadUserSetting(char *szAccountID, BYTE *lpSaveData);// - BOOL DeleteUserSetting(char *szAccountID); - void SaveSnsInfo(char *szAccountID, char *Name, BYTE *lpSnsInfo); - BOOL LoadSnsInfo(char *szAccountID, char *Name, BYTE *lpSnsInfo); - BOOL DeleteSnsInfo(char *szAccountID, char *szName); - __int64 SaveEventInvenItem(char *Name, BYTE *ItemBuf, char *AccountId); - int LoadEventInvenItem(char *Name, char *ItemBuf, char *AccountId, int *DbVersion); - void RuudToken_Update(char *AccountID, char *Name, unsigned int dwRuudCnt); - void RuudToken_LoadCount(char *AccountID, char *Name, int *nRuudCnt); - int CreateCharacterMoneyUpdate(CString Name); - BOOL RestoreJumpingPkLevel(char *Name, BYTE btPkLevel); - void RewardJumpingItem(char* Name, BYTE* JumpingInventoryBuf); + BOOL Connect(); + + BOOL GetCharacter(char* name); + int DeleteCharacter(char* AccoundID, char* CharacterID); + int DeleteCharacter_DregInfo(char* CharacterID); + int CreateCharacter(CString accountId, CString Name, BYTE Class); + + BOOL DefaultCharacterCreate(BYTE classskin); + void SetSP_WZ_CreateCharacterGetVersion(int version); + BOOL CheckSP_WZ_CreateCharacterGetVersion(); + BOOL DefaultCreateCharacterAllDelete(); + BOOL DefaultCreateCharacterInsert(LPCharacterInfo_Struct lpObj); + + BYTE CurCharNameSave(char* Name); + + BYTE SaveCharacter(char* Name, LPCharacterInfo_Struct lpObj); + BOOL GetCharacter(char* szAccountID, char* Name, LPCharacterInfo_Struct lpObj); + + void SaveMacroInfo(char* szAccountID, char* Name, LPBYTE lpMacroInfo); + BOOL LoadMacroInfo(char* szAccountID, char* Name, LPBYTE lpMacroInfo); + + BOOL SaveItem(char* Name, LPBYTE ItemBuf, char* AccountId); + + BOOL CharServerMove(char* Name); + + int ChangeName(char* AccountId, char* OldName, char* NewName); + + int GetCharacterID(char* chName, char* chUserID); + DWORD GetCharacterClass(char* chName); + + void SaveUserSetting(char* szAccountID, LPBYTE lpSaveData); + BOOL LoadUserSetting(char* szAccountID, LPBYTE lpSaveData); + BOOL DeleteUserSetting(char* szAccountID); + + void SaveSnsInfo(char* szAccountID, char* Name, LPBYTE lpSnsInfo); + BOOL LoadSnsInfo(char* szAccountID, char* Name, LPBYTE lpSnsInfo); + BOOL DeleteSnsInfo(char* szAccountID, char* szName); + + BOOL SaveEventInvenItem(char* Name, LPBYTE ItemBuf, char* AccountId); + BOOL LoadEventInvenItem(char* Name, char* ItemBuf, char* AccountId, int& DbVersion); + + void RuudToken_Update(char* AccountID, char* Name, DWORD dwRuudCnt); + void RuudToken_LoadCount(char* AccountID, char* Name, int& nRuudCnt); + + BOOL CreateCharacterMoneyUpdate(CString Name); + BOOL RestoreJumpingPkLevel(char* Name, BYTE btPkLevel); + void RewardJumpingItem(char* Name, LPBYTE JumpingInventoryBuf); + public: int m_CreateCharacterVer; CQuery m_DBQuery; }; -#endif // !defined(AFX_CHARDBSET_H__BED5C4C4_EA0B_4126_A05F_9584C5F0E889__INCLUDED_) +#endif diff --git a/DataServer/DbSet/CharPreviewDBSet.cpp b/DataServer/DbSet/CharPreviewDBSet.cpp index 6602dc5..2f74216 100644 --- a/DataServer/DbSet/CharPreviewDBSet.cpp +++ b/DataServer/DbSet/CharPreviewDBSet.cpp @@ -1,28 +1,17 @@ -// CharPreviewDBSet.cpp: implementation of the CCharPreviewDBSet class. -// Decompilation Completed -> All Same as WebZen -////////////////////////////////////////////////////////////////////// - -#include "stdafx.h" +#include "stdafx.h" #include "CharPreviewDBSet.h" -//#include "..\common\winutil.h" - -////////////////////////////////////////////////////////////////////// -// Construction/Destruction -////////////////////////////////////////////////////////////////////// CCharPreviewDBSet::CCharPreviewDBSet() { - } CCharPreviewDBSet::~CCharPreviewDBSet() { - } BOOL CCharPreviewDBSet::Conenect() { - if( m_DBQuery.Connect(3, szDbConnectDsn, szDbConnectID, szDbConnectPass) == FALSE ) + if (m_DBQuery.Connect(3, szDbConnectDsn, szDbConnectID, szDbConnectPass) == FALSE) { MsgBox("CharPreviewDBSet ODBC Connect Fail"); return FALSE; @@ -30,223 +19,121 @@ BOOL CCharPreviewDBSet::Conenect() return TRUE; } -int CCharPreviewDBSet::GetChar(char *Name, char *AccountId, int *_level, int *_class, BYTE *Inventory, BYTE *_ctlcode, BYTE *_dbverstion, BYTE *_pkLevel, BYTE *_btGuildStatus) + +BOOL CCharPreviewDBSet::GetChar(char* Name, char* AccountId, int& _level, int& _class, LPBYTE Inventory, BYTE& _ctlcode, BYTE& _dbverstion, BYTE& _pkLevel, BYTE& _btGuildStatus) { - int nRet; - int dbverstion; - int ctlcode; CString qSql; - if (!SQLSyntexCheck(Name)) + if (SQLSyntexCheck(Name) == FALSE) { - return 0; + return FALSE; } + qSql.Format("SELECT Name, cLevel, Class, PkLevel, CtlCode, DbVersion FROM Character WHERE Name='%s'", Name); - if (!this->m_DBQuery.Exec(qSql)) + + if (m_DBQuery.Exec(qSql) == FALSE) { - this->m_DBQuery.Clear(); - return 0; + m_DBQuery.Clear(); + return FALSE; } - if (this->m_DBQuery.Fetch() == 100) + + if (m_DBQuery.Fetch() == SQL_NO_DATA) { - this->m_DBQuery.Clear(); - return 0; + m_DBQuery.Clear(); + return FALSE; } - this->m_DBQuery.GetStr("Name", Name); - *_level = this->m_DBQuery.GetInt("cLevel"); - *_class = this->m_DBQuery.GetInt("Class"); - *_pkLevel = this->m_DBQuery.GetInt("PkLevel"); - //ctlcode = this->m_DBQuery.GetInt("CtlCode"); - //if (ctlcode < 0) - // LOBYTE(ctlcode) = 0; - //*_ctlcode = ctlcode; - ctlcode = m_DBQuery.GetInt("CtlCode"); + + m_DBQuery.GetStr("Name", Name); + _level = m_DBQuery.GetInt("cLevel"); + _class = m_DBQuery.GetInt("Class"); + _pkLevel = m_DBQuery.GetInt("PkLevel"); + + int ctlcode = m_DBQuery.GetInt("CtlCode"); if (ctlcode < 0) { ctlcode = 0; } - /*dbverstion = this->m_DBQuery.GetInt("DbVersion"); - if (dbverstion < 0) - LOBYTE(dbverstion) = 0; - *_dbverstion = dbverstion;*/ - dbverstion = m_DBQuery.GetInt("DbVersion"); + + int dbverstion = m_DBQuery.GetInt("DbVersion"); if (dbverstion < 0) { dbverstion = 0; } - this->m_DBQuery.Clear(); + + m_DBQuery.Clear(); + qSql.Format("WZ_GetLoadInventory '%s', '%s'", AccountId, Name); - nRet = this->m_DBQuery.ReadBlob(qSql, Inventory); - if (nRet) + int nRet = m_DBQuery.ReadBlob(qSql, Inventory); + + if (nRet == 0) { - if (nRet == -1) - { - return 0; - } + memset(Inventory, 0xFF, 120); } - else + + else if (nRet == -1) { - memset(Inventory, 255, 0x78u); + return FALSE; } - this->m_DBQuery.Clear(); - qSql.Format("SELECT G_Status FROM GuildMember WHERE Name='%s'", Name); - *_btGuildStatus = 0xFF; + m_DBQuery.Clear(); + + qSql.Format("SELECT G_Status FROM GuildMember WHERE Name='%s'", Name); + _btGuildStatus = 0xFF; if (m_DBQuery.Exec(qSql) == TRUE) { - if (m_DBQuery.Fetch() == SQL_NO_DATA) + if (m_DBQuery.Fetch() != SQL_NO_DATA) { - } - else - { - *_btGuildStatus = m_DBQuery.GetInt("G_Status"); + _btGuildStatus = m_DBQuery.GetInt("G_Status"); } } m_DBQuery.Clear(); - return 1; + return TRUE; } -//BOOL CCharPreviewDBSet::GetChar(char* Name, /*char *AccountId, */int& _level, int& _class, BYTE* Inventory, BYTE& _ctlcode, BYTE& _dbverstion, BYTE& _btGuildStatus) -//{ -// CString qSql; -// -// if(SQLSyntexCheck(Name) == FALSE) -// { -// return FALSE; -// } -// -// qSql.Format("SELECT Name, cLevel, Class, CtlCode, DbVersion FROM vCharacterPreview WHERE Name='%s'", Name); -// -// if(m_DBQuery.Exec(qSql) == FALSE) -// { -// m_DBQuery.Clear(); -// return FALSE; -// } -// -// if(m_DBQuery.Fetch() == SQL_NO_DATA) -// { -// m_DBQuery.Clear(); -// return FALSE; -// } -// -// m_DBQuery.GetStr("Name", Name); -// -// _level = m_DBQuery.GetInt("cLevel"); -// _class = m_DBQuery.GetInt("Class"); -// -// int ctlcode = m_DBQuery.GetInt("CtlCode"); -// -// if(ctlcode < 0) -// { -// ctlcode = 0; -// } -// -// _ctlcode = ctlcode; -// -// int dbverstion = m_DBQuery.GetInt("DbVersion"); -// -// if(dbverstion < 0) -// { -// dbverstion = 0; -// } -// -// _dbverstion = dbverstion; -// -// /*qSql.Format("WZ_GetLoadInventory '%s', '%s'",AccountId,Name); -// -// m_DBQuery.ReadBlob(qSql, Inventory);*/ -// -// m_DBQuery.Clear(); -// -// qSql.Format("SELECT Inventory FROM Character WHERE Name='%s'", Name); -// int nRet = m_DBQuery.ReadBlob(qSql, Inventory); -// -// if(nRet == 0) -// { -// memset(Inventory, 0xFF, 120); -// } -// else if(nRet == -1) -// { -// return FALSE; -// } -// -// m_DBQuery.Clear(); -// -//#ifdef ADD_CHARACTERLIST_GUILD_STATUS_01_20050126 -// qSql.Format("SELECT G_Status FROM GuildMember WHERE Name='%s'", Name); -// -// _btGuildStatus = 0xFF; -// -// if(m_DBQuery.Exec(qSql) == TRUE) -// { -// if(m_DBQuery.Fetch() == SQL_NO_DATA) -// { -// } -// else -// { -// _btGuildStatus = m_DBQuery.GetInt("G_Status"); -// } -// } -// -// m_DBQuery.Clear(); -//#endif -// -// return TRUE; -//} - -BOOL CCharPreviewDBSet::GetRealNameAndServerCode(char *szUBFName, char *szRealName, WORD *ServerCode, int IsUBFServer) + +BOOL CCharPreviewDBSet::GetRealNameAndServerCode(char* szUBFName, char* szRealName, int* ServerCode, BOOL IsUBFServer) { - int result; - __int16 sqlReturn; - CString qSql; - char szCahrUBFName[11]; + if (m_DBQuery.IsConnected() == FALSE) + { + LogAddTD("[UBF] CQuery::IsConnected: FALSE"); + return FALSE; + } + char szCahrUBFName[MAX_IDSTRING + 1]; + szCahrUBFName[MAX_IDSTRING] = '\0'; + memcpy(szCahrUBFName, szUBFName, MAX_IDSTRING); - if (this->m_DBQuery.IsConnected()) + if (strlen(szCahrUBFName) == 0 || strlen(szCahrUBFName) > MAX_IDSTRING) { - szCahrUBFName[10] = 0; - memcpy(szCahrUBFName, szUBFName, 0xAu); - //strlen(szCahrUBFName); - if (strlen(szCahrUBFName) && (strlen(szCahrUBFName) <= 0xA)) - { - qSql.Format("EXEC WZ_UnityBattleFieldGetRealName_r '%s'",szCahrUBFName); - if (this->m_DBQuery.Exec(qSql)) - { - sqlReturn = this->m_DBQuery.Fetch(); - if (sqlReturn != 100 && sqlReturn != -1) - { - this->m_DBQuery.GetStr("Name", szRealName); - *ServerCode = this->m_DBQuery.GetInt("ServerCode"); - this->m_DBQuery.Clear(); - result = 1; - } - else - { - LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldGetRealName_r] [%s] Return %d,%s,%d ",szCahrUBFName,sqlReturn, __FILE__, __LINE__); - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - LogAddTD("Error-L3 [UBF][WZ_UnityBattleFieldGetRealName_r] [%s]", szCahrUBFName); - this->m_DBQuery.Clear(); - result = 0; - } - } - else - { - LogAddC(2,"%s] ؎֥ ߡׯ %s %d",szUBFName, __FILE__, __LINE__); - result = 0; - } + LogAddC(LOGC_RED, "%s] ؎֥ ߡׯ %s %d", szUBFName, __FILE__, __LINE__); + return FALSE; } - else + + CString qSql; + qSql.Format("EXEC WZ_UnityBattleFieldGetRealName_r '%s'", szCahrUBFName); + + if (m_DBQuery.Exec(qSql) == FALSE) { - LogAddTD("[UBF] CQuery::IsConnected: FALSE"); - result = 0; + LogAddTD("Error-L3 [UBF][WZ_UnityBattleFieldGetRealName_r] [%s]", szCahrUBFName); + m_DBQuery.Clear(); + return FALSE; } - return result; + + SQLRETURN sqlReturn = m_DBQuery.Fetch(); + + if (sqlReturn == SQL_NO_DATA || sqlReturn == SQL_NULL_DATA) + { + LogAddTD("Error-L3 [ChaosCastleFinalDBSet][WZ_UnityBattleFieldGetRealName_r] [%s] Return %d,%s,%d ", szCahrUBFName, sqlReturn, __FILE__, __LINE__); + m_DBQuery.Clear(); + return FALSE; + } + + m_DBQuery.GetStr("Name", szRealName); + *ServerCode = m_DBQuery.GetInt("ServerCode"); + + m_DBQuery.Clear(); + return TRUE; } \ No newline at end of file diff --git a/DataServer/DbSet/CharPreviewDBSet.h b/DataServer/DbSet/CharPreviewDBSet.h index 897fe1c..854814e 100644 --- a/DataServer/DbSet/CharPreviewDBSet.h +++ b/DataServer/DbSet/CharPreviewDBSet.h @@ -1,27 +1,20 @@ -// CharPreviewDBSet.h: interface for the CCharPreviewDBSet class. -// -////////////////////////////////////////////////////////////////////// - -#if !defined(AFX_CHARPREVIEWDBSET_H__9278C328_E1A7_449D_B695_72E6CCBBFF97__INCLUDED_) -#define AFX_CHARPREVIEWDBSET_H__9278C328_E1A7_449D_B695_72E6CCBBFF97__INCLUDED_ - -#if _MSC_VER > 1000 +#ifndef __CHARPREVIEWDBSET_H__ +#define __CHARPREVIEWDBSET_H__ #pragma once -#endif // _MSC_VER > 1000 -class CCharPreviewDBSet +class CCharPreviewDBSet { public: CCharPreviewDBSet(); virtual ~CCharPreviewDBSet(); BOOL Conenect(); - //BOOL GetChar(char* Name, /*char *AccountId, */int& _level, int& _class, BYTE* Inventory, BYTE& _ctlcode, BYTE& _dbverstion, BYTE& _btGuildStatus); - BOOL GetChar(char *Name, char *AccountId, int *_level, int *_class, BYTE *Inventory, BYTE *_ctlcode, BYTE *_dbverstion, BYTE *_pkLevel, BYTE *_btGuildStatus); // idb - BOOL GetRealNameAndServerCode(char *szUBFName, char *szRealName, WORD *ServerCode, int IsUBFServer);//s12 + + BOOL GetChar(char* Name, char* AccountId, int& _level, int& _class, LPBYTE Inventory, BYTE& _ctlcode, BYTE& _dbverstion, BYTE& _pkLevel, BYTE& _btGuildStatus); + BOOL GetRealNameAndServerCode(char* szUBFName, char* szRealName, int* ServerCode, BOOL IsUBFServer); public: CQuery m_DBQuery; }; -#endif // !defined(AFX_CHARPREVIEWDBSET_H__9278C328_E1A7_449D_B695_72E6CCBBFF97__INCLUDED_) +#endif \ No newline at end of file diff --git a/DataServer/DbSet/CrywolfDBSet.cpp b/DataServer/DbSet/CrywolfDBSet.cpp index 335f7cf..32f332c 100644 --- a/DataServer/DbSet/CrywolfDBSet.cpp +++ b/DataServer/DbSet/CrywolfDBSet.cpp @@ -1,28 +1,17 @@ -// CrywolfDBSet.cpp: implementation of the CCrywolfDBSet class. -// Decompilation Completed -> All Same as WebZen -////////////////////////////////////////////////////////////////////// - #include "stdafx.h" -#ifdef MU_CRYWOLF_DS_PROTOCOL_20050505 #include "CrywolfDBSet.h" -////////////////////////////////////////////////////////////////////// -// Construction/Destruction -////////////////////////////////////////////////////////////////////// - CCrywolfDBSet::CCrywolfDBSet() { - } CCrywolfDBSet::~CCrywolfDBSet() { - } BOOL CCrywolfDBSet::Connect() { - return this->CDBConBase::Connect(szDbConnectID, szDbConnectPass); + return CDBConBase::Connect(szDbConnectID, szDbConnectPass); } BOOL CCrywolfDBSet::DSDB_QueryCrywolfStateUpdate() @@ -33,43 +22,38 @@ BOOL CCrywolfDBSet::DSDB_QueryCrywolfStateUpdate() BOOL CCrywolfDBSet::DSDB_QueryCrywolfInfoLoad(int iMapSvrGroup, LPCWP_ANS_CRYWOLFINFOLOAD lpAnsMsg) { CString szQuery; - szQuery.Format("EXEC WZ_CW_InfoLoad %d", iMapSvrGroup); - if(this->m_DBQuery.Exec(szQuery) == FALSE) + if (m_DBQuery.Exec(szQuery) == FALSE) { - this->m_DBQuery.Clear(); + m_DBQuery.Clear(); return TRUE; } - if(this->m_DBQuery.Fetch() == SQL_NO_DATA) + if (m_DBQuery.Fetch() == SQL_NO_DATA) { - this->m_DBQuery.Clear(); + m_DBQuery.Clear(); return TRUE; } - lpAnsMsg->iOccupationState = this->m_DBQuery.GetInt("CRYWOLF_OCCUFY"); - lpAnsMsg->iCrywolfState = this->m_DBQuery.GetInt("CRYWOLF_STATE"); - - this->m_DBQuery.Clear(); + lpAnsMsg->iOccupationState = m_DBQuery.GetInt("CRYWOLF_OCCUFY"); + lpAnsMsg->iCrywolfState = m_DBQuery.GetInt("CRYWOLF_STATE"); + m_DBQuery.Clear(); return FALSE; } BOOL CCrywolfDBSet::DSDB_QueryCrywolfInfoSave(int iMapSvrGroup, LPCWP_REQ_CRYWOLFINFOSAVE lpReqMsg) { CString szQuery; - szQuery.Format("EXEC WZ_CW_InfoSave %d, %d, %d", iMapSvrGroup, lpReqMsg->iCrywolfState, lpReqMsg->iOccupationState); - if(this->m_DBQuery.Exec(szQuery) == FALSE) + if (m_DBQuery.Exec(szQuery) == FALSE) { - this->m_DBQuery.Clear(); + m_DBQuery.Clear(); return TRUE; } - this->m_DBQuery.Clear(); - + m_DBQuery.Clear(); return FALSE; -} -#endif \ No newline at end of file +} \ No newline at end of file diff --git a/DataServer/DbSet/CrywolfDBSet.h b/DataServer/DbSet/CrywolfDBSet.h index 149b6f5..c336c99 100644 --- a/DataServer/DbSet/CrywolfDBSet.h +++ b/DataServer/DbSet/CrywolfDBSet.h @@ -1,17 +1,8 @@ -// CrywolfDBSet.h: interface for the CCrywolfDBSet class. -// -////////////////////////////////////////////////////////////////////// - -#if !defined(AFX_CRYWOLFDBSET_H__DE77448E_DEA3_4B5A_83A0_9F0B04EFF3DE__INCLUDED_) && defined(MU_CRYWOLF_DS_PROTOCOL_20050505) -#define AFX_CRYWOLFDBSET_H__DE77448E_DEA3_4B5A_83A0_9F0B04EFF3DE__INCLUDED_ - -#if _MSC_VER > 1000 +#ifndef __CRYWOLFDBSET_H__ +#define __CRYWOLFDBSET_H__ #pragma once -#endif // _MSC_VER > 1000 -//#include "Include\ProDef.h" #include "..\Include\Sprodef.h" - #include "DBConBase.h" class CCrywolfDBSet : public CDBConBase @@ -24,7 +15,6 @@ class CCrywolfDBSet : public CDBConBase BOOL DSDB_QueryCrywolfStateUpdate(); BOOL DSDB_QueryCrywolfInfoLoad(int iMapSvrGroup, LPCWP_ANS_CRYWOLFINFOLOAD lpAnsMsg); BOOL DSDB_QueryCrywolfInfoSave( int iMapSvrGroup, LPCWP_REQ_CRYWOLFINFOSAVE lpReqMsg); - }; -#endif // !defined(AFX_CRYWOLFDBSET_H__DE77448E_DEA3_4B5A_83A0_9F0B04EFF3DE__INCLUDED_) +#endif \ No newline at end of file diff --git a/DataServer/DbSet/DBConBase.cpp b/DataServer/DbSet/DBConBase.cpp index 62ed6f8..4dfa3f2 100644 --- a/DataServer/DbSet/DBConBase.cpp +++ b/DataServer/DbSet/DBConBase.cpp @@ -1,34 +1,18 @@ -// DBConBase.cpp: implementation of the CDBConBase class. -// Decompilation Completed -> All Same as WebZen -////////////////////////////////////////////////////////////////////// - #include "stdafx.h" #include "..\Dataserver.h" #include "DBConBase.h" -#ifdef _DEBUG -#undef THIS_FILE -static char THIS_FILE[]=__FILE__; -#define new DEBUG_NEW -#endif - -////////////////////////////////////////////////////////////////////// -// Construction/Destruction -////////////////////////////////////////////////////////////////////// - CDBConBase::CDBConBase() { - } CDBConBase::~CDBConBase() { - } BOOL CDBConBase::Connect(char* szConID, char* szConPass) { - if(m_DBQuery.Connect(3, szDbConnectDsn, szConID, szConPass) == FALSE) + if (m_DBQuery.Connect(3, szDbConnectDsn, szConID, szConPass) == FALSE) { MsgBox("%s DB Connect Fail", szDbConnectDsn); return FALSE; diff --git a/DataServer/DbSet/DBConBase.h b/DataServer/DbSet/DBConBase.h index 9ee7f25..0854591 100644 --- a/DataServer/DbSet/DBConBase.h +++ b/DataServer/DbSet/DBConBase.h @@ -1,13 +1,6 @@ -// DBConBase.h: interface for the CDBConBase class. -// -////////////////////////////////////////////////////////////////////// - -#if !defined(AFX_DBCONBASE_H__BE3ED0E9_1405_4FBF_AFA1_BD5CAA52A86E__INCLUDED_) -#define AFX_DBCONBASE_H__BE3ED0E9_1405_4FBF_AFA1_BD5CAA52A86E__INCLUDED_ - -#if _MSC_VER > 1000 +#ifndef __DBCONBASE_H__ +#define __DBCONBASE_H__ #pragma once -#endif // _MSC_VER > 1000 class CDBConBase { @@ -21,4 +14,4 @@ class CDBConBase BOOL Connect(char* szConID, char* szConPass); }; -#endif // !defined(AFX_DBCONBASE_H__BE3ED0E9_1405_4FBF_AFA1_BD5CAA52A86E__INCLUDED_) +#endif \ No newline at end of file diff --git a/DataServer/include/Sprodef.h b/DataServer/include/Sprodef.h index ed2b5cd..3ab4e9e 100644 --- a/DataServer/include/Sprodef.h +++ b/DataServer/include/Sprodef.h @@ -1453,72 +1453,6 @@ typedef struct BYTE PlayGuideCheck; } SDHP_SKILLKEYDATA, *LPSDHP_SKILLKEYDATA; -typedef struct -{ - PBMSG_HEAD h; // C1:17 - int iUserIndex; // 4 - char chAccountID[MAX_IDSTRING + 1]; // - char chCharacterName[MAX_IDSTRING + 1]; // -}PMSG_CHARACTER_RESET, *LPPMSG_CHARACTER_RESET; - -typedef struct -{ - PBMSG_HEAD h; // C1:17 - int iUserIndex; // 4 - int ResetNumber; // -}PMSG_ANS_CHARACTER_RESET, *LPPMSG_ANS_CHARACTER_RESET; - -typedef struct -{ - PBMSG_HEAD h; // C1:17 - int iUserIndex; // 4 - char chAccountID[MAX_IDSTRING + 1]; // - char chCharacterName[MAX_IDSTRING + 1]; // - - int m_iRuleIndex; // - BOOL m_bClearStat; // - int m_iLevelAfterReset; // - int m_iLevelUpPoint; // - BOOL m_bReqSpecialItem; // - BOOL m_bBornPlace; // - int m_iResetNumber; // - BOOL m_bClearBuffState; // - BOOL m_bClearMagicList; // -}PMSG_REQ_SAVE_CHARACTER_RESET, *LPPMSG_REQ_SAVE_CHARACTER_RESET; - -typedef struct -{ - PBMSG_HEAD h; // C1:17 - int iUserIndex; // 4 - - int m_iRuleIndex; // - BOOL m_bClearStat; // - int m_iLevelAfterReset; // - int m_iLevelUpPoint; // - BOOL m_bReqSpecialItem; // - BOOL m_bBornPlace; // - int m_iResetNumber; // - BOOL m_bClearBuffState; // - BOOL m_bClearMagicList; // -}PMSG_ANS_SAVE_CHARACTER_RESET, *LPPMSG_ANS_SAVE_CHARACTER_RESET; - -typedef struct -{ - PBMSG_HEAD h; // C1:17 - char chAccountID[MAX_IDSTRING + 1]; - int iUserIndex; - BYTE AccountType; - INT64 EndTime; -}PMSG_REQ_VIP, *LPPMSG_REQ_VIP; - -typedef struct -{ - PBMSG_HEAD h; // C1:17 - int iUserIndex; - BYTE AccountType; - INT64 EndTime; -}PMSG_ANS_VIP, *LPPMSG_ANS_VIP; - //---------------------------------------------------------------------------- // [0x60] 옵션 키 값을 받는다. //---------------------------------------------------------------------------- @@ -1553,1179 +1487,865 @@ typedef struct //---------------------------------------------------------------------------- -// [0x60] 이벤트 시작을 알린다. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - BYTE Event; -} SDHP_EVENTSTART, *LPSDHP_EVENTSTART; - - -//---------------------------------------------------------------------------- -// [0x61] 인증서버에서 이벤트 시작 또는 종료를 알린다 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - BYTE Event; // 이벤트 번호 - BYTE Stat; // 상태 0 : 종료 1 : 시작 -} SDHP_EVENTCONTROL, *LPSDHP_EVENTCONTROL; - - -//---------------------------------------------------------------------------- -// [0x62] 인증서버에서 Reload 설정을 알린다 -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - BYTE Option; // 옵션 번호 -} SDHP_OPTIONCONTROL, *LPSDHP_OPTIONCONTROL; - -// 0x30 -typedef struct -{ - PBMSG_HEAD h; - char Account[MAX_IDSTRING]; - char Name[MAX_IDSTRING]; -} SDHP_LOVEHEARTEVENT, *LPSDHP_LOVEHEARTEVENT; - -// 0x30 -typedef struct -{ - PBMSG_HEAD h; - - BYTE Result; - - char Name[MAX_IDSTRING]; - int Number; - -} SDHP_LOVEHEARTEVENT_RESULT, *LPSDHP_LOVEHEARTEVENT_RESULT; - -// 0x40 전체 공지 -typedef struct -{ - PBMSG_HEAD h; - char Notice[61]; -} SDHP_NOTICE, *LPSDHP_NOTICE; - -// 0x41 유저 공지 -typedef struct -{ - PBMSG_HEAD h; - char szId[10]; - char Notice[61]; -} SDHP_USER_NOTICE, *LPSDHP_USER_NOTICE; - - -// 0x42 게임 블럭 -typedef struct -{ - PBMSG_HEAD h; - int ClientIndex; - char AccountID[MAX_IDSTRING]; - BYTE ServerNum; - char CharName[MAX_IDSTRING]; - BYTE Type; -} SDHP_GAME_BLOCK, *LPSDHP_GAME_BLOCK; - -// 0x42 게임 블럭 결과 -typedef struct -{ - PBMSG_HEAD h; - BYTE Result; -} SDHP_GAME_BLOCK_RESULT, *LPSDHP_GAME_BLOCK_RESULT; - - -// 0xCF 캐릭터 이동 -typedef struct -{ - PBMSG_HEAD h; - char Account[MAX_IDSTRING]; - short Number; -} SDHP_CHARACTER_TRANSFER, *LPSDHP_CHARACTER_TRANSFER; - -typedef struct -{ - PBMSG_HEAD h; - char Account[MAX_IDSTRING]; - short Number; - BYTE Result; -} SDHP_CHARACTER_TRANSFER_RESULT, *LPSDHP_CHARACTER_TRANSFER_RESULT; - -#ifdef UPDATE_CHANGE_CHARACTERNAME_20080410 // 캐릭명 변경 프로토콜 -//---------------------------------------------------------------------------- -// GD[0x16] 캐릭터 변경을 요청. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - int aIndex; - char AccountId[MAX_IDSTRING]; - char OldName[MAX_IDSTRING]; - char NewName[MAX_IDSTRING]; -} SDHP_CHANGE_NAME, *LPSDHP_CHANGE_NAME; - -//---------------------------------------------------------------------------- -// DG[0x16] 캐릭터 변경을 요청 결과. -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD h; - int aIndex; - char AccountId[MAX_IDSTRING]; - char OldName[MAX_IDSTRING]; - char NewName[MAX_IDSTRING]; - BYTE btResult; // 0: 성공, 1: 동일 캐릭터명 존재 -} SDHP_CHANGE_NAME_RESULT, *LPSDHP_CHANGE_NAME_RESULT; -#endif // UPDATE_CHANGE_CHARACTERNAME_20080410 - - - - -#ifdef MU_CASTLESIEGE_DS_PROTOCOL_20041105 // 공성전 관련 추가된 프로토콜 (GS <-> DS) - - -//---------------------------------------------------------------------------- -// GD [0x80][0x00] 성 전체 정보 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iCastleEventCycle; // 공성전 주기 -} CSP_REQ_CASTLEDATA, *LPCSP_REQ_CASTLEDATA; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x00] 성 전체 정보 요청 응답 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - WORD wStartYear; // 공성 시작 - 년 - BYTE btStartMonth; // 공성 시작 - 월 - BYTE btStartDay; // 공성 시작 - 일 - WORD wEndYear; // 공성 종료 - 년 - BYTE btEndMonth; // 공성 종료 - 월 - BYTE btEndDay; // 공성 종료 - 일 - BYTE btIsSiegeGuildList; // 공성관련 길드정보가 이미 구축되었는가 ? - BYTE btIsSiegeEnded; // 공성이 이미 치루어 졌는가 ? - BYTE btIsCastleOccupied; // 성이 이미 사용자들에게 차지된 상태인가 ? - CHAR szCastleOwnGuild[MAX_GUILDNAMESTRING]; // 캐슬을 차지한 길드명 (없으면 "") - INT64 i64CastleMoney; // 현재 성의 보유 젠 - INT iTaxRateChaos; // 카오스 조합 세율 - INT iTaxRateStore; // 상점 세율 - INT iTaxHuntZone; // 사냥터 입장료 - INT iFirstCreate; // 이것이 최초로 만드는 것인가 ? -} CSP_ANS_CASTLEDATA, *LPCSP_ANS_CASTLEDATA; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x01] 수성측 길드의 길마이름 요청 -> 경비병 NPC 성 상태 출력 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 -} CSP_REQ_OWNERGUILDMASTER, *LPCSP_REQ_OWNERGUILDMASTER; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x01] 수성측 길드의 길마이름 요청 응답 -> 경비병 NPC 성 상태 출력 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공/2:성주인없음/3:성정보비정상/4:성길드없어짐) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - CHAR szCastleOwnGuild[MAX_GUILDNAMESTRING]; // 캐슬을 차지한 길드명 (없으면 "") - CHAR szCastleOwnGuildMaster[MAX_IDSTRING]; // 캐슬을 차지한 길드마스터명 (없으면 "") -} CSP_ANS_OWNERGUILDMASTER, *LPCSP_ANS_OWNERGUILDMASTER; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x03] 수성측 NPC 구입 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - INT iNpcNumber; // NPC번호 - INT iNpcIndex; // NPC인덱스 - INT iNpcDfLevel; // 방어력 레벨 - INT iNpcRgLevel; // 회복력 레벨 - INT iNpcMaxHp; // 최대 HP - INT iNpcHp; // HP - BYTE btNpcX; // 좌표 - X - BYTE btNpcY; // 좌표 - Y - BYTE btNpcDIR; // 방향 - INT iBuyCost; // NPC구입비용 -} CSP_REQ_NPCBUY, *LPCSP_REQ_NPCBUY; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x03] 수성측 NPC 구입 요청 응답 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - INT iNpcNumber; // NPC번호 - INT iNpcIndex; // NPC인덱스 - INT iBuyCost; // NPC구입비용 -} CSP_ANS_NPCBUY, *LPCSP_ANS_NPCBUY; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x04] 수성측 NPC 수리 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - INT iNpcNumber; // NPC번호 - INT iNpcIndex; // NPC인덱스 - INT iRepairCost; // NPC수리비용 -} CSP_REQ_NPCREPAIR, *LPCSP_REQ_NPCREPAIR; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x04] 수성측 NPC 수리 요청 응답 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - INT iNpcNumber; // NPC번호 - INT iNpcIndex; // NPC인덱스 - INT iNpcMaxHp; // 최대 HP - INT iNpcHp; // 수정될 HP - INT iRepairCost; // NPC수리비용 -} CSP_ANS_NPCREPAIR, *LPCSP_ANS_NPCREPAIR; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x05] 수성측 NPC 업그레이드 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - INT iNpcNumber; // NPC번호 - INT iNpcIndex; // NPC인덱스 - INT iNpcUpType; // NPC업그레이드 타입 (1:방어력/2:회복력/3:최대HP) - INT iNpcUpValue; // NPC업그레이드 수치 - INT iNpcUpIndex; // NPC업그레이드 레벨의 인덱스 (MAX HP도 레벨화) -} CSP_REQ_NPCUPGRADE, *LPCSP_REQ_NPCUPGRADE; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x05] 수성측 NPC 업그레이드 요청 응답 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - INT iNpcNumber; // NPC번호 - INT iNpcIndex; // NPC인덱스 - INT iNpcUpType; // NPC업그레이드 타입 (1:방어력/2:회복력/3:최대HP) - INT iNpcUpValue; // NPC업그레이드 수치 - INT iNpcUpIndex; // NPC업그레이드 레벨의 인덱스 (MAX HP도 레벨화) -} CSP_ANS_NPCUPGRADE, *LPCSP_ANS_NPCUPGRADE; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x06] 성주측 세금정보 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 -} CSP_REQ_TAXINFO, *LPCSP_REQ_TAXINFO; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x06] 성주측 세금정보 요청 응답 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - INT64 i64CastleMoney; // 현재 성의 자금 - INT iTaxRateChaos; // 카오스 조합 세율 - INT iTaxRateStore; // 상점 세율 - INT iTaxHuntZone; // 사냥터 입장료 -} CSP_ANS_TAXINFO, *LPCSP_ANS_TAXINFO; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x07] 성주측 성정보 수정 요청 - 세율 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - INT iTaxKind; // 세율 종류 (1:카오스 조합 / 2:상점 / 3:사냥터 입장료) - INT iTaxRate; // 세율 -} CSP_REQ_TAXRATECHANGE, *LPCSP_REQ_TAXRATECHANGE; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x07] 성주측 성정보 수정 요청 응답 - 세율 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - INT iTaxKind; // 세율 종류 (1:카오스 조합 / 2:상점 / 3:사냥터 입장료) - INT iTaxRate; // 세율 -} CSP_ANS_TAXRATECHANGE, *LPCSP_ANS_TAXRATECHANGE; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x08] 성주측 성정보 수정요청 - 소유 젠 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - INT iMoneyChanged; // 상대적인 젠 증가분 (+/-) -} CSP_REQ_MONEYCHANGE, *LPCSP_REQ_MONEYCHANGE; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x08] 성주측 성정보 수정요청 응답 - 소유 젠 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - INT iMoneyChanged; // 상대적인 젠 증가분 (+/-) - INT64 i64CastleMoney; // 계산된 결과 -} CSP_ANS_MONEYCHANGE, *LPCSP_ANS_MONEYCHANGE; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x09] 성주측 성정보 수정요청 - 공성 시작/종료 날짜 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - WORD wStartYear; // 공성 시작 - 년 - BYTE btStartMonth; // 공성 시작 - 월 - BYTE btStartDay; // 공성 시작 - 일 - WORD wEndYear; // 공성 종료 - 년 - BYTE btEndMonth; // 공성 종료 - 월 - BYTE btEndDay; // 공성 종료 - 일 -} CSP_REQ_SDEDCHANGE, *LPCSP_REQ_SDEDCHANGE; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x09] 성주측 성정보 수정요청 응답 - 공성 시작/종료 날짜 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - WORD wStartYear; // 공성 시작 - 년 - BYTE btStartMonth; // 공성 시작 - 월 - BYTE btStartDay; // 공성 시작 - 일 - WORD wEndYear; // 공성 종료 - 년 - BYTE btEndMonth; // 공성 종료 - 월 - BYTE btEndDay; // 공성 종료 - 일 -} CSP_ANS_SDEDCHANGE, *LPCSP_ANS_SDEDCHANGE; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x0A] 공성측 특정 등록 길드 정보 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - CHAR szGuildName[MAX_GUILDNAMESTRING]; // 길드이름 -} CSP_REQ_GUILDREGINFO, *LPCSP_REQ_GUILDREGINFO; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x0A] 공성측 특정 등록 길드 정보 요청 응답 (0xC2) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - CHAR szGuildName[MAX_GUILDNAMESTRING]; // 길드이름 - INT iRegMarkCount; // 등록된 문장수 - bool bIsGiveUp; // 포기여부 - BYTE btRegRank; // 등록순위 -} CSP_ANS_GUILDREGINFO, *LPCSP_ANS_GUILDREGINFO; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x0B] 성주측 성정보 수정요청 - 공성 종료 여부 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - BOOL bIsSiegeEnded; // 공성 종료 여부 -} CSP_REQ_SIEGEENDCHANGE, *LPCSP_REQ_SIEGEENDCHANGE; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x0B] 성주측 성정보 수정요청 응답 - 공성 종료 여부 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - BOOL bIsSiegeEnded; // 공성 종료 여부 -} CSP_ANS_SIEGEENDCHANGE, *LPCSP_ANS_SIEGEENDCHANGE; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x0C] 성주측 성정보 수정요청 - 성의 주인길드, 차지된 상태 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - BOOL bIsCastleOccupied; // 성이 이미 차지되었는가 ? - CHAR szOwnerGuildName[MAX_GUILDNAMESTRING]; // 성의 주인길드 이름 -} CSP_REQ_CASTLEOWNERCHANGE, *LPCSP_REQ_CASTLEOWNERCHANGE; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x0C] 성주측 성정보 수정요청 응답 - 성의 주인길드, 차지된 상태 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - BOOL bIsCastleOccupied; // 성이 이미 차지되었는가 ? - CHAR szOwnerGuildName[MAX_GUILDNAMESTRING]; // 성의 주인길드 이름 -} CSP_ANS_CASTLEOWNERCHANGE, *LPCSP_ANS_CASTLEOWNERCHANGE; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x0D] 공성측 길드의 공성전 등록 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - CHAR szEnemyGuildName[MAX_GUILDNAMESTRING]; // 최종 공격길드 이름 -} CSP_REQ_REGATTACKGUILD, *LPCSP_REQ_REGATTACKGUILD; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x0D] 공성측 길드의 공성전 등록 요청 응답 C1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공/2:이미등록됨/3:수성측길드/4:길드없음/5:길마레벨부족/6:등록길드수초과/7:길드원수부족) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - CHAR szEnemyGuildName[MAX_GUILDNAMESTRING]; // 최종 공격길드 이름 -} CSP_ANS_REGATTACKGUILD, *LPCSP_ANS_REGATTACKGUILD; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x0E] 공성주기 끝 - 정보 초기화 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 -} CSP_REQ_CASTLESIEGEEND, *LPCSP_REQ_CASTLESIEGEEND; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x0E] 공성주기 끝 - 정보 초기화 요청 응답 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 -} CSP_ANS_CASTLESIEGEEND, *LPCSP_ANS_CASTLESIEGEEND; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x0F] 자신의 맵서버군에게 특정 메시지 전달 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - CHAR szMsgText[128]; // 자신의 맵서버군에게 전달할 메시지 -} CSP_REQ_MAPSVRMULTICAST, *LPCSP_REQ_MAPSVRMULTICAST; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x0F] 자신의 맵서버군에게 특정 메시지 전달 요청 -> 전달 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - CHAR szMsgText[128]; // 자신의 맵서버군에게 전달할 메시지 -} CSP_ANS_MAPSVRMULTICAST, *LPCSP_ANS_MAPSVRMULTICAST; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x10] 공성측 특정 등록 길드 마크 등록 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - CHAR szGuildName[MAX_GUILDNAMESTRING]; // 길드이름 - INT iItemPos; // 성주의 표식의 위치 -} CSP_REQ_GUILDREGMARK, *LPCSP_REQ_GUILDREGMARK; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x10] 공성측 특정 등록 길드 마크 등록 요청 응답 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - CHAR szGuildName[MAX_GUILDNAMESTRING]; // 길드이름 - INT iItemPos; // 성주의 표식의 위치 - INT iRegMarkCount; // 등록된 문장수 -} CSP_ANS_GUILDREGMARK, *LPCSP_ANS_GUILDREGMARK; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x11] 공성측 특정 등록 길드 마크 개수 초기화 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - CHAR szGuildName[MAX_GUILDNAMESTRING]; // 길드이름 -} CSP_REQ_GUILDRESETMARK, *LPCSP_REQ_GUILDRESETMARK; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x11] 공성측 특정 등록 길드 마크 개수 초기화 요청 응답 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - CHAR szGuildName[MAX_GUILDNAMESTRING]; // 길드이름 - INT iRegMarkCount; // 이전까지 등록된 문장수 (현재는 없는것) -} CSP_ANS_GUILDRESETMARK, *LPCSP_ANS_GUILDRESETMARK; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x12] 공성측 특정 등록 길드 공성 포기여부 수정 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - CHAR szGuildName[MAX_GUILDNAMESTRING]; // 길드이름 - BOOL bIsGiveUp; // 공성 포기여부 -} CSP_REQ_GUILDSETGIVEUP, *LPCSP_REQ_GUILDSETGIVEUP; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x12] 공성측 특정 등록 길드 공성 포기여부 수정 요청 응답 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - CHAR szGuildName[MAX_GUILDNAMESTRING]; // 길드이름 - BOOL bIsGiveUp; // 공성 포기여부 - INT iRegMarkCount; // 등록된 문장수 (DB에서는 지워지고 돈으로 환불 받을 것) -} CSP_ANS_GUILDSETGIVEUP, *LPCSP_ANS_GUILDSETGIVEUP; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x16] 수성측 NPC 제거 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iNpcNumber; // NPC번호 - INT iNpcIndex; // NPC인덱스 -} CSP_REQ_NPCREMOVE, *LPCSP_REQ_NPCREMOVE; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x16] 수성측 NPC 제거 요청 응답 (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iNpcNumber; // NPC번호 - INT iNpcIndex; // NPC인덱스 -} CSP_ANS_NPCREMOVE, *LPCSP_ANS_NPCREMOVE; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x17] 현재의 공성상태 동기화 요청 (상태, 세율) (0xC1) -//---------------------------------------------------------------------------- -typedef struct { - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iCastleState; // 현재 성 상태 - INT iTaxRateChaos; // 현재 성 세율 (카오스 조합) - INT iTaxRateStore; // 현재 성 세율 (상점) - INT iTaxHuntZone; // 사냥터 입장료 - CHAR szOwnerGuildName[MAX_GUILDNAMESTRING]; // 현재 성을 차지하고 있는 길드이름 -} CSP_REQ_CASTLESTATESYNC, *LPCSP_REQ_CASTLESTATESYNC; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x17] 현재의 공성상태 동기화 요청 응답 (상태, 세율) (0xC1) -//---------------------------------------------------------------------------- -typedef struct -{ - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iCastleState; // 현재 성 상태 - INT iTaxRateChaos; // 현재 성 세율 (카오스 조합) - INT iTaxRateStore; // 현재 성 세율 (상점) - INT iTaxHuntZone; // 사냥터 입장료 - CHAR szOwnerGuildName[MAX_GUILDNAMESTRING]; // 현재 성을 차지하고 있는 길드이름 -} CSP_ANS_CASTLESTATESYNC, *LPCSP_ANS_CASTLESTATESYNC; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x18] 맵서버군의 성 공납금 추가 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct { - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iCastleTributeMoney; // 성 공납금 -} CSP_REQ_CASTLETRIBUTEMONEY, *LPCSP_REQ_CASTLETRIBUTEMONEY; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x18] 맵서버군의 성 공납금 추가 요청 응답 (0xC1) -//---------------------------------------------------------------------------- -typedef struct { - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 -} CSP_ANS_CASTLETRIBUTEMONEY, *LPCSP_ANS_CASTLETRIBUTEMONEY; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x19] 맵서버군의 성 세율, 돈 초기화 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct { - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 -} CSP_REQ_RESETCASTLETAXINFO, *LPCSP_REQ_RESETCASTLETAXINFO; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x19] 맵서버군의 성 세율, 돈 초기화 요청 응답 (0xC1) -//---------------------------------------------------------------------------- -typedef struct { - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 -} CSP_ANS_RESETCASTLETAXINFO, *LPCSP_ANS_RESETCASTLETAXINFO; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x1A] 공성 참여길드 리스트 초기화 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct { - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 -} CSP_REQ_RESETSIEGEGUILDINFO, *LPCSP_REQ_RESETSIEGEGUILDINFO; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x1A] 공성 참여길드 리스트 초기화 요청 응답 (0xC1) -//---------------------------------------------------------------------------- -typedef struct { - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 -} CSP_ANS_RESETSIEGEGUILDINFO, *LPCSP_ANS_RESETSIEGEGUILDINFO; - - -//---------------------------------------------------------------------------- -// GD [0x80][0x1B] 공성 참여신청 길드 리스트 초기화 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct { - PBMSG_HEAD2 h; - WORD wMapSvrNum; // 맵 서버군 번호 -} CSP_REQ_RESETREGSIEGEINFO, *LPCSP_REQ_RESETREGSIEGEINFO; - - -//---------------------------------------------------------------------------- -// DG [0x80][0x1B] 공성 참여신청 길드 리스트 초기화 요청 응답 (0xC1) +// [0x60] 이벤트 시작을 알린다. //---------------------------------------------------------------------------- -typedef struct { - PBMSG_HEAD2 h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 -} CSP_ANS_RESETREGSIEGEINFO, *LPCSP_ANS_RESETREGSIEGEINFO; +typedef struct +{ + PBMSG_HEAD h; + BYTE Event; +} SDHP_EVENTSTART, *LPSDHP_EVENTSTART; //---------------------------------------------------------------------------- -// GD [0x81] 공성전 최초 모든 초기화 데이터 요청 (0xC1) +// [0x61] 인증서버에서 이벤트 시작 또는 종료를 알린다 //---------------------------------------------------------------------------- typedef struct { PBMSG_HEAD h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iCastleEventCycle; // 공성전 주기 -} CSP_REQ_CSINITDATA, *LPCSP_REQ_CSINITDATA; + BYTE Event; // 이벤트 번호 + BYTE Stat; // 상태 0 : 종료 1 : 시작 +} SDHP_EVENTCONTROL, *LPSDHP_EVENTCONTROL; //---------------------------------------------------------------------------- -// DG [0x81] 공성전 최초 모든 초기화 데이터 요청 응답 (0xC2) +// [0x62] 인증서버에서 Reload 설정을 알린다 //---------------------------------------------------------------------------- typedef struct { - PWMSG_HEAD h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - WORD wStartYear; // 공성 시작 - 년 - BYTE btStartMonth; // 공성 시작 - 월 - BYTE btStartDay; // 공성 시작 - 일 - WORD wEndYear; // 공성 종료 - 년 - BYTE btEndMonth; // 공성 종료 - 월 - BYTE btEndDay; // 공성 종료 - 일 - BYTE btIsSiegeGuildList; // 공성관련 길드정보가 이미 구축되었는가 ? - BYTE btIsSiegeEnded; // 공성이 이미 치루어 졌는가 ? - BYTE btIsCastleOccupied; // 성이 이미 사용자들에게 차지된 상태인가 ? - CHAR szCastleOwnGuild[MAX_GUILDNAMESTRING]; // 캐슬을 차지한 길드명 (없으면 "") - INT64 i64CastleMoney; // 현재 성의 보유 젠 - INT iTaxRateChaos; // 카오스 조합 세율 - INT iTaxRateStore; // 상점 세율 - INT iTaxHuntZone; // 사냥터 입장료 - INT iFirstCreate; // 이것이 최초로 만드는 것인가 ? - INT iCount; // 데이터 개수 -} CSP_ANS_CSINITDATA, *LPCSP_ANS_CSINITDATA; + PBMSG_HEAD h; + BYTE Option; // 옵션 번호 +} SDHP_OPTIONCONTROL, *LPSDHP_OPTIONCONTROL; +// 0x30 typedef struct { - INT iNpcNumber; // NPC번호 - INT iNpcIndex; // NPC인덱스 - INT iNpcDfLevel; // 방어력 레벨 - INT iNpcRgLevel; // 회복력 레벨 - INT iNpcMaxHp; // 최대 HP - INT iNpcHp; // HP - BYTE btNpcX; // 좌표 - X - BYTE btNpcY; // 좌표 - Y - BYTE btNpcDIR; // 방향 -} CSP_CSINITDATA, *LPCSP_CSINITDATA; - + PBMSG_HEAD h; + char Account[MAX_IDSTRING]; + char Name[MAX_IDSTRING]; +} SDHP_LOVEHEARTEVENT, *LPSDHP_LOVEHEARTEVENT; -//---------------------------------------------------------------------------- -// GD [0x82] 수성측 NPC정보 정보 요청 (0xC1) -//---------------------------------------------------------------------------- +// 0x30 typedef struct { PBMSG_HEAD h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 -} CSP_REQ_NPCDATA, *LPCSP_REQ_NPCDATA; + BYTE Result; -//---------------------------------------------------------------------------- -// DG [0x82] 수성측 NPC정보 정보 요청 응답 (0xC2) -//---------------------------------------------------------------------------- -typedef struct -{ - PWMSG_HEAD h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - INT iCount; // 데이터 개수 -} CSP_ANS_NPCDATA, *LPCSP_ANS_NPCDATA; + char Name[MAX_IDSTRING]; + int Number; +} SDHP_LOVEHEARTEVENT_RESULT, *LPSDHP_LOVEHEARTEVENT_RESULT; + +// 0x40 전체 공지 typedef struct { - INT iNpcNumber; // NPC번호 - INT iNpcIndex; // NPC인덱스 - INT iNpcDfLevel; // 방어력 레벨 - INT iNpcRgLevel; // 회복력 레벨 - INT iNpcMaxHp; // 최대 HP - INT iNpcHp; // HP - BYTE btNpcX; // 좌표 - X - BYTE btNpcY; // 좌표 - Y - BYTE btNpcDIR; // 방향 -} CSP_NPCDATA, *LPCSP_NPCDATA; - + PBMSG_HEAD h; + char Notice[61]; +} SDHP_NOTICE, *LPSDHP_NOTICE; -//---------------------------------------------------------------------------- -// GD [0x83] 공성측 등록 길드 정보 요청 (0xC1) -//---------------------------------------------------------------------------- +// 0x41 유저 공지 typedef struct { PBMSG_HEAD h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 -} CSP_REQ_ALLGUILDREGINFO, *LPCSP_REQ_ALLGUILDREGINFO; + char szId[10]; + char Notice[61]; +} SDHP_USER_NOTICE, *LPSDHP_USER_NOTICE; -//---------------------------------------------------------------------------- -// DG [0x83] 공성측 등록 길드 정보 요청 응답 (0xC2) -//---------------------------------------------------------------------------- +// 0x42 게임 블럭 typedef struct { - PWMSG_HEAD h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iIndex; // 게임서버 오브젝트 인덱스 - INT iCount; // 데이터 개수 -} CSP_ANS_ALLGUILDREGINFO, *LPCSP_ANS_ALLGUILDREGINFO; + PBMSG_HEAD h; + int ClientIndex; + char AccountID[MAX_IDSTRING]; + BYTE ServerNum; + char CharName[MAX_IDSTRING]; + BYTE Type; +} SDHP_GAME_BLOCK, *LPSDHP_GAME_BLOCK; +// 0x42 게임 블럭 결과 typedef struct { - CHAR szGuildName[MAX_GUILDNAMESTRING]; // 길드이름 - INT iRegMarkCount; // 등록된 문장수 - bool bIsGiveUp; // 포기여부 - BYTE btRegRank; // 등록순위 -} CSP_GUILDREGINFO, *LPCSP_GUILDREGINFO; + PBMSG_HEAD h; + BYTE Result; +} SDHP_GAME_BLOCK_RESULT, *LPSDHP_GAME_BLOCK_RESULT; -//---------------------------------------------------------------------------- -// GD [0x84] 수성측 NPC 리스트 즉시 생성 요청 (0xC2) -//---------------------------------------------------------------------------- +// 0xCF 캐릭터 이동 typedef struct { - PWMSG_HEAD h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iCount; // 데이터 개수 -} CSP_REQ_NPCSAVEDATA, *LPCSP_REQ_NPCSAVEDATA; + PBMSG_HEAD h; + char Account[MAX_IDSTRING]; + short Number; +} SDHP_CHARACTER_TRANSFER, *LPSDHP_CHARACTER_TRANSFER; typedef struct { - INT iNpcNumber; // NPC번호 - INT iNpcIndex; // NPC인덱스 - INT iNpcDfLevel; // 방어력 레벨 - INT iNpcRgLevel; // 회복력 레벨 - INT iNpcMaxHp; // 최대 HP - INT iNpcHp; // HP - BYTE btNpcX; // 좌표 - X - BYTE btNpcY; // 좌표 - Y - BYTE btNpcDIR; // 방향 -} CSP_NPCSAVEDATA, *LPCSP_NPCSAVEDATA; - + PBMSG_HEAD h; + char Account[MAX_IDSTRING]; + short Number; + BYTE Result; +} SDHP_CHARACTER_TRANSFER_RESULT, *LPSDHP_CHARACTER_TRANSFER_RESULT; //---------------------------------------------------------------------------- -// DG [0x84] 수성측 NPC 리스트 즉시 생성 요청 응답 (0xC1) +// GD[0x16] 캐릭터 변경을 요청. //---------------------------------------------------------------------------- typedef struct { PBMSG_HEAD h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 -} CSP_ANS_NPCSAVEDATA, *LPCSP_ANS_NPCSAVEDATA; - + int aIndex; + char AccountId[MAX_IDSTRING]; + char OldName[MAX_IDSTRING]; + char NewName[MAX_IDSTRING]; +} SDHP_CHANGE_NAME, *LPSDHP_CHANGE_NAME; //---------------------------------------------------------------------------- -// GD [0x85] 공성측 길드선정 후보자료 요청 (0xC1) +// DG[0x16] 캐릭터 변경을 요청 결과. //---------------------------------------------------------------------------- typedef struct { PBMSG_HEAD h; - WORD wMapSvrNum; // 맵 서버군 번호 -} CSP_REQ_CALCREGGUILDLIST, *LPCSP_REQ_CALCREGGUILDLIST; - + int aIndex; + char AccountId[MAX_IDSTRING]; + char OldName[MAX_IDSTRING]; + char NewName[MAX_IDSTRING]; + BYTE btResult; // 0: 성공, 1: 동일 캐릭터명 존재 +} SDHP_CHANGE_NAME_RESULT, *LPSDHP_CHANGE_NAME_RESULT; -//---------------------------------------------------------------------------- -// DG [0x85] 공성측 길드선정 후보자료 요청 응답 (0xC2) -//---------------------------------------------------------------------------- -typedef struct -{ - PWMSG_HEAD h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iCount; // 데이터 개수 -} CSP_ANS_CALCREGGUILDLIST, *LPCSP_ANS_CALCREGGUILDLIST; -typedef struct -{ - CHAR szGuildName[MAX_GUILDNAMESTRING]; // 길드이름 - INT iRegMarkCount; // 등록된 문장수 - INT iGuildMemberCount; // 길드멤버 수 - INT iGuildMasterLevel; // 길드마스터 레벨 - INT iSeqNum; // 등록 순서 -} CSP_CALCREGGUILDLIST, *LPCSP_CALCREGGUILDLIST; +typedef struct CSP_REQ_CASTLEDATA +{ + PBMSG_HEAD2 h; // C1:80:00 GS->DS + WORD wMapSvrNum; + int iCastleEventCycle; +} *LPCSP_REQ_CASTLEDATA; + +typedef struct CSP_ANS_CASTLEDATA +{ + PBMSG_HEAD2 h; // C1:80:00 DS->GS + int iResult; + WORD wMapSvrNum; + WORD wStartYear; + BYTE btStartMonth; + BYTE btStartDay; + WORD wEndYear; + BYTE btEndMonth; + BYTE btEndDay; + BYTE btIsSiegeGuildList; + BYTE btIsSiegeEnded; + BYTE btIsCastleOccupied; + char szCastleOwnGuild[MAX_GUILDNAMESTRING]; + __int64 i64CastleMoney; + int iTaxRateChaos; + int iTaxRateStore; + int iTaxHuntZone; + int iFirstCreate; +} *LPCSP_ANS_CASTLEDATA; + +typedef struct CSP_REQ_OWNERGUILDMASTER +{ + PBMSG_HEAD2 h; // C1:80:01 GS->DS + WORD wMapSvrNum; + int iIndex; +} *LPCSP_REQ_OWNERGUILDMASTER; + +typedef struct CSP_ANS_OWNERGUILDMASTER +{ + PBMSG_HEAD2 h; // C1:80:01 DS->GS + int iResult; + WORD wMapSvrNum; + int iIndex; + char szCastleOwnGuild[MAX_GUILDNAMESTRING]; + char szCastleOwnGuildMaster[MAX_IDSTRING]; +} *LPCSP_ANS_OWNERGUILDMASTER; + +typedef struct CSP_REQ_NPCBUY +{ + PBMSG_HEAD2 h; // C1:80:03 GS->DS + WORD wMapSvrNum; + int iIndex; + int iNpcNumber; + int iNpcIndex; + int iNpcDfLevel; + int iNpcRgLevel; + int iNpcMaxHp; + int iNpcHp; + BYTE btNpcX; + BYTE btNpcY; + BYTE btNpcDIR; + int iBuyCost; +} *LPCSP_REQ_NPCBUY; + +typedef struct CSP_ANS_NPCBUY +{ + PBMSG_HEAD2 h; // C1:80:03 DS->GS + int iResult; + WORD wMapSvrNum; + int iIndex; + int iNpcNumber; + int iNpcIndex; + int iBuyCost; +} *LPCSP_ANS_NPCBUY; + +typedef struct CSP_REQ_NPCREPAIR +{ + PBMSG_HEAD2 h; // C1:80:04 GS->DS + WORD wMapSvrNum; + int iIndex; + int iNpcNumber; + int iNpcIndex; + int iRepairCost; +} *LPCSP_REQ_NPCREPAIR; + +typedef struct CSP_ANS_NPCREPAIR +{ + PBMSG_HEAD2 h; // C1:80:04 DS->GS + int iResult; + WORD wMapSvrNum; + int iIndex; + int iNpcNumber; + int iNpcIndex; + int iNpcMaxHp; + int iNpcHp; + int iRepairCost; +} *LPCSP_ANS_NPCREPAIR; + +typedef struct CSP_REQ_NPCUPGRADE +{ + PBMSG_HEAD2 h; // C1:80:05 GS->DS + WORD wMapSvrNum; + int iIndex; + int iNpcNumber; + int iNpcIndex; + int iNpcUpType; + int iNpcUpValue; + int iNpcUpIndex; +} *LPCSP_REQ_NPCUPGRADE; + +typedef struct CSP_ANS_NPCUPGRADE +{ + PBMSG_HEAD2 h; // C1:80:05 DS->GS + int iResult; + WORD wMapSvrNum; + int iIndex; + int iNpcNumber; + int iNpcIndex; + int iNpcUpType; + int iNpcUpValue; + int iNpcUpIndex; +} *LPCSP_ANS_NPCUPGRADE; + +typedef struct CSP_REQ_TAXINFO +{ + PBMSG_HEAD2 h; // C1:80:06 GS->DS + WORD wMapSvrNum; + int iIndex; +} *LPCSP_REQ_TAXINFO; + +typedef struct CSP_ANS_TAXINFO +{ + PBMSG_HEAD2 h; // C1:80:06 DS->GS + int iResult; + WORD wMapSvrNum; + int iIndex; + __int64 i64CastleMoney; + int iTaxRateChaos; + int iTaxRateStore; + int iTaxHuntZone; +} *LPCSP_ANS_TAXINFO; + +typedef struct CSP_REQ_TAXRATECHANGE +{ + PBMSG_HEAD2 h; // C1:80:07 GS->DS + WORD wMapSvrNum; + int iIndex; + int iTaxKind; + int iTaxRate; +} *LPCSP_REQ_TAXRATECHANGE; + +typedef struct CSP_ANS_TAXRATECHANGE +{ + PBMSG_HEAD2 h; // C1:80:07 DS->GS + int iResult; + WORD wMapSvrNum; + int iIndex; + int iTaxKind; + int iTaxRate; +} *LPCSP_ANS_TAXRATECHANGE; + + +typedef struct CSP_REQ_MONEYCHANGE +{ + PBMSG_HEAD2 h; // C1:80:08 GS->DS + WORD wMapSvrNum; + int iIndex; + int iMoneyChanged; +} *LPCSP_REQ_MONEYCHANGE; + +typedef struct CSP_ANS_MONEYCHANGE +{ + PBMSG_HEAD2 h; // C1:80:08 DS->GS + int iResult; + WORD wMapSvrNum; + int iIndex; + int iMoneyChanged; + __int64 i64CastleMoney; +} *LPCSP_ANS_MONEYCHANGE; + +typedef struct CSP_REQ_SDEDCHANGE +{ + PBMSG_HEAD2 h; // C1:80:09 GS->DS + WORD wMapSvrNum; + int iIndex; + WORD wStartYear; + BYTE btStartMonth; + BYTE btStartDay; + WORD wEndYear; + BYTE btEndMonth; + BYTE btEndDay; +} *LPCSP_REQ_SDEDCHANGE; + +typedef struct CSP_ANS_SDEDCHANGE +{ + PBMSG_HEAD2 h; // C1:80:09 DS->GS + int iResult; + WORD wMapSvrNum; + int iIndex; + WORD wStartYear; + BYTE btStartMonth; + BYTE btStartDay; + WORD wEndYear; + BYTE btEndMonth; + BYTE btEndDay; +} *LPCSP_ANS_SDEDCHANGE; + +typedef struct CSP_REQ_GUILDREGINFO +{ + PBMSG_HEAD2 h; // C1:80:0A GS->DS + WORD wMapSvrNum; + int iIndex; + char szGuildName[MAX_GUILDNAMESTRING]; +} *LPCSP_REQ_GUILDREGINFO; + +typedef struct CSP_ANS_GUILDREGINFO +{ + PBMSG_HEAD2 h; // C1:80:0A DS->GS + int iResult; + WORD wMapSvrNum; + int iIndex; + char szGuildName[MAX_GUILDNAMESTRING]; + int iRegMarkCount; + bool bIsGiveUp; + BYTE btRegRank; +} *LPCSP_ANS_GUILDREGINFO; + +typedef struct CSP_REQ_SIEGEENDCHANGE +{ + PBMSG_HEAD2 h; // C1:80:0B GS->DS + WORD wMapSvrNum; + BOOL bIsSiegeEnded; +} *LPCSP_REQ_SIEGEENDCHANGE; + +typedef struct CSP_ANS_SIEGEENDCHANGE +{ + PBMSG_HEAD2 h; // C1:80:0B DS->GS + int iResult; + WORD wMapSvrNum; + BOOL bIsSiegeEnded; +} *LPCSP_ANS_SIEGEENDCHANGE; + +typedef struct CSP_REQ_CASTLEOWNERCHANGE +{ + PBMSG_HEAD2 h; // C1:80:0C GS->DS + WORD wMapSvrNum; + BOOL bIsCastleOccupied; + char szOwnerGuildName[MAX_GUILDNAMESTRING]; +} *LPCSP_REQ_CASTLEOWNERCHANGE; + +typedef struct CSP_ANS_CASTLEOWNERCHANGE +{ + PBMSG_HEAD2 h; // C1:80:0C DS->GS + int iResult; + WORD wMapSvrNum; + BOOL bIsCastleOccupied; + char szOwnerGuildName[MAX_GUILDNAMESTRING]; +} *LPCSP_ANS_CASTLEOWNERCHANGE; + +typedef struct CSP_REQ_REGATTACKGUILD +{ + PBMSG_HEAD2 h; // C1:80:0D GS->DS + WORD wMapSvrNum; + int iIndex; + char szEnemyGuildName[MAX_GUILDNAMESTRING]; +} *LPCSP_REQ_REGATTACKGUILD; + +typedef struct CSP_ANS_REGATTACKGUILD +{ + PBMSG_HEAD2 h; // C1:80:0D DS->GS + int iResult; + WORD wMapSvrNum; + int iIndex; + char szEnemyGuildName[MAX_GUILDNAMESTRING]; +} *LPCSP_ANS_REGATTACKGUILD; + +typedef struct CSP_REQ_CASTLESIEGEEND +{ + PBMSG_HEAD2 h; // C1:80:0E GS->DS + WORD wMapSvrNum; +} *LPCSP_REQ_CASTLESIEGEEND; + +typedef struct CSP_ANS_CASTLESIEGEEND +{ + PBMSG_HEAD2 h; // C1:80:0E DS->GS + int iResult; + WORD wMapSvrNum; +} *LPCSP_ANS_CASTLESIEGEEND; + +typedef struct CSP_REQ_MAPSVRMULTICAST +{ + PBMSG_HEAD2 h; // C1:80:0F GS->DS + WORD wMapSvrNum; + char szMsgText[128]; +} *LPCSP_REQ_MAPSVRMULTICAST; + +typedef struct CSP_ANS_MAPSVRMULTICAST +{ + PBMSG_HEAD2 h; // C1:80:0F DS->GS + WORD wMapSvrNum; + char szMsgText[128]; +} *LPCSP_ANS_MAPSVRMULTICAST; + +typedef struct CSP_REQ_GUILDREGMARK +{ + PBMSG_HEAD2 h; // C1:80:10 GS->DS + WORD wMapSvrNum; + int iIndex; + char szGuildName[MAX_GUILDNAMESTRING]; + int iItemPos; +} *LPCSP_REQ_GUILDREGMARK; + +typedef struct CSP_ANS_GUILDREGMARK +{ + PBMSG_HEAD2 h; // C1:80:10 DS->GS + int iResult; + WORD wMapSvrNum; + int iIndex; + char szGuildName[MAX_GUILDNAMESTRING]; + int iItemPos; + int iRegMarkCount; +} *LPCSP_ANS_GUILDREGMARK; + +typedef struct CSP_REQ_GUILDRESETMARK +{ + PBMSG_HEAD2 h; // C1:80:11 GS->DS + WORD wMapSvrNum; + int iIndex; + char szGuildName[MAX_GUILDNAMESTRING]; +} *LPCSP_REQ_GUILDRESETMARK; + +typedef struct CSP_ANS_GUILDRESETMARK +{ + PBMSG_HEAD2 h; // C1:80:11 DS->GS + int iResult; + WORD wMapSvrNum; + int iIndex; + char szGuildName[MAX_GUILDNAMESTRING]; + int iRegMarkCount; +} *LPCSP_ANS_GUILDRESETMARK; + +typedef struct CSP_REQ_GUILDSETGIVEUP +{ + PBMSG_HEAD2 h; // C1:80:12 GS->DS + WORD wMapSvrNum; + int iIndex; + char szGuildName[MAX_GUILDNAMESTRING]; + BOOL bIsGiveUp; +} *LPCSP_REQ_GUILDSETGIVEUP; +typedef struct CSP_ANS_GUILDSETGIVEUP +{ + PBMSG_HEAD2 h; // C1:80:12 DS->GS + int iResult; + WORD wMapSvrNum; + int iIndex; + char szGuildName[MAX_GUILDNAMESTRING]; + BOOL bIsGiveUp; + int iRegMarkCount; +} *LPCSP_ANS_GUILDSETGIVEUP; -//---------------------------------------------------------------------------- -// GD [0x86] 공/수 길드의 연합정보를 요청 (0xC2) -//---------------------------------------------------------------------------- -typedef struct +typedef struct CSP_REQ_NPCREMOVE { - PWMSG_HEAD h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iCount; // 데이터 개수 -} CSP_REQ_CSGUILDUNIONINFO, *LPCSP_REQ_CSGUILDUNIONINFO; - -typedef struct + PBMSG_HEAD2 h; // C1:80:16 GS->DS + WORD wMapSvrNum; + int iNpcNumber; + int iNpcIndex; +} *LPCSP_REQ_NPCREMOVE; + +typedef struct CSP_ANS_NPCREMOVE +{ + PBMSG_HEAD2 h; // C1:80:16 DS->GS + int iResult; + WORD wMapSvrNum; + int iNpcNumber; + int iNpcIndex; +} *LPCSP_ANS_NPCREMOVE; + +typedef struct CSP_REQ_CASTLESTATESYNC +{ + PBMSG_HEAD2 h; // C1:80:17 GS->DS + WORD wMapSvrNum; + int iCastleState; + int iTaxRateChaos; + int iTaxRateStore; + int iTaxHuntZone; + char szOwnerGuildName[MAX_GUILDNAMESTRING]; +} *LPCSP_REQ_CASTLESTATESYNC; + +typedef struct CSP_ANS_CASTLESTATESYNC +{ + PBMSG_HEAD2 h; // C1:80:17 DS->GS + WORD wMapSvrNum; + int iCastleState; + int iTaxRateChaos; + int iTaxRateStore; + int iTaxHuntZone; + char szOwnerGuildName[MAX_GUILDNAMESTRING]; +} *LPCSP_ANS_CASTLESTATESYNC; + +typedef struct CSP_REQ_CASTLETRIBUTEMONEY +{ + PBMSG_HEAD2 h; // C1:80:18 GS->DS + WORD wMapSvrNum; + int iCastleTributeMoney; +} *LPCSP_REQ_CASTLETRIBUTEMONEY; + +typedef struct CSP_ANS_CASTLETRIBUTEMONEY +{ + PBMSG_HEAD2 h; // C1:80:18 DS->GS + int iResult; + WORD wMapSvrNum; +} *LPCSP_ANS_CASTLETRIBUTEMONEY; + +typedef struct CSP_REQ_RESETCASTLETAXINFO +{ + PBMSG_HEAD2 h; // C1:80:19 GS->DS + WORD wMapSvrNum; +} *LPCSP_REQ_RESETCASTLETAXINFO; + +typedef struct CSP_ANS_RESETCASTLETAXINFO +{ + PBMSG_HEAD2 h; // C1:80:19 DS->GS + int iResult; + WORD wMapSvrNum; +} *LPCSP_ANS_RESETCASTLETAXINFO; + +typedef struct CSP_REQ_RESETSIEGEGUILDINFO +{ + PBMSG_HEAD2 h; // C1:80:1A GS->DS + WORD wMapSvrNum; +} *LPCSP_REQ_RESETSIEGEGUILDINFO; + +typedef struct CSP_ANS_RESETSIEGEGUILDINFO +{ + PBMSG_HEAD2 h; // C1:80:1A DS->GS + int iResult; + WORD wMapSvrNum; +} *LPCSP_ANS_RESETSIEGEGUILDINFO; + +typedef struct CSP_REQ_RESETREGSIEGEINFO +{ + PBMSG_HEAD2 h; // C1:80:1B GS->DS + WORD wMapSvrNum; +} *LPCSP_REQ_RESETREGSIEGEINFO; + +typedef struct CSP_ANS_RESETREGSIEGEINFO +{ + PBMSG_HEAD2 h; // C1:80:1B DS->GS + int iResult; + WORD wMapSvrNum; +} *LPCSP_ANS_RESETREGSIEGEINFO; + +typedef struct CSP_REQ_CSINITDATA +{ + PBMSG_HEAD h; // C1:81 GS->DS + WORD wMapSvrNum; + int iCastleEventCycle; +} *LPCSP_REQ_CSINITDATA; + +typedef struct CSP_ANS_CSINITDATA +{ + PWMSG_HEAD h; // C2:81 DS->GS + int iResult; + WORD wMapSvrNum; + WORD wStartYear; + BYTE btStartMonth; + BYTE btStartDay; + WORD wEndYear; + BYTE btEndMonth; + BYTE btEndDay; + BYTE btIsSiegeGuildList; + BYTE btIsSiegeEnded; + BYTE btIsCastleOccupied; + BYTE szCastleOwnGuild[MAX_GUILDNAMESTRING]; + __int64 i64CastleMoney; + int iTaxRateChaos; + int iTaxRateStore; + int iTaxHuntZone; + int iFirstCreate; + int iCount; +} *LPCSP_ANS_CSINITDATA; + +typedef struct CSP_CSINITDATA +{ + int iNpcNumber; + int iNpcIndex; + int iNpcDfLevel; + int iNpcRgLevel; + int iNpcMaxHp; + int iNpcHp; + BYTE btNpcX; + BYTE btNpcY; + BYTE btNpcDIR; +} *LPCSP_CSINITDATA; + +typedef struct CSP_REQ_NPCDATA +{ + PBMSG_HEAD h; // C1:82 GS->DS + WORD wMapSvrNum; + int iIndex; +} *LPCSP_REQ_NPCDATA; + +typedef struct CSP_ANS_NPCDATA +{ + PWMSG_HEAD h; // C2:82 DS->GS + int iResult; + WORD wMapSvrNum; + int iIndex; + int iCount; +} *LPCSP_ANS_NPCDATA; + +typedef struct CSP_NPCDATA +{ + int iNpcNumber; + int iNpcIndex; + int iNpcDfLevel; + int iNpcRgLevel; + int iNpcMaxHp; + int iNpcHp; + BYTE btNpcX; + BYTE btNpcY; + BYTE btNpcDIR; +} *LPCSP_NPCDATA; + +typedef struct CSP_REQ_ALLGUILDREGINFO +{ + PBMSG_HEAD h; // C1:83 GS->DS + WORD wMapSvrNum; + int iIndex; +} *LPCSP_REQ_ALLGUILDREGINFO; + +typedef struct CSP_ANS_ALLGUILDREGINFO +{ + PWMSG_HEAD h; // C2:83 DS->GS + int iResult; + WORD wMapSvrNum; + int iIndex; + int iCount; +} *LPCSP_ANS_ALLGUILDREGINFO; + +typedef struct CSP_GUILDREGINFO +{ + char szGuildName[MAX_GUILDNAMESTRING]; + int iRegMarkCount; + bool bIsGiveUp; + BYTE btRegRank; +} *LPCSP_GUILDREGINFO; + +typedef struct CSP_REQ_NPCSAVEDATA +{ + PWMSG_HEAD h; // C2:84 GS->DS + WORD wMapSvrNum; + int iCount; +} *LPCSP_REQ_NPCSAVEDATA; + +typedef struct CSP_NPCSAVEDATA +{ + int iNpcNumber; + int iNpcIndex; + int iNpcDfLevel; + int iNpcRgLevel; + int iNpcMaxHp; + int iNpcHp; + BYTE btNpcX; + BYTE btNpcY; + BYTE btNpcDIR; +} *LPCSP_NPCSAVEDATA; + +typedef struct CSP_ANS_NPCSAVEDATA +{ + PBMSG_HEAD h; // C1:84 DS->GS + int iResult; + WORD wMapSvrNum; +} *LPCSP_ANS_NPCSAVEDATA; + +typedef struct CSP_REQ_CALCREGGUILDLIST +{ + PBMSG_HEAD h; // C1:85 GS->DS + WORD wMapSvrNum; +} *LPCSP_REQ_CALCREGGUILDLIST; + +typedef struct CSP_ANS_CALCREGGUILDLIST +{ + PWMSG_HEAD h; // C2:85 DS->GS + int iResult; + WORD wMapSvrNum; + int iCount; +} *LPCSP_ANS_CALCREGGUILDLIST; + +typedef struct CSP_CALCREGGUILDLIST +{ + char szGuildName[MAX_GUILDNAMESTRING]; + int iRegMarkCount; + int iGuildMemberCount; + int iGuildMasterLevel; + int iSeqNum; +} *LPCSP_CALCREGGUILDLIST; + +typedef struct CSP_REQ_CSGUILDUNIONINFO { - CHAR szGuildName[MAX_GUILDNAMESTRING]; // 길드이름 - INT iCsGuildID; // 공성시 사용하는 공/수 길드 체크값 -} CSP_CSGUILDUNIONINFO, *LPCSP_CSGUILDUNIONINFO; - - -//---------------------------------------------------------------------------- -// DG [0x86] 공/수 길드의 연합정보를 요청 응답 (0xC2) -//---------------------------------------------------------------------------- -typedef struct + PWMSG_HEAD h; // C2:86 GS->DS + WORD wMapSvrNum; + int iCount; +} *LPCSP_REQ_CSGUILDUNIONINFO; + +typedef struct CSP_CSGUILDUNIONINFO { - PWMSG_HEAD h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iCount; // 데이터 개수 -} CSP_ANS_CSGUILDUNIONINFO, *LPCSP_ANS_CSGUILDUNIONINFO; + char szGuildName[MAX_GUILDNAMESTRING]; + int iCsGuildID; +} *LPCSP_CSGUILDUNIONINFO; -// 응답으로 이 뒤에 CSP_CSGUILDUNIONINFO 의 데이터가 iCount 개 존재 - - -//---------------------------------------------------------------------------- -// GD [0x87] 공/수 길드의 최종정보를 저장 요청 (0xC2) -//---------------------------------------------------------------------------- -typedef struct +typedef struct CSP_ANS_CSGUILDUNIONINFO { - PWMSG_HEAD h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iCount; // 데이터 개수 -} CSP_REQ_CSSAVETOTALGUILDINFO, *LPCSP_REQ_CSSAVETOTALGUILDINFO; + PWMSG_HEAD h; // C2:86 DS->GS + int iResult; + WORD wMapSvrNum; + int iCount; +} *LPCSP_ANS_CSGUILDUNIONINFO; -typedef struct +typedef struct CSP_REQ_CSSAVETOTALGUILDINFO { - CHAR szGuildName[MAX_GUILDNAMESTRING]; // 길드이름 - INT iCsGuildID; // 공/수 각 길드의 고유의 ID (1:수성 / 2이상:공성) - INT iGuildInvolved; // 공성전의 당사자 길드 들인가 ? -#ifdef ADD_CASTLE_TOTAL_GUILD_SCORE_20061123 - INT iGuildScore; // 선정될 당시의 길드 점수 -#endif -} CSP_CSSAVETOTALGUILDINFO, *LPCSP_CSSAVETOTALGUILDINFO; - + PWMSG_HEAD h; // C2:87 GS->DS + WORD wMapSvrNum; + int iCount; +} *LPCSP_REQ_CSSAVETOTALGUILDINFO; -//---------------------------------------------------------------------------- -// DG [0x87] 공/수 길드의 최종정보를 저장 요청 응답 (0xC1) -//---------------------------------------------------------------------------- -typedef struct +typedef struct CSP_CSSAVETOTALGUILDINFO { - PBMSG_HEAD h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 -} CSP_ANS_CSSAVETOTALGUILDINFO, *LPCSP_ANS_CSSAVETOTALGUILDINFO; + char szGuildName[MAX_GUILDNAMESTRING]; + int iCsGuildID; + int iGuildInvolved; + int iGuildScore; +} *LPCSP_CSSAVETOTALGUILDINFO; - -//---------------------------------------------------------------------------- -// GD [0x88] 공/수 길드의 최종정보를 불러오기 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct +typedef struct CSP_ANS_CSSAVETOTALGUILDINFO { - PBMSG_HEAD h; - WORD wMapSvrNum; // 맵 서버군 번호 -} CSP_REQ_CSLOADTOTALGUILDINFO, *LPCSP_REQ_CSLOADTOTALGUILDINFO; - + PBMSG_HEAD h; // C1:87 DS->GS + int iResult; + WORD wMapSvrNum; +} *LPCSP_ANS_CSSAVETOTALGUILDINFO; -//---------------------------------------------------------------------------- -// DG [0x88] 공/수 길드의 최종정보를 불러오기 요청 응답 (0xC2) -//---------------------------------------------------------------------------- -typedef struct +typedef struct CSP_REQ_CSLOADTOTALGUILDINFO { - PWMSG_HEAD h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 - INT iCount; // 데이터 개수 -} CSP_ANS_CSLOADTOTALGUILDINFO, *LPCSP_ANS_CSLOADTOTALGUILDINFO; + PBMSG_HEAD h; // C1:88 GS->DS + WORD wMapSvrNum; +} *LPCSP_REQ_CSLOADTOTALGUILDINFO; -typedef struct +typedef struct CSP_ANS_CSLOADTOTALGUILDINFO { - CHAR szGuildName[MAX_GUILDNAMESTRING]; // 길드이름 - INT iCsGuildID; // 공/수 각 길드의 고유의 ID (1:수성 / 2이상:공성) - INT iGuildInvolved; // 공성전의 당사자 길드 들인가 ? -#ifdef ADD_CASTLE_TOTAL_GUILD_SCORE_20061123 - INT iGuildScore; // 길드 선정 당시의 점수 -#endif -} CSP_CSLOADTOTALGUILDINFO, *LPCSP_CSLOADTOTALGUILDINFO; + PWMSG_HEAD h; // C2:88 DS->GS + int iResult; + WORD wMapSvrNum; + int iCount; +} *LPCSP_ANS_CSLOADTOTALGUILDINFO; - -//---------------------------------------------------------------------------- -// GD [0x89] 수성측 NPC 리스트 정보갱신 요청 (0xC2) -//---------------------------------------------------------------------------- -typedef struct +typedef struct CSP_CSLOADTOTALGUILDINFO { - PWMSG_HEAD h; - WORD wMapSvrNum; // 맵 서버군 번호 - INT iCount; // 데이터 개수 -} CSP_REQ_NPCUPDATEDATA, *LPCSP_REQ_NPCUPDATEDATA; + char szGuildName[MAX_GUILDNAMESTRING]; + int iCsGuildID; + int iGuildInvolved; + int iGuildScore; +} *LPCSP_CSLOADTOTALGUILDINFO; -typedef struct +typedef struct CSP_REQ_NPCUPDATEDATA { - INT iNpcNumber; // NPC번호 - INT iNpcIndex; // NPC인덱스 - INT iNpcDfLevel; // 방어력 레벨 - INT iNpcRgLevel; // 회복력 레벨 - INT iNpcMaxHp; // 최대 HP - INT iNpcHp; // HP - BYTE btNpcX; // 좌표 - X - BYTE btNpcY; // 좌표 - Y - BYTE btNpcDIR; // 방향 -} CSP_NPCUPDATEDATA, *LPCSP_NPCUPDATEDATA; + PWMSG_HEAD h; // C2:89 GS->DS + WORD wMapSvrNum; + int iCount; +} *LPCSP_REQ_NPCUPDATEDATA; - -//---------------------------------------------------------------------------- -// DG [0x89] 수성측 NPC 리스트 정보갱신 요청 응답 (0xC1) -//---------------------------------------------------------------------------- -typedef struct +typedef struct CSP_NPCUPDATEDATA { - PBMSG_HEAD h; - INT iResult; // 성공여부 (0:실패/1:성공) - WORD wMapSvrNum; // 맵 서버군 번호 -} CSP_ANS_NPCUPDATEDATA, *LPCSP_ANS_NPCUPDATEDATA; - + int iNpcNumber; + int iNpcIndex; + int iNpcDfLevel; + int iNpcRgLevel; + int iNpcMaxHp; + int iNpcHp; + BYTE btNpcX; + BYTE btNpcY; + BYTE btNpcDIR; +} *LPCSP_NPCUPDATEDATA; -#endif // MU_CASTLESIEGE_DS_PROTOCOL_20041105 - - - - - -#ifdef MU_CRYWOLF_DS_PROTOCOL_20050505 // 크라이울프 관련 GS <-> DS 프로토콜 정의 - -//---------------------------------------------------------------------------- -// GD [0xB0] 크라이울프 현재 상태 동기화 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct +typedef struct CSP_ANS_NPCUPDATEDATA { - PBMSG_HEAD h; - - WORD wMapSvrNum; // 맵 서버군 번호 - - INT iCrywolfState; // 현재 크라이울프 진행 상태 - INT iOccupationState; // 현재 크라이울프 점령 상태 + PBMSG_HEAD h; // C1:89 DS->GS + int iResult; + WORD wMapSvrNum; +} *LPCSP_ANS_NPCUPDATEDATA; -} CWP_REQ_CRYWOLFSYNC, *LPCWP_REQ_CRYWOLFSYNC; - - -//---------------------------------------------------------------------------- -// DG [0xB0] 크라이울프 현재 상태 동기화 요청 응답 (0xC1) -//---------------------------------------------------------------------------- -typedef struct +typedef struct CWP_REQ_CRYWOLFSYNC { - PBMSG_HEAD h; - - BYTE btResult; - - INT iCrywolfState; // 현재 크라이울프 진행 상태 - INT iOccupationState; // 현재 크라이울프 점령 상태 + PBMSG_HEAD h; // C1:B0 GS->DS + WORD wMapSvrNum; + int iCrywolfState; + int iOccupationState; +} *LPCWP_REQ_CRYWOLFSYNC; -} CWP_ANS_CRYWOLFSYNC, *LPCWP_ANS_CRYWOLFSYNC; - -//---------------------------------------------------------------------------- -// GD [0xB1] 크라이울프 정보 로드 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct +typedef struct CWP_ANS_CRYWOLFSYNC { - PBMSG_HEAD h; - - WORD wMapSvrNum; // 맵 서버군 번호 - -} CWP_REQ_CRYWOLFINFOLOAD, *LPCWP_REQ_CRYWOLFINFOLOAD; - + PBMSG_HEAD h; // C1:B0 DS->GS + BYTE btResult; + int iCrywolfState; + int iOccupationState; +} *LPCWP_ANS_CRYWOLFSYNC; -//---------------------------------------------------------------------------- -// DG [0xB1] 크라이울프 정보 로드 요청 응답 (0xC1) -//---------------------------------------------------------------------------- -typedef struct +typedef struct CWP_REQ_CRYWOLFINFOLOAD { - PBMSG_HEAD h; - - BYTE btResult; - - INT iCrywolfState; // 현재 크라이울프 진행 상태 - INT iOccupationState; // 현재 크라이울프 점령 상태 - -} CWP_ANS_CRYWOLFINFOLOAD, *LPCWP_ANS_CRYWOLFINFOLOAD; + PBMSG_HEAD h; // C1:B1 GS->DS + WORD wMapSvrNum; +} *LPCWP_REQ_CRYWOLFINFOLOAD; -//---------------------------------------------------------------------------- -// GD [0xB2] 크라이울프 정보 저장 요청 (0xC1) -//---------------------------------------------------------------------------- -typedef struct +typedef struct CWP_ANS_CRYWOLFINFOLOAD { - PBMSG_HEAD h; - - WORD wMapSvrNum; // 맵 서버군 번호 - - INT iCrywolfState; // 현재 크라이울프 진행 상태 - INT iOccupationState; // 현재 크라이울프 점령 상태 - -} CWP_REQ_CRYWOLFINFOSAVE, *LPCWP_REQ_CRYWOLFINFOSAVE; - + PBMSG_HEAD h; // C1:B1 DS->GS + BYTE btResult; + int iCrywolfState; + int iOccupationState; +} *LPCWP_ANS_CRYWOLFINFOLOAD; -//---------------------------------------------------------------------------- -// DG [0xB2] 크라이울프 정보 저장 요청 응답 (0xC1) -//---------------------------------------------------------------------------- -typedef struct +typedef struct CWP_REQ_CRYWOLFINFOSAVE { - PBMSG_HEAD h; - - BYTE btResult; + PBMSG_HEAD h; // C1:B2 GS->DS + WORD wMapSvrNum; + int iCrywolfState; + int iOccupationState; +} *LPCWP_REQ_CRYWOLFINFOSAVE; -} CWP_ANS_CRYWOLFINFOSAVE, *LPCWP_ANS_CRYWOLFINFOSAVE; - -#endif // MU_CRYWOLF_DS_PROTOCOL_20050505 +typedef struct CWP_ANS_CRYWOLFINFOSAVE +{ + PBMSG_HEAD h; // C1:B2 DS->GS + BYTE btResult; +} *LPCWP_ANS_CRYWOLFINFOSAVE; #ifdef MASTER_LEVEL_UP_SYSTEM_20070912 // DS <-> GS 프로토콜 //---------------------------------------------------------------------------- @@ -4571,18 +4191,6 @@ struct SDHP_RENEW_RANKING char byCCFType; }; -/* 1080 */ -struct PMSG_REQ_UBF_ACCOUNT_USERINFO -{ - PBMSG_HEAD2 h; - int iUserIndex; - char szAccountID[11]; - char szName[11]; - int iServerCode; - int IsUnityBattleFieldServer; - char btObserverMode; -}; - /* 1081 */ struct PMSG_UBF_REGISTER_ACCOUNT_USER { @@ -4648,17 +4256,6 @@ struct PMSG_ANS_UBF_SET_RECEIVED_REWARD char btSubReturn; }; -/* 1087 */ -struct PMSG_REQ_UBF_GET_REWARD -{ - PBMSG_HEAD2 h; - int iUserIndex; - int iServerCode; - char btServerKind; - char btContentsType; - char szName[11]; -}; - /* 1088 */ struct PMSG_UBF_REQ_CANCEL_REGISTER_USER { @@ -5015,28 +4612,66 @@ struct SDHP_ANS_KILLPOINT_RESULT int nTotalPoint; }; -/* 827 */ -struct PMSG_ANS_UBF_ACCOUNT_USERINFO +typedef struct PMSG_REQ_UBF_ACCOUNT_USERINFO { - PBMSG_HEAD2 h; + PBMSG_HEAD2 h; // C1:FA:01 GS->DS int iUserIndex; - char btResult; - char btRegisterState; - char btRegisterMonth; - char btRegisterDay; - char btObserverMode; -}; + char szAccountID[MAX_IDSTRING + 1]; + char szName[MAX_IDSTRING + 1]; + int iServerCode; + BOOL IsUnityBattleFieldServer; + BYTE btObserverMode; +} *LPPMSG_REQ_UBF_ACCOUNT_USERINFO; -/* 829 */ -struct PMSG_ANS_GET_UBF_REAL_NAME +typedef struct PMSG_ANS_UBF_ACCOUNT_USERINFO { - PBMSG_HEAD2 h; + PBMSG_HEAD2 h; // C1:FA:01 DS->GS + int iUserIndex; + BYTE btResult; + BYTE btRegisterState; + BYTE btRegisterMonth; + BYTE btRegisterDay; + BYTE btObserverMode; +} *LPPMSG_ANS_UBF_ACCOUNT_USERINFO; + +typedef struct PMSG_REQ_UBF_GET_REWARD +{ + PBMSG_HEAD2 h; // C1:FA:06 GS->DS int iUserIndex; - char szUBFName[11]; - char szRealName[11]; int iServerCode; - char btRetrun; -}; + BYTE btServerKind; + BYTE btContentsType; + char szName[MAX_IDSTRING + 1]; +} *LPPMSG_REQ_UBF_GET_REWARD; + +typedef struct PMSG_ANS_UBF_GET_REWARD +{ + PBMSG_HEAD2 h; // C1:FA:06 DS->GS + int iUserIndex; + BYTE btResult; + BYTE btContentsType; + BYTE btArrayCCF_Reward[4]; + BYTE btArrayDSF_Reward[4]; + BYTE btArrayCCN_Reward[2]; + BYTE btArrayDSN_Reward[14]; +} *LPPMSG_ANS_UBF_GET_REWARD; + +typedef struct PMSG_REQ_GET_UBF_REAL_NAME +{ + PBMSG_HEAD2 h; // C1:FA:08 GS->DS + int iUserIndex; + char szUBFName[MAX_IDSTRING + 1]; +} *LPPMSG_REQ_GET_UBF_REAL_NAME; + +typedef struct PMSG_ANS_GET_UBF_REAL_NAME +{ + PBMSG_HEAD2 h; // C1:FA:08 DS->GS + int iUserIndex; + char szUBFName[MAX_IDSTRING + 1]; + char szRealName[MAX_IDSTRING + 1]; + int iServerCode; + BYTE btRetrun; +} *LPPMSG_ANS_GET_UBF_REAL_NAME; /* 671 */ @@ -5208,28 +4843,20 @@ struct _tagPMSG_REQ_AE_PLAY_DS char btPlay; }; -/* 826 */ -struct _stCCFRankingInfo +typedef struct _stCCFRankingInfo { - char szCharName[11]; - char byRank; - int nPoint; -}; + _stCCFRankingInfo() + { + memset(szCharName, 0, sizeof(szCharName)); + byRank = 0; + nPoint = 0; + } -/* 828 */ -struct PMSG_ANS_UBF_GET_REWARD -{ - PBMSG_HEAD2 h; - int iUserIndex; - char btResult; - char btContentsType; - char btArrayCCF_Reward[4]; - char btArrayDSF_Reward[4]; - char btArrayCCN_Reward[2]; - char btArrayDSN_Reward[14]; + char szCharName[MAX_IDSTRING + 1]; + BYTE byRank; + int nPoint; }; - /* 1079 */ struct _tagPMSG_ANS_ITL_USERCOUNTANS { diff --git a/DataServer/include/define.h b/DataServer/include/define.h index e88c00e..ba9a4ab 100644 --- a/DataServer/include/define.h +++ b/DataServer/include/define.h @@ -12,7 +12,7 @@ enum DB_CLASS_TYPE DB_CLASS_TYPE_DARKLORD = 0x40, DB_CLASS_TYPE_SUMMONER = 0x50, DB_CLASS_TYPE_MONK = 0x60, - DB_CLASS_TYPE_LANCER = 0x70, + DB_CLASS_TYPE_GROWLANCER = 0x70, }; enum AMS @@ -42,6 +42,8 @@ enum AMS #define MAXUSERCHARACTER 5 +#define PK_LEVEL_DEFAULT 3 + #define MAX_GUILDNAMESTRING 8 #define MAX_GUILDMARKSIZE 32 @@ -61,12 +63,16 @@ enum AMS #define ITEM_BITSHIFT 9 +#define MAX_CLASSTYPE 8 + #define MAX_DBMAGIC (MAX_MAGIC*3) #define MAX_DBQUEST 50 #define MAX_EXTENDINVENTORY 2 #define MAX_EXTENDWAREHOUSE 1 +#define MAX_DBEVENTINVENTORY 512 + #define MAX_AB_JOINUSERINFO 200 #define MAX_AB_OBELISK_INFO 5 diff --git a/DataServer/include/public.h b/DataServer/include/public.h index d8991e1..31cd1b7 100644 --- a/DataServer/include/public.h +++ b/DataServer/include/public.h @@ -227,5 +227,31 @@ enum eOptionType AT_SET_IMPROVE_VITALITY = 0xC7, }; +enum GUILD_STATUS +{ + G_NONE = 0xFFFFFFFF, + G_PERSON = 0x0, + G_MASTER = 0x80, + G_SUB_MASTER = 0x40, + G_BATTLE_MASTER = 0x20, +}; + +enum +{ + PRE_LEAGUE = 0x0, + SEMI_LEAGUE = 0x1, + FINAL_LEAGUE = 0x2, + LAST_WINNER = 0x3, +}; + +enum __DSF_TYPE +{ + DSF_TYPE_NONE = 0x0, + DSF_TYPE_LEAGUE = 0x1, + DSF_TYPE_SEMIFINAL = 0x2, + DSF_TYPE_FINAL = 0x3, + DSF_TYPE_WINNER = 0x4, +}; + #endif