Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

Juver Source Code Features Merge or Recreate Your Own .

Skilled Illusionist
Joined
Jul 13, 2013
Messages
316
Reaction score
53
do i still need to create an item, on necklace earing or ring, with the cps of the m__bs_enchent+7.cps

for the lightning effect to appear?


nope , ill try to add sir geger code to old juver
cause mines already updated ill redownload it and
put the codes ill post ss later .
 
Skilled Illusionist
Joined
Feb 16, 2013
Messages
376
Reaction score
15
what is the problemm ??

Code:
#include "stdafx.h"
#include "./GLCharClient.h"
#include "./GLFactEffect.h"
#include "./GLGaeaClient.h"
#include "./GLItemMan.h"
#include "./GLStrikeM.h"
#include "RANPARAM.h"


#include "../RanClientUILib/Interface/InnerInterface.h"
#include "../RanClientUILib/Interface/DamageDisplay.h"


#include "../../EngineLib/DxCommon/DxShadowMap.h"
#include "../../EngineLib/DxEffect/Char/DxEffCharData.h"
#include "../../EngineLib/DxEffect/Single/DxEffGroupPlayer.h"
#include "../RanClientUILib/Interface/ItemShopIconMan.h"


#include "../enginelib/Meshs/DxSkinPieceData.h"//add abl
#include "../enginelib/Meshs/DxSkinCharPiece.h"
#include "../enginelib/Meshs/DxSkinPieceRootData.h"


//add vcf
#include "../EngineLib/Meshs/DxSkinVehicle.h"
#include "../EngineLib/Meshs/DxSkinVehicleData.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#endif


GLCharClient::GLCharClient(void) 
    : m_pd3dDevice(NULL)
    , m_pSkinChar(NULL)


    , m_vDir(0,0,-1)
    , m_vDirOrig(0,0,-1)
    , m_vPos(0,0,0)
    , m_vServerPos(0,0,0)
    , m_fAge(0.0f)
    , m_Action(GLAT_IDLE)
    , m_dwActState(NULL)
    , m_vTarPos(0,0,0)
    , m_fIdleTime(0.0f)
    , m_fMoveDelay(0.0f)
    
    , m_dwANISUBSELECT(0)
    , m_dwANISUBGESTURE(0)


    , m_vMaxOrg(6,20,6)
    , m_vMinOrg(-6,0,-6)
    
    , m_vMax(6,20,6)
    , m_vMin(-6,0,-6)
    , m_fHeight(20.f)
    
    , m_CHARINDEX(GLCI_FIGHTER_M)
    , m_dwGaeaID(0)
    , m_dwCeID(0)
    
    , m_pLandManClient(NULL)
    , m_pGlobNode(NULL)
    , m_pQuadNode(NULL)
    , m_pCellNode(NULL)
    
    , m_emANIMAINSKILL(AN_SKILL)
    , m_emANISUBSKILL(AN_SUB_NONE)
    
    , m_emANISUBTYPE(AN_SUB_NONE)
    , m_dwRevData(NULL)
    
    , m_fSTATE_MOVE(0.0f)
    , m_fSTATE_DELAY(0.0f)
    
    , m_bSTATE_PANT(false)
    , m_bSTATE_STUN(false)
    
    , m_fSKILL_MOVE(0.0f)
    , m_fITEM_MOVE_R(0.0f)
    , m_fITEM_MOVE (0.0f)
    , m_fATTVELO( 0.0f )
    , m_fITEMATTVELO_R ( 0.0f ) 
    , m_fITEMATTVELO ( 0.0f ) 
    , m_dwSummonGUID ( GAEAID_NULL )
    
    , m_wTARNUM(0)
    , m_vTARPOS(0,0,0)
    , m_wACTIVESKILL_LEVEL(0)
    
    , m_fattTIMER(0.0f)
    , m_nattSTEP(0)
    , m_bVehicle ( FALSE )
    , m_bItemShopOpen ( false )
    , m_dwTransfromSkill(SNATIVEID::ID_NULL)
    , m_bSafeZone(false)
{
    D3DXMatrixIdentity( &m_matTrans );
    DISABLEALLLANDEFF();
}


GLCharClient::~GLCharClient(void)
{
    FACTEFF::DeleteAllEffect( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, m_sSKILLFACT, m_sSTATEBLOWS );
    SAFE_DELETE(m_pSkinChar);


    if ( m_bItemShopOpen )
    {
CInnerInterface::GetInstance().GetItemShopIconMan()->DEL_SHOP_ICON( m_dwGaeaID );
    }


}


BOOL GLCharClient::IsValidBody ()
{
    return ( m_Action < GLAT_FALLING );
}


BOOL GLCharClient::IsDie ()
{
    if ( IsACTION(GLAT_DIE) ) return TRUE;


    return FALSE;
}


BOOL GLCharClient::IsVisibleDetect ()
{
    if ( IsSTATE(EM_REQ_VISIBLENONE) || IsSTATE(EM_REQ_VISIBLEOFF) )    return FALSE;


    BOOL bRECVISIBLE = GLGaeaClient::GetInstance().GetCharacter()->m_bRECVISIBLE;
    if ( m_bINVISIBLE && !bRECVISIBLE ) return FALSE;


    return TRUE;
}


HRESULT GLCharClient::Create ( GLLandManClient* pLandManClient, SDROP_CHAR* pCharData, LPDIRECT3DDEVICEQ pd3dDevice )
{
    m_pd3dDevice = pd3dDevice;
    m_pLandManClient = pLandManClient;
    if ( pCharData )    m_CharData = *pCharData;


    m_bVehicle = pCharData->m_bVehicle;
    m_sVehicle.m_dwGUID = pCharData->m_sVehicle.m_dwGUID;
    m_sVehicle.m_emTYPE = pCharData->m_sVehicle.m_emTYPE;
    m_sVehicle.m_sVehicleID = pCharData->m_sVehicle.m_sVehicleID;


    m_bItemShopOpen = pCharData->m_bItemShopOpen;


    for ( int i = 0; i < ACCE_TYPE_SIZE; ++i )
    {
m_sVehicle.m_PutOnItems[i].Assign( pCharData->m_sVehicle.m_PutOnItems[i] );
    }


    m_sVehicle.ITEM_UPDATE();


    //    Note : ÇöÁ¦ ½ºÅ³ FACT ¾÷µ¥ÀÌÆ®.
    //
    for ( int i=0; i<SKILLFACT_SIZE; ++i )
    {
SDROP_SKILLFACT &sDropFact = pCharData->sSKILLFACT[i];
if ( sDropFact.sNATIVEID==NATIVEID_NULL() ) continue;


RECEIVE_SKILLFACT ( sDropFact.sNATIVEID, sDropFact.wLEVEL, sDropFact.wSLOT, sDropFact.fAGE );
    }
    
    //    Note : ÇöÁ¦ »óÅÂÀÌ»ó ¾÷µ¥ÀÌÆ®.
    //
    for ( i=0; i<EMBLOW_MULTI; ++i )
    {
SDROP_STATEBLOW &sDropBlow = pCharData->sSTATEBLOWS[i];
if ( sDropBlow.emBLOW==EMBLOW_NONE ) continue;


SSTATEBLOW *pSTATEBLOW = NULL;
if ( sDropBlow.emBLOW <= EMBLOW_SINGLE ) pSTATEBLOW = &m_sSTATEBLOWS[0];
else pSTATEBLOW = &m_sSTATEBLOWS[sDropBlow.emBLOW-EMBLOW_SINGLE];


sDropBlow.emBLOW = sDropBlow.emBLOW;
sDropBlow.fAGE = sDropBlow.fAGE;
sDropBlow.fSTATE_VAR1 = sDropBlow.fSTATE_VAR1;
sDropBlow.fSTATE_VAR2 = sDropBlow.fSTATE_VAR2;
    }


    DISABLEALLLANDEFF();
    SLEVEL_ETC_FUNC *pEtcFunc = m_pLandManClient->GetLevelEtcFunc();
    if( pEtcFunc && pEtcFunc->m_bUseFunction[EMETCFUNC_LANDEFFECT] )
    {
int iNum = 0;
for( i=0; i<EMLANDEFFECT_MULTI; i++ )
{
if( pCharData->nLandEffect[i] == -1 ) continue;


SLANDEFFECT landEffect = pEtcFunc->FindLandEffect(pCharData->nLandEffect[i]);
ADDLANDEFF( landEffect, iNum );
iNum++;
}
    }


    //    Note : Äɸ¯ÅÍÀÇ ¿ÜÇüÀ» ¼³Á¤.
    EMCHARINDEX emIndex = CharClassToIndex(m_CharData.emClass);
    DxSkinCharData* pSkinChar = DxSkinCharDataContainer::GetInstance().LoadData( GLCONST_CHAR::szCharSkin[emIndex], pd3dDevice, TRUE );
    if ( !pSkinChar )    return E_FAIL;


    SAFE_DELETE(m_pSkinChar);
    m_pSkinChar = new DxSkinChar;
    m_pSkinChar->SetCharData ( pSkinChar, pd3dDevice, TRUE );
    UpdateSuit ();
    UPDATE_ITEM();


    // Note : 1.AABB Box¸¦ °¡Á®¿Â´Ù. 2.³ôÀ̸¦ °è»êÇØ ³õ´Â´Ù.
    m_pSkinChar->GetAABBBox( m_vMaxOrg, m_vMinOrg );
    m_fHeight = m_vMaxOrg.y - m_vMinOrg.y;


    //    Note : ¿¡´Ï¸ÞÀÌ¼Ç ÃʱâÈ­.
    //
    ReSelectAnimation ();


    //    Note : À̵¿ Á¦¾î ÃʱâÈ­.
    m_strName = m_CharData.szName;
    m_dwGaeaID = m_CharData.dwGaeaID;
    m_dwCeID = m_CharData.dwCeID;
    m_vPos = m_CharData.vPos;
    m_vDir = m_CharData.vDir;
    m_dwSummonGUID = m_CharData.dwSummonGUID;


    m_CHARINDEX = CharClassToIndex(m_CharData.emClass);


    m_actorMove.SetMaxSpeed ( GLCONST_CHAR::cCONSTCLASS[m_CHARINDEX].fWALKVELO );
    if ( pLandManClient )
    {
m_actorMove.Create ( pLandManClient->GetNaviMesh(), m_vPos, -1 );
    }


    if ( pCharData->dwActState & EM_ACT_RUN ) SetSTATE ( EM_ACT_RUN );
    if ( pCharData->dwActState & EM_REQ_VISIBLENONE )    SetSTATE ( EM_REQ_VISIBLENONE );
    if ( pCharData->dwActState & EM_REQ_VISIBLEOFF )    SetSTATE ( EM_REQ_VISIBLEOFF );
    if ( pCharData->dwActState & EM_ACT_PEACEMODE ) SetSTATE ( EM_ACT_PEACEMODE );


    switch ( pCharData->Action )
    {
    case GLAT_MOVE:
{
//    Note : À̵¿ ½ÃÅ°±â À§ÇØ ³»ºÎ Àü´Þ ¸Þ½ÃÁö ¹ß»ý.
//
GLMSG::SNETPC_GOTO_BRD NetMsgGoto;
NetMsgGoto.dwActState = pCharData->dwActState;
NetMsgGoto.fDelay = 0.0f;
NetMsgGoto.vCurPos = pCharData->vPos;
NetMsgGoto.vTarPos = pCharData->vTarPos;
MsgGoto ( (NET_MSG_GENERIC*) &NetMsgGoto );
}
break;


    case GLAT_FALLING:
TurnAction ( GLAT_FALLING );
break;


    case GLAT_DIE:
TurnAction ( GLAT_DIE );
break;
    case GLAT_GATHERING:
m_dwANISUBGESTURE = m_CharData.m_dwANISUBTYPE;
TurnAction( GLAT_GATHERING );
break;
    case GLAT_TALK:
m_dwANISUBGESTURE = m_CharData.m_dwANISUBTYPE;
TurnAction ( GLAT_TALK );
break;
    };


    if ( pCharData->dwFLAGS & SDROP_CHAR::CHAR_GEN )
    {
if ( !IsSTATE(EM_REQ_VISIBLENONE) && !IsSTATE(EM_REQ_VISIBLEOFF) )
{
D3DXMATRIX matEffect;
D3DXMatrixTranslation ( &matEffect, m_vPos.x, m_vPos.y, m_vPos.z );


STARGETID sTargetID(CROW_PC,pCharData->dwGaeaID,m_vPos);
DxEffGroupPlayer::GetInstance().NewEffGroup
(
GLCONST_CHAR::strREBIRTH_EFFECT.c_str(),
matEffect,
&sTargetID
);
}
    }


    if ( !m_pSkinChar->GETCURANIMNODE() )
    {
CDebugSet::ToLogFile ( "ERORR : current animation node null point error [ %s ] [ M %d S %d ]", m_pSkinChar->GetFileName(), m_pSkinChar->GETCURMTYPE(), m_pSkinChar->GETCURSTYPE() );
m_pSkinChar->DEFAULTANI ();
    }


    //    Note : Ŭ·´¸¶Å© ¹öÀü È®ÀÎ.
    //
    GLGaeaClient::GetInstance().GetCharacter()->ReqClubMarkInfo ( m_CharData.dwGuild, m_CharData.dwGuildMarkVer );


    if ( m_bItemShopOpen )
    {
CInnerInterface::GetInstance().GetItemShopIconMan()->ADD_SHOP_ICON( m_dwGaeaID );
    }


    return S_OK;
}


DWORD GLCharClient::GET_PK_COLOR ()
{
    if ( m_CharData.nBright >= 0 )    return GLCONST_CHAR::dwPK_NORMAL_NAME_COLOR;


    int nLEVEL = 0;
    for ( nLEVEL=0; nLEVEL<GLCONST_CHAR::EMPK_STATE_LEVEL; ++nLEVEL )
    {
if ( GLCONST_CHAR::sPK_STATE[nLEVEL].nPKPOINT <= m_CharData.nBright )    break;
    }


    if ( nLEVEL>=GLCONST_CHAR::EMPK_STATE_LEVEL )    nLEVEL = GLCONST_CHAR::EMPK_STATE_LEVEL-1;


    return GLCONST_CHAR::sPK_STATE[nLEVEL].dwNAME_COLOR;
}


SITEM* GLCharClient::GET_SLOT_ITEMDATA ( EMSLOT _slot )
{
    if ( VALID_SLOT_ITEM(_slot) )
    {
const SITEMCLIENT &sITEMCLIENT = GET_SLOT_ITEM ( _slot );


SITEM* pITEM = GLItemMan::GetInstance().GetItem ( sITEMCLIENT.sNativeID );
return pITEM;
    }


    return NULL;
}


HRESULT GLCharClient::UpdateSuit ()
{
    GASSERT(m_pd3dDevice);


    EMCHARINDEX emIndex = CharClassToIndex(m_CharData.emClass);
    DxSkinCharData* pSkinChar = DxSkinCharDataContainer::GetInstance().FindData ( GLCONST_CHAR::szCharSkin[emIndex] );
    if ( !pSkinChar )    return E_FAIL;


    
    const GLCONST_CHARCLASS &sCONST = GLCONST_CHAR::cCONSTCLASS[emIndex];


    if ( sCONST.dwHEADNUM > m_CharData.wFace )
    {
std::string strHEAD_CPS = sCONST.strHEAD_CPS[m_CharData.wFace];
    
PDXCHARPART pCharPart = NULL;
pCharPart = m_pSkinChar->GetPiece(PIECE_HEAD); //    ÇöÁ¦ ÀåÂø ½ºÅ².


if ( pCharPart && strcmp(strHEAD_CPS.c_str(),pCharPart->m_szFileName) )
{
DxSkinPieceRootData* pPieceDataRoot;
pPieceDataRoot = DxSkinPieceRootDataContainer::GetInstance().LoadData( strHEAD_CPS.c_str() , m_pd3dDevice , TRUE );
if ( pPieceDataRoot )
{
if ( pPieceDataRoot->GetUseCPS() )
{
m_pSkinChar->SetPiece( pPieceDataRoot->GetCpsName().c_str(), m_pd3dDevice, 0x0, 0, TRUE );
}
m_pSkinChar->SetCharPieceData( pPieceDataRoot->GetData()
, m_pd3dDevice
, pPieceDataRoot->GetBoneLink()
, pPieceDataRoot->GetWeaponSlot()
, pPieceDataRoot->GetType()
, 0x0
, 0
, TRUE );
}else{
m_pSkinChar->SetPiece ( strHEAD_CPS.c_str(), m_pd3dDevice, 0x0, 0, TRUE );
}
}
    }


    if ( sCONST.dwHAIRNUM > m_CharData.wHair )
    {
std::string strHAIR_CPS = sCONST.strHAIR_CPS[m_CharData.wHair];
    
PDXCHARPART pCharPart = NULL;
pCharPart = m_pSkinChar->GetPiece(PIECE_HAIR); //    ÇöÁ¦ ÀåÂø ½ºÅ².


if ( pCharPart && strcmp(strHAIR_CPS.c_str(),pCharPart->m_szFileName) )
{
DxSkinPieceRootData* pPieceDataRoot;
pPieceDataRoot = DxSkinPieceRootDataContainer::GetInstance().LoadData( strHAIR_CPS.c_str() , m_pd3dDevice , TRUE );
if ( pPieceDataRoot )
{
if ( pPieceDataRoot->GetUseCPS() )
{
m_pSkinChar->SetPiece( pPieceDataRoot->GetCpsName().c_str(), m_pd3dDevice, 0x0, 0, TRUE );
}
m_pSkinChar->SetCharPieceData( pPieceDataRoot->GetData()
, m_pd3dDevice
, pPieceDataRoot->GetBoneLink()
, pPieceDataRoot->GetWeaponSlot()
, pPieceDataRoot->GetType()
, 0x0
, 0
, TRUE );
}else{
m_pSkinChar->SetPiece ( strHAIR_CPS.c_str(), m_pd3dDevice, 0x0, 0, TRUE );
}
}
    }


    m_pSkinChar->SetHairColor( m_CharData.wHairColor );


    for ( int i=0; i<SLOT_NSIZE_S_2; i++ )
    {
// ÇöÀç ÀåÂøÁßÀÎ ¹«±â°¡ ¾Æ´Ï¸é ³Ñ¾î°£´Ù.
if( !IsCurUseArm( EMSLOT(i) ) ) continue;


SITEMCLIENT &ItemClient = m_CharData.m_PutOnItems[i];


SNATIVEID nidITEM = ItemClient.nidDISGUISE;
if ( nidITEM==SNATIVEID(false) )    nidITEM = ItemClient.sNativeID;


if ( !m_bVehicle && i == SLOT_VEHICLE ) nidITEM = SNATIVEID(false);
else if ( i == SLOT_VEHICLE )
{
//add vcf 
if ( m_sVehicle.m_emTYPE == VEHICLE_TYPE_BOARD )
{
nidITEM = m_sVehicle.GetSkinID();
if ( nidITEM == SNATIVEID(false) )
{
m_sVehicle.m_sVehicleID = ItemClient.sNativeID;
nidITEM = ItemClient.sNativeID;
}
}
}
if ( m_pSkinChar->m_pSkinVehicle )//add vcf
{
if ( !m_bVehicle )
{
m_pSkinChar->ResetVCF();
}
}


if ( nidITEM == SNATIVEID(false) )
{
//    Note : ±âº» ½ºÅ²°ú Áö±Ý ÀåÂøµÈ ½ºÅ²ÀÌ Æ²¸± °æ¿ì.
//    SLOT->PIECE.
PDXSKINPIECE pSkinPiece = NULL;    //    ±âº» ½ºÅ².
PDXCHARPART pCharPart = NULL;    //    ÇöÁ¦ ÀåÂø ½ºÅ².


EMPIECECHAR emPiece = SLOT_2_PIECE(EMSLOT(i));
if ( emPiece!=PIECE_SIZE )
{
pSkinPiece = pSkinChar->GetPiece(emPiece);    //    ±âº» ½ºÅ².
pCharPart = m_pSkinChar->GetPiece(emPiece);    //    ÇöÁ¦ ÀåÂø ½ºÅ².
}


if ( pSkinPiece )
{//add abl
if ( pCharPart && strcmp(pSkinPiece->m_szFileName,pCharPart->m_szFileName) )
{
//MessageBox(0,pSkinPiece->m_szFileName,pCharPart->m_szFileName,0);
DxSkinPieceRootData* pPieceDataRoot;
pPieceDataRoot = DxSkinPieceRootDataContainer::GetInstance().LoadData( pSkinPiece->m_szFileName , m_pd3dDevice , TRUE );
if ( pPieceDataRoot )
{
if ( pPieceDataRoot->GetUseCPS() )
{
m_pSkinChar->SetPiece( pPieceDataRoot->GetCpsName().c_str(), m_pd3dDevice, 0X0, 0, TRUE );
}
else
{
EMPIECECHAR emPiece_a = SLOT_2_PIECE(EMSLOT(i));
PDXSKINPIECE pSkinPiece_a = NULL;    
if ( emPiece_a!=PIECE_SIZE )
{
pSkinPiece_a = pSkinChar->GetPiece(emPiece_a );    //
}
m_pSkinChar->SetPiece ( pSkinPiece_a->m_szFileName, m_pd3dDevice, 0X0, 0, TRUE );
}
m_pSkinChar->SetCharPieceData( pPieceDataRoot->GetData()
, m_pd3dDevice
, pPieceDataRoot->GetBoneLink()
, pPieceDataRoot->GetWeaponSlot()
, pPieceDataRoot->GetType()
, 0x0
, 0
, TRUE );
}
else
{
m_pSkinChar->SetPiece ( pSkinPiece->m_szFileName, m_pd3dDevice, 0X0, 0, TRUE );
m_pSkinChar->ResetABL ( emPiece ); //clear abl when you remove an item
}
}
else
{
m_pSkinChar->ResetABL ( emPiece );//clear abl when you remove an item
} 
}
else
{//add abl
if ( pCharPart )
{
if ( ( emPiece == PIECE_UPBODY || emPiece == PIECE_LOBODY || emPiece == PIECE_GLOVE || emPiece == PIECE_FOOT ) )
{
switch (emPiece)
{
case PIECE_UPBODY: m_pSkinChar->ResetPiece(PIECE_ELE01); break;
case PIECE_LOBODY: m_pSkinChar->ResetPiece(PIECE_ELE02); break;
case PIECE_GLOVE: m_pSkinChar->ResetPiece(PIECE_ELE03); break;
case PIECE_FOOT: m_pSkinChar->ResetPiece(PIECE_ELE04); break;
};
}
if ( m_pSkinChar->m_pSkinCharPiece[PIECE_RHAND] && emPiece != PIECE_LHAND )
{
m_pSkinChar->ResetPiece(emPiece);
}
else
{
if ( emPiece != PIECE_LHAND )
m_pSkinChar->ResetPiece(emPiece);
//if ( !m_pSkinChar->m_pSkinCharPiece[PIECE_RHAND] && emPiece == PIECE_LHAND )
//    m_pSkinChar->ResetPiece(emPiece);
EMSLOT emRHand = GetCurRHand();
SITEM* pRHAND = GET_SLOT_ITEMDATA ( emRHand );
if ( pRHAND )// dual cps fix
{
EMCHARCLASS emSex = CharClassGetSex( emIndex );
EMCPSINDEX    emLeft = CPSIND_NULL;
if ( emSex == GLCC_MAN )
{
emLeft = CPSIND_M_LEFT;
}else{
emLeft = CPSIND_W_LEFT;
}


if (strcmp(pRHAND->GetCpsFile(emLeft), "") == 0)
{
//MessageBox (NULL,"empty",0,0);


//if ( !m_pSkinChar->m_pSkinCharPiece[PIECE_RHAND] && emPiece == PIECE_LHAND )
m_pSkinChar->ResetPiece(emPiece);
}
else
{
//MessageBox (NULL,"not empty",0,0);
}
}
else
{
if ( !m_pSkinChar->m_pSkinCharPiece[PIECE_RHAND] && emPiece == PIECE_LHAND )
m_pSkinChar->ResetPiece(emPiece);
}
}
}
}
}
else
{
SITEM* pItem = GLItemMan::GetInstance().GetItem ( nidITEM );
if ( pItem )
{//add abl
EMCHARCLASS emSex = CharClassGetSex( emIndex );
EMCPSINDEX    emLeft = CPSIND_NULL;
EMCPSINDEX    emRight = CPSIND_NULL;
if ( emSex == GLCC_MAN )
{
emLeft = CPSIND_M_LEFT;
emRight = CPSIND_M_RIGHT;
}else{
emLeft = CPSIND_W_LEFT;
emRight = CPSIND_W_RIGHT;
}
//if ( emRight != CPSIND_NULL )
{
DxSkinPieceRootData* pPieceDataRoot;
pPieceDataRoot = DxSkinPieceRootDataContainer::GetInstance().LoadData( pItem->GetCpsFile(emRight) , m_pd3dDevice , TRUE );
if ( pPieceDataRoot )
{
if ( pPieceDataRoot->GetUseCPS() )
{
m_pSkinChar->SetPiece( pPieceDataRoot->GetCpsName().c_str(), m_pd3dDevice, NULL, ItemClient.GETGRADE_EFFECT(), TRUE );
}
if ( ( emPiece == PIECE_UPBODY || emPiece == PIECE_LOBODY || emPiece == PIECE_GLOVE || emPiece == PIECE_FOOT ) )
{
switch (emPiece)
{
case PIECE_UPBODY: m_pSkinChar->ResetPiece(PIECE_ELE01); break;
case PIECE_LOBODY: m_pSkinChar->ResetPiece(PIECE_ELE02); break;
case PIECE_GLOVE: m_pSkinChar->ResetPiece(PIECE_ELE03); break;
case PIECE_FOOT: m_pSkinChar->ResetPiece(PIECE_ELE04); break;
};


if ( ItemCustom.GETGRADE_EFFECT() > 5 )
{
CString strEle, strSex, strPiece;


if( emSex == GLCC_MAN ) strSex = "m";
else strSex = "w";
switch (emPiece)
{
case PIECE_UPBODY: strPiece = "body"; break;
case PIECE_LOBODY: strPiece = "leg"; break;
case PIECE_GLOVE: strPiece = "hand"; break;
case PIECE_FOOT: strPiece = "foot"; break;
};
strEle.Format("%m_bs_w_enchent+10%d.cps", strSex, strPiece, ItemCustom.GETGRADE_EFFECT());
m_pSkinChar->SetPiece ( strEle, m_pd3dDevice, NULL, TRUE );
}
}
else
{
m_pSkinChar->ResetCPS ( PIECE_RHAND );//remove existing cps when the abl data dont have cps
}
m_pSkinChar->SetCharPieceData( pPieceDataRoot->GetData()
, m_pd3dDevice
, pPieceDataRoot->GetBoneLink()
, pPieceDataRoot->GetWeaponSlot()
, (DWORD) PIECE_RHAND
, NULL
, ItemClient.GETGRADE_EFFECT()
, TRUE );
m_pSkinChar->Clear( PIECE_LHAND );
}else{
m_pSkinChar->SetPiece ( pItem->GetCpsFile(emRight), m_pd3dDevice, NULL, ItemClient.GETGRADE_EFFECT(), TRUE );
}
}
//if ( emLeft != CPSIND_NULL )
{
DxSkinPieceRootData* pPieceDataRoot;
pPieceDataRoot = DxSkinPieceRootDataContainer::GetInstance().LoadData( pItem->GetCpsFile(emLeft) , m_pd3dDevice , TRUE );
if ( pPieceDataRoot )
{
if ( pPieceDataRoot->GetUseCPS() )
{
m_pSkinChar->SetPiece( pPieceDataRoot->GetCpsName().c_str(), m_pd3dDevice, NULL, ItemClient.GETGRADE_EFFECT(), TRUE );
}
else
{
m_pSkinChar->ResetCPS ( PIECE_LHAND );//remove existing cps when the abl data dont have cps
}
m_pSkinChar->SetCharPieceData( pPieceDataRoot->GetData()
, m_pd3dDevice
, pPieceDataRoot->GetBoneLink()
, pPieceDataRoot->GetWeaponSlot()
, (DWORD) PIECE_LHAND
, NULL
, ItemClient.GETGRADE_EFFECT()
, TRUE );
}else{
m_pSkinChar->SetPiece ( pItem->GetCpsFile(emLeft), m_pd3dDevice, NULL, ItemClient.GETGRADE_EFFECT(), TRUE );
}
}


//if ( !m_pSkinChar->m_pSkinCharPiece[ PIECE_LHAND ] && !m_pSkinChar->m_pSkinCharPiece[ PIECE_RHAND ] )
{
if ( pItem->sBasicOp.emItemType != ITEM_VEHICLE )
{
DxSkinPieceRootData* pPieceDataRoot;
pPieceDataRoot = DxSkinPieceRootDataContainer::GetInstance().LoadData( pItem->GetWearingFile(emIndex) , m_pd3dDevice , TRUE );
if ( pPieceDataRoot )
{
if ( pPieceDataRoot->GetUseCPS() )
{
m_pSkinChar->SetPiece( pPieceDataRoot->GetCpsName().c_str(), m_pd3dDevice, NULL, ItemClient.GETGRADE_EFFECT(), TRUE );
}
else
{
EMPIECECHAR emPiece_a = SLOT_2_PIECE(EMSLOT(i));
PDXSKINPIECE pSkinPiece_a = NULL;    
if ( emPiece_a!=PIECE_SIZE )
{
pSkinPiece_a = pSkinChar->GetPiece(emPiece_a );    //
}
m_pSkinChar->SetPiece ( pSkinPiece_a->m_szFileName, m_pd3dDevice, 0X0, 0, TRUE );
}
m_pSkinChar->SetCharPieceData( pPieceDataRoot->GetData()
, m_pd3dDevice
, pPieceDataRoot->GetBoneLink()
, pPieceDataRoot->GetWeaponSlot()
, pPieceDataRoot->GetType()
, NULL
, ItemClient.GETGRADE_EFFECT()
, TRUE );
}else{
m_pSkinChar->SetPiece ( pItem->GetWearingFile(emIndex), m_pd3dDevice, NULL, ItemClient.GETGRADE_EFFECT(), TRUE );
}
}
//add vcf
else
{
if ( pItem->sVehicle.emVehicleType == VEHICLE_TYPE_BOARD )
{
m_pSkinChar->m_fLengthSRC = 150.0f;
}
else
{
m_pSkinChar->m_fLengthSRC = 30.0f;
}
DxSkinVehicleData* pVehicleData;
pVehicleData = DxSkinVehicleDataContainer::GetInstance().LoadData( pItem->GetWearingFile(emIndex) , m_pd3dDevice , TRUE );
if ( pVehicleData )
{
m_pSkinChar->SetVehicleData( pVehicleData
, m_pd3dDevice
, TRUE );
for( DWORD iLoopPart = ACCE_TYPE_SKIN ; iLoopPart < ACCE_TYPE_SIZE ; iLoopPart++ )
{
SITEM* pItemPart = GLItemMan::GetInstance().GetItem ( m_sVehicle.m_PutOnItems[iLoopPart].sNativeID );


if ( pItemPart )
{
if ( m_pSkinChar->m_pSkinVehicle )
{
m_pSkinChar->m_pSkinVehicle->SetPiece( pItemPart->GetVpsFile(), m_pd3dDevice, NULL, ItemClient.GETGRADE_EFFECT(), TRUE );
}
}
}
}
else
{
m_pSkinChar->SetPiece ( pItem->GetWearingFile(emIndex), m_pd3dDevice, NULL, ItemClient.GETGRADE_EFFECT(), TRUE );
}
}
}
}
}
    }


    if( m_dwTransfromSkill != SNATIVEID::ID_NULL )
    {
PGLSKILL pSkill = GLSkillMan::GetInstance().GetData ( m_sSKILLFACT[m_dwTransfromSkill].sNATIVEID.wMainID, m_sSKILLFACT[m_dwTransfromSkill].sNATIVEID.wSubID );
if( pSkill ) 
{
for( BYTE i = 0; i < SKILL::EMTRANSFORM_NSIZE; i++ )
{
//if( m_CharData.wSex == 1 )
if ( m_CharData.emClass == GLCC_FIGHTER_M ||
m_CharData.emClass == GLCC_ARMS_M ||
m_CharData.emClass == GLCC_EXTREME_M ||
m_CharData.emClass == GLCC_ARCHER_M ||
m_CharData.emClass == GLCC_SPIRIT_M ||
m_CharData.emClass == GLCC_SCIENCE_M ||
m_CharData.emClass == GLCC_ASSASIN_M ||
m_CharData.emClass == GLCC_TESTING_M
)
{ 
//add abl
DxSkinPieceRootData* pPieceDataRoot;
pPieceDataRoot = DxSkinPieceRootDataContainer::GetInstance().LoadData( pSkill->m_sSPECIAL_SKILL.strTransform_Man[i].c_str() , m_pd3dDevice , TRUE );
if ( pPieceDataRoot )
{
if ( pPieceDataRoot->GetUseCPS() )
{
m_pSkinChar->SetPiece( pPieceDataRoot->GetCpsName().c_str(), m_pd3dDevice, 0X0, 0, TRUE );
}
m_pSkinChar->SetCharPieceData( pPieceDataRoot->GetData()
, m_pd3dDevice
, pPieceDataRoot->GetBoneLink()
, pPieceDataRoot->GetWeaponSlot()
, pPieceDataRoot->GetType()
, 0x0
, 0
, TRUE );
}
else
{
m_pSkinChar->SetPiece ( pSkill->m_sSPECIAL_SKILL.strTransform_Man[i].c_str(), m_pd3dDevice, 0X0, 0, TRUE );
}
}
else
{
DxSkinPieceRootData* pPieceDataRoot;
pPieceDataRoot = DxSkinPieceRootDataContainer::GetInstance().LoadData( pSkill->m_sSPECIAL_SKILL.strTransform_Woman[i].c_str() , m_pd3dDevice , TRUE );
if ( pPieceDataRoot )
{
if ( pPieceDataRoot->GetUseCPS() )
{
m_pSkinChar->SetPiece( pPieceDataRoot->GetCpsName().c_str(), m_pd3dDevice, 0X0, 0, TRUE );
}
m_pSkinChar->SetCharPieceData( pPieceDataRoot->GetData()
, m_pd3dDevice
, pPieceDataRoot->GetBoneLink()
, pPieceDataRoot->GetWeaponSlot()
, pPieceDataRoot->GetType()
, 0x0
, 0
, TRUE );
}
else
{
m_pSkinChar->SetPiece ( pSkill->m_sSPECIAL_SKILL.strTransform_Woman[i].c_str(), m_pd3dDevice, 0X0, 0, TRUE );
}
}
}
}
    }




    //    Note : ½ºÅ³ ¹öÇÁ, »óÅÂÀÌ»ó È¿°ú »ý¼º.
    FACTEFF::ReNewEffect ( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, m_sSKILLFACT, m_sSTATEBLOWS, m_matTrans, m_vDir );


    if( GLCONST_CHAR::cCONSTCLASS[emIndex].strCLASS_EFFECT.size() != 0 )
    {
DxEffcharDataMan::GetInstance().PutPassiveEffect ( m_pSkinChar, GLCONST_CHAR::cCONSTCLASS[emIndex].strCLASS_EFFECT.c_str(), &m_vDir );
    }


    return S_OK;
}


