Jump to content

Recommended Posts

  • Replies 6
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

1 hour ago, JinHan said:

this problem is caused by mismatch between affect.h in game.source and instancebase.h in client source , check it 

Spoiler

instancebase.h

 

#pragma once

#include "../gamelib/RaceData.h"
#include "../gamelib/ActorInstance.h"

#include "AffectFlagContainer.h"

class CInstanceBase
{    
    public:
        struct SCreateData
        {
            BYTE    m_bType;
            DWORD    m_dwStateFlags;
            DWORD    m_dwEmpireID;
            DWORD    m_dwGuildID;
            DWORD    m_dwLevel;
            DWORD    m_dwVID;
            DWORD    m_dwRace;
            DWORD    m_dwMovSpd;
            DWORD    m_dwAtkSpd;
            LONG    m_lPosX;
            LONG    m_lPosY;
            FLOAT    m_fRot;
            DWORD    m_dwArmor;
            DWORD    m_dwWeapon;
            DWORD    m_dwHair;
            DWORD    m_dwMountVnum;
            
            short    m_sAlignment;
            BYTE    m_byPKMode;
            CAffectFlagContainer    m_kAffectFlags;

            std::string m_stName;

            bool    m_isMain;
        };

    public:
        typedef DWORD TType;

        enum EDirection
        {
            DIR_NORTH,
            DIR_NORTHEAST,
            DIR_EAST,
            DIR_SOUTHEAST,
            DIR_SOUTH,
            DIR_SOUTHWEST,
            DIR_WEST,
            DIR_NORTHWEST,
            DIR_MAX_NUM,
        };

        enum
        {
            FUNC_WAIT,
            FUNC_MOVE,
            FUNC_ATTACK,
            FUNC_COMBO,
            FUNC_MOB_SKILL,
            FUNC_EMOTION,
            FUNC_SKILL = 0x80,
        };

        enum
        {
            AFFECT_YMIR,
            AFFECT_INVISIBILITY,
            AFFECT_SPAWN,

            AFFECT_POISON,
            AFFECT_SLOW,
            AFFECT_STUN,

            AFFECT_DUNGEON_READY,            // 던전에서 준비 상태
            AFFECT_SHOW_ALWAYS,                // AFFECT_DUNGEON_UNIQUE 에서 변경(클라이언트에서 컬링되지않음)

            AFFECT_BUILDING_CONSTRUCTION_SMALL,
            AFFECT_BUILDING_CONSTRUCTION_LARGE,
            AFFECT_BUILDING_UPGRADE,

            AFFECT_MOV_SPEED_POTION,        // 11
            AFFECT_ATT_SPEED_POTION,        // 12

            AFFECT_FISH_MIND,                // 13
            AFFECT_JEOKRANG,                // 43
            AFFECT_CHEONGRANG,                // 44
            AFFECT_JEONGWI,                    // 14 전귀혼
            AFFECT_GEOMGYEONG,                // 15 검경
            AFFECT_CHEONGEUN,                // 16 천근추
            AFFECT_GYEONGGONG,                // 17 경공술
            AFFECT_EUNHYEONG,                // 18 은형법
            AFFECT_GWIGEOM,                    // 19 귀검
            AFFECT_GONGPO,                    // 20 공포
            AFFECT_JUMAGAP,                    // 21 주마갑
            AFFECT_HOSIN,                    // 22 호신
            AFFECT_BOHO,                    // 23 보호
            AFFECT_KWAESOK,                    // 24 쾌속
            AFFECT_HEUKSIN,                    // 25 흑신수호
            AFFECT_MUYEONG,                    // 26 무영진
            AFFECT_REVIVE_INVISIBILITY,        // 27 부활 무적
            AFFECT_FIRE,                    // 28 지속 불
            AFFECT_GICHEON,                    // 29 기천 대공
            AFFECT_JEUNGRYEOK,                // 30 증력술 
            AFFECT_DASH,                    // 31 대쉬
            AFFECT_PABEOP,                    // 32 파법술
            AFFECT_FALLEN_CHEONGEUN,        // 33 다운 그레이드 천근추
            AFFECT_POLYMORPH,                // 34 폴리모프
            AFFECT_WAR_FLAG1,                // 35
            AFFECT_WAR_FLAG2,                // 36
            AFFECT_WAR_FLAG3,                // 37
            AFFECT_CHINA_FIREWORK,            // 38
            AFFECT_PREMIUM_SILVER,            // 39
            AFFECT_PREMIUM_GOLD,            // 40
            AFFECT_RAMADAN_RING,            // 41 초승달 반지 착용 Affect
            AFFECT_BLEEDING,                // 42

            AFFECT_NUM = 64,

            AFFECT_HWAYEOM = AFFECT_GEOMGYEONG,
        };

        enum
        {
            NEW_AFFECT_MOV_SPEED            = 200,
            NEW_AFFECT_ATT_SPEED,
            NEW_AFFECT_ATT_GRADE,
            NEW_AFFECT_INVISIBILITY,
            NEW_AFFECT_STR,
            NEW_AFFECT_DEX,                 // 205
            NEW_AFFECT_CON,
            NEW_AFFECT_INT,
            NEW_AFFECT_FISH_MIND_PILL,

            NEW_AFFECT_POISON,
            NEW_AFFECT_STUN,                // 210
            NEW_AFFECT_SLOW,
            NEW_AFFECT_DUNGEON_READY,
            NEW_AFFECT_DUNGEON_UNIQUE,

            NEW_AFFECT_BUILDING,
            NEW_AFFECT_REVIVE_INVISIBLE,    // 215
            NEW_AFFECT_FIRE,
            NEW_AFFECT_CAST_SPEED,
            NEW_AFFECT_HP_RECOVER_CONTINUE,
            NEW_AFFECT_SP_RECOVER_CONTINUE, 

            NEW_AFFECT_POLYMORPH,           // 220
            NEW_AFFECT_MOUNT,

            NEW_AFFECT_WAR_FLAG,            // 222

            NEW_AFFECT_BLOCK_CHAT,          // 223
            NEW_AFFECT_CHINA_FIREWORK,

            NEW_AFFECT_BOW_DISTANCE,        // 225

            NEW_AFFECT_EXP_BONUS         = 500, // 경험의 반지
            NEW_AFFECT_ITEM_BONUS        = 501, // 도둑의 장갑
            NEW_AFFECT_SAFEBOX           = 502, // PREMIUM_SAFEBOX,
            NEW_AFFECT_AUTOLOOT          = 503, // PREMIUM_AUTOLOOT,
            NEW_AFFECT_FISH_MIND         = 504, // PREMIUM_FISH_MIND,
            NEW_AFFECT_MARRIAGE_FAST     = 505, // 원앙의 깃털 (금슬),
            NEW_AFFECT_GOLD_BONUS        = 506,

