Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
586
GameTools/NeoRylClient/SkillSystem.cpp
Normal file
586
GameTools/NeoRylClient/SkillSystem.cpp
Normal file
@@ -0,0 +1,586 @@
|
||||
// SkillSystem.cpp: implementation of the CSkillSystem class.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
//#include <crtdbg.h>
|
||||
#include "ClientMain.h"
|
||||
#include "CharacterControl.h"
|
||||
#include "GUITextEdit.h"
|
||||
#include "SkillSystem.h"
|
||||
#include "WinInput.h"
|
||||
|
||||
#include "Skill\SkillMgr.h"
|
||||
|
||||
CSkillSystem g_SkillSystem;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Construction/Destruction
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
CSkillSystem::CSkillSystem()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
CSkillSystem::~CSkillSystem()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CSkillSystem::AddSkill(CSkillNode *lpSkillNode)
|
||||
{
|
||||
m_lstSkillNode.push_back(lpSkillNode);
|
||||
}
|
||||
|
||||
void CSkillSystem::Update()
|
||||
{
|
||||
int snum = CSceneManager::m_EffectManager.GetScriptNum();
|
||||
int bActive;
|
||||
vector<CSkillNode *>::iterator it;
|
||||
CSkillNode *lpSkillNode;
|
||||
|
||||
for(int scnt = 0; scnt < snum; scnt++)
|
||||
{
|
||||
bActive = CSceneManager::m_EffectManager.ProcessScript(scnt);
|
||||
|
||||
if(bActive == 2)// S - M - E <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Script <20>϶<EFBFBD> target<65><74> <20><><EFBFBD><EFBFBD> <20>浹<EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
/* char *esf_name = NULL;
|
||||
esf_name = CSceneManager::m_EffectManager.GetEsfName(scnt);
|
||||
if(esf_name != NULL) { //ȭ<><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȿ<><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
|
||||
if(strstr(esf_name,"arrow_normal")!= NULL) {
|
||||
for(int cChr = 0; cChr < g_CharacterData.m_lstCharData.num; cChr++) {
|
||||
if(!g_CharacterData.m_lstCharData[cChr]->m_lpChrModel) continue;
|
||||
if(g_CharacterData.m_lstCharData[cChr]->m_bCharDead) continue;
|
||||
|
||||
if(g_CharacterData.m_lstCharData[cChr]->m_dwChrID == lpSkillNode->m_dwTargetChrID)
|
||||
{
|
||||
g_CharacterData.m_lstCharData[cChr]->AddArrow("CHEST",CSceneManager::m_EffectManager.m_lstScript[scnt]->GetExt4Quat());
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
for(it = m_lstSkillNode.begin(); it != m_lstSkillNode.end();)
|
||||
{
|
||||
if(CSceneManager::m_EffectManager.CheckScript(scnt, (*it)->m_lpEffectIndex))
|
||||
{
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>̾<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> effect setting(<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ѵ<EFBFBD> effect script <20>ȿ<EFBFBD> <20><><EFBFBD><EFBFBD><EEB0A1> <20><> <20><><EFBFBD><EFBFBD>)
|
||||
char *esf_name = NULL;
|
||||
esf_name = CSceneManager::m_EffectManager.GetEsfName(scnt);
|
||||
if(esf_name != NULL) { //ȭ<><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȿ<><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
|
||||
|
||||
int arrow_value = -1;
|
||||
|
||||
if(strstr(esf_name,"A_Dfire1.esf")!= NULL) {
|
||||
arrow_value = 1;
|
||||
}
|
||||
else if(strstr(esf_name,"A_Dfire2.esf")!= NULL) {
|
||||
arrow_value = 2;
|
||||
}
|
||||
else if(strstr(esf_name,"A_Dfire3.esf")!= NULL) {
|
||||
arrow_value = 3;
|
||||
}
|
||||
else if(strstr(esf_name,"A_Dfire4.esf")!= NULL) {
|
||||
arrow_value = 4;
|
||||
}
|
||||
else if(strstr(esf_name,"A_Dfire5.esf")!= NULL) {
|
||||
arrow_value = 5;
|
||||
}
|
||||
|
||||
if(arrow_value >0) {
|
||||
for(int cChr = 0; cChr < g_CharacterData.m_lstCharData.num; cChr++) {
|
||||
if(!g_CharacterData.m_lstCharData[cChr]->m_lpChrModel) continue;
|
||||
if(g_CharacterData.m_lstCharData[cChr]->m_bCharDead) continue;
|
||||
|
||||
if(g_CharacterData.m_lstCharData[cChr]->m_dwChrID == (*it)->m_dwTargetChrID)
|
||||
{
|
||||
g_CharacterData.m_lstCharData[cChr]->AddArrow("CHEST",CSceneManager::m_EffectManager.m_lstScript[scnt]->GetExt4Quat(),arrow_value);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
////////////////
|
||||
lpSkillNode = (*it);
|
||||
|
||||
if(lpSkillNode->m_wNumAttackCount == 0)
|
||||
{
|
||||
if(lpSkillNode->m_wSkill == AtType::Bow || lpSkillNode->m_wSkill == AtType::CrossBow) { //Ȱ
|
||||
for(int cChr = 0; cChr < g_CharacterData.m_lstCharData.num; cChr++) {
|
||||
if(!g_CharacterData.m_lstCharData[cChr]->m_lpChrModel) continue;
|
||||
if(g_CharacterData.m_lstCharData[cChr]->m_bCharDead) continue;
|
||||
|
||||
if(g_CharacterData.m_lstCharData[cChr]->m_dwChrID == lpSkillNode->m_dwTargetChrID)
|
||||
{
|
||||
g_CharacterData.m_lstCharData[cChr]->AddArrow("CHEST",CSceneManager::m_EffectManager.m_lstScript[scnt]->GetExt4Quat());
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BOOL bGod = TRUE;
|
||||
BOOL bCanDead = FALSE;
|
||||
if(lpSkillNode->m_wSkill & 0x8000)
|
||||
{
|
||||
const Skill::ProtoType *lpSkillProtoType = g_SkillMgr.GetSkillProtoType(lpSkillNode->m_wSkill);
|
||||
|
||||
if(lpSkillProtoType)
|
||||
{
|
||||
if(lpSkillProtoType->m_eTargetType == Skill::Target::FRIEND ||
|
||||
lpSkillProtoType->m_eTargetType == Skill::Target::FRIEND_EXCEPT_SELF)
|
||||
{
|
||||
bGod = FALSE;
|
||||
}
|
||||
|
||||
if(lpSkillProtoType->m_eTargetType == Skill::Target::DEAD_ENEMY ||
|
||||
lpSkillProtoType->m_eTargetType == Skill::Target::DEAD_FRIEND)
|
||||
{
|
||||
bCanDead = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(lpSkillNode->m_wSkill == 0x9502 || lpSkillNode->m_wSkill == 0x9506)
|
||||
{ // źȯ<C5BA>Һ<EFBFBD>
|
||||
unsigned short wAmmo = 4003;
|
||||
CItemInstance *lpItem = g_ClientMain.m_csStatus.GetInventoryItemfromID(wAmmo);
|
||||
|
||||
if(lpItem)
|
||||
{
|
||||
g_ClientMain.m_Network.m_pSocket->CharUseItem(g_ClientMain.m_dwMyChrID, g_ClientMain.m_dwMyChrID, &lpItem->m_lpItemBase->GetPos());
|
||||
// <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
g_CharacterData.MakeSkillAttackInfo(lpSkillNode->m_dwTargetChrID, lpSkillNode->m_wSkill, lpSkillNode->m_wSkillGrade, lpSkillNode->m_cLevel, lpSkillNode->m_wNumAttack, bGod, bCanDead);
|
||||
}
|
||||
} else
|
||||
{
|
||||
// <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
g_CharacterData.MakeSkillAttackInfo(lpSkillNode->m_dwTargetChrID, lpSkillNode->m_wSkill, lpSkillNode->m_wSkillGrade, lpSkillNode->m_cLevel, lpSkillNode->m_wNumAttack, bGod, bCanDead);
|
||||
if(lpSkillNode->m_wSkill == AtType::Bow || lpSkillNode->m_wSkill == AtType::CrossBow)
|
||||
{
|
||||
g_ClientMain.m_Network.m_nsNetworkStateforCastObject = NS_NOWAITING;
|
||||
}
|
||||
}
|
||||
}
|
||||
lpSkillNode->m_wNumAttackCount++;
|
||||
|
||||
if(lpSkillNode->m_wNumAttack <= lpSkillNode->m_wNumAttackCount)
|
||||
{
|
||||
it = m_lstSkillNode.erase(it);
|
||||
delete lpSkillNode;
|
||||
} else
|
||||
{
|
||||
it++;
|
||||
}
|
||||
|
||||
break;
|
||||
} else
|
||||
{
|
||||
it++;
|
||||
}
|
||||
}
|
||||
} else if(bActive == 0)
|
||||
{
|
||||
for(it = m_lstSkillNode.begin(); it != m_lstSkillNode.end();)
|
||||
{
|
||||
if(CSceneManager::m_EffectManager.CheckNullScript((*it)->m_lpEffectIndex))
|
||||
{
|
||||
lpSkillNode = (*it);
|
||||
it = m_lstSkillNode.erase(it);
|
||||
delete lpSkillNode;
|
||||
} else
|
||||
{
|
||||
it++;
|
||||
}
|
||||
}
|
||||
|
||||
vector<LPEffectNode>::iterator itEffect;
|
||||
LPEffectNode lpEffect;
|
||||
for(itEffect = m_lstEffect.begin(); itEffect != m_lstEffect.end();)
|
||||
{
|
||||
if(CSceneManager::m_EffectManager.CheckNullScript((*itEffect)->m_lpEffect))
|
||||
{
|
||||
lpEffect = (*itEffect);
|
||||
itEffect = m_lstEffect.erase(itEffect);
|
||||
delete lpEffect;
|
||||
} else
|
||||
{
|
||||
itEffect++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(g_CharacterData.m_nFocusCharacter == -1) return;
|
||||
|
||||
int nResult = CSceneManager::GetCharacterEvent(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_lpChrModel, EVENT_SHOT);
|
||||
if(nResult)
|
||||
{
|
||||
if(g_ClientMain.m_lpInterface->m_dwRangedWeaponTargetChrID != 0xFFFFFFFF)
|
||||
{
|
||||
BOOL bAttackable = FALSE;
|
||||
if(g_ClientMain.m_csStatus.m_lstEquipment[Item::EquipmentPos::WEAPON_HAND1 + g_ClientMain.m_csStatus.m_cWeaponPos])
|
||||
{
|
||||
unsigned long dwType = g_ClientMain.m_csStatus.m_lstEquipment[Item::EquipmentPos::WEAPON_HAND1 + g_ClientMain.m_csStatus.m_cWeaponPos]->GetItemType();
|
||||
if(g_ClientMain.m_csStatus.m_lstEquipment[Item::EquipmentPos::SHIELD_HAND1 + g_ClientMain.m_csStatus.m_cWeaponPos])
|
||||
{
|
||||
unsigned long dwArrowType = g_ClientMain.m_csStatus.m_lstEquipment[Item::EquipmentPos::SHIELD_HAND1 + g_ClientMain.m_csStatus.m_cWeaponPos]->GetItemType();
|
||||
|
||||
switch(dwType)
|
||||
{
|
||||
case Item::CItemType::BOW:
|
||||
if(dwArrowType == Item::CItemType::ARROW)
|
||||
{
|
||||
lpSkillNode = new CSkillNode;
|
||||
lpSkillNode->Create(g_ClientMain.m_lpInterface->m_dwRangedWeaponTargetChrID, 0, AtType::Bow, 0, 0);
|
||||
}
|
||||
break;
|
||||
|
||||
case Item::CItemType::CROSSBOW:
|
||||
if(dwArrowType == Item::CItemType::BOLT)
|
||||
{
|
||||
lpSkillNode = new CSkillNode;
|
||||
lpSkillNode->Create(g_ClientMain.m_lpInterface->m_dwRangedWeaponTargetChrID, 0, AtType::CrossBow, 0, 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
nResult = CSceneManager::GetCharacterEvent(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_lpChrModel, EVENT_JUSTSTART);
|
||||
if(nResult && g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bSkillCombo)
|
||||
{
|
||||
CEffScript *test_script;
|
||||
// _ASSERTE(_CrtCheckMemory());
|
||||
test_script = new CEffScript;
|
||||
test_script->SetInterfaceSet(true);
|
||||
test_script->GetScriptBinData("inter_fasthit_button_2.esf");
|
||||
CSceneManager::m_EffectManager.AddInterfaceScript(test_script);
|
||||
}
|
||||
|
||||
nResult = CSceneManager::GetCharacterEvent(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_lpChrModel, EVENT_JUST);
|
||||
if(g_DeviceInput.GetIsRightMouseDown())
|
||||
{
|
||||
if(nResult && g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bSkillCombo)
|
||||
{
|
||||
const Skill::ProtoType *lpSkill = g_SkillMgr.GetSkillProtoType(g_ClientMain.m_csStatus.m_lpQuickSelected->GetProtoTypeID());
|
||||
if(lpSkill)
|
||||
{
|
||||
if(lpSkill->m_bGauge)
|
||||
{
|
||||
lpSkill = &lpSkill[g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwSkillComboCount];
|
||||
|
||||
unsigned long dwMotion;
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->SetMotionString(&dwMotion, (char *)lpSkill->m_szCastingFileName);
|
||||
|
||||
if(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwUpperChrAction + 1 == dwMotion)
|
||||
// if(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwUpperChrAction - (g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwSkillComboCount - 1) == dwMotion)
|
||||
{
|
||||
CEffScript *test_script;
|
||||
// _ASSERTE(_CrtCheckMemory());
|
||||
test_script = new CEffScript;
|
||||
test_script->SetInterfaceSet(true);
|
||||
test_script->GetScriptBinData("inter_fasthit_button_3.esf");
|
||||
CSceneManager::m_EffectManager.AddInterfaceScript(test_script);
|
||||
|
||||
// <20><> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>õȰ<C3B5> <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD>϶<EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>
|
||||
g_CharacterData.m_bComboSuccess = TRUE;
|
||||
} else
|
||||
{
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bSkillCombo = FALSE;
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwSkillComboCount = 0;
|
||||
|
||||
if(g_CharacterData.m_lpButtonNormal)
|
||||
{
|
||||
CSceneManager::m_EffectManager.DeleteInterfaceScript(g_CharacterData.m_lpButtonNormal);
|
||||
g_CharacterData.m_lpButtonNormal = NULL;
|
||||
g_CharacterData.m_bComboSuccess = FALSE;
|
||||
|
||||
CEffScript *test_script;
|
||||
// _ASSERTE(_CrtCheckMemory());
|
||||
test_script = new CEffScript;
|
||||
test_script->SetInterfaceSet(true);
|
||||
test_script->GetScriptBinData("inter_fasthit_button_4.esf");
|
||||
CSceneManager::m_EffectManager.AddInterfaceScript(test_script);
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bSkillCombo = FALSE;
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwSkillComboCount = 0;
|
||||
|
||||
if(g_CharacterData.m_lpButtonNormal)
|
||||
{
|
||||
CSceneManager::m_EffectManager.DeleteInterfaceScript(g_CharacterData.m_lpButtonNormal);
|
||||
g_CharacterData.m_lpButtonNormal = NULL;
|
||||
g_CharacterData.m_bComboSuccess = FALSE;
|
||||
|
||||
CEffScript *test_script;
|
||||
// _ASSERTE(_CrtCheckMemory());
|
||||
test_script = new CEffScript;
|
||||
test_script->SetInterfaceSet(true);
|
||||
test_script->GetScriptBinData("inter_fasthit_button_4.esf");
|
||||
CSceneManager::m_EffectManager.AddInterfaceScript(test_script);
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bSkillCombo = FALSE;
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwSkillComboCount = 0;
|
||||
|
||||
if(g_CharacterData.m_lpButtonNormal)
|
||||
{
|
||||
CSceneManager::m_EffectManager.DeleteInterfaceScript(g_CharacterData.m_lpButtonNormal);
|
||||
g_CharacterData.m_lpButtonNormal = NULL;
|
||||
g_CharacterData.m_bComboSuccess = FALSE;
|
||||
|
||||
CEffScript *test_script;
|
||||
// _ASSERTE(_CrtCheckMemory());
|
||||
test_script = new CEffScript;
|
||||
test_script->SetInterfaceSet(true);
|
||||
test_script->GetScriptBinData("inter_fasthit_button_4.esf");
|
||||
CSceneManager::m_EffectManager.AddInterfaceScript(test_script);
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bSkillCombo = FALSE;
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwSkillComboCount = 0;
|
||||
|
||||
if(g_CharacterData.m_lpButtonNormal)
|
||||
{
|
||||
CSceneManager::m_EffectManager.DeleteInterfaceScript(g_CharacterData.m_lpButtonNormal);
|
||||
g_CharacterData.m_lpButtonNormal = NULL;
|
||||
g_CharacterData.m_bComboSuccess = FALSE;
|
||||
|
||||
CEffScript *test_script;
|
||||
// _ASSERTE(_CrtCheckMemory());
|
||||
test_script = new CEffScript;
|
||||
test_script->SetInterfaceSet(true);
|
||||
test_script->GetScriptBinData("inter_fasthit_button_4.esf");
|
||||
CSceneManager::m_EffectManager.AddInterfaceScript(test_script);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
nResult = CSceneManager::GetCharacterEvent(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_lpChrModel, EVENT_JUSTEND);
|
||||
if(nResult)
|
||||
{
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwSkillComboCount = 0;
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bSkillCombo = FALSE;
|
||||
|
||||
if(g_CharacterData.m_lpButtonNormal)
|
||||
{
|
||||
CSceneManager::m_EffectManager.DeleteInterfaceScript(g_CharacterData.m_lpButtonNormal);
|
||||
g_CharacterData.m_lpButtonNormal = NULL;
|
||||
g_CharacterData.m_bComboSuccess = FALSE;
|
||||
|
||||
CEffScript *test_script;
|
||||
// _ASSERTE(_CrtCheckMemory());
|
||||
test_script = new CEffScript;
|
||||
test_script->SetInterfaceSet(true);
|
||||
test_script->GetScriptBinData("inter_fasthit_button_4.esf");
|
||||
CSceneManager::m_EffectManager.AddInterfaceScript(test_script);
|
||||
}
|
||||
}
|
||||
|
||||
static bool bAttack;
|
||||
nResult = CSceneManager::GetCharacterEvent(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_lpChrModel, EVENT_HIT);
|
||||
if(nResult)
|
||||
{
|
||||
bAttack = FALSE;
|
||||
lpSkillNode = GetNormalSkillNode();
|
||||
if(!lpSkillNode)
|
||||
{
|
||||
// <20>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
lpSkillNode = new CSkillNode;
|
||||
lpSkillNode->Create(0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
if(!lpSkillNode->m_bFirstAttack)
|
||||
{
|
||||
// ó<><C3B3> <20><><EFBFBD><EFBFBD> <20>϶<EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
float fAttackRotation[6];
|
||||
fAttackRotation[0]=-55.0f;
|
||||
fAttackRotation[1]=30.0f;
|
||||
fAttackRotation[2]=-10.0f;
|
||||
fAttackRotation[3]=-10.0f;
|
||||
fAttackRotation[4]=-10.0f;
|
||||
fAttackRotation[5]=-10.0f;
|
||||
|
||||
float fAttackRate[6];
|
||||
fAttackRate[0]=0.0f;
|
||||
fAttackRate[1]=0.0f;
|
||||
fAttackRate[2]=0.0f;
|
||||
fAttackRate[3]=20.0f;
|
||||
fAttackRate[4]=20.0f;
|
||||
fAttackRate[5]=20.0f;
|
||||
|
||||
BOOL bGod = TRUE;
|
||||
if(lpSkillNode->m_wSkill & 0x8000)
|
||||
{
|
||||
const Skill::ProtoType *lpSkillProtoType = g_SkillMgr.GetSkillProtoType(lpSkillNode->m_wSkill);
|
||||
|
||||
if(lpSkillProtoType)
|
||||
{
|
||||
if(lpSkillProtoType->m_eTargetType == Skill::Target::FRIEND ||
|
||||
lpSkillProtoType->m_eTargetType == Skill::Target::FRIEND_EXCEPT_SELF)
|
||||
{
|
||||
bGod = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bAttack = g_CharacterData.MakeAttackInfo(lpSkillNode->m_wSkill, lpSkillNode->m_wSkillGrade, lpSkillNode->m_cLevel,
|
||||
lpSkillNode->m_wNumAttack, fAttackRotation[g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwAttackCombo],
|
||||
fAttackRate[g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwAttackCombo], lpSkillNode->m_bAngle, bGod);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_CharacterData.MakeVisualAttackInfo();
|
||||
}
|
||||
lpSkillNode->m_wNumAttackCount += nResult;
|
||||
|
||||
if(bAttack) lpSkillNode->m_bFirstAttack = TRUE;
|
||||
|
||||
/* if(g_ClientMain.GetChangeWeapon())
|
||||
{
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwAttackCombo = 0;
|
||||
g_ClientMain.m_bChangeWeapon = FALSE;
|
||||
} else
|
||||
{
|
||||
if(bAttack && !(lpSkillNode->m_wSkill & 0x8000) && (g_DeviceInput.GetIsLeftMousePress() || g_CharacterData.m_bAutoTargetAttack)) // Ÿ<>̹<EFBFBD><CCB9><EFBFBD> <20>¾<EFBFBD><C2BE><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
//CSceneManager::AddDelayTimer(m_lstCharData[m_nFocusCharacter].m_lpChrModel, 3);
|
||||
// <20><><EFBFBD><EFBFBD> <20><EFBFBD><DEBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>.
|
||||
if(g_ClientMain.m_csStatus.m_lstEquipment[11 + g_ClientMain.m_csStatus.m_cWeaponPos])
|
||||
{
|
||||
if(++g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwAttackCombo >= g_CharacterData.m_dwMaxCombo)
|
||||
{
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwAttackCombo = 0;
|
||||
} else
|
||||
{
|
||||
if( g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_ATTACK ||
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_ATTACK2 ||
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_ATTACK3 ||
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_ATTACK4 ||
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_ATTACK5 ||
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_ATTACK6)
|
||||
{
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction = CA_WAIT;
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwUpperChrAction = CA_WAIT;
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bUpperAble = TRUE;
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bLowerAble = TRUE;
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bUpperAnimating = FALSE;
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bLowerAnimating = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwAttackCombo = 0;
|
||||
}
|
||||
}*/
|
||||
|
||||
if(lpSkillNode->m_wNumAttack <= lpSkillNode->m_wNumAttackCount || lpSkillNode->m_wSkill == 0x9305)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>ų <20><><EFBFBD>带 <20><><EFBFBD>ش<EFBFBD>.
|
||||
for(it = m_lstSkillNode.begin(); it != m_lstSkillNode.end(); it++)
|
||||
{
|
||||
if((*it) == lpSkillNode) break;
|
||||
}
|
||||
|
||||
it = m_lstSkillNode.erase(it);
|
||||
delete lpSkillNode;
|
||||
}
|
||||
}
|
||||
|
||||
nResult = CSceneManager::GetCharacterEvent(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_lpChrModel, EVENT_CANCEL);
|
||||
if(nResult)
|
||||
{
|
||||
if(g_ClientMain.GetChangeWeapon())
|
||||
{
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwAttackCombo = 0;
|
||||
g_ClientMain.m_bChangeWeapon = FALSE;
|
||||
} else
|
||||
{
|
||||
if(bAttack && (g_DeviceInput.GetIsLeftMousePress() || g_CharacterData.m_bAutoTargetAttack)) // Ÿ<>̹<EFBFBD><CCB9><EFBFBD> <20>¾<EFBFBD><C2BE><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
//CSceneManager::AddDelayTimer(m_lstCharData[m_nFocusCharacter].m_lpChrModel, 3);
|
||||
// <20><><EFBFBD><EFBFBD> <20><EFBFBD><DEBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>.
|
||||
if(g_ClientMain.m_csStatus.m_lstEquipment[11 + g_ClientMain.m_csStatus.m_cWeaponPos])
|
||||
{
|
||||
if(++g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwAttackCombo >= g_CharacterData.m_dwMaxCombo)
|
||||
{
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwAttackCombo = 0;
|
||||
} else
|
||||
{
|
||||
if( g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_ATTACK ||
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_ATTACK2 ||
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_ATTACK3 ||
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_ATTACK4 ||
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_ATTACK5 ||
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_ATTACK6)
|
||||
{
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction = CA_WAIT;
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwUpperChrAction = CA_WAIT;
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bUpperAble = TRUE;
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bLowerAble = TRUE;
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bUpperAnimating = FALSE;
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bLowerAnimating = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwAttackCombo = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
vector<LPEffectNode>::iterator itEffect;
|
||||
for(itEffect = m_lstEffect.begin(); itEffect != m_lstEffect.end(); itEffect++)
|
||||
{
|
||||
/* if(CSceneManager::m_EffectManager.CheckNullScript((*itEffect)->m_lpEffect))
|
||||
{
|
||||
LPEffectNode lpEffect = (*itEffect);
|
||||
itEffect = m_lstEffect.erase(itEffect);
|
||||
delete lpEffect;
|
||||
} else
|
||||
{*/
|
||||
CCreature *lpCreature = g_CharacterData.GetCreature(g_ClientMain.m_dwMyChrID);
|
||||
if(lpCreature)
|
||||
{
|
||||
(*itEffect)->m_lpEffect->SetStartPos(lpCreature->m_vecPos.x, lpCreature->m_vecPos.y, lpCreature->m_vecPos.z);
|
||||
}
|
||||
|
||||
if((*itEffect)->m_dwTargetID != 0xFFFFFFFF)
|
||||
{
|
||||
lpCreature = g_CharacterData.GetCreature((*itEffect)->m_dwTargetID);
|
||||
if(lpCreature)
|
||||
{
|
||||
(*itEffect)->m_lpEffect->SetEndPos(lpCreature->m_vecPos.x, lpCreature->m_vecPos.y, lpCreature->m_vecPos.z);
|
||||
}
|
||||
}
|
||||
/*
|
||||
itEffect++;
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
CSkillNode * CSkillSystem::GetNormalSkillNode()
|
||||
{
|
||||
vector<CSkillNode *>::iterator it;
|
||||
for(it = m_lstSkillNode.begin(); it != m_lstSkillNode.end(); it++)
|
||||
{
|
||||
// if(!((*it)->m_wSkill & 0x8000)) return (*it);
|
||||
if((*it)->m_bMelee || (*it)->m_wSkill == 0x9407) return (*it);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
Reference in New Issue
Block a user