Files
Sun1602/Client/GameClient/Player.cpp
T
git 9cb257e7ae Add GameClients drops and keep current 1602 source work.
CN1602 is the local client. KR is the official tree with unpacked Data, System, and Sound. Packed .wpk files stay off git.
2026-08-30 23:24:31 +03:00

8960 lines
227 KiB
C++

//------------------------------------------------------------------------------
// Player.cpp
// (C) 2005 Webzen Sunstudio
//------------------------------------------------------------------------------
#include "SunClientPrecompiledHeader.h"
#include "varpacket.h"
#include "ItemInfoParser.h"
#include "Player.h"
#include "Map.h"
#include "EquipmentContainer.h"
#include "ItemManager.h"
#include "AppearanceManager.h"
#include "ObjectManager.h"
#include "HeroActionInput.h"
#include "soundeffect.h"
#include "CommonCharacterFormula.h"
#include <SCItemSlot.h>
#include "InterfaceManager.h"
#include "StyleInfoParser.h"
#include <PlayerAttributes.h>
#include "ItemAttrCalculator.h"
#include "SkillAttrCalculator.h"
#include "SkillInfoParser.h"
#include "ChatMsg.h"
#include "ChatDialog.h"
#include "Hero.h"
#include "HeroEquipmentContainer.h"
#include "CharSoundInfoParser.h"
#include "WeaponSoundInfoParser.h"
#include "AppearanceResourceCode.h"
#include "ProjectileInfoParser.h"
#include "HeroHeightInfoParser.h"
#include "SetItemOptionInfoParser.h"
#include "globalfunc.h"
#include "GameFramework.h"
#include "BattleScene.h"
#include <Timer.h>
#include "ExpValueInfoParser.h"
#include "CharacterScene.h"
#include "uiPartyMan/uiPartyMan.h"
#include "RewardInfoList.h"
#include "SunEventInfoParser.h"
#include "GuildMarkInfoParser.h"
#include "uiGuildMan/uiGuildMan.h"
#include "uiDominationTowerMan/uiDominationTowerMan.h"
#include "EtherWeaponEffectInfo.h"
#include "Pet.h"
#include "PetInfoParser.h"
#include "Monster.h"
#include "GuildRightInfoParser.h"
#include "Clone.h"
#include "CloneManager.h"
#include "Rider.h"
#include "RiderContainer.h"
#include "DelayLoadManager.h"
#include "Camera.h"
#include "uiGuideSystemMan/uiGuideSystemMan.h"
#include "TotalGuideParser.h"
#ifdef _NA_003027_20111013_HONOR_SYSTEM
#include "TitleListParser.h"
#include "HonorSystem/HonorSystem.h"
#endif //_NA_003027_20111013_HONOR_SYSTEM
#ifdef _NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER
#include "GuildSystem/GuildSystemFunction.h"
#endif //_NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER
#ifdef _NA_006826_20130722_DOMINATION_RENEWAL
#include "GuildSystem/GuildSystemData.h"
#include "DominationInfoParser.h"
#endif //_NA_006826_20130722_DOMINATION_RENEWAL
float fTest = 0.f;
#include "GameConst_Color.h"
#include "LoadScene.h"
#include "ResourceManager.h"
#include "RidingInfoParser.h"
#include "State/StateKeyboardJump.h"
#include "NumericValues.h"
#ifdef _NA_003033_20110831_DICECAST_ITEM_ROUTING
#include "DiceCastManager.h"
#endif //_NA_003033_20110831_DICECAST_ITEM_ROUTING
#include "HeroAttributes.h"
#include "ProjectileManagerEx.h"
#ifdef _NA_COSTUMEITEM_IDLE_ANIMATION
#include "CostumeItemInfoParser.h"
#endif //_NA_COSTUMEITEM_IDLE_ANIMATION
#ifdef _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
#include "ChaosSystem/ChaosSystemData.h"
#endif //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
#include "CollectionParser.h"
#ifdef _NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION
#include "SpaZoneInfoParser.h"
#endif //_NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
#include "BattleGroundInfoParser.h"
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
using namespace util;
extern DWORD g_CurTime;
//------------------------------------------------------------------------------
/**
*/
Player::Player( void ):
m_EtherIndex(0),
receive_equip_info_(false),
m_pRider(NULL),
is_riding_jump_(false),
m_bRiding(FALSE),
m_pRiderContainer(NULL),
m_bRiderJumpFlag(FALSE)
{
m_eAttackSequence = eATTACK_SEQUENCE_THIRD;
SetObjectType(PLAYER_OBJECT);
m_dwValkyrieShotSerial = 0;
m_iCurTile=m_iOldTile=-1;
m_dwCurTileAtt=m_dwOldTileAtt=0;
m_bValkyrieReload = FALSE;
m_byGMGrade = 0; // GM ???
m_bInvisible = false; // ????
//m_bHero=FALSE;
m_iValkyrieShotAnimVariation = 0;
m_bHideHelmet = FALSE;
#ifdef _NA_000000_20120420_EQUIPMENTS_VISIBLE_WING
m_bHideWing = FALSE;
#endif//_NA_000000_20120420_EQUIPMENTS_VISIBLE_WING
m_bInvincible = FALSE; // ????
m_bCasting = FALSE;
m_iInvicibleTime =0;
m_bAttackBeginPlayer=FALSE;
m_dwKeyboardMoveTime=0;
m_wAttSpeedRatio = 100;
m_wMoveSpeedRatio = 100;
m_bHPInfo = FALSE;
#ifdef _NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO
m_bSDInfo = FALSE;
#endif //_NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO
m_bExistGuild = 0;
ZeroMemory(&m_GuildRenderInfo, sizeof(m_GuildRenderInfo));
#ifdef _NA_008016_20150203_SUN_RANKING_SYSTEM_GRADE
is_client_player_ranking_grade_ = FALSE;
ZeroMemory(&client_player_ranking_grade_info_, sizeof(client_player_ranking_grade_info_));
client_player_ranking_grade_info_.ranking_type = eSUN_RANKING_TYPE_END;
client_player_ranking_grade_info_.grade = eSUN_RANKING_GRADE_NONE;
#endif // _NA_008016_20150203_SUN_RANKING_SYSTEM_GRADE
m_JumpData.m_JumpFlag.Reset();
memset(m_szCharState , 0 , sizeof(m_szCharState) );
memset(m_tszDelDate , 0, sizeof(m_tszDelDate) );
m_DelChk = 0;
for (int col = 0; col < 2; ++col)
{
for (int row = 0; row < 3; ++row)
{
m_hEtherWeaponEffect[col][row] = INVALID_HANDLE_VALUE;
}
}
//m_hSummonIntensifyEffect = INVALID_HANDLE_VALUE;
m_dwCollectObjKey = 0;
m_wiPreAniID = INVALID_WZID;
m_btIdleAni = 0;
SetbtCriAttkAni(0);
is_spread_wings_ = false;
m_hCollectStartEffect = INVALID_HANDLE_VALUE;
m_hDominationStampEffect = INVALID_HANDLE_VALUE;
m_PlayerData.Initialize();
#ifdef _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
battle_ground_hide_mode_ = BattleGroundHideMode_None;
#endif //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
#ifdef _NA_000000_20130206_BROADCAST_ITEM_SCORE
m_ItemScore = 0;
#endif // _NA_000000_20130206_BROADCAST_ITEM_SCORE
}
//------------------------------------------------------------------------------
/**
*/
Player::~Player( void )
{
m_PlayerData.Release();
RemoveDominationStateEffect();
DestroyCharacterVariation();
#ifdef _NA_008016_20150203_SUN_RANKING_SYSTEM_GRADE
RemovePlayerRankingEffect();
#endif // _NA_008016_20150203_SUN_RANKING_SYSTEM_GRADE
}
//------------------------------------------------------------------------------
/**
*/
WzVector Player::GetHeadBonePos()
{
return GetSpecialBonePos(StrToWzID("HEAD"));
}
//------------------------------------------------------------------------------
/**
*/
void Player::SetKeyboardMoveTime(DWORD dwTime)
{
m_dwKeyboardMoveTime=dwTime;
}
//------------------------------------------------------------------------------
/**
*/
void Player::AddKeyboardMoveTime(DWORD dwDelta)
{
m_dwKeyboardMoveTime+=dwDelta;
}
//------------------------------------------------------------------------------
/**
*/
DWORD Player::GetKeyboardMoveTime()
{
return m_dwKeyboardMoveTime;
}
//------------------------------------------------------------------------------
/**
*/
void Player::TransForm()
{
if( GetTransformData().GetTransFormProcessType() == TRANSFORM_PROCESS_TRANSFORM )
{
//RestoreFullsetResource();
APPEARANCEINFO appearInfo;
ZeroMemory(&appearInfo,sizeof(appearInfo));
appearInfo.ObjectType = (APPEARANCEINFO::eAPPEARKIND)GetTransformData().GetAppearanceKind();
appearInfo.resourceCode = GetTransformData().GetTransFormResourceCode();
InitRender(1,0,&appearInfo,0,FALSE);
if(GetTransformData().GetTransFormType()==eTRANSFORM_TYPE_DRAGON1)
this->SetCurrentAttackStyle(eSTYLE_DRAGON_TRANSFORM1);
else if(GetTransformData().GetTransFormType()==eTRANSFORM_TYPE_DRAGON2)
this->SetCurrentAttackStyle(eSTYLE_DRAGON_TRANSFORM2);
if( GetCharInfo()->GetChangeOfClass() > 10 )
{
GetCharInfo()->SetChangeOfClass( (eCHAREX_TYPE) (GetTransformData().GetTransFormType() + 10));
}
#ifdef _NA_008536_20151023_ELITE4TH_ADD
if (this->GetClass() == eCHAR_DRAGON)
{
RefreshFullsetItemInfo( this );
}
#endif // _NA_008536_20151023_ELITE4TH_ADD
}
}
//------------------------------------------------------------------------------
/**
*/
void Player::UnTransForm()
{
if(GetTransformData().GetTransFormProcessType()==TRANSFORM_PROCESS_UNTRANSFORM)
{
APPEARANCEINFO info;
ZeroMemory(&info,sizeof(info));
info.Job = GetClass();
info.ObjectType = (APPEARANCEINFO::eAPPEARKIND)GetTransformData().GetAppearanceKind();
InitRender(BP_COUNT,BP_BONE,&info, AppearanceManager::kAppearanceAttachIndex_Count, FALSE);
RefreshAppearRender();
SetTransSkillCode(0);
GetTransformData().SetTransFormType(eTRANSFORM_TYPE_NONE);
CreateEtherWeaponEffect(false,true);
if( GetCharInfo()->GetChangeOfClass() > 10 )
{
GetCharInfo()->SetChangeOfClass( eCHAREX_TYPE( GetClass() + 10));
}
}
}
void Player::TransformGenderType()
{
SetAnimation("NULL");
APPEARANCEINFO appearInfo;
ZeroMemory(&appearInfo,sizeof(appearInfo));
appearInfo.ObjectType = APPEARANCEINFO::PLAYER;
appearInfo.Job = GetClass();
InitRender(BP_COUNT,BP_BONE, &appearInfo, AppearanceManager::kAppearanceAttachIndex_Count, TRUE);
RefreshAppearRender();
CreateEtherWeaponEffect(false,true);
ProcessNextAction();
}
void Player::SetPolymorph( BOOL Active )
{
if( m_IsPolymorphApperance == Active )
return;
m_IsPolymorphApperance = Active;
if( m_IsPolymorphApperance == TRUE )
{
if( IsMyHero() == TRUE )
{
g_HeroInput.SetAutoAttack(FALSE);
g_HeroInput.SetFollowState(FALSE);
}
//OnParalyzed();
//SetVisiblePos( GetPosition() );
APPEARANCEINFO appearInfo;
ZeroMemory(&appearInfo,sizeof(appearInfo));
appearInfo.ObjectType = APPEARANCEINFO::POLOMORPH;
//appearInfo.pMonsterInfo = GetMonsterInfo();
InitRender( MP_COUNT, MP_BONE, &appearInfo, 0, FALSE );
//appearInfo.Job = GetClass();
//InitRender(BP_COUNT, BP_BONE, &appearInfo, AppearanceManager::kAppearanceAttachIndex_Count, TRUE);
RefreshRender( &appearInfo, TRUE );
SetIdleState();
//InitState(STATE::IDLE,g_CurTime);
GlobalFunc::CreateEffectBeUpToOption( StrToWzID("KC05"), GetVisiblePos() );
}
else
{
APPEARANCEINFO appearInfo;
ZeroMemory(&appearInfo,sizeof(appearInfo));
appearInfo.ObjectType = APPEARANCEINFO::PLAYER;
appearInfo.Job = GetClass();
InitRender( BP_COUNT, BP_BONE, &appearInfo, AppearanceManager::kAppearanceAttachIndex_Count, FALSE );
RefreshAppearRender(TRUE);
SetIdleState();
GlobalFunc::CreateEffectBeUpToOption( StrToWzID("KC05"), GetVisiblePos() );
//// ???? ????( IDLE ???? )
//InitState(STATE::IDLE,g_CurTime);
}
}
void Player::ForceUnTransForm()
{
GetTransformData().SetTransFormProcessType(TRANSFORM_PROCESS_UNTRANSFORM);
GetTransformData().SetAppearanceKind(APPEARANCEINFO::PLAYER);
GetTransformData().SetTransFormType(eTRANSFORM_TYPE_NONE);
UnTransForm();
GetTransformData().SetTransFormProcessType(TRANSFORM_PROCESS_NONE);
}
void Player::ForceTransFrom()
{
GetTransformData().SetTransFormProcessType(TRANSFORM_PROCESS_TRANSFORM);
GetTransformData().SetAppearanceKind(APPEARANCEINFO::PLAYERTRANSFORM);
TransForm();
GetTransformData().SetTransFormProcessType(TRANSFORM_PROCESS_NONE);
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentTransFormAnimation()
{
WzID animationID = 0;
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
if(GetTransformData().GetTransFormProcessType()==TRANSFORM_PROCESS_TRANSFORM)
{
szAniCode[0] = 'T';
szAniCode[1] = '0';
szAniCode[2] = '0';
szAniCode[3] = '1';
}
else
{
szAniCode[0] = 'T';
szAniCode[1] = '0';
szAniCode[2] = '0';
szAniCode[3] = '2';
}
animationID = StrToWzID(szAniCode);
return animationID;
}
//------------------------------------------------------------------------------
/**
*/
BOOL Player::Create( DWORD dwObjectKey, DWORD dwID)
{
SetObjectKey( dwObjectKey );
cPlayerItemEffect::Initialize();
#ifdef _NA_004035_20120227_COSTUME_ITEM
GetCharInfo()->is_equipped_costume_ = false;
GetCharInfo()->costume_item_pos_ = INVALID_SLOT_POS;
GetCharInfo()->costume_item_code_ = 0;
#endif //_NA_004035_20120227_COSTUME_ITEM
#ifdef _NA_008633_20160104_ADD_DECORATECOSTUME
GetCharInfo()->is_equipped_decorate_costume_ = false;
GetCharInfo()->decorate_costume_item_pos_ = INVALID_SLOT_POS;
GetCharInfo()->decorate_costume_item_code_ = 0;
#endif // _NA_008633_20160104_ADD_DECORATECOSTUME
ClassCodeEx class_code;
class_code.class_code = dwID;
GetCharInfo()->m_byClassCode = static_cast<BYTE>(class_code.class_code);
GetCharInfo()->SetChangeOfClass(static_cast<eCHAREX_TYPE>(class_code.class_code));
//m_fLandFrame=0.0f;
BOOL rt = Character::Create(dwObjectKey, dwID);
assert(rt);
APPEARANCEINFO appearInfo;
ZeroMemory(&appearInfo,sizeof(appearInfo));
appearInfo.ObjectType = APPEARANCEINFO::PLAYER;
appearInfo.Job = dwID; // ??? ID?? ?????? ?????? ????.
CreateCharacterVariation(&appearInfo, TRUE);
InitContainer();
// ???? ????( IDLE ???? )
InitState(STATE::IDLE,g_CurTime);
m_iValkyrieShotDelay = 0;
m_iValkyrieShotCount = 0;
m_iValkyrieShotRemain = 0;
m_bSpecialMoveFlag=0;
m_dwValkyrieShotSerial = 0;
m_dwDustTime = 0;
m_iValkyrieBulletCount = 20;
m_iValkyrieShotAnimSet = 0;
m_iValkyrieShotAnimCount = 0;
// GM ????
m_byGMGrade = 0; // GM ???
m_bInvisible = FALSE; // ????
// PVP ????
m_iTeam = INVALID_TEAM;
m_bHPInfo = FALSE;
#ifdef _NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO
m_bSDInfo = FALSE;
#endif //_NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO
SetBeHaveState( PLAYER_BEHAVE_IDLE_STATE );
m_dwShieldTime=0;
m_bStandUp=FALSE;
m_dwTransSkillCode=0;
m_bAttackBeginPlayer=FALSE;
//InitAttachEffectForSetItem();
m_dwCollectStartTime = 0;
InitMeshHeight();
return TRUE;
}
void Player::SetTransSkillCode(DWORD dwSkillCode)
{
m_dwTransSkillCode = dwSkillCode;
//?????????? ????? ????????
if (IsEtherDeviecBulletChargeing())
{
CreateEtherWeaponEffect(false, TRUE);
}
}
DWORD Player::GetTransSkillCode()
{
return m_dwTransSkillCode;
}
//------------------------------------------------------------------------------
/**
*/
void Player::Destroy( void )
{
DestroyRider();
ReleaseContainer();
Character::Destroy();
cPlayerItemEffect::Destroy();
DestoryEtherWeaponEffect();
}
void Player::SetClass(eCHAR_TYPE character_class)
{
Character::SetClass(character_class);
GetCharInfo()->m_byClassCode = static_cast<BYTE>(character_class);
}
void Player::SetGender(GenderType::Value gender)
{
Character::SetGender(gender);
GetCharInfo()->gender = static_cast<BYTE>(gender);
}
//------------------------------------------------------------------------------
/** ????? ???? ??????? ?????????????..???????
*/
float Player::GetHeightOffset()
{
if (GetBasePart() == NULL)
{
return 0.0f;
}
float height_offset = 0.0f;
if (IsRiding())
{
//! ?????? ??? ????
float kSitHeight= 1.0f;
switch( GetImageClass() )
{
case eCHAR_BERSERKER: kSitHeight = 1.0f; break;
case eCHAR_DRAGON: kSitHeight = 1.0f; break;
case eCHAR_SHADOW: kSitHeight = 1.0f; break;
case eCHAR_VALKYRIE: kSitHeight = 1.0f; break;
case eCHAR_ELEMENTALIST: kSitHeight = 1.0f; break;
case eCHAR_MYSTIC: kSitHeight = 0.8f; break;
case eCHAR_HELLROID: kSitHeight = 1.0f; break; //_NA_000000_20130812_NEW_CHARACTER_HELLROID
case eCHAR_WITCHBLADE: kSitHeight = 1.0f; break; //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
}
float riding_Offset = fabs(GetVisiblePos().z - m_pRider->GetLinkPos()->z);
height_offset +=(riding_Offset - kSitHeight);
//height_offset +=(riding_Offset * 0.8f);
}
if (is_spread_wings())
{
float kFloorToBodyBone_Length = 1.5f;
switch( GetImageClass() )
{
case eCHAR_BERSERKER: kFloorToBodyBone_Length = 1.5f; break;
case eCHAR_DRAGON: kFloorToBodyBone_Length = 1.4f; break;
case eCHAR_SHADOW: kFloorToBodyBone_Length = 1.4f; break;
case eCHAR_VALKYRIE: kFloorToBodyBone_Length = 1.25f; break;
case eCHAR_ELEMENTALIST: kFloorToBodyBone_Length = 1.25f; break;
case eCHAR_MYSTIC: kFloorToBodyBone_Length = 1.0f; break;
case eCHAR_HELLROID: kFloorToBodyBone_Length = 1.4f; break; //_NA_000000_20130812_NEW_CHARACTER_HELLROID
case eCHAR_WITCHBLADE: kFloorToBodyBone_Length = 1.25f; break; //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
}
WzVector pos;
if (GetBodyBonePos(&pos))
{
float body_bone_offset = fabs(GetVisiblePos().z - pos.z) - kFloorToBodyBone_Length;
height_offset += body_bone_offset;
}
else
{
height_offset += kFloorToBodyBone_Length;
}
}
return height_offset;
}
//------------------------------------------------------------------------------
/** ???????????:?? Flag?????? ????? ?????????? ???????.
*/
BOOL Player::IsRiding()
{
//?????????????
if(m_bRiding && m_pRider)
{
//?????? ????????????? ??????????????????
if (BattleScene::IsLobby())
{
GetBasePart()->SetRotationByMatrix(NULL);
}
else
{
return TRUE;
}
}
return FALSE;
}
//------------------------------------------------------------------------------
/** ????? refresh
*/
void Player::RefreshRider()
{
if( IsRiding() == TRUE && IsUseDelayLoading() == false )
{
m_pRiderContainer->RefreshApperance();
m_pRider->EnableFunction(TRUE);
#ifdef _NA_007732_20141024_RIDER_MOVESPEED_SYNC
m_pRiderContainer->RefreshRiderSpeed(); // ??? ??? ????
#endif //_NA_007732_20141024_RIDER_MOVESPEED_SYNC
}
}
//------------------------------------------------------------------------------
/** ????? ????????
*/
char Player::GetRiderKindCode()
{
return m_pRider->GetAniMapping();
}
//------------------------------------------------------------------------------
/** ????? ????????
*/
void Player::RiderSubtype(int nPartIdx,int nSubType)
{
if(IsRiding())
{
m_pRider->SetSubtype(nPartIdx,nSubType);
}
}
//------------------------------------------------------------------------------
/** ????? ?????????
*/
void Player::AttachRiderPart(int nIdx, DWORD dwItemCode)
{
if(IsRiding())
{
m_pRider->AttachRiderPart(nIdx,dwItemCode);
}
}
//------------------------------------------------------------------------------
/** ????? ????????
*/
void Player::DetachRiderPart(int nIdx)
{
if(IsRiding())
{
m_pRider->DetachRiderPart(nIdx);
}
}
//------------------------------------------------------------------------------
/** ????? ????
*/
void Player::CreateRider(DWORD dwID,BOOL bEffect)
{
m_nRiderIdx = 0;
//???????????? ????????? ???????
if(IsRiding())
{
m_pRider->Destroy();
SAFE_DELETE( m_pRider );
}
m_pRider = new Rider;
if(m_pRider)
{
SetRindingState(TRUE);
m_bRiding = m_pRider->Create(dwID, this, bEffect);
//???????????
if(m_bRiding == FALSE)
{
SAFE_DELETE( m_pRider );
}
else
{
m_nRiderIdx= dwID;
m_dwStandAnimDelay = 0;
//????????z???? 1.0f?? ??????? ?????? Rider???? ???? ??????? SetRotation????
//????? ????????????? ???? ????? ?????????? ???? ????? ??????? 0????????????????
SetVector(&m_vNormal,0.0f,0.0f,1.0f);
}
}
}
//------------------------------------------------------------------------------
/** ????? ????
*/
void Player::DestroyRider()
{
if(m_pRider)
{
//???????? ???????.
if(m_pRiderContainer)
{
m_pRiderContainer->Clear();
}
GetBasePart()->SetRotationByMatrix(NULL);
GetBasePart()->UpdateTransform();
m_pRider->Destroy();
SAFE_DELETE( m_pRider );
m_bRiding = FALSE;
// ???? ???/???? ????? ????? ??????? ??????? ??? ??? ???.
if ((GetCurState() == STATE::RIDER_SPREAD) || (GetCurState() == STATE::RIDER_FURL))
{
if(GetNextState() == STATE::NONE)
{
SetNextState(STATE::IDLE, g_CurTime);
}
CommitChangeState(g_CurTime);
}
}
}
//------------------------------------------------------------------------------
/**
*/
BOOL Player::ProcessInterpolation( DWORD dwTick ,float fInterpolateRatio)
{
BOOL bRet = Character::ProcessInterpolation(dwTick,fInterpolateRatio);
if(IsRiding())
{
//?????? ????????? ????????? ?????????.
WzVector vPos=GetBasePart()->GetPosition();
m_pRider->SetPosition(&vPos);
}
return bRet;
}
//------------------------------------------------------------------------------
/** ??????? ????????? ??? ??????? ????????? ??????????(???.???)
*/
void Player::AnimateRider()
{
m_pRider->AnimateUnit(this);
m_pRider->Transform(GetBasePart());
}
//------------------------------------------------------------------------------
/**
*/
BOOL Player::ProcessRider(DWORD dwTick)
{
//???????????? ????????????.
if(m_bRiderJumpFlag || ( rider()&& rider()->is_spread()))
{
m_pRider->SetRotation( &c_UpVector, GetVisibleAngleZ() );
}
else
{
m_pRider->SetRotation( &m_vNormal, GetVisibleAngleZ() );
}
m_pRider->Process(dwTick, this);
return TRUE;
}
//------------------------------------------------------------------------------
void Player::SetAnimation(const char* pAnimation, BOOL bLoop)
{
Player::SetPlayerAnimation(StrToWzID(pAnimation), eANI_IDLE, bLoop);
}
//------------------------------------------------------------------------------
void Player::SetAnimation(WzID idAnimation, BOOL bLoop)
{
Player::SetPlayerAnimation(idAnimation, eANI_IDLE, bLoop);
}
//------------------------------------------------------------------------------
void Player::SetPlayerAnimation(WzID wzID, ePLAYER_ANI eState, BOOL bLoop)
{
//???? ??? ???????? ????? ???? ????????? ??????
BOOL bRestart = TRUE;
if ((eState == eANI_SPREAD_OTHERMOTION_MOVE) || (eState == eANI_SPREAD_OTHERMOTION_IDLE))
{
bLoop = FALSE;
bRestart = FALSE;
}
//if ((wzID == GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_SPREAD_OTHERMOTION_MOVE)) ||
// ((IsRiding() == TRUE) && (wzID == GlobalFunc::GetPlayerAnimationByRiding(eANI_SPREAD_OTHERMOTION_MOVE, GetRiderKindCode()))))
//{
// bLoop = FALSE;
// bRestart = FALSE;
// eState = eANI_SPREAD_OTHERMOTION_MOVE;
//}
//else if ((wzID == GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_SPREAD_OTHERMOTION_IDLE)) ||
// ((IsRiding() == TRUE) && (wzID == GlobalFunc::GetPlayerAnimationByRiding(eANI_SPREAD_OTHERMOTION_IDLE, GetRiderKindCode()))))
//{
// bLoop = FALSE;
// bRestart = FALSE;
// eState = eANI_SPREAD_OTHERMOTION_IDLE;
//}
Object::SetAnimation(wzID, bLoop, bRestart);
if (IsRiding())
{
WzID ani_id = GlobalFunc::GetRiderAnimationByPlayerAni(eState, rider()->is_spread());
m_pRider->SetAnimation(ani_id, bLoop, bRestart);
}
int attach_index = 0;
if (is_attached_wing_accessory(&attach_index) && (attach_index < (int)GetAttachmentCount()))
{
WzID ani_id = GlobalFunc::GetWingsAnimationByPlayerAni(eState, is_spread_wings());
const ObjectAttachment& object_attachment = GetAttachment(attach_index);
((ObjectAttachment*)(&object_attachment))->SetAnimation(ani_id, bLoop, bRestart);
}
}
//------------------------------------------------------------------------------
/**
*/
void Player::RenderRider()
{
m_pRider->SetColor(GetColor());
m_pRider->Render();
}
//------------------------------------------------------------------------------
/** ???? ?????? ????(????????)???????? ?????
???? ?????????????? ????N??????? ????????? ????
*/
BOOL Player::IsEventWeapon()
{
EquipmentContainer* equipment_container = GetEquipmentContainer();
if (equipment_container != NULL)
{
SCSlot& slot_ref = equipment_container->GetSlot(EquipmentContainer::EQUIP_WEAPON1);
SCItemSlot& item_slot_ref = static_cast<SCItemSlot&>(slot_ref);
if (item_slot_ref.IsContainValidItem())
{
if ((item_slot_ref.GetImageCode() >= 50310) &&
(item_slot_ref.GetImageCode() <= 50319))
{
return TRUE;
}
// ???? ????
if( item_slot_ref.GetImageCode() == 50495 )
return TRUE;
if( item_slot_ref.GetImageCode() == 50496 )
return TRUE;
// ?????? ~ ???? ???????? ???
if ((item_slot_ref.GetImageCode() >= 50533) &&
(item_slot_ref.GetImageCode() <= 50543))
{
return TRUE;
}
}
}
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
if ((GlobalFunc::IsBattleGroundScene() == TRUE) &&
(((GetObjectKey() > ONLYCLIENT_OBJECT_KEY) && (GetObjectKey() < MAX_OBJECT_KEY)) == false) && // ??? ?????? ??? ???? (???? ?????)
(IsKindOfObject(PLAYER_OBJECT) == TRUE))
{
SLOTCODE special_item_code = GetSpecialSceneItemCode();
BYTE scene_weapon_code = LOBYTE(special_item_code);
DWORD weapon_item_code =
BattleGroundInfoParser::Instance()->GetBattleGroundWeaponItemCode(scene_weapon_code, GetClass(), GetWeaponKind());
if (weapon_item_code)
{
if ((weapon_item_code >= 50310) &&
(weapon_item_code <= 50319))
{
return TRUE;
}
// ???? ????
if( weapon_item_code == 50495 )
return TRUE;
if( weapon_item_code == 50496 )
return TRUE;
// ?????? ~ ???? ???????? ???
if ((weapon_item_code >= 50533) &&
(weapon_item_code <= 50543))
{
return TRUE;
}
}
}
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
return FALSE;
}
//------------------------------------------------------------------------------
/**
*/
BOOL Player::Render( void )
{
if (m_bObserverMode)
{
return TRUE;
}
if ( GetShow() == TRUE )
{
if (this->m_bInvincible)
{
SetColor( 154, 154, 154,100);
}
BOOL bRet = Character::Render();
if (IsRiding() &&
bRet)
{
RenderRider();
}
return bRet;
}
else
{
return TRUE;
}
}
void Player::ApplyTerrainColor(BOOL bApply)
{
Character::ApplyTerrainColor(bApply);
// ??? ?? ????????? ????? ???? ??? ??? ???????? ??????
//if (!m_bInvincible)
//{
// Character::ApplyTerrainColor(TRUE);
// if((this == g_pHero) || IsRiding())
// {
// Character::ApplyTerrainColor(TRUE);
// }
// else
// {
// Character::ApplyTerrainColor(FALSE);
// }
//}
}
//------------------------------------------------------------------------------
/**
*/
SCSlotContainer * Player::GetSlotContainer( SLOTIDX slotIdx )
{
switch( slotIdx )
{
case SI_EQUIPMENT:
{
return GetEquipmentContainer();
}
break;
case SI_RIDER:
{
return m_pRiderContainer;
}
break;
}
return NULL;
}
//------------------------------------------------------------------------------
/**
*/
void Player::InitContainer()
{
if (GetEquipmentContainer() == NULL)
{
EquipmentContainer* equipment_container = new EquipmentContainer();
equipment_container->SetOwnerKey(GetObjectKey());
SetEquipmentContainer(equipment_container);
}
m_pRiderContainer = new RiderContainer();
m_pRiderContainer->SetOwnerKey(GetObjectKey());
}
//------------------------------------------------------------------------------
/**
*/
void Player::ReleaseContainer()
{
EquipmentContainer* equipment_container = GetEquipmentContainer();
if (equipment_container != NULL)
{
equipment_container->Release();
delete equipment_container;
SetEquipmentContainer(NULL);
}
SAFE_RELEASENDELETE(m_pRiderContainer);
}
//------------------------------------------------------------------------------
/**
*/
void Player::AnimateUnit()
{
if(IsRiding())
{
AnimateRider();
}
Character::AnimateUnit();
UpdateEtherWeaponEffectPos();
UpdateItemEffectPos(this);
}
//------------------------------------------------------------------------------
/**
*/
void Player::ResetMoveFlag()
{
//#ifdef _DEBUG
// if( m_iMoveFlag != 0 )
// {
// char temp[1024];
// wsprintf(temp,"ResetMoveFlag\n");
// OutputDebugStr(temp);
// }
//#endif
m_iMoveFlag = 0;
}
//------------------------------------------------------------------------------
/**
*/
void Player::AddMoveFlag(int MoveFlag)
{
BIT_ADD(m_iMoveFlag,MoveFlag);
}
//------------------------------------------------------------------------------
/**
*/
void Player::RemoveMoveFlag(int MoveFlag)
{
BIT_REMOVE(m_iMoveFlag,MoveFlag);
}
//------------------------------------------------------------------------------
/**
*/
BOOL Player::CheckMoveFlag(int MoveFlag)
{
return BIT_CHECK(m_iMoveFlag,MoveFlag);
}
//------------------------------------------------------------------------------
/**
*/
void Player::SetMoveFlag(int MoveFlag)
{
m_iMoveFlag = MoveFlag;
}
#ifdef _NA_004035_20120227_COSTUME_ITEM
void Player::SetCostumeItemCode( SLOTCODE item_code )
{
GetCharInfo()->costume_item_code_ = item_code;
}
SLOTCODE Player::GetCostumeItemCode()
{
return GetCharInfo()->costume_item_code_;
}
#endif//_NA_004035_20120227_COSTUME_ITEM
#ifdef _NA_008633_20160104_ADD_DECORATECOSTUME
void Player::SetDecorateCostumeItemCode( SLOTCODE item_code )
{
GetCharInfo()->decorate_costume_item_code_ = item_code;
}
SLOTCODE Player::GetDecorateCostumeItemCode()
{
return GetCharInfo()->decorate_costume_item_code_;
}
#endif // _NA_008633_20160104_ADD_DECORATECOSTUME
#ifdef _NA_008069_20150210_ADD_SPA_SYSTEM
void Player::SetSpecialSceneItemCode( SLOTCODE item_code )
{
special_scene_item_code_ = item_code;
}
SLOTCODE Player::GetSpecialSceneItemCode()
{
return special_scene_item_code_;
}
#endif //_NA_008069_20150210_ADD_SPA_SYSTEM
//------------------------------------------------------------------------------
/**
*/
void Player::SetClientChar(const CLIENT_CHARACTER_PART& ClientPart)
{
GetCharInfo()->m_bySlot = ClientPart.m_bySlot;
GetCharInfo()->m_byClassCode = ClientPart.m_byClass;
GetCharInfo()->gender = ClientPart.gender;
GetCharInfo()->m_LV = ClientPart.m_LV;
SetName( ClientPart.m_tszCharName);
GetCharInfo()->m_iRegion = ClientPart.m_iRegion;
GetCharInfo()->SetChangeOfClass( (eCHAREX_TYPE)ClientPart.m_ChangeOfClassStep);
#ifdef _NA_004035_20120227_COSTUME_ITEM
GetCharInfo()->is_equipped_costume_ = ClientPart.is_equipped_costume;
GetCharInfo()->costume_item_pos_ = ClientPart.costume_item_pos;
GetCharInfo()->costume_item_code_ = ClientPart.costume_item_code;
#endif//_NA_004035_20120227_COSTUME_ITEM
#ifdef _NA_008633_20160104_ADD_DECORATECOSTUME
GetCharInfo()->is_equipped_decorate_costume_ = ClientPart.is_equipped_decorate_costume;
GetCharInfo()->decorate_costume_item_pos_ = ClientPart.decorate_costume_item_pos;
GetCharInfo()->decorate_costume_item_code_ = ClientPart.decorate_costume_item_code;
#endif // _NA_008633_20160104_ADD_DECORATECOSTUME
SetPartVariation(PLAYER_VARIATION_HAIR,ClientPart.m_byHair);
SetPartVariation(PLAYER_VARIATION_FACE,ClientPart.m_byFace);
SetHeightVariation(ClientPart.m_byHeight);
SetEquipItemTotalInfo( ClientPart.m_EquipItemInfo );
m_DelChk = ClientPart.m_DelChk;
StrnCopy(m_tszDelDate, ClientPart.m_tszDelDate , MAX_TIMEDATA_SIZE);
m_tszDelDate[MAX_TIMEDATA_SIZE] = NULL;
//???? ???????????
// Bronze statues reuse CLIENT_CHARACTER_PART; a leftover/garbage
// m_bSummoned flag must not create a pet from a junk item stream.
#ifdef _NA_008016_20150203_SUN_RANKING_SYSTEM_STATUE
if (ClientPart.m_bSummoned && GetObjectType() != STATUE_PLAYER_OBJECT)
#else
if (ClientPart.m_bSummoned)
#endif
{
SCItemSlot ItemSlot(ClientPart.m_PetSlotStream);
if (ItemSlot.IsContainValidItem())
{
const BASE_ITEMINFO* pet_item_info = ItemSlot.GetImageItemInfo();
if (pet_item_info)
{
CreatePetSummon(pet_item_info->m_wSkillCode);
}
}
}
// ?????????? ????? ???????.
//RefreshEquipData();
RefreshAppearRender();
if (IsEtherDeviecBulletChargeing())
{
CreateEtherWeaponEffect(0, TRUE);
}
}
//------------------------------------------------------------------------------
void Player::GetEquipItemTotalInfoByCheckValidItem(EQUIP_ITEM_INFO& OUT equip_item_info)
{
ITEMSLOTEX* pItemSlot = equip_item_info.m_Slot;
equip_item_info.m_Count = 0;
if (GetEquipmentContainer() == NULL)
{
return;
}
ns_formula::EquipSlotsManageInfo* equip_slot_manage_info = GetEquipmentContainer()->GetEquipmentManageInfo();
for (int equip_pos = 0; equip_pos < GetEquipmentContainer()->GetMaxSlotNum(); ++equip_pos)
{
//???? ??????? ??
SCItemSlot* item_slot = GetEquipmentContainer()->GetItemSlot(equip_pos);
if (item_slot == NULL)
{
continue;
}
// ??? ?????? ???? ??? ????? ??
ns_formula::EquipSlotsManageInfo::Node* equip_node = equip_slot_manage_info->slots;
if (equip_node[item_slot->GetPos()].activated == false)
{
continue;
}
pItemSlot[equip_item_info.m_Count].m_Pos = equip_pos;
item_slot->CopyOut(pItemSlot[equip_item_info.m_Count].m_Stream);
++equip_item_info.m_Count;
}
}
//------------------------------------------------------------------------------
VOID Player::GetEquipItemTotalInfo( EQUIP_ITEM_INFO & OUT rItemInfo )
{
ITEMSLOTEX * pItemSlot = rItemInfo.m_Slot;
rItemInfo.m_Count = 0;
if (GetEquipmentContainer() == NULL)
return;
POSTYPE start = 0;
POSTYPE total = MAX_EQUIPMENT_SLOT_NUM;
for (POSTYPE i = start; i < total; ++i)
{
if (GetEquipmentContainer()->IsEmpty(i) == FALSE)
{
pItemSlot[rItemInfo.m_Count].m_Pos= i;
((SCItemSlot &)GetEquipmentContainer()->GetSlot(i)).CopyOut( pItemSlot[rItemInfo.m_Count].m_Stream );
++rItemInfo.m_Count;
}
}
}
VOID Player::SetEquipItemTotalInfo( const EQUIP_ITEM_INFO & IN rItemInfo )
{
EquipmentContainer* equipment_container = GetEquipmentContainer();
if (equipment_container == NULL)
{
return;
}
const ITEMSLOTEX* equip_slot_ptr = rItemInfo.m_Slot;
POSTYPE equip_count = rItemInfo.m_Count;
if (equip_count > MAX_EQUIPMENT_SLOT_NUM)
{
equip_count = MAX_EQUIPMENT_SLOT_NUM;
}
for(POSTYPE index = 0; index < equip_count; ++index)
{
SCItemSlot insert_slot(equip_slot_ptr[index].m_Stream);
equipment_container->InsertSlot(equip_slot_ptr[index].m_Pos, insert_slot);
}
}
VOID Player::SetEquipItemBaseInfo( POSTYPE total, EQUIP_ITEM_BASEINFO::data_type* IN pSlot )
{
EquipmentContainer* equipment_container = GetEquipmentContainer();
if (equipment_container == NULL)
{
return;
}
for (POSTYPE index = 0; index < total; ++index)
{
SCItemSlot insert_slot(pSlot[index].m_Stream);
equipment_container->JustInsertSlot(pSlot[index].m_Pos, insert_slot);
}
RefreshAppearRender();
if (IsEtherDeviecBulletChargeing())
{
CreateEtherWeaponEffect(0, TRUE);
}
// ????????? ??? ????.
set_receive_equip_info(true);
}
//------------------------------------------------------------------------------
/**
*/
int Player::GetMoveFlag()
{
return m_iMoveFlag;
}
//------------------------------------------------------------------------------
/**
*/
float Player::ProcessAnimation(DWORD dwTick,WzEvent *pEvent,BOOL bIgnoreEvent)
{
ProcessStandAnimationDelay(dwTick);
if(m_wiPreAniID != GetCurrentAnimation())
{
// ?????? ???????? ???? ???? ??????? ???????
// ?????? ShowCrossbow ???? ???? ????????? ???????? ????
if (GetWeaponKind() != eWEAPONTYPE_ONEHANDCROSSBOW )
{
// ???????? N203 (????IDLE) ?? ????
if( GetWeaponKind() == eWEAPONTYPE_HELLROID_1 && GetCurrentAnimation() == StrToWzID("N203") )
{
SetAttachmentAnimation(0, GetCurrentAnimation(), TRUE);
}
else
{
SetAttachmentAnimation(0, GetCurrentAnimation(), FALSE);
}
}
}
m_wiPreAniID = GetCurrentAnimation();
float fRet = Character::ProcessAnimation(dwTick,pEvent,bIgnoreEvent);
if(IsRiding())
{
ProcessRider(dwTick);
fRet = rider()->current_ani_progress_rate();
}
return fRet;
}
//------------------------------------------------------------------------------
/**
*/
float Player::GetAngleForMoveDirection()
{
WzVector vPos = GetPosition();
WzVector vFoward = GetDirection();
WzVector vRight,vLeft;
WzVector vDir;
SetVector( &vDir,0.0f, 0.0f, 0.0f );
SetVector( &vRight, vFoward.y, -vFoward.x, 0.0f );
SetVector( &vLeft, -vFoward.y, vFoward.x, 0.0f );
if( GetMoveFlag() & KEYBOARDMOVE_FOWARD )
{
vDir = vDir + vFoward;
}
else if( GetMoveFlag() & KEYBOARDMOVE_BACKWARD )
{
vDir = vDir - vFoward;
}
if( GetMoveFlag() & KEYBOARDMOVE_RIGHTSTEP )
{
vDir = vDir + vRight;
}
else if( GetMoveFlag() & KEYBOARDMOVE_LEFTSTEP )
{
vDir = vDir + vLeft;
}
return Math_GetAngleFromVector( &vDir );
}
//------------------------------------------------------------------------------
/**
??? ????? ?????? ????? ???? ???? ???? ?????.
*/
WzID Player::GetCurrentAttackAnimation()
{
WzID animationID = StrToWzID("A001");
DWORD dwStyle = GetCurrentAttackStyle();
//Todo:??????? ??????? 2??? ??????? ????.
DWORD sequence=GetAttackSequence();
DWORD weapon =GetWeaponKind();
BASE_STYLEINFO *pInfo = SkillInfoParser::Instance()->GetStyleInfo( (SLOTCODE)dwStyle );
// ???????? ????
if (weapon != eWEAPONTYPE_ONEHANDCROSSBOW
#ifdef _NA_000000_20160315_ETHERWEAPON_SPECIALMOVE
&& weapon != eWEAPONTYPE_ETHERWEAPON
#endif //_NA_000000_20160315_ETHERWEAPON_SPECIALMOVE
)
{
#ifdef _NA003109_STYLE_PRESENTATION_IMPROVEMENT
animationID = GetNormalAttackAniCode(pInfo, static_cast<eATTACK_SEQUENCE>(sequence), NormalAttack.ani_type);
#else
switch(sequence)
{
case eATTACK_SEQUENCE_FIRST:
animationID = pInfo->m_wzidCodeFirst.id;
break;
case eATTACK_SEQUENCE_SECOND:
animationID = pInfo->m_wzidCodeSecond.id;
break;
case eATTACK_SEQUENCE_THIRD:
animationID = pInfo->m_wzidCodeThird.id;
break;
}
#endif //_NA003109_STYLE_PRESENTATION_IMPROVEMENT
}
else
{
if (m_iValkyrieShotAnimSet)
{
switch(m_iValkyrieShotAnimCount)
{
case 0:
case 1:
case 2:
animationID = pInfo->m_wzidCodeFirst.id;
break;
default:
animationID = pInfo->m_wzidCodeSecond.id;
break;
}
}
else
{
switch(m_iValkyrieShotAnimCount)
{
case 0:
case 1:
case 2:
case 3:
case 4:
animationID = pInfo->m_wzidCodeSecond.id;
break;
default:
animationID = pInfo->m_wzidCodeFirst.id;
break;
}
}
m_iValkyrieShotAnimCount++;
if (m_iValkyrieShotAnimCount >= 8)
{
m_iValkyrieShotAnimSet = rand() % 2;
m_iValkyrieShotAnimCount = 0;
}
}
return animationID;
}
void Player::RefreshPunchStyle()
{
switch(GetClass())
{
case eCHAR_BERSERKER: SetCurrentAttackStyle(eSTYLE_BERSERKER_PUNCH); break;
case eCHAR_DRAGON: SetCurrentAttackStyle(eSTYLE_DRAGON_PUNCH); break;
case eCHAR_SHADOW: SetCurrentAttackStyle(eSTYLE_SHADOW_PUNCH); break;
case eCHAR_VALKYRIE: SetCurrentAttackStyle(eSTYLE_VALKYRIE_PUNCH); break;
case eCHAR_ELEMENTALIST:SetCurrentAttackStyle(eSTYLE_MAGICIAN_PUNCH); break;
case eCHAR_MYSTIC: SetCurrentAttackStyle(eSTYLE_MYSTIC_PUNCH); break;
}
}
//------------------------------------------------------------------------------
/**
???? ???????? ????? nomal style ?????? ??????.
????? ???? ???? ???? ??????? ????? ?? ??? ????...??? ??? ????? ????!
*/
void Player::SetCurrentNomalAttackStyle(DWORD dwWeaponType)
{
switch(dwWeaponType)
{
case eWEAPONTYPE_TWOHANDAXE: SetCurrentAttackStyle(eSTYLE_TWOHANDAXE_NORMAL); break;
case eWEAPONTYPE_TWOHANDSWORD: SetCurrentAttackStyle(eSTYLE_TWOHANDSWORD_NORMAL); break;
case eWEAPONTYPE_ONEHANDSWORD: SetCurrentAttackStyle(eSTYLE_ONEHANDSWORD_NORMAL); break;
case eWEAPONTYPE_SPEAR: SetCurrentAttackStyle(eSTYLE_SPEAR_NORMAL); break;
case eWEAPONTYPE_DAGGER: SetCurrentAttackStyle(eSTYLE_SHADOW_DAGGER_NORMAL); break;
case eWEAPONTYPE_WHIP: SetCurrentAttackStyle(eSTYLE_SHADOW_WHIP_NORMAL); break;
case eWEAPONTYPE_STAFF: SetCurrentAttackStyle(eSTYLE_STAFF_NORMAL); break;
case eWEAPONTYPE_ORB: SetCurrentAttackStyle(eSTYLE_ORB_NORMAL); break;
case eWEAPONTYPE_GUNTLET: SetCurrentAttackStyle(eSTYLE_MYSTIC_GUNTLET_NORMAL); break;
case eWEAPONTYPE_POLEARM: SetCurrentAttackStyle(eSTYLE_MYSTIC_POLEARM_NORMAL); break;
#ifdef _YJ_FISHING_SYSTEM_000933
case eWEAPONTYPE_FISHING_POLE: RefreshPunchStyle(); break;
#endif //_YJ_FISHING_SYSTEM_000933
case eWEAPONTYPE_PUNCH: RefreshPunchStyle(); break;
}
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentIdleAnimation()
{
if(IsPolymorph())
{
return GlobalFunc::GetAnimationByPolymorph(eANI_IDLE);
}
// ??? ???
if(IsRiding())
{
//???????????.
if(m_dwStandAnimDelay)
{
m_bIdleFlag = (rand()%2==1);
m_btIdleAni += 1;
if(2 < m_btIdleAni)
m_btIdleAni = 0;
}
else
{
return GlobalFunc::GetPlayerAnimationByRiding((m_bIdleFlag) ? (eANI_IDLE):(eANI_IDLE2),GetRiderKindCode());
}
return GlobalFunc::GetPlayerAnimationByRiding(eANI_STAND,GetRiderKindCode());
}
if (is_spread_wings())
{
if (m_dwStandAnimDelay)
{
return GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_STAND);
}
else
{
return GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_IDLE);
}
}
bool is_idle_animation = false;
if (IsFainting())
{
return StrToWzID("F004");
}
#ifdef _NA_COSTUMEITEM_IDLE_ANIMATION
m_IsCostumIdleAnimation = FALSE;
#endif //_NA_COSTUMEITEM_IDLE_ANIMATION
// ?????
WzID animationID = 0;
char szAniCode[5];
// ???????? ??????? ?????.
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'N';
szAniCode[1] = '0';
szAniCode[2] = '0';
szAniCode[3] = '1';
szAniCode[1] = GetWeaponAnimationCode();
// ????????? ??? ???? 3 ???? 1???.
if (m_iAttackStandTime > 0 )
{
// ?????????? IDLE
if (GetClass() == eCHAR_VALKYRIE)
{
// ????? ?????? Idle?????? ???? ???????? ???????.
if (m_iValkyrieShotDelay > 0)
{
return StrToWzID("A201");
}
else
{
szAniCode[3] = '3';
}
}
else
{
szAniCode[3] = '3';
}
}
else
{
// ???????????? IDLE
if (m_dwStandAnimDelay)
{
szAniCode[3] = '1';
m_btIdleAni += 1;
if(2 < m_btIdleAni)
m_btIdleAni = 0;
}
else
{
#ifdef _NA_COSTUMEITEM_IDLE_ANIMATION
if( IsTransForm() == FALSE )
{
SLOTCODE item_code = GetCostumeItemCode();
if( item_code != 0 )
{
if( cCostumeItemInfo* pCostumeItemInfo = cCostumeItemInfoParser::Instance()->GetInfo( item_code ) )
{
m_IsCostumIdleAnimation = TRUE;
return pCostumeItemInfo->GetIdleAnimation( GetGender() == GenderType::kMale );
}
}
}
#endif //_NA_COSTUMEITEM_IDLE_ANIMATION
if( 2 > m_btIdleAni)
{
szAniCode[3] = '2';
}
else
{
if ((eCHAR_SHADOW == GetClass()) || //_YJ_SHADOW_SKILL_S00013
(eCHAR_HELLROID == GetClass()) || //_NA_000000_20130812_NEW_CHARACTER_HELLROID
(eCHAR_MYSTIC == GetClass()) || //_NA_004965_20120613_NEW_CHARACTER_MYSTIC
(eCHAR_WITCHBLADE == GetClass())) //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
{
szAniCode[2] = '5';
szAniCode[3] = '2';
}
else
{
szAniCode[3] = '2';
}
}
}
}
animationID = StrToWzID(szAniCode);
return animationID;
}
WzID Player::GetCurrentReviveAnimation()
{
WzID animationID = 0;
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'R';
szAniCode[1] = '0';
szAniCode[2] = '0';
szAniCode[3] = '1';
animationID = StrToWzID(szAniCode);
return animationID;
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentMoveAnimation()
{
if(IsPolymorph())
{
return GlobalFunc::GetAnimationByPolymorph(eANI_RUN);
}
if(IsRiding())
{
return GlobalFunc::GetPlayerAnimationByRiding(eANI_RUN, GetRiderKindCode());
}
if (is_spread_wings())
{
return GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_RUN);
}
WzID animationID = 0;
// ???????? ??????? ?????.
if (GetHideSkill())
{
// ????? ?????? ??????
if (GetWeaponKind() == eWEAPONTYPE_DAGGER)
{
// ???? ???????? ??????
animationID = StrToWzID("S721");
}
else
{
animationID = StrToWzID("S007");
}
}
else
{
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'N';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '0';
szAniCode[3] = '7';
animationID = StrToWzID(szAniCode);
}
return animationID;
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentBlockAnimation()
{
WzID animationID = 0;
// ???????? ??????? ?????.
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'M';
szAniCode[1] = '0';
szAniCode[2] = '0';
szAniCode[3] = '1';
szAniCode[1] = GetWeaponAnimationCode();
animationID = StrToWzID(szAniCode);
return animationID;
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentDeathAnimation()
{
TCHAR szWzID[4] = {0,};
szWzID[0] = 'D';
szWzID[1] = GetWeaponAnimationCode();
szWzID[2] = '0';
int iRan = rand()%3;
if(0 == iRan)
szWzID[3] = '1';
else if(1 == iRan)
szWzID[3] = '2';
else if(2 == iRan)
szWzID[3] = '3';
WzID aniID = StrToWzID(szWzID);
CWzUnit* pUnit=GetBasePart()->GetWzUnit();
if(!pUnit)
{
szWzID[3] = '1';
aniID = StrToWzID(szWzID);
return aniID;
}
WzAnimationInfo *pAnimationInfo =pUnit->GetAnimationInfo(aniID);
if(!pAnimationInfo)
{
szWzID[3] = '1';
aniID = StrToWzID(szWzID);
return aniID;
}
if(pAnimationInfo->m_wiAction != aniID)
{
szWzID[3] = '1';
aniID = StrToWzID(szWzID);
return aniID;
}
return aniID;
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentDamageAnimation(BOOL bRight,BOOL bCritical)
{
WzID animationID = 0;
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'H';
szAniCode[1] = GetWeaponAnimationCode();
if (!bRight)
{
szAniCode[2] = 'R';
}
else
{
szAniCode[2] = 'L';
}
if (bCritical)
{
szAniCode[3] = '2';
}
else
{
szAniCode[3] = '1';
}
animationID = StrToWzID(szAniCode);
return animationID;
}
//------------------------------------------------------------------------------
/**
??? ????? ?????.
*/
WzID Player::GetCurrentSitAnimation()
{
#ifdef _NA_008069_20150210_ADD_SPA_SYSTEM
#ifdef _NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION
if (IsInSpaTile_Change_SitIdle())
{
WzID animation_id = 0;
SpaZoneInfo* spa_info = SpaZoneInfoParser::Instance()->GetSpaZoneInfo(g_pMap->GetMapID());
if (spa_info && (spa_info->special_animation[0].id != 0))
{
animation_id = spa_info->special_animation[0].id;
// ?????? ????
SetSpaSittingAnimationDelay();
return animation_id;
}
}
#else
if (IsInSpaTile())
{
// ?????? ????
SetSpaSittingAnimationDelay();
return StrToWzID("N021");
}
#endif //_NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION
#endif //_NA_008069_20150210_ADD_SPA_SYSTEM
if(IsRiding())
{
return GlobalFunc::GetPlayerAnimationByRiding(eANI_SIT,GetRiderKindCode());
}
if (is_spread_wings())
{
//! ??? ????
//return GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_SIT);
}
WzID animationID = 0;
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'N';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '0';
szAniCode[3] = '4';
animationID = StrToWzID(szAniCode);
return animationID;
}
//------------------------------------------------------------------------------
/**
??? ???? ????? ?????.
*/
WzID Player::GetCurrentSittingAnimation()
{
if(IsRiding())
{
return GlobalFunc::GetPlayerAnimationByRiding(eANI_SIT_IDLE,GetRiderKindCode());
}
if (is_spread_wings())
{
// ??? ????
//return GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_SIT_IDLE);
}
WzID animationID = 0;
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'N';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '0';
szAniCode[3] = '5';
animationID = StrToWzID(szAniCode);
return animationID;
}
//------------------------------------------------------------------------------
/**
????? ????? ?????.
*/
WzID Player::GetCurrentStandUpAnimation()
{
#ifdef _NA_008069_20150210_ADD_SPA_SYSTEM
#ifdef _NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION
if (IsInSpaTile_Change_SitIdle())
{
WzID animation_id = 0;
SpaZoneInfo* spa_info = SpaZoneInfoParser::Instance()->GetSpaZoneInfo(g_pMap->GetMapID());
if (spa_info && (spa_info->special_animation[3].id != 0))
{
animation_id = spa_info->special_animation[3].id;
return animation_id;
}
}
#else
if (IsInSpaTile())
{
return StrToWzID("N023");
}
#endif //_NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION
#endif //_NA_008069_20150210_ADD_SPA_SYSTEM
if(IsRiding())
{
return GlobalFunc::GetPlayerAnimationByRiding(eANI_GETUP,GetRiderKindCode());
}
if (is_spread_wings())
{
// ??? ????
//return GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_GETUP);
}
WzID animationID = 0;
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'N';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '1';
szAniCode[3] = '6';
animationID = StrToWzID(szAniCode);
return animationID;
}
//------------------------------------------------------------------------------
/**
*/
void Player::CreateDamageEffect(BOOL bCritical,BOOL bRight,DWORD dwAttackObjId)
{
Character::CreateDamageEffect(bCritical,bRight,dwAttackObjId);
}
//------------------------------------------------------------------------------
/**
*/
void Player::SetOldMoveFlag(int iOldMoveFlag)
{
m_iOldMoveFlag = iOldMoveFlag;
}
//------------------------------------------------------------------------------
/**
*/
int Player::GetOldMoveFlag()
{
return m_iOldMoveFlag;
}
//------------------------------------------------------------------------------
/**
*/
void Player::SetOldKeyboardDirection(WzVector *pVector)
{
m_vOldDirection = *pVector;
}
//------------------------------------------------------------------------------
/**
*/
WzVector Player::GetOldKeyboardDirection()
{
return m_vOldDirection;
}
//------------------------------------------------------------------------------
/**
*/
void Player::SetCondition(BYTE byCondition)
{
Character::SetCondition(byCondition);
switch(byCondition)
{
case eCHAR_CONDITION_STANDUP:
{
if( GetCurState()==STATE::SIT )
{
SetStandUp(TRUE);
}
}
break;
case eCHAR_CONDITION_SITDOWN:
{
SetNextState(STATE::SIT,g_CurTime);
#ifdef _NA_008546_20151029_SITTING_PACKET_DELAY_POSITION_SYNC_BUG
if (g_pHero && IsHero() == true)
{
g_pHero->set_sitting_packet_delay(FALSE);
}
#endif //_NA_008546_20151029_SITTING_PACKET_DELAY_POSITION_SYNC_BUG
}
break;
}
}
//------------------------------------------------------------------------------
/** ?????:?????? ??????? ?????? ???????.
*/
BOOL Player::CreatePetSummon(WORD wPetIndex)
{
//safe_code:? server???? BRD?? ??????????????? ???
if (this->IsPetReturn())
{
DeletePetSummon();
}
m_PetInfo.m_bPetSummoned = TRUE;
sPet_Script_Info* pet_script_ptr = PetInfoParser::Instance()->GetPetInfo(wPetIndex);
if (!pet_script_ptr)
{
assert(!"??? ?????????? ???????.");
return FALSE;
}
if(GENERALPARAM->IsNet())
{
m_PetInfo.m_dwPetObjKey = g_ObjectManager.GenerateKeyByPet(PET_OBJECT);
}
else
{
//! ?????
m_PetInfo.m_dwPetObjKey = g_ObjectManager.GenerateKeyAtSingleMode(PET_OBJECT);
}
m_PetInfo.m_wPetIndex = wPetIndex;
Pet* pet_ptr = static_cast<Pet*>(g_ObjectManager.Add(m_PetInfo.m_dwPetObjKey,
PET_OBJECT,
pet_script_ptr->m_MonsterCode,
FALSE));
if (!pet_ptr)
{
assert(!"???????? ???????");
return FALSE;
}
pet_ptr->InitPetMonster(this->GetObjectKey(),wPetIndex);
return TRUE;
}
//------------------------------------------------------------------------------
/** ??????
*/
void Player::DeletePetSummon()
{
Pet* pet_info = static_cast<Pet*>(g_ObjectManager.GetObject(m_PetInfo.m_dwPetObjKey));
//safecode:?????????????
if (!pet_info)
{
return;
}
if (pet_info->IsKindOfObject(PET_OBJECT))
{
pet_info->DestroyPetEffect();
g_ObjectManager.Delete(m_PetInfo.m_dwPetObjKey);
m_PetInfo.m_bPetSummoned = FALSE;
}
}
//------------------------------------------------------------------------------
/** ????? ????(?????????? ????????)
*/
void Player::SetPetEmotion(ePET_EFFECT eState)
{
if(!m_PetInfo.m_bPetSummoned) return;
Pet* pPet = (Pet*)g_ObjectManager.GetObject(m_PetInfo.m_dwPetObjKey);
if(pPet && pPet->IsKindOfObject(PET_OBJECT))
{
pPet->CreateInstanceEffect(eState);
}
}
//------------------------------------------------------------------------------
/** ??????? ????????
*/
void Player::SetPetAttributes(POSTYPE pos, BYTE bIsFullness, BYTE byValue)
{
if (bIsFullness)
{
m_PetInfo.PLAYER_.m_byPetFullness = byValue;
}
else
{
m_PetInfo.PLAYER_.m_byPetIntimacy = byValue;
}
Pet* pPet = (Pet*)g_ObjectManager.GetObject(m_PetInfo.m_dwPetObjKey);
if (pPet && pPet->IsKindOfObject(PET_OBJECT))
{
((bIsFullness) ? (pPet->SetFullness(byValue)) : (pPet->SetIntimacy(byValue)));
pPet->UpdatePetAttributes(FALSE);
}
}
//------------------------------------------------------------------------------
/** ??????? ????????
*/
void Player::SetPetName(TCHAR* pszName)
{
if (!pszName)
{
return;
}
StrnCopy(m_PetInfo.PLAYER_.m_sPetName ,pszName, MAX_PET_NAME_LENGTH);
Pet* pPet = (Pet*)g_ObjectManager.GetObject(m_PetInfo.m_dwPetObjKey);
//safecode:?????????????
if (pPet && pPet->IsKindOfObject(PET_OBJECT))
{
pPet->RefreshPetName();
}
}
//------------------------------------------------------------------------------
/** ??????????? ????????? ???? ????????
*/
void Player::RefreshHideState(BOOL bClear)
{
// ????? ????
if( IsHero() )
return;
//???? ??????I ??
if( GetClass() != eCHAR_SHADOW )
{
return;
}
// ?????????????
if( m_sHideInfo.NONE_HIDE != m_sHideInfo.byHideState )
{
BOOL IsHalfHide = FALSE;
if( uiPartyMan* partyMan = static_cast<uiPartyMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_PARTY)) )
{
if( partyMan->IsPartyMember( GetObjectKey() ) == true )
IsHalfHide = TRUE;
}
if( bClear )
{
IsHalfHide = FALSE;
}
// ?????? ?????? ????? ?????? ?????? ??? ??????? ????????? ??????
if( g_pHero->IsDetectingHide() == TRUE )
{
IsHalfHide = TRUE;
}
// ??????? ??????????? ????? ???????, ?? ??????? ????????? ??????
if( IsDarkofLightZoneState() == TRUE )
{
IsHalfHide = TRUE;
}
if( IsHalfHide == TRUE )
{
m_sHideInfo.byHideState;
m_sHideInfo.byHideState=m_sHideInfo.HALF_HIDE;
SetShow(TRUE);
SetShadowDraw(FALSE);
}
else
{
m_sHideInfo.byHideState=m_sHideInfo.ALL_HIDE;
SetShow(FALSE);
}
}
if(IsPetReturn())
{
if( Pet* pPet = (Pet*) g_ObjectManager.GetObject(GetPetObjectKey()) )
{
pPet->SetStatePetHide(m_sHideInfo.byHideState);
}
}
}
//------------------------------------------------------------------------------
/** ????? ????(??? or ?????????? ???)
*/
BYTE Player::GetHideCondition()
{
//0.??????? Hero????????
BYTE byHideState = IsHero() ? (m_sHideInfo.HALF_HIDE):(m_sHideInfo.ALL_HIDE);
//1.????????????(?????????? ??????)
uiPartyMan* partyMan = static_cast<uiPartyMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_PARTY));
if (partyMan && partyMan->IsPartyMember(GetObjectKey()))
{
byHideState = m_sHideInfo.HALF_HIDE;
}
//2.???????????? ???????????(??????)
if(SCENE_TYPE_DOMINATION == GameFramework::GetCurScene()
#ifdef _NA_008334_20150608_SONNENSCHEIN
|| SCENE_TYPE_SONNENSCHEIN == GameFramework::GetCurScene()
#endif //_NA_008334_20150608_SONNENSCHEIN
#ifdef _NA_008543_20151027_ONE_DAYS_GUILD_MISSION
|| SCENE_TYPE_GUILDMISSION == GameFramework::GetCurScene()
#endif //_NA_008543_20151027_ONE_DAYS_GUILD_MISSION
)
{
#ifdef _NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER
if (GuildSystem::Function::IsGuildMember(GetGuildName()) == true)
{
byHideState = m_sHideInfo.HALF_HIDE;
}
#else
uiGuildMan* pGuildMan = (uiGuildMan*)g_InterfaceManager.GetUserInterfaceManager(UIMAN_GUILD);
if(pGuildMan && pGuildMan->IsGuildMember(GetGuildName()))
{
byHideState = m_sHideInfo.HALF_HIDE;
}
#endif //_NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER
}
#ifdef _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
#ifdef _NA_007114_20140313_CHAOSZONE_GOLDRUSH
else if (GlobalFunc::IsBattleGroundScene() == TRUE ||
GlobalFunc::IsGoldRushScene() == TRUE)
#else
else if (GlobalFunc::IsBattleGroundScene() == TRUE)
#endif // _NA_007114_20140313_CHAOSZONE_GOLDRUSH
{
// ???? ????? ???????
if (IsHero() == false)
{
if (this->GetTeam() == g_pHero->GetTeam())
{
byHideState = m_sHideInfo.HALF_HIDE;
}
}
return byHideState; // ??? ?????? ???? ?????? ???? ???.. ??? ??? ????
}
#endif //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
//3.???????????? ??? ??????????????????????????.
if( IsHero() == false )
{
if( GetClass() == eCHAR_SHADOW )
{
if( g_pHero->GetClass() == eCHAR_SHADOW && GetLevel()<=g_pHero->GetLevel())
{
byHideState = m_sHideInfo.HALF_HIDE;
}
}
}
return byHideState;
}
//------------------------------------------------------------------------------
/** ??????? ?????????
0:?????????? 1:???????? 2:??????????(??? ????????)
*/
void Player::SetHideSkill(BOOL bFlag)
{
if( (GetClass()!=eCHAR_SHADOW && GetClass() != eCHAR_MYSTIC) && bFlag )
{
//safecode: ??????? ??????????? ????? ???
assert(!"???????????????:SetHideSkill");
return;
}
if(bFlag)
{
m_sHideInfo.byHideState = GetHideCondition();
if ( GetClass() == eCHAR_MYSTIC )
{
m_sHideInfo.byHideState = m_sHideInfo.ALL_HIDE;
}
if(m_sHideInfo.byHideState==m_sHideInfo.HALF_HIDE)
{
//????????
SetShadowDraw(FALSE);
}
else
{
SetShow(FALSE);
//??????? this ???????????? ???
if(g_HeroInput.GetCurrentTarget()==GetObjectKey())
{
g_HeroInput.SetCurrentTarget(0);
}
}
}
else
{
SetShadowDraw(TRUE);
m_sHideInfo.byHideReserve = FALSE;
m_sHideInfo.byHideState = m_sHideInfo.NONE_HIDE;
if(!IsObserverMode())
{
//????
if(!GetShow() || m_sHideInfo.byHideState==m_sHideInfo.HALF_HIDE)
{
SetFadeIn(1500);
}
SetShow(TRUE);
}
}
UpdateItemEffectPos(this); // SetShow() ?? ??? ????
Pet* pPet = NULL;
if(IsPetReturn())
{
pPet = (Pet*) g_ObjectManager.GetObject(GetPetObjectKey());
if(pPet)
{
pPet->SetStatePetHide(m_sHideInfo.byHideState);
}
}
}
#ifdef _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
//------------------------------------------------------------------------------
/** ???? ??????? (????? ?????? ????)
*/
void Player::SetBattleGroundHideMode(bool is_hide)
{
if (is_hide)
{
BattleGroundHideMode hide_mode = CheckBattleGroundHideMode(); // ??????????? ????????????? ??
set_battle_ground_hide_mode(hide_mode);
if (battle_ground_hide_mode() == BattleGroundHideMode_Half)
{
//????????
SetShadowDraw(FALSE);
}
else
{
SetShow(FALSE);
//??????? this ???????????? ???
if(g_HeroInput.GetCurrentTarget() == GetObjectKey())
{
g_HeroInput.SetCurrentTarget(0);
}
}
}
else
{
SetShadowDraw(TRUE);
set_battle_ground_hide_mode(BattleGroundHideMode_None);
if(!IsObserverMode())
{
//????
if(!GetShow() || (battle_ground_hide_mode() == BattleGroundHideMode_Half))
{
SetFadeIn(1500);
}
SetShow(TRUE);
}
}
Pet* pet_pointer = NULL;
if (IsPetReturn())
{
pet_pointer = static_cast<Pet*>(g_ObjectManager.GetObject(GetPetObjectKey()));
if (pet_pointer)
{
// ?? ??????? ????? ?? ?????? ?? ???. (??????? ?????????? ???? ???????)
BYTE hide_state = static_cast<BYTE>(battle_ground_hide_mode());
pet_pointer->SetStatePetHide(hide_state);
}
}
}
//------------------------------------------------------------------------------
/** ???? ??????? ?? (?????? ??????? ????????? ?????? ?????? ??)
*/
BattleGroundHideMode Player::CheckBattleGroundHideMode()
{
//0.??????? Hero????????
BattleGroundHideMode hide_mode = IsHero() ? BattleGroundHideMode_Half : BattleGroundHideMode_Full;
//1.????????????(?????????? ??????)
//uiPartyMan* party_manager = static_cast<uiPartyMan*>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_PARTY));
//if (party_manager && party_manager->IsPartyMember(GetObjectKey()))
//{
// hide_mode = BattleGroundHideMode_Half;
//}
//2.????????? ???? ??????(??????)
#ifdef _NA_007114_20140313_CHAOSZONE_GOLDRUSH
// ??????? ????? ???? ????? ???? ???? ???
if (GlobalFunc::IsBattleGroundScene() == TRUE ||
GlobalFunc::IsGoldRushScene() == TRUE)
#else
if (GlobalFunc::IsBattleGroundScene() == TRUE)
#endif // _NA_007114_20140313_CHAOSZONE_GOLDRUSH
{
// ???? ????? ???????
if (IsHero() == false)
{
//if (this->GetTeam() == g_pHero->GetTeam())
// this->GetTeam()???? ????? ???? ?? ??? ?????? ??? ??????
//
#ifdef _NA_007114_20140313_CHAOSZONE_GOLDRUSH
// ?????? ????? ????????.
int player_team = GlobalFunc::IsBattleGroundScene() ?
ChaosSystem::GetBattleGroundData().GetBattleGroundTeamForPlayerName(this->GetName()) :
ChaosSystem::GetGoldRushData().GetGoldRushTeamForPlayerName(this->GetName());
#else
int player_team =
ChaosSystem::GetBattleGroundData().GetBattleGroundTeamForPlayerName(this->GetName());
#endif // _NA_007114_20140313_CHAOSZONE_GOLDRUSH
if (player_team == g_pHero->GetTeam())
{
hide_mode = BattleGroundHideMode_Half;
}
}
}
////3.???????????? ??? ??????????????????????????.
//if( IsHero() == false )
//{
// if( GetClass() == eCHAR_SHADOW )
// {
// if( g_pHero->GetClass() == eCHAR_SHADOW && GetLevel()<=g_pHero->GetLevel())
// {
// byHideState = m_sHideInfo.HALF_HIDE;
// }
// }
//}
return hide_mode;
}
//------------------------------------------------------------------------------
/** ???? ??????? ????
*/
void Player::RefreshBattleGroundHideMode()
{
// ????? ???? ????
#ifdef _NA_007114_20140313_CHAOSZONE_GOLDRUSH
// ??????? ???? ?????? ???
if (GlobalFunc::IsBattleGroundScene() == FALSE &&
GlobalFunc::IsGoldRushScene() == FALSE)
#else
if (GlobalFunc::IsBattleGroundScene() == FALSE)
#endif // _NA_007114_20140313_CHAOSZONE_GOLDRUSH
{
return;
}
// ????? ????
if (IsHero())
{
return;
}
// ?????????????
if (battle_ground_hide_mode() != BattleGroundHideMode_None)
{
if (g_pHero && g_pHero->GetTeam() == this->GetTeam()) // ???? ?????
{
set_battle_ground_hide_mode(BattleGroundHideMode_Half);
SetShow(TRUE);
SetShadowDraw(FALSE);
}
else
{
set_battle_ground_hide_mode(BattleGroundHideMode_Full);
SetShow(FALSE);
}
}
if (IsPetReturn())
{
Pet* pet = static_cast<Pet*>(g_ObjectManager.GetObject(GetPetObjectKey()));
if (pet)
{
BYTE hide_mode = static_cast<BYTE>(battle_ground_hide_mode());
pet->SetStatePetHide(hide_mode);
}
}
}
#endif _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
//------------------------------------------------------------------------------
/** ????? ?????(start)
*/
void Player::StartExtraEffect()
{
//????????????????
if ((m_sHideInfo.byHideState == m_sHideInfo.HALF_HIDE) ||
(battle_ground_hide_mode() == BattleGroundHideMode_Half))
{
//????? ??????? ???????
CWzUnitDraw *pParts = GetBasePart();
if(pParts)
{
m_sHideInfo.eBlendMode = g_pSunRenderer->GetAlphaBlendMode();
m_sHideInfo.eRenderType = pParts->GetRenderType();
m_sHideInfo.fRefractAlpha = pParts->GetRefractionAlpha();
m_sHideInfo.fRefractRate = pParts->GetRefractionRate();
pParts->SetRefractionRate(0.1f);
pParts->SetRefractionAlpha(0.1f);
pParts->SetRenderType(AR_REFRACTION_CHAOS);
WzColor color = GetColor();
int iAlpha= 100;
if(m_bCameraAlpha && m_fAlpha<100.f)
{
iAlpha = (int)m_fAlpha;
}
SetColor(Red_WzColor(color),Green_WzColor(color),Blue_WzColor(color),iAlpha);
g_pSunRenderer->SetAlphaBlendMode( AB_LIGHTING, FALSE );
}
}
}
//------------------------------------------------------------------------------
/** ????? ?????(end)
*/
void Player::EndExtraEffect()
{
//????????????????
if ((m_sHideInfo.byHideState == m_sHideInfo.HALF_HIDE) ||
(battle_ground_hide_mode() == BattleGroundHideMode_Half))
{
//???????? ??? ???????.
CWzUnitDraw *pParts = GetBasePart();
if(pParts)
{
pParts->SetRefractionRate(m_sHideInfo.fRefractRate);
pParts->SetRefractionAlpha(m_sHideInfo.fRefractAlpha);
pParts->SetRenderType(m_sHideInfo.eRenderType);
g_pSunRenderer->SetAlphaBlendMode( m_sHideInfo.eBlendMode, FALSE );
}
}
}
//------------------------------------------------------------------------------
/** ????? ??(?????? ???? ??????I)
*/
void Player::ProcessRushClone()
{
if(this->GetClass()!=eCHAR_SHADOW || m_sHideInfo.byHideState) return;
BOOL bRet = FALSE;
switch(GetCurState())
{
case STATE::IDLE:
case STATE::DEATH:
case STATE::SKILL:
return;
}
std::vector<SKILL_EFFECT*>& array = GetSkillEffectArray();
for( size_t i=0;i!=array.size();++i)
{
SKILL_EFFECT* pEffect = array[i];
if (pEffect->dwStatusID == eCHAR_STATE_FETTER)
return;
if (pEffect->dwStatusID == eCHAR_STATE_RUSH)
{
//?????????? ???????.
static DWORD dwCopytime = 0;
//150?????? ????
if(g_CurTime-dwCopytime>240)
{
CloneEffect(400,1000,1);
dwCopytime = g_CurTime;
}
return;
}
}
}
//==================================================
// 0905??????? ??
//==================================================
//------------------------------------------------------------------------------
/** ?? ???? ????
*/
void Player::SetPlayerPetInfo( PLAYER_RENDER_INFO_EX *pPlayerInfo)
{
if (!pPlayerInfo)
{
return;
}
//?????????? ???????
if (pPlayerInfo->is_summoned_pet)
{
CreatePetSummon(pPlayerInfo->pet_index);
SetPetAttributes(0,TRUE,pPlayerInfo->pet_fullness); //??????
SetPetAttributes(0,FALSE,pPlayerInfo->pet_intimacy); //?????
ZeroMemory(m_PetInfo.PLAYER_.m_sPetName, sizeof(m_PetInfo.PLAYER_.m_sPetName));
//??????? ???????
if (pPlayerInfo->pet_name[0] != '\0')
{
SetPetNameUse(1); //?????????
SetPetName(pPlayerInfo->pet_name);
}
else
{
SetPetNameUse(0); //????????
}
}
m_PetInfo.m_bPetSummoned = pPlayerInfo->is_summoned_pet;
}
//------------------------------------------------------------------------------
/** ??????? ????????
*/
void Player::SetPlayerInfo(PLAYER_RENDER_INFO_EX* pPlayerInfo)
{
ZeroMemory(GetCharInfo(),sizeof(BASE_PLAYERINFO));
DelayLoadManager::Instance()->InsertPlayer(GetObjectKey());
GetCharInfo()->m_byClassCode = pPlayerInfo->char_class;
GetCharInfo()->gender = pPlayerInfo->gender;
if( pPlayerInfo->GetChangeOfClassSteps() == eSPECIAL_RENDER_EFFECT_CHANGEofCLASS_1st )
GetCharInfo()->SetChangeOfClass( (eCHAREX_TYPE) (pPlayerInfo->char_class +10) );
else
GetCharInfo()->SetChangeOfClass( (eCHAREX_TYPE) pPlayerInfo->char_class);
GetCharInfo()->m_LV = pPlayerInfo->level;
GetCharInfo()->m_iHP = pPlayerInfo->hp;
GetCharInfo()->m_iMaxHP = pPlayerInfo->max_hp;
SetCurrentAttackStyle( pPlayerInfo->selected_style_code );
m_wAttSpeedRatio = pPlayerInfo->attack_speed_ratio;
m_bHPInfo = TRUE;
if(TRUE == pPlayerInfo->collection_render_info.m_bUseCollectRanderInfo)
{
DWORD collect_progress_time = 0; // ??? ??????? (????? ???????????? ??)
const CollectionInfo* collection_info =
CollectionParser::Instance()->FindCollectionInfo(pPlayerInfo->collection_render_info.m_CollectionID);
if (collection_info)
{
collect_progress_time =
collection_info->m_dwCollectingTime - pPlayerInfo->collection_render_info.m_dwRemainTime;
}
DoCollect(pPlayerInfo->collection_render_info.m_dwObjectKey
, pPlayerInfo->collection_render_info.m_CollectionID
, collect_progress_time);
}
SetRindingState(pPlayerInfo->is_riding);
if (m_pRiderContainer && pPlayerInfo->is_riding)
{
//????? ??????????.
SCItemSlot ItemSlot;
ItemSlot.Copy(pPlayerInfo->rider_item_slot);
DWORD dwRiderCode = m_pRiderContainer->CopyItem(ItemSlot);
if(dwRiderCode!=0)
{
CreateRider(dwRiderCode);
}
}
if (rider() != NULL)
{
set_spread_wings(false);
rider()->set_spread(pPlayerInfo->spread_wings != 0);
}
else
{
set_spread_wings((pPlayerInfo->spread_wings != 0));
}
SetName(pPlayerInfo->char_name);
#ifdef _NA_003027_20111013_HONOR_SYSTEM
SetTitleName(pPlayerInfo->honor_title);
#endif //_NA_003027_20111013_HONOR_SYSTEM
m_wMoveSpeedRatio = pPlayerInfo->move_speed_ratio;
m_bAttackBeginPlayer = pPlayerInfo->boradori;
GetCharInfo()->m_ChaoState = pPlayerInfo->chao_state;
m_EtherIndex = pPlayerInfo->ether_device_index;
SetGMGrade(pPlayerInfo->gm_grade);
SetBeHaveState((ePLAYER_BEHAVE_STATE)pPlayerInfo->behave_state);
SetPCBangMode(pPlayerInfo->pcroom);
SetHP( GetCharInfo()->m_iHP );
SetCondition(pPlayerInfo->char_condition);
BOOL bIsHero = FALSE;
if( g_pHero )
{
bIsHero = ( g_pHero->GetObjectKey() == this->GetObjectKey() );
uiGuideSystemMan* guide_manager =
static_cast<uiGuideSystemMan*>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_GUIDE_SYSTEM));
if (bIsHero && guide_manager)
{
//eCHAO_STATE_NORMAL:???, eCHAO_STATE_PREV_CHAO:???? ???, eCHAO_STATE_CHAO:???
switch (pPlayerInfo->chao_state)
{
case eCHAO_STATE_PREV_CHAO:
guide_manager->CheckHelpMessage(TotalGuideNotice::kFreeChaos);
break;
case eCHAO_STATE_CHAO:
guide_manager->CheckHelpMessage(TotalGuideNotice::kChaos);
break;
}
}
}
//Todo:???? ???????? Player?? ??????????
#ifdef _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
switch (pPlayerInfo->transparent)
{
case 3:
{
SetBattleGroundHideMode(true);
}
break;
case 2:
{
#ifdef _DEV_VER
//safecode: ??????? ??????????? ????? ???
if(this->GetClass()!=eCHAR_SHADOW)
{
assert(!"?????? ?????????:SetPlayerInfo");
}
#endif//_DEV_VER
SetHideSkill(TRUE);
}
break;
default:
{
this->SetObserverMode( pPlayerInfo->transparent, bIsHero );
}
break;
}
#else //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
if (pPlayerInfo->transparent==2)
{
#ifdef _DEV_VER
//safecode: ??????? ??????????? ????? ???
if(this->GetClass()!=eCHAR_SHADOW)
{
assert(!"?????? ?????????:SetPlayerInfo");
}
#endif//_DEV_VER
SetHideSkill(TRUE);
}
else
{
this->SetObserverMode( pPlayerInfo->transparent, bIsHero );
}
#endif //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
//m_pPlayerAttriburtes->SetCharInfo( GetCharInfo(),0,0,0);
SetPartVariation(PLAYER_VARIATION_HAIR,pPlayerInfo->hair_style);
SetPartVariation(PLAYER_VARIATION_FACE,pPlayerInfo->face);
SetHeightVariation(pPlayerInfo->height);
SetStateTotalInfo(pPlayerInfo->state_total_info);
SetPlayerPetInfo(pPlayerInfo);
#ifdef _NA_004035_20120227_COSTUME_ITEM
SetCostumeItemCode( pPlayerInfo->is_equipped_costume ? pPlayerInfo->costume_item_code : 0 );
#endif//_NA_004035_20120227_COSTUME_ITEM
#ifdef _NA_008633_20160104_ADD_DECORATECOSTUME
SetDecorateCostumeItemCode( pPlayerInfo->is_equipped_decorate_costume ? pPlayerInfo->decorate_costume_item_code : 0);
#endif // _NA_008633_20160104_ADD_DECORATECOSTUME
#ifdef _NA_008069_20150210_ADD_SPA_SYSTEM
SetSpecialSceneItemCode(pPlayerInfo->special_scene_item_code);
#endif //_NA_008069_20150210_ADD_SPA_SYSTEM
#ifdef _NA_000000_20130206_BROADCAST_ITEM_SCORE
m_ItemScore = (int)pPlayerInfo->total_item_score_;
#endif // _NA_000000_20130206_BROADCAST_ITEM_SCORE
}
void Player::DoCollect(DWORD dwTargetKey, DWORD dwCollectionID, DWORD dwTime)
{
PLAYER_ACTION action;
ZeroMemory(&action,sizeof(action));
action.ActionID = ACTION_COLLECTION_OBJECT;
action.COLLECTOBJECT.dwTargetID = dwTargetKey;
Object* map_object = g_ObjectManager.GetObject(dwTargetKey);
if (map_object != NULL)
{
this->SetDirection(map_object->GetVisiblePos());
}
SetCollectObjKey(dwTargetKey);
SetCollectID(dwCollectionID);
SetCollectStartTime(dwTime);
DoAction(&action);
#ifdef _DEV_VER
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, _T("Player::DoCollect() %s,%d"), GetName(), dwTime);
#endif
}
//------------------------------------------------------------------------------
/**
*/
void Player::ValkyrieShot(DWORD dwAttackSerial)
{
HideAttachment(FALSE);
SetAttackStandTime(ATTACK_STAND_TIME);
m_fValkyrieShotSpeed = GetAttackSpeedModifier();
SetCurrentBlendAnimation(GetValkyrieShotAnimation(),GetShotBlendBone(),m_fValkyrieShotSpeed,0);
OpenCrossbow();
// ???? ????? ???? ????? ????? ?????.
if (m_dwValkyrieShotSerial)
{
ProcessAttackResult(m_dwValkyrieShotSerial,TRUE);
m_dwValkyrieShotSerial = 0;
}
WzAnimationInfo *pAniInfo = NULL;
if (GetBasePart()->GetWzUnit() != NULL)
{
pAniInfo = GetBasePart()->GetWzUnit()->GetAnimationInfo(GetValkyrieShotAnimation());
}
m_dwValkyrieShotSerial = dwAttackSerial;
if( pAniInfo )
{
m_iValkyrieShotDelay = (int)((float)pAniInfo->m_nMaxFrame * 33.0f / m_fValkyrieShotSpeed);
}
else
{
m_iValkyrieShotDelay = 500; // ???? ??? ????.
}
m_iValkyrieShotDelayTime = m_iValkyrieShotDelay;
m_iValkyrieShotCount = 0;
m_iValkyrieShotRemain = 2;
m_bValkyrieReload = FALSE;
}
//------------------------------------------------------------------------------
/**
*/
BOOL Player::CanValkyrieAction()
{
// ??? ???????!
if( g_HeroInput.IsIdleState() || GetCurState() == STATE::KEYBOARDMOVE || GetCurState() == STATE::MOVE )
{
return TRUE;
}
return FALSE;
}
//------------------------------------------------------------------------------
/** ?? ????
*/
void Player::RefreshAppearPet()
{
if (IsPetReturn() == FALSE)
{
return;
}
Pet* pet_info = static_cast<Pet*>(g_ObjectManager.GetObject(m_PetInfo.m_dwPetObjKey));
if (pet_info)
{
pet_info->RefreshApperPet(this);
}
}
//------------------------------------------------------------------------------
/** ????? ????
*/
void Player::RefreshAppearRider()
{
if (IsRiding() == FALSE)
{
return;
}
//????? ????? ????? ????????????
if (m_pRider->RefreshApperRider(this))
{
RefreshRider();
}
}
//------------------------------------------------------------------------------
/**
*/
BOOL Player::Process(DWORD dwTick)
{
g_dwCharProcessCount++;
if (GENERALPARAM->GetSpecialMode() && GENERALPARAM->IsNet()==FALSE && g_bPlayerAutoMove)
{
if((g_pHero != this) && (this->GetCurState() == STATE::IDLE) && (this->IsMove() == FALSE) && ((rand()%700) == 1))
{
float fAngle = (rand() % 628) / 100.0f;
ClampAngle(&fAngle);
WzVector vDirection;
vDirection.x = sin(fAngle);
vDirection.y = -cos(fAngle);
vDirection.z = 0.0f;
float fRate=5.0f;
fRate+=rand()%30;
vDirection*=fRate;
WzVector vPos=g_pHero->GetPosition()+vDirection;
vPos.z+=3.0;
int iTileFocussing = -1;
float fT=0.0f;
iTileFocussing = g_pSunTerrain->x_pPathFinder->GetTileToStand( vPos, &fT, -1.0f, 10.0f );
if(iTileFocussing >= 0)
{
vPos.z-=fT;
PLAYER_ACTION action;
ZeroMemory(&action,sizeof(action));
action.ActionID = ACTION_MOVE;
action.MOVE.byState =CMS_RUN ;
action.MOVE.bThrust = FALSE;
action.MOVE.vCurPos.wvPos = this->GetPosition();
action.MOVE.vCurPos.wTile = -1;
action.MOVE.vDestPos.wvPos = vPos;
action.MOVE.vDestPos.wTile = -1;
PutAction(&action);
}
}
}
BeforeRefreshTileAtt();
if (GENERALPARAM->GetSpecialMode())
{
int y=0;
if(this->GetChaoState()==eCHAO_STATE_PREV_CHAO)
{
y+=1;
RenderTextOnHead(_T("???????"),m_RenderinfoColor,y,TRUE);
}
if(this->IsAttackBeginPlayer())
{
y+=1;
RenderTextOnHead(_T("??????"),m_RenderinfoColor,y,TRUE);
}
if(this->GetChaoState()==eCHAO_STATE_CHAO)
{
y+=1;
RenderTextOnHead(_T("???"),m_RenderinfoColor,y,TRUE);
}
}
if (GetClass() == eCHAR_VALKYRIE)
{
ProcessValkyrieShot(dwTick);
}
//?????? ?????? ??????? ?????.
if(m_bInvincible && m_iInvicibleTime)
{
m_iInvicibleTime -= dwTick;
if(m_iInvicibleTime <= 0)
{
m_iInvicibleTime=0;
m_bInvincible=FALSE;
}
}
m_dwShieldTime-=dwTick;
m_dwShieldTime=max(m_dwShieldTime,0);
// ?????????? 0.5????? ????????????.
// ????????????? ????? ????
// 0x00000033?? ????? ?????? ??? ????? ??? flag??
if ( GetCurState() == STATE::MOVE ||
(GetCurState() == STATE::KEYBOARDMOVE && GetMoveFlag() & KEYBOARDMOVE_ISMOVING) )
{
m_dwDustTime += dwTick;
}
else
{
m_dwDustTime = 0;
}
if (m_dwDustTime >= 500)
{
m_dwDustTime = 0;
}
BOOL bRet = Character::Process(dwTick);
ProcessSummonIntensifyEffect();
AfterRefreshTileAtt();
// ????? ???? ???? - ??? ?? ??????
if (false == domination_effect_list_.empty())
{
// ????? ???
WzVector world_pos;
WzMatrix position_matrix, rotation_matrix, temp_matrix;
WzVector picked_position;
float rotation_angle = 0.0f;
GameFunc::PickTerrainMesh(GetVisiblePos(), picked_position, TMGO_NO_COLLISION, 0.5f);
MatrixIdentity(&temp_matrix);
VectorTransformCoord(&world_pos, &picked_position, &temp_matrix);
MatrixTranslation(&position_matrix, world_pos.x, world_pos.y, world_pos.z);
BYTE hide_condition = GetHideSkill();
bool is_show_effect = (GetShow() &&
IsShowByGameOption() &&
hide_condition != HIDE_SKILL_INFO::ALL_HIDE &&
BattleScene::GetScreenShotState() != eSCREEN_SHOT_NOT_UI_AND_HERO);
std::list<HANDLE>::iterator itr = domination_effect_list_.begin();
std::list<HANDLE>::iterator itr_end = domination_effect_list_.end();
CEffectBody* effectbody = NULL;
for ( ; itr != itr_end; ++itr)
{
if (INVALID_HANDLE_VALUE != (*itr))
{
effectbody = g_pEffectManager->GetEffectPtrHandle((*itr));
if (INVALID_HANDLE_VALUE != effectbody && NULL != effectbody)
{
WzID effect_id = effectbody->GetBodyID();
if (effect_id == StrToWzID("I710"))
{
// ?? ??????? 35?? ???????? ????
rotation_angle += PI * (35.0f / 180.0f);
MatrixRotationZ(&rotation_matrix, rotation_angle);
}
else
{
MatrixIdentity(&rotation_matrix);
}
effectbody->SetShow(is_show_effect);
effectbody->SetResultMatrix(&position_matrix, &rotation_matrix, NULL);
}
}
}
}
#ifdef _NA_008016_20150203_SUN_RANKING_SYSTEM_GRADE
UpdatePlayerRankingEffect();
#endif // _NA_008016_20150203_SUN_RANKING_SYSTEM_GRADE
return bRet;
}
//------------------------------------------------------------------------------
/**
*/
int Player::DoAction(PLAYER_ACTION *pAction)
{
SetCurrentAction(pAction);
PLAYER_ACTION idleaction;
idleaction.ActionID = ACTION_IDLE;
idleaction.IDLE.vCurPos = GetPosition();
switch(pAction->ActionID)
{
case ACTION_ATTACK:
{
Character *pTarget = (Character *)g_ObjectManager.GetObject(pAction->ATTACK.dwTargetID);
StopMove();
if (pTarget)
{
if (pAction->ATTACK.bAttackMove)
{
SetPosition(pAction->ATTACK.vCurPos);
SetAttackMovePath(pAction->ATTACK.vCurPos,pAction->ATTACK.vDestPos);
SetAttackMove(TRUE);
}
else
{
SetAttackMove(FALSE);
SetPosition(pAction->ATTACK.vCurPos);
}
SetInterpolatePosition();
SetTargetID(pTarget->GetObjectKey());
SetAttackSequence((eATTACK_SEQUENCE)pAction->ATTACK.byAttackType);
#ifdef _NA003109_STYLE_PRESENTATION_IMPROVEMENT
NormalAttack.ani_type = pAction->ATTACK.style_presentation;
#endif //_NA003109_STYLE_PRESENTATION_IMPROVEMENT
SetNextActionAttackSerial(pAction->ATTACK.dwAttackSerial);
SetNextState(STATE::ATTACK,g_CurTime);
return 1;
}
// ???????? ????~
else
{
// ???? ????? ??????
ProcessAttackResult(pAction->ATTACK.dwAttackSerial,TRUE);
// ????~
SetCurrentAction(&idleaction);
SetNextState(STATE::IDLE,g_CurTime);
return 0;
}
}
break;
// ???~
case ACTION_MOVE:
{
StopMove();
SetNextMove(pAction->MOVE.vCurPos.wvPos,pAction->MOVE.vDestPos.wvPos,pAction->MOVE.byState,pAction->MOVE.bThrust,pAction->MOVE.vCurPos.wTile,pAction->MOVE.vDestPos.wTile);
SetPosition(pAction->MOVE.vCurPos.wvPos,pAction->MOVE.vCurPos.wTile);
SetInterpolatePosition();
SetNextState(STATE::MOVE,g_CurTime);
return 1;
}
break;
case ACTION_TRANSFORM:
{
StopMove();
GetTransformData().SetTransFormResourceCode(pAction->TRANSFORM.rcCode);
GetTransformData().SetTransFormType(pAction->TRANSFORM.transFormType);
GetTransformData().SetTransFormProcessType(pAction->TRANSFORM.transFormProcess);
GetTransformData().SetAppearanceKind(pAction->TRANSFORM.appearKind);
SetNextState(STATE::TRANSFORM,g_CurTime);
return 1;
}
break;
case ACTION_FALLDOWN:
{
StopMove();
SetNextState(STATE::FALL_DOWN,g_CurTime);
return 1;
}
break;
case ACTION_AIR_FALLDOWN:
{
StopMove();
SetNextState( STATE::AIR_FALL_DOWN, g_CurTime );
return 1;
}
break;
case ACTION_KEYBOARDMOVE:
{
StopMove();
SetPosition(pAction->KEYBOARDMOVE.vKeyboardCurPos);
SetInterpolatePosition();
SetAngle(pAction->KEYBOARDMOVE.fKeyboardAngle);
SetMoveFlag(pAction->KEYBOARDMOVE.byKeyboardState);
SetNextState(STATE::KEYBOARDMOVE,g_CurTime);
return 1;
}
break;
case ACTION_SPECIAL_MOVE:
{
StopMove();
SetPosition(pAction->SPECIALMOVE.vCurPos);
SetInterpolatePosition();
SetAngle(pAction->SPECIALMOVE.fAngle,TRUE);// ??? ????? ??? ??????.
SetSpecialMoveFlag(pAction->SPECIALMOVE.bType);
SetNextState(STATE::SPECIALMOVE,g_CurTime);
return 1;
}
break;
case ACTION_KEYBOARDJUMP:
{
#ifdef _NA_20120220_JUMP_RENEWAL
GameFunc::PickTerrainMesh(pAction->KEYBAORDJUMP.vDest,m_JumpData.m_vJumpTargetPosition);
m_JumpData.m_JumpFlag.SetMoveFlag( pAction->KEYBAORDJUMP.iJumpFlag );
m_JumpData.m_vJumpStartPosition = GetVisiblePos();
#else
GameFunc::PickTerrainMesh(pAction->KEYBAORDJUMP.vDest, m_JumpData.m_JumpTargetPosition );
m_JumpData.m_JumpStartPosition = GetVisiblePos();
#endif
StopMove();
SetNextState(STATE::KEYBOARDJUMP,g_CurTime);
return 1;
}
break;
case ACTION_SKILL:
{
Character *pTarget = (Character *)g_ObjectManager.GetObject(pAction->SKILL.dwTargetID);
StopMove();
if (pTarget)
{
SetCurrentAction(pAction);
SetNextActionAttackSerial(pAction->ATTACK.dwAttackSerial);
SetTargetID(pAction->SKILL.dwTargetID);
SetDirection( pTarget->GetVisiblePos() );
UseSkill(pAction->SKILL.dwSkillID);
return 1;
}
// ???????? ????~
else
{
// ???? ????? ??????
ProcessAttackResult(pAction->SKILL.dwAttackSerial,TRUE);
// ????~
SetNextState(STATE::IDLE,g_CurTime);
SetCurrentAction(&idleaction);
return 0;
}
}
break;
case ACTION_TELEPORT:
{
GlobalFunc::CreateEffectBeUpToOption(StrToWzID("k470"),GetVisiblePos(),GetObjectKey());
StopMove();
WzVector vPos=pAction->TELEPORT.vDest;
SetDestWarp(vPos);//?????? ????? ???? ??? ?????? ??????? ????? ????
SetPosition(vPos);
SetDirection( vPos, TRUE);
}
break;
case ACTION_KNOCKBACK:
{
StopMove();
SetNextState(STATE::DAMAGE,g_CurTime);
return 1;
}
break;
case ACTION_TOAIR:
{
StopMove();
//TOAIR_INFO info;
//info.bGroundHit = FALSE;
//info.fDownForceLimit = pAction->TOAIR.fDownForceLimit;
//info.fGravity = pAction->TOAIR.fGravity;
//info.fHeightLimit = pAction->TOAIR.fHeightLimit;
//info.fUpperForce = pAction->TOAIR.fUpperForce;
//info.iBoundCount = 0;
//info.bForceDown= pAction->TOAIR.bForceDown;
//ToAirInfo(&info);
SetNextState(STATE::AIR,g_CurTime);
return 1;
}
break;
case ACTION_DOWN:
{
StopMove();
SetNextState(STATE::DOWN,g_CurTime);
return 1;
}
break;
case ACTION_GETUP:
{
StopMove();
SetNextState(STATE::GETUP,g_CurTime);
return 1;
}
break;
case ACTION_SIT:
{
StopMove();
SetNextState(STATE::SIT,g_CurTime);
return 1;
}
break;
case ACTION_EVENTJUMP:
{
StopMove();
SetNextState(STATE::EVENTJUMP,g_CurTime);
return 1;
}
break;
case ACTION_STOP:
{
StopMove();
SetPosition(pAction->STOP.vCurPos);
SetNextState(STATE::IDLE,g_CurTime);
return 1;
}
break;
case ACTION_NPCMEET:
{
SetNextState(STATE::NPC_RESPONSE_STATE, g_CurTime);
return 1;
}
break;
case ACTION_VENDORMEET:
{
return 1;
}
break;
case ACTION_FIRECRACKER:
{
StopMove();
SetNextState(STATE::FIRECRACKER, g_CurTime);
return 1;
}
break;
case ACTION_COLLECTION_OBJECT:
{
if(STATE::COLLECT != GetCurState())
{
StopMove();
SetNextState(STATE::COLLECT, g_CurTime);
CommitChangeState(g_CurTime);
}
return 1;
}
break;
case ACTION_SUMMON_RIDER:
{
if(STATE::SUMMON_RIDER != GetCurState())
{
StopMove();
SetNextState(STATE::SUMMON_RIDER, g_CurTime);
}
return 1;
}
break;
case ACTION_ETHERIA_EXTRACT:
{
if (STATE::ETHERIA_EXTRACT != GetCurState())
{
StopMove();
SetNextState(STATE::ETHERIA_EXTRACT, g_CurTime);
}
return 1;
}
break;
case ACTION_WINGS_SPREAD:
{
if(STATE::WINGS_SPREAD != GetCurState())
{
StopMove();
SetNextState(STATE::WINGS_SPREAD, g_CurTime);
}
return 1;
}
break;
case ACTION_WINGS_FURL:
{
if(STATE::WINGS_FURL != GetCurState())
{
StopMove();
SetNextState(STATE::WINGS_FURL, g_CurTime);
}
return 1;
}
break;
case ACTION_RIDER_SPREAD:
{
if(STATE::RIDER_SPREAD != GetCurState())
{
StopMove();
SetNextState(STATE::RIDER_SPREAD, g_CurTime);
}
return 1;
}
break;
case ACTION_RIDER_FURL:
{
if(STATE::RIDER_FURL != GetCurState())
{
StopMove();
SetNextState(STATE::RIDER_FURL, g_CurTime);
}
return 1;
}
break;
#ifdef _NA_008016_20150203_SUN_RANKING_SYSTEM_STATUE
case ACTION_STATUE_STAND:
{
if (STATE::STATUE_STAND != GetCurState())
{
StopMove();
SetNextState(STATE::STATUE_STAND, g_CurTime);
}
return 1;
}
#endif // _NA_008016_20150203_SUN_RANKING_SYSTEM_STATUE
default:
{
assert(!"Character::DoNextAction() ??????? ???? ? ????");
break;
}
}
SetCurrentAction(&idleaction);
SetNextState(STATE::IDLE,g_CurTime);
return 0;
}
//------------------------------------------------------------------------------
/**
*/
int Player::GetValkyrieShotDelay()
{
return m_iValkyrieShotDelay;
}
//------------------------------------------------------------------------------
/**
*/
DWORD Player::GetCurrentAttackStyle()
{
return GetCharInfo()->m_iSelectStyleCode;
}
//------------------------------------------------------------------------------
/**
*/
BOOL Player::CheckChangeAttackStyle( DWORD dwStyle )
{
TCHAR szMessage[INTERFACE_STRING_LENGTH];
BASE_STYLEINFO* pInfo = SkillInfoParser::Instance()->GetStyleInfo((SLOTCODE)dwStyle);
if(pInfo==NULL)
{
// ???? ???? ??? ????? ????
g_InterfaceManager.GetInterfaceString( eST_NOT_EXIST_STYLE, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
return FALSE;
}
//?????? ??
BASE_PLAYERINFO* bp = GetCharInfo();
if(bp==NULL)
{
// ??????? ?????? ?????? ?????? ???????.
g_InterfaceManager.GetInterfaceString( eST_NOT_CHARACTER_INFO_FOR_STYLE, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
return FALSE;
}
if( IsTransForm() && GetTransformData().GetTransFormType() != pInfo->m_byClassDefine )
{
g_InterfaceManager.GetInterfaceString( eST_NOT_APPLY_STYLE, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
return FALSE;
}
else if(bp->m_byClassCode!=pInfo->m_byClassDefine)
{
// ??? ??????? ?????? ?? ???? ?????????.
g_InterfaceManager.GetInterfaceString( eST_NOT_APPLY_STYLE, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
return FALSE;
}
//???? ??
if(GetWeaponKind()!=pInfo->m_iWeaponDefine)
{
// ????? ??????? ??????? ??????.
g_InterfaceManager.GetInterfaceString( eST_NOT_STYLE_FOR_WEAPON, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
return FALSE;
}
return TRUE;
}
//------------------------------------------------------------------------------
/**
Todo:??? ?????? ???? ???????? ??? ?? ??? ????? ?????.
,????? ???? ????????? ???? ???? ????? ?????? ???? ???.
,???? ?????? ????? ??????? ??? ???? ???? ???? ????? ???? ?????? ??? ???.(????? ?????? ???? ???????)
??????? ????? ???? ???? ???? Think.??? ??????.??? ?????? ???? ??? ???....
*/
BOOL Player::SetCurrentAttackStyle(DWORD dwStyle)
{
if( IsMyHero() == TRUE )
{
// ??? ??????? ????? ???? ???????
if( GetCurrentAttackStyle() != dwStyle )
{
g_HeroInput.SetComboReset();
}
}
GetCharInfo()->m_iSelectStyleCode = dwStyle;
return TRUE;
}
//------------------------------------------------------------------------------
/**
???? ????? ??????? ???? ???? ????? ???? ???? ???
*/
BOOL Player::CheckAttackStyle(DWORD dwStyle)
{
BASE_STYLEINFO *pInfo = SkillInfoParser::Instance()->GetStyleInfo((SLOTCODE)dwStyle);
//???? ???? ??? ?????
if(pInfo==NULL)
{
return FALSE;
}
else if(pInfo->m_iWeaponDefine==GetWeaponKind())
{
return TRUE;
}
return FALSE;
}
//------------------------------------------------------------------------------
/**
???? ????? ???? ???? ??????? ??? ???.
*/
BOOL Player::CheckStyleForWeapon(DWORD dwWeaponType)
{
DWORD dwStyle =this->GetCurrentAttackStyle();
BASE_STYLEINFO *pInfo = SkillInfoParser::Instance()->GetStyleInfo((SLOTCODE)dwStyle);
//????? ?????? ????.
if(pInfo==NULL)
{
this->SetCurrentNomalAttackStyle(dwWeaponType);//????? ???? ????
return FALSE;
}
else if(pInfo->m_iWeaponDefine!=dwWeaponType) //????? ??????? ??????
{
this->SetCurrentNomalAttackStyle(dwWeaponType);//????? ???? ????
return FALSE;
}
return TRUE;
}
//------------------------------------------------------------------------------
/**
*/
WzVector Player::GetWeaponBonePos(int index)
{
int boneindex = GetWeaponBone(index);
WzVector ret;
ZeroMemory(&ret,sizeof(ret));
ret = GetBonePos(boneindex);
return ret;
}
//------------------------------------------------------------------------------
/**
*/
void Player::ProcessValkyrieShot(DWORD dwTick)
{
const float fTrailHeight = 0.03f;
const DWORD dwShotLifeTime = 500;
const float fCrossBowShotFrame1 = m_iValkyrieShotDelayTime - ((2.8f * 33) / m_fValkyrieShotSpeed);
const float fCrossBowShotFrame2 = m_iValkyrieShotDelayTime - ((5.3f * 33) / m_fValkyrieShotSpeed);
const int VALKYRIE_SHOT_SOUND1 = 408;
const int VALKYRIE_SHOT_SOUND2 = 409;
if (m_iValkyrieShotDelay > 0) {
m_iValkyrieShotDelay -= dwTick;
if (m_iValkyrieShotDelay < fCrossBowShotFrame1)
{
if (m_iValkyrieShotRemain >= 2)
{
g_SoundEffect.Play(VALKYRIE_SHOT_SOUND1,&GetVisiblePos());
WzVector StartPosition = GetArrowBonePos(0);
cProjectileUnit* pProjectile = new cProjectileUnit();
pProjectile->SetLifeTime( 500 );
pProjectile->SetArrowStartPosition( StartPosition );
if( Character* pTarget = (Character*)g_ObjectManager.GetObject(GetLockedTarget()) )
pProjectile->SetArrowTargetObjectKey( pTarget->GetObjectKey(), TRUE );
else
pProjectile->SetArrowTargetPosition( StartPosition + GetDirection() * 4.0f );
pProjectile->SetUnitCode( eProjectile_SRC_ARROW );
pProjectile->CreateTrail( g_ProjectileManagerEx.GetTrailTexture(), 0.03f, 0.8f, 100, 150, 255 );
pProjectile->SetHitData( GetObjectKey(), m_dwValkyrieShotSerial, 0, FALSE, 0, FALSE );
ShotCrossbow();
m_iValkyrieShotRemain--;
}
}
if (m_iValkyrieShotDelay < fCrossBowShotFrame2)
{
if (m_iValkyrieShotRemain >= 1)
{
g_SoundEffect.Play(VALKYRIE_SHOT_SOUND2,&GetVisiblePos());
WzVector StartPosition = GetWeaponKind() == eWEAPONTYPE_ONEHANDCROSSBOW ? GetArrowBonePos(1) : GetArrowBonePos(0);
cProjectileUnit* pProjectile = new cProjectileUnit();
pProjectile->SetLifeTime( 500 );
pProjectile->SetArrowStartPosition( StartPosition );
if( Character* pTarget = (Character*)g_ObjectManager.GetObject(GetLockedTarget()) )
pProjectile->SetArrowTargetObjectKey( pTarget->GetObjectKey(), TRUE );
else
pProjectile->SetArrowTargetPosition( StartPosition + GetDirection() * 4.0f );
pProjectile->SetUnitCode( eProjectile_SRC_ARROW );
pProjectile->CreateTrail( g_ProjectileManagerEx.GetTrailTexture(), 0.03f, 0.8f, 100, 150, 255 );
pProjectile->SetHitData( GetObjectKey(), m_dwValkyrieShotSerial, 0, FALSE, 0, FALSE );
ShotCrossbow();
m_iValkyrieShotRemain--;
}
}
if (m_iValkyrieShotDelay <= 0)
{
m_iValkyrieShotDelay = 0;
m_dwValkyrieShotSerial = 0;
CloseCrossbow();
// ????????? ?????? ?????? ??????? ??????.
if (g_pHero && g_pHero->GetObjectKey() != GetObjectKey())
{
LockOn(0);
}
}
}
}
//
//#ifdef __NA_0_20080415_PROCESS_END_PROECSS
//int Player::OnEndProcess( DWORD dwTick )
//{
// std::vector<sAttachEffectForSetItem>* effect_attach_info_ptr = GetFullsetEffectAttachInfo();
// if (effect_attach_info_ptr != NULL)
// {
// std::vector<sAttachEffectForSetItem>& effect_attach_info_ref = (*effect_attach_info_ptr);
// int iSize = effect_attach_info_ref.size();
// for( int i = 0; i < iSize; ++i )
// {
// if (effect_attach_info_ref[i].m_hEffectHandle == INVALID_HANDLE_VALUE)
// {
// continue;
// }
//
//
// CEffectBody *pBody =
// g_pEffectManager->GetEffectPtrHandle(effect_attach_info_ref[i].m_hEffectHandle);
// if(pBody)
// {
// if(GetShow()&&Alpha_WzColor(GetColor())>0.0f&&GetCurShowFlag())
// pBody->SetShow(TRUE);
// else
// pBody->SetShow(FALSE);
// }
// }
// }
//
// for (int a = 0; a < eITEM_EFFECT_TYPE_MAX; a++)
// {
// ITEM_EFFECT_PARAM effect_param;
// GetItemEffectParam(a, effect_param);
//
// if (effect_param.hEffect != INVALID_HANDLE_VALUE)
// {
// CEffectBody* pBody = g_pEffectManager->GetEffectPtrHandle(effect_param.hEffect);
// if(pBody)
// {
// if(GetShow()&&Alpha_WzColor(GetColor())>0.0f&&GetCurShowFlag())
// pBody->SetShow(TRUE);
// else
// pBody->SetShow(FALSE);
// }
// }
// }
//
//
// for( int col =0; col < 2; ++col)
// {
// for( int row =0; row < 3; ++row)
// {
// if( m_hEtherWeaponEffect[col][row] != INVALID_HANDLE_VALUE )
// {
// CEffectBody * pBody = g_pEffectManager->GetEffectPtrHandle(m_hEtherWeaponEffect[col][row]);
// if( !pBody) continue;
//
// if(GetShow()&&Alpha_WzColor(GetColor())>0.0f&&GetCurShowFlag())
// pBody->SetShow(TRUE);
// else
// pBody->SetShow(FALSE);
// }
// }
// }
//
//
// return 0;
//}
//#endif
//------------------------------------------------------------------------------
/**
*/
DWORD Player::GetValkyrieShotSerial()
{
return m_dwValkyrieShotSerial;
}
//------------------------------------------------------------------------------
/**
???? ?????? ???? ?????????? ??????? ???? ?????????? ???????????
???????? ??????? ???????? ???????? ??? ????? ???????????
?????? ???? ??????? ???? ???? bRight????? ????
*/
void Player::PlayDamageAnimation(BOOL bRight,BOOL bCritical)
{
// ???????? ????????? Idle?????????
// ???? ?????? ???
WzID damageAnimation = 0;
BOOL bAniCritcal = FALSE;
// ????? ? ?????????? ?????? ????????? ??????? ?????.
// ?????? ?????? ????????? ??? ????? ???? ????????? ??? ??????
// ????? ? ???????? ??????? ????????? ???? ??? ???? ????? ???.
//bCritical = (bCritical && (IsRiding() == FALSE)) ? TRUE : FALSE;
if (IsRiding() || is_spread_wings())
{
bCritical = FALSE;
}
//else
//{
// bCritical = TRUE;
//}
if (bCritical)
{
if (rand() % 2)
{
damageAnimation = GetCurrentDamageAnimation(bRight,TRUE);
bAniCritcal = TRUE;
}
else
{
damageAnimation = GetCurrentDamageAnimation(bRight,FALSE);
}
}
else
{
damageAnimation = GetCurrentDamageAnimation(bRight,FALSE);
}
assert(damageAnimation);
if (bAniCritcal)
{
SetCurrentBlendAnimation(damageAnimation,0,1.0f,-1,FALSE);
}
else
{
SetCurrentBlendAnimation(damageAnimation,0,1.0f,-1,TRUE);
}
}
//------------------------------------------------------------------------------
/**
*/
void Player::PlayDamageSound(eWEAPONSOUNDKIND eSoundKind)
{
assert(eSoundKind >= 0 && eSoundKind < eWEAPONSOUNDKIND_MAX);
if (eSoundKind < 0 || eSoundKind >= eWEAPONSOUNDKIND_MAX)
{
return;
}
SOUND_INFO_CODE SoundInfoCode;
SoundInfoCode.wCharacterCode = static_cast<WORD>(GetClass());
SoundInfoCode.bWeaponType = static_cast<BYTE>(eSoundKind);
SoundInfoCode.bGenderType = static_cast<BYTE>(ResourceCode::CheckValidGender(GetClass(), GetGender()));
BASE_CharSoundInfo *pInfo = CharSoundInfoParser::Instance()->GetCharSoundInfo(SoundInfoCode.dwSoundCode);
BASE_WeaponSoundInfo *pWeaponSoundInfo = WeaponSoundInfoParser::Instance()->GetWeaponSoundInfo(eSoundKind);
int iDamageVoice = 0;
int iImpactSound = 0;
int iWeaponSound = 0;
if (pInfo)
{
iDamageVoice = pInfo->SoundInfo.dwMoanSound[rand() % MAX_SOUND_VARIATION];
iImpactSound = pInfo->SoundInfo.dwArmorSound[rand() % MAX_SOUND_VARIATION];
}
if (pWeaponSoundInfo)
{
iWeaponSound = pWeaponSoundInfo->m_dWeaponSound[rand() % MAX_SOUND_VARIATION];
}
if (iDamageVoice)
{
g_SoundEffect.Play(iDamageVoice,&GetPosition());
}
if (iImpactSound)
{
g_SoundEffect.Play(iImpactSound,&GetPosition());
}
if (iWeaponSound)
{
g_SoundEffect.Play(iWeaponSound,&GetPosition());
}
}
//------------------------------------------------------------------------------
/**
*/
void Player::SetName( const tstring& Name )
{
memcpy( GetCharInfo()->m_tszCharName, Name.c_str(), MAX_CHARNAME_LENGTH );
//???????? ??? MAX_CHARNAME_LENGTH+1?????? ???????? ??????? ???????
GetCharInfo()->m_tszCharName[MAX_CHARNAME_LENGTH]=0;
Object::SetName( Name );
}
PLAYER_MAKE_TYPE Player::GetPlayerType() const
{
return m_PlayerMakeType;
}
void Player::SetPlayerType(PLAYER_MAKE_TYPE Type)
{
m_PlayerMakeType = Type;
}
int Player::GetShotBlendBone()
{
switch(GetClass())
{
case eCHAR_VALKYRIE:
{
if (GetBasePart()->GetWzUnit() != NULL)
{
WzBoneInfo *pInfo = GetBasePart()->GetWzUnit()->GetBoneInfo(StrToWzID("BLND"));
if (pInfo)
{
return pInfo->m_iNode;
}
else
{
return 5;
}
}
else
{
return 5;
}
}
}
return 0;
}
void Player::SetWeaponKind(DWORD dwWeaponKind)
{
m_PlayerData.SetWeaponKind(dwWeaponKind);
}
BASE_ITEMINFO* Player::GetWeaponInfo()
{
EquipmentContainer* equipment_container = GetEquipmentContainer();
if (equipment_container == NULL)
{
return NULL;
}
// ???????? ??????? ?????.
SCSlot & rSlot = equipment_container->GetSlot(EquipmentContainer::EQUIP_WEAPON1);
if (rSlot.GetCode() == 0)
{
return NULL;
}
else
{
BASE_ITEMINFO *pItemInfo = ItemInfoParser::Instance()->GetItemInfo(rSlot.GetCode());
if(!pItemInfo)
{
WRITELOG(eLOG_LEVEL_ERR, c_wOUTPUT_LOG_CENTER, "Invalid Weapon ID [%d]", rSlot.GetCode());
assert(pItemInfo && "?????? ???? ID?? ???????????.");
}
return pItemInfo;
}
}
float Player::GetMoveSpeedModifier()
{
#ifdef _NA_007732_20141024_RIDER_MOVESPEED_SYNC
if (m_pRiderContainer && IsRiding())
{
return (m_pRiderContainer->get_rider_speed()/100.0f);
}
#endif //_NA_007732_20141024_RIDER_MOVESPEED_SYNC
// ???? ??? ?????? ????
if (m_wMoveSpeedRatio <= 0.0f)
{
return 0.0f;
}
else if (m_wMoveSpeedRatio < 1.0f)
{
return 0.01f;
}
float fMoveSpeedModifier = m_wMoveSpeedRatio / 100.0f;
return fMoveSpeedModifier;
}
float Player::GetAttackSpeedModifier()
{
const float fWeaponMultiplier = 0.67f;
float fFinalMultiplier = fWeaponMultiplier * m_wAttSpeedRatio / 100.0f;
return fFinalMultiplier;
}
eCHAREX_TYPE Player::GetClassExType()
{
if (!this->GetCharInfo())
{
return (eCHAREX_TYPE) eCHAR_TYPE_MAX;
}
return static_cast<eCHAREX_TYPE>(this->GetCharInfo()->GetChangeOfClass());
}
void Player::SetExp(EXPTYPE exp)
{
this->GetCharInfo()->m_i64Exp = exp;
}
void Player::SetLevel(LEVELTYPE LV)
{
this->GetCharInfo()->m_LV = LV;
}
void Player::SetHP(DWORD dwHP )
{
this->GetCharInfo()->m_iHP = dwHP;
Character::SetHP(dwHP);
}
void Player::SetMP(DWORD dwMP )
{
this->GetCharInfo()->m_iMP = dwMP;
Character::SetMP(dwMP);
}
//------------------------------------------------------------------------------
/** ???? SD
*/
DWORD Player::GetSD()
{
return GetCharInfo()->m_iSD;
}
//------------------------------------------------------------------------------
/** ??? SP
*/
DWORD Player::GetMaxSD()
{
return GetCharInfo()->m_iMaxSD;
}
//------------------------------------------------------------------------------
/** SP ????
*/
void Player::SetSD(DWORD dwSD)
{
this->GetCharInfo()->m_iSD = dwSD;
Character::SetSD(dwSD);
}
//------------------------------------------------------------------------------
/** ??? SP ????
*/
void Player::SetMaxSD(DWORD dwMaxSD)
{
this->GetCharInfo()->m_iMaxSD = dwMaxSD;
Character::SetMaxSD(dwMaxSD);
}
#ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
PLAYERFP Player::GetFP()
{
return this->GetCharInfo()->cur_FP_;
}
PLAYERFP Player::GetMaxFP()
{
return this->GetCharInfo()->max_FP_;
}
void Player::SetMaxFP( const PLAYERFP& max_fp )
{
this->GetCharInfo()->max_FP_ = max_fp;
}
void Player::SetFP( const PLAYERFP& fp )
{
this->GetCharInfo()->cur_FP_ = fp;
if (this->GetCharInfo()->cur_FP_ >= 10.0f)
{
this->CreateFPFullEffect(this);
}
else
{
this->DestroyFPFullEffect();
}
}
#endif // _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
EXPTYPE Player::GetExp()
{
return this->GetCharInfo()->m_i64Exp;
}
LEVELTYPE Player::GetLevel()
{
return GetCharInfo()->m_LV;
}
DWORD Player::GetHP()
{
return GetCharInfo()->m_iHP;
}
DWORD Player::GetMP()
{
return GetCharInfo()->m_iMP;
}
DWORD Player::GetMaxHP()
{
return GetCharInfo()->m_iMaxHP;
}
//------------------------------------------------------------------------------
DWORD Player::GetMaxMP()
{
return GetCharInfo()->m_iMaxMP;
}
//------------------------------------------------------------------------------
float Player::GetHP_Percent()
{
if (GetCharInfo()->m_iMaxHP > 0)
{
return (static_cast<float>(GetCharInfo()->m_iHP) / static_cast<float>(GetCharInfo()->m_iMaxHP) * 100.0f);
}
return 0.0f;
}
//------------------------------------------------------------------------------
float Player::GetMP_Percent()
{
if (GetCharInfo()->m_iMaxMP > 0)
{
return (static_cast<float>(GetCharInfo()->m_iMP) / static_cast<float>(GetCharInfo()->m_iMaxMP) * 100.0f);
}
return 0.0f;
}
//------------------------------------------------------------------------------
EXPTYPE Player::GetNextExp()
{
return GetAccumExp(GetLevel()+1);
}
EXPTYPE Player::GetAccumExp(LEVELTYPE LV)
{
BASE_ACCUM_EXP_INFO * pAccumExpInfo = (BASE_ACCUM_EXP_INFO *)ExpValueInfoParser::Instance()->GetAccumExpInfo(LV);
if( !pAccumExpInfo )
{
return 0;
}
return pAccumExpInfo->m_AccumExp;
}
WzID Player::GetCurrentLeftTurnAnimation()
{
if(IsPolymorph())
{
return GlobalFunc::GetAnimationByPolymorph(eANI_L_ROTATE);
}
if(IsRiding())
{
return GlobalFunc::GetPlayerAnimationByRiding(eANI_L_ROTATE,GetRiderKindCode());
}
if (is_spread_wings())
{
return GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_L_ROTATE);
}
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'N';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '1';
szAniCode[3] = '2';
return StrToWzID(szAniCode);
}
WzID Player::GetCurrentRightTurnAnimation()
{
if(IsPolymorph())
{
return GlobalFunc::GetAnimationByPolymorph(eANI_L_ROTATE);
}
if(IsRiding())
{
return GlobalFunc::GetPlayerAnimationByRiding(eANI_R_ROTATE,GetRiderKindCode());
}
if (is_spread_wings())
{
return GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_R_ROTATE);
}
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'N';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '1';
szAniCode[3] = '3';
return StrToWzID(szAniCode);
}
WzID Player::GetCurrentLeftStepAnimation()
{
if(IsPolymorph())
{
return GlobalFunc::GetAnimationByPolymorph(eANI_L_MOVE);
}
if(IsRiding())
{
return GlobalFunc::GetPlayerAnimationByRiding(eANI_L_MOVE,GetRiderKindCode());
}
if (is_spread_wings())
{
return GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_L_MOVE);
}
WzID animationID = 0;
if (GetHideSkill())
{
// ????? ?????? ??????
if (GetWeaponKind() == eWEAPONTYPE_DAGGER)
{
// ???? ???????? ??????
animationID = StrToWzID("S722");
}
else
{
animationID = StrToWzID("S009");
}
}
else
{
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'N';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '0';
szAniCode[3] = '9';
animationID = StrToWzID(szAniCode);
}
return animationID;
}
WzID Player::GetCurrentRightStepAnimation()
{
if(IsPolymorph())
{
return GlobalFunc::GetAnimationByPolymorph(eANI_R_MOVE);
}
if(IsRiding())
{
return GlobalFunc::GetPlayerAnimationByRiding(eANI_R_MOVE,GetRiderKindCode());
}
if (is_spread_wings())
{
return GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_R_MOVE);
}
WzID animationID = 0;
if (GetHideSkill())
{
// ????? ?????? ??????
if (GetWeaponKind() == eWEAPONTYPE_DAGGER)
{
// ???? ???????? ??????
animationID = StrToWzID("S723");
}
else
{
animationID = StrToWzID("S010");
}
}
else
{
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'N';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '1';
szAniCode[3] = '0';
animationID = StrToWzID(szAniCode);
}
return animationID;
}
WzID Player::GetCurrentBackStepAnimation()
{
if(IsPolymorph())
{
return GlobalFunc::GetAnimationByPolymorph(eANI_B_MOVE);
}
if(IsRiding())
{
return GlobalFunc::GetPlayerAnimationByRiding(eANI_B_MOVE,GetRiderKindCode());
}
if (is_spread_wings())
{
return GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_B_MOVE);
}
WzID animationID = 0;
if (GetHideSkill())
{
// ????? ?????? ??????
if (GetWeaponKind() == eWEAPONTYPE_DAGGER)
{
// ???? ???????? ??????
animationID = StrToWzID("S724");
}
else
{
animationID = StrToWzID("S011");
}
}
else
{
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'N';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '1';
szAniCode[3] = '1';
animationID = StrToWzID(szAniCode);
}
return animationID;
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentSpecialRightStepAnimation()
{
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'N';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '2';
szAniCode[3] = '0';
return StrToWzID(szAniCode);
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentSpecialFrontStepAnimation()
{
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'N';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '1';
szAniCode[3] = '7';
return StrToWzID(szAniCode);
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentSpecialBackStepAnimation()
{
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'N';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '1';
szAniCode[3] = '8';
return StrToWzID(szAniCode);
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentSpecialLeftStepAnimation()
{
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'N';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '1';
szAniCode[3] = '9';
return StrToWzID(szAniCode);
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentJumpStartAnimation()
{
if(IsRiding())
{
return GlobalFunc::GetPlayerAnimationByRiding(eANI_JUMP_START,GetRiderKindCode());
}
if (is_spread_wings())
{
return GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_JUMP_START);
}
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'J';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '0';
szAniCode[3] = '1';
return StrToWzID(szAniCode);
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentJumpKeepAnimation()
{
if(IsRiding())
{
return GlobalFunc::GetPlayerAnimationByRiding(eANI_JUMP_LOOP,GetRiderKindCode());
}
if (is_spread_wings())
{
return GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_JUMP_LOOP);
}
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'J';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '0';
szAniCode[3] = '2';
return StrToWzID(szAniCode);
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentJumpEndAnimation()
{
if(IsRiding())
{
return GlobalFunc::GetPlayerAnimationByRiding(eANI_JUMP_END,GetRiderKindCode());
}
if (is_spread_wings())
{
return GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_JUMP_END);
}
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'J';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '0';
szAniCode[3] = '3';
return StrToWzID(szAniCode);
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentJumpLandAnimation()
{
if(IsRiding())
{
return GlobalFunc::GetPlayerAnimationByRiding(eANI_JUMP_LAND,GetRiderKindCode());
}
if (is_spread_wings())
{
return GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_JUMP_LAND);
}
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'J';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '0';
szAniCode[3] = '4';
return StrToWzID(szAniCode);
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentJumpStunAnimation()
{
if(IsRiding())
{
return GlobalFunc::GetPlayerAnimationByRiding(eANI_HJUMP_END,GetRiderKindCode());
}
if (is_spread_wings())
{
return GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_HJUMP_END);
}
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'J';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '0';
szAniCode[3] = '5';
return StrToWzID(szAniCode);
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentJumpStunKeepAnimation()
{
if(IsRiding())
{
return GlobalFunc::GetPlayerAnimationByRiding(eANI_HJUMP_END_LOOP,GetRiderKindCode());
}
if (is_spread_wings())
{
return GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_HJUMP_END_LOOP);
}
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'J';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '0';
szAniCode[3] = '6';
return StrToWzID(szAniCode);
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentJumpStunEndAnimation()
{
if(IsRiding())
{
return GlobalFunc::GetPlayerAnimationByRiding(eANI_HJUMP_GETUP,GetRiderKindCode());
}
if (is_spread_wings())
{
return GlobalFunc::GetPlayerAnimationBySpreadWings(eANI_HJUMP_GETUP);
}
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'J';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '0';
szAniCode[3] = '7';
return StrToWzID(szAniCode);
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentJumpEndRunAnimation()
{
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'J';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '0';
szAniCode[3] = '4';
return StrToWzID(szAniCode);
}
//------------------------------------------------------------------------------
/**
*/
WzID Player::GetCurrentKnockBack2Animation()
{
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'H';
szAniCode[1] = 'S';
szAniCode[2] = GetWeaponAnimationCode();
szAniCode[3] = '5';
return StrToWzID(szAniCode);
}
//------------------------------------------------------------------------------
/**
Todo:???? ???? ?????? ???? ???? ???
*/
DWORD Player::CreateProjectile(Character *pTarget,int iArrowBone)
{
if( pTarget == NULL )
return 0;
DWORD dwProjectileCode = 0;
BASE_ITEMINFO* pWeaponInfo = GetWeaponInfo();
if (pWeaponInfo)
{
dwProjectileCode = pWeaponInfo->m_wMissile;
}
BASE_ProjectileInfo* pInfo = ProjectileInfoParser::Instance()->GetProjectileInfo(dwProjectileCode);
WzVector StartPosition = GetArrowBonePos(iArrowBone);
WzVector TargetPosition;
if( pTarget != NULL )
{
TargetPosition = pTarget->GetArrowTargetPos();
}
else
{
TargetPosition = StartPosition + (GetDirection() * 4.0f);
}
DWORD ProjectileKey = 0;
DWORD OwnerObjectKey = GetObjectKey();
if( pInfo )
{
cProjectileUnit* pProjectile = new cProjectileUnit();
pProjectile->SetArrowStartPosition( StartPosition );
pProjectile->SetArrowTargetObjectKey( pTarget->GetObjectKey(), TRUE );
pProjectile->SetLifeTime( 333 );
pProjectile->CreateEffect( pInfo->m_wzidFlyingEffectID.id, GetObjectKey(), pTarget->GetObjectKey() );
pProjectile->SetHitData( GetObjectKey(), GetCurrentAttackSerial(), pInfo->m_wzidHitEffectID.id, FALSE, 0, TRUE );
if( pInfo->m_bMakeTrail == TRUE )
{
pProjectile->CreateTrail( g_ProjectileManagerEx.GetTrailTexture(), 0.04f, 0.8f, 150, 200, 255 );
}
g_ProjectileManagerEx.InsertProjectile( pProjectile );
ProjectileKey = pProjectile->GetKey();
}
else if( GetWeaponKind() == eITEMTYPE_ORB )
{
WzVector temp = TargetPosition - StartPosition;
float fDistance = VectorLength(&temp);
DWORD MoveTime = max(200, (DWORD)(800.f * fDistance / GetAttackRange())); // ????????? 2.5??? ??????? ???
cProjectileUnit* pProjectile = new cProjectileUnit();
pProjectile->SetArrowStartPosition( StartPosition );
pProjectile->SetArrowTargetObjectKey( pTarget->GetObjectKey(), TRUE );
pProjectile->SetLifeTime( MoveTime );
pProjectile->CreateEffect( StrToWzID("E056"), GetObjectKey(), pTarget->GetObjectKey() );
pProjectile->SetHitData( GetObjectKey(), GetCurrentAttackSerial(), 0, FALSE, 0, TRUE );
g_ProjectileManagerEx.InsertProjectile( pProjectile );
ProjectileKey = pProjectile->GetKey();
}
#ifdef _NA_008740_20160321_MAGICIAN_STAFF_CREATE_PROJECTILE
else if( GetWeaponKind() == eITEMTYPE_STAFF )
{
WzVector temp = TargetPosition - StartPosition;
float fDistance = VectorLength(&temp);
DWORD MoveTime = max(200, (DWORD)(800.f * fDistance / GetAttackRange())); // ????????? 2.5??? ??????? ???
cProjectileUnit* pProjectile = new cProjectileUnit();
pProjectile->SetArrowStartPosition( StartPosition );
pProjectile->SetArrowTargetObjectKey( pTarget->GetObjectKey(), TRUE );
pProjectile->SetLifeTime( MoveTime );
pProjectile->CreateEffect( StrToWzID("E056"), GetObjectKey(), pTarget->GetObjectKey() );
pProjectile->SetHitData( GetObjectKey(), GetCurrentAttackSerial(), 0, FALSE, 0, TRUE );
g_ProjectileManagerEx.InsertProjectile( pProjectile );
ProjectileKey = pProjectile->GetKey();
}
#endif // _NA_008740_20160321_MAGICIAN_STAFF_CREATE_PROJECTILE
else if( GetWeaponKind()== eITEMTYPE_ETHERWEAPON )
{
WzVector temp = TargetPosition - StartPosition;
float fDistance = VectorLength(&temp);
DWORD MoveTime = max(200, (DWORD)(733.0f * fDistance / GetAttackRange())); // ????????? 2.5??? ??????? ???
cProjectileUnit* pProjectile = new cProjectileUnit();
pProjectile->SetArrowStartPosition( StartPosition );
pProjectile->SetArrowTargetObjectKey( pTarget->GetObjectKey(), TRUE );
pProjectile->SetLifeTime( MoveTime );
pProjectile->CreateEffect( StrToWzID("A511"), GetObjectKey(), pTarget->GetObjectKey() );
pProjectile->SetHitData( GetObjectKey(), GetCurrentAttackSerial(), 0, FALSE, 0, TRUE );
g_ProjectileManagerEx.InsertProjectile( pProjectile );
ProjectileKey = pProjectile->GetKey();
}
else
{
cProjectileUnit* pProjectile = new cProjectileUnit();
pProjectile->SetArrowStartPosition( StartPosition );
pProjectile->SetArrowTargetObjectKey( pTarget->GetObjectKey(), TRUE );
pProjectile->SetLifeTime( 100 );
pProjectile->CreateEffect( StrToWzID("A041"), GetObjectKey(), pTarget->GetObjectKey() );
pProjectile->SetUnitCode( eProjectile_SRC_ARROW );
pProjectile->CreateTrail( g_ProjectileManagerEx.GetTrailTexture(), 0.04f, 0.8f, 150, 200, 255 );
pProjectile->SetHitData( GetObjectKey(), GetCurrentAttackSerial(), 0, FALSE, 0, TRUE );
g_ProjectileManagerEx.InsertProjectile( pProjectile );
ProjectileKey = pProjectile->GetKey();
}
return ProjectileKey;
}
void Player::CreatePopupMesh(
CODETYPE SkillCode,
INT64 iNumber,
eDAMAGEPOPUP_KIND eKind,
WzColor color,
BOOL bCritical,
BOOL bDoubleDamage,
float fMultiplier /*= 1.0f*/,
int iSecondary /*= -1*/,
WzColor secondarycol /*= WzColor_RGBA(0,0,0,0)*/,
float fHeight /*= 0.0f*/,
BOOL bHero /*= FALSE*/
)
{
BOOL bBySkill = (BOOL)SkillCode;
eDMGPOP_TARGET_TYPE eTargetType = eDMGPOP_TARGET_PLAYER;
eDMGPOP_COLOR_TYPE eColorType = eDMGPOP_COLOR_GENERAL;
switch( eKind )
{
case eDAMAGEPOPUP_ENEMYHPDAMAGE:
case eDAMAGEPOPUP_ENEMYMPDAMAGE:
case eDAMAGEPOPUP_PLAYERHPDAMAGE:
case eDAMAGEPOPUP_PLAYERMPDAMAGE:
{
eColorType = eDMGPOP_COLOR_CRITICAL; // ???????? ?????? ?????????? ?????.
}
break;
case eDAMAGEPOPUP_HEAL:
eColorType = eDMGPOP_COLOR_HEAL;
break;
case eDAMAGEPOPUP_EXP:
eColorType = eDMGPOP_COLOR_EXP;
break;
case eDAMAGEPOPUP_MISS:
eColorType = eDMGPOP_COLOR_MISS;
break;
case eDAMAGEPOPUP_BLOCK:
eColorType = eDMGPOP_COLOR_BLOCK;
break;
default:
break;
}
color = c_PopupColorInfo[(int)eTargetType][(int)eColorType];
// ????????
if (g_pHero)
{
bHero = BOOL( g_pHero == this );
}
Character::CreatePopupMesh(
SkillCode,
iNumber,
eKind,
color,
bCritical,
bDoubleDamage,
fMultiplier,
iSecondary,
secondarycol,
fHeight,
bHero
);
}
void Player::OpenCrossbow()
{
if (GetWeaponKind() == eWEAPONTYPE_ONEHANDCROSSBOW) {
SetAttachmentAnimation(0,StrToWzID("N002"),FALSE);
SetAttachmentAnimation(1,StrToWzID("N002"),FALSE);
}
}
void Player::CloseCrossbow()
{
if (GetWeaponKind() == eWEAPONTYPE_ONEHANDCROSSBOW)
{
SetAttachmentAnimation(0,StrToWzID("N001"),FALSE);
SetAttachmentAnimation(1,StrToWzID("N001"),FALSE);
}
}
void Player::ShotCrossbow()
{
if (GetWeaponKind() == eWEAPONTYPE_ONEHANDCROSSBOW)
{
SetAttachmentAnimation(0,StrToWzID("N003"),FALSE);
SetAttachmentAnimation(1,StrToWzID("N003"),FALSE);
}
}
WzID Player::GetValkyrieShotAnimation()
{
char szAniCode[5];
ZeroMemory(szAniCode,sizeof(szAniCode));
szAniCode[0] = 'A';
szAniCode[1] = GetWeaponAnimationCode();
szAniCode[2] = '0';
switch (GetCurState())
{
// ?????
case STATE::MOVE:
case STATE::KEYBOARDMOVE:
{
szAniCode[3] = '3';
szAniCode[3] += m_iValkyrieShotAnimVariation;
}
break;
// ???
default:
{
szAniCode[3] = '1';
szAniCode[3] += m_iValkyrieShotAnimVariation;
}
break;
}
return StrToWzID(szAniCode);
}
WzID Player::GetValkyrieReloadAnimation()
{
return StrToWzID("A211");
}
void Player::SetIdleAnimation()
{
tagWZID AnimID;
if(!IsBlock())
{
// ???????? ?????? ?????????? ???????????? ????????.
AnimID.id = GetCurrentIdleAnimation();
//! ???? ????(idle/move) ?????? ??? ??? ??
ePLAYER_ANI spread_player_ani = eANI_IDLE;
AnimID.id = GetCurrentSpreadOtherAnimation(AnimID.id, spread_player_ani);
if (AnimID.id != GetCurrentAnimation())
{
#ifdef _NA_COSTUMEITEM_IDLE_ANIMATION
if( m_IsCostumIdleAnimation == TRUE )
{
SetPlayerAnimation(AnimID.id, eANI_IDLE, FALSE );
}
else
{
#else
{
#endif //_NA_COSTUMEITEM_IDLE_ANIMATION
if (spread_player_ani == eANI_SPREAD_OTHERMOTION_IDLE)
{
SetPlayerAnimation(AnimID.id, spread_player_ani, FALSE);
}
else
{
if (AnimID.code[3] == '2')
{
SetPlayerAnimation(AnimID.id, eANI_IDLE, FALSE);
}
else if (AnimID.code[3] == '3')
{
// TODO: gs_bug_fix 09.07: ??? ??????????????? ???? ????????????? ????..
if (IsRiding())
{
SetPlayerAnimation(AnimID.id, eANI_IDLE2, FALSE);
}
else
{
SetPlayerAnimation(AnimID.id, eANI_IDLE2, TRUE);
}
}
else
{
SetPlayerAnimation(AnimID.id,eANI_STAND,TRUE);
}
}
}
if (GetBasePart())
{
GetBasePart()->SetInterpolationFrame(6);
}
}
}
}
//----------------------------------------------------------------------------
/**
*/
void Player::SetBeHaveState(ePLAYER_BEHAVE_STATE eBeHaveState)
{
this->m_BehaveState = eBeHaveState;
}
//----------------------------------------------------------------------------
/**
*/
ePLAYER_BEHAVE_STATE
Player::GetBeHaveState()
{
return this->m_BehaveState;
}
void Player::OnAttack(DWORD dwSkillCode)
{
Character::OnAttack(dwSkillCode);
#ifdef _PERF_DEBUG
return;
#endif
if( BASE_SKILLINFO *pInfo = SkillInfoParser::Instance()->GetSkillInfo((SLOTCODE)dwSkillCode) )
{
if( pInfo->m_SkillClassCode == eSKILL_WIND_SHIELD )
{
if( m_dwShieldTime == 0 )
{
m_dwShieldTime = 1000;
cTargetPosition Position;
Position.SetTargetVisiblePosition( GetObjectKey(), TRUE );
Position.SetOffsetPosition( 0.0f, 0.0f, 0.95f );
g_ProjectileManagerEx.CreateEffect( GetObjectKey(), StrToWzID("K370"), 3000, Position );
}
}
else if( pInfo->m_SkillClassCode == eSKILL_ELECTRIC_FIELD )
{
if( m_dwShieldTime == 0 )
{
m_dwShieldTime = 1000;
cTargetPosition Position;
Position.SetTargetVisiblePosition( GetObjectKey(), TRUE );
Position.SetOffsetPosition( 0.0f, 0.0f, 0.95f );
g_ProjectileManagerEx.CreateEffect( GetObjectKey(), StrToWzID("K381"), 3000, Position );
}
}
}
}
void Player::OnDamage(const DAMAGE_PRAM &rDamage)
{
DWORD dwAdditionalEffect = rDamage.pResult->GetTargetData().GetAdditionalEffect();
Character::OnDamage(rDamage);
SetAttackStandTime(ATTACK_STAND_TIME);
// ??? ??? ????
BOOL bCritical = dwAdditionalEffect & (ATTACK_ADDITIONAL_EFFECT_CRITICAL);
#ifdef _NA_007113_20140324_SHADOW_SKILL_BALLANCE_RENEWAL
if (GetHideSkill() != HIDE_SKILL_INFO::ALL_HIDE)
#endif //_NA_007113_20140324_SHADOW_SKILL_BALLANCE_RENEWAL
{
// ???? ??????? ??????
CreateDamageEffect(bCritical,rDamage.bRight,rDamage.dwObjKey);
if ( !(rand() % 3) )
{
PlayDamageSound(rDamage.pResult->GetWeaponSound());
}
}
switch (GetCurState())
{
case STATE::DEATH:
break;
default:
if ( !(dwAdditionalEffect & ATTACK_ADDITIONAL_EFFECT_DONOTPLAYANIMATION) )
{
PlayDamageAnimation(rDamage.bRight,bCritical);
}
break;
}
if(GetCurState()==STATE::SIT || GetCurState()==STATE::EMOTICON)
{
SetNextState(STATE::IDLE,g_CurTime);
}
//???? ???
if (m_dwShieldTime == 0)
{
DWORD dwState = 0;
std::vector<SKILL_EFFECT*>& array = GetSkillEffectArray();
for( size_t i=0;i!=array.size();++i)
{
SKILL_EFFECT* pEffect = array[i];
if( pEffect->dwAbilityID == eABILITY_MAGIC_SHIELD )
{
m_dwShieldTime = 300;
cTargetPosition Position;
Position.SetTargetVisiblePosition( GetObjectKey(), TRUE );
//Position.SetOffsetPosition( 0.0f, 0.0f, 0.95f );
g_ProjectileManagerEx.CreateEffect( GetObjectKey(), StrToWzID("K361"), 3000, Position );
break;
}
}
}
}
void Player::PlayEvadeAnimation()
{
}
void Player::PlayBlockAnimation()
{
if(IsRiding())
{
return;
}
if (is_spread_wings())
{
return;
}
WzID blockanim = GetCurrentBlockAnimation();
assert(blockanim);
// ???????? ????????? Idle?????????
// ???? ?????? ???
switch(GetCurState())
{
case STATE::IDLE:
this->SetAnimation(blockanim,FALSE);
break;
}
}
BOOL Player::ProcessSkillEffect(DWORD dwTick)
{
std::vector<SKILL_EFFECT*>& array = GetSkillEffectArray();
for( size_t i=0;i!=array.size();++i)
{
SKILL_EFFECT* pEffect = array[i];
pEffect->Process(this,dwTick);
if ( SkillScriptInfo * pSkillInfo = SkillInfoParser::Instance()->GetSkillInfo((SLOTCODE)pEffect->dwSkillID) )
{
// ?????? ??????? ???? ????????? ??????? ??????? ????
if( IsExistItemEffect(pSkillInfo->m_dwItemCode) == FALSE )
OnUseItem(pSkillInfo->m_dwItemCode);
}
}
UpdateSkillEffectPos();
UpdateShieldEffect();
return TRUE;
}
//
//BOOL Player::CreateWasteItemEffect(CODETYPE code)
//{
// // ?????? ???? ???? ????? ??????? ??????? ???
// // ??????????? ?? ????? ?????? ????? ??????? ?????? ???????? ?????
//
// BASE_ITEMINFO* pItemInfo = ItemInfoParser::Instance()->GetItemInfo(code);
//
// if( pItemInfo == NULL )
// {
// return FALSE;
// }
//
// if (pItemInfo->m_dwEffectCode == Null_Value)
// {
// return FALSE;
// }
//
// if( pItemInfo->m_wType == eITEMTYPE_FIRECRACKER ||
// pItemInfo->m_wType == eITEMTYPE_POLLEN ||
// pItemInfo->m_wType == eITEMTYPE_TORCH ||
// pItemInfo->m_wType == eITEMTYPE_MINE )
// {
// return TRUE;
// }
//
//
// CEffectBody* pBody = NULL;
//
// // ?????? ?????? ????? ??? ???????? ??? ??? ???
// if( pItemInfo->m_byEffectPosition == eSKILLEFFECT_POS_LRHAND )
// {
// // ?????? 2?? ???????
//
// WzVector vPos = GetSkillEffectPos(eSKILLEFFECT_POS_RHAND );
// HANDLE hHandle = GlobalFunc::CreateEffectBeUpToOption(pItemInfo->m_dwEffectCode, vPos, GetObjectKey());
//
// // ??????????? ????? ?????? ????? ???????? ??? ???????
// pBody = g_pEffectManager->GetEffectPtrHandle(hHandle);
// if (pBody && pBody->IsLoop())
// {
// g_pEffectManager->RemoveEffectPtr(hHandle);
// }
//
// vPos = GetSkillEffectPos(eSKILLEFFECT_POS_LHAND );
// hHandle = GlobalFunc::CreateEffectBeUpToOption(pItemInfo->m_dwEffectCode, vPos, GetObjectKey());
//
// // ??????????? ????? ?????? ????? ???????? ??? ???????
// pBody = g_pEffectManager->GetEffectPtrHandle(hHandle);
// if (pBody && pBody->IsLoop())
// {
// g_pEffectManager->RemoveEffectPtr(hHandle);
// }
// }
// else
// {
// WzVector vPos = GetSkillEffectPos( (eSKILLEFFECT_POS)pItemInfo->m_byEffectPosition );
// HANDLE hHandle = GlobalFunc::CreateEffectBeUpToOption(pItemInfo->m_dwEffectCode, vPos, GetObjectKey());
//
// // ??????????? ????? ?????? ????? ???????? ??? ???????
// pBody = g_pEffectManager->GetEffectPtrHandle(hHandle);
// if (pBody && pBody->IsLoop())
// {
// g_pEffectManager->RemoveEffectPtr(hHandle);
// }
// }
//
// return TRUE;
//}
//Todo:???? ?????? ???????? ??? ????.
BOOL Player::OnUseItem(DWORD dwItemCode)
{
BASE_ITEMINFO *pItemInfo = ItemInfoParser::Instance()->GetItemInfo(dwItemCode);
if (!pItemInfo)
{
return FALSE;
}
if (pItemInfo->m_dwEffectCode==Null_Value)
{
return FALSE;
}
RemoveItemEffectByItemCode( dwItemCode );
AddItemEffect( this, pItemInfo );
return TRUE;
}
BOOL Player::OnUnUseItem(DWORD dwItemCode)
{
//Todo:?????? ????? ???? ???
return RemoveItemEffectByItemCode( dwItemCode );
}
void Player::OnLevelUp()
{
// %s???? ?????? ???????
TCHAR szResult[MAX_MESSAGE_LENGTH];
TCHAR szMessage[MAX_MESSAGE_LENGTH];
g_InterfaceManager.GetInterfaceString( eST_PLAYER_LEVEL_UP, szMessage, MAX_MESSAGE_LENGTH );
Sprintf(szResult, szMessage, GetName());
if( GlobalFunc::IsParty( GetObjectKey() ) )
{
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szResult, CHAT_TYPE_SYSTEM );
}
#ifdef _NA_20111213_SKILLTREE_VISUAL_RENEWAL2
CreateEffectAtHead(StrToWzID("A741"),0.0f);
#else
if (dwLevel % 3 == 0) //3???? ???? ?????????? ?????? ????
{
CreateEffectAtHead(StrToWzID("A741"),0.0f);
}
else
{
CreateEffectAtHead(StrToWzID("A015"),0.0f);
}
#endif //_NA_20120509_LEVELUP_EFFECT
if( IsMyHero() == FALSE )
{
WzVector vPos = GetPosition();
g_SoundEffect.Play(666,&vPos);
}
}
void Player::ApplyStyleBuff( DWORD dwStyleCode ,SkillAttrCalculator &SkillCalc)
{
BASE_STYLEINFO *pBaseStylenfo = SkillInfoParser::Instance()->GetStyleInfo( (SLOTCODE)dwStyleCode );
if( !pBaseStylenfo ) return;
// ???? ???? ????
if( pBaseStylenfo->m_iAttackRate )
SkillCalc.AddAttr( eATTR_PHYSICAL_ATTACK_SUCCESS_RATIO, VALUE_TYPE_VALUE, pBaseStylenfo->m_iAttackRate );
// ???? ???? ????
if( pBaseStylenfo->m_iAvoidRate )
SkillCalc.AddAttr( eATTR_PHYSICAL_ATTACK_BLOCK_RATIO, VALUE_TYPE_VALUE, pBaseStylenfo->m_iAvoidRate );
// ???? ????
if( pBaseStylenfo->m_iAttackSpeed )
SkillCalc.AddAttr( eATTR_ATTACK_SPEED, VALUE_TYPE_VALUE, pBaseStylenfo->m_iAttackSpeed );
// ???? ????
if( pBaseStylenfo->m_iBonusDefence )
SkillCalc.AddAttr( eATTR_OPTION_ALL_DEFENSE_POWER, VALUE_TYPE_VALUE, pBaseStylenfo->m_iBonusDefence );
// ?????? ??? ????
if( pBaseStylenfo->m_wCriticalBonus )
SkillCalc.AddAttr( eATTR_ADD_ALL_CRITICAL_RATIO, VALUE_TYPE_VALUE, pBaseStylenfo->m_wCriticalBonus );
}
WzVector Player::GetArrowBonePos(int iAttachIndex)
{
if (!IsAnimated())
{
AnimateUnit();
}
if ((iAttachIndex >= 0) && (iAttachIndex < (int)GetAttachmentCount()))
{
CWzUnitDraw* pSkeleton = GetAttachment(iAttachIndex).GetUnitDraw();
if ((pSkeleton != NULL) && (pSkeleton->GetWzUnit() != NULL))
{
if (WzBoneInfo* pInfo = pSkeleton->GetWzUnit()->GetBoneInfo(StrToWzID("ARRW")))
{
WzVector vRet;
if (GameFunc::GetBonePos( pSkeleton, pInfo->m_iNode, &vRet) == TRUE)
{
return vRet;
}
}
}
}
else
{
assert(iAttachIndex >= 0 && iAttachIndex < (int)GetAttachmentCount() );
}
return GetVisiblePos();
}
void Player::RenderInfo()
{
if(g_HeroInput.IsShowPartyMemberOnly())
{
uiPartyMan* partyMan =
static_cast<uiPartyMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_PARTY));
if(partyMan&&partyMan->IsPartyMember(GetObjectKey())==FALSE)
{
return Character::RenderInfo();
}
}
if( IsGM() )
{
_renderinfo_GM();
}
else
{
if ( IsShowName() == TRUE ) // ???? ????? ( etc. ???????? ?? m_bShowName ?????)
renderInfo_InCharacterSenen();
else
renderInfo_InBattleScene();
}
Character::RenderInfo();
}
float Player::GetAttackRange( void )
{
const float PUNCH_ATTACK_RANGE = 2.0f;
// ???????? ??????? ?????.
EquipmentContainer* equipment_container = GetEquipmentContainer();
if (equipment_container == NULL)
{
return PUNCH_ATTACK_RANGE;
}
SCSlot & rSlot = equipment_container->GetSlot(EquipmentContainer::EQUIP_WEAPON1);
//float fBonus = (float)m_pPlayerAttriburtes->GetNormalRangeBonus() / 10.0f;
if (rSlot.GetCode() == 0)
{
return PUNCH_ATTACK_RANGE;
}
else
{
BASE_ITEMINFO* pItemInfo = ItemInfoParser::Instance()->GetItemInfo(rSlot.GetCode());
if(pItemInfo)
{
// ???????? ???? ?????? ???
if (TRUE == this->IsMyHero())
{
ns_formula::EquipSlotsManageInfo* equip_slot_manage_info = g_pHero->GetEquipmentContainer()->GetEquipmentManageInfo();
if (equip_slot_manage_info->slots[EquipmentContainer::EQUIP_WEAPON1].activated == false)
{
return PUNCH_ATTACK_RANGE;
}
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
// ?????? 0?? ???? ???
SCItemSlot& weapon_item = static_cast<SCItemSlot&>(
(ItemManager::Instance()->GetContainer(SI_EQUIPMENT))->GetSlot(EquipmentContainer::EQUIP_WEAPON1));
if ( weapon_item.WithDura() && (weapon_item.GetDura() == 0))
{
return PUNCH_ATTACK_RANGE;
}
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
}
return (float)(pItemInfo->m_fAttRange );
}
else
{
#ifdef _DEV_VER
TCHAR szDebugMsg[1024] = {0,};
Sprintf(szDebugMsg, _T("?????? ???? ID?? ???????????[%d]"), rSlot.GetCode());
GlobalFunc::OutputMsg_SysMsg(szDebugMsg);
#endif
return PUNCH_ATTACK_RANGE ;
}
}
}
BOOL Player::IsRangedNormalAttack()
{
switch (GetWeaponKind())
{
case eWEAPONTYPE_ONEHANDCROSSBOW:
case eWEAPONTYPE_ETHERWEAPON:
case eWEAPONTYPE_ORB:
#ifdef _NA_008740_20160321_MAGICIAN_STAFF_CREATE_PROJECTILE
case eWEAPONTYPE_STAFF:
#endif // _NA_008740_20160321_MAGICIAN_STAFF_CREATE_PROJECTILE
{
return TRUE;
}
break;
default:
{
return FALSE;
}
break;
}
}
float Player::GetMeshHeight()
{
BASE_HeroHeightInfo *pInfo = HeroHeightInfoParser::Instance()->GetHeroHeightInfo(GetImageClass());
int height_variation = GetHeightVariation();
assert(height_variation >= 0 && height_variation < MAX_HEIGHT_VARIATION);
float fScale = 1.0f;
if (pInfo)
{
fScale = pInfo->m_fHeight[height_variation];
}
float height_offset = GetHeightOffset();
if(IsTransForm())//???? ?????
{
return 2.2f * fScale + height_offset;
}
switch(GetImageClass())
{
case eCHAR_BERSERKER:
return 2.2f * fScale + height_offset;
case eCHAR_DRAGON:
return 2.0f * fScale + height_offset;
case eCHAR_SHADOW:
return 2.0f * fScale + height_offset;
case eCHAR_VALKYRIE:
return 1.75f * fScale + height_offset;
case eCHAR_MAGICIAN:
return 1.75f * fScale + height_offset;
case eCHAR_MYSTIC: //_NA_004965_20120613_NEW_CHARACTER_MYSTIC
return 1.4f * fScale + height_offset;
case eCHAR_HELLROID: //_NA_000000_20130812_NEW_CHARACTER_HELLROID
return 2.0f * fScale + height_offset;
case eCHAR_WITCHBLADE: //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
return 1.75f * fScale + height_offset;
}
return m_fMeshHeight;
}
void Player::OnFootStep(BOOL b2D /* = FALSE */)
{
if (BIT_CHECK(m_dwCurTileAtt, PTA_PLAYER_FALLDOWN_TILE))
{
return;
}
if (m_bObserverMode)
{
return;
}
const int MAX_FOOTSTEP_VARIATION = 4;
WzVector vPos = GetVisiblePos();
BOOL bMan;
if (GetGender() == GenderType::kMale)
{
bMan = TRUE;
}
else
{
bMan = FALSE;
}
DWORD dwVariation = rand() % MAX_FOOTSTEP_VARIATION;
switch (m_dwTerrainAttribute)
{
case eTERRAIN_ATTRIBUTE_DIRT:
{
if (bMan)
{
if (b2D)
{
g_SoundEffect.PlayUI(2100 + dwVariation);
}
else
{
g_SoundEffect.Play(2100 + dwVariation, &vPos);
}
}
else
{
if (b2D)
{
g_SoundEffect.PlayUI(2000 + dwVariation);
}
else
{
g_SoundEffect.Play(2000 + dwVariation, &vPos);
}
}
}
break;
case eTERRAIN_ATTRIBUTE_STONE:
{
if (bMan)
{
if (b2D)
{
g_SoundEffect.PlayUI(2124 + dwVariation);
}
else
{
g_SoundEffect.Play(2124 + dwVariation, &vPos);
}
}
else
{
if (b2D)
{
g_SoundEffect.PlayUI(2024 + dwVariation);
}
else
{
g_SoundEffect.Play(2024 + dwVariation, &vPos);
}
}
}
break;
case eTERRAIN_ATTRIBUTE_PEBBLE:
{
if (bMan)
{
if (b2D)
{
g_SoundEffect.PlayUI(2108 + dwVariation);
}
else
{
g_SoundEffect.Play(2108 + dwVariation, &vPos);
}
}
else
{
if (b2D)
{
g_SoundEffect.PlayUI(2008 + dwVariation);
}
else
{
g_SoundEffect.Play(2008 + dwVariation, &vPos);
}
}
}
break;
case eTERRAIN_ATTRIBUTE_GRASS:
{
if (bMan)
{
if (b2D)
{
g_SoundEffect.PlayUI(2104 + dwVariation);
}
else
{
g_SoundEffect.Play(2104 + dwVariation, &vPos);
}
}
else
{
if (b2D)
{
g_SoundEffect.PlayUI(2004 + dwVariation);
}
else
{
g_SoundEffect.Play(2004 + dwVariation, &vPos);
}
}
}
break;
case eTERRAIN_ATTRIBUTE_METAL:
{
if (bMan)
{
if (b2D)
{
g_SoundEffect.PlayUI(2112 + dwVariation);
}
else
{
g_SoundEffect.Play(2112 + dwVariation, &vPos);
}
}
else
{
if (b2D)
{
g_SoundEffect.PlayUI(2012 + dwVariation);
}
else
{
g_SoundEffect.Play(2012 + dwVariation, &vPos);
}
}
}
break;
case eTERRAIN_ATTRIBUTE_WATER:
{
if (bMan)
{
if (b2D)
{
g_SoundEffect.PlayUI(2128 + dwVariation);
}
else
{
g_SoundEffect.Play(2128 + dwVariation, &vPos);
}
}
else
{
if (b2D)
{
g_SoundEffect.PlayUI(2028 + dwVariation);
}
else
{
g_SoundEffect.Play(2028 + dwVariation, &vPos);
}
}
}
break;
case eTERRAIN_ATTRIBUTE_MUD:
{
if (bMan)
{
if (b2D)
{
g_SoundEffect.PlayUI(2116 + dwVariation);
}
else
{
g_SoundEffect.Play(2116 + dwVariation, &vPos);
}
}
else
{
if (b2D)
{
g_SoundEffect.PlayUI(2016 + dwVariation);
}
else
{
g_SoundEffect.Play(2016 + dwVariation, &vPos);
}
}
}
break;
case eTERRAIN_ATTRIBUTE_WOOD:
{
if (bMan)
{
if (b2D)
{
g_SoundEffect.PlayUI(2132 + dwVariation);
}
else
{
g_SoundEffect.Play(2132 + dwVariation, &vPos);
}
}
else
{
if (b2D)
{
g_SoundEffect.PlayUI(2032 + dwVariation);
}
else
{
g_SoundEffect.Play(2032 + dwVariation, &vPos);
}
}
}
break;
case eTERRAIN_ATTRIBUTE_SNOW:
{
if (bMan)
{
if (b2D)
{
g_SoundEffect.PlayUI(2120 + dwVariation);
}
else
{
g_SoundEffect.Play(2120 + dwVariation, &vPos);
}
}
else
{
if (b2D)
{
g_SoundEffect.PlayUI(2020 + dwVariation);
}
else
{
g_SoundEffect.Play(2020 + dwVariation, &vPos);
}
}
}
break;
case eTERRAIN_ATTRIBUTE_DESERT:
{
if (bMan)
{
if (b2D)
{
g_SoundEffect.PlayUI(2136 + dwVariation);
}
else
{
g_SoundEffect.Play(2136 + dwVariation, &vPos);
}
}
else
{
if (b2D)
{
g_SoundEffect.PlayUI(2036 + dwVariation);
}
else
{
g_SoundEffect.Play(2036 + dwVariation, &vPos);
}
}
}
break;
}
}
void Player::ProcessStandAnimationDelay(DWORD dwTick)
{
if (m_dwStandAnimDelay < dwTick)
{
m_dwStandAnimDelay = 0;
}
else
{
m_dwStandAnimDelay -= dwTick;
}
}
#ifdef _NA_008069_20150210_ADD_SPA_SYSTEM
void Player::SetSpaSittingAnimation(DWORD dwTick)
{
// ?????? ????
if (current_ani_progress_rate() >= 100)
{
// ?????? ????
SetSpaSittingAnimationDelay();
}
// ?????? ???
if (spa_sit_idle_ani_delay_ < dwTick)
{
spa_sit_idle_ani_delay_ = 0;
}
else
{
spa_sit_idle_ani_delay_ -= dwTick;
}
#ifdef _NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION
WzID animation_id = 0;
SpaZoneInfo* spa_info = SpaZoneInfoParser::Instance()->GetSpaZoneInfo(g_pMap->GetMapID());
if (spa_info && spa_sit_idle_ani_delay_ == 0)
{
if (spa_info->special_animation[2].id != 0)
{
animation_id = spa_info->special_animation[2].id;
if (animation_id != GetCurrentAnimation())
{
// ??? ??? IDLE ???????
SetPlayerAnimation(animation_id,eANI_SIT_IDLE,FALSE);
}
}
}
else
{
if (spa_info->special_animation[1].id != 0)
{
animation_id = spa_info->special_animation[1].id;
SetPlayerAnimation(animation_id, eANI_SIT_IDLE,TRUE);
}
}
#else
if (spa_sit_idle_ani_delay_ == 0)
{
if ((StrToWzID("N024")) != GetCurrentAnimation())
{
// ??? ??? IDLE ???????
SetPlayerAnimation(StrToWzID("N024"),eANI_SIT_IDLE,FALSE);
}
}
else
{
SetPlayerAnimation(StrToWzID("N022"),eANI_SIT_IDLE,TRUE);
}
#endif //_NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION
}
#ifdef _NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION
BOOL Player::IsInSpaTile_Change_SitIdle()
{
if ((GlobalFunc::IsSpaScene() == TRUE) &&
(BIT_CHECK(m_dwCurTileAtt, PTA_EXTRA_TILE)))
{
// ???IDLE ??????? ???? ???
SpaZoneInfoParser::SpaAnimationStyle style = SpaZoneInfoParser::Instance()->GetSpaAnimationStyle(g_pMap->GetMapID());
if (style == SpaZoneInfoParser::AnimationStyle_SitIdle)
{
return TRUE;
}
}
return FALSE;
}
BOOL Player::IsInSpaTile_Change_Sit()
{
if ((GlobalFunc::IsSpaScene() == TRUE) &&
(BIT_CHECK(m_dwCurTileAtt, PTA_EXTRA_TILE)))
{
// ??? ??????? ???? ???
SpaZoneInfoParser::SpaAnimationStyle style =
SpaZoneInfoParser::Instance()->GetSpaAnimationStyle(g_pMap->GetMapID());
if (style == SpaZoneInfoParser::AnimationStyle_Sit)
{
return TRUE;
}
}
return FALSE;
}
#else
BOOL Player::IsInSpaTile()
{
if ((GlobalFunc::IsSpaScene() == TRUE) &&
(BIT_CHECK(m_dwCurTileAtt, PTA_EXTRA_TILE)))
{
return TRUE;
}
return FALSE;
}
#endif //_NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION
void Player::SetSpaSittingAnimationDelay()
{
const int STAND_ANIMATION_MINIMUM_DELAY = 16000;
const int STAND_ANIMATION_DELAY_VARIATION = 10000;
spa_sit_idle_ani_delay_ =
STAND_ANIMATION_MINIMUM_DELAY + rand() % STAND_ANIMATION_DELAY_VARIATION;
}
#endif //_NA_008069_20150210_ADD_SPA_SYSTEM
int Player::GetBulletCount()
{
return m_iValkyrieBulletCount;
}
void Player::SetBulletCount(int iCount)
{
m_iValkyrieBulletCount = iCount;
}
int Player::DecreaseBulletCount()
{
m_iValkyrieBulletCount--;
return m_iValkyrieBulletCount;
}
void Player::ValkyrieReload( BOOL bAnimation )
{
m_iValkyrieShotAnimVariation = rand() % 2;
WzID ReloadAnimID = GetValkyrieReloadAnimation();
WzAnimationInfo *pAniInfo = NULL;
if (GetBasePart()->GetWzUnit() != NULL)
{
pAniInfo = GetBasePart()->GetWzUnit()->GetAnimationInfo(ReloadAnimID);
}
m_iValkyrieShotDelay = 300;
// ???? ????? ???? ????? ????? ?????.
// ??? ???? ??????? ????????? -> ???
if (m_dwValkyrieShotSerial)
{
ProcessAttackResult(m_dwValkyrieShotSerial,TRUE);
m_dwValkyrieShotSerial = 0;
}
if (pAniInfo)
{
m_iValkyrieShotDelay = (int)((float)pAniInfo->m_nMaxFrame * 33.0f);
}
if( bAnimation )
{
SetCurrentBlendAnimation(ReloadAnimID,GetShotBlendBone());
}
m_bValkyrieReload = TRUE;
}
void Player::SetMaxHP( DWORD iHP )
{
GetCharInfo()->m_iMaxHP = iHP;
}
void Player::SetMaxMP( DWORD iMP )
{
GetCharInfo()->m_iMaxMP = iMP;
}
void Player::SetAttackSpeedRatio(int iSpeed)
{
m_wAttSpeedRatio = iSpeed;
}
void Player::SetMoveSpeedRatio(int iSpeed)
{
m_wMoveSpeedRatio = iSpeed;
}
void Player::LaunchEtherWeapon()
{
if (GetWeaponKind() == eWEAPONTYPE_ETHERWEAPON)
{
SetAttachmentAnimation(0,StrToWzID("N001"),FALSE);
}
}
void Player::OnShotStart()
{
OpenCrossbow();
LaunchEtherWeapon();
}
void Player::OnShotEnd()
{
CloseCrossbow();
}
void Player::OnParalyzed()
{
// ??????????????
ResetMoveFlag();
Character::OnParalyzed();
}
void Player::OnShotFire(int iShotCount)
{
switch(GetWeaponKind())
{
case eWEAPONTYPE_ONEHANDCROSSBOW:
{
GlobalFunc::CreateEffectBeUpToOption(StrToWzID("A509"),GetArrowBonePos(iShotCount),GetObjectKey());
SetAttachmentAnimation(iShotCount,StrToWzID("N001"),FALSE);
//??????
Character *pTarget = (Character *)GetTargetObject();
if (pTarget)
{
WzVector vDest,vTemp;
float fArrowAngleZ,fArrowAngleX;
vTemp=pTarget->GetVisiblePos();
vTemp.z+=pTarget->GetArrowTargetHeight();
vDest = vTemp-GetArrowBonePos(iShotCount);//???? ??????? ???? ????? ???????.
vTemp = vDest;
float fLength;
if (vTemp.x == 0.0f && vTemp.y == 0.0f)
{
fLength = 0.0f;
}
else
{
fLength = VectorLength(&vTemp);
}
fArrowAngleX = -atan2(vDest.z,fLength); //???? ???????? ??? ???? ???????? ????
fArrowAngleZ = Math_GetAngleFromVector(&vDest); //???? ???????? ??? ???? ???????? ????
vDest=pTarget->GetVisiblePos();
vDest.z+=pTarget->GetArrowTargetHeight();
HANDLE handle;
handle=GlobalFunc::CreateEffectBeUpToOption(StrToWzID("A041"),vDest,GetObjectKey());//!loop ????? ???? ????
CEffectBody *pBody = g_pEffectManager->GetEffectPtrHandle(handle);
if(pBody)
{
WzVector vRot;
vRot.x = fArrowAngleX;
vRot.y = 0.0f;
vRot.z = fArrowAngleZ;
WzVector vScale;
vScale.x = 1.0f;
vScale.y = 1.0f;
vScale.z = 1.0f;
pBody->SetResultMatrix(vDest,vRot,vScale);
}
}
}
break;
case eWEAPONTYPE_ETHERWEAPON:
{
}
break;
}
}
BOOL Player::CanBeAttackTarget()
{
BOOL bFlag = Character::CanBeAttackTarget();
// ?????????? ??????????? ??????.
if (bFlag)
{
if (IsInvincible())
{
bFlag = FALSE;
}
}
return bFlag;
}
void Player::SetPartVariation(int iPart,int iVariation)
{
if (iPart < 0 || iPart >= PLAYER_VARIATION_MAX)
{
return;
}
switch (iPart)
{
case PLAYER_VARIATION_HAIR:
GetCharInfo()->m_byHair = iVariation;
break;
case PLAYER_VARIATION_FACE:
GetCharInfo()->m_byFace = iVariation;
break;
}
Character::SetPartVariation(iPart, iVariation);
}
void Player::SetHeightVariation(int iIndex)
{
Character::SetHeightVariation(iIndex);
GetCharInfo()->m_byHeight = GetHeightVariation();
}
BOOL Player::HasHPInfo()
{
return m_bHPInfo;
}
#ifdef _NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO
BOOL Player::HasSDInfo()
{
return m_bSDInfo;
}
#endif //_NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO
void Player::SetHPInfo(HPINFO *pInfo)
{
Character::SetHPInfo(pInfo);
GetCharInfo()->m_LV = (int)pInfo->m_LV;
GetCharInfo()->m_iHP = (int)pInfo->m_HP;
GetCharInfo()->m_iMaxHP = (int)pInfo->m_MaxHP;
#ifdef _NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO
GetCharInfo()->m_iSD = (int)pInfo->m_SD;
GetCharInfo()->m_iMaxSD = (int)pInfo->m_MaxSD;
SetSD(pInfo->m_SD);
m_bSDInfo = TRUE;
#endif //_NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO
SetHP( pInfo->m_HP );
m_bHPInfo = TRUE;
}
WzID Player::GetCurrentCamAnimation()
{
return StrToWzID("0000");
}
int Player::GetShotCount()
{
if (GetWeaponKind() == eITEMTYPE_ONEHANDCROSSBOW)
{
return 2;
}
else
{
return 1;
}
}
//------------------------------------------------------------------------------
/**
*/
TCHAR* Player::GetGuildName()
{
return m_GuildRenderInfo.m_tszGuildName;
}
WzColor Player::GetEstablisherColor()
{
int iItemCode;
WzColor color = c_VendorColor;
EquipmentContainer* equipment_container = GetEquipmentContainer();
if (equipment_container == NULL)
{
return color;
}
const int ACCESSORY_COUNT = 3;
for (int a = 0; a < ACCESSORY_COUNT; a++)
{
SCSlot& rSlot = equipment_container->GetSlot(EquipmentContainer::EQUIP_SACCESSORY1 + a);
iItemCode = rSlot.GetCode();
switch(iItemCode)
{
// ????? ????
case 3024:
case 49518:
color = WzColor_RGBA(0,198,255,255);
break;
case 3025:
case 49519:
color = WzColor_RGBA(255,238,0,255);
break;
case 3026:
case 49520:
color = WzColor_RGBA(240,0,255,255);
break;
case 3027:
case 49521:
color = WzColor_RGBA(0,255,73,255);
break;
case 3028:
case 49522:
color = WzColor_RGBA(241,48,0,255);
break;
}
}
return color;
}
void Player::SetMarketTitle(const char * pszName, int iLen)
{
TCHAR szTemp[256];
ZeroMemory(szTemp,sizeof(szTemp));
StrnCopy(szTemp,pszName,iLen);
szTemp[iLen] = 0;
m_strMarketTitle = util::_tstring(szTemp);
}
TCHAR* Player::GetMarketTitle() const
{
return const_cast<TCHAR *>( m_strMarketTitle.c_str() );
}
BOOL Player::IsFlyFinishWeapon()
{
switch(GetWeaponKind())
{
case eWEAPONTYPE_TWOHANDSWORD:
case eWEAPONTYPE_TWOHANDAXE:
case eWEAPONTYPE_ONEHANDSWORD:
case eWEAPONTYPE_SPEAR:
case eWEAPONTYPE_ETHERWEAPON:
case eWEAPONTYPE_GUNTLET: //_NA_004965_20120613_NEW_CHARACTER_MYSTIC
case eWEAPONTYPE_POLEARM: //_NA_004965_20120613_NEW_CHARACTER_MYSTIC
case eWEAPONTYPE_HELLROID_1: //_NA_000000_20130812_NEW_CHARACTER_HELLROID
case eWEAPONTYPE_ARCBLADE: //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
return TRUE;
break;
}
return FALSE;
}
void Player::_renderinfo_GM()
{
TCHAR szResult[MAX_PATH] = {'\0', };
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
const TCHAR* player_name = GetPlayerRenderName();
#else
#ifdef _NA_003027_20111013_HONOR_SYSTEM
const TCHAR* player_name = GetNameWithTitle();
#else
const TCHAR* player_name = GetName();
#endif //_NA_003027_20111013_HONOR_SYSTEM
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
// ?????? ?????
if ( IsShowName() == TRUE )
{
// ??? ??????? GM ??????????
if( IsGM() )
{
// ???? GM ?????? ????
if( g_pHero && g_pHero->IsGM() )
{
// ???? GM ??? ??????? ?????? ??????? ??? ???
if( g_pHero->GetAccountState() )
{
// ???????? ???????? ??????
Sprintf(szResult, _T("%ld %s[%d]"), GetCharInfo()->m_LV, player_name, GetObjectKey());
}
else
{
Sprintf(szResult, _T("%s"), player_name);
}
}
else
{
// GM ??????? ?????? ??????? ?????
Sprintf(szResult, _T("%s"), player_name);
}
m_RenderinfoColor = c_GMTextColor;
RenderTextOnHeadGuild(GetGuildName(), m_RenderinfoColor, -2);
RenderTextOnHead(szResult,m_RenderinfoColor,0);
#ifdef _NA_003033_20110831_DICECAST_ITEM_ROUTING
RenderDiceOnHead();
#endif //_NA_003033_20110831_DICECAST_ITEM_ROUTING
}
}
else
{
// ????J ???? ?????.
if( IsShowRenderinfo() )
{
if( IsGM() )
{
if( IsShowVedorTitle() && this->m_BehaveState == PLAYER_BEHAVE_VENDOR_ESTABLISHER_STATE)
{
_renderinfo_VendorTitle();
}
else
{
// ???????? ?????? ??????. ???????????? ??, 1:1 ??? ??.....
_fillRenderinfoState();
// ???? GM ?????? ????
if( g_pHero && g_pHero->IsGM() )
{
// ???? GM ??? ??????? ?????? ??????? ??? ???
if( g_pHero->GetAccountState() )
{
Sprintf(szResult, _T("%ld %s[%d] %s"), GetCharInfo()->m_LV, player_name, GetObjectKey(), m_szCharState);
}
else
{
if (IsPlayerHaveRenderinfoState() )
{
Sprintf(szResult, _T("%s %s"), player_name, m_szCharState);
}
else
{
Sprintf(szResult, _T("%s"), player_name);
}
}
}
else
{
// GM ??????? ?????? ??????? ?????
if (IsPlayerHaveRenderinfoState())
{
Sprintf(szResult, _T("%s %s"), player_name, m_szCharState);
}
else
{
Sprintf(szResult, _T("%s"), player_name);
}
}
// GM ??????? ????????? ???
m_RenderinfoColor = c_GMTextColor;
selectRenderinfo_Color();
RenderTextOnHeadGuild(GetGuildName(), m_RenderinfoColor, -2);
RenderTextOnHead(szResult,m_RenderinfoColor,0);
#ifdef _NA_003033_20110831_DICECAST_ITEM_ROUTING
RenderDiceOnHead();
#endif //_NA_003033_20110831_DICECAST_ITEM_ROUTING
}
}
}
}
}
BOOL Player::IsShowRenderinfo()
{
// ??? ??????? ??? ????? on??? Hero?? ??? ?? ??????.
if (GAMEOPTION->GetShowPlayerName() &&
(g_pHero && g_pHero->GetObjectKey() != GetObjectKey()))
{
return TRUE;
}
// ??? ??????? ??? ????? off??? ????J ?????? ??? ???? Hero?? ???? ??????.
else if (g_HeroInput.GetPickedObjectKey() == GetObjectKey()
|| (g_pHero && g_pHero->GetObjectKey() == GetObjectKey()))
{
return TRUE;
}
if( IsAttackBeginPlayer()||IsChao())
{
return TRUE;
}
return FALSE;
}
void Player::_fillRenderinfoState()
{
m_bRenderinfoState = TRUE;
if (this->m_BehaveState == PLAYER_BEHAVE_TRADE_STATE)
{
// [1:1 ???/???]
g_InterfaceManager.GetInterfaceString( eST_PLAYER_BEHAVE_TRADE_STATE, m_szCharState, INTERFACE_STRING_LENGTH );
}
else if (this->m_BehaveState == PLAYER_BEHAVE_NPCSHOP_STATE)
{
// [???? ??????]
g_InterfaceManager.GetInterfaceString( eST_PLAYER_BEHAVE_NPCSHOP_STATE, m_szCharState, INTERFACE_STRING_LENGTH );
}
else
{
Sprintf (m_szCharState, _T(""));
m_bRenderinfoState = FALSE;
}
}
//------------------------------------------------------------------------------
/**
*/
BOOL Player::SetPosition( const HONGPOS& Pos)
{
return SetPosition( Pos.wvPos, Pos.wTile);
}
//------------------------------------------------------------------------------
/**
*/
BOOL Player::SetPosition( const WzVector& wvPos ,int iTileIndex)
{
WzVector vOldPos=m_pPathExplorer->GetPos();
int iOldTile=m_pPathExplorer->GetTile();
BeforeRefreshTileAtt();
BOOL rt= Character::SetPosition(wvPos,iTileIndex);
AfterRefreshTileAtt();
if(rt)
{
ShowConflictMessage();
}
//???? ?????? ???? ???? ???? ???? ????? ????? ???.??? ???? ??????? ???? ????? ????? ???? ???? ???
if (m_dwCurTileAtt & (PTA_NO_WALK))
{
rt=FALSE;
}
if(!rt&&m_iOldTile>=0)//?????? ?????? ???? ??????
{
g_pSunTerrain->PathExp_Reset( m_pPathExplorer, vOldPos,iOldTile);//?????? ????? ???? ????? ????
AfterRefreshTileAtt();
m_dwCurTileAtt=m_dwOldTileAtt;
}
return rt;
}
void Player::BeforeRefreshTileAtt()
{
//????? ??? ???? ?????? ?????? ????
m_iOldTile=m_pPathExplorer->GetTile();
//???? ????? ???? ???? ??? ???? ?????? ???? ????
m_dwOldTileAtt=m_dwCurTileAtt;
}
void Player::AfterRefreshTileAtt()
{
m_iCurTile=m_pPathExplorer->GetTile();
//????? ??????? ?????? ?????????
if((m_iOldTile!=m_iCurTile)||m_iCurTile<0)
m_dwCurTileAtt=GetCurrentTileAtt(TRUE);
}
void Player::selectRenderinfo_Color()
{
if( IsGM() )
{
m_RenderinfoColor = c_GMTextColor;
}
else
{
m_RenderinfoColor = c_TextColor;
}
RELATIONKIND::TYPE relationKind = GameFramework::GetCurrentScene()->GetRelationKindOfCharacter( (Character *)this,g_HeroInput.lsForceAttack() );
if (this->m_BehaveState != PLAYER_BEHAVE_IDLE_STATE)
{
if( this->m_BehaveState != PLAYER_BEHAVE_VENDOR_OBSERVER_STATE)
m_RenderinfoColor = c_NoIdleTextColor;
}
if ( GameFramework::GetCurrentScene()->GetType() == SCENE_TYPE_CHUNTING )
{
uiPartyMan* partyMan =
static_cast<uiPartyMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_PARTY));
if(partyMan)
{
if(partyMan->IsPartyMember(GetObjectKey()) == FALSE)
{
if (relationKind == RELATIONKIND::Friend)
{
m_RenderinfoColor = c_TimeAttackTextColor;
}
}
}
}
#ifdef _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
#ifdef _NA_007114_20140313_CHAOSZONE_GOLDRUSH
else if (GlobalFunc::IsBattleGroundScene() ||
GlobalFunc::IsGoldRushScene())
#else
else if (GlobalFunc::IsBattleGroundScene())
#endif // _NA_007114_20140313_CHAOSZONE_GOLDRUSH
{
if (battle_ground_hide_mode() != BattleGroundHideMode_None)
{
m_RenderinfoColor = c_NoIdleTextColor;
}
// ??? GM ???? ???
else if (relationKind == RELATIONKIND::Enemy)
{
m_RenderinfoColor = c_EnemyTextColor;
}
#ifdef _NA_006620_20130402_GM_BATTLE_GROUND_EVENT_GAME
else if (relationKind == RELATIONKIND::None)
{
// no op
}
#endif //_NA_006620_20130402_GM_BATTLE_GROUND_EVENT_GAME
else
{
m_RenderinfoColor = c_TextColor;
}
//
}
#endif //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
if (relationKind == RELATIONKIND::Enemy)
{
//?????????? ?????????????????? TextOnHead Color ????.
DWORD dwAtt = GetCurrentTileAtt(FALSE);
if(BIT_CHECK(dwAtt, PTA_CONFLICT_TILE) || BIT_CHECK(dwAtt, PTA_FREE_CONFLICT_TILE))
{
m_RenderinfoColor = c_EnemyTextColor;
}
#ifdef _GS_GSP_PVP_ENEMY_COLOR
else if(GameFramework::GetCurrentScene()->GetType() == SCENE_TYPE_PVP)
{
//PK????? ??????? PVP??? ???????
m_RenderinfoColor = c_EnemyTextColor;
}
#endif//_GS_GSP_PVP_ENEMY_COLOR
#ifdef _NA_006088_20120910_CHAOS_ZONE_FREE_PVP
else if(GameFramework::GetCurrentScene()->GetType() == SCENE_TYPE_FREEPVP)
{
//PK????? ??????? PVP??? ???????
m_RenderinfoColor = c_EnemyTextColor;
}
#endif //_NA_006088_20120910_CHAOS_ZONE_FREE_PVP
}
if (this->IsDead())
{
m_RenderinfoColor = c_DeadTextColor;
}
if( ! IsGM() )
{
if( this->GetChaoState()==eCHAO_STATE_PREV_CHAO )
m_RenderinfoColor= c_FreeChaoColor;
if ( this->IsAttackBeginPlayer() )
m_RenderinfoColor= c_BoraDoriColor;
if( this->GetChaoState()==eCHAO_STATE_CHAO )
m_RenderinfoColor=c_ChaoColor;
}
if (GENERALPARAM->GetSpecialMode())
{
int y=0;
if(this->GetChaoState()==eCHAO_STATE_PREV_CHAO)
{
y+=1;
RenderTextOnHead(_T("???????"),m_RenderinfoColor,y,TRUE);
}
if(this->IsAttackBeginPlayer())
{
y+=1;
RenderTextOnHead(_T("??????"),m_RenderinfoColor,y,TRUE);
}
if(this->GetChaoState()==eCHAO_STATE_CHAO)
{
y+=1;
RenderTextOnHead(_T("???"),m_RenderinfoColor,y,TRUE);
}
}
//?????? ???????? ?????
if( IsShowName() == FALSE)
{
// ???????? ???? ????
if (m_BehaveState == PLAYER_BEHAVE_VENDOR_ESTABLISHER_STATE)
{
m_RenderinfoColor = GetEstablisherColor();
}
}
BOOL bVirtualID = GetGMGrade() == 4;
if( bVirtualID)
{
m_RenderinfoColor = c_VirtualIDColor;
}
}
int Player::GetCharDelRemainTime()
{
// 2006-10-12 24:03 ( ?????? )
if( _tcslen(m_tszDelDate) != 16 )
{
assert("RealTime Char del input string != 16");
return 0;
}
TCHAR szNumber[5];
tm endTM;
// ??
StrnCopy(szNumber , m_tszDelDate , 4);
szNumber[4] = NULL;
endTM.tm_year = _ttoi(szNumber) - 1900;
// ??
StrnCopy(szNumber, &m_tszDelDate[5], 2);
szNumber[2] = NULL;
endTM.tm_mon = _ttoi(szNumber) - 1;
// ??
StrnCopy(szNumber , &m_tszDelDate[8] , 2);
szNumber[2] = NULL;
endTM.tm_mday = _ttoi(szNumber) + CHAR_DEL_DAYS_OVER_40_LEVEL ;
// ??
StrnCopy(szNumber , &m_tszDelDate[11] , 2);
szNumber[2] = NULL;
endTM.tm_hour = _ttoi(szNumber);
//??
StrnCopy(szNumber, &m_tszDelDate[14], 2);
szNumber[2] = NULL;
endTM.tm_min = _ttoi(szNumber);
endTM.tm_sec = 0;
time_t curTime , endTime = mktime(&endTM);
util::TimeSync::time(&curTime);
return (int) difftime(endTime , curTime );
}
TCHAR* Player::GetCharDelRemainTimeString(TCHAR* string)
{
int RemainTotalTime = GetCharDelRemainTime();
int day = 0 , hour = 0 , minute = 0, second = 0;
int remainder = RemainTotalTime;
// 1?? ???? ???
if( RemainTotalTime >= 86400)
{
day = RemainTotalTime / 86400;
remainder = RemainTotalTime % 86400;
}
// 1???? ???? ???
if( RemainTotalTime >= 3600 )
{
hour = remainder / 3600;
remainder = RemainTotalTime % 3600;
}
// ?? ???? ???
minute = remainder / 60;
second = remainder % 60;
Snprintf(string , (INTERFACE_STRING_LENGTH -1), "[%s%d:%s%d:%s%d:%s%d]",
(day<10)?"0":"", day, (hour<10)?"0":"", hour, (minute<10)?"0":"", minute, (second<10)?"0":"", second);
return string;
}
void Player::_renderinfo_Remain_Char_Del()
{
if( m_DelChk > 0 )
{
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
// 5038 ???? ?????
TCHAR szMessage1[INTERFACE_STRING_LENGTH] = {0,};
TCHAR time_string[INTERFACE_STRING_LENGTH] = {0,};
GetCharDelRemainTimeString(time_string);
g_InterfaceManager.GetInterfaceString(5038 , szMessage1 ,INTERFACE_STRING_LENGTH);
Snprintf(szMessage, INTERFACE_STRING_LENGTH, "%s %s", szMessage1, time_string);
RenderTextOnHead(szMessage , WzColor_RGBA(220,0,0,255),1, FALSE, true);
}
}
BOOL Player::IsShowVedorTitle()
{
BOOL bOnlyMouseOver = ( !GAMEOPTION->GetShowPlayerName() && ( g_HeroInput.GetPickedObjectKey() == GetObjectKey() ));
if( GAMEOPTION->GetDrawMarketTitle() || bOnlyMouseOver )
{
return TRUE;
}
else
{
return FALSE;
}
}
void Player::_renderinfo_VendorTitle()
{
TCHAR szResult[INTERFACE_STRING_LENGTH] = {0,};
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
const TCHAR* player_name = GetPlayerRenderName();
#else
#ifdef _NA_003027_20111013_HONOR_SYSTEM
const TCHAR* player_name = GetNameWithTitle();
#else
const TCHAR* player_name = GetName();
#endif //_NA_003027_20111013_HONOR_SYSTEM
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
if( IsExistGuild() && GAMEOPTION->GetShowGuildName() )
{
Snprintf(szResult , INTERFACE_STRING_LENGTH -1 , _T("< %s > %s") , GetGuildName() , player_name);
}
else
{
Snprintf(szResult ,INTERFACE_STRING_LENGTH -1, _T("%s") , player_name);
}
selectRenderinfo_Color();
RenderTextOnHead(szResult , m_RenderinfoColor , 0);
memset(szResult , 0 , sizeof(szResult));
Snprintf(szResult , INTERFACE_STRING_LENGTH -1 , _T("%s") ,GetMarketTitle() );
RenderTextOnHead(szResult , m_RenderinfoColor , -1);
}
void Player::renderInfo_InCharacterSenen()
{
_renderinfo_Remain_Char_Del();
}
void Player::renderInfo_InBattleScene()
{
TCHAR szResult[INTERFACE_STRING_LENGTH] ={0,};
if( IsShowRenderinfo() )
{
if( IsShowVedorTitle() && this->m_BehaveState == PLAYER_BEHAVE_VENDOR_ESTABLISHER_STATE )
{
_renderinfo_VendorTitle();
}
else
{
// ???????? ?????? ??????.
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
const TCHAR* player_name = GetPlayerRenderName();
#else
#ifdef _NA_003027_20111013_HONOR_SYSTEM
const TCHAR* player_name = GetNameWithTitle();
#else
const TCHAR* player_name = GetName();
#endif //_NA_003027_20111013_HONOR_SYSTEM
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
_fillRenderinfoState();
if (IsPlayerHaveRenderinfoState() )
Sprintf(szResult, _T("%s %s"), player_name, m_szCharState);
else
Sprintf(szResult, _T("%s"), player_name);
selectRenderinfo_Color();
renderInfo_Guild();
RenderTextOnHead(szResult,m_RenderinfoColor,0);
#ifdef _NA_003033_20110831_DICECAST_ITEM_ROUTING
RenderDiceOnHead();
#endif //_NA_003033_20110831_DICECAST_ITEM_ROUTING
}
}
}
void Player::renderInfo_Guild()
{
if ((GameFramework::GetCurrentScene()->GetType() == SCENE_TYPE_SSQ)
#ifdef _NA_004756_120504_SHOW_SSQ_PLAYER_NAME
&& ((g_pHero->IsGM() == FALSE) || (GENERALPARAM->IsShowSSQPlayerName() == FALSE))
#endif //_NA_004756_120504_SHOW_SSQ_PLAYER_NAME
)
{
return;
}
RenderTextOnHeadGuild(GetGuildName(), m_RenderinfoColor, -2);
}
BOOL Player::IsGM()
{
if( m_byGMGrade > 0 && m_byGMGrade < 4 )
{
return TRUE;
}
return FALSE;
}
void Player::GetClassExName(OUT TCHAR * pszOutString)
{
if(FALSE == GENERALPARAM->IsNet())
{
Snprintf(pszOutString,MAX_CLASSNAME_LENGTH, _T("???? ????"));
return;
}
if( !GetCharInfo())
return;
switch ( GetCharInfo()->GetChangeOfClass() )
{
case eCHAREX_BERSERKER_100LEVEL:
g_InterfaceManager.GetInterfaceString( eST_CHARACTER_CLASS_EX_NAME_BERSERKER, pszOutString, MAX_CLASSNAME_LENGTH );
break;
case eCHAR_BERSERKER:
// ??????
g_InterfaceManager.GetInterfaceString( eST_CHARACTER_CLASS_NAME_BERSERKER, pszOutString, MAX_CLASSNAME_LENGTH );
break;
case eCHAREX_DRAGON_KNIGHT_100LEVEL:
case eCHAREX_DRAGON_1stTRANS_100LEVEL:
case eCHAREX_DRAGON_2ndTRANS_100LEVEL:
g_InterfaceManager.GetInterfaceString( eST_CHARACTER_CLASS_EX_NAME_DRAGON, pszOutString, MAX_CLASSNAME_LENGTH );
break;
case eCHAR_DRAGON:
case eCHAREX_DRAGON_1stTRANS:
case eCHAREX_DRAGON_2ndTRANS:
// ????
g_InterfaceManager.GetInterfaceString( eST_CHARACTER_CLASS_NAME_DRAGON, pszOutString, MAX_CLASSNAME_LENGTH );
break;
case eCHAREX_SHADOW_100LEVEL:
case eCHAR_SHADOW:
// ??????
g_InterfaceManager.GetInterfaceString( eST_CHARACTER_CLASS_NAME_SHADOW, pszOutString, MAX_CLASSNAME_LENGTH );
break;
case eCHAREX_VALKYRIE_100LEVEL:
g_InterfaceManager.GetInterfaceString( eST_CHARACTER_CLASS_EX_NAME_VALKYRIE, pszOutString, MAX_CLASSNAME_LENGTH );
break;
case eCHAR_VALKYRIE:
// ?????
g_InterfaceManager.GetInterfaceString( eST_CHARACTER_CLASS_NAME_VALKYRIE, pszOutString, MAX_CLASSNAME_LENGTH );
break;
case eCHAREX_ELEMENTALIST_100LEVEL:
g_InterfaceManager.GetInterfaceString( eST_CHARACTER_CLASS_EX_NAME_MAGICIAN, pszOutString, MAX_CLASSNAME_LENGTH );
break;
case eCHAR_MAGICIAN:
// ??????? ?????
g_InterfaceManager.GetInterfaceString( eST_CHARACTER_CLASS_NAME_MAGICIAN, pszOutString, MAX_CLASSNAME_LENGTH );
break;
case eCHAREX_MYSTIC_100LEVEL:
case eCHAR_MYSTIC:
// ???? //_NA_004965_20120613_NEW_CHARACTER_MYSTIC
g_InterfaceManager.GetInterfaceString( eST_CHARACTER_CLASS_NAME_MYSTIC, pszOutString, MAX_CLASSNAME_LENGTH );
break;
case eCHAREX_HELLROID_100LEVEL:
case eCHAR_HELLROID:
// ?????? //_NA_000000_20130812_NEW_CHARACTER_HELLROID
g_InterfaceManager.GetInterfaceString( eST_CHARACTER_CLASS_NAME_HELLROID, pszOutString, MAX_CLASSNAME_LENGTH );
break;
case eCHAREX_WITCHBLADE_100LEVEL:
case eCHAR_WITCHBLADE:
// ?????????? //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
g_InterfaceManager.GetInterfaceString( eST_CHARACTER_CLASS_NAME_WITCHBLADE, pszOutString, MAX_CLASSNAME_LENGTH );
break;
default:
{
Snprintf(pszOutString,MAX_CLASSNAME_LENGTH, _T("???????????"));
assert(! "????????? ??? ???? ");
}
break;
}
}
void Player::RenderTextOnHeadGuild(TCHAR *szString, WzColor color, int yoffset)
{
if ((GameFramework::GetCurrentScene()->GetType() == SCENE_TYPE_SSQ)
#ifdef _NA_004756_120504_SHOW_SSQ_PLAYER_NAME
&& ((g_pHero->IsGM() == FALSE) || (GENERALPARAM->IsShowSSQPlayerName() == FALSE))
#endif //_NA_004756_120504_SHOW_SSQ_PLAYER_NAME
)
{
return;
}
if (SCENE_TYPE_CHARSELECT == GameFramework::GetCurScene())
{
return;
}
if (SCENE_TYPE_NONE == GameFramework::GetCurScene())
{
return;
}
// ????? ?????? ?????? ????
if ( GetChatDisplayTime() )
{
return;
}
if (m_bObserverMode)
{
return;
}
if (!GAMEOPTION->GetShowGuildName())
{
return;
}
TCHAR szGuildString[INTERFACE_STRING_LENGTH] = { 0,};
Snprintf (szGuildString,INTERFACE_STRING_LENGTH-1, _T("< %s >"), szString);
// fix
yoffset = -1;
if (g_InterfaceManager.GetShowFlag())
{
WzVector wzVisualPos = GetVisiblePos();
WzColor oldcolor = g_pSunRenderer->GetDiffuseColor();
g_pSunRenderer->Set2DMode( TRUE );
g_pSunRenderer->x_pManagerTextOut->StartToUseFont( StrToWzID("m217") );
WzVector wzPos = GetPosition();
wzVisualPos.z += GetMeshHeight();
wzVisualPos.z += GetHeight();
wzVisualPos.z += HEIGHT_GAP;
//if (is_spread_wings())
//{
// //! ???? ??????? ???? ???? ???? ???.
// wzVisualPos.z += 1.4f;
//}
POINT pt2;
float fDepth;
g_pSunRenderer->GetScreenPos( &pt2, &wzVisualPos , &fDepth );
SIZE textsizeGuild, textSizeName;
g_pSunRenderer->x_pManagerTextOut->GetTextExtentPoint(szGuildString,lstrlen(szGuildString),&textsizeGuild);
RECT rc;
rc.left = pt2.x - (textsizeGuild.cx / 2);
rc.top = pt2.y + (yoffset * textsizeGuild.cy ) - 2 ;
rc.right = rc.left + textsizeGuild.cx;
rc.bottom = rc.top + 50;
WzColor BackColor = WzColor_RGBA(0,0,0,100);
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
const TCHAR* player_name = GetPlayerRenderName();
#else
#ifdef _NA_003027_20111013_HONOR_SYSTEM
const TCHAR* player_name = GetNameWithTitle();
#else
const TCHAR* player_name = GetName();
#endif //_NA_003027_20111013_HONOR_SYSTEM
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
g_pSunRenderer->x_pManagerTextOut->GetTextExtentPoint((TCHAR*)player_name, lstrlen(player_name), &textSizeName);// ????? ?????????? ????? error??? (TCHAR*)??? ???? ???? ???
SIZE BigTextSize = textsizeGuild.cx > textSizeName.cx ? textsizeGuild : textSizeName;
RECT rtGuildMark;
//????? ????? ??????? ?????? ??????
//???????? ???? ??????? ????? ???????? ?? ??????.
rtGuildMark.left = pt2.x - 24 - (BigTextSize.cx / 2) - 10;
rtGuildMark.top = pt2.y - 12 - 1;
rtGuildMark.right = pt2.x - (BigTextSize.cx / 2) - 10;
rtGuildMark.bottom = pt2.y + 12 - 1;
eGUILD_MARK_RELATION eRelation = eGUILD_MARK_RELATION_EMPTY;
BASE_GuildMarkInfo* pMarkInfo_Relation = NULL;
#ifdef _NA_006826_20130722_DOMINATION_RENEWAL
if (false)
{
// ??? ??????????
}
#else
if ((SCENE_TYPE_DOMINATION == GameFramework::GetCurScene()) &&
(IsExistGuild()) &&
(g_pHero->GetGuildRenderInfo().m_GuildGuid != m_GuildRenderInfo.m_GuildGuid))
{
eRelation = eGUILD_MARK_RELATION_RED;
pMarkInfo_Relation = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(eGUILD_MARK_RELATION_RED);
}
#endif //_NA_006826_20130722_DOMINATION_RENEWAL
#ifdef _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
#ifdef _NA_007114_20140313_CHAOSZONE_GOLDRUSH
else if (SCENE_TYPE_BATTLEGROUND == GameFramework::GetCurScene() ||
SCENE_TYPE_GOLDRUSH == GameFramework::GetCurScene())
#else
else if (SCENE_TYPE_BATTLEGROUND == GameFramework::GetCurScene())
#endif // _NA_007114_20140313_CHAOSZONE_GOLDRUSH
{
//if (this->GetTeam() == INVALID_TEAM)
{
eRelation = eGUILD_MARK_RELATION_EMPTY;
pMarkInfo_Relation = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(eGUILD_MARK_RELATION_EMPTY);
}
/*else if (g_pHero->GetTeam() == this->GetTeam())
{
eRelation = eGUILD_MARK_RELATION_BLUE;
pMarkInfo_Relation = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(eGUILD_MARK_RELATION_BLUE);
}
else
{
eRelation = eGUILD_MARK_RELATION_RED;
pMarkInfo_Relation = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(eGUILD_MARK_RELATION_RED);
}*/
}
#endif //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
#ifdef _NA_006088_20120910_CHAOS_ZONE_FREE_PVP
else if (SCENE_TYPE_FREEPVP == GameFramework::GetCurScene())
{
eRelation = eGUILD_MARK_RELATION_EMPTY;
pMarkInfo_Relation = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(eGUILD_MARK_RELATION_EMPTY);
}
#endif //_NA_006088_20120910_CHAOS_ZONE_FREE_PVP
else
{
switch (m_GuildRenderInfo.m_RelationType)
{
case eGUILD_RELATION_ALLIENCE:
{
if (g_pHero)
{
//??? ???? ?? ???.(???? ?????? ?? ????)
if (GuildRightInfoParser::Instance()->CheckGradeForRight(eGUILD_RIGHTS_RELATION,
m_GuildRenderInfo.m_GuildGrade))
{
//3???? ????? ??? ?????? ???
eRelation = eGUILD_MARK_RELATION_BLUE;
pMarkInfo_Relation = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(eGUILD_MARK_RELATION_BLUE);
}
else
{
//3???? ?????? ??? ??????? ???????? ???
if (IsExistGuildMark())
{
if ((g_pHero->GetGuildRenderInfo().m_GuildGuid == m_GuildRenderInfo.m_GuildGuid)) //Hero?? ???? ????
{
eRelation = eGUILD_MARK_RELATION_BLUE;
pMarkInfo_Relation = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(eGUILD_MARK_RELATION_BLUE);
}
else
{
eRelation = eGUILD_MARK_RELATION_EMPTY;
pMarkInfo_Relation = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(eGUILD_MARK_RELATION_EMPTY);
}
}
}
}
}
break;
#ifdef _NA_003923_20120222_GUILD_RENEWAL_UI_RENEWAL
case eGUILD_RELATION_BOTH_HOSTILITY:
{
eRelation = eGUILD_MARK_RELATION_RED;
pMarkInfo_Relation = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(eGUILD_MARK_RELATION_RED);
}
break;
case eGUILD_RELATION_ONE_SIDE_HOSTILITY:
case eGUILD_RELATION_PROCLAIM_HOSTILITY:
{
eRelation = eGUILD_MARK_RELATION_ORANGE;
pMarkInfo_Relation = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(eGUILD_MARK_RELATION_ORANGE);
}
break;
#else
case eGUILD_RELATION_BOTH_HOSTILITY:
case eGUILD_RELATION_PROCLAIM_HOSTILITY:
{
eRelation = eGUILD_MARK_RELATION_RED;
pMarkInfo_Relation = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(eGUILD_MARK_RELATION_RED);
}
break;
case eGUILD_RELATION_ONE_SIDE_HOSTILITY:
{
eRelation = eGUILD_MARK_RELATION_ORANGE;
pMarkInfo_Relation = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(eGUILD_MARK_RELATION_ORANGE);
}
break;
#endif //_NA_003923_20120222_GUILD_RENEWAL_UI_RENEWAL
case eGUILD_RELATION_NONE:
default:
{
if (GuildRightInfoParser::Instance()->CheckGradeForRight(eGUILD_RIGHTS_RELATION,
m_GuildRenderInfo.m_GuildGrade))
{
if((g_pHero->GetGuildRenderInfo().m_GuildGuid == m_GuildRenderInfo.m_GuildGuid)) //Hero?? ???? ????
{
eRelation = eGUILD_MARK_RELATION_BLUE;
pMarkInfo_Relation = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(eGUILD_MARK_RELATION_BLUE);
}
else
{
eRelation = eGUILD_MARK_RELATION_EMPTY;
pMarkInfo_Relation = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(eGUILD_MARK_RELATION_EMPTY);
}
}
else
{
if( IsExistGuildMark() && g_pHero)
{
if((g_pHero->GetGuildRenderInfo().m_GuildGuid == m_GuildRenderInfo.m_GuildGuid)) //Hero?? ???? ????
{
eRelation = eGUILD_MARK_RELATION_BLUE;
pMarkInfo_Relation = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(eGUILD_MARK_RELATION_BLUE);
}
else
{
eRelation = eGUILD_MARK_RELATION_EMPTY;
pMarkInfo_Relation = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(eGUILD_MARK_RELATION_EMPTY);
}
}
}
}
break;
}
}
if(pMarkInfo_Relation)
{
g_InterfaceManager.RenderGuildMarkBackGround(rtGuildMark, fDepth, eRelation);
g_InterfaceManager.RenderCharNameBackGround(rtGuildMark.right, rtGuildMark.top, BigTextSize.cx, rtGuildMark.bottom - rtGuildMark.top, fDepth, eRelation, true, true);
}
else
{
if(TRUE == IsExistGuild())
g_InterfaceManager.RenderCharNameBackGround(rtGuildMark.right, rtGuildMark.top, BigTextSize.cx, rtGuildMark.bottom - rtGuildMark.top, fDepth, eRelation, true, false);
else
g_InterfaceManager.RenderCharNameBackGround(rtGuildMark.right, rtGuildMark.top, BigTextSize.cx, rtGuildMark.bottom - rtGuildMark.top, fDepth, eRelation, false, false);
}
#ifdef _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
#ifdef _NA_007114_20140313_CHAOSZONE_GOLDRUSH
if (GlobalFunc::IsBattleGroundScene() == TRUE ||
GlobalFunc::IsGoldRushScene() == TRUE)
#else
if (GlobalFunc::IsBattleGroundScene() == TRUE)
#endif // _NA_007114_20140313_CHAOSZONE_GOLDRUSH
{
DWORD pattern_index = 0;
// ???? ?? ??? ??? (????? ???)
switch (GetTeam())
{
case kRed:
{
pattern_index = 285;
}
break;
case kBlue:
{
pattern_index = 286;
}
break;
default:
{
if (g_pHero && IsPartyMember()) // ?? ?????? ???? ???????? ????? ???????
{
if (g_pHero->GetTeam() == kRed)
{
pattern_index = 285;
}
else
{
pattern_index = 286;
}
}
}
break;
}
if (pattern_index != 0)
{
BASE_GuildMarkInfo* mark_info = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(pattern_index);
if (mark_info)
{
g_InterfaceManager.RenderRectWithTextureAndZTest(rtGuildMark, fDepth, mark_info->iRow, mark_info->iColumn);
}
}
else
{
if( IsExistGuildMark() )
{
//????? ??????
rtGuildMark.bottom -= 3;
rtGuildMark.top += 3;
rtGuildMark.left += 3;
rtGuildMark.right -= 3;
BASE_GuildMarkInfo * pMarkInfo = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(m_GuildRenderInfo.m_BackGroundIndex);
if( pMarkInfo)
{
g_InterfaceManager.RenderRectWithTextureAndZTest(rtGuildMark,fDepth, pMarkInfo->iRow, pMarkInfo->iColumn);
}
pMarkInfo = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(m_GuildRenderInfo.m_PatternIndex);
if( pMarkInfo )
{
g_InterfaceManager.RenderRectWithTextureAndZTest(rtGuildMark,fDepth, pMarkInfo->iRow, pMarkInfo->iColumn);
}
}
}
}
else
#endif //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
if( IsExistGuildMark() )
{
#ifdef _NA_000000_20130828_GUILDMARK_SIZE_MODIFY
//????? ?????? (???)
#else
//????? ??????
rtGuildMark.bottom -= 3;
rtGuildMark.top += 3;
rtGuildMark.left += 3;
rtGuildMark.right -= 3;
#endif //_NA_000000_20130828_GUILDMARK_SIZE_MODIFY
BASE_GuildMarkInfo * pMarkInfo = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(m_GuildRenderInfo.m_BackGroundIndex);
if( pMarkInfo)
{
g_InterfaceManager.RenderRectWithTextureAndZTest(rtGuildMark,fDepth, pMarkInfo->iRow, pMarkInfo->iColumn);
}
pMarkInfo = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(m_GuildRenderInfo.m_PatternIndex);
if( pMarkInfo )
{
g_InterfaceManager.RenderRectWithTextureAndZTest(rtGuildMark,fDepth, pMarkInfo->iRow, pMarkInfo->iColumn);
}
}
if (this->IsExistGuild())
RenderBlockedTextWithDepthTest(szGuildString,&rc,color,BackColor,fDepth, true);
#ifdef _NA_007114_20140313_CHAOSZONE_GOLDRUSH
if (SCENE_TYPE_GOLDRUSH == GameFramework::GetCurScene())
{
RECT right_rect;
right_rect.left = pt2.x + (BigTextSize.cx / 2) + 9/*????*/;
right_rect.right = pt2.x + 24 + (BigTextSize.cx / 2) + 9;
right_rect.top = rtGuildMark.top;
right_rect.bottom = rtGuildMark.bottom;
RenderGoldMarkOnHead(right_rect, fDepth, eRelation);
}
#endif // _NA_007114_20140313_CHAOSZONE_GOLDRUSH
#ifdef _NA_008016_20150203_SUN_RANKING_SYSTEM_GRADE
if ( SCENE_TYPE_GOLDRUSH != GameFramework::GetCurScene() && SCENE_TYPE_DOMINATION != GameFramework::GetCurScene()
#ifdef _NA_008334_20150608_SONNENSCHEIN
&& SCENE_TYPE_SONNENSCHEIN != GameFramework::GetCurScene()
#endif //_NA_008334_20150608_SONNENSCHEIN
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
&& SCENE_TYPE_BATTLEGROUND != GameFramework::GetCurScene()
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
)
{
if ( GetClientPlayerRankingGradeInfo().grade != eSUN_RANKING_GRADE_NONE )
{
RECT right_rect;
right_rect.left = pt2.x + (BigTextSize.cx / 2) + 9/*????*/;
right_rect.right = pt2.x + 24 + (BigTextSize.cx / 2) + 9;
right_rect.top = rtGuildMark.top;
right_rect.bottom = rtGuildMark.bottom;
RenderRankingGradeOnHead(right_rect, fDepth, eRelation);
}
}
#endif // _NA_008016_20150203_SUN_RANKING_SYSTEM_GRADE
#ifdef _NA_007115_20140313_MONDSCHIEN_RENEWAL
if((SCENE_TYPE_DOMINATION == GameFramework::GetCurScene()
#ifdef _NA_008334_20150608_SONNENSCHEIN
|| SCENE_TYPE_SONNENSCHEIN == GameFramework::GetCurScene()
#endif //_NA_008334_20150608_SONNENSCHEIN
)
&& this->IsExistGuild())
{
RECT right_rect;
right_rect.left = pt2.x + (BigTextSize.cx / 2) + 9/*????*/;
right_rect.right = pt2.x + 24 + (BigTextSize.cx / 2) + 9;
right_rect.top = rtGuildMark.top;
right_rect.bottom = rtGuildMark.bottom;
RenderDominationMarkOnHead(right_rect, fDepth, eRelation);
}
#endif // _NA_007115_20140313_MONDSCHIEN_RENEWAL
g_pSunRenderer->x_pManagerTextOut->EndUseFont();
g_pSunRenderer->Set2DMode(FALSE);
g_pSunRenderer->SetColor(oldcolor);
}
}
#ifdef _NA_003027_20111013_HONOR_SYSTEM
void Player::SetTitleName(WORD title_code)
{
bool is_success = false;
BASE_PLAYERINFO* base_player_info = GetCharInfo();
if (base_player_info != NULL)
{
base_player_info->honor_title_ = title_code;
}
if (title_code != 0)
{
TitleListParser::TitleInfo* title_info = TitleListParser::Instance()->GetTitleInfo(title_code);
if (title_info != NULL)
{
const TCHAR* empty_char = _T(" ");
TCHAR title_name[INTERFACE_STRING_LENGTH] = {'\0', };
g_InterfaceManager.GetInterfaceString(title_info->title_name_code, title_name);
if (title_info->title_display_type == TitleListParser::kPrefixTitle)
{
name_with_title_ = title_name;
name_with_title_ += empty_char;
name_with_title_ += GetName();
is_success = true;
}
else if (title_info->title_display_type == TitleListParser::kPostfixTitle)
{
name_with_title_ = GetName();
name_with_title_ += empty_char;
name_with_title_ += title_name;
is_success = true;
}
}
}
if (is_success == false)
{
name_with_title_ = GetName();
}
}
WORD Player::GetTitleCode()
{
WORD title_code = 0;
BASE_PLAYERINFO* base_player_info = GetCharInfo();
if (base_player_info != NULL)
{
title_code = base_player_info->honor_title_;
}
return title_code;
}
#endif //_NA_003027_20111013_HONOR_SYSTEM
void Player::CreateEtherWeaponEffect(bool bShotEffect, bool bFillupEffect)
{
if (GlobalFunc::IsSSQScene())
{
return;
}
//????? ??????, ???? ???? ??????? ??? ??????.
if (!bShotEffect)
{
DestoryEtherWeaponEffect();
}
BOOL IsTransfom = GetTransSkillCode();
if ( GetAttachmentCount() == 0 )
{
if (!IsTransfom)
{
return;
}
}
DWORD dwWeaponKind = GetWeaponKind();
if (IsTransfom)
{
dwWeaponKind = eWEAPONTYPE_ONEHANDSWORD;
}
#ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
BASE_EtherWeaponEffect* pInfo = EtherWeaponEffectInfoParser::Instance()->GetEtherWeponEffectInfo(MAKEDWORD(dwWeaponKind, ETHER_HAND_FIRST));
#else
BASE_EtherWeaponEffect* pInfo = EtherWeaponEffectInfoParser::Instance()->GetEtherWeponEffectInfo(dwWeaponKind);
#endif // _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
//???? ???? ???????????????? ????????? ????
if (!pInfo)
{
return;
}
//???????????: ???????? ????? ???????(?????? ???,?????????? ???)
//???????? ????? 1??
int nWeaponNum = 1;
switch(dwWeaponKind)
{
case eWEAPONTYPE_ONEHANDCROSSBOW:
case eWEAPONTYPE_ONEHANDSWORD:
case eWEAPONTYPE_DAGGER:
#ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
case eWEAPONTYPE_ARCBLADE:
#endif // _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
{
nWeaponNum = 2;
}
break;
}
//??????????(?????,???????)
for(int i=0;i<nWeaponNum;++i)
{
if (i >= (int)GetAttachmentCount())
{
break;
}
//STEP1:????????? ????????????
CWzUnitDraw * pWeaponUnitDraw = NULL;
pWeaponUnitDraw = (IsTransfom) ? (GetBasePart()) : (GetAttachment(i).GetUnitDraw());
if(IsTransfom)
{
pWeaponUnitDraw = GetBasePart();
}
if( ! pWeaponUnitDraw) return;
CWzUnit * pWzUnit = pWeaponUnitDraw->GetWzUnit();
if( !pWzUnit)return;
#ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
pInfo = EtherWeaponEffectInfoParser::Instance()->GetEtherWeponEffectInfo(MAKEDWORD(dwWeaponKind, (i + 1)));
if (!pInfo)
{
pInfo = EtherWeaponEffectInfoParser::Instance()->GetEtherWeponEffectInfo(MAKEDWORD(dwWeaponKind, ETHER_HAND_FIRST));
}
#endif // _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
WzBoneInfo * pBoneInfo = pWzUnit->GetBoneInfo(pInfo->dwTargetBone);
if(IsTransfom)
{
WzID wzID = i ? (StrToWzID("LHND")):(StrToWzID("RHND"));
pWzUnit->GetBoneInfo(wzID);
}
if( !pBoneInfo) return;
//STEP:???? ??????????? ?????????
if( bShotEffect )
{
//??? ?????
m_hEtherWeaponEffect[i][2] = GlobalFunc::CreateEffectBeUpToOption(pInfo->dwEffectCode[ETHER_EFFECT_SHOT],
pWeaponUnitDraw->GetBonePos(pBoneInfo->m_iNode));
}
else
{
if( !bFillupEffect) continue;
int BulletIndex = GetEtherBulletEffectIndex();
//???? ???? ?????(????)
m_hEtherWeaponEffect[i][0] = GlobalFunc::CreateEffectBeUpToOption(pInfo->dwEffectCode[BulletIndex],
pWeaponUnitDraw->GetBonePos(pBoneInfo->m_iNode));
//??????????????(????)
m_hEtherWeaponEffect[i][1] = GlobalFunc::CreateEffectBeUpToOption(pInfo->dwEffectCode[ETHER_EFFECT_CHARGEING],
pWeaponUnitDraw->GetBonePos(pBoneInfo->m_iNode));
}
UpdateEtherWeaponEffectPos();
}
}
void Player::UpdateEtherWeaponEffectPos()
{
if (GlobalFunc::IsSSQScene())
{
return;
}
if (!IsEtherDeviecBulletChargeing())
{
DestoryEtherWeaponEffect();
return;
}
BOOL IsTransfom = GetTransSkillCode();
if ( GetAttachmentCount() == 0 )
{
if (!IsTransfom)
{
return;
}
}
DWORD dwWeaponKind = GetWeaponKind();
if (IsTransfom)
{
dwWeaponKind = eWEAPONTYPE_ONEHANDSWORD;
}
#ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
BASE_EtherWeaponEffect* pInfo = EtherWeaponEffectInfoParser::Instance()->GetEtherWeponEffectInfo(MAKEDWORD(dwWeaponKind, ETHER_HAND_FIRST));
#else
BASE_EtherWeaponEffect* pInfo = EtherWeaponEffectInfoParser::Instance()->GetEtherWeponEffectInfo(dwWeaponKind);
#endif // _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
//?????? ?????????? ????
if (!pInfo)
{
return;
}
int nWeaponNum = 1; //???????? ????? 1??
switch (dwWeaponKind)
{
case eWEAPONTYPE_ONEHANDCROSSBOW:
case eWEAPONTYPE_ONEHANDSWORD:
case eWEAPONTYPE_DAGGER:
#ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
case eWEAPONTYPE_ARCBLADE:
#endif // _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
{
nWeaponNum = 2;
}
break;
}
for (int i = 0; i < nWeaponNum; ++i)
{
if (i >= (int)GetAttachmentCount())
{
break;
}
CWzUnitDraw* pWeaponUnitDraw = NULL;
pWeaponUnitDraw = (IsTransfom) ? (GetBasePart()) : (GetAttachment(i).GetUnitDraw());
if (!pWeaponUnitDraw)
{
return;
}
CWzUnit* pWzUnit = pWeaponUnitDraw->GetWzUnit();
if (!pWzUnit)
{
return;
}
#ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
pInfo = EtherWeaponEffectInfoParser::Instance()->GetEtherWeponEffectInfo(MAKEDWORD(dwWeaponKind, (i + 1)));
if (!pInfo)
{
pInfo = EtherWeaponEffectInfoParser::Instance()->GetEtherWeponEffectInfo(MAKEDWORD(dwWeaponKind, ETHER_HAND_FIRST));
}
#endif // _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
WzBoneInfo* pBoneInfo = pWzUnit->GetBoneInfo(pInfo->dwTargetBone);
if (IsTransfom)
{
WzID wzID = i ? (StrToWzID("LHND")) : (StrToWzID("RHND"));
pBoneInfo = pWzUnit->GetBoneInfo(wzID);
}
if (pBoneInfo)
{
WzMatrix* pwzmTransform = pWeaponUnitDraw->GetTransformBuffer();
if (!pwzmTransform)
{
return;
}
WzMatrix wmOffsetRot, wmRot, wmPosMat, wmScale;
MatrixIdentity(&wmOffsetRot);
//Rotation
WzVector vRot;
SetVector(&vRot, n_deg2rad(pInfo->wvOffsetRot.x), n_deg2rad(pInfo->wvOffsetRot.y), n_deg2rad(pInfo->wvOffsetRot.z));
MatrixRotationZYX(&wmOffsetRot, &vRot);
MatrixMultiply(&wmRot, &wmOffsetRot, &pwzmTransform[pBoneInfo->m_iNode]);
//Position
WzVector vOffsetPos;
VectorTransformCoord(&vOffsetPos, &pInfo->wvOffsetPos, &wmRot);
MatrixTranslation(&wmPosMat, vOffsetPos.x, vOffsetPos.y, vOffsetPos.z);
//????????????
wmRot._41=0;
wmRot._42=0;
wmRot._43=0;
if (IsTransfom)
{
WzVector vScale;
SetVector(&vScale, 0.5f, 1.f, 0.3f);
MatrixScaling(&wmScale, vScale.x, vScale.y, vScale.z);
}
else
{
MatrixScaling(&wmScale, pInfo->wvScale.x ,pInfo->wvScale.y, pInfo->wvScale.z);
}
for (int row = 0; row < 3; ++row)
{
if (m_hEtherWeaponEffect[i][row] == INVALID_HANDLE_VALUE)
{
continue;
}
CEffectBody* pBody = g_pEffectManager->GetEffectPtrHandle(m_hEtherWeaponEffect[i][row]);
if (!pBody)
{
continue;
}
pBody->SetResultMatrix(&wmPosMat, &wmRot, &wmScale);
}
}
}
}
void Player::DestoryEtherWeaponEffect()
{
for(int i=0;i<2;++i)
{
if( m_hEtherWeaponEffect[i][0] != INVALID_HANDLE_VALUE )
{
g_pEffectManager->RemoveEffectPtr(m_hEtherWeaponEffect[i][0]);
m_hEtherWeaponEffect[i][0] = INVALID_HANDLE_VALUE;
}
}
}
bool Player::IsEtherDeviecBulletChargeing()
{
return ((m_EtherIndex == 0) ? false : true);
}
int Player::GetEtherBulletEffectIndex()
{
int index = ETHER_EFFECT_METAL_BULLET;
int iBulletIndex = m_EtherIndex;
switch (iBulletIndex)
{
case 1:
{
index = ETHER_EFFECT_METAL_BULLET;
}
break;
case 2:
{
index = ETHER_EFFECT_ETHER_BULLET;
}
break;
case 3:
{
index = ETHER_EFFECT_MAGIC_BULLET;
}
break;
}
return index;
}
BOOL Player::IsSummonIntensify()
{
return FindSkillEffect( eCHAR_STATE_INTENSIFY_SUMMON ) != NULL;
}
void Player::ProcessSummonIntensifyEffect()
{
// ??????? ?????? ????
if( GetSummonId() == NONE_ID || ! IsSummonIntensify() )
{
//if( m_hSummonIntensifyEffect != INVALID_HANDLE_VALUE)
//{
// g_pEffectManager->RemoveEffectPtr(m_hSummonIntensifyEffect);
// m_hSummonIntensifyEffect = INVALID_HANDLE_VALUE;
//}
Monster *pMon=(Monster *)g_ObjectManager.GetObject(GetSummonId());
if( pMon )
{
CWzUnitDraw * pUnitDraw = pMon->GetBasePart();
if( pUnitDraw && pUnitDraw->GetSubType() != 0)
{
pUnitDraw->SetSubType(0);
}
pMon->DestorySummonIntensifyEffect();
}
return;
}
Monster *pMon=(Monster *)g_ObjectManager.GetObject(GetSummonId());
if( !pMon)
return;
CWzUnitDraw * pUnitDraw = pMon->GetBasePart();
if( pUnitDraw )
{
if( pUnitDraw->GetSubTypeNum() > 1 && pUnitDraw->GetSubType() != 1)
pUnitDraw->SetSubType(1); // ???? ??? ??????.
}
BASE_NPCINFO *pNpcInfo=pMon->GetMonsterInfo();
if( !pNpcInfo )
return;
WzVector wvPos, wvScale,wvRot;
wvScale.x = 1.0f;
wvScale.y = 1.0f;
wvScale.z = 1.0f;
wvRot.x = 0.0f;
wvRot.y = 0.0f;
wvRot.z = 0.0f;
switch(pNpcInfo->m_wClass)
{
case 50:
{
wvPos = pMon->GetBonePos(3);
wvScale.x = 0.3f;
wvScale.y = 0.3f;
wvScale.z = 0.3f;
}
break;
case 51:
{
wvPos = pMon->GetBonePos(4);
}
break;
case 52:
{
wvPos = pMon->GetBonePos(5);
}
break;
default:
{
wvPos = pMon->GetBonePos(0);
}
break;
}
//if( m_hSummonIntensifyEffect == INVALID_HANDLE_VALUE )
//{
// m_hSummonIntensifyEffect = GlobalFunc::CreateEffectBeUpToOption(StrToWzID("K735"), pMon->GetBonePos(0));
//}
//CEffectBody * pBody = g_pEffectManager->GetEffectPtrHandle(m_hSummonIntensifyEffect);
HANDLE effect_handle = pMon->CreateSummonIntensifyEffect(StrToWzID("K735"));
CEffectBody * pBody = g_pEffectManager->GetEffectPtrHandle(effect_handle);
if( pBody )
{
pBody->SetResultMatrix(wvPos,wvRot,wvScale);
}
}
bool Player::IsShowByGameOption()
{
if ( GameFramework::GetCurScene() != SCENE_TYPE_VILLAGE || g_pHero->GetObjectKey() == GetObjectKey() )
{
return true;
}
if (PLAYER_BEHAVE_VENDOR_ESTABLISHER_STATE == m_BehaveState)
{
if ( FALSE == GAMEOPTION->GetShowVendors() )
{
return false;
}
else
{
return true;
}
}
else if ( FALSE == GAMEOPTION->GetShowPlayers() )
{
return false;
}
return true;
}
// ??????? ???? ???? ?? ?????????? ??? ????? ????
void Player::SetDominationStateInfo(const DOMINATION_STATE_TOTAL_INFO* domination_state_info)
{
if (domination_state_info)
{
domination_state_info_.clear();
domination_state_info_.reserve(domination_state_info->m_Count);
for (int index = 0; index < domination_state_info->m_Count; ++index)
{
domination_state_info_.push_back(domination_state_info->m_Slot[index].m_wDominationCode);
}
// ???? ??? ????? ????
// ????? ????? ????? ?????? ???? ?????
size_t size_of_info = domination_state_info_.size();
BOOL is_ssq_scene = GlobalFunc::IsSSQScene();
if ((size_of_info > 0) &&
(GlobalFunc::IsSSQScene() == FALSE)
#ifdef _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
&& (GlobalFunc::IsBattleGroundScene() == FALSE)
#endif //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
#ifdef _NA_006088_20120910_CHAOS_ZONE_FREE_PVP
&& (GlobalFunc::IsFreePVPScene() == FALSE)
#endif //_NA_006088_20120910_CHAOS_ZONE_FREE_PVP
#ifdef _NA_007114_20140313_CHAOSZONE_GOLDRUSH
&& (GlobalFunc::IsGoldRushScene() == FALSE)
#endif // _NA_007114_20140313_CHAOSZONE_GOLDRUSH
#ifdef _NA_007115_20140313_MONDSCHIEN_RENEWAL
&& (GlobalFunc::IsMondschienMap() == FALSE)
#endif // _NA_007115_20140313_MONDSCHIEN_RENEWAL
#ifdef _NA_008069_20150210_ADD_SPA_SYSTEM
&& (GlobalFunc::IsSpaScene() == FALSE)
#endif //_NA_008069_20150210_ADD_SPA_SYSTEM
)
{
CreateDominationGuildRewardEffect(m_GuildRenderInfo.m_GuildDuty);
}
}
}
void Player::ClearDominationStateInfo()
{
domination_state_info_.clear();
// ??????? ??????? ???? ????
RemoveDominationStateEffect();
// ????? ????UI(zonemark) ???????
if (g_pHero && (g_pHero->GetObjectKey() == GetObjectKey()))
{
uiDominationTowerMan::RefreshZoneMarkInfo();
}
}
void Player::CreateDominationGuildRewardEffect(DWORD guild_duty)
{
#ifdef _NA_007488_20140811_MONDSCHUEN_INITIALIZE_N_REWARD
RemoveDominationStateEffect();
#endif //_NA_007488_20140811_MONDSCHUEN_INITIALIZE_N_REWARD
size_t size_of_info = domination_state_info_.size();
size_t size_of_effect = domination_effect_list_.size();
HANDLE hEffect = INVALID_HANDLE_VALUE;
#ifdef _NA_007115_20140313_MONDSCHIEN_RENEWAL
bool area_guild = false; // ??? ??? ?? ???
STLX_VECTOR<MAPCODE>::iterator iter = domination_state_info_.begin();
for ( ; iter != domination_state_info_.end(); ++iter)
{
const sDOMINATION_INFO* domination_info_ptr =
DominationInfoParser::Instance()->GetDominationInfo((*iter));
if (domination_info_ptr && domination_info_ptr->m_DominationType == DOMINATION_TYPE_MONDSCHIEN)
{
area_guild = true;
break;
}
}
#endif // _NA_007115_20140313_MONDSCHIEN_RENEWAL
#ifdef _NA_007488_20140811_MONDSCHUEN_INITIALIZE_N_REWARD
#else
if (size_of_effect != 0 &&
size_of_info > (size_of_effect - 1))
{
RemoveDominationStateEffect();
size_of_effect = 0;
}
#endif //_NA_007488_20140811_MONDSCHUEN_INITIALIZE_N_REWARD
if (size_of_effect == 0)
{
#ifdef _NA_007115_20140313_MONDSCHIEN_RENEWAL
if (area_guild == true)
{
if (guild_duty == eGUILD_DUTY_MASTER)
{
hEffect = g_pEffectManager->CreateEffect(StrToWzID("I885"), GetVisiblePos());
}
else
{
hEffect = g_pEffectManager->CreateEffect(StrToWzID("I886"), GetVisiblePos());
}
}
else
{
if (guild_duty == eGUILD_DUTY_MASTER)
{
hEffect = g_pEffectManager->CreateEffect(StrToWzID("I705"), GetVisiblePos());
}
else
{
hEffect = g_pEffectManager->CreateEffect(StrToWzID("I708"), GetVisiblePos());
}
}
#else
if (guild_duty == eGUILD_DUTY_MASTER)
{
hEffect = g_pEffectManager->CreateEffect(StrToWzID("I705"), GetVisiblePos());
}
else
{
hEffect = g_pEffectManager->CreateEffect(StrToWzID("I708"), GetVisiblePos());
}
#endif // _NA_007115_20140313_MONDSCHIEN_RENEWAL
// ?? ???????? ???? ??? ????
if (hEffect != INVALID_HANDLE_VALUE)
{
domination_effect_list_.push_back(hEffect);
}
size_of_effect++;
}
if (guild_duty == eGUILD_DUTY_MASTER)
{
for (size_t count = (size_of_effect - 1) ; count < size_of_info; ++count)
{
hEffect = g_pEffectManager->CreateEffect(StrToWzID("I710"), GetVisiblePos());
if (hEffect != INVALID_HANDLE_VALUE)
{
domination_effect_list_.push_back(hEffect);
}
size_of_effect++;
}
// ??????? ????? ????
for (size_t count = (size_of_info + 1); count < size_of_effect; ++count)
{
hEffect = domination_effect_list_.back();
if (hEffect != INVALID_HANDLE_VALUE)
{
g_pEffectManager->RemoveEffectPtr(hEffect);
}
domination_effect_list_.pop_back();
}
}
}
void Player::RemoveDominationStateEffect()
{
if (false == domination_effect_list_.empty())
{
std::list<HANDLE>::iterator itr = domination_effect_list_.begin();
std::list<HANDLE>::iterator itr_end = domination_effect_list_.end();
for ( ; itr != itr_end; ++itr)
{
if (INVALID_HANDLE_VALUE != (*itr))
{
g_pEffectManager->RemoveEffectPtr((*itr));
}
}
domination_effect_list_.clear();
}
}
void Player::SetGuildRenderInfo( const GUILD_RENDER_INFO* pGuildInfo )
{
if (pGuildInfo)
{
m_bExistGuild = pGuildInfo->IsExist();
if (m_bExistGuild)
{
BASE_PLAYERINFO* pInfo = GetCharInfo();
if (pInfo)
{
// GUILD_RENDER_INFO ?????? ??????????? ?????? ???????.
// PLAYER_GUILD_RENDER_INFO ?????? ????? ???
// DOMINATION_STATE_TOTAL_INFO ?????? SetDominationStateInfo() ????? ???? ????
memcpy(&m_GuildRenderInfo, pGuildInfo, sizeof(m_GuildRenderInfo));
SetGuildName(m_GuildRenderInfo.m_tszGuildName, MAX_GUILDNAME_LENGTH);
pInfo->m_GuildGuid = m_GuildRenderInfo.m_GuildGuid;
CheckDominationRelation(); // ?????? ??????? ??????? ????
}
}
else
{
ClearGuildRenderInfo();
}
}
}
#ifdef _NA_008016_20150203_SUN_RANKING_SYSTEM_GRADE
void Player::SetClientPlayerRankingGradeInfo( const CLIENT_PLAYER_RANKING_GRADE_INFO* client_player_ranking_grade_info )
{
if ( client_player_ranking_grade_info == NULL )
{
return;
}
is_client_player_ranking_grade_ = client_player_ranking_grade_info->IsExist();
if ( is_client_player_ranking_grade_ )
{
CopyMemory(&client_player_ranking_grade_info_, client_player_ranking_grade_info, sizeof(*client_player_ranking_grade_info));
CreatePlayerRankingEffect();
}
else
{
ClearClientPlayerRankingGradeInfo();
RemovePlayerRankingEffect();
}
}
void Player::RemovePlayerRankingEffect()
{
if (false == player_ranking_grade_effect_list_.empty())
{
std::list<HANDLE>::iterator itr = player_ranking_grade_effect_list_.begin();
std::list<HANDLE>::iterator itr_end = player_ranking_grade_effect_list_.end();
for ( ; itr != itr_end; ++itr)
{
if (INVALID_HANDLE_VALUE != (*itr))
{
g_pEffectManager->RemoveEffectPtr((*itr));
}
}
player_ranking_grade_effect_list_.clear();
}
}
void Player::CreatePlayerRankingEffect()
{
RemovePlayerRankingEffect();
if ( client_player_ranking_grade_info_.ranking_type != eSUN_RANKING_TYPE_BEST_OF_BEST ||
client_player_ranking_grade_info_.grade < eSUN_RANKING_GRADE_0 ||
client_player_ranking_grade_info_.grade > eSUN_RANKING_GRADE_2 )
{
return;
}
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
if (GlobalFunc::IsBattleGroundScene())
{
return;
}
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
size_t size_of_effect = player_ranking_grade_effect_list_.size();
HANDLE hEffect = INVALID_HANDLE_VALUE;
if (size_of_effect == 0)
{
switch ( client_player_ranking_grade_info_.grade )
{
case eSUN_RANKING_GRADE_0:
{
hEffect = g_pEffectManager->CreateEffect(StrToWzID("AB30"), GetVisiblePos());
}
break;
case eSUN_RANKING_GRADE_1:
{
hEffect = g_pEffectManager->CreateEffect(StrToWzID("AB40"), GetVisiblePos());
}
break;
case eSUN_RANKING_GRADE_2:
{
hEffect = g_pEffectManager->CreateEffect(StrToWzID("AB35"), GetVisiblePos());
}
break;
}
if (hEffect != INVALID_HANDLE_VALUE)
{
player_ranking_grade_effect_list_.push_back(hEffect);
}
size_of_effect++;
}
}
void Player::UpdatePlayerRankingEffect()
{
// ????? ???? ???? - ??? ?? ??????
if (false == player_ranking_grade_effect_list_.empty())
{
// ????? ???
WzVector world_pos;
WzMatrix position_matrix, rotation_matrix, temp_matrix;
WzVector result_position;
float rotation_angle = 0.0f;
result_position = GetVisiblePos();
MatrixIdentity(&temp_matrix);
VectorTransformCoord(&world_pos, &result_position, &temp_matrix);
MatrixTranslation(&position_matrix, world_pos.x, world_pos.y, world_pos.z);
BYTE hide_condition = GetHideSkill();
bool is_show_effect = (GetShow() &&
IsShowByGameOption() &&
hide_condition != HIDE_SKILL_INFO::ALL_HIDE &&
BattleScene::GetScreenShotState() != eSCREEN_SHOT_NOT_UI_AND_HERO);
std::list<HANDLE>::iterator itr = player_ranking_grade_effect_list_.begin();
std::list<HANDLE>::iterator itr_end = player_ranking_grade_effect_list_.end();
CEffectBody* effectbody = NULL;
for ( ; itr != itr_end; ++itr)
{
if (INVALID_HANDLE_VALUE != (*itr))
{
effectbody = g_pEffectManager->GetEffectPtrHandle((*itr));
if (INVALID_HANDLE_VALUE != effectbody && NULL != effectbody)
{
MatrixIdentity(&rotation_matrix);
effectbody->SetShow(is_show_effect);
effectbody->SetResultMatrix(&position_matrix, &rotation_matrix, NULL);
}
}
}
}
}
#endif // _NA_008016_20150203_SUN_RANKING_SYSTEM_GRADE
// ??????? ?????? ????? ?????. (?????? ?? ?? ???????)
BOOL Player::IsSimpleRenderMode()
{
// ????????? ?????????? true, ?????? ??????? true ????? ?????? false
// ???????? true
if( IsKindOfObject(PLAYER_OBJECT) == TRUE )
{
if ( IsUseDelayLoading() == true && IsCompletelyLoaded() == false )
{
return true;
}
}
return false;
}
//------------------------------------------------------------------------------
float Player::GetJumpHeight()
{
float height = 3.0f;
if (IsRiding())
{
const sRiderInfo* rider_info = RidingInfoParser::Instance()->GetInfo(GetRiderIdx());
if (rider_info)
{
height = rider_info->set_jump_ * 0.01f;
}
}
if (is_spread_wings())
{
height = 1.0f;;
}
return height;
}
//------------------------------------------------------------------------------
float Player::GetJumpDistance()
{
float ratio = 1.0f;
if (IsRiding())
{
const sRiderInfo* rider_info = RidingInfoParser::Instance()->GetInfo(GetRiderIdx());
if (rider_info)
{
ratio = rider_info->set_hangtime_ * 0.01f;
}
}
#ifdef _NA_000000_20120410_SPEEDHACK
float jump_dist = 0.0f;
if (this == g_pHero)
{
#ifdef _NA_000000_20131022_RECIEVE_SPEED_FROM_SERVER
float move_speed_modifier = GetMoveSpeedModifier();
#else //_NA_000000_20131022_RECIEVE_SPEED_FROM_SERVER
float move_speed_modifier = 0.0f;
if (g_pHero->IsRiding() || g_pHero->m_bCustomMoveSpeed)
{
move_speed_modifier = GetMoveSpeedModifier();
}
else
{
HeroAttributes* const hero_attr = (HeroAttributes*)(g_pHero->GetPlayerAttribute());
move_speed_modifier = hero_attr->move_speed_modifier_;
}
#endif //_NA_000000_20131022_RECIEVE_SPEED_FROM_SERVER
jump_dist = move_speed_modifier * 4.5f * (g_pHero->move_speed_ / GetBaseMoveSpeedAsState(CMS_RUN)) * ratio;
}
else
{
jump_dist = GetMoveSpeedModifier() * 4.5f * (GetMoveSpeed() / GetBaseMoveSpeedAsState(CMS_RUN)) * ratio;
}
#else
float jump_dist = GetMoveSpeedModifier() * 4.5f * (GetMoveSpeed() / GetBaseMoveSpeedAsState(CMS_RUN)) * ratio;
#endif //_NA_000000_20120410_SPEEDHACK
jump_dist = min(jump_dist, 1.5f);
jump_dist = max(jump_dist, 9.0f);
return jump_dist;
}
#ifdef _NA_20120220_JUMP_RENEWAL
#else
//------------------------------------------------------------------------------
bool Player::CalcJumpTime(float move_length)
{
const DWORD kMaxJumpTime = 1000;
float ratio = move_length / GetJumpDistance();
m_JumpData.m_dwHorizonMoveTime = DWORD(kMaxJumpTime * ratio);
m_JumpData.m_dwHorizonMoveTime = min(m_JumpData.m_dwHorizonMoveTime, kMaxJumpTime);
m_JumpData.m_dwVerticalMoveTime = kMaxJumpTime;
if ((is_spread_wings() == true) ||
((rider() != NULL) && (rider()->is_spread() == true)))
{
//ratio = min(ratio, 1.0f);
//dwHorizonMoveTime = (DWORD)(dwVerticalMoveTime * 0.8f);;
m_JumpData.m_dwVerticalMoveTime = 1;//(DWORD)(dwVerticalMoveTime * 1.0f * ratio);
}
return true;
}
#endif
//------------------------------------------------------------------------------
void Player::set_spread_wings(bool val)
{
//------------------------------------------------------------------------------
//! ????? ??? ????? ????????. ???? ???????? ????? ???? ????
POSTYPE at_pos = 0;
if (is_wing_equip(&at_pos) == true)
{
SCSlot& slot = GetEquipmentContainer()->GetSlot(at_pos);
if (slot.GetSlotType() == ST_ITEM)
{
SCItemSlot& item_slot = static_cast<SCItemSlot&>(slot);
if (item_slot.GetItemInfo()->m_wType == eITEMTYPE_WINGS)
{
item_slot.SetUserBlocked(val);
}
}
}
//
bool backup_value = is_spread_wings_;
is_spread_wings_ = val;
if (is_spread_wings_ != backup_value)
{
RefreshAppearRender();
}
}
//------------------------------------------------------------------------------
float Player::GetBodyRadius()
{
return 0.0f;
}
//------------------------------------------------------------------------------
bool Player::is_wing_equip(OUT POSTYPE* at_pos)
{
EquipmentContainer* equipment_container = GetEquipmentContainer();
if (equipment_container == NULL)
{
return false;
}
for (POSTYPE i = EquipmentContainer::EQUIP_SACCESSORY1; i <= EquipmentContainer::EQUIP_SACCESSORY3; ++i)
{
SCItemSlot& item_slot = static_cast<SCItemSlot&>(equipment_container->GetSlot(i));
if (item_slot.GetItemInfo()->m_wType == eITEMTYPE_WINGS)
{
if (at_pos != NULL)
{
*at_pos = i;
}
return true;
}
}
return false;
}
//------------------------------------------------------------------------------
bool Player::is_attached_wing_accessory(OUT int* attach_index)
{
for (int i = AppearanceManager::kAppearanceAttachIndex_Accessory1; i <= AppearanceManager::kAppearanceAttachIndex_Accessory3; ++i)
{
if (i >= (int)GetAttachmentCount())
{
return false;
}
const BASE_ITEMINFO* item_info = ItemInfoParser::Instance()->GetItemInfo(GetAttachmentInfo(i).GetItemCode());
if (item_info != NULL)
{
if (item_info->m_wType == eITEMTYPE_WINGS)
{
if (attach_index != NULL)
{
*attach_index = i;
}
return true;
}
}
}
return false;
}
//------------------------------------------------------------------------------
WzID Player::GetCurrentRiderSpreadAnimation()
{
if (IsRiding() == TRUE)
{
return GlobalFunc::GetPlayerAnimationByRiding(eANI_RIDER_SPREAD, GetRiderKindCode());
}
return 0;
}
//------------------------------------------------------------------------------
WzID Player::GetCurrentRiderFureAnimation()
{
if (IsRiding() == TRUE)
{
return GlobalFunc::GetPlayerAnimationByRiding(eANI_RIDER_FURL, GetRiderKindCode());
}
return 0;
}
//------------------------------------------------------------------------------
WzID Player::GetCurrentSpreadOtherAnimation(WzID default_ani_id, INOUT ePLAYER_ANI& player_ani)
{
if (this != g_pHero)
{
return default_ani_id;
}
WzID move_other_motion = 0;
ePLAYER_ANI spread_player_ani = eANI_STAND;
if (player_ani == eANI_RUN)
{
spread_player_ani = eANI_SPREAD_OTHERMOTION_MOVE;
}
else
{
spread_player_ani = eANI_SPREAD_OTHERMOTION_IDLE;
}
if ((IsRiding() == TRUE) && (rider() != NULL) && rider()->is_spread())
{
move_other_motion = GlobalFunc::GetPlayerAnimationByRiding(spread_player_ani, GetRiderKindCode());
}
else if (is_spread_wings())
{
move_other_motion = GlobalFunc::GetPlayerAnimationBySpreadWings(spread_player_ani);
}
if (move_other_motion > 0)
{
if (GetCurrentAnimation() == move_other_motion)
{
if (current_ani_progress_rate() < 100.0f)
{
//! space key ?????????? ??????? ????
player_ani = spread_player_ani;
return move_other_motion;
}
}
else
{
//???? ??? ???????? space key?? ????????. ??? ???????
if (g_HeroInput.is_jump_key_pressed())
{
player_ani = spread_player_ani;
return move_other_motion;
}
}
}
return default_ani_id;
}
//------------------------------------------------------------------------------
void Player::CreateDominationStampEffect()
{
if (m_hDominationStampEffect == INVALID_HANDLE_VALUE)
{
const float kEffectPositionOffset = 1.3f;
WzVector effect_position = GetHeadBonePos();
effect_position.z += kEffectPositionOffset;
// ????
m_hDominationStampEffect = GlobalFunc::CreateEffectBeUpToOption(StrToWzID("A771"), effect_position);
}
}
//------------------------------------------------------------------------------
void Player::DestroyDominationStampEffect()
{
if (m_hDominationStampEffect != INVALID_HANDLE_VALUE)
{
g_pEffectManager->RemoveEffectPtr(m_hDominationStampEffect);
m_hDominationStampEffect = INVALID_HANDLE_VALUE;
}
}
#ifdef _NA_003033_20110831_DICECAST_ITEM_ROUTING
void Player::RenderDiceOnHead()
{
if (GameFramework::GetCurrentScene()->GetType() == SCENE_TYPE_SSQ)
{
return;
}
if (SCENE_TYPE_CHARSELECT == GameFramework::GetCurScene())
{
return;
}
if (SCENE_TYPE_NONE == GameFramework::GetCurScene())
{
return;
}
// ????? ?????? ?????? ????
if ( GetChatDisplayTime() )
{
return;
}
if (m_bObserverMode)
{
return;
}
TCHAR szGuildString[INTERFACE_STRING_LENGTH] = { 0,};
Snprintf (szGuildString,INTERFACE_STRING_LENGTH-1, _T("< %s >"), GetGuildName());
if (g_InterfaceManager.GetShowFlag())
{
WzVector wzVisualPos = GetVisiblePos();
WzColor oldcolor = g_pSunRenderer->GetDiffuseColor();
g_pSunRenderer->Set2DMode( TRUE );
g_pSunRenderer->x_pManagerTextOut->StartToUseFont( StrToWzID("m217") );
WzVector wzPos = GetPosition();
wzVisualPos.z += GetMeshHeight();
wzVisualPos.z += GetHeight();
wzVisualPos.z += HEIGHT_GAP;
//if (is_spread_wings())
//{
// //! ???? ??????? ???? ???? ???? ???.
// wzVisualPos.z += 1.4f;
//}
POINT pt2;
float fDepth;
g_pSunRenderer->GetScreenPos( &pt2, &wzVisualPos , &fDepth );
SIZE textsizeGuild, textSizeName;
g_pSunRenderer->x_pManagerTextOut->GetTextExtentPoint(szGuildString,lstrlen(szGuildString),&textsizeGuild);
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
const TCHAR* player_name = GetPlayerRenderName();
#else
#ifdef _NA_003027_20111013_HONOR_SYSTEM
const TCHAR* player_name = GetNameWithTitle();
#else
const TCHAR* player_name = GetName();
#endif //_NA_003027_20111013_HONOR_SYSTEM
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
g_pSunRenderer->x_pManagerTextOut->GetTextExtentPoint((TCHAR*)player_name, lstrlen(player_name), &textSizeName);// ????? ?????????? ????? error??? (TCHAR*)??? ???? ???? ???
SIZE BigTextSize = textsizeGuild.cx > textSizeName.cx ? textsizeGuild : textSizeName;
g_pSunRenderer->x_pManagerTextOut->EndUseFont();
//------------------------------------------------------------------------------
//! ????? ???
{
if (g_InterfaceManager.GetDiceCastManager()->IsDiceDraw(GetObjectKey()) == true)
{
uiPartyMan* ui_party_manager = GET_DIALOG_MANAGER(uiPartyMan, UIMAN_PARTY);
if (ui_party_manager != NULL && ui_party_manager->IsParty() == true)
{
int party_index = ui_party_manager->GetPartyIndexByObjectKey(GetObjectKey());
if (party_index >= 0)
{
HANDLE tex_handle = g_InterfaceManager.GetPartyDiceTexture(party_index);
St_TextureContainer* tex_info = g_pSunRenderer->x_pManagerTexture->GetTextureInfo(tex_handle);
if (tex_info != NULL)
{
RECT dice_rect;
dice_rect.left = pt2.x + (BigTextSize.cx / 2) + 5;
dice_rect.right = pt2.x + (BigTextSize.cx / 2)+ tex_info->m_nWidth + 5;
dice_rect.top = pt2.y - (tex_info->m_nHeight / 2) - 2;
dice_rect.bottom = pt2.y + (tex_info->m_nHeight / 2) - 2;
g_InterfaceManager.RenderRectWithTextureAndZTest(
dice_rect,
fDepth,
g_InterfaceManager.GetPartyDiceTexture(party_index));
}
}
}
}
}
//------------------------------------------------------------------------------
g_pSunRenderer->Set2DMode(FALSE);
g_pSunRenderer->SetColor(oldcolor);
}
}
#endif //_NA_003033_20110831_DICECAST_ITEM_ROUTING
void Player::CheckDominationRelation()
{
if(SCENE_TYPE_DOMINATION == GameFramework::GetCurScene()
#ifdef _NA_008334_20150608_SONNENSCHEIN
|| SCENE_TYPE_SONNENSCHEIN == GameFramework::GetCurScene()
#endif //_NA_008334_20150608_SONNENSCHEIN
)
{
#if defined(_NA_006826_20130722_DOMINATION_RENEWAL) && defined(_NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER)
if (IsExistGuild() &&
g_pHero->GetGuildRenderInfo().m_GuildGuid == m_GuildRenderInfo.m_GuildGuid)
{
m_GuildRenderInfo.m_RelationType = eGUILD_RELATION_ALLIENCE;
return;
}
// ????????? TRUE, ????????? FALSE
enum {DEFENDER = 0, ATTACKER = 1};
BOOL hero_section = ATTACKER; // ????? ??
BOOL player_section = ATTACKER; // ??????? ??
// ??.???? ???? ???
{
uiDominationTowerMan* ui_domination_manager = GET_DIALOG_MANAGER(uiDominationTowerMan, UIMAN_DOMINATIONWAR_TOWER);
if (ui_domination_manager)
{
// ???? ?????? ??????????? ???
#ifdef _NA_007115_20140313_MONDSCHIEN_RENEWAL
// ????????? ????????? ??? ???????? ??? ??????? ???? ???? link_map_code?? ???? ???? ??? ?????? code?? ???????.
MAPCODE link_map_code = 0;
if (GlobalFunc::IsMondschienMap() == TRUE)
{
const sDOMINATION_INFO* domination_info_ptr =
DominationInfoParser::Instance()->GetDominationInfo(g_pMap->GetCurrentFieldID());
if (domination_info_ptr)
{
link_map_code = domination_info_ptr->m_DominationMapCode;
}
}
else
{
link_map_code = DominationInfoParser::Instance()->GetDominationLinkMapCode(g_pMap->GetCurrentFieldID());
}
#else
MAPCODE link_map_code = DominationInfoParser::Instance()->GetDominationLinkMapCode(g_pMap->GetCurrentFieldID());
#endif // _NA_007115_20140313_MONDSCHIEN_RENEWAL
DOMINATIONGUILDMAP::iterator found_itr = ui_domination_manager->GetDominationGuildMap().find(link_map_code);
if (found_itr != ui_domination_manager->GetDominationGuildMap().end())
{
DOMINATION_GUILD_INFO* guild_info = &found_itr->second;
if (guild_info)
{
if (guild_info->m_GuildGuid == g_pHero->GetGuildRenderInfo().m_GuildGuid)
{
hero_section = DEFENDER;
}
if (guild_info->m_GuildGuid == m_GuildRenderInfo.m_GuildGuid)
{
player_section = DEFENDER;
}
}
}
// ?????? ??????? ??? ???????
if ((hero_section != DEFENDER) &&
(ui_domination_manager->IsDefenceGuildAlliance(g_pHero->GetGuildRenderInfo().m_GuildGuid)))
{
hero_section = DEFENDER;
}
if ((player_section != DEFENDER) &&
(ui_domination_manager->IsDefenceGuildAlliance(m_GuildRenderInfo.m_GuildGuid)))
{
player_section = DEFENDER;
}
}
}
if (hero_section == DEFENDER) // ?????? ?????? ???
{
if (player_section == DEFENDER) // ??????? ?????? ??? ???.
{
m_GuildRenderInfo.m_RelationType = eGUILD_RELATION_ALLIENCE;
}
else
{
m_GuildRenderInfo.m_RelationType = eGUILD_RELATION_BOTH_HOSTILITY;
}
}
else // ?????? ?????? ???
{
GUILD_RELATION* guild_relation = GuildSystem::GetGuildSystemData().GetGuildRelation(m_GuildRenderInfo.m_GuildGuid);
if (guild_relation != NULL)
{
if ((player_section == ATTACKER) &&
(guild_relation->m_eRelationType == eGUILD_RELATION_ALLIENCE)) // ???????, ?????? ??? ???
{
m_GuildRenderInfo.m_RelationType = eGUILD_RELATION_ALLIENCE;
}
else
{
m_GuildRenderInfo.m_RelationType = eGUILD_RELATION_BOTH_HOSTILITY;
}
}
else
{
m_GuildRenderInfo.m_RelationType = eGUILD_RELATION_BOTH_HOSTILITY;
}
}
#else
if(IsExistGuild() &&
g_pHero->GetGuildRenderInfo().m_GuildGuid != m_GuildRenderInfo.m_GuildGuid)
{
m_GuildRenderInfo.m_RelationType = eGUILD_RELATION_BOTH_HOSTILITY;
}
#endif //_NA_006826_20130722_DOMINATION_RENEWAL
}
}
#ifdef _NA_007114_20140313_CHAOSZONE_GOLDRUSH
void Player::RenderGoldMarkOnHead( RECT rc, float fDepth, eGUILD_MARK_RELATION eRelation)
{
g_InterfaceManager.RenderGuildMarkBackGround(rc, fDepth, eRelation);
// ??? ????
g_InterfaceManager.RenderRectWithTextureAndZTest(rc, fDepth, 0, 11);
int gold_mark_index = -1;
gold_mark_index = ChaosSystem::GetGoldRushData().get_gold_grade(this->GetName());
gold_mark_index = g_InterfaceManager.get_gold_rush_mark_index(gold_mark_index);
if (gold_mark_index != -1)
{
BASE_GuildMarkInfo* guild_mark_info_ptr = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(gold_mark_index);
if (guild_mark_info_ptr)
{
g_InterfaceManager.RenderRectWithTextureAndZTest(rc, fDepth, guild_mark_info_ptr->iRow, guild_mark_info_ptr->iColumn);
}
}
}
#endif // _NA_007114_20140313_CHAOSZONE_GOLDRUSH
#ifdef _NA_008016_20150203_SUN_RANKING_SYSTEM_GRADE
void Player::RenderRankingGradeOnHead( RECT rc, float fDepth, eGUILD_MARK_RELATION relation )
{
g_InterfaceManager.RenderGuildMarkBackGround(rc, fDepth, relation);
int mark_index = g_InterfaceManager.get_ranking_mark_index(GetClientPlayerRankingGradeInfo().ranking_type, GetClientPlayerRankingGradeInfo().grade);
if ( mark_index != 0 )
{
BASE_GuildMarkInfo* guild_mark_info_ptr = GuildMarkInfoParser::Instance()->GetGuildMarkInfo(mark_index);
if (guild_mark_info_ptr)
{
g_InterfaceManager.RenderRectWithTextureAndZTest(rc, fDepth, guild_mark_info_ptr->iRow, guild_mark_info_ptr->iColumn);
}
}
}
#endif // _NA_008016_20150203_SUN_RANKING_SYSTEM_GRADE
#ifdef _NA_007115_20140313_MONDSCHIEN_RENEWAL
void Player::RenderDominationMarkOnHead( RECT rect, float depth, eGUILD_MARK_RELATION eRelation )
{
DOMINATION_GUILD_INFO* domination_info_ptr = NULL;
uiDominationTowerMan* domination_manager_ptr = GET_DIALOG_MANAGER(uiDominationTowerMan, UIMAN_DOMINATIONWAR_TOWER);
if (NULL == domination_manager_ptr)
{
return;
}
g_InterfaceManager.RenderGuildMarkBackGround(rect, depth, eRelation);
// ???? ???????? ?????? ???????.
// ???? ????? ????
domination_info_ptr = domination_manager_ptr->GetDominationGuildInfo();
if (domination_info_ptr && (domination_info_ptr->m_GuildGuid == this->GetPlayerGuildID())
|| (domination_manager_ptr->IsDefenceGuildAlliance(this->GetGuildRenderInfo().m_GuildGuid)))
{
g_InterfaceManager.RenderRectWithTextureAndZTest(rect, depth, 1, 12);
}
else // ????????? ??? ???????.
{
g_InterfaceManager.RenderRectWithTextureAndZTest(rect, depth, 0, 12);
}
}
#endif // _NA_007115_20140313_MONDSCHIEN_RENEWAL
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
const TCHAR* Player::GetPlayerRenderName()
{
if (GlobalFunc::IsBattleGroundScene() == TRUE)
{
if (IsMyHero() && ChaosSystem::GetBattleGroundData().false_name() != NULL)
{
return ChaosSystem::GetBattleGroundData().false_name();
}
}
#ifdef _NA_003027_20111013_HONOR_SYSTEM
return GetNameWithTitle();
#else
return GetName();
#endif //_NA_003027_20111013_HONOR_SYSTEM
}
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND