258 lines
7.6 KiB
C++
258 lines
7.6 KiB
C++
#ifndef PROGRAMCOMMON_BATTLEGROUNDINFOPARSER_H_
|
|
#define PROGRAMCOMMON_BATTLEGROUNDINFOPARSER_H_
|
|
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif
|
|
|
|
//_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
|
|
|
|
#include <SolarHashTable.h>
|
|
#include <Singleton.h>
|
|
#include <SolarFileReader.h>
|
|
#include <ScriptCode.IParser.h>
|
|
|
|
#include "ReliableRatioRandomizer.h"
|
|
|
|
struct BattleGroundInfo
|
|
{
|
|
enum { MAX_ITEM_LIMIT_COUNT = 10 };
|
|
|
|
// 변수 명, 변수 형은 용도/편의에 따라 수정 필요함
|
|
// ! 맵 타입
|
|
BYTE index;
|
|
// ! 맵 코드
|
|
DWORD map_code;
|
|
// ! 제한 레벨
|
|
DWORD limit_level;
|
|
// ! 장비평점 제한
|
|
DWORD equipment_rating;
|
|
// ! 최대 인원
|
|
BYTE team_max;
|
|
// ! 파티신청제한인원
|
|
BYTE max_party;
|
|
// ! 출발대기시간(초)
|
|
DWORD start_time;
|
|
// ! 입장대기시간(초)
|
|
DWORD entry_time;
|
|
// ! 준비버프상태코드
|
|
DWORD prepare_condition_code;
|
|
// ! 준비시간(초)
|
|
DWORD prepare_time;
|
|
// ! 게이트오픈트리거ID
|
|
DWORD gate_trigger_id;
|
|
// ! 목표점수
|
|
DWORD goal_score;
|
|
// ! 각인시간(초)
|
|
DWORD sealing_time;
|
|
// ! 점령대기시간(초)
|
|
DWORD conquer_wait_time;
|
|
// ! 자원점수
|
|
DWORD gather_point;
|
|
// ! 자원습득주기(초)
|
|
DWORD gather_period;
|
|
#ifdef _NA_006599_20130401_BATTLEGROUND_PKPOINT
|
|
// ! 적 처치 시 추가 획득 점수값
|
|
BYTE pk_point;
|
|
#endif
|
|
// ! 사망유지시간(초)
|
|
DWORD dead_time;
|
|
// ! 부활주기(초)
|
|
DWORD resurrection_period;
|
|
// ! 부활대기상태코드
|
|
DWORD resurrection_condition_code;
|
|
// ! 강철모드시간(초)
|
|
DWORD iron_mode;
|
|
// ! 어뷰징 포인트
|
|
DWORD abusing_point;
|
|
// ! 승리팀보상코드
|
|
DWORD win_reward_code;
|
|
// ! 기본상코드
|
|
DWORD base_reward_code;
|
|
// ! 패널티보상코드
|
|
DWORD penalty_reward_code;
|
|
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
|
|
// ! 매칭실패 보상코드
|
|
DWORD mismatch_reward_code;
|
|
// ! 기본 자원 점수
|
|
BYTE basic_point;
|
|
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
|
|
// ! 아이템타입제한01~10
|
|
DWORD limit_item[MAX_ITEM_LIMIT_COUNT];
|
|
// ! 무효처리시간(초)
|
|
DWORD draw_time;
|
|
// ! 재입장패널티상태
|
|
DWORD re_enter_condiion;
|
|
// ! 재입장패널티시간(초)
|
|
DWORD re_enter_condition_period;
|
|
// ! 이탈패널티상태
|
|
DWORD exit_condition;
|
|
// ! 이탈패널티시간(초)
|
|
DWORD exit_period;
|
|
|
|
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
|
|
// 최소 인원
|
|
BYTE team_min;
|
|
#else
|
|
// ! 최대매칭대기시간(초)
|
|
DWORD max_match_time;
|
|
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
|
|
|
|
//------------------------------------------------------------------------------
|
|
BattleGroundInfo()
|
|
{
|
|
index = 0;
|
|
map_code = 0;
|
|
limit_level = 0;
|
|
equipment_rating = 0;
|
|
team_max = 0;
|
|
max_party = 0;
|
|
start_time = 0;
|
|
entry_time = 0;
|
|
prepare_condition_code = 0;
|
|
prepare_time = 0;
|
|
gate_trigger_id = 0;
|
|
goal_score = 0;
|
|
sealing_time = 0;
|
|
conquer_wait_time = 0;
|
|
gather_point = 0;
|
|
gather_period = 0;
|
|
#ifdef _NA_006599_20130401_BATTLEGROUND_PKPOINT
|
|
pk_point = 0;
|
|
#endif
|
|
dead_time = 0;
|
|
resurrection_period = 0;
|
|
resurrection_condition_code = 0;
|
|
iron_mode = 0;
|
|
abusing_point = 0;
|
|
win_reward_code = 0;
|
|
base_reward_code = 0;
|
|
penalty_reward_code = 0;
|
|
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
|
|
mismatch_reward_code = 0;
|
|
basic_point = 0;
|
|
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
|
|
ZeroMemory(limit_item, (sizeof(limit_item[0])*MAX_ITEM_LIMIT_COUNT));
|
|
draw_time = 0;
|
|
re_enter_condiion = 0;
|
|
re_enter_condition_period = 0;
|
|
exit_condition = 0;
|
|
exit_period = 0;
|
|
|
|
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
|
|
team_min = 0;
|
|
#else
|
|
max_match_time = 0;
|
|
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
|
|
}
|
|
};
|
|
|
|
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
|
|
struct BattleGroundCostumeInfo
|
|
{
|
|
|
|
BYTE index;
|
|
BYTE class_code; // [BClassCode] 클래스 코드
|
|
BYTE enchant; // [Enchant] 인챈트 효과
|
|
|
|
WORD costume_code1; // [NpcCostumeItem] 코스튬 아이템 코드(남자)
|
|
WORD costume_code2; // [NpcCostumeItem] 코스튬 아이템 코드(여자)
|
|
WORD armor_item_code; // [ArmorImage] 갑옷 아이템 코드
|
|
WORD helm_item_code; // [HelmImage] 헬멧 아이템 코드
|
|
WORD pants_item_code; // [PantsImage] 바지 아이템 코드
|
|
WORD boots_item_code; // [BootImage] 부츠 아이템 코드
|
|
WORD gloves_item_code; // [GloveImage] 장갑 아이템 코드
|
|
BYTE probability; // [Probability] 확률
|
|
|
|
BattleGroundCostumeInfo() : index(0), class_code(0), enchant(0),
|
|
costume_code1(0), costume_code2(0), armor_item_code(0), helm_item_code(0), pants_item_code(0), boots_item_code(0),
|
|
gloves_item_code(0), probability(0)
|
|
{ }
|
|
};
|
|
|
|
struct BattleGroundWeaponInfo
|
|
{
|
|
BYTE index;
|
|
BYTE class_code; // [BClassCode] 클래스 코드
|
|
BYTE enchant; // [Enchant] 인챈트 효과
|
|
|
|
eWEAPONTYPE weapon_type_A; // [WeaponTypeA] 무기타입 A
|
|
WORD weapon_item_code_A; // [WeaponImage] 무기 아이템 코드 A
|
|
|
|
eWEAPONTYPE weapon_type_B; // [WeaponTypeA] 무기타입 B
|
|
WORD weapon_item_code_B; // [WeaponImage] 무기 아이템 코드 B
|
|
|
|
BYTE probability; // [Probablity] 확률
|
|
|
|
BattleGroundWeaponInfo() : index(0), class_code(0), enchant(0),
|
|
weapon_type_A(eWEAPONTYPE_INVALID), weapon_item_code_A(0),
|
|
weapon_type_B(eWEAPONTYPE_INVALID), weapon_item_code_B(0), probability(0)
|
|
{ }
|
|
};
|
|
|
|
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
|
|
|
|
class BattleGroundInfoParser : public util::Singleton<BattleGroundInfoParser>, public IParser
|
|
{
|
|
public:
|
|
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
|
|
typedef std::list<BattleGroundCostumeInfo> BattleCostumeList;
|
|
typedef std::map<BYTE, BattleCostumeList*> BattleCostumeInfoMap;
|
|
|
|
typedef std::list<BattleGroundWeaponInfo> BattleWeaponList;
|
|
typedef std::map<BYTE, BattleWeaponList*> BattleWeaponInfoMap;
|
|
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
|
|
|
|
typedef STLX_HASH_MAP<DWORD, BattleGroundInfo*> BattleGroundInfo_Hash;
|
|
|
|
BattleGroundInfoParser(void);
|
|
~BattleGroundInfoParser(void);
|
|
|
|
void Init();
|
|
void Init(char* pszPackFileName);
|
|
|
|
virtual void Release();
|
|
virtual BOOL LoadScript(eSCRIPT_CODE ScriptCode, BOOL bReload);
|
|
|
|
BattleGroundInfo_Hash& battlegroundinfo_hash() { return battlegroundinfo_hash_; }
|
|
const BattleGroundInfo* FindData(const MAPCODE map_code) const;
|
|
|
|
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
|
|
SLOTCODE GetRandomBattleCostumeCode();
|
|
|
|
#ifdef _SERVER
|
|
#else
|
|
BattleGroundCostumeInfo* GetBattleGroundCostumeInfo(BYTE costume_index, eCHAR_TYPE class_code);
|
|
BattleGroundWeaponInfo* GetBattleGroundWeaponInfo(BYTE costume_index, eCHAR_TYPE class_code);
|
|
DWORD GetBattleGroundWeaponItemCode(BYTE costume_index, eCHAR_TYPE class_code, DWORD weapon_kind);
|
|
#endif //_SERVER
|
|
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
|
|
|
|
|
|
private:
|
|
BOOL _Load(BOOL bReload);
|
|
void Unload();
|
|
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
|
|
BOOL _LoadCostumeInfo(BOOL _reload);
|
|
BOOL _LoadWeaponInfo(BOOL _reload);
|
|
|
|
VOID _UnloadCostumeInfo();
|
|
VOID _UnloadWeaponInfo();
|
|
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
|
|
VOID _UnloadBattleGroundInfo();
|
|
|
|
BattleGroundInfo_Hash battlegroundinfo_hash_;
|
|
|
|
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
|
|
BattleCostumeInfoMap costumeinfo_map_; // <index, info>
|
|
ReliableRatioRandomizer<255, BYTE, BYTE> costume_randomizer_;
|
|
|
|
BattleWeaponInfoMap weaponinfo_map_; // <index, info>
|
|
ReliableRatioRandomizer<255, BYTE, BYTE> weapon_randomizer_;
|
|
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
|
|
};
|
|
|
|
|
|
#endif //PROGRAMCOMMON_CHAOSZONETREEPARSER_H_
|