mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 21:01:29 +00:00
251 lines
6.2 KiB
C++
Executable File
251 lines
6.2 KiB
C++
Executable File
#include "../client.h"
|
|
|
|
void command_fixmob(Client *c, const Seperator *sep)
|
|
{
|
|
Mob *target = c->GetTarget();
|
|
const char *Usage = "Usage: #fixmob [race|gender|texture|helm|face|hair|haircolor|beard|beardcolor|heritage|tattoo|detail] [next|prev]";
|
|
|
|
if (!sep->arg[1]) {
|
|
c->Message(Chat::White, Usage);
|
|
}
|
|
else if (!target) {
|
|
c->Message(Chat::White, "Error: this command requires a target");
|
|
}
|
|
else {
|
|
|
|
uint32 Adjustment = 1; // Previous or Next
|
|
char codeMove = 0;
|
|
|
|
if (sep->arg[2]) {
|
|
char *command2 = sep->arg[2];
|
|
codeMove = (command2[0] | 0x20); // First character, lower-cased
|
|
if (codeMove == 'n') {
|
|
Adjustment = 1;
|
|
}
|
|
else if (codeMove == 'p') {
|
|
Adjustment = -1;
|
|
}
|
|
}
|
|
|
|
uint16 Race = target->GetRace();
|
|
uint8 Gender = target->GetGender();
|
|
uint8 Texture = 0xFF;
|
|
uint8 HelmTexture = 0xFF;
|
|
uint8 HairColor = target->GetHairColor();
|
|
uint8 BeardColor = target->GetBeardColor();
|
|
uint8 EyeColor1 = target->GetEyeColor1();
|
|
uint8 EyeColor2 = target->GetEyeColor2();
|
|
uint8 HairStyle = target->GetHairStyle();
|
|
uint8 LuclinFace = target->GetLuclinFace();
|
|
uint8 Beard = target->GetBeard();
|
|
uint32 DrakkinHeritage = target->GetDrakkinHeritage();
|
|
uint32 DrakkinTattoo = target->GetDrakkinTattoo();
|
|
uint32 DrakkinDetails = target->GetDrakkinDetails();
|
|
|
|
const char *ChangeType = nullptr; // If it's still nullptr after processing, they didn't send a valid command
|
|
uint32 ChangeSetting;
|
|
char *command = sep->arg[1];
|
|
|
|
if (strcasecmp(command, "race") == 0) {
|
|
if (Race == 1 && codeMove == 'p') {
|
|
Race = RuleI(NPC, MaxRaceID);
|
|
}
|
|
else if (Race >= RuleI(NPC, MaxRaceID) && codeMove != 'p') {
|
|
Race = 1;
|
|
}
|
|
else {
|
|
Race += Adjustment;
|
|
}
|
|
ChangeType = "Race";
|
|
ChangeSetting = Race;
|
|
}
|
|
else if (strcasecmp(command, "gender") == 0) {
|
|
if (Gender == 0 && codeMove == 'p') {
|
|
Gender = 2;
|
|
}
|
|
else if (Gender >= 2 && codeMove != 'p') {
|
|
Gender = 0;
|
|
}
|
|
else {
|
|
Gender += Adjustment;
|
|
}
|
|
ChangeType = "Gender";
|
|
ChangeSetting = Gender;
|
|
}
|
|
else if (strcasecmp(command, "texture") == 0) {
|
|
Texture = target->GetTexture();
|
|
|
|
if (Texture == 0 && codeMove == 'p') {
|
|
Texture = 25;
|
|
}
|
|
else if (Texture >= 25 && codeMove != 'p') {
|
|
Texture = 0;
|
|
}
|
|
else {
|
|
Texture += Adjustment;
|
|
}
|
|
ChangeType = "Texture";
|
|
ChangeSetting = Texture;
|
|
}
|
|
else if (strcasecmp(command, "helm") == 0) {
|
|
HelmTexture = target->GetHelmTexture();
|
|
if (HelmTexture == 0 && codeMove == 'p') {
|
|
HelmTexture = 25;
|
|
}
|
|
else if (HelmTexture >= 25 && codeMove != 'p') {
|
|
HelmTexture = 0;
|
|
}
|
|
else {
|
|
HelmTexture += Adjustment;
|
|
}
|
|
ChangeType = "HelmTexture";
|
|
ChangeSetting = HelmTexture;
|
|
}
|
|
else if (strcasecmp(command, "face") == 0) {
|
|
if (LuclinFace == 0 && codeMove == 'p') {
|
|
LuclinFace = 87;
|
|
}
|
|
else if (LuclinFace >= 87 && codeMove != 'p') {
|
|
LuclinFace = 0;
|
|
}
|
|
else {
|
|
LuclinFace += Adjustment;
|
|
}
|
|
ChangeType = "LuclinFace";
|
|
ChangeSetting = LuclinFace;
|
|
}
|
|
else if (strcasecmp(command, "hair") == 0) {
|
|
if (HairStyle == 0 && codeMove == 'p') {
|
|
HairStyle = 8;
|
|
}
|
|
else if (HairStyle >= 8 && codeMove != 'p') {
|
|
HairStyle = 0;
|
|
}
|
|
else {
|
|
HairStyle += Adjustment;
|
|
}
|
|
ChangeType = "HairStyle";
|
|
ChangeSetting = HairStyle;
|
|
}
|
|
else if (strcasecmp(command, "haircolor") == 0) {
|
|
if (HairColor == 0 && codeMove == 'p') {
|
|
HairColor = 24;
|
|
}
|
|
else if (HairColor >= 24 && codeMove != 'p') {
|
|
HairColor = 0;
|
|
}
|
|
else {
|
|
HairColor += Adjustment;
|
|
}
|
|
ChangeType = "HairColor";
|
|
ChangeSetting = HairColor;
|
|
}
|
|
else if (strcasecmp(command, "beard") == 0) {
|
|
if (Beard == 0 && codeMove == 'p') {
|
|
Beard = 11;
|
|
}
|
|
else if (Beard >= 11 && codeMove != 'p') {
|
|
Beard = 0;
|
|
}
|
|
else {
|
|
Beard += Adjustment;
|
|
}
|
|
ChangeType = "Beard";
|
|
ChangeSetting = Beard;
|
|
}
|
|
else if (strcasecmp(command, "beardcolor") == 0) {
|
|
if (BeardColor == 0 && codeMove == 'p') {
|
|
BeardColor = 24;
|
|
}
|
|
else if (BeardColor >= 24 && codeMove != 'p') {
|
|
BeardColor = 0;
|
|
}
|
|
else {
|
|
BeardColor += Adjustment;
|
|
}
|
|
ChangeType = "BeardColor";
|
|
ChangeSetting = BeardColor;
|
|
}
|
|
else if (strcasecmp(command, "heritage") == 0) {
|
|
if (DrakkinHeritage == 0 && codeMove == 'p') {
|
|
DrakkinHeritage = 6;
|
|
}
|
|
else if (DrakkinHeritage >= 6 && codeMove != 'p') {
|
|
DrakkinHeritage = 0;
|
|
}
|
|
else {
|
|
DrakkinHeritage += Adjustment;
|
|
}
|
|
ChangeType = "DrakkinHeritage";
|
|
ChangeSetting = DrakkinHeritage;
|
|
}
|
|
else if (strcasecmp(command, "tattoo") == 0) {
|
|
if (DrakkinTattoo == 0 && codeMove == 'p') {
|
|
DrakkinTattoo = 8;
|
|
}
|
|
else if (DrakkinTattoo >= 8 && codeMove != 'p') {
|
|
DrakkinTattoo = 0;
|
|
}
|
|
else {
|
|
DrakkinTattoo += Adjustment;
|
|
}
|
|
ChangeType = "DrakkinTattoo";
|
|
ChangeSetting = DrakkinTattoo;
|
|
}
|
|
else if (strcasecmp(command, "detail") == 0) {
|
|
if (DrakkinDetails == 0 && codeMove == 'p') {
|
|
DrakkinDetails = 7;
|
|
}
|
|
else if (DrakkinDetails >= 7 && codeMove != 'p') {
|
|
DrakkinDetails = 0;
|
|
}
|
|
else {
|
|
DrakkinDetails += Adjustment;
|
|
}
|
|
ChangeType = "DrakkinDetails";
|
|
ChangeSetting = DrakkinDetails;
|
|
}
|
|
|
|
// Hack to fix some races that base features from face
|
|
switch (Race) {
|
|
case 2: // Barbarian
|
|
if (LuclinFace > 10) {
|
|
LuclinFace -= ((DrakkinTattoo - 1) * 10);
|
|
}
|
|
LuclinFace += (DrakkinTattoo * 10);
|
|
break;
|
|
case 3: // Erudite
|
|
if (LuclinFace > 10) {
|
|
LuclinFace -= ((HairStyle - 1) * 10);
|
|
}
|
|
LuclinFace += (HairStyle * 10);
|
|
break;
|
|
case 5: // HighElf
|
|
case 6: // DarkElf
|
|
case 7: // HalfElf
|
|
if (LuclinFace > 10) {
|
|
LuclinFace -= ((Beard - 1) * 10);
|
|
}
|
|
LuclinFace += (Beard * 10);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
|
|
if (ChangeType == nullptr) {
|
|
c->Message(Chat::White, Usage);
|
|
}
|
|
else {
|
|
target->SendIllusionPacket(
|
|
Race, Gender, Texture, HelmTexture, HairColor, BeardColor,
|
|
EyeColor1, EyeColor2, HairStyle, LuclinFace, Beard, 0xFF,
|
|
DrakkinHeritage, DrakkinTattoo, DrakkinDetails
|
|
);
|
|
|
|
c->Message(Chat::White, "%s=%i", ChangeType, ChangeSetting);
|
|
}
|
|
}
|
|
}
|
|
|