WORD GLCharClient::GetBodyRadius ()
{
    return GETBODYRADIUS();
}


void GLCharClient::DisableSkillFact()
{
    EMSLOT emRHand = GetCurRHand();    
    SITEM* pRightItem = GET_SLOT_ITEMDATA(emRHand);    
    
    for ( int i=0; i<SKILLFACT_SIZE; ++i )
    {
if ( m_sSKILLFACT[i].sNATIVEID == NATIVEID_NULL() ) continue;
    
PGLSKILL pSkill = GLSkillMan::GetInstance().GetData ( m_sSKILLFACT[i].sNATIVEID );
if ( !pSkill ) continue;


// ½ºÅ³ ÀڽŠ¹öÇÁ
if ( pSkill->m_sBASIC.emIMPACT_TAR != TAR_SELF || pSkill->m_sBASIC.emIMPACT_REALM != REALM_SELF ) continue;


GLITEM_ATT emSKILL_RITEM = pSkill->m_sBASIC.emUSE_RITEM;


// ½ºÅ³ µµ±¸ Á¾¼Ó ¾øÀ½
if ( emSKILL_RITEM == ITEMATT_NOCARE )    continue;


// ½ºÅ³ °ú ¹«±â°¡ ºÒÀÏÄ¡
if( !pRightItem || !CHECHSKILL_ITEM(emSKILL_RITEM,pRightItem->sSuitOp.emAttack) )
{
FACTEFF::DeleteSkillFactEffect ( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, m_sSKILLFACT[i].sNATIVEID );
DISABLESKEFF( i );
}
    }
}




void GLCharClient::ReSelectAnimation ()
{
    EMSLOT emRHand = GetCurRHand();
    EMSLOT emLHand = GetCurLHand();


    SITEM* pRHAND = NULL;
    SITEM* pLHAND = NULL;


    if ( m_CharData.m_PutOnItems[emRHand].sNativeID!=NATIVEID_NULL() )
pRHAND = GLItemMan::GetInstance().GetItem ( m_CharData.m_PutOnItems[emRHand].sNativeID );
    
    if ( m_CharData.m_PutOnItems[emLHand].sNativeID!=NATIVEID_NULL() )
pLHAND = GLItemMan::GetInstance().GetItem ( m_CharData.m_PutOnItems[emLHand].sNativeID );


    m_emANISUBTYPE = CHECK_ANISUB ( pRHAND, pLHAND );


    // Á¦½ºÃ³ÁßÀÌ¸é ¾Ö´Ï¸ÞÀÌ¼Ç ¸®¼Â ¾ÈÇÔ.
    if ( IsACTION ( GLAT_TALK ) || IsACTION(GLAT_GATHERING) )
    {
//    Note : ¿¡´Ï¸ÞÀÌ¼Ç ÃʱâÈ­.
//
m_pSkinChar->SELECTANI ( m_pSkinChar->GETCURMTYPE(), m_emANISUBTYPE );
    }
}


void GLCharClient::SetPosition ( const D3DXVECTOR3 &vPos )
{
    m_vPos = vPos;
    m_actorMove.SetPosition ( m_vPos, -1 );
    if ( m_actorMove.PathIsActive() ) m_actorMove.Stop();
}


void GLCharClient::TurnAction ( EMACTIONTYPE toAction )
{
    //    Note : ÀÌÀü ¾×¼Ç Ãë¼Ò.
    //
    switch ( m_Action )
    {
    case GLAT_IDLE:
break;


    case GLAT_FALLING:
if ( toAction==GLAT_FALLING )    return;
break;


    case GLAT_DIE:
if ( toAction==GLAT_FALLING || toAction==GLAT_DIE )    return;
break;


    case GLAT_CONFT_END:
ReSetSTATE(EM_ACT_CONFT_WIN);
break;


    default:
break;
    };


    //    Note : ¾×¼Ç ÃʱâÈ­.
    //
    m_Action = toAction;


    switch ( m_Action )
    {
    case GLAT_IDLE:
m_fIdleTime = 0.0f;
break;


    case GLAT_ATTACK:
StartAttackProc ();
break;


    case GLAT_SKILL:
{
//    Note : ½ºÅ³ Á¤º¸ °¡Á®¿È.
PGLSKILL pSkill = GLSkillMan::GetInstance().GetData ( m_idACTIVESKILL.wMainID, m_idACTIVESKILL.wSubID );
if ( !pSkill ) return;


m_emANIMAINSKILL = pSkill->m_sEXT_DATA.emANIMTYPE;
m_emANISUBSKILL = pSkill->m_sEXT_DATA.emANISTYPE;


StartSkillProc ();
}
break;


    case GLAT_FALLING:
FACTEFF::DeleteEffect ( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, m_sSKILLFACT, m_sSTATEBLOWS );
break;


    case GLAT_CONFT_END:
break;


    case GLAT_DIE:
FACTEFF::DeleteEffect ( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, m_sSKILLFACT, m_sSTATEBLOWS );
break;
    case GLAT_GATHERING: 
break;


    default:
GASSERT("GLCharacter::TurnAction() ÁغñµÇÁö ¾ÊÀº ACTION ÀÌ µé¾î¿Ô½À´Ï´Ù.");
break;
    };


    if ( m_actorMove.PathIsActive() )
    {
if ( !IsACTION(GLAT_MOVE) && !IsACTION(GLAT_PUSHPULL) ) m_actorMove.Stop();
    }
}


HRESULT GLCharClient::UpateAnimation ( float fTime, float fElapsedTime )
{
    HRESULT hr=S_OK;


    BOOL bPeaceZone = GLGaeaClient::GetInstance().GetActiveMap()->IsPeaceZone();
    if ( !bPeaceZone && IsSTATE(EM_ACT_PEACEMODE) ) bPeaceZone = TRUE;


    BOOL bLowSP = FALSE;
    BOOL bFreeze = FALSE;


    EMANI_MAINTYPE emMType;
    EMANI_SUBTYPE emSType;


    switch ( m_Action )
    {
    case GLAT_IDLE:
m_fIdleTime += fElapsedTime;


if ( bPeaceZone && m_pSkinChar->GETANI ( AN_PLACID, AN_SUB_NONE ) )
{
emMType = AN_PLACID;
emSType = AN_SUB_NONE;
if ( m_bVehicle )
{
int emType = m_sVehicle.m_emTYPE ;
if ( emType == VEHICLE_TYPE_BOARD )
{
emSType = (EMANI_SUBTYPE) (AN_SUB_HOVERBOARD ) ;
}
else
{
emMType = m_sVehicle.GetVehicleMainAni( m_sVehicle.m_emTYPE ); //modify vehicle anim
emSType = m_sVehicle.GetVehicleSubAni(AN_PLACID,false);
}
}
else emSType = AN_SUB_NONE;




}
else
{
BOOL bPANT(FALSE); // Ç涱°Å¸².


if ( m_pSkinChar->GETANI ( AN_GUARD_L, m_emANISUBTYPE ) )
{
bPANT = bLowSP || m_bSTATE_PANT;
}


if ( bPANT )
{
emMType = AN_GUARD_L;
emSType = m_emANISUBTYPE;
}
else
{
emMType = AN_GUARD_N;
emSType = m_emANISUBTYPE;
}
}
//add abl
if ( m_pSkinChar->m_pSkinCharPiece[PIECE_RHAND] )
{
m_pSkinChar->m_pSkinCharPiece[PIECE_RHAND]->SELECTANI( AN_GUARD_N , AN_SUB_NONE );
}
if ( m_pSkinChar->m_pSkinCharPiece[PIECE_LHAND] )
{
m_pSkinChar->m_pSkinCharPiece[PIECE_LHAND]->SELECTANI( AN_GUARD_N , AN_SUB_NONE );
}
//add vcf
if ( m_pSkinChar->m_pSkinVehicle )
{
m_pSkinChar->m_pSkinVehicle->SELECTANI( AN_GUARD_N , AN_SUB_NONE );
}


m_pSkinChar->SELECTANI ( emMType, emSType );
break;


    case GLAT_MOVE:
emMType = IsSTATE(EM_ACT_RUN) ? AN_RUN : AN_WALK;
emSType = bPeaceZone ? AN_SUB_NONE : m_emANISUBTYPE;
if ( m_bVehicle )
{
int emType = m_sVehicle.m_emTYPE;


if (emType == VEHICLE_TYPE_BOARD )
{
emSType = (EMANI_SUBTYPE) ( AN_SUB_HOVERBOARD );
}
else //modify vehicle anim
{
emMType = m_sVehicle.GetVehicleMainAni(m_sVehicle.m_emTYPE);
emSType = m_sVehicle.GetVehicleSubAni( IsSTATE(EM_ACT_RUN) ? AN_RUN : AN_WALK ,false);
}


if ( m_pSkinChar->m_pSkinVehicle )
{
if ( emMType == AN_RUN )
{
m_pSkinChar->m_pSkinVehicle->SELECTANI( AN_RUN , AN_SUB_NONE );
}
else if ( emMType == AN_WALK )
{
m_pSkinChar->m_pSkinVehicle->SELECTANI( AN_PLACID , AN_SUB_NONE );
}


}
}
m_pSkinChar->SELECTANI ( emMType, emSType );
break;


    case GLAT_ATTACK:
{
EMSLOT emRHand = GetCurRHand();
EMSLOT emLHand = GetCurLHand();


SITEM* pRHAND = NULL;
SITEM* pLHAND = NULL;


if ( m_CharData.m_PutOnItems[emRHand].sNativeID!=NATIVEID_NULL() )
pRHAND = GLItemMan::GetInstance().GetItem ( m_CharData.m_PutOnItems[emRHand].sNativeID );


if ( m_CharData.m_PutOnItems[emLHand].sNativeID!=NATIVEID_NULL() )
pLHAND = GLItemMan::GetInstance().GetItem ( m_CharData.m_PutOnItems[emLHand].sNativeID );


EMANI_SUBTYPE emANISUBTYPE = CHECK_ATTACK_ANISUB ( pRHAND, pLHAND );
m_pSkinChar->SELECTANI ( AN_ATTACK, emANISUBTYPE, NULL, m_dwANISUBSELECT );
//add abl 


if ( m_pSkinChar->m_pSkinCharPiece[PIECE_RHAND] )
{
m_pSkinChar->m_pSkinCharPiece[PIECE_RHAND]->SELECTANI( AN_PLACID , AN_SUB_NONE );
}
if ( m_pSkinChar->m_pSkinCharPiece[PIECE_LHAND] )
{
m_pSkinChar->m_pSkinCharPiece[PIECE_LHAND]->SELECTANI( AN_PLACID , AN_SUB_NONE );
}
if ( m_pSkinChar->ISENDANIM () )    TurnAction ( GLAT_IDLE );
}
break;


    case GLAT_SKILL:// abl skill fix
m_pSkinChar->SELECTANI ( m_emANIMAINSKILL, m_emANISUBSKILL );


if ( m_pSkinChar->m_pSkinCharPiece[PIECE_RHAND] )
{
m_pSkinChar->m_pSkinCharPiece[PIECE_RHAND]->SELECTANI( AN_PLACID , AN_SUB_NONE );
}
if ( m_pSkinChar->m_pSkinCharPiece[PIECE_LHAND] )
{
m_pSkinChar->m_pSkinCharPiece[PIECE_LHAND]->SELECTANI( AN_PLACID , AN_SUB_NONE );
}


if ( m_pSkinChar->ISENDANIM () )    
{
TurnAction ( GLAT_IDLE );


if ( m_pSkinChar->m_pSkinCharPiece[PIECE_RHAND] )
{
m_pSkinChar->m_pSkinCharPiece[PIECE_RHAND]->SELECTANI( AN_GUARD_N , AN_SUB_NONE );
}
if ( m_pSkinChar->m_pSkinCharPiece[PIECE_LHAND] )
{
m_pSkinChar->m_pSkinCharPiece[PIECE_LHAND]->SELECTANI( AN_GUARD_N , AN_SUB_NONE );
}
}






break;


    case GLAT_TALK:
{
BOOL bOK = m_pSkinChar->SELECTANI ( AN_GESTURE, EMANI_SUBTYPE(m_dwANISUBGESTURE) );
if ( !bOK )
{
TurnAction ( GLAT_IDLE );
break;
}


PSANIMCONTAINER pANIMCON = m_pSkinChar->GETCURANIM();
if ( !(pANIMCON->m_dwFlag&ACF_LOOP) && m_pSkinChar->ISENDANIM () )
{
TurnAction ( GLAT_IDLE );
}
}
break;


    case GLAT_SHOCK:


emSType = m_emANISUBTYPE;
if ( m_bVehicle )
{
int emType = m_sVehicle.m_emTYPE;
if ( emType == VEHICLE_TYPE_BOARD )
{
emSType = (EMANI_SUBTYPE) ( AN_SUB_HOVERBOARD );
}
else
{
emMType = m_sVehicle.GetVehicleMainAni( m_sVehicle.m_emTYPE ); //modify vehicle anim
emSType = m_sVehicle.GetVehicleSubAni(AN_SHOCK,false);
}
}
else emMType = AN_SHOCK;


m_pSkinChar->SELECTANI ( emMType, emSType );
if ( m_pSkinChar->ISENDANIM () )    TurnAction ( GLAT_IDLE );
break;


    case GLAT_PUSHPULL:
m_pSkinChar->SELECTANI ( AN_SHOCK, m_emANISUBTYPE );
break;


    case GLAT_FALLING:


emSType = AN_SUB_NONE;
if ( m_bVehicle )
{
int emType = m_sVehicle.m_emTYPE;
if ( emType == VEHICLE_TYPE_BOARD )
{
emSType = (EMANI_SUBTYPE) ( AN_SUB_HOVERBOARD );
}
else
{
emMType = m_sVehicle.GetVehicleMainAni( m_sVehicle.m_emTYPE ); //modify vehicle anim
emSType = m_sVehicle.GetVehicleSubAni(AN_DIE,false);
}
}
else emMType = AN_DIE;


m_pSkinChar->SELECTANI ( emMType, emSType, EMANI_ENDFREEZE );


//add vcf
if ( m_pSkinChar->m_pSkinVehicle )
{
m_pSkinChar->m_pSkinVehicle->SELECTANI( AN_ATTACK , AN_SUB_NONE );
}
if ( m_pSkinChar->ISENDANIM () )    
{
TurnAction ( GLAT_DIE );
}
break;


    case GLAT_DIE:
bFreeze = TRUE;
m_pSkinChar->SELECTANI ( AN_DIE, AN_SUB_NONE, EMANI_ENDFREEZE );
m_pSkinChar->TOENDTIME();
break;


    case GLAT_CONFT_END:
{
EMANI_MAINTYPE emMTYPE(AN_CONFT_LOSS);
if ( IsSTATE(EM_ACT_CONFT_WIN) )    emMTYPE = AN_CONFT_WIN;


m_pSkinChar->SELECTANI ( emMTYPE, AN_SUB_NONE );
if ( m_pSkinChar->ISENDANIM () )    TurnAction ( GLAT_IDLE );
}
break;
    case GLAT_GATHERING:
{
BOOL bOK = m_pSkinChar->SELECTANI ( AN_GATHERING, EMANI_SUBTYPE(m_dwANISUBGESTURE) );
if ( !bOK )
{
TurnAction ( GLAT_IDLE );
break;
}


PSANIMCONTAINER pANIMCON = m_pSkinChar->GETCURANIM();
if ( !(pANIMCON->m_dwFlag&ACF_LOOP) && m_pSkinChar->ISENDANIM () )
{
TurnAction ( GLAT_IDLE );
}
}
break;
    };


    //    Note : ½ºÅ² ¾÷µ¥ÀÌÆ®.
    //
    m_pSkinChar->SetPosition ( m_vPos );




    BOOL bContinue = IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL);


    //    Note : »óÅ ÀÌ»ó¿¡ µû¶ó ¸ð¼Ç ¼Óµµ¸¦ Á¶Á¤ÇÑ´Ù.
    //
    float fSkinAniElap = fElapsedTime;
    switch ( m_Action )
    {
    case GLAT_MOVE:
fSkinAniElap *= ( GETMOVE_ITEM() + GETMOVEVELO() );
break;


    case GLAT_ATTACK:
    case GLAT_SKILL:
fSkinAniElap *= GETATTVELO();;
fSkinAniElap += GETATT_ITEM();;
break;
    };


    m_pSkinChar->FrameMove ( fTime, fSkinAniElap, bContinue, bFreeze, !bPeaceZone );


    //    Note : ºñ ÀüÅõ Áö¿ªÀ϶§ Ç¥½Ã ¾ÈµÇ¾ß ÇÏ´Â ¾ÆÀÌÅÛ(´Ü°Ë,Åõô) ÀÎÁö °Ë»çÈÄ ·£´õ ²ô±â.
    //
    if ( bPeaceZone )
    {
EMSLOT emRHand = GetCurRHand();
EMSLOT emLHand = GetCurLHand();


SITEM *pItemR(NULL);
SITEM *pItemL(NULL);


if ( VALID_SLOT_ITEM(emRHand) )
{
pItemR = GLItemMan::GetInstance().GetItem ( GET_SLOT_ITEM(emRHand).sNativeID );
}


if ( VALID_SLOT_ITEM(emLHand) )
{
pItemL = GLItemMan::GetInstance().GetItem ( GET_SLOT_ITEM(emLHand).sNativeID );
}


if ( pItemR )
{
BOOL bRend = !( pItemR->sSuitOp.emAttack==ITEMATT_DAGGER || pItemR->sSuitOp.emAttack==ITEMATT_THROW );
m_pSkinChar->SetPartRend ( PIECE_RHAND, bRend );
}


if ( pItemL )
{
BOOL bRend = !( pItemL->sSuitOp.emAttack==ITEMATT_DAGGER || pItemL->sSuitOp.emAttack==ITEMATT_THROW );
m_pSkinChar->SetPartRend ( PIECE_LHAND, bRend );
}
    }
    else
    {
m_pSkinChar->SetPartRend ( PIECE_RHAND, TRUE );
m_pSkinChar->SetPartRend ( PIECE_LHAND, TRUE );
    }


    return S_OK;
}


BOOL GLCharClient::IsCollisionVolume ()
{
    const CLIPVOLUME &CV = DxViewPort::GetInstance().GetClipVolume();
    if ( COLLISION::IsCollisionVolume ( CV, m_vMax, m_vMin ) )    return TRUE;


    return FALSE;
}


float GLCharClient::GETATTVELO ()
{
//    return m_fATTVELO<0.0f?0.0f:m_fATTVELO;
    float fATTVELO = m_fATTVELO + m_fITEMATTVELO_R;
    return fATTVELO<0.0f?0.0f:fATTVELO;
}


