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>
416 lines
12 KiB
C++
416 lines
12 KiB
C++
// Creature.h: interface for the CCreature class.
|
||
//
|
||
//////////////////////////////////////////////////////////////////////
|
||
|
||
#if !defined(AFX_CREATURE_H__0C16A3E3_6308_4E72_AFF8_1CFE85324B6D__INCLUDED_)
|
||
#define AFX_CREATURE_H__0C16A3E3_6308_4E72_AFF8_1CFE85324B6D__INCLUDED_
|
||
|
||
#if _MSC_VER > 1000
|
||
#pragma once
|
||
#endif // _MSC_VER > 1000
|
||
|
||
#include "Z3DGeneralChrModel.h"
|
||
#include "List.h"
|
||
#include "SceneManager.h"
|
||
|
||
using namespace std;
|
||
|
||
|
||
const unsigned long CA_WAIT = 0;
|
||
const unsigned long CA_RUN = 1;
|
||
const unsigned long CA_ATTACK = 2;
|
||
const unsigned long CA_MOVEATTACK = 3;
|
||
const unsigned long CA_WALKBACK = 4;
|
||
const unsigned long CA_WALKLEFT = 5;
|
||
const unsigned long CA_WALKRIGHT = 6;
|
||
const unsigned long CA_BASH = 7;
|
||
const unsigned long CA_WALK = 8;
|
||
const unsigned long CA_FALLDOWN = 9;
|
||
const unsigned long CA_REST = 10;
|
||
const unsigned long CA_SITDOWN = 11;
|
||
const unsigned long CA_STANDUP = 12;
|
||
const unsigned long CA_ATTACKADVANCE = 13;
|
||
const unsigned long CA_ATTACKLEFT = 14;
|
||
const unsigned long CA_ATTACKRIGHT = 15;
|
||
const unsigned long CA_ATTACKRETREAT = 16;
|
||
const unsigned long CA_ATTACK2 = 17;
|
||
const unsigned long CA_ATTACK3 = 18;
|
||
const unsigned long CA_ATTACK4 = 19;
|
||
const unsigned long CA_RESPAWN = 20;
|
||
const unsigned long CA_JUMP = 21;
|
||
const unsigned long CA_LEFTDASH = 22;
|
||
const unsigned long CA_RIGHTDASH = 23;
|
||
const unsigned long CA_CASTING = 24;
|
||
const unsigned long CA_FIRE1 = 25;
|
||
const unsigned long CA_FIRE2 = 26;
|
||
const unsigned long CA_COMBINATIONBLOW = 27;
|
||
const unsigned long CA_BACKSTAB = 28;
|
||
const unsigned long CA_AIMEDSHOT2 = 29;
|
||
const unsigned long CA_ATTACK5 = 30;
|
||
const unsigned long CA_ATTACK6 = 31;
|
||
const unsigned long CA_BACKDASH = 32;
|
||
const unsigned long CA_AIMEDSHOT1 = 33;
|
||
const unsigned long CA_JUMPATTACK = 34;
|
||
const unsigned long CA_JUMPATTACK2 = 35;
|
||
const unsigned long CA_FRONTDASH = 36;
|
||
const unsigned long CA_LAND = 37;
|
||
const unsigned long CA_FORWARDJUMP = 38;
|
||
const unsigned long CA_BACKJUMP = 40;
|
||
const unsigned long CA_SHOT = 41;
|
||
const unsigned long CA_JUMPSHOT = 42;
|
||
const unsigned long CA_OVERBASH1 = 43;
|
||
const unsigned long CA_OVERBASH2 = 44;
|
||
const unsigned long CA_OVERBASH3 = 45;
|
||
const unsigned long CA_OVERBASH4 = 46;
|
||
const unsigned long CA_OVERBASH5 = 47;
|
||
const unsigned long CA_POWERDRAIN = 48;
|
||
const unsigned long CA_TURNPUNCH1 = 49;
|
||
const unsigned long CA_TURNPUNCH2 = 50;
|
||
const unsigned long CA_TURNPUNCH3 = 51;
|
||
const unsigned long CA_JUMPATTACK3 = 52;
|
||
const unsigned long CA_AIMEDSHOT3 = 53;
|
||
const unsigned long CA_STUN = 54;
|
||
const unsigned long CA_ROUNDSWING = 55;
|
||
const unsigned long CA_SWIM = 100;
|
||
|
||
const float RUN_INTERVAL = 255.0f;
|
||
|
||
const long PACKET_LIFETIME = 10000;
|
||
|
||
typedef struct ChrActionNode
|
||
{
|
||
unsigned long m_dwLowerChrAction;
|
||
unsigned long m_dwUpperChrAction;
|
||
float m_fDirection;
|
||
vector3 m_vecNextPosition;
|
||
float m_fVec;
|
||
unsigned short m_wAniNum;
|
||
unsigned short m_wAniNumCount;
|
||
unsigned long m_dwFrame;
|
||
} ChrActionNode;
|
||
|
||
typedef struct stDamage
|
||
{
|
||
short sLifeTime;
|
||
long lValue;
|
||
unsigned short wMode;
|
||
float fScale;
|
||
} stDamage;
|
||
|
||
class CCreature
|
||
{
|
||
public:
|
||
int GetChrTitle( int nClass, int nMerits );
|
||
void SetChantEffect(unsigned long dwChant, BOOL bToggle, BOOL bSelf);
|
||
void SetChantEffect(unsigned long dwChant, BOOL bSelf);
|
||
BOOL GetSkillMotion(void);
|
||
class CCreatureArrow {
|
||
public:
|
||
CEffScript *m_ArrowEsf;
|
||
char m_PivotName[256];
|
||
CCreatureArrow() {
|
||
m_ArrowEsf = NULL;
|
||
memset(m_PivotName,0,sizeof(char) * 256);
|
||
}
|
||
~CCreatureArrow() {
|
||
if(m_ArrowEsf != NULL) {
|
||
if(!CSceneManager::m_EffectManager.CheckNullScript(m_ArrowEsf)) {
|
||
CSceneManager::m_EffectManager.DeleteEndScript(m_ArrowEsf);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
class CCreatureEffect { //creature <20><><EFBFBD><EFBFBD> <20>ٴ<EFBFBD> effect class
|
||
public:
|
||
CEffScript *m_Effect; // esf
|
||
bool m_bPivotRot;
|
||
int m_PivotIndex;
|
||
char m_PivotName[50];
|
||
char m_EffName[50];
|
||
bool m_EffValue;
|
||
unsigned long m_EffId;
|
||
|
||
D3DXVECTOR3 m_EffPos;
|
||
|
||
CCreatureEffect() {
|
||
m_Effect = NULL;
|
||
m_bPivotRot = false;
|
||
m_PivotIndex= -1;
|
||
memset(m_PivotName,0,sizeof(char) * 50);
|
||
memset(m_EffName,0,sizeof(char) * 50);
|
||
m_EffValue = false;
|
||
m_EffPos.x = m_EffPos.y = m_EffPos.z = 0.0f;
|
||
m_EffId = 0;
|
||
|
||
}
|
||
~CCreatureEffect() {
|
||
if(m_Effect != NULL) {
|
||
|
||
if(!CSceneManager::m_EffectManager.CheckNullScript(m_Effect)) {
|
||
m_Effect->SetAllLoopOff();
|
||
m_Effect->SetVisibility(false);
|
||
//CSceneManager::m_EffectManager.DeleteEndScript(m_Effect);
|
||
m_Effect = NULL;
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
class CWeaponEffect { //Weapon<6F><6E> <20>ٴ<EFBFBD> effect
|
||
|
||
public:
|
||
int m_nWeaponEffectNum; //effect<63><74> <20><><EFBFBD><EFBFBD>
|
||
int m_nWeaponPosNum; //effect<63><74> <20><><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD> <20><> effect <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ
|
||
|
||
char m_strEffect[50];
|
||
CEffScript *m_pEffect;
|
||
|
||
CWeaponEffect()
|
||
{
|
||
m_nWeaponEffectNum = 0;
|
||
m_nWeaponPosNum = 0;
|
||
|
||
memset(m_strEffect,sizeof(int),50);
|
||
m_pEffect = NULL;
|
||
}
|
||
~CWeaponEffect()
|
||
{
|
||
if(m_pEffect != NULL) {
|
||
if(!CSceneManager::m_EffectManager.CheckNullScript(m_pEffect)) {
|
||
//CSceneManager::m_EffectManager.DeleteEndScript(m_pEffect);
|
||
m_pEffect->SetAllLoopOff();
|
||
m_pEffect->SetVisibility(false);
|
||
|
||
m_pEffect = NULL;
|
||
}
|
||
}
|
||
}
|
||
};
|
||
class CWeaponLine { // Weapon Line Setting Class
|
||
public:
|
||
LPDIRECT3DTEXTURE8 m_lpLineTexture; // Texture
|
||
int m_iColor[3]; // Color
|
||
int m_iBlend; // Blend Mode
|
||
|
||
CWeaponLine() {
|
||
m_lpLineTexture = NULL;
|
||
m_iColor[0] = m_iColor[1] = m_iColor[2] = 255;
|
||
m_iBlend = 0;
|
||
}
|
||
~CWeaponLine() {
|
||
if(m_lpLineTexture != NULL) {
|
||
m_lpLineTexture->Release();
|
||
m_lpLineTexture = NULL;
|
||
}
|
||
|
||
}
|
||
};
|
||
BOOL Casting(unsigned long dwUpperAni = 0xFFFFFFFF, unsigned long dwLowerAni = 0xFFFFFFFF);
|
||
void CancelSkill(void);
|
||
void InitWeapon(unsigned long dwEquip);
|
||
DWORD m_dwLastUpdateActionTimer;
|
||
/* char m_strWeaponType[256];
|
||
static void LoadMotionSheet(char *strFilename);
|
||
static char m_strWeaponMotionSheet[MAX_WEAPONTABLE][256];
|
||
static char m_strWeapon[MAX_WEAPONTABLE][256];*/
|
||
float m_fScale;
|
||
void EndSkill(char *strMotion);
|
||
void BeginCast(char *strMotion);
|
||
BOOL Dash(int nDir);
|
||
BOOL Jump();
|
||
void SkillAttack(unsigned long dwUpperAni, unsigned int dwLowerAni);
|
||
void SetShape(char strShape[15][256]);
|
||
void Respawn(void);
|
||
void InitChrAction(void);
|
||
BOOL IsCancelAction(unsigned long dwPart);
|
||
void SetMotionString(unsigned long *dwAction, char *strAction);
|
||
void SetMotionString(unsigned long dwAction, char *strAction);
|
||
BOOL Attack(unsigned long dwUpperAni = 0xFFFFFFFF, unsigned long dwLowerAni = 0xFFFFFFFF);
|
||
void Dead(void);
|
||
void Wait(void);
|
||
BOOL SetAction(char *strUpperAction, char *strLowerAction);
|
||
BOOL SetAction(unsigned long dwUpperAni, unsigned long dwLowerAni);
|
||
void CrouchAndStandup(void);
|
||
void WalkBack(void);
|
||
void WalkRight(void);
|
||
void WalkLeft(void);
|
||
void Run(float fRunFactor);
|
||
CZ3DGeneralChrModel *m_lpChrModel;
|
||
char m_strGCMDSName[MAX_PATH];
|
||
char m_strFaceType[MAX_PATH];
|
||
char m_strHairStyle[MAX_PATH];
|
||
unsigned short m_wShape[15];
|
||
char m_strShape[15][256]; // <20><><EFBFBD>߿<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
|
||
unsigned char m_cSex;
|
||
unsigned char m_cNation;
|
||
unsigned char m_cLevel;
|
||
unsigned short m_wClass;
|
||
unsigned long m_dwPartyID;
|
||
unsigned long m_dwWeaponPos;
|
||
short m_sDamage;
|
||
long m_sCurrHP;
|
||
long m_sCurrMP;
|
||
unsigned short m_wMaxHP;
|
||
unsigned short m_wMaxMP;
|
||
float m_fDeadTimer;
|
||
unsigned long m_dwAttackCombo;
|
||
unsigned long m_dwSkillComboCount;
|
||
BOOL m_bSkillCombo;
|
||
vector3 m_vecPos;
|
||
float m_fDirection;
|
||
unsigned long m_dwChrID;
|
||
float m_fSelfChrLens;
|
||
int m_ChrNodeID;
|
||
float m_fRunFactor;
|
||
char m_strName[MAX_PATH];
|
||
BOOL m_bSitMode;
|
||
BOOL m_bUsed;
|
||
BOOL m_bFlying;
|
||
BOOL m_bFlyFirstCheck;
|
||
BOOL m_bStillCasting;
|
||
BOOL m_bNoneComboAttackMode;
|
||
BOOL m_bFirstPositionSend;
|
||
vector3 m_vecJumpAttackVector;
|
||
unsigned long m_dwChant;
|
||
char m_strStreetStallName[32];
|
||
bool m_bPeaceMode;
|
||
|
||
unsigned long m_dwSpendTime[6];
|
||
|
||
ChrActionNode m_ChrAction;
|
||
|
||
float m_fFixAngle;
|
||
|
||
List<ChrActionNode> m_lstActionData;
|
||
List<stDamage> m_lstDamageNumber;
|
||
char m_strChatMessage[MAX_PATH];
|
||
float m_fChatTimer;
|
||
|
||
BOOL m_bCharDead;
|
||
|
||
BOOL m_bUpperAble;
|
||
BOOL m_bLowerAble;
|
||
unsigned long m_dwLowerChrAction;
|
||
unsigned long m_dwUpperChrAction;
|
||
BOOL m_bUpperAnimating;
|
||
BOOL m_bLowerAnimating;
|
||
|
||
//arrow
|
||
vector<CCreatureArrow *> m_Arrow;
|
||
bool m_bArrowExist;
|
||
//body effect
|
||
vector<CCreatureEffect *> m_BodyEffect;
|
||
bool m_bBodyEffect;
|
||
//Weapon effect
|
||
vector<CWeaponEffect *> m_WeaponEffect;
|
||
bool m_bWeaponEffect;
|
||
|
||
// slide character <20><><EFBFBD><EFBFBD>
|
||
CEffScript::CEffExt6 m_SlideValue;
|
||
bool m_bSlide;
|
||
|
||
CWeaponLine *m_pWeaponLine;
|
||
bool m_bWeaponLine;
|
||
|
||
DWORD m_dwTargetId; // Target Id (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> ó<><C3B3>)
|
||
|
||
|
||
void SetSlideValue(CEffScript::CEffExt6 );
|
||
void PlaySlide();
|
||
void RenderSlide(float bx,float by,float bz,float nx,float ny,float nz,float unitsize);
|
||
//
|
||
CCreature();
|
||
virtual ~CCreature();
|
||
|
||
void ArrowUpdate();
|
||
void ArrowUpdate(int );
|
||
void AddArrow(char *pivot_name,D3DXQUATERNION rot,int div = 0);
|
||
void DeleteArrow(int );
|
||
// WeaponLine
|
||
void SetWeaponLine(LPDIRECT3DTEXTURE8 lpTexture,int iColor[3],int iBlend);
|
||
void DeleteWeaponLine();
|
||
void WeaponLineUpdate();
|
||
|
||
///////////body effect///////////
|
||
// ij<><C4B3> pos <20><> effect <20><><EFBFBD>ϰ<EFBFBD><CFB0><EFBFBD>
|
||
void AddBodyEffect(char *esfname,unsigned long effid = 0,bool mine = true,bool bVisibility = true);
|
||
// pivot <20>߿<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ϰ<EFBFBD> num <20><><EFBFBD><EFBFBD> <20><>ŭ effect <20><><EFBFBD><EFBFBD> (num <20><><EFBFBD><EFBFBD> -1<≯<EFBFBD> <20><> pivot <20><> <20><> <20><><EFBFBD><EFBFBD>)
|
||
void AddBodyEffect(char *file = NULL,bool rot = false,unsigned long effid = 0,int num = -1);
|
||
// pivot <20>ϳ<EFBFBD><CFB3><EFBFBD> effect <20><><EFBFBD><EFBFBD>
|
||
void AddBodyEffect(char *file = NULL,char *pivot = NULL,bool rot = false,unsigned long effid = 0);
|
||
void AddBodyEffect(char *file = NULL,int pivotindex = -1,bool rot = false,unsigned long effid = 0);
|
||
//<2F><><EFBFBD><EFBFBD> body effect list<73>ȿ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20>ϴ<EFBFBD><CFB4><EFBFBD> <20>˻<EFBFBD>
|
||
bool CheckInBodyEffect(char *file);
|
||
|
||
void RenderSnap(float bx,float by,float bz,float nx,float ny,float nz,float unitsize,char *effname);
|
||
|
||
|
||
void DeleteBodyEffect(); // <20><> effect delete
|
||
void DeleteBodyEffect(char *pivot); // <20><> pivot<6F><74> <20><><EFBFBD><EFBFBD> effect delete
|
||
void DeleteBodyEffectName(char *effectname); //effect script <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD> delete
|
||
void DeleteBodyEffect(unsigned long id); //effect id<69><64> delete
|
||
|
||
void BodyEffectUpdate(int index);
|
||
void BodyEffectUpdate();
|
||
void SetEffect(); // monster <20><><EFBFBD><EFBFBD> GCMDS<44><53><EFBFBD><EFBFBD> effect <20>ҷ<EFBFBD> <20><><EFBFBD>̴<EFBFBD> <20>ڵ<EFBFBD>
|
||
|
||
//////////Weapon Effect////////
|
||
|
||
void AddWeaponEffect(char *esfname,int effectnum);
|
||
|
||
void DeleteWeaponEffect(); //<2F><> weapon effect delete
|
||
void DeleteWeaponEffect(char *esfname,int iEffNum); //esfname<6D><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> effect delete
|
||
|
||
void WeaponEffectUpdate();
|
||
|
||
////////////////////////////////
|
||
// Visibility <20><><EFBFBD><EFBFBD> //
|
||
////////////////////////////////
|
||
void SetEffectVisibility(bool vis);
|
||
|
||
|
||
void SetPosition(float fPosX, float fPosY, float fPosZ)
|
||
{
|
||
m_vecPos.x = fPosX; m_vecPos.y = fPosY; m_vecPos.z = fPosZ;
|
||
if(m_lpChrModel)
|
||
m_lpChrModel->SetPosition(m_vecPos.x, m_vecPos.y, m_vecPos.z);
|
||
}
|
||
void SetPosition(vector3 &vecPos)
|
||
{
|
||
m_vecPos = vecPos;
|
||
if(m_lpChrModel)
|
||
m_lpChrModel->SetPosition(m_vecPos.x, m_vecPos.y, m_vecPos.z);
|
||
}
|
||
vector3 *GetPosition(void)
|
||
{
|
||
if(m_lpChrModel)
|
||
m_lpChrModel->GetPosition(m_vecPos);
|
||
return &m_vecPos;
|
||
}
|
||
void SetDirection(float fDirection)
|
||
{
|
||
m_fDirection=fDirection;
|
||
if(m_lpChrModel)
|
||
m_lpChrModel->SetDirection(fDirection);
|
||
}
|
||
float GetDirection(void)
|
||
{
|
||
if(m_lpChrModel)
|
||
m_fDirection=m_lpChrModel->GetDirection();
|
||
return m_fDirection;
|
||
}
|
||
void SetAlphaLevel(float fAlphaFactor) { m_lpChrModel->SetAlphaLevel(fAlphaFactor); }
|
||
BOOL GetChantFlag(unsigned long dwChantKind)
|
||
{
|
||
if(0 < dwChantKind && dwChantKind < 33)
|
||
{
|
||
if(m_dwChant & (0x00000001 << (dwChantKind - 1))) return TRUE; else return FALSE;
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
};
|
||
|
||
#endif // !defined(AFX_CREATURE_H__0C16A3E3_6308_4E72_AFF8_1CFE85324B6D__INCLUDED_)
|