            NEW_AFFECT_MALL              = 510, // 몰 아이템 에펙트
            NEW_AFFECT_NO_DEATH_PENALTY  = 511, // 용신의 가호 (경험치 패널티를 한번 막아준다)
            NEW_AFFECT_SKILL_BOOK_BONUS  = 512, // 선인의 교훈 (책 수련 성공 확률이 50% 증가)
            NEW_AFFECT_SKILL_BOOK_NO_DELAY  = 513, // 주안 술서 (책 수련 딜레이 없음)

            NEW_AFFECT_EXP_BONUS_EURO_FREE = 516, // 경험의 반지 (유럽 버전 14 레벨 이하 기본 효과)
            NEW_AFFECT_EXP_BONUS_EURO_FREE_UNDER_15 = 517,

            NEW_AFFECT_AUTO_HP_RECOVERY        = 534,        // 자동물약 HP
            NEW_AFFECT_AUTO_SP_RECOVERY        = 535,        // 자동물약 SP

            NEW_AFFECT_DRAGON_SOUL_QUALIFIED = 540, 
            NEW_AFFECT_DRAGON_SOUL_DECK1 = 541,
            NEW_AFFECT_DRAGON_SOUL_DECK2 = 542,

            NEW_AFFECT_RAMADAN_ABILITY = 300,
            NEW_AFFECT_RAMADAN_RING    = 301,            // 라마단 이벤트용 특수아이템 초승달의 반지 착용 유무

            NEW_AFFECT_NOG_POCKET_ABILITY = 302,
            NEW_AFFECT_BLEEDING = 304,

            NEW_AFFECT_QUEST_START_IDX   = 1000,
        };

        enum
        {
            STONE_SMOKE1 = 0,    // 99%
            STONE_SMOKE2 = 1,    // 85%
            STONE_SMOKE3 = 2,    // 80%
            STONE_SMOKE4 = 3,    // 60%
            STONE_SMOKE5 = 4,    // 45%
            STONE_SMOKE6 = 5,    // 40%
            STONE_SMOKE7 = 6,    // 20%
            STONE_SMOKE8 = 7,    // 10%
            STONE_SMOKE_NUM = 4,
        };

        enum EBuildingAffect
        {
            BUILDING_CONSTRUCTION_SMALL = 0,
            BUILDING_CONSTRUCTION_LARGE = 1,
            BUILDING_UPGRADE = 2,
        };

        enum
        {
            WEAPON_DUALHAND,
            WEAPON_ONEHAND,
            WEAPON_TWOHAND,
            WEAPON_NUM,
        };

        enum
        {
            EMPIRE_NONE,
            EMPIRE_A,
            EMPIRE_B,
            EMPIRE_C,
            EMPIRE_NUM,
        };

        enum
        {    
            NAMECOLOR_MOB,
            NAMECOLOR_NPC,
            NAMECOLOR_PC,
            NAMECOLOR_PC_END = NAMECOLOR_PC + EMPIRE_NUM,                            
            NAMECOLOR_NORMAL_MOB,
            NAMECOLOR_NORMAL_NPC,
            NAMECOLOR_NORMAL_PC,
            NAMECOLOR_NORMAL_PC_END = NAMECOLOR_NORMAL_PC + EMPIRE_NUM,
            NAMECOLOR_EMPIRE_MOB,
            NAMECOLOR_EMPIRE_NPC,
            NAMECOLOR_EMPIRE_PC,
            NAMECOLOR_EMPIRE_PC_END = NAMECOLOR_EMPIRE_PC + EMPIRE_NUM,
            NAMECOLOR_FUNC,
            NAMECOLOR_PK,
            NAMECOLOR_PVP,
            NAMECOLOR_PARTY,
            NAMECOLOR_WARP,
            NAMECOLOR_WAYPOINT,                        
            NAMECOLOR_EXTRA = NAMECOLOR_FUNC + 10,
            NAMECOLOR_NUM = NAMECOLOR_EXTRA + 10,
        };
                
        enum
        {
            ALIGNMENT_TYPE_WHITE,
            ALIGNMENT_TYPE_NORMAL,
            ALIGNMENT_TYPE_DARK,
        };

        enum
        {
            EMOTICON_EXCLAMATION    = 1,
            EMOTICON_FISH            = 11,
            EMOTICON_NUM            = 128,

            TITLE_NUM                = 13,
            TITLE_NONE                = 6,
        };

        enum    //아래 번호가 바뀌면 registerEffect 쪽도 바꾸어 줘야 한다.
        {
            EFFECT_REFINED_NONE,

            EFFECT_SWORD_REFINED7,
            EFFECT_SWORD_REFINED8,
            EFFECT_SWORD_REFINED9,

            EFFECT_BOW_REFINED7,
            EFFECT_BOW_REFINED8,
            EFFECT_BOW_REFINED9,

            EFFECT_FANBELL_REFINED7,
            EFFECT_FANBELL_REFINED8,
            EFFECT_FANBELL_REFINED9,

            EFFECT_SMALLSWORD_REFINED7,
            EFFECT_SMALLSWORD_REFINED8,
            EFFECT_SMALLSWORD_REFINED9,

            EFFECT_SMALLSWORD_REFINED7_LEFT,
            EFFECT_SMALLSWORD_REFINED8_LEFT,
            EFFECT_SMALLSWORD_REFINED9_LEFT,

            EFFECT_BODYARMOR_REFINED7,
            EFFECT_BODYARMOR_REFINED8,
            EFFECT_BODYARMOR_REFINED9,

            EFFECT_BODYARMOR_SPECIAL,    // 갑옷 4-2-1
            EFFECT_BODYARMOR_SPECIAL2,    // 갑옷 4-2-2

            EFFECT_REFINED_NUM,
        };
        
        enum DamageFlag
        {
            DAMAGE_NORMAL    = (1<<0),
            DAMAGE_POISON    = (1<<1),
            DAMAGE_DODGE    = (1<<2),
            DAMAGE_BLOCK    = (1<<3),
            DAMAGE_PENETRATE= (1<<4),
            DAMAGE_CRITICAL = (1<<5),
            // 반-_-사
        };