float GLCharClient::GETMOVEVELO ()
{
    float fMOVE = m_fSTATE_MOVE + m_fSKILL_MOVE + m_fITEM_MOVE_R; 
//    float fMOVE = m_fSTATE_MOVE + m_fSKILL_MOVE;
    return fMOVE<0.0f?0.0f:fMOVE;
}


float GLCharClient::GETATT_ITEM ()
{
    float fATTVELO = m_fITEMATTVELO / 100;
    return fATTVELO;
}
float GLCharClient::GETMOVE_ITEM ()
{
    float fMOVE = m_fITEM_MOVE / GLCONST_CHAR::cCONSTCLASS[m_CHARINDEX].fRUNVELO;
    return fMOVE<0.0f?0.0f:fMOVE;
}


float GLCharClient::GetMoveVelo ()
{
    float fDefaultVelo = IsSTATE(EM_ACT_RUN) ? GLCONST_CHAR::cCONSTCLASS[m_CHARINDEX].fRUNVELO : GLCONST_CHAR::cCONSTCLASS[m_CHARINDEX].fWALKVELO;
    float fMoveVelo = fDefaultVelo * ( GETMOVEVELO() + GETMOVE_ITEM() );
    return fMoveVelo;
}


void GLCharClient::UpdateSpecialSkill()
{
    // º¯½Å ½ºÅ³ üũ
    if( m_dwTransfromSkill != SNATIVEID::ID_NULL )
    {
if( m_sSKILLFACT[m_dwTransfromSkill].IsSpecialSkill( SKILL::EMSSTYPE_TRANSFORM ) )
{
// ¾²·¯Áö´Â ¸ð¼ÇÀÌ¸é º¯½ÅÇØÁ¦
STARGETID sTargetID(CROW_PC,m_dwGaeaID,m_vPos);
if( IsACTION( GLAT_FALLING ) )
{
FACTEFF::DeleteSkillFactEffect ( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, m_sSKILLFACT[m_dwTransfromSkill].sNATIVEID );
}


if( m_sSKILLFACT[m_dwTransfromSkill].sNATIVEID != NATIVEID_NULL() ) 
{ 
PGLSKILL pSkill = GLSkillMan::GetInstance().GetData ( m_sSKILLFACT[m_dwTransfromSkill].sNATIVEID.wMainID, m_sSKILLFACT[m_dwTransfromSkill].sNATIVEID.wSubID );
if( pSkill && pSkill->m_sSPECIAL_SKILL.emSSTYPE == SKILL::EMSSTYPE_TRANSFORM )
{
if( pSkill->m_sSPECIAL_SKILL.strEffectName.size() != 0 )
{
if( m_sSKILLFACT[m_dwTransfromSkill].fAGE <= pSkill->m_sSPECIAL_SKILL.dwRemainSecond && 
!m_sSKILLFACT[m_dwTransfromSkill].bRanderSpecialEffect )
{
D3DXMATRIX matTrans; 
D3DXMatrixTranslation ( &matTrans, m_vPos.x, m_vPos.y, m_vPos.z );
DxEffGroupPlayer::GetInstance().NewEffGroup ( pSkill->m_sSPECIAL_SKILL.strEffectName.c_str(), matTrans, &sTargetID );
m_sSKILLFACT[m_dwTransfromSkill].bRanderSpecialEffect = TRUE;
}
}
}
}else{
DISABLESKEFF(m_dwTransfromSkill);
UpdateSuit(); 
m_dwTransfromSkill = SNATIVEID::ID_NULL;
}




}else{
DISABLESKEFF(m_dwTransfromSkill);
UpdateSuit();
m_dwTransfromSkill = SNATIVEID::ID_NULL;
}
    }
}


HRESULT GLCharClient::FrameMove ( float fTime, float fElapsedTime )
{
    HRESULT hr=S_OK;




    // ÁöÇü È¿°ú ¾÷µ¥ÀÌÆ®
    UpdateLandEffect();
    //    Note : »óÅ °»½Å.
    //
    UPDATE_DATA ( fTime, fElapsedTime, TRUE );


    //    Note : Äɸ¯ ÇöÁ¦ À§Ä¡ ¾÷´ëÀÌÆ®.
    //
    m_vPos = m_actorMove.Position ();


    //    Note : °ø°Ý ¸ñÇ¥ÀÇ À¯È¿¼º °Ë»ç.
    // (ÁÖÀÇ) Ÿ°¹Á¤º¸ »ç¿ëÀü ¹Ýµå½Ã È£ÃâÇÏ¿© À¯È¿¼º °Ë»ç ÇÊ¿ä.
    //
    GLCOPY* pTarget = GLGaeaClient::GetInstance().GetCopyActor ( m_sTargetID );
    if ( !pTarget )
    {
m_sTargetID.dwID = EMTARGET_NULL;
if ( IsACTION(GLAT_ATTACK) )    TurnAction ( GLAT_IDLE );
    }


    //    Note : ¿¡´Ï¸ÞÀ̼Ç, ½ºÅ² ¾÷µ¥ÀÌÆ®.
    //
    UpateAnimation ( fTime, fElapsedTime );


    switch ( m_Action )
    {
    case GLAT_MOVE:
{
//    Note : Äɸ¯ÀÇ À̵¿ ¾÷µ¥ÀÌÆ®.
//
m_actorMove.SetMaxSpeed ( GetMoveVelo () );
m_actorMove.Update ( fElapsedTime );
if ( !m_actorMove.PathIsActive() )
{
m_actorMove.Stop ();
TurnAction ( GLAT_IDLE );
}


//    Note : Äɸ¯ÀÇ ÇöÁ¦ À§Ä¡ ¾÷µ¥ÀÌÆ®.
//
m_vPos = m_actorMove.Position();


//    Note : ÇöÁ¦ ¹æÇâ ¾÷µ¥ÀÌÆ®.
//
D3DXVECTOR3 vMovement = m_actorMove.NextPosition();
if ( vMovement.x != FLT_MAX && vMovement.y != FLT_MAX && vMovement.z != FLT_MAX )
{
D3DXVECTOR3 vDirection = vMovement - m_vPos;
if ( !DxIsMinVector(vDirection,0.2f) )
{
D3DXVec3Normalize ( &vDirection, &vDirection );
m_vDir = vDirection;
}
}
}
break;


    case GLAT_ATTACK:
{
AttackProc ( fElapsedTime );


//    Note : °ø°Ý ¹æÇâÀ¸·Î ȸÀü.
//
GLCOPY* pTarget = GLGaeaClient::GetInstance().GetCopyActor ( m_sTargetID );
if ( pTarget )
{
D3DXVECTOR3 vDirection = pTarget->GetPosition() - m_vPos;
D3DXVec3Normalize ( &vDirection, &vDirection );
m_vDir = vDirection;
}
}
break;


    case GLAT_SKILL:
{
SkillProc ( fElapsedTime );


//    Note : °ø°Ý ¹æÇâÀ¸·Î ȸÀü.
//
m_vDir = UpdateSkillDirection ( m_vPos, m_vDir, m_idACTIVESKILL, m_vTARPOS, m_sTARIDS );
}
break;


    case GLAT_PUSHPULL:
{
m_actorMove.Update ( fElapsedTime );
if ( !m_actorMove.PathIsActive() )
{
m_actorMove.Stop ();
TurnAction ( GLAT_IDLE );
}
}
break;
    };


    //    Note : ½ºÅ³ ÀÌÆåÆ® ¾÷µ¥ÀÌÆ®.
    //
    FACTEFF::UpdateSkillEffect ( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, m_sSKILLFACT, m_sSTATEBLOWS );


    UpdateSpecialSkill();


    //    Note : ÇöÁ¦ À§Ä¡ ¾÷µ¥ÀÌÆ®.
    //
    m_vPos = m_actorMove.Position();


    //    Note : ÇöÁ¦ À§Ä¡¿Í ¹æÇâÀ¸·Î Transform ¸ÞÆ®¸¯½º °è»ê.
    //
    D3DXMATRIX matTrans, matYRot;
    D3DXMatrixTranslation ( &matTrans, m_vPos.x, m_vPos.y, m_vPos.z );
    float fThetaY = DXGetThetaYFromDirection ( m_vDir, m_vDirOrig );
    D3DXMatrixRotationY ( &matYRot, fThetaY );


    m_matTrans = matYRot * matTrans;


    //    Note : AABB °è»ê.
    //
    m_vMax = m_vPos + m_vMaxOrg;
    m_vMin = m_vPos + m_vMinOrg;


    return S_OK;
}


float GLCharClient::GetDirection ()
{
    return DXGetThetaYFromDirection ( m_vDir, m_vDirOrig );
}


HRESULT GLCharClient::Render ( LPDIRECT3DDEVICEQ pd3dDevice, CLIPVOLUME &cv, BOOL bRendAABB )
{
    HRESULT hr;
    if ( !IsVisibleDetect() ) return S_FALSE;


    //    Note : m_bINVISIBLE °¡ ÂüÀÏ °æ¿ì ¹ÝÅõ¸íÇÏ°Ô Ç¥ÇöÇؾßÇÔ.
    //
    if ( m_bINVISIBLE )
    {
DxEffcharDataMan::GetInstance().PutPassiveEffect ( m_pSkinChar, GLCONST_CHAR::strHALFALPHA_EFFECT.c_str(), &m_vDir );
    }
    else
    {
DxEffcharDataMan::GetInstance().OutEffect ( m_pSkinChar, GLCONST_CHAR::strHALFALPHA_EFFECT.c_str() );
    }


    //    TODO : m_bINVISIBLE °¡ ÂüÀÏ °æ¿ì ¹ÝÅõ¸íÇÏ°Ô Ç¥ÇöÇؾßÇÔ.


    if ( !COLLISION::IsCollisionVolume ( cv, m_vMax, m_vMin ) )    return S_OK;


    if ( m_pSkinChar )//add vcf
    {
if ( m_pSkinChar->m_pSkinVehicle )
{
m_pSkinChar->RenderVehicle( pd3dDevice, m_matTrans );
DxBoneTrans *pBoneCur = NULL;
pBoneCur = m_pSkinChar->m_pSkinVehicle->GetSkeleton()->FindBone( m_pSkinChar->m_pSkinVehicle->m_strChar_Font.c_str() );
if ( pBoneCur )
{
D3DXVECTOR3 vRotation_Font, vTransform_Font;


vRotation_Font = m_pSkinChar->m_pSkinVehicle->m_vRotation_Font;
vTransform_Font = m_pSkinChar->m_pSkinVehicle->m_vTransform_Font;


D3DXMATRIXA16    matLocalRot, matScale, matRot;
matRot = pBoneCur->matCombined;
D3DXMatrixIdentity( &matScale );


D3DXMatrixRotationYawPitchRoll( &matScale, vRotation_Font.x, vRotation_Font.y, vRotation_Font.z );


D3DXMatrixMultiply( &matLocalRot, &matScale, &matRot );


D3DXVECTOR3    vVelocity;
D3DXVec3TransformNormal ( &vVelocity, &vTransform_Font, &matRot );
matLocalRot._41 += vVelocity.x;
matLocalRot._42 += vVelocity.y;
matLocalRot._43 += vVelocity.z;


hr = m_pSkinChar->Render ( pd3dDevice, matLocalRot );
}
}else{
hr = m_pSkinChar->Render ( pd3dDevice, m_matTrans );
}
    }
    if ( FAILED(hr) )    return hr;


    #ifdef _SYNC_TEST
    {
EDITMESHS::RENDERSPHERE ( pd3dDevice, m_vServerPos, 2.0f );
    }
    #endif


    return S_OK;
}


HRESULT GLCharClient::RenderShadow ( LPDIRECT3DDEVICEQ pd3dDevice, CLIPVOLUME &cv )
{
    HRESULT hr;
    if ( !IsVisibleDetect() ) return S_FALSE;
    if ( IsACTION(GLAT_DIE) ) return S_FALSE;
    if ( !COLLISION::IsCollisionVolume ( cv, m_vMax, m_vMin ) )    return S_OK;


    //    Note : ±×¸²ÀÚ ·£´õ¸µ.
    //
    hr = DxShadowMap::GetInstance().RenderShadowCharMob ( m_pSkinChar, m_matTrans, pd3dDevice );
    if ( FAILED(hr) )    return hr;


    return S_OK;
}


HRESULT GLCharClient::RestoreDeviceObjects ( LPDIRECT3DDEVICEQ pd3dDevice )
{
    m_pSkinChar->RestoreDeviceObjects ( pd3dDevice );
    return S_OK;
}


HRESULT GLCharClient::InvalidateDeviceObjects ()
{
    m_pSkinChar->InvalidateDeviceObjects ();
    return S_OK;
}


EMELEMENT GLCharClient::GET_ITEM_ELMT ()
{
    EMSLOT emRHand = GetCurRHand();
    EMSLOT emLHand = GetCurLHand();


    SITEM* pRHandItem = GET_SLOT_ITEMDATA(emRHand);
    SITEM* pLHandItem = GET_SLOT_ITEMDATA(emLHand);


    EMELEMENT emELEMENT(EMELEMENT_SPIRIT);
    if ( pRHandItem && pRHandItem->sSuitOp.sBLOW.emTYPE!=EMBLOW_NONE )
    {
emELEMENT = STATE_TO_ELEMENT ( pRHandItem->sSuitOp.sBLOW.emTYPE );
    }
    else if ( pLHandItem && pLHandItem->sSuitOp.sBLOW.emTYPE!=EMBLOW_NONE )
    {
emELEMENT = STATE_TO_ELEMENT ( pLHandItem->sSuitOp.sBLOW.emTYPE );
    }


    return emELEMENT;
}


void GLCharClient::ReceiveDamage ( DWORD wDamage, DWORD dwDamageFlag, STARGETID sACTOR )
{
    if ( dwDamageFlag & DAMAGE_TYPE_SHOCK )    TurnAction ( GLAT_SHOCK );


    D3DXVECTOR3 vPos = GetPosBodyHeight();
    CInnerInterface::GetInstance().SetDamage( vPos, wDamage, dwDamageFlag, UI_ATTACK );


    if ( dwDamageFlag & DAMAGE_TYPE_CRUSHING_BLOW )
    {
// °­ÇÑŸ°Ý ÀÌÆåÆ®
D3DXVECTOR3 vDIR = sACTOR.vPos - m_vPos;


D3DXVECTOR3 vDIR_ORG(1,0,0);
float fdir_y = DXGetThetaYFromDirection ( vDIR, vDIR_ORG );


D3DXMATRIX matTrans;
D3DXMatrixRotationY ( &matTrans, fdir_y );
matTrans._41 = m_vPos.x;
matTrans._42 = m_vPos.y + 10.0f;
matTrans._43 = m_vPos.z;


//    Note : ÀÚ±â À§Ä¡ ÀÌÆåÆ® ¹ß»ý½ÃÅ´.
DxEffGroupPlayer::GetInstance().NewEffGroup ( GLCONST_CHAR::strCRUSHING_BLOW_EFFECT.c_str(), matTrans, &sACTOR );
    }


    m_CharData.sHP.DECREASE(wDamage);
    m_CharData.sHP.dwNow;


    //    Note : ¹æ¾î½ºÅ³ÀÇ ÀÌÆåÆ®°¡ ÀÖÀ»¶§ ¹ßµ¿½ÃÅ´.
    SKT_EFF_HOLDOUT ( sACTOR, dwDamageFlag );
}


void GLCharClient::ReceiveAVoid ()
{
    if ( IsCollisionVolume() )
    {
D3DXVECTOR3 vPos = GetPosBodyHeight();
CInnerInterface::GetInstance().SetDamage( vPos, 0, DAMAGE_TYPE_NONE, UI_ATTACK );
    }
}


void GLCharClient::ReceiveSwing ()
{
    m_pSkinChar->DOSHOCKMIX();
}


HRESULT GLCharClient::MsgMoveState ( NET_MSG_GENERIC* nmg )
{
    GLMSG::SNETPC_MOVESTATE_BRD *pNetMsg = reinterpret_cast<GLMSG::SNETPC_MOVESTATE_BRD*> ( nmg );


    BOOL bRun = IsSTATE ( EM_ACT_RUN );
    BOOL bToRun = pNetMsg->dwActState&EM_ACT_RUN;


    if ( bRun != bToRun )
    {
//    Note : À̵¿ »óÅ º¯°æ.
if ( bToRun ) SetSTATE(EM_ACT_RUN);
else ReSetSTATE(EM_ACT_RUN);


m_actorMove.SetMaxSpeed ( GetMoveVelo () );
    }


    if ( pNetMsg->dwActState & EM_REQ_VISIBLENONE )    SetSTATE ( EM_REQ_VISIBLENONE );
    else ReSetSTATE ( EM_REQ_VISIBLENONE );


    if ( pNetMsg->dwActState & EM_REQ_VISIBLEOFF )    SetSTATE ( EM_REQ_VISIBLEOFF );
    else ReSetSTATE ( EM_REQ_VISIBLEOFF );


    if ( pNetMsg->dwActState & EM_ACT_PEACEMODE )    SetSTATE ( EM_ACT_PEACEMODE );
    else ReSetSTATE ( EM_ACT_PEACEMODE );


    return S_OK;
}


HRESULT GLCharClient::MsgGoto ( NET_MSG_GENERIC* nmg )
{
    GLMSG::SNETPC_GOTO_BRD *pNetMsg = reinterpret_cast<GLMSG::SNETPC_GOTO_BRD*> ( nmg );


    if ( pNetMsg->dwActState&EM_ACT_RUN )    SetSTATE ( EM_ACT_RUN );
    else ReSetSTATE ( EM_ACT_RUN );


    m_sTargetID.vPos = pNetMsg->vTarPos;
    TurnAction ( GLAT_MOVE );


    BOOL bSucceed = m_actorMove.GotoLocation
    (
m_sTargetID.vPos+D3DXVECTOR3(0,+10,0),
m_sTargetID.vPos+D3DXVECTOR3(0,-10,0)
    );


    if ( bSucceed )
    {
m_actorMove.SetMaxSpeed ( GetMoveVelo() );
    }


    return S_OK;
}


