issue-10: add talisman slot support
This commit is contained in:
@@ -327,6 +327,7 @@ enum EItemWearableFlag
|
||||
WEARABLE_COSTUME_HAIR = (1 << 13),
|
||||
WEARABLE_BELT = (1 << 14),
|
||||
WEARABLE_COSTUME_SASH = (1 << 15),
|
||||
WEARABLE_TALISMAN = (1 << 16),
|
||||
};
|
||||
|
||||
enum ELimitTypes
|
||||
|
||||
@@ -124,6 +124,7 @@ enum EWearPositions
|
||||
|
||||
WEAR_BELT, // 23 : 신규 벨트슬롯
|
||||
WEAR_COSTUME_SASH, // 24
|
||||
WEAR_TALISMAN, // 25
|
||||
|
||||
WEAR_MAX = 32 //
|
||||
};
|
||||
|
||||
@@ -298,8 +298,9 @@ int get_Item_Flag_Value(string inputString)
|
||||
int get_Item_WearFlag_Value(string inputString)
|
||||
{
|
||||
|
||||
string arWearrFlag[] = {"WEAR_BODY", "WEAR_HEAD", "WEAR_FOOTS", "WEAR_WRIST", "WEAR_WEAPON", "WEAR_NECK", "WEAR_EAR", "WEAR_SHIELD", "WEAR_UNIQUE",
|
||||
"WEAR_ARROW", "WEAR_HAIR", "WEAR_ABILITY"};
|
||||
string arWearrFlag[] = {"WEAR_BODY", "WEAR_HEAD", "WEAR_FOOTS", "WEAR_WRIST", "WEAR_WEAPON", "WEAR_NECK", "WEAR_EAR", "WEAR_UNIQUE",
|
||||
"WEAR_SHIELD", "WEAR_ARROW", "WEAR_HAIR", "WEAR_ABILITY", "WEAR_COSTUME_BODY", "WEAR_COSTUME_HAIR",
|
||||
"WEAR_BELT", "WEAR_COSTUME_SASH", "WEAR_TALISMAN"};
|
||||
|
||||
|
||||
int retValue = 0;
|
||||
|
||||
@@ -54,6 +54,37 @@ namespace
|
||||
constexpr int kPickupPatternMinRouteStep = 250;
|
||||
constexpr int kPickupPatternMaxIntervalMs = 15000;
|
||||
|
||||
enum ETalismanElement
|
||||
{
|
||||
TALISMAN_ELEMENT_FIRE = 1,
|
||||
TALISMAN_ELEMENT_ICE = 2,
|
||||
TALISMAN_ELEMENT_LIGHTNING = 3,
|
||||
TALISMAN_ELEMENT_WIND = 4,
|
||||
TALISMAN_ELEMENT_EARTH = 5,
|
||||
};
|
||||
|
||||
const char* GetTalismanEffectPath(LPITEM item)
|
||||
{
|
||||
if (!item || item->GetType() != ITEM_TOTEM)
|
||||
return nullptr;
|
||||
|
||||
switch (item->GetValue(0))
|
||||
{
|
||||
case TALISMAN_ELEMENT_FIRE:
|
||||
return "d:/ymir work/effect/etc/firecracker/newyear_firecracker.mse";
|
||||
case TALISMAN_ELEMENT_ICE:
|
||||
return "d:/ymir work/effect/etc/recuperation/drugup_blue.mse";
|
||||
case TALISMAN_ELEMENT_LIGHTNING:
|
||||
return "d:/ymir work/effect/etc/recuperation/drugup_purple.mse";
|
||||
case TALISMAN_ELEMENT_WIND:
|
||||
return "d:/ymir work/effect/etc/recuperation/drugup_green.mse";
|
||||
case TALISMAN_ELEMENT_EARTH:
|
||||
return "d:/ymir work/effect/etc/buff/buff_item3.mse";
|
||||
default:
|
||||
return "d:/ymir work/effect/etc/buff/buff_item1.mse";
|
||||
}
|
||||
}
|
||||
|
||||
bool ValidateStoredRefineNpc(LPCHARACTER ch, DWORD dwRefineNpcVID, const char* action)
|
||||
{
|
||||
if (!ch)
|
||||
@@ -6618,6 +6649,11 @@ bool CHARACTER::EquipItem(LPITEM item, int iCandidateCell)
|
||||
{
|
||||
this->EffectPacket(SE_EQUIP_LOVE_PENDANT);
|
||||
}
|
||||
else if (ITEM_TOTEM == item->GetType())
|
||||
{
|
||||
if (const char* c_szEffect = GetTalismanEffectPath(item))
|
||||
SpecificEffectPacket(c_szEffect);
|
||||
}
|
||||
// ITEM_UNIQUE의 경우, SpecialItemGroup에 정의되어 있고, (item->GetSIGVnum() != NULL)
|
||||
//
|
||||
else if (ITEM_UNIQUE == item->GetType() && 0 != item->GetSIGVnum())
|
||||
|
||||
@@ -535,6 +535,8 @@ int CItem::FindEquipCell(LPCHARACTER ch, int iCandidateCell)
|
||||
}
|
||||
else if (GetType() == ITEM_BELT)
|
||||
return WEAR_BELT;
|
||||
else if (GetType() == ITEM_TOTEM)
|
||||
return WEAR_TALISMAN;
|
||||
else if (GetWearFlag() & WEARABLE_BODY)
|
||||
return WEAR_BODY;
|
||||
else if (GetWearFlag() & WEARABLE_HEAD)
|
||||
|
||||
Reference in New Issue
Block a user