mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 05:21:29 +00:00
[Quest API] Add SendIllusion overloads/parameters to Perl/Lua (#3059)
* [Quest API] Add SendIllusion methods to Perl. # Perl - Add `$mob->SendIllusion(race, gender, texture, helmtexture, face, hairstyle, haircolor, beard, beardcolor, drakkin_heritage, drakkin_tattoo, drakkin_details, size, target)`. - Add `$mob->SendIllusionPacket(illusion_table_ref)`. * Change defaults. * Remove debug message * Cleanup. * Cleanup * Update perl_mob.cpp
This commit is contained in:
parent
7c819539c8
commit
02ada0e496
166
zone/lua_mob.cpp
166
zone/lua_mob.cpp
@ -1567,153 +1567,189 @@ void Lua_Mob::SendIllusionPacket(luabind::adl::object illusion) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int race = RACE_DOUG_0;
|
uint16 race = self->GetRace();
|
||||||
int gender = 255;
|
uint8 gender = self->GetGender();
|
||||||
int texture = 255;
|
uint8 texture = self->GetTexture();
|
||||||
int helmtexture = 255;
|
uint8 helmtexture = self->GetHelmTexture();
|
||||||
int haircolor = 255;
|
uint8 haircolor = self->GetHairColor();
|
||||||
int beardcolor = 255;
|
uint8 beardcolor = self->GetBeardColor();
|
||||||
int eyecolor1 = 255;
|
uint8 eyecolor1 = self->GetEyeColor1();
|
||||||
int eyecolor2 = 255;
|
uint8 eyecolor2 = self->GetEyeColor2();
|
||||||
int hairstyle = 255;
|
uint8 hairstyle = self->GetHairStyle();
|
||||||
int luclinface = 255;
|
uint8 luclinface = self->GetLuclinFace();
|
||||||
int beard = 255;
|
uint8 beard = self->GetBeard();
|
||||||
int aa_title = 255;
|
uint8 aa_title = 255;
|
||||||
uint32 drakkin_heritage = 4294967295;
|
uint32 drakkin_heritage = self->GetDrakkinHeritage();
|
||||||
uint32 drakkin_tattoo = 4294967295;
|
uint32 drakkin_tattoo = self->GetDrakkinTattoo();
|
||||||
uint32 drakkin_details = 4294967295;
|
uint32 drakkin_details = self->GetDrakkinDetails();
|
||||||
float size = -1.0f;
|
float size = self->GetSize();
|
||||||
|
bool send_appearance_effects = true;
|
||||||
|
Lua_Client target = Lua_Client();
|
||||||
|
|
||||||
auto cur = illusion["race"];
|
auto cur = illusion["race"];
|
||||||
if(luabind::type(cur) != LUA_TNIL) {
|
if (luabind::type(cur) != LUA_TNIL) {
|
||||||
try {
|
try {
|
||||||
race = luabind::object_cast<int>(cur);
|
race = luabind::object_cast<uint16>(cur);
|
||||||
} catch(luabind::cast_failed &) {
|
} catch (luabind::cast_failed &) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cur = illusion["gender"];
|
cur = illusion["gender"];
|
||||||
if(luabind::type(cur) != LUA_TNIL) {
|
if (luabind::type(cur) != LUA_TNIL) {
|
||||||
try {
|
try {
|
||||||
gender = luabind::object_cast<int>(cur);
|
gender = luabind::object_cast<uint8>(cur);
|
||||||
} catch(luabind::cast_failed &) {
|
} catch (luabind::cast_failed &) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cur = illusion["texture"];
|
cur = illusion["texture"];
|
||||||
if(luabind::type(cur) != LUA_TNIL) {
|
if (luabind::type(cur) != LUA_TNIL) {
|
||||||
try {
|
try {
|
||||||
texture = luabind::object_cast<int>(cur);
|
texture = luabind::object_cast<uint8>(cur);
|
||||||
} catch(luabind::cast_failed &) {
|
} catch (luabind::cast_failed &) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cur = illusion["helmtexture"];
|
cur = illusion["helmtexture"];
|
||||||
if(luabind::type(cur) != LUA_TNIL) {
|
if (luabind::type(cur) != LUA_TNIL) {
|
||||||
try {
|
try {
|
||||||
helmtexture = luabind::object_cast<int>(cur);
|
helmtexture = luabind::object_cast<uint8>(cur);
|
||||||
} catch(luabind::cast_failed &) {
|
} catch (luabind::cast_failed &) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cur = illusion["haircolor"];
|
cur = illusion["haircolor"];
|
||||||
if(luabind::type(cur) != LUA_TNIL) {
|
if (luabind::type(cur) != LUA_TNIL) {
|
||||||
try {
|
try {
|
||||||
haircolor = luabind::object_cast<int>(cur);
|
haircolor = luabind::object_cast<uint8>(cur);
|
||||||
} catch(luabind::cast_failed &) {
|
} catch (luabind::cast_failed &) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cur = illusion["beardcolor"];
|
cur = illusion["beardcolor"];
|
||||||
if(luabind::type(cur) != LUA_TNIL) {
|
if (luabind::type(cur) != LUA_TNIL) {
|
||||||
try {
|
try {
|
||||||
beardcolor = luabind::object_cast<int>(cur);
|
beardcolor = luabind::object_cast<uint8>(cur);
|
||||||
} catch(luabind::cast_failed &) {
|
} catch (luabind::cast_failed &) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cur = illusion["eyecolor1"];
|
cur = illusion["eyecolor1"];
|
||||||
if(luabind::type(cur) != LUA_TNIL) {
|
if (luabind::type(cur) != LUA_TNIL) {
|
||||||
try {
|
try {
|
||||||
eyecolor1 = luabind::object_cast<int>(cur);
|
eyecolor1 = luabind::object_cast<uint8>(cur);
|
||||||
} catch(luabind::cast_failed &) {
|
} catch (luabind::cast_failed &) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cur = illusion["eyecolor2"];
|
cur = illusion["eyecolor2"];
|
||||||
if(luabind::type(cur) != LUA_TNIL) {
|
if (luabind::type(cur) != LUA_TNIL) {
|
||||||
try {
|
try {
|
||||||
eyecolor2 = luabind::object_cast<int>(cur);
|
eyecolor2 = luabind::object_cast<uint8>(cur);
|
||||||
} catch(luabind::cast_failed &) {
|
} catch (luabind::cast_failed &) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cur = illusion["hairstyle"];
|
cur = illusion["hairstyle"];
|
||||||
if(luabind::type(cur) != LUA_TNIL) {
|
if (luabind::type(cur) != LUA_TNIL) {
|
||||||
try {
|
try {
|
||||||
hairstyle = luabind::object_cast<int>(cur);
|
hairstyle = luabind::object_cast<uint8>(cur);
|
||||||
} catch(luabind::cast_failed &) {
|
} catch (luabind::cast_failed &) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cur = illusion["luclinface"];
|
cur = illusion["luclinface"];
|
||||||
if(luabind::type(cur) != LUA_TNIL) {
|
if (luabind::type(cur) != LUA_TNIL) {
|
||||||
try {
|
try {
|
||||||
luclinface = luabind::object_cast<int>(cur);
|
luclinface = luabind::object_cast<uint8>(cur);
|
||||||
} catch(luabind::cast_failed &) {
|
} catch (luabind::cast_failed &) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cur = illusion["beard"];
|
cur = illusion["beard"];
|
||||||
if(luabind::type(cur) != LUA_TNIL) {
|
if (luabind::type(cur) != LUA_TNIL) {
|
||||||
try {
|
try {
|
||||||
beard = luabind::object_cast<int>(cur);
|
beard = luabind::object_cast<uint8>(cur);
|
||||||
} catch(luabind::cast_failed &) {
|
} catch (luabind::cast_failed &) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cur = illusion["aa_title"];
|
cur = illusion["aa_title"];
|
||||||
if(luabind::type(cur) != LUA_TNIL) {
|
if (luabind::type(cur) != LUA_TNIL) {
|
||||||
try {
|
try {
|
||||||
aa_title = luabind::object_cast<int>(cur);
|
aa_title = luabind::object_cast<uint8>(cur);
|
||||||
} catch(luabind::cast_failed &) {
|
} catch (luabind::cast_failed &) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cur = illusion["drakkin_heritage"];
|
cur = illusion["drakkin_heritage"];
|
||||||
if(luabind::type(cur) != LUA_TNIL) {
|
if (luabind::type(cur) != LUA_TNIL) {
|
||||||
try {
|
try {
|
||||||
drakkin_heritage = luabind::object_cast<int>(cur);
|
drakkin_heritage = luabind::object_cast<uint32>(cur);
|
||||||
} catch(luabind::cast_failed &) {
|
} catch (luabind::cast_failed &) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cur = illusion["drakkin_tattoo"];
|
cur = illusion["drakkin_tattoo"];
|
||||||
if(luabind::type(cur) != LUA_TNIL) {
|
if (luabind::type(cur) != LUA_TNIL) {
|
||||||
try {
|
try {
|
||||||
drakkin_tattoo = luabind::object_cast<int>(cur);
|
drakkin_tattoo = luabind::object_cast<uint32>(cur);
|
||||||
} catch(luabind::cast_failed &) {
|
} catch (luabind::cast_failed &) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cur = illusion["drakkin_details"];
|
cur = illusion["drakkin_details"];
|
||||||
if(luabind::type(cur) != LUA_TNIL) {
|
if (luabind::type(cur) != LUA_TNIL) {
|
||||||
try {
|
try {
|
||||||
drakkin_details = luabind::object_cast<int>(cur);
|
drakkin_details = luabind::object_cast<uint32>(cur);
|
||||||
} catch(luabind::cast_failed &) {
|
} catch (luabind::cast_failed &) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cur = illusion["size"];
|
cur = illusion["size"];
|
||||||
if(luabind::type(cur) != LUA_TNIL) {
|
if (luabind::type(cur) != LUA_TNIL) {
|
||||||
try {
|
try {
|
||||||
size = luabind::object_cast<float>(cur);
|
size = luabind::object_cast<float>(cur);
|
||||||
} catch(luabind::cast_failed &) {
|
} catch (luabind::cast_failed &) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self->SendIllusionPacket(race, gender, texture, helmtexture, haircolor, beardcolor, eyecolor1, eyecolor2, hairstyle, luclinface,
|
cur = illusion["send_appearance_effects"];
|
||||||
beard, aa_title, drakkin_heritage, drakkin_tattoo, drakkin_details, size);
|
if (luabind::type(cur) != LUA_TNIL) {
|
||||||
|
try {
|
||||||
|
send_appearance_effects = luabind::object_cast<bool>(cur);
|
||||||
|
} catch (luabind::cast_failed &) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cur = illusion["target"];
|
||||||
|
if (luabind::type(cur) != LUA_TNIL) {
|
||||||
|
try {
|
||||||
|
target = luabind::object_cast<Lua_Client>(cur);
|
||||||
|
} catch (luabind::cast_failed &) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self->SendIllusionPacket(
|
||||||
|
race,
|
||||||
|
gender,
|
||||||
|
texture,
|
||||||
|
helmtexture,
|
||||||
|
haircolor,
|
||||||
|
beardcolor,
|
||||||
|
eyecolor1,
|
||||||
|
eyecolor2,
|
||||||
|
hairstyle,
|
||||||
|
luclinface,
|
||||||
|
beard,
|
||||||
|
aa_title,
|
||||||
|
drakkin_heritage,
|
||||||
|
drakkin_tattoo,
|
||||||
|
drakkin_details,
|
||||||
|
size,
|
||||||
|
send_appearance_effects,
|
||||||
|
target
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Lua_Mob::ChangeRace(int in) {
|
void Lua_Mob::ChangeRace(int in) {
|
||||||
|
|||||||
17
zone/mob.cpp
17
zone/mob.cpp
@ -518,7 +518,7 @@ Mob::Mob(
|
|||||||
}
|
}
|
||||||
|
|
||||||
Mob::~Mob()
|
Mob::~Mob()
|
||||||
{
|
{
|
||||||
quest_manager.stopalltimers(this);
|
quest_manager.stopalltimers(this);
|
||||||
|
|
||||||
mMovementManager->RemoveMob(this);
|
mMovementManager->RemoveMob(this);
|
||||||
@ -2418,7 +2418,8 @@ void Mob::SendIllusionPacket(
|
|||||||
uint32 in_drakkin_tattoo,
|
uint32 in_drakkin_tattoo,
|
||||||
uint32 in_drakkin_details,
|
uint32 in_drakkin_details,
|
||||||
float in_size,
|
float in_size,
|
||||||
bool send_appearance_effects
|
bool send_appearance_effects,
|
||||||
|
Client* target
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
uint8 new_texture = in_texture;
|
uint8 new_texture = in_texture;
|
||||||
@ -2521,7 +2522,12 @@ void Mob::SendIllusionPacket(
|
|||||||
is->drakkin_details = new_drakkin_details;
|
is->drakkin_details = new_drakkin_details;
|
||||||
is->size = size;
|
is->size = size;
|
||||||
|
|
||||||
entity_list.QueueClients(this, outapp);
|
if (!target) {
|
||||||
|
entity_list.QueueClients(this, outapp);
|
||||||
|
} else {
|
||||||
|
target->QueuePacket(outapp, false);
|
||||||
|
}
|
||||||
|
|
||||||
safe_delete(outapp);
|
safe_delete(outapp);
|
||||||
|
|
||||||
/* Refresh armor and tints after send illusion packet */
|
/* Refresh armor and tints after send illusion packet */
|
||||||
@ -2532,7 +2538,7 @@ void Mob::SendIllusionPacket(
|
|||||||
}
|
}
|
||||||
|
|
||||||
LogSpells(
|
LogSpells(
|
||||||
"Illusion: Race [{}] Gender [{}] Texture [{}] HelmTexture [{}] HairColor [{}] BeardColor [{}] EyeColor1 [{}] EyeColor2 [{}] HairStyle [{}] Face [{}] DrakkinHeritage [{}] DrakkinTattoo [{}] DrakkinDetails [{}] Size [{}]",
|
"Illusion: Race [{}] Gender [{}] Texture [{}] HelmTexture [{}] HairColor [{}] BeardColor [{}] EyeColor1 [{}] EyeColor2 [{}] HairStyle [{}] Face [{}] DrakkinHeritage [{}] DrakkinTattoo [{}] DrakkinDetails [{}] Size [{}] Target [{}]",
|
||||||
race,
|
race,
|
||||||
gender,
|
gender,
|
||||||
new_texture,
|
new_texture,
|
||||||
@ -2546,7 +2552,8 @@ void Mob::SendIllusionPacket(
|
|||||||
new_drakkin_heritage,
|
new_drakkin_heritage,
|
||||||
new_drakkin_tattoo,
|
new_drakkin_tattoo,
|
||||||
new_drakkin_details,
|
new_drakkin_details,
|
||||||
size
|
size,
|
||||||
|
target ? target->GetCleanName() : "No Target"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -899,7 +899,8 @@ public:
|
|||||||
uint32 in_drakkin_tattoo = 0xFFFFFFFF,
|
uint32 in_drakkin_tattoo = 0xFFFFFFFF,
|
||||||
uint32 in_drakkin_details = 0xFFFFFFFF,
|
uint32 in_drakkin_details = 0xFFFFFFFF,
|
||||||
float in_size = -1.0f,
|
float in_size = -1.0f,
|
||||||
bool send_appearance_effects = true
|
bool send_appearance_effects = true,
|
||||||
|
Client* target = nullptr
|
||||||
);
|
);
|
||||||
void CloneAppearance(Mob* other, bool clone_name = false);
|
void CloneAppearance(Mob* other, bool clone_name = false);
|
||||||
void SetFaceAppearance(const FaceChange_Struct& face, bool skip_sender = false);
|
void SetFaceAppearance(const FaceChange_Struct& face, bool skip_sender = false);
|
||||||
|
|||||||
@ -1861,6 +1861,56 @@ void Perl_Mob_SendIllusion(Mob* self, uint16 race, uint8 gender, uint8 texture,
|
|||||||
self->SendIllusionPacket(race, gender, texture, helmtexture, haircolor, beardcolor, 0xFF, 0xFF, hairstyle, face, beard, 0xFF, drakkin_heritage, drakkin_tattoo, drakkin_details, size);
|
self->SendIllusionPacket(race, gender, texture, helmtexture, haircolor, beardcolor, 0xFF, 0xFF, hairstyle, face, beard, 0xFF, drakkin_heritage, drakkin_tattoo, drakkin_details, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Perl_Mob_SendIllusion(Mob* self, uint16 race, uint8 gender, uint8 texture, uint8 helmtexture, uint8 face, uint8 hairstyle, uint8 haircolor, uint8 beard, uint8 beardcolor, uint32 drakkin_heritage, uint32 drakkin_tattoo, uint32 drakkin_details, float size, Client* target) // @categories Script Utility
|
||||||
|
{
|
||||||
|
self->SendIllusionPacket(race, gender, texture, helmtexture, haircolor, beardcolor, 0xFF, 0xFF, hairstyle, face, beard, 0xFF, drakkin_heritage, drakkin_tattoo, drakkin_details, size, true, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Perl_Mob_SendIllusionPacket(Mob* self, perl::reference table_ref)
|
||||||
|
{
|
||||||
|
perl::hash table = table_ref;
|
||||||
|
|
||||||
|
uint16 race = table.exists("race") ? table["race"] : self->GetRace();
|
||||||
|
uint8 gender = table.exists("gender") ? table["gender"] : self->GetGender();
|
||||||
|
uint8 texture = table.exists("texture") ? table["texture"] : self->GetTexture();
|
||||||
|
uint8 helmtexture = table.exists("helmtexture") ? table["helmtexture"] : self->GetHelmTexture();
|
||||||
|
uint8 haircolor = table.exists("haircolor") ? table["haircolor"] : self->GetHairColor();
|
||||||
|
uint8 beardcolor = table.exists("beardcolor") ? table["beardcolor"] : self->GetBeardColor();
|
||||||
|
uint8 eyecolor1 = table.exists("eyecolor1") ? table["eyecolor1"] : self->GetEyeColor1();
|
||||||
|
uint8 eyecolor2 = table.exists("eyecolor2") ? table["eyecolor2"] : self->GetEyeColor2();
|
||||||
|
uint8 hairstyle = table.exists("hairstyle") ? table["hairstyle"] : self->GetHairStyle();
|
||||||
|
uint8 luclinface = table.exists("luclinface") ? table["luclinface"] : self->GetLuclinFace();
|
||||||
|
uint8 beard = table.exists("beard") ? table["beard"] : self->GetBeard();
|
||||||
|
uint8 aa_title = table.exists("aa_title") ? table["aa_title"] : 255;
|
||||||
|
uint32 drakkin_heritage = table.exists("drakkin_heritage") ? table["drakkin_heritage"] : self->GetDrakkinHeritage();
|
||||||
|
uint32 drakkin_tattoo = table.exists("drakkin_tattoo") ? table["drakkin_tattoo"] : self->GetDrakkinTattoo();
|
||||||
|
uint32 drakkin_details = table.exists("drakkin_details") ? table["drakkin_details"] : self->GetDrakkinDetails();
|
||||||
|
float size = table.exists("size") ? table["size"] : self->GetSize();
|
||||||
|
bool send_appearance_effects = table.exists("send_appearance_effects") ? table["send_appearance_effects"] : true;
|
||||||
|
Client* target = table.exists("target") ? static_cast<Client *>(table["target"]) : nullptr;
|
||||||
|
|
||||||
|
self->SendIllusionPacket(
|
||||||
|
race,
|
||||||
|
gender,
|
||||||
|
texture,
|
||||||
|
helmtexture,
|
||||||
|
haircolor,
|
||||||
|
beardcolor,
|
||||||
|
eyecolor1,
|
||||||
|
eyecolor2,
|
||||||
|
hairstyle,
|
||||||
|
luclinface,
|
||||||
|
beard,
|
||||||
|
aa_title,
|
||||||
|
drakkin_heritage,
|
||||||
|
drakkin_tattoo,
|
||||||
|
drakkin_details,
|
||||||
|
size,
|
||||||
|
send_appearance_effects,
|
||||||
|
target
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
void Perl_Mob_CameraEffect(Mob* self, uint32 duration) // @categories Script Utility
|
void Perl_Mob_CameraEffect(Mob* self, uint32 duration) // @categories Script Utility
|
||||||
{
|
{
|
||||||
self->CameraEffect(duration, 0.03125f);
|
self->CameraEffect(duration, 0.03125f);
|
||||||
@ -3292,6 +3342,8 @@ void perl_register_mob()
|
|||||||
package.add("SendIllusion", (void(*)(Mob*, uint16, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint32, uint32))&Perl_Mob_SendIllusion);
|
package.add("SendIllusion", (void(*)(Mob*, uint16, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint32, uint32))&Perl_Mob_SendIllusion);
|
||||||
package.add("SendIllusion", (void(*)(Mob*, uint16, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint32, uint32, uint32))&Perl_Mob_SendIllusion);
|
package.add("SendIllusion", (void(*)(Mob*, uint16, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint32, uint32, uint32))&Perl_Mob_SendIllusion);
|
||||||
package.add("SendIllusion", (void(*)(Mob*, uint16, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint32, uint32, uint32, float))&Perl_Mob_SendIllusion);
|
package.add("SendIllusion", (void(*)(Mob*, uint16, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint32, uint32, uint32, float))&Perl_Mob_SendIllusion);
|
||||||
|
package.add("SendIllusion", (void(*)(Mob*, uint16, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint32, uint32, uint32, float, Client*))&Perl_Mob_SendIllusion);
|
||||||
|
package.add("SendIllusionPacket", (void(*)(Mob*, perl::reference))&Perl_Mob_SendIllusionPacket);
|
||||||
package.add("SendTo", &Perl_Mob_SendTo);
|
package.add("SendTo", &Perl_Mob_SendTo);
|
||||||
package.add("SendToFixZ", &Perl_Mob_SendToFixZ);
|
package.add("SendToFixZ", &Perl_Mob_SendToFixZ);
|
||||||
package.add("SendWearChange", &Perl_Mob_SendWearChange);
|
package.add("SendWearChange", &Perl_Mob_SendWearChange);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user