        enum
        {
            EFFECT_DUST,
            EFFECT_STUN,
            EFFECT_HIT,
            EFFECT_FLAME_ATTACK,
            EFFECT_FLAME_HIT,
            EFFECT_FLAME_ATTACH,
            EFFECT_ELECTRIC_ATTACK,
            EFFECT_ELECTRIC_HIT,
            EFFECT_ELECTRIC_ATTACH,
            EFFECT_SPAWN_APPEAR,
            EFFECT_SPAWN_DISAPPEAR,
            EFFECT_LEVELUP,
            EFFECT_SKILLUP,
            EFFECT_HPUP_RED,
            EFFECT_SPUP_BLUE,
            EFFECT_SPEEDUP_GREEN,
            EFFECT_DXUP_PURPLE,
            EFFECT_CRITICAL,
            EFFECT_PENETRATE,
            EFFECT_BLOCK,
            EFFECT_DODGE,
            EFFECT_FIRECRACKER,
            EFFECT_SPIN_TOP,
            EFFECT_WEAPON,
            EFFECT_WEAPON_END = EFFECT_WEAPON + WEAPON_NUM,
            EFFECT_AFFECT,
            EFFECT_AFFECT_GYEONGGONG = EFFECT_AFFECT + AFFECT_GYEONGGONG,
            EFFECT_AFFECT_KWAESOK = EFFECT_AFFECT + AFFECT_KWAESOK,
            EFFECT_AFFECT_END = EFFECT_AFFECT + AFFECT_NUM,
            EFFECT_EMOTICON,
            EFFECT_EMOTICON_END = EFFECT_EMOTICON + EMOTICON_NUM,
            EFFECT_SELECT,
            EFFECT_TARGET,
            EFFECT_EMPIRE,
            EFFECT_EMPIRE_END = EFFECT_EMPIRE + EMPIRE_NUM,
            EFFECT_HORSE_DUST,
            EFFECT_REFINED,
            EFFECT_REFINED_END = EFFECT_REFINED + EFFECT_REFINED_NUM,
            EFFECT_DAMAGE_TARGET,
            EFFECT_DAMAGE_NOT_TARGET,
            EFFECT_DAMAGE_SELFDAMAGE,
            EFFECT_DAMAGE_SELFDAMAGE2,
            EFFECT_DAMAGE_POISON,
            EFFECT_DAMAGE_MISS,
            EFFECT_DAMAGE_TARGETMISS,
            EFFECT_DAMAGE_CRITICAL,
            EFFECT_SUCCESS,
            EFFECT_FAIL,
            EFFECT_FR_SUCCESS,            
            EFFECT_LEVELUP_ON_14_FOR_GERMANY,    //레벨업 14일때 ( 독일전용 )
            EFFECT_LEVELUP_UNDER_15_FOR_GERMANY,//레벨업 15일때 ( 독일전용 )
            EFFECT_PERCENT_DAMAGE1,
            EFFECT_PERCENT_DAMAGE2,
            EFFECT_PERCENT_DAMAGE3,
            EFFECT_AUTO_HPUP,
            EFFECT_AUTO_SPUP,
            EFFECT_RAMADAN_RING_EQUIP,            // 초승달 반지 착용 순간에 발동하는 이펙트
            EFFECT_HALLOWEEN_CANDY_EQUIP,        // 할로윈 사탕 착용 순간에 발동하는 이펙트
            EFFECT_HAPPINESS_RING_EQUIP,                // 행복의 반지 착용 순간에 발동하는 이펙트
            EFFECT_LOVE_PENDANT_EQUIP,                // 행복의 반지 착용 순간에 발동하는 이펙트
            EFFECT_TEMP,
            EFFECT_NUM,
        };

        enum
        {
            DUEL_NONE,
            DUEL_CANNOTATTACK,
            DUEL_START,
        };

    public:
        static void DestroySystem();
        static void CreateSystem(UINT uCapacity);
        static bool RegisterEffect(UINT eEftType, const char* c_szEftAttachBone, const char* c_szEftName, bool isCache);
        static void RegisterTitleName(int iIndex, const char * c_szTitleName);
        static bool RegisterNameColor(UINT uIndex, UINT r, UINT g, UINT b);
        static bool RegisterTitleColor(UINT uIndex, UINT r, UINT g, UINT b);
        static bool ChangeEffectTexture(UINT eEftType, const char* c_szSrcFileName, const char* c_szDstFileName);

        static void SetDustGap(float fDustGap);
        static void SetHorseDustGap(float fDustGap);

        static void SetEmpireNameMode(bool isEnable);
        static const D3DXCOLOR& GetIndexedNameColor(UINT eNameColor);

    public:
        void SetMainInstance();

        void OnSelected();
        void OnUnselected();
        void OnTargeted();
        void OnUntargeted();

    protected:
        bool __IsExistMainInstance();
        bool __IsMainInstance();
        bool __MainCanSeeHiddenThing();
        float __GetBowRange();

    protected:
        DWORD    __AttachEffect(UINT eEftType);
        DWORD    __AttachEffect(char filename[128]);
        void    __DetachEffect(DWORD dwEID);

    public:        
        void CreateSpecialEffect(DWORD iEffectIndex);
        void AttachSpecialEffect(DWORD effect);

    protected:
        static std::string ms_astAffectEffectAttachBone[EFFECT_NUM];
        static DWORD ms_adwCRCAffectEffect[EFFECT_NUM];
        static float ms_fDustGap;
        static float ms_fHorseDustGap;

    public:
        CInstanceBase();
        virtual ~CInstanceBase();

        bool LessRenderOrder(CInstanceBase* pkInst);

        void MountHorse(UINT eRace);
        void DismountHorse();        

        // 스크립트용 테스트 함수. 나중에 없에자
        void SCRIPT_SetAffect(UINT eAffect, bool isVisible); 

        float CalculateDistanceSq3d(const TPixelPosition& c_rkPPosDst);

        // Instance Data
        bool IsFlyTargetObject();
        void ClearFlyTargetInstance();
        void SetFlyTargetInstance(CInstanceBase& rkInstDst);
        void AddFlyTargetInstance(CInstanceBase& rkInstDst);
        void AddFlyTargetPosition(const TPixelPosition& c_rkPPosDst);

        float GetFlyTargetDistance();

        void SetAlpha(float fAlpha);

        void DeleteBlendOut();

        void                    AttachTextTail();
        void                    DetachTextTail();
        void                    UpdateTextTailLevel(DWORD level);

        void                    RefreshTextTail();
        void                    RefreshTextTailTitle();

        bool                    Create(const SCreateData& c_rkCreateData);

        bool                    CreateDeviceObjects();
        void                    DestroyDeviceObjects();

