Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
#include "stdafx.h"
|
||||
#include "CharacterStructure.h"
|
||||
|
||||
|
||||
CharacterStatus::CharacterStatus()
|
||||
: m_nSTR(0), m_nDEX(0), m_nCON(0), m_nINT(0), m_nWIS(0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
CharacterStatus::CharacterStatus(CHAR_INFOST& characterDBData)
|
||||
: m_nSTR(characterDBData.STR), m_nDEX(characterDBData.DEX), m_nCON(characterDBData.CON),
|
||||
m_nINT(characterDBData.INT), m_nWIS(characterDBData.WIS)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CharacterStatus::Init(CHAR_INFOST& characterDBData)
|
||||
{
|
||||
m_nSTR = characterDBData.STR;
|
||||
m_nDEX = characterDBData.DEX;
|
||||
m_nCON = characterDBData.CON;
|
||||
m_nINT = characterDBData.INT;
|
||||
m_nWIS = characterDBData.WIS;
|
||||
}
|
||||
|
||||
|
||||
CharacterFightInfo::CharacterFightInfo()
|
||||
: m_pDuelOpponent(NULL), m_cResult(0)
|
||||
{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
#ifndef _CHARACTER_STRUCTURE_H_
|
||||
#define _CHARACTER_STRUCTURE_H_
|
||||
|
||||
#include "../CreatureStructure.h"
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
class CCharacter;
|
||||
|
||||
// ij<><C4B3><EFBFBD>Ϳ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD>
|
||||
struct CharacterStatus
|
||||
{
|
||||
short m_nSTR; // ij<><C4B3><EFBFBD><EFBFBD> STR
|
||||
short m_nDEX; // ij<><C4B3><EFBFBD><EFBFBD> DEX
|
||||
short m_nCON; // ij<><C4B3><EFBFBD><EFBFBD> CON
|
||||
short m_nINT; // ij<><C4B3><EFBFBD><EFBFBD> INT
|
||||
short m_nWIS; // ij<><C4B3><EFBFBD><EFBFBD> WIS
|
||||
|
||||
CharacterStatus();
|
||||
CharacterStatus(CHAR_INFOST& characterDBData);
|
||||
void Init(CHAR_INFOST& characterDBData);
|
||||
};
|
||||
typedef CharacterStatus* LPCharacterStatus;
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// DB <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>о<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>. <20>߰<EFBFBD><DFB0>߰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> DB<44><42> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// <20>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD>߿<EFBFBD><DFBF><EFBFBD> <20>ǵ帮<C7B5><E5B8AE> <20>ʴ´<CAB4>. ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> ... )
|
||||
|
||||
struct CharacterDBData
|
||||
{
|
||||
CHAR_INFOST m_Info; // <20>ܸ<EFBFBD>, <20≯<EFBFBD>, <20>ɷ<EFBFBD>ġ, hp,mp <20><> <20>⺻ <20><><EFBFBD><EFBFBD>
|
||||
CHAR_POS m_Pos; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><><EFBFBD><EFBFBD> ( Respawn <20><><EFBFBD><EFBFBD> )
|
||||
SKILL m_Skill;
|
||||
QUICK m_Quick;
|
||||
bool m_Admin;
|
||||
};
|
||||
typedef CharacterDBData* LPCharacterDBData;
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP<49><50> <20><><EFBFBD><EFBFBD>.
|
||||
struct ConnectInfo
|
||||
{
|
||||
SOCKADDR_IN m_siAgentHost; // agent UDP address of host
|
||||
SOCKADDR_IN m_siPrivateHost; // private UDP address of host
|
||||
SOCKADDR_IN m_siPublicHost; // public UDP address of host
|
||||
|
||||
};
|
||||
typedef ConnectInfo* LPConnectInfo;
|
||||
|
||||
|
||||
// ij<><C4B3><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>)
|
||||
struct CharacterFightInfo
|
||||
{
|
||||
enum _VictoryOrDefeat { DRAW = 0, WIN = 1, LOSE = 2, DEAD_TO_CHARACTER = 3 };
|
||||
|
||||
CCharacter* m_pDuelOpponent;
|
||||
char m_cResult;
|
||||
|
||||
CharacterFightInfo();
|
||||
};
|
||||
typedef CharacterFightInfo* LPCharacterFightInfo;
|
||||
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
struct CharacterMasteryInfo
|
||||
{
|
||||
union {
|
||||
struct {
|
||||
unsigned short m_SwordMastery : 2;
|
||||
unsigned short m_AxeMastery : 2;
|
||||
unsigned short m_BluntMastery : 2;
|
||||
unsigned short m_DaggerMastery : 2;
|
||||
unsigned short m_CrushWeapon : 2;
|
||||
unsigned short m_Blade : 2;
|
||||
unsigned short m_ClawMastery : 2;
|
||||
unsigned short m_Remainder : 2;
|
||||
} MasteryKind;
|
||||
|
||||
unsigned short m_wMasteryInfo;
|
||||
};
|
||||
|
||||
CharacterMasteryInfo() : m_wMasteryInfo(0) { }
|
||||
CharacterMasteryInfo(unsigned short wMasteryInfo) : m_wMasteryInfo(wMasteryInfo) { }
|
||||
};
|
||||
typedef CharacterMasteryInfo* LPCharacterMasteryInfo;
|
||||
|
||||
|
||||
#endif
|
||||
339
GameTools/GLOBALSCRIPT/Creature/CreatureStructure.cpp
Normal file
339
GameTools/GLOBALSCRIPT/Creature/CreatureStructure.cpp
Normal file
@@ -0,0 +1,339 @@
|
||||
#include "stdafx.h"
|
||||
#include <algorithm>
|
||||
|
||||
#ifndef _RYL_GAME_CLIENT_
|
||||
#include "./Character/CharacterClass.h"
|
||||
#endif
|
||||
|
||||
#include "CreatureStructure.h"
|
||||
#include "./Character/CharacterStructure.h"
|
||||
#include "../Item/Item.h"
|
||||
|
||||
|
||||
MotionInfo::MotionInfo()
|
||||
: m_fDirection(0.0f), m_fVelocity(0.0f), m_wAction(0), m_dwFrame(0) { }
|
||||
|
||||
|
||||
StatusInfo::StatusInfo()
|
||||
: m_nCriticalType(0), m_nCriticalPercentage(0),
|
||||
m_nMinDamage(0), m_nMaxDamage(0), m_fDRC(0.0f), m_nOffenceRevision(0),
|
||||
m_nDefence(0), m_nDefenceRevision(0),
|
||||
m_nMagicResistance(0), m_nBlockingPercentage(0),
|
||||
m_nAttackSpeed(0), m_nMoveSpeed(0), m_nAttackRange(0), m_nRangeAttackDistance(0),
|
||||
|
||||
m_nMaxHP(0), m_nMaxMP(0), m_nHPRegenAmount(0), m_nMPRegenAmount(0)
|
||||
{
|
||||
int nMaxAttributeNum = MAX_ATTRIBUTE_NUM;
|
||||
std::fill_n(m_nWeaponAttributeLevel, nMaxAttributeNum, 0);
|
||||
std::fill_n(m_nAttributeResistance, nMaxAttributeNum, 0);
|
||||
}
|
||||
|
||||
#ifndef _RYL_GAME_CLIENT_
|
||||
bool StatusInfo::CalculateStatus(const CharacterStatus& characterStatus,
|
||||
const unsigned short nLevel, const unsigned short nClass, unsigned char cUsingWeaponType)
|
||||
{
|
||||
switch (nClass)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
case CClass::Fighter:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nSTR / 4;
|
||||
m_nDefenceRevision = characterStatus.m_nSTR / 4 + characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel + nLevel * 40 + 300;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel / 2, (characterStatus.m_nWIS - 20) * nLevel / 2) + nLevel * 40 + 300;
|
||||
|
||||
} break;
|
||||
|
||||
// <20>α<EFBFBD>
|
||||
case CClass::Rouge:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nDEX / 4;
|
||||
m_nDefenceRevision = characterStatus.m_nDEX / 4 + characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel / 2 + nLevel * 40 + 300;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel / 2, (characterStatus.m_nWIS - 20) * nLevel / 2) + nLevel * 40 + 300;
|
||||
|
||||
} break;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
case CClass::Mage:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nINT / 4;
|
||||
m_nDefenceRevision = characterStatus.m_nINT / 4 + characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel / 2 + nLevel * 40 + 300;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel, (characterStatus.m_nWIS - 20) * nLevel / 2) + nLevel * 40 + 300;
|
||||
|
||||
} break;
|
||||
|
||||
// <20><><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>Ʈ
|
||||
case CClass::Acolyte:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nWIS / 2;
|
||||
m_nDefenceRevision = characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel + nLevel * 40 + 300;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel / 2, (characterStatus.m_nWIS - 20) * nLevel) + nLevel * 40 + 300;
|
||||
|
||||
} break;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
case CClass::Defender:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nSTR / 4;
|
||||
m_nDefenceRevision = characterStatus.m_nSTR / 4 + characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel + nLevel * 40 + 800;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel / 2, (characterStatus.m_nWIS - 20) * nLevel / 2) + nLevel * 40 + 300;
|
||||
|
||||
} break;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
case CClass::Warrior:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nSTR / 4;
|
||||
m_nDefenceRevision = characterStatus.m_nSTR / 4 + characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel + nLevel * 40 + 550;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel / 2, (characterStatus.m_nWIS - 20) * nLevel / 2) + nLevel * 40 + 550;
|
||||
|
||||
} break;
|
||||
|
||||
// <20><><EFBFBD>ؽ<EFBFBD>
|
||||
case CClass::Assasin:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nDEX / 4;
|
||||
m_nDefenceRevision = characterStatus.m_nDEX / 4 + characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel / 2 + nLevel * 40 + 300;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel / 2, (characterStatus.m_nWIS - 20) * nLevel / 2) + nLevel * 40 + 800;
|
||||
|
||||
} break;
|
||||
|
||||
// <20><>ó
|
||||
case CClass::Archer:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nDEX / 4;
|
||||
m_nDefenceRevision = characterStatus.m_nDEX / 4 + characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel / 2 + nLevel * 40 + 550;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel / 2, (characterStatus.m_nWIS - 20) * nLevel / 2) + nLevel * 40 + 550;
|
||||
|
||||
} break;
|
||||
|
||||
// <20>Ҽ<EFBFBD><D2BC><EFBFBD>
|
||||
case CClass::Sorcerer:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nINT / 4;
|
||||
m_nDefenceRevision = characterStatus.m_nINT / 4 + characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel / 2 + nLevel * 40 + 300;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel, (characterStatus.m_nWIS - 20) * nLevel / 2) + nLevel * 40 + 800;
|
||||
|
||||
} break;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
case CClass::Enchanter:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nINT / 4;
|
||||
m_nDefenceRevision = characterStatus.m_nINT / 4 + characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel / 2 + nLevel * 40 + 550;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel, (characterStatus.m_nWIS - 20) * nLevel / 2) + nLevel * 40 + 550;
|
||||
|
||||
} break;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||
case CClass::Priest:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nWIS / 2;
|
||||
m_nDefenceRevision = characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel + nLevel * 40 + 800;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel / 2, (characterStatus.m_nWIS - 20) * nLevel) + nLevel * 40 + 300;
|
||||
|
||||
} break;
|
||||
|
||||
// Ŭ<><C5AC><EFBFBD><EFBFBD>
|
||||
case CClass::Cleric:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nWIS / 2;
|
||||
m_nDefenceRevision = characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel + nLevel * 40 + 550;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel / 2, (characterStatus.m_nWIS - 20) * nLevel) + nLevel * 40 + 550;
|
||||
|
||||
} break;
|
||||
|
||||
// <20>Ĺ<EFBFBD><C4B9><EFBFBD>Ʈ
|
||||
case CClass::Combatant:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nSTR / 4;
|
||||
m_nDefenceRevision = characterStatus.m_nSTR / 4 + characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel + nLevel * 40 + 300;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel / 2, (characterStatus.m_nWIS - 20) * nLevel / 2) + nLevel * 40 + 300;
|
||||
|
||||
} break;
|
||||
|
||||
// <20><><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
case CClass::Officetor:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nDEX / 4;
|
||||
m_nDefenceRevision = characterStatus.m_nDEX / 4 + characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel / 2 + nLevel * 40 + 300;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel, (characterStatus.m_nWIS - 20) * nLevel) + nLevel * 40 + 300;
|
||||
|
||||
} break;
|
||||
|
||||
// <20><><EFBFBD>÷<EFBFBD>
|
||||
case CClass::Templar:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nSTR / 4;
|
||||
m_nDefenceRevision = characterStatus.m_nSTR / 4 + characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel + nLevel * 40 + 800;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel / 2, (characterStatus.m_nWIS - 20) * nLevel / 2) + nLevel * 40 + 300;
|
||||
|
||||
} break;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>Ŀ
|
||||
case CClass::Attacker:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nSTR / 4;
|
||||
m_nDefenceRevision = characterStatus.m_nSTR / 4 + characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel + nLevel * 40 + 550;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel / 2, (characterStatus.m_nWIS - 20) * nLevel / 2) + nLevel * 40 + 550;
|
||||
|
||||
} break;
|
||||
|
||||
// <20>ų<EFBFBD>
|
||||
case CClass::Gunner:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nDEX / 2;
|
||||
m_nDefenceRevision = characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel / 2 + nLevel * 40 + 300;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel / 2, (characterStatus.m_nWIS - 20) * nLevel / 2) + nLevel * 40 + 800;
|
||||
|
||||
} break;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
case CClass::RuneOff:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nINT / 4;
|
||||
m_nDefenceRevision = characterStatus.m_nINT / 4 + characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel / 2 + nLevel * 40 + 300;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel, (characterStatus.m_nWIS - 20) * nLevel / 2) + nLevel * 40 + 800;
|
||||
|
||||
} break;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
case CClass::LifeOff:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nWIS / 2;
|
||||
m_nDefenceRevision = characterStatus.m_nWIS / 2 + characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel / 2 + nLevel * 40 + 550;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel / 2, (characterStatus.m_nWIS - 20) * nLevel) + nLevel * 40 + 550;
|
||||
|
||||
} break;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
case CClass::ShadowOff:
|
||||
{
|
||||
m_nOffenceRevision = characterStatus.m_nDEX / 4;
|
||||
m_nDefenceRevision = characterStatus.m_nDEX / 4 + characterStatus.m_nDEX / 5;
|
||||
|
||||
m_nMaxHP = (characterStatus.m_nCON - 20) * nLevel / 2 + nLevel * 40 + 800;
|
||||
m_nMaxMP = max((characterStatus.m_nINT - 20) * nLevel / 2, (characterStatus.m_nWIS - 20) * nLevel) + nLevel * 40 + 300;
|
||||
|
||||
} break;
|
||||
|
||||
default:
|
||||
{
|
||||
#ifdef ERRLOG0
|
||||
ERRLOG0(g_Log, "Ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> None<6E><65> ij<><C4B3><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.");
|
||||
#endif
|
||||
return false;
|
||||
|
||||
} break;
|
||||
}
|
||||
|
||||
|
||||
// Ȱ, <20><><EFBFBD><EFBFBD>
|
||||
if (cUsingWeaponType == Item::CItemType::BOW || cUsingWeaponType == Item::CItemType::CROSSBOW)
|
||||
{
|
||||
m_nMinDamage = characterStatus.m_nDEX / 2;
|
||||
m_nMaxDamage = characterStatus.m_nDEX / 2;
|
||||
}
|
||||
// <20><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
else
|
||||
{
|
||||
m_nMinDamage = characterStatus.m_nSTR / 3;
|
||||
m_nMaxDamage = characterStatus.m_nSTR / 3;
|
||||
|
||||
// <20>α<EFBFBD>, <20><><EFBFBD>ؽ<EFBFBD>, <20><>ó, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> DEX<45><58> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
if (CClass::Rouge == CClass::GetPreviousJob(static_cast<unsigned char>(nClass)) ||
|
||||
CClass::ShadowOff == nClass)
|
||||
{
|
||||
m_nMinDamage += characterStatus.m_nDEX / 6;
|
||||
m_nMaxDamage += characterStatus.m_nDEX / 6;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
m_nDefence = 0;
|
||||
m_nBlockingPercentage = 0;
|
||||
|
||||
m_fDRC = 0;
|
||||
|
||||
m_nCriticalPercentage = characterStatus.m_nDEX / 5;
|
||||
m_nCriticalType = 0;
|
||||
|
||||
m_nMagicResistance = characterStatus.m_nWIS / 3;
|
||||
|
||||
m_nAttackSpeed = 0;
|
||||
m_nMoveSpeed = 0;
|
||||
m_nAttackRange = 0;
|
||||
m_nRangeAttackDistance = 0;
|
||||
|
||||
m_nHPRegenAmount = ((characterStatus.m_nCON - 20) * nLevel + nLevel * 40 + 300) / 50;
|
||||
m_nMPRegenAmount = ((characterStatus.m_nINT + characterStatus.m_nWIS - 40) * nLevel + nLevel * 40 + 300) / 50;
|
||||
|
||||
for (int nAttribute = 0; nAttribute < MAX_ATTRIBUTE_NUM; ++nAttribute)
|
||||
{
|
||||
m_nWeaponAttributeLevel[nAttribute] = 0;
|
||||
m_nAttributeResistance[nAttribute] = 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
CreatureStatus::CreatureStatus()
|
||||
: m_nLevel(0), m_nExp(0), m_nNowHP(0), m_nNowMP(0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
CreatureStatus::CreatureStatus(CHAR_INFOST& characterDBData)
|
||||
: m_nLevel(characterDBData.Level), m_nExp(characterDBData.Exp),
|
||||
m_nNowHP(characterDBData.HP), m_nNowMP(characterDBData.MP)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CreatureStatus::Init(CHAR_INFOST& characterDBData)
|
||||
{
|
||||
m_nLevel = characterDBData.Level;
|
||||
m_nExp = characterDBData.Exp;
|
||||
m_nNowHP = characterDBData.HP;
|
||||
m_nNowMP = characterDBData.MP;
|
||||
}
|
||||
138
GameTools/GLOBALSCRIPT/Creature/CreatureStructure.h
Normal file
138
GameTools/GLOBALSCRIPT/Creature/CreatureStructure.h
Normal file
@@ -0,0 +1,138 @@
|
||||
#ifndef _CREATURE_STRUCTURE_H_
|
||||
#define _CREATURE_STRUCTURE_H_
|
||||
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include <cmath>
|
||||
|
||||
#include <DB/DBDefine.h>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
struct CreatureStatus;
|
||||
struct CharacterStatus;
|
||||
|
||||
|
||||
// <20><> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
struct Position
|
||||
{
|
||||
float m_fPointX; // Point X <20><>ǥ
|
||||
float m_fPointY; // Point Y <20><>ǥ
|
||||
float m_fPointZ; // Point Z <20><>ǥ
|
||||
|
||||
inline Position();
|
||||
inline Position(const POS& Pos);
|
||||
inline Position(const Position& Pos);
|
||||
inline Position(float fPointX, float fPointY, float fPointZ);
|
||||
|
||||
inline unsigned int GetDistance(const Position& rhs) const
|
||||
{
|
||||
return (unsigned int)sqrt((m_fPointX - rhs.m_fPointX) * (m_fPointX - rhs.m_fPointX) +
|
||||
(m_fPointY - rhs.m_fPointY) * (m_fPointY - rhs.m_fPointY) +
|
||||
(m_fPointZ - rhs.m_fPointZ) * (m_fPointZ - rhs.m_fPointZ));
|
||||
}
|
||||
};
|
||||
typedef Position* LPPosition;
|
||||
|
||||
inline Position::Position()
|
||||
: m_fPointX(0.0f), m_fPointY(0.0f), m_fPointZ(0.0f) { }
|
||||
|
||||
inline Position::Position(const POS& Pos)
|
||||
: m_fPointX(Pos.fPointX), m_fPointY(Pos.fPointY), m_fPointZ(Pos.fPointZ) { }
|
||||
|
||||
inline Position::Position(const Position& Pos)
|
||||
: m_fPointX(Pos.m_fPointX), m_fPointY(Pos.m_fPointY), m_fPointZ(Pos.m_fPointZ) { }
|
||||
|
||||
inline Position::Position(float fPointX, float fPointY, float fPointZ)
|
||||
: m_fPointX(fPointX), m_fPointY(fPointY), m_fPointZ(fPointZ) { }
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
struct MotionInfo
|
||||
{
|
||||
float m_fDirection; // <20>ٶ<D9B6> <20><><EFBFBD><EFBFBD>
|
||||
float m_fVelocity; // <20>ӵ<EFBFBD>
|
||||
unsigned short m_wAction; // <20><><EFBFBD>ϴ<EFBFBD> <20>ൿ
|
||||
unsigned long m_dwFrame; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, NPC<50><43> <20><><EFBFBD><EFBFBD> )
|
||||
|
||||
MotionInfo();
|
||||
};
|
||||
typedef MotionInfo* LPMotionInfo;
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
struct StatusInfo
|
||||
{
|
||||
enum {
|
||||
ATTRIBUTE_FIRE = 0,
|
||||
ATTRIBUTE_LIGHTNING = 1,
|
||||
ATTRIBUTE_COLD = 2,
|
||||
ATTRIBUTE_DRAIN = 3,
|
||||
ATTRIBUTE_POISON = 4,
|
||||
MAX_ATTRIBUTE_NUM = 5
|
||||
};
|
||||
|
||||
short m_nCriticalType; // ũ<><C5A9>Ƽ<EFBFBD><C6BC> Ÿ<><C5B8> ( <20>߰<EFBFBD> ȿ<><C8BF> Ÿ<><C5B8> ex> <20><> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20>б<EFBFBD> - <20><><EFBFBD><EFBFBD> ... )
|
||||
short m_nCriticalPercentage; // ũ<><C5A9>Ƽ<EFBFBD><C6BC> Ȯ<><C8AE>
|
||||
|
||||
short m_nMinDamage; // <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
short m_nMaxDamage; // <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
float m_fDRC; // DRC
|
||||
short m_nOffenceRevision; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
short m_nDefence; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
short m_nDefenceRevision; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
|
||||
short m_nMagicResistance; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
short m_nBlockingPercentage; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
short m_nAttackSpeed; // <20><><EFBFBD><EFBFBD> <20>ӵ<EFBFBD>.
|
||||
short m_nMoveSpeed; // <20>̵<EFBFBD> <20>ӵ<EFBFBD>.
|
||||
short m_nAttackRange; // <20><><EFBFBD><EFBFBD> <20>Ÿ<EFBFBD>. // <20><><EFBFBD><EFBFBD> = cm
|
||||
short m_nRangeAttackDistance; // <20><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ÿ<EFBFBD>. // <20><><EFBFBD><EFBFBD> = m
|
||||
|
||||
unsigned short m_nMaxHP; // <20>ִ<EFBFBD> HP<48><50>
|
||||
unsigned short m_nMaxMP; // <20>ִ<EFBFBD> MP<4D><50>
|
||||
|
||||
short m_nHPRegenAmount; // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> HP<48><50> Regen <20><>
|
||||
short m_nMPRegenAmount; // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> MP<4D><50> Regen <20><>
|
||||
|
||||
short m_nWeaponAttributeLevel[MAX_ATTRIBUTE_NUM]; // <20><><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
short m_nAttributeResistance[MAX_ATTRIBUTE_NUM]; // <20>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
StatusInfo(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
|
||||
#ifndef _RYL_GAME_CLIENT_
|
||||
bool CalculateStatus(const CharacterStatus& characterStatus,
|
||||
const unsigned short nLevel, const unsigned short nClass, unsigned char cUsingWeaponType);
|
||||
#endif
|
||||
|
||||
};
|
||||
typedef StatusInfo* LPStatusInfo;
|
||||
|
||||
|
||||
#pragma pack(8)
|
||||
|
||||
//------------------------------------------------------------------------------------
|
||||
|
||||
// TODO : memory alignment <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
|
||||
// : 4byte<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD> alignment <20><> <20>ǵ<EFBFBD><C7B5><EFBFBD> <20><> <20><>.
|
||||
// : <20><EFBFBD><DEB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD> ũ<>Ⱑ <20><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> short<72><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>.
|
||||
struct CreatureStatus
|
||||
{
|
||||
// <20><><EFBFBD>⳪ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ɷ<EFBFBD>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD> ( <20><><EFBFBD>ӻ<D3BB> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̰<EFBFBD><CCB0><EFBFBD><EFBFBD><EFBFBD> <20><> )
|
||||
__int64 m_nExp; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
int m_nLevel; // <20><><EFBFBD><EFBFBD>
|
||||
unsigned short m_nNowHP; // <20><><EFBFBD><EFBFBD> HP
|
||||
unsigned short m_nNowMP; // <20><><EFBFBD><EFBFBD> MP, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ밪<D6B4><EBB0AA><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ.
|
||||
|
||||
StatusInfo m_StatusInfo; // <20><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̰<EFBFBD><CCB0><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
|
||||
CreatureStatus();
|
||||
CreatureStatus(CHAR_INFOST& characterDBData);
|
||||
void Init(CHAR_INFOST& characterDBData);
|
||||
};
|
||||
typedef CreatureStatus* LPCreatureStatus;
|
||||
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
384
GameTools/GLOBALSCRIPT/Creature/Monster/MonsterMgr.cpp
Normal file
384
GameTools/GLOBALSCRIPT/Creature/Monster/MonsterMgr.cpp
Normal file
@@ -0,0 +1,384 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include <Log/ServerLog.h>
|
||||
#include <Utility/Math/Math.h>
|
||||
#include <Utility/Compress/MiniLZO/MiniLZOWrapper.h>
|
||||
#include <Utility/Resource/EnsureCleanup.h>
|
||||
#include <Network/XORCrypt/XORCrypt.h>
|
||||
|
||||
#define ENCODEHEADER(Start_In, Length_In, PageNum_In, PageVer_In) CXORCrypt::GetInstance().EncodeHeader((Start_In), (Length_In), (PageNum_In), (PageVer_In))
|
||||
#define DECODEHEADER(Start_In, Length_In, PageNum_In, PageVer_In) CXORCrypt::GetInstance().DecodeHeader((Start_In), (Length_In), (PageNum_In), (PageVer_In))
|
||||
#define COMPRESS(In, In_len, Out, Out_len) CMiniLZOCompress::Compress((In), (In_len), (Out), (Out_len))
|
||||
#define DECOMPRESS(In, In_len, Out, Out_len) CMiniLZOCompress::Decompress((In), (In_len), (Out), (Out_len))
|
||||
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
#include "MonsterMgr.h"
|
||||
|
||||
CMonsterMgr CMonsterMgr::ms_this;
|
||||
|
||||
#ifdef _TEST_SERVER_
|
||||
const char* CMonsterMgr::m_szMonsterScriptFileName = "TestMonsterProtoType.txt";
|
||||
#else
|
||||
const char* CMonsterMgr::m_szMonsterScriptFileName = "MonsterProtoType.txt";
|
||||
#endif
|
||||
|
||||
|
||||
CMonsterMgr::CMonsterMgr(void)
|
||||
: m_nMonsterNum(0), m_ProtoTypeArray(NULL)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
CMonsterMgr::~CMonsterMgr(void)
|
||||
{
|
||||
ClearProtoType();
|
||||
}
|
||||
|
||||
void CMonsterMgr::ClearProtoType()
|
||||
{
|
||||
if(NULL != m_ProtoTypeArray)
|
||||
{
|
||||
delete [] m_ProtoTypeArray;
|
||||
}
|
||||
}
|
||||
|
||||
bool CMonsterMgr::LoadMonstersFromFile(const char* szFileName)
|
||||
{
|
||||
int nIndex = 0;
|
||||
int nLineCount = 0;
|
||||
char strTemp[MAX_PATH];
|
||||
|
||||
CDelimitedFile DelimitedFile; // <20><>ü <20>Ҹ<EFBFBD><D2B8><EFBFBD>, <20>ڵ<EFBFBD> Close.
|
||||
std::vector<MonsterProtoType> monsterProtoTypeVector;
|
||||
|
||||
monsterProtoTypeVector.reserve(1000);
|
||||
MonsterProtoType tempProtoType;
|
||||
|
||||
// <20><>ũ<EFBFBD>ο<EFBFBD> <20>α<EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><>.
|
||||
// <20><>ũ<EFBFBD>ο<EFBFBD><CEBF><EFBFBD> \<5C>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD> <20>ʵ<EFBFBD><CAB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
|
||||
// ( '<27>̽<EFBFBD><CCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߸<EFBFBD><DFB8>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>' <20><><EFBFBD><EFBFBD> <20><EFBFBD> )
|
||||
#define READ_DATA(ColumnName, Argument) \
|
||||
if (!DelimitedFile.ReadData(Argument)) { \
|
||||
ERRLOG2(g_Log, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ <20>б<EFBFBD> <20><><EFBFBD><EFBFBD> : %d<><64> %s<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD>!", nLineCount, #ColumnName); \
|
||||
return false; \
|
||||
}
|
||||
|
||||
#define READ_STRING(ColumnName, Buffer, BufferSize) \
|
||||
if (!DelimitedFile.ReadString(Buffer, BufferSize)) { \
|
||||
ERRLOG2(g_Log, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ <20>б<EFBFBD> <20><><EFBFBD><EFBFBD> : %d<><64> %s<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD>!", nLineCount, #ColumnName); \
|
||||
return false; \
|
||||
}
|
||||
|
||||
#define READ_DATA_ARRAY(ColumnName, Argument, ArgumentNum) \
|
||||
for (nIndex=0; nIndex < ArgumentNum; ++nIndex) { \
|
||||
READ_DATA(ColumnName, Argument[nIndex]); \
|
||||
}
|
||||
|
||||
#define READ_DATA_BOOL(ColumnName, Argument) \
|
||||
if (!DelimitedFile.ReadString(strTemp, MAX_PATH)) { \
|
||||
ERRLOG2(g_Log, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ <20>б<EFBFBD> <20><><EFBFBD><EFBFBD> : %d<><64> %s<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD>!", nLineCount, #ColumnName); \
|
||||
return false; \
|
||||
} \
|
||||
Argument = (!strcmp(strTemp, "O")) ? true : false;
|
||||
|
||||
|
||||
if (!DelimitedFile.Open(szFileName ? szFileName : m_szMonsterScriptFileName))
|
||||
{
|
||||
ERRLOG1(g_Log, "%s <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.", szFileName ? szFileName : m_szMonsterScriptFileName);
|
||||
return false;
|
||||
}
|
||||
|
||||
while (DelimitedFile.ReadLine())
|
||||
{
|
||||
++nLineCount;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴٴϱ<D9B4>~!!! (<28><><EFBFBD><EFBFBD>!)
|
||||
READ_DATA("KID", tempProtoType.m_MonsterInfo.m_dwKID);
|
||||
|
||||
READ_STRING("<EFBFBD≯<EFBFBD>", tempProtoType.m_MonsterInfo.m_strName, MonsterInfo::MAX_NAME_LENGTH);
|
||||
READ_STRING("<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD>", tempProtoType.m_MonsterInfo.m_strModelingFlag, MonsterInfo::MAX_MODELING_FLAG_LENGTH);
|
||||
|
||||
READ_STRING("<EFBFBD><EFBFBD>ų<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", strTemp, MAX_PATH);
|
||||
tempProtoType.m_MonsterInfo.m_nSkillPattern = MonsterInfo::GetMonsterPattern(strTemp);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
tempProtoType.m_MonsterInfo.m_MonsterMotions[0].m_wAction = MonsterInfo::Z3D_CA_WALK;
|
||||
READ_DATA("<EFBFBD>ȱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_MonsterInfo.m_MonsterMotions[0].m_dwFrame);
|
||||
|
||||
READ_DATA("<EFBFBD>ȱ<EFBFBD><EFBFBD>Ÿ<EFBFBD>", tempProtoType.m_MonsterInfo.m_MonsterMotions[0].m_fVelocity);
|
||||
tempProtoType.m_MonsterInfo.m_MonsterMotions[0].m_fVelocity /= 100.0f;
|
||||
|
||||
tempProtoType.m_MonsterInfo.m_MonsterMotions[1].m_wAction = MonsterInfo::Z3D_CA_RUN;
|
||||
READ_DATA("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_MonsterInfo.m_MonsterMotions[1].m_dwFrame);
|
||||
|
||||
READ_DATA("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD>", tempProtoType.m_MonsterInfo.m_MonsterMotions[1].m_fVelocity);
|
||||
tempProtoType.m_MonsterInfo.m_MonsterMotions[1].m_fVelocity /= 100.0f;
|
||||
|
||||
tempProtoType.m_MonsterInfo.m_MonsterMotions[2].m_wAction = MonsterInfo::Z3D_CA_ATTACK;
|
||||
READ_DATA("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_MonsterInfo.m_MonsterMotions[2].m_dwFrame);
|
||||
|
||||
tempProtoType.m_MonsterInfo.m_MonsterMotions[3].m_wAction = MonsterInfo::Z3D_CA_CASTING;
|
||||
READ_DATA("<EFBFBD><EFBFBD>ų<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_MonsterInfo.m_MonsterMotions[3].m_dwFrame);
|
||||
|
||||
READ_DATA_ARRAY("Ÿ<EFBFBD>ݹڽ<EFBFBD>", tempProtoType.m_MonsterInfo.m_fHitBox, MonsterInfo::MAX_HITBOX_NUM);
|
||||
READ_DATA("<EFBFBD><EFBFBD><EFBFBD>ݰŸ<EFBFBD>", tempProtoType.m_CreatureStatus.m_StatusInfo.m_nAttackRange);
|
||||
READ_DATA("<EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_MonsterInfo.m_fAttackAngle);
|
||||
|
||||
// <20>⺻ <20><><EFBFBD><EFBFBD>
|
||||
READ_DATA("<EFBFBD>⺻ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_CreatureStatus.m_nExp);
|
||||
READ_DATA("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_CreatureStatus.m_nLevel);
|
||||
READ_DATA("<EFBFBD>ּҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_CreatureStatus.m_StatusInfo.m_nMinDamage);
|
||||
READ_DATA("<EFBFBD>ִ뵥<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_CreatureStatus.m_StatusInfo.m_nMaxDamage);
|
||||
READ_DATA("<EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_CreatureStatus.m_StatusInfo.m_nOffenceRevision);
|
||||
READ_DATA("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_CreatureStatus.m_StatusInfo.m_nDefence);
|
||||
READ_DATA("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_CreatureStatus.m_StatusInfo.m_nDefenceRevision);
|
||||
READ_DATA("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_CreatureStatus.m_StatusInfo.m_nBlockingPercentage);
|
||||
READ_DATA("DRC", tempProtoType.m_CreatureStatus.m_StatusInfo.m_fDRC);
|
||||
READ_DATA("ũ<EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD>Ȯ<EFBFBD><EFBFBD>", tempProtoType.m_CreatureStatus.m_StatusInfo.m_nCriticalPercentage);
|
||||
READ_DATA("ũ<EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD>", tempProtoType.m_CreatureStatus.m_StatusInfo.m_nCriticalType);
|
||||
READ_DATA("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_CreatureStatus.m_StatusInfo.m_nMagicResistance);
|
||||
READ_DATA_ARRAY("<EFBFBD><EFBFBD><EFBFBD>ݼӼ<EFBFBD>", tempProtoType.m_CreatureStatus.m_StatusInfo.m_nWeaponAttributeLevel, StatusInfo::MAX_ATTRIBUTE_NUM);
|
||||
READ_DATA_ARRAY("<EFBFBD>Ӽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_CreatureStatus.m_StatusInfo.m_nAttributeResistance, StatusInfo::MAX_ATTRIBUTE_NUM);
|
||||
READ_DATA("<EFBFBD><EFBFBD><EFBFBD>ݼӵ<EFBFBD>", tempProtoType.m_CreatureStatus.m_StatusInfo.m_nAttackSpeed);
|
||||
READ_DATA("<EFBFBD>̵<EFBFBD><EFBFBD>ӵ<EFBFBD>", tempProtoType.m_CreatureStatus.m_StatusInfo.m_nMoveSpeed);
|
||||
READ_DATA("HP Max", tempProtoType.m_CreatureStatus.m_StatusInfo.m_nMaxHP);
|
||||
READ_DATA("MP Max", tempProtoType.m_CreatureStatus.m_StatusInfo.m_nMaxMP);
|
||||
READ_DATA("HP ȸ<><C8B8><EFBFBD><EFBFBD>", tempProtoType.m_CreatureStatus.m_StatusInfo.m_nHPRegenAmount);
|
||||
READ_DATA("MP ȸ<><C8B8><EFBFBD><EFBFBD>", tempProtoType.m_CreatureStatus.m_StatusInfo.m_nMPRegenAmount);
|
||||
|
||||
// <20><>Ÿ
|
||||
READ_DATA("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_MonsterInfo.m_fSize);
|
||||
READ_DATA("<EFBFBD><EFBFBD>ų<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_MonsterInfo.m_nSkillLevel);
|
||||
|
||||
READ_DATA_BOOL("<EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD>Ÿ<EFBFBD>Կ<EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_MonsterInfo.m_bStealth);
|
||||
READ_DATA_BOOL("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_MonsterInfo.m_bFirstAttack);
|
||||
READ_DATA_BOOL("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_MonsterInfo.m_bEscape);
|
||||
READ_DATA_BOOL("<EFBFBD><EFBFBD>ȯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_MonsterInfo.m_bReturnPosition);
|
||||
|
||||
READ_DATA("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD>", tempProtoType.m_MonsterInfo.m_dwRespawnTime);
|
||||
READ_DATA_ARRAY("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_MonsterInfo.m_AwardItem, MonsterInfo::MAX_ORIGINAL_ITEM_NUM);
|
||||
READ_DATA_ARRAY("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", tempProtoType.m_MonsterInfo.m_nDropRate, MonsterInfo::MAX_AWARD_KIND);
|
||||
|
||||
monsterProtoTypeVector.push_back(tempProtoType);
|
||||
}
|
||||
|
||||
std::sort(monsterProtoTypeVector.begin(), monsterProtoTypeVector.end());
|
||||
|
||||
for(std::vector<MonsterProtoType>::iterator itr = monsterProtoTypeVector.begin();
|
||||
itr != monsterProtoTypeVector.end() - 1; ++itr)
|
||||
{
|
||||
if(itr->m_MonsterInfo.m_dwKID == (itr+1)->m_MonsterInfo.m_dwKID)
|
||||
{
|
||||
ERRLOG1(g_Log, "<EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ID<49><44> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD>ID:%d", itr->m_MonsterInfo.m_dwKID);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
m_nMonsterNum = monsterProtoTypeVector.size();
|
||||
m_ProtoTypeArray = new MonsterProtoType[m_nMonsterNum];
|
||||
if(NULL == m_ProtoTypeArray)
|
||||
{
|
||||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ <20>ʱ<EFBFBD>ȭ <20><><EFBFBD><EFBFBD> : <20><EFBFBD><DEB8><EFBFBD> <20><><EFBFBD><EFBFBD>");
|
||||
return false;
|
||||
}
|
||||
|
||||
std::copy(monsterProtoTypeVector.begin(), monsterProtoTypeVector.end(), m_ProtoTypeArray);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
const CMonsterMgr::MonsterProtoType* CMonsterMgr::GetMonsterProtoType(DWORD dwKID)
|
||||
{
|
||||
MonsterProtoType* lpFirst = m_ProtoTypeArray;
|
||||
MonsterProtoType* lpLast = m_ProtoTypeArray + m_nMonsterNum;
|
||||
MonsterProtoType* lpMid = NULL;
|
||||
|
||||
size_t nCount = m_nMonsterNum;
|
||||
size_t nCount2 = 0;
|
||||
|
||||
for (; 0 < nCount; )
|
||||
{
|
||||
nCount2 = nCount / 2;
|
||||
lpMid = lpFirst + nCount2;
|
||||
|
||||
if(lpMid->m_MonsterInfo.m_dwKID < dwKID)
|
||||
{
|
||||
lpFirst = ++lpMid, nCount -= nCount2 + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
nCount = nCount2;
|
||||
}
|
||||
}
|
||||
|
||||
return (lpFirst != lpLast && !(dwKID < lpFirst->m_MonsterInfo.m_dwKID)) ? lpFirst : NULL;
|
||||
}
|
||||
|
||||
|
||||
const CMonsterMgr::MonsterProtoType* CMonsterMgr::GetMonsterProtoType(char* szName)
|
||||
{
|
||||
for (size_t nIndex = 0; nIndex < m_nMonsterNum; nIndex++)
|
||||
{
|
||||
if (0 == strncmp(szName, m_ProtoTypeArray[nIndex].m_MonsterInfo.m_strName, MonsterInfo::MAX_NAME_LENGTH))
|
||||
{
|
||||
return m_ProtoTypeArray + nIndex;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
bool CMonsterMgr::LoadMonstersFromBinary(const char* szFileNameBinary)
|
||||
{
|
||||
HANDLE hFile = CreateFile((0 == szFileNameBinary) ? m_szMonsterScriptFileName : szFileNameBinary,
|
||||
GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
|
||||
if (hFile == INVALID_HANDLE_VALUE) { return false; }
|
||||
|
||||
CEnsureCloseHandle readFile(hFile);
|
||||
|
||||
DWORD dwRead = 0;
|
||||
DWORD dwFileHighSize = 0;
|
||||
DWORD dwFileSize = GetFileSize(hFile, &dwFileHighSize);
|
||||
|
||||
char* lpAllocated = new char[dwFileSize];
|
||||
if(NULL == lpAllocated)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
CEnsureDeleteArray<char> allocated(lpAllocated);
|
||||
|
||||
if(!ReadFile(hFile, lpAllocated, dwFileSize, &dwRead, NULL))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
MonsterProtoType* lpProtoType = 0;
|
||||
MonsterInfo* lpMonsterInfo = 0;
|
||||
CreatureStatus* lpCreatureStatus = 0;
|
||||
|
||||
DWORD dwStructSize = 0;
|
||||
DWORD dwHeaderSize = sizeof(DWORD) + *reinterpret_cast<DWORD*>(lpAllocated) + sizeof(DWORD);
|
||||
DWORD dwBufferSize = *reinterpret_cast<DWORD*>(lpAllocated + dwHeaderSize - sizeof(DWORD));
|
||||
|
||||
char* lpBuffer = new char[dwBufferSize];
|
||||
if(NULL == lpBuffer)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
CEnsureDeleteArray<char> buffer(lpBuffer);
|
||||
|
||||
char* lpBufferStartPointer = lpBuffer;
|
||||
|
||||
DECOMPRESS(lpAllocated + dwHeaderSize, dwFileSize - dwHeaderSize, lpBuffer, &dwBufferSize);
|
||||
DECODEHEADER(lpBuffer, dwBufferSize, 0, 3);
|
||||
|
||||
m_nMonsterNum = dwBufferSize / sizeof(MonsterProtoType);
|
||||
m_ProtoTypeArray = new MonsterProtoType[m_nMonsterNum];
|
||||
if(NULL == m_ProtoTypeArray)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
for(size_t nIndex = 0; nIndex < m_nMonsterNum; ++nIndex)
|
||||
{
|
||||
lpMonsterInfo = reinterpret_cast<MonsterInfo*>(lpBuffer);
|
||||
lpCreatureStatus = reinterpret_cast<CreatureStatus*>(lpBuffer + sizeof(MonsterInfo));
|
||||
|
||||
m_ProtoTypeArray[nIndex].m_MonsterInfo = MonsterInfo(*lpMonsterInfo);
|
||||
dwBufferSize -= sizeof(MonsterInfo);
|
||||
lpBuffer += sizeof(MonsterInfo);
|
||||
|
||||
m_ProtoTypeArray[nIndex].m_CreatureStatus = CreatureStatus(*lpCreatureStatus);
|
||||
dwBufferSize -= sizeof(CreatureStatus);
|
||||
lpBuffer += sizeof(CreatureStatus);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool CMonsterMgr::SaveMonstersToBinary(const char* szFileNameBinary, const char* szTrashFile)
|
||||
{
|
||||
if(0 == m_ProtoTypeArray)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
HANDLE hFile = CreateFile((0 == szFileNameBinary) ? m_szMonsterScriptFileName : szFileNameBinary,
|
||||
GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
if (hFile == INVALID_HANDLE_VALUE) { return false; }
|
||||
|
||||
CEnsureCloseHandle writeFile(hFile);
|
||||
|
||||
const size_t MAX_SCRIPT_FILE_SIZE = m_nMonsterNum * sizeof(MonsterProtoType);
|
||||
|
||||
char *pInputBuffer = new char[MAX_SCRIPT_FILE_SIZE];
|
||||
char *pOutputBuffer = new char[MAX_SCRIPT_FILE_SIZE];
|
||||
|
||||
CEnsureDeleteArray<char> input(pInputBuffer);
|
||||
CEnsureDeleteArray<char> output(pOutputBuffer);
|
||||
|
||||
if (0 == pInputBuffer || 0 == pOutputBuffer)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
char *InputStartPointer = pInputBuffer;
|
||||
char *OutputStartPointer = pOutputBuffer;
|
||||
|
||||
DWORD dwInputBufferSize = 0;
|
||||
DWORD dwOutputBufferSize = 0;
|
||||
|
||||
for(size_t nCount = 0; nCount < m_nMonsterNum; ++nCount)
|
||||
{
|
||||
memcpy(pInputBuffer, &m_ProtoTypeArray[nCount].m_MonsterInfo, sizeof(MonsterInfo));
|
||||
dwInputBufferSize += sizeof(MonsterInfo);
|
||||
pInputBuffer += sizeof(MonsterInfo);
|
||||
|
||||
memcpy(pInputBuffer, &m_ProtoTypeArray[nCount].m_CreatureStatus, sizeof(CreatureStatus));
|
||||
dwInputBufferSize += sizeof(CreatureStatus);
|
||||
pInputBuffer += sizeof(CreatureStatus);
|
||||
}
|
||||
|
||||
ENCODEHEADER(InputStartPointer, dwInputBufferSize, 0, 3);
|
||||
COMPRESS(InputStartPointer, dwInputBufferSize, pOutputBuffer, &dwOutputBufferSize);
|
||||
|
||||
DWORD dwWritten = 0;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>) <20>ڷ<EFBFBD>
|
||||
HANDLE hTrashFile = CreateFile(szTrashFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
if (hTrashFile == INVALID_HANDLE_VALUE) { return false; }
|
||||
|
||||
CEnsureCloseHandle trashFile(hTrashFile);
|
||||
|
||||
DWORD dwRead = 0;
|
||||
DWORD dwFileHighSize = 0;
|
||||
DWORD dwFileSize = GetFileSize(hTrashFile, &dwFileHighSize);
|
||||
|
||||
char* lpAllocated = new char[dwFileSize];
|
||||
if(NULL == lpAllocated)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
CEnsureDeleteArray<char> allocated(lpAllocated);
|
||||
|
||||
if (!ReadFile(hTrashFile, lpAllocated, dwFileSize, &dwRead, NULL))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>) <20>ڷ<EFBFBD>
|
||||
WriteFile(hFile, &dwFileSize, sizeof(DWORD), &dwWritten, 0);
|
||||
WriteFile(hFile, lpAllocated, dwFileSize, &dwWritten, 0);
|
||||
|
||||
// <20>ùٸ<C3B9> <20>ڷ<EFBFBD>
|
||||
WriteFile(hFile, &dwInputBufferSize, sizeof(DWORD), &dwWritten, 0);
|
||||
WriteFile(hFile, pOutputBuffer, dwOutputBufferSize, &dwWritten, 0);
|
||||
return true;
|
||||
}
|
||||
50
GameTools/GLOBALSCRIPT/Creature/Monster/MonsterMgr.h
Normal file
50
GameTools/GLOBALSCRIPT/Creature/Monster/MonsterMgr.h
Normal file
@@ -0,0 +1,50 @@
|
||||
#ifndef _MONSTER_MGR_H_
|
||||
#define _MONSTER_MGR_H_
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
#define g_MonsterMgr CMonsterMgr::GetInstance()
|
||||
|
||||
#include <Pattern/Singleton.h>
|
||||
#include "MonsterStructure.h"
|
||||
#include "../Character/CharacterStructure.h"
|
||||
#include "../../Utility/DelimitedFile.h"
|
||||
|
||||
class CMonsterMgr : public CSingleton<CMonsterMgr>
|
||||
{
|
||||
public:
|
||||
|
||||
struct MonsterProtoType
|
||||
{
|
||||
MonsterInfo m_MonsterInfo;
|
||||
CreatureStatus m_CreatureStatus;
|
||||
|
||||
inline bool operator < (MonsterProtoType& rhs)
|
||||
{ return m_MonsterInfo.m_dwKID < rhs.m_MonsterInfo.m_dwKID; }
|
||||
};
|
||||
|
||||
~CMonsterMgr();
|
||||
|
||||
bool LoadMonstersFromFile(const char* szFileName = 0);
|
||||
bool LoadMonstersFromBinary(const char* szFileNameBinary = 0);
|
||||
bool SaveMonstersToBinary(const char* szFileNameBinary = 0, const char* szTrashFile = 0);
|
||||
|
||||
void ClearProtoType();
|
||||
|
||||
const MonsterProtoType* GetMonsterProtoType(DWORD dwKID);
|
||||
const MonsterProtoType* GetMonsterProtoType(char* szName);
|
||||
|
||||
private:
|
||||
|
||||
CMonsterMgr();
|
||||
|
||||
static const char* m_szMonsterScriptFileName;
|
||||
static CMonsterMgr ms_this;
|
||||
|
||||
MonsterProtoType* m_ProtoTypeArray;
|
||||
size_t m_nMonsterNum;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
50
GameTools/GLOBALSCRIPT/Creature/Monster/MonsterStructure.cpp
Normal file
50
GameTools/GLOBALSCRIPT/Creature/Monster/MonsterStructure.cpp
Normal file
@@ -0,0 +1,50 @@
|
||||
#include "stdafx.h"
|
||||
#include <algorithm>
|
||||
#include "MonsterStructure.h"
|
||||
|
||||
MonsterInfo::MonsterInfo()
|
||||
: m_dwKID(0), m_dwRespawnTime(0), m_fSize(0), m_fAttackAngle(0), m_nSkillPattern(0), m_nSkillLevel(0),
|
||||
m_bStealth(false), m_bFirstAttack(false), m_bReturnPosition(false), m_bEscape(false)
|
||||
{
|
||||
int nFill = MAX_ORIGINAL_ITEM_NUM; std::fill_n(m_AwardItem, nFill, 0);
|
||||
nFill = MAX_AWARD_KIND; std::fill_n(m_nDropRate, nFill, 0);
|
||||
nFill = MAX_NAME_LENGTH; std::fill_n(m_strName, nFill, 0);
|
||||
nFill = MAX_MODELING_FLAG_LENGTH; std::fill_n(m_strModelingFlag, nFill, 0);
|
||||
float fFill = MAX_HITBOX_NUM; std::fill_n(m_fHitBox, fFill, 0.0f);
|
||||
}
|
||||
|
||||
|
||||
MonsterInfo::MonsterPattern MonsterInfo::GetMonsterPattern(const char* szMonsterType)
|
||||
{
|
||||
struct TypeAndName
|
||||
{
|
||||
const char* m_szName;
|
||||
const MonsterPattern m_MonsterPattern;
|
||||
|
||||
TypeAndName(const char* szName, const MonsterPattern ePattern)
|
||||
: m_szName(szName), m_MonsterPattern(ePattern) { }
|
||||
};
|
||||
|
||||
const int MAX_TYPE_NUM = 6;
|
||||
static TypeAndName monsterTypeName[MAX_TYPE_NUM] =
|
||||
{
|
||||
TypeAndName("Warrior", PATTERN_WARRIOR),
|
||||
TypeAndName("Defender", PATTERN_DEFENDER),
|
||||
TypeAndName("Mage", PATTERN_MAGE),
|
||||
TypeAndName("Acolyte", PATTERN_ACOLYTE),
|
||||
TypeAndName("Boss", PATTERN_BOSS),
|
||||
TypeAndName("BG", PATTERN_BG)
|
||||
};
|
||||
|
||||
TypeAndName* lpTypeNamePastEnd = monsterTypeName + MAX_TYPE_NUM;
|
||||
for(TypeAndName* lpTypeName = monsterTypeName; lpTypeName != lpTypeNamePastEnd; ++lpTypeName)
|
||||
{
|
||||
if(0 == strcmp(szMonsterType, lpTypeName->m_szName))
|
||||
{
|
||||
return lpTypeName->m_MonsterPattern;
|
||||
}
|
||||
}
|
||||
|
||||
return PATTERN_COMMON;
|
||||
}
|
||||
|
||||
75
GameTools/GLOBALSCRIPT/Creature/Monster/MonsterStructure.h
Normal file
75
GameTools/GLOBALSCRIPT/Creature/Monster/MonsterStructure.h
Normal file
@@ -0,0 +1,75 @@
|
||||
#ifndef _MONSTER_STRUCTURE_H_
|
||||
#define _MONSTER_STRUCTURE_H_
|
||||
|
||||
#include "../CreatureStructure.h"
|
||||
|
||||
#pragma pack(8)
|
||||
|
||||
struct MonsterInfo
|
||||
{
|
||||
enum MaxNumber
|
||||
{
|
||||
MAX_MOTION_NUM = 4, // <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
MAX_ORIGINAL_ITEM_NUM = 2,
|
||||
MAX_AWARD_KIND = 9,
|
||||
|
||||
MAX_NAME_LENGTH = 32,
|
||||
MAX_MODELING_FLAG_LENGTH = 32
|
||||
};
|
||||
|
||||
enum MonsterPattern
|
||||
{
|
||||
PATTERN_COMMON = 0,
|
||||
PATTERN_WARRIOR, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
PATTERN_DEFENDER, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
PATTERN_MAGE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
PATTERN_ACOLYTE, // <20><><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>Ʈ
|
||||
PATTERN_BOSS, // <20><><EFBFBD><EFBFBD>
|
||||
PATTERN_BG // <20><><EFBFBD><EFBFBD>(?)
|
||||
};
|
||||
|
||||
enum HitBox
|
||||
{
|
||||
XPlus = 0, XMinus, YPlus, YMinus,
|
||||
MAX_HITBOX_NUM = 4
|
||||
};
|
||||
|
||||
enum Z3D_CHR_ACTION
|
||||
{
|
||||
Z3D_CA_WALK = 8, // <20>ȱ<EFBFBD>
|
||||
Z3D_CA_RUN = 1, // <20><EFBFBD><DEB8><EFBFBD>
|
||||
Z3D_CA_CASTING = 50, // ij<><C4B3><EFBFBD><EFBFBD>
|
||||
Z3D_CA_ATTACK = 51 // <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
MotionInfo m_MonsterMotions[MAX_MOTION_NUM]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ൿ <20><><EFBFBD><EFBFBD> (<28>ȱ<EFBFBD>, <20><EFBFBD><DEB8><EFBFBD>, <20><><EFBFBD><EFBFBD>, ij<><C4B3><EFBFBD><EFBFBD>)
|
||||
char m_strName[MAX_NAME_LENGTH]; // <20≯<EFBFBD>
|
||||
char m_strModelingFlag[MAX_MODELING_FLAG_LENGTH]; // <20><EFBFBD> <20><><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD>
|
||||
float m_fHitBox[MAX_HITBOX_NUM]; // Ÿ<>ݹڽ<DDB9>
|
||||
|
||||
unsigned long m_AwardItem[MAX_ORIGINAL_ITEM_NUM]; // <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD>
|
||||
int m_nDropRate[MAX_AWARD_KIND]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
DWORD m_dwKID; // <20><><EFBFBD><EFBFBD> ID
|
||||
float m_fSize; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
DWORD m_dwRespawnTime; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8>
|
||||
float m_fAttackAngle; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
int m_nSkillPattern; // <20><>ų <20><><EFBFBD><EFBFBD>
|
||||
int m_nSkillLevel; // <20><>ų <20><><EFBFBD><EFBFBD>
|
||||
|
||||
bool m_bStealth; // <20><><EFBFBD>ڽ<EFBFBD> Ÿ<><C5B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
bool m_bFirstAttack; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
bool m_bReturnPosition; // Ÿ<><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD> <20><><EFBFBD>ư<EFBFBD><C6B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
bool m_bEscape; // <20>ڽ<EFBFBD><DABD><EFBFBD> HP<48><50> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>, <20><><EFBFBD><EFBFBD>ħ <20><><EFBFBD><EFBFBD>
|
||||
|
||||
MonsterInfo();
|
||||
static MonsterPattern GetMonsterPattern(const char* szMonsterType);
|
||||
};
|
||||
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
672
GameTools/GLOBALSCRIPT/Creature/NPC/NPCList.cpp
Normal file
672
GameTools/GLOBALSCRIPT/Creature/NPC/NPCList.cpp
Normal file
@@ -0,0 +1,672 @@
|
||||
// NPCList.cpp: implementation of the CNPCList class.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "NPCList.h"
|
||||
#include <ScriptEngine/ScriptEngine.h>
|
||||
|
||||
CNPCList g_NPCList;
|
||||
static SCRIPT m_scQuestScript;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Construction/Destruction
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
static void ScriptErrorMessage(const char *msg)
|
||||
{
|
||||
MessageBox(NULL, msg, "Script Error", MB_OK);
|
||||
}
|
||||
|
||||
//static void SetNpc(int nUID, int nJob, const char *strNpcSkin, const char *strNpcName)
|
||||
static void SetNpc(int nZone, int nUID, int nJob, const char *strNpcSkin, const char *strNpcName)
|
||||
{
|
||||
if(nZone != g_NPCList.GetZone()) return;
|
||||
//
|
||||
if(!g_NPCList.IsExistNpc(nUID))
|
||||
{
|
||||
LPNPCNode lpNPCNode = new NPCNode;
|
||||
lpNPCNode->m_dwUID = (unsigned long)nUID;
|
||||
lpNPCNode->m_dwJob = (unsigned long)nJob;
|
||||
lpNPCNode->m_strNpcSkin = new char[strlen(strNpcSkin) + 1];
|
||||
strcpy(lpNPCNode->m_strNpcSkin, strNpcSkin);
|
||||
lpNPCNode->m_fDirection = 0.0f;
|
||||
lpNPCNode->m_fPosX = 0.0f;
|
||||
lpNPCNode->m_fPosY = 0.0f;
|
||||
lpNPCNode->m_fPosZ = 0.0f;
|
||||
lpNPCNode->m_strNpcName = new char[strlen(strNpcName) + 1];
|
||||
strcpy(lpNPCNode->m_strNpcName, strNpcName);
|
||||
|
||||
g_NPCList.AddNpc(lpNPCNode);
|
||||
}
|
||||
}
|
||||
|
||||
static void SetPosition(int nUID, float fDirection, float fPosX, float fPosY, float fPosZ)
|
||||
{
|
||||
LPNPCNode lpNode = g_NPCList.GetNPCNode(nUID);
|
||||
|
||||
if(lpNode)
|
||||
{
|
||||
lpNode->m_fDirection = fDirection + (3.1415926535f);
|
||||
lpNode->m_fPosX = fPosX;
|
||||
lpNode->m_fPosY = fPosY;
|
||||
lpNode->m_fPosZ = fPosZ;
|
||||
}
|
||||
}
|
||||
|
||||
static void AddWords(int nUID, const char *strNpcScript)
|
||||
{
|
||||
LPNPCNode lpNode = g_NPCList.GetNPCNode(nUID);
|
||||
|
||||
if(lpNode)
|
||||
{
|
||||
char *strScript = new char[strlen(strNpcScript) + 1];
|
||||
strcpy(strScript, strNpcScript);
|
||||
LPDialogNode lpWord = new DialogNode;
|
||||
lpWord->m_wKindWord = 0;
|
||||
lpWord->m_wDialogFlag = 0;
|
||||
lpWord->m_strWord = strScript;
|
||||
lpNode->m_lstScript.push_back(lpWord);
|
||||
}
|
||||
}
|
||||
|
||||
static void AddDialog(int nUID, int nPage, int nFlag, const char *strNpcScript)
|
||||
{
|
||||
LPNPCNode lpNode = g_NPCList.GetNPCNode(nUID);
|
||||
|
||||
if(lpNode)
|
||||
{
|
||||
char *strScript = new char[strlen(strNpcScript) + 1];
|
||||
strcpy(strScript, strNpcScript);
|
||||
LPDialogNode lpWord = new DialogNode;
|
||||
lpWord->m_wKindWord = (unsigned short)nPage;
|
||||
lpWord->m_wDialogFlag = (unsigned short)nFlag;
|
||||
lpWord->m_strWord = strScript;
|
||||
lpNode->m_lstScript.push_back(lpWord);
|
||||
}
|
||||
}
|
||||
|
||||
static void AddItem(int nUID, int nKindItem, int nTabPage, int nIndexPosition)
|
||||
{
|
||||
LPNPCNode lpNode = g_NPCList.GetNPCNode(nUID);
|
||||
|
||||
if(lpNode)
|
||||
{
|
||||
LPITEMNode lpItem = lpNode->GetITEMNode(nKindItem);
|
||||
if(!lpItem)
|
||||
{
|
||||
lpItem = new ITEMNode;
|
||||
lpItem->m_wKindItem = (unsigned short)nKindItem;
|
||||
lpItem->m_wSkill = 0;
|
||||
lpItem->m_wSkillLevel = 0;
|
||||
lpItem->m_wTabPage = (unsigned short)nTabPage;
|
||||
lpItem->m_dwIndexPosition = (unsigned long)nIndexPosition;
|
||||
lpNode->m_lstItem.push_back(lpItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void AddSkillBook(int nUID, int nKindItem, int nSkill, int nSkillLevel, int nTabPage, int nIndexPosition)
|
||||
{
|
||||
LPNPCNode lpNode = g_NPCList.GetNPCNode(nUID);
|
||||
|
||||
if(lpNode)
|
||||
{
|
||||
LPITEMNode lpItem;
|
||||
|
||||
lpItem = new ITEMNode;
|
||||
lpItem->m_wKindItem = (unsigned short)nKindItem;
|
||||
lpItem->m_wSkill = (unsigned short)nSkill;
|
||||
lpItem->m_wSkillLevel = (unsigned short)nSkillLevel;
|
||||
lpItem->m_wTabPage = (unsigned short)nTabPage;
|
||||
lpItem->m_dwIndexPosition = (unsigned long)nIndexPosition;
|
||||
lpNode->m_lstItem.push_back(lpItem);
|
||||
}
|
||||
}
|
||||
|
||||
static void AddZoneMove(int nUID, int nZoneNumber, float fPosX, float fPosY, float fPosZ)
|
||||
{
|
||||
LPNPCNode lpNode = g_NPCList.GetNPCNode(nUID);
|
||||
|
||||
if(lpNode)
|
||||
{
|
||||
LPWarpNode lpZone = new WarpNode;
|
||||
lpZone->m_wNumber = (unsigned short)lpNode->m_lstWarpZone.size();
|
||||
lpZone->m_wZoneNumber = (unsigned short)nZoneNumber;
|
||||
lpZone->m_fPosX = fPosX;
|
||||
lpZone->m_fPosY = fPosY;
|
||||
lpZone->m_fPosZ = fPosZ;
|
||||
lpNode->m_lstWarpZone.push_back(lpZone);
|
||||
}
|
||||
}
|
||||
|
||||
static void AddQuest(int nUID, int nQuestID, int nMinLevel, int nMaxLevel, int nClass, int nCompleteClass, const char *strQuestFunc)
|
||||
{
|
||||
LPNPCNode lpNode = g_NPCList.GetNPCNode(nUID);
|
||||
|
||||
if(lpNode)
|
||||
{
|
||||
g_NPCList.m_lpQuestNode = new QuestNode;
|
||||
g_NPCList.m_lpQuestNode->m_wQuestID = (unsigned short)nQuestID;
|
||||
g_NPCList.m_lpQuestNode->m_wMinLevel = (unsigned short)nMinLevel;
|
||||
g_NPCList.m_lpQuestNode->m_wMaxLevel = (unsigned short)nMaxLevel;
|
||||
g_NPCList.m_lpQuestNode->m_dwClass = nClass;
|
||||
g_NPCList.m_lpQuestNode->m_dwCompletedQuest = nCompleteClass;
|
||||
g_NPCList.m_lpQuestNode->m_strQuestTitle = NULL;
|
||||
|
||||
SE_FUNC Func_Quest = _SE_GetScriptFunction(m_scQuestScript, T_VOID, strQuestFunc, 0 );
|
||||
_SE_CallScriptFunction(m_scQuestScript, Func_Quest);
|
||||
|
||||
lpNode->m_lstQuest.push_back(g_NPCList.m_lpQuestNode);
|
||||
g_NPCList.m_lpQuestNode = NULL;
|
||||
g_NPCList.m_lpPhaseNode = NULL;
|
||||
g_NPCList.m_lpTriggerNode = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void QuestTitle(const char *strQuestTitle)
|
||||
{
|
||||
if(g_NPCList.m_lpQuestNode)
|
||||
{
|
||||
char *strScript = new char[strlen(strQuestTitle) + 1];
|
||||
strcpy(strScript, strQuestTitle);
|
||||
g_NPCList.m_lpQuestNode->m_strQuestTitle = strScript;
|
||||
}
|
||||
}
|
||||
|
||||
static void AddPhase(int nPhaseNumber, const char *strQuestDesc)
|
||||
{
|
||||
if(g_NPCList.m_lpQuestNode)
|
||||
{
|
||||
g_NPCList.m_lpPhaseNode = new PhaseNode;
|
||||
g_NPCList.m_lpPhaseNode->m_dwPhaseNumber = nPhaseNumber;
|
||||
char *strScript = new char[strlen(strQuestDesc) + 1];
|
||||
strcpy(strScript, strQuestDesc);
|
||||
g_NPCList.m_lpPhaseNode->m_strPhaseDesc = strScript;
|
||||
|
||||
g_NPCList.m_lpQuestNode->m_lstPhase.push_back(g_NPCList.m_lpPhaseNode);
|
||||
|
||||
g_NPCList.m_lpTriggerNode = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void Trigger_Start(void)
|
||||
{
|
||||
if(g_NPCList.m_lpPhaseNode)
|
||||
{
|
||||
g_NPCList.m_lpTriggerNode = new TriggerNode;
|
||||
g_NPCList.m_lpTriggerNode->m_dwTriggerKind = TRIGGER_START;
|
||||
g_NPCList.m_lpTriggerNode->m_dwTriggerID = 0;
|
||||
g_NPCList.m_lpTriggerNode->m_dwZoneID = 0;
|
||||
g_NPCList.m_lpTriggerNode->m_fDistance = 0.0f;
|
||||
g_NPCList.m_lpTriggerNode->m_fPosX = 0.0f;
|
||||
g_NPCList.m_lpTriggerNode->m_fPosY = 0.0f;
|
||||
g_NPCList.m_lpTriggerNode->m_fPosZ = 0.0f;
|
||||
|
||||
g_NPCList.m_lpPhaseNode->m_lstTrigger.push_back(g_NPCList.m_lpTriggerNode);
|
||||
}
|
||||
}
|
||||
|
||||
static void Trigger_Puton(int nItemID, int nZoneID, float fPosX, float fPosY, float fPosZ, float fDistance)
|
||||
{
|
||||
if(g_NPCList.m_lpPhaseNode)
|
||||
{
|
||||
g_NPCList.m_lpTriggerNode = new TriggerNode;
|
||||
g_NPCList.m_lpTriggerNode->m_dwTriggerKind = TRIGGER_PUTON;
|
||||
g_NPCList.m_lpTriggerNode->m_dwTriggerID = nItemID;
|
||||
g_NPCList.m_lpTriggerNode->m_dwZoneID = nZoneID;
|
||||
g_NPCList.m_lpTriggerNode->m_fDistance = fDistance;
|
||||
g_NPCList.m_lpTriggerNode->m_fPosX = fPosX;
|
||||
g_NPCList.m_lpTriggerNode->m_fPosY = fPosY;
|
||||
g_NPCList.m_lpTriggerNode->m_fPosZ = fPosZ;
|
||||
|
||||
g_NPCList.m_lpPhaseNode->m_lstTrigger.push_back(g_NPCList.m_lpTriggerNode);
|
||||
}
|
||||
}
|
||||
|
||||
static void Trigger_Geton(int nItemID, int nZoneID, float fPosX, float fPosY, float fPosZ, float fDistance)
|
||||
{
|
||||
if(g_NPCList.m_lpPhaseNode)
|
||||
{
|
||||
g_NPCList.m_lpTriggerNode = new TriggerNode;
|
||||
g_NPCList.m_lpTriggerNode->m_dwTriggerKind = TRIGGER_GETON;
|
||||
g_NPCList.m_lpTriggerNode->m_dwTriggerID = nItemID;
|
||||
g_NPCList.m_lpTriggerNode->m_dwZoneID = nZoneID;
|
||||
g_NPCList.m_lpTriggerNode->m_fDistance = fDistance;
|
||||
g_NPCList.m_lpTriggerNode->m_fPosX = fPosX;
|
||||
g_NPCList.m_lpTriggerNode->m_fPosY = fPosY;
|
||||
g_NPCList.m_lpTriggerNode->m_fPosZ = fPosZ;
|
||||
|
||||
g_NPCList.m_lpPhaseNode->m_lstTrigger.push_back(g_NPCList.m_lpTriggerNode);
|
||||
}
|
||||
}
|
||||
|
||||
static void Trigger_Talk(int nNpcID)
|
||||
{
|
||||
if(g_NPCList.m_lpPhaseNode)
|
||||
{
|
||||
g_NPCList.m_lpTriggerNode = new TriggerNode;
|
||||
g_NPCList.m_lpTriggerNode->m_dwTriggerKind = TRIGGER_TALK;
|
||||
g_NPCList.m_lpTriggerNode->m_dwTriggerID = nNpcID;
|
||||
g_NPCList.m_lpTriggerNode->m_dwZoneID = 0;
|
||||
g_NPCList.m_lpTriggerNode->m_fDistance = 0.0f;
|
||||
g_NPCList.m_lpTriggerNode->m_fPosX = 0.0f;
|
||||
g_NPCList.m_lpTriggerNode->m_fPosY = 0.0f;
|
||||
g_NPCList.m_lpTriggerNode->m_fPosZ = 0.0f;
|
||||
|
||||
g_NPCList.m_lpPhaseNode->m_lstTrigger.push_back(g_NPCList.m_lpTriggerNode);
|
||||
}
|
||||
}
|
||||
|
||||
static void Trigger_Kill(int nMonsterID)
|
||||
{
|
||||
if(g_NPCList.m_lpPhaseNode)
|
||||
{
|
||||
g_NPCList.m_lpTriggerNode = new TriggerNode;
|
||||
g_NPCList.m_lpTriggerNode->m_dwTriggerKind = TRIGGER_KILL;
|
||||
g_NPCList.m_lpTriggerNode->m_dwTriggerID = nMonsterID;
|
||||
g_NPCList.m_lpTriggerNode->m_dwZoneID = 0;
|
||||
g_NPCList.m_lpTriggerNode->m_fDistance = 0.0f;
|
||||
g_NPCList.m_lpTriggerNode->m_fPosX = 0.0f;
|
||||
g_NPCList.m_lpTriggerNode->m_fPosY = 0.0f;
|
||||
g_NPCList.m_lpTriggerNode->m_fPosZ = 0.0f;
|
||||
|
||||
g_NPCList.m_lpPhaseNode->m_lstTrigger.push_back(g_NPCList.m_lpTriggerNode);
|
||||
}
|
||||
}
|
||||
|
||||
static void Trigger_Pick(int nItemID)
|
||||
{
|
||||
if(g_NPCList.m_lpPhaseNode)
|
||||
{
|
||||
g_NPCList.m_lpTriggerNode = new TriggerNode;
|
||||
g_NPCList.m_lpTriggerNode->m_dwTriggerKind = TRIGGER_PICK;
|
||||
g_NPCList.m_lpTriggerNode->m_dwTriggerID = nItemID;
|
||||
g_NPCList.m_lpTriggerNode->m_dwZoneID = 0;
|
||||
g_NPCList.m_lpTriggerNode->m_fDistance = 0.0f;
|
||||
g_NPCList.m_lpTriggerNode->m_fPosX = 0.0f;
|
||||
g_NPCList.m_lpTriggerNode->m_fPosY = 0.0f;
|
||||
g_NPCList.m_lpTriggerNode->m_fPosZ = 0.0f;
|
||||
|
||||
g_NPCList.m_lpPhaseNode->m_lstTrigger.push_back(g_NPCList.m_lpTriggerNode);
|
||||
}
|
||||
}
|
||||
|
||||
static void Event_Disappear(int nItemID, int nAmount)
|
||||
{
|
||||
if(g_NPCList.m_lpTriggerNode)
|
||||
{
|
||||
LPEventNode lpEventNode = new EventNode;
|
||||
lpEventNode->m_dwEventKind = EVENT_DISAPPEAR;
|
||||
lpEventNode->m_dwEventNumber = nItemID;
|
||||
lpEventNode->m_dwEventAmount = nAmount;
|
||||
lpEventNode->m_fPosX = 0.0f;
|
||||
lpEventNode->m_fPosY = 0.0f;
|
||||
lpEventNode->m_fPosZ = 0.0f;
|
||||
lpEventNode->m_strWord = NULL;
|
||||
|
||||
g_NPCList.m_lpTriggerNode->m_lstEvent.push_back(lpEventNode);
|
||||
}
|
||||
}
|
||||
|
||||
static void Event_Get(int nItemID, int nAmount)
|
||||
{
|
||||
if(g_NPCList.m_lpTriggerNode)
|
||||
{
|
||||
LPEventNode lpEventNode = new EventNode;
|
||||
lpEventNode->m_dwEventKind = EVENT_GET;
|
||||
lpEventNode->m_dwEventNumber = nItemID;
|
||||
lpEventNode->m_dwEventAmount = nAmount;
|
||||
lpEventNode->m_fPosX = 0.0f;
|
||||
lpEventNode->m_fPosY = 0.0f;
|
||||
lpEventNode->m_fPosZ = 0.0f;
|
||||
lpEventNode->m_strWord = NULL;
|
||||
|
||||
g_NPCList.m_lpTriggerNode->m_lstEvent.push_back(lpEventNode);
|
||||
}
|
||||
}
|
||||
|
||||
static void Event_Spawn(int nMonsterID, float fPosX, float fPosY, float fPosZ)
|
||||
{
|
||||
if(g_NPCList.m_lpTriggerNode)
|
||||
{
|
||||
LPEventNode lpEventNode = new EventNode;
|
||||
lpEventNode->m_dwEventKind = EVENT_SPAWN;
|
||||
lpEventNode->m_dwEventNumber = nMonsterID;
|
||||
lpEventNode->m_dwEventAmount = 0;
|
||||
lpEventNode->m_fPosX = fPosX;
|
||||
lpEventNode->m_fPosY = fPosY;
|
||||
lpEventNode->m_fPosZ = fPosZ;
|
||||
lpEventNode->m_strWord = NULL;
|
||||
|
||||
g_NPCList.m_lpTriggerNode->m_lstEvent.push_back(lpEventNode);
|
||||
}
|
||||
}
|
||||
|
||||
static void Event_MonsterDrop(int nItemID, int nAmount)
|
||||
{
|
||||
if(g_NPCList.m_lpTriggerNode)
|
||||
{
|
||||
LPEventNode lpEventNode = new EventNode;
|
||||
lpEventNode->m_dwEventKind = EVENT_MONSTERDROP;
|
||||
lpEventNode->m_dwEventNumber = nItemID;
|
||||
lpEventNode->m_dwEventAmount = nAmount;
|
||||
lpEventNode->m_fPosX = 0.0f;
|
||||
lpEventNode->m_fPosY = 0.0f;
|
||||
lpEventNode->m_fPosZ = 0.0f;
|
||||
lpEventNode->m_strWord = NULL;
|
||||
|
||||
g_NPCList.m_lpTriggerNode->m_lstEvent.push_back(lpEventNode);
|
||||
}
|
||||
}
|
||||
|
||||
static void Event_Drop(int nItemID, int nAmount, float fPosX, float fPosY, float fPosZ)
|
||||
{
|
||||
if(g_NPCList.m_lpTriggerNode)
|
||||
{
|
||||
LPEventNode lpEventNode = new EventNode;
|
||||
lpEventNode->m_dwEventKind = EVENT_DROP;
|
||||
lpEventNode->m_dwEventNumber = nItemID;
|
||||
lpEventNode->m_dwEventAmount = nAmount;
|
||||
lpEventNode->m_fPosX = fPosX;
|
||||
lpEventNode->m_fPosY = fPosY;
|
||||
lpEventNode->m_fPosZ = fPosZ;
|
||||
lpEventNode->m_strWord = NULL;
|
||||
|
||||
g_NPCList.m_lpTriggerNode->m_lstEvent.push_back(lpEventNode);
|
||||
}
|
||||
}
|
||||
|
||||
static void Event_Award(int nExp, int nGold)
|
||||
{
|
||||
if(g_NPCList.m_lpTriggerNode)
|
||||
{
|
||||
LPEventNode lpEventNode = new EventNode;
|
||||
lpEventNode->m_dwEventKind = EVENT_AWARD;
|
||||
lpEventNode->m_dwEventNumber = nExp;
|
||||
lpEventNode->m_dwEventAmount = nGold;
|
||||
lpEventNode->m_fPosX = 0.0f;
|
||||
lpEventNode->m_fPosY = 0.0f;
|
||||
lpEventNode->m_fPosZ = 0.0f;
|
||||
lpEventNode->m_strWord = NULL;
|
||||
|
||||
g_NPCList.m_lpTriggerNode->m_lstEvent.push_back(lpEventNode);
|
||||
}
|
||||
}
|
||||
|
||||
static void Event_MsgBox(const char *strMessage)
|
||||
{
|
||||
if(g_NPCList.m_lpTriggerNode)
|
||||
{
|
||||
LPEventNode lpEventNode = new EventNode;
|
||||
lpEventNode->m_dwEventKind = EVENT_MSGBOX;
|
||||
lpEventNode->m_dwEventNumber = 0;
|
||||
lpEventNode->m_dwEventAmount = 0;
|
||||
lpEventNode->m_fPosX = 0.0f;
|
||||
lpEventNode->m_fPosY = 0.0f;
|
||||
lpEventNode->m_fPosZ = 0.0f;
|
||||
char *strScript = new char[strlen(strMessage) + 1];
|
||||
strcpy(strScript, strMessage);
|
||||
lpEventNode->m_strWord = strScript;
|
||||
|
||||
g_NPCList.m_lpTriggerNode->m_lstEvent.push_back(lpEventNode);
|
||||
}
|
||||
}
|
||||
|
||||
static void Event_Phase(int nPhaseNumber)
|
||||
{
|
||||
if(g_NPCList.m_lpTriggerNode)
|
||||
{
|
||||
LPEventNode lpEventNode = new EventNode;
|
||||
lpEventNode->m_dwEventKind = EVENT_PHASE;
|
||||
lpEventNode->m_dwEventNumber = nPhaseNumber;
|
||||
lpEventNode->m_dwEventAmount = 0;
|
||||
lpEventNode->m_fPosX = 0.0f;
|
||||
lpEventNode->m_fPosY = 0.0f;
|
||||
lpEventNode->m_fPosZ = 0.0f;
|
||||
lpEventNode->m_strWord = NULL;
|
||||
|
||||
g_NPCList.m_lpTriggerNode->m_lstEvent.push_back(lpEventNode);
|
||||
}
|
||||
}
|
||||
|
||||
CNPCList::CNPCList()
|
||||
{
|
||||
m_lpQuestNode = NULL;
|
||||
m_lpPhaseNode = NULL;
|
||||
m_lpTriggerNode = NULL;
|
||||
}
|
||||
|
||||
CNPCList::~CNPCList()
|
||||
{
|
||||
DestroyNPCList();
|
||||
}
|
||||
|
||||
void CNPCList::Create()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
BOOL CNPCList::Load(const char *strScriptFile, const char *strQuestFile, unsigned long dwZone)
|
||||
{
|
||||
DestroyNPCList();
|
||||
|
||||
m_dwZone = dwZone;
|
||||
|
||||
m_scQuestScript = _SE_Create(strQuestFile);
|
||||
if(!m_scQuestScript) return FALSE;
|
||||
|
||||
_SE_RegisterFunction(m_scQuestScript, QuestTitle, T_VOID, "QuestTitle", T_STRING, 0);
|
||||
_SE_RegisterFunction(m_scQuestScript, AddPhase, T_VOID, "AddPhase", T_INT, T_STRING, 0);
|
||||
_SE_RegisterFunction(m_scQuestScript, Trigger_Start, T_VOID, "Trigger_Start", 0);
|
||||
_SE_RegisterFunction(m_scQuestScript, Trigger_Puton, T_VOID, "Trigger_Puton", T_INT, T_INT, T_FLOAT, T_FLOAT, T_FLOAT, T_FLOAT, 0);
|
||||
_SE_RegisterFunction(m_scQuestScript, Trigger_Geton, T_VOID, "Trigger_Geton", T_INT, T_INT, T_FLOAT, T_FLOAT, T_FLOAT, T_FLOAT, 0);
|
||||
_SE_RegisterFunction(m_scQuestScript, Trigger_Talk, T_VOID, "Trigger_Talk", T_INT, 0);
|
||||
_SE_RegisterFunction(m_scQuestScript, Trigger_Kill, T_VOID, "Trigger_Kill", T_INT, 0);
|
||||
_SE_RegisterFunction(m_scQuestScript, Trigger_Pick, T_VOID, "Trigger_Pick", T_INT, 0);
|
||||
_SE_RegisterFunction(m_scQuestScript, Event_Disappear, T_VOID, "Event_Disappear", T_INT, T_INT, 0);
|
||||
_SE_RegisterFunction(m_scQuestScript, Event_Get, T_VOID, "Event_Get", T_INT, T_INT, 0);
|
||||
_SE_RegisterFunction(m_scQuestScript, Event_Spawn, T_VOID, "Event_Spawn", T_INT, T_FLOAT, T_FLOAT, T_FLOAT, 0);
|
||||
_SE_RegisterFunction(m_scQuestScript, Event_MonsterDrop, T_VOID, "Event_MonsterDrop", T_INT, T_INT, 0);
|
||||
_SE_RegisterFunction(m_scQuestScript, Event_Drop, T_VOID, "Event_Drop", T_INT, T_INT, T_FLOAT, T_FLOAT, T_FLOAT, 0);
|
||||
_SE_RegisterFunction(m_scQuestScript, Event_Award, T_VOID, "Event_Award", T_INT, T_INT, 0);
|
||||
_SE_RegisterFunction(m_scQuestScript, Event_MsgBox, T_VOID, "Event_MsgBox", T_STRING, 0);
|
||||
_SE_RegisterFunction(m_scQuestScript, Event_Phase, T_VOID, "Event_Phase", T_INT, 0);
|
||||
|
||||
_SE_SetMessageFunction(ScriptErrorMessage);
|
||||
SCRIPT Script = _SE_Create(strScriptFile);
|
||||
if(!Script) return FALSE;
|
||||
|
||||
// _SE_RegisterFunction(Script, SetNpc, T_VOID, "SetNPC", T_INT, T_INT, T_STRING, T_STRING, 0);
|
||||
_SE_RegisterFunction(Script, SetNpc, T_VOID, "SetNPC", T_INT, T_INT, T_INT, T_STRING, T_STRING, 0);
|
||||
_SE_RegisterFunction(Script, SetPosition, T_VOID, "SetPosition", T_INT, T_FLOAT, T_FLOAT, T_FLOAT, T_FLOAT, 0);
|
||||
_SE_RegisterFunction(Script, AddWords, T_VOID, "AddWords", T_INT, T_STRING, 0);
|
||||
_SE_RegisterFunction(Script, AddDialog, T_VOID, "AddDialog", T_INT, T_INT, T_INT, T_STRING, 0);
|
||||
_SE_RegisterFunction(Script, AddItem, T_VOID, "AddItem", T_INT, T_INT, T_INT, T_INT, 0);
|
||||
_SE_RegisterFunction(Script, AddSkillBook, T_VOID, "AddSkillBook", T_INT, T_INT, T_INT, T_INT, T_INT, T_INT, 0);
|
||||
_SE_RegisterFunction(Script, AddZoneMove, T_VOID, "AddZoneMove", T_INT, T_INT, T_FLOAT, T_FLOAT, T_FLOAT, 0);
|
||||
_SE_RegisterFunction(Script, AddQuest, T_VOID, "AddQuest", T_INT, T_INT, T_INT, T_INT, T_INT, T_INT, T_STRING, 0);
|
||||
|
||||
_SE_Execute(Script);
|
||||
|
||||
_SE_Destroy(Script);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CNPCList::IsExistNpc(unsigned long dwUID)
|
||||
{
|
||||
vector<LPNPCNode>::iterator it;
|
||||
for(it = m_lstNpcNode.begin(); it != m_lstNpcNode.end(); it++)
|
||||
{
|
||||
if((*it)->m_dwUID == dwUID) return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void CNPCList::AddNpc(LPNPCNode lpNewNode)
|
||||
{
|
||||
m_lstNpcNode.push_back(lpNewNode);
|
||||
}
|
||||
|
||||
LPNPCNode CNPCList::GetNPCNode(unsigned long dwUID)
|
||||
{
|
||||
vector<LPNPCNode>::iterator it;
|
||||
for(it = m_lstNpcNode.begin(); it != m_lstNpcNode.end(); it++)
|
||||
{
|
||||
if((*it)->m_dwUID == dwUID) return (*it);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void CNPCList::DestroyNPCList()
|
||||
{
|
||||
vector<LPNPCNode>::iterator it;
|
||||
vector<LPDialogNode>::iterator itchar;
|
||||
vector<LPITEMNode>::iterator itItem;
|
||||
vector<LPWarpNode>::iterator itWarp;
|
||||
vector<LPQuestNode>::iterator itQuest;
|
||||
vector<LPPhaseNode>::iterator itPhase;
|
||||
vector<LPTriggerNode>::iterator itTrigger;
|
||||
vector<LPEventNode>::iterator itEvent;
|
||||
|
||||
LPNPCNode lpNPC;
|
||||
LPDialogNode lpWord;
|
||||
LPITEMNode lpItem;
|
||||
LPWarpNode lpWarp;
|
||||
LPQuestNode lpQuest;
|
||||
LPPhaseNode lpPhase;
|
||||
LPTriggerNode lpTrigger;
|
||||
LPEventNode lpEvent;
|
||||
for(it = m_lstNpcNode.begin(); it != m_lstNpcNode.end();)
|
||||
{
|
||||
lpNPC = (*it);
|
||||
it = m_lstNpcNode.erase(it);
|
||||
for(itchar = lpNPC->m_lstScript.begin(); itchar != lpNPC->m_lstScript.end();)
|
||||
{
|
||||
lpWord = (*itchar);
|
||||
itchar = lpNPC->m_lstScript.erase(itchar);
|
||||
delete[] lpWord->m_strWord;
|
||||
delete lpWord;
|
||||
}
|
||||
lpNPC->m_lstScript.clear();
|
||||
|
||||
for(itItem = lpNPC->m_lstItem.begin(); itItem != lpNPC->m_lstItem.end();)
|
||||
{
|
||||
lpItem = (*itItem);
|
||||
itItem = lpNPC->m_lstItem.erase(itItem);
|
||||
delete lpItem;
|
||||
}
|
||||
lpNPC->m_lstItem.clear();
|
||||
|
||||
for(itWarp = lpNPC->m_lstWarpZone.begin(); itWarp != lpNPC->m_lstWarpZone.end();)
|
||||
{
|
||||
lpWarp = (*itWarp);
|
||||
itWarp = lpNPC->m_lstWarpZone.erase(itWarp);
|
||||
delete lpWarp;
|
||||
}
|
||||
lpNPC->m_lstWarpZone.clear();
|
||||
|
||||
for(itQuest = lpNPC->m_lstQuest.begin(); itQuest != lpNPC->m_lstQuest.end();)
|
||||
{
|
||||
lpQuest = (*itQuest);
|
||||
itQuest = lpNPC->m_lstQuest.erase(itQuest);
|
||||
for(itPhase = lpQuest->m_lstPhase.begin(); itPhase != lpQuest->m_lstPhase.end();)
|
||||
{
|
||||
lpPhase = (*itPhase);
|
||||
itPhase = lpQuest->m_lstPhase.erase(itPhase);
|
||||
for(itTrigger = lpPhase->m_lstTrigger.begin(); itTrigger != lpPhase->m_lstTrigger.end();)
|
||||
{
|
||||
lpTrigger = (*itTrigger);
|
||||
itTrigger = lpPhase->m_lstTrigger.erase(itTrigger);
|
||||
for(itEvent = lpTrigger->m_lstEvent.begin(); itEvent != lpTrigger->m_lstEvent.end();)
|
||||
{
|
||||
lpEvent = (*itEvent);
|
||||
itEvent = lpTrigger->m_lstEvent.erase(itEvent);
|
||||
if(lpEvent->m_strWord) delete[] lpEvent->m_strWord;
|
||||
delete lpEvent;
|
||||
}
|
||||
lpTrigger->m_lstEvent.clear();
|
||||
delete lpTrigger;
|
||||
}
|
||||
lpPhase->m_lstTrigger.clear();
|
||||
|
||||
delete[] lpPhase->m_strPhaseDesc;
|
||||
|
||||
delete lpPhase;
|
||||
}
|
||||
lpQuest->m_lstPhase.clear();
|
||||
|
||||
if(lpQuest->m_strQuestTitle) delete[] lpQuest->m_strQuestTitle;
|
||||
|
||||
delete lpQuest;
|
||||
}
|
||||
lpNPC->m_lstQuest.clear();
|
||||
|
||||
delete[] lpNPC->m_strNpcSkin;
|
||||
delete[] lpNPC->m_strNpcName;
|
||||
|
||||
delete lpNPC;
|
||||
}
|
||||
m_lstNpcNode.clear();
|
||||
|
||||
_SE_Destroy(m_scQuestScript);
|
||||
}
|
||||
|
||||
const char *CNPCList::GetGreeting(unsigned long dwUID)
|
||||
{
|
||||
vector<LPNPCNode>::iterator it;
|
||||
for(it = m_lstNpcNode.begin(); it != m_lstNpcNode.end(); it++)
|
||||
{
|
||||
if((*it)->m_dwUID == dwUID)
|
||||
{
|
||||
return (*it)->GetGreeting();
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void NPCNode::SearchQuestList(unsigned long m_dwLevel, unsigned long m_dwClass, unsigned short *m_lstCompleted, unsigned short m_wNumCompleted, unsigned short *m_lstQuestList)
|
||||
{
|
||||
vector<LPQuestNode>::iterator it;
|
||||
unsigned long count = 0;
|
||||
unsigned long i = 0;
|
||||
|
||||
for(it = m_lstQuest.begin(); it != m_lstQuest.end(); it++, i++)
|
||||
{
|
||||
BOOL bPass = FALSE;
|
||||
// <20>̹<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20>˻<EFBFBD><CBBB><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>ߴ<EFBFBD><DFB4><EFBFBD> <20>˻<EFBFBD>
|
||||
for(unsigned long t = 0; t < m_wNumCompleted; t++)
|
||||
{
|
||||
if(m_lstCompleted[t] == (*it)->m_wQuestID)
|
||||
{
|
||||
bPass = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if(bPass) continue;
|
||||
|
||||
if((*it)->m_dwCompletedQuest)
|
||||
{
|
||||
for(unsigned long t = 0; t < m_wNumCompleted; t++)
|
||||
{
|
||||
if(m_lstCompleted[t] == (*it)->m_dwCompletedQuest)
|
||||
{
|
||||
bPass = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if(!bPass) continue;
|
||||
}
|
||||
|
||||
if((*it)->m_wMinLevel <= m_dwLevel && m_dwLevel <= (*it)->m_wMaxLevel)
|
||||
{
|
||||
m_lstQuestList[count] = i;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
m_lstQuestList[count] = 0xFFFF;
|
||||
}
|
||||
213
GameTools/GLOBALSCRIPT/Creature/NPC/NPCList.h
Normal file
213
GameTools/GLOBALSCRIPT/Creature/NPC/NPCList.h
Normal file
@@ -0,0 +1,213 @@
|
||||
// NPCList.h: interface for the CNPCList class.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#if !defined(AFX_NPCLIST_H__E20011A2_96E4_44B4_AB08_826651FF4122__INCLUDED_)
|
||||
#define AFX_NPCLIST_H__E20011A2_96E4_44B4_AB08_826651FF4122__INCLUDED_
|
||||
|
||||
#if _MSC_VER > 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER > 1000
|
||||
|
||||
#include <windows.h>
|
||||
#include <vector>
|
||||
|
||||
#define TRIGGER_START 0
|
||||
#define TRIGGER_PUTON 1
|
||||
#define TRIGGER_GETON 2
|
||||
#define TRIGGER_TALK 3
|
||||
#define TRIGGER_KILL 4
|
||||
#define TRIGGER_PICK 5
|
||||
|
||||
#define EVENT_DISAPPEAR 0
|
||||
#define EVENT_GET 1
|
||||
#define EVENT_SPAWN 2
|
||||
#define EVENT_MONSTERDROP 3
|
||||
#define EVENT_DROP 4
|
||||
#define EVENT_AWARD 5
|
||||
#define EVENT_MSGBOX 6
|
||||
#define EVENT_PHASE 7
|
||||
|
||||
using namespace std;
|
||||
|
||||
typedef struct ITEMNode
|
||||
{
|
||||
unsigned short m_wKindItem;
|
||||
unsigned short m_wSkill;
|
||||
unsigned short m_wSkillLevel;
|
||||
unsigned short m_wTabPage;
|
||||
unsigned long m_dwIndexPosition;
|
||||
} ITEMNode, *LPITEMNode;
|
||||
|
||||
typedef struct DialogNode
|
||||
{
|
||||
unsigned short m_wKindWord;
|
||||
unsigned short m_wDialogFlag;
|
||||
unsigned long m_dwFlag;
|
||||
char *m_strWord;
|
||||
} DialogNode, *LPDialogNode;
|
||||
|
||||
typedef struct WarpNode
|
||||
{
|
||||
unsigned short m_wNumber;
|
||||
unsigned short m_wZoneNumber;
|
||||
float m_fPosX;
|
||||
float m_fPosY;
|
||||
float m_fPosZ;
|
||||
} WarpNode, *LPWarpNode;
|
||||
|
||||
typedef struct EventNode
|
||||
{
|
||||
unsigned long m_dwEventKind;
|
||||
unsigned long m_dwEventNumber;
|
||||
unsigned long m_dwEventAmount;
|
||||
float m_fPosX;
|
||||
float m_fPosY;
|
||||
float m_fPosZ;
|
||||
char *m_strWord;
|
||||
} EventNode, *LPEventNode;
|
||||
|
||||
typedef struct TriggerNode
|
||||
{
|
||||
unsigned long m_dwTriggerKind;
|
||||
unsigned long m_dwTriggerID;
|
||||
unsigned long m_dwZoneID;
|
||||
float m_fPosX;
|
||||
float m_fPosY;
|
||||
float m_fPosZ;
|
||||
float m_fDistance;
|
||||
vector<LPEventNode> m_lstEvent;
|
||||
} TriggerNode, *LPTriggerNode;
|
||||
|
||||
typedef struct PhaseNode
|
||||
{
|
||||
unsigned long m_dwPhaseNumber;
|
||||
char *m_strPhaseDesc;
|
||||
vector<LPTriggerNode> m_lstTrigger;
|
||||
} PhaseNode, *LPPhaseNode;
|
||||
|
||||
typedef struct QuestNode
|
||||
{
|
||||
unsigned short m_wQuestID;
|
||||
unsigned short m_wMaxPhase;
|
||||
unsigned short m_wMinLevel;
|
||||
unsigned short m_wMaxLevel;
|
||||
unsigned long m_dwClass;
|
||||
unsigned long m_dwCompletedQuest;
|
||||
char *m_strQuestTitle;
|
||||
vector<LPPhaseNode> m_lstPhase;
|
||||
} QuestNode, *LPQuestNode;
|
||||
|
||||
typedef struct NPCNode
|
||||
{
|
||||
unsigned long m_dwUID;
|
||||
unsigned long m_dwJob;
|
||||
float m_fDirection;
|
||||
float m_fPosX, m_fPosY, m_fPosZ;
|
||||
char *m_strNpcSkin;
|
||||
char *m_strNpcName;
|
||||
|
||||
vector<LPITEMNode> m_lstItem;
|
||||
vector<LPDialogNode> m_lstScript;
|
||||
vector<LPWarpNode> m_lstWarpZone;
|
||||
vector<LPQuestNode> m_lstQuest;
|
||||
|
||||
LPITEMNode GetITEMNode(unsigned short wKindItem)
|
||||
{
|
||||
vector<LPITEMNode>::iterator it;
|
||||
for(it = m_lstItem.begin(); it != m_lstItem.end(); it++)
|
||||
{
|
||||
if((*it)->m_wKindItem == wKindItem) return (*it);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
LPDialogNode GetScript(unsigned short wPage)
|
||||
{
|
||||
vector<LPDialogNode>::iterator it;
|
||||
for(it = m_lstScript.begin(); it != m_lstScript.end(); it++)
|
||||
{
|
||||
if((*it)->m_wKindWord == wPage) return (*it);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
LPWarpNode GetWarpNode(unsigned short wNumber)
|
||||
{
|
||||
vector<LPWarpNode>::iterator it;
|
||||
for(it = m_lstWarpZone.begin(); it != m_lstWarpZone.end(); it++)
|
||||
{
|
||||
if((*it)->m_wNumber == wNumber) return (*it);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
LPQuestNode GetQuestforID(unsigned short wQuestID)
|
||||
{
|
||||
vector<LPQuestNode>::iterator it;
|
||||
for(it = m_lstQuest.begin(); it != m_lstQuest.end(); it++)
|
||||
{
|
||||
if((*it)->m_wQuestID == wQuestID) return (*it);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
LPQuestNode GetQuestforNumber(unsigned short wNumber)
|
||||
{
|
||||
if(m_lstQuest.size() > wNumber)
|
||||
{
|
||||
return m_lstQuest[wNumber];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char *GetGreeting(void)
|
||||
{
|
||||
vector<LPDialogNode>::iterator it;
|
||||
for(it = m_lstScript.begin(); it != m_lstScript.end(); it++)
|
||||
{
|
||||
if((*it)->m_wKindWord == 0) return (*it)->m_strWord;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void SearchQuestList(unsigned long m_dwLevel, unsigned long m_dwClass, unsigned short *m_lstCompleted, unsigned short m_wNumCompleted, unsigned short *m_lstQuestList);
|
||||
|
||||
} NPCNode, *LPNPCNode;
|
||||
|
||||
class CNPCList
|
||||
{
|
||||
protected:
|
||||
vector<LPNPCNode> m_lstNpcNode;
|
||||
unsigned long m_dwZone;
|
||||
|
||||
public:
|
||||
LPQuestNode m_lpQuestNode;
|
||||
LPPhaseNode m_lpPhaseNode;
|
||||
LPTriggerNode m_lpTriggerNode;
|
||||
|
||||
const char *GetGreeting(unsigned long dwUID);
|
||||
void DestroyNPCList(void);
|
||||
LPITEMNode GetITEMNode(unsigned short wKindItem);
|
||||
LPNPCNode GetNPCNode(unsigned long dwUID);
|
||||
LPNPCNode GetNPCNodeByOrder(unsigned long dwOrder) { return m_lstNpcNode[dwOrder]; }
|
||||
void AddNpc(LPNPCNode lpNewNode);
|
||||
BOOL IsExistNpc(unsigned long dwUID);
|
||||
CNPCList();
|
||||
~CNPCList();
|
||||
|
||||
BOOL Load(const char *strScriptFile, const char *strQuestFile, unsigned long dwZone = 1);
|
||||
void Create(void);
|
||||
unsigned long GetNpcNum(void) { return m_lstNpcNode.size(); }
|
||||
unsigned long GetZone(void) { return m_dwZone; }
|
||||
};
|
||||
|
||||
extern CNPCList g_NPCList;
|
||||
|
||||
#endif // !defined(AFX_NPCLIST_H__E20011A2_96E4_44B4_AB08_826651FF4122__INCLUDED_)
|
||||
411
GameTools/GLOBALSCRIPT/DB/DBdefine.h
Normal file
411
GameTools/GLOBALSCRIPT/DB/DBdefine.h
Normal file
@@ -0,0 +1,411 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// DB Struct Define
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#ifndef _DBDefine
|
||||
#define _DBDefine
|
||||
|
||||
#pragma pack(push, 1) // 1byte order<65><72> <20><>ŷ
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD>ü(<28><>)
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct _USERINFO_TABLE
|
||||
{
|
||||
unsigned long UID; // <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned long Char1; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> (ù<><C3B9>°)
|
||||
unsigned long Char2; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> (<28>ι<EFBFBD>°)
|
||||
unsigned long Char3; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> (<28><><EFBFBD><EFBFBD>°)
|
||||
}USERINFO_TABLE, *LPUSERINFO_TABLE;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20>ð<EFBFBD>
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct _TIME
|
||||
{
|
||||
unsigned short Year; // <20><><EFBFBD><EFBFBD>
|
||||
unsigned short Month; // <20><>
|
||||
unsigned short Day; // <20><>¥
|
||||
unsigned short Hour; // <20>ð<EFBFBD>
|
||||
unsigned short Minute; // <20><>
|
||||
unsigned short Second; // <20><>
|
||||
unsigned long MSecond; // <20>и<EFBFBD><D0B8><EFBFBD>
|
||||
}TIME, *LPTIME;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct _AUTH
|
||||
{
|
||||
unsigned long Errcode; // <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
|
||||
unsigned long Type; // <20><><EFBFBD><EFBFBD> Ÿ<><C5B8>
|
||||
unsigned long UID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
union COMMENT
|
||||
{
|
||||
unsigned long Point; // <20><><EFBFBD><EFBFBD>Ʈ <20><>
|
||||
TIME Time; // <20>ð<EFBFBD>
|
||||
}Comment;
|
||||
|
||||
unsigned long Dumy[4]; // <20>ݿ<D4B0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
}AUTH, *LPAUTH;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20>Ѱ<EFBFBD><D1B0><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct _HAN_UID
|
||||
{
|
||||
unsigned long hUID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned long lUID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
}HAN_UID, *LPHAN_UID;
|
||||
|
||||
typedef struct _HAN_AUTH
|
||||
{
|
||||
unsigned char Num; // <20>ڸ<EFBFBD><DAB8><EFBFBD>
|
||||
unsigned short Extra; // <20><><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned long UID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned char Dump; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}HAN_AUTH, *LPHAN_AUTH;
|
||||
|
||||
typedef union _HAN_CONVERT
|
||||
{
|
||||
unsigned _int64 iValue; // 64 Bit <20><>
|
||||
HAN_AUTH sValue; // <20><><EFBFBD><EFBFBD>ü
|
||||
}HAN_CONVERT, *LPHAN_CONVERT;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><>ġ
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct _POS
|
||||
{
|
||||
float fPointX; // Point X <20><>ǥ
|
||||
float fPointY; // Point Y <20><>ǥ
|
||||
float fPointZ; // Point Z <20><>ǥ
|
||||
}POS, *LPPOS;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><>ų <20><><EFBFBD><EFBFBD> // modified 2002/10/3 11:20 by sparrowhawk
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
union SKILLSLOT
|
||||
{
|
||||
enum {
|
||||
MAX_SKILL_LEVEL = 7, // 0~6
|
||||
MAX_LOCKCOUNT = 5 // 0~4
|
||||
};
|
||||
|
||||
struct
|
||||
{
|
||||
unsigned short wSkill; // <20><>ų <20><><EFBFBD>̵<EFBFBD>
|
||||
char cLockCount; // <20><>ų <20><> ī<><C4AB>Ʈ ( 0~4 )
|
||||
char cSkillLevel; // <20><>ų <20><><EFBFBD><EFBFBD> ( -127 ~ 128 )
|
||||
}SKILLINFO;
|
||||
|
||||
unsigned long dwSkillSlot;
|
||||
|
||||
SKILLSLOT() : dwSkillSlot(0) { }
|
||||
SKILLSLOT(unsigned short skill, char lockcount, char skillLevel)
|
||||
{ SKILLINFO.wSkill = skill; SKILLINFO.cLockCount = lockcount; SKILLINFO.cSkillLevel = skillLevel; }
|
||||
};
|
||||
typedef SKILLSLOT* LPSKILLSLOT;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><>ų // modified 2002/10/3 11:20 by sparrowhawk
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
struct SKILL
|
||||
{
|
||||
enum { MAX_SLOT_NUM = 20 };
|
||||
|
||||
unsigned short wSkillNum; // <20><>ų <20><>
|
||||
unsigned short wSlotNum; // <20><><EFBFBD><EFBFBD> <20><>
|
||||
|
||||
SKILLSLOT SSlot[MAX_SLOT_NUM]; // <20><>ų
|
||||
|
||||
SKILL() : wSkillNum(0), wSlotNum(0) { }
|
||||
SKILL(unsigned short usSkillNum, unsigned short usSlotNum)
|
||||
: wSkillNum(usSkillNum), wSlotNum(usSlotNum) { }
|
||||
};
|
||||
typedef SKILL* LPSKILL;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Ÿ<><C5B8>Ʋ
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct _TITLE
|
||||
{
|
||||
__int64 dlTitle; // Ÿ<><C5B8>Ʋ <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned short wScore; // Ÿ<><C5B8>Ʋ <20><><EFBFBD><EFBFBD>
|
||||
}TITLE, *LPTITLE;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct _EQUIP
|
||||
{
|
||||
enum { MAX_EQUIP_SIZE = 1436 }; // + 4 = 1440
|
||||
|
||||
unsigned long dwSize;
|
||||
char Data[MAX_EQUIP_SIZE];
|
||||
} EQUIP, *LPEQUIP;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20>κ<EFBFBD>
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct _INVEN
|
||||
{
|
||||
enum { MAX_INVEN_SIZE = 5116 }; // + 4 = 5120
|
||||
|
||||
unsigned long dwSize;
|
||||
char Data[MAX_INVEN_SIZE];
|
||||
} INVEN, *LPINVEN;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Extra
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct _EXTRA
|
||||
{
|
||||
enum { MAX_EXTRA_SIZE = 508 }; // + 4 = 512
|
||||
|
||||
unsigned long dwSize;
|
||||
char Data[MAX_EXTRA_SIZE];
|
||||
} EXTRA, *LPEXTRA;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Exchange
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct _EXCHANGE
|
||||
{
|
||||
enum { MAX_EXCHANGE_SIZE = 1280 }; // + 4 = 1284
|
||||
|
||||
unsigned long dwSize;
|
||||
char Data[MAX_EXCHANGE_SIZE];
|
||||
} EXCHANGE, *LPEXCHANGE;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
struct QUICKSLOT {
|
||||
|
||||
enum Type { NONE = 0, SKILL = 1, ITEM = 2 };
|
||||
char nType;
|
||||
char nSkillLockCount;
|
||||
char nSkillLevel;
|
||||
unsigned short wID; // Skill_ID <20>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ProtoType ID
|
||||
|
||||
QUICKSLOT() : nType(NONE), nSkillLockCount(0), nSkillLevel(0), wID(0) { }
|
||||
QUICKSLOT(char type, char lockCount, char skillLevel, unsigned short wid)
|
||||
: nType(type), nSkillLockCount(lockCount), nSkillLevel(skillLevel), wID(wid) { }
|
||||
};
|
||||
typedef QUICKSLOT* LPQUICKSLOT;
|
||||
|
||||
typedef struct _QUICK
|
||||
{
|
||||
enum { MAX_QUICK_NUM = 10 };
|
||||
QUICKSLOT Slots[MAX_QUICK_NUM];
|
||||
|
||||
}QUICK, *LPQUICK;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
struct CHAR_CREATE
|
||||
{
|
||||
enum { MAX_NAME_LEN = 16 };
|
||||
|
||||
enum _Nationality {
|
||||
HUMAN = 0,
|
||||
AKHAN = 1
|
||||
};
|
||||
|
||||
char Name[MAX_NAME_LEN]; // ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
char Sex; // ij<><C4B3><EFBFBD><EFBFBD> <20><>
|
||||
char Hair; // ij<><C4B3><EFBFBD><EFBFBD> <20>Ӹ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
char Face; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
char Nationality; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned short Class; // ij<><C4B3><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned short Equip[15]; // <20><><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned short STR; // ij<><C4B3><EFBFBD><EFBFBD> STR
|
||||
unsigned short DEX; // ij<><C4B3><EFBFBD><EFBFBD> DEX
|
||||
unsigned short CON; // ij<><C4B3><EFBFBD><EFBFBD> CON
|
||||
unsigned short INT; // ij<><C4B3><EFBFBD><EFBFBD> INT
|
||||
unsigned short WIS; // ij<><C4B3><EFBFBD><EFBFBD> WIS
|
||||
};
|
||||
typedef CHAR_CREATE* LPCHAR_CREATE;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
struct CHAR_VIEW
|
||||
{
|
||||
enum { MAX_NAME_LEN = 16 };
|
||||
enum _Nationality {
|
||||
HUMAN = 0,
|
||||
AKHAN = 1
|
||||
};
|
||||
|
||||
unsigned long UID;
|
||||
|
||||
char Name[MAX_NAME_LEN]; // ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
char Sex; // ij<><C4B3><EFBFBD><EFBFBD> <20><>
|
||||
char Hair; // ij<><C4B3><EFBFBD><EFBFBD> <20>Ӹ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
char Face; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
char Nationality; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned short Class; // ij<><C4B3><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned long Merits; // <20><><EFBFBD>嵵
|
||||
unsigned short Fame; // <20><><EFBFBD><EFBFBD>
|
||||
unsigned long Guild; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned long Party; // ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ
|
||||
char Level; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned short Equip[15]; // <20><><EFBFBD><EFBFBD>(<28>Ѻ<EFBFBD><D1BA><EFBFBD>)
|
||||
};
|
||||
typedef CHAR_VIEW* LPCHAR_VIEW;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> DB Table
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct _USER_INFO
|
||||
{
|
||||
unsigned long Char1; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> (ù<><C3B9>°)
|
||||
unsigned long Char2; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> (<28>ι<EFBFBD>°)
|
||||
unsigned long Char3; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> (<28><><EFBFBD><EFBFBD>°)
|
||||
unsigned long Zone; // ij<><C4B3><EFBFBD><EFBFBD> <20>ֱ<EFBFBD> <20><>
|
||||
}USER_INFO, *LPUSER_INFO;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> DB Table
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct _CHAR_INFOST
|
||||
{
|
||||
enum { MAX_NAME_LEN = 16 };
|
||||
|
||||
unsigned long UID;
|
||||
|
||||
char Name[MAX_NAME_LEN]; // ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
char Sex; // ij<><C4B3><EFBFBD><EFBFBD> <20><>
|
||||
char Hair; // ij<><C4B3><EFBFBD><EFBFBD> <20>Ӹ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
char Face; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
char Nationality; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned short Class; // ij<><C4B3><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned long Merits; // <20><><EFBFBD>嵵
|
||||
unsigned short Fame; // <20><><EFBFBD><EFBFBD>
|
||||
unsigned long Guild; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned long Party; // ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ
|
||||
char Level; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned long Gold; // <20><>
|
||||
|
||||
unsigned short IP; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
unsigned short STR; // ij<><C4B3><EFBFBD><EFBFBD> STR
|
||||
unsigned short DEX; // ij<><C4B3><EFBFBD><EFBFBD> DEX
|
||||
unsigned short CON; // ij<><C4B3><EFBFBD><EFBFBD> CON
|
||||
unsigned short INT; // ij<><C4B3><EFBFBD><EFBFBD> INT
|
||||
unsigned short WIS; // ij<><C4B3><EFBFBD><EFBFBD> WIS
|
||||
|
||||
short HP; // ij<><C4B3><EFBFBD><EFBFBD> HP
|
||||
short MP; // ij<><C4B3><EFBFBD><EFBFBD> MP
|
||||
__int64 Exp; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
} CHAR_INFOST, *LPCHAR_INFOST;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct _CHAR_INFOEX
|
||||
{
|
||||
unsigned long Total; // <20><> <20>̿<EFBFBD> <20>ð<EFBFBD>(<28><>)
|
||||
unsigned long ServerID; // <20><>
|
||||
} CHAR_INFOEX, *LPCHAR_INFOEX;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><>ġ <20><><EFBFBD><EFBFBD> DB Table
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct _CHAR_POS
|
||||
{
|
||||
POS LastPoint; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ
|
||||
POS SavePoint; // <20><><EFBFBD>̺<EFBFBD> <20><>ġ
|
||||
} CHAR_POS, *LPCHAR_POS;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><>Ƽ <20><><EFBFBD><EFBFBD> DB Table
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct _PARTY_INFO
|
||||
{
|
||||
enum { MAX_MEM = 10, MAX_NAME_LEN = 16 };
|
||||
|
||||
unsigned long MemberCID[MAX_MEM]; // <20><><EFBFBD><EFBFBD> CID
|
||||
char Name[MAX_MEM][MAX_NAME_LEN]; // <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
|
||||
} PARTY_INFO, *LPPARTY_INFO;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><>Ƽ
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct _PARTY
|
||||
{
|
||||
enum { MAX_MEM = 10, MAX_NAME_LEN = 16 };
|
||||
|
||||
unsigned long m_dwPartyID;
|
||||
unsigned long m_dwLeaderID;
|
||||
|
||||
unsigned char m_cMemberNum;
|
||||
|
||||
char Name[MAX_MEM][MAX_NAME_LEN];
|
||||
unsigned long MemberCID[MAX_MEM];
|
||||
unsigned long ServerID[MAX_MEM];
|
||||
}PARTY, *LPPARTY;
|
||||
|
||||
typedef struct _PARTY_EX : PARTY
|
||||
{
|
||||
unsigned short m_wClass[MAX_MEM];
|
||||
char m_cLevel[MAX_MEM];
|
||||
}PARTY_EX, *LPPARTY_EX;
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#endif
|
||||
540
GameTools/GLOBALSCRIPT/GlobalScript.dsp
Normal file
540
GameTools/GLOBALSCRIPT/GlobalScript.dsp
Normal file
@@ -0,0 +1,540 @@
|
||||
# Microsoft Developer Studio Project File - Name="GlobalScript" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Static Library" 0x0104
|
||||
|
||||
CFG=GlobalScript - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "GlobalScript.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "GlobalScript.mak" CFG="GlobalScript - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "GlobalScript - Win32 Release" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE "GlobalScript - Win32 Debug" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""$/GlobalScript", PGEAAAAA"
|
||||
# PROP Scc_LocalPath "."
|
||||
CPP=cl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "GlobalScript - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
|
||||
# ADD CPP /nologo /MT /W3 /GX /O2 /I "./" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_RYL_GAME_CLIENT_" /FAcs /YX /FD /c
|
||||
# ADD BASE RSC /l 0x412 /d "NDEBUG"
|
||||
# ADD RSC /l 0x412 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo
|
||||
|
||||
!ELSEIF "$(CFG)" == "GlobalScript - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "./" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_RYL_GAME_CLIENT_" /YX /FD /GZ /c
|
||||
# ADD BASE RSC /l 0x412 /d "_DEBUG"
|
||||
# ADD RSC /l 0x412 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "GlobalScript - Win32 Release"
|
||||
# Name "GlobalScript - Win32 Debug"
|
||||
# Begin Group "Item"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Item\Item.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Item\Item.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Item\ItemConstants.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Item\ItemConstants.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Item\ItemContainer.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Item\ItemContainer.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Item\ItemDataParser.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Item\ItemDataParser.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Item\ItemFactory.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Item\ItemFactory.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Item\ItemMgr.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Item\ItemMgr.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Item\ItemStructure.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Item\ItemStructure.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Utility"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Group "Math"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Utility\Math\Convert.inl
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Utility\Math\Math.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Utility\Math\Math.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Compress"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Group "MiniLZO"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Utility\Compress\MiniLZO\lzoconf.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Utility\Compress\MiniLZO\minilzo.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Utility\Compress\MiniLZO\minilzo.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Utility\Compress\MiniLZO\miniLZOWrapper.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Utility\Compress\MiniLZO\miniLZOWrapper.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# End Group
|
||||
# Begin Group "Resource"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Utility\Resource\EnsureCleanup.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Utility\DelimitedFile.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Utility\DelimitedFile.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Utility\TokenlizedFile.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Utility\TokenlizedFile.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Utility\TypeArray.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Utility\TypeArray.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Creature"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Group "Character"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Creature\Character\CharacterStructure.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Creature\Character\CharacterStructure.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Monster"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Creature\Monster\MonsterMgr.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Creature\Monster\MonsterMgr.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Creature\Monster\MonsterStructure.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Creature\Monster\MonsterStructure.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "NPC"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Creature\NPC\NPCList.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Creature\NPC\NPCList.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Creature\CreatureStructure.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Creature\CreatureStructure.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Skill"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Skill\SkillMgr.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Skill\SkillMgr.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Skill\SkillStructure.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Skill\SkillStructure.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Log"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Log\ServerLog.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Pattern"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Pattern\Singleton.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "DB"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\DB\DBdefine.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "ScriptEngine"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ScriptEngine\BaseDef.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ScriptEngine\ScriptEngine.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Thread"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Thread\Lock.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Network"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Group "Packet"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Group "PacketStruct"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\AddressPacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\CharAttackPacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\CharAttackPacketStruct.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\CharCommunityPacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\CharCommunityPacketStruct.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\CharItemPacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\CharItemPacketStruct.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\CharLoginOutPacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\CharLoginOutPacketStruct.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\CharMovePacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\CharPacketStruct.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\CharStatusPacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\CharStatusPacketStruct.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\ClientToAuthServer.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\ClientToLoginServer.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\DataPacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\PartyPacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\ServerInfo.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketStruct\ServerPacket.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketBase.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketBase.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\Packet\PacketCommand.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "ClientSocket"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Group "Socket"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\ClientSocket\Socket\Socket.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\ClientSocket\Socket\Socket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\ClientSocket\Socket\SocketIO.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\ClientSocket\Socket\SocketIO.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "UDPList"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\ClientSocket\UDPList\T_List.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\ClientSocket\UDPList\UDPList.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\ClientSocket\UDPList\UDPList.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\ClientSocket\ClientSocket.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\ClientSocket\ClientSocket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\ClientSocket\LoginSocket.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\ClientSocket\LoginSocket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\ClientSocket\NetBase.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\ClientSocket\NetBase.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\ClientSocket\Packet.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\ClientSocket\Packet.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "XORCrypt"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\XORCrypt\XORCrypt.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\XORCrypt\XORCrypt.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Network\XORCrypt\XORCryptoCodeList.cpp
|
||||
# End Source File
|
||||
# End Group
|
||||
# End Group
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\stdafx.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\stdafx.h
|
||||
# End Source File
|
||||
# End Target
|
||||
# End Project
|
||||
123
GameTools/GLOBALSCRIPT/GlobalScript.plg
Normal file
123
GameTools/GLOBALSCRIPT/GlobalScript.plg
Normal file
@@ -0,0 +1,123 @@
|
||||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: GlobalScript - Win32 Debug--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP98.tmp" with contents
|
||||
[
|
||||
/nologo /MTd /W3 /Gm /GX /ZI /Od /I "./" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_RYL_GAME_CLIENT_" /Fp"Debug/GlobalScript.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
|
||||
"C:\ryl\GLOBALSCRIPT\Item\Item.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Item\ItemConstants.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Item\ItemContainer.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Item\ItemDataParser.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Item\ItemFactory.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Item\ItemMgr.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Item\ItemStructure.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Utility\Math\Math.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Utility\Compress\MiniLZO\minilzo.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Utility\Compress\MiniLZO\miniLZOWrapper.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Utility\DelimitedFile.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Utility\TokenlizedFile.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Utility\TypeArray.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Creature\Character\CharacterStructure.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Creature\Monster\MonsterMgr.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Creature\Monster\MonsterStructure.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Creature\NPC\NPCList.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Creature\CreatureStructure.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Skill\SkillMgr.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Skill\SkillStructure.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Network\Packet\PacketBase.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Network\ClientSocket\Socket\Socket.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Network\ClientSocket\Socket\SocketIO.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Network\ClientSocket\UDPList\UDPList.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Network\ClientSocket\ClientSocket.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Network\ClientSocket\LoginSocket.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Network\ClientSocket\NetBase.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Network\ClientSocket\Packet.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Network\XORCrypt\XORCrypt.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\Network\XORCrypt\XORCryptoCodeList.cpp"
|
||||
"C:\ryl\GLOBALSCRIPT\stdafx.cpp"
|
||||
]
|
||||
Creating command line "cl.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP98.tmp"
|
||||
Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP99.tmp" with contents
|
||||
[
|
||||
/nologo /out:"Debug\GlobalScript.lib"
|
||||
.\Debug\Item.obj
|
||||
.\Debug\ItemConstants.obj
|
||||
.\Debug\ItemContainer.obj
|
||||
.\Debug\ItemDataParser.obj
|
||||
.\Debug\ItemFactory.obj
|
||||
.\Debug\ItemMgr.obj
|
||||
.\Debug\ItemStructure.obj
|
||||
.\Debug\Math.obj
|
||||
.\Debug\minilzo.obj
|
||||
.\Debug\miniLZOWrapper.obj
|
||||
.\Debug\DelimitedFile.obj
|
||||
.\Debug\TokenlizedFile.obj
|
||||
.\Debug\TypeArray.obj
|
||||
.\Debug\CharacterStructure.obj
|
||||
.\Debug\MonsterMgr.obj
|
||||
.\Debug\MonsterStructure.obj
|
||||
.\Debug\NPCList.obj
|
||||
.\Debug\CreatureStructure.obj
|
||||
.\Debug\SkillMgr.obj
|
||||
.\Debug\SkillStructure.obj
|
||||
.\Debug\PacketBase.obj
|
||||
.\Debug\Socket.obj
|
||||
.\Debug\SocketIO.obj
|
||||
.\Debug\UDPList.obj
|
||||
.\Debug\ClientSocket.obj
|
||||
.\Debug\LoginSocket.obj
|
||||
.\Debug\NetBase.obj
|
||||
.\Debug\Packet.obj
|
||||
.\Debug\XORCrypt.obj
|
||||
.\Debug\XORCryptoCodeList.obj
|
||||
.\Debug\stdafx.obj
|
||||
\ryl\ScriptEngine\Debug\ScriptEngine.lib
|
||||
]
|
||||
Creating command line "link.exe -lib @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP99.tmp"
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
Item.cpp
|
||||
ItemConstants.cpp
|
||||
ItemContainer.cpp
|
||||
ItemDataParser.cpp
|
||||
ItemFactory.cpp
|
||||
ItemMgr.cpp
|
||||
ItemStructure.cpp
|
||||
Math.cpp
|
||||
minilzo.cpp
|
||||
miniLZOWrapper.cpp
|
||||
DelimitedFile.cpp
|
||||
TokenlizedFile.cpp
|
||||
TypeArray.cpp
|
||||
CharacterStructure.cpp
|
||||
MonsterMgr.cpp
|
||||
MonsterStructure.cpp
|
||||
NPCList.cpp
|
||||
CreatureStructure.cpp
|
||||
SkillMgr.cpp
|
||||
SkillStructure.cpp
|
||||
PacketBase.cpp
|
||||
Socket.cpp
|
||||
SocketIO.cpp
|
||||
UDPList.cpp
|
||||
ClientSocket.cpp
|
||||
LoginSocket.cpp
|
||||
NetBase.cpp
|
||||
Packet.cpp
|
||||
XORCrypt.cpp
|
||||
XORCryptoCodeList.cpp
|
||||
stdafx.cpp
|
||||
Creating library...
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
GlobalScript.lib - 0 error(s), 0 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
1017
GameTools/GLOBALSCRIPT/GlobalScript.vcproj
Normal file
1017
GameTools/GLOBALSCRIPT/GlobalScript.vcproj
Normal file
File diff suppressed because it is too large
Load Diff
343
GameTools/GLOBALSCRIPT/Item/Item.cpp
Normal file
343
GameTools/GLOBALSCRIPT/Item/Item.cpp
Normal file
@@ -0,0 +1,343 @@
|
||||
#include "stdafx.h"
|
||||
#include "Item.h"
|
||||
#include "..\Skill\SkillStructure.h"
|
||||
|
||||
static Item::ItemInfo NullProtoType;
|
||||
|
||||
Item::CItem::CItem()
|
||||
: m_ItemInfo(NullProtoType)
|
||||
{
|
||||
m_ItemData.m_dwUID = 0;
|
||||
m_ItemData.m_usProtoTypeID = 0;
|
||||
|
||||
m_ItemData.m_ItemPos.m_cPos = 0;
|
||||
m_ItemData.m_ItemPos.m_cIndex = 0;
|
||||
|
||||
m_ItemData.m_cItemSize = sizeof(ItemData);
|
||||
m_ItemData.m_cNumOrDurability = 0;
|
||||
m_cMaxNumOrDurability = 0;
|
||||
m_dwStallPrice = 0;
|
||||
}
|
||||
|
||||
|
||||
Item::CItem::CItem(unsigned __int64 dwItemUID, const ItemInfo& itemInfo)
|
||||
: m_ItemInfo(itemInfo)
|
||||
{
|
||||
m_ItemData.m_dwUID = dwItemUID;
|
||||
m_ItemData.m_usProtoTypeID = itemInfo.m_usProtoTypeID;
|
||||
|
||||
m_ItemData.m_ItemPos.m_cPos = 0;
|
||||
m_ItemData.m_ItemPos.m_cIndex = 0;
|
||||
|
||||
m_ItemData.m_cItemSize = sizeof(ItemData);
|
||||
m_ItemData.m_cNumOrDurability = itemInfo.m_DetailData.m_cDefaultDurabilityOrStack;
|
||||
m_cMaxNumOrDurability = itemInfo.m_DetailData.m_cMaxDurabilityOrStack;
|
||||
m_dwStallPrice = 0;
|
||||
}
|
||||
|
||||
Item::CItem::~CItem()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool Item::CItem::SerializeOut(char* lpSerializeItem_Out, size_t& nBufferLength_InOut)
|
||||
{
|
||||
if(nBufferLength_InOut >= sizeof(ItemData))
|
||||
{
|
||||
m_ItemData.m_cItemSize = sizeof(ItemData);
|
||||
nBufferLength_InOut = sizeof(ItemData);
|
||||
|
||||
*reinterpret_cast<ItemData*>(lpSerializeItem_Out) = m_ItemData;
|
||||
return true;
|
||||
}
|
||||
|
||||
nBufferLength_InOut = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Item::CItem::SerializeIn(const char* lpSerializeItem_In, size_t& nBufferLength_InOut)
|
||||
{
|
||||
if(sizeof(ItemData) <= nBufferLength_InOut)
|
||||
{
|
||||
const ItemData& itemData = *reinterpret_cast<const Item::ItemData*>(lpSerializeItem_In);
|
||||
nBufferLength_InOut = itemData.m_cItemSize;
|
||||
|
||||
if(itemData.m_usProtoTypeID == m_ItemInfo.m_usProtoTypeID)
|
||||
{
|
||||
m_ItemData = itemData;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Item::CEquipment::CEquipment(unsigned __int64 dwItemUID, const ItemInfo& itemInfo)
|
||||
: CItem(dwItemUID, itemInfo),
|
||||
m_usRuneSocket(0), m_cMaterialType(itemInfo.m_DetailData.m_cMaterialType),
|
||||
m_cSocketNum(0), m_cReserved(0), m_cReserved2(0)
|
||||
{
|
||||
if(1 == m_ItemInfo.m_DetailData.m_cXSize && 1 == m_ItemInfo.m_DetailData.m_cYSize)
|
||||
{
|
||||
m_cMaxSocket = Item::EquipmentInfo::MAX_MINSIZE_SOCKET_NUM;
|
||||
m_cMaxAttribute = Item::EquipmentInfo::MAX_MINSIZE_ATTRIBUTE_NUM;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_cMaxSocket = Item::EquipmentInfo::MAX_SOCKET_NUM;
|
||||
m_cMaxAttribute = Item::EquipmentInfo::MAX_ATTRIBUTE_NUM;
|
||||
}
|
||||
|
||||
m_cMaxSocket = (itemInfo.m_DetailData.m_cMaxSocketNum < m_cMaxSocket) ?
|
||||
itemInfo.m_DetailData.m_cMaxSocketNum : m_cMaxSocket;
|
||||
|
||||
m_ItemData.m_cItemSize += sizeof(EquipmentInfo);
|
||||
|
||||
std::fill_n(m_cSocket, unsigned char(Item::EquipmentInfo::MAX_SOCKET_NUM), 0);
|
||||
InitializeAttribute();
|
||||
}
|
||||
|
||||
Item::CEquipment::~CEquipment()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
void Item::CEquipment::InitializeAttribute()
|
||||
{
|
||||
for(unsigned int nIndex = 0; nIndex < Item::Attribute::MAX_ATTRIBUTE_NUM; ++nIndex)
|
||||
{
|
||||
m_usAttribute[nIndex] =
|
||||
m_ItemInfo.m_EquipAttribute.m_usAttributeValue[nIndex];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool Item::CEquipment::SerializeOut(char* lpSerializeItem_Out, size_t& nBufferLength_InOut)
|
||||
{
|
||||
const size_t nMaxItemSize = sizeof(ItemData) + sizeof(EquipmentInfo) +
|
||||
Item::EquipmentInfo::MAX_SOCKET_NUM * sizeof(unsigned char) +
|
||||
Item::EquipmentInfo::MAX_ATTRIBUTE_NUM * sizeof(ItemAttribute);
|
||||
|
||||
if(nMaxItemSize <= nBufferLength_InOut)
|
||||
{
|
||||
unsigned int nIndex = 0, nSocketIndex = 0, nAttributeIndex = 0;
|
||||
|
||||
// <20>⺻ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
ItemData& itemData = *reinterpret_cast<ItemData*>(lpSerializeItem_Out);
|
||||
itemData = m_ItemData;
|
||||
|
||||
EquipmentInfo& equipmentInfo = *reinterpret_cast<EquipmentInfo*>(lpSerializeItem_Out + sizeof(ItemData));
|
||||
char* lpSocketInfo = lpSerializeItem_Out + sizeof(ItemData) + sizeof(EquipmentInfo);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
for(nIndex = 0, nSocketIndex = 0;
|
||||
nIndex < Item::EquipmentInfo::MAX_SOCKET_NUM && nSocketIndex < m_cMaxSocket; ++nIndex)
|
||||
{
|
||||
if(0 != m_cSocket[nIndex])
|
||||
{
|
||||
lpSocketInfo[nSocketIndex] = m_cSocket[nIndex];
|
||||
++nSocketIndex;
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
ItemAttribute* lpAttribute = reinterpret_cast<ItemAttribute*>(
|
||||
lpSocketInfo + (nSocketIndex * sizeof(unsigned char)));
|
||||
|
||||
for(nIndex = 0, nAttributeIndex = 0;
|
||||
nIndex < Item::Attribute::MAX_ATTRIBUTE_NUM && nAttributeIndex < m_cMaxAttribute; ++nIndex)
|
||||
{
|
||||
const short usDiffAttribute = m_usAttribute[nIndex] -
|
||||
m_ItemInfo.m_EquipAttribute.m_usAttributeValue[nIndex];
|
||||
|
||||
if(0 != usDiffAttribute)
|
||||
{
|
||||
lpAttribute[nAttributeIndex].m_cType = nIndex;
|
||||
lpAttribute[nAttributeIndex].m_usValue = usDiffAttribute;
|
||||
++nAttributeIndex;
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><> ũ<><C5A9> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
m_ItemData.m_cItemSize = itemData.m_cItemSize = sizeof(ItemData) + sizeof(EquipmentInfo) +
|
||||
nSocketIndex * sizeof(unsigned char) + nAttributeIndex * sizeof(ItemAttribute);
|
||||
|
||||
equipmentInfo.m_cRuneSocket = m_usRuneSocket;
|
||||
equipmentInfo.m_cDiffMaterialType = m_cMaterialType - m_ItemInfo.m_DetailData.m_cMaterialType;
|
||||
|
||||
equipmentInfo.m_cDiffMaxSocket = m_cMaxSocket - m_ItemInfo.m_DetailData.m_cMaxSocketNum;
|
||||
equipmentInfo.m_cSocketNum = nSocketIndex;
|
||||
|
||||
equipmentInfo.m_cAttributeNum = nAttributeIndex;
|
||||
equipmentInfo.m_cReserved = 0;
|
||||
|
||||
equipmentInfo.m_cDiffMaxDurability = m_cMaxNumOrDurability - m_ItemInfo.m_DetailData.m_cMaxDurabilityOrStack;
|
||||
equipmentInfo.m_cReserved2 = m_cReserved2;
|
||||
|
||||
nBufferLength_InOut = m_ItemData.m_cItemSize;
|
||||
return true;
|
||||
}
|
||||
|
||||
nBufferLength_InOut = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool Item::CEquipment::SerializeIn(const char* lpSerializeItem_In, size_t& nBufferLength_InOut)
|
||||
{
|
||||
if(CItem::SerializeIn(lpSerializeItem_In, nBufferLength_InOut))
|
||||
{
|
||||
const Item::EquipmentInfo& equipmentInfo =
|
||||
*reinterpret_cast<const Item::EquipmentInfo*>(lpSerializeItem_In + sizeof(ItemData));
|
||||
|
||||
m_usRuneSocket = equipmentInfo.m_cRuneSocket; // <20><> <20><><EFBFBD><EFBFBD>
|
||||
m_cMaterialType = m_ItemInfo.m_DetailData.m_cMaterialType + equipmentInfo.m_cDiffMaterialType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
m_cMaxSocket = m_ItemInfo.m_DetailData.m_cMaxSocketNum + equipmentInfo.m_cDiffMaxSocket; // <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
m_cSocketNum = equipmentInfo.m_cSocketNum;
|
||||
m_cReserved = equipmentInfo.m_cReserved;
|
||||
|
||||
m_cMaxNumOrDurability = m_ItemInfo.m_DetailData.m_cMaxDurabilityOrStack + equipmentInfo.m_cDiffMaxDurability;
|
||||
m_cReserved2 = equipmentInfo.m_cReserved2;
|
||||
|
||||
const unsigned char* lpSocketIndex = reinterpret_cast<const unsigned char*>(&equipmentInfo + 1);
|
||||
const unsigned char* lpSocketPastEnd = lpSocketIndex + m_cSocketNum;
|
||||
std::copy(lpSocketIndex, lpSocketPastEnd, m_cSocket);
|
||||
|
||||
const Item::ItemAttribute* lpItemAttribute =
|
||||
reinterpret_cast<const Item::ItemAttribute*>(lpSocketPastEnd);
|
||||
|
||||
for(unsigned int nIndex = 0; nIndex < equipmentInfo.m_cAttributeNum; ++nIndex)
|
||||
{
|
||||
unsigned char cType = lpItemAttribute[nIndex].m_cType;
|
||||
if(cType < Item::Attribute::MAX_ATTRIBUTE_NUM)
|
||||
{
|
||||
m_usAttribute[cType] = m_ItemInfo.m_EquipAttribute.m_usAttributeValue[cType] + lpItemAttribute[nIndex].m_usValue;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// InstallSocket
|
||||
Item::CEquipment::EQUIPMENT_ERROR Item::CEquipment::InstallSocket(CItem& Gem)
|
||||
{
|
||||
using namespace Item;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><> <20>ڵ<EFBFBD><DAB5><EFBFBD> <20><>.
|
||||
if (Item::EquipmentInfo::MAX_SOCKET_NUM <= m_cMaxSocket ||
|
||||
m_cMaxSocket <= m_cSocketNum)
|
||||
{
|
||||
return EQUIPMENT_ERROR::E_OVER_MAX_SOCKET;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>´°<C2B4> Ȯ<><C8AE>.
|
||||
unsigned short usGemTypeID = Gem.GetPrototypeID();
|
||||
if(usGemTypeID < EtcItemID::GEM_START_ID || EtcItemID::GEM_END_ID < usGemTypeID)
|
||||
{
|
||||
return EQUIPMENT_ERROR::E_NOT_GEM;
|
||||
}
|
||||
|
||||
unsigned char cGemType = usGemTypeID - EtcItemID::GEM_START_ID;
|
||||
|
||||
// <20><> <20>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
ItemAttribute attribute = CItemType::GetInstallGemAttribute(cGemType,
|
||||
m_ItemInfo.m_DetailData.m_cItemType);
|
||||
|
||||
++m_cSocketNum;
|
||||
return EQUIPMENT_ERROR::E_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// UpgradeItem
|
||||
Item::CEquipment::EQUIPMENT_ERROR Item::CEquipment::UpgradeItem(CItem& Mineral)
|
||||
{
|
||||
|
||||
|
||||
|
||||
return EQUIPMENT_ERROR::E_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Item::CUseItem::CUseItem(unsigned __int64 dwItemUID, const ItemInfo& itemInfo)
|
||||
: CItem(dwItemUID, itemInfo)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
Item::CUseItem::~CUseItem()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
Item::CSkillItem::CSkillItem()
|
||||
: CItem(0, m_ItemInfoInstance)
|
||||
{
|
||||
m_cMaxDurability = 0;
|
||||
}
|
||||
|
||||
bool Item::CSkillItem::SetSkillInfo(const Skill::ProtoType *lpSkillInfo)
|
||||
{
|
||||
/* char m_szEffectFileName[MAX_FILE_NAME];
|
||||
char m_szHitFileName[MAX_FILE_NAME];
|
||||
char m_szCastingFileName[MAX_FILE_NAME];
|
||||
|
||||
//-----------------------------------
|
||||
|
||||
Type::Type m_eSkillType; // See Namespace Type
|
||||
Target::Type m_eTargetType; // See Namespace Target
|
||||
UseLimit::Type m_eUseLimit; // See Namespace UseLimit
|
||||
|
||||
unsigned char m_StatusLimitType[MAX_LIMIT_NUM];
|
||||
char m_StatusLimitValue[MAX_LIMIT_NUM];
|
||||
|
||||
//-----------------------------------
|
||||
|
||||
unsigned short m_usSkill_ID;
|
||||
unsigned short m_StartMP;
|
||||
unsigned short m_LevelMP;
|
||||
unsigned short m_StartTick;
|
||||
|
||||
//-----------------------------------
|
||||
|
||||
unsigned short m_LevelTick;
|
||||
unsigned short m_usCoolDownTime;
|
||||
|
||||
//-----------------------------------
|
||||
|
||||
float m_EffectDistance;
|
||||
float m_EffectExtent;
|
||||
|
||||
//-----------------------------------
|
||||
|
||||
bool m_bProtection;
|
||||
bool m_bGauge;
|
||||
bool m_bIsClassSkill;
|
||||
bool m_bInterrupt;
|
||||
unsigned char m_cEndScript;
|
||||
unsigned char m_cEndCoolDown;
|
||||
unsigned char m_cMinRange;
|
||||
unsigned char m_cMaxRange;
|
||||
|
||||
//-----------------------------------
|
||||
|
||||
unsigned char m_cStrikeNum;
|
||||
unsigned char m_cSpell_LockCount;
|
||||
unsigned char m_cPadding[6];*/
|
||||
|
||||
m_ItemInfoInstance.m_SpriteData = lpSkillInfo->m_SpriteInfo;
|
||||
|
||||
return true;
|
||||
}
|
||||
354
GameTools/GLOBALSCRIPT/Item/Item.h
Normal file
354
GameTools/GLOBALSCRIPT/Item/Item.h
Normal file
@@ -0,0 +1,354 @@
|
||||
#ifndef _CITEM_CLASS_H_
|
||||
#define _CITEM_CLASS_H_
|
||||
|
||||
#include <limits>
|
||||
#include <algorithm>
|
||||
#include "ItemStructure.h"
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
namespace Skill
|
||||
{
|
||||
struct ProtoType;
|
||||
}
|
||||
|
||||
|
||||
namespace Item
|
||||
{
|
||||
class CItem
|
||||
{
|
||||
public:
|
||||
|
||||
CItem();
|
||||
CItem(unsigned __int64 dwItemUID, const ItemInfo& itemInfo); // Create Item
|
||||
virtual ~CItem();
|
||||
|
||||
// <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>´<EFBFBD>.
|
||||
const ItemInfo& GetItemInfo() const { return m_ItemInfo; }
|
||||
|
||||
// Desc : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> char<61><72><EFBFBD>۷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// In : <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
// Out : (Return)<29><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, nBufferLength_InOut - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
virtual bool SerializeOut(char* lpSerializeItem_Out, size_t& nBufferLength_InOut);
|
||||
|
||||
// Desc : char<61><72><EFBFBD>۷κ<DBB7><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD> <20>´<EFBFBD>.
|
||||
// In : <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
// Out : (Return)<29><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, nBufferLength_InOut - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
virtual bool SerializeIn(const char* lpSerializeItem_In, size_t& nBufferLength_InOut);
|
||||
|
||||
// Move Item
|
||||
inline void MoveItem(ItemPos itemPos) { m_ItemData.m_ItemPos = itemPos; }
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
inline unsigned __int64 GetUID() const { return m_ItemData.m_dwUID; }
|
||||
inline ItemPos GetPos() const { return m_ItemData.m_ItemPos; }
|
||||
inline ItemPos GetRealPos() const { return m_itemPos_Real; }
|
||||
inline unsigned short GetPrototypeID() const { return m_ItemData.m_usProtoTypeID; }
|
||||
inline unsigned char GetNumOrDurability() const { return m_ItemData.m_cNumOrDurability; }
|
||||
inline unsigned char GetMaxNumOrDurability() const { return m_cMaxNumOrDurability; }
|
||||
inline void SetNumOrDurability(unsigned char cNumOrDurability) { m_ItemData.m_cNumOrDurability = cNumOrDurability; }
|
||||
inline void SetStallPrice(unsigned long dwStallPrice) { m_dwStallPrice = dwStallPrice; }
|
||||
|
||||
inline unsigned long GetBuyPrice() const { return (0 == m_dwStallPrice) ? m_ItemInfo.m_DetailData.m_dwPrice : m_dwStallPrice; }
|
||||
inline unsigned long GetBuyBlackPrice() const { return m_ItemInfo.m_DetailData.m_dwBlackPrice; }
|
||||
inline unsigned long GetSellPrice() const;
|
||||
inline unsigned long GetRepairPrice() const;
|
||||
|
||||
inline const char* GetItemTypeName() const;
|
||||
inline unsigned char GetOptionLimit() const { return m_ItemInfo.m_DetailData.m_cOptionLimit; }
|
||||
|
||||
inline bool IsSet(unsigned long dwDetailDataFlag) const { return dwDetailDataFlag == (m_ItemInfo.m_DetailData.m_dwFlags & dwDetailDataFlag); }
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><>
|
||||
inline bool GetEnableRepair();
|
||||
inline bool GetEnableStack();
|
||||
inline bool GetSocketItem();
|
||||
inline bool GetTwohandItem();
|
||||
inline bool GetEnableEquip();
|
||||
inline void SetItemPos(unsigned short wItemPos) { m_ItemData.m_ItemPos.m_cPos = wItemPos; }
|
||||
inline unsigned short GetItemPos(void) { return m_ItemData.m_ItemPos.m_cPos; }
|
||||
|
||||
inline void SetPos(unsigned char cXIndex, unsigned char cYIndex, unsigned char cZIndex) { m_ItemData.m_ItemPos.SetPos(cXIndex, cYIndex, cZIndex); }
|
||||
inline void SetXIndex(unsigned char cXIndex) { m_ItemData.m_ItemPos.SetXIndex(cXIndex); }
|
||||
inline void SetYIndex(unsigned char cYIndex) { m_ItemData.m_ItemPos.SetYIndex(cYIndex); }
|
||||
inline void SetZIndex(unsigned char cZIndex) { m_ItemData.m_ItemPos.SetZIndex(cZIndex); }
|
||||
|
||||
inline void SetPos(unsigned short wIndex) { m_ItemData.m_ItemPos.SetPos(wIndex); }
|
||||
|
||||
protected:
|
||||
|
||||
const ItemInfo& m_ItemInfo; // <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ItemData m_ItemData; // DB<44><42> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
ItemPos m_itemPos_Real; // <20>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ
|
||||
unsigned char m_cMaxNumOrDurability; // <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned long m_dwStallPrice; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3BFA1BC><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
class CEquipment : public CItem
|
||||
{
|
||||
public:
|
||||
|
||||
enum EQUIPMENT_ERROR
|
||||
{
|
||||
E_SUCCESS = 0, // <20><><EFBFBD><EFBFBD>
|
||||
E_SERVER_ERROR = 1, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
E_GET_EQUIP_FAILED = 2, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
E_GET_GEM_FAILED = 3, // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
E_NOT_EQUIP = 4, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
|
||||
E_NOT_GEM = 5, // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
|
||||
E_REMOVE_GEM_FAILED = 6, // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
E_SOCKET_IS_FULL = 7, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʰ<EFBFBD>
|
||||
E_OVER_MAX_SOCKET = 8, // <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʰ<EFBFBD>
|
||||
|
||||
E_GET_MINERAL_FAILED = 3,
|
||||
E_NOT_MINERAL = 5,
|
||||
E_NOT_MATCH_MINERAL_TYPE = 6,
|
||||
E_NOT_ENOUGH_MINERAL = 7,
|
||||
E_REMOVE_EQUIP_FAILED = 8,
|
||||
E_CREATE_ITEM_FAILED = 9,
|
||||
E_REMOVE_MINERAL_FAILED = 10
|
||||
};
|
||||
|
||||
CEquipment(unsigned __int64 dwItemUID, const ItemInfo& itemInfo);
|
||||
virtual ~CEquipment();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Downcast<73>Ѵ<EFBFBD>.
|
||||
inline static CEquipment* DowncastToEquipment(CItem* lpItem);
|
||||
|
||||
// Desc : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> char<61><72><EFBFBD>۷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// In : <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
// Out : (Return)<29><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, nBufferLength_InOut - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
virtual bool SerializeOut(char* lpSerializeItem_Out, size_t& nBufferLength_InOut);
|
||||
|
||||
// Desc : char<61><72><EFBFBD>۷κ<DBB7><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD> <20>´<EFBFBD>.
|
||||
// In : <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
// Out : (Return)<29><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, nBufferLength_InOut - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
virtual bool SerializeIn(const char* lpSerializeItem_In, size_t& nBufferLength_InOut);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD>Ƿ<EFBFBD> <20>ٲٱ<D9B2> <20><><EFBFBD><EFBFBD>.
|
||||
void AddAttribute(Item::Attribute::Type eAttributeType, unsigned short nAttributeValue) { m_usAttribute[eAttributeType] += nAttributeValue; }
|
||||
inline void AddAttribute(const short* lpAttributeArray_In, unsigned short nArraySize);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20>´<EFBFBD>.
|
||||
unsigned short GetAttribute(Item::Attribute::Type eAttributeType) { return m_usAttribute[eAttributeType]; }
|
||||
inline void GetAttribute(short* lpAttributeArray_Out, unsigned short nArraySize);
|
||||
|
||||
// Desc : InstallSocket -
|
||||
// <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڴ<EFBFBD> <20><><EFBFBD><EFBFBD>. 1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>´<EFBFBD>. 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>Ƽ<EFBFBD> <20><><EFBFBD>´<EFBFBD>.
|
||||
// 3. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڴ´<DAB4>. 4. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ش<EFBFBD>. 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20>Դ´<D4B4>.
|
||||
EQUIPMENT_ERROR InstallSocket(CItem& Gem);
|
||||
|
||||
// Desc : UpgradeItem -
|
||||
EQUIPMENT_ERROR UpgradeItem(CItem& Mineral);
|
||||
|
||||
void InitializeAttribute();
|
||||
|
||||
unsigned char m_cSocket[Item::EquipmentInfo::MAX_SOCKET_NUM]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
short m_usAttribute[Item::Attribute::MAX_ATTRIBUTE_NUM]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD>
|
||||
|
||||
unsigned short m_usRuneSocket; // <20><> <20><><EFBFBD><EFBFBD>
|
||||
unsigned char m_cMaterialType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char m_cMaxSocket; // <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned char m_cSocketNum; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned char m_cMaxAttribute; // <20>ִ<EFBFBD> <20>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned char m_cReserved; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned char m_cReserved2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
class CUseItem : public CItem
|
||||
{
|
||||
public:
|
||||
|
||||
CUseItem(unsigned __int64 dwItemUID, const ItemInfo& itemInfo);
|
||||
virtual ~CUseItem();
|
||||
|
||||
inline static CUseItem* DowncastToUseItem(CItem* lpItem);
|
||||
bool Use();
|
||||
};
|
||||
|
||||
class CSkillItem : public CItem
|
||||
{
|
||||
public:
|
||||
|
||||
CSkillItem();
|
||||
virtual ~CSkillItem() { }
|
||||
|
||||
inline void SetProtoTypeID(unsigned short usProtoTypeID) { m_ItemData.m_usProtoTypeID = usProtoTypeID; }
|
||||
inline unsigned char GetMaxNumOrDurability() const { return m_cMaxDurability; }
|
||||
inline void SetMaxNumOrDurability(unsigned char cMaxNumOrDurability) { m_cMaxDurability = cMaxNumOrDurability; }
|
||||
|
||||
bool SetSkillInfo(const Skill::ProtoType *lpSkillInfo);
|
||||
|
||||
protected:
|
||||
|
||||
ItemInfo m_ItemInfoInstance;
|
||||
unsigned char m_cMaxDurability; // <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
|
||||
inline const char* Item::CItem::GetItemTypeName() const
|
||||
{
|
||||
switch (m_ItemInfo.m_DetailData.m_cItemType)
|
||||
{
|
||||
case Item::CItemType::HELM: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::SHIRT: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::TUNIC: return "Ʃ<EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::ARMOUR: return "<EFBFBD>Ƹ<EFBFBD>";
|
||||
case Item::CItemType::GLOVE: return "<EFBFBD>尩";
|
||||
case Item::CItemType::BOOTS: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::SWORD: return "<EFBFBD>Ѽհ<EFBFBD>";
|
||||
case Item::CItemType::BLUNT: return "<EFBFBD>Ѽյб<EFBFBD>";
|
||||
case Item::CItemType::AXE: return "<EFBFBD>Ѽյ<EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::TWOHANDED_BLUNT: return "<EFBFBD><EFBFBD><EFBFBD>յб<EFBFBD>";
|
||||
case Item::CItemType::TWOHANDED_AXE: return "<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::TWOHANDED_SWORD: return "<EFBFBD><EFBFBD><EFBFBD>հ<EFBFBD>";
|
||||
case Item::CItemType::BOW: return "Ȱ";
|
||||
case Item::CItemType::CROSSBOW: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::STAFF: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::DAGGER: return "<EFBFBD>ܰ<EFBFBD>";
|
||||
case Item::CItemType::SHIELD: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::CLOAK: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::RING: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::NECKLACE: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::POTION: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::POISON: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::TRAP: return "Ʈ<EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::SKILLBOOK: return "<EFBFBD><EFBFBD>ų<EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::GEM: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::RUNE: return "<EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::MATERIAL: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::AMMO: return "<EFBFBD>Ҹ<EFBFBD>ǰ";
|
||||
case Item::CItemType::ETC: return "<EFBFBD><EFBFBD>Ÿ";
|
||||
case Item::CItemType::HEAD: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƹ<EFBFBD>";
|
||||
case Item::CItemType::BODY: return "<EFBFBD>ٵ<EFBFBD><EFBFBD>Ƹ<EFBFBD>";
|
||||
case Item::CItemType::PROTECT_A: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::PELVIS: return "<EFBFBD><EFBFBD><EFBFBD>Ƹ<EFBFBD>";
|
||||
case Item::CItemType::COM_BLUNT: return "<EFBFBD>Ĺ<EFBFBD><EFBFBD><EFBFBD>Ʈ <20>б<EFBFBD>";
|
||||
case Item::CItemType::COM_SWORD: return "<EFBFBD>Ĺ<EFBFBD><EFBFBD><EFBFBD>Ʈ <20><>";
|
||||
case Item::CItemType::OPP_HAMMER: return "<EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>б<EFBFBD>";
|
||||
case Item::CItemType::OPP_AXE: return "<EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::OPP_SLUSHER: return "<EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::OPP_TALON: return "<EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ż<><C5BB>";
|
||||
case Item::CItemType::OPP_SYTHE: return "<EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>";
|
||||
case Item::CItemType::SKILL_A_GUARD: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::SKILL_A_ATTACK: return "<EFBFBD><EFBFBD><EFBFBD>þ<EFBFBD>";
|
||||
case Item::CItemType::SKILL_A_GUN: return "<EFBFBD>Ǿ<EFBFBD>";
|
||||
case Item::CItemType::SKILL_A_KNIFE: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::ACCESSORY: return "<EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::ARROW: return "ȭ<EFBFBD><EFBFBD>";
|
||||
case Item::CItemType::BOLT: return "<EFBFBD><EFBFBD>Ʈ";
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
inline unsigned long Item::CItem::GetSellPrice() const
|
||||
{
|
||||
if (0 != m_dwStallPrice) { return m_dwStallPrice; }
|
||||
|
||||
unsigned long dwSellPrice = m_ItemInfo.m_DetailData.m_dwPrice;
|
||||
unsigned long dwFlags = m_ItemInfo.m_DetailData.m_dwFlags;
|
||||
|
||||
if(IsSet(DetailData::EQUIP))
|
||||
{
|
||||
dwSellPrice = IsSet(DetailData::STACKABLE) ?
|
||||
dwSellPrice / 2 : (dwSellPrice * m_ItemData.m_cNumOrDurability / m_cMaxNumOrDurability / 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
dwSellPrice = (Item::CItemType::SKILLBOOK == m_ItemInfo.m_DetailData.m_cItemType) ?
|
||||
dwSellPrice / 4 : dwSellPrice / 2;
|
||||
}
|
||||
|
||||
return (0 == dwSellPrice) ? 1 : dwSellPrice;
|
||||
}
|
||||
|
||||
|
||||
inline unsigned long Item::CItem::GetRepairPrice() const
|
||||
{
|
||||
unsigned long dwRepairPrice = (m_ItemInfo.m_DetailData.m_dwPrice *
|
||||
(m_cMaxNumOrDurability - m_ItemData.m_cNumOrDurability) / m_cMaxNumOrDurability / 2);
|
||||
return (0 == dwRepairPrice) ? 1 : dwRepairPrice;
|
||||
}
|
||||
|
||||
inline Item::CEquipment* Item::CEquipment::DowncastToEquipment(Item::CItem* lpItem)
|
||||
{
|
||||
return lpItem->IsSet(DetailData::EQUIP) ?
|
||||
static_cast<CEquipment*>(lpItem) : NULL;
|
||||
}
|
||||
|
||||
void Item::CEquipment::AddAttribute(const short* lpAttributeArray_In, unsigned short nArraySize)
|
||||
{
|
||||
unsigned short nCopyNum = nArraySize < Item::Attribute::MAX_ATTRIBUTE_NUM
|
||||
? nArraySize : Item::Attribute::MAX_ATTRIBUTE_NUM;
|
||||
while(0 <= --nCopyNum) { m_usAttribute[nCopyNum] += lpAttributeArray_In[nCopyNum]; }
|
||||
}
|
||||
|
||||
void Item::CEquipment::GetAttribute(short* lpAttributeArray_Out, unsigned short nArraySize)
|
||||
{
|
||||
unsigned short nCopyNum = nArraySize < Item::Attribute::MAX_ATTRIBUTE_NUM
|
||||
? nArraySize : Item::Attribute::MAX_ATTRIBUTE_NUM;
|
||||
short* lpAttributePastEnd = m_usAttribute + nCopyNum;
|
||||
std::copy(m_usAttribute, lpAttributePastEnd, lpAttributeArray_Out);
|
||||
}
|
||||
|
||||
inline Item::CUseItem* Item::CUseItem::DowncastToUseItem(CItem* lpItem)
|
||||
{
|
||||
return lpItem->IsSet(DetailData::USE_ITEM) ?
|
||||
static_cast<CUseItem*>(lpItem) : NULL;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD> <20>߰<EFBFBD> <20><> <20><>
|
||||
inline bool Item::CItem::GetEnableRepair()
|
||||
{
|
||||
unsigned long dwFlags = GetItemInfo().m_DetailData.m_dwFlags;
|
||||
if((dwFlags & Item::DetailData::EQUIP) && !(dwFlags & Item::DetailData::STACKABLE))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
inline bool Item::CItem::GetEnableStack()
|
||||
{
|
||||
if(GetItemInfo().m_DetailData.m_dwFlags & Item::DetailData::STACKABLE)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
inline bool Item::CItem::GetEnableEquip()
|
||||
{
|
||||
if(GetItemInfo().m_DetailData.m_dwFlags & Item::DetailData::EQUIP)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
inline bool Item::CItem::GetSocketItem()
|
||||
{
|
||||
unsigned char cItemType = GetItemInfo().m_DetailData.m_cItemType;
|
||||
if(cItemType == Item::CItemType::GEM || cItemType == Item::CItemType::RUNE)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
inline bool Item::CItem::GetTwohandItem()
|
||||
{
|
||||
unsigned char cItemType = GetItemInfo().m_DetailData.m_cItemType;
|
||||
if(cItemType == Item::CItemType::BOW || cItemType == Item::CItemType::CROSSBOW ||
|
||||
cItemType == Item::CItemType::STAFF || cItemType == Item::CItemType::TWOHANDED_AXE ||
|
||||
cItemType == Item::CItemType::TWOHANDED_BLUNT || cItemType == Item::CItemType::TWOHANDED_SWORD ||
|
||||
cItemType == Item::CItemType::OPP_SYTHE)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
||||
373
GameTools/GLOBALSCRIPT/Item/ItemConstants.cpp
Normal file
373
GameTools/GLOBALSCRIPT/Item/ItemConstants.cpp
Normal file
@@ -0,0 +1,373 @@
|
||||
#include "stdafx.h"
|
||||
#include "ItemConstants.h"
|
||||
#include "ItemStructure.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
using namespace Item;
|
||||
|
||||
Item::CItemType Item::CItemType::ms_this;
|
||||
|
||||
const CTypeName Item::Attribute::Attributes[Item::Attribute::MAX_ATTRIBUTE_NUM] =
|
||||
{
|
||||
CTypeName(Attribute::NONE, "None"),
|
||||
CTypeName(Attribute::CRITICAL_TYPE, "CriticalType"),
|
||||
CTypeName(Attribute::CRITICAL_PERCENTAGE, "CriticalPercentage"),
|
||||
CTypeName(Attribute::MIN_DAMAGE, "MinDamage"),
|
||||
CTypeName(Attribute::MAX_DAMAGE, "MaxDamage"),
|
||||
CTypeName(Attribute::DRC, "DRC"),
|
||||
CTypeName(Attribute::OFFENCE_REVISION, "OffenceRevision"),
|
||||
CTypeName(Attribute::DEFENCE, "Defence"),
|
||||
CTypeName(Attribute::DEFENCE_REVISION, "DefenceRevision"),
|
||||
CTypeName(Attribute::MAGIC_RESISTANCE, "Resistance"),
|
||||
CTypeName(Attribute::BLOCKING_PERCENTAGE, "BlockingPercentage"),
|
||||
CTypeName(Attribute::ATTACK_SPEED, "AttackSpeed"),
|
||||
CTypeName(Attribute::MOVE_SPEED, "MoveSpeed"),
|
||||
CTypeName(Attribute::ATTACK_RANGE, "AttackRange"),
|
||||
CTypeName(Attribute::RANGE_ATTACK_DISTANCE, "LongRangeAttack"),
|
||||
CTypeName(Attribute::MAX_HP, "HpMaxPlus"),
|
||||
CTypeName(Attribute::MAX_MP, "MpMaxPlus"),
|
||||
CTypeName(Attribute::HP_REGEN_AMOUNT, "HPRegen"),
|
||||
CTypeName(Attribute::MP_REGEN_AMOUNT, "MPRegen"),
|
||||
CTypeName(Attribute::FIRE_ATTACK, "FireAttribute"),
|
||||
CTypeName(Attribute::LIGHTNING_ATTACK, "LightingAttribute"),
|
||||
CTypeName(Attribute::COLD_ATTACK, "ColdAttribute"),
|
||||
CTypeName(Attribute::DRAIN_ATTACK, "DrainAttribute"),
|
||||
CTypeName(Attribute::POISON_ATTACK, "PoisonAttribute"),
|
||||
CTypeName(Attribute::FIRE_RESISTANCE, "FireResistance"),
|
||||
CTypeName(Attribute::LIGHTNING_RESISTANCE, "LightningResistance"),
|
||||
CTypeName(Attribute::COLD_RESISTANCE, "ColdResistance"),
|
||||
CTypeName(Attribute::DRAIN_RESISTANCE, "DrainResistance"),
|
||||
CTypeName(Attribute::POISON_RESISTANCE, "PoisonResistance"),
|
||||
CTypeName(Attribute::ADD_STR, "STRAdd"),
|
||||
CTypeName(Attribute::ADD_DEX, "DEXAdd"),
|
||||
CTypeName(Attribute::ADD_CON, "CONAdd"),
|
||||
CTypeName(Attribute::ADD_INT, "INTAdd"),
|
||||
CTypeName(Attribute::ADD_WIS, "WISAdd")
|
||||
};
|
||||
|
||||
|
||||
|
||||
const CTypeName Item::Grade::Grades[Grade::MAX_ITEM_GRADE] =
|
||||
{
|
||||
CTypeName(Grade::ETC, "ETC"),
|
||||
CTypeName(Grade::NORMAL, "NORMAL"),
|
||||
CTypeName(Grade::ENHANCED, "ENHANCED"),
|
||||
CTypeName(Grade::RARE, "RARE")
|
||||
};
|
||||
|
||||
|
||||
Item::CItemType::CItemType()
|
||||
{
|
||||
int nCount = 0;
|
||||
|
||||
for(nCount = 0; nCount < MAX_ARRAY_TYPE; ++nCount)
|
||||
{
|
||||
m_ItemTypes[nCount].reserve(MAX_ITEM_TYPE);
|
||||
}
|
||||
|
||||
m_ItemTypeNames[HELM] = CTypeName(HELM, "HELM");
|
||||
m_ItemTypeNames[SHIRT] = CTypeName(SHIRT, "SHIRT");
|
||||
m_ItemTypeNames[TUNIC] = CTypeName(TUNIC, "TUNIC");
|
||||
m_ItemTypeNames[ARMOUR] = CTypeName(ARMOUR, "ARMOUR");
|
||||
m_ItemTypeNames[GLOVE] = CTypeName(GLOVE, "GLOVE");
|
||||
m_ItemTypeNames[BOOTS] = CTypeName(BOOTS, "BOOTS");
|
||||
m_ItemTypeNames[SWORD] = CTypeName(SWORD, "ONEHANDED_SWORD");
|
||||
m_ItemTypeNames[BLUNT] = CTypeName(BLUNT, "ONEHANDED_BLUNT");
|
||||
m_ItemTypeNames[AXE] = CTypeName(AXE, "ONEHANDED_AXE");
|
||||
m_ItemTypeNames[TWOHANDED_BLUNT] = CTypeName(TWOHANDED_BLUNT, "TWOHANDED_BLUNT");
|
||||
m_ItemTypeNames[TWOHANDED_AXE] = CTypeName(TWOHANDED_AXE, "TWOHANDED_AXE");
|
||||
m_ItemTypeNames[TWOHANDED_SWORD] = CTypeName(TWOHANDED_SWORD, "TWOHANDED_SWORD");
|
||||
m_ItemTypeNames[BOW] = CTypeName(BOW, "BOW");
|
||||
m_ItemTypeNames[CROSSBOW] = CTypeName(CROSSBOW, "CROSSBOW");
|
||||
m_ItemTypeNames[STAFF] = CTypeName(STAFF, "STAFF");
|
||||
m_ItemTypeNames[DAGGER] = CTypeName(DAGGER, "DAGGER");
|
||||
m_ItemTypeNames[SHIELD] = CTypeName(SHIELD, "SHIELD");
|
||||
m_ItemTypeNames[CLOAK] = CTypeName(CLOAK, "CLOAK");
|
||||
m_ItemTypeNames[RING] = CTypeName(RING, "RING");
|
||||
m_ItemTypeNames[NECKLACE] = CTypeName(NECKLACE, "NECKLACE");
|
||||
|
||||
m_ItemTypeNames[POTION] = CTypeName(POTION, "POTION");
|
||||
m_ItemTypeNames[POISON] = CTypeName(POISON, "POISON");
|
||||
m_ItemTypeNames[TRAP] = CTypeName(TRAP, "TRAP");
|
||||
m_ItemTypeNames[SKILLBOOK] = CTypeName(SKILLBOOK, "SKILLBOOK");
|
||||
m_ItemTypeNames[GEM] = CTypeName(GEM, "GEM");
|
||||
m_ItemTypeNames[RUNE] = CTypeName(RUNE, "RUNE");
|
||||
m_ItemTypeNames[MATERIAL] = CTypeName(MATERIAL, "ORE");
|
||||
m_ItemTypeNames[AMMO] = CTypeName(AMMO, "AMMO");
|
||||
m_ItemTypeNames[ETC] = CTypeName(ETC, "ETC");
|
||||
|
||||
m_ItemTypeNames[HEAD] = CTypeName(HEAD, "HEAD");
|
||||
m_ItemTypeNames[BODY] = CTypeName(BODY, "BODY");
|
||||
m_ItemTypeNames[PROTECT_A] = CTypeName(PROTECT_A, "PROTECT_A");
|
||||
m_ItemTypeNames[PELVIS] = CTypeName(PELVIS, "PELVIS");
|
||||
m_ItemTypeNames[COM_BLUNT] = CTypeName(COM_BLUNT, "COM_BLUNT");
|
||||
m_ItemTypeNames[COM_SWORD] = CTypeName(COM_SWORD, "COM_SWORD");
|
||||
m_ItemTypeNames[OPP_HAMMER] = CTypeName(OPP_HAMMER, "OPP_HAMMER");
|
||||
m_ItemTypeNames[OPP_AXE] = CTypeName(OPP_AXE, "OPP_AXE");
|
||||
m_ItemTypeNames[OPP_SLUSHER] = CTypeName(OPP_SLUSHER, "OPP_SLUSHER");
|
||||
m_ItemTypeNames[OPP_TALON] = CTypeName(OPP_TALON, "OPP_TALON");
|
||||
m_ItemTypeNames[OPP_SYTHE] = CTypeName(OPP_SYTHE, "OPP_SYTHE");
|
||||
m_ItemTypeNames[SKILL_A_GUARD] = CTypeName(SKILL_A_GUARD, "SKILL_A_GUARD");
|
||||
m_ItemTypeNames[SKILL_A_ATTACK] = CTypeName(SKILL_A_ATTACK, "SKILL_A_ATTACK");
|
||||
m_ItemTypeNames[SKILL_A_GUN] = CTypeName(SKILL_A_GUN, "SKILL_A_GUN");
|
||||
m_ItemTypeNames[SKILL_A_KNIFE] = CTypeName(SKILL_A_KNIFE, "SKILL_A_KNIFE");
|
||||
m_ItemTypeNames[ACCESSORY] = CTypeName(ACCESSORY, "ACCESSORY");
|
||||
|
||||
m_ItemTypeNames[ARROW] = CTypeName(ARROW, "ARROW");
|
||||
m_ItemTypeNames[BOLT] = CTypeName(BOLT, "BOLT");
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(ARROW); m_ItemTypes[EQUIP_TYPE].push_back(BOLT);
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(HELM); m_ItemTypes[EQUIP_TYPE].push_back(SHIRT);
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(TUNIC); m_ItemTypes[EQUIP_TYPE].push_back(ARMOUR);
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(SHIELD); m_ItemTypes[EQUIP_TYPE].push_back(CLOAK);
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(GLOVE); m_ItemTypes[EQUIP_TYPE].push_back(BOOTS);
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(SWORD); m_ItemTypes[EQUIP_TYPE].push_back(BLUNT);
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(AXE); m_ItemTypes[EQUIP_TYPE].push_back(DAGGER);
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(STAFF); m_ItemTypes[EQUIP_TYPE].push_back(TWOHANDED_BLUNT);
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(TWOHANDED_AXE); m_ItemTypes[EQUIP_TYPE].push_back(TWOHANDED_SWORD);
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(BOW); m_ItemTypes[EQUIP_TYPE].push_back(CROSSBOW);
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(RING); m_ItemTypes[EQUIP_TYPE].push_back(NECKLACE);
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(HEAD); m_ItemTypes[EQUIP_TYPE].push_back(BODY);
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(PELVIS); m_ItemTypes[EQUIP_TYPE].push_back(PROTECT_A);
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(COM_BLUNT); m_ItemTypes[EQUIP_TYPE].push_back(COM_SWORD);
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(OPP_HAMMER); m_ItemTypes[EQUIP_TYPE].push_back(OPP_AXE);
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(OPP_SLUSHER); m_ItemTypes[EQUIP_TYPE].push_back(OPP_TALON);
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(OPP_SYTHE); m_ItemTypes[EQUIP_TYPE].push_back(SKILL_A_GUARD);
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(SKILL_A_ATTACK); m_ItemTypes[EQUIP_TYPE].push_back(SKILL_A_GUN);
|
||||
m_ItemTypes[EQUIP_TYPE].push_back(SKILL_A_KNIFE); m_ItemTypes[EQUIP_TYPE].push_back(ACCESSORY);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
m_ItemTypes[USE_ITEM_TYPE].push_back(POTION); m_ItemTypes[USE_ITEM_TYPE].push_back(POISON);
|
||||
m_ItemTypes[USE_ITEM_TYPE].push_back(TRAP); m_ItemTypes[USE_ITEM_TYPE].push_back(SKILLBOOK);
|
||||
m_ItemTypes[USE_ITEM_TYPE].push_back(AMMO);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>
|
||||
m_ItemTypes[WEAPON_TYPE].push_back(SWORD); m_ItemTypes[WEAPON_TYPE].push_back(BLUNT);
|
||||
m_ItemTypes[WEAPON_TYPE].push_back(AXE); m_ItemTypes[WEAPON_TYPE].push_back(DAGGER);
|
||||
m_ItemTypes[WEAPON_TYPE].push_back(STAFF); m_ItemTypes[WEAPON_TYPE].push_back(TWOHANDED_BLUNT);
|
||||
m_ItemTypes[WEAPON_TYPE].push_back(TWOHANDED_AXE); m_ItemTypes[WEAPON_TYPE].push_back(TWOHANDED_SWORD);
|
||||
m_ItemTypes[WEAPON_TYPE].push_back(BOW); m_ItemTypes[WEAPON_TYPE].push_back(CROSSBOW);
|
||||
m_ItemTypes[WEAPON_TYPE].push_back(COM_BLUNT); m_ItemTypes[WEAPON_TYPE].push_back(COM_SWORD);
|
||||
m_ItemTypes[WEAPON_TYPE].push_back(OPP_HAMMER); m_ItemTypes[WEAPON_TYPE].push_back(OPP_AXE);
|
||||
m_ItemTypes[WEAPON_TYPE].push_back(OPP_SLUSHER); m_ItemTypes[WEAPON_TYPE].push_back(OPP_TALON);
|
||||
m_ItemTypes[WEAPON_TYPE].push_back(OPP_SYTHE);
|
||||
|
||||
// <20><><EFBFBD>
|
||||
m_ItemTypes[ARMOUR_TYPE].push_back(HELM); m_ItemTypes[ARMOUR_TYPE].push_back(SHIRT);
|
||||
m_ItemTypes[ARMOUR_TYPE].push_back(TUNIC); m_ItemTypes[ARMOUR_TYPE].push_back(ARMOUR);
|
||||
m_ItemTypes[ARMOUR_TYPE].push_back(SHIELD); m_ItemTypes[ARMOUR_TYPE].push_back(CLOAK);
|
||||
m_ItemTypes[ARMOUR_TYPE].push_back(GLOVE); m_ItemTypes[ARMOUR_TYPE].push_back(BOOTS);
|
||||
m_ItemTypes[ARMOUR_TYPE].push_back(HEAD); m_ItemTypes[ARMOUR_TYPE].push_back(BODY);
|
||||
m_ItemTypes[ARMOUR_TYPE].push_back(PELVIS); m_ItemTypes[ARMOUR_TYPE].push_back(PROTECT_A);
|
||||
|
||||
// <20><>ų<EFBFBD><C5B3>
|
||||
m_ItemTypes[SKILL_ARM_TYPE].push_back(SKILL_A_GUARD); m_ItemTypes[SKILL_ARM_TYPE].push_back(SKILL_A_ATTACK);
|
||||
m_ItemTypes[SKILL_ARM_TYPE].push_back(SKILL_A_GUN); m_ItemTypes[SKILL_ARM_TYPE].push_back(SKILL_A_KNIFE);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
m_ItemTypes[TWOHANDED_TYPE].push_back(STAFF); m_ItemTypes[TWOHANDED_TYPE].push_back(TWOHANDED_BLUNT);
|
||||
m_ItemTypes[TWOHANDED_TYPE].push_back(TWOHANDED_AXE); m_ItemTypes[TWOHANDED_TYPE].push_back(TWOHANDED_SWORD);
|
||||
m_ItemTypes[TWOHANDED_TYPE].push_back(BOW); m_ItemTypes[TWOHANDED_TYPE].push_back(CROSSBOW);
|
||||
|
||||
for(nCount = 0; nCount < MAX_ARRAY_TYPE; ++nCount)
|
||||
{
|
||||
std::sort(m_ItemTypes[nCount].begin(), m_ItemTypes[nCount].end());
|
||||
}
|
||||
}
|
||||
|
||||
bool Item::CItemType::IsCorrectItemType(ArrayType itemType, unsigned char cEquipType)
|
||||
{
|
||||
return std::binary_search(m_ItemTypes[itemType].begin(),
|
||||
m_ItemTypes[itemType].end(), cEquipType);
|
||||
}
|
||||
|
||||
unsigned char Item::CItemType::ConvertRandomOptionType(unsigned char cEquipType)
|
||||
{
|
||||
if (true == IsCorrectItemType(CItemType::WEAPON_TYPE, cEquipType))
|
||||
{
|
||||
return RandomOption::WEAPON;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (cEquipType)
|
||||
{
|
||||
case CItemType::ARMOUR: case CItemType::BODY: return RandomOption::ARMOUR_BODY;
|
||||
case CItemType::HELM: case CItemType::HEAD: return RandomOption::HELM_HEAD;
|
||||
case CItemType::RING: case CItemType::ACCESSORY: return RandomOption::RING_ACCESSORY;
|
||||
case CItemType::NECKLACE: return RandomOption::NECKLACE;
|
||||
|
||||
case CItemType::SHIELD: case CItemType::SKILL_A_GUARD: return RandomOption::SKILL_A_GUARD;
|
||||
|
||||
case CItemType::SKILL_A_ATTACK:
|
||||
case CItemType::SKILL_A_GUN:
|
||||
case CItemType::SKILL_A_KNIFE:
|
||||
return RandomOption::SKILL_A_WEAPON;
|
||||
}
|
||||
}
|
||||
|
||||
return RandomOption::MAX_RANDOM_OPTION_TYPE;
|
||||
}
|
||||
|
||||
void Item::CItemType::SetEquipTypeFlags(ItemInfo& itemInfo)
|
||||
{
|
||||
switch (itemInfo.m_DetailData.m_cItemType)
|
||||
{
|
||||
case ARROW:
|
||||
case BOLT:
|
||||
itemInfo.m_DetailData.m_dwFlags |= Item::DetailData::STACKABLE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (IsCorrectItemType(Item::CItemType::WEAPON_TYPE, itemInfo.m_DetailData.m_cItemType))
|
||||
{
|
||||
itemInfo.m_DetailData.m_dwFlags |= DetailData::WEAPON;
|
||||
|
||||
if (IsCorrectItemType(Item::CItemType::TWOHANDED_TYPE, itemInfo.m_DetailData.m_cItemType))
|
||||
{
|
||||
itemInfo.m_DetailData.m_dwFlags |= DetailData::TWOHANDED;
|
||||
}
|
||||
|
||||
}
|
||||
else if (IsCorrectItemType(Item::CItemType::SKILL_ARM_TYPE, itemInfo.m_DetailData.m_cItemType))
|
||||
{
|
||||
itemInfo.m_DetailData.m_dwFlags |= DetailData::SKILL_ARM;
|
||||
}
|
||||
else if (IsCorrectItemType(Item::CItemType::ARMOUR_TYPE, itemInfo.m_DetailData.m_cItemType))
|
||||
{
|
||||
itemInfo.m_DetailData.m_dwFlags |= DetailData::ARMOUR;
|
||||
}
|
||||
|
||||
itemInfo.m_DetailData.m_dwFlags |= Item::DetailData::EQUIP;
|
||||
}
|
||||
|
||||
|
||||
void Item::CItemType::SetUseItemTypeFlags(ItemInfo& itemInfo)
|
||||
{
|
||||
switch(itemInfo.m_DetailData.m_cItemType)
|
||||
{
|
||||
case Item::CItemType::POTION:
|
||||
case Item::CItemType::POISON:
|
||||
case Item::CItemType::TRAP:
|
||||
itemInfo.m_DetailData.m_dwFlags |= Item::DetailData::QUICKSLOT_IN;
|
||||
break;
|
||||
}
|
||||
|
||||
if(itemInfo.m_DetailData.m_cMaxDurabilityOrStack > 1)
|
||||
{
|
||||
itemInfo.m_DetailData.m_dwFlags |= Item::DetailData::STACKABLE;
|
||||
}
|
||||
|
||||
itemInfo.m_DetailData.m_dwFlags |= Item::DetailData::USE_ITEM;
|
||||
}
|
||||
|
||||
|
||||
void Item::CItemType::SetEtcItemTypeFlags(ItemInfo& itemInfo)
|
||||
{
|
||||
if(itemInfo.m_DetailData.m_cMaxDurabilityOrStack > 1)
|
||||
{
|
||||
itemInfo.m_DetailData.m_dwFlags |= Item::DetailData::STACKABLE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
using namespace Item::Attribute;
|
||||
typedef Item::ItemAttribute Attr;
|
||||
|
||||
Attr GemInstallTable[15][7] =
|
||||
{
|
||||
// <09><><EFBFBD><EFBFBD> <09>Ƹ<EFBFBD> <09><><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD> 2+ <09>Ƹ<EFBFBD> 2+
|
||||
Attr(FIRE_ATTACK, 1), Attr(FIRE_RESISTANCE, 1), Attr(ADD_STR, 3), Attr(OFFENCE_REVISION ,3), Attr(MAX_DAMAGE, 2), Attr(OFFENCE_REVISION, 3), Attr(ADD_STR, 3), // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
Attr(POISON_ATTACK, 1), Attr(POISON_RESISTANCE, 1), Attr(ADD_CON, 3), Attr(HP_REGEN_AMOUNT, 3), Attr(MAX_HP, 10), Attr(ADD_CON, 3), Attr(MAX_HP, 1), // <20><><EFBFBD><EFBFBD><DEB6><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
Attr(COLD_ATTACK, 1), Attr(COLD_RESISTANCE, 1), Attr(ADD_INT, 3), Attr(MP_REGEN_AMOUNT, 3), Attr(MAX_MP, 10), Attr(MAX_MP, 1), Attr(ADD_INT, 3), // <20><><EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
Attr(LIGHTNING_ATTACK, 1), Attr(LIGHTNING_RESISTANCE, 1), Attr(ADD_WIS ,3), Attr(MAGIC_RESISTANCE, 3), Attr(CRITICAL_PERCENTAGE, 1), Attr(CRITICAL_PERCENTAGE, 2), Attr(MAGIC_RESISTANCE, 3), // <20><><EFBFBD>̾Ƹ<CCBE><C6B8><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
Attr(DRAIN_ATTACK, 1), Attr(DRAIN_RESISTANCE, 1), Attr(ADD_DEX ,3), Attr(DEFENCE_REVISION, 3), Attr(DEFENCE, 1), Attr(ADD_DEX, 3), Attr(DEFENCE_REVISION, 3), // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
Attr(FIRE_ATTACK, 2), Attr(FIRE_RESISTANCE, 2), Attr(ADD_STR, 6), Attr(OFFENCE_REVISION ,6), Attr(MAX_DAMAGE, 4), Attr(OFFENCE_REVISION, 6), Attr(ADD_STR, 6), // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
Attr(POISON_ATTACK, 2), Attr(POISON_RESISTANCE, 2), Attr(ADD_CON, 6), Attr(HP_REGEN_AMOUNT, 6), Attr(MAX_HP, 20), Attr(ADD_CON, 6), Attr(MAX_HP, 2), // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><DEB6><EFBFBD>
|
||||
Attr(COLD_ATTACK, 2), Attr(COLD_RESISTANCE, 2), Attr(ADD_INT, 6), Attr(MP_REGEN_AMOUNT, 6), Attr(MAX_MP, 20), Attr(MAX_MP, 2), Attr(ADD_INT, 6), // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD>
|
||||
Attr(LIGHTNING_ATTACK, 2), Attr(LIGHTNING_RESISTANCE, 2), Attr(ADD_WIS ,6), Attr(MAGIC_RESISTANCE, 6), Attr(CRITICAL_PERCENTAGE, 2), Attr(CRITICAL_PERCENTAGE, 4), Attr(MAGIC_RESISTANCE, 6), // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̾Ƹ<CCBE><C6B8><EFBFBD>
|
||||
Attr(DRAIN_ATTACK, 2), Attr(DRAIN_RESISTANCE, 2), Attr(ADD_DEX ,6), Attr(DEFENCE_REVISION, 6), Attr(DEFENCE, 2), Attr(ADD_DEX, 6), Attr(DEFENCE_REVISION, 6), // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
Attr(FIRE_ATTACK, 3), Attr(FIRE_RESISTANCE, 3), Attr(ADD_STR, 9), Attr(OFFENCE_REVISION ,9), Attr(MAX_DAMAGE, 6), Attr(OFFENCE_REVISION, 9), Attr(ADD_STR, 9), // <20><><EFBFBD><EFBFBD>
|
||||
Attr(POISON_ATTACK, 3), Attr(POISON_RESISTANCE, 3), Attr(ADD_CON, 9), Attr(HP_REGEN_AMOUNT, 9), Attr(MAX_HP, 30), Attr(ADD_CON, 9), Attr(MAX_HP, 3), // <20><><EFBFBD><EFBFBD><DEB6><EFBFBD>
|
||||
Attr(COLD_ATTACK, 3), Attr(COLD_RESISTANCE, 3), Attr(ADD_INT, 9), Attr(MP_REGEN_AMOUNT, 9), Attr(MAX_MP, 30), Attr(MAX_MP, 9), Attr(ADD_INT, 9), // <20><><EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD>
|
||||
Attr(LIGHTNING_ATTACK, 3), Attr(LIGHTNING_RESISTANCE, 3), Attr(ADD_WIS ,9), Attr(MAGIC_RESISTANCE, 9), Attr(CRITICAL_PERCENTAGE, 3), Attr(CRITICAL_PERCENTAGE, 6), Attr(MAGIC_RESISTANCE, 9), // <20><><EFBFBD>̾Ƹ<CCBE><C6B8><EFBFBD>
|
||||
Attr(DRAIN_ATTACK, 3), Attr(DRAIN_RESISTANCE, 3), Attr(ADD_DEX ,9), Attr(DEFENCE_REVISION, 9), Attr(DEFENCE, 3), Attr(ADD_DEX, 9), Attr(DEFENCE_REVISION, 9), // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
Item::ItemAttribute CItemType::GetInstallGemAttribute(unsigned char cGemType, unsigned char cEquipType, bool bPlus)
|
||||
{
|
||||
const unsigned char NON_EQUIP_TYPE_INDEX = 0xFF;
|
||||
|
||||
unsigned char cEquipTypeIndex = NON_EQUIP_TYPE_INDEX;
|
||||
|
||||
if(CItemType::GetInstance().IsCorrectItemType(WEAPON_TYPE, cEquipType))
|
||||
{
|
||||
cEquipType = 0 + (bPlus ? 5 : 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (cEquipType)
|
||||
{
|
||||
case ARMOUR: case BODY: cEquipType = 1 + (bPlus ? 5 : 0); break; // <20>Ƹ<EFBFBD>
|
||||
case HELM: case HEAD: cEquipType = 2; break; // <20><><EFBFBD><EFBFBD>
|
||||
case RING: case ACCESSORY: cEquipType = 3; break; // <20><><EFBFBD><EFBFBD>
|
||||
case NECKLACE: cEquipType = 4; break; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
|
||||
return (NON_EQUIP_TYPE_INDEX != cEquipType) ?
|
||||
GemInstallTable[cGemType][cEquipType] : Item::ItemAttribute();
|
||||
}
|
||||
|
||||
|
||||
unsigned short UpgradeTable[15][3] =
|
||||
{
|
||||
//Ȯ<><C8AE> <09>䱸 <20><><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
75, 2001, 3, // <20>Ǻ<EFBFBD>
|
||||
66, 2001, 6, // <20>Ǻ<EFBFBD>
|
||||
54, 2001, 9, // <20>Ǻ<EFBFBD>
|
||||
44, 2001, 12, // <20>Ǻ<EFBFBD>
|
||||
|
||||
35, 2002, 3, // <20>̽<EFBFBD><CCBD><EFBFBD>
|
||||
28, 2002, 6, // <20>̽<EFBFBD><CCBD><EFBFBD>
|
||||
23, 2002, 9, // <20>̽<EFBFBD><CCBD><EFBFBD>
|
||||
18, 2002, 12, // <20>̽<EFBFBD><CCBD><EFBFBD>
|
||||
|
||||
15, 2003, 3, // <20><><EFBFBD>ʹϿ<CDB4>
|
||||
13, 2003, 6, // <20><><EFBFBD>ʹϿ<CDB4>
|
||||
11, 2003, 9, // <20><><EFBFBD>ʹϿ<CDB4>
|
||||
9, 2003, 12, // <20><><EFBFBD>ʹϿ<CDB4>
|
||||
|
||||
8, 2004, 3, // <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD>
|
||||
7, 2004, 6, // <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD>
|
||||
6, 2004, 9 // <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD>
|
||||
};
|
||||
|
||||
unsigned char CItemType::GetUpgradeItemAttribute(unsigned char EquipType, Item::ItemAttribute& Attribute)
|
||||
{
|
||||
/* FIXME :
|
||||
if (IsWeapon(EquipType))
|
||||
{
|
||||
Attribute[0].m_nAttributeType = Attribute::MIN_DAMAGE; // <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȭ
|
||||
Attribute[0].m_nValue = 3;
|
||||
|
||||
Attribute[1].m_nAttributeType = Attribute::MAX_DAMAGE; // <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȭ
|
||||
Attribute[1].m_nValue = 3;
|
||||
|
||||
return 2;
|
||||
}
|
||||
else if (IsArmour(EquipType))
|
||||
{
|
||||
Attribute[0].m_nAttributeType = Attribute::DEFENCE; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȭ
|
||||
Attribute[0].m_nValue = 3;
|
||||
|
||||
return 1;
|
||||
}
|
||||
*/
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
271
GameTools/GLOBALSCRIPT/Item/ItemConstants.h
Normal file
271
GameTools/GLOBALSCRIPT/Item/ItemConstants.h
Normal file
@@ -0,0 +1,271 @@
|
||||
#ifndef _ITEM_CONSTANTS_H_
|
||||
#define _ITEM_CONSTANTS_H_
|
||||
|
||||
#include <vector>
|
||||
#include <Pattern/Singleton.h>
|
||||
#include "../Utility/TypeArray.h"
|
||||
|
||||
namespace Item
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
struct ItemInfo;
|
||||
struct ItemAttribute;
|
||||
|
||||
class CItemType : public CSingleton<CItemType>
|
||||
{
|
||||
public:
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8> ( 8bit )
|
||||
enum Type
|
||||
{
|
||||
// <20>ΰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
HELM = 0, SHIRT = 1,
|
||||
TUNIC = 2, ARMOUR = 3,
|
||||
GLOVE = 4, BOOTS = 5,
|
||||
SWORD = 6, BLUNT = 7,
|
||||
AXE = 8, TWOHANDED_BLUNT = 9,
|
||||
TWOHANDED_AXE = 10, TWOHANDED_SWORD = 11,
|
||||
BOW = 12, CROSSBOW = 13,
|
||||
STAFF = 14, DAGGER = 15,
|
||||
SHIELD = 16, CLOAK = 17,
|
||||
RING = 18, NECKLACE = 19,
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POTION = 20, POISON = 21,
|
||||
TRAP = 22, SKILLBOOK = 23, // <20><>âX
|
||||
|
||||
GEM = 24, RUNE = 25,
|
||||
MATERIAL = 26, AMMO = 27,
|
||||
ETC = 28, // <20><><EFBFBD><EFBFBD> X, <20><>â X
|
||||
|
||||
// <20><>ĭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
HEAD = 29, BODY = 30,
|
||||
PROTECT_A = 31, PELVIS = 32,
|
||||
COM_BLUNT = 33, COM_SWORD = 34,
|
||||
OPP_HAMMER = 35, OPP_AXE = 36,
|
||||
OPP_SLUSHER = 37, OPP_TALON = 38,
|
||||
OPP_SYTHE = 39, SKILL_A_GUARD = 40,
|
||||
SKILL_A_ATTACK = 41, SKILL_A_GUN = 42,
|
||||
SKILL_A_KNIFE = 43, ACCESSORY = 44,
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ARROW = 45, BOLT = 46,
|
||||
|
||||
MAX_ITEM_TYPE = 47
|
||||
};
|
||||
|
||||
enum ArrayType
|
||||
{
|
||||
EQUIP_TYPE = 0, USE_ITEM_TYPE = 1,
|
||||
WEAPON_TYPE = 2, ARMOUR_TYPE = 3,
|
||||
SKILL_ARM_TYPE = 4, TWOHANDED_TYPE = 5,
|
||||
MAX_ARRAY_TYPE = 6
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
|
||||
static Item::ItemAttribute GetInstallGemAttribute(unsigned char cGemType,
|
||||
unsigned char cEquipType, bool bPlus = false);
|
||||
static unsigned char GetUpgradeItemAttribute(unsigned char EquipType, Item::ItemAttribute& Attribute);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
|
||||
bool IsCorrectItemType(ArrayType itemType, unsigned char cEquipType);
|
||||
unsigned char ConvertRandomOptionType(unsigned char cEquipType);
|
||||
|
||||
void SetEquipTypeFlags(ItemInfo& itemInfo);
|
||||
void SetUseItemTypeFlags(ItemInfo& itemInfo);
|
||||
void SetEtcItemTypeFlags(ItemInfo& itemInfo);
|
||||
|
||||
CTypeName* GetItemTypeName() { return m_ItemTypeNames; }
|
||||
|
||||
private:
|
||||
|
||||
CItemType();
|
||||
|
||||
typedef std::vector<Type> ItemTypeArray;
|
||||
ItemTypeArray m_ItemTypes[MAX_ARRAY_TYPE];
|
||||
CTypeName m_ItemTypeNames[MAX_ITEM_TYPE];
|
||||
|
||||
static CItemType ms_this;
|
||||
};
|
||||
|
||||
|
||||
namespace Attribute
|
||||
{
|
||||
enum Type
|
||||
{
|
||||
// Creature<72><65> <20><><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD><DBBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
NONE = 0, CRITICAL_TYPE = 1,
|
||||
CRITICAL_PERCENTAGE = 2, MIN_DAMAGE = 3,
|
||||
MAX_DAMAGE = 4, DRC = 5,
|
||||
OFFENCE_REVISION = 6, DEFENCE = 7,
|
||||
DEFENCE_REVISION = 8, MAGIC_RESISTANCE = 9,
|
||||
BLOCKING_PERCENTAGE = 10, ATTACK_SPEED = 11,
|
||||
MOVE_SPEED = 12, ATTACK_RANGE = 13,
|
||||
RANGE_ATTACK_DISTANCE = 14, MAX_HP = 15,
|
||||
MAX_MP = 16, HP_REGEN_AMOUNT = 17,
|
||||
MP_REGEN_AMOUNT = 18, FIRE_ATTACK = 19,
|
||||
LIGHTNING_ATTACK = 20, COLD_ATTACK = 21,
|
||||
DRAIN_ATTACK = 22, POISON_ATTACK = 23,
|
||||
FIRE_RESISTANCE = 24, LIGHTNING_RESISTANCE = 25,
|
||||
COLD_RESISTANCE = 26, DRAIN_RESISTANCE = 27,
|
||||
POISON_RESISTANCE = 28, ADD_STR = 29,
|
||||
ADD_DEX = 30, ADD_CON = 31,
|
||||
ADD_INT = 32, ADD_WIS = 33,
|
||||
MAX_ATTRIBUTE_NUM = 34
|
||||
};
|
||||
|
||||
enum Trend
|
||||
{
|
||||
Aggressive = (1 << 0),
|
||||
Defensive = (1 << 1)
|
||||
};
|
||||
|
||||
extern const CTypeName Attributes[MAX_ATTRIBUTE_NUM];
|
||||
};
|
||||
|
||||
namespace EquipType
|
||||
{
|
||||
enum Type
|
||||
{
|
||||
Attach = 0, Detach = 1
|
||||
};
|
||||
|
||||
enum DoubleSwordType
|
||||
{
|
||||
SoloSword = 0,
|
||||
WarriorDoubleSword = 1,
|
||||
AssasinDoubleDagger = 2
|
||||
};
|
||||
};
|
||||
|
||||
namespace RandomOption
|
||||
{
|
||||
enum Type
|
||||
{
|
||||
WEAPON = 0, ARMOUR_BODY = 1,
|
||||
HELM_HEAD = 2, RING_ACCESSORY = 3,
|
||||
NECKLACE = 4, SKILL_A_GUARD = 5,
|
||||
SKILL_A_WEAPON = 6,
|
||||
|
||||
MAX_RANDOM_OPTION_TYPE = 7
|
||||
};
|
||||
|
||||
enum Attribute
|
||||
{
|
||||
MAX_DURABILITY = 0, NOW_DURABILITY = 1,
|
||||
MIN_DAMAGE = 2, MAX_DAMAGE = 3,
|
||||
OFFENCE_REVISION = 4, DEFENCE = 5,
|
||||
DEFENCE_REVISION = 6, MAGIC_RESISTANCE = 7,
|
||||
CRITICAL_PERCENTAGE = 8, BLOCKING_PERCENTAGE = 9,
|
||||
MAX_HP = 10, MAX_MP = 11,
|
||||
HP_REGEN_AMOUNT = 12, MP_REGEN_AMOUNT = 13,
|
||||
|
||||
MAX_RANDOM_OPTION_ATTRIBUTE = 14
|
||||
};
|
||||
|
||||
enum ValueRange
|
||||
{
|
||||
MIN_MINUS_FACTOR = 0, MIN_MULTIPLY_FACTOR = 1,
|
||||
MIN_DIVIDE_FACTOR = 2, MAX_MULTIPLY_FACTOR = 3,
|
||||
MAX_DIVIDE_FACTOR = 4, MAX_PLUS_FACTOR = 5,
|
||||
|
||||
MAX_RANDOM_OPTION_VALUE_RANGE = 6
|
||||
};
|
||||
};
|
||||
|
||||
namespace EquipmentPos
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><>ġ ( 8bit )
|
||||
|
||||
enum Type
|
||||
{
|
||||
// <20>ΰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ
|
||||
HELM = 0, SHIRT = 1,
|
||||
TUNIC = 2, ARMOUR = 3,
|
||||
GLOVE = 4, BOOTS = 5,
|
||||
NECKLACE = 6, RINGR = 7,
|
||||
RINGL = 8, SHIELD_HAND1 = 9,
|
||||
SHIELD_HAND2 = 10, WEAPON_HAND1 = 11,
|
||||
WEAPON_HAND2 = 12, CLOAK = 13,
|
||||
RIDE = 14,
|
||||
|
||||
// <20><>ĭ <20><><EFBFBD><EFBFBD> <20><>ġ
|
||||
HEAD = 0, BODY = 3,
|
||||
PROTECT_ARM = 4, PELVIS = 5,
|
||||
ACCESSORY1 = 6, ACCESSORY2 = 7,
|
||||
ACCESSORY3 = 8, SKILL_ARM = 9,
|
||||
WEAPON = 11,
|
||||
|
||||
MAX_EQUPMENT_POS = 16,
|
||||
|
||||
TEMP_ITEM_INDEX = 128
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
namespace StatusLimit
|
||||
{
|
||||
enum Type
|
||||
{
|
||||
NONE = 0, LEVEL = 1,
|
||||
STR = 2, DEX = 3,
|
||||
CON = 4, INT = 5,
|
||||
WIS = 6,
|
||||
|
||||
MAX_STATUS_LIMIT = 7
|
||||
};
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
namespace Grade
|
||||
{
|
||||
enum Type
|
||||
{
|
||||
ETC = 0,
|
||||
NORMAL = 1,
|
||||
ENHANCED = 2,
|
||||
RARE = 3,
|
||||
MAX_ITEM_GRADE = 4
|
||||
};
|
||||
|
||||
extern const CTypeName Grades[MAX_ITEM_GRADE];
|
||||
};
|
||||
|
||||
|
||||
namespace ExtraSpacePos
|
||||
{
|
||||
enum Type
|
||||
{
|
||||
UPGRADE_EQUIPMENT_POS = 0,
|
||||
UPGRADE_MATERIAL_POS = 1,
|
||||
HOLDITEM_POS = 2,
|
||||
MAX_EXTRA_SPACE_NUM = 3
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
namespace EtcItemID
|
||||
{
|
||||
enum Type
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
|
||||
GEM_START_ID = 1901,
|
||||
GEM_END_ID = 1915,
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
|
||||
MINERAL_START_ID = 2001,
|
||||
MINERAL_END_ID = 2003,
|
||||
|
||||
// ȸ<><C8B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
|
||||
POTION_START_ID = 3020,
|
||||
POTION_END_ID = 3124,
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
OBLIVION_STONE = 9914
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
465
GameTools/GLOBALSCRIPT/Item/ItemContainer.cpp
Normal file
465
GameTools/GLOBALSCRIPT/Item/ItemContainer.cpp
Normal file
@@ -0,0 +1,465 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include <Log/ServerLog.h>
|
||||
#include <Pattern/Singleton.h>
|
||||
#include <Utility/Math/Math.h>
|
||||
|
||||
#include "Item.h"
|
||||
#include "ItemFactory.h"
|
||||
#include "ItemContainer.h"
|
||||
|
||||
namespace Item
|
||||
{
|
||||
class CNullItem : public CItem, public CSingleton<CNullItem>
|
||||
{
|
||||
public:
|
||||
virtual ~CNullItem() { }
|
||||
private:
|
||||
|
||||
CNullItem(const ItemInfo& itemInfo) : CItem(0, itemInfo) { }
|
||||
|
||||
static ItemInfo ms_thisiteminfo;
|
||||
static CNullItem ms_this;
|
||||
};
|
||||
};
|
||||
|
||||
Item::ItemInfo Item::CNullItem::ms_thisiteminfo(0xFFFF);
|
||||
Item::CNullItem Item::CNullItem::ms_this(Item::CNullItem::ms_thisiteminfo);
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------------------
|
||||
// CItemContainer
|
||||
|
||||
Item::CItemContainer::CItemContainer()
|
||||
: m_dwCID(0), m_nMaxSize(0), m_lpNullItem(&CNullItem::GetInstance()),
|
||||
m_lppItems(NULL), m_usFlags(0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Item::CItemContainer::~CItemContainer()
|
||||
{
|
||||
Destroy();
|
||||
}
|
||||
|
||||
|
||||
bool Item::CItemContainer::Initialize(unsigned long dwCID, unsigned short nMaxSize)
|
||||
{
|
||||
m_dwCID = dwCID;
|
||||
m_nMaxSize = nMaxSize;
|
||||
|
||||
m_lppItems = new CItem*[m_nMaxSize];
|
||||
if(NULL != m_lppItems)
|
||||
{
|
||||
std::fill_n(m_lppItems, m_nMaxSize, reinterpret_cast<CItem*>(NULL));
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void Item::CItemContainer::Destroy()
|
||||
{
|
||||
if(NULL != m_lppItems)
|
||||
{
|
||||
CItem** lppItem = m_lppItems;
|
||||
CItem** lppItemPastEnd = m_lppItems + m_nMaxSize;
|
||||
|
||||
for(; lppItem != lppItemPastEnd; ++lppItem)
|
||||
{
|
||||
CItem* lpItem = *lppItem;
|
||||
if(NULL != lpItem && m_lpNullItem != lpItem)
|
||||
{
|
||||
delete lpItem;
|
||||
}
|
||||
}
|
||||
|
||||
delete [] m_lppItems;
|
||||
m_lppItems = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Item::CItemContainer::DumpItemInfo()
|
||||
{
|
||||
const int MIN_BUFFER = 32;
|
||||
const int MAX_BUFFER = 256;
|
||||
char szUID[MIN_BUFFER];
|
||||
char szBuffer[MAX_BUFFER];
|
||||
|
||||
CItem** lppItem = m_lppItems;
|
||||
CItem** lppItemPastEnd = m_lppItems + m_nMaxSize;
|
||||
|
||||
for(; lppItem != lppItemPastEnd; ++lppItem)
|
||||
{
|
||||
const CItem* lpItem = *lppItem;
|
||||
|
||||
if(NULL != lpItem && m_lpNullItem != lpItem)
|
||||
{
|
||||
Math::Convert::Hex64ToStr(szUID, lpItem->GetUID());
|
||||
|
||||
const ItemPos itemPos = lpItem->GetPos();
|
||||
const DetailData& detailData = lpItem->GetItemInfo().m_DetailData;
|
||||
|
||||
unsigned char cX, cY, cTab;
|
||||
itemPos.GetPos(cX, cY, cTab);
|
||||
|
||||
_snprintf(szBuffer, MAX_BUFFER, "CID:0x%08x <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>. UID: %s <20><><EFBFBD><EFBFBD>ID : %5d,"
|
||||
" <20><>ǥ:(%d - %2d,%2d,%2d), ũ<><C5A9>:(%2d, %2d), <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>):%2d",
|
||||
m_dwCID, szUID, lpItem->GetPrototypeID(), itemPos.m_cIndex, cX, cY, cTab,
|
||||
detailData.m_cXSize, detailData.m_cXSize, lpItem->GetNumOrDurability());
|
||||
|
||||
ERRLOG1(g_Log, "%s", szBuffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool Item::CItemContainer::SerializeOut(char* szItemBuffer_Out, unsigned long& dwBufferSize_InOut) const
|
||||
{
|
||||
CItem** lppItem = m_lppItems;
|
||||
CItem** lppItemPastEnd = m_lppItems + m_nMaxSize;
|
||||
|
||||
size_t nRemainBufferSize = static_cast<size_t>(dwBufferSize_InOut);
|
||||
size_t nWritten = 0;
|
||||
|
||||
for(; lppItem != lppItemPastEnd; ++lppItem)
|
||||
{
|
||||
CItem* lpItem = *lppItem;
|
||||
if(NULL != lpItem && m_lpNullItem != lpItem)
|
||||
{
|
||||
size_t nItemSize = nRemainBufferSize;
|
||||
if(!lpItem->SerializeOut(szItemBuffer_Out + nWritten, nItemSize))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
nWritten += nItemSize;
|
||||
nRemainBufferSize -= nItemSize;
|
||||
}
|
||||
}
|
||||
|
||||
dwBufferSize_InOut = static_cast<unsigned long>(nWritten);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------------------
|
||||
// CArrayContainer
|
||||
|
||||
Item::CArrayContainer::CArrayContainer()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Item::CArrayContainer::~CArrayContainer()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
bool Item::CArrayContainer::Initialize(unsigned long dwCID, unsigned char nXSize, unsigned char nYSize, unsigned char nTabNum)
|
||||
{
|
||||
m_dwCID = dwCID;
|
||||
m_nXSize = nXSize;
|
||||
m_nYSize = nYSize;
|
||||
m_nTabNum = nTabNum;
|
||||
|
||||
m_nSizePerTab = nXSize * nYSize;
|
||||
return CItemContainer::Initialize(dwCID, nXSize * nYSize * nTabNum);
|
||||
}
|
||||
|
||||
|
||||
Item::CItem* Item::CArrayContainer::GetItem(Item::ItemPos itemPos)
|
||||
{
|
||||
unsigned char cX, cY, cTab;
|
||||
itemPos.GetPos(cX, cY, cTab);
|
||||
|
||||
if(m_nXSize <= cX || m_nYSize <= cY || m_nTabNum <= cTab)
|
||||
{
|
||||
ERRLOG7(g_Log, "CID:0x%08x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20>ùٸ<C3B9><D9B8><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. X:%d/%d, Y:%d/%d, Tab:%d/%d",
|
||||
m_dwCID, cX, m_nXSize, cY, m_nYSize, cTab, m_nTabNum);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
CItem* lpItem = m_lppItems[m_nSizePerTab * cTab + m_nXSize * cY + cX];
|
||||
return (lpItem != m_lpNullItem) ? lpItem : NULL;
|
||||
}
|
||||
|
||||
|
||||
bool Item::CArrayContainer::SetItem(Item::ItemPos itemPos, Item::CItem* lpItem)
|
||||
{
|
||||
if(NULL == lpItem)
|
||||
{
|
||||
ERRLOG1(g_Log, "CID:0x%08x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NULL<4C>Դϴ<D4B4>.", m_dwCID);
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned char cX, cY, cTab;
|
||||
itemPos.GetPos(cX, cY, cTab);
|
||||
|
||||
unsigned char cXSize = lpItem->GetItemInfo().m_DetailData.m_cXSize;
|
||||
unsigned char cYSize = lpItem->GetItemInfo().m_DetailData.m_cYSize;
|
||||
|
||||
if(m_nXSize < static_cast<size_t>(cX + cXSize) ||
|
||||
m_nYSize < static_cast<size_t>(cY + cYSize) || m_nTabNum <= cTab)
|
||||
{
|
||||
ERRLOG9(g_Log, "CID:0x%08x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><> ũ<>Ⱑ <20>ùٸ<C3B9><D9B8><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. "
|
||||
"X:%d/%d, Y:%d/%d, Tab:%d/%d, Xũ<58><C5A9>:%d, Yũ<59><C5A9>:%d",
|
||||
m_dwCID, cX, m_nXSize, cY, m_nYSize, cTab, m_nTabNum, cXSize, cYSize);
|
||||
return false;
|
||||
}
|
||||
|
||||
CItem** lppItemYIndexPastEnd = m_lppItems + m_nSizePerTab * cTab + m_nXSize * (cY + cYSize);
|
||||
CItem **lppItemYIndex, **lppItemXIndex, **lppItemXIndexPastEnd;
|
||||
|
||||
for(lppItemYIndex = m_lppItems + m_nSizePerTab * cTab + cY * m_nXSize;
|
||||
lppItemYIndex != lppItemYIndexPastEnd; lppItemYIndex += m_nXSize)
|
||||
{
|
||||
lppItemXIndexPastEnd = lppItemYIndex + cX + cXSize;
|
||||
|
||||
for(lppItemXIndex = lppItemYIndex + cX;
|
||||
lppItemXIndex != lppItemXIndexPastEnd; ++lppItemXIndex)
|
||||
{
|
||||
if(0 != *lppItemXIndex)
|
||||
{
|
||||
ERRLOG4(g_Log, "CID:0x%08x (%d,%d,%d) <20>̹<EFBFBD> <20><> <20><><EFBFBD>ҿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>.",
|
||||
m_dwCID, cX, cY, cTab);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(lppItemYIndex = m_lppItems + m_nSizePerTab * cTab + cY * m_nXSize;
|
||||
lppItemYIndex != lppItemYIndexPastEnd; lppItemYIndex += m_nXSize)
|
||||
{
|
||||
lppItemXIndexPastEnd = lppItemYIndex + cX + cXSize;
|
||||
|
||||
for(lppItemXIndex = lppItemYIndex + cX;
|
||||
lppItemXIndex != lppItemXIndexPastEnd; ++lppItemXIndex)
|
||||
{
|
||||
*lppItemXIndex = m_lpNullItem;
|
||||
}
|
||||
}
|
||||
|
||||
m_lppItems[m_nSizePerTab * cTab + m_nXSize * cY + cX] = lpItem;
|
||||
lpItem->MoveItem(itemPos);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool Item::CArrayContainer::RemoveItem(Item::ItemPos itemPos)
|
||||
{
|
||||
unsigned char cX, cY, cTab;
|
||||
itemPos.GetPos(cX, cY, cTab);
|
||||
|
||||
if(m_nXSize <= cX || m_nYSize <= cY || m_nTabNum <= cTab)
|
||||
{
|
||||
ERRLOG7(g_Log, "CID:0x%08x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><> ũ<>Ⱑ <20>ùٸ<C3B9><D9B8><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. X:%d/%d, Y:%d/%d, Tab:%d/%d",
|
||||
m_dwCID, cX, m_nXSize, cY, m_nYSize, cTab, m_nTabNum);
|
||||
return false;
|
||||
}
|
||||
|
||||
CItem* lpItem = m_lppItems[m_nSizePerTab * cTab + m_nXSize * cY + cX];
|
||||
if(NULL == lpItem)
|
||||
{
|
||||
ERRLOG4(g_Log, "CID:0x%08x <20><> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. X:%d, Y:%d, Tab:%d", m_dwCID, cX, cY, cTab);
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned char cXSize = lpItem->GetItemInfo().m_DetailData.m_cXSize;
|
||||
unsigned char cYSize = lpItem->GetItemInfo().m_DetailData.m_cYSize;
|
||||
|
||||
if(m_nXSize < static_cast<size_t>(cX + cXSize) ||
|
||||
m_nYSize < static_cast<size_t>(cY + cYSize))
|
||||
{
|
||||
ERRLOG9(g_Log, "CID:0x%08x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><> ũ<>Ⱑ <20>ùٸ<C3B9><D9B8><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. "
|
||||
"X:%d/%d, Y:%d/%d, Tab:%d/%d, Xũ<58><C5A9>:%d, Yũ<59><C5A9>:%d",
|
||||
m_dwCID, cX, m_nXSize, cY, m_nYSize, cTab, m_nTabNum, cXSize, cYSize);
|
||||
return false;
|
||||
}
|
||||
|
||||
CItem** lppItemYIndexPastEnd = m_lppItems + m_nSizePerTab * cTab + m_nXSize * (cY + cYSize);
|
||||
CItem **lppItemYIndex, **lppItemXIndex, **lppItemXIndexPastEnd;
|
||||
|
||||
for(lppItemYIndex = m_lppItems + m_nSizePerTab * cTab + cY * m_nXSize;
|
||||
lppItemYIndex != lppItemYIndexPastEnd; lppItemYIndex += m_nXSize)
|
||||
{
|
||||
lppItemXIndexPastEnd = lppItemYIndex + cX + cXSize;
|
||||
|
||||
for(lppItemXIndex = lppItemYIndex + cX;
|
||||
lppItemXIndex != lppItemXIndexPastEnd; ++lppItemXIndex)
|
||||
{
|
||||
*lppItemXIndex = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void Item::CArrayContainer::DumpItemInfo()
|
||||
{
|
||||
const int MAX_LINE = 128;
|
||||
char szLine[MAX_LINE];
|
||||
|
||||
int nBufferPos = 0;
|
||||
|
||||
ERRLOG1(g_Log, "CID:0x%08x <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.", m_dwCID);
|
||||
|
||||
for(unsigned short nTab = 0; nTab < m_nTabNum; ++nTab)
|
||||
{
|
||||
const unsigned short usTabPos = m_nSizePerTab * nTab;
|
||||
|
||||
ERRLOG2(g_Log, "CID:0x%08x <20><> <20><> %d<><64> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.", m_dwCID, nTab);
|
||||
|
||||
for(unsigned short nHeight = 0; nHeight < m_nYSize; ++nHeight)
|
||||
{
|
||||
const unsigned short nHeightPos = m_nXSize * nHeight + usTabPos;
|
||||
|
||||
nBufferPos = _snprintf(szLine, MAX_LINE, "CID:0x%08x <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>. ", m_dwCID);
|
||||
|
||||
for(unsigned short nWidth = 0; nWidth < m_nXSize; ++nWidth)
|
||||
{
|
||||
const CItem* lpItem = m_lppItems[nHeightPos + nWidth];
|
||||
|
||||
nBufferPos += _snprintf(szLine + nBufferPos, MAX_LINE, " %5d ",
|
||||
((0 != lpItem) ? lpItem->GetPrototypeID() : 0));
|
||||
}
|
||||
|
||||
ERRLOG0(g_Log, szLine);
|
||||
}
|
||||
}
|
||||
|
||||
CItemContainer::DumpItemInfo();
|
||||
}
|
||||
|
||||
|
||||
bool Item::CArrayContainer::SerializeIn(const char* szItemBuffer_In, unsigned long dwBufferSize_In)
|
||||
{
|
||||
size_t nBufferSize = static_cast<size_t>(dwBufferSize_In);
|
||||
size_t nUsed = 0;
|
||||
|
||||
Item::CItemFactory& ItemFactory = CItemFactory::GetInstance();
|
||||
|
||||
while(nBufferSize > 0)
|
||||
{
|
||||
size_t nItemSize = nBufferSize;
|
||||
Item::CItem* lpItem = ItemFactory.CreateItem(szItemBuffer_In + nUsed, nItemSize);
|
||||
|
||||
if(NULL == lpItem)
|
||||
{
|
||||
nItemSize = reinterpret_cast<const Item::ItemData*>(szItemBuffer_In + nUsed)->m_cItemSize;
|
||||
ERRLOG1(g_Log, "CID:0x%08x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.", m_dwCID);
|
||||
}
|
||||
else if(!CArrayContainer::SetItem(lpItem->GetPos(), lpItem))
|
||||
{
|
||||
nItemSize = reinterpret_cast<const Item::ItemData*>(szItemBuffer_In + nUsed)->m_cItemSize;
|
||||
ERRLOG1(g_Log, "CID:0x%08x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⸦ <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.", m_dwCID);
|
||||
delete lpItem;
|
||||
}
|
||||
|
||||
nUsed += nItemSize;
|
||||
nBufferSize -= nItemSize;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------------------
|
||||
// CListContainer
|
||||
|
||||
Item::CListContainer::CListContainer()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
Item::CListContainer::~CListContainer()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
Item::CItem* Item::CListContainer::GetItem(Item::ItemPos itemPos)
|
||||
{
|
||||
if(itemPos.m_cIndex < m_nMaxSize)
|
||||
{
|
||||
CItem* lpItem = m_lppItems[itemPos.m_cIndex];
|
||||
return (lpItem != m_lpNullItem) ? lpItem : NULL;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
bool Item::CListContainer::SetItem(Item::ItemPos itemPos, Item::CItem* lpItem)
|
||||
{
|
||||
if(itemPos.m_cIndex < m_nMaxSize)
|
||||
{
|
||||
if(NULL == m_lppItems[itemPos.m_cIndex])
|
||||
{
|
||||
m_lppItems[itemPos.m_cIndex] = lpItem;
|
||||
lpItem->MoveItem(itemPos);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
ERRLOG1(g_Log, "CID:0x%08x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.", m_dwCID);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool Item::CListContainer::RemoveItem(Item::ItemPos itemPos)
|
||||
{
|
||||
if(itemPos.m_cIndex < m_nMaxSize)
|
||||
{
|
||||
if(NULL != m_lppItems[itemPos.m_cIndex])
|
||||
{
|
||||
m_lppItems[itemPos.m_cIndex] = NULL;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
ERRLOG1(g_Log, "CID:0x%08x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>.", m_dwCID);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool Item::CListContainer::SerializeIn(const char* szItemBuffer_In, unsigned long dwBufferSize_In)
|
||||
{
|
||||
size_t nBufferSize = static_cast<size_t>(dwBufferSize_In);
|
||||
size_t nUsed = 0;
|
||||
|
||||
Item::CItemFactory& ItemFactory = CItemFactory::GetInstance();
|
||||
|
||||
while(nBufferSize > 0)
|
||||
{
|
||||
size_t nItemSize = nBufferSize;
|
||||
Item::CItem* lpItem = ItemFactory.CreateItem(szItemBuffer_In + nUsed, nItemSize);
|
||||
|
||||
if(NULL == lpItem)
|
||||
{
|
||||
nItemSize = reinterpret_cast<const Item::ItemData*>(szItemBuffer_In + nUsed)->m_cItemSize;
|
||||
ERRLOG1(g_Log, "CID:0x%08x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.", m_dwCID);
|
||||
}
|
||||
else if(!CListContainer::SetItem(lpItem->GetPos(), lpItem))
|
||||
{
|
||||
nItemSize = reinterpret_cast<const Item::ItemData*>(szItemBuffer_In + nUsed)->m_cItemSize;
|
||||
ERRLOG1(g_Log, "CID:0x%08x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⸦ <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.", m_dwCID);
|
||||
delete lpItem;
|
||||
}
|
||||
|
||||
nUsed += nItemSize;
|
||||
nBufferSize -= nItemSize;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
82
GameTools/GLOBALSCRIPT/Item/ItemContainer.h
Normal file
82
GameTools/GLOBALSCRIPT/Item/ItemContainer.h
Normal file
@@ -0,0 +1,82 @@
|
||||
#ifndef _ITEM_CONTAINER_H_
|
||||
#define _ITEM_CONTAINER_H_
|
||||
|
||||
#include "ItemStructure.h"
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
namespace Item
|
||||
{
|
||||
class CItem;
|
||||
|
||||
class CItemContainer
|
||||
{
|
||||
public:
|
||||
|
||||
CItemContainer();
|
||||
virtual ~CItemContainer();
|
||||
|
||||
bool Initialize(unsigned long dwCID, unsigned short nMaxSize);
|
||||
|
||||
virtual CItem* GetItem(ItemPos itemPos) = 0;
|
||||
virtual bool SetItem(ItemPos itemPos, CItem* lpItem) = 0;
|
||||
virtual bool RemoveItem(ItemPos itemPos) = 0;
|
||||
|
||||
virtual bool SerializeOut(char* szItemBuffer_Out, unsigned long& dwBufferSize_InOut) const;
|
||||
virtual bool SerializeIn(const char* szItemBuffer_In, unsigned long dwBufferSize_InOut) = 0;
|
||||
|
||||
virtual void DumpItemInfo();
|
||||
|
||||
protected:
|
||||
|
||||
void Destroy();
|
||||
|
||||
CItem** m_lppItems;
|
||||
CItem* m_lpNullItem;
|
||||
|
||||
unsigned long m_dwCID;
|
||||
unsigned short m_nMaxSize;
|
||||
unsigned short m_usFlags;
|
||||
};
|
||||
|
||||
class CArrayContainer : public CItemContainer
|
||||
{
|
||||
public:
|
||||
|
||||
CArrayContainer();
|
||||
virtual ~CArrayContainer();
|
||||
|
||||
bool Initialize(unsigned long dwCID, unsigned char nXSize, unsigned char nYSize, unsigned char nTabNum);
|
||||
|
||||
virtual CItem* GetItem(ItemPos itemPos);
|
||||
virtual bool SetItem(ItemPos itemPos, CItem* lpItem);
|
||||
virtual bool RemoveItem(ItemPos itemPos);
|
||||
|
||||
virtual bool SerializeIn(const char* szItemBuffer_In, unsigned long dwBufferSize_In);
|
||||
|
||||
virtual void DumpItemInfo();
|
||||
|
||||
private:
|
||||
|
||||
unsigned char m_nXSize;
|
||||
unsigned char m_nYSize;
|
||||
unsigned char m_nTabNum;
|
||||
unsigned char m_nSizePerTab;
|
||||
};
|
||||
|
||||
|
||||
class CListContainer : public CItemContainer
|
||||
{
|
||||
public:
|
||||
|
||||
CListContainer();
|
||||
virtual ~CListContainer();
|
||||
|
||||
virtual CItem* GetItem(ItemPos itemPos);
|
||||
virtual bool SetItem(ItemPos itemPos, CItem* lpItem);
|
||||
virtual bool RemoveItem(ItemPos itemPos);
|
||||
|
||||
virtual bool SerializeIn(const char* szItemBuffer_In, unsigned long dwBufferSize_In);
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
263
GameTools/GLOBALSCRIPT/Item/ItemDataParser.cpp
Normal file
263
GameTools/GLOBALSCRIPT/Item/ItemDataParser.cpp
Normal file
@@ -0,0 +1,263 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include <Log/ServerLog.h>
|
||||
#include <Utility/Math/Math.h>
|
||||
|
||||
#include "ItemStructure.h"
|
||||
#include "ItemDataParser.h"
|
||||
|
||||
|
||||
using namespace Item;
|
||||
|
||||
bool ReadString(char* szBuffer_Out, int nBufferLen, const char* szValue_In)
|
||||
{
|
||||
int nLength = _snprintf(szBuffer_Out, nBufferLen - 1, "%s", szValue_In);
|
||||
|
||||
if(0 < nLength)
|
||||
{
|
||||
szBuffer_Out[nLength] = '\0';
|
||||
return true;
|
||||
}
|
||||
|
||||
szBuffer_Out[nBufferLen - 1] = '\0';
|
||||
ERRLOG1(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̰<EFBFBD> <20><><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. Data:%s", szValue_In);
|
||||
return false;
|
||||
}
|
||||
|
||||
inline bool ReadValue(unsigned char& cValue_Out, const char* szValue_In)
|
||||
{
|
||||
cValue_Out = static_cast<unsigned char>(atoi(szValue_In));
|
||||
return true;
|
||||
}
|
||||
|
||||
inline bool ReadValue(unsigned short& usValue_Out, const char* szValue_In)
|
||||
{
|
||||
usValue_Out = static_cast<unsigned short>(atoi(szValue_In));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
inline bool ReadValue(unsigned long& dwValue_Out, const char* szValue_In)
|
||||
{
|
||||
dwValue_Out = static_cast<unsigned long>(atol(szValue_In));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool ReadStringToTypeValue(unsigned char& cVaule_Out, const CTypeName* lpTypeArray,
|
||||
const unsigned char nMaxType, const char* szValue_In)
|
||||
{
|
||||
for (unsigned char nCount = 0; nCount < nMaxType; ++nCount)
|
||||
{
|
||||
if(0 == strcmp(szValue_In, lpTypeArray[nCount].GetTypeName()))
|
||||
{
|
||||
cVaule_Out = lpTypeArray[nCount].GetTypeValue();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// <20>⺻ <20><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>
|
||||
bool ReadID(Item::ItemInfo& itemInfo, const char* szValue)
|
||||
{
|
||||
itemInfo.m_usProtoTypeID = static_cast<unsigned short>(atoi(szValue));
|
||||
if(0 == itemInfo.m_usProtoTypeID || 0xFFFF == itemInfo.m_usProtoTypeID)
|
||||
{
|
||||
ERRLOG1(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID<49><44> <20>̻<EFBFBD><CCBB>մϴ<D5B4>. 0<>̳<EFBFBD> 0xFFFF<46><46> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. ID:0x%08x",
|
||||
itemInfo.m_usProtoTypeID);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ReadItemName(Item::ItemInfo& itemInfo, const char* szValue) { return ReadString(itemInfo.m_SpriteData.m_szName, SpriteData::MAX_NAME, szValue); }
|
||||
bool ReadFieldModelName(Item::ItemInfo& itemInfo, const char* szValue) { return ReadString(itemInfo.m_StringData.m_szFieldModelName, StringData::MAX_FIELD_MODEL_NAME, szValue); }
|
||||
bool ReadAttachedModelName(Item::ItemInfo& itemInfo, const char* szValue) { return ReadString(itemInfo.m_StringData.m_szEquipModelName, StringData::MAX_EQUIP_MODEL_NAME, szValue); }
|
||||
bool ReadSpriteDDS(Item::ItemInfo& itemInfo, const char* szValue) { return ReadString(itemInfo.m_SpriteData.m_szSpriteName, SpriteData::MAX_SPRITE_NAME, szValue); }
|
||||
bool ReadMinX(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_SpriteData.m_nSpriteMinX, szValue); }
|
||||
bool ReadMinY(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_SpriteData.m_nSpriteMinY, szValue); }
|
||||
bool ReadMaxX(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_SpriteData.m_nSpriteMaxX, szValue); }
|
||||
bool ReadMaxY(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_SpriteData.m_nSpriteMaxY, szValue); }
|
||||
bool ReadSizeX(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_DetailData.m_cXSize, szValue); }
|
||||
bool ReadSizeY(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_DetailData.m_cYSize, szValue); }
|
||||
bool ReadEffectSound(Item::ItemInfo& itemInfo, const char* szValue) { return ReadString(itemInfo.m_StringData.m_szEffectSoundName, StringData::MAX_EFFECT_SOUND_NAME, szValue); }
|
||||
|
||||
bool ReadItemLevel(Item::ItemInfo& itemInfo, const char* szValue)
|
||||
{
|
||||
unsigned char cGrade = 0;
|
||||
if(ReadStringToTypeValue(cGrade, Item::Grade::Grades, Item::Grade::MAX_ITEM_GRADE, szValue))
|
||||
{
|
||||
itemInfo.m_DetailData.m_ItemGrade = static_cast<Item::Grade::Type>(cGrade);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ReadItemType(Item::ItemInfo& itemInfo, const char* szValue)
|
||||
{
|
||||
return ReadStringToTypeValue(itemInfo.m_DetailData.m_cItemType,
|
||||
Item::CItemType::GetInstance().GetItemTypeName(), Item::CItemType::MAX_ITEM_TYPE, szValue);
|
||||
}
|
||||
|
||||
bool ReadPrice(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_DetailData.m_dwPrice, szValue); }
|
||||
bool ReadBlackPrice(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_DetailData.m_dwBlackPrice, szValue); }
|
||||
bool ReadOptionLimit(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_DetailData.m_cOptionLimit, szValue); }
|
||||
bool ReadDurability(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_DetailData.m_cDefaultDurabilityOrStack, szValue); }
|
||||
bool ReadMaxDurability(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_DetailData.m_cMaxDurabilityOrStack, szValue); }
|
||||
bool ReadClassLimit(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseLimit.m_dwClassLimit, szValue); }
|
||||
bool ReadSkillLimitType(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseLimit.m_nSkillType, szValue); }
|
||||
bool ReadSkillLimitLevel(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseLimit.m_cSkillLevel, szValue); }
|
||||
bool ReadLevelLimit(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseLimit.m_cLevelLimit, szValue); }
|
||||
bool ReadSTRLimit(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseLimit.m_nStatusLimit[StatusLimit::STR], szValue); }
|
||||
bool ReadDEXLimit(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseLimit.m_nStatusLimit[StatusLimit::DEX], szValue); }
|
||||
bool ReadCONLimit(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseLimit.m_nStatusLimit[StatusLimit::CON], szValue); }
|
||||
bool ReadINTLimit(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseLimit.m_nStatusLimit[StatusLimit::INT], szValue); }
|
||||
bool ReadWISLimit(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseLimit.m_nStatusLimit[StatusLimit::WIS], szValue); }
|
||||
|
||||
|
||||
|
||||
bool ItemDataParser::SetDefaultData(ParseDataArray& parseDataArray)
|
||||
{
|
||||
parseDataArray.reserve(30);
|
||||
|
||||
parseDataArray.push_back(ParseData("ID", ReadID));
|
||||
parseDataArray.push_back(ParseData("ItemName", ReadItemName));
|
||||
parseDataArray.push_back(ParseData("FieldModelName", ReadFieldModelName));
|
||||
parseDataArray.push_back(ParseData("AttachedModelName", ReadAttachedModelName));
|
||||
parseDataArray.push_back(ParseData("SpriteDDS", ReadSpriteDDS));
|
||||
parseDataArray.push_back(ParseData("MinX", ReadMinX));
|
||||
parseDataArray.push_back(ParseData("MinY", ReadMinY));
|
||||
parseDataArray.push_back(ParseData("MaxX", ReadMaxX));
|
||||
parseDataArray.push_back(ParseData("MaxY", ReadMaxY));
|
||||
parseDataArray.push_back(ParseData("SizeX", ReadSizeX));
|
||||
parseDataArray.push_back(ParseData("SizeY", ReadSizeY));
|
||||
parseDataArray.push_back(ParseData("EffectSound", ReadEffectSound));
|
||||
parseDataArray.push_back(ParseData("ItemLevel", ReadItemLevel));
|
||||
parseDataArray.push_back(ParseData("ItemType", ReadItemType));
|
||||
parseDataArray.push_back(ParseData("Price", ReadPrice));
|
||||
parseDataArray.push_back(ParseData("BlackPrice", ReadBlackPrice));
|
||||
parseDataArray.push_back(ParseData("OptionLimit", ReadOptionLimit));
|
||||
parseDataArray.push_back(ParseData("Durability", ReadDurability));
|
||||
parseDataArray.push_back(ParseData("MaxDurability", ReadMaxDurability));
|
||||
parseDataArray.push_back(ParseData("ClassLimit", ReadClassLimit));
|
||||
parseDataArray.push_back(ParseData("SkillLimitType", ReadSkillLimitType));
|
||||
parseDataArray.push_back(ParseData("SkillLimitLevel", ReadSkillLimitLevel));
|
||||
parseDataArray.push_back(ParseData("LevelLimit", ReadLevelLimit));
|
||||
parseDataArray.push_back(ParseData("STRLimit", ReadSTRLimit));
|
||||
parseDataArray.push_back(ParseData("DEXLimit", ReadDEXLimit));
|
||||
parseDataArray.push_back(ParseData("CONLimit", ReadCONLimit));
|
||||
parseDataArray.push_back(ParseData("INTLimit", ReadINTLimit));
|
||||
parseDataArray.push_back(ParseData("WISLimit", ReadWISLimit));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool ReadCriticalType(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::CRITICAL_TYPE], szValue); }
|
||||
bool ReadCriticalPercentage(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::CRITICAL_PERCENTAGE], szValue); }
|
||||
bool ReadMinDamage(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::MIN_DAMAGE], szValue); }
|
||||
bool ReadMaxDamage(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::MAX_DAMAGE], szValue); }
|
||||
bool ReadDRC(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::DRC], szValue); }
|
||||
bool ReadOffenceRevision(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::OFFENCE_REVISION], szValue); }
|
||||
bool ReadDefence(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::DEFENCE], szValue); }
|
||||
bool ReadDefenceRevision(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::DEFENCE_REVISION], szValue); }
|
||||
bool ReadResistance(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::MAGIC_RESISTANCE], szValue); }
|
||||
bool ReadBlockingPercentage(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::BLOCKING_PERCENTAGE], szValue); }
|
||||
bool ReadAttackSpeed(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::ATTACK_SPEED], szValue); }
|
||||
bool ReadMoveSpeed(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::MOVE_SPEED], szValue); }
|
||||
bool ReadAttackRange(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::ATTACK_RANGE], szValue); }
|
||||
bool ReadRangedAttack(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::RANGE_ATTACK_DISTANCE], szValue); }
|
||||
bool ReadHpMaxPlus(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::MAX_HP], szValue); }
|
||||
bool ReadMpMaxPlus(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::MAX_MP], szValue); }
|
||||
bool ReadHPRegen(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::HP_REGEN_AMOUNT], szValue); }
|
||||
bool ReadMPRegen(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::MP_REGEN_AMOUNT], szValue); }
|
||||
bool ReadFireAttribute(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::FIRE_ATTACK], szValue); }
|
||||
bool ReadLightingAttribute(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::LIGHTNING_ATTACK], szValue); }
|
||||
bool ReadColdAttribute(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::COLD_ATTACK], szValue); }
|
||||
bool ReadDrainAttribute(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::DRAIN_ATTACK], szValue); }
|
||||
bool ReadPoisonAttribute(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::POISON_ATTACK], szValue); }
|
||||
bool ReadFireResistance(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::FIRE_RESISTANCE], szValue); }
|
||||
bool ReadLightningResistance(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::LIGHTNING_RESISTANCE], szValue); }
|
||||
bool ReadColdResistance(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::COLD_RESISTANCE], szValue); }
|
||||
bool ReadDrainResistance(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::DRAIN_RESISTANCE], szValue); }
|
||||
bool ReadPoisonResistance(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::POISON_RESISTANCE], szValue); }
|
||||
bool ReadSTRAdd(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::ADD_STR], szValue); }
|
||||
bool ReadDEXAdd(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::ADD_DEX], szValue); }
|
||||
bool ReadCONAdd(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::ADD_CON], szValue); }
|
||||
bool ReadINTAdd(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::ADD_INT], szValue); }
|
||||
bool ReadWISAdd(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::ADD_WIS], szValue); }
|
||||
bool ReadMaterialValue(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_DetailData.m_cMaterialType, szValue); }
|
||||
bool ReadMaxSocketNum(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_DetailData.m_cMaxSocketNum, szValue); }
|
||||
|
||||
|
||||
bool ItemDataParser::SetEquipData(ParseDataArray& parseDataArray)
|
||||
{
|
||||
parseDataArray.push_back(ParseData("CriticalType", ReadCriticalType));
|
||||
parseDataArray.push_back(ParseData("CriticalPercentage", ReadCriticalPercentage));
|
||||
parseDataArray.push_back(ParseData("MinDamage", ReadMinDamage));
|
||||
parseDataArray.push_back(ParseData("MaxDamage", ReadMaxDamage));
|
||||
parseDataArray.push_back(ParseData("DRC", ReadDRC));
|
||||
parseDataArray.push_back(ParseData("OffenceRevision", ReadOffenceRevision));
|
||||
parseDataArray.push_back(ParseData("Defence", ReadDefence));
|
||||
parseDataArray.push_back(ParseData("DefenceRevision", ReadDefenceRevision));
|
||||
parseDataArray.push_back(ParseData("Resistance", ReadResistance));
|
||||
parseDataArray.push_back(ParseData("BlockingPercentage", ReadBlockingPercentage));
|
||||
parseDataArray.push_back(ParseData("AttackSpeed", ReadAttackSpeed));
|
||||
parseDataArray.push_back(ParseData("MoveSpeed", ReadMoveSpeed));
|
||||
parseDataArray.push_back(ParseData("AttackRange", ReadAttackRange));
|
||||
parseDataArray.push_back(ParseData("LongRangeAttack", ReadRangedAttack));
|
||||
parseDataArray.push_back(ParseData("HpMaxPlus", ReadHpMaxPlus));
|
||||
parseDataArray.push_back(ParseData("MpMaxPlus", ReadMpMaxPlus));
|
||||
parseDataArray.push_back(ParseData("HPRegen", ReadHPRegen));
|
||||
parseDataArray.push_back(ParseData("MPRegen", ReadMPRegen));
|
||||
parseDataArray.push_back(ParseData("FireAttribute", ReadFireAttribute));
|
||||
parseDataArray.push_back(ParseData("LightingAttribute", ReadLightingAttribute));
|
||||
parseDataArray.push_back(ParseData("ColdAttribute", ReadColdAttribute));
|
||||
parseDataArray.push_back(ParseData("DrainAttribute", ReadDrainAttribute));
|
||||
parseDataArray.push_back(ParseData("PoisonAttribute", ReadPoisonAttribute));
|
||||
parseDataArray.push_back(ParseData("FireResistance", ReadFireResistance));
|
||||
parseDataArray.push_back(ParseData("LightningResistance", ReadLightningResistance));
|
||||
parseDataArray.push_back(ParseData("ColdResistance", ReadColdResistance));
|
||||
parseDataArray.push_back(ParseData("DrainResistance", ReadDrainResistance));
|
||||
parseDataArray.push_back(ParseData("PoisonResistance", ReadPoisonResistance));
|
||||
parseDataArray.push_back(ParseData("STRAdd", ReadSTRAdd));
|
||||
parseDataArray.push_back(ParseData("DEXAdd", ReadDEXAdd));
|
||||
parseDataArray.push_back(ParseData("CONAdd", ReadCONAdd));
|
||||
parseDataArray.push_back(ParseData("INTAdd", ReadINTAdd));
|
||||
parseDataArray.push_back(ParseData("WISAdd", ReadWISAdd));
|
||||
|
||||
parseDataArray.push_back(ParseData("MaterialValue", ReadMaterialValue));
|
||||
parseDataArray.push_back(ParseData("MaxSocketNum", ReadMaxSocketNum));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool ReadSkill_ID(Item::ItemInfo& itemInfo, const char* szValue) { itemInfo.m_UseItemInfo.m_usSkill_ID = Math::Convert::StrToHex16(szValue); return true; }
|
||||
bool ReadSkill_Level(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseItemInfo.m_usSkill_LockCount, szValue); }
|
||||
bool ReadItemDescribe(Item::ItemInfo& itemInfo, const char* szValue) { return ReadString(itemInfo.m_StringData.m_szItemDescribe, Item::StringData::MAX_ITEM_DESCRIBE, szValue); }
|
||||
|
||||
bool ItemDataParser::SetUseItemData(ParseDataArray& parseDataArray)
|
||||
{
|
||||
parseDataArray.push_back(ParseData("CriticalType", ReadSkill_ID));
|
||||
parseDataArray.push_back(ParseData("CriticalPercentage", ReadSkill_Level));
|
||||
parseDataArray.push_back(ParseData("MinDamage", ReadItemDescribe));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool ItemDataParser::SetEtcItemData(ParseDataArray& parseDataArray)
|
||||
{
|
||||
parseDataArray.push_back(ParseData("CriticalType", ReadItemDescribe));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
34
GameTools/GLOBALSCRIPT/Item/ItemDataParser.h
Normal file
34
GameTools/GLOBALSCRIPT/Item/ItemDataParser.h
Normal file
@@ -0,0 +1,34 @@
|
||||
#ifndef _ITEM_DATA_PARSER_H_
|
||||
#define _ITEM_DATA_PARSER_H_
|
||||
|
||||
#include <vector>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
namespace Item
|
||||
{
|
||||
struct ItemInfo;
|
||||
};
|
||||
|
||||
namespace ItemDataParser
|
||||
{
|
||||
struct ParseData
|
||||
{
|
||||
typedef bool(*ParseFunc) (Item::ItemInfo& itemInfo, const char* szValue);
|
||||
|
||||
const char* m_szColumnName;
|
||||
ParseFunc m_fnParseFunc;
|
||||
|
||||
ParseData(const char* szColumnName, ParseFunc fnParseFunc)
|
||||
: m_szColumnName(szColumnName), m_fnParseFunc(fnParseFunc) { }
|
||||
};
|
||||
|
||||
typedef std::vector<ParseData> ParseDataArray;
|
||||
|
||||
bool SetDefaultData(ParseDataArray& parseDataArray);
|
||||
bool SetEquipData(ParseDataArray& parseDataArray);
|
||||
bool SetUseItemData(ParseDataArray& parseDataArray);
|
||||
bool SetEtcItemData(ParseDataArray& parseDataArray);
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
80
GameTools/GLOBALSCRIPT/Item/ItemFactory.cpp
Normal file
80
GameTools/GLOBALSCRIPT/Item/ItemFactory.cpp
Normal file
@@ -0,0 +1,80 @@
|
||||
#include "stdafx.h"
|
||||
#include "Item.h"
|
||||
#include "ItemMgr.h"
|
||||
#include "ItemFactory.h"
|
||||
|
||||
using namespace Item;
|
||||
|
||||
CItemFactory CItemFactory::ms_this;
|
||||
|
||||
CItemFactory::CItemFactory()
|
||||
: m_nCurrentUID(0)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
CItemFactory::~CItemFactory()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
CItem* CItemFactory::CreateItem(const ItemInfo& itemInfo)
|
||||
{
|
||||
unsigned long dwFlags = itemInfo.m_DetailData.m_dwFlags;
|
||||
|
||||
CItem* lpItem = NULL;
|
||||
|
||||
if(DetailData::EQUIP == (dwFlags & DetailData::EQUIP))
|
||||
{
|
||||
lpItem = new CEquipment(m_nCurrentUID++, itemInfo);
|
||||
}
|
||||
else if(DetailData::USE_ITEM == (dwFlags & DetailData::USE_ITEM))
|
||||
{
|
||||
lpItem = new CUseItem(m_nCurrentUID++, itemInfo);
|
||||
}
|
||||
else
|
||||
{
|
||||
lpItem = new CItem(m_nCurrentUID++, itemInfo);
|
||||
}
|
||||
|
||||
return lpItem;
|
||||
}
|
||||
|
||||
|
||||
CItem* CItemFactory::CreateItem(unsigned short usProtoTypeID)
|
||||
{
|
||||
const ItemInfo* lpItemInfo = CItemMgr::GetInstance().GetItemInfo(usProtoTypeID);
|
||||
|
||||
if(NULL != lpItemInfo)
|
||||
{
|
||||
return CreateItem(*lpItemInfo);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
CItem* CItemFactory::CreateItem(const char* lpSerializedItem_In, size_t& nParseLength_InOut)
|
||||
{
|
||||
const ItemData* lpItemData = reinterpret_cast<const ItemData*>(lpSerializedItem_In);
|
||||
|
||||
if(NULL != lpItemData)
|
||||
{
|
||||
CItem* lpItem = CreateItem(lpItemData->m_usProtoTypeID);
|
||||
|
||||
if(NULL != lpItem)
|
||||
{
|
||||
if(!lpItem->SerializeIn(lpSerializedItem_In, nParseLength_InOut))
|
||||
{
|
||||
delete lpItem;
|
||||
lpItem = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return lpItem;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
46
GameTools/GLOBALSCRIPT/Item/ItemFactory.h
Normal file
46
GameTools/GLOBALSCRIPT/Item/ItemFactory.h
Normal file
@@ -0,0 +1,46 @@
|
||||
#ifndef _ITEM_FACTORY_H_
|
||||
#define _ITEM_FACTORY_H_
|
||||
|
||||
#include <Pattern/Singleton.h>
|
||||
|
||||
namespace Item
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
class CItem;
|
||||
struct ItemInfo;
|
||||
|
||||
#pragma pack(8)
|
||||
|
||||
class CItemFactory : public CSingleton<CItemFactory>
|
||||
{
|
||||
public:
|
||||
|
||||
inline unsigned __int64 GetItemUID() { return m_nCurrentUID; }
|
||||
inline void SetItemUID(unsigned __int64 nCurrentUID) { m_nCurrentUID = nCurrentUID; }
|
||||
|
||||
// Desc : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28>⺻ <20>ɷ<EFBFBD>ġ)
|
||||
CItem* CreateItem(const ItemInfo& itemInfo);
|
||||
|
||||
// Desc : <20><><EFBFBD><EFBFBD> ID<49><44> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28>⺻ <20>ɷ<EFBFBD>ġ)
|
||||
CItem* CreateItem(unsigned short usProtoTypeID);
|
||||
|
||||
// Desc : SerializeOut<75><74> <20><><EFBFBD>۷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// In : <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
// Out : (Return)<29><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, nParseLength_InOut - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
CItem* CreateItem(const char* lpSerializedItem_In, size_t& nParseLength_InOut);
|
||||
|
||||
~CItemFactory();
|
||||
|
||||
private:
|
||||
|
||||
CItemFactory();
|
||||
|
||||
unsigned __int64 m_nCurrentUID;
|
||||
|
||||
static CItemFactory ms_this;
|
||||
};
|
||||
|
||||
#pragma pack()
|
||||
};
|
||||
|
||||
#endif
|
||||
380
GameTools/GLOBALSCRIPT/Item/ItemMgr.cpp
Normal file
380
GameTools/GLOBALSCRIPT/Item/ItemMgr.cpp
Normal file
@@ -0,0 +1,380 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include <Log/ServerLog.h>
|
||||
#include <Utility/Resource/EnsureCleanup.h>
|
||||
#include <Utility/Compress/MiniLZO/MiniLZOWrapper.h>
|
||||
#include <Network/XORCrypt/XORCrypt.h>
|
||||
#include "../Utility/TokenlizedFile.h"
|
||||
|
||||
#define DECODE_HEADER(Start_In, Length_In, PageVer_In, PageNum_In) CXORCrypt::GetInstance().DecodeHeader((Start_In),(Length_In),(PageVer_In),(PageNum_In))
|
||||
#define ENCODE_HEADER(Start_In, Length_In, PageVer_In, PageNum_In) CXORCrypt::GetInstance().EncodeHeader((Start_In),(Length_In),(PageVer_In),(PageNum_In))
|
||||
#define COMPRESS(In, In_len, Out, Out_len) CMiniLZOCompress::Compress((In), (In_len), (Out), (Out_len))
|
||||
#define DECOMPRESS(In, In_len, Out, Out_len) CMiniLZOCompress::Decompress((In), (In_len), (Out), (Out_len))
|
||||
|
||||
#include <memory>
|
||||
#include <algorithm>
|
||||
|
||||
#include "ItemMgr.h"
|
||||
#include "ItemDataParser.h"
|
||||
|
||||
|
||||
|
||||
#ifdef _TEST_SERVER_
|
||||
const char* Item::CItemMgr::ms_szItemScriptFileName = "TestItemScript.txt";
|
||||
#else
|
||||
const char* Item::CItemMgr::ms_szItemScriptFileName = "ItemScript.txt";
|
||||
#endif
|
||||
|
||||
|
||||
Item::CItemMgr Item::CItemMgr::ms_this;
|
||||
|
||||
using namespace Item;
|
||||
|
||||
|
||||
class CParseDelimitedData
|
||||
{
|
||||
public:
|
||||
|
||||
CParseDelimitedData(CTokenlizedFile& TokenlizedFile) : m_TokenlizedFile(TokenlizedFile) { }
|
||||
|
||||
bool operator() (ItemDataParser::ParseDataArray& ParserArray, Item::ItemInfo& itemInfo)
|
||||
{
|
||||
for (ItemDataParser::ParseDataArray::iterator itr = ParserArray.begin();
|
||||
itr != ParserArray.end(); ++itr)
|
||||
{
|
||||
const char* szValue = m_TokenlizedFile.GetStringValue(itr->m_szColumnName);
|
||||
|
||||
if (NULL == szValue)
|
||||
{
|
||||
ERRLOG2(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. Line:%d, ColumnName:%d",
|
||||
m_TokenlizedFile.GetCurrentLine(), itr->m_szColumnName);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!itr->m_fnParseFunc(itemInfo, szValue))
|
||||
{
|
||||
ERRLOG2(g_Log, "<EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20>ƴմϴ<D5B4>. Line:%d, ColumnName:%d",
|
||||
m_TokenlizedFile.GetCurrentLine(), itr->m_szColumnName);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
CTokenlizedFile& m_TokenlizedFile;
|
||||
};
|
||||
|
||||
|
||||
CItemMgr::CItemMgr()
|
||||
: m_ItemInfoArray(NULL), m_nItemNum(0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
CItemMgr::~CItemMgr()
|
||||
{
|
||||
DestoryItemInfo();
|
||||
}
|
||||
|
||||
void CItemMgr::DestoryItemInfo()
|
||||
{
|
||||
if (NULL != m_ItemInfoArray)
|
||||
{
|
||||
delete [] m_ItemInfoArray;
|
||||
m_ItemInfoArray = NULL;
|
||||
}
|
||||
|
||||
m_nItemNum = 0;
|
||||
}
|
||||
|
||||
bool CItemMgr::LoadItemProtoType(const char* szFileName)
|
||||
{
|
||||
DestoryItemInfo();
|
||||
|
||||
Item::ItemInfo itemInfo;
|
||||
CTokenlizedFile TokenlizedFile; // <20><>ü <20>Ҹ<EFBFBD><D2B8><EFBFBD>, <20>ڵ<EFBFBD> Close.
|
||||
|
||||
if (!TokenlizedFile.Open((NULL != szFileName) ? szFileName : ms_szItemScriptFileName))
|
||||
{
|
||||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!TokenlizedFile.ReadColumn())
|
||||
{
|
||||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ <20>÷<EFBFBD><C3B7><EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.");
|
||||
return false;
|
||||
}
|
||||
|
||||
ItemDataParser::ParseDataArray DefaultItemData;
|
||||
ItemDataParser::ParseDataArray EquipItemData;
|
||||
ItemDataParser::ParseDataArray UseItemData;
|
||||
ItemDataParser::ParseDataArray EtcItemData;
|
||||
|
||||
ItemDataParser::SetDefaultData(DefaultItemData);
|
||||
ItemDataParser::SetEquipData(EquipItemData);
|
||||
ItemDataParser::SetUseItemData(UseItemData);
|
||||
ItemDataParser::SetEtcItemData(EtcItemData);
|
||||
|
||||
Item::CItemType& ItemType = Item::CItemType::GetInstance();
|
||||
|
||||
std::vector<Item::ItemInfo> ItemInfoVector;
|
||||
|
||||
CParseDelimitedData ParseData(TokenlizedFile);
|
||||
|
||||
while(TokenlizedFile.ReadLine())
|
||||
{
|
||||
itemInfo.Initialize();
|
||||
|
||||
if (!ParseData(DefaultItemData, itemInfo)) { return false; }
|
||||
|
||||
if (ItemType.IsCorrectItemType(Item::CItemType::EQUIP_TYPE,
|
||||
itemInfo.m_DetailData.m_cItemType))
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
if (!ParseData(EquipItemData, itemInfo)) { return false; }
|
||||
ItemType.SetEquipTypeFlags(itemInfo);
|
||||
}
|
||||
else if (ItemType.IsCorrectItemType(Item::CItemType::USE_ITEM_TYPE,
|
||||
itemInfo.m_DetailData.m_cItemType))
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
if (!ParseData(UseItemData, itemInfo)) { return false; }
|
||||
ItemType.SetUseItemTypeFlags(itemInfo);
|
||||
}
|
||||
else
|
||||
{
|
||||
// <20><>Ÿ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
if (!ParseData(EtcItemData, itemInfo)) { return false; }
|
||||
ItemType.SetEtcItemTypeFlags(itemInfo);
|
||||
}
|
||||
|
||||
ItemInfoVector.push_back(itemInfo);
|
||||
}
|
||||
|
||||
if (!TokenlizedFile.IsEOF())
|
||||
{
|
||||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.");
|
||||
return false;
|
||||
}
|
||||
|
||||
std::sort(ItemInfoVector.begin(), ItemInfoVector.end());
|
||||
|
||||
for (std::vector<Item::ItemInfo>::iterator itr = ItemInfoVector.begin();
|
||||
itr != ItemInfoVector.end() - 1; ++itr)
|
||||
{
|
||||
if (itr->m_usProtoTypeID == (itr+1)->m_usProtoTypeID)
|
||||
{
|
||||
ERRLOG1(g_Log, "<EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ID<49><44> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD>ID:%d", itr->m_usProtoTypeID);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
m_nItemNum = ItemInfoVector.size();
|
||||
m_ItemInfoArray = new Item::ItemInfo[m_nItemNum];
|
||||
if (NULL == m_ItemInfoArray)
|
||||
{
|
||||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20><DEB8> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.");
|
||||
return false;
|
||||
}
|
||||
|
||||
std::copy(ItemInfoVector.begin(), ItemInfoVector.end(), m_ItemInfoArray);
|
||||
return true;
|
||||
}
|
||||
|
||||
const Item::ItemInfo* CItemMgr::GetItemInfo(unsigned short usProtoTypeID)
|
||||
{
|
||||
Item::ItemInfo* lpFirst = m_ItemInfoArray;
|
||||
Item::ItemInfo* lpLast = m_ItemInfoArray + m_nItemNum;
|
||||
Item::ItemInfo* lpMid = NULL;
|
||||
|
||||
size_t nCount = m_nItemNum;
|
||||
size_t nCount2 = 0;
|
||||
|
||||
for (; 0 < nCount; )
|
||||
{
|
||||
nCount2 = nCount / 2;
|
||||
lpMid = lpFirst + nCount2;
|
||||
|
||||
if (lpMid->m_usProtoTypeID < usProtoTypeID)
|
||||
{
|
||||
lpFirst = ++lpMid, nCount -= nCount2 + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
nCount = nCount2;
|
||||
}
|
||||
}
|
||||
|
||||
return (lpFirst != lpLast && !(usProtoTypeID < lpFirst->m_usProtoTypeID)) ? lpFirst : NULL;
|
||||
}
|
||||
|
||||
const Item::ItemInfo* CItemMgr::GetItemInfoFromItemName(const char* szItemName)
|
||||
{
|
||||
Item::ItemInfo* lpFirst = m_ItemInfoArray;
|
||||
Item::ItemInfo* lpLast = m_ItemInfoArray + m_nItemNum;
|
||||
|
||||
for (; lpFirst != lpLast; ++lpFirst)
|
||||
{
|
||||
if (0 == strcmp(lpFirst->m_SpriteData.m_szName, szItemName))
|
||||
{
|
||||
return lpFirst;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const Item::ItemInfo* CItemMgr::GetItemInfoFromEquipName(const char* szEquipName)
|
||||
{
|
||||
Item::ItemInfo* lpFirst = m_ItemInfoArray;
|
||||
Item::ItemInfo* lpLast = m_ItemInfoArray + m_nItemNum;
|
||||
|
||||
for (; lpFirst != lpLast; ++lpFirst)
|
||||
{
|
||||
if (0 == strcmp(lpFirst->m_StringData.m_szEquipModelName, szEquipName))
|
||||
{
|
||||
return lpFirst;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
const char* Item::CItemMgr::GetEquipName(const unsigned short usItemProtoTypeID)
|
||||
{
|
||||
const Item::ItemInfo* pItemInfo = GetItemInfo(usItemProtoTypeID);
|
||||
|
||||
if(pItemInfo)
|
||||
{
|
||||
return pItemInfo->m_StringData.m_szEquipModelName;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
const unsigned short CItemMgr::GetItemIDFromSkillID(const unsigned short usSkill_ID, const unsigned short unSkill_LockCount)
|
||||
{
|
||||
Item::ItemInfo* lpFirst = m_ItemInfoArray;
|
||||
Item::ItemInfo* lpLast = m_ItemInfoArray + m_nItemNum;
|
||||
|
||||
for (; lpFirst != lpLast; ++lpFirst)
|
||||
{
|
||||
if (lpFirst->m_UseItemInfo.m_usSkill_ID == usSkill_ID &&
|
||||
lpFirst->m_UseItemInfo.m_usSkill_LockCount == unSkill_LockCount)
|
||||
{
|
||||
return lpFirst->m_usProtoTypeID;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
bool CItemMgr::LoadItemProtoTypeBinary(const char* szFileNameBinary)
|
||||
{
|
||||
using namespace Item;
|
||||
|
||||
HANDLE hFile = CreateFile((0 == szFileNameBinary) ? ms_szItemScriptFileName : szFileNameBinary,
|
||||
GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
|
||||
if (hFile == INVALID_HANDLE_VALUE) { return false; }
|
||||
|
||||
CEnsureCloseHandle EnsureCloseHandle(hFile);
|
||||
|
||||
DWORD dwRead = 0;
|
||||
DWORD dwFileHighSize = 0;
|
||||
DWORD dwFileSize = GetFileSize(hFile, &dwFileHighSize);
|
||||
|
||||
char* lpAllocated = new char[dwFileSize];
|
||||
CEnsureDeleteArray<char> EnsureFileInfo(lpAllocated);
|
||||
|
||||
if (!ReadFile(hFile, lpAllocated, dwFileSize, &dwRead, NULL))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
DWORD dwHeaderSize = sizeof(DWORD) + *reinterpret_cast<DWORD*>(lpAllocated) + sizeof(DWORD);
|
||||
DWORD dwDecompressedSize = *reinterpret_cast<DWORD*>(lpAllocated + dwHeaderSize - sizeof(DWORD));
|
||||
|
||||
DestoryItemInfo();
|
||||
|
||||
m_nItemNum = dwDecompressedSize/sizeof(Item::ItemInfo);
|
||||
m_ItemInfoArray = new Item::ItemInfo[m_nItemNum];
|
||||
if (NULL == m_ItemInfoArray)
|
||||
{
|
||||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ҷ<EFBFBD><D2B7><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20><DEB8> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.");
|
||||
return false;
|
||||
}
|
||||
|
||||
DECOMPRESS(lpAllocated + dwHeaderSize, dwFileSize - dwHeaderSize,
|
||||
reinterpret_cast<char*>(m_ItemInfoArray), &dwDecompressedSize);
|
||||
|
||||
DECODE_HEADER(reinterpret_cast<char*>(m_ItemInfoArray), dwDecompressedSize, 0, 2);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool CItemMgr::SaveItemProtoTypeBinary(const char* szFileNameBinary, const char* szTrashFile)
|
||||
{
|
||||
HANDLE hFile = CreateFile((0 == szFileNameBinary) ? ms_szItemScriptFileName : szFileNameBinary,
|
||||
GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
|
||||
if (hFile == INVALID_HANDLE_VALUE) { return false; }
|
||||
|
||||
CEnsureCloseHandle EnsureCloseSaveHandle(hFile);
|
||||
|
||||
DWORD nItemInfoSize = static_cast<DWORD>(sizeof(Item::ItemInfo) * m_nItemNum);
|
||||
DWORD nCompressedInfoSize = nItemInfoSize;
|
||||
|
||||
char* lpItemInfo = new char[nItemInfoSize];
|
||||
char* lpCompressedInfo = new char[nItemInfoSize];
|
||||
|
||||
CEnsureDeleteArray<char> EnsureDeleteItemInfo(lpItemInfo);
|
||||
CEnsureDeleteArray<char> EnsureDeleteCompressedInfo(lpCompressedInfo);
|
||||
|
||||
if (0 == lpItemInfo || 0 == lpCompressedInfo)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
memcpy(lpItemInfo, m_ItemInfoArray, nItemInfoSize);
|
||||
ENCODE_HEADER(lpItemInfo, nItemInfoSize, 0, 2);
|
||||
COMPRESS(lpItemInfo, nItemInfoSize, lpCompressedInfo, &nCompressedInfoSize);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>) <20>ڷ<EFBFBD>
|
||||
HANDLE hTrashFile = CreateFile(szTrashFile, GENERIC_READ, FILE_SHARE_READ,
|
||||
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
|
||||
if (hTrashFile == INVALID_HANDLE_VALUE) { return false; }
|
||||
|
||||
CEnsureCloseHandle EnsureCloseTrashHandle(hTrashFile);
|
||||
|
||||
DWORD dwRead = 0;
|
||||
DWORD dwWritten = 0;
|
||||
DWORD dwFileHighSize = 0;
|
||||
DWORD dwTrashFileSize = GetFileSize(hTrashFile, &dwFileHighSize);
|
||||
|
||||
char* lpTrashFileData = new char[dwTrashFileSize];
|
||||
CEnsureDeleteArray<char> EnsureDeleteTrashFile(lpTrashFileData);
|
||||
|
||||
if (!ReadFile(hTrashFile, lpTrashFileData, dwTrashFileSize, &dwRead, NULL))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Trash File<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
WriteFile(hFile, &dwTrashFileSize, sizeof(DWORD), &dwWritten, 0); // Trash <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
WriteFile(hFile, lpTrashFileData, dwTrashFileSize, &dwWritten, 0); // Trash <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
// <20>ùٸ<C3B9> <20>ڷ<EFBFBD>
|
||||
WriteFile(hFile, &nItemInfoSize, sizeof(DWORD), &dwWritten, 0); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
WriteFile(hFile, lpCompressedInfo, nCompressedInfoSize, &dwWritten, 0); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return true;
|
||||
}
|
||||
|
||||
51
GameTools/GLOBALSCRIPT/Item/ItemMgr.h
Normal file
51
GameTools/GLOBALSCRIPT/Item/ItemMgr.h
Normal file
@@ -0,0 +1,51 @@
|
||||
#ifndef _CITEM_MGR_H_
|
||||
#define _CITEM_MGR_H_
|
||||
|
||||
#define g_ItemMgr Item::CItemMgr::GetInstance()
|
||||
#include <Pattern/Singleton.h>
|
||||
|
||||
#include <vector>
|
||||
#include "ItemStructure.h"
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// class : CItemMgr ( must use in single thread )
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE> <20>ε<EFBFBD><CEB5>ϰ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
|
||||
namespace Item
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
class CItem;
|
||||
|
||||
class CItemMgr : public CSingleton<CItemMgr>
|
||||
{
|
||||
public:
|
||||
|
||||
// <20><><EFBFBD>Ϸκ<CFB7><CEBA><EFBFBD> <20>а<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
bool LoadItemProtoType(const char* szFileName = 0);
|
||||
bool LoadItemProtoTypeBinary(const char* szFileNameBinary = 0);
|
||||
bool SaveItemProtoTypeBinary(const char* szFileNameBinary = 0, const char* szTrashFile = 0);
|
||||
|
||||
const Item::ItemInfo* GetItemInfo(unsigned short usProtoTypeID);
|
||||
const Item::ItemInfo* GetItemInfoFromItemName(const char* szItemName);
|
||||
const Item::ItemInfo* GetItemInfoFromEquipName(const char* szEquipName);
|
||||
|
||||
const char* GetEquipName(const unsigned short usItemProtoTypeID);
|
||||
const unsigned short GetItemIDFromSkillID(const unsigned short usSkill_ID, const unsigned short unSkill_LockCount);
|
||||
|
||||
~CItemMgr();
|
||||
|
||||
private:
|
||||
|
||||
CItemMgr();
|
||||
|
||||
void DestoryItemInfo();
|
||||
|
||||
static const char* ms_szItemScriptFileName;
|
||||
static CItemMgr ms_this;
|
||||
|
||||
size_t m_nItemNum;
|
||||
Item::ItemInfo* m_ItemInfoArray;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
69
GameTools/GLOBALSCRIPT/Item/ItemStructure.cpp
Normal file
69
GameTools/GLOBALSCRIPT/Item/ItemStructure.cpp
Normal file
@@ -0,0 +1,69 @@
|
||||
#include "stdafx.h"
|
||||
#include "ItemStructure.h"
|
||||
#include <Log/ServerLog.h>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
Item::SpriteData::SpriteData() { Initialize(); }
|
||||
|
||||
void Item::SpriteData::Initialize()
|
||||
{
|
||||
memset(m_szName, 0, MAX_NAME);
|
||||
memset(m_szSpriteName, 0, MAX_SPRITE_NAME);
|
||||
|
||||
m_nSpriteMinX = m_nSpriteMinY = m_nSpriteMaxX = m_nSpriteMaxY = 0;
|
||||
}
|
||||
|
||||
Item::StringData::StringData() { Initialize(); }
|
||||
void Item::StringData::Initialize()
|
||||
{
|
||||
memset(m_szFieldModelName, 0, MAX_FIELD_MODEL_NAME);
|
||||
memset(m_szEquipModelName, 0, MAX_EQUIP_MODEL_NAME);
|
||||
memset(m_szEffectSoundName, 0, MAX_EFFECT_SOUND_NAME);
|
||||
memset(m_szItemDescribe, 0, MAX_ITEM_DESCRIBE);
|
||||
}
|
||||
|
||||
Item::DetailData::DetailData() { Initialize(); }
|
||||
void Item::DetailData::Initialize()
|
||||
{
|
||||
m_ItemGrade = Item::Grade::ETC;
|
||||
m_dwFlags = m_dwPrice = m_dwBlackPrice = m_cOptionLimit = m_cItemType = m_cXSize = m_cYSize = m_cDefaultDurabilityOrStack =
|
||||
m_cMaxDurabilityOrStack = m_cMaterialType = m_cMaxSocketNum = 0;
|
||||
}
|
||||
|
||||
Item::EquipAttribute::EquipAttribute() { Initialize(); }
|
||||
void Item::EquipAttribute::Initialize()
|
||||
{
|
||||
m_nAttibuteNum = 0;
|
||||
std::fill_n(m_usAttributeValue, unsigned short(Item::Attribute::MAX_ATTRIBUTE_NUM), 0);
|
||||
}
|
||||
|
||||
Item::UseItemInfo::UseItemInfo() { Initialize(); }
|
||||
void Item::UseItemInfo::Initialize() { m_usSkill_ID = m_usSkill_LockCount = 0; }
|
||||
|
||||
|
||||
Item::UseLimit::UseLimit() { Initialize(); }
|
||||
void Item::UseLimit::Initialize()
|
||||
{
|
||||
std::fill_n(m_nStatusLimit, unsigned short(StatusLimit::MAX_STATUS_LIMIT), 0);
|
||||
m_dwClassLimit = m_nSkillType = m_cSkillLevel = m_cLevelLimit = 0;
|
||||
}
|
||||
|
||||
|
||||
Item::ItemInfo::ItemInfo() { Initialize(); }
|
||||
Item::ItemInfo::ItemInfo(unsigned short usProtoTypeID) { Initialize(); m_usProtoTypeID = usProtoTypeID; }
|
||||
|
||||
void Item::ItemInfo::Initialize()
|
||||
{
|
||||
m_usProtoTypeID = 0;
|
||||
|
||||
m_DetailData.Initialize();
|
||||
m_UseLimit.Initialize();
|
||||
m_SpriteData.Initialize();
|
||||
m_StringData.Initialize();
|
||||
|
||||
m_EquipAttribute.Initialize();
|
||||
m_UseItemInfo.Initialize();
|
||||
}
|
||||
|
||||
|
||||
238
GameTools/GLOBALSCRIPT/Item/ItemStructure.h
Normal file
238
GameTools/GLOBALSCRIPT/Item/ItemStructure.h
Normal file
@@ -0,0 +1,238 @@
|
||||
#ifndef _ITEM_STRUCTURE_H_
|
||||
#define _ITEM_STRUCTURE_H_
|
||||
|
||||
#include "ItemConstants.h"
|
||||
|
||||
namespace Item
|
||||
{
|
||||
#pragma pack(1)
|
||||
|
||||
// ------------------------------------------------------------------------------------------
|
||||
// UseLimit, ItemInfo <20><> <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20>ִ´<D6B4>.
|
||||
struct ItemPos
|
||||
{
|
||||
unsigned short m_cPos : 4; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Equip, Inven...) (0~15)
|
||||
unsigned short m_cIndex : 12; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> (0~4095)
|
||||
|
||||
ItemPos() : m_cPos(0), m_cIndex(0) { }
|
||||
ItemPos(unsigned char cPos, unsigned short usIndex) : m_cPos(cPos), m_cIndex(usIndex) { }
|
||||
|
||||
inline void SetPos(unsigned short wIndex) { m_cIndex = wIndex; }
|
||||
inline void SetPos(unsigned char cXIndex, unsigned char cYIndex, unsigned char cZIndex);
|
||||
inline void GetPos(unsigned char& cXIndex, unsigned char& cYIndex, unsigned char& cZIndex) const;
|
||||
|
||||
inline unsigned char GetXIndex(void) const { return (m_cIndex & 0x00F); }
|
||||
inline unsigned char GetYIndex(void) const { return (m_cIndex & 0x0F0) >> 4; }
|
||||
inline unsigned char GetZIndex(void) const { return (m_cIndex & 0xF00) >> 8; }
|
||||
|
||||
inline void SetXIndex(unsigned char cXIndex) { m_cIndex = (m_cIndex & 0xFF0) + cXIndex; }
|
||||
inline void SetYIndex(unsigned char cYIndex) { m_cIndex = (m_cIndex & 0xF0F) + (cYIndex << 4); }
|
||||
inline void SetZIndex(unsigned char cZIndex) { m_cIndex = (m_cIndex & 0x0FF) + (cZIndex << 8); }
|
||||
|
||||
inline bool operator == (const ItemPos& rhs) const { return (m_cPos == rhs.m_cPos && m_cIndex == rhs.m_cIndex); }
|
||||
};
|
||||
|
||||
inline void ItemPos::SetPos(unsigned char cXIndex, unsigned char cYIndex, unsigned char cZIndex)
|
||||
{
|
||||
m_cIndex = (cZIndex << 8) + (cYIndex << 4) + cXIndex;
|
||||
}
|
||||
|
||||
inline void ItemPos::GetPos(unsigned char& cXIndex, unsigned char& cYIndex, unsigned char& cZIndex) const
|
||||
{
|
||||
cXIndex = (m_cIndex & 0x00F);
|
||||
cYIndex = (m_cIndex & 0x0F0) >> 4;
|
||||
cZIndex = (m_cIndex & 0xF00) >> 8;
|
||||
}
|
||||
|
||||
|
||||
struct ItemData
|
||||
{
|
||||
unsigned __int64 m_dwUID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UID
|
||||
unsigned short m_usProtoTypeID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ID
|
||||
ItemPos m_ItemPos; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ
|
||||
unsigned char m_cItemSize; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü ũ<><C5A9>.
|
||||
unsigned char m_cNumOrDurability; // <20><><EFBFBD><EFBFBD> Ȥ<><C8A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
ItemData() { m_dwUID = m_usProtoTypeID = m_cNumOrDurability = 0; m_cItemSize = sizeof(ItemData); }
|
||||
};
|
||||
|
||||
struct ItemAttribute
|
||||
{
|
||||
unsigned short m_cType : 6; // <20>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD> 6bit (64<36><34><EFBFBD><EFBFBD>)
|
||||
short m_usValue : 10; // <20>Ӽ<EFBFBD> <20><> 10bit (-512~511<31><31><EFBFBD><EFBFBD>)
|
||||
|
||||
ItemAttribute() : m_cType(0), m_usValue(0) { }
|
||||
ItemAttribute(unsigned char cType, unsigned short usValue) : m_cType(cType), m_usValue(usValue) { }
|
||||
};
|
||||
|
||||
// <20>ڿ<EFBFBD> Socket<65><74><EFBFBD>빰<EFBFBD><EBB9B0> m_cSocketNum<75><6D>ŭ, Attribute<74><65> m_cDiffAttributeNum<75><6D>ŭ <20>ٴ´<D9B4>.
|
||||
struct EquipmentInfo
|
||||
{
|
||||
enum
|
||||
{
|
||||
MAX_MINSIZE_SOCKET_NUM = 6, // ũ<>Ⱑ 1by1<79><31> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
|
||||
MAX_MINSIZE_ATTRIBUTE_NUM = 6, // ũ<>Ⱑ 1by1<79><31> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20>Ӽ<EFBFBD> <20><>
|
||||
|
||||
MAX_SOCKET_NUM = 8, // <20>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
|
||||
MAX_ATTRIBUTE_NUM = 12, // <20>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20>Ӽ<EFBFBD> <20><>
|
||||
|
||||
MAX_SOCKET_AND_ATTRIBUTE_MINISIZE = (MAX_MINSIZE_SOCKET_NUM * sizeof(char) + MAX_MINSIZE_ATTRIBUTE_NUM * sizeof(ItemAttribute)),
|
||||
MAX_SOCKET_AND_ATTRIBUTE_SIZE = (MAX_SOCKET_NUM * sizeof(char) + MAX_ATTRIBUTE_NUM * sizeof(ItemAttribute))
|
||||
};
|
||||
|
||||
unsigned short m_cRuneSocket : 11; // <20><> <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ID
|
||||
short m_cDiffMaterialType : 5; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> + m_cDiffMaterialType = <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>(-16~15)
|
||||
|
||||
char m_cDiffMaxSocket : 5; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> + m_cDiffMaxSocket = <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> (-16~15)
|
||||
unsigned char m_cReserved : 3; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
|
||||
unsigned char m_cSocketNum : 4; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> (0~15)
|
||||
unsigned char m_cAttributeNum : 4; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD>ų<EFBFBD>, <20><>ġ<EFBFBD><C4A1> <20>ٸ<EFBFBD> <20>Ӽ<EFBFBD> <20><>(0~15<31><35>)
|
||||
|
||||
char m_cDiffMaxDurability; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۰<EFBFBD><DBB0><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
unsigned char m_cReserved2; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
|
||||
EquipmentInfo()
|
||||
{
|
||||
m_cRuneSocket = m_cDiffMaterialType = m_cDiffMaxSocket = m_cDiffMaxDurability =
|
||||
m_cSocketNum = m_cAttributeNum = m_cReserved = m_cReserved2 = 0;
|
||||
}
|
||||
};
|
||||
|
||||
#pragma pack()
|
||||
|
||||
const unsigned char MAX_ITEM_SIZE = sizeof(ItemData) +
|
||||
sizeof(EquipmentInfo) + EquipmentInfo::MAX_SOCKET_AND_ATTRIBUTE_SIZE;
|
||||
|
||||
|
||||
struct SpriteData
|
||||
{
|
||||
enum { MAX_NAME = 64, MAX_SPRITE_NAME = 32 };
|
||||
|
||||
char m_szName[MAX_NAME];
|
||||
char m_szSpriteName[MAX_SPRITE_NAME];
|
||||
|
||||
unsigned short m_nSpriteMinX;
|
||||
unsigned short m_nSpriteMinY;
|
||||
unsigned short m_nSpriteMaxX;
|
||||
unsigned short m_nSpriteMaxY;
|
||||
|
||||
SpriteData();
|
||||
void Initialize();
|
||||
};
|
||||
|
||||
|
||||
struct StringData
|
||||
{
|
||||
enum
|
||||
{
|
||||
MAX_FIELD_MODEL_NAME = 32, MAX_EQUIP_MODEL_NAME = 32,
|
||||
MAX_EFFECT_SOUND_NAME = 32, MAX_ITEM_DESCRIBE = 256
|
||||
};
|
||||
|
||||
char m_szFieldModelName[MAX_FIELD_MODEL_NAME];
|
||||
char m_szEquipModelName[MAX_EQUIP_MODEL_NAME];
|
||||
char m_szEffectSoundName[MAX_EFFECT_SOUND_NAME];
|
||||
char m_szItemDescribe[MAX_ITEM_DESCRIBE];
|
||||
|
||||
StringData();
|
||||
void Initialize();
|
||||
};
|
||||
|
||||
|
||||
struct DetailData
|
||||
{
|
||||
enum Flags
|
||||
{
|
||||
EQUIP = ( 1 << 0), // <20><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
USE_ITEM = ( 1 << 1), // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD><D6B4><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
QUICKSLOT_IN = ( 1 << 2), // <20><><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD> <20><><EFBFBD> <20><> <20>ִ<EFBFBD><D6B4><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
STACKABLE = ( 1 << 3), // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD><D6B4><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
TWOHANDED = ( 1 << 4), // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
WEAPON = ( 1 << 5), // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
ARMOUR = ( 1 << 6), // <20><><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SKILL_ARM = ( 1 << 7), // <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
unsigned char m_cItemType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>( namespace Type <20><><EFBFBD><EFBFBD> )
|
||||
unsigned char m_cXSize; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Xũ<58><C5A9>
|
||||
unsigned char m_cYSize; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Yũ<59><C5A9>
|
||||
unsigned char m_cOptionLimit;
|
||||
|
||||
unsigned char m_cDefaultDurabilityOrStack;
|
||||
unsigned char m_cMaxDurabilityOrStack;
|
||||
unsigned char m_cMaterialType;
|
||||
unsigned char m_cMaxSocketNum;
|
||||
|
||||
Grade::Type m_ItemGrade;
|
||||
unsigned long m_dwPrice;
|
||||
unsigned long m_dwBlackPrice;
|
||||
unsigned long m_dwFlags;
|
||||
|
||||
DetailData();
|
||||
void Initialize();
|
||||
};
|
||||
|
||||
struct EquipAttribute
|
||||
{
|
||||
unsigned short m_usAttributeValue[Item::Attribute::MAX_ATTRIBUTE_NUM];
|
||||
unsigned short m_nAttibuteNum;
|
||||
|
||||
EquipAttribute();
|
||||
void Initialize();
|
||||
};
|
||||
|
||||
struct UseItemInfo
|
||||
{
|
||||
unsigned short m_usSkill_ID;
|
||||
unsigned short m_usSkill_LockCount;
|
||||
|
||||
UseItemInfo();
|
||||
void Initialize();
|
||||
};
|
||||
|
||||
struct UseLimit
|
||||
{
|
||||
enum DeactivatedType
|
||||
{
|
||||
STATUS_LIMIT = ( 1 << 0),
|
||||
CLASS_LIMIT = ( 1 << 1),
|
||||
BROKEN_ITEM = ( 1 << 2)
|
||||
};
|
||||
|
||||
unsigned short m_nStatusLimit[StatusLimit::MAX_STATUS_LIMIT];
|
||||
unsigned short m_nSkillType; // <20><>ų <20><><EFBFBD><EFBFBD> Ÿ<><C5B8>
|
||||
unsigned char m_cSkillLevel; // <20><>ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned char m_cLevelLimit;
|
||||
unsigned long m_dwClassLimit;
|
||||
|
||||
UseLimit();
|
||||
void Initialize();
|
||||
};
|
||||
|
||||
#pragma pack(8)
|
||||
|
||||
struct ItemInfo
|
||||
{
|
||||
unsigned short m_usProtoTypeID;
|
||||
|
||||
DetailData m_DetailData;
|
||||
UseLimit m_UseLimit;
|
||||
SpriteData m_SpriteData;
|
||||
StringData m_StringData;
|
||||
|
||||
EquipAttribute m_EquipAttribute;
|
||||
UseItemInfo m_UseItemInfo;
|
||||
|
||||
ItemInfo();
|
||||
ItemInfo(unsigned short usPrototypeID);
|
||||
void Initialize();
|
||||
|
||||
inline bool operator < (ItemInfo& rhs)
|
||||
{ return (m_usProtoTypeID < rhs.m_usProtoTypeID); }
|
||||
};
|
||||
|
||||
#pragma pack()
|
||||
};
|
||||
|
||||
#endif
|
||||
337
GameTools/GLOBALSCRIPT/Log/ServerLog.h
Normal file
337
GameTools/GLOBALSCRIPT/Log/ServerLog.h
Normal file
@@ -0,0 +1,337 @@
|
||||
#ifndef _SERVER_LOG_DEFINE_H_
|
||||
#define _SERVER_LOG_DEFINE_H_
|
||||
|
||||
#pragma once
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
// <20>ҽ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
#define _SOURCE_LEVEL_MINIMUM 0 // Only output errors
|
||||
#define _SOURCE_LEVEL_RELEASE 1 // Normal release mode
|
||||
#define _SOURCE_LEVEL_BETA 2 // Normal beta season mode
|
||||
#define _SOURCE_LEVEL_DEBUG 3 // Output mostly
|
||||
#define _SOURCE_LEVEL_FULL 4 // Output fully
|
||||
#define _SOURCE_LEVEL_NONE 5 // DO NOT OUTPUT
|
||||
|
||||
#define _SRCFILE_LEVEL _SOURCE_LEVEL_NONE
|
||||
|
||||
/*
|
||||
#ifndef _SRCFILE_LEVEL // <20>α<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> Ȯ<><C8AE>
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define _SRCFILE_LEVEL _SOURCE_LEVEL_FULL
|
||||
#else
|
||||
#define _SRCFILE_LEVEL _SOURCE_LEVEL_FULL
|
||||
#endif
|
||||
|
||||
#endif
|
||||
*/
|
||||
|
||||
// Function, File, Line<6E><65> <20><><EFBFBD>ڷ<EFBFBD> <20>ѱ<EFBFBD><D1B1><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>.
|
||||
#define LOG_FFL __FUNCTION__, __FILE__, __LINE__
|
||||
|
||||
|
||||
#if (_SRCFILE_LEVEL == _SOURCE_LEVEL_MINIMUM)
|
||||
#define USE_LOG_SYSERR
|
||||
#define USE_LOG_ERROR
|
||||
#define USE_LOG_RULE
|
||||
#define USE_LOG_INFO
|
||||
#elif (_SRCFILE_LEVEL == _SOURCE_LEVEL_RELEASE)
|
||||
#define USE_LOG_SYSERR
|
||||
#define USE_LOG_ERROR
|
||||
#define USE_LOG_WARN
|
||||
#define USE_LOG_INFO
|
||||
#define USE_LOG_RULE
|
||||
#elif (_SRCFILE_LEVEL == _SOURCE_LEVEL_BETA)
|
||||
#define USE_LOG_SYSERR
|
||||
#define USE_LOG_ERROR
|
||||
#define USE_LOG_DEBUG
|
||||
#define USE_LOG_WARN
|
||||
#define USE_LOG_DUMP
|
||||
#define USE_LOG_INFO
|
||||
#define USE_LOG_RULE
|
||||
#define USE_LOG_STAT
|
||||
#elif (_SRCFILE_LEVEL == _SOURCE_LEVEL_DEBUG)
|
||||
#define USE_LOG_SYSERR
|
||||
#define USE_LOG_ERROR
|
||||
#define USE_LOG_DEBUG
|
||||
#define USE_LOG_WARN
|
||||
#define USE_LOG_DUMP
|
||||
#define USE_LOG_INFO
|
||||
#define USE_LOG_RULE
|
||||
#define USE_LOG_STAT
|
||||
#elif (_SRCFILE_LEVEL == _SOURCE_LEVEL_FULL)
|
||||
#define USE_LOG_NORMAL
|
||||
#define USE_LOG_DETAIL
|
||||
#define USE_LOG_SYSERR
|
||||
#define USE_LOG_ERROR
|
||||
#define USE_LOG_DEBUG
|
||||
#define USE_LOG_WARN
|
||||
#define USE_LOG_DUMP
|
||||
#define USE_LOG_INFO
|
||||
#define USE_LOG_RULE
|
||||
#define USE_LOG_STAT
|
||||
#elif (_SRCFILE_LEVEL == _SOURCE_LEVEL_NONE)
|
||||
|
||||
#undef USE_LOG_NORMAL
|
||||
#undef USE_LOG_DETAIL
|
||||
#undef USE_LOG_SYSERR
|
||||
#undef USE_LOG_ERROR
|
||||
#undef USE_LOG_DEBUG
|
||||
#undef USE_LOG_WARN
|
||||
#undef USE_LOG_DUMP
|
||||
#undef USE_LOG_INFO
|
||||
#undef USE_LOG_RULE
|
||||
#undef USE_LOG_STAT
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
enum LOG_TYPE
|
||||
{
|
||||
LOG_NORMAL, // <20>Ϲ<EFBFBD> <20>α<EFBFBD> (Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>)
|
||||
LOG_RULE, // <20> <20><><EFBFBD><EFBFBD> <20>α<EFBFBD>
|
||||
LOG_INFO, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>α<EFBFBD>
|
||||
|
||||
LOG_DETAIL, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>α<EFBFBD>
|
||||
LOG_SYSERR, // <20>ý<EFBFBD><C3BD><EFBFBD> <20>Լ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>α<EFBFBD>
|
||||
LOG_ERROR, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>α<EFBFBD>
|
||||
LOG_DEBUG, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>α<EFBFBD>
|
||||
LOG_WARN, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>α<EFBFBD>
|
||||
|
||||
MAX_LOG_TYPE
|
||||
};
|
||||
|
||||
// -------------------------------------------------------------------------------------
|
||||
// Simple Log Type
|
||||
|
||||
#ifdef USE_LOG_NORMAL
|
||||
#define NORLOG(x) x
|
||||
#define NORLOG0(LogInstance, szString) LogInstance.SimpleLog(LOG_NORMAL, szString)
|
||||
#define NORLOG1(LogInstance, szFormat, arg1) LogInstance.SimpleLog(LOG_NORMAL, szFormat, arg1)
|
||||
#define NORLOG2(LogInstance, szFormat, arg1, arg2) LogInstance.SimpleLog(LOG_NORMAL, szFormat, arg1, arg2)
|
||||
#define NORLOG3(LogInstance, szFormat, arg1, arg2, arg3) LogInstance.SimpleLog(LOG_NORMAL, szFormat, arg1, arg2, arg3)
|
||||
#define NORLOG4(LogInstance, szFormat, arg1, arg2, arg3, arg4) LogInstance.SimpleLog(LOG_NORMAL, szFormat, arg1, arg2, arg3, arg4)
|
||||
#define NORLOG5(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5) LogInstance.SimpleLog(LOG_NORMAL, szFormat, arg1, arg2, arg3, arg4, arg5)
|
||||
#define NORLOG6(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6) LogInstance.SimpleLog(LOG_NORMAL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6)
|
||||
#define NORLOG7(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7) LogInstance.SimpleLog(LOG_NORMAL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
|
||||
#define NORLOG8(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) LogInstance.SimpleLog(LOG_NORMAL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
|
||||
#define NORLOG9(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) LogInstance.SimpleLog(LOG_NORMAL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
|
||||
#else
|
||||
#define NORLOG(x) (void*)0
|
||||
#define NORLOG0(LogInstance, szString) (void*)0
|
||||
#define NORLOG1(LogInstance, szFormat, arg1) (void*)0
|
||||
#define NORLOG2(LogInstance, szFormat, arg1, arg2) (void*)0
|
||||
#define NORLOG3(LogInstance, szFormat, arg1, arg2, arg3) (void*)0
|
||||
#define NORLOG4(LogInstance, szFormat, arg1, arg2, arg3, arg4) (void*)0
|
||||
#define NORLOG5(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5) (void*)0
|
||||
#define NORLOG6(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6) (void*)0
|
||||
#define NORLOG7(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7) (void*)0
|
||||
#define NORLOG8(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) (void*)0
|
||||
#define NORLOG9(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) (void*)0
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef USE_LOG_INFO
|
||||
#define INFLOG(x) x
|
||||
#define INFLOG0(LogInstance, szString) LogInstance.SimpleLog(LOG_INFO, szString)
|
||||
#define INFLOG1(LogInstance, szFormat, arg1) LogInstance.SimpleLog(LOG_INFO, szFormat, arg1)
|
||||
#define INFLOG2(LogInstance, szFormat, arg1, arg2) LogInstance.SimpleLog(LOG_INFO, szFormat, arg1, arg2)
|
||||
#define INFLOG3(LogInstance, szFormat, arg1, arg2, arg3) LogInstance.SimpleLog(LOG_INFO, szFormat, arg1, arg2, arg3)
|
||||
#define INFLOG4(LogInstance, szFormat, arg1, arg2, arg3, arg4) LogInstance.SimpleLog(LOG_INFO, szFormat, arg1, arg2, arg3, arg4)
|
||||
#define INFLOG5(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5) LogInstance.SimpleLog(LOG_INFO, szFormat, arg1, arg2, arg3, arg4, arg5)
|
||||
#define INFLOG6(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6) LogInstance.SimpleLog(LOG_INFO, szFormat, arg1, arg2, arg3, arg4, arg5, arg6)
|
||||
#define INFLOG7(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7) LogInstance.SimpleLog(LOG_INFO, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
|
||||
#define INFLOG8(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) LogInstance.SimpleLog(LOG_INFO, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
|
||||
#define INFLOG9(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) LogInstance.SimpleLog(LOG_INFO, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
|
||||
#else
|
||||
#define INFLOG(x) (void*)0
|
||||
#define INFLOG0(LogInstance, szString) (void*)0
|
||||
#define INFLOG1(LogInstance, szFormat, arg1) (void*)0
|
||||
#define INFLOG2(LogInstance, szFormat, arg1, arg2) (void*)0
|
||||
#define INFLOG3(LogInstance, szFormat, arg1, arg2, arg3) (void*)0
|
||||
#define INFLOG4(LogInstance, szFormat, arg1, arg2, arg3, arg4) (void*)0
|
||||
#define INFLOG5(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5) (void*)0
|
||||
#define INFLOG6(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6) (void*)0
|
||||
#define INFLOG7(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7) (void*)0
|
||||
#define INFLOG8(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) (void*)0
|
||||
#define INFLOG9(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) (void*)0
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef USE_LOG_RULE
|
||||
#define RULLOG(x) x
|
||||
#define RULLOG0(LogInstance, szString) LogInstance.SimpleLog(LOG_RULE, szString)
|
||||
#define RULLOG1(LogInstance, szFormat, arg1) LogInstance.SimpleLog(LOG_RULE, szFormat, arg1)
|
||||
#define RULLOG2(LogInstance, szFormat, arg1, arg2) LogInstance.SimpleLog(LOG_RULE, szFormat, arg1, arg2)
|
||||
#define RULLOG3(LogInstance, szFormat, arg1, arg2, arg3) LogInstance.SimpleLog(LOG_RULE, szFormat, arg1, arg2, arg3)
|
||||
#define RULLOG4(LogInstance, szFormat, arg1, arg2, arg3, arg4) LogInstance.SimpleLog(LOG_RULE, szFormat, arg1, arg2, arg3, arg4)
|
||||
#define RULLOG5(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5) LogInstance.SimpleLog(LOG_RULE, szFormat, arg1, arg2, arg3, arg4, arg5)
|
||||
#define RULLOG6(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6) LogInstance.SimpleLog(LOG_RULE, szFormat, arg1, arg2, arg3, arg4, arg5, arg6)
|
||||
#define RULLOG7(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7) LogInstance.SimpleLog(LOG_RULE, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
|
||||
#define RULLOG8(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) LogInstance.SimpleLog(LOG_RULE, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
|
||||
#define RULLOG9(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) LogInstance.SimpleLog(LOG_RULE, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
|
||||
#else
|
||||
#define RULLOG(x) (void*)0
|
||||
#define RULLOG0(LogInstance, szString) (void*)0
|
||||
#define RULLOG1(LogInstance, szFormat, arg1) (void*)0
|
||||
#define RULLOG2(LogInstance, szFormat, arg1, arg2) (void*)0
|
||||
#define RULLOG3(LogInstance, szFormat, arg1, arg2, arg3) (void*)0
|
||||
#define RULLOG4(LogInstance, szFormat, arg1, arg2, arg3, arg4) (void*)0
|
||||
#define RULLOG5(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5) (void*)0
|
||||
#define RULLOG6(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6) (void*)0
|
||||
#define RULLOG7(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7) (void*)0
|
||||
#define RULLOG8(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) (void*)0
|
||||
#define RULLOG9(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) (void*)0
|
||||
#endif
|
||||
|
||||
|
||||
// -------------------------------------------------------------------------------------
|
||||
// Detail Log Type
|
||||
|
||||
|
||||
#ifdef USE_LOG_DETAIL
|
||||
#define DETLOG(x) x
|
||||
#define DETLOG0(LogInstance, szString) LogInstance.DetailLog(LOG_DETAIL, LOG_FFL, szString)
|
||||
#define DETLOG1(LogInstance, szFormat, arg1) LogInstance.DetailLog(LOG_DETAIL, LOG_FFL, szFormat, arg1)
|
||||
#define DETLOG2(LogInstance, szFormat, arg1, arg2) LogInstance.DetailLog(LOG_DETAIL, LOG_FFL, szFormat, arg1, arg2)
|
||||
#define DETLOG3(LogInstance, szFormat, arg1, arg2, arg3) LogInstance.DetailLog(LOG_DETAIL, LOG_FFL, szFormat, arg1, arg2, arg3)
|
||||
#define DETLOG4(LogInstance, szFormat, arg1, arg2, arg3, arg4) LogInstance.DetailLog(LOG_DETAIL, LOG_FFL, szFormat, arg1, arg2, arg3, arg4)
|
||||
#define DETLOG5(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5) LogInstance.DetailLog(LOG_DETAIL, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5)
|
||||
#define DETLOG6(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6) LogInstance.DetailLog(LOG_DETAIL, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6)
|
||||
#define DETLOG7(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7) LogInstance.DetailLog(LOG_DETAIL, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
|
||||
#define DETLOG8(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) LogInstance.DetailLog(LOG_DETAIL, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
|
||||
#define DETLOG9(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) LogInstance.DetailLog(LOG_DETAIL, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
|
||||
#define DETLOG10(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) LogInstance.DetailLog(LOG_DETAIL, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)
|
||||
#else
|
||||
#define DETLOG(x) (void*)0
|
||||
#define DETLOG0(LogInstance, szString) (void*)0
|
||||
#define DETLOG1(LogInstance, szFormat, arg1) (void*)0
|
||||
#define DETLOG2(LogInstance, szFormat, arg1, arg2) (void*)0
|
||||
#define DETLOG3(LogInstance, szFormat, arg1, arg2, arg3) (void*)0
|
||||
#define DETLOG4(LogInstance, szFormat, arg1, arg2, arg3, arg4) (void*)0
|
||||
#define DETLOG5(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5) (void*)0
|
||||
#define DETLOG6(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6) (void*)0
|
||||
#define DETLOG7(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7) (void*)0
|
||||
#define DETLOG8(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) (void*)0
|
||||
#define DETLOG9(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) (void*)0
|
||||
#define DETLOG10(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) (void*)0
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef USE_LOG_SYSERR
|
||||
#define SERLOG(x) x
|
||||
#define SERLOG0(LogInstance, szString) LogInstance.DetailLog(LOG_SYSERR, LOG_FFL, szString)
|
||||
#define SERLOG1(LogInstance, szFormat, arg1) LogInstance.DetailLog(LOG_SYSERR, LOG_FFL, szFormat, arg1)
|
||||
#define SERLOG2(LogInstance, szFormat, arg1, arg2) LogInstance.DetailLog(LOG_SYSERR, LOG_FFL, szFormat, arg1, arg2)
|
||||
#define SERLOG3(LogInstance, szFormat, arg1, arg2, arg3) LogInstance.DetailLog(LOG_SYSERR, LOG_FFL, szFormat, arg1, arg2, arg3)
|
||||
#define SERLOG4(LogInstance, szFormat, arg1, arg2, arg3, arg4) LogInstance.DetailLog(LOG_SYSERR, LOG_FFL, szFormat, arg1, arg2, arg3, arg4)
|
||||
#define SERLOG5(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5) LogInstance.DetailLog(LOG_SYSERR, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5)
|
||||
#define SERLOG6(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6) LogInstance.DetailLog(LOG_SYSERR, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6)
|
||||
#define SERLOG7(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7) LogInstance.DetailLog(LOG_SYSERR, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
|
||||
#define SERLOG8(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) LogInstance.DetailLog(LOG_SYSERR, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
|
||||
#define SERLOG9(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) LogInstance.DetailLog(LOG_SYSERR, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
|
||||
#else
|
||||
#define SERLOG(x) (void*)0
|
||||
#define SERLOG0(LogInstance, szString) (void*)0
|
||||
#define SERLOG1(LogInstance, szFormat, arg1) (void*)0
|
||||
#define SERLOG2(LogInstance, szFormat, arg1, arg2) (void*)0
|
||||
#define SERLOG3(LogInstance, szFormat, arg1, arg2, arg3) (void*)0
|
||||
#define SERLOG4(LogInstance, szFormat, arg1, arg2, arg3, arg4) (void*)0
|
||||
#define SERLOG5(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5) (void*)0
|
||||
#define SERLOG6(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6) (void*)0
|
||||
#define SERLOG7(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7) (void*)0
|
||||
#define SERLOG8(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) (void*)0
|
||||
#define SERLOG9(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) (void*)0
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef USE_LOG_ERROR
|
||||
#define ERRLOG(x) x
|
||||
#define ERRLOG0(LogInstance, szString) LogInstance.DetailLog(LOG_ERROR, LOG_FFL, szString)
|
||||
#define ERRLOG1(LogInstance, szFormat, arg1) LogInstance.DetailLog(LOG_ERROR, LOG_FFL, szFormat, arg1)
|
||||
#define ERRLOG2(LogInstance, szFormat, arg1, arg2) LogInstance.DetailLog(LOG_ERROR, LOG_FFL, szFormat, arg1, arg2)
|
||||
#define ERRLOG3(LogInstance, szFormat, arg1, arg2, arg3) LogInstance.DetailLog(LOG_ERROR, LOG_FFL, szFormat, arg1, arg2, arg3)
|
||||
#define ERRLOG4(LogInstance, szFormat, arg1, arg2, arg3, arg4) LogInstance.DetailLog(LOG_ERROR, LOG_FFL, szFormat, arg1, arg2, arg3, arg4)
|
||||
#define ERRLOG5(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5) LogInstance.DetailLog(LOG_ERROR, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5)
|
||||
#define ERRLOG6(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6) LogInstance.DetailLog(LOG_ERROR, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6)
|
||||
#define ERRLOG7(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7) LogInstance.DetailLog(LOG_ERROR, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
|
||||
#define ERRLOG8(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) LogInstance.DetailLog(LOG_ERROR, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
|
||||
#define ERRLOG9(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) LogInstance.DetailLog(LOG_ERROR, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
|
||||
#else
|
||||
#define ERRLOG(x) (void*)0
|
||||
#define ERRLOG0(LogInstance, szString) (void*)0
|
||||
#define ERRLOG1(LogInstance, szFormat, arg1) (void*)0
|
||||
#define ERRLOG2(LogInstance, szFormat, arg1, arg2) (void*)0
|
||||
#define ERRLOG3(LogInstance, szFormat, arg1, arg2, arg3) (void*)0
|
||||
#define ERRLOG4(LogInstance, szFormat, arg1, arg2, arg3, arg4) (void*)0
|
||||
#define ERRLOG5(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5) (void*)0
|
||||
#define ERRLOG6(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6) (void*)0
|
||||
#define ERRLOG7(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7) (void*)0
|
||||
#define ERRLOG8(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) (void*)0
|
||||
#define ERRLOG9(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) (void*)0
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef USE_LOG_DEBUG
|
||||
#define DBGLOG(x) x
|
||||
#define DBGLOG0(LogInstance, szString) LogInstance.DetailLog(LOG_DEBUG, LOG_FFL, szString)
|
||||
#define DBGLOG1(LogInstance, szFormat, arg1) LogInstance.DetailLog(LOG_DEBUG, LOG_FFL, szFormat, arg1)
|
||||
#define DBGLOG2(LogInstance, szFormat, arg1, arg2) LogInstance.DetailLog(LOG_DEBUG, LOG_FFL, szFormat, arg1, arg2)
|
||||
#define DBGLOG3(LogInstance, szFormat, arg1, arg2, arg3) LogInstance.DetailLog(LOG_DEBUG, LOG_FFL, szFormat, arg1, arg2, arg3)
|
||||
#define DBGLOG4(LogInstance, szFormat, arg1, arg2, arg3, arg4) LogInstance.DetailLog(LOG_DEBUG, LOG_FFL, szFormat, arg1, arg2, arg3, arg4)
|
||||
#define DBGLOG5(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5) LogInstance.DetailLog(LOG_DEBUG, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5)
|
||||
#define DBGLOG6(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6) LogInstance.DetailLog(LOG_DEBUG, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6)
|
||||
#define DBGLOG7(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7) LogInstance.DetailLog(LOG_DEBUG, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
|
||||
#define DBGLOG8(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) LogInstance.DetailLog(LOG_DEBUG, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
|
||||
#define DBGLOG9(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) LogInstance.DetailLog(LOG_DEBUG, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
|
||||
#else
|
||||
#define DBGLOG(x) (void*)0
|
||||
#define DBGLOG0(LogInstance, szString) (void*)0
|
||||
#define DBGLOG1(LogInstance, szFormat, arg1) (void*)0
|
||||
#define DBGLOG2(LogInstance, szFormat, arg1, arg2) (void*)0
|
||||
#define DBGLOG3(LogInstance, szFormat, arg1, arg2, arg3) (void*)0
|
||||
#define DBGLOG4(LogInstance, szFormat, arg1, arg2, arg3, arg4) (void*)0
|
||||
#define DBGLOG5(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5) (void*)0
|
||||
#define DBGLOG6(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6) (void*)0
|
||||
#define DBGLOG7(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7) (void*)0
|
||||
#define DBGLOG8(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) (void*)0
|
||||
#define DBGLOG9(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) (void*)0
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef USE_LOG_WARN
|
||||
#define WRNLOG(x) x
|
||||
#define WRNLOG0(LogInstance, szString) LogInstance.DetailLog(LOG_WARN, LOG_FFL, szString)
|
||||
#define WRNLOG1(LogInstance, szFormat, arg1) LogInstance.DetailLog(LOG_WARN, LOG_FFL, szFormat, arg1)
|
||||
#define WRNLOG2(LogInstance, szFormat, arg1, arg2) LogInstance.DetailLog(LOG_WARN, LOG_FFL, szFormat, arg1, arg2)
|
||||
#define WRNLOG3(LogInstance, szFormat, arg1, arg2, arg3) LogInstance.DetailLog(LOG_WARN, LOG_FFL, szFormat, arg1, arg2, arg3)
|
||||
#define WRNLOG4(LogInstance, szFormat, arg1, arg2, arg3, arg4) LogInstance.DetailLog(LOG_WARN, LOG_FFL, szFormat, arg1, arg2, arg3, arg4)
|
||||
#define WRNLOG5(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5) LogInstance.DetailLog(LOG_WARN, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5)
|
||||
#define WRNLOG6(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6) LogInstance.DetailLog(LOG_WARN, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6)
|
||||
#define WRNLOG7(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7) LogInstance.DetailLog(LOG_WARN, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
|
||||
#define WRNLOG8(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) LogInstance.DetailLog(LOG_WARN, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
|
||||
#define WRNLOG9(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) LogInstance.DetailLog(LOG_WARN, LOG_FFL, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
|
||||
#else
|
||||
#define WRNLOG(x) (void*)0
|
||||
#define WRNLOG0(LogInstance, szString) (void*)0
|
||||
#define WRNLOG1(LogInstance, szFormat, arg1) (void*)0
|
||||
#define WRNLOG2(LogInstance, szFormat, arg1, arg2) (void*)0
|
||||
#define WRNLOG3(LogInstance, szFormat, arg1, arg2, arg3) (void*)0
|
||||
#define WRNLOG4(LogInstance, szFormat, arg1, arg2, arg3, arg4) (void*)0
|
||||
#define WRNLOG5(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5) (void*)0
|
||||
#define WRNLOG6(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6) (void*)0
|
||||
#define WRNLOG7(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7) (void*)0
|
||||
#define WRNLOG8(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) (void*)0
|
||||
#define WRNLOG9(LogInstance, szFormat, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) (void*)0
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(__linux__) || defined(i386) || defined(_WIN32)
|
||||
#define VA_START(Argument, pFormat) va_start(Argument, pFormat)
|
||||
#else
|
||||
#define VA_START(Argument, pFormat) va_start(Argument)
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
4903
GameTools/GLOBALSCRIPT/Network/ClientSocket/ClientSocket.cpp
Normal file
4903
GameTools/GLOBALSCRIPT/Network/ClientSocket/ClientSocket.cpp
Normal file
File diff suppressed because it is too large
Load Diff
367
GameTools/GLOBALSCRIPT/Network/ClientSocket/ClientSocket.h
Normal file
367
GameTools/GLOBALSCRIPT/Network/ClientSocket/ClientSocket.h
Normal file
@@ -0,0 +1,367 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ClientSocket Class
|
||||
//
|
||||
// Last Update : 2003-01-10
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#ifndef _ClientSocket
|
||||
#define _ClientSocket
|
||||
|
||||
#include "NetBase.h"
|
||||
#include "UDPList/UDPList.h" // Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>Ʈ
|
||||
#include <Network/Packet/PacketStruct/FriendPacket.h>
|
||||
#include <Network/Packet/PacketStruct/CharItemPacket.h>
|
||||
#include <Network/Packet/PacketStruct/CharStatusPacket.h>
|
||||
#include <Network/Packet/PacketStruct/CharAttackPacket.h>
|
||||
#include <Network/Packet/PacketStruct/CharCommunityPacket.h>
|
||||
|
||||
#include <DB/DBDefine.h>
|
||||
|
||||
const unsigned long WM_CLIENT_SOCKET = RegisterWindowMessage("WM_CLIENT_SOCKET");
|
||||
const unsigned long WM_UDP_SOCKET = RegisterWindowMessage("WM_UDP_SOCKET");
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
class ClientSocket : public NetBase
|
||||
{
|
||||
public:
|
||||
|
||||
enum CO_SRV { CO_GAME = 0, CO_AUTH = 1 };
|
||||
enum ListType { ListType_Client = 1, ListType_Party = 2 };
|
||||
enum ListOper { ListOper_Update = 1, ListOper_Insert = 2 };
|
||||
|
||||
enum BindPos { Bind_SavePos = 1 };
|
||||
enum Hand { Hand_Weapon1 = 1, Hand_Weapon2 = 2 };
|
||||
enum FameInfoType { FameInfoType_Fame = 1, FameInfoType_Merits = 2 };
|
||||
enum Require { Require_HPInfo = 0, Require_UDPInfo = 1, Require_Shape = 2 };
|
||||
|
||||
enum ChatType
|
||||
{
|
||||
ChatType_Normal = 0, ChatType_Party = 1, ChatType_Friend = 2,
|
||||
ChatType_Guild = 3, ChatType_Notify = 4, ChatType_ClientLog = 5,
|
||||
ChatType_Stall = 6
|
||||
};
|
||||
|
||||
enum CellOper
|
||||
{
|
||||
CellOper_Move = 0, CellOper_Login = 1,
|
||||
CellOper_Logout = 1, CellOper_Respawn = 2
|
||||
};
|
||||
|
||||
enum ItemPos
|
||||
{
|
||||
ItemPos_None = 0, ItemPos_Equip = 1, ItemPos_Inven = 2,
|
||||
ItemPos_QSlot = 3, ItemPos_SSlot = 4, ItemPos_Temp = 6,
|
||||
ItemPos_Upgrade = 7, ItemPos_Exchange = 8, ItemPos_Deposit = 9,
|
||||
ItemPos_Stall = 10
|
||||
};
|
||||
|
||||
enum PartyCmd
|
||||
{
|
||||
PartyCmd_Invite = 0, PartyCmd_Accept = 1, PartyCmd_Refuse = 2,
|
||||
PartyCmd_Banish = 3, PartyCmd_Secession = 4, PartyCmd_Transfer = 5,
|
||||
PartyCmd_Destroy = 6, PartyCmd_Login = 7, PartyCmd_Logout = 8,
|
||||
PartyCmd_Delete = 9, PartyCmd_ReLogin = 10, PartyCmd_FindParty = 11,
|
||||
PartyCmd_FindMember = 12
|
||||
};
|
||||
|
||||
enum StateType
|
||||
{
|
||||
StateType_STR = 1, StateType_DEX = 2, StateType_CON = 3,
|
||||
StateType_INT = 4, StateType_WIS = 5
|
||||
};
|
||||
|
||||
enum Judge
|
||||
{
|
||||
Judge_Front = 0, Judge_Side = 1, Judge_Back = 2,
|
||||
Judge_Guard = 3, Judge_Critical = 4, Judge_Heal = 5,
|
||||
Judge_ManaHeal = 6, Judge_Chant = 7, Judge_Enchant = 8,
|
||||
Judge_Disenchant = 9, Judge_Evade = 10, Judge_Resist = 11,
|
||||
Judge_ManaShell = 12, Judge_Poisoned = 13
|
||||
};
|
||||
|
||||
enum ExchangeCmd
|
||||
{
|
||||
ExchangeCmd_Propose = 0, ExchangeCmd_Accept = 1, ExchangeCmd_Refuse = 2,
|
||||
ExchangeCmd_OK = 3, ExchangeCmd_Cancel = 4, ExchangeCmd_Exchange = 5,
|
||||
ExchangeCmd_Quit = 6, ExchangeCmd_Lock = 7, ExchangeCmd_UnLock = 8
|
||||
};
|
||||
|
||||
enum DuelCmd
|
||||
{
|
||||
DuelCmd_Propose = 0, DuelCmd_Ready = 1, DuelCmd_Refuse = 2,
|
||||
DuelCmd_Logout = 3, DuelCmd_Dead = 4, DuelCmd_PartyPropose = 5,
|
||||
DuelCmd_PartyReady = 6, DuelCmd_RequestPartyInfo = 7, DuelCmd_Cancel = 8
|
||||
};
|
||||
|
||||
enum SpellType
|
||||
{
|
||||
SpellType_None = 0,
|
||||
|
||||
// Chant
|
||||
SpellType_BattleSong = 1,
|
||||
SpellType_MaintenanceChant = 2,
|
||||
SpellType_AccelerationChant = 3,
|
||||
SpellType_LifeAura = 4,
|
||||
|
||||
// Enchant
|
||||
SpellType_Stealth = 17, SpellType_ManaShell = 18,
|
||||
SpellType_Encourage = 19, SpellType_EnchantWeapon = 20,
|
||||
SpellType_BrightArmor = 21, SpellType_HardenSkin = 22,
|
||||
SpellType_Flexibility = 23, SpellType_Guard = 24,
|
||||
SpellType_Hold = 25, SpellType_Stun = 26,
|
||||
SpellType_Frozen = 27, SpellType_Poisoned = 28,
|
||||
SpellType_LowerStrength = 29,
|
||||
|
||||
// Other
|
||||
SpellType_Invincible = 30
|
||||
};
|
||||
|
||||
enum StallCmd
|
||||
{
|
||||
StallCmd_Register = 0, StallCmd_ChangePrice = 1, StallCmd_Cancel = 2
|
||||
};
|
||||
|
||||
enum AdminCmd
|
||||
{
|
||||
MoveZoneChar = 1, MoveZoneParty = 2, MoveChar = 3, MoveParty = 4,
|
||||
RespawnChar = 5, RespawnParty = 6, KillChar = 7, KillParty = 8,
|
||||
DuelInit = 9, CreateItem = 10, CreateMon = 11, InfoChar = 12
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
HWND m_hMainWnd;
|
||||
|
||||
IN_ADDR m_RegAddress;
|
||||
void* m_RegPointer;
|
||||
|
||||
SOCKADDR_IN m_PubUDPAddress;
|
||||
SOCKADDR_IN m_PriUDPAddress;
|
||||
SOCKADDR_IN m_UDPAgentAddress;
|
||||
|
||||
DWORD m_UpdateCount;
|
||||
|
||||
int m_ConnectServer;
|
||||
|
||||
public:
|
||||
|
||||
SOCKADDR_IN m_GSSUDPAddress;
|
||||
|
||||
UDPList* m_ClientList;
|
||||
UDPList* m_PartyList;
|
||||
UDPList* m_InstanceClientList;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ClientSocket <20>⺻ Ŭ<><C5AC><EFBFBD><EFBFBD> <20>ҵ<DEBC>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
public:
|
||||
|
||||
ClientSocket(HWND hWnd_In);
|
||||
virtual ~ClientSocket(void);
|
||||
|
||||
inline IN_ADDR GetRegAddress(void) { return m_RegAddress; }
|
||||
inline char* GetRegString(void) { return inet_ntoa(m_RegAddress); }
|
||||
inline bool IsEmptyRegAddress(void) { return (0 == m_RegAddress.S_un.S_addr) ? true : false; }
|
||||
inline void CrearRegAddress(void) { memset(&m_RegAddress, 0, sizeof(SOCKADDR_IN)); }
|
||||
|
||||
inline SOCKADDR_IN GetPubAddress(void) { return m_PubUDPAddress; }
|
||||
inline SOCKADDR_IN GetPriAddress(void) { return m_PriUDPAddress; }
|
||||
inline SOCKADDR_IN GetUDPAddress(void) { return m_UDPAgentAddress; }
|
||||
|
||||
inline int GetConnectServer() { return m_ConnectServer; }
|
||||
|
||||
|
||||
DWORD InsertIntoAddressList(unsigned short List_In, DWORD CharID_In, SOCKADDR_IN PubAddress_In, SOCKADDR_IN PriAddress_In);
|
||||
bool DeleteFromAddressList(unsigned short List_In, DWORD CharID_In);
|
||||
bool DeleteFromAddressList(unsigned short List_In, SOCKADDR_IN Address_In);
|
||||
|
||||
bool IsExistToList(unsigned short List_In, DWORD CharID_In);
|
||||
DWORD GetListCount(unsigned short List_In);
|
||||
|
||||
bool RegistInstanceUDPList(DWORD CharID_In);
|
||||
void DeleteInstanceUDPList();
|
||||
|
||||
bool IsRealIP(void);
|
||||
PEERTYPE GetPeerType(SOCKADDR_IN PubAddress_In, SOCKADDR_IN PriAddress_In);
|
||||
|
||||
bool UDPSendList(WSABUF &SendBuf_In, UDPList* lpList_In);
|
||||
bool UDPSendList(WSABUF &SendBuf_In, UDPList* lpList_In, DWORD CharID_In);
|
||||
bool UDPRecv(void);
|
||||
|
||||
bool ConnectToAuthServer(char *Address_In);
|
||||
bool ConnectToGameServer(char *Address_In);
|
||||
bool Disconnect(void);
|
||||
|
||||
bool SendSysPing(void);
|
||||
|
||||
bool CharMoveZone(char Zone_In, POS& NewPos_In);
|
||||
DWORD HandleCharMoveZone(char *pBuffer_In, unsigned char *Zone_Out, unsigned short *lpChannelNum_Out);
|
||||
|
||||
bool ServerZone(char Zone_In, char Channel_In);
|
||||
DWORD HandleServerZone(char *pBuffer_In, DWORD *ServerID_Out);
|
||||
|
||||
bool UserLogin(DWORD SessionID_In, DWORD UserID_In, DWORD ServerID_In, DWORD ClientVer_In);
|
||||
bool CharSelect(DWORD UserID_In, DWORD CharID_In);
|
||||
bool CharCreate(DWORD UserID_In, DWORD SlotNum_In, CHAR_CREATE &Create_In);
|
||||
bool CharDelete(DWORD UserID_In, DWORD CharID_In, DWORD SlotNum_In);
|
||||
|
||||
DWORD HandleUserLogin(char *pBuffer_In, DWORD *UserID_Out, LPCHAR_VIEW CharRecode_Out);
|
||||
DWORD HandleCharSelect(char *pBuffer_In, unsigned char *Zone_Out, unsigned short *lpChannelNum_Out);
|
||||
DWORD HandleCharCreate(char *pBuffer_In, DWORD *CharID_Out, DWORD *SlotNum_Out, LPCHAR_VIEW lpCharView_Out);
|
||||
DWORD HandleCharDelete(char *pBuffer_In, DWORD *UserID_Out, DWORD *SlotNum_Out);
|
||||
|
||||
bool CharLogin(DWORD UserID_In, DWORD CharID_In, DWORD SessionID_In);
|
||||
bool CharLogout(DWORD CharID_In);
|
||||
|
||||
bool CharUpdateAddress(DWORD CharID_In);
|
||||
bool CharAddressInfo(DWORD CharID_In, DWORD TargetID_In);
|
||||
bool CharRequireInfo(DWORD SenderID_In, DWORD TargetID_In, unsigned char Cmd_In);
|
||||
bool CharMove(DWORD CharID_In, LPPOS Pos_In, float Dir_In, unsigned short UAct_In, unsigned short LAct_In, char Level_In, DWORD ChantEf_In, DWORD EnchantEf_In);
|
||||
bool CharMoveUpdate(DWORD CharID_In, bool SitMode_In, LPPOS Pos_In, float Dir_In);
|
||||
bool CharChat(DWORD CharID_In, unsigned short Cmd_In, char* Message_In, int MessageSize_In);
|
||||
bool CharWhisper(char* SenderName_In, char *RecverName_In, char* Message_In, int MessageSize_In);
|
||||
bool CharAttack(DWORD CharID_In, LPPOS lpPos_In, float Dir_In, AtType &AtType_In, AtNode &AtNode_In);
|
||||
bool CharAttackInfo(DWORD CharID_In, AtType &AtType_In, unsigned char DefenserNum_In, LPDefenserNode lpNode_In);
|
||||
bool CharRespawn(DWORD CharID_In, unsigned char cCmd_In, POS& Pos_In);
|
||||
bool CharShapeInfo(LPCHAR_VIEW lpCharView_In, unsigned char cSelectedHands_In, unsigned long dwStatusFlag_In, char *StallName_In);
|
||||
bool CharShapeInfo(DWORD CharID_In, LPCHAR_VIEW lpCharView_In, unsigned char cSelectedHands_In, unsigned long dwStatusFlag_In, char *StallName_In);
|
||||
bool CharPickUp(DWORD CharID_In, DWORD ObjectID_In, Item::ItemPos Index_In);
|
||||
bool CharPullDown(DWORD CharID_In, Item::ItemPos Index_In, unsigned char cNum);
|
||||
bool CharTakeItem(DWORD CharID_In, TakeType TakeType_In);
|
||||
bool CharSwapItem(DWORD CharID_In, TakeType SrcType_In, TakeType DstType_In);
|
||||
bool CharTradeItem(DWORD CharID_In, DWORD NPCID_In, unsigned short ItemID_In, TakeType TakeType_In);
|
||||
bool CharRepairItem(DWORD NPCID_In, Item::ItemPos* lpIndex_In, DWORD Gold_In);
|
||||
bool CharUseItem(DWORD SenderID_In, DWORD Recver_In, Item::ItemPos* lpIndex_In);
|
||||
bool CharCastObject(DWORD SenderID_In, DWORD RecverID_In, CastObject &CastObject_In);
|
||||
bool CharCastObjectInfo(DWORD SenderID_In, DWORD RecverID_In, CastObject &CastObject_In);
|
||||
bool CharInstallSocket(DWORD CharID_In, Item::ItemPos* lpEquipIndex_In, Item::ItemPos* lpSocket_In);
|
||||
bool CharSuicide(DWORD CharID_In);
|
||||
bool CharBindPos(DWORD NPCID_In, unsigned char Cmd_In, LPPOS lpPos_In, char Zone_In);
|
||||
bool CharIncreasePoint(DWORD CharID_In, unsigned char StateType_In);
|
||||
bool CharClassUpgrade(DWORD CharID_In, unsigned char ClassID_In);
|
||||
bool CharSkillLock(DWORD CharID_In, unsigned short SkillID_In, unsigned char Index_In);
|
||||
bool CharSkillUnLock(DWORD CharID_In, unsigned short SkillID_In, unsigned char Index_In, Item::ItemPos* lpIndex_In);
|
||||
bool CharSkillCreate(DWORD CharID_In, unsigned short SkillID_In, unsigned char Index_In);
|
||||
bool CharSkillErase(DWORD CharID_In, unsigned short SkillID_In, unsigned char Index_In);
|
||||
bool CharPartyCmd(DWORD SenderID_In, DWORD ReferenceID_In, DWORD PartyID_In, unsigned short Cmd_In);
|
||||
bool CharPartyMemInfo(DWORD CharID_In, DWORD PartyID_In, unsigned char Class_In, char Level_In, unsigned short MaxHP_In, short CurHP_In, unsigned short MaxMP_In, short CurMP_In, DWORD Chant_In, DWORD Enchant_In);
|
||||
bool CharPartyFind(DWORD CharID_In);
|
||||
bool CharUpgradeItem(DWORD CharID_In, unsigned char MineralNum_In);
|
||||
bool CharLevelUpInfo(DWORD CharID_In, unsigned char Level_In);
|
||||
bool CharSplitItem(DWORD CharID_In, TakeType &TakeType_In);
|
||||
bool CharQuickSlotMove(TakeType &TakeType_In);
|
||||
bool CharSwitchHand(unsigned char SelectHand_In);
|
||||
bool CharTakeItems(DWORD CharID_In, unsigned char TakeNum_In, LPTakeType lpTakeTypes_In);
|
||||
bool CharTakeGold(DWORD CharID_In, unsigned char SrcPos_In, unsigned char DstPos_In, DWORD Gold_In);
|
||||
bool CharExchangeCmd(DWORD SenderID_In, DWORD RecverID_In, unsigned char Cmd_In);
|
||||
bool CharPartyData(DWORD CharID_In, unsigned short Cmd_In, unsigned short Len_In, void *Data_In);
|
||||
bool CharControlOption(DWORD CharID_In, RejectOption &Reject_In);
|
||||
bool CharDuelCmd(DWORD SenderID_In, DWORD RecverID_In, unsigned char Cmd_In);
|
||||
bool CharFameInfo(DWORD CharID_In, unsigned char Cmd_In);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool CharStallOpen(DWORD CharID_In, char* StallName_In);
|
||||
bool CharStallRegisterItem(DWORD CharID_In, TakeType TakeType_In, unsigned long Price_In, unsigned char Cmd_In);
|
||||
bool CharStallEnter(DWORD CustomerID_In, DWORD Owner_In);
|
||||
|
||||
// ģ<><C4A3> <20><><EFBFBD><EFBFBD>
|
||||
bool CharFriendAddRequest(char* szName_In, PktFriendAddReq::CMD addType);
|
||||
bool CharFriendRemoveRequest(unsigned long dwCID, PktFriendRemoveReq::CMD removeType);
|
||||
bool CharFriendEtcRequest(unsigned long dwCID, unsigned long dwData, PktFriendEtc::CMD etcType);
|
||||
|
||||
|
||||
bool StoreLogin(char *Password_In, char PassSave_In);
|
||||
bool StoreLogout(void);
|
||||
bool StoreBuyTab(char TabNum_In);
|
||||
bool StoreChangePass(char *Password_In, char *NewPassword_In);
|
||||
|
||||
bool CharAdmin(unsigned short Cmd_In, char* Name_In, char Zone_In, char Channel_In, unsigned short ProtoTypeID, POS& Pos_In);
|
||||
|
||||
DWORD HandleDeposit(char *pBuffer_In, unsigned char *Cmd_Out, DWORD *Gold_Out, char *PassSave_Out);
|
||||
|
||||
DWORD HandleCharLogin(char *pBuffer_In, char *Admin_Out, LPCHAR_INFOST lpCharInfo_Out, LPSKILL lpSkill_Out, LPQUICK lpQuick_Out, LPCHAR_POS lpPos_Out, DWORD *ServerTime_Out,
|
||||
unsigned short *EquipSize_Out, char **lppEquipBuff_Out, unsigned short *InvenSize_Out, char **lppInvenBuff_Out, unsigned short *ExtraSize_Out, char **lppExtraBuff_Out, unsigned short *ExchangeSize_Out, char **lppExchangeBuff_Out);
|
||||
DWORD HandleCharLogout(char *pBuffer_In, DWORD *CharID_Out);
|
||||
DWORD HandleDepositUpdate(char *pBuffer_In, DWORD *Flag_Out, unsigned char *TabNum_Out, bool *Complete_Out, unsigned short *StoreSize_Out, char **lppStoreBuff_Out);
|
||||
|
||||
DWORD HandleCharUpdateAddress(char *pBuffer_In);
|
||||
DWORD HandleCharAddressInfo(char *pBuffer_In, DWORD *CharID_Out, SOCKADDR_IN* PubAddress_Out, SOCKADDR_IN* PriAddress_Out);
|
||||
DWORD HandleCharRequireInfo(char *pBuffer_In, DWORD *CharID_Out, SOCKADDR_IN* PubAddress_Out, SOCKADDR_IN* PriAddress_Out, unsigned char *Cmd_Out);
|
||||
DWORD HandleCharMove(char *pBuffer_In, DWORD *CharID_Out, LPPOS Pos_Out, float *Dir_Out, unsigned short *UAct_Out, unsigned short *LAct_Out, char *Level_Out, DWORD *ChantEf_Out, DWORD *EnchantEf_Out, DWORD *PtCount_Out);
|
||||
DWORD HandleCharChat(char *pBuffer_In, DWORD *CharID_Out, unsigned short *Cmd_Out, char *Message_Out);
|
||||
DWORD HandleCharWhisper(char *pBuffer_In, char *SenderName_Out, char *RecverName_Out, char *Message_Out);
|
||||
DWORD HandleCharCellLogin(char *pBuffer_In, DWORD *CharID_Out, LPPOS Pos_Out, SOCKADDR_IN* PubAddress_Out, SOCKADDR_IN* PriAddress_Out, unsigned char *Cmd_Out);
|
||||
DWORD HandleCharCellLogout(char *pBuffer_In, DWORD *CharID_Out, unsigned char *Cmd_Out);
|
||||
DWORD HandleMonMove(char *pBuffer_In, DWORD *MonID_Out, LPPOS lpPos_Out, float *Dir_Out, float *Vec_Out, unsigned short *Act_Out, unsigned short *AniNum_Out);
|
||||
DWORD HandleCharAttack(char *pBuffer_In, DWORD *CharID_Out, LPAtType lpAtType_Out, unsigned short *HP_Out, unsigned short *MP_Out, DWORD *RightIndex_Out, DWORD *RightValue_Out, DWORD *LeftIndex_Out, DWORD *LeftValue_Out, char *Judge_Out, unsigned char *DefenserNum_Out, LPDefenserNode *lppNode_Out);
|
||||
DWORD HandleCharAttackInfo(char *pBuffer_In, DWORD *CharID_Out, LPAtType lpAtType_Out, unsigned char *DefenserNum_Out, LPDefenserNode *lppNode_Out);
|
||||
DWORD HandleCharRespawn(char *pBuffer_In, DWORD *CharID_Out, unsigned short *HP_Out, unsigned short *MP_Out, LPPOS lpPos_Out, __int64 *Exp_Out);
|
||||
DWORD HandleCharAttacked(char *pBuffer_In, DWORD *AtCharID_Out, AtType *AtType_Out, LPPOS lpAtPos_Out, float *AtDir_Out, unsigned short *Judge_Out, unsigned short *MyHP_Out, unsigned short *MyMP_Out, unsigned char *MyIndex_Out, unsigned char *MyValue_Out);
|
||||
DWORD HandleCharAward(char *pBuffer_In, DWORD *CharID_Out, DWORD *Exp_Out);
|
||||
DWORD HandleCharShapeInfo(char *pBuffer_In, LPCHAR_VIEW lpCharView_Out, unsigned char *cSelectedHands_Out, unsigned long *dwStatusFlag_Out, char *StallName_Out);
|
||||
DWORD HandleCharPickUp(char *pBuffer_In, DWORD *CharID_Out, DWORD *ObjectID_Out, Item::ItemPos* lpIndex_Out, DWORD *Gold_Out, DWORD *Size_Out, unsigned char* cNum_Out, char **lppBuffer_Out);
|
||||
DWORD HandleCharPickUpInfo(char *pBuffer_In, DWORD *CharID_Out, DWORD *ObjectID_Out);
|
||||
DWORD HandleCharPullDown(char *pBuffer_In, DWORD *CharID_Out, Item::ItemPos* lpIndex_Out, LPFieldObject lpFieldObject_Out);
|
||||
DWORD HandleCharPullDownInfo(char *pBuffer_In, DWORD *CharID_Out, LPFieldObject lpFieldObject_Out);
|
||||
DWORD HandleGameCellInfo(char *pBuffer_In, unsigned char *ObjectNum_Out, LPFieldObject *lppFieldObject_Out);
|
||||
DWORD HandleCharTakeItem(char *pBuffer_In, DWORD *CharID_Out, LPTakeType lpTakeType_Out);
|
||||
DWORD HandleCharSwapItem(char *pBuffer_In, DWORD *CharID_Out, LPTakeType lpSrcType_Out, LPTakeType lpDstType_Out);
|
||||
DWORD HandleCharTradeItem(char *pBuffer_In, DWORD *CharID_Out, DWORD *NPCID_Out, unsigned char *Pos_Out, Item::ItemPos* lpIndex_Out, unsigned char *Num_Out, DWORD *Gold_Out, unsigned short *Size_Out, char **lppBuffer_Out);
|
||||
DWORD HandleCharRepairItem(char *pBuffer_In, DWORD *CharID_Out, Item::ItemPos* lpIndex_Out, DWORD *Gold_Out);
|
||||
DWORD HandleCharUseItem(char *pBuffer_In, DWORD *SenderID_Out, DWORD *Recver_Out, Item::ItemPos* lpIndex_Out);
|
||||
DWORD HandleCharCastObject(char *pBuffer_In, DWORD *SenderID_Out, DWORD *RecverID_Out, LPCastObject lpCastObject);
|
||||
DWORD HandleCharCastObjectInfo(char *pBuffer_In, DWORD *SenderID_Out, DWORD *RecverID_Out, LPCastObject lpCastObject);
|
||||
DWORD HandleCharInstallSocket(char *pBuffer_In, DWORD *CharID_Out, Item::ItemPos* lpEquipIndex_Out, Item::ItemPos* lpSocket_Out, unsigned short *Size_Out, char **lppBuffer_Out);
|
||||
DWORD HandleCharSuicide(char *pBuffer_In, DWORD *CharID_Out, LPPOS lpPos_Out);
|
||||
DWORD HandleCharBindPos(char *pBuffer_In, DWORD *NPCID_Out, unsigned char *Cmd_Out, LPPOS lpPos_Out, char *Zone_Out);
|
||||
DWORD HandleCharLevelUp(char *pBuffer_In, DWORD *CharID_Out, unsigned char *Level_Out, LPChState lpChState_Out);
|
||||
DWORD HandleCharIncreasePoint(char *pBuffer_In, DWORD *CharID_Out, LPChState lpChState_Out);
|
||||
DWORD HandleCharClassUpgrade(char *pBuffer_In, DWORD *CharID_Out, unsigned short *ClassID_Out, LPChState lpState_Out, char *Index_Out, unsigned short *Skill_Out);
|
||||
DWORD HandleCharSkillLock(char *pBuffer_In, DWORD *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out);
|
||||
DWORD HandleCharSkillUnLock(char *pBuffer_In, DWORD *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out, Item::ItemPos* lpIndex_Out, unsigned long *Gold_Out);
|
||||
DWORD HandleCharSkillCreate(char *pBuffer_In, DWORD *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out);
|
||||
DWORD HandleCharSkillErase(char *pBuffer_In, DWORD *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out);
|
||||
DWORD HandleCharPartyInfo(char *pBuffer_In, LPPARTY lpParty_Out);
|
||||
DWORD HandleCharPartyCmd(char *pBuffer_In, LPAddressInfo SenderAddress_Out, char *SenderName_Out, DWORD *SenderID_Out, DWORD *ReferenceID_Out, DWORD *PartyID_Out, unsigned short *Cmd_Out);
|
||||
DWORD HandleCharPartyCmdInfo(char *pBuffer_In, DWORD *MemberID_Out, DWORD *PartyID_Out, unsigned short *Cmd_Out);
|
||||
DWORD HandleCharPartyMemInfo(char *pBuffer_In, DWORD *CharID_Out, DWORD *PartyID_Out, unsigned char *Class_Out, char *Level_Out, unsigned short *MaxHP_Out, unsigned short *CurHP_Out, unsigned short *MaxMP_Out, unsigned short *CurMP_Out, DWORD *Chant_Out, DWORD *Enchant_Out, SOCKADDR_IN* PubAddress_Out, SOCKADDR_IN* PriAddress_Out);
|
||||
DWORD HandleCharPartyFind(char *pBuffer_In, DWORD *CharID_Out, unsigned char *MemberFindPartyNum_Out, unsigned char *PartyFindMemberNum_Out, LPMemberFindParty *lppMemberFindParty_Out, LPPartyFindMember *lppPartyFindMember_Out);
|
||||
DWORD HandleCharHPRegen(char *pBuffer_In, DWORD *CharID_Out, unsigned short *HP_Out, unsigned short *MP_Out);
|
||||
DWORD HandleCharUpgradeItem(char *pBuffer_In, DWORD *CharID_Out, unsigned char *Size_Out, char **lppBuffer_Out);
|
||||
DWORD HandleCharLevelUpInfo(char *pBuffer_In, DWORD *CharID_Out, unsigned char *Level_Out);
|
||||
DWORD HandleCharSplitItem(char *pBuffer_In, DWORD *CharID_Out, LPTakeType lpTakeType_Out, unsigned char *Size_Out, char **lppBuffer_Out);
|
||||
DWORD HandleCharQuickSlotMove(char *pBuffer_In, LPTakeType lpTakeType_Out);
|
||||
DWORD HandleCharSwitchHand(char *pBuffer_In, unsigned char *SelectHand_Out);
|
||||
DWORD HandleCharTakeItems(char *pBuffer_In, DWORD *CharID_Out, unsigned char *TakeNum_Out, LPTakeType *lppTakeTypes_Out);
|
||||
DWORD HandleCharTakeGold(char *pBuffer_In, DWORD *CharID_Out, unsigned char *SrcPos_Out, unsigned char *DstPos_Out, DWORD *Gold_Out);
|
||||
DWORD HandleCharExchangeCmd(char *pBuffer_In, DWORD *SenderID_Out, DWORD *RecverID_Out, unsigned char *Cmd_Out);
|
||||
DWORD HandleCharExchangeItem(char *pBuffer_In, DWORD *CharID_Out, DWORD *Size_Out, Item::ItemPos* lpIndex_Out, unsigned char *Type_Out, unsigned char *Num_Out, char **lppBuffer_Out);
|
||||
DWORD HandleCellBroadCasting(char *pBuffer_In, unsigned short *CharNum_Out, LPAddressInfo *lppAddress_Out);
|
||||
DWORD HandleControlOption(char *pBuffer_In, DWORD *CharID_Out, LPRejectOption Reject_Out);
|
||||
DWORD HandleCharDuelCmd(char *pBuffer_In, DWORD *SenderID_Out, DWORD *RecverID_Out, unsigned char *Cmd_Out);
|
||||
DWORD HandleCharTeamBattleInfo(char *pBuffer_In, unsigned long *CharID_Out, char *ChallengerName_Out, unsigned char *Cmd_Out, unsigned char *MemberNum_Out, unsigned long *MemberID_Out, unsigned char *MemberLevel_Out);
|
||||
DWORD HandleCharFameInfo(char *pBuffer_In, DWORD *CharID_Out, unsigned char *Cmd_Out, unsigned long *FameOrMerits_Out, unsigned char *RankingByRace_Out, unsigned char *RankingByClass_Out);
|
||||
DWORD HandleCharSpellInfo(char *pBuffer_In, DWORD *CharID_Out, unsigned char *SpellType_Out, unsigned short *EnchantLevel_Out, bool *OnOff_Out);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DWORD HandleCharStallOpen(char *pBuffer_In, DWORD *CharID_Out, char* StallName_Out);
|
||||
DWORD HandleCharStallRegisterItem(char *pBuffer_In, DWORD *CharID_Out, TakeType *TakeType_Out, unsigned long *Price_Out, unsigned char *Cmd_Out);
|
||||
DWORD HandleCharStallEnter(char *pBuffer_In, DWORD *CustomerID_Out, DWORD *Owner_Out);
|
||||
DWORD HandleCharStallItemInfo(char *pBuffer_In, unsigned long *StallSize_Out, char **lppStallBuff_Out, unsigned short *ItemNum_Out, unsigned long **StallPrice_Out);
|
||||
|
||||
// ģ<><C4A3> <20><><EFBFBD><EFBFBD>
|
||||
DWORD HandleCharFriendDB(char *pBuffer_In, unsigned char* cDataType_Out, char **ppFriendListData_Out, DWORD *dwDataSize_Out);
|
||||
DWORD HandleCharFriendAck(char *pBuffer_In, unsigned char* cCmd_Out, DWORD *dwCID_Out);
|
||||
DWORD HandleCharFriendRegistered(char *pBuffer_In, char* szName_Out);
|
||||
|
||||
DWORD HandleCharEliteBonus(char *pBuffer_In, char *Nation_Out, unsigned char *Level_Out);
|
||||
};
|
||||
|
||||
#endif
|
||||
343
GameTools/GLOBALSCRIPT/Network/ClientSocket/LoginSocket.cpp
Normal file
343
GameTools/GLOBALSCRIPT/Network/ClientSocket/LoginSocket.cpp
Normal file
@@ -0,0 +1,343 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ClientSocket Class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#include "LoginSocket.h"
|
||||
|
||||
#include <Network/Packet/PacketCommand.h>
|
||||
#include <Network/Packet/PacketStruct/ServerInfo.h>
|
||||
#include <Network/Packet/PacketStruct/ServerPacket.h>
|
||||
#include <Network/Packet/PacketStruct/ClientToAuthServer.h>
|
||||
#include <Network/Packet/PacketStruct/ClientToLoginServer.h>
|
||||
|
||||
LoginSocket::LoginSocket(HWND hWnd_In):
|
||||
m_hMainWnd(hWnd_In), m_ConnectServer(0)
|
||||
{
|
||||
m_RegAddress.S_un.S_addr = 0;
|
||||
}
|
||||
|
||||
LoginSocket::~LoginSocket(void)
|
||||
{
|
||||
Disconnect();
|
||||
}
|
||||
|
||||
bool LoginSocket::ConnectToLoginServer(char* Address_In)
|
||||
{
|
||||
Disconnect();
|
||||
|
||||
if(!Socket::CreateTCPSocket(&m_TCPSocket, m_hMainWnd, WM_LOGIN_SOCKET))
|
||||
return false;
|
||||
|
||||
m_ConnectServer = CO_SRV::CO_LOGIN;
|
||||
return Socket::Connect(m_TCPSocket, Socket::MakeSockAddr(Address_In, DemonLoginTCPPort), &m_pRecvDataBuffer);
|
||||
}
|
||||
|
||||
bool LoginSocket::ConnectToAuthServer(void)
|
||||
{
|
||||
Disconnect();
|
||||
|
||||
if(!Socket::CreateTCPSocket(&m_TCPSocket, m_hMainWnd, WM_LOGIN_SOCKET))
|
||||
return false;
|
||||
|
||||
m_ConnectServer = CO_SRV::CO_AUTH;
|
||||
return Socket::Connect(m_TCPSocket, Socket::MakeSockAddr(m_RegAddress, DemonAuthTCPPort), &m_pRecvDataBuffer);
|
||||
}
|
||||
|
||||
bool LoginSocket::Disconnect(void)
|
||||
{
|
||||
if(m_TCPSocket)
|
||||
Socket::DeleteSocket(&m_TCPSocket, m_hMainWnd);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//Interface/////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><> <20><>Ŷ [ public ]
|
||||
//
|
||||
// Parameter :
|
||||
//
|
||||
// Return :
|
||||
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
bool LoginSocket::SendSysPing(void)
|
||||
{
|
||||
if(m_TCPSocket == NULL)
|
||||
return false;
|
||||
|
||||
CPacket* lpBuffer = new CPacket(sizeof(PktSyP), CmdSysPing, 0);
|
||||
LPPktSyP lpSyPAckPt = reinterpret_cast<LPPktSyP>(lpBuffer->GetBuf());
|
||||
|
||||
lpSyPAckPt->m_dwTickTime = GetTickCount();
|
||||
|
||||
lpBuffer->WrapPacket(true);
|
||||
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
|
||||
{
|
||||
lpBuffer->Release();
|
||||
return false;
|
||||
}
|
||||
|
||||
lpBuffer->Release();
|
||||
return true;
|
||||
}
|
||||
|
||||
//Interface/////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// GAS <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
|
||||
// - GAS <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
//
|
||||
// Parameter :
|
||||
// 1st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> <20><><EFBFBD>ڿ<EFBFBD>[In] ex) "Bono"
|
||||
// 2st : <20><><EFBFBD><EFBFBD> <20>н<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD>[In] ex) "Bono"
|
||||
// 3st : Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>[In]
|
||||
//
|
||||
// Return :
|
||||
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
bool LoginSocket::AuthAccount(char* UserID_In, char* UserPW_In, DWORD ClientVer_In, unsigned short CnFlag_In, unsigned short Flag_In)
|
||||
{
|
||||
if(m_TCPSocket == NULL || UserID_In == NULL || UserPW_In == NULL)
|
||||
return false;
|
||||
|
||||
CPacket* lpBuffer = new CPacket(sizeof(PktAU), CmdAuthAccount, 0, CnFlag_In);
|
||||
LPPktAU lpAUPt = reinterpret_cast<LPPktAU>(lpBuffer->GetBuf());
|
||||
|
||||
strncpy(lpAUPt->m_UserAccount, UserID_In, 16);
|
||||
strncpy(lpAUPt->m_UserPassword, UserPW_In, 16);
|
||||
|
||||
lpAUPt->m_dwSessionID = GetDiskSerial('C');
|
||||
|
||||
lpAUPt->m_ClientVerInfo = ClientVer_In;
|
||||
lpAUPt->m_cFlag = Flag_In;
|
||||
|
||||
lpBuffer->WrapPacket(true);
|
||||
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
|
||||
{
|
||||
lpBuffer->Release();
|
||||
return false;
|
||||
}
|
||||
|
||||
lpBuffer->Release();
|
||||
return true;
|
||||
}
|
||||
|
||||
//Interface/////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><>Ŷ ó<><C3B3> [ public ]
|
||||
// - AUAckPt ó<><C3B3>
|
||||
//
|
||||
// Parameter :
|
||||
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
|
||||
// 2st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Out]
|
||||
// 3st : <20>α<EFBFBD><CEB1><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü[Out]
|
||||
//
|
||||
// Return :
|
||||
// <09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
DWORD LoginSocket::HandleAuthAccount(char *pBuffer_In, DWORD *SessionID_Out, DWORD *UserID_Out)
|
||||
{
|
||||
LPPktAUAck lpAUAckPt = (LPPktAUAck)pBuffer_In;
|
||||
|
||||
if(lpAUAckPt == NULL || UserID_Out == NULL)
|
||||
return WrongParameter;
|
||||
|
||||
*SessionID_Out = lpAUAckPt->m_dwSessionID;
|
||||
*UserID_Out = lpAUAckPt->m_dwUserID;
|
||||
|
||||
if(lpAUAckPt->Error() != NoError)
|
||||
return lpAUAckPt->Error();
|
||||
|
||||
return NoError;
|
||||
}
|
||||
|
||||
//Interface/////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// GAS <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
|
||||
// - GAS <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
//
|
||||
// Parameter :
|
||||
// 1st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
|
||||
// 2st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
|
||||
//
|
||||
// Return :
|
||||
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
bool LoginSocket::ServerList(DWORD ClientVersion_In)
|
||||
{
|
||||
if(m_TCPSocket == NULL)
|
||||
return false;
|
||||
|
||||
CPacket* lpBuffer = new CPacket(sizeof(PktSvL), CmdLoginServerList, 0, 0);
|
||||
LPPktSvL lpSvLPt = reinterpret_cast<LPPktSvL>(lpBuffer->GetBuf());
|
||||
|
||||
lpSvLPt->m_ClientVerInfo = ClientVersion_In;
|
||||
|
||||
lpBuffer->WrapPacket(true);
|
||||
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
|
||||
{
|
||||
lpBuffer->Release();
|
||||
return false;
|
||||
}
|
||||
|
||||
lpBuffer->Release();
|
||||
return true;
|
||||
}
|
||||
|
||||
//Interface/////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><>Ŷ ó<><C3B3> [ public ]
|
||||
// - AUAckPt ó<><C3B3>
|
||||
//
|
||||
// Parameter :
|
||||
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
|
||||
// 2st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Out]
|
||||
// 3st : <20>α<EFBFBD><CEB1><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü[Out]
|
||||
//
|
||||
// Return :
|
||||
// <09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
DWORD LoginSocket::HandleServerList(char *pBuffer_In, DWORD *dwUserID_Out, SERVER_LIST* lpServerList_Out)
|
||||
{
|
||||
LPPktSvLAck lpSvLAckPt = (LPPktSvLAck)pBuffer_In;
|
||||
|
||||
if(lpSvLAckPt == NULL || dwUserID_Out == NULL)
|
||||
return WrongParameter;
|
||||
|
||||
if(lpSvLAckPt->Error() != NoError)
|
||||
return lpSvLAckPt->Error();
|
||||
|
||||
*dwUserID_Out = lpSvLAckPt->m_dwUserID;
|
||||
CopyMemory(lpServerList_Out, &(lpSvLAckPt->m_ServerList), sizeof(SERVER_LIST));
|
||||
|
||||
return NoError;
|
||||
}
|
||||
|
||||
//Interface/////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// GAS <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
|
||||
// - GAS <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
//
|
||||
// Parameter :
|
||||
// 1st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
|
||||
// 2st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
|
||||
//
|
||||
// Return :
|
||||
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
bool LoginSocket::ServerGroup(unsigned char Group_In)
|
||||
{
|
||||
if(m_TCPSocket == NULL)
|
||||
return false;
|
||||
|
||||
CPacket* lpBuffer = new CPacket(sizeof(PktSG), CmdServerGroup, 0, 0);
|
||||
LPPktSG lpSGPt = reinterpret_cast<LPPktSG>(lpBuffer->GetBuf());
|
||||
|
||||
lpSGPt->m_cGroup = Group_In;
|
||||
|
||||
lpBuffer->WrapPacket(true);
|
||||
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
|
||||
{
|
||||
lpBuffer->Release();
|
||||
return false;
|
||||
}
|
||||
|
||||
lpBuffer->Release();
|
||||
return true;
|
||||
}
|
||||
|
||||
//Interface/////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ ó<><C3B3> [ public ]
|
||||
// - AUTSAck ó<><C3B3>
|
||||
//
|
||||
// Parameter :
|
||||
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
|
||||
// 2st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Out]
|
||||
//
|
||||
// Return :
|
||||
// <09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
DWORD LoginSocket::HandleServerGroup(char *pBuffer_In, DWORD *dwServerID_Out)
|
||||
{
|
||||
LPPktSGAck lpSGAckPt = (LPPktSGAck)pBuffer_In;
|
||||
|
||||
if(lpSGAckPt == NULL || dwServerID_Out == NULL)
|
||||
return WrongParameter;
|
||||
|
||||
if(lpSGAckPt->Error() != NoError)
|
||||
return lpSGAckPt->Error();
|
||||
|
||||
*dwServerID_Out = lpSGAckPt->m_dwServerID;
|
||||
m_RegAddress = lpSGAckPt->m_AuthAddress;
|
||||
|
||||
return NoError;
|
||||
}
|
||||
|
||||
//Interface/////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><>ġ <20>ּ<EFBFBD> [ public ]
|
||||
// - <20><>ġ <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// Parameter :
|
||||
// 1st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
|
||||
//
|
||||
// Return :
|
||||
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
bool LoginSocket::PatchAddress(DWORD ServerID_In)
|
||||
{
|
||||
if(m_TCPSocket == NULL)
|
||||
return false;
|
||||
|
||||
CPacket* lpBuffer = new CPacket(sizeof(PktSPI), CmdSysPatchAddress, 0, 0);
|
||||
LPPktSPI lpSPIPt = reinterpret_cast<LPPktSPI>(lpBuffer->GetBuf());
|
||||
|
||||
lpSPIPt->m_dwServerID = ServerID_In;
|
||||
|
||||
lpBuffer->WrapPacket(true);
|
||||
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
|
||||
{
|
||||
lpBuffer->Release();
|
||||
return false;
|
||||
}
|
||||
|
||||
lpBuffer->Release();
|
||||
return true;
|
||||
}
|
||||
|
||||
//Interface/////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><>ġ <20>ּ<EFBFBD> [ public ]
|
||||
// - <20><>ġ <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// Parameter :
|
||||
// 1st : <20><>ġ <20>ּ<EFBFBD>[In]
|
||||
//
|
||||
// Return :
|
||||
// <09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
DWORD LoginSocket::HandlePatchAddress(char *pBuffer_In, DWORD *ClientVer_Out, char *PatchAddress_Out)
|
||||
{
|
||||
LPPktSPIAck lpSPIAckPt = (LPPktSPIAck)pBuffer_In;
|
||||
|
||||
if(lpSPIAckPt == NULL)
|
||||
return WrongParameter;
|
||||
|
||||
if(lpSPIAckPt->Error() != NoError)
|
||||
return lpSPIAckPt->Error();
|
||||
|
||||
*ClientVer_Out = lpSPIAckPt->m_dwClientVer;
|
||||
strncpy(PatchAddress_Out, lpSPIAckPt->m_PatchAddress, PktSPIAck::PATCH_ADDRESS_LENGTH);
|
||||
|
||||
return NoError;
|
||||
}
|
||||
58
GameTools/GLOBALSCRIPT/Network/ClientSocket/LoginSocket.h
Normal file
58
GameTools/GLOBALSCRIPT/Network/ClientSocket/LoginSocket.h
Normal file
@@ -0,0 +1,58 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// LoginSocket Class
|
||||
//
|
||||
// Last Update : 2002. 8.28
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#ifndef _LoginSocket
|
||||
#define _LoginSocket
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
struct SERVER_LIST;
|
||||
|
||||
#include "NetBase.h"
|
||||
|
||||
const unsigned long WM_LOGIN_SOCKET = RegisterWindowMessage("WM_LOGIN_SOCKET");
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
class LoginSocket : public NetBase
|
||||
{
|
||||
private:
|
||||
HWND m_hMainWnd;
|
||||
IN_ADDR m_RegAddress;
|
||||
int m_ConnectServer;
|
||||
|
||||
public:
|
||||
typedef enum AuthFlag { AuthFlag_RegDB = 0x8000, AuthFlag_Email = 0x4000 };
|
||||
typedef enum CO_SRV { CO_LOGIN = 0, CO_AUTH = 1 };
|
||||
|
||||
LoginSocket(HWND hWnd_In);
|
||||
virtual ~LoginSocket(void);
|
||||
|
||||
inline IN_ADDR GetRegAddress() { return m_RegAddress; }
|
||||
inline char* GetRegString() { return inet_ntoa(m_RegAddress); }
|
||||
inline int GetConnectServer() { return m_ConnectServer; }
|
||||
|
||||
bool ConnectToLoginServer(char* Address_In);
|
||||
bool ConnectToAuthServer(void);
|
||||
bool Disconnect(void);
|
||||
|
||||
bool SendSysPing(void);
|
||||
|
||||
bool AuthAccount(char* UserID_In, char* UserPW_In, DWORD ClientVer_In, unsigned short CnFlag_In, unsigned short Flag_In = 0);
|
||||
bool ServerList(DWORD ClientVersion_In);
|
||||
bool ServerGroup(unsigned char Group_In);
|
||||
bool PatchAddress(DWORD ServerID_In);
|
||||
|
||||
DWORD HandleAuthAccount(char *pBuffer_In, DWORD *SessionID_Out, DWORD *UserID_Out);
|
||||
DWORD HandleServerList(char *pBuffer_In, DWORD *UserID_Out, SERVER_LIST* lpServerList_Out);
|
||||
DWORD HandleServerGroup(char *pBuffer_In, DWORD *ServerID_Out);
|
||||
DWORD HandlePatchAddress(char *pBuffer_In, DWORD *ClientVer_Out, char *PatchAddress_Out);
|
||||
};
|
||||
|
||||
#endif
|
||||
92
GameTools/GLOBALSCRIPT/Network/ClientSocket/NetBase.cpp
Normal file
92
GameTools/GLOBALSCRIPT/Network/ClientSocket/NetBase.cpp
Normal file
@@ -0,0 +1,92 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// NetBase Class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#include "NetBase.h"
|
||||
|
||||
#include <Network/XORCrypt/XORCrypt.h>
|
||||
|
||||
NetBase::NetBase(void) :
|
||||
m_TCPSocket(INVALID_SOCKET), m_UDPSocket(INVALID_SOCKET)
|
||||
{
|
||||
m_pSendDataBuffer.buf = m_pSendBuffer;
|
||||
m_pSendDataBuffer.len = 0;
|
||||
|
||||
m_pRecvDataBuffer.buf = m_pRecvBuffer;
|
||||
m_pRecvDataBuffer.len = 0;
|
||||
|
||||
m_pRecvUDPDataBuffer.buf = m_pRecvUDPBuffer;
|
||||
m_pRecvUDPDataBuffer.len = 0;
|
||||
}
|
||||
|
||||
NetBase::~NetBase(void)
|
||||
{
|
||||
SAFE_CLOSESOCK(m_TCPSocket);
|
||||
SAFE_CLOSESOCK(m_UDPSocket);
|
||||
}
|
||||
|
||||
int NetBase::Recv(void)
|
||||
{
|
||||
return SocketIO::Recv(m_TCPSocket, m_pRecvDataBuffer);
|
||||
}
|
||||
|
||||
int NetBase::UDPRecv(LPSOCKADDR_IN Address_Out)
|
||||
{
|
||||
return SocketIO::RecvFrom(m_UDPSocket, m_pRecvUDPDataBuffer, Address_Out);
|
||||
}
|
||||
|
||||
int NetBase::PutRecvBufferToPtBuffer(char *pBuffer_Out, int BufferSize_In)
|
||||
{
|
||||
return SocketIO::PutRecvBufferToPtBuffer(pBuffer_Out, BufferSize_In, m_pRecvDataBuffer, m_pRecvBuffer, 0, 0);
|
||||
}
|
||||
|
||||
int NetBase::PutUDPRecvBufferToPtBuffer(char *pBuffer_Out, int BufferSize_In)
|
||||
{
|
||||
return SocketIO::PutRecvBufferToPtBuffer(pBuffer_Out, BufferSize_In, m_pRecvUDPDataBuffer, m_pRecvUDPBuffer, 0, 0);
|
||||
}
|
||||
|
||||
void NetBase::PutSendBuffer(bool Crypt_In)
|
||||
{
|
||||
CXORCrypt& Crypt = CXORCrypt::GetInstance();
|
||||
|
||||
DWORD dwCodePage = Crypt.GetCodePage();
|
||||
LPPktBase lpBasePt = (LPPktBase)m_pSendDataBuffer.buf;
|
||||
int Len = lpBasePt->GetLen();
|
||||
|
||||
// <20><><EFBFBD>ڵ<EFBFBD> <20><>Ŷ
|
||||
if(Crypt_In)
|
||||
{
|
||||
Crypt.EncodePacket(m_pSendDataBuffer.buf + PktBaseSize, Len - PktBaseSize, dwCodePage);
|
||||
|
||||
lpBasePt->SetCodePage(dwCodePage);
|
||||
lpBasePt->SetCrypt();
|
||||
}
|
||||
|
||||
// <20><><EFBFBD>ڵ<EFBFBD> <20>ش<EFBFBD>
|
||||
Crypt.EncodeHeader(m_pSendDataBuffer.buf + 1, PktBaseSize - 1, 0, 0);
|
||||
|
||||
m_pSendDataBuffer.len += Len;
|
||||
m_pSendDataBuffer.buf += Len;
|
||||
}
|
||||
|
||||
bool NetBase::FlushSendBuffer(void)
|
||||
{
|
||||
WSABUF SendBuf = { m_pSendDataBuffer.len, m_pSendBuffer };
|
||||
|
||||
CheckServerState();
|
||||
|
||||
if(m_pSendDataBuffer.len <= 0)
|
||||
return true;
|
||||
|
||||
if(!Send(m_TCPSocket, SendBuf))
|
||||
{
|
||||
m_pSendDataBuffer.buf = m_pSendBuffer;
|
||||
m_pSendDataBuffer.len = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
m_pSendDataBuffer.buf = m_pSendBuffer;
|
||||
m_pSendDataBuffer.len = 0;
|
||||
return true;
|
||||
}
|
||||
77
GameTools/GLOBALSCRIPT/Network/ClientSocket/NetBase.h
Normal file
77
GameTools/GLOBALSCRIPT/Network/ClientSocket/NetBase.h
Normal file
@@ -0,0 +1,77 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// NetBase Class
|
||||
//
|
||||
// Last Update : 2002. 8. 28
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#ifndef _NetBase
|
||||
#define _NetBase
|
||||
|
||||
#include "Packet.h"
|
||||
#include "Socket/SocketIO.h"
|
||||
|
||||
const unsigned int DemonLoginTCPPort = 10101; // Client Login TCP Port
|
||||
const unsigned int DemonGameTCPPort = 10104; // Client Game TCP Port
|
||||
const unsigned int DemonAuthTCPPort = 10110; // Client Auth TCP Port
|
||||
const unsigned int DemonClientUDPPort = 20002; // Client UDP Port
|
||||
|
||||
const unsigned short NoError = 0x0000; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const unsigned short WrongParameter = 0x4001; // <20>߸<EFBFBD><DFB8><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const unsigned short ExceptionError = 0x4002; // <20><><EFBFBD><EFBFBD> <20><> <20><EFBFBD>
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
class NetBase : public SocketIO
|
||||
{
|
||||
public:
|
||||
WSABUF m_pSendDataBuffer;
|
||||
char m_pSendBuffer[BufferSize];
|
||||
|
||||
WSABUF m_pRecvDataBuffer;
|
||||
char m_pRecvBuffer[BufferSize];
|
||||
|
||||
WSABUF m_pRecvUDPDataBuffer;
|
||||
char m_pRecvUDPBuffer[BufferSize];
|
||||
|
||||
SOCKET m_TCPSocket;
|
||||
SOCKET m_UDPSocket;
|
||||
|
||||
public:
|
||||
|
||||
NetBase(void);
|
||||
~NetBase(void);
|
||||
|
||||
inline int GetUseSendBuffer(void) { return m_pSendDataBuffer.len; }
|
||||
inline int GetUseRecvBuffer(void) { return static_cast<int>((m_pRecvDataBuffer.buf - m_pRecvBuffer) + m_pRecvDataBuffer.len); }
|
||||
inline int GetUseRecvUDPBuffer(void) { return static_cast<int>((m_pRecvUDPDataBuffer.buf - m_pRecvUDPBuffer) + m_pRecvUDPDataBuffer.len); }
|
||||
|
||||
int Recv(void);
|
||||
int UDPRecv(LPSOCKADDR_IN Address_Out);
|
||||
|
||||
int PutRecvBufferToPtBuffer(char *pBuffer_Out, int BufferSize_In);
|
||||
int PutUDPRecvBufferToPtBuffer(char *pBuffer_Out, int BufferSize_In);
|
||||
|
||||
char* GetSendBuffer(void) { return m_pSendDataBuffer.buf; }
|
||||
|
||||
void PutSendBuffer(bool Crypt_In);
|
||||
bool FlushSendBuffer(void);
|
||||
|
||||
public:
|
||||
inline DWORD GetDiskSerial(char Drv_In)
|
||||
{
|
||||
unsigned long VolumeSerial = 0;
|
||||
|
||||
char Root[10] = "";
|
||||
sprintf(Root, "%c:\\", Drv_In);
|
||||
if(!GetVolumeInformation(Root, 0, 0, &VolumeSerial, 0, 0, 0, 0))
|
||||
return 0;
|
||||
|
||||
return VolumeSerial;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
108
GameTools/GLOBALSCRIPT/Network/ClientSocket/Packet.cpp
Normal file
108
GameTools/GLOBALSCRIPT/Network/ClientSocket/Packet.cpp
Normal file
@@ -0,0 +1,108 @@
|
||||
#include "stdafx.h"
|
||||
#include "Packet.h"
|
||||
|
||||
#include <Network/Packet/PacketBase.h>
|
||||
#include <Network/XORCrypt/XORCrypt.h>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
CMemoryPool::CMemoryPool(size_t nPerAllocateSize, size_t nPerAllocateNum)
|
||||
: m_nPerAllocateSize(nPerAllocateSize), m_nPerAllocateNum(nPerAllocateNum)
|
||||
{
|
||||
for(size_t nCount = 0; nCount < m_nPerAllocateNum; ++nCount)
|
||||
{
|
||||
m_Pool.push_back(new char[m_nPerAllocateSize]);
|
||||
}
|
||||
}
|
||||
|
||||
struct FnPoolDeleteArray
|
||||
{
|
||||
bool operator () (char* lpPtr)
|
||||
{
|
||||
if(NULL != lpPtr)
|
||||
{
|
||||
delete [] lpPtr;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
CMemoryPool::~CMemoryPool()
|
||||
{
|
||||
CCSLock::Syncronize sync(m_PoolLock);
|
||||
std::for_each(m_Pool.begin(), m_Pool.end(), FnPoolDeleteArray());
|
||||
}
|
||||
|
||||
void* CMemoryPool::Alloc(size_t size)
|
||||
{
|
||||
CCSLock::Syncronize sync(m_PoolLock);
|
||||
|
||||
if(m_Pool.empty())
|
||||
{
|
||||
for(size_t nCount = 0; nCount < m_nPerAllocateNum; ++nCount)
|
||||
{
|
||||
m_Pool.push_back(new char[m_nPerAllocateSize]);
|
||||
}
|
||||
}
|
||||
|
||||
char* lpResult = m_Pool.back();
|
||||
m_Pool.pop_back();
|
||||
return lpResult;
|
||||
}
|
||||
|
||||
void CMemoryPool::Free(void* ptr)
|
||||
{
|
||||
CCSLock::Syncronize sync(m_PoolLock);
|
||||
m_Pool.push_back(reinterpret_cast<char*>(ptr));
|
||||
}
|
||||
|
||||
|
||||
CMemoryPool CPacket::ms_PacketPool(sizeof(CPacket), 20);
|
||||
|
||||
CPacket::CPacket()
|
||||
: m_Len(0), m_nRefCount(1), m_bWrap(false)
|
||||
{
|
||||
}
|
||||
|
||||
CPacket::CPacket(unsigned short Len_In, unsigned char Cmd_In, unsigned short State_In, unsigned short Error_In)
|
||||
: m_Len(0), m_nRefCount(1), m_bWrap(false)
|
||||
{
|
||||
((PktBase* )m_Buffer)->InitPtHead(Len_In, Cmd_In, State_In, Error_In);
|
||||
}
|
||||
|
||||
CPacket::CPacket(unsigned short Len_In, unsigned char Cmd_In, unsigned long Tick_In)
|
||||
: m_Len(0), m_nRefCount(1), m_bWrap(false)
|
||||
{
|
||||
((PktBase* )m_Buffer)->InitPtHead(Len_In, Cmd_In, Tick_In);
|
||||
}
|
||||
|
||||
CPacket::~CPacket()
|
||||
{
|
||||
}
|
||||
|
||||
bool CPacket::WrapPacket(bool Crypt_In)
|
||||
{
|
||||
CXORCrypt& Crypt = CXORCrypt::GetInstance();
|
||||
|
||||
DWORD dwCodePage = Crypt.GetCodePage();
|
||||
PktBase* lpBasePt = (PktBase* )m_Buffer;
|
||||
|
||||
m_Len = lpBasePt->GetLen();
|
||||
|
||||
if(m_bWrap)
|
||||
return false;
|
||||
|
||||
// <20><><EFBFBD>ڵ<EFBFBD> <20><>Ŷ
|
||||
if(Crypt_In)
|
||||
{
|
||||
Crypt.EncodePacket(m_Buffer + PktBaseSize, m_Len - PktBaseSize, dwCodePage);
|
||||
|
||||
lpBasePt->SetCodePage(dwCodePage);
|
||||
lpBasePt->SetCrypt();
|
||||
}
|
||||
|
||||
// <20><><EFBFBD>ڵ<EFBFBD> <20>ش<EFBFBD>
|
||||
Crypt.EncodeHeader(m_Buffer + 1, PktBaseSize - 1, 0, 0);
|
||||
return m_bWrap = true;
|
||||
}
|
||||
80
GameTools/GLOBALSCRIPT/Network/ClientSocket/Packet.h
Normal file
80
GameTools/GLOBALSCRIPT/Network/ClientSocket/Packet.h
Normal file
@@ -0,0 +1,80 @@
|
||||
#ifndef _CPacket
|
||||
#define _CPacket
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <Winsock2.h>
|
||||
#include <windows.h>
|
||||
|
||||
#include <new>
|
||||
#include <vector>
|
||||
#include <Thread/Lock.h>
|
||||
#include "Socket/SocketIO.h"
|
||||
|
||||
class CMemoryPool
|
||||
{
|
||||
public:
|
||||
|
||||
CMemoryPool(size_t nPerAllocateSize, size_t PerAllocateNum);
|
||||
~CMemoryPool();
|
||||
|
||||
void* Alloc(size_t size);
|
||||
void Free(void* ptr);
|
||||
|
||||
private:
|
||||
|
||||
CCSLock m_PoolLock;
|
||||
CACHE_PAD(PoolLockPadding, sizeof(CCSLock));
|
||||
|
||||
size_t m_nPerAllocateSize;
|
||||
size_t m_nPerAllocateNum;
|
||||
std::vector<char*> m_Pool;
|
||||
};
|
||||
|
||||
|
||||
class CPacket
|
||||
{
|
||||
protected:
|
||||
|
||||
volatile LONG m_nRefCount;
|
||||
char m_Buffer[BufferSize];
|
||||
unsigned short m_Len;
|
||||
|
||||
bool m_bWrap;
|
||||
|
||||
public:
|
||||
CPacket();
|
||||
CPacket(unsigned short Len_In, unsigned char Cmd_In, unsigned short State_In, unsigned short Error_In);
|
||||
CPacket(unsigned short Len_In, unsigned char Cmd_In, unsigned long Tick_In);
|
||||
~CPacket();
|
||||
|
||||
WSABUF GetWSABuf() {
|
||||
WSABUF WSABuf = { m_Len, m_Buffer };
|
||||
return WSABuf;
|
||||
}
|
||||
|
||||
char * GetBuf(void) { return m_Buffer; };
|
||||
|
||||
inline LONG AddRef() { return InterlockedIncrement(&m_nRefCount); }
|
||||
inline LONG Release();
|
||||
|
||||
bool WrapPacket(bool Crypt_In);
|
||||
|
||||
static CMemoryPool ms_PacketPool;
|
||||
static void* operator new(size_t size) { return ms_PacketPool.Alloc(size); }
|
||||
static void operator delete(void *ptr) { ms_PacketPool.Free(ptr); }
|
||||
};
|
||||
|
||||
typedef CPacket* LPCPacket;
|
||||
|
||||
inline LONG CPacket::Release()
|
||||
{
|
||||
LONG nRefCount = InterlockedDecrement(&m_nRefCount);
|
||||
if(0 == nRefCount)
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
|
||||
return nRefCount;
|
||||
}
|
||||
|
||||
#endif
|
||||
284
GameTools/GLOBALSCRIPT/Network/ClientSocket/Socket/Socket.cpp
Normal file
284
GameTools/GLOBALSCRIPT/Network/ClientSocket/Socket/Socket.cpp
Normal file
@@ -0,0 +1,284 @@
|
||||
#include "Socket.h"
|
||||
|
||||
void Socket::InitWinsock(void)
|
||||
{
|
||||
WSADATA WsaData;
|
||||
WSAStartup(MAKEWORD( 2, 2), &WsaData);
|
||||
}
|
||||
|
||||
void Socket::ReleaseWinsock(void)
|
||||
{
|
||||
WSACleanup();
|
||||
}
|
||||
|
||||
SOCKADDR_IN Socket::MakeSockAddr(char *IP_In, int Port_In)
|
||||
{
|
||||
SOCKADDR_IN Address = {0,};
|
||||
Address.sin_family = AF_INET;
|
||||
Address.sin_addr.s_addr = (NULL == IP_In) ? htonl(INADDR_ANY) : inet_addr(IP_In);
|
||||
Address.sin_port = (0 == Port_In) ? 0 : htons(Port_In);
|
||||
|
||||
return Address;
|
||||
}
|
||||
|
||||
SOCKADDR_IN Socket::MakeSockAddr(IN_ADDR Addr, int Port_In)
|
||||
{
|
||||
SOCKADDR_IN Address = {0,};
|
||||
Address.sin_family = AF_INET;
|
||||
Address.sin_addr = Addr;
|
||||
Address.sin_port = (0 == Port_In) ? 0 : htons(Port_In);
|
||||
|
||||
return Address;
|
||||
}
|
||||
|
||||
bool Socket::CreateTCPSocket(SOCKET *Socket_Out, HWND hWnd_In, unsigned int Msg_In)
|
||||
{
|
||||
BOOL KeepAlive = TRUE;
|
||||
|
||||
linger Linger;
|
||||
Linger.l_onoff = 1;
|
||||
Linger.l_linger = 0;
|
||||
|
||||
if(Socket_Out == NULL)
|
||||
return false;
|
||||
|
||||
if((*Socket_Out = socket(AF_INET, SOCK_STREAM, IPPROTO_IP)) == SOCKET_ERROR)
|
||||
return false;
|
||||
|
||||
if(setsockopt(*Socket_Out, SOL_SOCKET, SO_KEEPALIVE, (char *)&KeepAlive, sizeof(BOOL)) == SOCKET_ERROR)
|
||||
return false;
|
||||
|
||||
if(setsockopt(*Socket_Out, SOL_SOCKET, SO_LINGER, (char *)&Linger, sizeof(linger)) == SOCKET_ERROR)
|
||||
return false;
|
||||
|
||||
if(WSAAsyncSelect(*Socket_Out, hWnd_In, Msg_In, FD_READ | FD_CONNECT | FD_CLOSE) == SOCKET_ERROR)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Socket::CreateUDPSocket(SOCKET *Socket_Out, SOCKADDR_IN Address_In, HWND hWnd_In, unsigned int Msg_In)
|
||||
{
|
||||
BOOL ReUseAddr = TRUE;
|
||||
if(Socket_Out == NULL)
|
||||
return false;
|
||||
|
||||
if((*Socket_Out = socket(AF_INET, SOCK_DGRAM, 0)) == SOCKET_ERROR)
|
||||
return false;
|
||||
|
||||
if(bind(*Socket_Out, (sockaddr *)&Address_In, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
|
||||
return false;
|
||||
|
||||
if(setsockopt(*Socket_Out, SOL_SOCKET, SO_REUSEADDR, (char *)&ReUseAddr, sizeof(BOOL)) == SOCKET_ERROR)
|
||||
return false;
|
||||
|
||||
if(WSAAsyncSelect(*Socket_Out, hWnd_In, Msg_In, FD_READ) == SOCKET_ERROR)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Socket::DeleteSocket(SOCKET *Socket_In, HWND hWnd_In)
|
||||
{
|
||||
if(Socket_In == NULL)
|
||||
return false;
|
||||
|
||||
WSAAsyncSelect(*Socket_In, hWnd_In, 0, 0);
|
||||
SAFE_CLOSESOCK(*Socket_In);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Socket::GetNATAddress(SOCKET Socket_In, SOCKADDR_IN *Address_Out, bool AllowVirtual)
|
||||
{
|
||||
int AddressSize = sizeof(SOCKADDR_IN);
|
||||
if(getsockname(Socket_In, (struct sockaddr *)Address_Out, &AddressSize) != SOCKET_ERROR)
|
||||
{
|
||||
char HostName[256];
|
||||
if(!gethostname(HostName, 255))
|
||||
{
|
||||
PHOSTENT pHost = gethostbyname(HostName);
|
||||
if(NULL == pHost)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
IN_ADDR& Addr = Address_Out->sin_addr;
|
||||
for(int Count = 0;pHost->h_addr_list[Count]; ++Count)
|
||||
{
|
||||
memcpy(&(Addr.S_un.S_addr), pHost->h_addr_list[Count], sizeof(IN_ADDR));
|
||||
|
||||
if(!AllowVirtual)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE>
|
||||
// 10.0.0.0 ~ 10.255.255.255
|
||||
// 172.16.0.0 ~ 172.31.255.255
|
||||
// 192.168.0.0 ~ 192.168.255.255
|
||||
if((unsigned char)10 == Addr.S_un.S_un_b.s_b1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else if((unsigned char)172 == Addr.S_un.S_un_b.s_b1)
|
||||
{
|
||||
if(Addr.S_un.S_un_b.s_b2 >= (unsigned char)16 && Addr.S_un.S_un_b.s_b2 <= (unsigned char)31)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if((unsigned char)192 == Addr.S_un.S_un_b.s_b1)
|
||||
{
|
||||
if((unsigned char)168 == Addr.S_un.S_un_b.s_b2)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// <20>߸<EFBFBD><DFB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 169.X.X.X <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD> ( SyGate )
|
||||
// 0.X.X.X
|
||||
if((unsigned char)169 == Addr.S_un.S_un_b.s_b1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else if((unsigned char)0 == Addr.S_un.S_un_b.s_b1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if(0 != Count)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Socket::GetHostName(char *Name_Out, int Size)
|
||||
{
|
||||
if(!gethostname(Name_Out, Size))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Socket::GetHostIP(IN_ADDR &Addr, bool AllowVirtual)
|
||||
{
|
||||
char HostName[256];
|
||||
if(!gethostname(HostName, 255))
|
||||
{
|
||||
PHOSTENT pHost = gethostbyname(HostName);
|
||||
if(NULL == pHost)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
for(int Count = 0;pHost->h_addr_list[Count]; ++Count)
|
||||
{
|
||||
memcpy(&(Addr.S_un.S_addr), pHost->h_addr_list[Count], sizeof(IN_ADDR));
|
||||
|
||||
if(!AllowVirtual)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE>
|
||||
// 10.0.0.0 ~ 10.255.255.255
|
||||
// 172.16.0.0 ~ 172.31.255.255
|
||||
// 192.168.0.0 ~ 192.168.255.255
|
||||
if((unsigned char)10 == Addr.S_un.S_un_b.s_b1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else if((unsigned char)172 == Addr.S_un.S_un_b.s_b1)
|
||||
{
|
||||
if(Addr.S_un.S_un_b.s_b2 >= (unsigned char)16 && Addr.S_un.S_un_b.s_b2 <= (unsigned char)31)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if((unsigned char)192 == Addr.S_un.S_un_b.s_b1)
|
||||
{
|
||||
if((unsigned char)168 == Addr.S_un.S_un_b.s_b2)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// <20>߸<EFBFBD><DFB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 169.X.X.X <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD> ( SyGate )
|
||||
// 0.X.X.X
|
||||
if((unsigned char)169 == Addr.S_un.S_un_b.s_b1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else if((unsigned char)0 == Addr.S_un.S_un_b.s_b1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if(0 != Count)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Socket::GetHostIP(IN_ADDR &Addr, char *Domain)
|
||||
{
|
||||
PHOSTENT pHost = gethostbyname(Domain);
|
||||
if(NULL == pHost)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
memcpy(&(Addr.S_un.S_addr), pHost->h_addr_list[0], sizeof(IN_ADDR));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Socket::IsWrongIP(IN_ADDR &Addr)
|
||||
{
|
||||
if((unsigned char)169 == Addr.S_un.S_un_b.s_b1)
|
||||
{
|
||||
if((unsigned char)254 == Addr.S_un.S_un_b.s_b2)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if((unsigned char)0 == Addr.S_un.S_un_b.s_b1)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Socket::IsEmptyAddr(IN_ADDR &Addr)
|
||||
{
|
||||
if((unsigned char)0 == Addr.S_un.S_un_b.s_b1)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Socket::Connect(SOCKET Socket_In, SOCKADDR_IN Address_In, WSABUF *WSABuf_In)
|
||||
{
|
||||
if(WSAConnect(Socket_In, (sockaddr *)&Address_In, sizeof(SOCKADDR_IN), 0, WSABuf_In, 0, 0) == SOCKET_ERROR)
|
||||
{
|
||||
DWORD dwError = GetLastError();
|
||||
|
||||
if(ERROR_IO_PENDING != dwError && WSAEWOULDBLOCK != (int)dwError)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
33
GameTools/GLOBALSCRIPT/Network/ClientSocket/Socket/Socket.h
Normal file
33
GameTools/GLOBALSCRIPT/Network/ClientSocket/Socket/Socket.h
Normal file
@@ -0,0 +1,33 @@
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <winsock2.h>
|
||||
#include <iphlpapi.h>
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#define SelectEvent(dwError) WSAGETSELECTEVENT(dwError)
|
||||
#define SelectError(dwError) WSAGETSELECTERROR(dwError)
|
||||
|
||||
#define SAFE_CLOSESOCK(p) { if (INVALID_SOCKET != (p)) { closesocket(p); (p) = INVALID_SOCKET; } }
|
||||
|
||||
namespace Socket
|
||||
{
|
||||
void InitWinsock(void);
|
||||
void ReleaseWinsock(void);
|
||||
|
||||
SOCKADDR_IN MakeSockAddr(IN_ADDR Addr, int Port_In);
|
||||
SOCKADDR_IN MakeSockAddr(char *IP_In, int Port_In);
|
||||
|
||||
bool CreateTCPSocket(SOCKET *Socket_Out, HWND hWnd_In, unsigned int Msg_In);
|
||||
bool CreateUDPSocket(SOCKET *Socket_Out, SOCKADDR_IN Address_In, HWND hWnd_In, unsigned int Msg_In);
|
||||
bool DeleteSocket(SOCKET *Socket_In, HWND hWnd_In);
|
||||
|
||||
bool GetNATAddress(SOCKET Socket_In, SOCKADDR_IN *Address_Out, bool AllowVirtual);
|
||||
bool GetHostName(char *Name_Out, int Size);
|
||||
bool GetHostIP(IN_ADDR &Addr, bool AllowVirtual);
|
||||
bool GetHostIP(IN_ADDR &Addr, char *Domain);
|
||||
|
||||
bool IsWrongIP(IN_ADDR &Addr);
|
||||
bool IsEmptyAddr(IN_ADDR &Addr);
|
||||
|
||||
bool Connect(SOCKET Socket_In, SOCKADDR_IN Address_In, WSABUF *WSABuf_In);
|
||||
};
|
||||
191
GameTools/GLOBALSCRIPT/Network/ClientSocket/Socket/SocketIO.cpp
Normal file
191
GameTools/GLOBALSCRIPT/Network/ClientSocket/Socket/SocketIO.cpp
Normal file
@@ -0,0 +1,191 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// SocketIO Class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#include "SocketIO.h"
|
||||
|
||||
#include <Network/XORCrypt/XORCrypt.h>
|
||||
#include <Utility/Compress/MiniLZO/MiniLZOWrapper.h>
|
||||
|
||||
SocketIO::SocketIO(void)
|
||||
: m_ServerState(ServerInfo::SS_SMOOTH), m_PacketCount(0), m_Crypt(CXORCrypt::GetInstance())
|
||||
{
|
||||
Socket::InitWinsock();
|
||||
}
|
||||
|
||||
SocketIO::~SocketIO(void)
|
||||
{
|
||||
Socket::ReleaseWinsock();
|
||||
}
|
||||
|
||||
int SocketIO::Send(SOCKET Socket_In, WSABUF SendData_In)
|
||||
{
|
||||
int send_byte;
|
||||
|
||||
send_byte = send(Socket_In, (char *)SendData_In.buf, SendData_In.len, 0);
|
||||
if(send_byte == SOCKET_ERROR || (int)SendData_In.len != send_byte)
|
||||
return 0;
|
||||
|
||||
return send_byte;
|
||||
}
|
||||
|
||||
int SocketIO::SendTo(SOCKET Socket_In, SOCKADDR_IN Addreess_In, WSABUF SendData_In)
|
||||
{
|
||||
int AddressSize = sizeof(SOCKADDR_IN);
|
||||
int send_byte = 0;
|
||||
|
||||
send_byte = sendto(Socket_In, (char *)SendData_In.buf, SendData_In.len, 0, (struct sockaddr *)&Addreess_In, AddressSize);
|
||||
if(send_byte == SOCKET_ERROR || (int)SendData_In.len != send_byte)
|
||||
return 0;
|
||||
|
||||
return send_byte;
|
||||
}
|
||||
|
||||
int SocketIO::Recv(SOCKET Socket_In, WSABUF &RecvData_In)
|
||||
{
|
||||
DWORD recv_byte;
|
||||
|
||||
if((recv_byte = recv(Socket_In, RecvData_In.buf, BufferSize, 0)) != SOCKET_ERROR)
|
||||
{
|
||||
RecvData_In.len = recv_byte;
|
||||
return recv_byte;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SocketIO::RecvFrom(SOCKET Socket_In, WSABUF &RecvData_In, LPSOCKADDR_IN Address_Out)
|
||||
{
|
||||
int AddressSize = sizeof(SOCKADDR_IN);
|
||||
|
||||
DWORD recv_byte;
|
||||
|
||||
if((recv_byte = recvfrom(Socket_In, RecvData_In.buf, BufferSize, 0, (struct sockaddr *)Address_Out, &AddressSize)) != SOCKET_ERROR)
|
||||
{
|
||||
RecvData_In.len = recv_byte;
|
||||
return recv_byte;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SocketIO::PutRecvBufferToPtBuffer(char *pBuffer_Out, int BufferSize_In, WSABUF &RecvData_In, char *RecvBuffer_In, unsigned short PageVer_In, unsigned char PageNum_In)
|
||||
{
|
||||
LPPktBase lpPktBase = NULL;;
|
||||
if(pBuffer_Out == NULL || RecvData_In.len == 0)
|
||||
return false;
|
||||
|
||||
try
|
||||
{
|
||||
lpPktBase = (LPPktBase)RecvData_In.buf;
|
||||
|
||||
if(lpPktBase->GetStartBit() != StartBit)
|
||||
{
|
||||
// <20><>Ŷ <20><><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
if(RecvData_In.buf != RecvBuffer_In)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> ( <20><>Ŷ <20><><EFBFBD><EFBFBD> )
|
||||
RecvData_In.len = static_cast<u_long>((RecvData_In.buf - RecvBuffer_In) + RecvData_In.len);
|
||||
RecvData_In.buf = RecvBuffer_In;
|
||||
}
|
||||
else
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߸<EFBFBD><DFB8><EFBFBD> <20><>Ŷ ( <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> )
|
||||
|
||||
RecvData_In.len = 0;
|
||||
RecvData_In.buf = RecvBuffer_In;
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
lpPktBase = (LPPktBase)RecvData_In.buf;
|
||||
if(lpPktBase->GetStartBit() == StartBit)
|
||||
{
|
||||
// <20><><EFBFBD>ڵ<EFBFBD> <20>ش<EFBFBD>
|
||||
if(RecvData_In.len < PktBaseSize)
|
||||
{
|
||||
// <20>߸<EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD> )
|
||||
RecvData_In.buf = RecvData_In.buf + RecvData_In.len;
|
||||
RecvData_In.len = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
m_Crypt.DecodeHeader((char *)lpPktBase + 1, PktBaseSize - 1, PageVer_In, PageNum_In);
|
||||
|
||||
unsigned short PacketLength = lpPktBase->GetLen();
|
||||
if(PktMinLen <= PacketLength && PacketLength <= PktMaxLen)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
if(PacketLength <= RecvData_In.len)
|
||||
{
|
||||
if(lpPktBase->IsCrypt())
|
||||
{
|
||||
m_Crypt.DecodePacket((char *)lpPktBase + PktBaseSize, PacketLength - PktBaseSize, lpPktBase->GetCodePage());
|
||||
}
|
||||
|
||||
if(lpPktBase->IsCompress())
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><>Ŷ ó<><C3B3>
|
||||
DWORD Len = BufferSize_In;
|
||||
|
||||
CopyMemory(pBuffer_Out, (char *)lpPktBase, PktBaseSize);
|
||||
CMiniLZOCompress::Decompress((char *)lpPktBase + PktBaseSize, PacketLength - PktBaseSize, pBuffer_Out + PktBaseSize, &Len);
|
||||
lpPktBase->SetLen((unsigned short)Len + PktBaseSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
// <20><> <20><><EFBFBD><EFBFBD> <20><>Ŷ ó<><C3B3>
|
||||
CopyMemory(pBuffer_Out, (char *)lpPktBase, PacketLength);
|
||||
}
|
||||
|
||||
RecvData_In.len = RecvData_In.len - PacketLength;
|
||||
if(RecvData_In.len)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
CopyMemory((char *)lpPktBase, (char *)lpPktBase + PacketLength, RecvData_In.len);
|
||||
}
|
||||
|
||||
return PacketLength;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Crypt.EncodeHeader((char *)lpPktBase + 1, PktBaseSize - 1, PageVer_In, PageNum_In);
|
||||
|
||||
// <20>߸<EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD> )
|
||||
RecvData_In.buf = RecvData_In.buf + RecvData_In.len;
|
||||
RecvData_In.len = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
RecvData_In.buf = RecvBuffer_In;
|
||||
RecvData_In.len = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// <20>߸<EFBFBD><DFB8><EFBFBD> <20><>Ŷ ( <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> )
|
||||
|
||||
RecvData_In.buf = RecvBuffer_In;
|
||||
RecvData_In.len = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// SocketIO Class
|
||||
//
|
||||
// Last Update : 2002. 8. 28
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#ifndef _SocketIO
|
||||
#define _SocketIO
|
||||
|
||||
#include "Socket.h"
|
||||
#include <Network/Packet/PacketBase.h>
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
class CXORCrypt;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
const unsigned int BufferSize = 8192 * 100;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
class SocketIO
|
||||
{
|
||||
private:
|
||||
ServerInfo::ServerState m_ServerState;
|
||||
unsigned long m_PacketCount;
|
||||
|
||||
CXORCrypt& m_Crypt;
|
||||
|
||||
public:
|
||||
SocketIO(void);
|
||||
virtual ~SocketIO(void);
|
||||
|
||||
int Send(SOCKET Socket_In, WSABUF SendData_In);
|
||||
int SendTo(SOCKET Socket_In, SOCKADDR_IN Addreess_In, WSABUF SendData_In);
|
||||
|
||||
int Recv(SOCKET Socket_In, WSABUF &RecvData_In);
|
||||
int RecvFrom(SOCKET Socket_In, WSABUF &RecvData_In, LPSOCKADDR_IN Address_Out);
|
||||
|
||||
int PutRecvBufferToPtBuffer(char *pBuffer_Out, int BufferSize_In, WSABUF &RecvData_In, char *RecvBuffer_In, unsigned short PageVer_In, unsigned char PageNum_In);
|
||||
|
||||
inline char* InsertPtCount(char *Buffer_In);
|
||||
inline unsigned long ExtractPtCount(char *Buffer_In);
|
||||
|
||||
inline bool CheckServerState();
|
||||
};
|
||||
|
||||
inline char* SocketIO::InsertPtCount(char *Buffer_In)
|
||||
{
|
||||
((PktBase* )Buffer_In)->SetServerInfo(m_PacketCount);
|
||||
|
||||
if(++m_PacketCount >= 0xFFFFFFF0)
|
||||
m_PacketCount = 0;
|
||||
|
||||
return Buffer_In;
|
||||
}
|
||||
|
||||
inline unsigned long SocketIO::ExtractPtCount(char *Buffer_In)
|
||||
{
|
||||
PktBase* lpBasePt = (PktBase* )Buffer_In;
|
||||
return lpBasePt->GetServerInfo();
|
||||
}
|
||||
|
||||
inline bool SocketIO::CheckServerState()
|
||||
{
|
||||
if(m_ServerState == ServerInfo::SS_SMOOTH)
|
||||
return true;
|
||||
else if(m_ServerState == ServerInfo::SS_LOADED)
|
||||
{
|
||||
Sleep(25);
|
||||
return true;
|
||||
}
|
||||
else if(m_ServerState == ServerInfo::SS_BUSY)
|
||||
{
|
||||
Sleep(100);
|
||||
return true;
|
||||
}
|
||||
else if(m_ServerState == ServerInfo::SS_VERYBUSY)
|
||||
{
|
||||
Sleep(300);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
||||
475
GameTools/GLOBALSCRIPT/Network/ClientSocket/UDPList/T_List.h
Normal file
475
GameTools/GLOBALSCRIPT/Network/ClientSocket/UDPList/T_List.h
Normal file
@@ -0,0 +1,475 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>ø<EFBFBD>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#ifndef _TList
|
||||
#define _TList
|
||||
|
||||
#pragma warning(disable:4786) // don't warn about browse name overflow.
|
||||
|
||||
#define LPLIST LIST*
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><><EFBFBD>ø<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
template <class LIST> class TList
|
||||
{
|
||||
public:
|
||||
LIST* m_pListHead;
|
||||
LIST* m_pListTail;
|
||||
|
||||
LIST* m_pGarbageTop;
|
||||
|
||||
int m_ListCount;
|
||||
|
||||
int m_GarbageLength;
|
||||
int m_GarbageCount;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20>⺻ Ŭ<><C5AC><EFBFBD><EFBFBD> <20>ҵ<DEBC>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
public:
|
||||
TList(void);
|
||||
~TList(void);
|
||||
|
||||
inline bool IsListEmpty(void)
|
||||
{
|
||||
if(m_pListHead == NULL)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
inline int GetListCount(void)
|
||||
{
|
||||
return m_ListCount;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20>ҵ<DEBC>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
LIST* Create(void);
|
||||
bool Delete(LIST* pDelete_In);
|
||||
|
||||
bool InsertToList(LIST* pInsert_In);
|
||||
bool DeleteFromList(LIST* pDelete_In);
|
||||
bool DeleteAllFromList(void);
|
||||
|
||||
bool IsExistHandleFromList(LIST* pFind_In);
|
||||
LIST* GetHandleWithCount(int Count_In);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݷ<EFBFBD><DDB7><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ҵ<DEBC>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
bool PushItemToGarbage(LIST* pPush_In);
|
||||
LIST* PopItemFromGarbage(void);
|
||||
|
||||
bool SetGarbageStackLength(int StackLength_In);
|
||||
bool ClearGarbageStack(void);
|
||||
};
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TList <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [ public ]
|
||||
// - <20>ɹ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
template <class LIST> TList<LIST>::TList(void)
|
||||
{
|
||||
m_pListHead = NULL;
|
||||
m_pListTail = NULL;
|
||||
|
||||
m_pGarbageTop = NULL;
|
||||
|
||||
m_ListCount = 0;
|
||||
|
||||
m_GarbageLength = 0;
|
||||
m_GarbageCount = 0;
|
||||
}
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TList <20>Ҹ<EFBFBD><D2B8><EFBFBD> [ public ]
|
||||
// - <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
||||
// - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
template <class LIST> TList<LIST>::~TList(void)
|
||||
{
|
||||
if(m_pListHead != NULL)
|
||||
DeleteAllFromList();
|
||||
|
||||
if(m_pGarbageTop != NULL)
|
||||
ClearGarbageStack();
|
||||
}
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Create [ public ]
|
||||
// - <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// Parameter :
|
||||
//
|
||||
// Return:
|
||||
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
template <class LIST> LPLIST TList<LIST>::Create(void)
|
||||
{
|
||||
LPLIST pList = NULL;
|
||||
|
||||
if(m_GarbageCount)
|
||||
{
|
||||
if((pList = PopItemFromGarbage()) != NULL)
|
||||
{
|
||||
pList->pNext = NULL;
|
||||
|
||||
return pList;
|
||||
}
|
||||
}
|
||||
|
||||
pList = new LIST;
|
||||
|
||||
pList->pNext = NULL;
|
||||
|
||||
return pList;
|
||||
}
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Delete [ public ]
|
||||
// - <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// Parameter :
|
||||
// 1st : <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//
|
||||
// Return:
|
||||
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
template <class LIST> bool TList<LIST>::Delete(LPLIST pDelete_In)
|
||||
{
|
||||
if(pDelete_In == NULL)
|
||||
return false;
|
||||
|
||||
if(PushItemToGarbage(pDelete_In))
|
||||
return true;
|
||||
|
||||
delete pDelete_In;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// InsertToList [ public ]
|
||||
// - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>߰<EFBFBD>
|
||||
//
|
||||
// Parameter :
|
||||
// 1st : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//
|
||||
// Return:
|
||||
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
template <class LIST> bool TList<LIST>::InsertToList(LPLIST pInsert_In)
|
||||
{
|
||||
if(pInsert_In == NULL)
|
||||
return false;
|
||||
|
||||
if(m_pListHead == NULL)
|
||||
{
|
||||
m_pListHead = pInsert_In;
|
||||
m_pListTail = m_pListHead;
|
||||
|
||||
m_ListCount++;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
m_pListTail->pNext = pInsert_In;
|
||||
m_pListTail = pInsert_In;
|
||||
|
||||
m_ListCount++;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// DeleteFromList [ public ]
|
||||
// - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// Parameter :
|
||||
// 1st : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//
|
||||
// Return:
|
||||
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
template <class LIST> bool TList<LIST>::DeleteFromList(LPLIST pDelete_In)
|
||||
{
|
||||
LPLIST pPosition;
|
||||
|
||||
if(pDelete_In == NULL)
|
||||
return false;
|
||||
|
||||
if(m_pListHead == pDelete_In)
|
||||
{
|
||||
m_pListHead = m_pListHead->pNext;
|
||||
|
||||
if(Delete(pDelete_In))
|
||||
{
|
||||
m_ListCount--;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
for(pPosition = m_pListHead; pPosition; pPosition = pPosition->pNext)
|
||||
{
|
||||
if(pPosition->pNext == pDelete_In)
|
||||
{
|
||||
if(m_pListTail == pDelete_In)
|
||||
m_pListTail = pPosition;
|
||||
|
||||
pPosition->pNext = pDelete_In->pNext;
|
||||
|
||||
if(Delete(pDelete_In))
|
||||
{
|
||||
m_ListCount--;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// DeleteAllFromList [ public ]
|
||||
// - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// Parameter :
|
||||
//
|
||||
// Return:
|
||||
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
template <class LIST> bool TList<LIST>::DeleteAllFromList(void)
|
||||
{
|
||||
LPLIST pDelete;
|
||||
|
||||
while(m_pListHead)
|
||||
{
|
||||
pDelete = m_pListHead;
|
||||
m_pListHead = m_pListHead->pNext;
|
||||
|
||||
if(!Delete(pDelete))
|
||||
return false;
|
||||
}
|
||||
|
||||
m_ListCount = 0;
|
||||
m_pListTail = m_pListHead;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// IsExistHandleFromList [ public ]
|
||||
// - <20><><EFBFBD><EFBFBD>Ʈ Ȯ<><C8AE>
|
||||
//
|
||||
// Parameter :
|
||||
// 1st : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//
|
||||
// Return:
|
||||
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
template <class LIST> bool TList<LIST>::IsExistHandleFromList(LPLIST pFind_In)
|
||||
{
|
||||
LPLIST pPosition = m_pListHead;
|
||||
|
||||
while(pPosition)
|
||||
{
|
||||
if(pFind_In == pPosition)
|
||||
return true;
|
||||
|
||||
pPosition = pPosition->pNext;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// GetHandleWithCount [ public ]
|
||||
// - ī<><C4AB>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// Parameter :
|
||||
// 1st : ī<><C4AB>Ʈ
|
||||
//
|
||||
// Return:
|
||||
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
template <class LIST> LPLIST TList<LIST>::GetHandleWithCount(int Count_In)
|
||||
{
|
||||
LPLIST pList;
|
||||
int Counter;
|
||||
|
||||
for(Counter = 0, pList = NULL; Counter <= Count_In && pList; Counter++, pList = pList->pNext);
|
||||
|
||||
return pList;
|
||||
}
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// SetGarbageStackLength [ public ]
|
||||
// - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// Parameter :
|
||||
// 1st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// Return:
|
||||
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
template <class LIST> bool TList<LIST>::SetGarbageStackLength(int StackLength_In)
|
||||
{
|
||||
LPLIST pList;
|
||||
int Counter;
|
||||
|
||||
m_GarbageLength = StackLength_In;
|
||||
if(m_GarbageCount > m_GarbageLength)
|
||||
{
|
||||
for(Counter = m_GarbageCount; Counter > m_GarbageLength; Counter--)
|
||||
if(pList = PopItemFromGarbage())
|
||||
{
|
||||
delete pList;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
for(Counter = m_GarbageCount; Counter < m_GarbageLength; Counter++)
|
||||
{
|
||||
pList = new LIST;
|
||||
|
||||
if(!PushItemToGarbage(pList))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(m_GarbageCount == StackLength_In)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ClearGarbageStack [ public ]
|
||||
// - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// Parameter :
|
||||
//
|
||||
// Return:
|
||||
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
template <class LIST> bool TList<LIST>::ClearGarbageStack(void)
|
||||
{
|
||||
LPLIST pDelete;
|
||||
|
||||
if(m_pGarbageTop == NULL)
|
||||
return false;
|
||||
|
||||
while(m_pGarbageTop)
|
||||
{
|
||||
pDelete = m_pGarbageTop;
|
||||
m_pGarbageTop = m_pGarbageTop->pNext;
|
||||
|
||||
delete pDelete;
|
||||
}
|
||||
|
||||
m_GarbageCount = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PushItemToGarbage [ public ]
|
||||
// - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>߰<EFBFBD>
|
||||
//
|
||||
// Parameter :
|
||||
// 1st : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//
|
||||
// Return:
|
||||
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Succeed, <20>߸<EFBFBD><DFB8><EFBFBD> <20><><EFBFBD><EFBFBD> Parameter, <20><><EFBFBD><EFBFBD> <20><EFBFBD><DFBB><EFBFBD> Exception
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
template <class LIST> bool TList<LIST>::PushItemToGarbage(LPLIST pPush_In)
|
||||
{
|
||||
if(pPush_In == NULL || m_GarbageCount >= m_GarbageLength)
|
||||
return false;
|
||||
|
||||
if(m_pGarbageTop == NULL)
|
||||
{
|
||||
pPush_In->pNext = NULL;
|
||||
m_pGarbageTop = pPush_In;
|
||||
}
|
||||
else
|
||||
{
|
||||
pPush_In->pNext = m_pGarbageTop;
|
||||
m_pGarbageTop = pPush_In;
|
||||
}
|
||||
|
||||
m_GarbageCount++;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PopItemFromGarbage [ public ]
|
||||
// - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// Parameter :
|
||||
//
|
||||
// Return:
|
||||
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Parameter, <20><><EFBFBD><EFBFBD> <20><EFBFBD><DFBB><EFBFBD> Exception
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
template <class LIST> LPLIST TList<LIST>::PopItemFromGarbage(void)
|
||||
{
|
||||
LPLIST pPop;
|
||||
|
||||
if(m_pGarbageTop == NULL)
|
||||
return NULL;
|
||||
|
||||
pPop = m_pGarbageTop;
|
||||
m_pGarbageTop = m_pGarbageTop->pNext;
|
||||
|
||||
m_GarbageCount--;
|
||||
|
||||
return pPop;
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,14 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// UDPList
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#include "UDPList.h"
|
||||
|
||||
UDPList::UDPList(void)
|
||||
{
|
||||
}
|
||||
|
||||
UDPList::~UDPList(void)
|
||||
{
|
||||
}
|
||||
144
GameTools/GLOBALSCRIPT/Network/ClientSocket/UDPList/UDPList.h
Normal file
144
GameTools/GLOBALSCRIPT/Network/ClientSocket/UDPList/UDPList.h
Normal file
@@ -0,0 +1,144 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// UDPList
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#ifndef _CSocketHandleList
|
||||
#define _CSocketHandleList
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <winsock2.h>
|
||||
#include <winsock.h>
|
||||
|
||||
#include "T_List.h"
|
||||
|
||||
typedef enum _PEERTYPE
|
||||
{
|
||||
Not_Defined = 0, // <20><><EFBFBD><EFBFBD> <20>ȵ<EFBFBD>
|
||||
REAL_IP, // <20><><EFBFBD><EFBFBD> IP
|
||||
NAT_Friendly, // <20><><EFBFBD><EFBFBD> IP (<28><><EFBFBD><EFBFBD> NAT)
|
||||
NAT_Different // <20><><EFBFBD><EFBFBD> IP (<28>ٸ<EFBFBD> NAT)
|
||||
} PEERTYPE;
|
||||
|
||||
typedef struct _UDP_LIST
|
||||
{
|
||||
DWORD CharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
|
||||
PEERTYPE PeerType; // <20><><EFBFBD><EFBFBD> Ÿ<><C5B8>
|
||||
SOCKADDR_IN PublicAddress; // <20>ּ<EFBFBD> Public
|
||||
SOCKADDR_IN PrivateAddress; // <20>ּ<EFBFBD> Private
|
||||
|
||||
DWORD MoveTick; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD>
|
||||
|
||||
_UDP_LIST* pNext;
|
||||
}UDP_LIST, *LPUDP_LIST;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
class UDPList : public TList<UDP_LIST>
|
||||
{
|
||||
public:
|
||||
UDPList(void);
|
||||
~UDPList(void);
|
||||
|
||||
inline DWORD InsertIntoAddressList(DWORD CharID_In, SOCKADDR_IN PubAddress_In, SOCKADDR_IN PriAddress_In, PEERTYPE PeerType_In);
|
||||
inline bool DeleteFromAddressList(DWORD CharID_In);
|
||||
inline bool DeleteFromAddressList(SOCKADDR_IN Address_In);
|
||||
inline LPUDP_LIST SearchFromAddressList(DWORD CharID_In);
|
||||
inline LPUDP_LIST SearchFromAddressList(SOCKADDR_IN Address_In);
|
||||
};
|
||||
|
||||
inline DWORD UDPList::InsertIntoAddressList(DWORD CharID_In, SOCKADDR_IN PubAddress_In, SOCKADDR_IN PriAddress_In, PEERTYPE PeerType_In)
|
||||
{
|
||||
LPUDP_LIST lpList = SearchFromAddressList(CharID_In);
|
||||
if(lpList != NULL)
|
||||
{
|
||||
lpList->CharID = CharID_In;
|
||||
lpList->PublicAddress = PubAddress_In;
|
||||
lpList->PrivateAddress = PriAddress_In;
|
||||
lpList->PeerType = PeerType_In;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
lpList = Create();
|
||||
if(lpList != NULL)
|
||||
{
|
||||
lpList->CharID = CharID_In;
|
||||
lpList->PublicAddress = PubAddress_In;
|
||||
lpList->PrivateAddress = PriAddress_In;
|
||||
lpList->PeerType = PeerType_In;
|
||||
|
||||
InsertToList(lpList);
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline bool UDPList::DeleteFromAddressList(DWORD CharID_In)
|
||||
{
|
||||
LPUDP_LIST lpList = SearchFromAddressList(CharID_In);
|
||||
if(lpList != NULL)
|
||||
{
|
||||
DeleteFromList(lpList);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
inline bool UDPList::DeleteFromAddressList(SOCKADDR_IN Address_In)
|
||||
{
|
||||
LPUDP_LIST lpList = SearchFromAddressList(Address_In);
|
||||
if(lpList != NULL)
|
||||
{
|
||||
DeleteFromList(lpList);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
inline LPUDP_LIST UDPList::SearchFromAddressList(DWORD CharID_In)
|
||||
{
|
||||
LPUDP_LIST lpList;
|
||||
|
||||
lpList = m_pListHead;
|
||||
while(lpList)
|
||||
{
|
||||
if(lpList->CharID == CharID_In)
|
||||
return lpList;
|
||||
|
||||
lpList = lpList->pNext;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
inline LPUDP_LIST UDPList::SearchFromAddressList(SOCKADDR_IN Address_In)
|
||||
{
|
||||
LPUDP_LIST lpList;
|
||||
|
||||
lpList = m_pListHead;
|
||||
while(lpList)
|
||||
{
|
||||
if(lpList->PrivateAddress.sin_addr.S_un.S_addr == Address_In.sin_addr.S_un.S_addr && lpList->PrivateAddress.sin_port == Address_In.sin_port)
|
||||
return lpList;
|
||||
|
||||
if(lpList->PublicAddress.sin_addr.S_un.S_addr == Address_In.sin_addr.S_un.S_addr && lpList->PublicAddress.sin_port == Address_In.sin_port)
|
||||
return lpList;
|
||||
|
||||
lpList = lpList->pNext;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif
|
||||
2
GameTools/GLOBALSCRIPT/Network/Packet/PacketBase.cpp
Normal file
2
GameTools/GLOBALSCRIPT/Network/Packet/PacketBase.cpp
Normal file
@@ -0,0 +1,2 @@
|
||||
#include "stdafx.h"
|
||||
#include "PacketBase.h"
|
||||
143
GameTools/GLOBALSCRIPT/Network/Packet/PacketBase.h
Normal file
143
GameTools/GLOBALSCRIPT/Network/Packet/PacketBase.h
Normal file
@@ -0,0 +1,143 @@
|
||||
#ifndef _PACKET_BASE
|
||||
#define _PACKET_BASE
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>۸<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// SS_SMOOTH : <20><>Ȱ<EFBFBD><C8B0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// SS_LOADED : <20>ణ<EFBFBD><E0B0A3> <20><><EFBFBD>ϰ<EFBFBD> <20>ֽ<EFBFBD>. (50 % of bufferring)
|
||||
// SS_BUSY : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD> <20>ֽ<EFBFBD>. (70 % of bufferring)
|
||||
// SS_VERYBUSY : <20>ؽ<EFBFBD><D8BD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><>Ŷ <20>ս<EFBFBD><D5BD><EFBFBD> <20>ʷ<EFBFBD><CAB7><EFBFBD> <20><> <20>ֽ<EFBFBD>.)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
union ServerInfo
|
||||
{
|
||||
enum ServerState
|
||||
{
|
||||
SS_SMOOTH, SS_LOADED, SS_BUSY, SS_VERYBUSY
|
||||
};
|
||||
|
||||
struct sSrvState
|
||||
{
|
||||
unsigned short wError; // <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
|
||||
unsigned short wSrvState; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
sSrvState SrvState;
|
||||
unsigned long dwServerInfo;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// <20>⺻ <20><>Ŷ
|
||||
#pragma pack(1)
|
||||
|
||||
struct PktBase
|
||||
{
|
||||
typedef unsigned char StartType;
|
||||
typedef unsigned char CMDType;
|
||||
typedef unsigned short LengthType;
|
||||
|
||||
protected:
|
||||
StartType m_StartBit;
|
||||
CMDType m_Cmd;
|
||||
LengthType m_Len; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned long m_CodePage;
|
||||
ServerInfo m_SrvInfo;
|
||||
|
||||
public:
|
||||
|
||||
inline void InitPtHead(unsigned short Len_In, unsigned char Cmd_In,
|
||||
unsigned short State_In, unsigned short Error_In);
|
||||
|
||||
inline void InitPtHead(unsigned short Len_In, unsigned char Cmd_In, unsigned long Tick_In);
|
||||
|
||||
inline unsigned short Error(void) { return m_SrvInfo.SrvState.wError; }
|
||||
inline void SetError(unsigned short Error) { m_SrvInfo.SrvState.wError = Error; }
|
||||
inline unsigned short GetError(void) { return m_SrvInfo.SrvState.wError; }
|
||||
|
||||
inline StartType GetStartBit(void) { return m_StartBit; }
|
||||
|
||||
inline void SetCodePage(unsigned long Code) { m_CodePage = Code; }
|
||||
inline unsigned long GetCodePage(void) { return m_CodePage; }
|
||||
|
||||
inline void SetServerInfo(unsigned long Info) { m_SrvInfo.dwServerInfo = Info; }
|
||||
inline unsigned long GetServerInfo(void) { return m_SrvInfo.dwServerInfo; }
|
||||
|
||||
inline CMDType GetCmd(void) { return m_Cmd; }
|
||||
|
||||
inline bool IsCrypt(void);
|
||||
inline void SetCrypt(void);
|
||||
inline bool IsCompress(void);
|
||||
inline void SetCompress(void);
|
||||
inline LengthType GetUncompressLen(void);
|
||||
|
||||
inline void SetLen(LengthType Len);
|
||||
inline LengthType GetLen(void);
|
||||
};
|
||||
typedef PktBase* LPPktBase;
|
||||
|
||||
#pragma pack()
|
||||
|
||||
|
||||
const unsigned int PktBaseSize = sizeof(PktBase);
|
||||
const PktBase::StartType StartBit = 0xFF; // <20><><EFBFBD><EFBFBD> <20><>Ʈ
|
||||
const PktBase::LengthType Crypt = 0x8000; // <20><>ȣȭ <20><><EFBFBD><EFBFBD> - 1000B
|
||||
const PktBase::LengthType Compress = 0x4000; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - 0100B
|
||||
const PktBase::LengthType LengthHdr = 0xC000; // 1100B
|
||||
const PktBase::LengthType LengthMask = 0x3FFF; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EEB3BB> <20><><EFBFBD><EFBFBD>ũ <20><>. <20><><EFBFBD><EFBFBD> 14<31><34>Ʈ. <20>ִ<EFBFBD> 16383byte.
|
||||
const PktBase::LengthType PktMinLen = sizeof(PktBase);
|
||||
const PktBase::LengthType PktMaxLen = 16383;
|
||||
|
||||
inline bool PktBase::IsCrypt(void) { return ((m_Len & Crypt) == Crypt) ? true : false; }
|
||||
inline void PktBase::SetCrypt(void) { m_Len |= Crypt; }
|
||||
|
||||
inline bool PktBase::IsCompress(void) { return ((m_Len & Compress) == Compress) ? true : false; }
|
||||
inline void PktBase::SetCompress(void) { m_Len |= Compress; }
|
||||
inline PktBase::LengthType PktBase::GetUncompressLen(void) { return PktMaxLen; }
|
||||
|
||||
inline void PktBase::SetLen(PktBase::LengthType Len) { m_Len = (m_Len & LengthHdr) | Len; }
|
||||
inline PktBase::LengthType PktBase::GetLen(void) { return m_Len & LengthMask; }
|
||||
|
||||
|
||||
|
||||
//Interface/////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><>Ŷ <20>ش<EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
//
|
||||
// Parameter :
|
||||
// 1st : <20><><EFBFBD><EFBFBD>[In]
|
||||
// 2st : Ŀ<>ǵ<EFBFBD>[In]
|
||||
// 3st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[In]
|
||||
// 4st : <20><><EFBFBD><EFBFBD>[In]
|
||||
//
|
||||
// Return :
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
inline void PktBase::InitPtHead(unsigned short Len_In, unsigned char Cmd_In,
|
||||
unsigned short State_In, unsigned short Error_In)
|
||||
{
|
||||
m_StartBit = StartBit;
|
||||
m_Cmd = Cmd_In;
|
||||
m_Len = Len_In;
|
||||
m_CodePage = 0;
|
||||
m_SrvInfo.SrvState.wSrvState = State_In;
|
||||
m_SrvInfo.SrvState.wError = Error_In;
|
||||
}
|
||||
|
||||
inline void PktBase::InitPtHead(unsigned short Len_In, unsigned char Cmd_In, unsigned long Tick_In)
|
||||
{
|
||||
m_StartBit = StartBit;
|
||||
m_Cmd = Cmd_In;
|
||||
m_Len = Len_In;
|
||||
m_CodePage = 0;
|
||||
m_SrvInfo.dwServerInfo = Tick_In;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
141
GameTools/GLOBALSCRIPT/Network/Packet/PacketCommand.h
Normal file
141
GameTools/GLOBALSCRIPT/Network/Packet/PacketCommand.h
Normal file
@@ -0,0 +1,141 @@
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><>Ŷ Ŀ<>ǵ<EFBFBD>
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#ifndef _PACKET_COMMAND_H_
|
||||
#define _PACKET_COMMAND_H_
|
||||
|
||||
#include "PacketBase.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Ŀ<>ǵ<EFBFBD>
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
const PktBase::CMDType CmdNull = 0x00;
|
||||
|
||||
const PktBase::CMDType CmdAuthAccount = 0x01; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
const PktBase::CMDType CmdServerGroup = 0x02; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
const PktBase::CMDType CmdUserLogin = 0x03; // <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
|
||||
const PktBase::CMDType CmdUserKill = 0x04; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
const PktBase::CMDType CmdCharSelect = 0x05; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharCreate = 0x06; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharDelete = 0x07; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
const PktBase::CMDType CmdCharLogin = 0x08; // ij<><C4B3><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
|
||||
const PktBase::CMDType CmdCharSuicide = 0x09; // ij<><C4B3><EFBFBD><EFBFBD> <20>ڻ<EFBFBD>
|
||||
const PktBase::CMDType CmdCharRespawn = 0x0A; // ij<><C4B3><EFBFBD><EFBFBD> <20><>Ȱ
|
||||
const PktBase::CMDType CmdCharMove = 0x0B; // ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> (P2P)
|
||||
const PktBase::CMDType CmdCharMoveUpdate = 0x0C; // ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||
const PktBase::CMDType CmdCharChat = 0x0D; // ij<><C4B3><EFBFBD><EFBFBD> ä<><C3A4> (P2P)
|
||||
const PktBase::CMDType CmdCharAttack = 0x0E; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharCastObject = 0x0F; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharUseSkill = 0x10; // ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharTakeItem = 0x11; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharSwapItem = 0x12; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharRepairItem = 0x13; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharUseItem = 0x14; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharTradeItem = 0x15; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ŷ<EFBFBD>
|
||||
const PktBase::CMDType CmdCharSkillLock = 0x16; // ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><>
|
||||
const PktBase::CMDType CmdCharSkillCreate = 0x17; // ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharSkillErase = 0x18; // ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharClassUpgrade = 0x19; // ij<><C4B3><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><D7B7>̵<EFBFBD>
|
||||
const PktBase::CMDType CmdCharShapeInfo = 0x1A; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (P2P)
|
||||
const PktBase::CMDType CmdCharIncreasePoint = 0x1B; // ij<><C4B3><EFBFBD><EFBFBD> <20>ɷ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharBindPosition = 0x1C; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>ε<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharRequireInfo = 0x1D; // ij<><C4B3><EFBFBD><EFBFBD> <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û
|
||||
const PktBase::CMDType CmdCharUpdateAddress = 0x1E; // ij<><C4B3><EFBFBD><EFBFBD> UDP <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||
const PktBase::CMDType CmdCharPartyCmd = 0x1F; // ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharPartyMemInfo = 0x20; // ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ <20>ɹ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (P2P)
|
||||
const PktBase::CMDType CmdCharExchangeCmd = 0x21; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdSysConnectAgent = 0x22; // <20>ý<EFBFBD><C3BD><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD> (UDP <20>߰<EFBFBD>) # <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdSysPacketTransmit = 0x23; // <20>ý<EFBFBD><C3BD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> (UDP <20>߰<EFBFBD>) # <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharLogout = 0x24; // ij<><C4B3><EFBFBD><EFBFBD> <20>α<EFBFBD> <20>ƿ<EFBFBD>
|
||||
const PktBase::CMDType CmdDBGetData = 0x25; // DB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdDBUpdateData = 0x26; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ DB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdAgentParty = 0x27; // DB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><>Ƽ
|
||||
const PktBase::CMDType CmdSysServerLogin = 0x28; // <20>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
|
||||
|
||||
const PktBase::CMDType CmdServerZone = 0x29; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
const PktBase::CMDType CmdGameCellInfo = 0x2A; // <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>)
|
||||
const PktBase::CMDType CmdCharInfo = 0x2B; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> # <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharAddressInfo = 0x2C; // ij<><C4B3><EFBFBD><EFBFBD> UDP <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharCellLogin = 0x2D; // ij<><C4B3><EFBFBD><EFBFBD> <20><> <20>α<EFBFBD><CEB1><EFBFBD>
|
||||
const PktBase::CMDType CmdCharCellLogout = 0x2E; // ij<><C4B3><EFBFBD><EFBFBD> <20><> <20>αƿ<D7BE>
|
||||
const PktBase::CMDType CmdMonMove = 0x2F; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
|
||||
const PktBase::CMDType CmdCharAttackInfo = 0x30; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (P2P)
|
||||
const PktBase::CMDType CmdCharAttacked = 0x31; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharAward = 0x32; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharItemInfo = 0x33; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharPickUp = 0x34; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharPullDown = 0x35; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharPickUpInfo = 0x36; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharPullDownInfo = 0x37; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharCastObjectInfo = 0x38; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharInstallSocket = 0x39; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ
|
||||
const PktBase::CMDType CmdCharLevelUp = 0x3A; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
|
||||
const PktBase::CMDType CmdCharPartyInfo = 0x3B; // ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharUpgradeItem = 0x3C; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><D7B7>̵<EFBFBD>
|
||||
const PktBase::CMDType CmdCharHPRegen = 0x3D; // ij<><C4B3><EFBFBD><EFBFBD> HP <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharLevelUpInfo = 0x3E; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharSplitItem = 0x3F; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>ø<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ΰ<EFBFBD><CEB0><EFBFBD> <20>ɰ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
|
||||
const PktBase::CMDType CmdUpdateUIDTable = 0x40; // UID <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||
const PktBase::CMDType CmdCharQuickSlotMove = 0x41; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
|
||||
const PktBase::CMDType CmdCharSwitchHand = 0x42; // <20><> <20>ٲٱ<D9B2>
|
||||
const PktBase::CMDType CmdSysMngerRegistry = 0x43; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdSysMngerRequest = 0x44; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û
|
||||
const PktBase::CMDType CmdSysMngerResponse = 0x45; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharTakeItems = 0x46; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>)
|
||||
const PktBase::CMDType CmdCharTakeGold = 0x47; // ij<><C4B3><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharExchangeItem = 0x48; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ
|
||||
const PktBase::CMDType CmdCellBroadCasting = 0x49; // <20><> <20><><EFBFBD>ε<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdSysPatchAddress = 0x4A; // <20><>ġ <20>ּ<EFBFBD>
|
||||
const PktBase::CMDType CmdCharPartyCmdInfo = 0x4B; // <20><>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdServerLog = 0x4C; // <20>α<EFBFBD> <20><><EFBFBD><EFBFBD> (???)
|
||||
const PktBase::CMDType CmdCharWhisper = 0x4D; // ij<><C4B3><EFBFBD><EFBFBD> <20>ӼӸ<D3BC>
|
||||
const PktBase::CMDType CmdSysServerVerUpdate = 0x4E; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||
const PktBase::CMDType CmdSysMng = 0x4F; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>Ŷ (<28>ӽ<EFBFBD> (???)
|
||||
const PktBase::CMDType CmdSysChannelUpdate = 0x50; // <20><><EFBFBD><EFBFBD> ä<><C3A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||
const PktBase::CMDType CmdCharPartyFind = 0x51; // <20><>Ƽ ã<><C3A3>
|
||||
const PktBase::CMDType CmdCharPartyMemData = 0x52; // <20><>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharControlOption = 0x53; // ij<><C4B3><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharDuelCmd = 0x54; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharFameInfo = 0x55; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
const PktBase::CMDType CmdLoginServerList = 0x56; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ #!! <20><>ȣ <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD> !!#
|
||||
|
||||
const PktBase::CMDType CmdCharSpellInfo = 0x57; // ij<><C4B3><EFBFBD><EFBFBD> æƮ&<26><>æƮ <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharSkillUnLock = 0x58; // ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdSysPing = 0x59; // <20><><EFBFBD><EFBFBD> <20><> <20><>Ŷ
|
||||
const PktBase::CMDType CmdCharMoveZone = 0x5A; // <20><> <20>̵<EFBFBD>
|
||||
|
||||
const PktBase::CMDType CmdAgentZone = 0x5B; // <20><> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
const PktBase::CMDType CmdDeposit = 0x5C; // â<><C3A2> ó<><C3B3> <20><>Ŷ(Client <--> GameServer)
|
||||
const PktBase::CMDType CmdDepositUpdate = 0x5D; // â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><>Ŷ(GameServer <--> DBAgent)
|
||||
|
||||
const PktBase::CMDType CmdCharStallOpen = 0x5E; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharStallRegisterItem = 0x5F; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharStallEnter = 0x60; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdCharStallItemInfo = 0x61; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
const PktBase::CMDType CmdCharAdminCmd = 0x62; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
const PktBase::CMDType CmdCharTeamBattleInfo = 0x63; // <20><><EFBFBD><EFBFBD>Ʋ <20><><EFBFBD><EFBFBD>
|
||||
|
||||
const PktBase::CMDType CmdFriendAddRequest = 0x64; // ģ<><C4A3> <20>߰<EFBFBD>
|
||||
const PktBase::CMDType CmdFriendRemoveRequest = 0x65; // ģ<><C4A3> <20><><EFBFBD><EFBFBD>
|
||||
const PktBase::CMDType CmdFriendEtcRequest = 0x66; // ģ<><C4A3> <20><>Ÿ
|
||||
const PktBase::CMDType CmdFriendAck = 0x67; // ģ<><C4A3> Ack
|
||||
const PktBase::CMDType CmdFriendDB = 0x68; // ģ<><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><> ģ<><C4A3> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>)
|
||||
|
||||
const PktBase::CMDType CmdEliteBonus = 0x69; // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>ʽ<EFBFBD>
|
||||
|
||||
const PktBase::CMDType CmdFinalPacketNum = 0x6A; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20><>ȣ
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,58 @@
|
||||
#ifndef _ADDRESS_PACKET_H_
|
||||
#define _ADDRESS_PACKET_H_
|
||||
|
||||
// AddressPacket.h
|
||||
#include <Network/Packet/PacketBase.h>
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
// UDP <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ ( Update Address )
|
||||
// : Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20>α<EFBFBD><CEB1><EFBFBD> <20>Ŀ<EFBFBD> UDP<44><50> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ѹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
|
||||
// : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD> <20>ܺ<EFBFBD> UDP <20>ּҸ<D6BC> <20><><EFBFBD>´<EFBFBD>.
|
||||
typedef struct PktUA* LPPktUA;
|
||||
struct PktUA : public PktBase
|
||||
{
|
||||
SOCKADDR_IN m_PrivateAddress;
|
||||
unsigned long m_dwCharID;
|
||||
};
|
||||
|
||||
// UDP <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ Ack
|
||||
typedef struct PktUAAck* LPPktUAAck;
|
||||
struct PktUAAck : public PktBase
|
||||
{
|
||||
SOCKADDR_IN m_PublicAddress;
|
||||
SOCKADDR_IN m_PrivateAddress;
|
||||
unsigned long m_dwCharID;
|
||||
};
|
||||
|
||||
|
||||
// <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD>ü
|
||||
typedef struct AddressInfo* LPAddressInfo;
|
||||
struct AddressInfo
|
||||
{
|
||||
SOCKADDR_IN m_PublicAddress;
|
||||
SOCKADDR_IN m_PrivateAddress;
|
||||
unsigned long m_dwCharID;
|
||||
|
||||
AddressInfo() : m_dwCharID(0)
|
||||
{
|
||||
memset(&m_PublicAddress, 0, sizeof(m_PublicAddress));
|
||||
memset(&m_PrivateAddress, 0, sizeof(m_PrivateAddress));
|
||||
}
|
||||
|
||||
AddressInfo(const SOCKADDR_IN& PublicAddress, const SOCKADDR_IN& PrivateAddress, const unsigned long dwCharID)
|
||||
: m_PublicAddress(PublicAddress), m_PrivateAddress(PrivateAddress), m_dwCharID(dwCharID) { }
|
||||
};
|
||||
|
||||
|
||||
// UDP <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ ( Address Info )
|
||||
// - <20><><EFBFBD>巹<EFBFBD><E5B7B9> <20><><EFBFBD><EFBFBD>ü
|
||||
typedef struct PktAI* LPPktAI;
|
||||
struct PktAI : public PktBase
|
||||
{
|
||||
AddressInfo m_AddressInfo;
|
||||
};
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,135 @@
|
||||
#ifndef _AUTHSERVER_TO_DBAGENT_SERVER_PACKET_H_
|
||||
#define _AUTHSERVER_TO_DBAGENT_SERVER_PACKET_H_
|
||||
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include <DB/DBDefine.h>
|
||||
#include "DataPacket.h"
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20><>û AuthServer -> DBAgentServer
|
||||
typedef struct PktULD* LPPktULD;
|
||||
struct PktULD : public PktDD
|
||||
{
|
||||
unsigned long m_dwSessionID;
|
||||
unsigned long m_dwUserID;
|
||||
|
||||
IN_ADDR m_Address;
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD> DBAgentServer -> AuthServer
|
||||
typedef struct PktULDAck* LPPktULDAck;
|
||||
struct PktULDAck : public PktDD
|
||||
{
|
||||
unsigned long m_dwUserID;
|
||||
CHAR_VIEW m_CharView[3];
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20>αƿ<D7BE> AuthServer -> DBAgentServer
|
||||
typedef struct PktULoD *LPPktULoD;
|
||||
struct PktULoD : public PktDD
|
||||
{
|
||||
unsigned long m_dwSessionID;
|
||||
unsigned long m_dwUserID;
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> DBAgentServer -> AuthServer
|
||||
typedef struct PktSSD *LPPktSSD;
|
||||
struct PktSSD : public PktDD
|
||||
{
|
||||
unsigned long m_dwSessionID;
|
||||
unsigned long m_dwUserID;
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------
|
||||
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û AuthServer -> DBAgentServer
|
||||
typedef struct PktCCD* LPPktCCD;
|
||||
struct PktCCD : public PktDD
|
||||
{
|
||||
unsigned long m_dwUserID;
|
||||
|
||||
unsigned long m_dwSlot;
|
||||
unsigned long m_dwGold;
|
||||
POS m_Pos;
|
||||
CHAR_CREATE m_CharCreate;
|
||||
|
||||
unsigned short m_wSkill;
|
||||
};
|
||||
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> DBAgentServer -> AuthServer
|
||||
typedef struct PktCCDAck* LPPktCCDAck;
|
||||
struct PktCCDAck : public PktDD
|
||||
{
|
||||
unsigned long m_dwCharID;
|
||||
unsigned long m_dwSlot;
|
||||
CHAR_VIEW m_CharView;
|
||||
};
|
||||
// ---------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
typedef struct PktCSD* LPPktCSD;
|
||||
struct PktCSD : public PktDD
|
||||
{
|
||||
unsigned long m_dwUserID;
|
||||
unsigned long m_dwCharID;
|
||||
};
|
||||
|
||||
typedef struct PktCSDAck* LPPktCSDAck;
|
||||
struct PktCSDAck : public PktDD
|
||||
{
|
||||
enum { MAX_CHANNEL_NUM = 2 };
|
||||
|
||||
unsigned char m_cZone;
|
||||
unsigned short m_wChannelNum[MAX_CHANNEL_NUM];
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------
|
||||
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
typedef struct PktCDD* LPPktCDD;
|
||||
struct PktCDD : public PktDD
|
||||
{
|
||||
unsigned long m_dwUserID;
|
||||
unsigned long m_dwSlotNum;
|
||||
unsigned long m_dwCharID;
|
||||
};
|
||||
// ---------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
typedef struct PktCCID* LPPktCCID;
|
||||
struct PktCCID : public PktDD
|
||||
{
|
||||
unsigned long m_dwCharID;
|
||||
unsigned long m_dwSize;
|
||||
};
|
||||
// ---------------------------------------------------------
|
||||
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
typedef struct PktCLiD* LPPktCLiD;
|
||||
struct PktCLiD : public PktDD
|
||||
{
|
||||
unsigned long m_dwUserID;
|
||||
unsigned long m_dwCharID;
|
||||
unsigned long m_dwSerial;
|
||||
};
|
||||
// ---------------------------------------------------------
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,55 @@
|
||||
#ifndef _CHAR_ADMIN_PACKET_H_
|
||||
#define _CHAR_ADMIN_PACKET_H_
|
||||
|
||||
// CharAdminPacket.h
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include <Network/Packet/PacketBase.h>
|
||||
#include <DB/DBdefine.h>
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
typedef struct PktAdmin* LPPktAdmin;
|
||||
struct PktAdmin : public PktBase
|
||||
{
|
||||
enum { MAX_NAME_LEN = 16 };
|
||||
enum CMD
|
||||
{
|
||||
NONE = 0, // <09><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD>
|
||||
MOVE_ZONE_C = 1, // ij<><C4B3><EFBFBD><EFBFBD> <20><> <20>̵<EFBFBD>
|
||||
MOVE_ZONE_P = 2, // <09><>Ƽ <20><> <20>̵<EFBFBD>
|
||||
MOVE_C = 3, // ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD>
|
||||
MOVE_P = 4, // <09><>Ƽ <20>̵<EFBFBD>
|
||||
RESPAWN_C = 5, // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
RESPAWN_P = 6, // <09><>Ƽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
KILL_C = 7, // ij<><C4B3><EFBFBD><EFBFBD> ų
|
||||
KILL_P = 8, // <09><>Ƽ ų
|
||||
DUELINIT = 9, // <09><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
|
||||
CREATEITEM = 10, // <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
CREATEMON = 11, // <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
INFO_C = 12 // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
unsigned short m_usCmd; // <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
char m_stName[MAX_NAME_LEN]; // <20≯<EFBFBD>
|
||||
|
||||
union
|
||||
{
|
||||
struct ZoneInfo
|
||||
{
|
||||
char m_cZone; // <20><> <20><>ȣ
|
||||
char m_cChannel; // ä<><C3A4> <20><>ȣ
|
||||
} m_ZoneInfo;
|
||||
|
||||
unsigned short m_usProtoTypeID; // Ÿ<><C5B8> <20><><EFBFBD>̵<EFBFBD>
|
||||
};
|
||||
|
||||
POS m_Position; // <20><>ġ
|
||||
};
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,181 @@
|
||||
#ifndef _CHAR_ATTACK_PACKET_H_
|
||||
#define _CHAR_ATTACK_PACKET_H_
|
||||
|
||||
// CharAttackPacket.h
|
||||
#include <DB/DBDefine.h>
|
||||
#include <Network/Packet/PacketBase.h>
|
||||
|
||||
#include "CharAttackPacketStruct.h"
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
typedef struct PktAt* LPPktAt;
|
||||
struct PktAt : public PktBase
|
||||
{
|
||||
POS m_Postion; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><>ġ
|
||||
float m_fDir; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned long m_dwCharID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
|
||||
AtType m_AtType; // <20><><EFBFBD><EFBFBD> Ÿ<><C5B8>
|
||||
AtNode m_AtNode; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ Ack (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>) + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktAtAck* LPPktAtAck;
|
||||
struct PktAtAck : public PktBase
|
||||
{
|
||||
enum PktAtAckErr
|
||||
{
|
||||
NO_SERVER_ERR = 0,
|
||||
SERVER_ERROR = 1,
|
||||
FAIL_ATTACK = 2,
|
||||
FAIL_ALREADY_DEAD = 2
|
||||
};
|
||||
|
||||
unsigned long m_dwCharID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
AtType m_AtType; // <20><><EFBFBD><EFBFBD> Ÿ<><C5B8>
|
||||
|
||||
unsigned short m_wHP; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HP
|
||||
unsigned short m_wMP; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MP
|
||||
|
||||
unsigned char m_cJudge; // <20>÷<EFBFBD><C3B7><EFBFBD>
|
||||
unsigned char m_cDefenserNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
|
||||
unsigned char m_cRightHandValue; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ҵ<EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>)
|
||||
unsigned char m_cLeftHandValue; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ҵ<EFBFBD>(<28><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>)
|
||||
|
||||
unsigned char m_cRightHandIndex; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>)
|
||||
unsigned char m_cLeftHandIndex; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>(<28><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>)
|
||||
};
|
||||
|
||||
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>) + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktAtInfo* LPPktAtInfo;
|
||||
struct PktAtInfo : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> ID
|
||||
AtType m_AtType; // <20><><EFBFBD><EFBFBD> Ÿ<><C5B8>
|
||||
unsigned char m_cDefenserNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
};
|
||||
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
typedef struct PktAted* LPPktAted;
|
||||
struct PktAted : public PktBase
|
||||
{
|
||||
POS m_Postion; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ
|
||||
float m_fDir; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned long m_dwCharID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> ID
|
||||
AtType m_AtType; // <20><><EFBFBD><EFBFBD> Ÿ<><C5B8>
|
||||
|
||||
unsigned short m_wMyHP; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HP
|
||||
unsigned short m_wMyMP; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MP
|
||||
|
||||
unsigned char m_cJudge; // <20><><EFBFBD><EFBFBD> <20><>
|
||||
unsigned char m_cMyWeaponIndex; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ҿ<EFBFBD>)
|
||||
unsigned char m_cMyWeaponValue; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ҵ<EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ҿ<EFBFBD>)
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD> :
|
||||
// 0 = <20><><EFBFBD><EFBFBD>, 1 = <20><><EFBFBD><EFBFBD>, 2 = <20><><EFBFBD><EFBFBD>, 3 = <20>αƿ<D7BE>, 4 = <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD> :
|
||||
// 0 = <20><><EFBFBD><EFBFBD>, 1 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 2 = <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û,
|
||||
// 3 = <20>ź<EFBFBD> <20>ɼ<EFBFBD><C9BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktDuC* LPPktDuC;
|
||||
struct PktDuC : public PktBase
|
||||
{
|
||||
enum DuelCmd
|
||||
{
|
||||
DUC_PROPOSE = 0, DUC_READY = 1, DUC_REFUSE = 2,
|
||||
DUC_LOGOUT = 3, DUC_DEAD = 4, DUC_PARTY_PROPOSE = 5,
|
||||
DUC_PARTY_READY = 6, DUC_REQUEST_PARTY_INFO = 7, DUC_CANCEL = 8
|
||||
};
|
||||
|
||||
enum PktDuCError
|
||||
{
|
||||
NO_SERVER_ERR = 0, SERVER_ERROR = 1, FAIL_DUELING_CHAR = 2,
|
||||
FAIL_REJECT = 3, FAIL_NOT_LEADER = 4, FAIL_NOT_PARTY = 5
|
||||
};
|
||||
|
||||
unsigned long m_dwSenderID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned long m_dwRecverID; // <20><EFBFBD><DEB4><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned char m_cCmd; // <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>Ʋ <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktTBInfo* LPPktTBInfo;
|
||||
struct PktTBInfo : public PktBase
|
||||
{
|
||||
enum DuelCmd
|
||||
{
|
||||
DUC_PROPOSE = 0, DUC_READY = 1, DUC_REFUSE = 2,
|
||||
DUC_LOGOUT = 3, DUC_DEAD = 4, DUC_PARTY_PROPOSE = 5,
|
||||
DUC_PARTY_READY = 6, DUC_REQUEST_PARTY_INFO = 7
|
||||
};
|
||||
|
||||
unsigned long m_dwCharID;
|
||||
char m_strChallengerName[CHAR_INFOST::MAX_NAME_LEN];
|
||||
unsigned char m_cCmd;
|
||||
|
||||
unsigned char m_cMemberNum;
|
||||
};
|
||||
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> æƮ&<26><>æƮ <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktSpInfo* LPPktSpInfo;
|
||||
struct PktSpInfo : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned short m_nEnchantLevel; // <20>ֹ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned char m_cSpellType; // <20>ֹ<EFBFBD> Ÿ<><C5B8> ( namespace Skill::SpellType<70><65><EFBFBD><EFBFBD> )
|
||||
bool m_bOnOff; // <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
typedef struct PktRs* LPPktRs;
|
||||
struct PktRs : public PktBase
|
||||
{
|
||||
enum RespawnCmd
|
||||
{
|
||||
RS_NORMAL = 0, RS_SELECT = 1
|
||||
};
|
||||
|
||||
unsigned long m_dwCharID;
|
||||
unsigned char m_cCmd;
|
||||
POS m_Position;
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ack
|
||||
typedef struct PktRsAck* LPPktRsAck;
|
||||
struct PktRsAck : public PktBase
|
||||
{
|
||||
POS m_Position; // <20><><EFBFBD><EFBFBD> <20><>ġ
|
||||
__int64 m_dlExp; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned short m_wHP; // HP
|
||||
unsigned short m_wMP; // MP
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3>
|
||||
typedef struct PktAw* LPPktAw;
|
||||
struct PktAw : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> ID
|
||||
unsigned long m_dwExp; // <20><><EFBFBD><EFBFBD>ġ
|
||||
};
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,54 @@
|
||||
#ifndef _CHAR_ATTACK_PACKET_STRUCT_H_
|
||||
#define _CHAR_ATTACK_PACKET_STRUCT_H_
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ( <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü )
|
||||
typedef struct AtNode *LPAtNode;
|
||||
struct AtNode
|
||||
{
|
||||
enum { MAX_DEFENDER_NUM = 10 };
|
||||
|
||||
unsigned char m_wDefenserNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
unsigned long m_dwDefenser[MAX_DEFENDER_NUM]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned char m_cDefenserJudge[MAX_DEFENDER_NUM]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
typedef struct AtType* LPAtType;
|
||||
struct AtType
|
||||
{
|
||||
enum { SkillBitMask = 0x8000 };
|
||||
enum Attack
|
||||
{
|
||||
Normal = 0,
|
||||
Move = 1,
|
||||
ComboLast = 2,
|
||||
Bow = 3,
|
||||
CrossBow = 4
|
||||
};
|
||||
|
||||
unsigned short m_wType; // <20><><EFBFBD><EFBFBD> Ÿ<><C5B8> (<28>Ǵ<EFBFBD> <20><>ų ID)
|
||||
char m_cSkillLevel; // <20><>ų <20><><EFBFBD><EFBFBD> (-127 ~ 128)
|
||||
unsigned char m_cSkillLockCount : 4; // <20><>ų <20><>ī<EFBFBD><C4AB>Ʈ (0~5)
|
||||
unsigned char m_cAtCount : 4; // <20><><EFBFBD><EFBFBD> ī<><C4AB>Ʈ (0~15)
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
typedef struct DefenserNode* LPDefenserNode;
|
||||
struct DefenserNode
|
||||
{
|
||||
unsigned long m_dwCharID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
|
||||
unsigned short m_wMaxHP; // <20>ִ<EFBFBD> HP
|
||||
unsigned short m_sCurrHP; // <20><><EFBFBD><EFBFBD> HP
|
||||
unsigned short m_wMaxMP; // <20>ִ<EFBFBD> MP
|
||||
unsigned short m_sCurrMP; // <20><><EFBFBD><EFBFBD> MP
|
||||
|
||||
unsigned short m_wDamage; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
unsigned char m_cJudge; // <20><><EFBFBD><EFBFBD> <20><>
|
||||
};
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,329 @@
|
||||
#ifndef _CHAR_COMMUNITY_PACKET_H_
|
||||
#define _CHAR_COMMUNITY_PACKET_H_
|
||||
|
||||
// CharCommunityPacket.h
|
||||
// DBDefine<6E>ʿ<EFBFBD>.
|
||||
|
||||
#include <Network/Packet/PacketBase.h>
|
||||
#include <Network/Packet/PacketStruct/DataPacket.h>
|
||||
#include <Network/Packet/PacketStruct/CharItemPacketStruct.h>
|
||||
|
||||
#include "AddressPacket.h"
|
||||
#include "CharCommunityPacketStruct.h"
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
// <20><>Ƽ <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktPI* LPPktPI;
|
||||
struct PktPI : public PktBase
|
||||
{
|
||||
PARTY m_Party;
|
||||
};
|
||||
|
||||
|
||||
// <20><>Ƽ <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD> :
|
||||
// 0 = <20>ʴ<EFBFBD>, 1 = <20><><EFBFBD><EFBFBD>, 2 = <20><><EFBFBD><EFBFBD>
|
||||
// 3 = <20><><EFBFBD><EFBFBD>, 4 = Ż<><C5BB>, 5 = <20>絵
|
||||
// 6 = <20>ı<EFBFBD>, 7 = <20>α<EFBFBD><CEB1><EFBFBD>, 8 = <20>αƿ<D7BE>
|
||||
// 9 = <20><><EFBFBD><EFBFBD>(ij<><C4B3><EFBFBD><EFBFBD>), 10 = <20><><EFBFBD>α<EFBFBD><CEB1><EFBFBD>,
|
||||
// 11 = <20><>Ƽã<C6BC><C3A3>, 12 = <20><><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD> :
|
||||
// 1 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 2 = <20>̹<EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD>ԵǾ<D4B5> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>, 3 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 4 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 5 = Ż<><C5BB> <20><><EFBFBD><EFBFBD>, 6 = <20>絵 <20><><EFBFBD><EFBFBD>, 7 = <20><>Ƽ <20>ο<EFBFBD> <20>ʰ<EFBFBD>,
|
||||
// 8 = <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD>, 9 = <20>ź<EFBFBD> <20>ɼ<EFBFBD><C9BC><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
typedef struct PktPC* LPPktPC;
|
||||
struct PktPC : public PktBase
|
||||
{
|
||||
enum PartyCmd
|
||||
{
|
||||
PC_INVITE = 0, PC_ACCEPT = 1, PC_REFUSE = 2,
|
||||
PC_BANISH = 3, PC_SECESSION = 4, PC_TRANSFER = 5,
|
||||
PC_DESTROY = 6, PC_LOGIN = 7, PC_LOGOUT = 8,
|
||||
PC_DELETE = 9, PC_RELOGIN = 10, PC_FINDPARTY = 11,
|
||||
PC_FINDMEMBER = 12
|
||||
};
|
||||
|
||||
enum PktPCError
|
||||
{
|
||||
SERVER_ERROR = 1, CHAR_JOINED = 2, FAIL_ACCEPT = 3,
|
||||
FAIL_BANISH = 4, FAIL_SECESSION = 5, FAIL_TRANSFER = 6,
|
||||
OVER_MEMBER = 7, FAIL_INVITE = 8, FAIL_REJECT = 9
|
||||
};
|
||||
|
||||
unsigned long m_dwPartyID; // <20><>Ƽ <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned long m_dwSenderID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>(<28><>ü)
|
||||
unsigned long m_dwReferenceID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>(<28><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>)
|
||||
unsigned short m_wCmd; // <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
//
|
||||
// <20><>Ƽ <20><><EFBFBD><EFBFBD> Ack
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD> :
|
||||
// 0 = <20>ʴ<EFBFBD>, 1 = <20><><EFBFBD><EFBFBD>, 2 = <20><><EFBFBD><EFBFBD>
|
||||
// 3 = <20><><EFBFBD><EFBFBD>, 4 = Ż<><C5BB>, 5 = <20>絵
|
||||
// 6 = <20>ı<EFBFBD>, 7 = <20>α<EFBFBD><CEB1><EFBFBD>, 8 = <20>αƿ<D7BE>
|
||||
// 9 = <20><><EFBFBD><EFBFBD>(ij<><C4B3><EFBFBD><EFBFBD>)
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD> :
|
||||
// 1 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 2 = <20>̹<EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD>ԵǾ<D4B5> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>, 3 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 4 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 5 = Ż<><C5BB> <20><><EFBFBD><EFBFBD>, 6 = <20>絵 <20><><EFBFBD><EFBFBD>, 7 = <20><>Ƽ <20>ο<EFBFBD> <20>ʰ<EFBFBD>
|
||||
//
|
||||
typedef struct PktPCAck* LPPktPCAck;
|
||||
struct PktPCAck : public PktBase
|
||||
{
|
||||
enum PartyCmd
|
||||
{
|
||||
PC_INVITE = 0, PC_ACCEPT = 1, PC_REFUSE = 2,
|
||||
PC_BANISH = 3, PC_SECESSION = 4, PC_TRANSFER = 5,
|
||||
PC_DESTROY = 6, PC_LOGIN = 7, PC_LOGOUT = 8,
|
||||
PC_DELETE = 9
|
||||
};
|
||||
|
||||
enum PktPCErrorAck
|
||||
{
|
||||
SERVER_ERROR = 1, CHAR_JOINED = 2, FAIL_ACCEPT = 3,
|
||||
FAIL_BANISH = 4, FAIL_SECESSION = 5, FAIL_TRANSFER = 6,
|
||||
OVER_MEMBER = 7, FAIL_INVITE = 8
|
||||
};
|
||||
|
||||
AddressInfo m_SenderAddressInfo; // Sender<65><72> <20>ּ<EFBFBD>
|
||||
char m_strSenderName[CHAR_INFOST::MAX_NAME_LEN]; // Sender<65><72> <20≯<EFBFBD>
|
||||
|
||||
unsigned long m_dwPartyID; // <20><>Ƽ <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned long m_dwSenderID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>(<28><>ü)
|
||||
unsigned long m_dwReferenceID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>(<28><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>)
|
||||
unsigned char m_cCmd; // <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
//
|
||||
// <20><>Ƽ <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD> :
|
||||
// 0 = <20>ʴ<EFBFBD>, 1 = <20><><EFBFBD><EFBFBD>, 2 = <20><><EFBFBD><EFBFBD>
|
||||
// 3 = <20><><EFBFBD><EFBFBD>, 4 = Ż<><C5BB>, 5 = <20>絵
|
||||
// 6 = <20>ı<EFBFBD>, 7 = <20>α<EFBFBD><CEB1><EFBFBD>, 8 = <20>αƿ<D7BE>
|
||||
// 9 = <20><><EFBFBD><EFBFBD>(ij<><C4B3><EFBFBD><EFBFBD>)
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD> :
|
||||
// 1 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 2 = <20>̹<EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD>ԵǾ<D4B5> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>, 3 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 4 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 5 = Ż<><C5BB> <20><><EFBFBD><EFBFBD>, 6 = <20>絵 <20><><EFBFBD><EFBFBD>, 7 = <20><>Ƽ <20>ο<EFBFBD> <20>ʰ<EFBFBD>
|
||||
//
|
||||
typedef struct PktPCInfo* LPPktPCInfo;
|
||||
struct PktPCInfo : public PktBase
|
||||
{
|
||||
enum PartyCmd
|
||||
{
|
||||
PC_INVITE = 0, PC_ACCEPT = 1, PC_REFUSE = 2,
|
||||
PC_BANISH = 3, PC_SECESSION = 4, PC_TRANSFER = 5,
|
||||
PC_DESTROY = 6, PC_LOGIN = 7, PC_LOGOUT = 8,
|
||||
PC_DELETE = 9
|
||||
};
|
||||
|
||||
enum PktPCInfoError
|
||||
{
|
||||
SERVER_ERROR = 1, CHAR_JOINED = 2, FAIL_ACCEPT = 3,
|
||||
FAIL_BANISH = 4, FAIL_SECESSION = 5, FAIL_TRANSFER = 6,
|
||||
OVER_MEMBER = 7, FAIL_INVITE = 8
|
||||
};
|
||||
|
||||
unsigned long m_dwPartyID; // <20><>Ƽ ID
|
||||
unsigned long m_dwMemberID; // <20><><EFBFBD><EFBFBD> ID
|
||||
unsigned char m_cCmd; // <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
// <20><>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
typedef struct PktMD* LPPktMD;
|
||||
struct PktMD : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned short m_wCmd; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned short m_wLen; // <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
// <20><>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktPM* LPPktPM;
|
||||
struct PktPM : public PktBase
|
||||
{
|
||||
SOCKADDR_IN m_PublicAddress;
|
||||
SOCKADDR_IN m_PrivateAddress;
|
||||
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned long m_dwPartyID; // <20><>Ƽ <20><><EFBFBD>̵<EFBFBD>
|
||||
|
||||
unsigned long m_dwChant; // æƮ <20><><EFBFBD><EFBFBD>
|
||||
unsigned long m_dwEnchant; // <20><>æƮ <20><><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned short m_wMaxHP; // <20>ִ<EFBFBD> HP
|
||||
unsigned short m_sCurrHP; // <20><><EFBFBD><EFBFBD> HP
|
||||
unsigned short m_wMaxMP; // <20>ִ<EFBFBD> MP
|
||||
unsigned short m_sCurrMP; // <20><><EFBFBD><EFBFBD> MP
|
||||
|
||||
unsigned char m_cClass; // ij<><C4B3><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>
|
||||
unsigned char m_cLevel; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
// <20><>Ƽ ã<><C3A3>
|
||||
typedef struct PktPF* LPPktPF;
|
||||
struct PktPF : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID;
|
||||
};
|
||||
|
||||
// <20><>Ƽ ã<><C3A3> Ack
|
||||
typedef struct PktPFAck* LPPktPFAck;
|
||||
struct PktPFAck : public PktBase
|
||||
{
|
||||
enum { MAX_LIST = 30, MAX_DIFF_LEVEL_VIEW = 5 };
|
||||
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned char m_cMemberFindPartyNum; // <20><>Ƽ ã<><C3A3> <20><><EFBFBD><EFBFBD>Ʈ <20><>
|
||||
unsigned char m_cPartyFindMemberNum; // <20><>Ƽ<EFBFBD><C6BC> ã<><C3A3> <20><><EFBFBD><EFBFBD>Ʈ <20><>
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD>嵵) <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktFI* LPPktFI;
|
||||
struct PktFI : public PktBase
|
||||
{
|
||||
enum InfoKind
|
||||
{
|
||||
NONE = 0,
|
||||
FAME = 1,
|
||||
MERITS = 2
|
||||
};
|
||||
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned char m_cInfoKind; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD>嵵) <20><><EFBFBD><EFBFBD> Ack
|
||||
typedef struct PktFIAck* LPPktFIAck;
|
||||
struct PktFIAck : public PktBase
|
||||
{
|
||||
enum InfoKind
|
||||
{
|
||||
NONE = 0,
|
||||
FAME = 1,
|
||||
MERITS = 2
|
||||
};
|
||||
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned long m_dwFameOrMerits; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28>Ǵ<EFBFBD> <20><><EFBFBD>嵵)
|
||||
unsigned char m_cRankingByRace; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned char m_cRankingByClass; // Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned char m_cInfoKind; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
// <20>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktCOp* LPPktCOp;
|
||||
struct PktCOp : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
RejectOption m_RejectOption; // <20>ź<EFBFBD> <20>ɼ<EFBFBD> <20><>Ʈ<EFBFBD>V
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> ä<><C3A4> <20><>Ŷ.
|
||||
typedef struct PktCt* LPPktCt;
|
||||
struct PktCt : public PktBase
|
||||
{
|
||||
enum PktCtCmd
|
||||
{
|
||||
NORMAL = 0, PARTY = 1,
|
||||
FRIEND = 2, GUILD = 3,
|
||||
NOTICE = 4, CLIENT_LOG = 5,
|
||||
STALL = 6,
|
||||
|
||||
PktCtMaxSize = 180
|
||||
};
|
||||
|
||||
unsigned long m_dwCharID;
|
||||
unsigned short m_sCmd;
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20>ӻ<EFBFBD><D3BB><EFBFBD> <20><>Ŷ.
|
||||
typedef struct PktWh* LPPktWh;
|
||||
struct PktWh : public PktBase
|
||||
{
|
||||
enum
|
||||
{
|
||||
SERVER_ERROR = 1,
|
||||
FAIL_CHAR_LOGOUT = 2,
|
||||
FAIL_REJECT = 3,
|
||||
FAIL_ENEMY = 4,
|
||||
|
||||
PktWhMaxSize = 180
|
||||
};
|
||||
|
||||
char m_SenderName[CHAR_INFOST::MAX_NAME_LEN];
|
||||
char m_RecverName[CHAR_INFOST::MAX_NAME_LEN];
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ.
|
||||
typedef struct PktStO* LPPktStO;
|
||||
struct PktStO : public PktBase
|
||||
{
|
||||
enum { MAX_STALL_NAME_LEN = 32 };
|
||||
|
||||
unsigned long m_dwCharID;
|
||||
char m_StallName[MAX_STALL_NAME_LEN];
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ.
|
||||
typedef struct PktStRI* LPPktStRI;
|
||||
struct PktStRI : public PktBase
|
||||
{
|
||||
enum PktStRICmd
|
||||
{
|
||||
SC_REGISTER = 0,
|
||||
SC_CHANGEPRICE = 1,
|
||||
SC_CANCEL = 2
|
||||
};
|
||||
|
||||
enum PktStRIEErr
|
||||
{
|
||||
SUCCESS = 0,
|
||||
SERVER_ERROR = 1,
|
||||
FAIL_NOT_ITEM = 2
|
||||
};
|
||||
|
||||
unsigned long m_dwCharID;
|
||||
TakeType m_TakeType;
|
||||
unsigned long m_dwPrice;
|
||||
unsigned char m_cCmd;
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ.
|
||||
typedef struct PktStE* LPPktStE;
|
||||
struct PktStE : public PktBase
|
||||
{
|
||||
enum PktStEErr
|
||||
{
|
||||
SUCCESS = 0,
|
||||
SERVER_ERROR = 1,
|
||||
FAIL_FULL_STALL = 2,
|
||||
FAIL_ENTER = 3,
|
||||
FAIL_LEAVE = 4
|
||||
};
|
||||
|
||||
unsigned long m_dwCustomerID;
|
||||
unsigned long m_dwOwnerID;
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ.
|
||||
typedef struct PktStIInfo* LPPktStIInfo;
|
||||
struct PktStIInfo : public PktBase
|
||||
{
|
||||
unsigned long m_dwItemSize;
|
||||
unsigned short m_wItemNum;
|
||||
};
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,52 @@
|
||||
#ifndef _CHAR_COMMUNITY_PACKET_STRUCT_H_
|
||||
#define _CHAR_COMMUNITY_PACKET_STRUCT_H_
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
#include <DB/DBDefine.h>
|
||||
|
||||
// <20><>Ƽ ã<><C3A3> <20><><EFBFBD><EFBFBD>ü
|
||||
typedef struct MemberFindParty* LPMemberFindParty;
|
||||
struct MemberFindParty
|
||||
{
|
||||
char m_strName[CHAR_INFOST::MAX_NAME_LEN]; // <20≯<EFBFBD>
|
||||
unsigned char m_cLevel; // <20><><EFBFBD><EFBFBD>
|
||||
unsigned char m_cClass; // Ŭ<><C5AC><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
// <20><>Ƽ<EFBFBD><C6BC> ã<><C3A3> <20><><EFBFBD><EFBFBD>ü
|
||||
typedef struct PartyFindMember* LPPartyFindMember;
|
||||
struct PartyFindMember
|
||||
{
|
||||
char m_strLeaderName[CHAR_INFOST::MAX_NAME_LEN]; // <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
|
||||
unsigned char m_cAverageLevel; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned char m_cMemberNum; // <20><><EFBFBD><EFBFBD> <20><>
|
||||
};
|
||||
|
||||
// <20>ź<EFBFBD> <20>ɼ<EFBFBD>
|
||||
typedef struct RejectOption* LPRejectOption;
|
||||
struct RejectOption
|
||||
{
|
||||
union
|
||||
{
|
||||
struct RejectStruct
|
||||
{
|
||||
unsigned short m_Party : 1;
|
||||
unsigned short m_Exchange : 1;
|
||||
unsigned short m_Duel : 1;
|
||||
unsigned short m_Whisper : 1;
|
||||
unsigned short m_Remainder : 12;
|
||||
};
|
||||
|
||||
RejectStruct Reject;
|
||||
unsigned short m_wReject;
|
||||
};
|
||||
|
||||
RejectOption() : m_wReject(0) { }
|
||||
RejectOption(unsigned short wReject) : m_wReject(wReject) { }
|
||||
};
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,451 @@
|
||||
#ifndef _CHAR_ITEM_PACKET_H_
|
||||
#define _CHAR_ITEM_PACKET_H_
|
||||
|
||||
// CharItemPacket.h
|
||||
// ItemStructure.h<><68> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20><>. (<28><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, )
|
||||
|
||||
#include <Item/ItemStructure.h>
|
||||
#include <Network/Packet/PacketBase.h>
|
||||
|
||||
#include "CharItemPacketStruct.h"
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><>Ŷ (<28><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD>)
|
||||
typedef struct PktPU* LPPktPU;
|
||||
struct PktPU : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned long m_dwObjectID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>̵<EFBFBD>
|
||||
Item::ItemPos m_itemPos; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><>Ŷ Ack
|
||||
typedef struct PktPUAck* LPPktPUAck;
|
||||
struct PktPUAck : public PktBase
|
||||
{
|
||||
enum ObjectType { Item = 0, Gold = 1 };
|
||||
enum PktPUAckError
|
||||
{
|
||||
SERVER_ERROR = 1,
|
||||
FAIL_GET_CELL = 2,
|
||||
FAIL_GET_ITEM = 3,
|
||||
FAIL_PICKUP_INVEN = 4
|
||||
};
|
||||
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned long m_dwObjectID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned long m_dwSize; // Objectũ<74><C5A9>(Ȥ<><C8A4> <20><> <20><>)
|
||||
|
||||
Item::ItemPos m_itemPos; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ
|
||||
unsigned char m_cType; // Object<63><74><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȥ<><C8A4> <20><>)
|
||||
unsigned char m_cNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktPUInfo PktPUInfo, *LPPktPUInfo;
|
||||
struct PktPUInfo : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned long m_dwObjectID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>̵<EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD>)
|
||||
typedef struct PktPD* LPPktPD;
|
||||
struct PktPD : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
Item::ItemPos m_itemPos; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><> <20>ε<EFBFBD><CEB5><EFBFBD>
|
||||
unsigned char m_cNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ack
|
||||
typedef struct PktPDAck* LPPktPDAck;
|
||||
struct PktPDAck : public PktBase
|
||||
{
|
||||
enum PktPDAckError
|
||||
{
|
||||
SERVER_ERROR = 1,
|
||||
FAIL_GET_CELL = 2,
|
||||
FAIL_DROP_INVEN = 3,
|
||||
FAIL_DROP_FIELD = 4,
|
||||
FAIL_ZERO_ITEM = 5
|
||||
};
|
||||
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
FieldObject m_FieldObject; // FieldObject
|
||||
Item::ItemPos m_itemPos; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><> <20>ε<EFBFBD><CEB5><EFBFBD>
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktPDInfo* LPPktPDInfo;
|
||||
struct PktPDInfo : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID;
|
||||
FieldObject m_FieldObject;
|
||||
};
|
||||
|
||||
// <20><> <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktCeInfo* LPPktCeInfo;
|
||||
struct PktCeInfo : public PktBase
|
||||
{
|
||||
unsigned char m_cObjectNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3> <20><>Ŷ (<28><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD>)
|
||||
typedef struct PktTI* LPPktTI;
|
||||
struct PktTI : public PktBase
|
||||
{
|
||||
enum PktTIError
|
||||
{
|
||||
SERVER_ERROR = 1,
|
||||
FAIL_MOVE = 2
|
||||
};
|
||||
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
TakeType m_TakeType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü
|
||||
};
|
||||
|
||||
|
||||
// <20><> ó<><C3B3> <20><>Ŷ (<28><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD>)
|
||||
typedef struct PktTG* LPPktTG;
|
||||
struct PktTG : public PktBase
|
||||
{
|
||||
enum PktTGError
|
||||
{
|
||||
SERVER_ERROR = 1,
|
||||
FAIL_MOVE = 2,
|
||||
GOLD_OVERFLOW = 3
|
||||
};
|
||||
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned long m_dwGold; // <20><> <20><EFBFBD>
|
||||
|
||||
unsigned char m_cSrcPos : 4; // Src<72><63>ġ - TakeType <20><><EFBFBD><EFBFBD>
|
||||
unsigned char m_cDstPos : 4; // Dst<73><74>ġ - TakeType <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3> <20><>Ŷ (<28><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD>)
|
||||
typedef struct PktTIs* LPPktTIs;
|
||||
struct PktTIs : public PktBase
|
||||
{
|
||||
enum PktTlsError
|
||||
{
|
||||
SERVER_ERROR = 1
|
||||
};
|
||||
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned char m_TakeNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
typedef struct PktSwI* LPPktSwI;
|
||||
struct PktSwI : public PktBase
|
||||
{
|
||||
enum PktSwlError
|
||||
{
|
||||
SERVER_ERROR = 1,
|
||||
FAIL_SRC_MOVE = 2,
|
||||
FAIL_DST_MOVE = 3,
|
||||
CANT_SWAP = 4
|
||||
};
|
||||
|
||||
unsigned long m_dwCharID; // - ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
TakeType m_SwapSrc; // - <20><><EFBFBD><EFBFBD> <20>ҽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü
|
||||
TakeType m_SwapDst; // - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ŷ<EFBFBD> <20><>Ŷ
|
||||
typedef struct PktTr* LPPktTr;
|
||||
struct PktTr : public PktBase
|
||||
{
|
||||
enum PktTrError
|
||||
{
|
||||
NO_SERVER_ERR = 0,
|
||||
SERVER_ERROR = 1,
|
||||
FAIL_DROP_INVEN = 2,
|
||||
WRONG_NPC = 3,
|
||||
FAIL_ITEM_BUY = 4,
|
||||
FAIL_PUT_INVEN = 5
|
||||
};
|
||||
|
||||
unsigned long m_dwCustomerID; // <20>մ<EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned long m_dwOwnerID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> (NPC <20>Ǵ<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD>)
|
||||
|
||||
unsigned short m_wBuyItemID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ID (0<≯<EFBFBD> <20>ȱ<EFBFBD>)
|
||||
TakeType m_TakeType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ŷ<EFBFBD> <20><>Ŷ Ack (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
typedef struct PktTrAck* LPPktTrAck;
|
||||
struct PktTrAck : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned long m_dwNPCID; // <20><><EFBFBD><EFBFBD> NPC <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned long m_dwGold; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned short m_wSize; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>(0 = <20>ȱ<EFBFBD>, 0<><30> <20>ƴϸ<C6B4> <20><><EFBFBD><EFBFBD>)
|
||||
Item::ItemPos m_itemPos; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ
|
||||
unsigned char m_cNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ (<28><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD>)
|
||||
typedef struct PktRpI* LPPktRpI;
|
||||
struct PktRpI : public PktBase
|
||||
{
|
||||
enum Pos
|
||||
{
|
||||
EQUIPMENT = 1,
|
||||
INVENTORY = 2,
|
||||
EQUIPMENT_ALL = 3,
|
||||
INVENTORY_ALL = 4,
|
||||
};
|
||||
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned long m_dwGold; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
Item::ItemPos m_itemPos; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ (<28><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD>)
|
||||
typedef struct PktUI* LPPktUI;
|
||||
struct PktUI : public PktBase
|
||||
{
|
||||
enum PktUIAck
|
||||
{
|
||||
SERVER_ERROR = 1,
|
||||
USE_FAILED = 2
|
||||
};
|
||||
|
||||
unsigned long m_dwSender; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned long m_dwRecver; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
Item::ItemPos m_itemPos; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ ( <20><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD> )
|
||||
typedef struct PktCO* LPPktCO;
|
||||
struct PktCO : public PktBase
|
||||
{
|
||||
CastObject m_sCastObject;
|
||||
unsigned long m_dwSenderID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned long m_dwReceiverID; // <20><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ (Cast Object)
|
||||
typedef struct PktCOInfo* LPPktCOInfo;
|
||||
struct PktCOInfo : public PktBase
|
||||
{
|
||||
CastObject m_sCastObject;
|
||||
unsigned long m_dwSenderID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned long m_dwReceiverID; // <20><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><>ġ <20><>Ŷ
|
||||
typedef struct PktIS* LPPktIS;
|
||||
struct PktIS : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID;
|
||||
Item::ItemPos m_equipPos; // <20><><EFBFBD><EFBFBD> <20><>ġ
|
||||
Item::ItemPos m_gemPos; // <20><><EFBFBD><EFBFBD> <20><>ġ
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><>ġ <20><>Ŷ Ack (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
typedef struct PktISAck* LPPktISAck;
|
||||
struct PktISAck : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID;
|
||||
Item::ItemPos m_equipPos; // <20><><EFBFBD><EFBFBD> <20><>ġ
|
||||
Item::ItemPos m_gemPos; // <20><><EFBFBD><EFBFBD> <20><>ġ
|
||||
unsigned char m_wSize; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><D7B7>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
typedef struct PktUgI* LPPktUgI;
|
||||
struct PktUgI : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned char m_cMineralNum; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><D7B7>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ack (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü)
|
||||
typedef struct PktUgIAck* LPPktUgIAck;
|
||||
struct PktUgIAck : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned char m_cSize; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ø<EFBFBD> <20><>û (<28><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD>)
|
||||
typedef struct PktSplt* LPPktSplt;
|
||||
struct PktSplt : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
TakeType m_TakeType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü
|
||||
// ( Src : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Dst : <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ڸ<EFBFBD>(<28><EFBFBD> <20><><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20><>),
|
||||
// Num : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ø<EFBFBD> Ack (<28><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD>) (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü (<28><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>))
|
||||
typedef struct PktSpItAck* LPPktSpItAck;
|
||||
struct PktSpItAck : public PktBase
|
||||
{
|
||||
enum PktSpltAckError
|
||||
{
|
||||
SERVER_ERROR = 1,
|
||||
FAIL_SPLIT = 2
|
||||
};
|
||||
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
TakeType m_TakeType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü
|
||||
unsigned char m_cSize; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
};
|
||||
|
||||
|
||||
// <20><> <20><><EFBFBD><EFBFBD> <20>̵<EFBFBD> (<28><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD>)
|
||||
typedef struct PktQSM* LPPktQSM;
|
||||
struct PktQSM : public PktBase
|
||||
{
|
||||
enum PktQSMError
|
||||
{
|
||||
SERVER_ERROR = 1,
|
||||
FAIL_MOVE = 2
|
||||
};
|
||||
|
||||
TakeType m_TakeType;
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>ġ <20>ڵ<EFBFBD>
|
||||
typedef struct PktSwH* LPPktSwH;
|
||||
struct PktSwH : public PktBase
|
||||
{
|
||||
unsigned char m_cSelect; // <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> ( 1 = <20><><EFBFBD><EFBFBD>1 & <20><><EFBFBD><EFBFBD>1, 2 = <20><><EFBFBD><EFBFBD>2 & <20><><EFBFBD><EFBFBD>2 )
|
||||
};
|
||||
|
||||
// <20><>ȯ <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD> :
|
||||
// 0 = <20><><EFBFBD><EFBFBD>, 1 = <20><><EFBFBD><EFBFBD>, 2 = <20><><EFBFBD><EFBFBD>, 3 = Ȯ<><C8AE>, 4 = Ȯ<><C8AE> <20><><EFBFBD><EFBFBD>, 5 = <20>ŷ<EFBFBD> <20><><EFBFBD><EFBFBD>, 6 = <20>ŷ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD> :
|
||||
// 0 = <20><><EFBFBD><EFBFBD>, 1 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 2 = <20>̹<EFBFBD> <20><>ȯ<EFBFBD><C8AF><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD> <20><>ȯ <20><>û,
|
||||
// 3 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD> <20>ŷ<EFBFBD> <20><><EFBFBD><EFBFBD>, 4 = <20>ź<EFBFBD> <20>ɼ<EFBFBD><C9BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
typedef struct PktExC* LPPktExC;
|
||||
struct PktExC : public PktBase
|
||||
{
|
||||
enum ExchageCmd
|
||||
{
|
||||
EXC_PROPOSE = 0, EXC_ACCEPT = 1, EXC_REFUSE = 2,
|
||||
EXC_OK = 3, EXC_CANCEL = 4, EXC_EXCHANGE = 5,
|
||||
EXC_QUIT = 6, EXC_LOCK = 7, EXC_UNLOCK = 8
|
||||
};
|
||||
|
||||
enum PktExCError
|
||||
{
|
||||
NO_SERVER_ERR = 0, SERVER_ERROR = 1, FAIL_EXCHANGING_CHAR = 2,
|
||||
FAIL_NOT_ALL_OK = 3, FAIL_REJECT = 4
|
||||
};
|
||||
|
||||
unsigned long m_dwSenderID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned long m_dwRecverID; // <20><EFBFBD><DEB4><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned char m_cCmd; // <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
// <20><>ȯ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü)
|
||||
typedef struct PktExI* LPPktExI;
|
||||
struct PktExI : public PktBase
|
||||
{
|
||||
enum Type
|
||||
{
|
||||
Item = 0,
|
||||
Gold = 1,
|
||||
Remove = 2
|
||||
};
|
||||
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned long m_dwSize; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>(Ȥ<><C8A4> <20><> <20><>)
|
||||
Item::ItemPos m_itemPos; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ
|
||||
unsigned char m_cType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 0, <20><> = 1)
|
||||
unsigned char m_cNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(stack<63><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
};
|
||||
|
||||
|
||||
|
||||
namespace Deposit
|
||||
{
|
||||
enum Const { PASSWORD_LENGTH = 4 };
|
||||
};
|
||||
|
||||
// â<><C3A2> <20><>Ŷ (GameServer <--> DBAgent)
|
||||
// <20>α<EFBFBD><CEB1>νÿ<CEBD>, PktDBUpdate<74><65> <20><><EFBFBD><EFBFBD> <20><>, PktDepositUpdateDB<44><42> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD>.
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> m_bUpdateComplete<74><65> true<75><65> Set<65><74> <20>ش<EFBFBD>.
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20>߿<EFBFBD><DFBF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>÷<EFBFBD> Update<74><65> <20>Ѵ<EFBFBD>.
|
||||
typedef struct PktDepositUpdateDB* LPPktDepositUpdateDB;
|
||||
struct PktDepositUpdateDB : public PktBase
|
||||
{
|
||||
enum TabFlag
|
||||
{
|
||||
ITEM_TAB1 = ( 1 << 0 ),
|
||||
ITEM_TAB2 = ( 1 << 1 ),
|
||||
ITEM_TAB3 = ( 1 << 2 ),
|
||||
ITEM_TAB4 = ( 1 << 3 ),
|
||||
USED_DEPOSIT = ( 1 << 30), // 0 : â<><C3A2> <20><><EFBFBD><EFBFBD> X, 1 : â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
SAVED_PASSWORD = ( 1 << 31) // 0 : NOSAVE 1 : SAVE
|
||||
};
|
||||
|
||||
enum TabNum
|
||||
{
|
||||
TAB_12 = 0,
|
||||
TAB_34 = 1,
|
||||
};
|
||||
|
||||
unsigned long m_dwUID; // ij<><C4B3><EFBFBD><EFBFBD> UID
|
||||
unsigned long m_dwCID; // ij<><C4B3><EFBFBD><EFBFBD> CID
|
||||
unsigned long m_dwTabFlag; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>¸<EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> bitset
|
||||
unsigned short m_usDataSize; // <20><>(Ȥ<><C8A4> <20><>ȣ) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>. <20><>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Deposit::PASSWORD_LENGTH<54><48> <20><><EFBFBD>ƾ<EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
unsigned char m_cTabNum; // password<72><64> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PASSWORD_TABNUM<55><4D>
|
||||
bool m_bUpdateComplete; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>Ϸ<EFBFBD><CFB7>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD>, true<75><65> set.
|
||||
};
|
||||
|
||||
|
||||
// â<><C3A2> <20><>Ŷ (Client <--> GameServer)
|
||||
struct PktDeposit : public PktBase
|
||||
{
|
||||
enum CMD
|
||||
{
|
||||
LOGIN = 1, // Ack<63><6B><EFBFBD><EFBFBD>(Ack<63><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>) (Client<->GameServer) szData[0]~[3]<5D><> password, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 1byte (0, 1)
|
||||
BUY_TAB = 2, // Ack<63><6B><EFBFBD><EFBFBD>(Ack<63><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>) (Client<->GameServer) szData[0]<5D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>ȣ<EFBFBD><C8A3> <20>־<EFBFBD> <20><>
|
||||
RETURN_TAB = 3, // Ack<63><6B><EFBFBD><EFBFBD>(Ack<63><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>) (Client<->GameServer) szData[0]<5D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>ȣ<EFBFBD><C8A3> <20>־<EFBFBD> <20><>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
LOGOUT = 4, // Ack<63><6B><EFBFBD><EFBFBD> (Client->GameServer) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
CHANGE_PASS = 5, // Ack<63><6B><EFBFBD><EFBFBD> (Client->GameServer) szData[0]~[3]<5D><> password. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
SAVED_PASS = 6, // Ack<63><6B><EFBFBD><EFBFBD> (GameServer -> Client) <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1>ν<EFBFBD> <20><>. szData[0]~[3]<5D><> Gold, [4]<5D><> <20><>ȣ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 1byte (0, 1)
|
||||
|
||||
PASSWORD = 7, // AgentServer -> GameServer (CID, Password), GameServer -> AgentServer (UID, Password)
|
||||
GOLD = 8 // AgentServer -> GameServer (CID, Gold), GameServer -> AgentServer (UID, Gold)
|
||||
};
|
||||
|
||||
enum DepositError
|
||||
{
|
||||
SERVER_ERROR = 1,
|
||||
INSUFFICIENT_MONEY = 2,
|
||||
AUTH_FAILED = 3,
|
||||
INVALID_ARGUMENT = 4
|
||||
};
|
||||
|
||||
enum { MIN_DATA_SIZE = Deposit::PASSWORD_LENGTH + 4 };
|
||||
|
||||
unsigned char m_cCmd;
|
||||
char m_szData[MIN_DATA_SIZE];
|
||||
};
|
||||
|
||||
|
||||
#pragma pack()
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,58 @@
|
||||
#ifndef _CHAR_ITEM_PACKET_STRUCT_H_
|
||||
#define _CHAR_ITEM_PACKET_STRUCT_H_
|
||||
|
||||
#include <DB/DBDefine.h>
|
||||
#include <Item/ItemStructure.h>
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
// <20>ʵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>ü
|
||||
typedef struct FieldObject* LPFieldObject;
|
||||
struct FieldObject
|
||||
{
|
||||
enum CheckBit { Gold = 0x80000000 };
|
||||
|
||||
POS m_Pos; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ
|
||||
unsigned long m_dwOID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>̵<EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȥ<><C8A4> Object )
|
||||
unsigned long m_dwTypeID; // Ÿ<><C5B8> <20><><EFBFBD>̵<EFBFBD> (<28><><EFBFBD><EFBFBD> 1<><31>Ʈ <20><><EFBFBD≯<EFBFBD> <20><>)
|
||||
unsigned long m_dwStatusFlag; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> chant, enchant <20><><EFBFBD><EFBFBD> Flag
|
||||
unsigned char m_cNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
};
|
||||
|
||||
// TakeType
|
||||
typedef struct TakeType* LPTakeType;
|
||||
struct TakeType
|
||||
{
|
||||
enum TakeSource
|
||||
{
|
||||
TS_NONE = 0, TS_EQUIP = 1,
|
||||
TS_INVEN = 2, TS_QSLOT = 3,
|
||||
TS_SSLOT = 4, TS_TEMP = 6,
|
||||
TS_UPGRADE = 7, TS_EXCHANGE = 8,
|
||||
TS_DEPOSIT = 9, TS_STALL = 10
|
||||
};
|
||||
|
||||
Item::ItemPos m_srcPos;
|
||||
Item::ItemPos m_dstPos;
|
||||
unsigned char m_cNum;
|
||||
|
||||
TakeType() : m_cNum(0) { }
|
||||
TakeType(Item::ItemPos srcPos, Item::ItemPos dstPos, unsigned char cNum)
|
||||
: m_srcPos(srcPos), m_dstPos(dstPos), m_cNum(cNum) { }
|
||||
};
|
||||
|
||||
// ij<><C4B3>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>ü (Cast Object)
|
||||
typedef struct CastObject* LPCastObject;
|
||||
struct CastObject
|
||||
{
|
||||
POS m_DstPos; // <20><><EFBFBD><EFBFBD> <20><>ġ
|
||||
unsigned long m_dwTargetID; // Ÿ<><C5B8> <20><><EFBFBD>̵<EFBFBD>
|
||||
|
||||
unsigned short m_wTypeID; // <20><><EFBFBD>̵<EFBFBD> ( <20><><EFBFBD>ϰ<EFBFBD><CFB0><EFBFBD> <20>ݾ<EFBFBD> )
|
||||
unsigned char m_cObjectType; // <20><><EFBFBD><EFBFBD> ( 0 = ij<><C4B3>Ʈ, <20><><EFBFBD><EFBFBD> <20><>, 2 = <20><> )
|
||||
unsigned char m_cObjectLevel; // <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,66 @@
|
||||
#ifndef _CHAR_LOGIN_OUT_PACKET_H_
|
||||
#define _CHAR_LOGIN_OUT_PACKET_H_
|
||||
|
||||
// CharLoginOutPacket.h
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include <Network/Packet/PacketBase.h>
|
||||
#include "CharLoginOutPacketStruct.h"
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
class CSession;
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
typedef struct PktDBUpdate* LPPktDBUpdate;
|
||||
struct PktDBUpdate : public PktBase
|
||||
{
|
||||
unsigned __int64 m_dlItemSerial; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ø<EFBFBD><C3B8><EFBFBD>
|
||||
unsigned long m_dwSessionID; // <20><><EFBFBD><EFBFBD> ID
|
||||
unsigned long m_dwUserID; // <20><><EFBFBD><EFBFBD> ID
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> ID
|
||||
CSession* m_lpSession; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
IN_ADDR m_Address; // <20>ּ<EFBFBD>
|
||||
|
||||
unsigned short m_TypeCode; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ Ÿ<><C5B8>
|
||||
unsigned short m_usUpdate[DBUpdateData::MAX_UPDATE_DB]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> (Char Login)
|
||||
typedef struct PktCLi* LPPktCLi;
|
||||
struct PktCLi : public PktBase
|
||||
{
|
||||
unsigned long m_dwUserID;
|
||||
unsigned long m_dwCharID;
|
||||
unsigned long m_dwSessionID;
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> Ack (1 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 2 = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
typedef struct PktCLiAck* LPPktCLiAck;
|
||||
struct PktCLiAck : public PktBase
|
||||
{
|
||||
SOCKADDR_IN m_GSSUDPAddr;
|
||||
unsigned long m_dwServerTime;
|
||||
|
||||
unsigned char m_cAdmin;
|
||||
unsigned short m_usUpdate[DBUpdateData::MAX_UPDATE_DB];
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20>αƿ<D7BE> (Char Logout)
|
||||
typedef struct PktCLo* LPPktCLo;
|
||||
struct PktCLo : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID;
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20>αƿ<D7BE> (Char Logout)
|
||||
typedef struct PktCLoAck* LPPktCLoAck;
|
||||
struct PktCLoAck : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID;
|
||||
};
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,30 @@
|
||||
#ifndef _CHAR_LOGIN_OUT_PACKET_STRUCT_
|
||||
#define _CHAR_LOGIN_OUT_PACKET_STRUCT_
|
||||
|
||||
|
||||
namespace DBUpdateData
|
||||
{
|
||||
enum UpdateList
|
||||
{
|
||||
STATUS_UPDATE = 0, POSITION_UPDATE = 1,
|
||||
SKILL_UPDATE = 2, QUICKSLOT_UPDATE = 3,
|
||||
ITEM_EQUIP_UPDATE = 4, ITEM_INVEN_UPDATE = 5,
|
||||
ITEM_EXTRA_UPDATE = 6, ITEM_EXCHANGE_UPDATE = 7,
|
||||
MAX_UPDATE_DB = 8
|
||||
};
|
||||
|
||||
enum UpdateType
|
||||
{
|
||||
LOGIN = 0, LOGOUT = 1,
|
||||
UPDATE = 2, ADMIN_LOGIN = 3,
|
||||
ZONEMOVE = 4
|
||||
};
|
||||
|
||||
enum Limit
|
||||
{
|
||||
MAX_DBUPDATE_SIZE = 8000
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,93 @@
|
||||
#ifndef _CHAR_MOVE_PACKET_H_
|
||||
#define _CHAR_MOVE_PACKET_H_
|
||||
|
||||
// CharMovePacket.h
|
||||
#include <Network/Packet/PacketBase.h>
|
||||
#include <DB/DBdefine.h>
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><>Ŷ (CharMove)
|
||||
typedef struct PktMV* LPPktMV;
|
||||
struct PktMV : public PktBase
|
||||
{
|
||||
POS m_Position; // ij<><C4B3><EFBFBD><EFBFBD> <20><>ġ
|
||||
float m_fDir; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> ID
|
||||
unsigned long m_dwChantEf; // Chant Effect
|
||||
unsigned long m_dwEnchantEf; // Enchant Effect
|
||||
unsigned short m_wUAct; // <20><EFBFBD> <20><>ȣ
|
||||
unsigned short m_wLAct; // <20><EFBFBD> <20><>ȣ
|
||||
unsigned char m_wLevel; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><>Ŷ ( Char Move Update )
|
||||
typedef struct PktMU* LPPktMU;
|
||||
struct PktMU : public PktBase
|
||||
{
|
||||
POS m_Position; // <20><>ġ
|
||||
float m_fDir; // <20><><EFBFBD><EFBFBD>
|
||||
unsigned long m_dwTick; // Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ ƽ
|
||||
bool m_bSitMode; // <20>ɱ<EFBFBD> (true = <20>ɾ<EFBFBD> <20><><EFBFBD><EFBFBD>.)
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><>Ŷ Ack ( Char Move Update )
|
||||
typedef struct PktMUAck* LPPktMUAck;
|
||||
struct PktMUAck : public PktBase
|
||||
{
|
||||
unsigned long m_dwTick; // Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ ƽ (ó<><C3B3> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
unsigned char m_cFlag; // - <20>÷<EFBFBD><C3B7><EFBFBD> (0 = <20>̵<EFBFBD>, 1 = <20><><EFBFBD>̵<EFBFBD>)
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ( Monster Move )
|
||||
typedef struct PktMM* LPPktMM;
|
||||
struct PktMM : public PktBase
|
||||
{
|
||||
POS m_Position; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ
|
||||
float m_fDir; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
float m_fVec; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ӵ<EFBFBD>
|
||||
unsigned long m_dwMonID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned short m_wAct; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ൿ
|
||||
unsigned short m_wAniNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD> Ƚ<><C8BD>
|
||||
};
|
||||
|
||||
namespace CellCommand
|
||||
{
|
||||
enum Type
|
||||
{
|
||||
CELL_MOVE = 0,
|
||||
CELL_LOGIN = 1,
|
||||
RESPAWN = 2
|
||||
};
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><> <20>α<EFBFBD><CEB1><EFBFBD> <20><>Ŷ (Char Cell Login)
|
||||
typedef struct PktCCLi* LPPktCCLi;
|
||||
struct PktCCLi : public PktBase
|
||||
{
|
||||
SOCKADDR_IN m_PublicAddress;
|
||||
SOCKADDR_IN m_PrivateAddress;
|
||||
POS m_Pos;
|
||||
unsigned long m_dwCharID;
|
||||
unsigned char m_cCmd; // see namespace CellCommand
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><> <20>αƿ<D7BE> <20><>Ŷ ( Char Cell Logout )
|
||||
typedef struct PktCCLo* LPPktCCLo;
|
||||
struct PktCCLo : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID;
|
||||
unsigned char m_cCmd; // see namespace CellCommand
|
||||
};
|
||||
|
||||
// <20><> <20><><EFBFBD>ε<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> + Address<73><73><EFBFBD><EFBFBD>ü
|
||||
typedef struct PktCB PktCB, *LPPktCB;
|
||||
struct PktCB : public PktBase
|
||||
{
|
||||
unsigned short m_sCharNum; // <20><> ij<><C4B3><EFBFBD><EFBFBD> <20><>
|
||||
};
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,181 @@
|
||||
#ifndef _CHAR_STATUS_PACKET_H_
|
||||
#define _CHAR_STATUS_PACKET_H_
|
||||
|
||||
// CharStatusPacket.h
|
||||
#include <Network/Packet/PacketBase.h>
|
||||
#include <DB/DBdefine.h>
|
||||
#include <Item/ItemStructure.h>
|
||||
|
||||
#include "CharStatusPacketStruct.h"
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20>ڻ<EFBFBD>
|
||||
typedef struct PktSC* LPPktSC;
|
||||
struct PktSC : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20>ڻ<EFBFBD> Ack
|
||||
typedef struct PktSCAck PktSCAck, *LPPktSCAck;
|
||||
struct PktSCAck : public PktBase
|
||||
{
|
||||
POS m_Pos;
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
};
|
||||
|
||||
// <20><><EFBFBD>ε<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
typedef struct PktBP* LPPktBP;
|
||||
struct PktBP : public PktBase
|
||||
{
|
||||
POS m_Pos; // <20><><EFBFBD>ε<EFBFBD><CEB5><EFBFBD> <20><>ġ
|
||||
char m_cZone; // <20><><EFBFBD>ε<EFBFBD><CEB5><EFBFBD> <20><>
|
||||
|
||||
unsigned long m_dwNPCID; // <20><><EFBFBD>ε<EFBFBD><CEB5><EFBFBD> NPC ID
|
||||
unsigned char m_cCmd; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (0 = <20><><EFBFBD>̺<EFBFBD> <20><>ġ, 1 = <20><>ġ <20>̵<EFBFBD>)
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
typedef struct PktLU* LPPktLU;
|
||||
struct PktLU : public PktBase
|
||||
{
|
||||
ChState m_State;
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned char m_cLevel; // <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
typedef struct PktLUInfo* LPPktLUInfo;
|
||||
struct PktLUInfo : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned char m_cLevel; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
// <20>ɷ<EFBFBD>ġ <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktIP* LPPktIP;
|
||||
struct PktIP : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> ID
|
||||
unsigned char m_cStateType; // <20>ɷ<EFBFBD>ġ Ÿ<><C5B8>
|
||||
};
|
||||
|
||||
// <20>ɷ<EFBFBD>ġ <20><><EFBFBD><EFBFBD> Ack
|
||||
typedef struct PktIPAck* LPPktIPAck;
|
||||
struct PktIPAck : public PktBase
|
||||
{
|
||||
ChState m_State;
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> ID
|
||||
};
|
||||
|
||||
// Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><D7B7>̵<EFBFBD>
|
||||
typedef struct PktCU* LPPktCU;
|
||||
struct PktCU : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> ID
|
||||
unsigned char m_cClass; // Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>ȣ
|
||||
};
|
||||
|
||||
// Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><D7B7>̵<EFBFBD> Ack
|
||||
typedef struct PktCUAck* LPPktCUAck;
|
||||
struct PktCUAck : public PktBase
|
||||
{
|
||||
ChState m_State; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> ID
|
||||
unsigned short m_wSkill; // <20><>ų ID
|
||||
unsigned char m_cIndex; // <20><>ų <20>ε<EFBFBD><CEB5><EFBFBD>
|
||||
unsigned char m_cClass; // Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>ȣ
|
||||
};
|
||||
|
||||
// <20><>ų (<28><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
typedef struct PktSk* LPPktSk;
|
||||
struct PktSk : public PktBase
|
||||
{
|
||||
enum PktSkError
|
||||
{
|
||||
SERVER_ERROR = 1, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
FAIL_NOT_SKILL = 2, // <20><>ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
FAIL_NOT_ENOUGH_SLOT = 4, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
FAIL_NON_LEVEL = 3, FAIL_ALREADY_LOCK = 4, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
FAIL_FULL_LOCK = 3, FAIL_NOT_ENOUGH_LEVEL = 4, // <20><> <20><><EFBFBD><EFBFBD>
|
||||
FAIL_NON_LOCK = 3, // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> ID
|
||||
unsigned short m_wSkill; // <20><>ų <20><>ȣ
|
||||
unsigned char m_cIndex; // <20><>ų <20><>ġ
|
||||
};
|
||||
|
||||
|
||||
// <20><>ų <20><> <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktSkUL* LPPktSkUL;
|
||||
struct PktSkUL : public PktSk
|
||||
{
|
||||
Item::ItemPos m_itemPos; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>ġ
|
||||
};
|
||||
|
||||
// <20><>ų <20><> <20><><EFBFBD><EFBFBD> Ack
|
||||
typedef struct PktSkULAck* LPPktSkULAck;
|
||||
struct PktSkULAck : public PktSk
|
||||
{
|
||||
unsigned long m_dwGold; // <20>Һ<EFBFBD> <20>ݾ<EFBFBD>
|
||||
Item::ItemPos m_itemPos; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>ġ
|
||||
};
|
||||
|
||||
// HP <20><><EFBFBD><EFBFBD> <20><>Ŷ ( Char HP Regen )
|
||||
typedef struct PktHP* LPPktHP;
|
||||
struct PktHP : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned short m_sHP; // <20><><EFBFBD><EFBFBD> hp
|
||||
unsigned short m_sMP; // <20><><EFBFBD><EFBFBD> mp
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><>û ( Require Info )
|
||||
// - P2P<32><50> <20>ٸ<EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ÿ<EFBFBD><C3BF><EFBFBD> <20>ּҳ<D6BC><D2B3><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD> <20>Ǹ<EFBFBD>,
|
||||
// <09>ش<EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20>ǰڴ<C7B0>.
|
||||
typedef struct PktRI* LPPktRI;
|
||||
struct PktRI : public PktBase
|
||||
{
|
||||
SOCKADDR_IN m_PublicAddress;
|
||||
SOCKADDR_IN m_PrivateAddress;
|
||||
|
||||
unsigned long m_dwCharID; // <20>ش<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
unsigned char m_cCmd; // Ŀ<>ǵ<EFBFBD> (0 : HP, MP <20><><EFBFBD><EFBFBD>, 1 : UDP <20>ּ<EFBFBD>, 2 : <20><><EFBFBD><EFBFBD>)
|
||||
};
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20>Ѹ<EFBFBD><D1B8><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktSI* LPPktSI;
|
||||
struct PktSI : public PktBase
|
||||
{
|
||||
enum { MAX_STALL_NAME_LEN = 32 };
|
||||
|
||||
enum WEAPON_HAND
|
||||
{
|
||||
WEAPON_HAND1 = 1,
|
||||
WEAPON_HAND2 = 2
|
||||
};
|
||||
|
||||
CHAR_VIEW m_CharView; // ij<><C4B3><EFBFBD><EFBFBD> <20>Ѹ<EFBFBD><D1B8><EFBFBD>
|
||||
unsigned long m_dwStatusFlag; // ij<><C4B3><EFBFBD>Ϳ<EFBFBD> <20>ɷ<EFBFBD> <20>ִ<EFBFBD> chant, enchant Flag
|
||||
unsigned char m_cSelectedHands; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> (1 = <20><><EFBFBD><EFBFBD>1 & <20><><EFBFBD><EFBFBD>1, 2 = <20><><EFBFBD><EFBFBD>2 & <20><><EFBFBD><EFBFBD>2)
|
||||
|
||||
char m_StallName[MAX_STALL_NAME_LEN]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>ʽ<EFBFBD>
|
||||
typedef struct PktEB* LPPktEB;
|
||||
struct PktEB : public PktBase
|
||||
{
|
||||
EliteBonus m_EliteBonus;
|
||||
};
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,31 @@
|
||||
#ifndef _CHAR_STATUS_PACKET_STRUCT_H_
|
||||
#define _CHAR_STATUS_PACKET_STRUCT_H_
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20>ɷ<EFBFBD>ġ
|
||||
typedef struct ChState* LPChState;
|
||||
struct ChState
|
||||
{
|
||||
unsigned short m_wIP;
|
||||
unsigned short m_wSTR;
|
||||
unsigned short m_wDEX;
|
||||
unsigned short m_wCON;
|
||||
unsigned short m_wINT;
|
||||
unsigned short m_wWIS;
|
||||
};
|
||||
|
||||
typedef struct EliteBonus* LPEliteBonus;
|
||||
struct EliteBonus
|
||||
{
|
||||
enum { MAX_BONUS_LEVEL = 5 };
|
||||
|
||||
char m_cNation;
|
||||
unsigned char m_cLevel;
|
||||
|
||||
EliteBonus() : m_cNation(0), m_cLevel(0) { }
|
||||
};
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,207 @@
|
||||
#ifndef _CLIENT_TO_AUTH_SERVER_PACKET_H_
|
||||
#define _CLIENT_TO_AUTH_SERVER_PACKET_H_
|
||||
|
||||
#include <DB/DBDefine.h>
|
||||
#include <Network/Packet/PacketBase.h>
|
||||
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û (Client to AuthServer)
|
||||
// - <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
// - <20><><EFBFBD><EFBFBD> <20>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// - Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct PktAU* LPPktAU;
|
||||
struct PktAU : public PktBase
|
||||
{
|
||||
enum { NAME_LEN = 16 };
|
||||
|
||||
char m_UserAccount[NAME_LEN];
|
||||
char m_UserPassword[NAME_LEN];
|
||||
|
||||
unsigned long m_ClientVerInfo;
|
||||
unsigned short m_cFlag;
|
||||
unsigned long m_dwSessionID;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (AuthServer to Client)
|
||||
// - <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
// - <20><><EFBFBD><EFBFBD> <20>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// - Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct PktAUAck* LPPktAUAck;
|
||||
struct PktAUAck : public PktBase
|
||||
{
|
||||
unsigned long m_dwSessionID;
|
||||
unsigned long m_dwUserID;
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> (Client to AuthServer)
|
||||
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
// - <20><><EFBFBD><EFBFBD> ť <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// : <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20>Ŀ<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct PktULi* LPPktULi;
|
||||
struct PktULi : public PktBase
|
||||
{
|
||||
DWORD m_dwSessionID;
|
||||
DWORD m_dwUserID;
|
||||
DWORD m_dwServerID;
|
||||
DWORD m_dwCheckSum;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> Ack (AuthServer to Client)
|
||||
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
// - ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// (1 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 2 = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct PktULiAck* LPPktULiAck;
|
||||
struct PktULiAck : public PktBase
|
||||
{
|
||||
enum { SERVER_ERROR = 1, FAIL_GET_DATA = 2 };
|
||||
|
||||
unsigned long m_dwUserID;
|
||||
CHAR_VIEW m_CharView[3];
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ( Char Select )
|
||||
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
// - ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
//
|
||||
// : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ش<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD> <20>ּҸ<D6BC> <20>Ѱ<EFBFBD> <20>´<DEB4>.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct PktCS* LPPktCS;
|
||||
struct PktCS : public PktBase
|
||||
{
|
||||
unsigned long m_dwUserID;
|
||||
unsigned long m_dwCharID;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ack
|
||||
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
// - ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
// - <20><><EFBFBD><EFBFBD> ť <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// - GSS <20><><EFBFBD><EFBFBD> <20>ּ<EFBFBD>
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct PktCSAck* LPPktCSAck;
|
||||
struct PktCSAck : public PktBase
|
||||
{
|
||||
enum { MAX_CHANNEL_NUM = 2 };
|
||||
|
||||
unsigned char m_cZone;
|
||||
unsigned short m_wChannelNum[MAX_CHANNEL_NUM];
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ( Char Create )
|
||||
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
// - <20><><EFBFBD><EFBFBD> <20><>ȣ
|
||||
// - ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// - <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct PktCC* LPPktCC;
|
||||
struct PktCC : public PktBase
|
||||
{
|
||||
unsigned long m_dwUserID;
|
||||
unsigned long m_dwSlotNum;
|
||||
CHAR_CREATE m_CreateChar;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ack
|
||||
// - ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
// - <20><><EFBFBD><EFBFBD> <20><>ȣ
|
||||
// - ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//
|
||||
// (1 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 2 = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 3 = <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD>, 4 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>,
|
||||
// 5 = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>, 6 = <20>߸<EFBFBD><DFB8><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct PktCCAck* LPPktCCAck;
|
||||
struct PktCCAck : public PktBase
|
||||
{
|
||||
unsigned long m_dwCharID;
|
||||
unsigned long m_dwSlotNum;
|
||||
CHAR_VIEW m_CharView;
|
||||
|
||||
enum
|
||||
{
|
||||
SERVER_ERROR = 1, FAIL_INSERT_DATA = 2,
|
||||
EXIST_CHAR_NAME = 3, EXIST_SLOT = 4,
|
||||
WRONG_CHAR_NAME = 5, WRONG_CHAR_DATA = 6
|
||||
};
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ( Char Delete )
|
||||
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
// - ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
// - <20><><EFBFBD><EFBFBD> <20><>ȣ
|
||||
// - <20><>Ƽ <20><><EFBFBD>̵<EFBFBD>
|
||||
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct PktCD* LPPktCD;
|
||||
struct PktCD : public PktBase
|
||||
{
|
||||
unsigned long m_dwUserID;
|
||||
unsigned long m_dwCharID;
|
||||
unsigned long m_dwSlotNum;
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ack
|
||||
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
// - <20><><EFBFBD><EFBFBD> <20><>ȣ
|
||||
//
|
||||
// (1 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 2 = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct PktCDAck* LPPktCDAck;
|
||||
struct PktCDAck : public PktBase
|
||||
{
|
||||
unsigned long m_dwUserID;
|
||||
unsigned long m_dwSlotNum;
|
||||
enum { SERVER_ERROR = 1, FAIL_DELETE_DATA =2 };
|
||||
};
|
||||
|
||||
|
||||
#pragma pack()
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,76 @@
|
||||
#ifndef _CLIENT_TO_LOGIN_SERVER_PACKET_H_
|
||||
#define _CLIENT_TO_LOGIN_SERVER_PACKET_H_
|
||||
|
||||
#include "ServerInfo.h"
|
||||
#include <Network/Packet/PacketBase.h>
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// <20>α<EFBFBD><CEB1><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><>Ŷ.
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û <20><>Ŷ : Launcher to LoginServer
|
||||
typedef struct PktSvL* LPPktSvL;
|
||||
struct PktSvL : public PktBase
|
||||
{
|
||||
unsigned long m_ClientVerInfo;
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><>Ŷ : LoginServer to Launcher
|
||||
typedef struct PktSvLAck* LPPktSvLAck;
|
||||
struct PktSvLAck : public PktBase
|
||||
{
|
||||
unsigned long m_dwUserID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
SERVER_LIST m_ServerList; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
};
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û <20><>Ŷ : Launcher to LoginServer
|
||||
typedef struct PktSG* LPPktSG;
|
||||
struct PktSG : public PktBase
|
||||
{
|
||||
char m_cGroup;
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ : LoginServer to Launcher
|
||||
typedef struct PktSGAck* LPPktSGAck;
|
||||
struct PktSGAck : public PktBase
|
||||
{
|
||||
unsigned long m_dwServerID;
|
||||
IN_ADDR m_AuthAddress;
|
||||
};
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û <20><>Ŷ(OLD) : Launcher to LoginServer
|
||||
typedef struct PktAUO* LPPktAUO;
|
||||
struct PktAUO : public PktBase
|
||||
{
|
||||
enum { NAME_LEN = 16 };
|
||||
|
||||
char m_UserAccount[NAME_LEN];
|
||||
char m_UserPassword[NAME_LEN];
|
||||
|
||||
unsigned long m_ClientVerInfo;
|
||||
unsigned short m_cFlag;
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ : LoginServer to Launcher
|
||||
typedef struct PktAUOAck* LPPktAUOAck;
|
||||
struct PktAUOAck : public PktBase
|
||||
{
|
||||
unsigned long m_dwUserID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
SERVER_LIST m_ServerList; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
};
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,50 @@
|
||||
#ifndef _DATA_PACKET_H_
|
||||
#define _DATA_PACKET_H_
|
||||
|
||||
#include <Network/Packet/PacketBase.h>
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
typedef struct PktDD* LPPktDD;
|
||||
struct PktDD : public PktBase
|
||||
{
|
||||
unsigned long m_dwUID;
|
||||
unsigned short m_wCmd;
|
||||
|
||||
enum SubCommands
|
||||
{
|
||||
SCmdUserLogin = 0x0001, // <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
|
||||
SCmdUserLogout = 0x0002, // <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
|
||||
SCmdUserMove = 0x0003, // <20><><EFBFBD><EFBFBD> <20><> <20>̵<EFBFBD>
|
||||
|
||||
SCmdCharCreate = 0x0021, // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SCmdCharDelete = 0x0022, // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SCmdCharCreateItem = 0x0023, // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SCmdCharSelect = 0x0024, // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
SCmdCreateParty = 0x0031, // <20><>Ƽ <20><><EFBFBD><EFBFBD>
|
||||
SCmdDeleteParty = 0x0032, // <20><>Ƽ <20><><EFBFBD><EFBFBD>
|
||||
SCmdGetPartyInfo = 0x0033, // <20><>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SCmdInsertPartyMem = 0x0034, // <20><>Ƽ <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
||||
SCmdDeletePartyMem = 0x0035, // <20><>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SCmdLoginPartyMem = 0x0036, // <20><>Ƽ <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
|
||||
SCmdLogoutPartyMem = 0x0037, // <20><>Ƽ <20><><EFBFBD><EFBFBD> <20>αƿ<D7BE>
|
||||
SCmdTransferLeader = 0x0038, // <20><><EFBFBD><EFBFBD> <20>絵
|
||||
|
||||
SCmdStartSession = 0x0041, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SCmdServerZone = 0x0043, // <20><><EFBFBD><EFBFBD> <20><>
|
||||
SCmdCharMoveZone = 0x0044 // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
};
|
||||
|
||||
inline void InitPtSubCmd(unsigned long dwUID, unsigned short Cmd_In);
|
||||
};
|
||||
|
||||
inline void PktDD::InitPtSubCmd(unsigned long dwUID, unsigned short Cmd_In)
|
||||
{
|
||||
m_dwUID = dwUID;
|
||||
m_wCmd = Cmd_In;
|
||||
}
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,215 @@
|
||||
#ifndef _CHAR_FRIEND_PACKET_H_
|
||||
#define _CHAR_FRIEND_PACKET_H_
|
||||
|
||||
// CharFriendPacket.h
|
||||
#include <Network/Packet/PacketBase.h>
|
||||
#pragma pack(1)
|
||||
|
||||
/*
|
||||
struct PktFriendAddReq : public PktBase CMD : 0x64
|
||||
struct PktFriendRemoveReq : public PktBase CMD : 0x65
|
||||
struct PktFriendEtc : public PktBase CMD : 0x66
|
||||
struct PktFriendAck : public PktBase CMD : 0x67
|
||||
struct PktFriendDB : public PktBase CMD : 0x68
|
||||
|
||||
ģ<><C4A3> <20><><EFBFBD><EFBFBD> Operations
|
||||
|
||||
<Client->GameServer>
|
||||
|
||||
ģ<><C4A3> <20><><EFBFBD><EFBFBD> : PktFriendAddReq
|
||||
<20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> : PktFriendAddReq
|
||||
ģ<><C4A3> <20><><EFBFBD><EFBFBD> : PktFriendRemoveReq
|
||||
<20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> : PktFriendRemoveReq
|
||||
<20><EFBFBD> <20><><EFBFBD><EFBFBD> : PktFriendEtc(Ack<63><6B><EFBFBD><EFBFBD>)
|
||||
|
||||
<GameServer->Client>
|
||||
|
||||
ģ<><C4A3> <20><><EFBFBD><EFBFBD>Ʈ <20>ֱ<EFBFBD> : PktFriendDB
|
||||
<20>ź<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20>߱<EFBFBD> : PktFriendDB
|
||||
|
||||
ģ<><C4A3> <20><><EFBFBD><EFBFBD> Ack : PktFriendAck
|
||||
ģ<><C4A3> <20><><EFBFBD><EFBFBD> Ack : PktFriendAck
|
||||
<20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> Ack : PktFriendAck
|
||||
<20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> Ack : PktFriendAck
|
||||
|
||||
ģ<><C4A3> <20>α<EFBFBD><CEB1><EFBFBD> : PktFriendAck
|
||||
ģ<><C4A3> <20>αƿ<D7BE> : PktFriendAck
|
||||
ģ<><C4A3> <20><><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD> : PktFriendAddReq
|
||||
|
||||
|
||||
<GameServer->DBAgent>
|
||||
|
||||
ģ<><C4A3> <20><><EFBFBD><EFBFBD> : PktFriendDB
|
||||
<20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> : PktFriendDB
|
||||
ģ<><C4A3> <20><><EFBFBD><EFBFBD> : PktFriendDB
|
||||
<20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> : PktFriendDB
|
||||
<20><EFBFBD> <20><><EFBFBD><EFBFBD> : PktFriendDB
|
||||
|
||||
|
||||
<DBAgent->GameServer>
|
||||
|
||||
ģ<><C4A3> <20><><EFBFBD><EFBFBD>Ʈ <20>ֱ<EFBFBD> : PktFriendDB
|
||||
<20>ź<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20>ֱ<EFBFBD> : PktFriendDB
|
||||
*/
|
||||
|
||||
|
||||
struct FriendInfo
|
||||
{
|
||||
private:
|
||||
|
||||
enum StatusMask
|
||||
{
|
||||
IS_LOGINED = 0x00000001,
|
||||
GROUP = 0x000000F0
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
enum { MAX_NAME = 16 };
|
||||
|
||||
unsigned long m_dwStatusFlag;
|
||||
char m_szName[MAX_NAME];
|
||||
|
||||
bool IsLogined() { return (0 != (m_dwStatusFlag & IS_LOGINED)); }
|
||||
void SetLoginStatus(bool bLogined)
|
||||
{
|
||||
if(bLogined) { m_dwStatusFlag |= IS_LOGINED; }
|
||||
else { m_dwStatusFlag &= ~IS_LOGINED; }
|
||||
}
|
||||
|
||||
unsigned long GetGroup() { return ((m_dwStatusFlag & GROUP) >> 4); }
|
||||
bool SetGroup(unsigned long dwGroup)
|
||||
{
|
||||
if(0xF < dwGroup) { return false; }
|
||||
m_dwStatusFlag = (m_dwStatusFlag & (~GROUP)) | (dwGroup << 4);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
struct BanInfo
|
||||
{
|
||||
enum { MAX_NAME = 16 };
|
||||
char m_szName[MAX_NAME];
|
||||
};
|
||||
|
||||
|
||||
|
||||
// <20>߰<EFBFBD> <20><>Ŷ
|
||||
struct PktFriendAddReq : public PktBase
|
||||
{
|
||||
enum { MAX_NAME = 16 };
|
||||
|
||||
enum CMD
|
||||
{
|
||||
ADD_FRIEND_REQ = 0, // ģ<><C4A3> <20><><EFBFBD><EFBFBD> (Client->GameServer), m_szName<6D><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>.
|
||||
BAN_FRIEND_REQ = 1, // <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> (Client->GameServer), m_szName<6D><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>.
|
||||
ADDED_INFO = 2 // ģ<><C4A3><EFBFBD><EFBFBD> <20><><EFBFBD>ϵ<EFBFBD> (GameServer->Client), m_szName<6D><65> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>.
|
||||
};
|
||||
|
||||
char m_szName[MAX_NAME]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>.
|
||||
unsigned char m_cCmd;
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
struct PktFriendRemoveReq : public PktBase
|
||||
{
|
||||
enum CMD
|
||||
{
|
||||
REMOVE_FRIEND_REQ = 0, // ģ<><C4A3> <20><><EFBFBD><EFBFBD> (Client->GameServer), m_dwCID<49><44> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CID.
|
||||
REMOVE_BAN_REQ = 1, // <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (Client->GameServer), m_dwCID<49><44> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CID.
|
||||
};
|
||||
|
||||
unsigned long m_dwCID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CID;
|
||||
unsigned char m_cCmd;
|
||||
};
|
||||
|
||||
|
||||
// <20><>Ÿ <20><>Ŷ
|
||||
struct PktFriendEtc : public PktBase
|
||||
{
|
||||
enum CMD
|
||||
{
|
||||
SETGROUP = 0, // <20><EFBFBD> <20><><EFBFBD><EFBFBD> (Client->GameServer),
|
||||
// m_dwCID<49><44> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CID, m_dwData<74><61> <20>ٲ<EFBFBD> <20><EFBFBD> <20><>ȣ
|
||||
|
||||
};
|
||||
|
||||
unsigned long m_dwCID;
|
||||
unsigned long m_dwData;
|
||||
unsigned char m_cCmd;
|
||||
};
|
||||
|
||||
|
||||
// ģ<><C4A3> <20><><EFBFBD><EFBFBD> <20><>Ŷ ( Client <--> GameServer )
|
||||
struct PktFriendAck : public PktBase
|
||||
{
|
||||
enum CMD
|
||||
{
|
||||
ADD_FRIEND_ACK = 0, // ģ<><C4A3> <20><><EFBFBD><EFBFBD> Ack (GameServer->Client)
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : SERVER_ERROR (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
// NOT_LOGINED (<28>α<EFBFBD><CEB1>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD> <20><>)
|
||||
// REJECTED (<28>ź<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>)
|
||||
// LIST_FULL (ģ<><C4A3> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><> <20><> <20><><EFBFBD><EFBFBD>)
|
||||
|
||||
REMOVE_FRIEND_ACK = 1, // ģ<><C4A3> <20><><EFBFBD><EFBFBD> Ack (GameServer->Client)
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : SERVER_ERROR (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
|
||||
ADD_BAN_ACK = 2, // <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> Ack (GameServer->Client)
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : SERVER_ERROR (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
// NOT_LOGINED (<28>α<EFBFBD><CEB1>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD> <20><>)
|
||||
// LIST_FULL (ģ<><C4A3> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><> <20><> <20><><EFBFBD><EFBFBD>)
|
||||
|
||||
REMOVE_BAN_ACK = 3, // <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> Ack (GameServer->Client)
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : SERVER_ERROR (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
|
||||
FRIEND_LOGIN = 4, // ģ<><C4A3> <20>α<EFBFBD><CEB1><EFBFBD> (GameServer->Client), m_dwCID<49><44> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD> CID
|
||||
FRIEND_LOGOUT = 5 // ģ<><C4A3> <20>αƿ<D7BE> (GameServer->Client), m_dwCID<49><44> <20>αƿ<D7BE><C6BF><EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD> CID
|
||||
};
|
||||
|
||||
enum FriendERROR
|
||||
{
|
||||
SERVER_ERROR = 1,
|
||||
NOT_LOGINED = 2,
|
||||
REJECTED = 3,
|
||||
LIST_FULL = 4
|
||||
};
|
||||
|
||||
unsigned long m_dwCID;
|
||||
unsigned char m_cCmd;
|
||||
};
|
||||
|
||||
|
||||
// ģ<><C4A3> <20><><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
struct PktFriendDB : public PktBase
|
||||
{
|
||||
enum CMD
|
||||
{
|
||||
ADD_FRIEND = 0, // ģ<><C4A3> <20><><EFBFBD><EFBFBD> (GameServer->DBAgent) Owner<65><72> Reference<63><65> <20><><EFBFBD><EFBFBD>.
|
||||
REMOVE_FRIEND = 1, // ģ<><C4A3> <20><><EFBFBD><EFBFBD> (GameServer->DBAgent) Owner<65><72> Reference<63><65> <20><><EFBFBD><EFBFBD>.
|
||||
ADD_BAN = 2, // <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> (GameServer->DBAgent) Owner<65><72> Reference<63><65> <20><><EFBFBD><EFBFBD>.
|
||||
REMOVE_BAN = 3, // <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> (GameServer->DBAgent) Owner<65><72> Reference<63><65> <20><><EFBFBD><EFBFBD>.
|
||||
|
||||
SETGROUP = 4, // <20><EFBFBD> <20><><EFBFBD><EFBFBD> (GameServer->DBAgent)
|
||||
// Owner<65><72> Reference<63><65> m_dwData<74><61> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><EFBFBD><D7B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
|
||||
FRIEND_LIST = 5, // ģ<><C4A3> <20><><EFBFBD><EFBFBD>Ʈ (DBAgent->GameServer, GameServer->Client)
|
||||
// CIDTable<6C><65><EFBFBD><EFBFBD> SerializeOut<75><74> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20>ڿ<EFBFBD> <20>ٴ´<D9B4>.
|
||||
// Reference<63><65> <20>ǹ<EFBFBD> <20><><EFBFBD><EFBFBD>. m_dwData<74><61> <20>ڿ<EFBFBD> <20>ٴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>.
|
||||
|
||||
BAN_LIST = 6, // <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ (DBAgent->GameServer, GameServer->Client)
|
||||
// CIDTable<6C><65><EFBFBD><EFBFBD> SerializeOut<75><74> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20>ڿ<EFBFBD> <20>ٴ´<D9B4>.
|
||||
// Reference<63><65> <20>ǹ<EFBFBD> <20><><EFBFBD><EFBFBD>. m_dwData<74><61> <20>ڿ<EFBFBD> <20>ٴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>.
|
||||
};
|
||||
|
||||
unsigned long m_dwOwnerUID; // <20><><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> UID
|
||||
unsigned long m_dwOwnerCID; // <20><><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> CID
|
||||
unsigned long m_dwReferenceCID; // <20><><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> CID
|
||||
unsigned long m_dwData; // Data
|
||||
unsigned char m_cCmd;
|
||||
};
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,81 @@
|
||||
#ifndef _PARTY_INFO_PACKET_H_
|
||||
#define _PARTY_INFO_PACKET_H_
|
||||
|
||||
#include "DataPacket.h"
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><>Ƽ <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct PktPID* LPPktPID;
|
||||
struct PktPID : public PktDD
|
||||
{
|
||||
unsigned long m_dwCharID;
|
||||
unsigned long m_dwPartyID;
|
||||
};
|
||||
|
||||
typedef struct PktPIDAck* LPPktPIDAck;
|
||||
struct PktPIDAck : public PktDD
|
||||
{
|
||||
PARTY m_Party;
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><>Ƽ <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct PktCPD* LPPktCPD;
|
||||
struct PktCPD : public PktDD
|
||||
{
|
||||
DWORD m_dwLeaderID;
|
||||
DWORD m_dwMemberID;
|
||||
};
|
||||
|
||||
typedef struct PktCPDAck* LPPktCPDAck;
|
||||
struct PktCPDAck : public PktDD
|
||||
{
|
||||
PARTY m_Party;
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><>Ƽ <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct PktDPD* LPPktDPD;
|
||||
struct PktDPD : public PktDD
|
||||
{
|
||||
unsigned long m_dwPartyID;
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20><>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
// Sender(Send/Recv) Reference(Send/Recv)
|
||||
// <09><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> : CID/CID 0/SID
|
||||
// <09><><EFBFBD><EFBFBD> <20>αƿ<D7BE> : CID/CID 0/<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>(0 <20>ϰ<EFBFBD><CFB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20>絵 <20><><EFBFBD><EFBFBD>)
|
||||
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : CID/CID CID/CID
|
||||
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : CID/CID CID/<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>(0 <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>絵 <20><><EFBFBD><EFBFBD>)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
typedef struct PktPMD* LPPktPMD;
|
||||
struct PktPMD : public PktDD
|
||||
{
|
||||
unsigned long m_dwPartyID;
|
||||
unsigned long m_dwSenderID;
|
||||
unsigned long m_dwReferenceID;
|
||||
};
|
||||
|
||||
|
||||
#pragma pack()
|
||||
|
||||
|
||||
#endif
|
||||
104
GameTools/GLOBALSCRIPT/Network/Packet/PacketStruct/ServerInfo.h
Normal file
104
GameTools/GLOBALSCRIPT/Network/Packet/PacketStruct/ServerInfo.h
Normal file
@@ -0,0 +1,104 @@
|
||||
#ifndef _LOGIN_SERVER_INFO_
|
||||
#define _LOGIN_SERVER_INFO_
|
||||
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include <algorithm>
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü<EFBFBD><C3BC>
|
||||
typedef union SERVER_ID* LPSERVER_ID;
|
||||
union SERVER_ID
|
||||
{
|
||||
enum Zone { ZONE1 = 1, ZONE2 = 2, BATTLE_GROUND = 3 };
|
||||
|
||||
typedef struct SID* LPSID;
|
||||
struct SID
|
||||
{
|
||||
char Type;
|
||||
char Group;
|
||||
char Channel;
|
||||
char ID;
|
||||
};
|
||||
|
||||
SID sID;
|
||||
DWORD dwID;
|
||||
|
||||
// 2002-12-24 cppis <20><> <20>߰<EFBFBD>
|
||||
inline char GetChannel(void) { return sID.Channel; }
|
||||
inline char GetZone(void) { return sID.ID; }
|
||||
};
|
||||
|
||||
|
||||
typedef struct SERVER* LPSERVER_GROUP;
|
||||
struct SERVER_GROUP
|
||||
{
|
||||
enum { CHANNEL_NUM = 2, SERVER_NAME = 15 };
|
||||
|
||||
char m_Group; // <20><><EFBFBD><EFBFBD> <20><EFBFBD>
|
||||
char m_Name[SERVER_NAME]; // <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
|
||||
unsigned short m_ChannelNum; // ä<><C3A4> <20><><EFBFBD><EFBFBD>
|
||||
long m_ClientNum[CHANNEL_NUM]; // <20><><EFBFBD><EFBFBD> <20><> <20><>
|
||||
};
|
||||
|
||||
|
||||
typedef struct SERVER* LPSERVER_LIST;
|
||||
struct SERVER_LIST
|
||||
{
|
||||
enum { SERVER_NUM = 10 };
|
||||
|
||||
unsigned short m_ServerNum; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SERVER_GROUP m_ServerGroup[SERVER_NUM]; // <20><><EFBFBD><EFBFBD> <20><EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
#pragma pack()
|
||||
|
||||
|
||||
|
||||
typedef struct RylServerInfo* LPRylServerInfo;
|
||||
struct RylServerInfo
|
||||
{
|
||||
enum
|
||||
{
|
||||
GROUP_NAME_LENGTH = 120,
|
||||
PATCH_ADDRESS_LENGTH = 100
|
||||
};
|
||||
|
||||
SERVER_ID m_ServerUID;
|
||||
IN_ADDR m_ServerAddress;
|
||||
unsigned long m_dwClientVer;
|
||||
unsigned long m_dwChecksum;
|
||||
|
||||
size_t m_nGroupNameLen;
|
||||
size_t m_nPatchAddressLen;
|
||||
|
||||
char m_szGroupName[GROUP_NAME_LENGTH];
|
||||
char m_szPatchAddress[PATCH_ADDRESS_LENGTH];
|
||||
|
||||
unsigned short m_dwChannelClientNum[SERVER_GROUP::CHANNEL_NUM];
|
||||
unsigned short m_usChannelNum;
|
||||
|
||||
RylServerInfo::RylServerInfo()
|
||||
: m_dwClientVer(0), m_dwChecksum(0),
|
||||
m_nPatchAddressLen(0), m_usChannelNum(0)
|
||||
{
|
||||
m_ServerUID.dwID = 0;
|
||||
m_ServerAddress.S_un.S_addr = 0;
|
||||
|
||||
m_szPatchAddress[0] = '\0';
|
||||
|
||||
strncpy(m_szGroupName, "UnKnown", GROUP_NAME_LENGTH);
|
||||
m_nGroupNameLen = strlen(m_szGroupName);
|
||||
|
||||
std::fill_n(m_dwChannelClientNum, int(SERVER_GROUP::CHANNEL_NUM), 0);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,195 @@
|
||||
#ifndef _DBAGENT_TO_LOGIN_
|
||||
#define _DBAGENT_TO_LOGIN_
|
||||
|
||||
#include <DB/DBDefine.h>
|
||||
#include <Network/Packet/PacketBase.h>
|
||||
#include <Network/Packet/PacketStruct/DataPacket.h>
|
||||
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
|
||||
// <20><> <20><>Ŷ ( Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ -> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5<>ʸ<EFBFBD><CAB8><EFBFBD>.. <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ŵ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> Ping<6E><67> <20>ش<EFBFBD>. )
|
||||
typedef struct PktSyP* LPPktSyP;
|
||||
struct PktSyP : public PktBase
|
||||
{
|
||||
unsigned long m_dwTickTime;
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20><>û <20><>Ŷ
|
||||
typedef struct PktSL* LPPktSL;
|
||||
struct PktSL : public PktBase
|
||||
{
|
||||
unsigned long m_dwServerID;
|
||||
IN_ADDR m_Address;
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
typedef struct PktSLAck* LPPktSLAck;
|
||||
struct PktSLAck : public PktBase
|
||||
{
|
||||
enum { PATCH_ADDRESS_LENGTH = 100 };
|
||||
|
||||
unsigned long m_dwServerID;
|
||||
__int64 m_dlItemUID;
|
||||
|
||||
unsigned long m_dwClientVer;
|
||||
unsigned long m_dwCheckSum;
|
||||
|
||||
char m_PatchAddress[PATCH_ADDRESS_LENGTH];
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktSVU* LPPktSVU;
|
||||
struct PktSVU : public PktBase
|
||||
{
|
||||
enum { PATCH_ADDRESS_LENGTH = 100 };
|
||||
|
||||
unsigned long m_dwServerID;
|
||||
IN_ADDR m_ServerAddr;
|
||||
unsigned long m_dwClientVer;
|
||||
unsigned long m_dwCheckSum;
|
||||
char m_PatchAddress[PATCH_ADDRESS_LENGTH];
|
||||
};
|
||||
|
||||
|
||||
// ä<><C3A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktSCInfo* LPPktSCInfo;
|
||||
struct PktSCInfo : public PktBase
|
||||
{
|
||||
enum { MAX_CHANNEL_NUM = 2 };
|
||||
|
||||
unsigned long m_dwServerID;
|
||||
unsigned char m_wChannelNum;
|
||||
unsigned short m_dwChannelClientNum[MAX_CHANNEL_NUM];
|
||||
};
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// <20><>ġ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
|
||||
|
||||
// <20><>ġ <20><><EFBFBD><EFBFBD> <20><>û <20><>Ŷ
|
||||
typedef struct PktSPI* LPPktSPI;
|
||||
struct PktSPI : public PktBase
|
||||
{
|
||||
unsigned long m_dwServerID;
|
||||
};
|
||||
|
||||
// <20><>ġ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
typedef struct PktSPIAck* LPPktSPIAck;
|
||||
struct PktSPIAck : public PktBase
|
||||
{
|
||||
enum { PATCH_ADDRESS_LENGTH = 100 };
|
||||
unsigned long m_dwClientVer;
|
||||
char m_PatchAddress[PATCH_ADDRESS_LENGTH];
|
||||
};
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Zone <20><><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktSZ* LPPktSZ;
|
||||
struct PktSZ : public PktBase
|
||||
{
|
||||
unsigned short m_cChannel;
|
||||
unsigned char m_cZone;
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ack
|
||||
typedef struct PktSZAck* LPPktSZAck;
|
||||
struct PktSZAck : public PktBase
|
||||
{
|
||||
unsigned long m_dwServerID;
|
||||
IN_ADDR m_GameAddress;
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
|
||||
typedef struct PktSZMv* LPPktSZMv;
|
||||
struct PktSZMv : public PktBase
|
||||
{
|
||||
POS m_NewPos;
|
||||
char m_cZone;
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ack
|
||||
typedef struct PktSZMvAck* LPPktSZMvAck;
|
||||
struct PktSZMvAck : public PktBase
|
||||
{
|
||||
enum { MAX_CHANNEL_NUM = 2 };
|
||||
|
||||
unsigned short m_wChannelNum[MAX_CHANNEL_NUM];
|
||||
unsigned char m_cZone;
|
||||
};
|
||||
|
||||
typedef struct PktSZMvD* LPPktSZMvD;
|
||||
struct PktSZMvD : public PktDD
|
||||
{
|
||||
unsigned long m_dwUserID;
|
||||
char m_cZone;
|
||||
POS m_NewPos;
|
||||
};
|
||||
|
||||
typedef struct PktSZMvDAck* LPPktSZMvDAck;
|
||||
struct PktSZMvDAck : public PktDD
|
||||
{
|
||||
enum { MAX_CHANNEL_NUM = 2 };
|
||||
|
||||
unsigned char m_cZone;
|
||||
unsigned short m_wChannelNum[MAX_CHANNEL_NUM];
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
typedef struct PktSA* LPPktSA;
|
||||
struct PktSA : public PktDD
|
||||
{
|
||||
unsigned long m_dwUserID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
|
||||
char m_cZone; // <20><> <20><>ȣ
|
||||
char m_cChannel; // ä<><C3A4> <20><>ȣ
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD> Ack
|
||||
typedef struct PktSAAck* LPPktSAAck;
|
||||
struct PktSAAck : public PktDD
|
||||
{
|
||||
unsigned long m_dwServerID;
|
||||
IN_ADDR m_GameAddress;
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||
typedef struct PktUUT *LPPktUUT;
|
||||
struct PktUUT : public PktBase {
|
||||
enum {
|
||||
UpdateUIDTableNone = 0, // <20><><EFBFBD><EFBFBD>
|
||||
UpdateUIDTableLogin = 1, // <20>α<EFBFBD><CEB1><EFBFBD>
|
||||
UpdateUIDTableLogout = 2 // <20>αƿ<D7BE>
|
||||
};
|
||||
|
||||
unsigned char m_cCmd;
|
||||
|
||||
unsigned long m_dwSessionID;
|
||||
unsigned long m_dwServerID;
|
||||
unsigned long m_dwUserID;
|
||||
unsigned long m_dwCharID;
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̱<EFBFBD>.
|
||||
typedef struct PktUK* LPPktUK;
|
||||
struct PktUK : public PktBase
|
||||
{
|
||||
unsigned long m_dwUserID;
|
||||
unsigned long m_dwCharID;
|
||||
unsigned long m_dwServerID;
|
||||
};
|
||||
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
191
GameTools/GLOBALSCRIPT/Network/XORCrypt/XORCrypt.cpp
Normal file
191
GameTools/GLOBALSCRIPT/Network/XORCrypt/XORCrypt.cpp
Normal file
@@ -0,0 +1,191 @@
|
||||
// XORCrypt.cpp: implementation of the CXORCrypt class.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "XORCrypt.h"
|
||||
|
||||
#include <ctime>
|
||||
#include <cstdlib>
|
||||
|
||||
CXORCrypt CXORCrypt::ms_this;
|
||||
|
||||
CXORCrypt::CXORCrypt()
|
||||
{
|
||||
InitCodePage();
|
||||
}
|
||||
|
||||
|
||||
CXORCrypt::~CXORCrypt()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
// XORF [ public ] - XOR <20><><EFBFBD><EFBFBD>. # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Parameter : 1st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 2st : <20><><EFBFBD><EFBFBD>, 3st : <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Return:
|
||||
void CXORCrypt::XORF(char *Start_In, int Length_In, unsigned short PageVer,
|
||||
unsigned char PageNum1, unsigned char PageNum2)
|
||||
{
|
||||
for (int Counter = 0; Counter < Length_In; ++Counter)
|
||||
{
|
||||
*Start_In = *Start_In ^ BitFields[PageVer][PageNum1][Counter % BIT_COUNT];
|
||||
*Start_In = *Start_In ^ BitFields[PageVer][PageNum2][Counter % BIT_COUNT];
|
||||
++Start_In;
|
||||
}
|
||||
}
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
// XORB [ public ] - XOR <20><><EFBFBD><EFBFBD>. # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Parameter : 1st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 2st : <20><><EFBFBD><EFBFBD>, 3st : <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Return:
|
||||
void CXORCrypt::XORB(char *Start_In, int Length_In, unsigned short PageVer,
|
||||
unsigned char PageNum1, unsigned char PageNum2)
|
||||
{
|
||||
for (int Counter = 0; Counter < Length_In; ++Counter)
|
||||
{
|
||||
*Start_In = *Start_In ^ BitFields[PageVer][PageNum2][Counter % BIT_COUNT];
|
||||
*Start_In = *Start_In ^ BitFields[PageVer][PageNum1][Counter % BIT_COUNT];
|
||||
++Start_In;
|
||||
}
|
||||
}
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
// InitCODE_PAGE [ public ] - <20><>ȣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ <20>Ѵ<EFBFBD>
|
||||
// Parameter :
|
||||
// Return:
|
||||
void CXORCrypt::InitCodePage(void)
|
||||
{
|
||||
int CODE_PAGENums = CODE_PAGE * 10;
|
||||
|
||||
srand((unsigned)time(NULL));
|
||||
for (int Counter = 0; Counter < CODE_PAGENums; ++Counter)
|
||||
{
|
||||
m_CodePage[Counter] = rand() % CODE_PAGE;
|
||||
|
||||
if(Counter > 1)
|
||||
{
|
||||
if (m_CodePage[Counter] == m_CodePage[Counter - 1])
|
||||
{
|
||||
--Counter;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_CodePageCount = rand() % (CODE_PAGE * 10);
|
||||
}
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
// GetCODE_PAGE [ public ] - <20><>ȣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>
|
||||
// Parameter :
|
||||
// Return:
|
||||
unsigned long CXORCrypt::GetCodePage(void)
|
||||
{
|
||||
if(0xffffff00 < m_CodePageCount)
|
||||
{
|
||||
m_CodePageCount = 0;
|
||||
}
|
||||
|
||||
m_CodePageCount = (m_CodePageCount + 2) % (CODE_PAGE * 10);
|
||||
|
||||
return (((unsigned long)PAGE_VERSION << 16) & 0xffff0000) |
|
||||
(((unsigned long)m_CodePage[m_CodePageCount] << 8) & 0x0000ff00) |
|
||||
((unsigned long)m_CodePage[m_CodePageCount - 1] & 0x000000ff);
|
||||
}
|
||||
|
||||
unsigned long CXORCrypt::GetCodePage(unsigned short PageVer_In)
|
||||
{
|
||||
if(0xffffff00 < m_CodePageCount)
|
||||
{
|
||||
m_CodePageCount = 0;
|
||||
}
|
||||
|
||||
m_CodePageCount = (m_CodePageCount + 2) % (CODE_PAGE * 10);
|
||||
|
||||
return (((unsigned long)PageVer_In << 16) & 0xffff0000) |
|
||||
(((unsigned long)m_CodePage[m_CodePageCount] << 8) & 0x0000ff00) |
|
||||
((unsigned long)m_CodePage[m_CodePageCount - 1] & 0x000000ff);
|
||||
}
|
||||
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
// InnerEncodeS [ public ] - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣȭ : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> XOR <20><><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>. # Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><>
|
||||
// Parameter : 1st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 2st : <20><><EFBFBD><EFBFBD>, 3st : <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Return:
|
||||
bool CXORCrypt::EncodePacket(char *Start_In, int Length_In, unsigned long CodePage_In)
|
||||
{
|
||||
unsigned short PageVer = 0;
|
||||
unsigned char PageNum1 = 0, PageNum2 = 0;
|
||||
|
||||
PageVer = (unsigned short)(((CodePage_In & 0xffff0000) >> 16) & 0x0000ffff);
|
||||
PageNum1 = (unsigned char)(((CodePage_In & 0xff00) >> 8) & 0x00ff);
|
||||
PageNum2 = (unsigned char)(CodePage_In & 0x00ff);
|
||||
|
||||
if(PageVer < 0 || PageVer > 1)
|
||||
return false;
|
||||
|
||||
if(PageNum1 < 0 || PageNum1 >= CODE_PAGE || PageNum2 < 0 || PageNum2 >= CODE_PAGE)
|
||||
return false;
|
||||
|
||||
XORF(Start_In, Length_In, PageVer, PageNum1, PageNum2);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
// InnerEncodeS [ public ] - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣȭ : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> XOR <20><><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>. # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Parameter : 1st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 2st : <20><><EFBFBD><EFBFBD>, 3st : <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Return:
|
||||
bool CXORCrypt::DecodePacket(char *Start_In, int Length_In, unsigned long CodePage_In)
|
||||
{
|
||||
unsigned short PageVer = 0;
|
||||
unsigned char PageNum1 = 0, PageNum2 = 0;
|
||||
|
||||
PageVer = (unsigned short)(((CodePage_In & 0xffff0000) >> 16) & 0x0000ffff);
|
||||
PageNum1 = (unsigned char)(((CodePage_In & 0xff00) >> 8) & 0x00ff);
|
||||
PageNum2 = (unsigned char)(CodePage_In & 0x00ff);
|
||||
|
||||
if(PageVer < 0 || PageVer > 1)
|
||||
return false;
|
||||
|
||||
if(PageNum1 < 0 || PageNum1 >= CODE_PAGE || PageNum2 < 0 || PageNum2 >= CODE_PAGE)
|
||||
return false;
|
||||
|
||||
XORB(Start_In, Length_In, PageVer, PageNum1, PageNum2);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
// EncodeHeader [ public ] - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣȭ : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> XOR <20><><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
// Parameter : 1st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 2st : <20><><EFBFBD><EFBFBD>
|
||||
// Return:
|
||||
void CXORCrypt::EncodeHeader(char *Start_In, int Length_In, unsigned short PageVer_In, unsigned char PageNum_In)
|
||||
{
|
||||
for(int Counter = 0; Counter < Length_In; ++Counter)
|
||||
{
|
||||
*Start_In = *Start_In ^ BitFields[PageVer_In][PageNum_In][Counter % BIT_COUNT];
|
||||
*Start_In = (((*Start_In & 0x80) >> 7) & 0x01) | ((*Start_In << 1) & 0xFE);
|
||||
++Start_In;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Interface////////////////////////////////////////////////////////////////////////////////////
|
||||
// DecodeHeader [ public ] - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣȭ : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> XOR <20><><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>. # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Parameter : 1st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 2st : <20><><EFBFBD><EFBFBD>
|
||||
// Return:
|
||||
void CXORCrypt::DecodeHeader(char *Start_In, int Length_In, unsigned short PageVer_In, unsigned char PageNum_In)
|
||||
{
|
||||
for(int Counter = 0; Counter < Length_In; ++Counter)
|
||||
{
|
||||
*Start_In = (((*Start_In & 0x01) << 7) & 0x80) | ((*Start_In >> 1) & 0x7F);
|
||||
*Start_In = *Start_In ^ BitFields[PageVer_In][PageNum_In][Counter % BIT_COUNT];
|
||||
++Start_In;
|
||||
}
|
||||
}
|
||||
|
||||
58
GameTools/GLOBALSCRIPT/Network/XORCrypt/XORCrypt.h
Normal file
58
GameTools/GLOBALSCRIPT/Network/XORCrypt/XORCrypt.h
Normal file
@@ -0,0 +1,58 @@
|
||||
#ifndef _CXOR_CRYPT_H_
|
||||
#define _CXOR_CRYPT_H_
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <Pattern/Singleton.h>
|
||||
|
||||
class CXORCrypt : public CSingleton<CXORCrypt>
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
PAGE_VERSION = 0,
|
||||
BIT_COUNT = 40,
|
||||
CODE_PAGE = 10,
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
static const unsigned char BitFields[][CODE_PAGE][BIT_COUNT];
|
||||
|
||||
unsigned char m_CodePage[CODE_PAGE * 10];
|
||||
unsigned long m_CodePageCount;
|
||||
|
||||
void InitCodePage(void);
|
||||
|
||||
void XORF(char *Start_In, int Length_In, unsigned short PageVer, unsigned char PageNum1, unsigned char PageNum2);
|
||||
void XORB(char *Start_In, int Length_In, unsigned short PageVer, unsigned char PageNum1, unsigned char PageNum2);
|
||||
|
||||
// To make Singleton Class.
|
||||
CXORCrypt();
|
||||
|
||||
static CXORCrypt ms_this;
|
||||
|
||||
public:
|
||||
|
||||
~CXORCrypt();
|
||||
|
||||
// interface of encoder, decoder
|
||||
unsigned long GetCodePage(void);
|
||||
unsigned long GetCodePage(unsigned short PageVer_In);
|
||||
inline unsigned short GetPageVer(unsigned long CodePage_In);
|
||||
|
||||
bool EncodePacket(char *Start_In, int Length_In, unsigned long CodePage_In);
|
||||
bool DecodePacket(char *Start_In, int Length_In, unsigned long CodePage_In);
|
||||
|
||||
void EncodeHeader(char *Start_In, int HeaderLen_In, unsigned short PageVer_In, unsigned char PageNum_In);
|
||||
void DecodeHeader(char *Start_In, int HeaderLen_In, unsigned short PageVer_In, unsigned char PageNum_In);
|
||||
};
|
||||
|
||||
inline unsigned short CXORCrypt::GetPageVer(unsigned long CodePage_In)
|
||||
{
|
||||
return (unsigned short)(((CodePage_In & 0xffff0000) >> 16) & 0x0000ffff);
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
213
GameTools/GLOBALSCRIPT/Network/XORCrypt/XORCryptoCodeList.cpp
Normal file
213
GameTools/GLOBALSCRIPT/Network/XORCrypt/XORCryptoCodeList.cpp
Normal file
@@ -0,0 +1,213 @@
|
||||
#include "stdafx.h"
|
||||
#include "XORCrypt.h"
|
||||
|
||||
const unsigned char CXORCrypt::BitFields[][CODE_PAGE][BIT_COUNT] =
|
||||
{
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//Code Version 0
|
||||
{
|
||||
// Code Page 1
|
||||
0x82, 0x53, 0x43, 0x4C, 0x2B,
|
||||
0x0D, 0x37, 0xD7, 0xD9, 0xD8,
|
||||
0x1B, 0x6D, 0xA0, 0xC3, 0x2B,
|
||||
0xEE, 0x45, 0x88, 0x1A, 0xA6,
|
||||
0x18, 0x1D, 0x9D, 0x38, 0x2A,
|
||||
0x55, 0x03, 0x1D, 0xCD, 0xA6,
|
||||
0x73, 0x07, 0xED, 0x8D, 0xC5,
|
||||
0xDB, 0xA3, 0xBD, 0xB6, 0xD5,
|
||||
|
||||
// Code Page 2
|
||||
0x34, 0xB5, 0xB2, 0x3D, 0x7D,
|
||||
0x43, 0x8C, 0xC0, 0x21, 0x25,
|
||||
0xCD, 0xB6, 0x53, 0x76, 0xCE,
|
||||
0x5D, 0xD4, 0x87, 0xCA, 0x84,
|
||||
0x81, 0xCB, 0x5E, 0x04, 0xBA,
|
||||
0x69, 0x3E, 0x65, 0xDE, 0x21,
|
||||
0x8A, 0x63, 0x62, 0x71, 0x90,
|
||||
0x87, 0x0A, 0x52, 0x28, 0x44,
|
||||
|
||||
// Code Page 3
|
||||
0xA3, 0x49, 0xDC, 0xEA, 0x09,
|
||||
0xB7, 0x01, 0xA4, 0xA1, 0x11,
|
||||
0x11, 0x8E, 0x80, 0x35, 0x5B,
|
||||
0xDD, 0x38, 0xD5, 0x4E, 0x36,
|
||||
0x0C, 0xA2, 0xBB, 0x05, 0x36,
|
||||
0x57, 0x2E, 0x98, 0xBE, 0x88,
|
||||
0x3C, 0x28, 0x43, 0x63, 0xA0,
|
||||
0xE9, 0xE1, 0x6D, 0x51, 0xCB,
|
||||
|
||||
// Code Page 4
|
||||
0x4D, 0x62, 0x84, 0x43, 0x89,
|
||||
0xC7, 0x89, 0x83, 0x65, 0x29,
|
||||
0x53, 0x95, 0x7C, 0xC0, 0xA1,
|
||||
0x0C, 0xDB, 0xD7, 0x04, 0xD8,
|
||||
0x6A, 0xD1, 0x73, 0x1D, 0x21,
|
||||
0x67, 0x86, 0x8D, 0xA4, 0xA0,
|
||||
0x34, 0xBD, 0x31, 0x20, 0x61,
|
||||
0x0E, 0xE9, 0x63, 0xB4, 0xC0,
|
||||
|
||||
// Code Page 5
|
||||
0xC7, 0x36, 0x1B, 0x41, 0x23,
|
||||
0x9C, 0xD1, 0x8C, 0x25, 0x53,
|
||||
0x42, 0x2E, 0x45, 0x6D, 0x42,
|
||||
0x7B, 0x4E, 0x5B, 0xEB, 0x24,
|
||||
0x33, 0x74, 0x52, 0x28, 0xC6,
|
||||
0x2A, 0xC3, 0x16, 0x60, 0xA5,
|
||||
0x45, 0x35, 0xDB, 0x9A, 0x54,
|
||||
0x97, 0xE2, 0xEE, 0x9B, 0xDE,
|
||||
|
||||
// Code Page 6
|
||||
0xE0, 0xC3, 0x84, 0x41, 0xED,
|
||||
0x45, 0x4C, 0x69, 0xD9, 0x28,
|
||||
0x55, 0x27, 0x8E, 0x3A, 0x3C,
|
||||
0x8E, 0x84, 0x97, 0x14, 0xE6,
|
||||
0x58, 0x51, 0x26, 0x0D, 0xE2,
|
||||
0x9E, 0x66, 0x7C, 0x0D, 0x01,
|
||||
0x7D, 0x17, 0x4C, 0x08, 0xDD,
|
||||
0x97, 0x1C, 0x7B, 0xCE, 0x5D,
|
||||
|
||||
// Code Page 7
|
||||
0x54, 0x37, 0x7C, 0x0C, 0x8E,
|
||||
0x27, 0x7A, 0x78, 0x2E, 0xE6,
|
||||
0x6D, 0x25, 0x62, 0x62, 0x98,
|
||||
0x20, 0x2E, 0x23, 0x15, 0x61,
|
||||
0x7D, 0x97, 0x50, 0x07, 0x20,
|
||||
0x7A, 0x04, 0x29, 0x62, 0x90,
|
||||
0x6B, 0xE9, 0xE6, 0x22, 0x72,
|
||||
0x38, 0x56, 0xC9, 0x06, 0x2E,
|
||||
|
||||
// Code Page 8
|
||||
0x3B, 0x47, 0x08, 0x2D, 0x21,
|
||||
0x42, 0x07, 0x69, 0x4A, 0x57,
|
||||
0x8B, 0x79, 0xE7, 0x56, 0x27,
|
||||
0x23, 0x24, 0x85, 0x47, 0x74,
|
||||
0x75, 0x85, 0xA9, 0xEB, 0x10,
|
||||
0xCB, 0x17, 0x85, 0x4B, 0x5E,
|
||||
0x20, 0x78, 0xD0, 0x7D, 0x86,
|
||||
0x5E, 0x14, 0x7E, 0x64, 0x50,
|
||||
|
||||
// Code Page 9
|
||||
0x69, 0x52, 0x4A, 0xBD, 0x8C,
|
||||
0x9B, 0xD6, 0x63, 0xBD, 0x26,
|
||||
0x86, 0x32, 0x95, 0xA4, 0x02,
|
||||
0x9B, 0x01, 0x14, 0x49, 0x78,
|
||||
0x88, 0x57, 0x3A, 0x01, 0x4A,
|
||||
0xBC, 0x50, 0xCD, 0x31, 0x39,
|
||||
0x71, 0x30, 0x5B, 0x9C, 0x4D,
|
||||
0x21, 0x67, 0x82, 0xE8, 0x5C,
|
||||
|
||||
// Code Page 10
|
||||
0x66, 0x10, 0xA9, 0x7D, 0xD2,
|
||||
0x36, 0xE2, 0xB1, 0x28, 0x20,
|
||||
0xD5, 0xE7, 0xD5, 0x0E, 0xD4,
|
||||
0x0C, 0x2C, 0x77, 0x80, 0x0E,
|
||||
0xA6, 0x37, 0xBE, 0x61, 0xAD,
|
||||
0xD6, 0x17, 0x65, 0x13, 0x70,
|
||||
0xAE, 0x40, 0x3B, 0x52, 0xEE,
|
||||
0x53, 0x84, 0xEB, 0x04, 0x0D,
|
||||
},
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//Code Version 1
|
||||
{
|
||||
// Code Page 1
|
||||
0x49, 0x8C, 0x77, 0xC0, 0xC0,
|
||||
0x64, 0x54, 0x0B, 0x22, 0xBD,
|
||||
0x82, 0x93, 0x9A, 0x23, 0x8D,
|
||||
0xE4, 0xC8, 0x9D, 0xB3, 0x50,
|
||||
0x44, 0xB1, 0xE2, 0x9E, 0x15,
|
||||
0x7A, 0xA1, 0x0C, 0x24, 0xE3,
|
||||
0x1E, 0x0A, 0x0A, 0x73, 0x6A,
|
||||
0xA5, 0x8B, 0x3A, 0x53, 0x33,
|
||||
|
||||
// Code Page 2
|
||||
0xB0, 0xE6, 0xB7, 0x51, 0x70,
|
||||
0xDA, 0xD6, 0x29, 0xAA, 0x10,
|
||||
0xB5, 0x8A, 0x38, 0x37, 0x4E,
|
||||
0x7A, 0x3B, 0x74, 0x7B, 0x63,
|
||||
0x41, 0x7C, 0x21, 0x65, 0x5E,
|
||||
0x26, 0x95, 0x44, 0x75, 0xA3,
|
||||
0x74, 0xDD, 0xB4, 0x33, 0x9E,
|
||||
0x54, 0x3C, 0x95, 0x5E, 0x34,
|
||||
|
||||
// Code Page 3
|
||||
0x10, 0x19, 0x43, 0x64, 0x78,
|
||||
0x2B, 0xA6, 0x60, 0x7D, 0xCD,
|
||||
0xA9, 0x28, 0xB8, 0x85, 0x0E,
|
||||
0x66, 0xC7, 0x3C, 0x28, 0xDC,
|
||||
0xA1, 0x4D, 0x60, 0x9B, 0xC7,
|
||||
0xD3, 0x74, 0x93, 0xE6, 0xC3,
|
||||
0x97, 0x76, 0x12, 0xA4, 0xCB,
|
||||
0xB9, 0x22, 0x51, 0xB9, 0x79,
|
||||
|
||||
// Code Page 4
|
||||
0x5C, 0x68, 0xDB, 0xE6, 0x59,
|
||||
0x57, 0x95, 0xCD, 0xAE, 0xCA,
|
||||
0x67, 0xB8, 0x37, 0x90, 0xBA,
|
||||
0x54, 0x98, 0x95, 0x73, 0x8E,
|
||||
0x47, 0xC1, 0x40, 0xBA, 0x80,
|
||||
0x26, 0x10, 0xAA, 0x60, 0x64,
|
||||
0xD8, 0x69, 0xC7, 0x0D, 0x2B,
|
||||
0x28, 0xA6, 0xBA, 0x01, 0x4A,
|
||||
|
||||
// Code Page 5
|
||||
0xEE, 0x28, 0x65, 0xC4, 0x9D,
|
||||
0x41, 0x8D, 0x91, 0x6C, 0x91,
|
||||
0x7E, 0x80, 0xC3, 0xD1, 0xAE,
|
||||
0xB6, 0x92, 0x41, 0x66, 0x13,
|
||||
0x72, 0x20, 0x26, 0xA1, 0x72,
|
||||
0x05, 0x29, 0x08, 0x88, 0x30,
|
||||
0x40, 0x6D, 0x5A, 0x41, 0x01,
|
||||
0x7A, 0xDB, 0x2C, 0xEE, 0xC3,
|
||||
|
||||
// Code Page 6
|
||||
0x5C, 0x03, 0x38, 0xD8, 0x95,
|
||||
0xE7, 0xB4, 0x67, 0x30, 0x51,
|
||||
0x21, 0x68, 0x78, 0x89, 0x68,
|
||||
0x0B, 0xE3, 0xB0, 0x28, 0xB3,
|
||||
0xA9, 0x38, 0x18, 0xE4, 0x59,
|
||||
0x43, 0xC9, 0x52, 0x75, 0x04,
|
||||
0x15, 0x07, 0x97, 0x14, 0x07,
|
||||
0x27, 0xDA, 0xE5, 0xD9, 0xDB,
|
||||
|
||||
// Code Page 7
|
||||
0xDB, 0x08, 0x27, 0xA3, 0x64,
|
||||
0xDC, 0x42, 0xE3, 0x3D, 0x0D,
|
||||
0x26, 0xA2, 0xC3, 0x5E, 0x3E,
|
||||
0xA7, 0x47, 0xE4, 0x1C, 0x73,
|
||||
0x13, 0x99, 0x9E, 0xBA, 0xD3,
|
||||
0x08, 0x73, 0x88, 0x03, 0x01,
|
||||
0x24, 0x2E, 0x09, 0xBD, 0x3A,
|
||||
0x6E, 0x3C, 0xB6, 0xA2, 0x22,
|
||||
|
||||
// Code Page 8
|
||||
0xE7, 0x27, 0x60, 0x20, 0x85,
|
||||
0xDA, 0xEA, 0x84, 0x86, 0x41,
|
||||
0x67, 0x1C, 0x83, 0xBE, 0x7A,
|
||||
0x61, 0x67, 0x01, 0x18, 0x30,
|
||||
0xC6, 0x37, 0xBC, 0x51, 0xBC,
|
||||
0x78, 0xA1, 0x53, 0x53, 0x58,
|
||||
0x9B, 0x32, 0x05, 0x67, 0x6B,
|
||||
0xC7, 0x3A, 0x7C, 0xA8, 0xE5,
|
||||
|
||||
// Code Page 9
|
||||
0x70, 0x10, 0x29, 0x88, 0x94,
|
||||
0xC0, 0xEE, 0x8D, 0x52, 0x20,
|
||||
0xD9, 0xC3, 0x3C, 0xB3, 0x43,
|
||||
0x74, 0x83, 0xC8, 0xC5, 0xAA,
|
||||
0x90, 0x58, 0x0C, 0xD0, 0xBC,
|
||||
0x2A, 0xED, 0x04, 0x05, 0x8E,
|
||||
0x27, 0xDE, 0x9C, 0x37, 0x57,
|
||||
0x2A, 0x93, 0x63, 0x1B, 0x9E,
|
||||
|
||||
// Code Page 10
|
||||
0xC3, 0x52, 0xDB, 0xE9, 0x63,
|
||||
0x9A, 0x87, 0x18, 0x6D, 0xBE,
|
||||
0x1B, 0x37, 0x6A, 0xEA, 0x01,
|
||||
0x02, 0x01, 0xB5, 0x74, 0x71,
|
||||
0xA5, 0x9A, 0x9A, 0x3A, 0x11,
|
||||
0x8B, 0x62, 0xD7, 0xB0, 0x06,
|
||||
0x0C, 0xA0, 0x10, 0x09, 0x97,
|
||||
0x5A, 0xEB, 0xEA, 0x18, 0xB8,
|
||||
}
|
||||
};
|
||||
58
GameTools/GLOBALSCRIPT/Pattern/Singleton.h
Normal file
58
GameTools/GLOBALSCRIPT/Pattern/Singleton.h
Normal file
@@ -0,0 +1,58 @@
|
||||
#ifndef _CSINGLETON_H_
|
||||
#define _CSINGLETON_H_
|
||||
|
||||
#include <cassert>
|
||||
|
||||
template<typename Derived>
|
||||
class CSingleton
|
||||
{
|
||||
private:
|
||||
|
||||
static Derived* ms_pSingleton;
|
||||
|
||||
protected:
|
||||
|
||||
CSingleton();
|
||||
~CSingleton();
|
||||
|
||||
public:
|
||||
|
||||
inline static Derived& GetInstance();
|
||||
inline static Derived* GetInstancePtr();
|
||||
};
|
||||
|
||||
|
||||
template<typename Derived>
|
||||
CSingleton<Derived>::CSingleton()
|
||||
{
|
||||
assert(!ms_pSingleton && "Singleton Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>.");
|
||||
size_t nOffset = (size_t)(Derived*) 1 - (size_t)(CSingleton<Derived>*)(Derived*) 1;
|
||||
ms_pSingleton = (Derived*)((size_t)this + nOffset);
|
||||
}
|
||||
|
||||
|
||||
template<typename Derived>
|
||||
CSingleton<Derived>::~CSingleton()
|
||||
{
|
||||
assert(ms_pSingleton && "Singleton Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʾҽ<CABE><D2BD>ϴ<EFBFBD>");
|
||||
ms_pSingleton = 0;
|
||||
}
|
||||
|
||||
template<typename Derived>
|
||||
inline Derived& CSingleton<Derived>::GetInstance()
|
||||
{
|
||||
assert(ms_pSingleton && "Singleton Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʾҽ<CABE><D2BD>ϴ<EFBFBD>");
|
||||
return (*ms_pSingleton);
|
||||
}
|
||||
|
||||
template<typename Derived>
|
||||
inline Derived* CSingleton<Derived>::GetInstancePtr()
|
||||
{
|
||||
assert(ms_pSingleton && "Singleton Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʾҽ<CABE><D2BD>ϴ<EFBFBD>");
|
||||
return (ms_pSingleton);
|
||||
}
|
||||
|
||||
template<typename Derived>
|
||||
Derived* CSingleton<Derived>::ms_pSingleton = 0;
|
||||
|
||||
#endif
|
||||
78
GameTools/GLOBALSCRIPT/ScriptEngine/BaseDef.h
Normal file
78
GameTools/GLOBALSCRIPT/ScriptEngine/BaseDef.h
Normal file
@@ -0,0 +1,78 @@
|
||||
|
||||
#ifndef _BaseDef_H_
|
||||
#define _BaseDef_H_
|
||||
|
||||
|
||||
#define MACHINECODEFILEEXT ".mcf" //Machine Code File
|
||||
#define INTCODEFILEEXT ".imc" //InterMediate Code
|
||||
#define SCRIPTFILEEXT ".gsf" //Gama Script File
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
typedef void * ANY_FUNCTION;
|
||||
|
||||
enum eDataType
|
||||
{
|
||||
T_VOID = 0,
|
||||
T_BOOL,
|
||||
T_INT,
|
||||
T_FLOAT,
|
||||
T_STRING = 4
|
||||
};
|
||||
|
||||
typedef int BOOL;
|
||||
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
struct ScriptFunc
|
||||
{
|
||||
void * pFunc;
|
||||
long Type;
|
||||
|
||||
ScriptFunc( void *, long );
|
||||
};
|
||||
|
||||
typedef ScriptFunc SE_FUNC;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
union AnyData
|
||||
{
|
||||
int intValue;
|
||||
float floatValue;
|
||||
const char* stringValue;
|
||||
|
||||
AnyData( int n )
|
||||
: intValue( n )
|
||||
{}
|
||||
|
||||
AnyData( float f )
|
||||
: floatValue( f )
|
||||
{}
|
||||
|
||||
AnyData( const char * pszStr )
|
||||
: stringValue( pszStr )
|
||||
{}
|
||||
|
||||
AnyData( void * p )
|
||||
: stringValue( (const char *)p )
|
||||
{
|
||||
}
|
||||
|
||||
AnyData & operator=( int n )
|
||||
{
|
||||
intValue = n;
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif
|
||||
36
GameTools/GLOBALSCRIPT/ScriptEngine/ScriptEngine.h
Normal file
36
GameTools/GLOBALSCRIPT/ScriptEngine/ScriptEngine.h
Normal file
@@ -0,0 +1,36 @@
|
||||
|
||||
#ifndef _ScriptEngine_H_
|
||||
#define _ScriptEngine_H_
|
||||
|
||||
#include "BaseDef.h"
|
||||
|
||||
#define DllExport __declspec( dllexport )
|
||||
|
||||
class CVirtualMachine;
|
||||
typedef CVirtualMachine * SCRIPT;
|
||||
typedef void (*MESSAGE_FUNCTION)( const char * ErrMsg );
|
||||
typedef void (*MESSAGE_FUNCTION2)( const char *, ... );
|
||||
typedef char * va_list;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
DllExport SCRIPT _SE_Create( const char * codeFile );
|
||||
DllExport void _SE_Destroy( SCRIPT );
|
||||
DllExport bool _SE_Save( SCRIPT, const char * );
|
||||
DllExport void _SE_Execute( SCRIPT );
|
||||
|
||||
DllExport void _SE_RegisterFunction( SCRIPT, ANY_FUNCTION, eDataType, const char * FuncName, ... );
|
||||
DllExport SE_FUNC _SE_GetScriptFunction( SCRIPT, eDataType, const char * FuncName, ... );
|
||||
DllExport void _SE_SetMessageFunction( MESSAGE_FUNCTION );
|
||||
|
||||
DllExport AnyData _SE_CallScriptFunction( SCRIPT, SE_FUNC );
|
||||
DllExport AnyData _SE_CallScriptFunction( SCRIPT, SE_FUNC, AnyData );
|
||||
DllExport AnyData _SE_CallScriptFunction( SCRIPT, SE_FUNC, AnyData, AnyData );
|
||||
DllExport AnyData _SE_CallScriptFunction( SCRIPT, SE_FUNC, AnyData, AnyData, AnyData );
|
||||
DllExport AnyData _SE_CallScriptFunction( SCRIPT, SE_FUNC, AnyData, AnyData, AnyData, AnyData );
|
||||
DllExport AnyData _SE_CallScriptFunction( SCRIPT, SE_FUNC, AnyData args[], int nArgs );
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif
|
||||
487
GameTools/GLOBALSCRIPT/Skill/SkillMgr.cpp
Normal file
487
GameTools/GLOBALSCRIPT/Skill/SkillMgr.cpp
Normal file
@@ -0,0 +1,487 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include <Log/ServerLog.h>
|
||||
#include <Utility/Math/Math.h>
|
||||
#include <Utility/Compress/MiniLZO/MiniLZOWrapper.h>
|
||||
#include <Utility/Resource/EnsureCleanup.h>
|
||||
#include <Network/XORCrypt/XORCrypt.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include "SkillMgr.h"
|
||||
#include "../Utility/DelimitedFile.h"
|
||||
|
||||
#define DECODE_HEADER(Start_In, Length_In, PageVer_In, PageNum_In) CXORCrypt::GetInstance().DecodeHeader((Start_In),(Length_In),(PageVer_In),(PageNum_In))
|
||||
#define ENCODE_HEADER(Start_In, Length_In, PageVer_In, PageNum_In) CXORCrypt::GetInstance().EncodeHeader((Start_In),(Length_In),(PageVer_In),(PageNum_In))
|
||||
#define COMPRESS(In, In_len, Out, Out_len) CMiniLZOCompress::Compress((In), (In_len), (Out), (Out_len))
|
||||
#define DECOMPRESS(In, In_len, Out, Out_len) CMiniLZOCompress::Decompress((In), (In_len), (Out), (Out_len))
|
||||
|
||||
|
||||
CSkillMgr CSkillMgr::ms_this;
|
||||
|
||||
|
||||
#ifdef _TEST_SERVER_
|
||||
const char* CSkillMgr::ms_szSkillScriptFileName = "TestSkillScript.txt";
|
||||
#else
|
||||
const char* CSkillMgr::ms_szSkillScriptFileName = "SkillScript.txt";
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
CSkillMgr::CSkillMgr()
|
||||
: m_ProtoTypeArray(NULL)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
CSkillMgr::~CSkillMgr()
|
||||
{
|
||||
ClearProtoType();
|
||||
}
|
||||
|
||||
void CSkillMgr::ClearProtoType()
|
||||
{
|
||||
if(NULL != m_ProtoTypeArray)
|
||||
{
|
||||
delete [] m_ProtoTypeArray;
|
||||
m_ProtoTypeArray = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool CSkillMgr::LoadSkillsFromFile(const char* szFileName)
|
||||
{
|
||||
using namespace Skill;
|
||||
|
||||
// <20>ӽú<D3BD><C3BA><EFBFBD><EFBFBD><EFBFBD>
|
||||
const int SKILL_ID_LEN = 32;
|
||||
char szBuffer[SKILL_ID_LEN];
|
||||
unsigned char chTempValue;
|
||||
|
||||
int nLineCount = 0;
|
||||
int nSkillCount = 0;
|
||||
CDelimitedFile DelimitedFile; // <20><>ü <20>Ҹ<EFBFBD><D2B8><EFBFBD>, <20>ڵ<EFBFBD> Close.
|
||||
|
||||
ProtoTypeArray tempProtoType;
|
||||
|
||||
// <20><>ũ<EFBFBD>ο<EFBFBD> <20>α<EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><>.
|
||||
// <20><>ũ<EFBFBD>ο<EFBFBD><CEBF><EFBFBD> \<5C>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD> <20>ʵ<EFBFBD><CAB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
|
||||
// ( '<27>̽<EFBFBD><CCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߸<EFBFBD><DFB8>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>' <20><><EFBFBD><EFBFBD> <20><EFBFBD> )
|
||||
#define READ_DATA(ColumnName, Argument) \
|
||||
if(!DelimitedFile.ReadData(ColumnName, Argument)) \
|
||||
{ \
|
||||
ERRLOG2(g_Log, "<22><>ų <20><>ũ<EFBFBD><C5A9>Ʈ <20>б<EFBFBD> <20><><EFBFBD><EFBFBD> : %d<><64> %s<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD>!", nLineCount, #ColumnName); \
|
||||
return false; \
|
||||
}
|
||||
|
||||
#define READ_STRING(ColumnName, Buffer, BufferSize) \
|
||||
if(!DelimitedFile.ReadString(ColumnName, Buffer, BufferSize)) \
|
||||
{\
|
||||
ERRLOG2(g_Log, "<22><>ų <20><>ũ<EFBFBD><C5A9>Ʈ <20>б<EFBFBD> <20><><EFBFBD><EFBFBD> : %d<><64> %s<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD>!", nLineCount, #ColumnName);\
|
||||
return false;\
|
||||
}
|
||||
|
||||
#define READ_STRING_TO_TYPE_VALUE(saveType, saveValue, szColumn, TypeArray, nMaxType)\
|
||||
saveValue = static_cast<saveType>(ReadStringToTypeValue(DelimitedFile, szColumn, TypeArray, nMaxType));\
|
||||
if(nMaxType == saveValue)\
|
||||
{\
|
||||
ERRLOG2(g_Log, "<22><>ų <20><>ũ<EFBFBD><C5A9>Ʈ <20>б<EFBFBD> <20><><EFBFBD><EFBFBD> : %d<><64> %s<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD>!", nLineCount, #szColumn); \
|
||||
return false;\
|
||||
}
|
||||
|
||||
if (!DelimitedFile.Open(szFileName ? szFileName : ms_szSkillScriptFileName, 1 /* HeadLine */))
|
||||
{
|
||||
ERRLOG1(g_Log, "%s <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.", szFileName ? szFileName : ms_szSkillScriptFileName);
|
||||
return false;
|
||||
}
|
||||
|
||||
std::vector<ProtoTypeArray> ProtoTypeVector;
|
||||
|
||||
|
||||
while(DelimitedFile.ReadLine())
|
||||
{
|
||||
++nLineCount;
|
||||
|
||||
READ_STRING("ID", szBuffer, SKILL_ID_LEN);
|
||||
tempProtoType.m_ProtoTypes[nSkillCount].m_usSkill_ID = Math::Convert::StrToHex16(szBuffer);
|
||||
|
||||
READ_STRING_TO_TYPE_VALUE(Skill::Type::Type, tempProtoType.m_ProtoTypes[nSkillCount].m_eSkillType,
|
||||
"Type", Type::SkillTypes, Type::MAX_SKILL_TYPE);
|
||||
|
||||
READ_DATA("ClassSkill", chTempValue); tempProtoType.m_ProtoTypes[nSkillCount].m_bIsClassSkill = chTempValue != 0;
|
||||
READ_STRING("Name[5]", tempProtoType.m_ProtoTypes[nSkillCount].m_SpriteInfo.m_szName, ProtoType::MAX_SKILL_NAME);
|
||||
READ_STRING_TO_TYPE_VALUE(Skill::UseLimit::Type, tempProtoType.m_ProtoTypes[nSkillCount].m_eUseLimit,
|
||||
"Limit", UseLimit::UseLimits, UseLimit::MAX_USE_LIMIT);
|
||||
|
||||
READ_STRING_TO_TYPE_VALUE(unsigned char, tempProtoType.m_ProtoTypes[nSkillCount].m_StatusLimitType[0],
|
||||
"Stat[0]", StatusLimit::StatusLimits, StatusLimit::MAX_STATUS_LIMIT);
|
||||
READ_DATA("Value[0]", tempProtoType.m_ProtoTypes[nSkillCount].m_StatusLimitValue[0]);
|
||||
|
||||
READ_STRING_TO_TYPE_VALUE(unsigned char, tempProtoType.m_ProtoTypes[nSkillCount].m_StatusLimitType[1],
|
||||
"Stat[1]", StatusLimit::StatusLimits, StatusLimit::MAX_STATUS_LIMIT);
|
||||
READ_DATA("Value[1]", tempProtoType.m_ProtoTypes[nSkillCount].m_StatusLimitValue[1]);
|
||||
|
||||
READ_STRING_TO_TYPE_VALUE(Skill::Target::Type, tempProtoType.m_ProtoTypes[nSkillCount].m_eTargetType,
|
||||
"Target", Target::TargetTypes, Target::MAX_TARGET_TYPE);
|
||||
|
||||
READ_DATA("Range", tempProtoType.m_ProtoTypes[nSkillCount].m_EffectDistance);
|
||||
READ_DATA("Region", tempProtoType.m_ProtoTypes[nSkillCount].m_EffectExtent);
|
||||
READ_DATA("StartMP", tempProtoType.m_ProtoTypes[nSkillCount].m_StartMP);
|
||||
READ_DATA("LevelMP", tempProtoType.m_ProtoTypes[nSkillCount].m_LevelMP);
|
||||
READ_DATA("Starttick", tempProtoType.m_ProtoTypes[nSkillCount].m_StartTick);
|
||||
READ_DATA("LevelTick", tempProtoType.m_ProtoTypes[nSkillCount].m_LevelTick);
|
||||
READ_STRING("CastingFlag", tempProtoType.m_ProtoTypes[nSkillCount].m_szCastingFileName, ProtoType::MAX_FILE_NAME);
|
||||
READ_STRING("EffectFlag", tempProtoType.m_ProtoTypes[nSkillCount].m_szEffectFileName, ProtoType::MAX_FILE_NAME);
|
||||
READ_STRING("HitFlag", tempProtoType.m_ProtoTypes[nSkillCount].m_szHitFileName, ProtoType::MAX_FILE_NAME);
|
||||
READ_DATA("CoolDownTime", tempProtoType.m_ProtoTypes[nSkillCount].m_usCoolDownTime);
|
||||
READ_DATA("EndCoolDown", tempProtoType.m_ProtoTypes[nSkillCount].m_cEndCoolDown);
|
||||
READ_STRING("dds", tempProtoType.m_ProtoTypes[nSkillCount].m_SpriteInfo.m_szSpriteName, ProtoType::MAX_FILE_NAME);
|
||||
READ_DATA("MinX", tempProtoType.m_ProtoTypes[nSkillCount].m_SpriteInfo.m_nSpriteMinX);
|
||||
READ_DATA("MinY", tempProtoType.m_ProtoTypes[nSkillCount].m_SpriteInfo.m_nSpriteMinY);
|
||||
READ_DATA("MaxX", tempProtoType.m_ProtoTypes[nSkillCount].m_SpriteInfo.m_nSpriteMaxX);
|
||||
READ_DATA("MaxY", tempProtoType.m_ProtoTypes[nSkillCount].m_SpriteInfo.m_nSpriteMaxY);
|
||||
READ_DATA("Hit", tempProtoType.m_ProtoTypes[nSkillCount].m_cStrikeNum);
|
||||
READ_DATA("EndScript", tempProtoType.m_ProtoTypes[nSkillCount].m_cEndScript);
|
||||
READ_DATA("Protection", chTempValue); tempProtoType.m_ProtoTypes[nSkillCount].m_bProtection = chTempValue != 0;
|
||||
READ_DATA("Interrupt", chTempValue); tempProtoType.m_ProtoTypes[nSkillCount].m_bInterrupt = chTempValue != 0;
|
||||
|
||||
READ_DATA("Gauge", chTempValue); tempProtoType.m_ProtoTypes[nSkillCount].m_bGauge = chTempValue != 0;
|
||||
READ_DATA("MinRange", tempProtoType.m_ProtoTypes[nSkillCount].m_cMinRange);
|
||||
READ_DATA("MaxRange", tempProtoType.m_ProtoTypes[nSkillCount].m_cMaxRange);
|
||||
|
||||
if(tempProtoType.m_ProtoTypes[0].m_usSkill_ID != tempProtoType.m_ProtoTypes[nSkillCount].m_usSkill_ID)
|
||||
{
|
||||
ERRLOG2(g_Log, "<EFBFBD><EFBFBD>ų <20><><EFBFBD>ڰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD><CFB0><EFBFBD>, <20><> <20><>ų<EFBFBD><C5B3> <20>ݵ<EFBFBD><DDB5><EFBFBD> <20><><EFBFBD><EFBFBD> ID<49><44>"
|
||||
" 5<><35><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD>;<EFBFBD> <20>մϴ<D5B4>. <20><><EFBFBD><EFBFBD> <20><>ų <20><>ȣ<EFBFBD><C8A3> %d, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d<>Դϴ<D4B4>.",
|
||||
tempProtoType.m_ProtoTypes[nSkillCount].m_usSkill_ID, nSkillCount);
|
||||
return false;
|
||||
}
|
||||
|
||||
tempProtoType.m_ProtoTypes[nSkillCount].m_cSpell_LockCount = nSkillCount;
|
||||
++nSkillCount;
|
||||
|
||||
if (MAX_SKILL_LOCKCOUNT == nSkillCount || tempProtoType.m_ProtoTypes[0].m_bIsClassSkill)
|
||||
{
|
||||
ProtoTypeVector.push_back(tempProtoType);
|
||||
|
||||
for(int nIndex = 0; nIndex < nSkillCount; ++nIndex)
|
||||
{
|
||||
tempProtoType.m_ProtoTypes[nIndex].Initialize();
|
||||
}
|
||||
|
||||
nSkillCount = 0;
|
||||
}
|
||||
}
|
||||
|
||||
std::sort(ProtoTypeVector.begin(), ProtoTypeVector.end());
|
||||
|
||||
for(std::vector<ProtoTypeArray>::iterator itr = ProtoTypeVector.begin();
|
||||
itr != ProtoTypeVector.end() - 1; ++itr)
|
||||
{
|
||||
if(itr->m_ProtoTypes[0].m_usSkill_ID == (itr+1)->m_ProtoTypes[0].m_usSkill_ID)
|
||||
{
|
||||
ERRLOG1(g_Log, "<EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD> ID<49><44> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD>ID:%d", itr->m_ProtoTypes[0].m_usSkill_ID);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
m_nSkillNum = ProtoTypeVector.size();
|
||||
m_ProtoTypeArray = new ProtoTypeArray[m_nSkillNum];
|
||||
if(NULL == m_ProtoTypeArray)
|
||||
{
|
||||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ翡 <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.");
|
||||
return false;
|
||||
}
|
||||
|
||||
std::copy(ProtoTypeVector.begin(), ProtoTypeVector.end(), m_ProtoTypeArray);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
unsigned char CSkillMgr::ReadStringToTypeValue(CDelimitedFile& DelimitedFile, const char* szColumn,
|
||||
const CTypeName* TypeArray, const unsigned char nMaxType)
|
||||
{
|
||||
char szReadData[MAX_PATH];
|
||||
unsigned char nCount = 0;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>б<EFBFBD>.
|
||||
if (!DelimitedFile.ReadString(szColumn, szReadData, MAX_PATH))
|
||||
{
|
||||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>б <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>.");
|
||||
return nMaxType; // <20><><EFBFBD>н<EFBFBD> nMaxType<70><65> <20><><EFBFBD><EFBFBD>.
|
||||
}
|
||||
|
||||
for (nCount = 0; nCount < nMaxType; ++nCount)
|
||||
{
|
||||
if (0 == strcmp(szReadData, TypeArray[nCount].GetTypeName()))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (nCount == nMaxType)
|
||||
{
|
||||
ERRLOG0(g_Log, "<EFBFBD>о<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8> <20>迭<EFBFBD><E8BFAD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>.");
|
||||
return nMaxType;
|
||||
}
|
||||
|
||||
return TypeArray[nCount].GetTypeValue();
|
||||
}
|
||||
|
||||
|
||||
|
||||
const Skill::ProtoType* CSkillMgr::GetSkillProtoType(unsigned short usSkill_ID)
|
||||
{
|
||||
ProtoTypeArray* lpFirst = m_ProtoTypeArray;
|
||||
ProtoTypeArray* lpLast = m_ProtoTypeArray + m_nSkillNum;
|
||||
ProtoTypeArray* lpMid = NULL;
|
||||
|
||||
size_t nCount = m_nSkillNum;
|
||||
size_t nCount2 = 0;
|
||||
|
||||
for (; 0 < nCount; )
|
||||
{
|
||||
nCount2 = nCount / 2;
|
||||
lpMid = lpFirst + nCount2;
|
||||
|
||||
if(lpMid->m_ProtoTypes[0].m_usSkill_ID < usSkill_ID)
|
||||
{
|
||||
lpFirst = ++lpMid, nCount -= nCount2 + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
nCount = nCount2;
|
||||
}
|
||||
}
|
||||
|
||||
return (lpFirst != lpLast && !(usSkill_ID < lpFirst->m_ProtoTypes[0].m_usSkill_ID)) ?
|
||||
lpFirst->m_ProtoTypes : NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool CSkillMgr::LoadSkillsFromBinary(const char* szFileNameBinary)
|
||||
{
|
||||
HANDLE hFile = CreateFile((0 == szFileNameBinary) ? ms_szSkillScriptFileName : szFileNameBinary,
|
||||
GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
|
||||
if (hFile == INVALID_HANDLE_VALUE) { return false; }
|
||||
|
||||
CEnsureCloseHandle hfile(hFile);
|
||||
|
||||
DWORD dwRead = 0;
|
||||
DWORD dwFileHighSize = 0;
|
||||
DWORD dwFileSize = GetFileSize(hFile, &dwFileHighSize);
|
||||
|
||||
char* lpAllocated = new char[dwFileSize];
|
||||
CEnsureDeleteArray<char> allocated(lpAllocated);
|
||||
|
||||
if(NULL == lpAllocated)
|
||||
{
|
||||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!ReadFile(hFile, lpAllocated, dwFileSize, &dwRead, NULL))
|
||||
{
|
||||
ERRLOG1(g_Log, "<EFBFBD>б<EFBFBD> <20><><EFBFBD><EFBFBD> : %d<><64><EFBFBD><EFBFBD>", GetLastError());
|
||||
return false;
|
||||
}
|
||||
|
||||
DWORD dwHeaderSize = sizeof(DWORD) + *reinterpret_cast<DWORD*>(lpAllocated) + sizeof(DWORD);
|
||||
DWORD dwDecompressedSize = *reinterpret_cast<DWORD*>(lpAllocated + dwHeaderSize - sizeof(DWORD));
|
||||
|
||||
ClearProtoType();
|
||||
|
||||
m_nSkillNum = dwDecompressedSize/sizeof(ProtoTypeArray);
|
||||
m_ProtoTypeArray = new ProtoTypeArray[m_nSkillNum];
|
||||
if(NULL == m_ProtoTypeArray)
|
||||
{
|
||||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD>ų <20><>ũ<EFBFBD><C5A9>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ҷ<EFBFBD><D2B7><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20><DEB8> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.");
|
||||
return false;
|
||||
}
|
||||
|
||||
DECOMPRESS(lpAllocated + dwHeaderSize, dwFileSize - dwHeaderSize,
|
||||
reinterpret_cast<char*>(m_ProtoTypeArray), &dwDecompressedSize);
|
||||
|
||||
DECODE_HEADER(reinterpret_cast<char*>(m_ProtoTypeArray), dwDecompressedSize, 0, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool CSkillMgr::SaveSkillsToBinary(const char* szFileNameBinary, const char* szTrashFile)
|
||||
{
|
||||
HANDLE hFile = CreateFile((0 == szFileNameBinary) ? ms_szSkillScriptFileName : szFileNameBinary,
|
||||
GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
|
||||
if (hFile == INVALID_HANDLE_VALUE) { return false; }
|
||||
|
||||
CEnsureCloseHandle file(hFile);
|
||||
|
||||
DWORD dwSkillSize = static_cast<DWORD>(sizeof(ProtoTypeArray) * m_nSkillNum);
|
||||
DWORD dwCompressSize = dwSkillSize;
|
||||
|
||||
char* lpSkill_Info = new char[dwSkillSize];
|
||||
char* lpCompressedInfo = new char[dwSkillSize];
|
||||
|
||||
if(NULL == lpSkill_Info || NULL == lpCompressedInfo)
|
||||
{
|
||||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.");
|
||||
return false;
|
||||
}
|
||||
|
||||
CEnsureDeleteArray<char> skill_info(lpSkill_Info);
|
||||
CEnsureDeleteArray<char> compress_info(lpCompressedInfo);
|
||||
|
||||
memcpy(lpSkill_Info, m_ProtoTypeArray, dwSkillSize);
|
||||
ENCODE_HEADER(lpSkill_Info, dwSkillSize, 0, 1);
|
||||
COMPRESS(lpSkill_Info, dwSkillSize, lpCompressedInfo, &dwCompressSize);
|
||||
|
||||
DWORD dwWritten = 0;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>) <20>ڷ<EFBFBD>
|
||||
HANDLE hTrashFile = CreateFile(szTrashFile, GENERIC_READ, FILE_SHARE_READ, NULL,
|
||||
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
|
||||
if (hTrashFile == INVALID_HANDLE_VALUE) { return false; }
|
||||
|
||||
CEnsureCloseHandle trashFile(hTrashFile);
|
||||
|
||||
DWORD dwRead = 0;
|
||||
DWORD dwFileHighSize = 0;
|
||||
DWORD dwFileSize = GetFileSize(hTrashFile, &dwFileHighSize);
|
||||
|
||||
char* lpAllocated = new char[dwFileSize];
|
||||
CEnsureDeleteArray<char> allocated(lpAllocated);
|
||||
|
||||
if (!ReadFile(hTrashFile, lpAllocated, dwFileSize, &dwRead, NULL))
|
||||
{
|
||||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.");
|
||||
return false;
|
||||
}
|
||||
|
||||
WriteFile(hFile, &dwFileSize, sizeof(DWORD), &dwWritten, 0);
|
||||
WriteFile(hFile, lpAllocated, dwFileSize, &dwWritten, 0);
|
||||
|
||||
// <20>ùٸ<C3B9> <20>ڷ<EFBFBD>
|
||||
WriteFile(hFile, &dwSkillSize, sizeof(DWORD), &dwWritten, 0);
|
||||
WriteFile(hFile, lpCompressedInfo, dwCompressSize, &dwWritten, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
#ifndef _RYL_GAME_CLIENT_
|
||||
|
||||
void CSkillMgr::ProcessSkillException(SKILL* pSkill, unsigned short cClass)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD> <20>α뿡<D7BF><EBBFA1> <20><><EFBFBD>ؽſ<D8BD><C5BF><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2>鼭 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>͵<EFBFBD><CDB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ƾ
|
||||
bool IsDaggerMastery = false;
|
||||
for (int nSkillIndex = 0; nSkillIndex < pSkill->wSlotNum; nSkillIndex++)
|
||||
{
|
||||
if (pSkill->SSlot[nSkillIndex].SKILLINFO.wSkill == 0x8202)
|
||||
{
|
||||
pSkill->wSkillNum -= (pSkill->SSlot[nSkillIndex].SKILLINFO.cLockCount * (SKILLSLOT::MAX_SKILL_LEVEL - 1) +
|
||||
pSkill->SSlot[nSkillIndex].SKILLINFO.cSkillLevel);
|
||||
IsDaggerMastery = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (true == IsDaggerMastery) {
|
||||
pSkill->SSlot[nSkillIndex-1] = pSkill->SSlot[nSkillIndex];
|
||||
}
|
||||
}
|
||||
|
||||
if (true == IsDaggerMastery)
|
||||
{
|
||||
pSkill->SSlot[nSkillIndex-1] = SKILLSLOT();
|
||||
pSkill->wSlotNum--;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20>Ĺ<EFBFBD><C4B9><EFBFBD>Ʈ<EFBFBD>뿡<EFBFBD><EBBFA1> <20><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2>鼭 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>͵<EFBFBD><CDB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ƾ
|
||||
bool IsNet = false;
|
||||
for (int nSkillIndex = 0; nSkillIndex < pSkill->wSlotNum; nSkillIndex++)
|
||||
{
|
||||
if (pSkill->SSlot[nSkillIndex].SKILLINFO.wSkill == 0x9101)
|
||||
{
|
||||
IsNet = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (true == IsNet) {
|
||||
pSkill->SSlot[nSkillIndex-1] = pSkill->SSlot[nSkillIndex];
|
||||
}
|
||||
}
|
||||
|
||||
if (true == IsNet)
|
||||
{
|
||||
pSkill->SSlot[nSkillIndex-1] = SKILLSLOT();
|
||||
pSkill->wSlotNum--;
|
||||
}
|
||||
|
||||
// Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>ų <20>־<EFBFBD><D6BE>ֱ<EFBFBD>
|
||||
unsigned short usClassSkillID = NULL;
|
||||
bool IsClassSkill = false;
|
||||
|
||||
usClassSkillID = CClass::GetClassSkillID(static_cast<unsigned char>(cClass));
|
||||
if (NULL != usClassSkillID)
|
||||
{
|
||||
for (int nSkillIndex = 0; nSkillIndex < pSkill->wSlotNum; nSkillIndex++)
|
||||
{
|
||||
if (pSkill->SSlot[nSkillIndex].SKILLINFO.wSkill == usClassSkillID)
|
||||
{
|
||||
IsClassSkill = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (false == IsClassSkill)
|
||||
{
|
||||
pSkill->SSlot[pSkill->wSlotNum] = SKILLSLOT(usClassSkillID, 0, 1);
|
||||
pSkill->wSlotNum++;
|
||||
}
|
||||
}
|
||||
|
||||
usClassSkillID = NULL;
|
||||
IsClassSkill = false;
|
||||
|
||||
if (CClass::JOB_CHANGE_1ST == CClass::GetJobLevel(static_cast<unsigned char>(cClass)))
|
||||
{
|
||||
usClassSkillID = CClass::GetClassSkillID(CClass::GetPreviousJob(static_cast<unsigned char>(cClass)));
|
||||
if (NULL != usClassSkillID)
|
||||
{
|
||||
for (int nSkillIndex = 0; nSkillIndex < pSkill->wSlotNum; nSkillIndex++)
|
||||
{
|
||||
if (pSkill->SSlot[nSkillIndex].SKILLINFO.wSkill == usClassSkillID)
|
||||
{
|
||||
IsClassSkill = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (false == IsClassSkill)
|
||||
{
|
||||
pSkill->SSlot[pSkill->wSlotNum] = SKILLSLOT(usClassSkillID, 0, 1);
|
||||
pSkill->wSlotNum++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// <20><>ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
pSkill->wSkillNum = 0;
|
||||
for (int nSkillIndex = 0; nSkillIndex < pSkill->wSlotNum; nSkillIndex++)
|
||||
{
|
||||
Skill::LPProtoType lpProtoType = GetSkillProtoType(pSkill->SSlot[nSkillIndex].SKILLINFO.wSkill);
|
||||
if (NULL != lpProtoType)
|
||||
{
|
||||
if (false == lpProtoType->m_bIsClassSkill)
|
||||
{
|
||||
pSkill->wSkillNum += (pSkill->SSlot[nSkillIndex].SKILLINFO.cLockCount *
|
||||
(SKILLSLOT::MAX_SKILL_LEVEL - 1) + pSkill->SSlot[nSkillIndex].SKILLINFO.cSkillLevel);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
*/
|
||||
70
GameTools/GLOBALSCRIPT/Skill/SkillMgr.h
Normal file
70
GameTools/GLOBALSCRIPT/Skill/SkillMgr.h
Normal file
@@ -0,0 +1,70 @@
|
||||
#ifndef _SKILL_MGR_H_
|
||||
#define _SKILL_MGR_H_
|
||||
|
||||
#define g_SkillMgr CSkillMgr::GetInstance()
|
||||
#include <limits>
|
||||
#include <Pattern/Singleton.h>
|
||||
#include "SkillStructure.h"
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
class CDelimitedFile;
|
||||
|
||||
|
||||
class CSkillMgr : public CSingleton<CSkillMgr>
|
||||
{
|
||||
public:
|
||||
|
||||
enum _Const
|
||||
{
|
||||
MAX_SKILL_LOCKCOUNT = 5, // <20><>ų<EFBFBD><C5B3> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŭ ProtoType<70><65> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>)
|
||||
MAX_SKILL_LEVEL = 7, // <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѱ<EFBFBD>
|
||||
|
||||
PARTY_SPELL = 0x80, // <20><>Ƽ <20>ֹ<EFBFBD><D6B9><EFBFBD> <20><>Ʈ
|
||||
MAX_SKILL_PER_STATUS = 16, // æƮ<C3A6><C6AE> <20><>æƮ<C3A6><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
NORMAL_SKILL = -1,
|
||||
MULTI_TARGET_SKILL = 1 // Ÿ<><C5B8> Ÿ<><C5B8> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ѹ<EFBFBD><D1B9><EFBFBD> MP<4D><50> <20>Ҹ<EFBFBD><D2B8>Ѵ<EFBFBD>)
|
||||
};
|
||||
|
||||
unsigned int GetRange(unsigned short usSkill_ID);
|
||||
|
||||
bool LoadSkillsFromFile(const char* szFileName = 0);
|
||||
bool LoadSkillsFromBinary(const char* szFileNameBinary = 0);
|
||||
bool SaveSkillsToBinary(const char* szFileNameBinary = 0, const char* szTrashFile = 0);
|
||||
|
||||
void ClearProtoType();
|
||||
|
||||
const Skill::ProtoType* GetSkillProtoType(unsigned short usSkill_ID);
|
||||
|
||||
/*
|
||||
// <20><>Ÿ <20>ҵ<DEBC>
|
||||
#ifndef _RYL_GAME_CLIENT_
|
||||
void ProcessSkillException(SKILL* pSkill, unsigned short cClass);
|
||||
#endif
|
||||
*/
|
||||
|
||||
~CSkillMgr();
|
||||
|
||||
private:
|
||||
|
||||
CSkillMgr();
|
||||
|
||||
struct ProtoTypeArray
|
||||
{
|
||||
Skill::ProtoType m_ProtoTypes[MAX_SKILL_LOCKCOUNT];
|
||||
inline bool operator < (ProtoTypeArray& rhs)
|
||||
{ return m_ProtoTypes[0].m_usSkill_ID < rhs.m_ProtoTypes[0].m_usSkill_ID; }
|
||||
};
|
||||
|
||||
static const char* ms_szSkillScriptFileName;
|
||||
static CSkillMgr ms_this;
|
||||
|
||||
ProtoTypeArray* m_ProtoTypeArray;
|
||||
size_t m_nSkillNum;
|
||||
|
||||
// <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD>, <20>˸<EFBFBD><CBB8><EFBFBD> Ÿ<><C5B8> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. <20><><EFBFBD>н<EFBFBD> nMaxType<70><65> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
unsigned char ReadStringToTypeValue(CDelimitedFile& DelimitedFile, const char* szColumn,
|
||||
const CTypeName* TypeArray, const unsigned char nMaxType);
|
||||
};
|
||||
|
||||
#endif
|
||||
86
GameTools/GLOBALSCRIPT/Skill/SkillStructure.cpp
Normal file
86
GameTools/GLOBALSCRIPT/Skill/SkillStructure.cpp
Normal file
@@ -0,0 +1,86 @@
|
||||
#include "stdafx.h"
|
||||
#include <algorithm>
|
||||
#include "SkillStructure.h"
|
||||
|
||||
|
||||
const CTypeName Skill::Type::SkillTypes[MAX_SKILL_TYPE] =
|
||||
{
|
||||
CTypeName(Skill::Type::NONE, "NONE"),
|
||||
CTypeName(Skill::Type::PASSIVE, "PASSIVE"),
|
||||
CTypeName(Skill::Type::INSTANCE, "INSTANCE"),
|
||||
CTypeName(Skill::Type::CAST, "CAST"),
|
||||
CTypeName(Skill::Type::CHANT, "CHANT"),
|
||||
CTypeName(Skill::Type::ENCHANT, "ENCHANT")
|
||||
};
|
||||
|
||||
|
||||
const CTypeName Skill::UseLimit::UseLimits[MAX_USE_LIMIT] =
|
||||
{
|
||||
CTypeName(Skill::UseLimit::NONE, "NONE"),
|
||||
CTypeName(Skill::UseLimit::FOR_FIGHTER, "FORFIGHTER"),
|
||||
CTypeName(Skill::UseLimit::WITH_SHIELD, "WITHSHIELD"),
|
||||
CTypeName(Skill::UseLimit::FOR_FIGHTER_TWOHANDED, "FORFIGHTERTWOHAND"),
|
||||
CTypeName(Skill::UseLimit::FOR_ALL_ONEHAND, "FORALLONEHAND"),
|
||||
CTypeName(Skill::UseLimit::WITH_DAGGER, "WITHDAGGER"),
|
||||
CTypeName(Skill::UseLimit::WITH_THROWING_DAGGER, "WITHTHROWINGDAGGER"),
|
||||
CTypeName(Skill::UseLimit::RANGED, "RANGED"),
|
||||
CTypeName(Skill::UseLimit::LEFT_ARM, "LEFTARM"),
|
||||
CTypeName(Skill::UseLimit::GUARD_ARM, "GUARDARM"),
|
||||
CTypeName(Skill::UseLimit::WITH_WEAPON, "WITHWEAPON"),
|
||||
CTypeName(Skill::UseLimit::ATTACK_ARM, "ATTACKARM"),
|
||||
CTypeName(Skill::UseLimit::GUN_ARM, "GUNARM"),
|
||||
CTypeName(Skill::UseLimit::KNIFE_ARM, "KNIFEARM"),
|
||||
CTypeName(Skill::UseLimit::WITH_CLOW, "WITHCLOW")
|
||||
};
|
||||
|
||||
|
||||
const CTypeName Skill::StatusLimit::StatusLimits[MAX_STATUS_LIMIT] =
|
||||
{
|
||||
CTypeName(Skill::StatusLimit::NONE, "NONE"),
|
||||
CTypeName(Skill::StatusLimit::STR, "STR"),
|
||||
CTypeName(Skill::StatusLimit::DEX, "DEX"),
|
||||
CTypeName(Skill::StatusLimit::CON, "CON"),
|
||||
CTypeName(Skill::StatusLimit::INT, "INT"),
|
||||
CTypeName(Skill::StatusLimit::WIS, "WIS")
|
||||
};
|
||||
|
||||
|
||||
const CTypeName Skill::Target::TargetTypes[MAX_TARGET_TYPE] =
|
||||
{
|
||||
CTypeName(Skill::Target::NONE, "NONE"),
|
||||
CTypeName(Skill::Target::MELEE, "MELEE"),
|
||||
CTypeName(Skill::Target::FRIEND, "FRIEND"),
|
||||
CTypeName(Skill::Target::ENEMY, "ENEMY"),
|
||||
CTypeName(Skill::Target::DEAD_FRIEND, "FRDEAD"),
|
||||
CTypeName(Skill::Target::DEAD_ENEMY, "ENDEAD"),
|
||||
CTypeName(Skill::Target::FRIEND_OBJECT, "FROBJ"),
|
||||
CTypeName(Skill::Target::ENEMY_OBJECT, "ENOBJ"),
|
||||
CTypeName(Skill::Target::PARTY, "PARTY"),
|
||||
CTypeName(Skill::Target::FRIEND_EXCEPT_SELF, "FREXME"),
|
||||
CTypeName(Skill::Target::LINE_ENEMY, "ENLINE")
|
||||
};
|
||||
|
||||
|
||||
Skill::ProtoType::ProtoType() { Initialize(); }
|
||||
|
||||
void Skill::ProtoType::Initialize()
|
||||
{
|
||||
m_eSkillType = Type::NONE;
|
||||
m_eUseLimit = UseLimit::NONE;
|
||||
m_eTargetType = Target::NONE;
|
||||
|
||||
m_EffectDistance = m_EffectExtent = 0.0f;
|
||||
|
||||
m_bInterrupt = m_bProtection = m_bGauge = m_bIsClassSkill = false;
|
||||
m_cStrikeNum = m_cSpell_LockCount = m_cEndScript = m_cEndCoolDown = m_cMinRange = m_cMaxRange = 0;
|
||||
m_usSkill_ID = m_StartMP = m_LevelMP = m_StartTick = m_LevelTick = m_usCoolDownTime = 0;
|
||||
|
||||
m_SpriteInfo.Initialize();
|
||||
|
||||
std::fill_n(&m_StatusLimitType[0], int(MAX_LIMIT_NUM), 0);
|
||||
std::fill_n(&m_StatusLimitValue[0], int(MAX_LIMIT_NUM), 0);
|
||||
|
||||
std::fill_n(&m_szEffectFileName[0], int(MAX_FILE_NAME), 0);
|
||||
std::fill_n(&m_szHitFileName[0], int(MAX_FILE_NAME), 0);
|
||||
std::fill_n(&m_szCastingFileName[0], int(MAX_FILE_NAME), 0);
|
||||
}
|
||||
162
GameTools/GLOBALSCRIPT/Skill/SkillStructure.h
Normal file
162
GameTools/GLOBALSCRIPT/Skill/SkillStructure.h
Normal file
@@ -0,0 +1,162 @@
|
||||
#ifndef _SKILL_STRUCTURE_H_
|
||||
#define _SKILL_STRUCTURE_H_
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../Utility/TypeArray.h"
|
||||
#include "../Item/ItemStructure.h"
|
||||
|
||||
#pragma pack(8)
|
||||
|
||||
namespace Skill
|
||||
{
|
||||
enum { SkillMask = 0x8000 };
|
||||
|
||||
namespace Type
|
||||
{
|
||||
enum Type
|
||||
{
|
||||
NONE = 0,
|
||||
PASSIVE = 1,
|
||||
INSTANCE = 2,
|
||||
CAST = 3,
|
||||
CHANT = 4,
|
||||
ENCHANT = 5,
|
||||
MAX_SKILL_TYPE = 6
|
||||
};
|
||||
|
||||
extern const CTypeName SkillTypes[MAX_SKILL_TYPE];
|
||||
};
|
||||
|
||||
namespace UseLimit
|
||||
{
|
||||
enum Type
|
||||
{
|
||||
NONE = 0,
|
||||
|
||||
// <20>ΰ<EFBFBD>
|
||||
FOR_FIGHTER = 1, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǽ<EFBFBD> Ȱ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ұ<EFBFBD>
|
||||
WITH_SHIELD = 2, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD>а<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>.
|
||||
FOR_FIGHTER_TWOHANDED = 3, // <20><><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) : <20><><EFBFBD>չ<EFBFBD><D5B9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ұ<EFBFBD><D2B0><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||
FOR_ALL_ONEHAND = 4, // <20>Ѽչ<D1BC><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD>չ<EFBFBD><D5B9>⳪ <20>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD>δ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ұ<EFBFBD><D2B0><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
WITH_DAGGER = 5, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||
WITH_THROWING_DAGGER = 6, // <20><><EFBFBD><EFBFBD><EFBFBD>״<EFBFBD><D7B4>żҸ<C5BC> : <20>κ<EFBFBD><CEBA>丮<EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ű<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. (<28>տ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD>.)
|
||||
RANGED = 7, // Ȱ/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ȭ<><C8AD><EFBFBD>Ҹ<EFBFBD> : Ȱ<>̳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20>ְ<EFBFBD> <20>κ<EFBFBD><CEBA>丮<EFBFBD><E4B8AE> ȭ<><C8AD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||
|
||||
// <20><>ĭ
|
||||
LEFT_ARM = 8, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||
GUARD_ARM = 9, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||
WITH_WEAPON = 10, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǽ<EFBFBD><C7BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ұ<EFBFBD><D2B0><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||
ATTACK_ARM = 11, // <20><><EFBFBD>þ<EFBFBD><C3BE><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||
GUN_ARM = 12, // <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD> ź<><C5BA><EFBFBD>Ҹ<EFBFBD> : <20><><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> ź<><C5BA><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||
KNIFE_ARM = 13, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||
WITH_CLOW = 14, // Ŭ<>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><EFBFBD> : Ŭ<>ο<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||
|
||||
MAX_USE_LIMIT = 15
|
||||
};
|
||||
|
||||
extern const CTypeName UseLimits[MAX_USE_LIMIT];
|
||||
};
|
||||
|
||||
namespace StatusLimit // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
enum Type
|
||||
{
|
||||
NONE = 0, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
STR = 1, // STR<54><52> <20><><EFBFBD><EFBFBD> <20>̻<EFBFBD> <20>ʿ<EFBFBD>
|
||||
DEX = 2, // DEX<45><58> <20><><EFBFBD><EFBFBD> <20>̻<EFBFBD> <20>ʿ<EFBFBD>
|
||||
CON = 3, // CON<4F><4E> <20><><EFBFBD><EFBFBD> <20>̻<EFBFBD> <20>ʿ<EFBFBD>
|
||||
INT = 4, // INT<4E><54> <20><><EFBFBD><EFBFBD> <20>̻<EFBFBD> <20>ʿ<EFBFBD>
|
||||
WIS = 5, // WIS<49><53> <20><><EFBFBD><EFBFBD> <20>̻<EFBFBD> <20>ʿ<EFBFBD>
|
||||
MAX_STATUS_LIMIT = 6
|
||||
};
|
||||
|
||||
extern const CTypeName StatusLimits[MAX_STATUS_LIMIT];
|
||||
};
|
||||
|
||||
namespace Target
|
||||
{
|
||||
enum Type
|
||||
{
|
||||
NONE = 0,
|
||||
MELEE = 1,
|
||||
FRIEND = 2,
|
||||
ENEMY = 3,
|
||||
DEAD_FRIEND = 4,
|
||||
DEAD_ENEMY = 5,
|
||||
FRIEND_OBJECT = 6,
|
||||
ENEMY_OBJECT = 7,
|
||||
PARTY = 8,
|
||||
FRIEND_EXCEPT_SELF = 9,
|
||||
LINE_ENEMY = 10,
|
||||
MAX_TARGET_TYPE = 11
|
||||
};
|
||||
|
||||
extern const CTypeName TargetTypes[MAX_TARGET_TYPE];
|
||||
};
|
||||
|
||||
|
||||
struct ProtoType
|
||||
{
|
||||
enum { MAX_LIMIT_NUM = 2, MAX_FILE_NAME = 32, MAX_SKILL_NAME = 32 };
|
||||
|
||||
//-----------------------------------
|
||||
|
||||
char m_szEffectFileName[MAX_FILE_NAME];
|
||||
char m_szHitFileName[MAX_FILE_NAME];
|
||||
char m_szCastingFileName[MAX_FILE_NAME];
|
||||
Item::SpriteData m_SpriteInfo;
|
||||
|
||||
//-----------------------------------
|
||||
|
||||
Type::Type m_eSkillType; // See Namespace Type
|
||||
Target::Type m_eTargetType; // See Namespace Target
|
||||
UseLimit::Type m_eUseLimit; // See Namespace UseLimit
|
||||
|
||||
unsigned char m_StatusLimitType[MAX_LIMIT_NUM];
|
||||
char m_StatusLimitValue[MAX_LIMIT_NUM];
|
||||
|
||||
//-----------------------------------
|
||||
|
||||
unsigned short m_usSkill_ID;
|
||||
unsigned short m_StartMP;
|
||||
unsigned short m_LevelMP;
|
||||
unsigned short m_StartTick;
|
||||
|
||||
//-----------------------------------
|
||||
|
||||
unsigned short m_LevelTick;
|
||||
unsigned short m_usCoolDownTime;
|
||||
|
||||
//-----------------------------------
|
||||
|
||||
float m_EffectDistance;
|
||||
float m_EffectExtent;
|
||||
|
||||
//-----------------------------------
|
||||
|
||||
bool m_bProtection;
|
||||
bool m_bGauge;
|
||||
bool m_bIsClassSkill;
|
||||
bool m_bInterrupt;
|
||||
unsigned char m_cEndScript;
|
||||
unsigned char m_cEndCoolDown;
|
||||
unsigned char m_cMinRange;
|
||||
unsigned char m_cMaxRange;
|
||||
|
||||
//-----------------------------------
|
||||
|
||||
unsigned char m_cStrikeNum;
|
||||
unsigned char m_cSpell_LockCount;
|
||||
unsigned char m_cPadding[6];
|
||||
|
||||
//-----------------------------------
|
||||
|
||||
ProtoType();
|
||||
void Initialize();
|
||||
};
|
||||
}
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
187
GameTools/GLOBALSCRIPT/Thread/Lock.h
Normal file
187
GameTools/GLOBALSCRIPT/Thread/Lock.h
Normal file
@@ -0,0 +1,187 @@
|
||||
#ifndef _CLOCK_H_
|
||||
#define _CLOCK_H_
|
||||
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> CPUȯ<55>濡<EFBFBD><E6BFA1><EFBFBD><EFBFBD> Cache-Line<6E><65> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ؾ߸<D8BE> <20><> <20><>.
|
||||
#define CACHE_ALIGN 32
|
||||
#define CACHE_PAD(Name, BytesSoFar) \
|
||||
BYTE Name[CACHE_ALIGN - ((BytesSoFar) % CACHE_ALIGN)]
|
||||
|
||||
|
||||
template<class DerivedLockClass>
|
||||
class CLock
|
||||
{
|
||||
public:
|
||||
class Syncronize
|
||||
{
|
||||
public:
|
||||
inline Syncronize(DerivedLockClass* pLockClass) : Lock(*pLockClass) { Lock.Lock(); }
|
||||
inline Syncronize(DerivedLockClass& LockClass) : Lock(LockClass) { Lock.Lock(); }
|
||||
inline ~Syncronize() { Lock.Unlock();}
|
||||
protected:
|
||||
DerivedLockClass& Lock;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
// <20><> LockŬ<6B><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̻<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ƽ<DEBE><C6BC><EFBFBD> <20><> <20>ȴ<EFBFBD>.
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// DummyLock ------------------------------------------------------------------
|
||||
|
||||
class CDummyLock : public CLock<CDummyLock>
|
||||
{
|
||||
public:
|
||||
inline void Lock() { }
|
||||
inline void Unlock() { }
|
||||
inline bool IsVaildLock() { return true; }
|
||||
};
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// SpinLock -------------------------------------------------------------------
|
||||
|
||||
class CSpinLock : public CLock<CSpinLock>
|
||||
{
|
||||
public:
|
||||
inline CSpinLock() : m_bLocked(FALSE) { }
|
||||
inline ~CSpinLock() { }
|
||||
inline void Lock() { while(TRUE == InterlockedExchange(&m_bLocked, TRUE)) { Sleep(0); } }
|
||||
inline void Unlock() { InterlockedExchange(&m_bLocked, FALSE); }
|
||||
inline bool IsVaildLock() { return true; }
|
||||
private:
|
||||
volatile LONG m_bLocked;
|
||||
};
|
||||
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Critical Section -----------------------------------------------------------
|
||||
|
||||
class CCSLock : public CLock<CCSLock>
|
||||
{
|
||||
private:
|
||||
CRITICAL_SECTION m_CSLock;
|
||||
public:
|
||||
inline CCSLock() { InitializeCriticalSection(&m_CSLock); }
|
||||
inline ~CCSLock() { DeleteCriticalSection(&m_CSLock); }
|
||||
inline void Lock() { EnterCriticalSection(&m_CSLock); }
|
||||
inline void Unlock() { LeaveCriticalSection(&m_CSLock); }
|
||||
inline bool IsVaildLock() { return true; }
|
||||
};
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Mutex Lock -----------------------------------------------------------------
|
||||
|
||||
class CMutex : public CLock<CMutex>
|
||||
{
|
||||
private:
|
||||
HANDLE m_hMutex;
|
||||
public:
|
||||
inline CMutex() : m_hMutex(CreateMutex(NULL, FALSE, NULL)) { }
|
||||
inline ~CMutex() { if(0 != m_hMutex) { CloseHandle(m_hMutex); } }
|
||||
inline DWORD Lock() { return WaitForSingleObject(m_hMutex, INFINITE); }
|
||||
inline DWORD Unlock() { return ReleaseMutex(m_hMutex); }
|
||||
inline bool IsVaildLock() { return (NULL != m_hMutex); }
|
||||
};
|
||||
|
||||
|
||||
|
||||
class CNamedMutex : public CLock<CNamedMutex>
|
||||
{
|
||||
private:
|
||||
HANDLE m_hMutex;
|
||||
public:
|
||||
inline CNamedMutex(const char* szMutexName, BOOL bInitialOwner)
|
||||
: m_hMutex(CreateMutex(NULL, bInitialOwner, szMutexName)) { }
|
||||
inline ~CNamedMutex() { if(0 != m_hMutex) { CloseHandle(m_hMutex); } }
|
||||
inline DWORD Lock() { return WaitForSingleObject(m_hMutex, INFINITE); }
|
||||
inline DWORD Unlock() { return ReleaseMutex(m_hMutex); }
|
||||
inline bool IsVaildLock() { return (NULL != m_hMutex); }
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
class CFairRWLock : private CCSLock
|
||||
{
|
||||
private:
|
||||
Semaphore access_lock; // used as a one-at-a-time release valve
|
||||
CCSLock read_barrier; // used to block/wakeup readers
|
||||
unsigned int is_write_lock; // nonzero if locked for writing
|
||||
unsigned int writer_count; // # of writers waiting for or holding the lock
|
||||
unsigned int reader_count; // # of readers holding the lock
|
||||
unsigned int readers_waiting; // # of readers waiting for the lock
|
||||
|
||||
public:
|
||||
ReadLock()
|
||||
: access_lock(1), is_write_lock(0),
|
||||
writers_waiting(0), reader_count(0), readers_waiting(0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void ReadLock()
|
||||
{
|
||||
Mutex::Lock();
|
||||
|
||||
// if there is at least one writer using the lock or waiting for it,
|
||||
// we need to wait for access
|
||||
if (writer_count > 0))
|
||||
{
|
||||
if (readers_waiting++ == 0) // if we're the first reader in line
|
||||
Mutex::Unlock();
|
||||
access_lock.Wait(); // get the access lock
|
||||
Mutex::Lock();
|
||||
if (readers_waiting > 1) // then if there are other readers
|
||||
read_barrier.Open(); // let them go
|
||||
}
|
||||
else
|
||||
{
|
||||
Mutex::Unlock();
|
||||
read_barrier.Wait(); // otherwise wait until someone lets us go
|
||||
Mutex::Lock();
|
||||
}
|
||||
readers_waiting--;
|
||||
}
|
||||
reader_count++;
|
||||
Mutex::Unlock();
|
||||
}
|
||||
|
||||
void WriteLock()
|
||||
{
|
||||
Mutex::Lock();
|
||||
writer_count++; // one more writer
|
||||
Mutex::Unlock();
|
||||
access_lock.Wait(); // wait until the access lock is available
|
||||
Mutex::Lock();
|
||||
is_write_lock = 1; // lock is a write lock
|
||||
read_barrier.Close(); // give readers something to wait for
|
||||
Mutex::Unlock();
|
||||
}
|
||||
|
||||
void Unlock()
|
||||
{
|
||||
Mutex::Lock();
|
||||
if (is_write_lock)
|
||||
{ // if this is a write lock
|
||||
is_write_lock = 0; // let it go
|
||||
writer_count--; // one less writer
|
||||
access_lock.Post(); // now let someone else have a chance
|
||||
}
|
||||
else if (--reader_count == 0)
|
||||
{
|
||||
// if we're the last reader
|
||||
access_lock.Post(); // release the access lock
|
||||
}
|
||||
Mutex::Unlock();
|
||||
}
|
||||
};
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
451
GameTools/GLOBALSCRIPT/Utility/Compress/MiniLZO/lzoconf.h
Normal file
451
GameTools/GLOBALSCRIPT/Utility/Compress/MiniLZO/lzoconf.h
Normal file
@@ -0,0 +1,451 @@
|
||||
/* lzoconf.h -- configuration for the LZO real-time data compression library
|
||||
|
||||
This file is part of the LZO real-time data compression library.
|
||||
|
||||
Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer
|
||||
All Rights Reserved.
|
||||
|
||||
The LZO library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
The LZO library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with the LZO library; see the file COPYING.
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer
|
||||
<markus@oberhumer.com>
|
||||
http://www.oberhumer.com/opensource/lzo/
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __LZOCONF_H
|
||||
#define __LZOCONF_H
|
||||
|
||||
#define LZO_VERSION 0x1080
|
||||
#define LZO_VERSION_STRING "1.08"
|
||||
#define LZO_VERSION_DATE "Jul 12 2002"
|
||||
|
||||
/* internal Autoconf configuration file - only used when building LZO */
|
||||
#if defined(LZO_HAVE_CONFIG_H)
|
||||
# include <config.h>
|
||||
#endif
|
||||
#include <limits.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
// LZO requires a conforming <limits.h>
|
||||
************************************************************************/
|
||||
|
||||
#if !defined(CHAR_BIT) || (CHAR_BIT != 8)
|
||||
# error "invalid CHAR_BIT"
|
||||
#endif
|
||||
#if !defined(UCHAR_MAX) || !defined(UINT_MAX) || !defined(ULONG_MAX)
|
||||
# error "check your compiler installation"
|
||||
#endif
|
||||
#if (USHRT_MAX < 1) || (UINT_MAX < 1) || (ULONG_MAX < 1)
|
||||
# error "your limits.h macros are broken"
|
||||
#endif
|
||||
|
||||
/* workaround a cpp bug under hpux 10.20 */
|
||||
#define LZO_0xffffffffL 4294967295ul
|
||||
|
||||
#if !defined(LZO_UINT32_C)
|
||||
# if (UINT_MAX < LZO_0xffffffffL)
|
||||
# define LZO_UINT32_C(c) c ## UL
|
||||
# else
|
||||
# define LZO_UINT32_C(c) c ## U
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
// architecture defines
|
||||
************************************************************************/
|
||||
|
||||
#if !defined(__LZO_WIN) && !defined(__LZO_DOS) && !defined(__LZO_OS2)
|
||||
# if defined(__WINDOWS__) || defined(_WINDOWS) || defined(_Windows)
|
||||
# define __LZO_WIN
|
||||
# elif defined(__WIN32__) || defined(_WIN32) || defined(WIN32)
|
||||
# define __LZO_WIN
|
||||
# elif defined(__NT__) || defined(__NT_DLL__) || defined(__WINDOWS_386__)
|
||||
# define __LZO_WIN
|
||||
# elif defined(__DOS__) || defined(__MSDOS__) || defined(MSDOS)
|
||||
# define __LZO_DOS
|
||||
# elif defined(__OS2__) || defined(__OS2V2__) || defined(OS2)
|
||||
# define __LZO_OS2
|
||||
# elif defined(__palmos__)
|
||||
# define __LZO_PALMOS
|
||||
# elif defined(__TOS__) || defined(__atarist__)
|
||||
# define __LZO_TOS
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if (UINT_MAX < LZO_0xffffffffL)
|
||||
# if defined(__LZO_WIN)
|
||||
# define __LZO_WIN16
|
||||
# elif defined(__LZO_DOS)
|
||||
# define __LZO_DOS16
|
||||
# elif defined(__LZO_PALMOS)
|
||||
# define __LZO_PALMOS16
|
||||
# elif defined(__LZO_TOS)
|
||||
# define __LZO_TOS16
|
||||
# elif defined(__C166__)
|
||||
# else
|
||||
/* porting hint: for pure 16-bit architectures try compiling
|
||||
* everything with -D__LZO_STRICT_16BIT */
|
||||
# error "16-bit target not supported - contact me for porting hints"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !defined(__LZO_i386)
|
||||
# if defined(__LZO_DOS) || defined(__LZO_WIN16)
|
||||
# define __LZO_i386
|
||||
# elif defined(__i386__) || defined(__386__) || defined(_M_IX86)
|
||||
# define __LZO_i386
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined(__LZO_STRICT_16BIT)
|
||||
# if (UINT_MAX < LZO_0xffffffffL)
|
||||
# include <lzo16bit.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* memory checkers */
|
||||
#if !defined(__LZO_CHECKER)
|
||||
# if defined(__BOUNDS_CHECKING_ON)
|
||||
# define __LZO_CHECKER
|
||||
# elif defined(__CHECKER__)
|
||||
# define __LZO_CHECKER
|
||||
# elif defined(__INSURE__)
|
||||
# define __LZO_CHECKER
|
||||
# elif defined(__PURIFY__)
|
||||
# define __LZO_CHECKER
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
// integral and pointer types
|
||||
************************************************************************/
|
||||
|
||||
/* Integral types with 32 bits or more */
|
||||
#if !defined(LZO_UINT32_MAX)
|
||||
# if (UINT_MAX >= LZO_0xffffffffL)
|
||||
typedef unsigned int lzo_uint32;
|
||||
typedef int lzo_int32;
|
||||
# define LZO_UINT32_MAX UINT_MAX
|
||||
# define LZO_INT32_MAX INT_MAX
|
||||
# define LZO_INT32_MIN INT_MIN
|
||||
# elif (ULONG_MAX >= LZO_0xffffffffL)
|
||||
typedef unsigned long lzo_uint32;
|
||||
typedef long lzo_int32;
|
||||
# define LZO_UINT32_MAX ULONG_MAX
|
||||
# define LZO_INT32_MAX LONG_MAX
|
||||
# define LZO_INT32_MIN LONG_MIN
|
||||
# else
|
||||
# error "lzo_uint32"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* lzo_uint is used like size_t */
|
||||
#if !defined(LZO_UINT_MAX)
|
||||
# if (UINT_MAX >= LZO_0xffffffffL)
|
||||
typedef unsigned int lzo_uint;
|
||||
typedef int lzo_int;
|
||||
# define LZO_UINT_MAX UINT_MAX
|
||||
# define LZO_INT_MAX INT_MAX
|
||||
# define LZO_INT_MIN INT_MIN
|
||||
# elif (ULONG_MAX >= LZO_0xffffffffL)
|
||||
typedef unsigned long lzo_uint;
|
||||
typedef long lzo_int;
|
||||
# define LZO_UINT_MAX ULONG_MAX
|
||||
# define LZO_INT_MAX LONG_MAX
|
||||
# define LZO_INT_MIN LONG_MIN
|
||||
# else
|
||||
# error "lzo_uint"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
typedef int lzo_bool;
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
// memory models
|
||||
************************************************************************/
|
||||
|
||||
/* Memory model for the public code segment. */
|
||||
#if !defined(__LZO_CMODEL)
|
||||
# if defined(__LZO_DOS16) || defined(__LZO_WIN16)
|
||||
# define __LZO_CMODEL __far
|
||||
# elif defined(__LZO_i386) && defined(__WATCOMC__)
|
||||
# define __LZO_CMODEL __near
|
||||
# else
|
||||
# define __LZO_CMODEL
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Memory model for the public data segment. */
|
||||
#if !defined(__LZO_DMODEL)
|
||||
# if defined(__LZO_DOS16) || defined(__LZO_WIN16)
|
||||
# define __LZO_DMODEL __far
|
||||
# elif defined(__LZO_i386) && defined(__WATCOMC__)
|
||||
# define __LZO_DMODEL __near
|
||||
# else
|
||||
# define __LZO_DMODEL
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Memory model that allows to access memory at offsets of lzo_uint. */
|
||||
#if !defined(__LZO_MMODEL)
|
||||
# if (LZO_UINT_MAX <= UINT_MAX)
|
||||
# define __LZO_MMODEL
|
||||
# elif defined(__LZO_DOS16) || defined(__LZO_WIN16)
|
||||
# define __LZO_MMODEL __huge
|
||||
# define LZO_999_UNSUPPORTED
|
||||
# elif defined(__LZO_PALMOS16) || defined(__LZO_TOS16)
|
||||
# define __LZO_MMODEL
|
||||
# else
|
||||
# error "__LZO_MMODEL"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* no typedef here because of const-pointer issues */
|
||||
#define lzo_byte unsigned char __LZO_MMODEL
|
||||
#define lzo_bytep unsigned char __LZO_MMODEL *
|
||||
#define lzo_charp char __LZO_MMODEL *
|
||||
#define lzo_voidp void __LZO_MMODEL *
|
||||
#define lzo_shortp short __LZO_MMODEL *
|
||||
#define lzo_ushortp unsigned short __LZO_MMODEL *
|
||||
#define lzo_uint32p lzo_uint32 __LZO_MMODEL *
|
||||
#define lzo_int32p lzo_int32 __LZO_MMODEL *
|
||||
#define lzo_uintp lzo_uint __LZO_MMODEL *
|
||||
#define lzo_intp lzo_int __LZO_MMODEL *
|
||||
#define lzo_voidpp lzo_voidp __LZO_MMODEL *
|
||||
#define lzo_bytepp lzo_bytep __LZO_MMODEL *
|
||||
|
||||
#ifndef lzo_sizeof_dict_t
|
||||
# define lzo_sizeof_dict_t sizeof(lzo_bytep)
|
||||
#endif
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
// calling conventions and function types
|
||||
************************************************************************/
|
||||
|
||||
/* linkage */
|
||||
#if !defined(__LZO_EXTERN_C)
|
||||
# ifdef __cplusplus
|
||||
# define __LZO_EXTERN_C extern "C"
|
||||
# else
|
||||
# define __LZO_EXTERN_C extern
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* calling convention */
|
||||
#if !defined(__LZO_CDECL)
|
||||
# if defined(__LZO_DOS16) || defined(__LZO_WIN16)
|
||||
# define __LZO_CDECL __LZO_CMODEL __cdecl
|
||||
# elif defined(__LZO_i386) && defined(_MSC_VER)
|
||||
# define __LZO_CDECL __LZO_CMODEL __cdecl
|
||||
# elif defined(__LZO_i386) && defined(__WATCOMC__)
|
||||
# define __LZO_CDECL __LZO_CMODEL __cdecl
|
||||
# else
|
||||
# define __LZO_CDECL __LZO_CMODEL
|
||||
# endif
|
||||
#endif
|
||||
#if !defined(__LZO_ENTRY)
|
||||
# define __LZO_ENTRY __LZO_CDECL
|
||||
#endif
|
||||
|
||||
/* C++ exception specification for extern "C" function types */
|
||||
#if !defined(__cplusplus)
|
||||
# undef LZO_NOTHROW
|
||||
# define LZO_NOTHROW
|
||||
#elif !defined(LZO_NOTHROW)
|
||||
# define LZO_NOTHROW
|
||||
#endif
|
||||
|
||||
|
||||
typedef int
|
||||
(__LZO_ENTRY *lzo_compress_t) ( const lzo_byte *src, lzo_uint src_len,
|
||||
lzo_byte *dst, lzo_uintp dst_len,
|
||||
lzo_voidp wrkmem );
|
||||
|
||||
typedef int
|
||||
(__LZO_ENTRY *lzo_decompress_t) ( const lzo_byte *src, lzo_uint src_len,
|
||||
lzo_byte *dst, lzo_uintp dst_len,
|
||||
lzo_voidp wrkmem );
|
||||
|
||||
typedef int
|
||||
(__LZO_ENTRY *lzo_optimize_t) ( lzo_byte *src, lzo_uint src_len,
|
||||
lzo_byte *dst, lzo_uintp dst_len,
|
||||
lzo_voidp wrkmem );
|
||||
|
||||
typedef int
|
||||
(__LZO_ENTRY *lzo_compress_dict_t)(const lzo_byte *src, lzo_uint src_len,
|
||||
lzo_byte *dst, lzo_uintp dst_len,
|
||||
lzo_voidp wrkmem,
|
||||
const lzo_byte *dict, lzo_uint dict_len );
|
||||
|
||||
typedef int
|
||||
(__LZO_ENTRY *lzo_decompress_dict_t)(const lzo_byte *src, lzo_uint src_len,
|
||||
lzo_byte *dst, lzo_uintp dst_len,
|
||||
lzo_voidp wrkmem,
|
||||
const lzo_byte *dict, lzo_uint dict_len );
|
||||
|
||||
|
||||
/* assembler versions always use __cdecl */
|
||||
typedef int
|
||||
(__LZO_CDECL *lzo_compress_asm_t)( const lzo_byte *src, lzo_uint src_len,
|
||||
lzo_byte *dst, lzo_uintp dst_len,
|
||||
lzo_voidp wrkmem );
|
||||
|
||||
typedef int
|
||||
(__LZO_CDECL *lzo_decompress_asm_t)( const lzo_byte *src, lzo_uint src_len,
|
||||
lzo_byte *dst, lzo_uintp dst_len,
|
||||
lzo_voidp wrkmem );
|
||||
|
||||
|
||||
/* a progress indicator callback function */
|
||||
typedef void (__LZO_ENTRY *lzo_progress_callback_t) (lzo_uint, lzo_uint);
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
// export information
|
||||
************************************************************************/
|
||||
|
||||
/* DLL export information */
|
||||
#if !defined(__LZO_EXPORT1)
|
||||
# define __LZO_EXPORT1
|
||||
#endif
|
||||
#if !defined(__LZO_EXPORT2)
|
||||
# define __LZO_EXPORT2
|
||||
#endif
|
||||
|
||||
/* exported calling convention for C functions */
|
||||
#if !defined(LZO_PUBLIC)
|
||||
# define LZO_PUBLIC(_rettype) \
|
||||
__LZO_EXPORT1 _rettype __LZO_EXPORT2 __LZO_ENTRY
|
||||
#endif
|
||||
#if !defined(LZO_EXTERN)
|
||||
# define LZO_EXTERN(_rettype) __LZO_EXTERN_C LZO_PUBLIC(_rettype)
|
||||
#endif
|
||||
#if !defined(LZO_PRIVATE)
|
||||
# define LZO_PRIVATE(_rettype) static _rettype __LZO_ENTRY
|
||||
#endif
|
||||
|
||||
/* exported __cdecl calling convention for assembler functions */
|
||||
#if !defined(LZO_PUBLIC_CDECL)
|
||||
# define LZO_PUBLIC_CDECL(_rettype) \
|
||||
__LZO_EXPORT1 _rettype __LZO_EXPORT2 __LZO_CDECL
|
||||
#endif
|
||||
#if !defined(LZO_EXTERN_CDECL)
|
||||
# define LZO_EXTERN_CDECL(_rettype) __LZO_EXTERN_C LZO_PUBLIC_CDECL(_rettype)
|
||||
#endif
|
||||
|
||||
/* exported global variables (LZO currently uses no static variables and
|
||||
* is fully thread safe) */
|
||||
#if !defined(LZO_PUBLIC_VAR)
|
||||
# define LZO_PUBLIC_VAR(_type) \
|
||||
__LZO_EXPORT1 _type __LZO_EXPORT2 __LZO_DMODEL
|
||||
#endif
|
||||
#if !defined(LZO_EXTERN_VAR)
|
||||
# define LZO_EXTERN_VAR(_type) extern LZO_PUBLIC_VAR(_type)
|
||||
#endif
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
// error codes and prototypes
|
||||
************************************************************************/
|
||||
|
||||
/* Error codes for the compression/decompression functions. Negative
|
||||
* values are errors, positive values will be used for special but
|
||||
* normal events.
|
||||
*/
|
||||
#define LZO_E_OK 0
|
||||
#define LZO_E_ERROR (-1)
|
||||
#define LZO_E_OUT_OF_MEMORY (-2) /* not used right now */
|
||||
#define LZO_E_NOT_COMPRESSIBLE (-3) /* not used right now */
|
||||
#define LZO_E_INPUT_OVERRUN (-4)
|
||||
#define LZO_E_OUTPUT_OVERRUN (-5)
|
||||
#define LZO_E_LOOKBEHIND_OVERRUN (-6)
|
||||
#define LZO_E_EOF_NOT_FOUND (-7)
|
||||
#define LZO_E_INPUT_NOT_CONSUMED (-8)
|
||||
|
||||
|
||||
/* lzo_init() should be the first function you call.
|
||||
* Check the return code !
|
||||
*
|
||||
* lzo_init() is a macro to allow checking that the library and the
|
||||
* compiler's view of various types are consistent.
|
||||
*/
|
||||
#define lzo_init() __lzo_init2(LZO_VERSION,(int)sizeof(short),(int)sizeof(int),\
|
||||
(int)sizeof(long),(int)sizeof(lzo_uint32),(int)sizeof(lzo_uint),\
|
||||
(int)lzo_sizeof_dict_t,(int)sizeof(char *),(int)sizeof(lzo_voidp),\
|
||||
(int)sizeof(lzo_compress_t))
|
||||
LZO_EXTERN(int) __lzo_init2(unsigned,int,int,int,int,int,int,int,int,int);
|
||||
|
||||
/* version functions (useful for shared libraries) */
|
||||
LZO_EXTERN(unsigned) lzo_version(void);
|
||||
LZO_EXTERN(const char *) lzo_version_string(void);
|
||||
LZO_EXTERN(const char *) lzo_version_date(void);
|
||||
LZO_EXTERN(const lzo_charp) _lzo_version_string(void);
|
||||
LZO_EXTERN(const lzo_charp) _lzo_version_date(void);
|
||||
|
||||
/* string functions */
|
||||
LZO_EXTERN(int)
|
||||
lzo_memcmp(const lzo_voidp _s1, const lzo_voidp _s2, lzo_uint _len);
|
||||
LZO_EXTERN(lzo_voidp)
|
||||
lzo_memcpy(lzo_voidp _dest, const lzo_voidp _src, lzo_uint _len);
|
||||
LZO_EXTERN(lzo_voidp)
|
||||
lzo_memmove(lzo_voidp _dest, const lzo_voidp _src, lzo_uint _len);
|
||||
LZO_EXTERN(lzo_voidp)
|
||||
lzo_memset(lzo_voidp _s, int _c, lzo_uint _len);
|
||||
|
||||
/* checksum functions */
|
||||
LZO_EXTERN(lzo_uint32)
|
||||
lzo_adler32(lzo_uint32 _adler, const lzo_byte *_buf, lzo_uint _len);
|
||||
LZO_EXTERN(lzo_uint32)
|
||||
lzo_crc32(lzo_uint32 _c, const lzo_byte *_buf, lzo_uint _len);
|
||||
|
||||
/* misc. */
|
||||
LZO_EXTERN(lzo_bool) lzo_assert(int _expr);
|
||||
LZO_EXTERN(int) _lzo_config_check(void);
|
||||
typedef union { lzo_bytep p; lzo_uint u; } __lzo_pu_u;
|
||||
typedef union { lzo_bytep p; lzo_uint32 u32; } __lzo_pu32_u;
|
||||
typedef union { void *vp; lzo_bytep bp; lzo_uint32 u32; long l; } lzo_align_t;
|
||||
|
||||
/* align a char pointer on a boundary that is a multiple of `size' */
|
||||
LZO_EXTERN(unsigned) __lzo_align_gap(const lzo_voidp _ptr, lzo_uint _size);
|
||||
#define LZO_PTR_ALIGN_UP(_ptr,_size) \
|
||||
((_ptr) + (lzo_uint) __lzo_align_gap((const lzo_voidp)(_ptr),(lzo_uint)(_size)))
|
||||
|
||||
/* deprecated - only for backward compatibility */
|
||||
#define LZO_ALIGN(_ptr,_size) LZO_PTR_ALIGN_UP(_ptr,_size)
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* already included */
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
#include "stdafx.h"
|
||||
#include "miniLZOWrapper.h"
|
||||
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include <cstdio>
|
||||
|
||||
bool CMiniLZOCompress::TestMiniLZO()
|
||||
{
|
||||
const int MAX_BUFFER = 5 * 1024 * 1024;
|
||||
|
||||
char* szBuffer1 = new char[MAX_BUFFER];
|
||||
char* szBuffer2 = new char[MAX_BUFFER];
|
||||
|
||||
DWORD dwOut = 0;
|
||||
|
||||
DWORD dwDecompressInOut = MAX_BUFFER;
|
||||
|
||||
sprintf(szBuffer1, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
|
||||
CMiniLZOCompress::Compress(szBuffer1, MAX_BUFFER, szBuffer2, &dwOut);
|
||||
memset(szBuffer1, 0, MAX_BUFFER);
|
||||
CMiniLZOCompress::Decompress(szBuffer2, dwOut, szBuffer1, &dwDecompressInOut);
|
||||
|
||||
MessageBox(NULL, szBuffer1, NULL, NULL);
|
||||
|
||||
delete [] szBuffer1;
|
||||
delete [] szBuffer2;
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
#ifndef _MINI_LZO_WRAPPER_H_
|
||||
#define _MINI_LZO_WRAPPER_H_
|
||||
|
||||
#include "minilzo.h"
|
||||
|
||||
class CMiniLZOCompress
|
||||
{
|
||||
public:
|
||||
|
||||
inline static bool Compress(const char* in, unsigned long in_len, char* out, unsigned long* lp_out_len);
|
||||
inline static bool Decompress(const char* in, unsigned long in_len, char* out, unsigned long* buffersize_in_out_len);
|
||||
|
||||
static bool TestMiniLZO();
|
||||
};
|
||||
|
||||
inline bool CMiniLZOCompress::Compress(const char* in, unsigned long in_len, char* out, unsigned long* lp_out_len)
|
||||
{
|
||||
lzo_voidp wrkmem[LZO1X_1_MEM_COMPRESS]; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>۸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
return (LZO_E_OK == lzo1x_1_compress(reinterpret_cast<const lzo_byte*>(in), in_len,
|
||||
reinterpret_cast<lzo_byte*>(out), reinterpret_cast<lzo_uintp>(lp_out_len), wrkmem));
|
||||
}
|
||||
|
||||
inline bool CMiniLZOCompress::Decompress(const char* in, unsigned long in_len, char* out, unsigned long* buffersize_in_out_len)
|
||||
{
|
||||
return (LZO_E_OK == lzo1x_decompress_safe(reinterpret_cast<const lzo_byte*>(in), in_len,
|
||||
reinterpret_cast<lzo_byte*>(out), reinterpret_cast<lzo_uintp>(buffersize_in_out_len), 0));
|
||||
}
|
||||
|
||||
#endif
|
||||
2950
GameTools/GLOBALSCRIPT/Utility/Compress/MiniLZO/minilzo.cpp
Normal file
2950
GameTools/GLOBALSCRIPT/Utility/Compress/MiniLZO/minilzo.cpp
Normal file
File diff suppressed because it is too large
Load Diff
100
GameTools/GLOBALSCRIPT/Utility/Compress/MiniLZO/minilzo.h
Normal file
100
GameTools/GLOBALSCRIPT/Utility/Compress/MiniLZO/minilzo.h
Normal file
@@ -0,0 +1,100 @@
|
||||
/* minilzo.h -- mini subset of the LZO real-time data compression library
|
||||
|
||||
This file is part of the LZO real-time data compression library.
|
||||
|
||||
Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer
|
||||
All Rights Reserved.
|
||||
|
||||
The LZO library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
The LZO library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with the LZO library; see the file COPYING.
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer
|
||||
<markus@oberhumer.com>
|
||||
http://www.oberhumer.com/opensource/lzo/
|
||||
*/
|
||||
|
||||
/*
|
||||
* NOTE:
|
||||
* the full LZO package can be found at
|
||||
* http://www.oberhumer.com/opensource/lzo/
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __MINILZO_H
|
||||
#define __MINILZO_H
|
||||
|
||||
#define MINILZO_VERSION 0x1080
|
||||
|
||||
#ifdef __LZOCONF_H
|
||||
# error "you cannot use both LZO and miniLZO"
|
||||
#endif
|
||||
|
||||
#undef LZO_HAVE_CONFIG_H
|
||||
#include "lzoconf.h"
|
||||
|
||||
#if !defined(LZO_VERSION) || (LZO_VERSION != MINILZO_VERSION)
|
||||
# error "version mismatch in header files"
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
//
|
||||
************************************************************************/
|
||||
|
||||
/* Memory required for the wrkmem parameter.
|
||||
* When the required size is 0, you can also pass a NULL pointer.
|
||||
*/
|
||||
|
||||
#define LZO1X_MEM_COMPRESS LZO1X_1_MEM_COMPRESS
|
||||
#define LZO1X_1_MEM_COMPRESS ((lzo_uint32) (16384L * lzo_sizeof_dict_t))
|
||||
#define LZO1X_MEM_DECOMPRESS (0)
|
||||
|
||||
|
||||
/* compression */
|
||||
LZO_EXTERN(int)
|
||||
lzo1x_1_compress ( const lzo_byte *src, lzo_uint src_len,
|
||||
lzo_byte *dst, lzo_uintp dst_len,
|
||||
lzo_voidp wrkmem );
|
||||
|
||||
/* decompression */
|
||||
LZO_EXTERN(int)
|
||||
lzo1x_decompress ( const lzo_byte *src, lzo_uint src_len,
|
||||
lzo_byte *dst, lzo_uintp dst_len,
|
||||
lzo_voidp wrkmem /* NOT USED */ );
|
||||
|
||||
/* safe decompression with overrun testing */
|
||||
LZO_EXTERN(int)
|
||||
lzo1x_decompress_safe ( const lzo_byte *src, lzo_uint src_len,
|
||||
lzo_byte *dst, lzo_uintp dst_len,
|
||||
lzo_voidp wrkmem /* NOT USED */ );
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* already included */
|
||||
|
||||
381
GameTools/GLOBALSCRIPT/Utility/DelimitedFile.cpp
Normal file
381
GameTools/GLOBALSCRIPT/Utility/DelimitedFile.cpp
Normal file
@@ -0,0 +1,381 @@
|
||||
#include "stdafx.h"
|
||||
#include "DelimitedFile.h"
|
||||
|
||||
// TODO: CDelimitedFile::Write <20>迭 <20><><EFBFBD><EFBFBD>
|
||||
|
||||
CDelimitedFile::CDelimitedFile(const char* pszDelimiter)
|
||||
: m_fpFile(0), m_dwColumn(0), m_dwColumnCount(0)
|
||||
{
|
||||
m_ColumnNames.reserve(DEFAULT_COLUMN_NUM);
|
||||
strncpy(m_szDelimiter, pszDelimiter, MAX_DELIMITER_NUM);
|
||||
}
|
||||
|
||||
CDelimitedFile::~CDelimitedFile()
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::Open( LPCSTR szFilename, int nHeadLine, UINT nOpenFlags )
|
||||
{
|
||||
m_fpFile = ::fopen( szFilename, (nOpenFlags & modeCreate) ? "wt" : "rt" );
|
||||
if (NULL == m_fpFile)
|
||||
{
|
||||
#ifdef ERRLOG2
|
||||
DWORD dwError = ::GetLastError();
|
||||
ERRLOG2(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> %s<><73> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. Error Code : %d", szFilename, dwError);
|
||||
#endif
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (nHeadLine > -1)
|
||||
{
|
||||
for (int i=0; i<nHeadLine; ++i)
|
||||
{
|
||||
ReadLine();
|
||||
}
|
||||
|
||||
for(m_dwColumnCount = 0; true; ++m_dwColumnCount)
|
||||
{
|
||||
char* szColumnName = new char[MAX_COLUMN_LENGHT];
|
||||
|
||||
if(0 == szColumnName)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if(false == ReadString(szColumnName, MAX_COLUMN_LENGHT - 1))
|
||||
{
|
||||
delete szColumnName;
|
||||
break;
|
||||
}
|
||||
|
||||
size_t nLength = strlen(szColumnName);
|
||||
while(nLength-- > 0)
|
||||
{
|
||||
if(szColumnName[nLength] == '\r' || szColumnName[nLength] == '\n')
|
||||
{
|
||||
szColumnName[nLength] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
szColumnName[MAX_COLUMN_LENGHT - 1] = 0;
|
||||
m_ColumnNames.push_back(szColumnName);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void CDelimitedFile::Close( void )
|
||||
{
|
||||
if( m_fpFile )
|
||||
{
|
||||
::fclose( m_fpFile );
|
||||
m_fpFile = 0;
|
||||
}
|
||||
|
||||
ColumnArray::size_type nTotalSize = m_ColumnNames.size();
|
||||
for(ColumnArray::size_type nCount = 0; nCount < nTotalSize; ++nCount)
|
||||
{
|
||||
delete [] m_ColumnNames[nCount];
|
||||
}
|
||||
|
||||
m_ColumnNames.clear();
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadLine( void )
|
||||
{
|
||||
while( ::fgets( m_szLine, MAX_LINE_LENGTH, m_fpFile ) ) {
|
||||
if( (m_szLine[0]) && (m_szLine[0] != ';') ) {
|
||||
m_dwColumn = 0;
|
||||
memcpy(m_szBackupLine, m_szLine, MAX_LINE_LENGTH);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData( bool &bNumber )
|
||||
{
|
||||
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
|
||||
|
||||
if( !pszData || !(*pszData) )
|
||||
return FALSE;
|
||||
|
||||
bNumber = false;
|
||||
if (atoi(pszData) == 1)
|
||||
bNumber = true;
|
||||
|
||||
char szString[2];
|
||||
strncpy(szString, pszData, 1);
|
||||
if (NULL == ::strcmp(szString, "O"))
|
||||
bNumber = true;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData( double &dNumber )
|
||||
{
|
||||
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
|
||||
|
||||
if( !pszData || !(*pszData) )
|
||||
return FALSE;
|
||||
dNumber = atof( pszData );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData( float &fNumber )
|
||||
{
|
||||
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
|
||||
|
||||
if( !pszData || !(*pszData) )
|
||||
return FALSE;
|
||||
fNumber = (float) atof( pszData );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData( unsigned long &fNumber )
|
||||
{
|
||||
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
|
||||
|
||||
if( !pszData || !(*pszData) )
|
||||
return FALSE;
|
||||
fNumber = (unsigned long) atol( pszData );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData( int &iNumber )
|
||||
{
|
||||
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
|
||||
|
||||
if( !pszData || !(*pszData) )
|
||||
return FALSE;
|
||||
iNumber = atoi( pszData );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData( unsigned short &iNumber )
|
||||
{
|
||||
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
|
||||
|
||||
if( !pszData || !(*pszData) )
|
||||
return FALSE;
|
||||
iNumber = (unsigned short)atoi( pszData );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData( short &iNumber )
|
||||
{
|
||||
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
|
||||
|
||||
if( !pszData || !(*pszData) )
|
||||
return FALSE;
|
||||
iNumber = (short)atoi( pszData );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData( unsigned char &iNumber )
|
||||
{
|
||||
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
|
||||
|
||||
if( !pszData || !(*pszData) )
|
||||
return FALSE;
|
||||
iNumber = (unsigned char)atoi( pszData );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData( char &iNumber )
|
||||
{
|
||||
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
|
||||
|
||||
if( !pszData || !(*pszData) )
|
||||
return FALSE;
|
||||
iNumber = (char)atoi( pszData );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData( __int64 &i64Number )
|
||||
{
|
||||
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
|
||||
|
||||
if( !pszData || !(*pszData) )
|
||||
return FALSE;
|
||||
i64Number = _atoi64( pszData );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData( DWORD64 &i64Number )
|
||||
{
|
||||
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
|
||||
|
||||
if( !pszData || !(*pszData) )
|
||||
return FALSE;
|
||||
i64Number = (DWORD)_atoi64( pszData );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadString( char *szString, DWORD dwSize )
|
||||
{
|
||||
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
|
||||
|
||||
if( !pszData || !(*pszData) )
|
||||
return FALSE;
|
||||
strncpy(szString, pszData, dwSize);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData(const char *szField, double &dNumber )
|
||||
{
|
||||
int nSearch;
|
||||
|
||||
if( ((nSearch = FindColumn( szField )) == -1) )
|
||||
return FALSE;
|
||||
GotoColumn( nSearch );
|
||||
return ReadData( dNumber );
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData(const char *szField, float &fNumber )
|
||||
{
|
||||
int nSearch;
|
||||
|
||||
if( ((nSearch = FindColumn( szField )) == -1) )
|
||||
return FALSE;
|
||||
GotoColumn( nSearch );
|
||||
return ReadData( fNumber );
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData(const char *szField, unsigned long &fNumber )
|
||||
{
|
||||
int nSearch;
|
||||
|
||||
if( ((nSearch = FindColumn( szField )) == -1) )
|
||||
return FALSE;
|
||||
GotoColumn( nSearch );
|
||||
return ReadData( fNumber );
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData(const char *szField, int &iNumber )
|
||||
{
|
||||
int nSearch;
|
||||
|
||||
if( ((nSearch = FindColumn( szField )) == -1) )
|
||||
return FALSE;
|
||||
GotoColumn( nSearch );
|
||||
return ReadData( iNumber );
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData(const char *szField, unsigned short &iNumber )
|
||||
{
|
||||
int nSearch;
|
||||
|
||||
if( ((nSearch = FindColumn( szField )) == -1) )
|
||||
return FALSE;
|
||||
GotoColumn( nSearch );
|
||||
return ReadData( iNumber );
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData(const char *szField, short &iNumber )
|
||||
{
|
||||
int nSearch;
|
||||
|
||||
if( ((nSearch = FindColumn( szField )) == -1) )
|
||||
return FALSE;
|
||||
GotoColumn( nSearch );
|
||||
return ReadData( iNumber );
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData(const char *szField, unsigned char &iNumber )
|
||||
{
|
||||
int nSearch;
|
||||
|
||||
if( ((nSearch = FindColumn( szField )) == -1) )
|
||||
return FALSE;
|
||||
GotoColumn( nSearch );
|
||||
return ReadData( iNumber );
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData(const char *szField, char &iNumber )
|
||||
{
|
||||
int nSearch;
|
||||
|
||||
if( ((nSearch = FindColumn( szField )) == -1) )
|
||||
return FALSE;
|
||||
GotoColumn( nSearch );
|
||||
return ReadData( iNumber );
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData(const char *szField, __int64 &i64Number )
|
||||
{
|
||||
int nSearch;
|
||||
|
||||
if( ((nSearch = FindColumn( szField )) == -1) )
|
||||
return FALSE;
|
||||
GotoColumn( nSearch );
|
||||
return ReadData( i64Number );
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadData(const char *szField, DWORD64 &i64Number )
|
||||
{
|
||||
int nSearch;
|
||||
|
||||
if( ((nSearch = FindColumn( szField )) == -1) )
|
||||
return FALSE;
|
||||
GotoColumn( nSearch );
|
||||
return ReadData( i64Number );
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::ReadString(const char *szField, char *szString, DWORD dwSize )
|
||||
{
|
||||
int nSearch;
|
||||
|
||||
if( ((nSearch = FindColumn( szField )) == -1) )
|
||||
return FALSE;
|
||||
GotoColumn( nSearch );
|
||||
return ReadString( szString, dwSize );
|
||||
}
|
||||
|
||||
BOOL CDelimitedFile::GotoColumn( int nColumn )
|
||||
{
|
||||
CHAR* pszPos = 0;
|
||||
|
||||
if(nColumn < 0 || (DWORD)nColumn > m_dwColumnCount) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if((m_dwColumn == (DWORD) nColumn)) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if( nColumn == 0 ) {
|
||||
m_dwColumn = 0;
|
||||
strtok(m_szLine, m_szDelimiter);
|
||||
}
|
||||
else {
|
||||
for(;m_dwColumn < m_dwColumnCount && nColumn != m_dwColumn; ++m_dwColumn )
|
||||
pszPos = strtok(0, m_szDelimiter);
|
||||
|
||||
if(m_dwColumn == m_dwColumnCount) {
|
||||
memcpy(m_szLine, m_szBackupLine, MAX_LINE_LENGTH);
|
||||
pszPos = strtok(m_szLine, m_szDelimiter);
|
||||
for(m_dwColumn = 1; m_dwColumn < (DWORD)nColumn && nColumn != m_dwColumn; ++m_dwColumn ) {
|
||||
pszPos = strtok(NULL, m_szDelimiter );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int CDelimitedFile::FindColumn(const char *szField)
|
||||
{
|
||||
for(ColumnArray::size_type nCount = 0; nCount < m_ColumnNames.size(); ++nCount)
|
||||
{
|
||||
const char* szColumnName = m_ColumnNames[nCount];
|
||||
if(0 == strcmp(szField, szColumnName))
|
||||
{
|
||||
return static_cast<int>(nCount);
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
92
GameTools/GLOBALSCRIPT/Utility/DelimitedFile.h
Normal file
92
GameTools/GLOBALSCRIPT/Utility/DelimitedFile.h
Normal file
@@ -0,0 +1,92 @@
|
||||
#ifndef _DELIMITED_FILE_H_
|
||||
#define _DELIMITED_FILE_H_
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include <vector>
|
||||
|
||||
class CDelimitedFile
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
// MAX Delimiter num is 32;
|
||||
CDelimitedFile(const char* pszDelimiter = "\t");
|
||||
~CDelimitedFile();
|
||||
|
||||
enum {
|
||||
MAX_LINE_LENGTH = 8192,
|
||||
MAX_DELIMITER_NUM = 32,
|
||||
MAX_COLUMN_LENGHT = 64,
|
||||
DEFAULT_COLUMN_NUM = 32
|
||||
};
|
||||
|
||||
enum OpenFlags {
|
||||
modeRead = (int) 0x00000,
|
||||
modeCreate = (int) 0x01000
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
FILE *m_fpFile;
|
||||
DWORD m_dwColumn;
|
||||
DWORD m_dwColumnCount;
|
||||
CHAR m_szLine[MAX_LINE_LENGTH];
|
||||
CHAR m_szBackupLine[MAX_LINE_LENGTH];
|
||||
|
||||
char m_szDelimiter[MAX_DELIMITER_NUM];
|
||||
|
||||
typedef std::vector<char*> ColumnArray;
|
||||
ColumnArray m_ColumnNames;
|
||||
|
||||
private:
|
||||
|
||||
int FindColumn(const char *szField );
|
||||
BOOL GotoColumn( int nColumn );
|
||||
|
||||
public:
|
||||
BOOL Open(LPCSTR szFilename, int nHeadLine = -1, UINT nOpenFlags = modeRead );
|
||||
BOOL ReadLine();
|
||||
|
||||
BOOL ReadData(bool &bNumber);
|
||||
|
||||
BOOL ReadData(double &dNumber);
|
||||
BOOL ReadData(float &fNumber);
|
||||
|
||||
BOOL ReadData(unsigned long &fNumber);
|
||||
|
||||
BOOL ReadData(int &iNumber);
|
||||
BOOL ReadData(unsigned short &iNumber);
|
||||
BOOL ReadData(short &iNumber);
|
||||
BOOL ReadData(unsigned char &iNumber);
|
||||
BOOL ReadData(char &iNumber);
|
||||
|
||||
BOOL ReadData(__int64 &i64Number);
|
||||
BOOL ReadData(DWORD64 &i64Number);
|
||||
|
||||
BOOL ReadString(char *szString, DWORD dwSize);
|
||||
|
||||
|
||||
BOOL ReadData(const char *szField, double &dNumber);
|
||||
BOOL ReadData(const char *szField, float &fNumber);
|
||||
|
||||
BOOL ReadData(const char *szField, unsigned long &fNumber);
|
||||
|
||||
BOOL ReadData(const char *szField, int &iNumber);
|
||||
BOOL ReadData(const char *szField, unsigned short &iNumber);
|
||||
BOOL ReadData(const char *szField, short &iNumber);
|
||||
BOOL ReadData(const char *szField, unsigned char &iNumber);
|
||||
BOOL ReadData(const char *szField, char &iNumber);
|
||||
|
||||
BOOL ReadData(const char *szField, __int64 &i64Number);
|
||||
BOOL ReadData(const char *szField, DWORD64 &i64Number);
|
||||
|
||||
BOOL ReadString(const char *szField, char *szString, DWORD dwSize);
|
||||
|
||||
void Close();
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
220
GameTools/GLOBALSCRIPT/Utility/Math/Convert.inl
Normal file
220
GameTools/GLOBALSCRIPT/Utility/Math/Convert.inl
Normal file
@@ -0,0 +1,220 @@
|
||||
#ifndef _MATH_CONVERT_INLINE_H_
|
||||
#define _MATH_CONVERT_INLINE_H_
|
||||
|
||||
#include <cstdlib>
|
||||
#include <tchar.h>
|
||||
|
||||
inline void Math::Convert::Hex08ToStr( char *szDest, BYTE hex )
|
||||
{
|
||||
*((WORD *) szDest) = m_FastHeToBi[ hex ]; szDest += 2;
|
||||
*(szDest) = '\0';
|
||||
}
|
||||
|
||||
inline void Math::Convert::Hex16ToStr( char *szDest, WORD hex )
|
||||
{
|
||||
LPBYTE pSrc = (LPBYTE) &hex;
|
||||
|
||||
#ifdef BIG_ENDIAN
|
||||
*((WORD *) (szDest + 0)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 2)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
#else
|
||||
*((WORD *) (szDest + 2)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 0)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
#endif
|
||||
*(szDest + 4) = '\0';
|
||||
}
|
||||
|
||||
inline void Math::Convert::Hex32ToStr( char *szDest, DWORD hex )
|
||||
{
|
||||
LPBYTE pSrc = (LPBYTE) &hex;
|
||||
|
||||
#ifdef BIG_ENDIAN
|
||||
*((WORD *) (szDest + 0)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 2)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 4)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 6)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
#else
|
||||
*((WORD *) (szDest + 6)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 4)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 2)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 0)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
#endif
|
||||
*(szDest + 8) = '\0';
|
||||
}
|
||||
|
||||
inline void Math::Convert::Hex64ToStr( char *szDest, DWORD64 hex )
|
||||
{
|
||||
LPBYTE pSrc = (LPBYTE) &hex;
|
||||
|
||||
#ifdef BIG_ENDIAN
|
||||
*((WORD *) (szDest + 0)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 2)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 4)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 6)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 8)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 10)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 12)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 14)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
#else
|
||||
*((WORD *) (szDest + 14)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 12)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 10)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 8)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 6)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 4)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 2)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
*((WORD *) (szDest + 0)) = m_FastHeToBi[ *(pSrc++) ];
|
||||
#endif
|
||||
*(szDest + 16) = '\0';
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// this function returns the equivalent binary value for an individual character specified in the ascii format
|
||||
inline UCHAR Math::Convert::BiToHe(char cBin)
|
||||
{
|
||||
if((cBin >= '0') && (cBin <= '9'))
|
||||
{
|
||||
return (cBin - '0');
|
||||
}
|
||||
else if((cBin >= 'A') && (cBin <= 'F'))
|
||||
{
|
||||
return (cBin - 'A' + 0xA);
|
||||
}
|
||||
if((cBin >= 'a') && (cBin <= 'f'))
|
||||
{
|
||||
return (cBin -'a' + 0xA);
|
||||
}
|
||||
|
||||
return cBin;
|
||||
}
|
||||
|
||||
inline void Math::Convert::AcToHe(char *szDst, char *szSrc, int iCount)
|
||||
{
|
||||
while(iCount--)
|
||||
{
|
||||
*szDst = BiToHe(*szSrc) << 4;
|
||||
*szSrc++;
|
||||
*szDst += BiToHe(*szSrc);
|
||||
*szSrc++;
|
||||
*szDst++;
|
||||
}
|
||||
}
|
||||
|
||||
inline BYTE Math::Convert::StrToHex08(const char *szSrc)
|
||||
{
|
||||
const char* pStart = szSrc + 2;
|
||||
BYTE cHex = 0;
|
||||
|
||||
unsigned char c1, c2;
|
||||
|
||||
for (int i=0; i<1; ++i)
|
||||
{
|
||||
c1 = BiToHe(*pStart++);
|
||||
c1 <<= (8*(7-i)+4);
|
||||
|
||||
c2 = BiToHe(*pStart++);
|
||||
c2 <<= (8*(7-i));
|
||||
|
||||
cHex += (c1 + c2);
|
||||
}
|
||||
|
||||
return cHex;
|
||||
}
|
||||
|
||||
inline WORD Math::Convert::StrToHex16(const char *szSrc)
|
||||
{
|
||||
const char* pStart = szSrc + 2;
|
||||
WORD sHex = 0;
|
||||
|
||||
for (int i=0; i<2; i++)
|
||||
{
|
||||
WORD s1 = BiToHe(*pStart++);
|
||||
s1 <<= (8*(1-i)+4);
|
||||
|
||||
WORD s2 = BiToHe(*pStart++);
|
||||
s2 <<= (8*(1-i));
|
||||
|
||||
WORD sRet = s1 + s2;
|
||||
sHex += sRet;
|
||||
}
|
||||
|
||||
return sHex;
|
||||
|
||||
}
|
||||
|
||||
// convert string to hexadecimal value
|
||||
inline DWORD Math::Convert::StrToHex32(const char *szSrc)
|
||||
{
|
||||
const char* pStart = szSrc + 2;
|
||||
DWORD nHex = 0;
|
||||
|
||||
|
||||
for (int i=0; i<4; i++)
|
||||
{
|
||||
DWORD n1 = BiToHe(*pStart++);
|
||||
n1 <<= (8*(3-i)+4);
|
||||
|
||||
DWORD n2 = BiToHe(*pStart++);
|
||||
n2 <<= (8*(3-i));
|
||||
|
||||
DWORD nRet = n1 + n2;
|
||||
nHex += nRet;
|
||||
|
||||
}
|
||||
|
||||
return nHex;
|
||||
}
|
||||
|
||||
// convert string to hexadecimal value
|
||||
inline DWORD64 Math::Convert::StrToHex64(const char *szSrc)
|
||||
{
|
||||
const char* pStart = szSrc + 2;
|
||||
DWORD64 dlHex = 0;
|
||||
|
||||
for (int i=0; i<8; i++)
|
||||
{
|
||||
DWORD64 dl1 = BiToHe(*pStart++);
|
||||
dl1 <<= (8*(7-i)+4);
|
||||
|
||||
DWORD64 dl2 = BiToHe(*pStart++);
|
||||
dl2 <<= (8*(7-i));
|
||||
|
||||
DWORD64 dlRet = dl1 + dl2;
|
||||
dlHex += dlRet;
|
||||
|
||||
}
|
||||
return dlHex;
|
||||
}
|
||||
|
||||
|
||||
inline BYTE Math::Convert::Atoc(char *szSrc)
|
||||
{
|
||||
return (0 == strncmp(szSrc, "0x", 2)) ? StrToHex08(szSrc) : (BYTE) _ttol(szSrc);
|
||||
}
|
||||
|
||||
//
|
||||
// TCHAR *<2A><> <20><>Ĩ<EFBFBD>ô<EFBFBD>! (By Standil)
|
||||
//
|
||||
inline WORD Math::Convert::Atos(char *szSrc)
|
||||
{
|
||||
return (0 == strncmp(szSrc, "0x", 2)) ? StrToHex16(szSrc) : _ttoi(szSrc);
|
||||
}
|
||||
|
||||
//
|
||||
// TCHAR *<2A><> <20><>Ĩ<EFBFBD>ô<EFBFBD>! (By Standil)
|
||||
//
|
||||
inline DWORD Math::Convert::Atoi(char *szSrc)
|
||||
{
|
||||
return (0 == strncmp(szSrc, "0x", 2)) ? StrToHex32(szSrc) : _ttol(szSrc);
|
||||
}
|
||||
|
||||
//
|
||||
// TCHAR *<2A><> <20><>Ĩ<EFBFBD>ô<EFBFBD>! (By Standil)
|
||||
//
|
||||
inline DWORD64 Math::Convert::Atol64( char *szSrc )
|
||||
{
|
||||
return (0 == strncmp(szSrc, "0x", 2)) ? StrToHex64(szSrc) : _ttoi64(szSrc);
|
||||
}
|
||||
|
||||
#endif
|
||||
83
GameTools/GLOBALSCRIPT/Utility/Math/Math.cpp
Normal file
83
GameTools/GLOBALSCRIPT/Utility/Math/Math.cpp
Normal file
@@ -0,0 +1,83 @@
|
||||
// FastMath.cpp: implementation of the CFastMath class.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "Math.h"
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// utility functions
|
||||
// 0 -0x7FFFFFFF.
|
||||
unsigned long Math::Random::ComplexRandom(int nExtent)
|
||||
{
|
||||
if (nExtent < 1)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static unsigned long x = 1;
|
||||
static unsigned long c = 0;
|
||||
static unsigned long a = 2083801278UL;
|
||||
|
||||
#define addto(rh,rl,ah,al) (rl) = ((rl) + (al)) & 0xFFFFFFFFUL; \
|
||||
(rh) = ((rh) + (ah) + (((rl) < (al)) ? 1 : 0)) & 0xFFFFFFFFUL
|
||||
|
||||
unsigned long xl = (x & 0xFFFFUL);
|
||||
unsigned long xh = (x >> 16) & 0xFFFFUL;
|
||||
unsigned long al = (a & 0xFFFFUL);
|
||||
unsigned long ah = (a >> 16) & 0xFFFFUL;
|
||||
unsigned long tmp;
|
||||
|
||||
x = c;
|
||||
c = 0;
|
||||
tmp = xl * al;
|
||||
addto(c, x, 0, tmp);
|
||||
tmp = xl * ah;
|
||||
addto(c, x, (tmp >> 16), (tmp & 0xFFFFUL) << 16);
|
||||
tmp = xh * ah;
|
||||
addto(c, x, tmp, 1);
|
||||
tmp = xh * al;
|
||||
addto(c, x, (tmp >> 16), (tmp & 0xFFFFUL) << 16);
|
||||
|
||||
return (x % nExtent); // return x & 0x7FFFFFFFUL;
|
||||
}
|
||||
|
||||
|
||||
// This table only works on Little Endian(Byte Order) machine.
|
||||
const unsigned short Math::Convert::m_FastHeToBi[0x100] =
|
||||
{
|
||||
0x3030, 0x3130, 0x3230, 0x3330, 0x3430, 0x3530, 0x3630, 0x3730,
|
||||
0x3830, 0x3930, 0x4130, 0x4230, 0x4330, 0x4430, 0x4530, 0x4630,
|
||||
0x3031, 0x3131, 0x3231, 0x3331, 0x3431, 0x3531, 0x3631, 0x3731,
|
||||
0x3831, 0x3931, 0x4131, 0x4231, 0x4331, 0x4431, 0x4531, 0x4631,
|
||||
0x3032, 0x3132, 0x3232, 0x3332, 0x3432, 0x3532, 0x3632, 0x3732,
|
||||
0x3832, 0x3932, 0x4132, 0x4232, 0x4332, 0x4432, 0x4532, 0x4632,
|
||||
0x3033, 0x3133, 0x3233, 0x3333, 0x3433, 0x3533, 0x3633, 0x3733,
|
||||
0x3833, 0x3933, 0x4133, 0x4233, 0x4333, 0x4433, 0x4533, 0x4633,
|
||||
0x3034, 0x3134, 0x3234, 0x3334, 0x3434, 0x3534, 0x3634, 0x3734,
|
||||
0x3834, 0x3934, 0x4134, 0x4234, 0x4334, 0x4434, 0x4534, 0x4634,
|
||||
0x3035, 0x3135, 0x3235, 0x3335, 0x3435, 0x3535, 0x3635, 0x3735,
|
||||
0x3835, 0x3935, 0x4135, 0x4235, 0x4335, 0x4435, 0x4535, 0x4635,
|
||||
0x3036, 0x3136, 0x3236, 0x3336, 0x3436, 0x3536, 0x3636, 0x3736,
|
||||
0x3836, 0x3936, 0x4136, 0x4236, 0x4336, 0x4436, 0x4536, 0x4636,
|
||||
0x3037, 0x3137, 0x3237, 0x3337, 0x3437, 0x3537, 0x3637, 0x3737,
|
||||
0x3837, 0x3937, 0x4137, 0x4237, 0x4337, 0x4437, 0x4537, 0x4637,
|
||||
0x3038, 0x3138, 0x3238, 0x3338, 0x3438, 0x3538, 0x3638, 0x3738,
|
||||
0x3838, 0x3938, 0x4138, 0x4238, 0x4338, 0x4438, 0x4538, 0x4638,
|
||||
0x3039, 0x3139, 0x3239, 0x3339, 0x3439, 0x3539, 0x3639, 0x3739,
|
||||
0x3839, 0x3939, 0x4139, 0x4239, 0x4339, 0x4439, 0x4539, 0x4639,
|
||||
0x3041, 0x3141, 0x3241, 0x3341, 0x3441, 0x3541, 0x3641, 0x3741,
|
||||
0x3841, 0x3941, 0x4141, 0x4241, 0x4341, 0x4441, 0x4541, 0x4641,
|
||||
0x3042, 0x3142, 0x3242, 0x3342, 0x3442, 0x3542, 0x3642, 0x3742,
|
||||
0x3842, 0x3942, 0x4142, 0x4242, 0x4342, 0x4442, 0x4542, 0x4642,
|
||||
0x3043, 0x3143, 0x3243, 0x3343, 0x3443, 0x3543, 0x3643, 0x3743,
|
||||
0x3843, 0x3943, 0x4143, 0x4243, 0x4343, 0x4443, 0x4543, 0x4643,
|
||||
0x3044, 0x3144, 0x3244, 0x3344, 0x3444, 0x3544, 0x3644, 0x3744,
|
||||
0x3844, 0x3944, 0x4144, 0x4244, 0x4344, 0x4444, 0x4544, 0x4644,
|
||||
0x3045, 0x3145, 0x3245, 0x3345, 0x3445, 0x3545, 0x3645, 0x3745,
|
||||
0x3845, 0x3945, 0x4145, 0x4245, 0x4345, 0x4445, 0x4545, 0x4645,
|
||||
0x3046, 0x3146, 0x3246, 0x3346, 0x3446, 0x3546, 0x3646, 0x3746,
|
||||
0x3846, 0x3946, 0x4146, 0x4246, 0x4346, 0x4446, 0x4546, 0x4646,
|
||||
};
|
||||
|
||||
92
GameTools/GLOBALSCRIPT/Utility/Math/Math.h
Normal file
92
GameTools/GLOBALSCRIPT/Utility/Math/Math.h
Normal file
@@ -0,0 +1,92 @@
|
||||
// FastMath.h: interface for the CFastMath class.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _CUSTOM_MATH_FUNCTIONS_H_
|
||||
#define _CUSTOM_MATH_FUNCTIONS_H_
|
||||
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include <cmath>
|
||||
|
||||
|
||||
namespace Math
|
||||
{
|
||||
namespace Convert
|
||||
{
|
||||
extern const unsigned short m_FastHeToBi[0x100];
|
||||
|
||||
// SPX, IPX <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>Լ<EFBFBD>
|
||||
inline unsigned char BiToHe(char cBin);
|
||||
inline void AcToHe(char *szDst, char *szSrc, int iCount);
|
||||
|
||||
// String<6E><67> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD>(String<6E><67> 0x<30><78> <20><><EFBFBD><EFBFBD> Hex string<6E>̴<EFBFBD>.)
|
||||
inline BYTE StrToHex08(const char *szSrc);
|
||||
inline WORD StrToHex16(const char *szSrc);
|
||||
inline DWORD StrToHex32(const char *szSrc);
|
||||
inline DWORD64 StrToHex64(const char *szSrc);
|
||||
|
||||
// String<6E><67> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD>(0x<30><78> <20>ٴ<EFBFBD><D9B4><EFBFBD>, <20><><EFBFBD><EFBFBD> <20>ʴ<EFBFBD><CAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٲ<EFBFBD> <20><> <20>ִ<EFBFBD>)
|
||||
inline BYTE Atoc(char *szSrc);
|
||||
inline WORD Atos(char *szSrc);
|
||||
inline DWORD Atoi(char *szSrc);
|
||||
inline DWORD64 Atol64(char *szSrc);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> Hex String<6E><67><EFBFBD><EFBFBD> <20>ٲ<EFBFBD>
|
||||
inline void Hex08ToStr(char *szDest, BYTE hex);
|
||||
inline void Hex16ToStr(char *szDest, WORD hex);
|
||||
inline void Hex32ToStr(char *szDest, DWORD hex);
|
||||
inline void Hex64ToStr(char *szDest, DWORD64 hex);
|
||||
};
|
||||
|
||||
namespace Random
|
||||
{
|
||||
// <20><><EFBFBD>ϰ<EFBFBD><CFB0><EFBFBD> 0 ~ nExtent - 1<><31> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>.
|
||||
unsigned long ComplexRandom(int nExtent); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
};
|
||||
|
||||
namespace HashFunc
|
||||
{
|
||||
// -------------------------------------------------------------------------------------------------
|
||||
// String-to-Hash <20>Լ<EFBFBD><D4BC><EFBFBD> : http://www.cs.yorku.ca/~oz/hash.html <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
inline unsigned long djb2Hash(const unsigned char *str); // first reported by dan bernstein
|
||||
inline unsigned long sdbmHash(const unsigned char *str); // this is one of the algorithms used in berkeley db
|
||||
inline unsigned long looseHash(const unsigned char *str); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ؽ<EFBFBD>. <20>׳<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
};
|
||||
};
|
||||
|
||||
#include "Convert.inl"
|
||||
|
||||
|
||||
|
||||
inline unsigned long Math::HashFunc::djb2Hash(const unsigned char *str)
|
||||
{
|
||||
unsigned long hash = 5381;
|
||||
int c;
|
||||
|
||||
while (c = *str++) { hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ }
|
||||
return hash;
|
||||
}
|
||||
|
||||
|
||||
inline unsigned long Math::HashFunc::sdbmHash(const unsigned char *str)
|
||||
{
|
||||
unsigned long hash = 0;
|
||||
int c;
|
||||
|
||||
while (c = *str++) { hash = c + (hash << 6) + (hash << 16) - hash; }
|
||||
return hash;
|
||||
}
|
||||
|
||||
inline unsigned long Math::HashFunc::looseHash(const unsigned char *str)
|
||||
{
|
||||
unsigned int hash = 0;
|
||||
int c;
|
||||
|
||||
while (c = *str++) { hash += c; }
|
||||
return hash;
|
||||
}
|
||||
|
||||
|
||||
#endif // !defined(AFX_FASTMATH_H__ED69578B_18C1_42EA_9C5E_888DC38101C2__INCLUDED_)
|
||||
225
GameTools/GLOBALSCRIPT/Utility/Resource/EnsureCleanup.h
Normal file
225
GameTools/GLOBALSCRIPT/Utility/Resource/EnsureCleanup.h
Normal file
@@ -0,0 +1,225 @@
|
||||
/******************************************************************************
|
||||
Module: EnsureCleanup.h
|
||||
Notices: Copyright (c) 2000 Jeffrey Richter
|
||||
Purpose: These classes ensure object cleanup when an object goes out of scope.
|
||||
See Appendix B.
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef _ENSURE_CLEAN_UP_BY_JEFFERY_RICHTER
|
||||
#define _ENSURE_CLEAN_UP_BY_JEFFERY_RICHTER
|
||||
|
||||
#pragma once // Include this header file once per compilation unit
|
||||
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
|
||||
// Data type representing the address of the object's cleanup function.
|
||||
// I used UINT_PTR so that this class works properly in 64-bit Windows.
|
||||
typedef VOID (WINAPI* PFNENSURECLEANUP)(UINT_PTR);
|
||||
|
||||
|
||||
|
||||
// Each template instantiation requires a data type, address of cleanup
|
||||
// function, and a value that indicates an invalid value.
|
||||
template<class TYPE, PFNENSURECLEANUP pfn, UINT_PTR tInvalid = NULL>
|
||||
class CEnsureCleanup
|
||||
{
|
||||
public:
|
||||
|
||||
// Default constructor assumes an invalid value (nothing to cleanup)
|
||||
CEnsureCleanup() { m_t = tInvalid; }
|
||||
|
||||
// This constructor sets the value to the specified value
|
||||
CEnsureCleanup(TYPE t) : m_t((UINT_PTR) t) { }
|
||||
|
||||
// The destructor performs the cleanup.
|
||||
~CEnsureCleanup() { Cleanup(); }
|
||||
|
||||
// Helper methods to tell if the value represents a valid object or not..
|
||||
BOOL IsValid() { return(m_t != tInvalid); }
|
||||
BOOL IsInvalid() { return(!IsValid()); }
|
||||
|
||||
// Re-assigning the object forces the current object to be cleaned-up.
|
||||
TYPE operator=(TYPE t)
|
||||
{
|
||||
Cleanup();
|
||||
m_t = (UINT_PTR) t;
|
||||
return(*this);
|
||||
}
|
||||
|
||||
// Returns the value (supports both 32-bit and 64-bit Windows).
|
||||
operator TYPE()
|
||||
{
|
||||
// If TYPE is a 32-bit value, cast m_t to 32-bit TYPE
|
||||
// If TYPE is a 64-bit value, case m_t to 64-bit TYPE
|
||||
return((sizeof(TYPE) == 4) ? (TYPE) PtrToUint(m_t) : (TYPE) m_t);
|
||||
}
|
||||
|
||||
// Cleanup the object if the value represents a valid object
|
||||
void Cleanup()
|
||||
{
|
||||
if (IsValid())
|
||||
{
|
||||
// In 64-bit Windows, all parameters are 64-bits,
|
||||
// so no casting is required
|
||||
pfn(m_t); // Close the object.
|
||||
m_t = tInvalid; // We no longer represent a valid object.
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
UINT_PTR m_t; // The member representing the object
|
||||
};
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
// Macros to make it easier to declare instances of the template
|
||||
// class for specific data types.
|
||||
|
||||
#define MakeCleanupClass(className, tData, pfnCleanup) \
|
||||
typedef CEnsureCleanup<tData, (PFNENSURECLEANUP) pfnCleanup> className;
|
||||
|
||||
#define MakeCleanupClassX(className, tData, pfnCleanup, tInvalid) \
|
||||
typedef CEnsureCleanup<tData, (PFNENSURECLEANUP) pfnCleanup, \
|
||||
(INT_PTR) tInvalid> className;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
// Instances of the template C++ class for common data types.
|
||||
MakeCleanupClass(CEnsureCloseHandle, HANDLE, CloseHandle);
|
||||
MakeCleanupClassX(CEnsureCloseFile, HANDLE, CloseHandle, INVALID_HANDLE_VALUE);
|
||||
MakeCleanupClass(CEnsureLocalFree, HLOCAL, LocalFree);
|
||||
MakeCleanupClass(CEnsureGlobalFree, HGLOBAL, GlobalFree);
|
||||
MakeCleanupClass(CEnsureRegCloseKey, HKEY, RegCloseKey);
|
||||
MakeCleanupClass(CEnsureCloseServiceHandle, SC_HANDLE, CloseServiceHandle);
|
||||
MakeCleanupClass(CEnsureCloseWindowStation, HWINSTA, CloseWindowStation);
|
||||
MakeCleanupClass(CEnsureCloseDesktop, HDESK, CloseDesktop);
|
||||
MakeCleanupClass(CEnsureUnmapViewOfFile, PVOID, UnmapViewOfFile);
|
||||
MakeCleanupClass(CEnsureFreeLibrary, HMODULE, FreeLibrary);
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
// Special class for releasing a reserved region.
|
||||
// Special class is required because VirtualFree requires 3 parameters
|
||||
class CEnsureReleaseRegion
|
||||
{
|
||||
public:
|
||||
CEnsureReleaseRegion(PVOID pv = NULL) : m_pv(pv) { }
|
||||
~CEnsureReleaseRegion() { Cleanup(); }
|
||||
|
||||
PVOID operator=(PVOID pv)
|
||||
{
|
||||
Cleanup();
|
||||
m_pv = pv;
|
||||
return(m_pv);
|
||||
}
|
||||
|
||||
operator PVOID() { return(m_pv); }
|
||||
void Cleanup()
|
||||
{
|
||||
if (m_pv != NULL)
|
||||
{
|
||||
VirtualFree(m_pv, 0, MEM_RELEASE);
|
||||
m_pv = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
PVOID m_pv;
|
||||
};
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
// Special class for freeing a block from a heap
|
||||
// Special class is required because HeapFree requires 3 parameters
|
||||
class CEnsureHeapFree
|
||||
{
|
||||
public:
|
||||
CEnsureHeapFree(PVOID pv = NULL, HANDLE hHeap = GetProcessHeap())
|
||||
: m_pv(pv), m_hHeap(hHeap) { }
|
||||
|
||||
~CEnsureHeapFree() { Cleanup(); }
|
||||
|
||||
PVOID operator=(PVOID pv)
|
||||
{
|
||||
Cleanup();
|
||||
m_pv = pv;
|
||||
return(m_pv);
|
||||
}
|
||||
|
||||
operator PVOID() { return(m_pv); }
|
||||
void Cleanup()
|
||||
{
|
||||
if (m_pv != NULL)
|
||||
{
|
||||
HeapFree(m_hHeap, 0, m_pv);
|
||||
m_pv = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
HANDLE m_hHeap;
|
||||
PVOID m_pv;
|
||||
};
|
||||
|
||||
|
||||
template<typename T>
|
||||
class CEnsureDelete
|
||||
{
|
||||
public:
|
||||
CEnsureDelete(T* ptr) : m_ptr(ptr) { }
|
||||
~CEnsureDelete() { if(NULL != m_ptr) { delete m_ptr; } }
|
||||
private:
|
||||
|
||||
// <20><><EFBFBD>縦 <20><> <20><> <20><><EFBFBD><EFBFBD> <20><>.
|
||||
CEnsureDelete& operator =(const CEnsureDelete& ensureDelete);
|
||||
CEnsureDelete(const CEnsureDelete& ensureDelete);
|
||||
|
||||
T* m_ptr;
|
||||
};
|
||||
|
||||
|
||||
template<typename T>
|
||||
class CEnsureDeleteArray
|
||||
{
|
||||
public:
|
||||
CEnsureDeleteArray(T* ptrArray) : m_ptrArray(ptrArray) { }
|
||||
~CEnsureDeleteArray() { if(NULL != m_ptrArray) { delete [] m_ptrArray; } }
|
||||
private:
|
||||
|
||||
// <20><><EFBFBD>縦 <20><> <20><> <20><><EFBFBD><EFBFBD> <20><>.
|
||||
CEnsureDeleteArray& operator =(const CEnsureDeleteArray& ensureDeleteArray);
|
||||
CEnsureDeleteArray(const CEnsureDeleteArray& ensureDeleteArray);
|
||||
|
||||
T* m_ptrArray;
|
||||
};
|
||||
|
||||
|
||||
template<typename T>
|
||||
class CEnsureRelease
|
||||
{
|
||||
public:
|
||||
|
||||
CEnsureRelease(T& t) : m_t(&t) { }
|
||||
CEnsureRelease(T* t) : m_t(t) { }
|
||||
~CEnsureRelease() { if(NULL != m_t) { m_t->Release(); } }
|
||||
|
||||
private:
|
||||
|
||||
// <20><><EFBFBD>縦 <20><> <20><> <20><><EFBFBD><EFBFBD> <20><>.
|
||||
CEnsureRelease& operator =(const CEnsureRelease& ensureRelease);
|
||||
CEnsureRelease(const CEnsureRelease& ensureRelease);
|
||||
|
||||
T* m_t;
|
||||
};
|
||||
|
||||
#endif
|
||||
139
GameTools/GLOBALSCRIPT/Utility/TokenlizedFile.cpp
Normal file
139
GameTools/GLOBALSCRIPT/Utility/TokenlizedFile.cpp
Normal file
@@ -0,0 +1,139 @@
|
||||
#include "stdafx.h"
|
||||
#include "TokenlizedFile.h"
|
||||
|
||||
#include <Utility/Math/Math.h>
|
||||
|
||||
inline std::string& Trim(std::string& str)
|
||||
{
|
||||
const size_t nBeginPos = str.find_first_not_of(" \t\r\n");
|
||||
if (nBeginPos != std::string::npos) { str.erase(str.begin(), str.begin() + nBeginPos); }
|
||||
|
||||
const size_t nEndPos = str.find_last_not_of(" \t\r\n");
|
||||
if (nEndPos != std::string::npos && nEndPos != str.size()) { str.erase(str.begin() + nEndPos + 1, str.end()); }
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
CTokenlizedFile::ColumnInfo::ColumnInfo(const char* szColumnName)
|
||||
: m_dwHashKey(Math::HashFunc::sdbmHash(reinterpret_cast<const unsigned char*>(szColumnName))),
|
||||
m_szColumnName(szColumnName)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
CTokenlizedFile::ColumnInfo::ColumnInfo(std::string& szColumnName)
|
||||
: m_dwHashKey(Math::HashFunc::sdbmHash(reinterpret_cast<const unsigned char*>(szColumnName.c_str()))),
|
||||
m_szColumnName(szColumnName)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
CTokenlizedFile::CTokenlizedFile(const char* lpszDelimiter)
|
||||
: m_lpFile(NULL), m_nLine(0)
|
||||
{
|
||||
strncpy(m_szDelimiter, lpszDelimiter, MAX_DELIMITER_NUM - 1);
|
||||
m_szDelimiter[MAX_DELIMITER_NUM - 1] = '\0';
|
||||
|
||||
m_ColumnInfo.reserve(DEFAULT_COLUMN_NUM);
|
||||
m_ColumnValues.reserve(DEFAULT_COLUMN_NUM);
|
||||
}
|
||||
|
||||
CTokenlizedFile::~CTokenlizedFile()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CTokenlizedFile::Close()
|
||||
{
|
||||
if(NULL != m_lpFile)
|
||||
{
|
||||
fclose(m_lpFile);
|
||||
}
|
||||
|
||||
m_ColumnInfo.clear();
|
||||
m_ColumnValues.clear();
|
||||
}
|
||||
|
||||
|
||||
bool CTokenlizedFile::Open(const char* szFilename, const char* szOpenMode)
|
||||
{
|
||||
Close();
|
||||
|
||||
m_nLine = 0;
|
||||
m_lpFile = fopen(szFilename, szOpenMode);
|
||||
return (NULL != m_lpFile) ? true : false;
|
||||
}
|
||||
|
||||
|
||||
bool CTokenlizedFile::ReadColumn()
|
||||
{
|
||||
char szBuffer[MAX_LINE_BUFFER];
|
||||
m_ColumnInfo.clear();
|
||||
|
||||
if(NULL != fgets(szBuffer, MAX_LINE_BUFFER, m_lpFile))
|
||||
{
|
||||
char* szToken = strtok(szBuffer, m_szDelimiter);
|
||||
|
||||
do
|
||||
{
|
||||
m_ColumnInfo.push_back(ColumnInfo(Trim(std::string(szToken))));
|
||||
|
||||
} while(NULL != (szToken = strtok(NULL, m_szDelimiter)));
|
||||
|
||||
|
||||
++m_nLine;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool CTokenlizedFile::ReadLine()
|
||||
{
|
||||
char szBuffer[MAX_LINE_BUFFER];
|
||||
m_ColumnValues.clear();
|
||||
|
||||
if(NULL != fgets(szBuffer, MAX_LINE_BUFFER, m_lpFile))
|
||||
{
|
||||
char* szToken = strtok(szBuffer, m_szDelimiter);
|
||||
|
||||
do
|
||||
{
|
||||
m_ColumnValues.push_back(Trim(std::string(szToken)));
|
||||
|
||||
} while(NULL != (szToken = strtok(NULL, m_szDelimiter)));
|
||||
|
||||
++m_nLine;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
const char* CTokenlizedFile::GetStringValue(const char* szColumnName)
|
||||
{
|
||||
DWORD dwHashkey = Math::HashFunc::sdbmHash(reinterpret_cast<const unsigned char*>(szColumnName));
|
||||
|
||||
for(ColumnArray::iterator itr = m_ColumnInfo.begin();
|
||||
itr != m_ColumnInfo.end(); ++itr)
|
||||
{
|
||||
const ColumnInfo& columnInfo = *itr;
|
||||
|
||||
if(dwHashkey == columnInfo.m_dwHashKey)
|
||||
{
|
||||
if(0 == strcmp(szColumnName, columnInfo.m_szColumnName.c_str()))
|
||||
{
|
||||
size_t nDistance = itr - m_ColumnInfo.begin();
|
||||
return GetStringValue(nDistance);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
74
GameTools/GLOBALSCRIPT/Utility/TokenlizedFile.h
Normal file
74
GameTools/GLOBALSCRIPT/Utility/TokenlizedFile.h
Normal file
@@ -0,0 +1,74 @@
|
||||
#ifndef _DELIMITED_FILE_H_
|
||||
#define _DELIMITED_FILE_H_
|
||||
|
||||
#include <cstdio>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class CTokenlizedFile
|
||||
{
|
||||
public:
|
||||
|
||||
CTokenlizedFile(const char* lpszDelimiter = "\t");
|
||||
~CTokenlizedFile();
|
||||
|
||||
enum
|
||||
{
|
||||
MAX_DELIMITER_NUM = 16,
|
||||
MAX_LINE_BUFFER = 16384,
|
||||
DEFAULT_COLUMN_NUM = 64
|
||||
};
|
||||
|
||||
bool Open(const char* szFilename, const char* szOpenMode = "rt");
|
||||
void Close();
|
||||
|
||||
bool ReadColumn(); // <20>÷<EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20>д´<D0B4>.
|
||||
bool ReadLine(); // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>д´<D0B4>.
|
||||
|
||||
bool IsEOF() { return (NULL != m_lpFile) ? (0 != feof(m_lpFile)) : false; }
|
||||
|
||||
size_t GetColumnNum() { return m_ColumnInfo.size(); }
|
||||
size_t GetCurrentLine() { return m_nLine; }
|
||||
size_t GetValueNum() { return m_ColumnValues.size(); }
|
||||
|
||||
const char* GetColumnName(size_t nIndex);
|
||||
const char* GetStringValue(size_t nIndex);
|
||||
const char* GetStringValue(const char* szColumnName);
|
||||
|
||||
private:
|
||||
|
||||
struct ColumnInfo
|
||||
{
|
||||
unsigned long m_dwHashKey;
|
||||
std::string m_szColumnName;
|
||||
|
||||
ColumnInfo() : m_dwHashKey(0) { m_szColumnName.assign(""); }
|
||||
ColumnInfo(const char* szColumnName);
|
||||
ColumnInfo(std::string& szColumnName);
|
||||
};
|
||||
|
||||
FILE* m_lpFile;
|
||||
size_t m_nLine;
|
||||
char m_szDelimiter[MAX_DELIMITER_NUM];
|
||||
|
||||
typedef std::vector<ColumnInfo> ColumnArray;
|
||||
typedef std::vector<std::string> ValueArray;
|
||||
|
||||
ColumnArray m_ColumnInfo;
|
||||
ValueArray m_ColumnValues;
|
||||
};
|
||||
|
||||
|
||||
inline const char* CTokenlizedFile::GetColumnName(size_t nIndex)
|
||||
{
|
||||
return (nIndex < m_ColumnInfo.size()) ?
|
||||
m_ColumnInfo[nIndex].m_szColumnName.c_str() : NULL;
|
||||
}
|
||||
|
||||
inline const char* CTokenlizedFile::GetStringValue(size_t nIndex)
|
||||
{
|
||||
return (nIndex < m_ColumnValues.size()) ?
|
||||
m_ColumnValues[nIndex].c_str() : NULL;
|
||||
}
|
||||
|
||||
#endif
|
||||
18
GameTools/GLOBALSCRIPT/Utility/TypeArray.cpp
Normal file
18
GameTools/GLOBALSCRIPT/Utility/TypeArray.cpp
Normal file
@@ -0,0 +1,18 @@
|
||||
#include "stdafx.h"
|
||||
#include "TypeArray.h"
|
||||
|
||||
#include <Log/ServerLog.h>
|
||||
|
||||
bool CTypeName::Test(const CTypeName* lpTypeArray, int nArrayNum, const char* lpTypeArrayName)
|
||||
{
|
||||
for(int nCount = 0; nCount < nArrayNum; ++nCount)
|
||||
{
|
||||
if(lpTypeArray[nCount].m_nType != nCount)
|
||||
{
|
||||
ERRLOG2(g_Log, "<EFBFBD>˻<EFBFBD><EFBFBD><EFBFBD> Ÿ<>Ե<EFBFBD><D4B5><EFBFBD> <20>迭 <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>."
|
||||
"Ÿ<EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> %s<>̰<EFBFBD>, <20><><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> Ŀ<>ǵ<EFBFBD> <20><>ȣ<EFBFBD><C8A3> %d<>Դϴ<D4B4>.", lpTypeArrayName, nCount);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
22
GameTools/GLOBALSCRIPT/Utility/TypeArray.h
Normal file
22
GameTools/GLOBALSCRIPT/Utility/TypeArray.h
Normal file
@@ -0,0 +1,22 @@
|
||||
#ifndef _TYPE_ARRAY_H_
|
||||
#define _TYPE_ARRAY_H_
|
||||
|
||||
class CTypeName
|
||||
{
|
||||
public:
|
||||
|
||||
CTypeName() : m_nType(0), m_lpszName(0) { }
|
||||
CTypeName(unsigned char nType, char* lpszName) : m_nType(nType), m_lpszName(lpszName) { }
|
||||
|
||||
unsigned char GetTypeValue() const { return m_nType; }
|
||||
const char* GetTypeName() const { return m_lpszName; }
|
||||
|
||||
static bool Test(const CTypeName* lpTypeArray, int nArrayNum, const char* lpTypeArrayName);
|
||||
|
||||
private:
|
||||
|
||||
unsigned char m_nType;
|
||||
char* m_lpszName;
|
||||
};
|
||||
|
||||
#endif
|
||||
8
GameTools/GLOBALSCRIPT/stdafx.cpp
Normal file
8
GameTools/GLOBALSCRIPT/stdafx.cpp
Normal file
@@ -0,0 +1,8 @@
|
||||
// stdafx.cpp : ǥ<><C7A5> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20>ҽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
||||
// GlobalScript.pch<63><68> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˴ϴ<CBB4>.
|
||||
// stdafx.obj<62><6A><EFBFBD><EFBFBD> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ե˴ϴ<CBB4>.
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
// TODO: <20>ʿ<EFBFBD><CABF><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> STDAFX.H<><48><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
11
GameTools/GLOBALSCRIPT/stdafx.h
Normal file
11
GameTools/GLOBALSCRIPT/stdafx.h
Normal file
@@ -0,0 +1,11 @@
|
||||
// stdafx.h : <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>
|
||||
// ǥ<><C7A5> <20>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Windows <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
|
||||
// TODO: <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E2BFA1> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
#pragma warning(disable:4786)
|
||||
Reference in New Issue
Block a user