void GLCharClient::MsgProcess ( NET_MSG_GENERIC* nmg )
{
    switch ( nmg->nType )
    {
    case NET_MSG_GCTRL_MOVESTATE_BRD: MsgMoveState ( nmg ); break;
    case NET_MSG_GCTRL_GOTO_BRD: MsgGoto ( nmg ); break;


    case NET_MSG_GCTRL_JUMP_POS_BRD:
{
GLMSG::SNETPC_JUMP_POS_BRD *pNetMsg = (GLMSG::SNETPC_JUMP_POS_BRD *) nmg;
m_vPos = pNetMsg->vPOS;
SetPosition ( m_vPos );
}
break;


    case NET_MSG_GCTRL_ATTACK_BRD:
{
GLMSG::SNETPC_ATTACK_BRD *pNetMsg = (GLMSG::SNETPC_ATTACK_BRD *) nmg;


//    Note : °ø°Ý ¼öÇà.
m_sTargetID.emCrow = pNetMsg->emTarCrow;
m_sTargetID.dwID = pNetMsg->dwTarID;
m_dwANISUBSELECT = pNetMsg->dwAniSel;
TurnAction ( GLAT_ATTACK );
}
break;


    case NET_MSG_GCTRL_ATTACK_CANCEL_BRD:
{
if ( IsACTION(GLAT_ATTACK) )    TurnAction ( GLAT_IDLE );
}
break;


    case NET_MSG_GCTRL_ATTACK_AVOID_BRD:
{
GLMSG::SNETPC_ATTACK_AVOID_BRD *pNetMsg = (GLMSG::SNETPC_ATTACK_AVOID_BRD *) nmg;


GLCOPY* pActor = GLGaeaClient::GetInstance().GetCopyActor ( pNetMsg->emTarCrow, pNetMsg->dwTarID );
if ( pActor )    pActor->ReceiveAVoid ();
}
break;


    case NET_MSG_GCTRL_ATTACK_DAMAGE_BRD:
{
GLMSG::SNETPC_ATTACK_DAMAGE_BRD *pNetMsg = (GLMSG::SNETPC_ATTACK_DAMAGE_BRD *) nmg;


GLCOPY* pActor = GLGaeaClient::GetInstance().GetCopyActor ( pNetMsg->emTarCrow, pNetMsg->dwTarID );
if ( pActor )
{
STARGETID sACTOR(GetCrow(),GetCtrlID(),GetPosition());
pActor->ReceiveDamage ( pNetMsg->nDamage, pNetMsg->dwDamageFlag, sACTOR );
}
}
break;


    case NET_MSG_GCTRL_ACTION_BRD:
{
GLMSG::SNET_ACTION_BRD *pNetMsg = (GLMSG::SNET_ACTION_BRD *)nmg;
TurnAction ( pNetMsg->emAction );
}
break;


    case NET_MSG_GCTRL_PUTON_RELEASE_BRD:
{
GLMSG::SNETPC_PUTON_RELEASE_BRD *pNetMsg = (GLMSG::SNETPC_PUTON_RELEASE_BRD *)nmg;


//    Á¦°ÅµÇ´Â ¾ÆÀÌÅÆ ¹Ý¿µ.
m_CharData.m_PutOnItems[pNetMsg->emSlot] = SITEMCLIENT ( SNATIVEID(false) );
UpdateSuit ();
UPDATE_ITEM();


ReSelectAnimation ();


// ¹«±â¿¡ µû¸¥ ¹öÇÁ¸¦ ÃʱâÈ­ ÇÑ´Ù.
DisableSkillFact();
}
break;


    case NET_MSG_GCTRL_PUTON_UPDATE_BRD:
{
GLMSG::SNETPC_PUTON_UPDATE_BRD *pNetMsg = (GLMSG::SNETPC_PUTON_UPDATE_BRD *)nmg;


//    Á¦°ÅµÇ´Â ¾ÆÀÌÅÆÀÌ ÀÖÀ» °æ¿ì.
if ( pNetMsg->emSlotRelease != SLOT_NSIZE_S_2 )
m_CharData.m_PutOnItems[pNetMsg->emSlotRelease] = SITEMCLIENT ( SNATIVEID(false) );


//    º¯°æµÇ´Â ¾ÆÀÌÅÆ ¹Ý¿µ.
m_CharData.m_PutOnItems[pNetMsg->emSlot] = pNetMsg->sItemClient;
UpdateSuit ();
UPDATE_ITEM();


ReSelectAnimation ();


// ¹«±â¿¡ µû¸¥ ¹öÇÁ¸¦ ÃʱâÈ­ ÇÑ´Ù.
DisableSkillFact();
}
break;


    case NET_MSG_GCTRL_PUTON_CHANGE_BRD:
{
GLMSG::SNETPC_PUTON_CHANGE_BRD *pNetMsg = (GLMSG::SNETPC_PUTON_CHANGE_BRD *)nmg;


SetUseArmSub( pNetMsg->bUseArmSub );


UpdateSuit ();
UPDATE_ITEM();


ReSelectAnimation ();


// ¹«±â¿¡ µû¸¥ ¹öÇÁ¸¦ ÃʱâÈ­ ÇÑ´Ù.
DisableSkillFact();
}
break;


    case NET_MSG_GCTRL_REQ_LEVELUP_BRD:
{
D3DXMATRIX matEffect;
D3DXMatrixTranslation ( &matEffect, m_vPos.x, m_vPos.y, m_vPos.z );


STARGETID sTargetID(CROW_PC,m_dwGaeaID,m_vPos);
DxEffGroupPlayer::GetInstance().NewEffGroup
(
GLCONST_CHAR::strLEVELUP_EFFECT.c_str(),
matEffect,
&sTargetID
);
}
break;


    case NET_MSG_GCTRL_REQ_SKILL_BRD:
{
GLMSG::SNETPC_REQ_SKILL_BRD *pNetMsg = (GLMSG::SNETPC_REQ_SKILL_BRD *)nmg;


m_idACTIVESKILL = pNetMsg->skill_id;
m_wACTIVESKILL_LEVEL = pNetMsg->wLEVEL;
m_vTARPOS = pNetMsg->vTARPOS;


m_wTARNUM = pNetMsg->wTARNUM;
if ( m_wTARNUM > EMTARGET_NET )
{
break;
}
else
{
memcpy ( m_sTARIDS, pNetMsg->sTARIDS, sizeof(STARID)*m_wTARNUM );
//    Note : ½ºÅ³ÀÌ ¹ßµ¿µÊ.
TurnAction ( GLAT_SKILL );
}
}
break;


    case NET_MSG_GCTRL_SKILL_CANCEL_BRD:
{
if ( IsACTION(GLAT_SKILL) )    TurnAction ( GLAT_IDLE );
}
break;


    case NET_MSG_GCTRL_SKILLFACT_BRD:
{
GLMSG::SNETPC_SKILLFACT_BRD *pNetMsg = (GLMSG::SNETPC_SKILLFACT_BRD *)nmg;


m_CharData.sHP.VARIATION ( pNetMsg->nVAR_HP );


//    µ¥¹ÌÁö ¸Þ½ÃÁö.
if ( pNetMsg->nVAR_HP < 0 )
{
if ( pNetMsg->dwDamageFlag & DAMAGE_TYPE_SHOCK )    TurnAction ( GLAT_SHOCK );
else ReceiveSwing ();


D3DXVECTOR3 vPos = GetPosBodyHeight();
CInnerInterface::GetInstance().SetDamage( vPos, static_cast<DWORD>(-pNetMsg->nVAR_HP), pNetMsg->dwDamageFlag, UI_UNDERATTACK );


//    Note : ¹æ¾î½ºÅ³ÀÇ ÀÌÆåÆ®°¡ ÀÖÀ»¶§ ¹ßµ¿½ÃÅ´.
STARGETID sACTOR(pNetMsg->sACTOR.GETCROW(),pNetMsg->sACTOR.GETID());
sACTOR.vPos = GLGaeaClient::GetInstance().GetTargetPos ( sACTOR );


SKT_EFF_HOLDOUT ( sACTOR, pNetMsg->dwDamageFlag );


if ( pNetMsg->dwDamageFlag & DAMAGE_TYPE_CRUSHING_BLOW )
{
// °­ÇÑŸ°Ý ÀÌÆåÆ®


D3DXVECTOR3 vDIR = sACTOR.vPos - m_vPos;


D3DXVECTOR3 vDIR_ORG(1,0,0);
float fdir_y = DXGetThetaYFromDirection ( vDIR, vDIR_ORG );


D3DXMATRIX matTrans;
D3DXMatrixRotationY ( &matTrans, fdir_y );
matTrans._41 = m_vPos.x;
matTrans._42 = m_vPos.y + 10.0f;
matTrans._43 = m_vPos.z;


//    Note : ÀÚ±â À§Ä¡ ÀÌÆåÆ® ¹ß»ý½ÃÅ´.
DxEffGroupPlayer::GetInstance().NewEffGroup ( GLCONST_CHAR::strCRUSHING_BLOW_EFFECT.c_str(), matTrans, &sACTOR );
}
}


//    Èú¸µ ¸Þ½ÃÁö.
//if ( pNetMsg->nVAR_HP > 0 )
//{
//    CPlayInterface::GetInstance().InsertText ( GetPosition(), static_cast<WORD>(pNetMsg->nVAR_HP), pNetMsg->bCRITICAL, 1 );
//}
}
break;


    case NET_MSG_GCTRL_SKILLHOLD_BRD:
{
GLMSG::SNETPC_SKILLHOLD_BRD *pNetMsg = (GLMSG::SNETPC_SKILLHOLD_BRD *)nmg;


//    Áö¼ÓÇü ½ºÅ³ÀÇ °æ¿ì ½ºÅ³ ÆÑÅÍ Ãß°¡µÊ.
if ( pNetMsg->skill_id != SNATIVEID(false) )
{
RECEIVE_SKILLFACT ( pNetMsg->skill_id, pNetMsg->wLEVEL, pNetMsg->wSELSLOT );
FACTEFF::NewSkillFactEffect ( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, pNetMsg->skill_id, m_matTrans, m_vDir );
}
}
break;


    case NET_MSG_GCTRL_SKILLHOLD_RS_BRD:
{
GLMSG::SNETPC_SKILLHOLD_RS_BRD *pNetMsg = (GLMSG::SNETPC_SKILLHOLD_RS_BRD *)nmg;


//    Note : ½ºÅ³ fact µéÀ» Á¾·á.
// ¹Ù·Î ¸®»û ÇÏÁö ¾Ê°í ¿©±â¼­ ½Ã°£ Á¶Á¾ÇÏ¿© Á¤»ó Á¾·áµÇ°Ô ÇÔ. ( ÀÌÆÑÆ® Á¾·á ¶§¹®. )
for ( int i=0; i<SKILLFACT_SIZE; ++i )
{
if ( pNetMsg->bRESET[i] )
{
FACTEFF::DeleteSkillFactEffect ( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, m_sSKILLFACT[i].sNATIVEID );


DISABLESKEFF(i);
}
}
}
break;


    case NET_MSG_GCTRL_STATEBLOW_BRD:
{
GLMSG::SNETPC_STATEBLOW_BRD *pNetMsg = (GLMSG::SNETPC_STATEBLOW_BRD *)nmg;


if ( pNetMsg->emBLOW <= EMBLOW_SINGLE )
FACTEFF::DeleteBlowSingleEffect ( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, m_sSTATEBLOWS );


SSTATEBLOW *pSTATEBLOW = NULL;
if ( pNetMsg->emBLOW <= EMBLOW_SINGLE ) pSTATEBLOW = &m_sSTATEBLOWS[0];
else pSTATEBLOW = &m_sSTATEBLOWS[pNetMsg->emBLOW-EMBLOW_SINGLE];


pSTATEBLOW->emBLOW = pNetMsg->emBLOW;
pSTATEBLOW->fAGE = pNetMsg->fAGE;
pSTATEBLOW->fSTATE_VAR1 = pNetMsg->fSTATE_VAR1;
pSTATEBLOW->fSTATE_VAR2 = pNetMsg->fSTATE_VAR2;


//    Note : È¿°ú »ý¼º.
FACTEFF::NewBlowEffect ( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, pSTATEBLOW->emBLOW, m_matTrans, m_vDir );
}
break;


    case NET_MSG_GCTRL_CURESTATEBLOW_BRD:
{
GLMSG::SNETPC_CURESTATEBLOW_BRD *pNetMsg = (GLMSG::SNETPC_CURESTATEBLOW_BRD *)nmg;


for ( int i=0; i<EMBLOW_MULTI; ++i )
{
EMSTATE_BLOW emBLOW = m_sSTATEBLOWS[i].emBLOW;


if ( emBLOW==EMBLOW_NONE ) continue;


EMDISORDER emDIS = STATE_TO_DISORDER(emBLOW);
if ( !(pNetMsg->dwCUREFLAG&emDIS) ) continue;


DISABLEBLOW(i);
FACTEFF::DeleteBlowEffect ( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, emBLOW );
}
}
break;


    case NET_MSG_GCTRL_PUSHPULL_BRD:
{
GLMSG::SNET_PUSHPULL_BRD *pNetMsg = (GLMSG::SNET_PUSHPULL_BRD *)nmg;
const D3DXVECTOR3 &vMovePos = pNetMsg->vMovePos;


//    Note : ¹Ð·Á³¯ À§Ä¡·Î À̵¿ ½Ãµµ.
//
BOOL bSucceed = m_actorMove.GotoLocation
(
D3DXVECTOR3(vMovePos.x,vMovePos.y+5,vMovePos.z),
D3DXVECTOR3(vMovePos.x,vMovePos.y-5,vMovePos.z)
);


if ( bSucceed )
{
//    Note : ¹Ð·Á³ª´Â ¿¢¼Ç ½ÃÀÛ.
//
m_sTargetID.vPos = vMovePos;
TurnAction ( GLAT_PUSHPULL );


//    Note : ¹Ð¸®´Â ¼Óµµ ¼³Á¤.
//
m_actorMove.SetMaxSpeed ( GLCONST_CHAR::fPUSHPULL_VELO );
}
}
break;


    case NET_MSG_GCTRL_LANDEFFECT:
{
GLMSG::SNETPC_LANDEFFECT* pNetMsg = ( GLMSG::SNETPC_LANDEFFECT* ) nmg;
memcpy( m_sLandEffect, pNetMsg->sLandEffect, sizeof(m_sLandEffect) );
}
break;




    case NET_MSG_GCTRL_CONFRONT_END2_CLT_BRD:
{
GLMSG::SNETPC_CONFRONT_END2_CLT_BRD *pNetMsg = (GLMSG::SNETPC_CONFRONT_END2_CLT_BRD *)nmg;


switch ( pNetMsg->emEND )
{
case EMCONFRONT_END_WIN:
SetSTATE(EM_ACT_CONFT_WIN);
TurnAction ( GLAT_CONFT_END );
break;


case EMCONFRONT_END_LOSS:
ReSetSTATE(EM_ACT_CONFT_WIN);
TurnAction ( GLAT_CONFT_END );
break;


case EMCONFRONT_END_NOTWIN:
ReSetSTATE(EM_ACT_CONFT_WIN);
TurnAction ( GLAT_CONFT_END );
break;


case EMCONFRONT_END_TIME:
ReSetSTATE(EM_ACT_CONFT_WIN);
TurnAction ( GLAT_CONFT_END );
break;


case EMCONFRONT_END_DISWIN:
SetSTATE(EM_ACT_CONFT_WIN);
TurnAction ( GLAT_CONFT_END );
break;


case EMCONFRONT_END_DISLOSS:
ReSetSTATE(EM_ACT_CONFT_WIN);
TurnAction ( GLAT_CONFT_END );
break;


case EMCONFRONT_END_PWIN:
SetSTATE(EM_ACT_CONFT_WIN);
TurnAction ( GLAT_CONFT_END );
break;


case EMCONFRONT_END_PLOSS:
ReSetSTATE(EM_ACT_CONFT_WIN);
TurnAction ( GLAT_CONFT_END );
break;
};
}
break;


    case NET_MSG_GCTRL_UPDATE_BRIGHT_BRD:
{
GLMSG::SNETPC_UPDATE_BRIGHT_BRD *pNetMsg = (GLMSG::SNETPC_UPDATE_BRIGHT_BRD *)nmg;
m_CharData.nBright = pNetMsg->nBright;
}
break;


    case NET_MSG_GCTRL_UPDATE_STATE_BRD:
{
GLMSG::SNETPC_UPDATE_STATE_BRD *pNetMsg = (GLMSG::SNETPC_UPDATE_STATE_BRD *)nmg;
m_CharData.sHP = pNetMsg->sHP;


//CDebugSet::ToListView ( "NET_MSG_GCTRL_UPDATE_STATE_BRD %s, %d/%d", m_CharData.szName, m_CharData.sHP.wNow, m_CharData.sHP.wMax );
}
break;


    case NET_MSG_GCTRL_UPDATE_FLAGS:
{
GLMSG::SNETPC_UPDATE_FLAGS_BRD *pNetMsg = (GLMSG::SNETPC_UPDATE_FLAGS_BRD *)nmg;
m_CharData.dwFLAGS = pNetMsg->dwFLAGS;
}
break;


    case NET_MSG_GCTRL_PARTY_BRD:
{
GLMSG::SNET_PARTY_BRD *pNetMsg = (GLMSG::SNET_PARTY_BRD *)nmg;
m_CharData.dwParty = pNetMsg->dwPartyID;
m_CharData.dwPMasterID = pNetMsg->dwPMasterID;
}
break;


    case NET_MSG_GCTRL_UPDATE_PASSIVE_BRD:
{
GLMSG::SNETPC_UPDATE_PASSIVE_BRD *pNetMsg = (GLMSG::SNETPC_UPDATE_PASSIVE_BRD *)nmg;
m_CharData.sPASSIVE_SKILL = pNetMsg->sSKILL_DATA;
}
break;


    case NET_MSG_GCTRL_POSITIONCHK_BRD:
{
GLMSG::SNET_POSITIONCHK_BRD *pNetNsg = (GLMSG::SNET_POSITIONCHK_BRD *)nmg;
m_vServerPos = pNetNsg->vPOS;
}
break;


    case NET_MSG_GCTRL_PMARKET_OPEN_BRD:
{
GLMSG::SNETPC_PMARKET_OPEN_BRD *pNetNsg = (GLMSG::SNETPC_PMARKET_OPEN_BRD *)nmg;


m_sPMarket.SetTITLE ( pNetNsg->szPMarketTitle );
m_sPMarket.DoMarketOpen();
}
break;


    case NET_MSG_GCTRL_PMARKET_CLOSE_BRD:
{
GLMSG::SNETPC_PMARKET_CLOSE_BRD *pNetNsg = (GLMSG::SNETPC_PMARKET_CLOSE_BRD *)nmg;


m_sPMarket.DoMarketClose();
}
break;


    case NET_MSG_GCTRL_PMARKET_ITEM_UPDATE_BRD:
{
GLMSG::SNETPC_PMARKET_ITEM_UPDATE_BRD *pNetMsg = (GLMSG::SNETPC_PMARKET_ITEM_UPDATE_BRD *) nmg;


SSALEITEM *pSALEITEM = m_sPMarket.GetItem ( pNetMsg->sSALEPOS );
if ( pSALEITEM )
{
pSALEITEM->bSOLD = pNetMsg->bSOLD;
pSALEITEM->dwNUMBER = pNetMsg->dwNUMBER;
pSALEITEM->sITEMCUSTOM.wTurnNum = (WORD) pNetMsg->dwNUMBER;


SINVENITEM *pINVENITEM = m_sPMarket.GetInven().GetItem(pNetMsg->sSALEPOS.wMainID,pNetMsg->sSALEPOS.wSubID);
if ( pINVENITEM )
{
pINVENITEM->sItemCustom.wTurnNum = (WORD) pNetMsg->dwNUMBER;
}
}
}
break;


    case NET_MSG_GCTRL_PMARKET_ITEM_INFO_BRD:
{
GLMSG::SNETPC_PMARKET_ITEM_INFO_BRD *pNetNsg = (GLMSG::SNETPC_PMARKET_ITEM_INFO_BRD *)nmg;


SINVENITEM sINVENITEM;
sINVENITEM.sItemCustom = pNetNsg->sITEMCUSTOM;
sINVENITEM.wPosX = pNetNsg->sINVENPOS.wMainID;
sINVENITEM.wPosY = pNetNsg->sINVENPOS.wSubID;
m_sPMarket.RegItem ( sINVENITEM, pNetNsg->llPRICE, pNetNsg->dwNUMBER, pNetNsg->sSALEPOS );
m_sPMarket.SetSaleState ( pNetNsg->sSALEPOS, pNetNsg->dwNUMBER, pNetNsg->bSOLD );
}
break;


    case NET_MSG_GCTRL_CLUB_INFO_BRD:
{
GLMSG::SNET_CLUB_INFO_BRD *pNetMsg = (GLMSG::SNET_CLUB_INFO_BRD *)nmg;


m_CharData.dwGuild = pNetMsg->dwClubID;
m_CharData.dwGuildMarkVer = pNetMsg->dwMarkVer;


StringCchCopy ( m_CharData.szNick, CHAR_SZNAME, pNetMsg->szNickName );


//    Note : Ŭ·´¸¶Å© ¹öÀü È®ÀÎ.
//
GLGaeaClient::GetInstance().GetCharacter()->ReqClubMarkInfo ( m_CharData.dwGuild, m_CharData.dwGuildMarkVer );
}
break;


    case NET_MSG_GCTRL_CLUB_INFO_MARK_BRD:
{
GLMSG::SNET_CLUB_INFO_MARK_BRD *pNetMsg = (GLMSG::SNET_CLUB_INFO_MARK_BRD *)nmg;


m_CharData.dwGuildMarkVer = pNetMsg->dwMarkVer;
//    Note : Ŭ·´¸¶Å© ¹öÀü È®ÀÎ.
//
GLGaeaClient::GetInstance().GetCharacter()->ReqClubMarkInfo ( m_CharData.dwGuild, m_CharData.dwGuildMarkVer );
}
break;


    case NET_MSG_GCTRL_CLUB_INFO_NICK_BRD:
{
GLMSG::SNET_CLUB_INFO_NICK_BRD *pNetMsg = (GLMSG::SNET_CLUB_INFO_NICK_BRD *)nmg;
StringCchCopy ( m_CharData.szNick, CHAR_SZNAME, pNetMsg->szNickName );
}
break;


    case NET_MSG_GCTRL_REQ_RANKNAME_BRD: //add pkrank
{
GLMSG::SNETPC_REQ_RANKNAME_BRD *pNetMsg = (GLMSG::SNETPC_REQ_RANKNAME_BRD *)nmg;
m_CharData.m_bRankName = pNetMsg->bRankName ;
}
break;


    case NET_MSG_GCTRL_REQ_RANKMARK_BRD: //add pkrank
{
GLMSG::SNETPC_REQ_RANKMARK_BRD *pNetMsg = (GLMSG::SNETPC_REQ_RANKMARK_BRD *)nmg;
m_CharData.m_bRankMark = pNetMsg->bRankMark ;


}
break;


    case NET_MSG_GCTRL_UPDATE_PKWIN_BRD: //add pk 
{
GLMSG::SNETPC_UPDATE_PKWIN_BRD *pNetMsg = (GLMSG::SNETPC_UPDATE_PKWIN_BRD *)nmg;
m_CharData.m_dwPkWin += 1 ;
}
break;


    case NET_MSG_GCTRL_UPDATE_PKLOSS_BRD: //add pk
{
GLMSG::SNETPC_UPDATE_PKLOSS_BRD *pNetMsg = (GLMSG::SNETPC_UPDATE_PKLOSS_BRD *)nmg;
}
break;


    case NET_MSG_GCTRL_CLUB_DEL_BRD:
{
m_CharData.dwGuild = CLUB_NULL;
m_CharData.dwGuildMarkVer = 0;
StringCchCopy ( m_CharData.szNick, CHAR_SZNAME, "" );
}
break;
    case NET_MSG_GCTRL_CLUB_AUTHORITY_BRD:
{
GLMSG::SNET_CLUB_AUTHORITY_BRD *pNetMsg = (GLMSG::SNET_CLUB_AUTHORITY_BRD *)nmg;
m_CharData.dwGuildMaster = pNetMsg->dwCharID;
}
break;
    case NET_MSG_GCTRL_INVEN_HAIR_CHANGE_BRD:
{
GLMSG::SNETPC_INVEN_HAIR_CHANGE_BRD *pNetMsg = (GLMSG::SNETPC_INVEN_HAIR_CHANGE_BRD *)nmg;


m_CharData.wHair = (WORD) pNetMsg->dwID;
UpdateSuit();
}
break;


    case NET_MSG_GCTRL_INVEN_HAIRCOLOR_CHANGE_BRD:
{
GLMSG::SNETPC_INVEN_HAIRCOLOR_CHANGE_BRD *pNetMsg = (GLMSG::SNETPC_INVEN_HAIRCOLOR_CHANGE_BRD*)nmg;


m_CharData.wHairColor = pNetMsg->wHairColor;
UpdateSuit();
}
break;


    case NET_MSG_GCTRL_INVEN_FACE_CHANGE_BRD:
{
GLMSG::SNETPC_INVEN_FACE_CHANGE_BRD *pNetMsg = (GLMSG::SNETPC_INVEN_FACE_CHANGE_BRD *)nmg;


m_CharData.wFace = (WORD) pNetMsg->dwID;
UpdateSuit();
}
break;


    case NET_MSG_GCTRL_INVEN_RENAME_BRD:
{
GLMSG::SNETPC_INVEN_RENAME_BRD *pNetMsg = (GLMSG::SNETPC_INVEN_RENAME_BRD *)nmg;


StringCchCopy ( m_CharData.szName, CHAR_SZNAME, pNetMsg->szName );
}
break;


    case NET_MSG_GCTRL_REQ_GESTURE_BRD:
{
GLMSG::SNETPC_REQ_GESTURE_BRD *pNetMsg = (GLMSG::SNETPC_REQ_GESTURE_BRD *)nmg;
    
//    Note : ¸ð¼Ç Á¾·ù°¡ ÆòÈ­ ¸ðµåÀÏ °æ¿ì¸¸ Á¦½ºÃĸ¦ ÇÒ ¼ö ÀÖ´Ù.
PLANDMANCLIENT pLand = GLGaeaClient::GetInstance().GetActiveMap();
BOOL bPeaceZone = pLand ? pLand->IsPeaceZone() : FALSE;
if ( !bPeaceZone && IsSTATE(EM_ACT_PEACEMODE) ) bPeaceZone = TRUE;


if ( !bPeaceZone ) return;


//    Note : ÇØ´ç Á¦½ºÃÄ ¿¡´Ï¸ÞÀ̼ÇÀÌ Á¸Á¦½Ã ±¸µ¿.
PANIMCONTNODE pNODE = m_pSkinChar->GETANI ( AN_GESTURE, EMANI_SUBTYPE(pNetMsg->dwID) );
if ( !pNODE ) return;


//    Note : ½Åü°¡ Á¤»óÀûÀ϶§ ±¸µ¿.
if ( !IsValidBody() )    return;


//    Note : Á¦½ºÃĸ¦ ÇàÇÔ.
m_dwANISUBGESTURE = (DWORD) pNetMsg->dwID;
TurnAction(GLAT_TALK);
}
break;


    case NET_MSG_GCTRL_QITEMFACT_BRD:
{
GLMSG::SNETPC_QITEMFACT_BRD *pNetMsg = (GLMSG::SNETPC_QITEMFACT_BRD *)nmg;
if ( m_bVehicle ) break;


m_CharData.sQITEMFACT.emType = pNetMsg->sFACT.emType;
m_CharData.sQITEMFACT.fTime = pNetMsg->sFACT.fTime;
m_CharData.sQITEMFACT.wParam1 = pNetMsg->sFACT.wParam1;
m_CharData.sQITEMFACT.wParam2 = pNetMsg->sFACT.wParam2;
}
break;


    case NET_MSG_GCTRL_QITEMFACT_END_BRD:
{
GLMSG::SNETPC_QITEMFACT_END_BRD *pNetMsg = (GLMSG::SNETPC_QITEMFACT_END_BRD *)nmg;
m_CharData.sQITEMFACT.RESET ();
CInnerInterface::GetInstance().UpdateQBoxTime( 0.0f ); //add qbox
}
break;


    case NET_MSG_GCTRL_QITEMFACT_TIMEUPDATE_BRD: //add qbox
{
GLMSG::SNETPC_QITEMFACT_TIMEUPDATE_BRD *pNetMsg = (GLMSG::SNETPC_QITEMFACT_TIMEUPDATE_BRD *)nmg;
CInnerInterface::GetInstance().UpdateQBoxTime( pNetMsg->fQBoxTime ); //add qbox
}
break;


    case NET_MSG_GCTRL_EVENTFACT_BRD:
{
GLMSG::SNETPC_EVENTFACT_BRD *pNetMsg = (GLMSG::SNETPC_EVENTFACT_BRD *)nmg;


m_CharData.sEVENTFACT.SetEVENT( pNetMsg->emType, pNetMsg->wValue );
}
break;


    case NET_MSG_GCTRL_EVENTFACT_END_BRD:
{
GLMSG::SNETPC_EVENTFACT_END_BRD *pNetMsg = (GLMSG::SNETPC_EVENTFACT_END_BRD *)nmg;


m_CharData.sEVENTFACT.ResetEVENT( pNetMsg->emType );
}
break;
    case NET_MSG_GCTRL_ACTIVE_VEHICLE_BRD:
{
GLMSG::SNETPC_ACTIVE_VEHICLE_BRD* pNetMsg = (GLMSG::SNETPC_ACTIVE_VEHICLE_BRD*) nmg;


if ( pNetMsg->bActive )
{
if ( m_bVehicle )    return;
m_bVehicle = TRUE;
int emType = m_sVehicle.m_emTYPE ;
if ( emType == VEHICLE_TYPE_BOARD ) //modify vehicle anim
{
m_emANISUBTYPE = (EMANI_SUBTYPE) (AN_SUB_HOVERBOARD ) ; 
}
SetSTATE(EM_ACT_PEACEMODE);


// ¹öÇÁ ½ºÅ³ Á¦°Å
for ( int i = 0; i < SKILLFACT_SIZE; ++i )
{
if ( m_sSKILLFACT[i].sNATIVEID == NATIVEID_NULL() ) continue;


PGLSKILL pSkill = GLSkillMan::GetInstance().GetData( m_sSKILLFACT[i].sNATIVEID );


if ( pSkill && pSkill->m_sBASIC.emIMPACT_SIDE != SIDE_ENERMY )
{
FACTEFF::DeleteSkillFactEffect ( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, m_sSKILLFACT[i].sNATIVEID );
DISABLESKEFF( i );
}    
}


// ž½Â ÀÌÆÑÆ® Ãß°¡
STARGETID sTargetID(CROW_PC, m_dwGaeaID, m_vPos);
DxEffGroupPlayer::GetInstance().NewEffGroup
(
GLCONST_CHAR::strVEHICLE_GEN_EFFECT.c_str(),
m_matTrans,
&sTargetID
);


// Äù¼Ç ¾ÆÀÌÅÛ Á¦°Å
m_CharData.sQITEMFACT.RESET (); 


UpdateSuit( ); 
ReSelectAnimation(); 
UPDATE_ITEM ();


}
else
{
if ( !m_bVehicle )    return;
m_bVehicle = FALSE; 
EMSLOT emRHand = GetCurRHand();
EMSLOT emLHand = GetCurLHand();


SITEM* pRHAND = NULL;
SITEM* pLHAND = NULL;


if ( m_CharData.m_PutOnItems[emRHand].sNativeID!=NATIVEID_NULL() )
pRHAND = GLItemMan::GetInstance().GetItem ( m_CharData.m_PutOnItems[emRHand].sNativeID );
    
if ( m_CharData.m_PutOnItems[emLHand].sNativeID!=NATIVEID_NULL() )
pLHAND = GLItemMan::GetInstance().GetItem ( m_CharData.m_PutOnItems[emLHand].sNativeID );


m_emANISUBTYPE = CHECK_ANISUB ( pRHAND, pLHAND );


// ¹öÇÁ½ºÅ³ Á¦°Å
for ( int i = 0; i < SKILLFACT_SIZE; ++i )
{
if ( m_sSKILLFACT[i].sNATIVEID == NATIVEID_NULL() ) continue;


PGLSKILL pSkill = GLSkillMan::GetInstance().GetData( m_sSKILLFACT[i].sNATIVEID );


if ( pSkill && pSkill->m_sBASIC.emIMPACT_SIDE != SIDE_ENERMY )
{
DISABLESKEFF( i );
FACTEFF::DeleteSkillFactEffect ( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, m_sSKILLFACT[i].sNATIVEID );
}    
}


/*
// ÇÏÂ÷ ÀÌÆåÆ® Ãß°¡
STARGETID sTargetID(CROW_PC, m_dwGaeaID, m_vPos);
DxEffGroupPlayer::GetInstance().NewEffGroup
(
GLCONST_CHAR::strVEHICLE_GEN_EFFECT.c_str(),
m_matTrans,
&sTargetID
);
*/
// Äù¼Ç ¾ÆÀÌÅÛ Á¦°Å
m_CharData.sQITEMFACT.RESET (); 


UpdateSuit(); 
ReSelectAnimation(); 
UPDATE_ITEM();
}


}
break;
    case NET_MSG_GCTRL_GET_VEHICLE_BRD:
{
GLMSG::SNETPC_GET_VEHICLE_BRD* pNetMsg = (GLMSG::SNETPC_GET_VEHICLE_BRD*) nmg;


m_sVehicle.m_dwGUID = pNetMsg->dwGUID;
m_sVehicle.m_emTYPE = pNetMsg->emTYPE;
m_sVehicle.m_sVehicleID = pNetMsg->sVehicleID;


for ( int i = 0; i < ACCE_TYPE_SIZE; ++i )
{
m_sVehicle.m_PutOnItems[i] = pNetMsg->PutOnItems[i];
}


m_sVehicle.SetActiveValue( true );


m_sVehicle.ITEM_UPDATE();


UpdateSuit(); 
UPDATE_ITEM();
}
break;
    case NET_MSG_GCTRL_UNGET_VEHICLE_BRD:
{
GLMSG::SNETPC_UNGET_VEHICLE_BRD* pNetMsg = (GLMSG::SNETPC_UNGET_VEHICLE_BRD*) nmg; 
m_sVehicle.SetActiveValue( false );    
m_sVehicle.RESET();
}
break;
    case NET_MSG_VEHICLE_ACCESSORY_DELETE_BRD:
{
GLMSG::SNET_VEHICLE_ACCESSORY_DELETE_BRD* pNetMsg = (GLMSG::SNET_VEHICLE_ACCESSORY_DELETE_BRD*) nmg;


if ( m_sVehicle.m_dwGUID == pNetMsg->dwVehicleNum )
{
m_sVehicle.m_PutOnItems[pNetMsg->accetype] = SITEMCUSTOM (); 
m_sVehicle.ITEM_UPDATE();
UpdateSuit();
UPDATE_ITEM();
}
}
break;
    case NET_MSG_VEHICLE_REQ_SLOT_EX_HOLD_BRD:
{
GLMSG::SNET_VEHICLE_REQ_SLOT_EX_HOLD_BRD* pNetMsg = (GLMSG::SNET_VEHICLE_REQ_SLOT_EX_HOLD_BRD*) nmg;


// ¼Õ¿¡µç ¾ÆÀÌÅÛÀ»
m_sVehicle.SetSlotItem ( pNetMsg->emSuit, pNetMsg->sItemCustom );


UpdateSuit();
UPDATE_ITEM();
}
break;
    case NET_MSG_VEHICLE_REMOVE_SLOTITEM_BRD:
{
GLMSG::SNET_VEHICLE_REQ_REMOVE_SLOTITEM_BRD* pNetMsg = ( GLMSG::SNET_VEHICLE_REQ_REMOVE_SLOTITEM_BRD* ) nmg;
    
// ½½·Ô¾ÆÀÌÅÛ Á¦°Å
m_sVehicle.ReSetSlotItem ( pNetMsg->emSuit );


UpdateSuit();
UPDATE_ITEM();
}
break;
    case NET_MSG_GCTRL_ITEMSHOPOPEN_BRD:
{
//#if defined ( JP_PARAM ) || defined ( _RELEASED)    // JAPAN Item Shop //add itemshop icon


GLMSG::SNETPC_OPEN_ITEMSHOP_BRD* pNetMsg = ( GLMSG::SNETPC_OPEN_ITEMSHOP_BRD* ) nmg;
m_bItemShopOpen = pNetMsg->bOpen;


if ( m_bItemShopOpen )    CInnerInterface::GetInstance().GetItemShopIconMan()->ADD_SHOP_ICON( m_dwGaeaID );
else    CInnerInterface::GetInstance().GetItemShopIconMan()->DEL_SHOP_ICON( m_dwGaeaID );    
//#endif
}
break;
    case NET_MSG_REQ_GATHERING_BRD:
{
GLMSG::SNETPC_REQ_GATHERING_BRD *pNetMsg = (GLMSG::SNETPC_REQ_GATHERING_BRD *) nmg;


//    Note : °ø°Ý ¼öÇà.
m_dwANISUBGESTURE = pNetMsg->dwAniSel;
TurnAction ( GLAT_GATHERING );
}
break;
    case NET_MSG_REQ_GATHERING_CANCEL_BRD:
{
if ( IsACTION(GLAT_GATHERING) )    TurnAction ( GLAT_IDLE );
}
break;
    case NET_MSG_REQ_GATHERING_RESULT_BRD:
{
GLMSG::SNETPC_REQ_GATHERING_RESULT_BRD* pNetMsg = ( GLMSG::SNETPC_REQ_GATHERING_RESULT_BRD* ) nmg;


switch ( pNetMsg->emFB )
{
case EMREQ_GATHER_RESULT_SUCCESS:
case EMREQ_GATHER_RESULT_SUCCESS_EX:
{
m_dwANISUBGESTURE = 0;
}
break;
case EMREQ_GATHER_RESULT_FAIL:
case EMREQ_GATHER_RESULT_ITEMFAIL:
{
m_dwANISUBGESTURE = 1;
}
break;
}
}
break;
    };
}