        void                    Destroy();

        void                    Update();
        bool                    UpdateDeleting();

        void                    Transform();
        void                    Deform();
        void                    Render();
        void                    RenderTrace();
        void                    RenderToShadowMap();
        void                    RenderCollision();
        void                    RegisterBoundingSphere();

        // Temporary
        void                    GetBoundBox(D3DXVECTOR3 * vtMin, D3DXVECTOR3 * vtMax);

        void                    SetNameString(const char* c_szName, int len);
        bool                    SetRace(DWORD dwRaceIndex);
        void                    SetVirtualID(DWORD wVirtualNumber);
        void                    SetVirtualNumber(DWORD dwVirtualNumber);
        void                    SetInstanceType(int iInstanceType);
        void                    SetAlignment(short sAlignment);
        void                    SetPKMode(BYTE byPKMode);
        void                    SetKiller(bool bFlag);
        void                    SetPartyMemberFlag(bool bFlag);
        void                    SetStateFlags(DWORD dwStateFlags);

        void                    SetArmor(DWORD dwArmor);
        void                    SetShape(DWORD eShape, float fSpecular=0.0f);
        void                    SetHair(DWORD eHair);
        bool                    SetWeapon(DWORD eWeapon);
        bool                    ChangeArmor(DWORD dwArmor);
        void                    ChangeWeapon(DWORD eWeapon);
        void                    ChangeHair(DWORD eHair);
        void                    ChangeGuild(DWORD dwGuildID);
        DWORD                    GetWeaponType();

        void                    SetComboType(UINT uComboType);
        void                    SetAttackSpeed(UINT uAtkSpd);
        void                    SetMoveSpeed(UINT uMovSpd);
        void                    SetRotationSpeed(float fRotSpd);

        const char *            GetNameString();
        int                        GetInstanceType();
        DWORD                    GetPart(CRaceData::EParts part);
        DWORD                    GetShape();
        DWORD                    GetRace();
        DWORD                    GetVirtualID();
        DWORD                    GetVirtualNumber();
        DWORD                    GetEmpireID();
        DWORD                    GetGuildID();
        int                        GetAlignment();
        UINT                    GetAlignmentGrade();
        int                        GetAlignmentType();
        BYTE                    GetPKMode();
        bool                    IsKiller();
        bool                    IsPartyMember();

        void                    ActDualEmotion(CInstanceBase & rkDstInst, WORD dwMotionNumber1, WORD dwMotionNumber2);
        void                    ActEmotion(DWORD dwMotionNumber);
        void                    LevelUp();
        void                    SkillUp();
        void                    UseSpinTop();
        void                    Revive();
        void                    Stun();
        void                    Die();
        void                    Hide();
        void                    Show();

        bool                    CanAct();
        bool                    CanMove();
        bool                    CanAttack();
        bool                    CanUseSkill();
        bool                    CanFishing();
        bool                    IsConflictAlignmentInstance(CInstanceBase& rkInstVictim);
        bool                    IsAttackableInstance(CInstanceBase& rkInstVictim);
        bool                    IsTargetableInstance(CInstanceBase& rkInstVictim);
        bool                    IsPVPInstance(CInstanceBase& rkInstVictim);
        bool                    CanChangeTarget();
        bool                    CanPickInstance();
        bool                    CanViewTargetHP(CInstanceBase& rkInstVictim);


        // Movement
        BOOL                    IsGoing();
        bool                    NEW_Goto(const TPixelPosition& c_rkPPosDst, float fDstRot);
        void                    EndGoing();

        void                    SetRunMode();
        void                    SetWalkMode();

        bool                    IsAffect(UINT uAffect);
        BOOL                    IsInvisibility();
        BOOL                    IsParalysis();
        BOOL                    IsGameMaster();
        BOOL                    IsSameEmpire(CInstanceBase& rkInstDst);
        BOOL                    IsBowMode();
        BOOL                    IsHandMode();
        BOOL                    IsFishingMode();
        BOOL                    IsFishing();

        BOOL                    IsWearingDress();
        BOOL                    IsHoldingPickAxe();
        BOOL                    IsMountingHorse();
        BOOL                    IsNewMount();
        BOOL                    IsForceVisible();
        BOOL                    IsInSafe();
        BOOL                    IsEnemy();
        BOOL                    IsStone();
        BOOL                    IsResource();
        BOOL                    IsNPC();
        BOOL                    IsPC();
        BOOL                    IsPoly();
        BOOL                    IsWarp();
        BOOL                    IsGoto();
        BOOL                    IsObject();
        BOOL                    IsDoor();
        BOOL                    IsBuilding();
        BOOL                    IsWoodenDoor();
        BOOL                    IsStoneDoor();
        BOOL                    IsFlag();
        BOOL                    IsGuildWall();

        BOOL                    IsDead();
        BOOL                    IsStun();
        BOOL                    IsSleep();
        BOOL                    __IsSyncing();
        BOOL                    IsWaiting();
        BOOL                    IsWalking();
        BOOL                    IsPushing();
        BOOL                    IsAttacking();
        BOOL                    IsActingEmotion();
        BOOL                    IsAttacked();
        BOOL                    IsKnockDown();
        BOOL                    IsUsingSkill();
        BOOL                    IsUsingMovingSkill();
        BOOL                    CanCancelSkill();
        BOOL                    CanAttackHorseLevel();

#ifdef __MOVIE_MODE__
        BOOL                    IsMovieMode(); // 운영자용 완전히 안보이는거
#endif
        bool                    NEW_CanMoveToDestPixelPosition(const TPixelPosition& c_rkPPosDst);

        void                    NEW_SetAdvancingRotationFromPixelPosition(const TPixelPosition& c_rkPPosSrc, const TPixelPosition& c_rkPPosDst);
        void                    NEW_SetAdvancingRotationFromDirPixelPosition(const TPixelPosition& c_rkPPosDir);
        bool                    NEW_SetAdvancingRotationFromDestPixelPosition(const TPixelPosition& c_rkPPosDst);
        void                    SetAdvancingRotation(float fRotation);

        void                    EndWalking(float fBlendingTime=0.15f);
        void                    EndWalkingWithoutBlending();

        // Battle
        void                    SetEventHandler(CActorInstance::IEventHandler* pkEventHandler);

