Files
2026-06-01 12:46:52 +02:00

101 lines
3.8 KiB
C

#ifndef _BattleArenaBase_h_
#define _BattleArenaBase_h_
#include <mmo/ArType.h>
#pragma pack(push, 1)
// 배틀 아레나 경기장 정보 보관용
enum _BATTLE_ARENA_TYPE
{
BAT_CLASSIC = 0,
BAT_BINGO = 1,
BAT_SLAUGHTER = 2,
};
// 아레나 유저 등급 구분
enum _BATTLE_GRADE
{
BG_INVALID = -1,
BG_ROOKIE = 0,
BG_GROW = 1,
BG_MAJOR = 2,
MAX_BATTLE_GRADE,
};
// 아레나 이탈 유형 코드(BattleArenaBase에서 사용하지 않고 BattleArenaManager나 패킷 방송 시 사용하지만 include 문제를 피하기 위해 여기에 둠)
enum _ARENA_LEAVE_TYPE
{
ALT_UNKNOWN = 0,
ALT_USER_REQUEST = 1, // 대기열/경기 이탈 두 경우 모두 사용됨
ALT_GAME_OVER = 2, // 경기 이탈 시에만 사용됨
ALT_PARTICIPATING_SPECIAL_PARTY = 3, // 대기열 이탈 시에만 사용됨
ALT_FAILED_TO_JOIN_BATTLE = 4, // 대기열 이탈 시에만 사용됨
ALT_FAILED_TO_START_BATTLE = 5, // 대기열 이탈 시에만 사용됨(경기 시작 실패)
ALT_DISCONNECT = 6, // 대기열/경기 이탈 두 경우 모두 사용됨(대기열에 있다가 접속 끊긴 경우, 경기 중에 오프라인 된 후에 제한 시간 경과로 이탈되는 경우)
ALT_ABSENT = 7, // 경기 중에 잠수 신고를 통해 경기에서 이탈된 경우
ALT_LEAVE_ARENA = 8, // 아레나에서 워프를 통해 다른 지역으로 이탈함으로 인해 경기에서 이탈된 경우(워프 자체가 근본적으로 차단되어야 함)
ALT_ENTER_INSTANCE_DUNGEON = 9, // 인스턴스 던전에 입장하기 위해 대기열에서 이탈되는 경우
ALT_ENTER_DEATHMATCH = 10, // 데스매치 존에 입장하기 위해 대기열에서 이탈되는 경우
ALT_ENTER_HUNTAHOLIC = 11, // 헌터홀릭 로비(?)에 입장하기 위해 대기열에서 이탈되는 경우
ALT_EXERCISE_PARTY_KICK = 12, // 연습 경기 파티 구성 중 추방에 의해 이탈되는 경우
};
// 아레나 경기 종료 타입
enum _ARENA_END_TYPE
{
AET_UNKNOWN = 0,
AET_ONE_TEAM_NO_MEMBER = 1, // 한 팀의 멤버가 모두 이탈하여 경기 종료(종료 유형이지만 보상이 없다는 내용도 포함)
AET_MAX_SCORE_REACHED = 2, // 목표 점수 도달로 경기 종료
AET_TIME_OVER = 3, // 시간 초과로 경기 종료
};
// 아레나 경기 보상 타입
enum _ARENA_REWARD_TYPE
{
ART_UNKNOWN = 0,
ART_FULL_REWARD = 1, // 값 없음(지정 안하면 이거)
ART_HALF_REWARD_BY_FEW_MEMBER = 2, // 한 팀의 멤버 수가 팀 최대 인원의 50% 미만이어서 보상이 절반으로 감소
ART_NO_REWARD_BY_NO_MEMBER = 3, // 한 팀의 멤버가 모두 이탈해서 경기가 중단되어 보상 없음
ART_NO_REWARD_BY_MIN_TIME = 4, // 최소 경기 시간 미달로 인해 보상 없음
ART_NO_REWARD_BY_EXERCISE = 5, // 연습 경기는 보상 없음
};
// 아레나 경기 내부의 프랍의 상태(슬래터 프랍 또는 빙고 프랍 9개)
enum _PROP_STATE
{
PS_NOT_EXIST = 0,
PS_NEUTRAL = 1,
PS_OWNED_BY_TEAM_0 = 2,
PS_OWNED_BY_TEAM_1 = 3,
};
// 서버/클라 공용 BattleArenaBase
struct BattleArenaBase
{
int nID;
_ARENA_LEAVE_TYPE eType; /// _BATTLE_ARENA_TYPE
char nTeamCount;
char nMinMember; // 경기를 시작하기 위한 최소 인원
char nMaxMember; // 경기에 참여할 수 있는 최대 인원
int nObjectivePoint; // 경기 승리를 위해 먼저 도달해야할 목표 점수
AR_TIME nMinPlayDurationForReward; // 경기 종료 시 보상을 정상적으로 받기 위해 최소한으로 플레이해야 하는 시간
unsigned int nArenaRegionLeft;
unsigned int nArenaRegionTop;
unsigned int nArenaRegionRight;
unsigned int nArenaRegionBottom;
AR_TIME nCountDown;
AR_TIME nBattleDuration;
};
#pragma pack(pop)
#endif