void GLCharClient::StartAttackProc ()
{
    m_nattSTEP = 0;
    m_fattTIMER = 0.0f;
}


void GLCharClient::AttackEffect ( const SANIMSTRIKE &sStrikeEff )
{
    BOOL bOk = GLGaeaClient::GetInstance().ValidCheckTarget ( m_sTargetID );
    if ( !bOk )    return;


    GLCOPY* pActor = GLGaeaClient::GetInstance().GetCopyActor ( m_sTargetID );
    if ( pActor )    pActor->ReceiveSwing ();


    //    Ÿ°ÙÀÇ À§Ä¡.
    D3DXVECTOR3 vTARPOS = GLGaeaClient::GetInstance().GetTargetPos ( m_sTargetID );


    D3DXVECTOR3 vDir = vTARPOS - m_vPos;
    vDir.y = 0.f;
    D3DXVec3Normalize ( &vDir, &vDir );


    vTARPOS.y += 15.0f;


    D3DXVECTOR3 vTarDir = vTARPOS - m_vPos;
    float fLength = D3DXVec3Length ( &vTarDir );


    D3DXVec3Normalize ( &vTarDir, &vTarDir );
    D3DXVECTOR3 vTARPAR = m_vPos + vTarDir*fLength * 10.0f;


    //    Ÿ°Ý À§Ä¡¸¦ ¾Ë¾Æ³¿.
    STRIKE::SSTRIKE sStrike;


    if ( m_pSkinChar->m_pSkinCharPiece[PIECE_RHAND] ) //fix abl strike
    {
STRIKE::CSELECTOR Selector ( vTARPAR, m_pSkinChar->m_pSkinCharPiece[PIECE_RHAND]->m_PartArray );
bOk = Selector.SELECT ( sStrikeEff, sStrike ,true);
if ( !bOk )    return;
    }
    else
    {
STRIKE::CSELECTOR Selector ( vTARPAR, m_pSkinChar->m_PartArray );
bOk = Selector.SELECT ( sStrikeEff, sStrike ,false);
if ( !bOk )    return;
    }


    EMSLOT emSlot = PIECE_2_SLOT(sStrikeEff.m_emPiece);
    if( emSlot==SLOT_TSIZE ) return;
    if( emSlot==SLOT_RHAND ) emSlot = GetCurRHand();
    else if( emSlot==SLOT_LHAND )    emSlot = GetCurLHand();


    D3DXMATRIX matEffect;
    D3DXMatrixTranslation ( &matEffect, sStrike.vPos.x, sStrike.vPos.y, sStrike.vPos.z );


    STARGETID sTargetID = m_sTargetID;
    sTargetID.vPos = vTARPOS;


    //    Note : ¹«±âÀÇ ¼Ó¼º »ìÆ캽.
    //
    EMELEMENT emELEMENT = GET_ITEM_ELMT();


    if ( VALID_SLOT_ITEM(emSlot) )
    {
SITEM *pItem = GLItemMan::GetInstance().GetItem(GET_SLOT_ITEM(emSlot).sNativeID);
if ( pItem )
{
if ( pItem->sSuitOp.emAttack <= ITEMATT_NEAR )
{
std::string strEFFECT = pItem->GetTargetEffect();
if ( strEFFECT.empty() )    strEFFECT = GLCONST_CHAR::GETSTRIKE_EFFECT(emELEMENT);


DxEffGroupPlayer::GetInstance().NewEffGroup
(
strEFFECT.c_str(),
matEffect,
&sTargetID
);


DxEffGroupPlayer::GetInstance().NewEffBody ( GLCONST_CHAR::strAMBIENT_EFFECT.c_str(), &sTargetID, &vDir );
}
else
{
if ( pItem->sSuitOp.emAttack == ITEMATT_BOW )
{
SITEM *pLHAND = NULL;
if ( VALID_SLOT_ITEM(SLOT_LHAND) )    pLHAND = GLItemMan::GetInstance().GetItem(GET_SLOT_ITEM(SLOT_LHAND).sNativeID);
if ( pLHAND && pLHAND->sBasicOp.emItemType == ITEM_ARROW )
{
DxEffSingleGroup* pEffSingleG = DxEffGroupPlayer::GetInstance().NewEffGroup
(
pLHAND->GetTargetEffect(),
matEffect,
&sTargetID
);


if ( pEffSingleG )
{
pEffSingleG->AddEffAfter ( EFFASINGLE, GLCONST_CHAR::GETSTRIKE_EFFECT(emELEMENT) );
pEffSingleG->AddEffAfter ( EFFABODY, std::string(pLHAND->GetTargBodyEffect()) );
pEffSingleG->AddEffAfter ( EFFABODY, GLCONST_CHAR::strAMBIENT_EFFECT );
}
}
}
else if ( pItem->sSuitOp.emAttack == ITEMATT_DUAL_GUN 
|| pItem->sSuitOp.emAttack == ITEMATT_RAIL_GUN
|| pItem->sSuitOp.emAttack == ITEMATT_PORTAL_GUN)
{
SITEM *pLHAND = NULL;
if ( VALID_SLOT_ITEM(SLOT_LHAND) )    pLHAND = GLItemMan::GetInstance().GetItem(GET_SLOT_ITEM(SLOT_LHAND).sNativeID);
if ( pLHAND && pLHAND->sBasicOp.emItemType == ITEM_BULLET )
{
DxEffSingleGroup* pEffSingleG = DxEffGroupPlayer::GetInstance().NewEffGroup
(
pLHAND->GetTargetEffect(),
matEffect,
&sTargetID
);


if ( pEffSingleG )
{
pEffSingleG->AddEffAfter ( EFFASINGLE, GLCONST_CHAR::GETSTRIKE_EFFECT(emELEMENT) );
pEffSingleG->AddEffAfter ( EFFABODY, std::string(pLHAND->GetTargBodyEffect()) );
pEffSingleG->AddEffAfter ( EFFABODY, GLCONST_CHAR::strAMBIENT_EFFECT );


DxEffGroupPlayer::GetInstance().NewEffGroup
(
GLCONST_CHAR::strBULLET_EFFECT.c_str(),
m_matTrans,
&sTargetID
);
}
}
}
else 
{
std::string strEFFECT = pItem->GetTargetEffect();
if ( strEFFECT.empty() )    strEFFECT = GLCONST_CHAR::GETSTRIKE_EFFECT(emELEMENT);


DxEffGroupPlayer::GetInstance().NewEffGroup
(
strEFFECT.c_str(),
matEffect,
&sTargetID
);


DxEffGroupPlayer::GetInstance().NewEffBody ( GLCONST_CHAR::strAMBIENT_EFFECT.c_str(), &sTargetID, &vDir );
}
}
}
    }
    else
    {
DxEffGroupPlayer::GetInstance().NewEffGroup
(
GLCONST_CHAR::GETSTRIKE_EFFECT(emELEMENT),
matEffect,
&sTargetID
);


DxEffGroupPlayer::GetInstance().NewEffBody ( GLCONST_CHAR::strAMBIENT_EFFECT.c_str(), &sTargetID, &vDir );
    }
}


BOOL GLCharClient::AttackProc ( float fElapsedTime )
{
    m_fattTIMER += fElapsedTime * GETATTVELO();
    m_fattTIMER += GETATT_ITEM();


    GASSERT(m_pSkinChar->GETCURANIM());


    PSANIMCONTAINER pAnimCont = m_pSkinChar->GETCURANIM();


    if ( pAnimCont->m_wStrikeCount == 0 )    return FALSE;


    DWORD dwThisKey = DWORD(m_fattTIMER*UNITANIKEY_PERSEC);


    DWORD dwStrikeKey = pAnimCont->m_sStrikeEff[m_nattSTEP].m_dwFrame;
    if ( m_nattSTEP < pAnimCont->m_wStrikeCount )
    {
if ( dwThisKey>=dwStrikeKey )
{
if ( GLGaeaClient::GetInstance().IsVisibleCV(m_sTargetID) )
{
//    Note : °ø°Ý½Ã ÀÌÆÑÆ® ¹ßÈÖ..
//
AttackEffect ( pAnimCont->m_sStrikeEff[m_nattSTEP] );
}


m_nattSTEP++;
}
    }


    return TRUE;
}


void GLCharClient::StartSkillProc ()
{
    m_nattSTEP = 0;
    m_fattTIMER = 0.0f;


    PGLSKILL pSkill = GLSkillMan::GetInstance().GetData ( m_idACTIVESKILL.wMainID, m_idACTIVESKILL.wSubID );
    if ( !pSkill ) return;


    //    Note : °ø°Ý ¹æÇâÀ¸·Î ȸÀü.
    //
    m_vDir = UpdateSkillDirection ( m_vPos, m_vDir, m_idACTIVESKILL, m_vTARPOS, m_sTARIDS );


    STARGETID sTARG(GETCROW(),m_dwGaeaID);


    //    Note : ½ºÅ³ ½ÃÀÛ°ú µ¿½Ã¿¡ ³ªÅ¸³ª´Â ÀÌÆÑÆ®. ¹ßµ¿.
    //
    EMELEMENT emELMT = ( pSkill->m_sAPPLY.emELEMENT==EMELEMENT_ARM ) ? GET_ITEM_ELMT() : (EMELEMENT_SPIRIT);
    if ( pSkill->m_sEXT_DATA.emSELFBODY==SKILL::EMTIME_FIRST )
DxEffGroupPlayer::GetInstance().NewEffBody ( pSkill->m_sEXT_DATA.GETSELFBODY(emELMT), &sTARG, &m_vDir);


    EMSLOT emRHand = GetCurRHand();


    SANIMSTRIKE sStrike;
    sStrike.m_emPiece = VALID_SLOT_ITEM(emRHand) ? PIECE_RHAND : PIECE_GLOVE;
    sStrike.m_emEffect = EMSF_TARGET;
    sStrike.m_dwFrame = 0;


    if ( pSkill->m_sEXT_DATA.emSELFZONE01==SKILL::EMTIME_FIRST )
SK_EFF_SELFZONE ( sStrike, pSkill->m_sEXT_DATA.emSELFZONE01_POS, pSkill->m_sEXT_DATA.GETSELFZONE01(emELMT), &sTARG );


    if ( pSkill->m_sEXT_DATA.emSELFZONE02==SKILL::EMTIME_FIRST )
SK_EFF_SELFZONE ( sStrike, pSkill->m_sEXT_DATA.emSELFZONE02_POS, pSkill->m_sEXT_DATA.GETSELFZONE02(emELMT), &sTARG );
}


void GLCharClient::SKT_EFF_HOLDOUT ( STARGETID sTarget, DWORD dwDamageFlag )
{
    for ( int i=0; i<SKILLFACT_SIZE; ++i )
    {
SSKILLFACT &sSKEFF = m_sSKILLFACT[i];
if ( sSKEFF.sNATIVEID==NATIVEID_NULL() )    continue;


PGLSKILL pSkill = GLSkillMan::GetInstance().GetData ( sSKEFF.sNATIVEID.wMainID, sSKEFF.sNATIVEID.wSubID );
if ( !pSkill ) continue; 


if ( !pSkill->m_sEXT_DATA.strHOLDOUT.empty() )
{


if ( (pSkill->m_sAPPLY.emSPEC == EMSPECA_PSY_DAMAGE_REDUCE && 
!( dwDamageFlag & DAMAGE_TYPE_PSY_REDUCE) ) )
continue;


if ( (pSkill->m_sAPPLY.emSPEC == EMSPECA_MAGIC_DAMAGE_REDUCE && 
!( dwDamageFlag & DAMAGE_TYPE_MAGIC_REDUCE) ) )
continue;


if ( (pSkill->m_sAPPLY.emSPEC == EMSPECA_PSY_DAMAGE_REFLECTION && 
!( dwDamageFlag & DAMAGE_TYPE_PSY_REFLECTION) ) )
continue;


if ( (pSkill->m_sAPPLY.emSPEC == EMSPECA_MAGIC_DAMAGE_REFLECTION && 
!( dwDamageFlag & DAMAGE_TYPE_MAGIC_REFLECTION) ) )
continue;






const char* szZONE_EFF = pSkill->m_sEXT_DATA.strHOLDOUT.c_str();


D3DXVECTOR3 vDIR = sTarget.vPos - m_vPos;


D3DXVECTOR3 vDIR_ORG(1,0,0);
float fdir_y = DXGetThetaYFromDirection ( vDIR, vDIR_ORG );


D3DXMATRIX matTrans;
D3DXMatrixRotationY ( &matTrans, fdir_y );
matTrans._41 = m_vPos.x;
matTrans._42 = m_vPos.y;
matTrans._43 = m_vPos.z;


//    Note : ÀÚ±â À§Ä¡ ÀÌÆåÆ® ¹ß»ý½ÃÅ´.
DxEffGroupPlayer::GetInstance().NewEffGroup ( szZONE_EFF, matTrans, &sTarget );
}
    }
}


void GLCharClient::SK_EFF_SELFZONE ( const SANIMSTRIKE &sStrikeEff, const SKILL::EMEFFECTPOS emPOS, const char* const szZONE_EFF, STARGETID *pTarget )
{
    D3DXMATRIX matTrans;


    //    ½ºÆ®¶óÀÌÅ© ÁöÁ¡¿¡¼­.
    BOOL bTRANS(FALSE);
    if ( emPOS == SKILL::EMPOS_STRIKE )
    {
//    Ÿ°ÙÀÇ À§Ä¡.
D3DXVECTOR3 vTARPOS = m_vPos + m_vDir * 60.0f;


//    Ÿ°Ý À§Ä¡¸¦ ¾Ë¾Æ³¿.
STRIKE::SSTRIKE sStrike;


if ( m_pSkinChar->m_pSkinCharPiece[PIECE_RHAND] ) //fix abl strike
{
STRIKE::CSELECTOR Selector ( vTARPOS, m_pSkinChar->m_pSkinCharPiece[PIECE_RHAND]->m_PartArray );
BOOL bOk = Selector.SELECT ( sStrikeEff, sStrike ,true);
if ( bOk )
{
bTRANS = TRUE;


D3DXMatrixTranslation ( &matTrans, sStrike.vPos.x, sStrike.vPos.y, sStrike.vPos.z );
}
}
else
{
STRIKE::CSELECTOR Selector ( vTARPOS, m_pSkinChar->m_PartArray );
BOOL bOk = Selector.SELECT ( sStrikeEff, sStrike ,false);
if ( bOk )
{
bTRANS = TRUE;


D3DXMatrixTranslation ( &matTrans, sStrike.vPos.x, sStrike.vPos.y, sStrike.vPos.z );
}
}
    }


    //    Áö¸é±âÁØ ¸ñÇ¥Á¡¿¡ ȸÀü ¼Ó¼º ³Ö¾î¼­.
    if ( !bTRANS )
    {
bTRANS = TRUE;


D3DXMATRIX matYRot;
D3DXMatrixRotationY ( &matYRot, D3DX_PI/2.0f );
matTrans = matYRot * m_matTrans;
    }


    //    Note : ÀÚ±â À§Ä¡ ÀÌÆåÆ® ¹ß»ý½ÃÅ´.
    DxEffGroupPlayer::GetInstance().NewEffGroup ( szZONE_EFF, matTrans, pTarget );
}


void GLCharClient::SK_EFF_TARZONE ( const STARGETID &_sTarget, const SKILL::EMEFFECTPOS emPOS, const char* const szZONE_EFF )
{
    D3DXMATRIX matTrans;
    STARGETID sTarget = _sTarget;


    //    ½ºÆ®¶óÀÌÅ© ÁöÁ¡¿¡¼­.
    BOOL bTRANS(FALSE);
    if ( emPOS == SKILL::EMPOS_STRIKE )
    {
DxSkinChar* pSkin = GLGaeaClient::GetInstance().GetSkinChar ( sTarget );


//    Ÿ°ÙÀÇ À§Ä¡.
D3DXVECTOR3 vTARPOS ( m_vPos.x, m_vPos.y+15, m_vPos.z );;


//    Ÿ°Ý À§Ä¡¸¦ ¾Ë¾Æ³¿.
IMPACT_ARROW::SSTRIKE sStrike;
IMPACT_ARROW::CSELECTOR Selector ( vTARPOS, pSkin->m_PartArray );
BOOL bOk = Selector.SELECT ( sStrike );
if ( bOk )
{
bTRANS = TRUE;


D3DXMatrixTranslation ( &matTrans, sStrike.vPos.x, sStrike.vPos.y, sStrike.vPos.z );
sTarget.vPos = vTARPOS;
}
    }


    //    Áö¸é±âÁØ ¸ñÇ¥Á¡.
    if ( !bTRANS )
    {
bTRANS = TRUE;
D3DXMatrixTranslation ( &matTrans, sTarget.vPos.x, sTarget.vPos.y, sTarget.vPos.z );
    }


    //    Note : ¸ñÇ¥ À§Ä¡ ÀÌÆåÆ® ¹ß»ý½ÃÅ´.
    DxEffGroupPlayer::GetInstance().NewEffGroup ( szZONE_EFF, matTrans, &sTarget );
}


void GLCharClient::SK_EFF_TARG ( const PGLSKILL pSkill, const SANIMSTRIKE &sStrikeEff, const STARGETID &_sTarget )
{
    D3DXMATRIX matTrans;
    STARGETID sTarget = _sTarget;


    //    ½ºÆ®¶óÀÌÅ© ÁöÁ¡¿¡¼­.
    BOOL bTRANS(FALSE);
    if ( pSkill->m_sEXT_DATA.emTARG_POSA == SKILL::EMPOS_STRIKE )
    {
//    Ÿ°ÙÀÇ À§Ä¡.
D3DXVECTOR3 vSTRPOS ( sTarget.vPos.x, sTarget.vPos.y+15, sTarget.vPos.z );;


D3DXVECTOR3 vDir = vSTRPOS - m_vPos;
float fLength = D3DXVec3Length ( &vDir );


D3DXVec3Normalize ( &vDir, &vDir );
D3DXVECTOR3 vSTRPAR = m_vPos + vDir*fLength * 10.0f;


//    ½ºÆ®¶óÀÌÅ© À§Ä¡¸¦ ¾Ë¾Æ³¿.
STRIKE::SSTRIKE sStrike;


if ( m_pSkinChar->m_pSkinCharPiece[PIECE_RHAND] ) //fix abl strike
{
STRIKE::CSELECTOR Selector ( vSTRPAR, m_pSkinChar->m_pSkinCharPiece[PIECE_RHAND]->m_PartArray );
BOOL bOk = Selector.SELECT ( sStrikeEff, sStrike ,true);
if ( bOk )
{
bTRANS = TRUE;
D3DXMatrixTranslation ( &matTrans, sStrike.vPos.x, sStrike.vPos.y, sStrike.vPos.z );
}
}
else
{
STRIKE::CSELECTOR Selector ( vSTRPAR, m_pSkinChar->m_PartArray );
BOOL bOk = Selector.SELECT ( sStrikeEff, sStrike ,false);
if ( bOk )
{
bTRANS = TRUE;
D3DXMatrixTranslation ( &matTrans, sStrike.vPos.x, sStrike.vPos.y, sStrike.vPos.z );
}
}
    }
    
    //    Áö¸é±âÁØ È¸Àü ¼Ó¼º ³Ö¾î¼­.
    if ( !bTRANS )
    {
bTRANS = TRUE;


D3DXMATRIX matYRot;
D3DXMatrixRotationY ( &matYRot, D3DX_PI/2.0f );
matTrans = matYRot * m_matTrans;
    }


    //    ¸ñÇ¥ ÁöÁ¡ ¼±ÅÃ
    BOOL bIMPACT(FALSE);
    if ( pSkill->m_sEXT_DATA.emTARG_POSB == SKILL::EMPOS_STRIKE )
    {
DxSkinChar* pSkin = GLGaeaClient::GetInstance().GetSkinChar ( sTarget );
if ( !pSkin )    return;


//    Ÿ°ÙÀÇ À§Ä¡.
D3DXVECTOR3 vTARPOS ( m_vPos.x, m_vPos.y+15, m_vPos.z );;


//    Ÿ°Ý À§Ä¡¸¦ ¾Ë¾Æ³¿.
IMPACT_ARROW::SSTRIKE sImpact;
IMPACT_ARROW::CSELECTOR Selmpact ( vTARPOS, pSkin->m_PartArray );
BOOL bOk = Selmpact.SELECT ( sImpact );
if ( bOk )
{
bIMPACT = TRUE;
sTarget.vPos = sImpact.vPos;
}
    }


    if ( !bIMPACT )
    {
sTarget.vPos;
    }


    EMELEMENT emELMT = ( pSkill->m_sAPPLY.emELEMENT==EMELEMENT_ARM ) ? GET_ITEM_ELMT() : (EMELEMENT_SPIRIT);
    DxEffSingleGroup* pEffSingleG = DxEffGroupPlayer::GetInstance().NewEffGroup ( pSkill->m_sEXT_DATA.GETTARG(emELMT), matTrans, &sTarget );
    if ( !pEffSingleG ) return;


    //    Note : ¸ñÇ¥ À§Ä¡ ÀÌÆåÆ®.
    if ( pSkill->m_sEXT_DATA.emTARGZONE01==SKILL::EMTIME_TARG_OVR )
pEffSingleG->AddEffAfter ( EFFASINGLE, pSkill->m_sEXT_DATA.GETTARGZONE01(emELMT) );


    if ( pSkill->m_sEXT_DATA.emTARGZONE02==SKILL::EMTIME_TARG_OVR )
pEffSingleG->AddEffAfter ( EFFASINGLE, pSkill->m_sEXT_DATA.GETTARGZONE02(emELMT) );


    //    Note : ¸ñÇ¥ ¸ö ÀÌÆåÆ®.
    if ( pSkill->m_sEXT_DATA.emTARGBODY01==SKILL::EMTIME_TARG_OVR )
pEffSingleG->AddEffAfter ( EFFABODY, pSkill->m_sEXT_DATA.GETTARGBODY01(emELMT) );


    if ( pSkill->m_sEXT_DATA.emTARGBODY02==SKILL::EMTIME_TARG_OVR )
pEffSingleG->AddEffAfter ( EFFABODY, pSkill->m_sEXT_DATA.GETTARGBODY02(emELMT) );
}