        void                    PushUDPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg);
        void                    PushTCPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg);
        void                    PushTCPStateExpanded(DWORD dwCmdTime, const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg, UINT uTargetVID);

        void                    NEW_Stop();

        bool                    NEW_UseSkill(UINT uSkill, UINT uMot, UINT uMotLoopCount, bool isMovingSkill);
        void                    NEW_Attack();
        void                    NEW_Attack(float fDirRot);
        void                    NEW_AttackToDestPixelPositionDirection(const TPixelPosition& c_rkPPosDst);
        bool                    NEW_AttackToDestInstanceDirection(CInstanceBase& rkInstDst, IFlyEventHandler* pkFlyHandler);
        bool                    NEW_AttackToDestInstanceDirection(CInstanceBase& rkInstDst);

        bool                    NEW_MoveToDestPixelPositionDirection(const TPixelPosition& c_rkPPosDst);
        void                    NEW_MoveToDestInstanceDirection(CInstanceBase& rkInstDst);
        void                    NEW_MoveToDirection(float fDirRot);

        float                    NEW_GetDistanceFromDirPixelPosition(const TPixelPosition& c_rkPPosDir);
        float                    NEW_GetDistanceFromDestPixelPosition(const TPixelPosition& c_rkPPosDst);
        float                    NEW_GetDistanceFromDestInstance(CInstanceBase& rkInstDst);

        float                    NEW_GetRotation();
        float                    NEW_GetRotationFromDestPixelPosition(const TPixelPosition& c_rkPPosDst);
        float                    NEW_GetRotationFromDirPixelPosition(const TPixelPosition& c_rkPPosDir);
        float                    NEW_GetRotationFromDestInstance(CInstanceBase& rkInstDst);

        float                    NEW_GetAdvancingRotationFromDirPixelPosition(const TPixelPosition& c_rkPPosDir);
        float                    NEW_GetAdvancingRotationFromDestPixelPosition(const TPixelPosition& c_rkPPosDst);
        float                    NEW_GetAdvancingRotationFromPixelPosition(const TPixelPosition& c_rkPPosSrc, const TPixelPosition& c_rkPPosDst);

        BOOL                    NEW_IsClickableDistanceDestPixelPosition(const TPixelPosition& c_rkPPosDst);
        BOOL                    NEW_IsClickableDistanceDestInstance(CInstanceBase& rkInstDst);

        bool                    NEW_GetFrontInstance(CInstanceBase ** ppoutTargetInstance, float fDistance);
        void                    NEW_GetRandomPositionInFanRange(CInstanceBase& rkInstTarget, TPixelPosition* pkPPosDst);
        bool                    NEW_GetInstanceVectorInFanRange(float fSkillDistance, CInstanceBase& rkInstTarget, std::vector<CInstanceBase*>* pkVct_pkInst);
        bool                    NEW_GetInstanceVectorInCircleRange(float fSkillDistance, std::vector<CInstanceBase*>* pkVct_pkInst);

        void                    NEW_SetOwner(DWORD dwOwnerVID);
        void                    NEW_SyncPixelPosition(long & nPPosX, long & nPPosY);
        void                    NEW_SyncCurrentPixelPosition();

        void                    NEW_SetPixelPosition(const TPixelPosition& c_rkPPosDst);

        bool                    NEW_IsLastPixelPosition();
        const TPixelPosition&    NEW_GetLastPixelPositionRef();


        // Battle
        BOOL                    isNormalAttacking();
        BOOL                    isComboAttacking();
        MOTION_KEY                GetNormalAttackIndex();
        DWORD                    GetComboIndex();
        float                    GetAttackingElapsedTime();
        void                    InputNormalAttack(float fAtkDirRot);
        void                    InputComboAttack(float fAtkDirRot);

        void                    RunNormalAttack(float fAtkDirRot);
        void                    RunComboAttack(float fAtkDirRot, DWORD wMotionIndex);

        CInstanceBase*            FindNearestVictim();
        BOOL                    CheckAdvancing();


        bool                    AvoidObject(const CGraphicObjectInstance& c_rkBGObj);        
        bool                    IsBlockObject(const CGraphicObjectInstance& c_rkBGObj);
        void                    BlockMovement();

    public:
        BOOL                    CheckAttacking(CInstanceBase& rkInstVictim);
        void                    ProcessHitting(DWORD dwMotionKey, CInstanceBase * pVictimInstance);
        void                    ProcessHitting(DWORD dwMotionKey, BYTE byEventIndex, CInstanceBase * pVictimInstance);
        void                    GetBlendingPosition(TPixelPosition * pPixelPosition);
        void                    SetBlendingPosition(const TPixelPosition & c_rPixelPosition);

        // Fishing
        void                    StartFishing(float frot);
        void                    StopFishing();
        void                    ReactFishing();
        void                    CatchSuccess();
        void                    CatchFail();
        BOOL                    GetFishingRot(int * pirot);

        // Render Mode
        void                    RestoreRenderMode();
        void                    SetAddRenderMode();
        void                    SetModulateRenderMode();
        void                    SetRenderMode(int iRenderMode);
        void                    SetAddColor(const D3DXCOLOR & c_rColor);

        // Position
        void                    SCRIPT_SetPixelPosition(float fx, float fy);
        void                    NEW_GetPixelPosition(TPixelPosition * pPixelPosition);

        // Rotation
        void                    NEW_LookAtFlyTarget();
        void                    NEW_LookAtDestInstance(CInstanceBase& rkInstDst);
        void                    NEW_LookAtDestPixelPosition(const TPixelPosition& c_rkPPosDst);

        float                    GetRotation();
        float                    GetAdvancingRotation();
        void                    SetRotation(float fRotation);
        void                    BlendRotation(float fRotation, float fBlendTime = 0.1f);

        void                    SetDirection(int dir);
        void                    BlendDirection(int dir, float blendTime);
        float                    GetDegreeFromDirection(int dir);

        // Motion
        //    Motion Deque
        BOOL                    isLock();

        void                    SetMotionMode(int iMotionMode);
        int                        GetMotionMode(DWORD dwMotionIndex);

        // Motion
        //    Pushing Motion
        void                    ResetLocalTime();
        void                    SetLoopMotion(WORD wMotion, float fBlendTime=0.1f, float fSpeedRatio=1.0f);
        void                    PushOnceMotion(WORD wMotion, float fBlendTime=0.1f, float fSpeedRatio=1.0f);
        void                    PushLoopMotion(WORD wMotion, float fBlendTime=0.1f, float fSpeedRatio=1.0f);
        void                    SetEndStopMotion();

        // Intersect
        bool                    IntersectDefendingSphere();
        bool                    IntersectBoundingBox();

        // Part
        //void                    SetParts(const WORD * c_pParts);
        void                    Refresh(DWORD dwMotIndex, bool isLoop);

        //void                    AttachEffectByID(DWORD dwParentPartIndex, const char * c_pszBoneName, DWORD dwEffectID, int dwLife = CActorInstance::EFFECT_LIFE_INFINITE ); // 수명은 ms단위입니다.
        //void                    AttachEffectByName(DWORD dwParentPartIndex, const char * c_pszBoneName, const char * c_pszEffectName, int dwLife = CActorInstance::EFFECT_LIFE_INFINITE ); // 수명은 ms단위입니다.

        float                    GetDistance(CInstanceBase * pkTargetInst);
        float                    GetDistance(const TPixelPosition & c_rPixelPosition);

        // ETC
        CActorInstance&            GetGraphicThingInstanceRef();
        CActorInstance*            GetGraphicThingInstancePtr();        
        
        bool __Background_IsWaterPixelPosition(const TPixelPosition& c_rkPPos);
        bool __Background_GetWaterHeight(const TPixelPosition& c_rkPPos, float* pfHeight);

        // 2004.07.25.myevan.이펙트 안나오는 문제
        /////////////////////////////////////////////////////////////
        void __ClearAffectFlagContainer();
        void __ClearAffects();
        /////////////////////////////////////////////////////////////

        void __SetAffect(UINT eAffect, bool isVisible);
        
        void SetAffectFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer);

        void __SetNormalAffectFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer);        
        void __SetStoneSmokeFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer);

        void SetEmoticon(UINT eEmoticon);        
        void SetFishEmoticon();
        bool IsPossibleEmoticon();

    protected:
        UINT                    __LessRenderOrder_GetLODLevel();
        void                    __Initialize();
        void                    __InitializeRotationSpeed();

        void                    __Create_SetName(const SCreateData& c_rkCreateData);
        void                    __Create_SetWarpName(const SCreateData& c_rkCreateData);

        CInstanceBase*            __GetMainInstancePtr();
        CInstanceBase*            __FindInstancePtr(DWORD dwVID);

        bool  __FindRaceType(DWORD dwRace, BYTE* pbType);
        DWORD __GetRaceType();

        bool __IsShapeAnimalWear();
        BOOL __IsChangableWeapon(int iWeaponID);

        void __EnableSkipCollision();
        void __DisableSkipCollision();

        void __ClearMainInstance();

        void __Shaman_SetParalysis(bool isParalysis);
        void __Warrior_SetGeomgyeongAffect(bool isVisible);
        void __Assassin_SetEunhyeongAffect(bool isVisible);
        void __SetReviveInvisibilityAffect(bool isVisible);

        BOOL __CanProcessNetworkStatePacket();
        
        bool __IsInDustRange();

        // Emotion
        void __ProcessFunctionEmotion(DWORD dwMotionNumber, DWORD dwTargetVID, const TPixelPosition & c_rkPosDst);
        void __EnableChangingTCPState();
        void __DisableChangingTCPState();
        BOOL __IsEnableTCPProcess(UINT eCurFunc);

        // 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경
        bool __CanRender();
        bool __IsInViewFrustum();

        // HORSE
        void __AttachHorseSaddle();
        void __DetachHorseSaddle();
        
        struct SHORSE
        {
            bool m_isMounting;
            CActorInstance* m_pkActor;
            
            SHORSE();            
            ~SHORSE();
            
            void Destroy();
            void Create(const TPixelPosition& c_rkPPos, UINT eRace, UINT eHitEffect);
            
            void SetAttackSpeed(UINT uAtkSpd);
            void SetMoveSpeed(UINT uMovSpd);
            void Deform();
            void Render();
            CActorInstance& GetActorRef();
            CActorInstance* GetActorPtr();

            bool IsMounting();
            bool CanAttack();
            bool CanUseSkill();

            UINT GetLevel();
            bool IsNewMount();

            void __Initialize();
        } m_kHorse;


    protected:
        // Blend Mode
        void                    __SetBlendRenderingMode();
        void                    __SetAlphaValue(float fAlpha);
        float                    __GetAlphaValue();

        void                    __ComboProcess();
        void                    MovementProcess();
        void                    TodoProcess();
        void                    StateProcess();
        void                    AttackProcess();

        void                    StartWalking();
        float                    GetLocalTime();

        void                    RefreshState(DWORD dwMotIndex, bool isLoop);
        void                    RefreshActorInstance();

    protected:
        void                    OnSyncing();
        void                    OnWaiting();
        void                    OnMoving();

        void                    NEW_SetCurPixelPosition(const TPixelPosition& c_rkPPosDst);
        void                    NEW_SetSrcPixelPosition(const TPixelPosition& c_rkPPosDst);
        void                    NEW_SetDstPixelPosition(const TPixelPosition& c_rkPPosDst);
        void                    NEW_SetDstPixelPositionZ(FLOAT z);

        const TPixelPosition&    NEW_GetCurPixelPositionRef();
        const TPixelPosition&    NEW_GetSrcPixelPositionRef();

    public:
        const TPixelPosition&    NEW_GetDstPixelPositionRef();
        
    protected:
        BOOL m_isTextTail;        

        // Instance Data
        std::string                m_stName;

        DWORD                    m_awPart[CRaceData::PART_MAX_NUM];

        DWORD                    m_dwLevel;
        DWORD                    m_dwEmpireID;
        DWORD                    m_dwGuildID;

    protected:        
        CAffectFlagContainer    m_kAffectFlagContainer;
        DWORD                    m_adwCRCAffectEffect[AFFECT_NUM];
        
        UINT    __GetRefinedEffect(CItemData* pItem);        
        void    __ClearWeaponRefineEffect();
        void    __ClearArmorRefineEffect();

    protected:
        void __AttachSelectEffect();
        void __DetachSelectEffect();

        void __AttachTargetEffect();
        void __DetachTargetEffect();

        void __AttachEmpireEffect(DWORD eEmpire);

    protected:
        struct SEffectContainer
        {
            typedef std::map<DWORD, DWORD> Dict;
            Dict m_kDct_dwEftID;
        } m_kEffectContainer;

        void __EffectContainer_Initialize();
        void __EffectContainer_Destroy();

        DWORD __EffectContainer_AttachEffect(DWORD eEffect);
        void __EffectContainer_DetachEffect(DWORD eEffect);

        SEffectContainer::Dict& __EffectContainer_GetDict();

    protected:
        struct SStoneSmoke 
        {
            DWORD m_dwEftID;
        } m_kStoneSmoke;

        void __StoneSmoke_Inialize();
        void __StoneSmoke_Destroy();
        void __StoneSmoke_Create(DWORD eSmoke);


    protected:
        // Emoticon
        //DWORD                    m_adwCRCEmoticonEffect[EMOTICON_NUM];

        BYTE                    m_eType;
        BYTE                    m_eRaceType;
        DWORD                    m_eShape;
        DWORD                    m_dwRace;
        DWORD                    m_dwVirtualNumber;
        short                    m_sAlignment;
        BYTE                    m_byPKMode;
        bool                    m_isKiller;
        bool                    m_isPartyMember;

        // Movement
        int                        m_iRotatingDirection;

        DWORD                    m_dwAdvActorVID;
        DWORD                    m_dwLastDmgActorVID;

        LONG                    m_nAverageNetworkGap;
        DWORD                    m_dwNextUpdateHeightTime;

        bool                    m_isGoing;

        TPixelPosition            m_kPPosDust;

        DWORD                    m_dwLastComboIndex;

        DWORD                    m_swordRefineEffectRight;
        DWORD                    m_swordRefineEffectLeft;
        DWORD                    m_armorRefineEffect;

        struct SMoveAfterFunc
        {
            UINT eFunc;
            UINT uArg;

            // For Emotion Function
            UINT uArgExpanded;
            TPixelPosition kPosDst;
        };

        SMoveAfterFunc m_kMovAfterFunc;

        float m_fDstRot;
        float m_fAtkPosTime;
        float m_fRotSpd;
        float m_fMaxRotSpd;

        BOOL m_bEnableTCPState;

        // Graphic Instance
        CActorInstance m_GraphicThingInstance;


    protected:
        struct SCommand
        {
            DWORD    m_dwChkTime;
            DWORD    m_dwCmdTime;
            float    m_fDstRot;
            UINT     m_eFunc;
            UINT     m_uArg;
            UINT    m_uTargetVID;
            TPixelPosition m_kPPosDst;
        };

        typedef std::list<SCommand> CommandQueue;

        DWORD        m_dwBaseChkTime;
        DWORD        m_dwBaseCmdTime;

        DWORD        m_dwSkipTime;

        CommandQueue m_kQue_kCmdNew;

        BOOL        m_bDamageEffectType;

        struct SEffectDamage
        {
            DWORD damage;
            BYTE flag;
            BOOL bSelf;
            BOOL bTarget;
        };

        typedef std::list<SEffectDamage> CommandDamageQueue;
        CommandDamageQueue m_DamageQueue;

        void ProcessDamage();

    public:
        void AddDamageEffect(DWORD damage,BYTE flag,BOOL bSelf,BOOL bTarget);

    protected:
        struct SWarrior
        {
            DWORD m_dwGeomgyeongEffect;
        };

        SWarrior m_kWarrior;

        void __Warrior_Initialize();

    public:
        static void ClearPVPKeySystem();

        static void InsertPVPKey(DWORD dwSrcVID, DWORD dwDstVID);
        static void InsertPVPReadyKey(DWORD dwSrcVID, DWORD dwDstVID);
        static void RemovePVPKey(DWORD dwSrcVID, DWORD dwDstVID);

        static void InsertGVGKey(DWORD dwSrcGuildVID, DWORD dwDstGuildVID);
        static void RemoveGVGKey(DWORD dwSrcGuildVID, DWORD dwDstGuildVID);

        static void InsertDUELKey(DWORD dwSrcVID, DWORD dwDstVID);

        UINT GetNameColorIndex();

        const D3DXCOLOR& GetNameColor();
        const D3DXCOLOR& GetTitleColor();

    protected:
        static DWORD __GetPVPKey(DWORD dwSrcVID, DWORD dwDstVID);
        static bool __FindPVPKey(DWORD dwSrcVID, DWORD dwDstVID);
        static bool __FindPVPReadyKey(DWORD dwSrcVID, DWORD dwDstVID);
        static bool __FindGVGKey(DWORD dwSrcGuildID, DWORD dwDstGuildID);
        static bool __FindDUELKey(DWORD dwSrcGuildID, DWORD dwDstGuildID);

    protected:
        CActorInstance::IEventHandler* GetEventHandlerPtr();
        CActorInstance::IEventHandler& GetEventHandlerRef();

    protected:
        static float __GetBackgroundHeight(float x, float y);
        static DWORD __GetShadowMapColor(float x, float y);

    public:
        static void ResetPerformanceCounter();
        static void GetInfo(std::string* pstInfo);

    public:
        static CInstanceBase* New();
        static void Delete(CInstanceBase* pkInst);

        static CDynamicPool<CInstanceBase>    ms_kPool;

    protected:
        static DWORD ms_dwUpdateCounter;
        static DWORD ms_dwRenderCounter;
        static DWORD ms_dwDeformCounter;

    public:        
        DWORD                    GetDuelMode();
        void                    SetDuelMode(DWORD type);
    protected:
        DWORD                    m_dwDuelMode;
        DWORD                    m_dwEmoticonTime;
};

