mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-13 18:51:29 +00:00
[Quest API] Add GetEnvironmentalDamageName() to Perl/Lua. (#1964)
- Add EQ::constants::GetEnvironmentalDamageMap() and EQ::constants::GetEnvironmentalDamageName(). - Add quest::getenvironmentaldamagename(damage_type) to Perl. - Add eq.get_environmental_damage_name(damage_type) to Lua. - Cleanup GM messages for avoiding environmental damage.
This commit is contained in:
parent
d656be6be4
commit
f9eb4603a3
@ -226,12 +226,12 @@ std::string EQ::constants::GetLDoNThemeName(uint32 theme_id)
|
|||||||
const std::map<uint8, std::string>& EQ::constants::GetFlyModeMap()
|
const std::map<uint8, std::string>& EQ::constants::GetFlyModeMap()
|
||||||
{
|
{
|
||||||
static const std::map<uint8, std::string> flymode_map = {
|
static const std::map<uint8, std::string> flymode_map = {
|
||||||
{ EQ::constants::GravityBehavior::Ground, "Ground" },
|
{ GravityBehavior::Ground, "Ground" },
|
||||||
{ EQ::constants::GravityBehavior::Flying, "Flying" },
|
{ GravityBehavior::Flying, "Flying" },
|
||||||
{ EQ::constants::GravityBehavior::Levitating, "Levitating" },
|
{ GravityBehavior::Levitating, "Levitating" },
|
||||||
{ EQ::constants::GravityBehavior::Water, "Water" },
|
{ GravityBehavior::Water, "Water" },
|
||||||
{ EQ::constants::GravityBehavior::Floating, "Floating" },
|
{ GravityBehavior::Floating, "Floating" },
|
||||||
{ EQ::constants::GravityBehavior::LevitateWhileRunning, "Levitating While Running" },
|
{ GravityBehavior::LevitateWhileRunning, "Levitating While Running" },
|
||||||
};
|
};
|
||||||
return flymode_map;
|
return flymode_map;
|
||||||
}
|
}
|
||||||
@ -337,3 +337,23 @@ std::string EQ::constants::GetAccountStatusName(uint8 account_status)
|
|||||||
|
|
||||||
return status_name;
|
return status_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const std::map<uint8, std::string>& EQ::constants::GetEnvironmentalDamageMap()
|
||||||
|
{
|
||||||
|
static const std::map<uint8, std::string> damage_type_map = {
|
||||||
|
{ EnvironmentalDamage::Lava, "Lava" },
|
||||||
|
{ EnvironmentalDamage::Drowning, "Drowning" },
|
||||||
|
{ EnvironmentalDamage::Falling, "Falling" },
|
||||||
|
{ EnvironmentalDamage::Trap, "Trap" }
|
||||||
|
};
|
||||||
|
return damage_type_map;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string EQ::constants::GetEnvironmentalDamageName(uint8 damage_type)
|
||||||
|
{
|
||||||
|
if (EQ::ValueWithin(damage_type, EnvironmentalDamage::Lava, EnvironmentalDamage::Trap)) {
|
||||||
|
auto damage_types = EQ::constants::GetEnvironmentalDamageMap();
|
||||||
|
return damage_types[damage_type];
|
||||||
|
}
|
||||||
|
return std::string();
|
||||||
|
}
|
||||||
|
|||||||
@ -230,6 +230,13 @@ namespace EQ
|
|||||||
LevitateWhileRunning
|
LevitateWhileRunning
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum EnvironmentalDamage : uint8 {
|
||||||
|
Lava = 250,
|
||||||
|
Drowning,
|
||||||
|
Falling,
|
||||||
|
Trap
|
||||||
|
};
|
||||||
|
|
||||||
const char *GetStanceName(StanceType stance_type);
|
const char *GetStanceName(StanceType stance_type);
|
||||||
int ConvertStanceTypeToIndex(StanceType stance_type);
|
int ConvertStanceTypeToIndex(StanceType stance_type);
|
||||||
|
|
||||||
@ -248,6 +255,9 @@ namespace EQ
|
|||||||
extern const std::map<uint8, std::string>& GetAccountStatusMap();
|
extern const std::map<uint8, std::string>& GetAccountStatusMap();
|
||||||
std::string GetAccountStatusName(uint8 account_status);
|
std::string GetAccountStatusName(uint8 account_status);
|
||||||
|
|
||||||
|
extern const std::map<uint8, std::string>& GetEnvironmentalDamageMap();
|
||||||
|
std::string GetEnvironmentalDamageName(uint8 damage_type);
|
||||||
|
|
||||||
const int STANCE_TYPE_FIRST = stancePassive;
|
const int STANCE_TYPE_FIRST = stancePassive;
|
||||||
const int STANCE_TYPE_LAST = stanceBurnAE;
|
const int STANCE_TYPE_LAST = stanceBurnAE;
|
||||||
const int STANCE_TYPE_COUNT = stanceBurnAE;
|
const int STANCE_TYPE_COUNT = stanceBurnAE;
|
||||||
|
|||||||
@ -2762,7 +2762,7 @@ struct EnvDamage2_Struct {
|
|||||||
/*0004*/ uint16 unknown4;
|
/*0004*/ uint16 unknown4;
|
||||||
/*0006*/ uint32 damage;
|
/*0006*/ uint32 damage;
|
||||||
/*0010*/ uint8 unknown10[12];
|
/*0010*/ uint8 unknown10[12];
|
||||||
/*0022*/ uint8 dmgtype; //FA = Lava; FC = Falling
|
/*0022*/ uint8 dmgtype; // FA = Lava, FB = Drowning, FC = Falling, FD = Trap
|
||||||
/*0023*/ uint8 unknown2[4];
|
/*0023*/ uint8 unknown2[4];
|
||||||
/*0027*/ uint16 constant; //Always FFFF
|
/*0027*/ uint16 constant; //Always FFFF
|
||||||
/*0029*/ uint16 unknown29;
|
/*0029*/ uint16 unknown29;
|
||||||
|
|||||||
@ -3061,7 +3061,7 @@ struct EnvDamage2_Struct {
|
|||||||
/*0006*/ uint32 damage;
|
/*0006*/ uint32 damage;
|
||||||
/*0010*/ float unknown10; // New to Underfoot - Seen 1
|
/*0010*/ float unknown10; // New to Underfoot - Seen 1
|
||||||
/*0014*/ uint8 unknown14[12];
|
/*0014*/ uint8 unknown14[12];
|
||||||
/*0026*/ uint8 dmgtype; // FA = Lava; FC = Falling
|
/*0026*/ uint8 dmgtype; // FA = Lava, FB = Drowning, FC = Falling, FD = Trap
|
||||||
/*0027*/ uint8 unknown27[4];
|
/*0027*/ uint8 unknown27[4];
|
||||||
/*0031*/ uint16 unknown31; // New to Underfoot - Seen 66
|
/*0031*/ uint16 unknown31; // New to Underfoot - Seen 66
|
||||||
/*0033*/ uint16 constant; // Always FFFF
|
/*0033*/ uint16 constant; // Always FFFF
|
||||||
|
|||||||
@ -3032,7 +3032,7 @@ struct EnvDamage2_Struct {
|
|||||||
/*0006*/ uint32 damage;
|
/*0006*/ uint32 damage;
|
||||||
/*0010*/ float unknown10; // New to Underfoot - Seen 1
|
/*0010*/ float unknown10; // New to Underfoot - Seen 1
|
||||||
/*0014*/ uint8 unknown14[12];
|
/*0014*/ uint8 unknown14[12];
|
||||||
/*0026*/ uint8 dmgtype; // FA = Lava; FC = Falling
|
/*0026*/ uint8 dmgtype; // FA = Lava, FB = Drowning, FC = Falling, FD = Trap
|
||||||
/*0027*/ uint8 unknown27[4];
|
/*0027*/ uint8 unknown27[4];
|
||||||
/*0031*/ uint16 unknown31; // New to Underfoot - Seen 66
|
/*0031*/ uint16 unknown31; // New to Underfoot - Seen 66
|
||||||
/*0033*/ uint16 constant; // Always FFFF
|
/*0033*/ uint16 constant; // Always FFFF
|
||||||
|
|||||||
@ -2539,7 +2539,7 @@ struct EnvDamage2_Struct {
|
|||||||
/*0004*/ uint16 unknown4;
|
/*0004*/ uint16 unknown4;
|
||||||
/*0006*/ uint32 damage;
|
/*0006*/ uint32 damage;
|
||||||
/*0010*/ uint8 unknown10[12];
|
/*0010*/ uint8 unknown10[12];
|
||||||
/*0022*/ uint8 dmgtype; //FA = Lava; FC = Falling
|
/*0022*/ uint8 dmgtype; // FA = Lava, FB = Drowning, FC = Falling, FD = Trap
|
||||||
/*0023*/ uint8 unknown2[4];
|
/*0023*/ uint8 unknown2[4];
|
||||||
/*0027*/ uint16 constant; //Always FFFF
|
/*0027*/ uint16 constant; //Always FFFF
|
||||||
/*0029*/ uint16 unknown29;
|
/*0029*/ uint16 unknown29;
|
||||||
|
|||||||
@ -2509,7 +2509,7 @@ struct EnvDamage2_Struct {
|
|||||||
/*0004*/ uint16 unknown4;
|
/*0004*/ uint16 unknown4;
|
||||||
/*0006*/ uint32 damage;
|
/*0006*/ uint32 damage;
|
||||||
/*0010*/ uint8 unknown10[12];
|
/*0010*/ uint8 unknown10[12];
|
||||||
/*0022*/ uint8 dmgtype; //FA = Lava; FC = Falling
|
/*0022*/ uint8 dmgtype; // FA = Lava, FB = Drowning, FC = Falling, FD = Trap
|
||||||
/*0023*/ uint8 unknown2[4];
|
/*0023*/ uint8 unknown2[4];
|
||||||
/*0027*/ uint16 constant; //Always FFFF
|
/*0027*/ uint16 constant; //Always FFFF
|
||||||
/*0029*/ uint16 unknown29;
|
/*0029*/ uint16 unknown29;
|
||||||
|
|||||||
@ -5784,8 +5784,7 @@ void Client::Handle_OP_EndLootRequest(const EQApplicationPacket *app)
|
|||||||
|
|
||||||
void Client::Handle_OP_EnvDamage(const EQApplicationPacket *app)
|
void Client::Handle_OP_EnvDamage(const EQApplicationPacket *app)
|
||||||
{
|
{
|
||||||
if (!ClientFinishedLoading())
|
if (!ClientFinishedLoading()) {
|
||||||
{
|
|
||||||
SetHP(GetHP() - 1);
|
SetHP(GetHP() - 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -5795,38 +5794,46 @@ void Client::Handle_OP_EnvDamage(const EQApplicationPacket *app)
|
|||||||
DumpPacket(app);
|
DumpPacket(app);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
EnvDamage2_Struct* ed = (EnvDamage2_Struct*)app->pBuffer;
|
EnvDamage2_Struct* ed = (EnvDamage2_Struct*)app->pBuffer;
|
||||||
|
auto damage = ed->damage;
|
||||||
int damage = ed->damage;
|
if (ed->dmgtype == EQ::constants::EnvironmentalDamage::Falling) {
|
||||||
|
uint32 mod = spellbonuses.ReduceFallDamage + itembonuses.ReduceFallDamage + aabonuses.ReduceFallDamage;
|
||||||
if (ed->dmgtype == 252) {
|
|
||||||
|
|
||||||
int mod = spellbonuses.ReduceFallDamage + itembonuses.ReduceFallDamage + aabonuses.ReduceFallDamage;
|
|
||||||
|
|
||||||
damage -= damage * mod / 100;
|
damage -= damage * mod / 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (damage < 0)
|
if (damage < 0) {
|
||||||
damage = 31337;
|
damage = 31337;
|
||||||
|
}
|
||||||
|
|
||||||
if (admin >= minStatusToAvoidFalling && GetGM()) {
|
if (admin >= minStatusToAvoidFalling && GetGM()) {
|
||||||
Message(Chat::Red, "Your GM status protects you from %i points of type %i environmental damage.", ed->damage, ed->dmgtype);
|
Message(
|
||||||
|
Chat::Red,
|
||||||
|
fmt::format(
|
||||||
|
"Your GM status protects you from {} points of {} (Type {}) damage.",
|
||||||
|
ed->damage,
|
||||||
|
EQ::constants::GetEnvironmentalDamageName(ed->dmgtype),
|
||||||
|
ed->dmgtype
|
||||||
|
).c_str()
|
||||||
|
);
|
||||||
SetHP(GetHP() - 1);//needed or else the client wont acknowledge
|
SetHP(GetHP() - 1);//needed or else the client wont acknowledge
|
||||||
return;
|
return;
|
||||||
}
|
} else if (GetInvul()) {
|
||||||
else if (GetInvul()) {
|
Message(
|
||||||
Message(Chat::Red, "Your invuln status protects you from %i points of type %i environmental damage.", ed->damage, ed->dmgtype);
|
Chat::Red,
|
||||||
|
fmt::format(
|
||||||
|
"Your invulnerability protects you from {} points of {} (Type {}) damage.",
|
||||||
|
ed->damage,
|
||||||
|
EQ::constants::GetEnvironmentalDamageName(ed->dmgtype),
|
||||||
|
ed->dmgtype
|
||||||
|
).c_str()
|
||||||
|
);
|
||||||
SetHP(GetHP() - 1);//needed or else the client wont acknowledge
|
SetHP(GetHP() - 1);//needed or else the client wont acknowledge
|
||||||
return;
|
return;
|
||||||
}
|
} else if (zone->GetZoneID() == Zones::TUTORIAL || zone->GetZoneID() == Zones::LOAD) { // Hard coded tutorial and load zones for no fall damage
|
||||||
else if (zone->GetZoneID() == 183 || zone->GetZoneID() == 184) {
|
|
||||||
// Hard coded tutorial and load zones for no fall damage
|
|
||||||
return;
|
return;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
SetHP(GetHP() - (damage * RuleR(Character, EnvironmentDamageMulipliter)));
|
SetHP(GetHP() - (damage * RuleR(Character, EnvironmentDamageMulipliter)));
|
||||||
|
|
||||||
/* EVENT_ENVIRONMENTAL_DAMAGE */
|
|
||||||
int final_damage = (damage * RuleR(Character, EnvironmentDamageMulipliter));
|
int final_damage = (damage * RuleR(Character, EnvironmentDamageMulipliter));
|
||||||
std::string export_string = fmt::format(
|
std::string export_string = fmt::format(
|
||||||
"{} {} {}",
|
"{} {} {}",
|
||||||
|
|||||||
@ -8092,6 +8092,22 @@ XS(XS__getbodytypename) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
XS(XS__getenvironmentaldamagename);
|
||||||
|
XS(XS__getenvironmentaldamagename) {
|
||||||
|
dXSARGS;
|
||||||
|
if (items != 1)
|
||||||
|
Perl_croak(aTHX_ "Usage: quest::getenvironmentaldamagename(uint8 damage_type)");
|
||||||
|
|
||||||
|
dXSTARG;
|
||||||
|
uint8 damage_type = (uint8) SvIV(ST(0));
|
||||||
|
std::string environmental_damage_name = quest_manager.getenvironmentaldamagename(damage_type);
|
||||||
|
|
||||||
|
sv_setpv(TARG, environmental_damage_name.c_str());
|
||||||
|
XSprePUSH;
|
||||||
|
PUSHTARG;
|
||||||
|
XSRETURN(1);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This is the callback perl will look for to setup the
|
This is the callback perl will look for to setup the
|
||||||
quest package's XSUBs
|
quest package's XSUBs
|
||||||
@ -8398,6 +8414,7 @@ EXTERN_C XS(boot_quest) {
|
|||||||
newXS(strcpy(buf, "getcurrencyitemid"), XS__getcurrencyitemid, file);
|
newXS(strcpy(buf, "getcurrencyitemid"), XS__getcurrencyitemid, file);
|
||||||
newXS(strcpy(buf, "getgendername"), XS__getgendername, file);
|
newXS(strcpy(buf, "getgendername"), XS__getgendername, file);
|
||||||
newXS(strcpy(buf, "getdeityname"), XS__getdeityname, file);
|
newXS(strcpy(buf, "getdeityname"), XS__getdeityname, file);
|
||||||
|
newXS(strcpy(buf, "getenvironmentaldamagename"), XS__getenvironmentaldamagename, file);
|
||||||
newXS(strcpy(buf, "getguildnamebyid"), XS__getguildnamebyid, file);
|
newXS(strcpy(buf, "getguildnamebyid"), XS__getguildnamebyid, file);
|
||||||
newXS(strcpy(buf, "getguildidbycharid"), XS__getguildidbycharid, file);
|
newXS(strcpy(buf, "getguildidbycharid"), XS__getguildidbycharid, file);
|
||||||
newXS(strcpy(buf, "getgroupidbycharid"), XS__getgroupidbycharid, file);
|
newXS(strcpy(buf, "getgroupidbycharid"), XS__getgroupidbycharid, file);
|
||||||
|
|||||||
@ -3367,6 +3367,10 @@ std::string lua_get_body_type_name(uint32 bodytype_id) {
|
|||||||
return quest_manager.getbodytypename(bodytype_id);
|
return quest_manager.getbodytypename(bodytype_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string lua_get_environmental_damage_name(uint8 damage_type) {
|
||||||
|
return quest_manager.getenvironmentaldamagename(damage_type);
|
||||||
|
}
|
||||||
|
|
||||||
#define LuaCreateNPCParse(name, c_type, default_value) do { \
|
#define LuaCreateNPCParse(name, c_type, default_value) do { \
|
||||||
cur = table[#name]; \
|
cur = table[#name]; \
|
||||||
if(luabind::type(cur) != LUA_TNIL) { \
|
if(luabind::type(cur) != LUA_TNIL) { \
|
||||||
@ -3814,6 +3818,7 @@ luabind::scope lua_register_general() {
|
|||||||
luabind::def("get_faction_name", &lua_get_faction_name),
|
luabind::def("get_faction_name", &lua_get_faction_name),
|
||||||
luabind::def("get_language_name", &lua_get_language_name),
|
luabind::def("get_language_name", &lua_get_language_name),
|
||||||
luabind::def("get_body_type_name", &lua_get_body_type_name),
|
luabind::def("get_body_type_name", &lua_get_body_type_name),
|
||||||
|
luabind::def("get_environmental_damage_name", &lua_get_environmental_damage_name),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Cross Zone
|
Cross Zone
|
||||||
|
|||||||
@ -3698,3 +3698,8 @@ const SPDat_Spell_Struct* QuestManager::getspell(uint32 spell_id) {
|
|||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string QuestManager::getenvironmentaldamagename(uint8 damage_type) {
|
||||||
|
std::string environmental_damage_name = EQ::constants::GetEnvironmentalDamageName(damage_type);
|
||||||
|
return environmental_damage_name;
|
||||||
|
}
|
||||||
|
|||||||
@ -331,6 +331,7 @@ public:
|
|||||||
int getitemstat(uint32 item_id, std::string stat_identifier);
|
int getitemstat(uint32 item_id, std::string stat_identifier);
|
||||||
int getspellstat(uint32 spell_id, std::string stat_identifier, uint8 slot = 0);
|
int getspellstat(uint32 spell_id, std::string stat_identifier, uint8 slot = 0);
|
||||||
const SPDat_Spell_Struct *getspell(uint32 spell_id);
|
const SPDat_Spell_Struct *getspell(uint32 spell_id);
|
||||||
|
std::string getenvironmentaldamagename(uint8 damage_type);
|
||||||
|
|
||||||
Client *GetInitiator() const;
|
Client *GetInitiator() const;
|
||||||
NPC *GetNPC() const;
|
NPC *GetNPC() const;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user