void GLCharClient::SkillEffect ( const SANIMSTRIKE &sStrikeEff )
{
    PGLSKILL pSkill = GLSkillMan::GetInstance().GetData ( m_idACTIVESKILL.wMainID, m_idACTIVESKILL.wSubID );
    if ( !pSkill ) return;


    D3DXMATRIX matTrans;
    using namespace SKILL;


    //    Note : Ÿ°Ù ÀÌÆåÆ®°¡ Áö¸éÀ» ÇâÇØ ¹ß»çµÇ´Â °æ¿ì.
    //
    EMELEMENT emELMT = ( pSkill->m_sAPPLY.emELEMENT==EMELEMENT_ARM ) ? GET_ITEM_ELMT() : (EMELEMENT_SPIRIT);
    if ( pSkill->m_sBASIC.emIMPACT_TAR == TAR_ZONE_SPEC )
    {
if ( pSkill->m_sEXT_DATA.emTARG == EMTIME_IMPACT )
{
D3DXMatrixTranslation ( &matTrans, m_vTARPOS.x, m_vTARPOS.y, m_vTARPOS.z );
DxEffSingleGroup* pEffSingleG = DxEffGroupPlayer::GetInstance().NewEffGroup ( pSkill->m_sEXT_DATA.GETSELFZONE01(emELMT), matTrans );
if ( pEffSingleG )
{
if ( pSkill->m_sEXT_DATA.emTARGZONE01==EMTIME_TARG_OVR )
pEffSingleG->AddEffAfter ( EFFASINGLE, pSkill->m_sEXT_DATA.GETTARGZONE01(emELMT) );


if ( pSkill->m_sEXT_DATA.emTARGZONE02==EMTIME_TARG_OVR )
pEffSingleG->AddEffAfter ( EFFASINGLE, pSkill->m_sEXT_DATA.GETTARGZONE02(emELMT) );
}
}


if ( pSkill->m_sEXT_DATA.emTARGZONE01==EMTIME_IMPACT )
DxEffGroupPlayer::GetInstance().NewEffGroup ( pSkill->m_sEXT_DATA.GETTARGZONE01(emELMT), matTrans );


if ( pSkill->m_sEXT_DATA.emTARGZONE02==EMTIME_IMPACT )
DxEffGroupPlayer::GetInstance().NewEffGroup ( pSkill->m_sEXT_DATA.GETTARGZONE02(emELMT), matTrans );
    }
    //    Note : Ÿ°Ù ÀÌÆåÆ®°¡ Áö¸éÀ» ÇâÇØ ¹ß»çµÇ´Â °æ¿ì.
    // ÀÚ±â À§Ä¡¿¡¼­ ´ë»ó À§Ä¡±îÁö. ( È­»ì °üÅë )
    else if ( pSkill->m_sBASIC.emIMPACT_TAR == TAR_SELF_TOSPEC )
    {
if ( m_wTARNUM == 0 )    return;


STARGETID sTarget(static_cast<EMCROW>(m_sTARIDS[m_wTARNUM-1].wCrow),static_cast<DWORD>(m_sTARIDS[m_wTARNUM-1].wID));
if ( !GLGaeaClient::GetInstance().IsVisibleCV(sTarget) ) return;
sTarget.vPos = GLGaeaClient::GetInstance().GetTargetPos(sTarget);


D3DXVECTOR3 vDir = sTarget.vPos - m_vPos;
vDir.y = 0.f;
D3DXVec3Normalize ( &vDir, &vDir );


//    Note : ¸ñÇ¥ ÁöÇâ ÀÌÆåÆ®¿¡ ½Ç¾î º¸³»´Â ÀÌÆåÆ®.
// ( ½Ç¾î º¸³¾¶§´Â ¸ñÇ¥ À§Ä¡ ÀÌÆåÆ®ÀÇ À§Ä¡´Â ÀÚµ¿À¸·Î ÁöÇâ ÀÌÆÑÆ®ÀÇ Á¾·á ÁöÁ¡À¸·Î °íÁ¤. )
if ( pSkill->m_sEXT_DATA.VALIDTARG(emELMT) )
{
SK_EFF_TARG ( pSkill, sStrikeEff, sTarget );
}
//    ´Üµ¶À¸·Î ¸ñÇ¥ ÁöÁ¡¿¡ ¹ß»ý.
else
{
//    Note : ¸ñÇ¥ À§Ä¡ ÀÌÆåÆ®.
if ( pSkill->m_sEXT_DATA.emTARGZONE01==EMTIME_IMPACT )
SK_EFF_TARZONE ( sTarget, pSkill->m_sEXT_DATA.emTARGZONE01_POS, pSkill->m_sEXT_DATA.GETTARGZONE01(emELMT) );


if ( pSkill->m_sEXT_DATA.emTARGZONE02==EMTIME_IMPACT )
SK_EFF_TARZONE ( sTarget, pSkill->m_sEXT_DATA.emTARGZONE02_POS, pSkill->m_sEXT_DATA.GETTARGZONE02(emELMT) );


//    Note : ¸ñÇ¥ ¸ö ÀÌÆåÆ®.
if ( pSkill->m_sEXT_DATA.emTARGBODY01==EMTIME_IMPACT )
DxEffGroupPlayer::GetInstance().NewEffBody ( pSkill->m_sEXT_DATA.GETTARGBODY01(emELMT), &sTarget, &vDir );
if ( pSkill->m_sEXT_DATA.emTARGBODY02==EMTIME_IMPACT )
DxEffGroupPlayer::GetInstance().NewEffBody ( pSkill->m_sEXT_DATA.GETTARGBODY02(emELMT), &sTarget, &vDir );
}
    }
    //    Note : Ÿ°Ù ÀÌÆåÆ®°¡ À¯´ÖÀ» ÇâÇØ ¹ß»çµÇ´Â °æ¿ì.
    //
    else
    {
//    Note : ¸ñÇ¥ À¯´ÖÀÌ ÀÖ´Â °æ¿ì.
//
if ( m_wTARNUM )
{
for ( WORD i=0; i<m_wTARNUM; ++i )
{
STARGETID sTarget(static_cast<EMCROW>(m_sTARIDS[i].wCrow),static_cast<DWORD>(m_sTARIDS[i].wID));
if ( !GLGaeaClient::GetInstance().IsVisibleCV(sTarget) )    continue;
sTarget.vPos = GLGaeaClient::GetInstance().GetTargetPos(sTarget);


D3DXVECTOR3 vDir = sTarget.vPos - m_vPos;
vDir.y = 0.f;
D3DXVec3Normalize ( &vDir, &vDir );


//    Note : ¸ñÇ¥ ÁöÇâ ÀÌÆåÆ®¿¡ ½Ç¾î º¸³»´Â ÀÌÆåÆ®.
// ( ½Ç¾î º¸³¾¶§´Â ¸ñÇ¥ À§Ä¡ ÀÌÆåÆ®ÀÇ À§Ä¡´Â ÀÚµ¿À¸·Î ÁöÇâ ÀÌÆÑÆ®ÀÇ Á¾·á ÁöÁ¡À¸·Î °íÁ¤. )
if ( pSkill->m_sEXT_DATA.VALIDTARG(emELMT) )
{
SK_EFF_TARG ( pSkill, sStrikeEff, sTarget );
}
//    ´Üµ¶À¸·Î ¸ñÇ¥ ÁöÁ¡¿¡ ¹ß»ý.
else
{
//    Note : ¸ñÇ¥ À§Ä¡ ÀÌÆåÆ®.
if ( pSkill->m_sEXT_DATA.emTARGZONE01==EMTIME_IMPACT )
SK_EFF_TARZONE ( sTarget, pSkill->m_sEXT_DATA.emTARGZONE01_POS, pSkill->m_sEXT_DATA.GETTARGZONE01(emELMT) );


if ( pSkill->m_sEXT_DATA.emTARGZONE02==EMTIME_IMPACT )
SK_EFF_TARZONE ( sTarget, pSkill->m_sEXT_DATA.emTARGZONE02_POS, pSkill->m_sEXT_DATA.GETTARGZONE02(emELMT) );


//    Note : ¸ñÇ¥ ¸ö ÀÌÆåÆ®.
if ( pSkill->m_sEXT_DATA.emTARGBODY01==EMTIME_IMPACT )
DxEffGroupPlayer::GetInstance().NewEffBody ( pSkill->m_sEXT_DATA.GETTARGBODY01(emELMT), &sTarget, &vDir );
if ( pSkill->m_sEXT_DATA.emTARGBODY02==EMTIME_IMPACT )
DxEffGroupPlayer::GetInstance().NewEffBody ( pSkill->m_sEXT_DATA.GETTARGBODY02(emELMT), &sTarget, &vDir );
}


if ( pSkill->m_sEXT_DATA.bTARG_ONE )    break;
}
}
    }




    STARGETID sTARG(GETCROW(),m_dwGaeaID);


    if ( pSkill->m_sEXT_DATA.emSELFZONE01 == EMTIME_IMPACT )
SK_EFF_SELFZONE ( sStrikeEff, pSkill->m_sEXT_DATA.emSELFZONE01_POS, pSkill->m_sEXT_DATA.GETSELFZONE01(emELMT), &sTARG );


    if ( pSkill->m_sEXT_DATA.emSELFZONE02 == EMTIME_IMPACT )
SK_EFF_SELFZONE ( sStrikeEff, pSkill->m_sEXT_DATA.emSELFZONE02_POS, pSkill->m_sEXT_DATA.GETSELFZONE02(emELMT), &sTARG );


    if ( pSkill->m_sEXT_DATA.emSELFBODY == EMTIME_IMPACT )
DxEffGroupPlayer::GetInstance().NewEffBody ( pSkill->m_sEXT_DATA.GETSELFBODY(emELMT), &sTARG, &m_vDir );
}


BOOL GLCharClient::SkillProc ( float fElapsedTime )
{
    m_fattTIMER += fElapsedTime * GETATTVELO();
    m_fattTIMER += GETATT_ITEM();
    GASSERT(m_pSkinChar->GETCURANIMNODE());


    PANIMCONTNODE pAnicontNode = m_pSkinChar->GETCURANIMNODE();
    GASSERT(pAnicontNode);
    PSANIMCONTAINER pAnimCont = pAnicontNode->pAnimCont;


    if ( pAnimCont->m_wStrikeCount == 0 )    return FALSE;


    DWORD dwThisKey = pAnimCont->m_dwSTime + DWORD(m_fattTIMER*UNITANIKEY_PERSEC);


    DWORD dwStrikeKey = pAnimCont->m_sStrikeEff[m_nattSTEP].m_dwFrame;
    if ( m_nattSTEP < pAnimCont->m_wStrikeCount )
    {
if ( dwThisKey>=dwStrikeKey )
{
//    Note : ½ºÅ³ ÀÌÆåÆ® ¹ßµ¿.
//
SkillEffect ( pAnimCont->m_sStrikeEff[m_nattSTEP] );


m_nattSTEP++;
}
    }


    return TRUE;
}


void GLCharClient::UPDATE_ITEM ( )
{
    m_fITEM_MOVE_R = 0.0f;
    m_fITEMATTVELO_R = 0.0f;
    m_fITEM_MOVE = 0.0f;
    m_fITEMATTVELO = 0.0f;


    for ( int i=0; i<SLOT_NSIZE_S_2; i++ )
    {
EMSLOT emSLOT = static_cast<EMSLOT>(i);
if ( !VALID_SLOT_ITEM(emSLOT) ) continue;


SITEMCUSTOM sItemCustom;
const SITEMCLIENT& sItemClient = m_CharData.m_PutOnItems[i];
sItemCustom.Assign( sItemClient );


SITEM* sItem = GET_SLOT_ITEMDATA( emSLOT );
if ( !sItem ) continue;


//    Note : º¯È­À² È¿°ú.
switch ( sItem->sSuitOp.sVARIATE.emTYPE )
{
case EMVAR_HP:
case EMVAR_MP:
case EMVAR_SP:
case EMVAR_AP:
break;
case EMVAR_MOVE_SPEED:
if ( emSLOT != SLOT_VEHICLE )    m_fITEM_MOVE_R += sItemCustom.GETMOVESPEEDR();
else if ( m_bVehicle )    m_fITEM_MOVE_R += m_sVehicle.GetSpeedRate() + sItemCustom.GETMOVESPEEDR();;
break;
case EMVAR_ATTACK_SPEED:
m_fITEMATTVELO_R    += sItem->sSuitOp.sVARIATE.fVariate;
break;
case EMVAR_CRITICAL_RATE:
break;
case EMVAR_CRUSHING_BLOW:
break;
};


// º¯È­·® È¿°ú
switch ( sItem->sSuitOp.sVOLUME.emTYPE )
{
case EMVAR_HP:
case EMVAR_MP:
case EMVAR_SP:
case EMVAR_AP:
break;
case EMVAR_MOVE_SPEED:
if ( emSLOT != SLOT_VEHICLE )    m_fITEM_MOVE += sItemCustom.GETMOVESPEED();
else if ( m_bVehicle ) m_fITEM_MOVE += m_sVehicle.GetSpeedVol() + sItemCustom.GETMOVESPEED();
break;
case EMVAR_ATTACK_SPEED:
m_fITEMATTVELO += sItem->sSuitOp.sVOLUME.fVolume;
break;
case EMVAR_CRITICAL_RATE:
break;
case EMVAR_CRUSHING_BLOW:
break;
};




// À̵¿¼Óµµ ·£´ý¿É¼Ç Àû¿ë( ÆÄÃ÷´Â À§¿¡¼­ Àû¿ë m_sVehicle.GetSpeedRate(); ) 
// if ( emSLOT != SLOT_VEHICLE )    m_fITEM_MOVE += sItemCustom.GETOptVALUE( EMR_OPT_MOVE_SPEED );
// else if ( m_bVehicle ) m_fITEM_MOVE += sItemCustom.GETOptVALUE( EMR_OPT_MOVE_SPEED );


    }
}


void GLCharClient::UpdateLandEffect()
{
    PLANDMANCLIENT pLand = GLGaeaClient::GetInstance().GetActiveMap();
    if( !pLand ) return;


    SLEVEL_ETC_FUNC *pLevelEtcFunc = pLand->GetLevelEtcFunc();
    if( !pLevelEtcFunc ) return;
    if( !pLevelEtcFunc->m_bUseFunction[EMETCFUNC_LANDEFFECT] ) return;


    // ¸ðµç ¹öÇÁ¸¦ Ãë¼ÒÇؾßÇÒ °æ¿ìÀÇ Ã³¸®
    for( int i = 0; i < EMLANDEFFECT_MULTI; i++ )
    {
SLANDEFFECT landEffect = m_sLandEffect[i];
if( !landEffect.IsUse() ) continue;
if( landEffect.emLandEffectType == EMLANDEFFECT_CANCEL_ALLBUFF )
{
if( m_dwTransfromSkill != SNATIVEID::ID_NULL )
{
m_dwTransfromSkill = SNATIVEID::ID_NULL;
UpdateSuit();
}
for ( int i=0; i<SKILLFACT_SIZE; ++i )
{
FACTEFF::DeleteSkillFactEffect ( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, m_sSKILLFACT[i].sNATIVEID );
DISABLESKEFF(i);
} 
return;
}
    }
}


void GLCharClient::UPDATE_DATA ( float fTime, float fElapsedTime, BOOL bClient )
{
    m_fSTATE_MOVE = 1.0f;
    m_fSTATE_DELAY = 1.0f;


    m_fSKILL_MOVE = 0.0f;
    m_fATTVELO = 0.0f;


    m_bSTATE_PANT = false;
    m_bSTATE_STUN = false;


    m_bINVISIBLE = false;
    m_bSafeZone = false;


    for ( int i=0; i<SKILLFACT_SIZE; ++i )
    {
SSKILLFACT &sSKEFF = m_sSKILLFACT[i];
if ( sSKEFF.sNATIVEID==NATIVEID_NULL() )    continue;


sSKEFF.fAGE -= fElapsedTime;


switch ( sSKEFF.emSPEC )
{
case EMSPECA_MOVEVELO:
m_fSKILL_MOVE += sSKEFF.fSPECVAR1;
break;


case EMSPECA_INVISIBLE:
m_bINVISIBLE = true;
break;


case EMSPECA_ATTACKVELO:
//    °ø°Ý ¼Óµµ °è³äÀ̹ǷΠ( °ø°Ý ½Ã°£À» -0.1 (-10%) °¨¼Ò ½ÃÅ°±â À§Çؼ­´Â ºÎÈ£ ¹ÝÀüÀ» ÇÏ¿©¾ßÇÔ. )
m_fATTVELO -= sSKEFF.fSPECVAR1;
break;


case EMSPECA_SKILLDELAY:
break;
};


//    Ŭ¶óÀ̾ðÆ®°¡ ¾Æ´Ò °æ¿ì ¿©±â¼­ ½ºÅ³ ÀÌÆåÆ®¸¦ ºñÈ°¼ºÈ­, Ŭ¶óÀ̾ðÆ®´Â UpdateSkillEffect()¿¡¼­ ÇÔ.
if ( !bClient && sSKEFF.fAGE <= 0.0f ) DISABLESKEFF(i);
    }


    for ( int i=0; i<EMBLOW_MULTI; ++i )
    {
SSTATEBLOW &sSTATEBLOW = m_sSTATEBLOWS[i];
if ( sSTATEBLOW.emBLOW == EMBLOW_NONE ) continue;


sSTATEBLOW.fAGE -= fElapsedTime;


switch ( sSTATEBLOW.emBLOW )
{
case EMBLOW_NUMB:
m_fSTATE_MOVE += sSTATEBLOW.fSTATE_VAR1; //    À̵¿¼Óµµ °¨¼Ò.
m_fSTATE_DELAY = 1.0f + sSTATEBLOW.fSTATE_VAR2; //    µô·¡ÀÌ Áõ°¡.
break;


case EMBLOW_STUN:
m_fSTATE_MOVE = 0.0f; //    ±âÀý.
m_bSTATE_PANT = true;
m_bSTATE_STUN = true;
break;


case EMBLOW_STONE:
m_fSTATE_MOVE += sSTATEBLOW.fSTATE_VAR1; //    À̵¿¼Óµµ °¨¼Ò.
break;


case EMBLOW_BURN:
break;


case EMBLOW_FROZEN:
m_fSTATE_MOVE += sSTATEBLOW.fSTATE_VAR1; //    À̵¿¼Óµµ °¨¼Ò.
break;


case EMBLOW_MAD:
m_bSTATE_PANT = true;
break;


case EMBLOW_POISON:
break;


case EMBLOW_CURSE:
break;
};
    }
    
    switch ( m_CharData.sQITEMFACT.emType )
    {
    case QUESTION_SPEED_UP:
m_fSKILL_MOVE += (m_CharData.sQITEMFACT.wParam1/100.0f);
break;


    case QUESTION_CRAZY:
m_fSKILL_MOVE += (m_CharData.sQITEMFACT.wParam1/100.0f);
m_fATTVELO += (m_CharData.sQITEMFACT.wParam2/100.0f);
break;


    case QUESTION_ATTACK_UP:
break;


    case QUESTION_EXP_UP:
break;


    case QUESTION_LUCKY:
break;


    case QUESTION_SPEED_UP_M:
m_fSKILL_MOVE += (m_CharData.sQITEMFACT.wParam1/100.0f);
break;


    case QUESTION_MADNESS:
m_fSKILL_MOVE += (m_CharData.sQITEMFACT.wParam1/100.0f);
m_fATTVELO += (m_CharData.sQITEMFACT.wParam2/100.0f);
break;


    case QUESTION_ATTACK_UP_M:
break;
    };




    // ÁöÇü È¿°ú ó¸®
    for( int i = 0; i < EMLANDEFFECT_MULTI; i++ )
    {
SLANDEFFECT landEffect = m_sLandEffect[i];
if( !landEffect.IsUse() ) continue;


switch( landEffect.emLandEffectType ) 
{
case EMLANDEFFECT_ATK_SPEED: // °ø°Ý¼Óµµ
m_fATTVELO += landEffect.fValue;
break;
case EMLANDEFFECT_MOVE_SPEED: // À̵¿¼Óµµ
m_fSKILL_MOVE += landEffect.fValue;
break;
case EMLANDEFFECT_MP_RATE: // HP º¯È­À²
case EMLANDEFFECT_HP_RATE: // MP º¯È­À²
case EMLANDEFFECT_RECOVER_RATE: // ȸº¹À²
case EMLANDEFFECT_DAMAGE_RATE:    // °ø°ÝÄ¡ º¯È­À²
case EMLANDEFFECT_DEFENSE_RATE:    // ¹æ¾îÄ¡ º¯È­À²
case EMLANDEFFECT_RESIST_RATE:    // ÀúÇ× ¼öÄ¡ 
case EMLANDEFFECT_CANCEL_ALLBUFF: // ¸ðµç ¹öÇÁ Ãë¼Ò
break;
case EMLANDEFFECT_SAFE_ZONE:
m_bSafeZone = true;
break;
}
    }




    //    Memo :    ? ¾ÆÀÌÅÛ À̺¥Æ® Àû¿ë
    if( m_CharData.sEVENTFACT.IsACTIVE( EMGM_EVENT_SPEED ) )    m_fSKILL_MOVE += (m_CharData.sEVENTFACT.wSpeed/100.0f);
    if( m_CharData.sEVENTFACT.IsACTIVE( EMGM_EVENT_ASPEED) )    m_fATTVELO += (m_CharData.sEVENTFACT.wASpeed/100.0f);


    //    °ø°Ý/À̵¿ ¼Óµµ. ( Áö¼Ó skill ¼Ó¼º °¡»êµÈ ºÎºÐ¿¡ state, passive skill ¼Ó¼º °¡»ê. )
    m_fATTVELO += m_fSTATE_MOVE + m_CharData.sPASSIVE_SKILL.m_fATTVELO;
    m_fSKILL_MOVE += m_CharData.sPASSIVE_SKILL.m_fMOVEVELO;
}


BOOL GLCharClient::RECEIVE_SKILLFACT ( const SNATIVEID skill_id, const WORD wlevel, const DWORD dwSELECT, float fAge )
{
    //    ½ºÅ³ Á¤º¸ °¡Á®¿È.
    PGLSKILL pSkill = GLSkillMan::GetInstance().GetData ( skill_id.wMainID, skill_id.wSubID );
    if ( !pSkill ) return FALSE;
    SKILL::CDATA_LVL &sSKILL_DATA = pSkill->m_sAPPLY.sDATA_LVL[wlevel];


    BOOL bHOLD = FALSE;
    SSKILLFACT sSKILLEF;
    switch ( pSkill->m_sAPPLY.emBASIC_TYPE )
    {
    case SKILL::EMFOR_VARHP:
    case SKILL::EMFOR_VARMP:
    case SKILL::EMFOR_VARSP:
    case SKILL::EMFOR_DEFENSE:
    case SKILL::EMFOR_HITRATE:
    case SKILL::EMFOR_AVOIDRATE:
    case SKILL::EMFOR_VARAP:
    case SKILL::EMFOR_VARDAMAGE:
    case SKILL::EMFOR_VARDEFENSE:
    case SKILL::EMFOR_PA:
    case SKILL::EMFOR_SA:
    case SKILL::EMFOR_MA:
    case SKILL::EMFOR_RESIST:
    case SKILL::EMFOR_CP_RATE: //add cp
    case SKILL::EMFOR_CP_GAIN: //add cp
bHOLD = TRUE;
sSKILLEF.emTYPE = pSkill->m_sAPPLY.emBASIC_TYPE;
sSKILLEF.fMVAR = sSKILL_DATA.fBASIC_VAR;
break;
    };


    if ( pSkill->m_sAPPLY.emADDON != EMIMPACTA_NONE )
    {
bHOLD = TRUE;
sSKILLEF.emADDON = pSkill->m_sAPPLY.emADDON;
sSKILLEF.fADDON_VAR = pSkill->m_sAPPLY.fADDON_VAR[wlevel];
    }


    switch ( pSkill->m_sAPPLY.emSPEC )
    {
    case EMSPECA_REFDAMAGE:
    case EMSPECA_NONBLOW:
    case EMSPECA_PIERCE:
    case EMSPECA_TARRANGE:
    case EMSPECA_MOVEVELO:
    case EMSPECA_ATTACKVELO:
    case EMSPECA_SKILLDELAY:
    case EMSPECA_PSY_DAMAGE_REDUCE:
    case EMSPECA_MAGIC_DAMAGE_REDUCE:
    case EMSPECA_PSY_DAMAGE_REFLECTION:
    case EMSPECA_MAGIC_DAMAGE_REFLECTION:
    case EMSPECA_DEFENSE_SKILL_ACTIVE:
    case EMSPECA_NOPOTION: //add antipot
    case EMSPECA_NOSKILL: //add antiskill


    case EMSPECA_INVISIBLE: //add invi-anti
    case EMSPECA_RECVISIBLE: //add invi-anti


bHOLD = TRUE;
sSKILLEF.emSPEC = pSkill->m_sAPPLY.emSPEC;
sSKILLEF.fSPECVAR1 = pSkill->m_sAPPLY.sSPEC[wlevel].fVAR1;
sSKILLEF.fSPECVAR2 = pSkill->m_sAPPLY.sSPEC[wlevel].fVAR2;
sSKILLEF.dwSPECFLAG = pSkill->m_sAPPLY.sSPEC[wlevel].dwFLAG;
sSKILLEF.dwNativeID = pSkill->m_sAPPLY.sSPEC[wlevel].dwNativeID;
break;
    };


    //    Note : Áö¼ÓÇü ½ºÅ³ÀÏ °æ¿ì ÃÖÀû ½½·ÔÀ» ã¾Æ¼­ ½ºÅ³ È¿°ú¸¦ ³Ö¾îÁÜ.
    //
    if ( bHOLD )
    {
sSKILLEF.sNATIVEID    = skill_id;
sSKILLEF.wLEVEL = wlevel;


if ( fAge == _SKILLFACT_DEFAULTTIME )    sSKILLEF.fAGE = sSKILL_DATA.fLIFE;
else sSKILLEF.fAGE = fAge;


m_sSKILLFACT[dwSELECT] = sSKILLEF;


if( pSkill->m_sSPECIAL_SKILL.emSSTYPE == SKILL::EMSSTYPE_TRANSFORM )
{
m_dwTransfromSkill = dwSELECT;
m_sSKILLFACT[dwSELECT].SetSpecialSkill( SKILL::EMSSTYPE_TRANSFORM );
m_sSKILLFACT[dwSELECT].bRanderSpecialEffect = FALSE;


if( m_pSkinChar )
{
for( BYTE i = 0; i < SKILL::EMTRANSFORM_NSIZE; i++ )
{//add abl
//if( m_CharData.wSex == 1 ) 
if ( m_CharData.emClass == GLCC_FIGHTER_M ||
m_CharData.emClass == GLCC_ARMS_M ||
m_CharData.emClass == GLCC_EXTREME_M ||
m_CharData.emClass == GLCC_ARCHER_M ||
m_CharData.emClass == GLCC_SPIRIT_M ||
m_CharData.emClass == GLCC_SCIENCE_M ||
m_CharData.emClass == GLCC_ASSASIN_M ||
m_CharData.emClass == GLCC_TESTING_M
)
{
if( pSkill->m_sSPECIAL_SKILL.strTransform_Man[i].empty() ) continue;
DxSkinPieceRootData* pPieceDataRoot;
pPieceDataRoot = DxSkinPieceRootDataContainer::GetInstance().LoadData( pSkill->m_sSPECIAL_SKILL.strTransform_Man[i].c_str() , m_pd3dDevice , TRUE );
if ( pPieceDataRoot )
{
if ( pPieceDataRoot->GetUseCPS() )
{
m_pSkinChar->SetPiece( pPieceDataRoot->GetCpsName().c_str(), m_pd3dDevice, 0X0, 0, TRUE );
}
m_pSkinChar->SetCharPieceData( pPieceDataRoot->GetData()
, m_pd3dDevice
, pPieceDataRoot->GetBoneLink()
, pPieceDataRoot->GetWeaponSlot()
, pPieceDataRoot->GetType()
, 0x0
, 0
, TRUE );
}else{
m_pSkinChar->SetPiece ( pSkill->m_sSPECIAL_SKILL.strTransform_Man[i].c_str(), m_pd3dDevice, 0X0, 0, TRUE );
}
}
else
{//add abl
if( pSkill->m_sSPECIAL_SKILL.strTransform_Woman[i].empty() ) continue;
DxSkinPieceRootData* pPieceDataRoot;
pPieceDataRoot = DxSkinPieceRootDataContainer::GetInstance().LoadData( pSkill->m_sSPECIAL_SKILL.strTransform_Woman[i].c_str() , m_pd3dDevice , TRUE );
if ( pPieceDataRoot )
{
if ( pPieceDataRoot->GetUseCPS() )
{
m_pSkinChar->SetPiece( pPieceDataRoot->GetCpsName().c_str(), m_pd3dDevice );
}
m_pSkinChar->SetCharPieceData( pPieceDataRoot->GetData()
, m_pd3dDevice
, pPieceDataRoot->GetBoneLink()
, pPieceDataRoot->GetWeaponSlot()
, pPieceDataRoot->GetType()
, 0x0
, 0
, TRUE );
}else{
m_pSkinChar->SetPiece ( pSkill->m_sSPECIAL_SKILL.strTransform_Woman[i].c_str(), m_pd3dDevice, 0X0, 0, TRUE );
}
}
}
}
}


return TRUE;
    }


    GASSERT ( 0 && "Áö¼Ó ½ºÅ³Á¤º¸°¡ À¯È¿ÇÏÁö ¾ÊÀ½." );
    return FALSE;
}


