게임서버에 사용된 게임 캐릭터 클래스 정보
게임서버에서 가장 중요한 게임캐릭터 클래스로 서버에서 클라이언트의 캐릭터및 서버에서 움직이는 모든 캐릭터를 관리하는 클래스는 다음과 같이 구성되었다.
TGMovable = class(TGObject)
private
protected
FTime : DWORD; // GameObject가 마지막으로 갱신된 시간
FLatency : DWORD; //
FTargetPos : TGPos; // GameObject의 이동할 좌표
FDirection : Extended; // 방향을 사용할 경우 방향 벡터
FHP : Integer; // 이동하는 객체의 HP
FMP : Integer; // 이동 객체의 MP
FMaxHP : Integer;
FMaxMP : Integer;
//이동 하려는 좌표가 충돌 되는지 체크한다. 충돌 되면 True
function CheckIntersect( TX, TY, TZ: Extended ): Boolean; virtual;
procedure UpdateMove; //위치를 업데이트 한다.
이 클래스는 실제 게임서버에서 유저, 몬스터, 포탈, 상점등의 캐릭터를 관리하고 있었고, 필요한 세부적인 자료들도 마찬가지로 가지고 있다.
잠깐 함수가 나오는데 실제 좌표체크시에도 3차원 좌표로 체크하였다.
이 TGMovable은 TGobject를 상속받았는데 그 클래스는 다음과 같아.
TGObject = class(TObject)
protected
FUID : String; // GameObject의 고유 ID
FMDLName : String; // GameObject의 모델명.
FState : Integer; // GameObject의 현재 상태
FPos : TGPos; // GameObject의 현재 좌표
FData : Pointer;
좀더 상위클래스는 TGObject는 기본적인 상태정보만을 가진다..
TGPos = record
X : Extended;
Y : Extended;
Z : Extended;
end;
좌표체계는 처음부터 하늘을 생각해서 3차원으로 구성하였다.
//GameObject의 종류
GOKUNKNOWN = 0;
GOKPLAYER = 1;
GOKMONSTER = 2;
GOKNPC = 3;
GOKBANK = 4;
GOKSTORE = 5;
GOKPORTAL = 6;
GOKITEMBOX = 7;
GOKEFFECT = 8;
GOKFIREBALL = 9;
플레이어 정보부터 은행과 상점정보, 그리고 이펙트정보를 구분하고..
세부적인 공격용 모션들을 구분하고 있었다.
아마도.. 10,11,12.. 이렇게 관련 속성이 늘어나는 구조였다.
후에.. 이 부분이 더 많이 필요하면 다른 구성을 하겠지만.
굳이 그럴필요까지는.. (쿨럭~)
//이동 가능 객체 상태 Movable Object State
MOSSTAND = 0; //서있는 상태
MOSMOVE = 1; //이동하고 있는 상태
MOSATTACK = 2; //공격하고 있는 상태
MOSATTACKED = 3; //공격 받고 있는 상태
MOSSITDOWN = 4; //앉아 있는 상태
MOSDEATH = 5; //죽은 상태
캐릭터의 상태정보이다. 아주 기본적인것들..
////////////////////////////////////////////////////////////////////////////////
// 아이템의 용도 TItemData.Use
////////////////////////////////////////////////////////////////////////////////
IUATTACK = 0; //공격용
IUDEFENCE = 1; //방어용
IUPOTION = 2; //소모품
IUNOITEM = -1;
아이템의 용도를 구분하는 구분값이었다.
공격, 방어, 소모.. 그리고.. 장식용? 하여간.. 그렇게 구분했다.
////////////////////////////////////////////////////////////////////////////////
// 아이템의 계열 TItemData.Cls
////////////////////////////////////////////////////////////////////////////////
IKSHORTSWORD = 0; //단검류 -> 공격 무기 -> 왼쪽손
IKSWORD = 1; //검류
IKSPEAR = 2; //창류
IKAXE = 3; //도끼류
IKBLUNT = 4; //둔기류
IKSTIK = 5; //지팡이류
IKBOW = 6; //활류 -> 공격 무기 -> 왼쪽손
IKCLOTHS = 7; //상의 -> 방어 무기
IKPANTS = 8; //하의
IKSHIELD = 9; //방패
IKGLOVES = 10; //장갑
IKFOOTWEAR = 11; //신발
IKHAT = 12; //투구
IKRING = 13; //반지
IKNECKLACE = 14; //목걸이
IKBRACELET = 15; //팔찌
IKEARCAP = 16; //귀걸이
IKTATOO = 17; //문신 -> 방어 무기
IKPOTION = 18; //포션 -> 소모품
IKBELT = 19; //벨트 -> 방어무기
IKROBE = 20; //로브 -> 방어무기
IKNOITEM = $FF;
기본적인 아이템의 속성구분으로 활용되었다.
////////////////////////////////////////////////////////////////////////////////
// 아이템의 재질 TItemData.Material
////////////////////////////////////////////////////////////////////////////////
IMATWOOD = 0; // 나무
IMATBRONZE = 1; // 구리
IMATSILVER = 2; // 은
IMATGOLD = 3; // 금
IMATCOTTON = 4; // 면(천)
IMATLEATHER = 5; // 가죽
IMATSILK = 6; // 비단(명주)
속성구분을 위한 형태로.. 아이템의 재질을 표현했다.
정확하게 재질간의 상성관계를 두고 싶었다.
////////////////////////////////////////////////////////////////////////////////
// 어빌리티 행위의 종류 TAbility.Act
////////////////////////////////////////////////////////////////////////////////
AACTNORMAL = 0; //일반
AACTHIT = 1; //때리기
AACTSHOOT = 2; //투척
AACTMAGIC = 3; //마법공격
아주 일반적인 '기술'의 기본 속성형태로..
떄리기, 투척, 마법의 3단계 형태로 구분하였다.
////////////////////////////////////////////////////////////////////////////////
// 어빌리티가 영향을 미치는 범위종류 TAbility.RKind
////////////////////////////////////////////////////////////////////////////////
ARKONE = 0; //지정된 한 캐릭만
ARKRANGE = 1; //지정된 캐릭의 주변 캐릭 모두
어빌리티가 영향을 받는 것으로..
특정 캐릭에게만..
혹은.. 메테오 같은 경우나 확산 힐링에 사용할..
주변에 영향을 주는 경우를 고려하였다.
////////////////////////////////////////////////////////////////////////////////
// 어빌리티를 사용할 수 있는 무기의 계열 TAbility.Weapon
////////////////////////////////////////////////////////////////////////////////
AWPALL = 0; //전체 사용가능
AWPSHORTSWORD = 1; //단검 계열만
AWPSWORD = 2; //검 계열만
AWPSPEAR = 3; //창 계열만
AWPAXE = 4; //도끼 계열만
AWPBLUNT = 5; //메이스등 둔기 계열만
AWPSTICK = 6; //지팡이 계열만
AWPBOW = 7; //활 계열만
AWPSHIELD = 8; //방패 계열만
AWPNOBOW = 9; //활 계열만 제외
특정 어빌리티들이 사용 가능한 무기의 계열정보를 지정하였다.
////////////////////////////////////////////////////////////////////////////////
// 어빌리티의 계열 TAbility.AClass
////////////////////////////////////////////////////////////////////////////////
ACLSNORMAL = 0; //일반
ACLSFIRE = 1; //화염계열
ACLSWATER = 2; //물,빙설계열
ACLAIR = 3; //공기,전격계열
ACLEARTH = 4; //대지계열
ACLPOISON = 5; //독계열
ACLDARK = 6; //암흑계열
ACLCALL = 7; //소환계열
마법이나 장착 아이템의 계열정보로 활용되었다.
////////////////////////////////////////////////////////////////////////////////
// 아이템 및 스킬 사용 시 증가되는 STATE의 종류 TAbility.Effect TItemData.IncSTA
////////////////////////////////////////////////////////////////////////////////
IUSTNONE = 0; // 아무것도 하지 않음.
IUSTHPUP = 1; // HP의 증가
IUSTMPUP = 2; // MP의 증가
IUSTMAXHPUP = 3; // MAXHP의 증가
IUSTMAXMPUP = 4; // MAXMP의 증가
IUSTPPUP = 5; // PP의 증가
IUSTSPUP = 6; // SP의 증가
IUSTIPUP = 7; // IP의 증가
IUSTRGNVHPUP = 8; // HP의 Regen 값 증가
IUSTRENVMPUP = 9; // MP의 Regen 값 증가
IUSTRGNTHPUP = 10; // HP의 Regen Time증가
IUSTRGNTMPUP = 11; // MP의 Regen Time증가
IUSTATTACKUP = 12; // 공격력 증가
IUSTDEFENCEUP = 13; // 방어력 증가
IUSTDODGEUP = 14; // 회피율 증가
IUSTPRECISIONUP = 15; // 명중률 증가
IUSTSPEEDUP = 16; // 이동속도 증가
IUSTSPEEDDOWN = 17; // 이동 속도 감소
IUSTIMMOVABLE = 18; // 이동 불능 상태
IUSTHPDOWN = 19; // HP 감소(비율)
IUSTCONTHIT = 20; // 연타 공격(Continuos Hit)
IUSTAROUSE = 21; // 주변 몬스터 도발
IUSTPROXY = 22; // 대신 공격을 받는다.
IUSTEXTINV = 23; // 인벤토리 증가 Extend Inventory;
IUSTIGNORECAST = 24; // 캐스팅의 무시
IUSTPOISON = 25; // 중독 시킴
IUSTMEDIC = 26; // 중독을 치료함
어빌리티에 추가 속성으로 반영될 아이템의 상태정보였다.
////////////////////////////////////////////////////////////////////////////////
// 어빌리티의 사용 대상 Ability Target TAbility.Target
////////////////////////////////////////////////////////////////////////////////
ATRGTOWN = 0; //자신에 대해 서용
ATRGTENEMY = 1; //적에게 사용
ATRGTALL = 2; //적이 아닌 모든이에게 사용
ATRGTPARTY = 3; //파티원에게만 적용
어빌리티가 주는 상대방 영향에 대한 정보
////////////////////////////////////////////////////////////////////////////////
// 직업의종류 TGPlayer.FJob
////////////////////////////////////////////////////////////////////////////////
JOBASKA = 0; //아스카
JOBWARRIOR = 1; //워리어(전사) - 1차 전직
JOBROGUE = 2; //로그(도둑,악당,건달)
JOBMAGICIAN = 3; //매지션(법사)
JOBACOLYTE = 4; //어콜라이트(종자)
JOBPALADIN = 5; //패러딘(성전사) - 2차 전직
JOBGLADIATOR = 6; //글라디에이터(검투사)
JOBFANTOMFIGHTER = 7; //팬텀화이터(싸움의화신)
JOBASSASSIN = 8; //어세신(자객,암살자)
JOBHUNTER = 9; //헌터(사냥꾼)
JOBNIGHTHAWK = 10; //나이트호크(밤도둑)
JOBDRUID = 11; //드루이드(사제,예언자)
JOBWIZARD = 12; //위자드(마법사)
JOBNECROMANCER = 13; //네크로맨서(무당)
JOBSAGE = 14; //세이지(현자)
JOBMONK = 15; //몽크(수도사)
JOBPRIEST = 16; //프리스트(성직자)
JOBMIRAGEKNIGHT = 17; //미라쥬나이트(신기의기사) - 3차 전직
JOBBERSERKER = 18; //베르세르카(광폭전사)
JOBDARKKNIGHT = 19; //다크나이트(어둠의기사)
JOBNIGHTSHADE = 20; //나이트쉐이드(밤의그림자)
JOBARCANERANGER = 21; //아케인레인저(비밀의감시자)
JOBBANDITCAPTIN = 22; //벤티드캡틴(밴디트가원래 발음, 산적두목)
JOBDRUIDMASTER = 23; //드루이드마스터
JOBARCMAGE = 24; //아크메이지(호광의마법사)
JOBSATANICIA = 25; //사타나키아(악마적인사람)
JOBTHERAPIST = 26; //세라피스트(치료요법사)
JOBBENEDICT = 27; //베네딕투스(수도사)
JOBHIGHPRIEST = 28; //하이프리스트(최고성직자)
JOBMAX = 29;
미드가르드에서는 상당히 방대한 직업군을 구성하고 있었다.
3차전직까지 고려한 상태였고..
후에 5차전직까지 고려된 이름을 부여할 예정이었다.
////////////////////////////////////////////////////////////////////////////////
// 성별의종류 TGPlayer.FSex
////////////////////////////////////////////////////////////////////////////////
MKMAN = 0; //남성
MKWOMAN = 1; //여성
MKSEXLESS = 2; //중성
정통 RPG에 따라서.. 성별에 대한 영향과 중성을 표현하려 하였다.
중성은 결혼을 못하므로.. 어빌리티를 상속할 수 있는 능력이
부여되지는 않았지만, 최상의 캐릭터로 키울 수 있었다.
설정상에는.. 나이 개념이 있어서.. 캐릭터가 늙는다..
////////////////////////////////////////////////////////////////////////////////
// 아이템 장착 위치 WearItem.WearPos
////////////////////////////////////////////////////////////////////////////////
WPUNKNOWN = -1;
WPCLOTHS = 0; //상의
WPHAT = 1; //투구
WPHEAD = 2; //머리
WPGLOVES = 3; //장갑
WPARML = 4; //무기 좌
WPARMR = 5; //무기 우
WPPANTS = 6; //하의
WPFOOTWEAR = 7; //신발
WPROBE = 8; //망토
WPBELT = 9; //벨트
WPTATOOU = 10; //상반신문신
WPTATOOD = 11; //하반신 문신
WPEARCAPL = 12; //귀걸이 좌
WPEARCAPR = 13; //귀걸이 우
WPNECKLACE = 14; //목걸이
WPBRACELETL = 15; //팔찌 좌
WPBRACELETR = 16; //팔찌 우
WPRINGL = 17; //반지 좌
WPRINGR = 18; //반지 우
WPRMAX = 19; //장착 최고값
아이템이 장착될 위치 정보.
기술 클래스...
TAbility = class(TObject)
public
ID : LongWord; //고유 ID
JobID : Word; //배울수 있는 직업의 종류
Name : String; //어빌리티의 이름
EngName : String; //어빌리티의 이름
IsPassive : Boolean; //패시브인지 아닌지 여부
Act : Byte; //어빌리티 행위(위표 참조)
RKind : Byte; //어빌리티가 영향을 미치는 범위종류(지정캐릭, 주변캐릭)
Range : Integer; //주변캐릭터에 영향을 미칠경우 범위
AffectNum : Word; //적용받는 캐릭의 제한 개수
Weapon : Byte; //해당 능력을 사용할 수 있는 무기종류(위표참조)
AP : Integer; //어빌리티의 공격력
UseMP : Integer; //사용시 사용되는 마나 포인트
AClass : Byte; //어빌리티의계열(일반,화염,얼음,전격,대지)
Effect : Word; //사용시 증가되는 스텟의 종류
ContTime : LongWord; //지속되는 시간
AUnit : Byte; //능력치의 단위(%, 값, 백분율등)(Ability Unit)
EVAL : Integer; //사용시 증가되는 스텟의 값
CastTime : LongWord; //발동하기 위해 필요한 시간
ActTime : LongWord; //시전하는 동안의 시간
DelayTime : LongWord; //다음 사용 때까지 지연 되는 시간
Target : Byte; //어빌리티 사용 대상
UseEP : Integer; //배울 때 사용되는 에테르 포인트
RLevel : Word; //배울 때 요구되는 사용자의 레벨
Distance : Integer; //어빌리티 사용 사정거리
BMapName : String; //이미지 파일 이름
Description : String; //어빌리티에 대한 설명
EDescription : String; //어빌리티에 대한 설명
History
Last edited on 05/01/2007 18:01 by 꿈꾸는자
Comments (0)