Files
Sun1602/ProgramCommon/BattleGroundInfoParser.h
2022-10-26 12:25:11 +08:00

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_