/* ========================================================================== * ÆÄ ÀÏ : Monster_Common.h * ¸ñ Àû : ¸ó½ºÅÍ µ¥ÀÌŸ * ÀÛ ¼º ÀÚ : ¹Ú°æÈñ * ÀÛ ¼º ÀÏ : 2006-10-02 * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "CommonNetworkMsgStruct.h" #include "BaseObject_Common.h" class cMonster; //struct sItemDropData; enum eItemSlotSize; #pragma pack(push,1) const unsigned int MAX_PATH_COUNT = 128; const int SWITCH_RANDTIME = 57 * SECOND; /// ä³Î°£ ¼±ÅÃÀû ¸®Á¨½Ã µ¿½Ã ¸®Á¨À» ÁÙÀ̱âÀ§ÇØ ¸®Á¨½Ã°£¿¡ ¾à°£ÀÇ ·£´ýÆøÀ» ÁÜ const int SWITCH_CHANNEL_CHECKTIME = 3 * SECOND; /// ä³Îº° ¼±ÅÃÀûÀÎ ¸®Á¨ ±×·ì¼±Åýà ¸®Á¨À» Çϱâ·ÎÇÑ Ã¤³ÎÀÇ µ¿±â¸¦ ¸ÂÃçÁÖ´Â ½Ã°£ const float SWITCH_SYNCTIME_RATE = 0.5f; /// ¸®Á¨µÈ ä³Î¿¡¼­ ¸ó½ºÅͰ¡ »ì¾ÆÀÖÀ½À» ÁÖ±âÀûÀ¸·Î ¾Ë·ÁÁÖ´Â ½Ã°£ ¸®Á¨½Ã°£*ºñÀ² /// ¸ó½ºÅÍ »óŰª enum eACTION_ID { eACT_MOVE = 3, /// ¸ó½ºÅÍ ÁÖÀ§ À̵¿ eACT_FOLLOW = 4, /// ¸ó½ºÅÍ Å¸°Ù ÃßÀû eACT_ATTACK = 5, /// ¸ó½ºÅÍ °ø°Ý(ÀüÅõ) eACT_IDLE = 6, /// ¸ó½ºÅÍ ´ë±â(Á¤Áö) »óÅÂ(¸ðµå È¿°ú ¿¬ÃâÁß) eACT_ESCAPE = 7, /// ¸ó½ºÅÍ µµ¸Á eACT_DIE = 8, /// ¸ó½ºÅÍ Á×À½ eACT_PUSHPULL = 9, /// °­Á¦ ¹Ð¸²/¶¯°ÜÁü }; /// »óÅ º¯°æ °ª enum eACTION_CHANGE { eACTCH_CONTINUE = 1, /// ÇÁ·Î¼¼½º °è¼Ó ¼öÇà eACTCH_ERROR = 10, /// ½ºÅ©¸³Æ® ¿À·ù eACTCH_ESCAPE, /// ¸ó½ºÅÍ µµ¸Á eACTCH_MOVE_END = 30, /// À̵¿ ÇÁ·Î¼¼½º Á¾·á eACTCH_FOLLOW_END = 40, /// Ãß°Ý Á¾·á eACTCH_FOLLOW_ATTACK, /// Ãß°Ý ÇÁ·Î¼¼½ºÁß °ø°Ý eATTCH_ATTACK_END = 50, /// ÀüÅõ Á¾·á eATTCH_ATTACK_FOLLOW, /// ÀüÅõÁß Ãß°Ý eACTCH_MODE_END = 60, /// ¸ðµå ´ë±â »óÅ Á¾·á eACTCH_ESCAPE_END = 70, /// µµ¸Á ÇÁ·Î¼¼½º Á¾·á eACTCH_ESCAPE_FOLLOW, /// µµ¸Á³¡ ÃßÀû eACTCH_DIE_END = 80, /// Á×À½ ÇÁ·Î¼¼½º Á¾·á eACTCH_PUSHPULL_END = 90, /// °­Á¦ ¹Ð¸² À̵¿ ³¡(°ø°Ý) eACTCH_PUSHPULL_IDLE, /// ÀÌÀü ´ë±âÁßÀÌ´ø »óÅ º¹±Í }; /// Ÿ°Ù º¯°æ ¹æ¹ý enum eTARGET_CHANGE { eTARGETCHANGE_RAND = 0, /// ·£´ý ¼±Åà eTARGETCHANGE_OLDTARGET, /// ±âÁ¸ Ÿ°Ù °íÁ¤ eTARGETCHANGE_NEAR, /// °¡Àå °¡±î¿î ´ë»ó eTARGETCHANGE_TOPDAMAGE, /// µ¥¹ÌÁö ÇÕÀÌ °¡Àå ¸¹Àº ´ë»ó eTARGETCHANGE_LOWLEVEL, /// ·¹º§ÀÌ °¡Àå ³·Àº ´ë»ó eTARGETCHANGE_TOPLEVEL, /// ·¹º§ÀÌ °¡Àå ³ôÀº ´ë»ó eTARGETCHANGE_TOPHEAL, /// HP¸¦ °¡Àå ¸¹ÀÌ È¸º¹½ÃÄÑÁØ ´ë»ó - ¼¼ºÎ ¼³Á¤ ÇÊ¿ä(¿ì¼± »ç¿ë¾ÈÇÔ) }; /// µµ¸ÁÁ¶°Ç enum eESCAPE_TYPE { eESCAPETYPE_NONE, /// µµ¸Á¾È°¨ eESCAPETYPE_HP50LOW, /// HP 50%ÀÌÇÏ eESCAPETYPE_HP30LOW, /// HP 30%ÀÌÇÏ }; enum eMOVE_SPEED_TYPE { eMOVESPEED_STOP, /// Á¤Áö eMOVESPEED_WALK, /// °È±â eMOVESPEED_RUN, /// ¶Ù±â }; /// ¸ó½ºÅÍ ¼Ó¼º enum eMONSTER_TYPE { eMONSTERTYPE_HUMAN = 1, /// Àΰ£ eMONSTERTYPE_ANIMAL, /// µ¿¹° eMONSTERTYPE_PLANT, /// ½Ä¹° eMONSTERTYPE_BUG, /// °ïÃæ eMONSTERTYPE_SOUL, /// Á¤·É eMONSTERTYPE_UNDEAD, /// ¾ðµ¥µå eMONSTERTYPE_GIANT, /// °ÅÀÎ eMONSTERTYPE_DRAGON, /// ¿ë eMONSTERTYPE_CHARACTER, /// ij¸¯ÅÍ eMONSTERTYPE_MAX, }; /// ¸ó½ºÅÍ »óȲº° ´ë»ç °¹¼ö const unsigned long MONSTER_TALK_SIZE = 20; /// ´ëÈ­ »óȲ°ª enum eMONSTER_TALK_STATE { eMONSTERTALK_STAND = 0, eMONSTERTALK_WORK, eMONSTERTALK_RUN, eMONSTERTALK_FIGHT, eMONSTERTALK_ATTACK1, eMONSTERTALK_ATTACK2, eMONSTERTALK_SKILL1, eMONSTERTALK_SKILL2, eMONSTERTALK_SKILL3, eMONSTERTALK_DAMAGE, eMONSTERTALK_FOLLOW, eMONSTERTALK_GIVEUP, eMONSTERTALK_ESCAPE, eMONSTERTALK_DIE1, eMONSTERTALK_DIE2, eMONSTERTALK_MAX, eMONSTERTALK_ATTACKSTART = eMONSTERTALK_ATTACK1, eMONSTERTALK_ATTACKEND = eMONSTERTALK_SKILL3, }; /// ´ë»ç Ç¥½Ã ¼³Á¤ enum eMONSTER_TALK_VIEWTYPE { eM_TALKVIEW_BALLOON = 0, /// ¸»Ç³¼± eM_TALKVIEW_NORMAL, /// ¸»Ç³¼± + (ÀϹÝ)äÆÃâ eM_TALKVIEW_SHOUT, /// ¸»Ç³¼± + (¿ÜÄ¡±â)äÆÃâ }; // ¸ó½ºÅÍ ºÐ·ç enum eMONSTER_KIND_TYPE { eMONSTER_KIND_NORMAL = 0, eMONSTER_KIND_VETERAN, eMONSTER_KIND_ELITE, eMONSTER_KIND_BOSS, eMONSTER_KIND_MAX, }; /// ¸ó½ºÅ͸®½ºÆ® struct sMonsterScript { //¸ó½ºÅÍ Á¾·ù index unsigned int mMonsterClassIdx; /// ¸ó½ºÅÍ À̸§ TCHAR mName[256]; /// ¸ó½ºÅÍ Á÷¾÷À̸§ TCHAR mJobName[256]; /// kfmÆÄÀÏidx unsigned long mKfmIdx; /// À̸§ ³ôÀ̰ª unsigned long mNameHeight; /// ºÐ·ù unsigned char mKind; /// ¼Ó¼º unsigned char mType; /// ·¹º§ unsigned char mLevel; /// HP unsigned long mMaxHp; /// MP unsigned long mMaxMp; /// expȹµæ·® unsigned long mExp; /// sxpȹµæ·® unsigned long mSxp; /// ¹°¸®¹æ¾î unsigned short mDef; /// ¸¶¹ý¹æ¾î unsigned short mMdef; /// ¸íÁß¼öÄ¡ unsigned long mHit; /// ȸÇÇÀ² unsigned short mAvoid; /// ½Ã¾ß¹üÀ§ unsigned long mSeekRange; /// ºñÁß unsigned char mImportance; /// Å©±â float mMonsterScale; /// ¿¬ÃâÀÌÆåÆ® Å©±â float mEffectScale; /// ÇÇÇØ¹üÀ§ - º¸°£ »çÀÌÁî float mMonsterFixSize; /// Çൿ¹üÀ§ unsigned long mFreeMoveRange; /// Çൿ(Á¤Áö) unsigned short mActionStopRatio; /// Çൿ(°È±â) unsigned short mActionWalkRatio; /// Çൿ(¶Ù±â) unsigned short mActionRunRatio; /// Á¤Áö½Ã°£ unsigned long mActionStopTime; /// À̵¿¼Óµµ(°È±â) unsigned long mActionWalkSpd; /// À̵¿¼Óµµ(¶Ù±â,µµ¸Á) unsigned long mActionRunSpd; /// ¼±°ø¿©ºÎ bool mIsPrecedeAttack; /// º¯½ÅÀÎ½Ä bool mIsChgMonCheck; /// ÃßÀû½Ã°£ unsigned long mFollowTime; /// ÃßÀû°Å¸® unsigned long mFollowRange; /// µµ¸ÁÁ¶°Ç unsigned char mEscapeType; /// µµ¸ÁÈ®·ü unsigned char mEscapePer; /// ȸº¹¿©ºÎ bool mIsRecovery; /// ȸº¹½ÃÀ۽ð£ unsigned long mRecoveryTime; /// ÃßÀû ÃּҰŸ® °ü·ÃÁ¤º¸ float mSkillMinRange; // ½ºÅ³ ÃּҰŸ® unsigned char mSkillMinRangeType; // ÃּҰŸ® ½ºÅ³ÀÇ °Å¸® ŸÀÔ tPointerHashMap* mpQuestItemDropMap; sMonsterScript() { mpQuestItemDropMap = NULL; mSkillMinRange = 0.0f; mSkillMinRangeType = 0; } }; /// ¸ó½ºÅÍ ±×·ì Á¤º¸ struct sRegenGroupScript { /// ±×·ì¹øÈ£ unsigned long mGroupIdx; /// ÃÖÃʸ®Á¨¼³Á¤ bool mServerOnRegen; /// ¸ó½ºÅÍ ¸®Á¨ ÆÛ¼¾Æ¼Áö unsigned char mRegenPer; /// ¸®Á¨¹üÀ§ unsigned long mRegenRange; /// ±×·ì¸®Á¨½Ã°£ unsigned long mRegenTime; /// ¸Ê ±×·ì¹øÈ£ unsigned long mMapGroupIdx; /// ä³Î °øÀ¯ üũ bool mChannelCheck; /// ¸®Á¨ ±×·ì ¹øÈ£ Arr tArray mRegenGroupAry; tArray mMonsterAry; }; /// ¸ó½ºÅÍ ¸®Á¨ Á¤º¸ struct sRegenScript { /// ¸ó½ºÅÍ ¸®Á¨ ¹øÈ£ unsigned long mRegenIdx; /// ¸ó½ºÅÍ Á¾·ù unsigned int mMonsterClassIdx; /// ¸Ê¹øÈ£ unsigned short mMapNumber; /// ¸ðµå unsigned char mLevelMode; /// ¸®Á¨±×·ì¹øÈ£ unsigned long mGroupNumber; /// ¸®Á¨ xÁÂÇ¥ float mRegenX; /// ¸®Á¨ yÁÂÇ¥ float mRegenY; /// ¹æÇâ°ª float mDirection; /// ¸®Á¨½Ã°£ unsigned long mRegenTime; /// ¸®Á¨ À¯Áö½Ã°£ unsigned long mRegenLifeTime; /// µ¿Á·±×·ì¹øÈ£ unsigned long mFamilyNum; /// ÆÐÅÏÀ妽º unsigned long mPatternIdx; /// Çൿ±×·ì¹øÈ£ unsigned long mActionGroupNum; }; /// ¸ó½ºÅÍ ÆÐÅÏ ÄÚ½º Á¤º¸ struct sMonsterPatternPos { float mPosX; float mPosY; unsigned long mRange; bool mRelaxPoint; unsigned long mWaitTime; }; /// ¸ó½ºÅÍ ÆÐÅÏ »óÀ§ Á¤º¸ struct sMonsterPattern { unsigned long mPatternIdx; /// À̵¿ ÆÐÅÏ À妽º bool mType; /// true ¼øÈ¯ false ¿ªÁÖÇà /// tArray mPosAry; }; /// ¸ó½ºÅͽºÅÝ struct sMonsterStatus { float mPhysicAttack; /// ¹°¸®:±Ù°Å¸®°ø°Ý·Â float mPhysicRangeAttack; /// ¹°¸®:¿ø°Å¸®°ø°Ý·Â float mPhysicDefense; /// ¹°¸®:¹æ¾î·Â float mMagicAttack; /// ¸¶¹ý:°ø°Ý·Â float mMagicDefense; /// ¸¶¹ý:¹æ¾î·Â float mPhysicCritical; /// ¹°¸®:Å©¸®Æ¼Äà °ø°Ý float mMagicCritical; /// ¸¶¹ý:Å©¸®Æ¼Äà °ø°Ý float mPhysicCriticalDef; /// ¹°¸®:Å©¸®Æ¼Äà ¹æ¾î float mMagicCriticalDef; /// ¸¶¹ý:Å©¸®Æ¼Äà ¹æ¾î float mMaxHP; /// ÃÖ´ëHP float mMaxMP; /// ÃÖ´ëMP float mPhysicAttackRate; /// ¹°¸®:¸íÁß·ü float mMagicAttackRate; /// ¸¶¹ý:¸íÁß·ü float mPhysicAvoid; /// ¹°¸®:ȸÇÇ float mMagicAvoid; /// ¸¶¹ý:ȸÇÇ float mAttackSpeed; /// ÀϹݰø°Ý¼Óµµ float mCooltime; /// cooltime float mInRange; /// ±Ù°Å¸®»çÁ¤°Å¸® float mOutRange; /// ¿ø°Å¸®(+¸¶¹ý)»çÁ¤°Å¸® float mMoveSpeed; /// À̵¿¼Óµµ sMonsterStatus() { memset(this, 0, sizeof(sMonsterStatus)); } }; /// ¸ó½ºÅÍ Àüü µ¥ÀÌÅÍ struct sMonsterData { unsigned long mMonsterIdx; unsigned int mMonsterClassIdx; float mPosX; float mPosY; float mDirection; unsigned int mHP; unsigned int mMaxHP; unsigned int mMP; unsigned int mMaxMP; unsigned short mMoveSpeed; unsigned short mScale; char mAutoDummy; // 0:¾Æ´Ô, 1:¿ÀÅ乿Áö¿ë´õ¹Ì }; /// ¸ó½ºÅÍ ¹öÇÁ ¸®½ºÆ® struct sMonsterInfluence { unsigned long mUniqueIdx; unsigned long mInfluenceClassIdx; }; /// ¸ó½ºÅÍ ´ëÈ­ ½ºÅ©¸³Æ® struct sMonsterTalk { unsigned char mViewType; /// Ç¥½Ã ¼³Á¤ ( eMONSTER_TALK_VIEWTYPE ) unsigned char mViewPercent; /// Ç¥½Ã È®·ü unsigned long mCheckTime; /// ´ë»ç Ç¥½Ã üũ ½Ã°£ unsigned long mTalkIdx[MONSTER_TALK_SIZE]; /// ´ë»ç À妽º }; /// ¼Òȯ ÆÐÅÏ struct sSummonPatternScript { float mDir; unsigned long mDelayTime; }; ///// ¼Òȯ ÆÐÅÏ Á¤º¸ //struct sSummonPatternInfo //{ // sObject mObject; // unsigned long mSummonPatternIdx; // unsigned long mCount; // NiPoint2 mCenterPos; // float mCenterDir; // unsigned long mRangeMin; // unsigned long mRangeMax; // unsigned char mNowPatternPos; // unsigned long mNextPatternTime; //}; struct MSG_SYN_MOVE_MONSTER : public MSGROOT { unsigned long mMonsterIdx; unsigned short mCount; unsigned short mMoveSpeed; unsigned char mMoveSpeedType; NiPoint2 mPathArray[1]; /// ±æÃ£±â °æ·Î - ±æÃ£±â ³ëµå À§Ä¡ /// ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength() { return sizeof(MSG_SYN_MOVE_MONSTER) - sizeof(mPathArray) + (mCount * sizeof(NiPoint2));} }; struct MSG_SYN_ACTIONMOVE_MONSTER : public MSGROOT { unsigned long mMonsterIdx; unsigned short mCount; unsigned short mMoveSpeed; float mRange; /// ¹üÀ§ sObject mTarget; /// Ÿ°Ù Á¤º¸ NiPoint2 mPathArray[1]; /// ±æÃ£±â °æ·Î /// ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength() { return sizeof(MSG_SYN_ACTIONMOVE_MONSTER) - sizeof(mPathArray) + (mCount * sizeof(NiPoint2));} }; /// ¸ó½ºÅÍ ±¸Á¶Ã¼ struct MSG_MONSTERTEAM_INFO : public MSGROOT { /// ¸ó½ºÅÍ Á¤º¸ sMonsterData mMonsterInfo; /// ¸ó½ºÅÍ ÆÀÁ¤º¸ unsigned long mTeamType; /// È¿°ú °¹¼ö unsigned short mCount; /// ¸ó½ºÅÍ È¿°ú Á¤º¸ sMonsterInfluence mInfluence[1]; /// ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength() { return sizeof(MSG_MONSTERTEAM_INFO) - sizeof(mInfluence) + (mCount * sizeof(sMonsterInfluence));} }; /// ¸ó½ºÅÍ ±¸Á¶Ã¼ struct MSG_MONSTER_INFO : public MSGROOT { /// ¸ó½ºÅÍ Á¤º¸ sMonsterData mMonsterInfo; /// È¿°ú °¹¼ö unsigned short mCount; /// ¸ó½ºÅÍ È¿°ú Á¤º¸ sMonsterInfluence mInfluence[1]; /// ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength() { return sizeof(MSG_MONSTER_INFO) - sizeof(mInfluence) + (mCount * sizeof(sMonsterInfluence));} }; /// ¸ó½ºÅÍ »èÁ¦ struct MSG_MONSTER_SIGHTOUT : public MSGROOT { /// ¸ó½ºÅÍ °íÀ¯ À妽º unsigned long mMonsterIdx; ///// È¿°ú °¹¼ö //unsigned long mCount; ///// ¸ó½ºÅÍ È¿°ú À妽º //unsigned long mInfluenceUniqueIdx[1]; ///// ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â //unsigned long GetMsgLength() { return sizeof(MSG_MONSTER_SIGHTOUT) - sizeof(mInfluenceUniqueIdx) + (mCount * sizeof(unsigned long));} }; /// ¸ðµ¨ µ¥ÀÌŸ ·Îµå¿¡ ÇÊ¿äÇÑ Á¤º¸ ¹ß¼Û struct MSG_MODELNUMBER : public MSGROOT { unsigned short mCount; unsigned long mClassIdx[1]; /// ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength() { return sizeof(MSG_MODELNUMBER) - sizeof(mClassIdx) + (mCount * sizeof(unsigned long));} }; struct MSG_SYN_MONSTER_DESTROY : public MSGROOT { unsigned long mMonsterIdx; }; struct MSG_SYN_MONSTER_HP : public MSGROOT { unsigned long mMonsterIdx; unsigned long mHP; unsigned long mMaxHP; bool mDie; }; struct MSG_SYN_MONSTER_MP : public MSGROOT { unsigned long mMonsterIdx; unsigned long mMP; unsigned long mMaxMP; }; struct MSG_SYN_MONSTER_MOVESPEED : public MSGROOT { unsigned long mMonsterIdx; unsigned short mMoveSpeed; }; struct MSG_SYN_MONSTER_SCALE : public MSGROOT { unsigned long mMonsterIdx; unsigned short mScale; }; struct MSG_SYN_MONSTER_MOVESTOP : public MSGROOT { unsigned long mMonsterIdx; NiPoint2 mMonsterPos; }; struct MSG_SYN_MONSTER_IDLE2ANI : public MSGROOT { unsigned long mMonsterIdx; }; struct MSG_SYN_MONSTER_SPEECH : public MSGROOT { unsigned long mMonsterIdx; /// ¸ó½ºÅÍ °íÀ¯ ¹øÈ£ unsigned char mViewType; /// ´ë»ç Ç¥½Ã ¼³Á¤ eMONSTER_TALK_VIEWTYPE unsigned long mTalkIdx; /// ´ë»ç À妽º unsigned long mCharacterIdx; /// ij¸¯ÅÍ °íÀ¯ ¹øÈ£ }; struct MSG_SYN_MONSTER_MODECHANGE : public MSGROOT { unsigned long mMonsterIdx; /// ¸ó½ºÅÍ °íÀ¯¹øÈ£ char mModeIdx; /// ¸ðµå ¹øÈ£ }; struct MSG_SYN_MOSTER_MODESPEECH : public MSGROOT { unsigned long mMonsterIdx; /// ¸ó½ºÅÍ °íÀ¯ ¹øÈ£ unsigned long mTalkIdx; /// ´ë»ç À妽º unsigned long mCharacterIdx; /// ij¸¯ÅÍ °íÀ¯ ¹øÈ£ }; struct MSG_SYN_POSTMONSTER_SWITCHREGEN : public MSGROOT { unsigned short mLevelMode; unsigned long mSwitchRegen; }; #pragma pack(pop)