Jump to content

Kid0

Premium
  • Posts

    81
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by Kid0

  1. I have a problem with kenn's offline shop.

    I open my offline shop, the item is send in tabel (navicat) but i can't to open to view shop :

    c4ee0087124ebe6d1daabb838a0555eb.gif

     

    The problem is from source game but idc from what function.

     

    I pay to fix the bug! P.M!
     

     

  2. Game.core :

    bd0e35eaddedc1f87ff1d5e6f4f4fa71.png

     

    Error sysser :

     

    SYSERR: Dec 11 19:41:03.7141 :: GetMoveMotionSpeed: cannot find motion (name Nemere race 6191 mode 0)
    SYSERR: Dec 11 19:41:03.7509 :: GetMoveMotionSpeed: cannot find motion (name Nemere race 6191 mode 0)
    SYSERR: Dec 11 19:41:03.206517 :: GetMoveMotionSpeed: cannot find motion (name Nemere race 6191 mode 0)
    SYSERR: Dec 11 19:41:11.555927 :: GetMoveMotionSpeed: cannot find motion (name Nemere race 6191 mode 0)
    SYSERR: Dec 11 19:41:11.556067 :: GetMoveMotionSpeed: cannot find motion (name Nemere race 6191 mode 0)
    SYSERR: Dec 11 19:41:12.75712 :: GetMoveMotionSpeed: cannot find motion (name Nemere race 6191 mode 0)
    SYSERR: Dec 11 19:41:12.235605 :: GetMoveMotionSpeed: cannot find motion (name Nemere race 6191 mode 0)
    SYSERR: Dec 11 19:41:12.875583 :: GetMoveMotionSpeed: cannot find motion (name Nemere race 6191 mode 0)
    SYSERR: Dec 11 19:41:13.986649 :: GetMoveMotionSpeed: cannot find motion (name Nemere race 6191 mode 0)
    SYSERR: Dec 11 19:41:20.135145 :: GetMoveMotionSpeed: cannot find motion (name Nemere race 6191 mode 0)
    SYSERR: Dec 11 19:41:20.135213 :: GetMoveMotionSpeed: cannot find motion (name Nemere race 6191 mode 0)
    SYSERR: Dec 11 19:41:20.988499 :: GetMoveMotionSpeed: cannot find motion (name Nemere race 6191 mode 0)
    SYSERR: Dec 11 19:41:22.266324 :: GetMoveMotionSpeed: cannot find motion (name Nemere race 6191 mode 0)
    SYSERR: Dec 11 19:41:22.425546 :: GetMoveMotionSpeed: cannot find motion (name Nemere race 6191 mode 0)
    SYSERR: Dec 11 19:41:22.746354 :: GetMoveMotionSpeed: cannot find motion (name Nemere race 6191 mode 0)
    SYSERR: Dec 11 19:59:06.65240 :: Entergame: !GetMovablePosition (name Rau 520800x182000 map 240 changed to 529000x180100)
    SYSERR: Dec 11 20:00:08.565392 :: Entergame: !GetMovablePosition (name l0K 520800x182000 map 240 changed to 529000x180100)
    SYSERR: Dec 11 20:01:56.955278 :: Entergame: !GetMovablePosition (name lIonuTl 520800x182000 map 240 changed to 529000x180100)
    SYSERR: Dec 11 20:02:12.886144 :: SetDungeon: lIonuTl is trying to reassigning dungeon (current 0x32063f00, new party 0x32063f00)
    SYSERR: Dec 11 20:02:13.926585 :: SetDungeon: Rau is trying to reassigning dungeon (current 0x32063f00, new party 0x32063f00)
    SYSERR: Dec 11 20:02:14.246712 :: SetDungeon: l0K is trying to reassigning dungeon (current 0x32063f00, new party 0x32063f00)
    SYSERR: Dec 11 20:05:24.495721 :: Click: CQuestManager::Click(pid=1192, target_npc_name=Rau - Spider Jr.) - NOT EXIST NPC RACE VNUM[34045]
    SYSERR: Dec 11 20:06:03.652124 :: pid_init: 

  3. #include "StdAfx.h"
    #include "InstanceBase.h"
    #include "PythonBackground.h"
    #include "PythonNonPlayer.h"
    #include "PythonPlayer.h"
    #include "PythonCharacterManager.h"
    #include "AbstractPlayer.h"
    #include "AbstractApplication.h"
    #include "packet.h"

    #include "../eterlib/StateManager.h"
    #include "../gamelib/ItemManager.h"
    #include "Locale_inc.h"

    #include "PythonShining.h"
    #include "PythonMounts.h"

    BOOL HAIR_COLOR_ENABLE=FALSE;
    BOOL USE_ARMOR_SPECULAR=FALSE;
    BOOL RIDE_HORSE_ENABLE=TRUE;
    const float c_fDefaultRotationSpeed = 1200.0f;
    const float c_fDefaultHorseRotationSpeed = 300.0f;

    TMapShiningVectorByVNum g_mapShiningVectorByVNum;
    TMapMountLevelByVNum g_mapMountLevelByVNum;

    bool IsWall(unsigned race)
    {
        switch (race)
        {
            case 14201:
            case 14202:
            case 14203:
            case 14204:
                return true;
                break;
        }
        return false;
    }

    //////////////////////////////////////////////////////////////////////////////////////


    CInstanceBase::SHORSE::SHORSE()
    {
        __Initialize();
    }

    CInstanceBase::SHORSE::~SHORSE()
    {
        assert(m_pkActor==NULL);
    }

    void CInstanceBase::SHORSE::__Initialize()
    {
        m_isMounting=false;
        m_pkActor=NULL;
    }

    void CInstanceBase::SHORSE::SetAttackSpeed(UINT uAtkSpd)
    {
        if (!IsMounting())
            return;

        CActorInstance& rkActor=GetActorRef();
        rkActor.SetAttackSpeed(uAtkSpd/100.0f);    
    }

    void CInstanceBase::SHORSE::SetMoveSpeed(UINT uMovSpd)
    {    
        if (!IsMounting())
            return;

        CActorInstance& rkActor=GetActorRef();
        rkActor.SetMoveSpeed(uMovSpd/100.0f);
    }

    void CInstanceBase::SHORSE::Create(const TPixelPosition& c_rkPPos, UINT eRace, UINT eHitEffect)
    {
        assert(NULL==m_pkActor && "CInstanceBase::SHORSE::Create - ALREADY MOUNT");

        m_pkActor=new CActorInstance;

        CActorInstance& rkActor=GetActorRef();
        rkActor.SetEventHandler(CActorInstance::IEventHandler::GetEmptyPtr());
        if (!rkActor.SetRace(eRace))
        {
            delete m_pkActor;
            m_pkActor=NULL;
            return;
        }

        rkActor.SetShape(0);
        rkActor.SetBattleHitEffect(eHitEffect);
        rkActor.SetAlphaValue(0.0f);
        rkActor.BlendAlphaValue(1.0f, 0.5f);
        rkActor.SetMoveSpeed(1.0f);
        rkActor.SetAttackSpeed(1.0f);
        rkActor.SetMotionMode(CRaceMotionData::MODE_GENERAL);
        rkActor.Stop();
        rkActor.RefreshActorInstance();

        rkActor.SetCurPixelPosition(c_rkPPos);

        m_isMounting=true;
    }

    void CInstanceBase::SHORSE::Destroy()
    {
        if (m_pkActor)
        {
            m_pkActor->Destroy();
            delete m_pkActor;    
        }    

        __Initialize();
    }

    CActorInstance& CInstanceBase::SHORSE::GetActorRef()
    {
        assert(NULL!=m_pkActor && "CInstanceBase::SHORSE::GetActorRef");
        return *m_pkActor;
    }

    CActorInstance* CInstanceBase::SHORSE::GetActorPtr()
    {
        return m_pkActor;
    }

    UINT CInstanceBase::SHORSE::GetLevel()
    {
        if (m_pkActor)
        {
            DWORD mount = m_pkActor->GetRace();
            
            TMapMountLevelByVNum::iterator it = g_mapMountLevelByVNum.find(mount);
            if (it == g_mapMountLevelByVNum.end())
                return 0;

            return it->second;
        }
        return 0;
    }

    bool CInstanceBase::SHORSE::CanUseSkill()
    {
        // ¸¶»ó½ºÅ³Àº ¸»ÀÇ ·¹º§ÀÌ 3 ÀÌ»óÀ̾î¾ß¸¸ ÇÔ.
        if (IsMounting())
            return 2 < GetLevel();

        return true;
    }

    bool CInstanceBase::SHORSE::CanAttack()
    {
        if (IsMounting())
            if (GetLevel()<=1)
                return false;

        return true;
    }
                
    bool CInstanceBase::SHORSE::IsMounting()
    {
        return m_isMounting;
    }

    void CInstanceBase::SHORSE::Deform()
    {
        if (!IsMounting())
            return;

        CActorInstance& rkActor=GetActorRef();
        rkActor.INSTANCEBASE_Deform();
    }

    void CInstanceBase::SHORSE::Render()
    {
        if (!IsMounting())
            return;

        CActorInstance& rkActor=GetActorRef();
        rkActor.Render();
    }

    void CInstanceBase::__AttachHorseSaddle()
    {
        if (!IsMountingHorse())
            return;
        m_kHorse.m_pkActor->AttachModelInstance(CRaceData::PART_MAIN, "saddle", m_GraphicThingInstance, CRaceData::PART_MAIN);
    }

    void CInstanceBase::__DetachHorseSaddle()
    {
        if (!IsMountingHorse())
            return;
        m_kHorse.m_pkActor->DetachModelInstance(CRaceData::PART_MAIN, m_GraphicThingInstance, CRaceData::PART_MAIN);
    }

    //////////////////////////////////////////////////////////////////////////////////////

    void CInstanceBase::BlockMovement()
    {
        m_GraphicThingInstance.BlockMovement();
    }

    bool CInstanceBase::IsBlockObject(const CGraphicObjectInstance& c_rkBGObj)
    {
        return m_GraphicThingInstance.IsBlockObject(c_rkBGObj);
    }

    bool CInstanceBase::AvoidObject(const CGraphicObjectInstance& c_rkBGObj)
    {
        return m_GraphicThingInstance.AvoidObject(c_rkBGObj);
    }

    ///////////////////////////////////////////////////////////////////////////////////

    bool __ArmorVnumToShape(int iVnum, DWORD * pdwShape)
    {
        *pdwShape = iVnum;

        /////////////////////////////////////////

        if (0 == iVnum || 1 == iVnum)
            return false;

        if (!USE_ARMOR_SPECULAR)
            return false;

        CItemData * pItemData;
        if (!CItemManager::Instance().GetItemDataPointer(iVnum, &pItemData))
            return false;

        enum
        {
            SHAPE_VALUE_SLOT_INDEX = 3,
        };

        *pdwShape = pItemData->GetValue(SHAPE_VALUE_SLOT_INDEX);

        return true;
    }

    // 2004.07.05.myevan.±Ã½Åź¿µ ³¢ÀÌ´Â ¹®Á¦
    class CActorInstanceBackground : public IBackground
    {
        public:
            CActorInstanceBackground() {}
            virtual ~CActorInstanceBackground() {}
            bool IsBlock(int x, int y)
            {
                CPythonBackground& rkBG=CPythonBackground::Instance();
                return rkBG.isAttrOn(x, y, CTerrainImpl::ATTRIBUTE_BLOCK);
            }
    };

    static CActorInstanceBackground gs_kActorInstBG;

    bool CInstanceBase::LessRenderOrder(CInstanceBase* pkInst)
    {
        int nMainAlpha=(__GetAlphaValue() < 1.0f) ? 1 : 0;
        int nTestAlpha=(pkInst->__GetAlphaValue() < 1.0f) ? 1 : 0;
        if (nMainAlpha < nTestAlpha)
            return true;
        if (nMainAlpha > nTestAlpha)
            return false;

        if (GetRace()<pkInst->GetRace())
            return true;
        if (GetRace()>pkInst->GetRace())
            return false;

        if (GetShape()<pkInst->GetShape())
            return true;

        if (GetShape()>pkInst->GetShape())
            return false;

        UINT uLeftLODLevel=__LessRenderOrder_GetLODLevel();
        UINT uRightLODLevel=pkInst->__LessRenderOrder_GetLODLevel();
        if (uLeftLODLevel<uRightLODLevel)
            return true;
        if (uLeftLODLevel>uRightLODLevel)
            return false;

        if (m_awPart[CRaceData::PART_WEAPON]<pkInst->m_awPart[CRaceData::PART_WEAPON])
            return true;

        return false;
    }

    UINT CInstanceBase::__LessRenderOrder_GetLODLevel()
    {
        CGrannyLODController* pLODCtrl=m_GraphicThingInstance.GetLODControllerPointer(0);
        if (!pLODCtrl)
            return 0;

        return pLODCtrl->GetLODLevel();
    }

    bool CInstanceBase::__Background_GetWaterHeight(const TPixelPosition& c_rkPPos, float* pfHeight)
    {
        long lHeight;
        if (!CPythonBackground::Instance().GetWaterHeight(int(c_rkPPos.x), int(c_rkPPos.y), &lHeight))
            return false;

        *pfHeight = float(lHeight);

        return true;
    }

    bool CInstanceBase::__Background_IsWaterPixelPosition(const TPixelPosition& c_rkPPos)
    {
        return CPythonBackground::Instance().isAttrOn(c_rkPPos.x, c_rkPPos.y, CTerrainImpl::ATTRIBUTE_WATER);
    }

    const float PC_DUST_RANGE = 2000.0f;
    const float NPC_DUST_RANGE = 1000.0f;

    DWORD CInstanceBase::ms_dwUpdateCounter=0;
    DWORD CInstanceBase::ms_dwRenderCounter=0;
    DWORD CInstanceBase::ms_dwDeformCounter=0;

    CDynamicPool<CInstanceBase> CInstanceBase::ms_kPool;

    bool CInstanceBase::__IsInDustRange()
    {
        if (!__IsExistMainInstance())
            return false;

        CInstanceBase* pkInstMain=__GetMainInstancePtr();

        float fDistance=NEW_GetDistanceFromDestInstance(*pkInstMain);

        if (IsPC())
        {
            if (fDistance<=PC_DUST_RANGE)
                return true;
        }

        if (fDistance<=NPC_DUST_RANGE)
            return true;

        return false;
    }

    void CInstanceBase::__EnableSkipCollision()
    {
        if (__IsMainInstance())
        {
            TraceError("CInstanceBase::__EnableSkipCollision - ÀÚ½ÅÀº Ãæµ¹°Ë»ç½ºÅµÀÌ µÇ¸é ¾ÈµÈ´Ù!!");
            return;
        }
        m_GraphicThingInstance.EnableSkipCollision();
    }

    void CInstanceBase::__DisableSkipCollision()
    {
        m_GraphicThingInstance.DisableSkipCollision();
    }

    DWORD CInstanceBase::__GetShadowMapColor(float x, float y)
    {
        CPythonBackground& rkBG=CPythonBackground::Instance();
        return rkBG.GetShadowMapColor(x, y);
    }

    float CInstanceBase::__GetBackgroundHeight(float x, float y)
    {
        CPythonBackground& rkBG=CPythonBackground::Instance();
        return rkBG.GetHeight(x, y);
    }

    #ifdef __MOVIE_MODE__

    BOOL CInstanceBase::IsMovieMode()
    {
        if (IsAffect(AFFECT_INVISIBILITY))
            return true;

        return false;
    }

    #endif

    BOOL CInstanceBase::IsInvisibility()
    {
        if (IsAffect(AFFECT_INVISIBILITY))
            return true;

        return false;
    }

    BOOL CInstanceBase::IsParalysis()
    {
        return m_GraphicThingInstance.IsParalysis();
    }

    BOOL CInstanceBase::IsGameMaster()
    {
        if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR))
            return true;
        return false;
    }

    BOOL CInstanceBase::IsVIP()
    {
        if (m_kAffectFlagContainer.IsSet(AFFECT_VIP))
            return true;
        return false;

    BOOL CInstanceBase::IsSameEmpire(CInstanceBase& rkInstDst)
    {
        if (0 == rkInstDst.m_dwEmpireID)
            return TRUE;

        if (IsGameMaster())
            return TRUE;

        if (IsVIP())
            return TRUE; 
        
        if (rkInstDst.IsGameMaster())
            return TRUE;
        
        if (rkInstDst.IsVIP())
            return TRUE; 
        
        if (rkInstDst.m_dwEmpireID==m_dwEmpireID)
            return TRUE;

        return FALSE;
    }

    DWORD CInstanceBase::GetEmpireID()
    {
        return m_dwEmpireID;
    }

    DWORD CInstanceBase::GetGuildID()
    {
        return m_dwGuildID;
    }

    int CInstanceBase::GetAlignment()
    {
        return m_sAlignment;
    }

    UINT CInstanceBase::GetAlignmentGrade()
    {
        if (m_sAlignment >= 12000)
            return 0;
        else if (m_sAlignment >= 8000)
            return 1;
        else if (m_sAlignment >= 4000)
            return 2;
        else if (m_sAlignment >= 1000)
            return 3;
        else if (m_sAlignment >= 0)
            return 4;
        else if (m_sAlignment > -4000)
            return 5;
        else if (m_sAlignment > -8000)
            return 6;
        else if (m_sAlignment > -12000)
            return 7;

        return 8;
    }

    int CInstanceBase::GetAlignmentType()
    {
        switch (GetAlignmentGrade())
        {
            case 0:
            case 1:
            case 2:
            case 3:
            {
                return ALIGNMENT_TYPE_WHITE;
                break;
            }

            case 5:
            case 6:
            case 7:
            case 8:
            {
                return ALIGNMENT_TYPE_DARK;
                break;
            }
        }

        return ALIGNMENT_TYPE_NORMAL;
    }

    BYTE CInstanceBase::GetPKMode()
    {
        return m_byPKMode;
    }

    bool CInstanceBase::IsKiller()
    {
        return m_isKiller;
    }

    bool CInstanceBase::IsPartyMember()
    {
        return m_isPartyMember;
    }

    BOOL CInstanceBase::IsInSafe()
    {
        const TPixelPosition& c_rkPPosCur=m_GraphicThingInstance.NEW_GetCurPixelPositionRef();
        if (CPythonBackground::Instance().isAttrOn(c_rkPPosCur.x, c_rkPPosCur.y, CTerrainImpl::ATTRIBUTE_BANPK))
            return TRUE;

        return FALSE;
    }

    float CInstanceBase::CalculateDistanceSq3d(const TPixelPosition& c_rkPPosDst)
    {
        const TPixelPosition& c_rkPPosSrc=m_GraphicThingInstance.NEW_GetCurPixelPositionRef();
        return SPixelPosition_CalculateDistanceSq3d(c_rkPPosSrc, c_rkPPosDst);
    }

    void CInstanceBase::OnSelected()
    {
    #ifdef __MOVIE_MODE__
        if (!__IsExistMainInstance())
            return;
    #endif

        if (IsStoneDoor())
            return;

        if (IsDead())
            return;

        if (IsEnemy())
        {
            __AttachSelectEffectMonster();
        }

        if (IsPC() || IsNPC())
        {
            if (m_dwEmpireID == 1) // Shinshoo
            {
                __AttachSelectEffectShinsoo();
            }
            else if (m_dwEmpireID == 2) // chunjo
            {
                __AttachSelectEffectChunjo();
            }
            else if (m_dwEmpireID == 3)//Jinnos
            {
                __AttachSelectEffectJinnos();
            }
            else
            {
                __AttachSelectEffectMonster();
            }
        }
    }

    void CInstanceBase::OnUnselected()
    {
        //__DetachSelectEffect();


        if (IsPC() || IsNPC())
        {
            if (m_dwEmpireID == 1) //Shinsoo
            {
                __DetachSelectEffectShinsoo();
            }
            else if (m_dwEmpireID == 2)//Chunjo
            {
                __DetachSelectEffectChunjo();
            }
            else if (m_dwEmpireID == 3)//Jinnnos
            {
                __DetachSelectEffectJinnos();
            }
            else
            {
                __DetachSelectEffectMonster();
            }
        }
        if (IsEnemy())
        {
            __DetachSelectEffectMonster();
        }
    }

    void CInstanceBase::OnTargeted()
    {
    #ifdef __MOVIE_MODE__
        if (!__IsExistMainInstance())
            return;
    #endif

        if (IsStoneDoor())
            return;

        if (IsDead())
            return;

        if (IsEnemy())
        {
            __AttachTargetEffectMonster();
        }

        if (IsPC() || IsNPC())
        {
            if (m_dwEmpireID == 1) //Shinsoo
            {
                __AttachTargetEffectShinsoo();
            }
            else if (m_dwEmpireID == 2)//Chunjo
            {
                __AttachTargetEffectChunjo();
            }
            else if (m_dwEmpireID == 3)//Jinnnos
            {
                __AttachTargetEffectJinnos();
            }
            else
            {
                __AttachTargetEffectMonster();
            }
        }
    }

    void CInstanceBase::OnUntargeted()
    {

        if (IsPC() || IsNPC())
        {
            if (m_dwEmpireID == 1) //Shinsoo
            {
                __DetachTargetEffectShinsoo();
            }
            else if (m_dwEmpireID == 2)//Chunjo
            {
                __DetachTargetEffectChunjo();
            }
            else if (m_dwEmpireID == 3)//Jinnnos
            {
                __DetachTargetEffectJinnos();
            }
            else
            {
                __DetachTargetEffectMonster();
            }
        }
        if (IsEnemy())
        {
            __DetachTargetEffectMonster();
        }
    }

    void CInstanceBase::DestroySystem()
    {
        ms_kPool.Clear();
    }

    void CInstanceBase::CreateSystem(UINT uCapacity)
    {
        ms_kPool.Create(uCapacity);

        memset(ms_adwCRCAffectEffect, 0, sizeof(ms_adwCRCAffectEffect));

        ms_fDustGap=250.0f;
        ms_fHorseDustGap=500.0f;
    }

    CInstanceBase* CInstanceBase::New()
    {
        return ms_kPool.Alloc();
    }

    void CInstanceBase::Delete(CInstanceBase* pkInst)
    {
        pkInst->Destroy();
        ms_kPool.Free(pkInst);
    }

    void CInstanceBase::SetMainInstance()
    {
        CPythonCharacterManager& rkChrMgr=CPythonCharacterManager::Instance();

        DWORD dwVID=GetVirtualID();
        rkChrMgr.SetMainInstance(dwVID);

        m_GraphicThingInstance.SetMainInstance();
    }

    CInstanceBase* CInstanceBase::__GetMainInstancePtr()
    {
        CPythonCharacterManager& rkChrMgr=CPythonCharacterManager::Instance();
        return rkChrMgr.GetMainInstancePtr();
    }

    void CInstanceBase::__ClearMainInstance()
    {
        CPythonCharacterManager& rkChrMgr=CPythonCharacterManager::Instance();
        rkChrMgr.ClearMainInstance();
    }

    /* ½ÇÁ¦ Ç÷¹À̾î ij¸¯ÅÍÀÎÁö Á¶»ç.*/
    bool CInstanceBase::__IsMainInstance()
    {
        if (this==__GetMainInstancePtr())
            return true;

        return false;
    }

    bool CInstanceBase::__IsExistMainInstance()
    {
        if(__GetMainInstancePtr())
            return true;
        else
            return false;
    }

    bool CInstanceBase::__MainCanSeeHiddenThing()
    {
        return false;
    //    CInstanceBase * pInstance = __GetMainInstancePtr();
    //    return pInstance->IsAffect(AFFECT_GAMJI);
    }

    float CInstanceBase::__GetBowRange()
    {
        float fRange = 2500.0f - 100.0f;

        if (__IsMainInstance())
        {
            IAbstractPlayer& rPlayer=IAbstractPlayer::GetSingleton();
            fRange += float(rPlayer.GetStatus(POINT_BOW_DISTANCE));
        }

        return fRange;
    }

    CInstanceBase* CInstanceBase::__FindInstancePtr(DWORD dwVID)
    {
        CPythonCharacterManager& rkChrMgr=CPythonCharacterManager::Instance();
        return rkChrMgr.GetInstancePtr(dwVID);
    }

    bool CInstanceBase::__FindRaceType(DWORD dwRace, BYTE* pbType)
    {
        CPythonNonPlayer& rkNonPlayer=CPythonNonPlayer::Instance();
        return rkNonPlayer.GetInstanceType(dwRace, pbType);
    }

    bool CInstanceBase::Create(const SCreateData& c_rkCreateData)
    {
        IAbstractApplication::GetSingleton().SkipRenderBuffering(300);

        SetInstanceType(c_rkCreateData.m_bType);


        if (!SetRace(c_rkCreateData.m_dwRace))
            return false;

        SetVirtualID(c_rkCreateData.m_dwVID);

        if (c_rkCreateData.m_isMain)
            SetMainInstance();

        if (IsGuildWall())
        {
            unsigned center_x;
            unsigned center_y;

            c_rkCreateData.m_kAffectFlags.ConvertToPosition(&center_x, &center_y);
            
            float center_z = __GetBackgroundHeight(center_x, center_y);
            NEW_SetPixelPosition(TPixelPosition(float(c_rkCreateData.m_lPosX), float(c_rkCreateData.m_lPosY), center_z));
        }
        else
        {
            SCRIPT_SetPixelPosition(float(c_rkCreateData.m_lPosX), float(c_rkCreateData.m_lPosY));
        }    

        if (0 != c_rkCreateData.m_dwMountVnum)
            MountHorse(c_rkCreateData.m_dwMountVnum);

        SetArmor(c_rkCreateData.m_dwArmor);

        if (IsPC())
        {
            SetHair(c_rkCreateData.m_dwHair);
            SetAcce(c_rkCreateData.m_dwAcce);
            SetWeapon(c_rkCreateData.m_dwWeapon);
        }

        __Create_SetName(c_rkCreateData);

        if (GetInstanceType() == CActorInstance::TYPE_ENEMY)
            m_dwLevel = CPythonNonPlayer::Instance().GetMobLevel(GetRace());
        else
            m_dwLevel = c_rkCreateData.m_dwLevel;
        m_dwGuildID = c_rkCreateData.m_dwGuildID;
        m_dwEmpireID = c_rkCreateData.m_dwEmpireID;

        SetVirtualNumber(c_rkCreateData.m_dwRace);
        SetRotation(c_rkCreateData.m_fRot);

        SetAlignment(c_rkCreateData.m_sAlignment);
        SetPKMode(c_rkCreateData.m_byPKMode);

        SetMoveSpeed(c_rkCreateData.m_dwMovSpd);
        SetAttackSpeed(c_rkCreateData.m_dwAtkSpd);
        
        // NOTE : Dress ¸¦ ÀÔ°í ÀÖÀ¸¸é Alpha ¸¦ ³ÖÁö ¾Ê´Â´Ù.
        if (!IsWearingDress())
        {
            // NOTE : ¹Ýµå½Ã Affect ¼ÂÆà À­ÂÊ¿¡ ÀÖ¾î¾ß ÇÔ
            m_GraphicThingInstance.SetAlphaValue(0.0f);
            m_GraphicThingInstance.BlendAlphaValue(1.0f, 0.5f);
        }

        if (!IsGuildWall())
        {
            SetAffectFlagContainer(c_rkCreateData.m_kAffectFlags);
        }    

        // NOTE : ¹Ýµå½Ã Affect ¼ÂÆà ÈÄ¿¡ ÇØ¾ß ÇÔ
        AttachTextTail();
        RefreshTextTail();

        if (c_rkCreateData.m_dwStateFlags & ADD_CHARACTER_STATE_SPAWN) 
        {
            if (IsAffect(AFFECT_SPAWN))
                __AttachEffect(EFFECT_SPAWN_APPEAR);

            if (IsPC())
            {
                Refresh(CRaceMotionData::NAME_WAIT, true);
            }
            else
            {
                Refresh(CRaceMotionData::NAME_SPAWN, false);
            }
        }
        else
        {
            Refresh(CRaceMotionData::NAME_WAIT, true);
        }

        __AttachEmpireEffect(c_rkCreateData.m_dwEmpireID);

        RegisterBoundingSphere();

        if (c_rkCreateData.m_dwStateFlags & ADD_CHARACTER_STATE_DEAD)
            m_GraphicThingInstance.DieEnd();

        SetStateFlags(c_rkCreateData.m_dwStateFlags);

        m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_HIT]);

        if (!IsPC())
        {
            DWORD dwBodyColor = CPythonNonPlayer::Instance().GetMonsterColor(c_rkCreateData.m_dwRace);
            if (0 != dwBodyColor)
            {
                SetModulateRenderMode();
                SetAddColor(dwBodyColor);
            }
        }

        __AttachHorseSaddle();

        // ±æµå ½Éº¼À» À§ÇÑ Àӽà ÄÚµå, ÀûÁ¤ À§Ä¡¸¦ ã´Â Áß
        const int c_iGuildSymbolRace = 14200;
        if (c_iGuildSymbolRace == GetRace())
        {
            std::string strFileName = GetGuildSymbolFileName(m_dwGuildID);
            if (IsFile(strFileName.c_str()))
                m_GraphicThingInstance.ChangeMaterial(strFileName.c_str());
        }

        return true;
    }


    void CInstanceBase::__Create_SetName(const SCreateData& c_rkCreateData)
    {
        if (IsGoto())
        {
            SetNameString("", 0);
            return;
        }
        if (IsWarp())
        {
            __Create_SetWarpName(c_rkCreateData);
            return;
        }

        SetNameString(c_rkCreateData.m_stName.c_str(), c_rkCreateData.m_stName.length());
    }

    void CInstanceBase::__Create_SetWarpName(const SCreateData& c_rkCreateData)
    {
        const char * c_szName;
        if (CPythonNonPlayer::Instance().GetName(c_rkCreateData.m_dwRace, &c_szName))
        {
            std::string strName = c_szName;
            int iFindingPos = strName.find_first_of(" ", 0);
            if (iFindingPos > 0)
            {
                strName.resize(iFindingPos);
            }
            SetNameString(strName.c_str(), strName.length());
        }
        else
        {
            SetNameString(c_rkCreateData.m_stName.c_str(), c_rkCreateData.m_stName.length());
        }
    }

    void CInstanceBase::SetNameString(const char* c_szName, int len)
    {
        m_stName.assign(c_szName, len);
        if (GetInstanceType() == CActorInstance::TYPE_ENEMY &&
            IS_SET(CPythonNonPlayer::Instance().GetMobAIFlag(GetRace()), CPythonNonPlayer::AIFLAG_AGGRESSIVE))
            m_stName.append("*");
    }


    bool CInstanceBase::SetRace(DWORD eRace)
    {
        m_dwRace = eRace;

        if (!m_GraphicThingInstance.SetRace(eRace))
            return false;

        if (!__FindRaceType(m_dwRace, &m_eRaceType))
            m_eRaceType=CActorInstance::TYPE_PC;

        return true;
    }

    BOOL CInstanceBase::__IsChangableWeapon(int iWeaponID)
    {    
        // µå·¹½º ÀÔ°í ÀÖÀ»¶§´Â ºÎÄÉ¿ÜÀÇ Àåºñ´Â ³ª¿ÀÁö ¾Ê°Ô..
        if (IsWearingDress())
        {
            const int c_iBouquets[] =
            {
                50201,    // Bouquet for Assassin
                50202,    // Bouquet for Shaman
                50203,
                50204,
                0, // #0000545: [M2CN] ¿þµù µå·¹½º¿Í Àåºñ Âø¿ë ¹®Á¦
            };

            for (int i = 0; c_iBouquets != 0; ++i)
                if (iWeaponID == c_iBouquets)
                    return true;

            return false;
        }
        else
            return true;
    }

    BOOL CInstanceBase::IsWearingDress()
    {
        const int c_iWeddingDressShape = 201;
        return c_iWeddingDressShape == m_eShape;
    }

    BOOL CInstanceBase::IsHoldingPickAxe()
    {
        const int c_iPickAxeStart = 29101;
        const int c_iPickAxeEnd = 29110;
        return m_awPart[CRaceData::PART_WEAPON] >= c_iPickAxeStart && m_awPart[CRaceData::PART_WEAPON] <= c_iPickAxeEnd;
    }

    BOOL CInstanceBase::IsMountingHorse()
    {
        return m_kHorse.IsMounting();
    }

    void CInstanceBase::MountHorse(UINT eRace)
    {
        m_kHorse.Destroy();
        m_kHorse.Create(m_GraphicThingInstance.NEW_GetCurPixelPositionRef(), eRace, ms_adwCRCAffectEffect[EFFECT_HIT]);

        SetMotionMode(CRaceMotionData::MODE_HORSE);    
        SetRotationSpeed(c_fDefaultHorseRotationSpeed);

        m_GraphicThingInstance.MountHorse(m_kHorse.GetActorPtr());
        m_GraphicThingInstance.Stop();
        m_GraphicThingInstance.RefreshActorInstance();
    }

    void CInstanceBase::DismountHorse()
    {
        m_kHorse.Destroy();
    }

    void CInstanceBase::GetInfo(std::string* pstInfo)
    {
        char szInfo[256];
        sprintf(szInfo, "Inst - UC %d, RC %d Pool - %d ", 
            ms_dwUpdateCounter, 
            ms_dwRenderCounter,
            ms_kPool.GetCapacity()
        );

        pstInfo->append(szInfo);
    }

    void CInstanceBase::ResetPerformanceCounter()
    {
        ms_dwUpdateCounter=0;
        ms_dwRenderCounter=0;
        ms_dwDeformCounter=0;
    }

    bool CInstanceBase::NEW_IsLastPixelPosition()
    {
        return m_GraphicThingInstance.IsPushing();
    }

    const TPixelPosition& CInstanceBase::NEW_GetLastPixelPositionRef()
    {
        return m_GraphicThingInstance.NEW_GetLastPixelPositionRef();
    }

    void CInstanceBase::NEW_SetDstPixelPositionZ(FLOAT z)
    {
        m_GraphicThingInstance.NEW_SetDstPixelPositionZ(z);
    }

    void CInstanceBase::NEW_SetDstPixelPosition(const TPixelPosition& c_rkPPosDst)
    {
        m_GraphicThingInstance.NEW_SetDstPixelPosition(c_rkPPosDst);
    }

    void CInstanceBase::NEW_SetSrcPixelPosition(const TPixelPosition& c_rkPPosSrc)
    {
        m_GraphicThingInstance.NEW_SetSrcPixelPosition(c_rkPPosSrc);
    }

    const TPixelPosition& CInstanceBase::NEW_GetCurPixelPositionRef()
    {
        return m_GraphicThingInstance.NEW_GetCurPixelPositionRef();    
    }

    const TPixelPosition& CInstanceBase::NEW_GetDstPixelPositionRef()
    {
        return m_GraphicThingInstance.NEW_GetDstPixelPositionRef();
    }

    const TPixelPosition& CInstanceBase::NEW_GetSrcPixelPositionRef()
    {
        return m_GraphicThingInstance.NEW_GetSrcPixelPositionRef();
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////
    void CInstanceBase::OnSyncing()
    {
        m_GraphicThingInstance.__OnSyncing();
    }

    void CInstanceBase::OnWaiting()
    {
        m_GraphicThingInstance.__OnWaiting();
    }

    void CInstanceBase::OnMoving()
    {
        m_GraphicThingInstance.__OnMoving();
    }

    void CInstanceBase::ChangeGuild(DWORD dwGuildID)
    {
        m_dwGuildID=dwGuildID;

        DetachTextTail();
        AttachTextTail();
        RefreshTextTail();
    }

    DWORD CInstanceBase::GetPart(CRaceData::EParts part)
    {
        assert(part >= 0 && part < CRaceData::PART_MAX_NUM);
        return m_awPart[part];
    }

    DWORD CInstanceBase::GetShape()
    {
        return m_eShape;
    }

    bool CInstanceBase::CanAct()
    {
        return m_GraphicThingInstance.CanAct();
    }

    bool CInstanceBase::CanMove()
    {
        return m_GraphicThingInstance.CanMove();
    }

    bool CInstanceBase::CanUseSkill()
    {
        if (IsPoly())
            return false;

        if (IsWearingDress())
            return false;

        if (IsHoldingPickAxe())
            return false;

        if (!m_kHorse.CanUseSkill())
            return false;

        if (!m_GraphicThingInstance.CanUseSkill())
            return false;

        return true;
    }

    bool CInstanceBase::CanAttack()
    {
        if (!m_kHorse.CanAttack())
            return false;

        if (IsWearingDress())
            return false;

        if (IsHoldingPickAxe())
            return false;
        
        return m_GraphicThingInstance.CanAttack();
    }

    bool CInstanceBase::CanFishing()
    {
        return m_GraphicThingInstance.CanFishing();
    }


    BOOL CInstanceBase::IsBowMode()
    {
        return m_GraphicThingInstance.IsBowMode();
    }

    BOOL CInstanceBase::IsHandMode()
    {
        return m_GraphicThingInstance.IsHandMode();
    }

    BOOL CInstanceBase::IsFishingMode()
    {
        if (CRaceMotionData::MODE_FISHING == m_GraphicThingInstance.GetMotionMode())
            return true;

        return false;
    }

    BOOL CInstanceBase::IsFishing()
    {
        return m_GraphicThingInstance.IsFishing();
    }

    BOOL CInstanceBase::IsDead()
    {
        return m_GraphicThingInstance.IsDead();
    }

    BOOL CInstanceBase::IsStun()
    {
        return m_GraphicThingInstance.IsStun();
    }

    BOOL CInstanceBase::IsSleep()
    {
        return m_GraphicThingInstance.IsSleep();
    }


    BOOL CInstanceBase::__IsSyncing()
    {
        return m_GraphicThingInstance.__IsSyncing();
    }

    void CInstanceBase::NEW_SetOwner(DWORD dwVIDOwner)
    {
        m_GraphicThingInstance.SetOwner(dwVIDOwner);
    }

    float CInstanceBase::GetLocalTime()
    {
        return m_GraphicThingInstance.GetLocalTime();
    }


    void CInstanceBase::PushUDPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg)
    {
    }

    DWORD    ELTimer_GetServerFrameMSec();

    void CInstanceBase::PushTCPStateExpanded(DWORD dwCmdTime, const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg, UINT uTargetVID)
    {
        SCommand kCmdNew;
        kCmdNew.m_kPPosDst = c_rkPPosDst;
        kCmdNew.m_dwChkTime = dwCmdTime+100;
        kCmdNew.m_dwCmdTime = dwCmdTime;
        kCmdNew.m_fDstRot = fDstRot;
        kCmdNew.m_eFunc = eFunc;
        kCmdNew.m_uArg = uArg;
        kCmdNew.m_uTargetVID = uTargetVID;
        m_kQue_kCmdNew.push_back(kCmdNew);
    }

    void CInstanceBase::PushTCPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg)
    {    
        if (__IsMainInstance())
        {
            //assert(!"CInstanceBase::PushTCPState Ç÷¹À̾î Àڽſ¡°Ô À̵¿ÆÐŶÀº ¿À¸é ¾ÈµÈ´Ù!");
            TraceError("CInstanceBase::PushTCPState Ç÷¹À̾î Àڽſ¡°Ô À̵¿ÆÐŶÀº ¿À¸é ¾ÈµÈ´Ù!");
            return;
        }

        int nNetworkGap=ELTimer_GetServerFrameMSec()-dwCmdTime;
        
        m_nAverageNetworkGap=(m_nAverageNetworkGap*70+nNetworkGap*30)/100;
        
        /*
        if (m_dwBaseCmdTime == 0)
        {
            m_dwBaseChkTime = ELTimer_GetFrameMSec()-nNetworkGap;
            m_dwBaseCmdTime = dwCmdTime;

            Tracenf("VID[%d] ³×Æ®¿÷°¸ [%d]", GetVirtualID(), nNetworkGap);
        }
        */

        //m_dwBaseChkTime-m_dwBaseCmdTime+ELTimer_GetServerMSec();

        SCommand kCmdNew;
        kCmdNew.m_kPPosDst = c_rkPPosDst;
        kCmdNew.m_dwChkTime = dwCmdTime+m_nAverageNetworkGap;//m_dwBaseChkTime + (dwCmdTime - m_dwBaseCmdTime);// + nNetworkGap;
        kCmdNew.m_dwCmdTime = dwCmdTime;
        kCmdNew.m_fDstRot = fDstRot;
        kCmdNew.m_eFunc = eFunc;
        kCmdNew.m_uArg = uArg;
        m_kQue_kCmdNew.push_back(kCmdNew);

        //int nApplyGap=kCmdNew.m_dwChkTime-ELTimer_GetServerFrameMSec();

        //if (nApplyGap<-500 || nApplyGap>500)
        //    Tracenf("VID[%d] NAME[%s] ³×Æ®¿÷°¸ [cur:%d ave:%d] ÀÛµ¿½Ã°£ (%d)", GetVirtualID(), GetNameString(), nNetworkGap, m_nAverageNetworkGap, nApplyGap);
    }

    /*
    CInstanceBase::TStateQueue::iterator CInstanceBase::FindSameState(TStateQueue& rkQuekStt, DWORD dwCmdTime, UINT eFunc, UINT uArg)
    {
        TStateQueue::iterator i=rkQuekStt.begin();
        while (rkQuekStt.end()!=i)
        {
            SState& rkSttEach=*i;
            if (rkSttEach.m_dwCmdTime==dwCmdTime)
                if (rkSttEach.m_eFunc==eFunc)
                    if (rkSttEach.m_uArg==uArg)
                        break;
            ++i;
        }

        return i;
    }
    */

    BOOL CInstanceBase::__CanProcessNetworkStatePacket()
    {
        if (m_GraphicThingInstance.IsDead())
            return FALSE;
        if (m_GraphicThingInstance.IsKnockDown())
            return FALSE;
        if (m_GraphicThingInstance.IsUsingSkill())
            if (!m_GraphicThingInstance.CanCancelSkill())
                return FALSE;

        return TRUE;
    }

    BOOL CInstanceBase::__IsEnableTCPProcess(UINT eCurFunc)
    {
        if (m_GraphicThingInstance.IsActEmotion())
        {
            return FALSE;
        }

        if (!m_bEnableTCPState)
        {
            if (FUNC_EMOTION != eCurFunc)
            {
                return FALSE;
            }
        }

        return TRUE;
    }

    void CInstanceBase::StateProcess()
    {    
        while (1)
        {
            if (m_kQue_kCmdNew.empty())
                return;    

            DWORD dwDstChkTime = m_kQue_kCmdNew.front().m_dwChkTime;
            DWORD dwCurChkTime = ELTimer_GetServerFrameMSec();    

            if (dwCurChkTime < dwDstChkTime)
                return;

            SCommand kCmdTop = m_kQue_kCmdNew.front();
            m_kQue_kCmdNew.pop_front();    

            TPixelPosition kPPosDst = kCmdTop.m_kPPosDst;
            //DWORD dwCmdTime = kCmdTop.m_dwCmdTime;    
            FLOAT fRotDst = kCmdTop.m_fDstRot;
            UINT eFunc = kCmdTop.m_eFunc;
            UINT uArg = kCmdTop.m_uArg;
            UINT uVID = GetVirtualID();    
            UINT uTargetVID = kCmdTop.m_uTargetVID;

            TPixelPosition kPPosCur;
            NEW_GetPixelPosition(&kPPosCur);

            /*
            if (IsPC())
                Tracenf("%d cmd: vid=%d[%s] func=%d arg=%d  curPos=(%f, %f) dstPos=(%f, %f) rot=%f (time %d)", 
                ELTimer_GetMSec(),
                uVID, m_stName.c_str(), eFunc, uArg, 
                kPPosCur.x, kPPosCur.y,
                kPPosDst.x, kPPosDst.y, fRotDst, dwCmdTime-m_dwBaseCmdTime);
            */

            TPixelPosition kPPosDir = kPPosDst - kPPosCur;
            float fDirLen = (float)sqrt(kPPosDir.x * kPPosDir.x + kPPosDir.y * kPPosDir.y);

            //Tracenf("°Å¸® %f", fDirLen);

            if (!__CanProcessNetworkStatePacket())
            {
                Lognf(0, "vid=%d ¿òÁ÷ÀÏ ¼ö ¾ø´Â »óÅÂ¶ó ½ºÅµ IsDead=%d, IsKnockDown=%d", uVID, m_GraphicThingInstance.IsDead(), m_GraphicThingInstance.IsKnockDown());
                return;
            }

            if (!__IsEnableTCPProcess(eFunc))
            {
                return;
            }

            switch (eFunc)
            {
                case FUNC_WAIT:
                {
                    //Tracenf("%s (%f, %f) -> (%f, %f) ³²Àº°Å¸® %f", GetNameString(), kPPosCur.x, kPPosCur.y, kPPosDst.x, kPPosDst.y, fDirLen);
                    if (fDirLen > 1.0f)
                    {
                        //NEW_GetSrcPixelPositionRef() = kPPosCur;
                        //NEW_GetDstPixelPositionRef() = kPPosDst;
                        NEW_SetSrcPixelPosition(kPPosCur);
                        NEW_SetDstPixelPosition(kPPosDst);

                        __EnableSkipCollision();

                        m_fDstRot = fRotDst;
                        m_isGoing = TRUE;

                        m_kMovAfterFunc.eFunc = FUNC_WAIT;

                        if (!IsWalking())
                            StartWalking();

                        //Tracen("¸ñÇ¥Á¤Áö");
                    }
                    else
                    {
                        //Tracen("ÇöÀç Á¤Áö");

                        m_isGoing = FALSE;

                        if (!IsWaiting())
                            EndWalking();

                        SCRIPT_SetPixelPosition(kPPosDst.x, kPPosDst.y);
                        SetAdvancingRotation(fRotDst);
                        SetRotation(fRotDst);
                    }
                    break;
                }

                case FUNC_MOVE:
                {
                    //NEW_GetSrcPixelPositionRef() = kPPosCur;
                    //NEW_GetDstPixelPositionRef() = kPPosDst;
                    NEW_SetSrcPixelPosition(kPPosCur);
                    NEW_SetDstPixelPosition(kPPosDst);
                    m_fDstRot = fRotDst;
                    m_isGoing = TRUE;
                    __EnableSkipCollision();
                    //m_isSyncMov = TRUE;

                    m_kMovAfterFunc.eFunc = FUNC_MOVE;

                    if (!IsWalking())
                    {
                        //Tracen("°È°í ÀÖÁö ¾Ê¾Æ °È±â ½ÃÀÛ");
                        StartWalking();
                    }
                    else
                    {
                        //Tracen("ÀÌ¹Ì °È´ÂÁß ");
                    }
                    break;
                }

                case FUNC_COMBO:
                {
                    if (fDirLen >= 50.0f)
                    {
                        NEW_SetSrcPixelPosition(kPPosCur);
                        NEW_SetDstPixelPosition(kPPosDst);
                        m_fDstRot=fRotDst;
                        m_isGoing = TRUE;
                        __EnableSkipCollision();

                        m_kMovAfterFunc.eFunc = FUNC_COMBO;
                        m_kMovAfterFunc.uArg = uArg;

                        if (!IsWalking())
                            StartWalking();
                    }
                    else
                    {
                        //Tracen("´ë±â °ø°Ý Á¤Áö");

                        m_isGoing = FALSE;

                        if (IsWalking())
                            EndWalking();

                        SCRIPT_SetPixelPosition(kPPosDst.x, kPPosDst.y);
                        RunComboAttack(fRotDst, uArg);
                    }
                    break;
                }

                case FUNC_ATTACK:
                {
                    if (fDirLen>=50.0f)
                    {
                        //NEW_GetSrcPixelPositionRef() = kPPosCur;
                        //NEW_GetDstPixelPositionRef() = kPPosDst;
                        NEW_SetSrcPixelPosition(kPPosCur);
                        NEW_SetDstPixelPosition(kPPosDst);
                        m_fDstRot = fRotDst;
                        m_isGoing = TRUE;
                        __EnableSkipCollision();
                        //m_isSyncMov = TRUE;

                        m_kMovAfterFunc.eFunc = FUNC_ATTACK;

                        if (!IsWalking())
                            StartWalking();

                        //Tracen("³Ê¹« ¸Ö¾î¼­ À̵¿ ÈÄ °ø°Ý");
                    }
                    else
                    {
                        //Tracen("³ë¸» °ø°Ý Á¤Áö");

                        m_isGoing = FALSE;

                        if (IsWalking())
                            EndWalking();

                        SCRIPT_SetPixelPosition(kPPosDst.x, kPPosDst.y);
                        BlendRotation(fRotDst);

                        RunNormalAttack(fRotDst);

                        //Tracen("°¡±õ±â ¶§¹®¿¡ ¿öÇÁ °ø°Ý");
                    }
                    break;
                }

                case FUNC_MOB_SKILL:
                {
                    if (fDirLen >= 50.0f)
                    {
                        NEW_SetSrcPixelPosition(kPPosCur);
                        NEW_SetDstPixelPosition(kPPosDst);
                        m_fDstRot = fRotDst;
                        m_isGoing = TRUE;
                        __EnableSkipCollision();

                        m_kMovAfterFunc.eFunc = FUNC_MOB_SKILL;
                        m_kMovAfterFunc.uArg = uArg;

                        if (!IsWalking())
                            StartWalking();
                    }
                    else
                    {
                        m_isGoing = FALSE;

                        if (IsWalking())
                            EndWalking();

                        SCRIPT_SetPixelPosition(kPPosDst.x, kPPosDst.y);
                        BlendRotation(fRotDst);

                        m_GraphicThingInstance.InterceptOnceMotion(CRaceMotionData::NAME_SPECIAL_1 + uArg);
                    }
                    break;
                }

                case FUNC_EMOTION:
                {
                    if (fDirLen>100.0f)
                    {
                        NEW_SetSrcPixelPosition(kPPosCur);
                        NEW_SetDstPixelPosition(kPPosDst);
                        m_fDstRot = fRotDst;
                        m_isGoing = TRUE;

                        if (__IsMainInstance())
                            __EnableSkipCollision();

                        m_kMovAfterFunc.eFunc = FUNC_EMOTION;
                        m_kMovAfterFunc.uArg = uArg;
                        m_kMovAfterFunc.uArgExpanded = uTargetVID;
                        m_kMovAfterFunc.kPosDst = kPPosDst;

                        if (!IsWalking())
                            StartWalking();
                    }
                    else
                    {
                        __ProcessFunctionEmotion(uArg, uTargetVID, kPPosDst);
                    }
                    break;
                }

                default:
                {
                    if (eFunc & FUNC_SKILL)
                    {
                        if (fDirLen >= 50.0f)
                        {
                            //NEW_GetSrcPixelPositionRef() = kPPosCur;
                            //NEW_GetDstPixelPositionRef() = kPPosDst;
                            NEW_SetSrcPixelPosition(kPPosCur);
                            NEW_SetDstPixelPosition(kPPosDst);
                            m_fDstRot = fRotDst;
                            m_isGoing = TRUE;
                            //m_isSyncMov = TRUE;
                            __EnableSkipCollision();

                            m_kMovAfterFunc.eFunc = eFunc;
                            m_kMovAfterFunc.uArg = uArg;

                            if (!IsWalking())
                                StartWalking();

                            //Tracen("³Ê¹« ¸Ö¾î¼­ À̵¿ ÈÄ °ø°Ý");
                        }
                        else
                        {
                            //Tracen("½ºÅ³ Á¤Áö");

                            m_isGoing = FALSE;

                            if (IsWalking())
                                EndWalking();

                            SCRIPT_SetPixelPosition(kPPosDst.x, kPPosDst.y);
                            SetAdvancingRotation(fRotDst);
                            SetRotation(fRotDst);

                            NEW_UseSkill(0, eFunc & 0x7f, uArg&0x0f, (uArg>>4) ? true : false);
                            //Tracen("°¡±õ±â ¶§¹®¿¡ ¿öÇÁ °ø°Ý");
                        }
                    }
                    break;
                }
            }
        }
    }


    void CInstanceBase::MovementProcess()
    {
        TPixelPosition kPPosCur;
        NEW_GetPixelPosition(&kPPosCur);

        // ·»´õ¸µ ÁÂÇ¥°èÀ̹ǷΠy¸¦ -È­Çؼ­ ´õÇÑ´Ù.

        TPixelPosition kPPosNext;
        {
            const D3DXVECTOR3 & c_rkV3Mov = m_GraphicThingInstance.GetMovementVectorRef();

            kPPosNext.x = kPPosCur.x + (+c_rkV3Mov.x);
            kPPosNext.y = kPPosCur.y + (-c_rkV3Mov.y);
            kPPosNext.z = kPPosCur.z + (+c_rkV3Mov.z);
        }

        TPixelPosition kPPosDeltaSC = kPPosCur - NEW_GetSrcPixelPositionRef();
        TPixelPosition kPPosDeltaSN = kPPosNext - NEW_GetSrcPixelPositionRef();
        TPixelPosition kPPosDeltaSD = NEW_GetDstPixelPositionRef() - NEW_GetSrcPixelPositionRef();

        float fCurLen = sqrtf(kPPosDeltaSC.x * kPPosDeltaSC.x + kPPosDeltaSC.y * kPPosDeltaSC.y);
        float fNextLen = sqrtf(kPPosDeltaSN.x * kPPosDeltaSN.x + kPPosDeltaSN.y * kPPosDeltaSN.y);
        float fTotalLen = sqrtf(kPPosDeltaSD.x * kPPosDeltaSD.x + kPPosDeltaSD.y * kPPosDeltaSD.y);
        float fRestLen = fTotalLen - fCurLen;

        if (__IsMainInstance())
        {
            if (m_isGoing && IsWalking())
            {
                float fDstRot = NEW_GetAdvancingRotationFromPixelPosition(NEW_GetSrcPixelPositionRef(), NEW_GetDstPixelPositionRef());

                SetAdvancingRotation(fDstRot);

                if (fRestLen<=0.0)
                {
                    if (IsWalking())
                        EndWalking();

                    //Tracen("¸ñÇ¥ µµ´Þ Á¤Áö");

                    m_isGoing = FALSE;

                    BlockMovement();

                    if (FUNC_EMOTION == m_kMovAfterFunc.eFunc)
                    {
                        DWORD dwMotionNumber = m_kMovAfterFunc.uArg;
                        DWORD dwTargetVID = m_kMovAfterFunc.uArgExpanded;
                        __ProcessFunctionEmotion(dwMotionNumber, dwTargetVID, m_kMovAfterFunc.kPosDst);
                        m_kMovAfterFunc.eFunc = FUNC_WAIT;
                        return;
                    }
                }
            }
        }
        else
        {
            if (m_isGoing && IsWalking())
            {
                float fDstRot = NEW_GetAdvancingRotationFromPixelPosition(NEW_GetSrcPixelPositionRef(), NEW_GetDstPixelPositionRef());

                SetAdvancingRotation(fDstRot);

                // ¸¸¾à ·»ÅϽð¡ ´Ê¾î ³Ê¹« ¸¹ÀÌ À̵¿Çß´Ù¸é..
                if (fRestLen < -100.0f)
                {
                    NEW_SetSrcPixelPosition(kPPosCur);

                    float fDstRot = NEW_GetAdvancingRotationFromPixelPosition(kPPosCur, NEW_GetDstPixelPositionRef());
                    SetAdvancingRotation(fDstRot);
                    //Tracenf("VID %d ¿À¹ö ¹æÇâ¼³Á¤ (%f, %f) %f rest %f", GetVirtualID(), kPPosCur.x, kPPosCur.y, fDstRot, fRestLen);            

                    // À̵¿ÁßÀ̶ó¸é ´ÙÀ½¹ø¿¡ ¸ØÃß°Ô ÇÑ´Ù
                    if (FUNC_MOVE == m_kMovAfterFunc.eFunc)
                    {
                        m_kMovAfterFunc.eFunc = FUNC_WAIT;
                    }
                }
                // µµÂøÇß´Ù¸é...
                else if (fCurLen <= fTotalLen && fTotalLen <= fNextLen)
                {
                    if (m_GraphicThingInstance.IsDead() || m_GraphicThingInstance.IsKnockDown())
                    {
                        __DisableSkipCollision();

                        //Tracen("»ç¸Á »óÅÂ¶ó µ¿ÀÛ ½ºÅµ");

                        m_isGoing = FALSE;

                        //Tracen("Çൿ ºÒ´É »óŶó ÀÌÈÄ µ¿ÀÛ ½ºÅµ");
                    }
                    else
                    {
                        switch (m_kMovAfterFunc.eFunc)
                        {
                            case FUNC_ATTACK:
                            {
                                if (IsWalking())
                                    EndWalking();

                                __DisableSkipCollision();
                                m_isGoing = FALSE;

                                BlockMovement();
                                SCRIPT_SetPixelPosition(NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y);
                                SetAdvancingRotation(m_fDstRot);
                                SetRotation(m_fDstRot);

                                RunNormalAttack(m_fDstRot);
                                break;
                            }

                            case FUNC_COMBO:
                            {
                                if (IsWalking())
                                    EndWalking();

                                __DisableSkipCollision();
                                m_isGoing = FALSE;

                                BlockMovement();
                                SCRIPT_SetPixelPosition(NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y);
                                RunComboAttack(m_fDstRot, m_kMovAfterFunc.uArg);
                                break;
                            }

                            case FUNC_EMOTION:
                            {
                                m_isGoing = FALSE;
                                m_kMovAfterFunc.eFunc = FUNC_WAIT;
                                __DisableSkipCollision();
                                BlockMovement();

                                DWORD dwMotionNumber = m_kMovAfterFunc.uArg;
                                DWORD dwTargetVID = m_kMovAfterFunc.uArgExpanded;
                                __ProcessFunctionEmotion(dwMotionNumber, dwTargetVID, m_kMovAfterFunc.kPosDst);
                                break;
                            }

                            case FUNC_MOVE:
                            {
                                break;
                            }

                            case FUNC_MOB_SKILL:
                            {
                                if (IsWalking())
                                    EndWalking();

                                __DisableSkipCollision();
                                m_isGoing = FALSE;

                                BlockMovement();
                                SCRIPT_SetPixelPosition(NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y);
                                SetAdvancingRotation(m_fDstRot);
                                SetRotation(m_fDstRot);

                                m_GraphicThingInstance.InterceptOnceMotion(CRaceMotionData::NAME_SPECIAL_1 + m_kMovAfterFunc.uArg);
                                break;
                            }

                            default:
                            {
                                if (m_kMovAfterFunc.eFunc & FUNC_SKILL)
                                {
                                    SetAdvancingRotation(m_fDstRot);
                                    BlendRotation(m_fDstRot);
                                    NEW_UseSkill(0, m_kMovAfterFunc.eFunc & 0x7f, m_kMovAfterFunc.uArg&0x0f, (m_kMovAfterFunc.uArg>>4) ? true : false);
                                }
                                else
                                {
                                    //Tracenf("VID %d ½ºÅ³ °ø°Ý (%f, %f) rot %f", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot);

                                    __DisableSkipCollision();
                                    m_isGoing = FALSE;

                                    BlockMovement();
                                    SCRIPT_SetPixelPosition(NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y);
                                    SetAdvancingRotation(m_fDstRot);
                                    BlendRotation(m_fDstRot);
                                    if (!IsWaiting())
                                    {
                                        EndWalking();
                                    }

                                    //Tracenf("VID %d Á¤Áö (%f, %f) rot %f IsWalking %d", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot, IsWalking());
                                }
                                break;
                            }
                        }

                    }
                }

            }
        }

        if (IsWalking() || m_GraphicThingInstance.IsUsingMovingSkill())
        {
            float fRotation = m_GraphicThingInstance.GetRotation();
            float fAdvancingRotation = m_GraphicThingInstance.GetAdvancingRotation();
            int iDirection = GetRotatingDirection(fRotation, fAdvancingRotation);

            if (DEGREE_DIRECTION_SAME != m_iRotatingDirection)
            {
                if (DEGREE_DIRECTION_LEFT == iDirection)
                {
                    fRotation = fmodf(fRotation + m_fRotSpd*m_GraphicThingInstance.GetSecondElapsed(), 360.0f);
                }
                else if (DEGREE_DIRECTION_RIGHT == iDirection)
                {
                    fRotation = fmodf(fRotation - m_fRotSpd*m_GraphicThingInstance.GetSecondElapsed() + 360.0f, 360.0f);
                }

                if (m_iRotatingDirection != GetRotatingDirection(fRotation, fAdvancingRotation))
                {
                    m_iRotatingDirection = DEGREE_DIRECTION_SAME;
                    fRotation = fAdvancingRotation;
                }

                m_GraphicThingInstance.SetRotation(fRotation);
            }

            if (__IsInDustRange())
            { 
                float fDustDistance = NEW_GetDistanceFromDestPixelPosition(m_kPPosDust);
                if (IsMountingHorse())
                {
                    if (fDustDistance > ms_fHorseDustGap)
                    {
                        NEW_GetPixelPosition(&m_kPPosDust);
                        __AttachEffect(EFFECT_HORSE_DUST);
                    }
                }
                else
                {
                    if (fDustDistance > ms_fDustGap)
                    {
                        NEW_GetPixelPosition(&m_kPPosDust);
                        __AttachEffect(EFFECT_DUST);
                    }
                }
            }
        }
    }

    void CInstanceBase::__ProcessFunctionEmotion(DWORD dwMotionNumber, DWORD dwTargetVID, const TPixelPosition & c_rkPosDst)
    {
        if (IsWalking())
            EndWalkingWithoutBlending();

        __EnableChangingTCPState();
        SCRIPT_SetPixelPosition(c_rkPosDst.x, c_rkPosDst.y);

        CInstanceBase * pTargetInstance = CPythonCharacterManager::Instance().GetInstancePtr(dwTargetVID);
        if (pTargetInstance)
        {
            pTargetInstance->__EnableChangingTCPState();

            if (pTargetInstance->IsWalking())
                pTargetInstance->EndWalkingWithoutBlending();

            WORD wMotionNumber1 = HIWORD(dwMotionNumber);
            WORD wMotionNumber2 = LOWORD(dwMotionNumber);

            int src_job = RaceToJob(GetRace());
            int dst_job = RaceToJob(pTargetInstance->GetRace());

            NEW_LookAtDestInstance(*pTargetInstance);
            m_GraphicThingInstance.InterceptOnceMotion(wMotionNumber1 + dst_job);
            m_GraphicThingInstance.SetRotation(m_GraphicThingInstance.GetTargetRotation());
            m_GraphicThingInstance.SetAdvancingRotation(m_GraphicThingInstance.GetTargetRotation());

            pTargetInstance->NEW_LookAtDestInstance(*this);
            pTargetInstance->m_GraphicThingInstance.InterceptOnceMotion(wMotionNumber2 + src_job);
            pTargetInstance->m_GraphicThingInstance.SetRotation(pTargetInstance->m_GraphicThingInstance.GetTargetRotation());
            pTargetInstance->m_GraphicThingInstance.SetAdvancingRotation(pTargetInstance->m_GraphicThingInstance.GetTargetRotation());

            if (pTargetInstance->__IsMainInstance())
            {
                IAbstractPlayer & rPlayer=IAbstractPlayer::GetSingleton();
                rPlayer.EndEmotionProcess();
            }
        }

        if (__IsMainInstance())
        {
            IAbstractPlayer & rPlayer=IAbstractPlayer::GetSingleton();
            rPlayer.EndEmotionProcess();
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    // Update & Deform & Render

    int g_iAccumulationTime = 0;

    void CInstanceBase::Update()
    {
        ++ms_dwUpdateCounter;    

        StateProcess();
        m_GraphicThingInstance.PhysicsProcess();
        m_GraphicThingInstance.RotationProcess();
        m_GraphicThingInstance.ComboProcess();
        m_GraphicThingInstance.AccumulationMovement();

        if (m_GraphicThingInstance.IsMovement())
        {
            TPixelPosition kPPosCur;
            NEW_GetPixelPosition(&kPPosCur);

            DWORD dwCurTime=ELTimer_GetFrameMSec();
            //if (m_dwNextUpdateHeightTime<dwCurTime)
            {
                m_dwNextUpdateHeightTime=dwCurTime;
                kPPosCur.z = __GetBackgroundHeight(kPPosCur.x, kPPosCur.y);
                NEW_SetPixelPosition(kPPosCur);
            }

            // SetMaterialColor
            {
                DWORD dwMtrlColor=__GetShadowMapColor(kPPosCur.x, kPPosCur.y);
                m_GraphicThingInstance.SetMaterialColor(dwMtrlColor);
            }
        }

        m_GraphicThingInstance.UpdateAdvancingPointInstance();

        AttackProcess();
        MovementProcess();

        m_GraphicThingInstance.MotionProcess(IsPC());
        if (IsMountingHorse())
        {
            m_kHorse.m_pkActor->HORSE_MotionProcess(FALSE);
        }

        __ComboProcess();    
        
        ProcessDamage();

    }

    void CInstanceBase::Transform()
    {
        if (__IsSyncing())
        {
            //OnSyncing();
        }
        else
        {
            if (IsWalking() || m_GraphicThingInstance.IsUsingMovingSkill())
            {
                const D3DXVECTOR3& c_rv3Movment=m_GraphicThingInstance.GetMovementVectorRef();

                float len=(c_rv3Movment.x*c_rv3Movment.x)+(c_rv3Movment.y*c_rv3Movment.y);
                if (len>1.0f)
                    OnMoving();
                else
                    OnWaiting();    
            }    
        }

        m_GraphicThingInstance.INSTANCEBASE_Transform();
    }


    void CInstanceBase::Deform()
    {
        // 2004.07.17.levites.isShow¸¦ ViewFrustumCheck·Î º¯°æ
        if (!__CanRender())
            return;

        ++ms_dwDeformCounter;

        m_GraphicThingInstance.INSTANCEBASE_Deform();

        m_kHorse.Deform();
    }

    void CInstanceBase::RenderTrace()
    {
        if (!__CanRender())
            return;

        m_GraphicThingInstance.RenderTrace();
    }


    void CInstanceBase::Render()
    {
        // 2004.07.17.levites.isShow¸¦ ViewFrustumCheck·Î º¯°æ
        if (!__CanRender())
            return;

        ++ms_dwRenderCounter;

        m_kHorse.Render();
        m_GraphicThingInstance.Render();    
        
        if (CActorInstance::IsDirLine())
        {    
            if (NEW_GetDstPixelPositionRef().x != 0.0f)
            {
                static CScreen s_kScreen;

                STATEMANAGER.SetTextureStageState(0, D3DTSS_COLORARG1,    D3DTA_DIFFUSE);
                STATEMANAGER.SetTextureStageState(0, D3DTSS_COLOROP,    D3DTOP_SELECTARG1);
                STATEMANAGER.SetTextureStageState(0, D3DTSS_ALPHAOP,    D3DTOP_DISABLE);    
                STATEMANAGER.SaveRenderState(D3DRS_ZENABLE, FALSE);
                STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, FALSE);
                STATEMANAGER.SetRenderState(D3DRS_LIGHTING, FALSE);
                
                TPixelPosition px;
                m_GraphicThingInstance.GetPixelPosition(&px);
                D3DXVECTOR3 kD3DVt3Cur(px.x, px.y, px.z);
                //D3DXVECTOR3 kD3DVt3Cur(NEW_GetSrcPixelPositionRef().x, -NEW_GetSrcPixelPositionRef().y, NEW_GetSrcPixelPositionRef().z);
                D3DXVECTOR3 kD3DVt3Dest(NEW_GetDstPixelPositionRef().x, -NEW_GetDstPixelPositionRef().y, NEW_GetDstPixelPositionRef().z);

                //printf("%s %f\n", GetNameString(), kD3DVt3Cur.y - kD3DVt3Dest.y);
                //float fdx = NEW_GetDstPixelPositionRef().x - NEW_GetSrcPixelPositionRef().x;
                //float fdy = NEW_GetDstPixelPositionRef().y - NEW_GetSrcPixelPositionRef().y;

                s_kScreen.SetDiffuseColor(0.0f, 0.0f, 1.0f);
                s_kScreen.RenderLine3d(kD3DVt3Cur.x, kD3DVt3Cur.y, px.z, kD3DVt3Dest.x, kD3DVt3Dest.y, px.z);
                STATEMANAGER.RestoreRenderState(D3DRS_ZENABLE);
                STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, TRUE);
                STATEMANAGER.SetRenderState(D3DRS_LIGHTING, TRUE);
            }
        }    
    }

    void CInstanceBase::RenderToShadowMap()
    {
        if (IsDoor())
            return;

        if (IsBuilding())
            return;

        if (!__CanRender())
            return;

        if (!__IsExistMainInstance())
            return;

        CInstanceBase* pkInstMain=__GetMainInstancePtr();

        const float SHADOW_APPLY_DISTANCE = 2500.0f;

        float fDistance=NEW_GetDistanceFromDestInstance(*pkInstMain);
        if (fDistance>=SHADOW_APPLY_DISTANCE)
            return;

        m_GraphicThingInstance.RenderToShadowMap();    
    }

    void CInstanceBase::RenderCollision()
    {
        m_GraphicThingInstance.RenderCollisionData();
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    // Setting & Getting Data

    void CInstanceBase::SetVirtualID(DWORD dwVirtualID)
    {
        m_GraphicThingInstance.SetVirtualID(dwVirtualID);        
    }

    void CInstanceBase::SetVirtualNumber(DWORD dwVirtualNumber)
    {
        m_dwVirtualNumber = dwVirtualNumber;
    }

    void CInstanceBase::SetInstanceType(int iInstanceType)
    {
        m_GraphicThingInstance.SetActorType(iInstanceType);
    }

    void CInstanceBase::SetAlignment(short sAlignment)
    {
        m_sAlignment = sAlignment;
        RefreshTextTailTitle();
    }

    void CInstanceBase::SetPKMode(BYTE byPKMode)
    {
        if (m_byPKMode == byPKMode)
            return;

        m_byPKMode = byPKMode;

        if (__IsMainInstance())
        {
            IAbstractPlayer& rPlayer=IAbstractPlayer::GetSingleton();
            rPlayer.NotifyChangePKMode();
        }    
    }

    void CInstanceBase::SetKiller(bool bFlag)
    {
        if (m_isKiller == bFlag)
            return;

        m_isKiller = bFlag;
        RefreshTextTail();
    }

    void CInstanceBase::SetPartyMemberFlag(bool bFlag)
    {
        m_isPartyMember = bFlag;
    }

    void CInstanceBase::SetStateFlags(DWORD dwStateFlags)
    {
        if (dwStateFlags & ADD_CHARACTER_STATE_KILLER)
            SetKiller(TRUE);
        else
            SetKiller(FALSE);

        if (dwStateFlags & ADD_CHARACTER_STATE_PARTY)
            SetPartyMemberFlag(TRUE);
        else
            SetPartyMemberFlag(FALSE);
    }

    void CInstanceBase::SetComboType(UINT uComboType)
    {
        m_GraphicThingInstance.SetComboType(uComboType);
    }

    const char * CInstanceBase::GetNameString()
    {
        return m_stName.c_str();
    }

    DWORD CInstanceBase::GetRace()
    {
        return m_dwRace;
    }

    #ifdef ENABLE_NEW_EXCHANGE_WINDOW
    DWORD CInstanceBase::GetLevel()
    {
        return m_dwLevel;
    }
    #endif

    bool CInstanceBase::IsConflictAlignmentInstance(CInstanceBase& rkInstVictim)
    {
        if (PK_MODE_PROTECT == rkInstVictim.GetPKMode())
            return false;

        switch (GetAlignmentType())
        {
            case ALIGNMENT_TYPE_NORMAL:
            case ALIGNMENT_TYPE_WHITE:
                if (ALIGNMENT_TYPE_DARK == rkInstVictim.GetAlignmentType())
                    return true;
                break;
            case ALIGNMENT_TYPE_DARK:
                if (GetAlignmentType() != rkInstVictim.GetAlignmentType())
                    return true;
                break;
        }

        return false;
    }

    void CInstanceBase::SetDuelMode(DWORD type)
    {
        m_dwDuelMode = type;
    }

    DWORD CInstanceBase::GetDuelMode()
    {
        return m_dwDuelMode;
    }

    bool CInstanceBase::IsAttackableInstance(CInstanceBase& rkInstVictim)
    {    
        if (__IsMainInstance())
        {        
            CPythonPlayer& rkPlayer=CPythonPlayer::Instance();
            if(rkPlayer.IsObserverMode())
                return false;
        }

        if (GetVirtualID() == rkInstVictim.GetVirtualID())
            return false;

        if (IsStone())
        {
            if (rkInstVictim.IsPC())
                return true;
        }
        else if (IsPC())
        {
            if (rkInstVictim.IsStone())
                return true;

            if (rkInstVictim.IsPC())
            {
                if (GetDuelMode())
                {
                    switch(GetDuelMode())
                    {
                    case DUEL_CANNOTATTACK:
                        return false;
                    case DUEL_START:
                        if(__FindDUELKey(GetVirtualID(),rkInstVictim.GetVirtualID()))
                            return true;
                        else
                            return false;
                    }
                }
                if (PK_MODE_GUILD == GetPKMode())
                    if (GetGuildID() == rkInstVictim.GetGuildID())
                        return false;

                if (rkInstVictim.IsKiller())
                    if (!IAbstractPlayer::GetSingleton().IsSamePartyMember(GetVirtualID(), rkInstVictim.GetVirtualID()))
                        return true;

                if (PK_MODE_PROTECT != GetPKMode())
                {
                    if (PK_MODE_FREE == GetPKMode())
                    {
                        if (PK_MODE_PROTECT != rkInstVictim.GetPKMode())
                            if (!IAbstractPlayer::GetSingleton().IsSamePartyMember(GetVirtualID(), rkInstVictim.GetVirtualID()))
                                return true;
                    }
                    if (PK_MODE_GUILD == GetPKMode())
                    {
                        if (PK_MODE_PROTECT != rkInstVictim.GetPKMode())
                            if (!IAbstractPlayer::GetSingleton().IsSamePartyMember(GetVirtualID(), rkInstVictim.GetVirtualID()))
                                if (GetGuildID() != rkInstVictim.GetGuildID())
                                    return true;
                    }
                }

                if (IsSameEmpire(rkInstVictim))
                {
                    if (IsPVPInstance(rkInstVictim))
                        return true;

                    if (PK_MODE_REVENGE == GetPKMode())
                        if (!IAbstractPlayer::GetSingleton().IsSamePartyMember(GetVirtualID(), rkInstVictim.GetVirtualID()))
                            if (IsConflictAlignmentInstance(rkInstVictim))
                                return true;
                }
                else
                {
                    return true;
                }
            }

            if (rkInstVictim.IsEnemy())
                return true;

            if (rkInstVictim.IsWoodenDoor())
                return true;
        }
        else if (IsEnemy())
        {
            if (rkInstVictim.IsPC())
                return true;

            if (rkInstVictim.IsBuilding())
                return true;
            
        }
        else if (IsPoly())
        {
            if (rkInstVictim.IsPC())
                return true;

            if (rkInstVictim.IsEnemy())
                return true;
        }
        return false;
    }

    bool CInstanceBase::IsTargetableInstance(CInstanceBase& rkInstVictim)
    {
        return rkInstVictim.CanPickInstance();
    }

    // 2004. 07. 07. [levites] - ½ºÅ³ »ç¿ëÁß Å¸°ÙÀÌ ¹Ù²î´Â ¹®Á¦ ÇØ°áÀ» À§ÇÑ ÄÚµå
    bool CInstanceBase::CanChangeTarget()
    {
        return m_GraphicThingInstance.CanChangeTarget();
    }

    // 2004.07.17.levites.isShow¸¦ ViewFrustumCheck·Î º¯°æ
    bool CInstanceBase::CanPickInstance()
    {
        if (!__IsInViewFrustum())
            return false;

        if (IsDoor())
        {
            if (IsDead())
                return false;
        }

        if (IsPC())
        {
            if (IsAffect(AFFECT_EUNHYEONG))
            {
                if (!__MainCanSeeHiddenThing())
                    return false;
            }
            if (IsAffect(AFFECT_REVIVE_INVISIBILITY))
                return false;
            if (IsAffect(AFFECT_INVISIBILITY))
                return false;
        }

        if (IsDead())
            return false;

        return true;
    }

    bool CInstanceBase::CanViewTargetHP(CInstanceBase& rkInstVictim)
    {
        if (rkInstVictim.IsStone())
            return true;
        if (rkInstVictim.IsWoodenDoor())
            return true;
        if (rkInstVictim.IsEnemy())
            return true;

        return false;
    }

    BOOL CInstanceBase::IsPoly()
    {
        return m_GraphicThingInstance.IsPoly();
    }

    BOOL CInstanceBase::IsPC()
    {
        return m_GraphicThingInstance.IsPC();
    }

    BOOL CInstanceBase::IsNPC()
    {
        return m_GraphicThingInstance.IsNPC();
    }

    BOOL CInstanceBase::IsEnemy()
    {
        return m_GraphicThingInstance.IsEnemy();
    }

    BOOL CInstanceBase::IsStone()
    {
        return m_GraphicThingInstance.IsStone();
    }


    BOOL CInstanceBase::IsGuildWall()    //IsBuilding ±æµå°Ç¹°Àüü IsGuildWallÀº ´ãÀ庮¸¸(¹®Àº Á¦¿Ü)
    {
        return IsWall(m_dwRace);        
    }


    BOOL CInstanceBase::IsResource()
    {
        switch (m_dwVirtualNumber)
        {
            case 20047:
            case 20048:
            case 20049:
            case 20050:
            case 20051:
            case 20052:
            case 20053:
            case 20054:
            case 20055:
            case 20056:
            case 20057:
            case 20058:
            case 20059:
            case 30301:
            case 30302:
            case 30303:
            case 30304:
            case 30305:
                return TRUE;
        }

        return FALSE;
    }

    BOOL CInstanceBase::IsWarp()
    {
        return m_GraphicThingInstance.IsWarp();
    }

    BOOL CInstanceBase::IsGoto()
    {
        return m_GraphicThingInstance.IsGoto();
    }

    BOOL CInstanceBase::IsObject()
    {
        return m_GraphicThingInstance.IsObject();
    }

    BOOL CInstanceBase::IsBuilding()
    {
        return m_GraphicThingInstance.IsBuilding();
    }

    BOOL CInstanceBase::IsDoor()
    {
        return m_GraphicThingInstance.IsDoor();
    }

    BOOL CInstanceBase::IsWoodenDoor()
    {
        if (m_GraphicThingInstance.IsDoor())
        {
            int vnum = GetVirtualNumber();
            if (vnum == 13000) // ³ª¹«¹®
                return true;
            else if (vnum >= 30111 && vnum <= 30119) // »ç±Í¹®
                return true;
            else
                return false;
        }
        else
        {
            return false;
        }
    }

    BOOL CInstanceBase::IsStoneDoor()
    {
        return m_GraphicThingInstance.IsDoor() && 13001 == GetVirtualNumber();
    }

    BOOL CInstanceBase::IsFlag()
    {
        if (GetRace() == 20035)
            return TRUE;
        if (GetRace() == 20036)
            return TRUE;
        if (GetRace() == 20037)
            return TRUE;

        return FALSE;
    }

    BOOL CInstanceBase::IsForceVisible()
    {
        if (IsAffect(AFFECT_SHOW_ALWAYS))
            return TRUE;

        if (IsObject() || IsBuilding() || IsDoor() )
            return TRUE;

        return FALSE;
    }

    int    CInstanceBase::GetInstanceType()
    {
        return m_GraphicThingInstance.GetActorType();
    }

    DWORD CInstanceBase::GetVirtualID()
    {
        return m_GraphicThingInstance.GetVirtualID();
    }

    DWORD CInstanceBase::GetVirtualNumber()
    {
        return m_dwVirtualNumber;
    }

    // 2004.07.17.levites.isShow¸¦ ViewFrustumCheck·Î º¯°æ
    bool CInstanceBase::__IsInViewFrustum()
    {
        return m_GraphicThingInstance.isShow();
    }

    bool CInstanceBase::__CanRender()
    {
        if (!__IsInViewFrustum())
            return false;
        if (IsAffect(AFFECT_INVISIBILITY))
            return false;

        return true;
    }


    ///////////////////////////////////////////////////////////////////////////////////////////////////
    // Graphic Control

    bool CInstanceBase::IntersectBoundingBox()
    {
        float u, v, t;
        return m_GraphicThingInstance.Intersect(&u, &v, &t);
    }

    bool CInstanceBase::IntersectDefendingSphere()
    {
        return m_GraphicThingInstance.IntersectDefendingSphere();
    }

    float CInstanceBase::GetDistance(CInstanceBase * pkTargetInst)
    {
        TPixelPosition TargetPixelPosition;
        pkTargetInst->m_GraphicThingInstance.GetPixelPosition(&TargetPixelPosition);
        return GetDistance(TargetPixelPosition);
    }

    float CInstanceBase::GetDistance(const TPixelPosition & c_rPixelPosition)
    {
        TPixelPosition PixelPosition;
        m_GraphicThingInstance.GetPixelPosition(&PixelPosition);

        float fdx = PixelPosition.x - c_rPixelPosition.x;
        float fdy = PixelPosition.y - c_rPixelPosition.y;

        return sqrtf((fdx*fdx) + (fdy*fdy));
    }

    CActorInstance& CInstanceBase::GetGraphicThingInstanceRef()
    {
        return m_GraphicThingInstance;
    }

    CActorInstance* CInstanceBase::GetGraphicThingInstancePtr()
    {
        return &m_GraphicThingInstance;
    }

    void CInstanceBase::RefreshActorInstance()
    {
        m_GraphicThingInstance.RefreshActorInstance();
    }

    void CInstanceBase::Refresh(DWORD dwMotIndex, bool isLoop)
    {
        RefreshState(dwMotIndex, isLoop);
    }

    void CInstanceBase::RestoreRenderMode()
    {
        m_GraphicThingInstance.RestoreRenderMode();
    }

    void CInstanceBase::SetAddRenderMode()
    {
        m_GraphicThingInstance.SetAddRenderMode();
    }

    void CInstanceBase::SetModulateRenderMode()
    {
        m_GraphicThingInstance.SetModulateRenderMode();
    }

    void CInstanceBase::SetRenderMode(int iRenderMode)
    {
        m_GraphicThingInstance.SetRenderMode(iRenderMode);
    }

    void CInstanceBase::SetAddColor(const D3DXCOLOR & c_rColor)
    {
        m_GraphicThingInstance.SetAddColor(c_rColor);
    }

    void CInstanceBase::__SetBlendRenderingMode()
    {
        m_GraphicThingInstance.SetBlendRenderMode();
    }

    void CInstanceBase::__SetAlphaValue(float fAlpha)
    {
        m_GraphicThingInstance.SetAlphaValue(fAlpha);
    }

    float CInstanceBase::__GetAlphaValue()
    {
        return m_GraphicThingInstance.GetAlphaValue();
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    // Part

    void CInstanceBase::SetHair(DWORD eHair)
    {
        if (!HAIR_COLOR_ENABLE)
            return;

        if (IsPC()==false)
            return;
        m_awPart[CRaceData::PART_HAIR] = eHair;
        m_GraphicThingInstance.SetHair(eHair);
    }

    void CInstanceBase::ChangeHair(DWORD eHair)
    {
        if (!HAIR_COLOR_ENABLE)
            return;

        if (IsPC()==false)
            return;

        if (GetPart(CRaceData::PART_HAIR)==eHair)
            return;

        SetHair(eHair);

        //int type = m_GraphicThingInstance.GetMotionMode();

        RefreshState(CRaceMotionData::NAME_WAIT, true);
        //RefreshState(type, true);
    }

    void CInstanceBase::SetArmor(DWORD dwArmor)
    {
        DWORD dwShape;
        if (__ArmorVnumToShape(dwArmor, &dwShape))
        {
            CItemData * pItemData;
            if (CItemManager::Instance().GetItemDataPointer(dwArmor, &pItemData))
            {
                float fSpecularPower=pItemData->GetSpecularPowerf();
                SetShape(dwShape, fSpecularPower);
                __GetRefinedEffect(pItemData);
                return;
            }
            else
                __ClearArmorRefineEffect();
        }

        SetShape(dwArmor);
    }

    void CInstanceBase::SetAcce(DWORD eAcce)
    {
        if (IsPC() == false)
            return;
        
        __ClearAcceRefineEffect();
        float fSpecular = 0.0f;
        int iAcce = (eAcce > 100) ? (int)(eAcce - 100) : (int)(eAcce);
        if (eAcce > 100)
        {
            fSpecular = 100.0f;
            m_acceEffect = EFFECT_REFINED+EFFECT_ACCE_SPECIAL;
            __EffectContainer_AttachEffect(m_acceEffect);
        }
        
        m_awPart[CRaceData::PART_ACCE] = iAcce;
        m_GraphicThingInstance.SetAcce(iAcce, fSpecular);
    }

    void CInstanceBase::ChangeAcce(DWORD eAcce)
    {
        if (IsPC() == false)
            return;
        
        SetAcce(eAcce);
    }

    void CInstanceBase::SetShape(DWORD eShape, float fSpecular)
    {
        if (IsPoly())
        {
            m_GraphicThingInstance.SetShape(0);    
        }
        else
        {
            m_GraphicThingInstance.SetShape(eShape, fSpecular);        
        }

        m_eShape = eShape;
    }

    DWORD CInstanceBase::GetWeaponType()
    {
        DWORD dwWeapon = GetPart(CRaceData::PART_WEAPON);
        CItemData * pItemData;
        if (!CItemManager::Instance().GetItemDataPointer(dwWeapon, &pItemData))
            return CItemData::WEAPON_NONE;
        
    #ifdef ENABLE_COSTUME_WEAPON_SYSTEM
        if (pItemData->GetType() == CItemData::ITEM_TYPE_COSTUME)
            return pItemData->GetValue(3);
    #endif
        return pItemData->GetWeaponType();
    }

    /*
    void CInstanceBase::SetParts(const WORD * c_pParts)
    {
        if (IsPoly())
            return;

        if (__IsShapeAnimalWear())
            return;

        UINT eWeapon=c_pParts[CRaceData::PART_WEAPON];

        if (__IsChangableWeapon(eWeapon) == false)
                eWeapon = 0;

        if (eWeapon != m_GraphicThingInstance.GetPartItemID(CRaceData::PART_WEAPON))
        {
            m_GraphicThingInstance.AttachPart(CRaceData::PART_MAIN, CRaceData::PART_WEAPON, eWeapon);
            m_awPart[CRaceData::PART_WEAPON] = eWeapon;
        }

        __AttachHorseSaddle();
    }
    */

    void CInstanceBase::__ClearWeaponRefineEffect()
    {
        for (std::vector<DWORD>::iterator it = this->m_vecWeaponEffects.begin();
            it != this->m_vecWeaponEffects.end();
            ++it)
        {
            this->__DetachEffect(*it);
        }
    }

    void CInstanceBase::__ClearAcceRefineEffect()
    {
        if (m_acceEffect)
        {
            __EffectContainer_DetachEffect(EFFECT_REFINED+EFFECT_ACCE_SPECIAL);
            m_acceEffect = 0;
        }
    }

    void CInstanceBase::__ClearArmorRefineEffect()
    {
        if (m_armorRefineEffect)
        {
            __DetachEffect(m_armorRefineEffect);
            m_armorRefineEffect = 0;
        }
    }

    UINT CInstanceBase::__GetRefinedEffect(CItemData* pItem)
    {
        TMapShiningVectorByVNum::iterator itShining;

        DWORD refine = max(pItem->GetRefine() + pItem->GetSocketCount(),CItemData::ITEM_SOCKET_MAX_NUM) - CItemData::ITEM_SOCKET_MAX_NUM;
        switch (pItem->GetType())
        {
        case CItemData::ITEM_TYPE_WEAPON:
            __ClearWeaponRefineEffect();        
            if (refine >= 7)
            {
                DWORD dwRight = 0;
                DWORD dwLeft = 0;

                switch(pItem->GetSubType())
                {
                case CItemData::WEAPON_DAGGER:
                    dwRight = EFFECT_REFINED+EFFECT_SMALLSWORD_REFINED7+refine-7;
                    dwLeft = EFFECT_REFINED+EFFECT_SMALLSWORD_REFINED7_LEFT+refine-7;
                    break;
                case CItemData::WEAPON_FAN:
                    dwRight = EFFECT_REFINED+EFFECT_FANBELL_REFINED7+refine-7;
                    break;
                case CItemData::WEAPON_ARROW:
    #ifdef ENABLE_QUIVER_SYSTEM
                case CItemData::WEAPON_QUIVER:
    #endif
                case CItemData::WEAPON_BELL:
                    dwRight = EFFECT_REFINED+EFFECT_SMALLSWORD_REFINED7+refine-7;
                    break;
                case CItemData::WEAPON_BOW:
                    dwRight = EFFECT_REFINED+EFFECT_BOW_REFINED7+refine-7;
                    break;
                default:
                    dwRight = EFFECT_REFINED+EFFECT_SWORD_REFINED7+refine-7;
                }
                
                if (dwRight > 0)
                    this->m_vecWeaponEffects.push_back(this->__AttachEffect(dwRight));
                if (dwLeft > 0)
                    this->m_vecWeaponEffects.push_back(this->__AttachEffect(dwLeft));
            }

            itShining = g_mapShiningVectorByVNum.find(pItem->GetIndex());
            if (itShining != g_mapShiningVectorByVNum.end())
            {
                for (std::vector<DWORD>::iterator it = itShining->second.begin(); it != itShining->second.end(); ++it)
                {
                    const char* c_szBoneName;
                    if (m_swordRefineEffectRight && this->m_GraphicThingInstance.GetAttachingBoneName(CRaceData::PART_WEAPON, &c_szBoneName))
                        this->m_vecWeaponEffects.push_back(this->m_GraphicThingInstance.AttachEffectByID(0, c_szBoneName, *it));
                    if (m_swordRefineEffectLeft && this->m_GraphicThingInstance.GetAttachingBoneName(CRaceData::PART_WEAPON_LEFT, &c_szBoneName))
                        this->m_vecWeaponEffects.push_back(this->m_GraphicThingInstance.AttachEffectByID(0, c_szBoneName, *it));
                }
            }
            break;
        case CItemData::ITEM_TYPE_ARMOR:
            __ClearArmorRefineEffect();

            // °©¿Ê Ưȭ ÀÌÆåÆ®
            if (pItem->GetSubType() == CItemData::ARMOR_BODY)
            {
                DWORD vnum = pItem->GetIndex();

                if (12010 <= vnum && vnum <= 12049)
                {
                    __AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL);
                    __AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL2);
                }
                // New Armor Effect ( Level 120 ) BEGIN
                if (vnum == 20019 || // Krieger
                    vnum == 20029 ||
                    vnum == 20039 ||
                    vnum == 20049 ||
                    vnum == 20269 || // Ninja
                    vnum == 20279 ||
                    vnum == 20289 ||
                    vnum == 20299 ||
                    vnum == 20519 || // Sura
                    vnum == 20529 ||
                    vnum == 20539 ||
                    vnum == 20549 ||
                    vnum == 20769 || // Shamane
                    vnum == 20779 ||
                    vnum == 20789 ||
                    vnum == 20799)
                {
                    __AttachEffect(EFFECT_REFINED + EFFECT_NEW_ARMORS); //effect 19 NEW EFFECT
                }
            }

            itShining = g_mapShiningVectorByVNum.find(pItem->GetIndex());
            if (itShining != g_mapShiningVectorByVNum.end())
            {
                for (std::vector<DWORD>::iterator it = itShining->second.begin(); it != itShining->second.end(); ++it)
                {
                    this->m_GraphicThingInstance.AttachEffectByID(0, "Bip01", *it);
                }
            }

            if (refine < 7)    //ÇöÀç Á¦·Ãµµ 7 ÀÌ»ó¸¸ ÀÌÆåÆ®°¡ ÀÖ½À´Ï´Ù.
                return 0;

            if (pItem->GetSubType() == CItemData::ARMOR_BODY)
            {
                m_armorRefineEffect = EFFECT_REFINED+EFFECT_BODYARMOR_REFINED7+refine-7;
                __AttachEffect(m_armorRefineEffect);
            }
            break;
        }
        return 0;
    }

    bool CInstanceBase::SetWeapon(DWORD eWeapon)
    {
        if (IsPoly())
            return false;
        
        if (__IsShapeAnimalWear())
            return false;
        
        if (__IsChangableWeapon(eWeapon) == false)
            eWeapon = 0;

        m_GraphicThingInstance.AttachWeapon(eWeapon);
        m_awPart[CRaceData::PART_WEAPON] = eWeapon;
        
        //Weapon Effect
        CItemData * pItemData;
        if (CItemManager::Instance().GetItemDataPointer(eWeapon, &pItemData))
        {
    #ifdef ENABLE_COSTUME_WEAPON_SYSTEM
            if (pItemData->GetType() == CItemData::ITEM_TYPE_COSTUME)
                __ClearWeaponRefineEffect();
    #endif
            __GetRefinedEffect(pItemData);
        }
        else
            __ClearWeaponRefineEffect();

        return true;
    }

    void CInstanceBase::ChangeWeapon(DWORD eWeapon)
    {
        CItemData * pItemData;
        if (eWeapon == m_GraphicThingInstance.GetPartItemID(CRaceData::PART_WEAPON))
            return;
        
        if (SetWeapon(eWeapon))
            RefreshState(CRaceMotionData::NAME_WAIT, true);
    }

    bool CInstanceBase::ChangeArmor(DWORD dwArmor)
    {
        DWORD eShape;
        __ArmorVnumToShape(dwArmor, &eShape);

        if (GetShape()==eShape)
            return false;

        CAffectFlagContainer kAffectFlagContainer;
        kAffectFlagContainer.CopyInstance(m_kAffectFlagContainer);

        DWORD dwVID = GetVirtualID();
        DWORD dwRace = GetRace();
        DWORD eHair = GetPart(CRaceData::PART_HAIR);
        DWORD eAcce = GetPart(CRaceData::PART_ACCE);
        DWORD eWeapon = GetPart(CRaceData::PART_WEAPON);
        float fRot = GetRotation();
        float fAdvRot = GetAdvancingRotation();

        if (IsWalking())
            EndWalking();

        // 2004.07.25.myevan.ÀÌÆåÆ® ¾È ºÙ´Â ¹®Á¦
        //////////////////////////////////////////////////////
        __ClearAffects();
        //////////////////////////////////////////////////////

        if (!SetRace(dwRace))
        {
            TraceError("CPythonCharacterManager::ChangeArmor - SetRace VID[%d] Race[%d] ERROR", dwVID, dwRace);
            return false;
        }

        SetArmor(dwArmor);
        SetHair(eHair);
        SetAcce(eAcce);
        SetWeapon(eWeapon);

        SetRotation(fRot);
        SetAdvancingRotation(fAdvRot);

        __AttachHorseSaddle();

        RefreshState(CRaceMotionData::NAME_WAIT, TRUE);

        // 2004.07.25.myevan.ÀÌÆåÆ® ¾È ºÙ´Â ¹®Á¦
        /////////////////////////////////////////////////
        SetAffectFlagContainer(kAffectFlagContainer);
        /////////////////////////////////////////////////

        CActorInstance::IEventHandler& rkEventHandler=GetEventHandlerRef();
        rkEventHandler.OnChangeShape();

        return true;
    }

    bool CInstanceBase::__IsShapeAnimalWear()
    {
        if (100 == GetShape() ||
            101 == GetShape() ||
            102 == GetShape() ||
            103 == GetShape())
            return true;

        return false;
    }

    DWORD CInstanceBase::__GetRaceType()
    {
        return m_eRaceType;
    }


    void CInstanceBase::RefreshState(DWORD dwMotIndex, bool isLoop)
    {
        DWORD dwPartItemID = m_GraphicThingInstance.GetPartItemID(CRaceData::PART_WEAPON);

        BYTE byItemType = 0xff;
        BYTE bySubType = 0xff;

        CItemManager & rkItemMgr = CItemManager::Instance();
        CItemData * pItemData;

        if (rkItemMgr.GetItemDataPointer(dwPartItemID, &pItemData))
        {
            byItemType = pItemData->GetType();
            bySubType = pItemData->GetWeaponType();
        }

        if (IsPoly())
        {
            SetMotionMode(CRaceMotionData::MODE_GENERAL);
        }
        else if (IsWearingDress())
        {
            SetMotionMode(CRaceMotionData::MODE_WEDDING_DRESS);
        }
        else if (IsHoldingPickAxe())
        {
            if (m_kHorse.IsMounting())
            {
                SetMotionMode(CRaceMotionData::MODE_HORSE);
            }
            else
            {
                SetMotionMode(CRaceMotionData::MODE_GENERAL);
            }
        }
        else if (CItemData::ITEM_TYPE_ROD == byItemType)
        {
            if (m_kHorse.IsMounting())
            {
                SetMotionMode(CRaceMotionData::MODE_HORSE);
            }
            else
            {
                SetMotionMode(CRaceMotionData::MODE_FISHING);
            }
        }
    #ifdef ENABLE_COSTUME_WEAPON_SYSTEM
        else if (byItemType == CItemData::ITEM_TYPE_COSTUME)
        {
            switch (pItemData->GetValue(3))
            {
                case CItemData::WEAPON_SWORD:
                    if (m_kHorse.IsMounting())
                        SetMotionMode(CRaceMotionData::MODE_HORSE_ONEHAND_SWORD);
                    else
                        SetMotionMode(CRaceMotionData::MODE_ONEHAND_SWORD);
                    break;
                case CItemData::WEAPON_DAGGER:
                    if (m_kHorse.IsMounting())
                        SetMotionMode(CRaceMotionData::MODE_HORSE_DUALHAND_SWORD);
                    else
                        SetMotionMode(CRaceMotionData::MODE_DUALHAND_SWORD);
                    break;
                case CItemData::WEAPON_BOW:
                    if (m_kHorse.IsMounting())
                        SetMotionMode(CRaceMotionData::MODE_HORSE_BOW);
                    else
                        SetMotionMode(CRaceMotionData::MODE_BOW);
                    break;
                case CItemData::WEAPON_TWO_HANDED:
                    if (m_kHorse.IsMounting())
                        SetMotionMode(CRaceMotionData::MODE_HORSE_TWOHAND_SWORD);
                    else
                        SetMotionMode(CRaceMotionData::MODE_TWOHAND_SWORD);
                    break;
                case CItemData::WEAPON_BELL:
                    if (m_kHorse.IsMounting())
                        SetMotionMode(CRaceMotionData::MODE_HORSE_BELL);
                    else
                        SetMotionMode(CRaceMotionData::MODE_BELL);
                    break;
                case CItemData::WEAPON_FAN:
                    if (m_kHorse.IsMounting())
                        SetMotionMode(CRaceMotionData::MODE_HORSE_FAN);
                    else
                        SetMotionMode(CRaceMotionData::MODE_FAN);
                    break;
                default:
                        if (m_kHorse.IsMounting())
                            SetMotionMode(CRaceMotionData::MODE_HORSE);
                        else
                            SetMotionMode(CRaceMotionData::MODE_GENERAL);
                    break;
            }
        }
    #endif
        else if (m_kHorse.IsMounting())
        {
            switch (bySubType)
            {
            case CItemData::WEAPON_SWORD:
                SetMotionMode(CRaceMotionData::MODE_HORSE_ONEHAND_SWORD);
                break;

            case CItemData::WEAPON_TWO_HANDED:
                SetMotionMode(CRaceMotionData::MODE_HORSE_TWOHAND_SWORD); // Only Warrior
                break;

            case CItemData::WEAPON_DAGGER:
                SetMotionMode(CRaceMotionData::MODE_HORSE_DUALHAND_SWORD); // Only Assassin
                break;

            case CItemData::WEAPON_FAN:
                SetMotionMode(CRaceMotionData::MODE_HORSE_FAN); // Only Shaman
                break;

            case CItemData::WEAPON_BELL:
                SetMotionMode(CRaceMotionData::MODE_HORSE_BELL); // Only Shaman
                break;

            case CItemData::WEAPON_BOW:
                SetMotionMode(CRaceMotionData::MODE_HORSE_BOW); // Only Shaman
                break;


            default:
                SetMotionMode(CRaceMotionData::MODE_HORSE);
                break;
            }
        }
        else
        {
            switch (bySubType)
            {
            case CItemData::WEAPON_SWORD:
                SetMotionMode(CRaceMotionData::MODE_ONEHAND_SWORD);
                break;

            case CItemData::WEAPON_TWO_HANDED:
                SetMotionMode(CRaceMotionData::MODE_TWOHAND_SWORD); // Only Warrior
                break;

            case CItemData::WEAPON_DAGGER:
                SetMotionMode(CRaceMotionData::MODE_DUALHAND_SWORD); // Only Assassin
                break;


            case CItemData::WEAPON_BOW:
                SetMotionMode(CRaceMotionData::MODE_BOW);
                break;
                
            case CItemData::WEAPON_FAN:
                SetMotionMode(CRaceMotionData::MODE_FAN); // Only Shaman
                break;

            case CItemData::WEAPON_BELL:
                SetMotionMode(CRaceMotionData::MODE_BELL); // Only Shaman
                break;

            case CItemData::WEAPON_ARROW:
            default:
                SetMotionMode(CRaceMotionData::MODE_GENERAL);
                break;
            }
        }

        if (isLoop)
            m_GraphicThingInstance.InterceptLoopMotion(dwMotIndex);
        else
            m_GraphicThingInstance.InterceptOnceMotion(dwMotIndex);

        RefreshActorInstance();
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    // Device

    void CInstanceBase::RegisterBoundingSphere()
    {
        // Stone ÀÏ °æ¿ì DeforomNoSkin À» Çϸé
        // ³«ÇÏÇÏ´Â ¾Ö´Ï¸ÞÀÌ¼Ç °°Àº °æ¿ì ¾Ö´Ï¸ÞÀ̼ÇÀÌ
        // ¹Ù¿îµå ¹Ú½º¿¡ ¿µÇâÀ» ¹ÌÃÄ ÄøµÀÌ Á¦´ë·Î ÀÌ·ç¾îÁöÁö ¾Ê´Â´Ù.
        if (!IsStone())
        {
            m_GraphicThingInstance.DeformNoSkin();
        }

        m_GraphicThingInstance.RegisterBoundingSphere();
    }

    bool CInstanceBase::CreateDeviceObjects()
    {
        return m_GraphicThingInstance.CreateDeviceObjects();
    }

    void CInstanceBase::DestroyDeviceObjects()
    {
        m_GraphicThingInstance.DestroyDeviceObjects();
    }

    void CInstanceBase::Destroy()
    {    
        DetachTextTail();
        
        DismountHorse();

        m_kQue_kCmdNew.clear();
        
        __EffectContainer_Destroy();
        __StoneSmoke_Destroy();

        if (__IsMainInstance())
            __ClearMainInstance();    
        
        m_GraphicThingInstance.Destroy();
        
        __Initialize();
    }

    void CInstanceBase::__InitializeRotationSpeed()
    {
        SetRotationSpeed(c_fDefaultRotationSpeed);
    }

    void CInstanceBase::__Warrior_Initialize()
    {
        m_kWarrior.m_dwGeomgyeongEffect=0;
    }

    void CInstanceBase::__Initialize()
    {
        __Warrior_Initialize();
        __StoneSmoke_Inialize();
        __EffectContainer_Initialize();
        __InitializeRotationSpeed();

        SetEventHandler(CActorInstance::IEventHandler::GetEmptyPtr());

        m_kAffectFlagContainer.Clear();

        m_dwLevel = 0;
        m_dwGuildID = 0;
        m_dwEmpireID = 0;

        m_eType = 0;
        m_eRaceType = 0;
        m_eShape = 0;
        m_dwRace = 0;
        m_dwVirtualNumber = 0;

        m_dwBaseCmdTime=0;
        m_dwBaseChkTime=0;
        m_dwSkipTime=0;

        m_GraphicThingInstance.Initialize();

        m_dwAdvActorVID=0;
        m_dwLastDmgActorVID=0;

        m_nAverageNetworkGap=0;
        m_dwNextUpdateHeightTime=0;

        // Moving by keyboard
        m_iRotatingDirection = DEGREE_DIRECTION_SAME;

        // Moving by mouse    
        m_isTextTail = FALSE;
        m_isGoing = FALSE;
        NEW_SetSrcPixelPosition(TPixelPosition(0, 0, 0));
        NEW_SetDstPixelPosition(TPixelPosition(0, 0, 0));

        m_kPPosDust = TPixelPosition(0, 0, 0);


        m_kQue_kCmdNew.clear();

        m_dwLastComboIndex = 0;

        this->m_vecWeaponEffects.clear();
        m_armorRefineEffect = 0;
        m_acceEffect = 0;

        m_sAlignment = 0;
        m_byPKMode = 0;
        m_isKiller = false;
        m_isPartyMember = false;

        m_bEnableTCPState = TRUE;

        m_stName = "";

        memset(m_awPart, 0, sizeof(m_awPart));
        memset(m_adwCRCAffectEffect, 0, sizeof(m_adwCRCAffectEffect));
        //memset(m_adwCRCEmoticonEffect, 0, sizeof(m_adwCRCEmoticonEffect));
        memset(&m_kMovAfterFunc, 0, sizeof(m_kMovAfterFunc));

        m_bDamageEffectType = false;
        m_dwDuelMode = DUEL_NONE;
        m_dwEmoticonTime = 0;
    }

    CInstanceBase::CInstanceBase()
    {
        __Initialize();
    }

    CInstanceBase::~CInstanceBase()
    {
        Destroy();
    }


    void CInstanceBase::GetBoundBox(D3DXVECTOR3 * vtMin, D3DXVECTOR3 * vtMax)
    {
        m_GraphicThingInstance.GetBoundBox(vtMin, vtMax);
    }

    void CInstanceBase::SetLevel(DWORD lvl)
    {
        m_dwLevel = lvl;
    }

  4. Error    296    error LNK2001: unresolved external symbol __imp__GrannyConvertSingleObject@20    etergrnlib.lib    UserInterface
    Error    297    error LNK2001: unresolved external symbol __imp__GrannyFindMatchingMember@16    etergrnlib.lib    UserInterface
    Error    298    error LNK2001: unresolved external symbol __imp__GrannyUpdateModelMatrix@20    etergrnlib.lib    UserInterface
    Error    299    error LNK2001: unresolved external symbol __imp__GrannyNewMeshDeformer@16    etergrnlib.lib    UserInterface
     

  5. I implemented the switchbot with 5 slots but I have a problem.
    No change bonuses.
    Code for the charms subject is right in the file.

     

     

    Sysser : 

    0820 14:23:35984 :: Traceback (most recent call last):

    0820 14:23:35984 ::   File "ui.py", line 1108, in OnToggleDown

    0820 14:23:35984 ::   File "switchbot.py", line 57, in Activate

    0820 14:23:35984 :: AttributeError
    0820 14:23:35984 :: : 
    0820 14:23:35984 :: 'int' object has no attribute 'gameWindow'
    0820 14:23:35984 :: 

     

     

     

    ui.py : 1108

        def OnToggleDown(self):
            if self.eventDown:
                self.eventDown()

     

     

    switchbot.py : 57 

            if self.parentWindow.parentWindow.gameWindow != None:
                self.sub_parent.blockBar.swib_normal.SetColor(COLOR_ACTIVE)
            pass 

    FULL FUNCTION :

     

    class BonusSelector(ui.Bar):
        def Activate(self):
            self.sub_parent.resetSwitch()
            self.Status_new.SetColor(COLOR_ACTIVE)
            self.sub_parent.StatusBar.SetColor(COLOR_ACTIVE)
            self.sub_parent.StatusText.SetText("Activ")
            self.Starter.SetText("Opreste schimbarea ("+str(self.index+1)+")")
            self.sub_parent.boni_active = 1
            if self.parentWindow.parentWindow.gameWindow != None:
                self.sub_parent.blockBar.swib_normal.SetColor(COLOR_ACTIVE)
            pass
        def Deactivate(self):
            self.sub_parent.resetSwitch()
            self.Status_new.SetColor(COLOR_INACTIVE)
            self.sub_parent.StatusBar.SetColor(COLOR_INACTIVE)
            self.sub_parent.StatusText.SetText("Dezactivati")
            self.Starter.SetText("Incepeti schimbarea ("+str(self.index+1)+")")
            self.sub_parent.boni_active = 0
            if self.sub_parent.parentWindow.parentWindow.gameWindow != None:
                self.sub_parent.blockBar.swib_normal.SetColor(COLOR_INACTIVE)
            pass
        
        def Activate_rare(self):
            self.sub_parent.resetSwitch_rare()
            self.sub_parent.StatusBar_rare.SetColor(COLOR_ACTIVE_RARE)
            self.sub_parent.StatusText_rare.SetText("6/7 Activ")
            self.Starter_rare_boni.SetText("Opreste 6/7")
            self.sub_parent.boni_rare_active = 1
            if self.parentWindow.parentWindow.gameWindow != None:
                self.sub_parent.blockBar.swib_rare.SetColor(COLOR_ACTIVE_RARE)
            pass
        def Deactivate_rare(self):
            self.sub_parent.resetSwitch_rare()
            # self.Status_new.SetColor(COLOR_INACTIVE)
            self.sub_parent.StatusBar_rare.SetColor(COLOR_INACTIVE_RARE)
            self.sub_parent.StatusText_rare.SetText("6/7 inactiv")
            self.Starter_rare_boni.SetText("alege 6/7")
            self.Starter_rare_boni.SetUp()
            self.sub_parent.boni_rare_active = 0
            if self.sub_parent.parentWindow.parentWindow.gameWindow != None:
                self.sub_parent.blockBar.swib_rare.SetColor(COLOR_INACTIVE_RARE)
            pass
            
        def Finish(self):
            self.Status_new.SetColor(COLOR_FINISHED)
            self.sub_parent.StatusBar.SetColor(COLOR_FINISHED)
            self.sub_parent.StatusText.SetText("Terminat")
            self.Starter.SetText("Bonusul ("+str(self.index+1)+") a fost schimbat.")
            self.sub_parent.boni_active = 0
            if self.sub_parent.parentWindow.parentWindow.gameWindow != None:
                self.sub_parent.blockBar.swib_normal.SetColor(COLOR_FINISHED)
            pass
            
        def Finish_rare(self):
            # self.Status_new.SetColor(COLOR_FINISHED)
            self.sub_parent.StatusBar_rare.SetColor(COLOR_FINISHED)
            self.sub_parent.StatusText_rare.SetText("6/7 terminat")
            self.Starter_rare_boni.SetText("6/7 schimbat")
            self.sub_parent.boni_rare_active = 0
            if self.sub_parent.parentWindow.parentWindow.gameWindow != None:
                self.sub_parent.blockBar.swib_rare.SetColor(COLOR_FINISHED)
            pass
        def Block(self):
            self.BlockBar.Show()
            self.Starter.Hide()
            pass
        def Unblock(self):
            self.BlockBar.Hide()
            self.Starter.Show()
            pass

×
×
  • 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.