EMSLOT GLCharClient::GetCurRHand()
{
    if( IsUseArmSub() ) return SLOT_RHAND_S;
    else return SLOT_RHAND;
}


EMSLOT GLCharClient::GetCurLHand()
{
    if( IsUseArmSub() ) return SLOT_LHAND_S;
    else return SLOT_LHAND;
}


BOOL GLCharClient::VALID_SLOT_ITEM ( EMSLOT _slot ) 
{ 
    if( m_CharData.m_PutOnItems[_slot].sNativeID==NATIVEID_NULL() ) return FALSE;


    if( IsUseArmSub() )
    {
if( _slot == SLOT_RHAND || _slot == SLOT_LHAND ) return FALSE;
    }
    else
    {
if( _slot == SLOT_RHAND_S || _slot == SLOT_LHAND_S ) return FALSE;
    }


    return TRUE;
}


BOOL GLCharClient::IsCurUseArm( EMSLOT emSlot )
{
    if( IsUseArmSub() )
    {
if( emSlot == SLOT_RHAND || emSlot == SLOT_LHAND ) return FALSE;
    }
    else
    {
if( emSlot == SLOT_RHAND_S || emSlot == SLOT_LHAND_S ) return FALSE;
    }


    return TRUE;
}


D3DXVECTOR3 GLCharClient::GetPosBodyHeight ()
{ 
    if ( m_bVehicle ) return D3DXVECTOR3( m_vPos.x, m_vPos.y+m_fHeight+10.0f, m_vPos.z ); 
    else return D3DXVECTOR3( m_vPos.x, m_vPos.y+m_fHeight, m_vPos.z ); 
}




void GLCharClient::DISABLEALLLANDEFF()
{
    for( int i = 0; i < EMLANDEFFECT_MULTI; i++ )
    {
m_sLandEffect[i].Init();
    }
}
void GLCharClient::ADDLANDEFF( SLANDEFFECT landEffect, int iNum )
{
    if( iNum >= EMLANDEFFECT_MULTI ) return;
    m_sLandEffect[iNum] = landEffect;
}
 
Last edited:
zZzZzZz
Loyal Member
Joined
Jun 30, 2013
Messages
1,035
Reaction score
92
@KIARAN nxt time use spoiler for that very very long comment my browser got hangs -.-
 
Skilled Illusionist
Joined
Jan 26, 2010
Messages
356
Reaction score
80
Code:
Compiling...
DxCharSham.cpp
DxCharSham.cpp(445) : error C2601: 'DxCharSham::SetSelect' : local function definitions are illegal
DxCharSham.cpp(465) : error C2601: 'DxCharSham::TurnAction' : local function definitions are illegal
DxCharSham.cpp(502) : error C2601: 'DxCharSham::FrameMove' : local function definitions are illegal
DxCharSham.cpp(611) : error C2601: 'DxCharSham::Render' : local function definitions are illegal
DxCharSham.cpp(625) : error C2601: 'DxCharSham::RenderShadow' : local function definitions are illegal
DxCharSham.cpp(637) : error C2601: 'DxCharSham::RestoreDeviceObjects' : local function definitions are illegal
DxCharSham.cpp(645) : error C2601: 'DxCharSham::InvalidateDeviceObjects' : local function definitions are illegal
DxCharSham.cpp(651) : fatal error C1075: end of file found before the left brace '{' at 'DxCharSham.cpp(300)' was matched
GLCharClient.cpp
G-Logic\GLCharClient.cpp(796) : error C2601: 'GLCharClient::GetBodyRadius' : local function definitions are illegal
G-Logic\GLCharClient.cpp(801) : error C2601: 'GLCharClient::DisableSkillFact' : local function definitions are illegal
G-Logic\GLCharClient.cpp(831) : error C2601: 'GLCharClient::ReSelectAnimation' : local function definitions are illegal
G-Logic\GLCharClient.cpp(856) : error C2601: 'GLCharClient::SetPosition' : local function definitions are illegal
G-Logic\GLCharClient.cpp(863) : error C2601: 'GLCharClient::TurnAction' : local function definitions are illegal
G-Logic\GLCharClient.cpp(939) : error C2601: 'GLCharClient::UpateAnimation' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1282) : error C2601: 'GLCharClient::IsCollisionVolume' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1290) : error C2601: 'GLCharClient::GETATTVELO' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1297) : error C2601: 'GLCharClient::GETMOVEVELO' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1304) : error C2601: 'GLCharClient::GETATT_ITEM' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1309) : error C2601: 'GLCharClient::GETMOVE_ITEM' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1315) : error C2601: 'GLCharClient::GetMoveVelo' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1322) : error C2601: 'GLCharClient::UpdateSpecialSkill' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1368) : error C2601: 'GLCharClient::FrameMove' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1495) : error C2601: 'GLCharClient::GetDirection' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1500) : error C2601: 'GLCharClient::Render' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1565) : error C2601: 'GLCharClient::RenderShadow' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1580) : error C2601: 'GLCharClient::RestoreDeviceObjects' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1586) : error C2601: 'GLCharClient::InvalidateDeviceObjects' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1592) : error C2601: 'GLCharClient::GET_ITEM_ELMT' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1613) : error C2601: 'GLCharClient::ReceiveDamage' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1645) : error C2601: 'GLCharClient::ReceiveAVoid' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1654) : error C2601: 'GLCharClient::ReceiveSwing' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1659) : error C2601: 'GLCharClient::MsgMoveState' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1687) : error C2601: 'GLCharClient::MsgGoto' : local function definitions are illegal
G-Logic\GLCharClient.cpp(1711) : error C2601: 'GLCharClient::MsgProcess' : local function definitions are illegal
G-Logic\GLCharClient.cpp(2553) : error C2601: 'GLCharClient::StartAttackProc' : local function definitions are illegal
G-Logic\GLCharClient.cpp(2559) : error C2601: 'GLCharClient::AttackEffect' : local function definitions are illegal
G-Logic\GLCharClient.cpp(2715) : error C2601: 'GLCharClient::AttackProc' : local function definitions are illegal
G-Logic\GLCharClient.cpp(2747) : error C2601: 'GLCharClient::StartSkillProc' : local function definitions are illegal
G-Logic\GLCharClient.cpp(2781) : error C2601: 'GLCharClient::SKT_EFF_HOLDOUT' : local function definitions are illegal
G-Logic\GLCharClient.cpp(2831) : error C2601: 'GLCharClient::SK_EFF_SELFZONE' : local function definitions are illegal
G-Logic\GLCharClient.cpp(2883) : error C2601: 'GLCharClient::SK_EFF_TARZONE' : local function definitions are illegal
G-Logic\GLCharClient.cpp(2921) : error C2601: 'GLCharClient::SK_EFF_TARG' : local function definitions are illegal
G-Logic\GLCharClient.cpp(3019) : error C2601: 'GLCharClient::SkillEffect' : local function definitions are illegal
G-Logic\GLCharClient.cpp(3148) : error C2601: 'GLCharClient::SkillProc' : local function definitions are illegal
G-Logic\GLCharClient.cpp(3178) : error C2601: 'GLCharClient::UPDATE_ITEM' : local function definitions are illegal
G-Logic\GLCharClient.cpp(3247) : error C2601: 'GLCharClient::UpdateLandEffect' : local function definitions are illegal
G-Logic\GLCharClient.cpp(3278) : error C2601: 'GLCharClient::UPDATE_DATA' : local function definitions are illegal
G-Logic\GLCharClient.cpp(3437) : error C2601: 'GLCharClient::RECEIVE_SKILLFACT' : local function definitions are illegal
G-Logic\GLCharClient.cpp(3593) : error C2601: 'GLCharClient::GetCurRHand' : local function definitions are illegal
G-Logic\GLCharClient.cpp(3599) : error C2601: 'GLCharClient::GetCurLHand' : local function definitions are illegal
G-Logic\GLCharClient.cpp(3605) : error C2601: 'GLCharClient::VALID_SLOT_ITEM' : local function definitions are illegal
G-Logic\GLCharClient.cpp(3621) : error C2601: 'GLCharClient::IsCurUseArm' : local function definitions are illegal
G-Logic\GLCharClient.cpp(3635) : error C2601: 'GLCharClient::GetPosBodyHeight' : local function definitions are illegal
G-Logic\GLCharClient.cpp(3642) : error C2601: 'GLCharClient::DISABLEALLLANDEFF' : local function definitions are illegal
G-Logic\GLCharClient.cpp(3649) : error C2601: 'GLCharClient::ADDLANDEFF' : local function definitions are illegal
G-Logic\GLCharClient.cpp(3653) : fatal error C1075: end of file found before the left brace '{' at 'G-Logic\GLCharClient.cpp(542)' was matched
GLCharacter.cpp
G-Logic\GLCharacter.cpp(1251) : error C2065: 'emSex' : undeclared identifier
G-Logic\GLCharacter.cpp(1251) : error C2679: binary '==' : no operator found which takes a right-hand operand of type 'EMCHARCLASS' (or there is no acceptable conversion)
G-Logic\GLCharacter.cpp(4461) : warning C4244: 'initializing' : conversion from 'SIZE_T' to 'int', possible loss of data
G-Logic\GLCharacter.cpp(4487) : warning C4800: 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)
G-Logic\GLCharacter.cpp(5800) : warning C4244: '=' : conversion from 'const WORD' to 'BYTE', possible loss of data



How To Fix This ERRORS?
I Added It Correctly!



look @ the code... some error is for minor...

this error is not you understand the cpp...

Solution:

1. Understand CPP
2. do not C+P the code
3. make sure the sdk are install on your PC or sdk are proper use.


90% of your error are "local function definitions are illegal" this problem is sdk proper install.
sorry for my bad english.
 