inline int RaceToJob(int race)
{
    switch (race)
    {
        case 0:
        case 4:
            return 0;
        case 1:
        case 5:
            return 1;
        case 2:
        case 6:
            return 2;
        case 3:
        case 7:
            return 3;
        case 8:
            return 4;
        default:
            return 0;
    }
    return 0;
}

inline int RaceToSex(int race)
{
    switch (race)
    {
        case 0:
        case 2:
        case 5:
        case 7:
        case 8:
            return 1;
        case 1:
        case 3:
        case 4:
        case 6:
            return 0;

    }
    return 0;
}
 

Spoiler

affect.h 

 

 

#ifndef __INC_AFFECT_H
#define __INC_AFFECT_H

class CAffect
{
    public:
        DWORD    dwType;
        BYTE    bApplyOn;
        long    lApplyValue;
        DWORD   dwFlag;
        long    lDuration;
        long    lSPCost;

        static CAffect* Acquire();
        static void Release(CAffect* p);
};

enum EAffectTypes
{
    AFFECT_NONE,

    AFFECT_MOV_SPEED        = 200,
    AFFECT_ATT_SPEED,
    AFFECT_ATT_GRADE,
    AFFECT_INVISIBILITY,
    AFFECT_STR,
    AFFECT_DEX,            // 205
    AFFECT_CON,    
    AFFECT_INT,    
    AFFECT_FISH_MIND_PILL,

