mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-15 16:41:29 +00:00
[Quest API] Add CanRaceEquipItem(item_id) to Perl/Lua. (#1411)
* [Quest API] Add CanRaceEquipItem(item_id) to Perl/Lua. - Add $mob->CanRaceEquipItem(item_id) to Perl. - Add mob:CanClassEquipItem(item_id) to Lua. - Add mob:CanRaceEquipItem(item_id) to Lua. * Use constants. Co-authored-by: Chris Miles <akkadius1@gmail.com>
This commit is contained in:
parent
ccfc8b296f
commit
249cbb7bc7
@ -2364,6 +2364,16 @@ const char *Lua_Mob::GetLastName() {
|
|||||||
return self->GetLastName();
|
return self->GetLastName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Lua_Mob::CanClassEquipItem(uint32 item_id) {
|
||||||
|
Lua_Safe_Call_Bool();
|
||||||
|
return self->CanClassEquipItem(item_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Lua_Mob::CanRaceEquipItem(uint32 item_id) {
|
||||||
|
Lua_Safe_Call_Bool();
|
||||||
|
return self->CanRaceEquipItem(item_id);
|
||||||
|
}
|
||||||
|
|
||||||
void Lua_Mob::RemoveAllNimbusEffects() {
|
void Lua_Mob::RemoveAllNimbusEffects() {
|
||||||
Lua_Safe_Call_Void();
|
Lua_Safe_Call_Void();
|
||||||
self->RemoveAllNimbusEffects();
|
self->RemoveAllNimbusEffects();
|
||||||
@ -2773,6 +2783,8 @@ luabind::scope lua_register_mob() {
|
|||||||
.def("SetBucket", (void(Lua_Mob::*)(std::string,std::string,std::string))&Lua_Mob::SetBucket)
|
.def("SetBucket", (void(Lua_Mob::*)(std::string,std::string,std::string))&Lua_Mob::SetBucket)
|
||||||
.def("IsHorse", &Lua_Mob::IsHorse)
|
.def("IsHorse", &Lua_Mob::IsHorse)
|
||||||
.def("GetLastName", &Lua_Mob::GetLastName)
|
.def("GetLastName", &Lua_Mob::GetLastName)
|
||||||
|
.def("CanClassEquipItem", &Lua_Mob::CanClassEquipItem)
|
||||||
|
.def("CanRaceEquipItem", &Lua_Mob::CanRaceEquipItem)
|
||||||
.def("RemoveAllNimbusEffects", &Lua_Mob::RemoveAllNimbusEffects);
|
.def("RemoveAllNimbusEffects", &Lua_Mob::RemoveAllNimbusEffects);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -431,7 +431,6 @@ public:
|
|||||||
int GetBodyType();
|
int GetBodyType();
|
||||||
int GetOrigBodyType();
|
int GetOrigBodyType();
|
||||||
void CheckNumHitsRemaining(int type, int32 buff_slot, uint16 spell_id);
|
void CheckNumHitsRemaining(int type, int32 buff_slot, uint16 spell_id);
|
||||||
|
|
||||||
void DeleteBucket(std::string bucket_name);
|
void DeleteBucket(std::string bucket_name);
|
||||||
std::string GetBucket(std::string bucket_name);
|
std::string GetBucket(std::string bucket_name);
|
||||||
std::string GetBucketExpires(std::string bucket_name);
|
std::string GetBucketExpires(std::string bucket_name);
|
||||||
@ -440,6 +439,8 @@ public:
|
|||||||
void SetBucket(std::string bucket_name, std::string bucket_value);
|
void SetBucket(std::string bucket_name, std::string bucket_value);
|
||||||
void SetBucket(std::string bucket_name, std::string bucket_value, std::string expiration);
|
void SetBucket(std::string bucket_name, std::string bucket_value, std::string expiration);
|
||||||
bool IsHorse();
|
bool IsHorse();
|
||||||
|
bool CanClassEquipItem(uint32 item_id);
|
||||||
|
bool CanRaceEquipItem(uint32 item_id);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
47
zone/mob.cpp
47
zone/mob.cpp
@ -5673,23 +5673,54 @@ bool Mob::CanClassEquipItem(uint32 item_id)
|
|||||||
const EQ::ItemData* itm = nullptr;
|
const EQ::ItemData* itm = nullptr;
|
||||||
itm = database.GetItem(item_id);
|
itm = database.GetItem(item_id);
|
||||||
|
|
||||||
if (!itm)
|
if (!itm) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if(itm->Classes == 65535 )
|
auto item_classes = itm->Classes;
|
||||||
|
if(item_classes == PLAYER_CLASS_ALL_MASK) {
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (GetClass() > 16)
|
auto class_id = GetClass();
|
||||||
|
if (class_id > BERSERKER) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
int bitmask = 1;
|
int class_bitmask = GetPlayerClassBit(class_id);
|
||||||
bitmask = bitmask << (GetClass() - 1);
|
if(!(item_classes & class_bitmask)) {
|
||||||
|
|
||||||
if(!(itm->Classes & bitmask))
|
|
||||||
return false;
|
return false;
|
||||||
else
|
} else {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Mob::CanRaceEquipItem(uint32 item_id)
|
||||||
|
{
|
||||||
|
const EQ::ItemData* itm = nullptr;
|
||||||
|
itm = database.GetItem(item_id);
|
||||||
|
|
||||||
|
if (!itm) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto item_races = itm->Races;
|
||||||
|
if(item_races == PLAYER_RACE_ALL_MASK) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto race_id = GetBaseRace();
|
||||||
|
if (!IsPlayerRace(race_id)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int race_bitmask = GetPlayerRaceBit(race_id);
|
||||||
|
if(!(item_races & race_bitmask)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Mob::SendAddPlayerState(PlayerState new_state)
|
void Mob::SendAddPlayerState(PlayerState new_state)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -441,6 +441,7 @@ public:
|
|||||||
virtual uint32 GetEquipmentColor(uint8 material_slot) const;
|
virtual uint32 GetEquipmentColor(uint8 material_slot) const;
|
||||||
virtual uint32 IsEliteMaterialItem(uint8 material_slot) const;
|
virtual uint32 IsEliteMaterialItem(uint8 material_slot) const;
|
||||||
bool CanClassEquipItem(uint32 item_id);
|
bool CanClassEquipItem(uint32 item_id);
|
||||||
|
bool CanRaceEquipItem(uint32 item_id);
|
||||||
bool AffectedBySpellExcludingSlot(int slot, int effect);
|
bool AffectedBySpellExcludingSlot(int slot, int effect);
|
||||||
virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill) = 0;
|
virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill) = 0;
|
||||||
virtual void Damage(Mob* from, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill,
|
virtual void Damage(Mob* from, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill,
|
||||||
|
|||||||
@ -6257,6 +6257,23 @@ XS(XS_Mob_GetLastName) {
|
|||||||
XSRETURN(1);
|
XSRETURN(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
XS(XS_Mob_CanRaceEquipItem); /* prototype to pass -Wmissing-prototypes */
|
||||||
|
XS(XS_Mob_CanRaceEquipItem) {
|
||||||
|
dXSARGS;
|
||||||
|
if (items != 2)
|
||||||
|
Perl_croak(aTHX_ "Usage: Mob::CanRaceEquipItem(THIS, uint32 item_id)"); // @categories Inventory and Items, Script Utility
|
||||||
|
{
|
||||||
|
Mob *THIS;
|
||||||
|
bool RETVAL;
|
||||||
|
uint32 item_id = (uint32) SvUV(ST(1));
|
||||||
|
VALIDATE_THIS_IS_MOB;
|
||||||
|
RETVAL = THIS->CanRaceEquipItem(item_id);
|
||||||
|
ST(0) = boolSV(RETVAL);
|
||||||
|
sv_2mortal(ST(0));
|
||||||
|
}
|
||||||
|
XSRETURN(1);
|
||||||
|
}
|
||||||
|
|
||||||
XS(XS_Mob_RemoveAllNimbusEffects); /* prototype to pass -Wmissing-prototypes */
|
XS(XS_Mob_RemoveAllNimbusEffects); /* prototype to pass -Wmissing-prototypes */
|
||||||
XS(XS_Mob_RemoveAllNimbusEffects) {
|
XS(XS_Mob_RemoveAllNimbusEffects) {
|
||||||
dXSARGS;
|
dXSARGS;
|
||||||
@ -6652,6 +6669,7 @@ XS(boot_Mob) {
|
|||||||
newXSproto(strcpy(buf, "GetHateClosest"), XS_Mob_GetHateClosest, file, "$");
|
newXSproto(strcpy(buf, "GetHateClosest"), XS_Mob_GetHateClosest, file, "$");
|
||||||
newXSproto(strcpy(buf, "GetHateListByDistance"), XS_Mob_GetHateListByDistance, file, "$;$");
|
newXSproto(strcpy(buf, "GetHateListByDistance"), XS_Mob_GetHateListByDistance, file, "$;$");
|
||||||
newXSproto(strcpy(buf, "GetLastName"), XS_Mob_GetLastName, file, "$");
|
newXSproto(strcpy(buf, "GetLastName"), XS_Mob_GetLastName, file, "$");
|
||||||
|
newXSproto(strcpy(buf, "CanRaceEquipItem"), XS_Mob_CanRaceEquipItem, file, "$$");
|
||||||
newXSproto(strcpy(buf, "RemoveAllNimbusEffects"), XS_Mob_RemoveAllNimbusEffects, file, "$");
|
newXSproto(strcpy(buf, "RemoveAllNimbusEffects"), XS_Mob_RemoveAllNimbusEffects, file, "$");
|
||||||
newXSproto(strcpy(buf, "AddNimbusEffect"), XS_Mob_AddNimbusEffect, file, "$$");
|
newXSproto(strcpy(buf, "AddNimbusEffect"), XS_Mob_AddNimbusEffect, file, "$$");
|
||||||
#ifdef BOTS
|
#ifdef BOTS
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user