Last edited:
Newbie Spellweaver
Joined
Jan 13, 2013
Messages
27
Reaction score
1
sir, please do make a guide too for juver source =(

i'll keep my promises..
since most of you cant use common sense here the code for you :

GLCharacter.cpp :
Code:
HRESULT GLCharacter::UpdateSuit( BOOL bChangeHair, BOOL bChangeFace )
{
    GASSERT(m_pd3dDevice);

    EMCHARINDEX emIndex = CharClassToIndex(m_emClass);
    DxSkinCharData* pSkinChar = DxSkinCharDataContainer::GetInstance().FindData ( GLCONST_CHAR::szCharSkin[emIndex] );
    if ( !pSkinChar )    return E_FAIL;



    const GLCONST_CHARCLASS &sCONST = GLCONST_CHAR::cCONSTCLASS[emIndex];

    

    if ( bChangeFace )
    {
        // ¾ó±¼
        if ( sCONST.dwHEADNUM > m_wFace )
        {
            std::string strHEAD_CPS = sCONST.strHEAD_CPS[m_wFace];
        
            PDXCHARPART pCharPart = NULL;
            pCharPart = m_pSkinChar->GetPiece(PIECE_HEAD);        //    ÇöÀç ÀåÂø ½ºÅ².

            if ( pCharPart && strcmp(strHEAD_CPS.c_str(),pCharPart->m_szFileName) )
            {
                m_pSkinChar->SetPiece ( strHEAD_CPS.c_str(), m_pd3dDevice, 0x0, 0, TRUE );
            }
        }
    }
    // Çì¾î½ºÅ¸ÀÏ
    if( bChangeHair )
    {
        if ( sCONST.dwHAIRNUM > m_wHair )
        {
            std::string strHAIR_CPS = sCONST.strHAIR_CPS[m_wHair];
        
            PDXCHARPART pCharPart = NULL;
            pCharPart = m_pSkinChar->GetPiece(PIECE_HAIR);        //    ÇöÀç ÀåÂø ½ºÅ².

            if ( pCharPart && strcmp(strHAIR_CPS.c_str(),pCharPart->m_szFileName) )
            {
                m_pSkinChar->SetPiece ( strHAIR_CPS.c_str(), m_pd3dDevice, 0x0, 0, TRUE );
            }
        }
    }

    m_pSkinChar->SetHairColor( m_wHairColor );

    // ÀåÂøÇÑ ¾ÆÀÌÅÛ ¾÷µ¥ÀÌÆ®
    for ( int i=0; i<SLOT_NSIZE_S_2; i++ )
    {    
        // ÇöÀç ÀåÂøÁßÀÎ ¹«±â°¡ ¾Æ´Ï¸é ³Ñ¾î°£´Ù.
        if( !IsCurUseArm( EMSLOT(i) ) ) continue;

        const SITEMCUSTOM &ItemCustom = m_PutOnItems[i];

        // º¹Àå ¾ÆÀÌÅÛ
        SNATIVEID nidITEM = ItemCustom.nidDISGUISE;
        if ( nidITEM==SNATIVEID(false) )    nidITEM = ItemCustom.sNativeID;
        
        if ( !m_bVehicle && i == SLOT_VEHICLE  ) nidITEM = SNATIVEID(false);
        else if (  m_bVehicle && i == SLOT_VEHICLE )
        {
            nidITEM = m_sVehicle.GetSkinID();
            if ( nidITEM == SNATIVEID(false) )
            {
                m_sVehicle.m_sVehicleID = ItemCustom.sNativeID;
                nidITEM = ItemCustom.sNativeID;
            }
        }

        // À¯È¿ÇÏÁö ¾ÊÀ¸¸é
        if ( nidITEM == SNATIVEID(false) )
        {
            //    Note : ±âº» ½ºÅ²°ú Áö±Ý ÀåÂøµÈ ½ºÅ²ÀÌ Æ²¸± °æ¿ì.
            //    SLOT->PIECE.
            PDXSKINPIECE pSkinPiece = NULL;    //    ±âº» ½ºÅ².
            PDXCHARPART pCharPart = NULL;    //    ÇöÀç ÀåÂø ½ºÅ².

            EMPIECECHAR emPiece = SLOT_2_PIECE(EMSLOT(i));
            if ( emPiece!=PIECE_SIZE )
            {
                pSkinPiece = pSkinChar->GetPiece(emPiece);    //    ±âº» ½ºÅ².
                pCharPart = m_pSkinChar->GetPiece(emPiece);    //    ÇöÀç ÀåÂø ½ºÅ².
            }

            if ( pSkinPiece )
            {
                if ( pCharPart && strcmp(pSkinPiece->m_szFileName,pCharPart->m_szFileName) )
                    m_pSkinChar->SetPiece ( pSkinPiece->m_szFileName, m_pd3dDevice, 0X0, 0, TRUE );
            }
            else
            {
                if ( pCharPart )    
                {
                    [COLOR=#FF0000]/////EXTRA FIX TO ERASE THE EFFECT WHEN YOU UNEQUIPED ITEM
                    if ( ( emPiece == PIECE_UPBODY || emPiece == PIECE_LOBODY || emPiece == PIECE_GLOVE || emPiece == PIECE_FOOT ) )
                    {
                        switch (emPiece)
                        {
                            case PIECE_UPBODY: m_pSkinChar->ResetPiece(PIECE_ELE01); break;
                            case PIECE_LOBODY: m_pSkinChar->ResetPiece(PIECE_ELE02); break;
                            case PIECE_GLOVE: m_pSkinChar->ResetPiece(PIECE_ELE03); break;
                            case PIECE_FOOT: m_pSkinChar->ResetPiece(PIECE_ELE04); break;
                        };
                    }
                    /////////////////////[/COLOR]
                    
                    m_pSkinChar->ResetPiece(emPiece);
                }
            }
        }
        // À¯È¿Çϸé
        else
        {
            SITEM* pItem = GLItemMan::GetInstance().GetItem ( nidITEM );
            if ( pItem ) 
            {
                m_pSkinChar->SetPiece ( pItem->GetWearingFile(emIndex), m_pd3dDevice, NULL, ItemCustom.GETGRADE_EFFECT(), TRUE );
            }
            
            [COLOR=#FF0000]////////////THE EFFECT CODE SHOULD BE HERE
            EMPIECECHAR emPiece = SLOT_2_PIECE(EMSLOT(i));
            
            if ( ( emPiece == PIECE_UPBODY || emPiece == PIECE_LOBODY || emPiece == PIECE_GLOVE || emPiece == PIECE_FOOT ) )
            {
                switch (emPiece)
                {
                    case PIECE_UPBODY: m_pSkinChar->ResetPiece(PIECE_ELE01); break;
                    case PIECE_LOBODY: m_pSkinChar->ResetPiece(PIECE_ELE02); break;
                    case PIECE_GLOVE: m_pSkinChar->ResetPiece(PIECE_ELE03); break;
                    case PIECE_FOOT: m_pSkinChar->ResetPiece(PIECE_ELE04); break;
                };

                if ( ItemCustom.GETGRADE_EFFECT() > 5 )
                {
                    CString strEle, strSex, strPiece;

                    if( emSex == GLCC_MAN ) strSex = "m";
                    else strSex = "w";
                    switch (emPiece)
                    {
                        case PIECE_UPBODY: strPiece = "body"; break;
                        case PIECE_LOBODY: strPiece = "leg"; break;
                        case PIECE_GLOVE: strPiece = "hand"; break;
                        case PIECE_FOOT: strPiece = "foot"; break;
                    };
                    strEle.Format("%s_bs_%s_enchent+%d.cps", strSex, strPiece, ItemCustom.GETGRADE_EFFECT());
                    m_pSkinChar->SetPiece ( strEle, m_pd3dDevice, NULL, TRUE );
                }
            } 
            //////////////////////////////[/COLOR]
        }
    }

    //    Note : ½ºÅ³ ¹öÇÁ, »óÅÂÀÌ»ó È¿°ú »ý¼º.
    FACTEFF::ReNewEffect ( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, m_sSKILLFACT, m_sSTATEBLOWS, m_matTrans, m_vDir );

    if( GLCONST_CHAR::cCONSTCLASS[emIndex].strCLASS_EFFECT.size() != 0 )
    {
        DxEffcharDataMan::GetInstance().PutPassiveEffect ( m_pSkinChar, GLCONST_CHAR::cCONSTCLASS[emIndex].strCLASS_EFFECT.c_str(), &m_vDir );
    }

    if( m_dwTransfromSkill != SNATIVEID::ID_NULL )
    {
        PGLSKILL pSkill = GLSkillMan::GetInstance().GetData ( m_sSKILLFACT[m_dwTransfromSkill].sNATIVEID.wMainID, m_sSKILLFACT[m_dwTransfromSkill].sNATIVEID.wSubID );
        if( pSkill ) 
        {
            for( BYTE i = 0; i < SKILL::EMTRANSFORM_NSIZE; i++ )
            {
                if( m_wSex == 1 )
                {                
                    m_pSkinChar->SetPiece ( pSkill->m_sSPECIAL_SKILL.strTransform_Man[i].c_str(), m_pd3dDevice, 0X0, 0, TRUE );
                }else{
                    m_pSkinChar->SetPiece ( pSkill->m_sSPECIAL_SKILL.strTransform_Woman[i].c_str(), m_pd3dDevice, 0X0, 0, TRUE );
                }
            }
        }
    }

    return S_OK;
}

GLCharClient.cpp :
Code:
HRESULT GLCharClient::UpdateSuit ()
{
    GASSERT(m_pd3dDevice);

    EMCHARINDEX emIndex = CharClassToIndex(m_CharData.emClass);
    DxSkinCharData* pSkinChar = DxSkinCharDataContainer::GetInstance().FindData ( GLCONST_CHAR::szCharSkin[emIndex] );
    if ( !pSkinChar )    return E_FAIL;

    
    const GLCONST_CHARCLASS &sCONST = GLCONST_CHAR::cCONSTCLASS[emIndex];

    if ( sCONST.dwHEADNUM > m_CharData.wFace )
    {
        std::string strHEAD_CPS = sCONST.strHEAD_CPS[m_CharData.wFace];
    
        PDXCHARPART pCharPart = NULL;
        pCharPart = m_pSkinChar->GetPiece(PIECE_HEAD);        //    ÇöÁ¦ ÀåÂø ½ºÅ².

        if ( pCharPart && strcmp(strHEAD_CPS.c_str(),pCharPart->GetFileName()) )
        {
            m_pSkinChar->SetPiece ( strHEAD_CPS.c_str(), m_pd3dDevice, 0x0, 0, TRUE );
        }
    }

    if ( sCONST.dwHAIRNUM > m_CharData.wHair )
    {
        std::string strHAIR_CPS = sCONST.strHAIR_CPS[m_CharData.wHair];
    
        PDXCHARPART pCharPart = NULL;
        pCharPart = m_pSkinChar->GetPiece(PIECE_HAIR);        //    ÇöÁ¦ ÀåÂø ½ºÅ².

        if ( pCharPart && strcmp(strHAIR_CPS.c_str(),pCharPart->GetFileName()) )
        {
            m_pSkinChar->SetPiece ( strHAIR_CPS.c_str(), m_pd3dDevice, 0x0, 0, TRUE );
        }
    }

    m_pSkinChar->SetHairColor( m_CharData.wHairColor );

    for ( int i=0; i<SLOT_NSIZE_S_2; i++ )
    {
        // ÇöÀç ÀåÂøÁßÀÎ ¹«±â°¡ ¾Æ´Ï¸é ³Ñ¾î°£´Ù.
        if( !IsCurUseArm( EMSLOT(i) ) ) continue;

        SITEMCLIENT &ItemClient = m_CharData.m_PutOnItems[i];

        SNATIVEID nidITEM = ItemClient.nidDISGUISE;
        if ( nidITEM==SNATIVEID(false) )    nidITEM = ItemClient.sNativeID;

        if ( !m_bVehicle && i == SLOT_VEHICLE  ) nidITEM = SNATIVEID(false);
        else if ( i == SLOT_VEHICLE )
        {
            nidITEM = m_sVehicle.GetSkinID();
            if ( nidITEM == SNATIVEID(false) )
            {
                m_sVehicle.m_sVehicleID = ItemClient.sNativeID;
                nidITEM = ItemClient.sNativeID;
            }
        }

        if ( nidITEM == SNATIVEID(false) )
        {
            //    Note : ±âº» ½ºÅ²°ú Áö±Ý ÀåÂøµÈ ½ºÅ²ÀÌ Æ²¸± °æ¿ì.
            //    SLOT->PIECE.
            PDXSKINPIECE pSkinPiece = NULL;    //    ±âº» ½ºÅ².
            PDXCHARPART pCharPart = NULL;    //    ÇöÁ¦ ÀåÂø ½ºÅ².

            EMPIECECHAR emPiece = SLOT_2_PIECE(EMSLOT(i));
            if ( emPiece!=PIECE_SIZE )
            {
                pSkinPiece = pSkinChar->GetPiece(emPiece);    //    ±âº» ½ºÅ².
                pCharPart = m_pSkinChar->GetPiece(emPiece);    //    ÇöÁ¦ ÀåÂø ½ºÅ².
            }

            if ( pSkinPiece )
            {
                if ( pCharPart && strcmp(pSkinPiece->m_szFileName,pCharPart->GetFileName()) )
                    m_pSkinChar->SetPiece ( pSkinPiece->m_szFileName, m_pd3dDevice, 0x0, 0, TRUE );
            }
            else
            {
                if ( pCharPart )
                {
                    [COLOR=#FF0000]/////EXTRA FIX TO ERASE THE EFFECT WHEN YOU UNEQUIPED ITEM
                    if ( ( emPiece == PIECE_UPBODY || emPiece == PIECE_LOBODY || emPiece == PIECE_GLOVE || emPiece == PIECE_FOOT ) )
                    {
                        switch (emPiece)
                        {
                            case PIECE_UPBODY: m_pSkinChar->ResetPiece(PIECE_ELE01); break;
                            case PIECE_LOBODY: m_pSkinChar->ResetPiece(PIECE_ELE02); break;
                            case PIECE_GLOVE: m_pSkinChar->ResetPiece(PIECE_ELE03); break;
                            case PIECE_FOOT: m_pSkinChar->ResetPiece(PIECE_ELE04); break;
                        };
                    }
                    /////////////////////[/COLOR]
                    
                    m_pSkinChar->ResetPiece(emPiece);
                }
            }
        }
        else
        {
            SITEM* pItem = GLItemMan::GetInstance().GetItem ( nidITEM );
            if ( pItem )
            {
                m_pSkinChar->SetPiece ( pItem->GetWearingFile(emIndex), m_pd3dDevice, NULL, ItemClient.GETGRADE_EFFECT(), TRUE );
            }
            
            [COLOR=#FF0000]////////////THE EFFECT CODE SHOULD BE HERE
            EMPIECECHAR emPiece = SLOT_2_PIECE(EMSLOT(i));
            
            if ( ( emPiece == PIECE_UPBODY || emPiece == PIECE_LOBODY || emPiece == PIECE_GLOVE || emPiece == PIECE_FOOT ) )
            {
                switch (emPiece)
                {
                    case PIECE_UPBODY: m_pSkinChar->ResetPiece(PIECE_ELE01); break;
                    case PIECE_LOBODY: m_pSkinChar->ResetPiece(PIECE_ELE02); break;
                    case PIECE_GLOVE: m_pSkinChar->ResetPiece(PIECE_ELE03); break;
                    case PIECE_FOOT: m_pSkinChar->ResetPiece(PIECE_ELE04); break;
                };

                if ( ItemClient.GETGRADE_EFFECT() > 5 )
                {
                    CString strEle, strSex, strPiece;

                    if( emSex == GLCC_MAN ) strSex = "m";
                    else strSex = "w";
                    switch (emPiece)
                    {
                        case PIECE_UPBODY: strPiece = "body"; break;
                        case PIECE_LOBODY: strPiece = "leg"; break;
                        case PIECE_GLOVE: strPiece = "hand"; break;
                        case PIECE_FOOT: strPiece = "foot"; break;
                    };
                    strEle.Format("%s_bs_%s_enchent+%d.cps", strSex, strPiece, ItemClient.GETGRADE_EFFECT());
                    m_pSkinChar->SetPiece ( strEle, m_pd3dDevice, NULL, TRUE );
                }
            } 
            //////////////////////////////[/COLOR]
        }
    }

    if( m_dwTransfromSkill != SNATIVEID::ID_NULL )
    {
        PGLSKILL pSkill = GLSkillMan::GetInstance().GetData ( m_sSKILLFACT[m_dwTransfromSkill].sNATIVEID.wMainID, m_sSKILLFACT[m_dwTransfromSkill].sNATIVEID.wSubID );
        if( pSkill ) 
        {
            for( BYTE i = 0; i < SKILL::EMTRANSFORM_NSIZE; i++ )
            {
                if( m_CharData.wSex == 1 )
                {                
                    m_pSkinChar->SetPiece ( pSkill->m_sSPECIAL_SKILL.strTransform_Man[i].c_str(), m_pd3dDevice, 0X0, 0, TRUE );
                }else{
                    m_pSkinChar->SetPiece ( pSkill->m_sSPECIAL_SKILL.strTransform_Woman[i].c_str(), m_pd3dDevice, 0X0, 0, TRUE );
                }
            }
        }
    }


    //    Note : ½ºÅ³ ¹öÇÁ, »óÅÂÀÌ»ó È¿°ú »ý¼º.
    FACTEFF::ReNewEffect ( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, m_sSKILLFACT, m_sSTATEBLOWS, m_matTrans, m_vDir );

    if( GLCONST_CHAR::cCONSTCLASS[emIndex].strCLASS_EFFECT.size() != 0 )
    {
        DxEffcharDataMan::GetInstance().PutPassiveEffect ( m_pSkinChar, GLCONST_CHAR::cCONSTCLASS[emIndex].strCLASS_EFFECT.c_str(), &m_vDir );
    }

    return S_OK;
}

DxCharSham.cpp :
Code:
HRESULT DxCharSham::UpdateSuit ()
{
    GASSERT(m_pd3dDevice);

    if ( !m_pSkinChar )                                        
        return S_FALSE;

    EMCHARINDEX emIndex = CharClassToIndex(m_emClass);
    DxSkinCharData* pSkinChar = DxSkinCharDataContainer::GetInstance().FindData ( GLCONST_CHAR::szCharSkin[emIndex] );
    if ( !pSkinChar )    return E_FAIL;

    const GLCONST_CHARCLASS &sCONST = GLCONST_CHAR::cCONSTCLASS[emIndex];

    if ( sCONST.dwHEADNUM > m_wFace )
    {
        std::string strHEAD_CPS = sCONST.strHEAD_CPS[m_wFace];
    
        PDXCHARPART pCharPart = NULL;
        pCharPart = m_pSkinChar->GetPiece(PIECE_HEAD);        //    ÇöÁ¦ ÀåÂø ½ºÅ².

        if ( pCharPart && strcmp(strHEAD_CPS.c_str(),pCharPart->GetFileName()) )
        {
            m_pSkinChar->SetPiece( strHEAD_CPS.c_str(), m_pd3dDevice );
        }
    }

    if ( sCONST.dwHAIRNUM > m_wHair )
    {
        std::string strHAIR_CPS = sCONST.strHAIR_CPS[m_wHair];
    
        PDXCHARPART pCharPart = NULL;
        pCharPart = m_pSkinChar->GetPiece(PIECE_HAIR);        //    ÇöÁ¦ ÀåÂø ½ºÅ².

        if ( pCharPart && strcmp(strHAIR_CPS.c_str(),pCharPart->GetFileName()) )
        {
            m_pSkinChar->SetPiece( strHAIR_CPS.c_str(), m_pd3dDevice );
        }
    }

    // Çì¾îÄ÷¯ ¼¼ÆÃ
    m_pSkinChar->SetHairColor( m_wHairColor );

    for ( int i=0; i<SLOT_NSIZE_S_2; i++ )
    {
        // º¸Á¶¹«±â´Â ¼ÂÆÃÇÏÁö ¾Ê´Â´Ù.
        if( EMSLOT(i) == SLOT_RHAND_S || EMSLOT(i) == SLOT_LHAND_S ) continue;

        SITEMCUSTOM &ItemCustom = m_PutOnItems[i];

        SNATIVEID nidITEM = ItemCustom.nidDISGUISE;
        if ( nidITEM==SNATIVEID(false) )    nidITEM = ItemCustom.sNativeID;

        if ( !m_bVehicle && i == SLOT_VEHICLE  ) nidITEM = SNATIVEID(false);

        if ( nidITEM == SNATIVEID(false) )
        {
            //    Note : ±âº» ½ºÅ²°ú Áö±Ý ÀåÂøµÈ ½ºÅ²ÀÌ Æ²¸± °æ¿ì.
            //    SLOT->PIECE.
            PDXSKINPIECE pSkinPiece = NULL;    //    ±âº» ½ºÅ².
            PDXCHARPART pCharPart = NULL;    //    ÇöÁ¦ ÀåÂø ½ºÅ².

            EMPIECECHAR emPiece = SLOT_2_PIECE(EMSLOT(i));
            if ( emPiece!=PIECE_SIZE )
            {
                pSkinPiece = pSkinChar->GetPiece(emPiece);    //    ±âº» ½ºÅ².
                pCharPart = m_pSkinChar->GetPiece(emPiece);    //    ÇöÁ¦ ÀåÂø ½ºÅ².
            }

            if ( pSkinPiece )
            {
                if ( pCharPart && strcmp(pSkinPiece->m_szFileName,pCharPart->GetFileName()) )
                    m_pSkinChar->SetPiece( pSkinPiece->m_szFileName, m_pd3dDevice );
            }
            else
            {
                if ( pCharPart )
                {
                    [COLOR=#FF0000]/////EXTRA FIX TO ERASE THE EFFECT WHEN YOU UNEQUIPED ITEM
                    if ( ( emPiece == PIECE_UPBODY || emPiece == PIECE_LOBODY || emPiece == PIECE_GLOVE || emPiece == PIECE_FOOT ) )
                    {
                        switch (emPiece)
                        {
                            case PIECE_UPBODY: m_pSkinChar->ResetPiece(PIECE_ELE01); break;
                            case PIECE_LOBODY: m_pSkinChar->ResetPiece(PIECE_ELE02); break;
                            case PIECE_GLOVE: m_pSkinChar->ResetPiece(PIECE_ELE03); break;
                            case PIECE_FOOT: m_pSkinChar->ResetPiece(PIECE_ELE04); break;
                        };
                    }
                    /////////////////////[/COLOR]
                    
                    m_pSkinChar->ResetPiece(emPiece);
                }
            }
        }
        else
        {
            SITEM* pItem = GLItemMan::GetInstance().GetItem ( nidITEM );
            if ( pItem )
            {
                m_pSkinChar->SetPiece( pItem->GetWearingFile(emIndex), m_pd3dDevice, NULL, ItemCustom.GETGRADE_EFFECT() );
            }
            
            [COLOR=#FF0000]////////////THE EFFECT CODE SHOULD BE HERE
            EMPIECECHAR emPiece = SLOT_2_PIECE(EMSLOT(i));
            
            if ( ( emPiece == PIECE_UPBODY || emPiece == PIECE_LOBODY || emPiece == PIECE_GLOVE || emPiece == PIECE_FOOT ) )
            {
                switch (emPiece)
                {
                    case PIECE_UPBODY: m_pSkinChar->ResetPiece(PIECE_ELE01); break;
                    case PIECE_LOBODY: m_pSkinChar->ResetPiece(PIECE_ELE02); break;
                    case PIECE_GLOVE: m_pSkinChar->ResetPiece(PIECE_ELE03); break;
                    case PIECE_FOOT: m_pSkinChar->ResetPiece(PIECE_ELE04); break;
                };

                if ( ItemCustom.GETGRADE_EFFECT() > 5 )
                {
                    CString strEle, strSex, strPiece;

                    if( emSex == GLCC_MAN ) strSex = "m";
                    else strSex = "w";
                    switch (emPiece)
                    {
                        case PIECE_UPBODY: strPiece = "body"; break;
                        case PIECE_LOBODY: strPiece = "leg"; break;
                        case PIECE_GLOVE: strPiece = "hand"; break;
                        case PIECE_FOOT: strPiece = "foot"; break;
                    };
                    strEle.Format("%s_bs_%s_enchent+%d.cps", strSex, strPiece, ItemCustom.GETGRADE_EFFECT());
                    m_pSkinChar->SetPiece ( strEle, m_pd3dDevice, NULL, TRUE );
                }
            } 
            //////////////////////////////[/COLOR]
        }
    }

    return S_OK;
}

NOTE : I USE OLD SOURCE CODE THAT JOLIN SHARED SO IT MAYBE LOOKS LITTLE DIFFERENT WITH YOUR CURRENT CODE. I'M NOT RESPONSIBLE FOR ANY BUG OR EXTRA FILE THAT YOU NEED.
 
Skilled Illusionist
Joined
Jul 13, 2013
Messages
316
Reaction score
53
If you guys used sir geger code then u must change some things there to make it
work ive tried copy paste you will get many errors , so you will have to change some codes
as for sir tobets post code its similar to mine its working for juvers


// GForceFX 22-06-2013 Official electric effectif ( ( emPiece == PIECE_UPBODY || emPiece == PIECE_LOBODY || emPiece == PIECE_GLOVE || emPiece == PIECE_FOOT ) )
{
switch (emPiece)
{
case PIECE_UPBODY: m_pSkinChar->ResetPiece(PIECE_ELE01); break;
case PIECE_LOBODY: m_pSkinChar->ResetPiece(PIECE_ELE02); break;
case PIECE_GLOVE: m_pSkinChar->ResetPiece(PIECE_ELE03); break;
case PIECE_FOOT: m_pSkinChar->ResetPiece(PIECE_ELE04); break;
}


if ( ItemCustom.GETGRADE_EFFECT() > 5 )
{
CString strEle, strSex, strPiece;


if( emSex == GLCC_MAN ) strSex = "m";
else strSex = "w";
switch (emPiece)
{
case PIECE_UPBODY: strPiece = "body"; break;
case PIECE_LOBODY: strPiece = "leg"; break;
case PIECE_GLOVE: strPiece = "hand"; break;
case PIECE_FOOT: strPiece = "foot"; break;
}
strEle.Format("%s_bs_%s_enchent+%d.cps", strSex, strPiece, ItemCustom.GETGRADE_EFFECT());
m_pSkinChar->SetPiece ( strEle, m_pd3dDevice, NULL, TRUE );
}
}

here my ss from first page , like i said it will work on juver and its almost like mine

 
Joined
Mar 20, 2012
Messages
760
Reaction score
368
Add default RCC password into param.ini


1. Unzipper.cpp
Code:
#include "stdafx.h"
#include "./Unzipper.h"
#include "../../=ZLib/iowin32.h"
[COLOR="#FF0000"]#include "RANPARAM.h" <-- add this [/COLOR]

find :
Code:
		if( IsEncrypted( info.dwFlags ) ) // MEMO : 鞠龋拳 等 颇老捞搁...
		{
			[COLOR="#FF0000"]if( unzOpenCurrentFilePassword(m_uzFile, "龋免窍绰 何盒俊辑 皋葛府 秦力") != UNZ_OK )[/COLOR]
				return UINT_MAX;
		}
		else
		{
			if( unzOpenCurrentFile(m_uzFile) != UNZ_OK )
				return UINT_MAX;
		}

change to :
Code:
		if( IsEncrypted( info.dwFlags ) ) // MEMO : 鞠龋拳 等 颇老捞搁...
		{
			[COLOR="#FF0000"]if( unzOpenCurrentFilePassword(m_uzFile, RANPARAM::RCCPassword) != UNZ_OK )[/COLOR]
				return UINT_MAX;
		}
		else
		{
			if( unzOpenCurrentFile(m_uzFile) != UNZ_OK )
				return UINT_MAX;
		}


2.RANPARAM.cpp
Code:
TCHAR				HelpAddress[STRING_NUM_128] = _T("\\data\\help\\help.htm");
// 吝惫 : http://2046.5u56.com/gameshop/gameshop.html
TCHAR				ItemShopAddress[STRING_NUM_128] = _T("about:blank");
TCHAR				RPFDataPath[STRING_NUM_128] = _T("\\package\\data.rpf");

[COLOR="#FF0000"]TCHAR				RCCPassword[STRING_NUM_128] = _T("AsenDURE");  <-- add this [/COLOR]


Code:
cFILE.getflag_sz( "ETC OPTION", "ItemShopAddress", 0, 1, ItemShopAddress, STRING_NUM_128 );
cFILE.getflag_sz( "ETC OPTION", "RPFDataPath", 0, 1, RPFDataPath, STRING_NUM_128 );

[COLOR="#FF0000"]cFILE.getflag_sz( "ETC OPTION", "RCCPassword", 0, 1, RCCPassword, STRING_NUM_128 );  <-- add this [/COLOR]

3. RANPARAM.h
Code:
extern TCHAR			ItemShopAddress[STRING_NUM_128];
extern TCHAR			RPFDataPath[STRING_NUM_128];

[COLOR="#FF0000"]extern TCHAR			RCCPassword[STRING_NUM_128];   <-- add this [/COLOR]

4. param.ini
Code:
ItemShopHPAddress = http://ran.myrosso.com/en/shop/item.asp
EventPageAddress = http://ran.myrosso.com/en/index.asp
RPFDataPath = /package/data.rpf
[COLOR="#FF0000"]RCCPassword = your-default-rcc-password   <-- add this [/COLOR]
 
Last edited:
Joined
Jun 25, 2013
Messages
597
Reaction score
115
Add default RCC password into param.ini


1. Unzipper.cpp
Code:
#include "stdafx.h"
#include "./Unzipper.h"
#include "../../=ZLib/iowin32.h"
[COLOR=#FF0000]#include "RANPARAM.h" <-- add this [/COLOR]

find :
Code:
        if( IsEncrypted( info.dwFlags ) ) // MEMO : 鞠龋拳 等 颇老捞搁...
        {
            [COLOR=#FF0000]if( unzOpenCurrentFilePassword(m_uzFile, "龋免窍绰 何盒俊辑 皋葛府 秦力") != UNZ_OK )[/COLOR]
                return UINT_MAX;
        }
        else
        {
            if( unzOpenCurrentFile(m_uzFile) != UNZ_OK )
                return UINT_MAX;
        }

change to :
Code:
        if( IsEncrypted( info.dwFlags ) ) // MEMO : 鞠龋拳 等 颇老捞搁...
        {
            [COLOR=#FF0000]if( unzOpenCurrentFilePassword(m_uzFile, RANPARAM::RCCPassword) != UNZ_OK )[/COLOR]
                return UINT_MAX;
        }
        else
        {
            if( unzOpenCurrentFile(m_uzFile) != UNZ_OK )
                return UINT_MAX;
        }


2.RANPARAM.cpp
Code:
TCHAR                HelpAddress[STRING_NUM_128] = _T("\\data\\help\\help.htm");
// 吝惫 : http://2046.5u56.com/gameshop/gameshop.html
TCHAR                ItemShopAddress[STRING_NUM_128] = _T("about:blank");
TCHAR                RPFDataPath[STRING_NUM_128] = _T("\\package\\data.rpf");

[COLOR=#FF0000]TCHAR                RCCPassword[STRING_NUM_128] = _T("AsenDURE");  <-- add this [/COLOR]


Code:
cFILE.getflag_sz( "ETC OPTION", "ItemShopAddress", 0, 1, ItemShopAddress, STRING_NUM_128 );
cFILE.getflag_sz( "ETC OPTION", "RPFDataPath", 0, 1, RPFDataPath, STRING_NUM_128 );

[COLOR=#FF0000]cFILE.getflag_sz( "ETC OPTION", "RCCPassword", 0, 1, RCCPassword, STRING_NUM_128 );  <-- add this [/COLOR]

3. RANPARAM.h
Code:
extern TCHAR            ItemShopAddress[STRING_NUM_128];
extern TCHAR            RPFDataPath[STRING_NUM_128];

[COLOR=#FF0000]extern TCHAR            RCCPassword[STRING_NUM_128];   <-- add this [/COLOR]

4. param.ini
Code:
ItemShopHPAddress = http://ran.myrosso.com/en/shop/item.asp
EventPageAddress = http://ran.myrosso.com/en/index.asp
RPFDataPath = /package/data.rpf
[COLOR=#FF0000]RCCPassword = your-default-rcc-password   <-- add this [/COLOR]
i wish someone make a clear share like AsenDURE do...
ill try this one later..hehe

@AsenDure how about server selection background? can you share it with us?
 
Last edited:
Skilled Illusionist
Joined
Jul 13, 2013
Messages
316
Reaction score
53
Add default RCC password into param.ini


1. Unzipper.cpp
Code:
#include "stdafx.h"
#include "./Unzipper.h"
#include "../../=ZLib/iowin32.h"
[COLOR=#FF0000]#include "RANPARAM.h" <-- add this [/COLOR]

find :
Code:
        if( IsEncrypted( info.dwFlags ) ) // MEMO : 鞠龋拳 等 颇老捞搁...
        {
            [COLOR=#FF0000]if( unzOpenCurrentFilePassword(m_uzFile, "龋免窍绰 何盒俊辑 皋葛府 秦力") != UNZ_OK )[/COLOR]
                return UINT_MAX;
        }
        else
        {
            if( unzOpenCurrentFile(m_uzFile) != UNZ_OK )
                return UINT_MAX;
        }

change to :
Code:
        if( IsEncrypted( info.dwFlags ) ) // MEMO : 鞠龋拳 等 颇老捞搁...
        {
            [COLOR=#FF0000]if( unzOpenCurrentFilePassword(m_uzFile, RANPARAM::RCCPassword) != UNZ_OK )[/COLOR]
                return UINT_MAX;
        }
        else
        {
            if( unzOpenCurrentFile(m_uzFile) != UNZ_OK )
                return UINT_MAX;
        }


2.RANPARAM.cpp
Code:
TCHAR                HelpAddress[STRING_NUM_128] = _T("\\data\\help\\help.htm");
// 吝惫 : http://2046.5u56.com/gameshop/gameshop.html
TCHAR                ItemShopAddress[STRING_NUM_128] = _T("about:blank");
TCHAR                RPFDataPath[STRING_NUM_128] = _T("\\package\\data.rpf");

[COLOR=#FF0000]TCHAR                RCCPassword[STRING_NUM_128] = _T("AsenDURE");  <-- add this [/COLOR]


Code:
cFILE.getflag_sz( "ETC OPTION", "ItemShopAddress", 0, 1, ItemShopAddress, STRING_NUM_128 );
cFILE.getflag_sz( "ETC OPTION", "RPFDataPath", 0, 1, RPFDataPath, STRING_NUM_128 );

[COLOR=#FF0000]cFILE.getflag_sz( "ETC OPTION", "RCCPassword", 0, 1, RCCPassword, STRING_NUM_128 );  <-- add this [/COLOR]

3. RANPARAM.h
Code:
extern TCHAR            ItemShopAddress[STRING_NUM_128];
extern TCHAR            RPFDataPath[STRING_NUM_128];

[COLOR=#FF0000]extern TCHAR            RCCPassword[STRING_NUM_128];   <-- add this [/COLOR]

4. param.ini
Code:
ItemShopHPAddress = http://ran.myrosso.com/en/shop/item.asp
EventPageAddress = http://ran.myrosso.com/en/index.asp
RPFDataPath = /package/data.rpf
[COLOR=#FF0000]RCCPassword = your-default-rcc-password   <-- add this [/COLOR]


added to first page =)
these function is
first seen at raceran and omega ran .
 
Joined
Mar 20, 2012
Messages
760
Reaction score
368
for those who dont know to change cfg file name and cfg folder name :


1. Change server files cfg file name

s_CServer.cpp

Code:
[COLOR="#FF0000"]// Create CFG file loader and open cfg file (Session Server)[/COLOR]
int CServer::SessionStartCfg()
{	
	int	nRetCode;

	nRetCode = CCfg::GetInstance()->Load(_T("[COLOR="#FF0000"]svr_session_0.ini[/COLOR]"));
	if (nRetCode != 0)
	{
		CConsoleMessage::GetInstance()->Write(_T("[COLOR="#FF0000"]ERROR:Session Server Configuration ini files not found. Please Check CFG Folder[/COLOR]"));
		m_bIsRunning = false;
		return NET_ERROR;
	}

Code:
[COLOR="#FF0000"]// Create CFG file loader and open cfg file (Login Server)[/COLOR]
int CServer::LoginStartCfg()
{	
	int	nRetCode;

	nRetCode = CCfg::GetInstance()->Load(_T("[COLOR="#FF0000"]svr_login_0.ini[/COLOR]"));
	if (nRetCode != 0)
	{
		CConsoleMessage::GetInstance()->Write(_T("[COLOR="#FF0000"]ERROR:Login Server Configuration ini files not found. Please Check CFG Folder[/COLOR]"));
		m_bIsRunning = false;
		return NET_ERROR;
	}

Code:
[COLOR="#FF0000"]// Create CFG file loader and open cfg file (Field Server)[/COLOR]
int CServer::FieldStartCfg()
{	
	int	nRetCode;

	nRetCode = CCfg::GetInstance()->Load(_T("[COLOR="#FF0000"]svr_field_0.ini[/COLOR]"));
	if (nRetCode != 0)
	{
		CConsoleMessage::GetInstance()->Write(_T("[COLOR="#FF0000"]ERROR:Field Server Configuration ini files not found. Please Check CFG Folder[/COLOR]"));
		m_bIsRunning = false;
		return NET_ERROR;
	}

Code:
[COLOR="#FF0000"]// Create CFG file loader and open cfg file (Agent Server)[/COLOR]
int CServer::AgentStartCfg()
{	
	int	nRetCode;

	nRetCode = CCfg::GetInstance()->Load(_T("[COLOR="#FF0000"]svr_agent_0.ini[/COLOR]"));
	if (nRetCode != 0)
	{
		CConsoleMessage::GetInstance()->Write(_T("[COLOR="#FF0000"]ERROR:Agent Server Configuration ini files not found. Please Check CFG Folder[/COLOR]"));
		m_bIsRunning = false;
		return NET_ERROR;
	}



2. to change 'cfg' folder name

s_CCfg.cpp

Code:
CCfg::~CCfg()
{
}

int CCfg::Load(const TCHAR* filename)
{
	// Data type problem
	// program directory + cfg + filename	
	SERVER_UTIL::CSystemInfo SysInfo;
	CString strAppPath;	

	strAppPath = SysInfo.GetAppPath();
	strAppPath += _T("\\[COLOR="#FF0000"]cfg[/COLOR]\\");
	strAppPath += filename;
	
	FILE *oFile = NULL;
	TCHAR line[300];
 
Last edited:
Skilled Illusionist
Joined
Jul 13, 2013
Messages
316
Reaction score
53
for those who dont know to change cfg file name and cfg folder name :


1. Change server files cfg file name

s_CServer.cpp

Code:
[COLOR=#FF0000]// Create CFG file loader and open cfg file (Session Server)[/COLOR]
int CServer::SessionStartCfg()
{    
    int    nRetCode;

    nRetCode = CCfg::GetInstance()->Load(_T("[COLOR=#FF0000]svr_session_0.ini[/COLOR]"));
    if (nRetCode != 0)
    {
        CConsoleMessage::GetInstance()->Write(_T("[COLOR=#FF0000]ERROR:Session Server Configuration ini files not found. Please Check CFG Folder[/COLOR]"));
        m_bIsRunning = false;
        return NET_ERROR;
    }

Code:
[COLOR=#FF0000]// Create CFG file loader and open cfg file (Login Server)[/COLOR]
int CServer::LoginStartCfg()
{    
    int    nRetCode;

    nRetCode = CCfg::GetInstance()->Load(_T("[COLOR=#FF0000]svr_login_0.ini[/COLOR]"));
    if (nRetCode != 0)
    {
        CConsoleMessage::GetInstance()->Write(_T("[COLOR=#FF0000]ERROR:Login Server Configuration ini files not found. Please Check CFG Folder[/COLOR]"));
        m_bIsRunning = false;
        return NET_ERROR;
    }

Code:
[COLOR=#FF0000]// Create CFG file loader and open cfg file (Field Server)[/COLOR]
int CServer::FieldStartCfg()
{    
    int    nRetCode;

    nRetCode = CCfg::GetInstance()->Load(_T("[COLOR=#FF0000]svr_field_0.ini[/COLOR]"));
    if (nRetCode != 0)
    {
        CConsoleMessage::GetInstance()->Write(_T("[COLOR=#FF0000]ERROR:Field Server Configuration ini files not found. Please Check CFG Folder[/COLOR]"));
        m_bIsRunning = false;
        return NET_ERROR;
    }

Code:
[COLOR=#FF0000]// Create CFG file loader and open cfg file (Agent Server)[/COLOR]
int CServer::AgentStartCfg()
{    
    int    nRetCode;

    nRetCode = CCfg::GetInstance()->Load(_T("[COLOR=#FF0000]svr_agent_0.ini[/COLOR]"));
    if (nRetCode != 0)
    {
        CConsoleMessage::GetInstance()->Write(_T("[COLOR=#FF0000]ERROR:Agent Server Configuration ini files not found. Please Check CFG Folder[/COLOR]"));
        m_bIsRunning = false;
        return NET_ERROR;
    }



2. to change 'cfg' folder name

s_CCfg.cpp

Code:
CCfg::~CCfg()
{
}

int CCfg::Load(const TCHAR* filename)
{
    // Data type problem
    // program directory + cfg + filename    
    SERVER_UTIL::CSystemInfo SysInfo;
    CString strAppPath;    

    strAppPath = SysInfo.GetAppPath();
    strAppPath += _T("\\[COLOR=#FF0000]cfg[/COLOR]\\");
    strAppPath += filename;
    
    FILE *oFile = NULL;
    TCHAR line[300];


added to first page
thanks for the contributions :D
unlike the others waiting for some codes here
they don't want to share knowledge .
 
Joined
Mar 20, 2012
Messages
760
Reaction score
368
*Official chat= added/Edit manually if you have source and edit also in .xml

which one need to edit in .xml?

gameword.xml

Code:
<WORD Ver="1" Id="CHAT_OPTION">
<VALUE Lang="me" Index="0">General</VALUE>
<VALUE Lang="me" Index="1">Whisper</VALUE>
<VALUE Lang="me" Index="2">Party</VALUE>
<VALUE Lang="me" Index="3">Club</VALUE>
<VALUE Lang="me" Index="4">Ally</VALUE>
<VALUE Lang="me" Index="5">Region</VALUE>
<VALUE Lang="me" Index="6">Party Search</VALUE>
<VALUE Lang="me" Index="7">Shout</VALUE>
<VALUE Lang="me" Index="8">System</VALUE>
 
Experienced Elementalist
Joined
Feb 15, 2008
Messages
221
Reaction score
28
can someone share official abl code... :)
thanks
 
Last edited:
Newbie Spellweaver
Joined
Apr 29, 2013
Messages
46
Reaction score
1
is someon know these features in codes. how to change:

1. the client and server communcation encrypt. how to change it, and where is the encrpt keys?
2.i want know how svrmanager can directly connect and manage session svr, does it have key in communication?
3.how to change the client files encrypt .ex: rcc , and how to change the editor encrpt:ex itemeditor Editor..


thanks, very
 
Newbie Spellweaver
Joined
Apr 29, 2013
Messages
46
Reaction score
1
is someon know these features in codes. how to change:

1. the client and server communcation encrypt. how to change it, and where is the encrpt keys?
2.i want know how svrmanager can directly connect and manage session svr, does it have key in communication?
3.how to change the client files encrypt .ex: rcc , and how to change the editor encrpt:ex itemeditor Editor..


thanks, very
 
Back
Top