    AFFECT_POISON,
    AFFECT_STUN,        // 210
    AFFECT_SLOW,
    AFFECT_DUNGEON_READY,
    AFFECT_DUNGEON_UNIQUE,

    AFFECT_BUILDING,
    AFFECT_REVIVE_INVISIBLE,    // 215
    AFFECT_FIRE,
    AFFECT_CAST_SPEED,
    AFFECT_HP_RECOVER_CONTINUE,
    AFFECT_SP_RECOVER_CONTINUE,

    AFFECT_POLYMORPH,        // 220
    AFFECT_MOUNT,

    AFFECT_WAR_FLAG,        // 222

    AFFECT_BLOCK_CHAT,        // 223
    AFFECT_CHINA_FIREWORK,

    AFFECT_BOW_DISTANCE,    // 225
    AFFECT_DEF_GRADE,        // 226

    AFFECT_PREMIUM_START    = 500,
    AFFECT_EXP_BONUS        = 500,    // 경험의 반지
    AFFECT_ITEM_BONUS        = 501,    // 도둑의 장갑
    AFFECT_SAFEBOX        = 502,  // PREMIUM_SAFEBOX,
    AFFECT_AUTOLOOT        = 503,    // PREMIUM_AUTOLOOT,
    AFFECT_FISH_MIND        = 504,    // PREMIUM_FISH_MIND,
    AFFECT_MARRIAGE_FAST    = 505,    // 원앙의 깃털
    AFFECT_GOLD_BONUS        = 506,    // 돈 드롭확률 50%증가
    AFFECT_PREMIUM_END        = 509,

