From d841bc1bbf3e86a32d2943590fa8fae09cf051fa Mon Sep 17 00:00:00 2001 From: Tahsin Date: Thu, 24 Apr 2025 11:11:31 +0200 Subject: [PATCH 1/2] dwNeedItemFix MagicSkillMng.cpp This is a fix to cast skills since the newer tbl's from version roughly 1070+ have a dwNeedItem 9 instead of the original dwNeedItem 0 skills are greyed out and fail to cast even if you equip weapons or class specific items. Also skills that require no items failed to cast with this update we can now cast skills and work further --- src/game/MagicSkillMng.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/game/MagicSkillMng.cpp b/src/game/MagicSkillMng.cpp index 5a614aa0..0237164d 100644 --- a/src/game/MagicSkillMng.cpp +++ b/src/game/MagicSkillMng.cpp @@ -228,10 +228,12 @@ bool CMagicSkillMng::CheckValidSkillMagic(__TABLE_UPC_SKILL * pSkill) { int LeftItem1 = LeftItem / 10; int RightItem1 = RightItem / 10; - if (pSkill->dwNeedItem != 0 && pSkill->dwNeedItem != LeftItem1 && pSkill->dwNeedItem != RightItem1) { + if (pSkill->dwNeedItem != 0 && pSkill->dwNeedItem != 9 && pSkill->dwNeedItem != LeftItem1 && + pSkill->dwNeedItem != RightItem1) { return false; } - if (pSkill->dwNeedItem == 0 && (pSkill->dw1stTableType == 1 || pSkill->dw2ndTableType == 1)) { + if (pSkill->dwNeedItem == 0 && pSkill->dwNeedItem != 9 && + (pSkill->dw1stTableType == 1 || pSkill->dw2ndTableType == 1)) { if (LeftItem != 11 && (LeftItem1 < 1 || LeftItem1 > 5) && RightItem1 != 11 && (RightItem1 < 1 || RightItem1 > 5)) { return false; @@ -588,13 +590,15 @@ bool CMagicSkillMng::CheckValidCondition(int iTargetID, __TABLE_UPC_SKILL * pSki int LeftItem1 = LeftItem / 10; int RightItem1 = RightItem / 10; - if (pSkill->dwNeedItem != 0 && pSkill->dwNeedItem != LeftItem1 && pSkill->dwNeedItem != RightItem1) { + if (pSkill->dwNeedItem != 0 && pSkill->dwNeedItem != 9 && pSkill->dwNeedItem != 9 && + pSkill->dwNeedItem != LeftItem1 && pSkill->dwNeedItem != RightItem1) { std::string buff; ::_LoadStringFromResource(IDS_SKILL_FAIL_INVALID_ITEM, buff); m_pGameProcMain->MsgOutput(buff, 0xffffff00); return false; } - if (pSkill->dwNeedItem == 0 && (pSkill->dw1stTableType == 1 || pSkill->dw2ndTableType == 1)) { + if (pSkill->dwNeedItem == 0 && pSkill->dwNeedItem != 9 && + (pSkill->dw1stTableType == 1 || pSkill->dw2ndTableType == 1)) { if (LeftItem != 11 && (LeftItem1 < 1 || LeftItem1 > 5) && RightItem1 != 11 && (RightItem1 < 1 || RightItem1 > 5)) { std::string buff; From 7ff377eddcb8856a0f1fa609216f9a0eb9854615 Mon Sep 17 00:00:00 2001 From: Tahsin Date: Fri, 25 Apr 2025 17:47:37 +0200 Subject: [PATCH 2/2] Had to comment this out Skills were working for other classes but warrior was still having issues in page 1055/2055 1056/2056 --- src/game/MagicSkillMng.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/game/MagicSkillMng.cpp b/src/game/MagicSkillMng.cpp index 0237164d..ef834c87 100644 --- a/src/game/MagicSkillMng.cpp +++ b/src/game/MagicSkillMng.cpp @@ -209,17 +209,17 @@ bool CMagicSkillMng::CheckValidSkillMagic(__TABLE_UPC_SKILL * pSkill) { int LeftItem = s_pPlayer->ItemClass_LeftHand(); int RightItem = s_pPlayer->ItemClass_RightHand(); - if (pSkill->iNeedSkill == 1055 || pSkill->iNeedSkill == 2055) { - if ((LeftItem != ITEM_CLASS_SWORD && LeftItem != ITEM_CLASS_AXE && LeftItem != ITEM_CLASS_MACE) || - (RightItem != ITEM_CLASS_SWORD && RightItem != ITEM_CLASS_AXE && RightItem != ITEM_CLASS_MACE)) { - return false; - } - } else if (pSkill->iNeedSkill == 1056 || pSkill->iNeedSkill == 2056) { - if (RightItem != ITEM_CLASS_SWORD_2H && RightItem != ITEM_CLASS_AXE_2H && RightItem != ITEM_CLASS_MACE_2H && - RightItem != ITEM_CLASS_POLEARM) { - return false; - } - } + //if (pSkill->iNeedSkill == 1055 || pSkill->iNeedSkill == 2055) { + // if ((LeftItem != ITEM_CLASS_SWORD && LeftItem != ITEM_CLASS_AXE && LeftItem != ITEM_CLASS_MACE) || + // (RightItem != ITEM_CLASS_SWORD && RightItem != ITEM_CLASS_AXE && RightItem != ITEM_CLASS_MACE)) { + // return false; + // } + //} else if (pSkill->iNeedSkill == 1056 || pSkill->iNeedSkill == 2056) { + // if (RightItem != ITEM_CLASS_SWORD_2H && RightItem != ITEM_CLASS_AXE_2H && RightItem != ITEM_CLASS_MACE_2H && + // RightItem != ITEM_CLASS_POLEARM) { + // return false; + // } + //} if (pInfoBase->iHP < pSkill->iExhaustHP) { return false; @@ -562,7 +562,7 @@ bool CMagicSkillMng::CheckValidCondition(int iTargetID, __TABLE_UPC_SKILL * pSki int LeftItem = s_pPlayer->ItemClass_LeftHand(); int RightItem = s_pPlayer->ItemClass_RightHand(); - if (pSkill->iNeedSkill == 1055 || pSkill->iNeedSkill == 2055) { + /*if (pSkill->iNeedSkill == 1055 || pSkill->iNeedSkill == 2055) { if ((LeftItem != ITEM_CLASS_SWORD && LeftItem != ITEM_CLASS_AXE && LeftItem != ITEM_CLASS_MACE) || (RightItem != ITEM_CLASS_SWORD && RightItem != ITEM_CLASS_AXE && RightItem != ITEM_CLASS_MACE)) { std::string buff; @@ -578,7 +578,7 @@ bool CMagicSkillMng::CheckValidCondition(int iTargetID, __TABLE_UPC_SKILL * pSki m_pGameProcMain->MsgOutput(buff, 0xffffff00); return false; } - } + }*/ if (pInfoBase->iHP < pSkill->iExhaustHP) { std::string buff;