    AFFECT_MALL            = 510,    // 몰 아이템 에펙트
    AFFECT_NO_DEATH_PENALTY    = 511,    // 용신의 가호 (경험치가 패널티를 한번 막아준다)
    AFFECT_SKILL_BOOK_BONUS    = 512,    // 선인의 교훈 (책 수련 성공 확률이 50% 증가)
    AFFECT_SKILL_NO_BOOK_DELAY    = 513,    // 주안술서

    AFFECT_HAIR    = 514,    // 헤어 효과
    AFFECT_COLLECT = 515, //수집퀘스트 
    AFFECT_EXP_BONUS_EURO_FREE = 516, // 경험의 반지 (유럽 버전 14 레벨 이하 기본 효과)
    AFFECT_EXP_BONUS_EURO_FREE_UNDER_15 = 517,
    AFFECT_UNIQUE_ABILITY = 518,

    AFFECT_CUBE_1,
    AFFECT_CUBE_2,
    AFFECT_CUBE_3,
    AFFECT_CUBE_4,
    AFFECT_CUBE_5,
    AFFECT_CUBE_6,
    AFFECT_CUBE_7,
    AFFECT_CUBE_8,
    AFFECT_CUBE_9,
    AFFECT_CUBE_10,
    AFFECT_CUBE_11,
    AFFECT_CUBE_12,

    AFFECT_BLEND,

    AFFECT_HORSE_NAME,
    AFFECT_MOUNT_BONUS,

    AFFECT_AUTO_HP_RECOVERY = 534,
    AFFECT_AUTO_SP_RECOVERY = 535,

    AFFECT_DRAGON_SOUL_QUALIFIED = 540,
    AFFECT_DRAGON_SOUL_DECK_0 = 541,
    AFFECT_DRAGON_SOUL_DECK_1 = 542,


    AFFECT_RAMADAN_ABILITY = 300,
    AFFECT_RAMADAN_RING       = 301,

    AFFECT_NOG_ABILITY = 302,
    AFFECT_HOLLY_STONE_POWER = 303,
    AFFECT_BLEEDING = 304,

    AFFECT_QUEST_START_IDX = 1000
};

enum EAffectBits
{   
    AFF_NONE,

    AFF_YMIR,
    AFF_INVISIBILITY,
    AFF_SPAWN,

    AFF_POISON,
    AFF_SLOW,
    AFF_STUN,

    AFF_DUNGEON_READY,        // 던전에서 준비 상태
    AFF_DUNGEON_UNIQUE,        // 던전 유니크 (클라이언트에서 컬링되지않음)

    AFF_BUILDING_CONSTRUCTION_SMALL,
    AFF_BUILDING_CONSTRUCTION_LARGE,
    AFF_BUILDING_UPGRADE,

    AFF_MOV_SPEED_POTION,
    AFF_ATT_SPEED_POTION,

    AFF_FISH_MIND,
    AFF_JEOKRANG,
    AFF_CHEONGRANG,
    AFF_JEONGWIHON,        // 전귀혼
    AFF_GEOMGYEONG,        // 검경
    AFF_CHEONGEUN,        // 천근추
    AFF_GYEONGGONG,        // 경공술
    AFF_EUNHYUNG,        // 은형법
    AFF_GWIGUM,            // 귀검
    AFF_TERROR,            // 공포
    AFF_JUMAGAP,        // 주마갑
    AFF_HOSIN,            // 호신
    AFF_BOHO,            // 보호
    AFF_KWAESOK,        // 쾌속
    AFF_MANASHIELD,        // 마나쉴드
    AFF_MUYEONG,        // 무영진 affect
    AFF_REVIVE_INVISIBLE,    // 부활시 잠시동안 무적
    AFF_FIRE,            // 지속 불 데미지
    AFF_GICHEON,        // 기천대공
    AFF_JEUNGRYEOK,        // 증력술
    AFF_TANHWAN_DASH,        // 탄환격용 달리기어펙트
    AFF_PABEOP,            // 파법술
    AFF_CHEONGEUN_WITH_FALL,    // 천근추
    AFF_POLYMORPH,
    AFF_WAR_FLAG1,
    AFF_WAR_FLAG2,
    AFF_WAR_FLAG3,

    AFF_CHINA_FIREWORK,
    AFF_HAIR,    // 헤어
    AFF_GERMANY, // 독일 
    AFF_BLEEDING,

    AFF_BITS_MAX
};

extern void SendAffectAddPacket(LPDESC d, CAffect * pkAff);

// AFFECT_DURATION_BUG_FIX
enum AffectVariable
{
    // Affect가 무한대로 들어가 있어야 할 경우 사용.
    // 시간을 계속 줄이기 때문에 매우 큰값으로 무한대를 에뮬레이션함.
    //// 24비트는 적으므로 25비트를 사용.
    // ... 25비트 사용한다고 해놓고선 29bit 사용하고 있는 엄청난 주석이란...
    // collect quest에서 무한 시간을 60년으로 사용하고 있으므로, 여기도 60년으로 하자.

    INFINITE_AFFECT_DURATION = 60 * 365 * 24 * 60 * 60
};
// END_AFFECT_DURATION_BUG_FIX

#endif
 

Where can I find a bug? To me it seems to be okay.

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

Announcements



×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.