[Doors] Improvements to door manipulation (#2370)

This commit is contained in:
Chris Miles 2022-08-13 18:16:55 -05:00 committed by GitHub
parent aa2b7f8947
commit b79e1947f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 701 additions and 736 deletions

View File

@ -1111,8 +1111,8 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s
break; break;
} }
case ChatChannel_Say: { /* Say */ case ChatChannel_Say: { /* Say */
if(message[0] == COMMAND_CHAR) { if (message[0] == COMMAND_CHAR) {
if(command_dispatch(this, message) == -2) { if (command_dispatch(this, message) == -2) {
if (parse->PlayerHasQuestSub(EVENT_COMMAND)) { if (parse->PlayerHasQuestSub(EVENT_COMMAND)) {
int i = parse->EventPlayer(EVENT_COMMAND, this, message, 0); int i = parse->EventPlayer(EVENT_COMMAND, this, message, 0);
if (i == 0 && !RuleB(Chat, SuppressCommandErrors)) { if (i == 0 && !RuleB(Chat, SuppressCommandErrors)) {

View File

@ -4265,7 +4265,7 @@ void Client::Handle_OP_ClickDoor(const EQApplicationPacket *app)
fmt::format( fmt::format(
"Door ({}) [{}]", "Door ({}) [{}]",
currentdoor->GetEntityID(), currentdoor->GetEntityID(),
Saylink::Create("#door edit", false, "#door edit") Saylink::Create("#door edit", true, "#door edit")
).c_str() ).c_str()
); );
} }
@ -8523,7 +8523,7 @@ void Client::Handle_OP_ItemLinkClick(const EQApplicationPacket *app)
response = row[0]; response = row[0];
} }
if ((response).size() > 0) { if (!response.empty()) {
if (!mod_saylink(response, silentsaylink)) { if (!mod_saylink(response, silentsaylink)) {
return; return;
} }
@ -8531,43 +8531,21 @@ void Client::Handle_OP_ItemLinkClick(const EQApplicationPacket *app)
if (GetTarget() && GetTarget()->IsNPC()) { if (GetTarget() && GetTarget()->IsNPC()) {
if (silentsaylink) { if (silentsaylink) {
parse->EventNPC(EVENT_SAY, GetTarget()->CastToNPC(), this, response, 0); parse->EventNPC(EVENT_SAY, GetTarget()->CastToNPC(), this, response, 0);
if (response[0] == '#' && parse->PlayerHasQuestSub(EVENT_COMMAND)) {
parse->EventPlayer(EVENT_COMMAND, this, response, 0);
}
#ifdef BOTS
else if (response[0] == '^' && parse->PlayerHasQuestSub(EVENT_BOT_COMMAND)) {
parse->EventPlayer(EVENT_BOT_COMMAND, this, response, 0);
}
#endif
else {
parse->EventPlayer(EVENT_SAY, this, response, 0);
}
} }
else { else {
Message(Chat::LightGray, "You say, '%s'", response.c_str()); Message(Chat::LightGray, "You say, '%s'", response.c_str());
ChannelMessageReceived(8, 0, 100, response.c_str());
} }
ChannelMessageReceived(ChatChannel_Say, 0, 100, response.c_str());
return; return;
} }
else { else {
if (silentsaylink) { ChannelMessageReceived(ChatChannel_Say, 0, 100, response.c_str());
if (response[0] == '#' && parse->PlayerHasQuestSub(EVENT_COMMAND)) { if (!silentsaylink) {
parse->EventPlayer(EVENT_COMMAND, this, response, 0);
}
#ifdef BOTS
else if (response[0] == '^' && parse->PlayerHasQuestSub(EVENT_BOT_COMMAND)) {
parse->EventPlayer(EVENT_BOT_COMMAND, this, response, 0);
}
#endif
else {
parse->EventPlayer(EVENT_SAY, this, response, 0);
}
}
else {
Message(Chat::LightGray, "You say, '%s'", response.c_str()); Message(Chat::LightGray, "You say, '%s'", response.c_str());
ChannelMessageReceived(8, 0, 100, response.c_str());
} }
return; return;
} }
} }
@ -8584,7 +8562,6 @@ void Client::Handle_OP_ItemLinkClick(const EQApplicationPacket *app)
SendItemPacket(0, inst, ItemPacketViewLink); SendItemPacket(0, inst, ItemPacketViewLink);
safe_delete(inst); safe_delete(inst);
} }
return;
} }
void Client::Handle_OP_ItemLinkResponse(const EQApplicationPacket *app) void Client::Handle_OP_ItemLinkResponse(const EQApplicationPacket *app)

File diff suppressed because it is too large Load Diff

View File

@ -17,31 +17,31 @@ public:
Doors(const char *model, const glm::vec4& position, uint8 open_type = 58, uint16 size = 100); Doors(const char *model, const glm::vec4& position, uint8 open_type = 58, uint16 size = 100);
Doors(const DoorsRepository::Doors& door); Doors(const DoorsRepository::Doors& door);
bool GetDisableTimer() { return disable_timer; } bool GetDisableTimer() { return m_disable_timer; }
bool IsDoor() const { return true; } bool IsDoor() const { return true; }
bool IsDoorOpen() { return is_open; } bool IsDoorOpen() { return m_is_open; }
bool Process(); bool Process();
bool triggered; bool triggered;
char *GetDoorName() { return door_name; } char *GetDoorName() { return m_door_name; }
const glm::vec4 GetDestination() const { return m_Destination; } const glm::vec4 GetDestination() const { return m_destination; }
const glm::vec4 &GetPosition() const { return m_Position; } const glm::vec4 &GetPosition() const { return m_position; }
int GetDzSwitchID() const { return m_dz_switch_id; } int GetDzSwitchID() const { return m_dz_switch_id; }
int GetIncline() { return incline; } int GetIncline() { return m_incline; }
int GetInvertState() { return invert_state; } int GetInvertState() { return m_invert_state; }
uint8 GetDoorID() { return door_id; } uint8 GetDoorID() { return m_door_id; }
uint8 GetNoKeyring() { return no_key_ring; } uint8 GetNoKeyring() { return m_no_key_ring; }
uint8 GetOpenType() { return open_type; } uint8 GetOpenType() { return m_open_type; }
uint8 GetTriggerDoorID() { return trigger_door; } uint8 GetTriggerDoorID() { return m_trigger_door; }
uint8 GetTriggerType() { return trigger_type; } uint8 GetTriggerType() { return m_trigger_type; }
uint8 IsLDoNDoor() { return is_ldon_door; } uint8 IsLDoNDoor() { return m_is_ldon_door; }
uint16 GetLockpick() { return lockpick; } uint16 GetLockpick() { return m_lockpick; }
uint16 GetSize() { return size; } uint16 GetSize() { return m_size; }
uint32 GetClientVersionMask() { return client_version_mask; } uint32 GetClientVersionMask() { return m_client_version_mask; }
uint32 GetDoorDBID() { return database_id; } uint32 GetDoorDBID() { return m_database_id; }
uint32 GetDoorParam() { return door_param; } uint32 GetDoorParam() { return m_door_param; }
uint32 GetEntityID() { return entity_id; } uint32 GetEntityID() { return m_entity_id; }
uint32 GetGuildID() { return guild_id; } uint32 GetGuildID() { return m_guild_id; }
uint32 GetKeyItem() { return key_item_id; } uint32 GetKeyItem() { return m_key_item_id; }
void CreateDatabaseEntry(); void CreateDatabaseEntry();
void ForceClose(Mob *sender, bool alt_mode = false); void ForceClose(Mob *sender, bool alt_mode = false);
void ForceOpen(Mob *sender, bool alt_mode = false); void ForceOpen(Mob *sender, bool alt_mode = false);
@ -49,14 +49,14 @@ public:
void Open(Mob *sender, bool alt_mode = false); void Open(Mob *sender, bool alt_mode = false);
void SetDisableTimer(bool flag); void SetDisableTimer(bool flag);
void SetDoorName(const char *name); void SetDoorName(const char *name);
void SetEntityID(uint32 entity) { entity_id = entity; } void SetEntityID(uint32 entity) { m_entity_id = entity; }
void SetIncline(int in); void SetIncline(int in);
void SetInvertState(int in); void SetInvertState(int in);
void SetKeyItem(uint32 in) { key_item_id = in; } void SetKeyItem(uint32 in) { m_key_item_id = in; }
void SetLocation(float x, float y, float z); void SetLocation(float x, float y, float z);
void SetLockpick(uint16 in) { lockpick = in; } void SetLockpick(uint16 in) { m_lockpick = in; }
void SetNoKeyring(uint8 in) { no_key_ring = in; } void SetNoKeyring(uint8 in) { m_no_key_ring = in; }
void SetOpenState(bool st) { is_open = st; } void SetOpenState(bool st) { m_is_open = st; }
void SetOpenType(uint8 in); void SetOpenType(uint8 in);
void SetPosition(const glm::vec4 &position); void SetPosition(const glm::vec4 &position);
void SetSize(uint16 size); void SetSize(uint16 size);
@ -68,31 +68,31 @@ public:
private: private:
uint32 database_id; uint32 m_database_id;
uint8 door_id; uint8 m_door_id;
char zone_name[32]; char m_zone_name[32];
char door_name[32]; char m_door_name[32];
glm::vec4 m_Position; glm::vec4 m_position;
int incline; int m_incline;
uint8 open_type; uint8 m_open_type;
uint32 guild_id; uint32 m_guild_id;
uint16 lockpick; uint16 m_lockpick;
uint32 key_item_id; uint32 m_key_item_id;
uint8 no_key_ring; uint8 m_no_key_ring;
uint8 trigger_door; uint8 m_trigger_door;
uint8 trigger_type; uint8 m_trigger_type;
uint32 door_param; uint32 m_door_param;
uint16 size; uint16 m_size;
int invert_state; int m_invert_state;
uint32 entity_id; uint32 m_entity_id;
bool disable_timer; bool m_disable_timer;
bool is_open; bool m_is_open;
Timer close_timer; Timer m_close_timer;
char destination_zone_name[16]; char m_destination_zone_name[16];
int destination_instance_id; int m_destination_instance_id;
glm::vec4 m_Destination; glm::vec4 m_destination;
uint8 is_ldon_door; uint8 m_is_ldon_door;
int m_dz_switch_id = 0; int m_dz_switch_id = 0;
uint32 client_version_mask; uint32 m_client_version_mask;
}; };
#endif #endif

View File

@ -34,80 +34,10 @@ void DoorManipulation::CommandHandler(Client *c, const Seperator *sep)
); );
} }
// option
if (arg1.empty()) {
DoorManipulation::CommandHeader(c);
c->Message(
Chat::White,
"#door create <modelname> | Creates a door from a model. (Example IT78 creates a campfire)"
);
c->Message(Chat::White, "#door setinvertstate [0|1] | Sets selected door invert state");
c->Message(Chat::White, "#door setincline <incline> | Sets selected door incline");
c->Message(Chat::White, "#door opentype <opentype> | Sets selected door opentype");
c->Message(
Chat::White,
fmt::format(
"#door model <modelname> | Changes door model for selected door or select from [{}] or [{}]",
Saylink::Create("#door showmodelszone", false, "local zone"),
Saylink::Create("#door showmodelsglobal", false, "global")
).c_str()
);
c->Message(
Chat::White,
"#door showmodelsfromfile <file.eqg|file.s3d> | Shows models from s3d or eqg file. Example tssequip.eqg or wallet01.eqg"
);
c->Message(
Chat::White,
fmt::format(
"{} | Shows available models in the current zone that you are in",
Saylink::Create("#door showmodelszone", false, "#door showmodelszone")
).c_str()
);
c->Message(
Chat::White,
fmt::format(
"{} | Shows available models globally by first listing all global model files",
Saylink::Create("#door showmodelsglobal", false, "#door showmodelsglobal")
).c_str()
);
c->Message(Chat::White, "#door save | Creates database entry for selected door");
c->Message(
Chat::White,
fmt::format(
"{} - Brings up editing interface for selected door",
Saylink::Create("#door edit", false, "#door edit")
).c_str()
);
c->Message(
Chat::White,
fmt::format(
"{} - lists doors in zone",
Saylink::Create("#list doors", false, "#list doors")
).c_str()
);
return;
}
// edit menu // edit menu
if (arg1 == "edit") { if (arg1 == "edit") {
Doors *door = entity_list.GetDoorsByID(c->GetDoorToolEntityId()); Doors *door = entity_list.GetDoorsByID(c->GetDoorToolEntityId());
if (door) { if (door) {
c->Message(
Chat::White,
fmt::format(
"Door Selected ID [{}] Name [{}] OpenType [{}] Invertstate [{} | {}/{}] ",
c->GetDoorToolEntityId(),
door->GetDoorName(),
door->GetOpenType(),
door->GetInvertState(),
Saylink::Create("#door setinvertstate 0", false, "0"),
Saylink::Create("#door setinvertstate 1", false, "1")
).c_str()
);
const std::string move_x_action = "move_x"; const std::string move_x_action = "move_x";
const std::string move_y_action = "move_y"; const std::string move_y_action = "move_y";
@ -115,189 +45,6 @@ void DoorManipulation::CommandHandler(Client *c, const Seperator *sep)
const std::string move_h_action = "move_h"; const std::string move_h_action = "move_h";
const std::string set_size_action = "set_size"; const std::string set_size_action = "set_size";
std::vector<std::string> move_options = {
move_x_action,
move_y_action,
move_z_action,
move_h_action,
set_size_action
};
std::vector<std::string> move_x_options_positive;
std::vector<std::string> move_x_options_negative;
std::vector<std::string> move_y_options_positive;
std::vector<std::string> move_y_options_negative;
std::vector<std::string> move_z_options_positive;
std::vector<std::string> move_z_options_negative;
std::vector<std::string> move_h_options_positive;
std::vector<std::string> move_h_options_negative;
std::vector<std::string> set_size_options_positive;
std::vector<std::string> set_size_options_negative;
for (const auto &move_option : move_options) {
if (move_option == move_x_action) {
move_x_options_positive.emplace_back(
Saylink::Create(
fmt::format("#door edit {} .25", move_option),
false,
".25"
)
);
for (int move_index = 0; move_index <= 15; move_index += 5) {
int value = (move_index == 0 ? 1 : move_index);
move_x_options_positive.emplace_back(
Saylink::Create(
fmt::format("#door edit {} {}", move_option, value),
false,
fmt::format("{}", std::abs(value))
)
);
}
for (int move_index = -15; move_index <= 0; move_index += 5) {
int value = (move_index == 0 ? 1 : move_index);
move_x_options_negative.emplace_back(
Saylink::Create(
fmt::format("#door edit {} {}", move_option, value),
false,
fmt::format("{}", std::abs(value))
)
);
}
move_x_options_negative.emplace_back(
Saylink::Create(
fmt::format("#door edit {} -.25", move_option),
false,
".25"
)
);
}
else if (move_option == move_y_action) {
move_y_options_positive.emplace_back(
Saylink::Create(
fmt::format("#door edit {} .25", move_option),
false,
".25"
)
);
for (int move_index = 0; move_index <= 15; move_index += 5) {
int value = (move_index == 0 ? 1 : move_index);
move_y_options_positive.emplace_back(
Saylink::Create(
fmt::format("#door edit {} {}", move_option, value),
false,
fmt::format("{}", std::abs(value))
)
);
}
for (int move_index = -15; move_index <= 0; move_index += 5) {
int value = (move_index == 0 ? -1 : move_index);
move_y_options_negative.emplace_back(
Saylink::Create(
fmt::format("#door edit {} {}", move_option, value),
false,
fmt::format("{}", std::abs(value))
)
);
}
move_y_options_negative.emplace_back(
Saylink::Create(
fmt::format("#door edit {} -.25", move_option),
false,
".25"
)
);
}
else if (move_option == move_z_action) {
move_z_options_positive.emplace_back(
Saylink::Create(
fmt::format("#door edit {} .25", move_option),
false,
".25"
)
);
for (int move_index = 0; move_index <= 15; move_index += 5) {
int value = (move_index == 0 ? 1 : move_index);
move_z_options_positive.emplace_back(
Saylink::Create(
fmt::format("#door edit {} {}", move_option, value),
false,
fmt::format("{}", std::abs(value))
)
);
}
for (int move_index = -15; move_index <= 0; move_index += 5) {
int value = (move_index == 0 ? -1 : move_index);
move_z_options_negative.emplace_back(
Saylink::Create(
fmt::format("#door edit {} {}", move_option, value),
false,
fmt::format("{}", std::abs(value))
)
);
}
move_z_options_negative.emplace_back(
Saylink::Create(
fmt::format("#door edit {} -.25", move_option),
false,
".25"
)
);
}
else if (move_option == move_h_action) {
for (int move_index = 0; move_index <= 50; move_index += 5) {
int value = (move_index == 0 ? 1 : move_index);
move_h_options_positive.emplace_back(
Saylink::Create(
fmt::format("#door edit {} {}", move_option, value),
false,
fmt::format("{}", std::abs(value))
)
);
}
for (int move_index = -50; move_index <= 0; move_index += 5) {
int value = (move_index == 0 ? -1 : move_index);
move_h_options_negative.emplace_back(
Saylink::Create(
fmt::format("#door edit {} {}", move_option, value),
false,
fmt::format("{}", std::abs(value))
)
);
}
}
else if (move_option == set_size_action) {
for (int move_index = 0; move_index <= 100; move_index += 10) {
int value = (move_index == 0 ? 1 : move_index);
set_size_options_positive.emplace_back(
Saylink::Create(
fmt::format("#door edit {} {}", move_option, value),
false,
fmt::format("{}", std::abs(value))
)
);
}
for (int move_index = -100; move_index <= 0; move_index += 10) {
int value = (move_index == 0 ? -1 : move_index);
set_size_options_negative.emplace_back(
Saylink::Create(
fmt::format("#door edit {} {}", move_option, value),
false,
fmt::format("{}", std::abs(value))
)
);
}
}
}
// we're passing a move action here // we're passing a move action here
if (!arg3.empty() && Strings::IsNumber(arg3)) { if (!arg3.empty() && Strings::IsNumber(arg3)) {
float x_move = 0.0f; float x_move = 0.0f;
@ -336,73 +83,192 @@ void DoorManipulation::CommandHandler(Client *c, const Seperator *sep)
door_position.w = door_position.w + h_move; door_position.w = door_position.w + h_move;
door->SetPosition(door_position); door->SetPosition(door_position);
door->SetSize(door->GetSize() + set_size); door->SetSize(door->GetSize() + set_size);
// spawn and move helpers
uint16 helper_mob_x_negative = 0;
uint16 helper_mob_x_positive = 0;
uint16 helper_mob_y_positive = 0;
uint16 helper_mob_y_negative = 0;
for (auto &n: entity_list.GetNPCList()) {
NPC *npc = n.second;
std::string npc_name = npc->GetName();
if (npc_name.find("-X") != std::string::npos) {
helper_mob_x_negative = npc->GetID();
}
if (npc_name.find("-Y") != std::string::npos) {
helper_mob_y_negative = npc->GetID();
}
if (npc_name.find("+X") != std::string::npos) {
helper_mob_x_positive = npc->GetID();
}
if (npc_name.find("+Y") != std::string::npos) {
helper_mob_y_positive = npc->GetID();
}
}
// -X
door_position = door->GetPosition();
if (helper_mob_x_negative == 0) {
door_position.x = door_position.x - 15;
helper_mob_x_negative = NPC::SpawnNodeNPC("-X", "", door_position)->GetID();
}
else {
auto n = entity_list.GetNPCByID(helper_mob_x_negative);
n->GMMove(door->GetX() - 15, door->GetY(), door->GetZ(), n->GetHeading());
}
// +X
door_position = door->GetPosition();
if (helper_mob_x_positive == 0) {
door_position.x = door_position.x + 15;
helper_mob_x_positive = NPC::SpawnNodeNPC("+X", "", door_position)->GetID();
}
else {
auto n = entity_list.GetNPCByID(helper_mob_x_positive);
n->GMMove(door->GetX() + 15, door->GetY(), door->GetZ(), n->GetHeading());
}
// -Y
door_position = door->GetPosition();
if (helper_mob_y_negative == 0) {
door_position.y = door_position.y - 15;
helper_mob_y_negative = NPC::SpawnNodeNPC("-Y", "", door_position)->GetID();
}
else {
auto n = entity_list.GetNPCByID(helper_mob_y_negative);
n->GMMove(door->GetX(), door->GetY() - 15, door->GetZ(), n->GetHeading());
}
// +Y
door_position = door->GetPosition();
if (helper_mob_y_positive == 0) {
door_position.y = door_position.y + 15;
helper_mob_y_positive = NPC::SpawnNodeNPC("+Y", "", door_position)->GetID();
}
else {
auto n = entity_list.GetNPCByID(helper_mob_y_positive);
n->GMMove(door->GetX(), door->GetY() + 15, door->GetZ(), n->GetHeading());
}
return;
} }
// spawn and move helpers c->Message(
uint16 helper_mob_x_negative = 0; Chat::White,
uint16 helper_mob_x_positive = 0; fmt::format(
uint16 helper_mob_y_positive = 0; "Door Selected ID [{}] Name [{}] OpenType [{}] Invertstate [{} | {}/{}] ",
uint16 helper_mob_y_negative = 0; c->GetDoorToolEntityId(),
door->GetDoorName(),
door->GetOpenType(),
door->GetInvertState(),
Saylink::Create("#door setinvertstate 0", true, "0"),
Saylink::Create("#door setinvertstate 1", true, "1")
).c_str()
);
for (auto &n: entity_list.GetNPCList()) {
NPC *npc = n.second; std::vector<std::string> move_options = {
std::string npc_name = npc->GetName(); move_x_action,
if (npc_name.find("-X") != std::string::npos) { move_y_action,
helper_mob_x_negative = npc->GetID(); move_z_action,
} move_h_action,
if (npc_name.find("-Y") != std::string::npos) { set_size_action
helper_mob_y_negative = npc->GetID(); };
} std::vector<std::string> move_x_options_positive;
if (npc_name.find("+X") != std::string::npos) { std::vector<std::string> move_x_options_negative;
helper_mob_x_positive = npc->GetID(); std::vector<std::string> move_y_options_positive;
} std::vector<std::string> move_y_options_negative;
if (npc_name.find("+Y") != std::string::npos) { std::vector<std::string> move_z_options_positive;
helper_mob_y_positive = npc->GetID(); std::vector<std::string> move_z_options_negative;
std::vector<std::string> move_h_options_positive;
std::vector<std::string> move_h_options_negative;
std::vector<std::string> set_size_options_positive;
std::vector<std::string> set_size_options_negative;
std::vector<std::string> xyz_values = {
".1", "1", "5", "10", "25", "50", "100"
};
// build positive options x/y/z
for (const auto &v: xyz_values) {
for (const auto &o: move_options) {
if (o == move_x_action) {
move_x_options_positive.emplace_back(
Saylink::Create(fmt::format("#door edit {} {}", o, v), true, v)
);
}
else if (o == move_y_action) {
move_y_options_positive.emplace_back(
Saylink::Create(fmt::format("#door edit {} {}", o, v), true, v)
);
}
else if (o == move_z_action) {
move_z_options_positive.emplace_back(
Saylink::Create(fmt::format("#door edit {} {}", o, v), true, v)
);
}
} }
} }
// -X // loop through vector in reverse order
glm::vec4 door_position = door->GetPosition(); // build negative options x/y/z
if (helper_mob_x_negative == 0) { for (auto v = xyz_values.rbegin(); v != xyz_values.rend(); ++v) {
door_position.x = door_position.x - 15; for (const auto &o: move_options) {
helper_mob_x_negative = NPC::SpawnNodeNPC("-X", "", door_position)->GetID(); if (o == move_x_action) {
} move_x_options_negative.emplace_back(
else { Saylink::Create(fmt::format("#door edit {} -{}", o, *v), true, *v)
auto n = entity_list.GetNPCByID(helper_mob_x_negative); );
n->GMMove(door->GetX() - 15, door->GetY(), door->GetZ(), n->GetHeading()); }
else if (o == move_y_action) {
move_y_options_negative.emplace_back(
Saylink::Create(fmt::format("#door edit {} -{}", o, *v), true, *v)
);
}
else if (o == move_z_action) {
move_z_options_negative.emplace_back(
Saylink::Create(fmt::format("#door edit {} -{}", o, *v), true, *v)
);
}
}
} }
// +X std::vector<std::string> heading_values = {
door_position = door->GetPosition(); "1", "5", "32.5", "63.75", "130",
if (helper_mob_x_positive == 0) { };
door_position.x = door_position.x + 15;
helper_mob_x_positive = NPC::SpawnNodeNPC("+X", "", door_position)->GetID(); // build positive options h
} for (const auto &v: heading_values) {
else { move_h_options_positive.emplace_back(
auto n = entity_list.GetNPCByID(helper_mob_x_positive); Saylink::Create(fmt::format("#door edit {} {}", move_h_action, v), true, v)
n->GMMove(door->GetX() + 15, door->GetY(), door->GetZ(), n->GetHeading()); );
} }
// -Y // loop through vector in reverse order
door_position = door->GetPosition(); // build negative options h
if (helper_mob_y_negative == 0) { for (auto v = heading_values.rbegin(); v != heading_values.rend(); ++v) {
door_position.y = door_position.y - 15; move_h_options_negative.emplace_back(
helper_mob_y_negative = NPC::SpawnNodeNPC("-Y", "", door_position)->GetID(); Saylink::Create(fmt::format("#door edit {} -{}", move_h_action, *v), true, *v)
} );
else {
auto n = entity_list.GetNPCByID(helper_mob_y_negative);
n->GMMove(door->GetX(), door->GetY() - 15, door->GetZ(), n->GetHeading());
} }
// +Y std::vector<std::string> size_values = {
door_position = door->GetPosition(); "1", "5", "10", "25", "50", "100", "1000"
if (helper_mob_y_positive == 0) { };
door_position.y = door_position.y + 15;
helper_mob_y_positive = NPC::SpawnNodeNPC("+Y", "", door_position)->GetID(); // build positive options size
for (const auto &v: size_values) {
set_size_options_positive.emplace_back(
Saylink::Create(fmt::format("#door edit {} {}", set_size_action, v), true, v)
);
} }
else {
auto n = entity_list.GetNPCByID(helper_mob_y_positive); // loop through vector in reverse order
n->GMMove(door->GetX(), door->GetY() + 15, door->GetZ(), n->GetHeading()); // build negative options size
for (auto v = size_values.rbegin(); v != size_values.rend(); ++v) {
set_size_options_negative.emplace_back(
Saylink::Create(fmt::format("#door edit {} -{}", set_size_action, *v), true, *v)
);
} }
c->Message( c->Message(
@ -412,17 +278,17 @@ void DoorManipulation::CommandHandler(Client *c, const Seperator *sep)
door->GetDoorName(), door->GetDoorName(),
Saylink::Create( Saylink::Create(
"#door save", "#door save",
false, true,
"Save" "Save"
), ),
Saylink::Create( Saylink::Create(
"#door changemodelqueue", "#door changemodelqueue",
false, true,
"Change Model" "Change Model"
), ),
Saylink::Create( Saylink::Create(
"#door setinclineinc", "#door setinclineinc",
false, true,
"Incline" "Incline"
) )
).c_str() ).c_str()
@ -505,8 +371,8 @@ void DoorManipulation::CommandHandler(Client *c, const Seperator *sep)
Chat::White, Chat::White,
fmt::format( fmt::format(
"#door model <modelname> | Changes door model for selected door or select from [{}] or [{}]", "#door model <modelname> | Changes door model for selected door or select from [{}] or [{}]",
Saylink::Create("#door showmodelszone", false, "local zone"), Saylink::Create("#door showmodelszone", true, "local zone"),
Saylink::Create("#door showmodelsglobal", false, "global") Saylink::Create("#door showmodelsglobal", true, "global")
).c_str() ).c_str()
); );
} }
@ -527,7 +393,7 @@ void DoorManipulation::CommandHandler(Client *c, const Seperator *sep)
} }
} }
// incline // invertstate
if (arg1 == "setinvertstate" && !arg2.empty() && Strings::IsNumber(arg2)) { if (arg1 == "setinvertstate" && !arg2.empty() && Strings::IsNumber(arg2)) {
Doors *door = entity_list.GetDoorsByID(c->GetDoorToolEntityId()); Doors *door = entity_list.GetDoorsByID(c->GetDoorToolEntityId());
if (door) { if (door) {
@ -551,6 +417,7 @@ void DoorManipulation::CommandHandler(Client *c, const Seperator *sep)
door->SetIncline(door->GetIncline() + std::atoi(arg2.c_str())); door->SetIncline(door->GetIncline() + std::atoi(arg2.c_str()));
} }
} }
if (arg1 == "setinclineinc") { if (arg1 == "setinclineinc") {
std::map<float, std::string> incline_values = { std::map<float, std::string> incline_values = {
{.01, "Upright"}, {.01, "Upright"},
@ -567,14 +434,14 @@ void DoorManipulation::CommandHandler(Client *c, const Seperator *sep)
std::vector<std::string> incline_normal_options; std::vector<std::string> incline_normal_options;
std::vector<std::string> incline_positive_options; std::vector<std::string> incline_positive_options;
std::vector<std::string> incline_negative_options; std::vector<std::string> incline_negative_options;
for (auto incline_value : incline_values) { for (auto incline_value: incline_values) {
incline_normal_options.emplace_back( incline_normal_options.emplace_back(
Saylink::Create( Saylink::Create(
fmt::format( fmt::format(
"#door setincline {}", "#door setincline {}",
incline_value.first incline_value.first
), ),
false, true,
incline_value.second incline_value.second
) )
); );
@ -588,7 +455,7 @@ void DoorManipulation::CommandHandler(Client *c, const Seperator *sep)
"#door setinclineinc {}", "#door setinclineinc {}",
incline_value incline_value
), ),
false, true,
itoa(std::abs(incline_value)) itoa(std::abs(incline_value))
) )
); );
@ -602,7 +469,7 @@ void DoorManipulation::CommandHandler(Client *c, const Seperator *sep)
"#door setinclineinc {}", "#door setinclineinc {}",
incline_value incline_value
), ),
false, true,
itoa(std::abs(incline_value)) itoa(std::abs(incline_value))
) )
); );
@ -680,6 +547,64 @@ void DoorManipulation::CommandHandler(Client *c, const Seperator *sep)
DisplayObjectResultToClient(c, game_objects); DisplayObjectResultToClient(c, game_objects);
} }
// help menu
if (arg1.empty()) {
DoorManipulation::CommandHeader(c);
c->Message(
Chat::White,
"#door create <modelname> | Creates a door from a model. (Example IT78 creates a campfire)"
);
c->Message(Chat::White, "#door setinvertstate [0|1] | Sets selected door invert state");
c->Message(Chat::White, "#door setincline <incline> | Sets selected door incline");
c->Message(Chat::White, "#door opentype <opentype> | Sets selected door opentype");
c->Message(
Chat::White,
fmt::format(
"#door model <modelname> | Changes door model for selected door or select from [{}] or [{}]",
Saylink::Create("#door showmodelszone", true, "local zone"),
Saylink::Create("#door showmodelsglobal", true, "global")
).c_str()
);
c->Message(
Chat::White,
"#door showmodelsfromfile <file.eqg|file.s3d> | Shows models from s3d or eqg file. Example tssequip.eqg or wallet01.eqg"
);
c->Message(
Chat::White,
fmt::format(
"{} | Shows available models in the current zone that you are in",
Saylink::Create("#door showmodelszone", true, "#door showmodelszone")
).c_str()
);
c->Message(
Chat::White,
fmt::format(
"{} | Shows available models globally by first listing all global model files",
Saylink::Create("#door showmodelsglobal", true, "#door showmodelsglobal")
).c_str()
);
c->Message(Chat::White, "#door save | Creates database entry for selected door");
c->Message(
Chat::White,
fmt::format(
"{} - Brings up editing interface for selected door",
Saylink::Create("#door edit", true, "#door edit")
).c_str()
);
c->Message(
Chat::White,
fmt::format(
"{} - lists doors in zone",
Saylink::Create("#list doors", true, "#list doors")
).c_str()
);
return;
}
} }
void DoorManipulation::CommandHeader(Client *c) void DoorManipulation::CommandHeader(Client *c)
@ -702,7 +627,7 @@ void DoorManipulation::DisplayObjectResultToClient(
"[{}] ", "[{}] ",
Saylink::Create( Saylink::Create(
fmt::format("#door model {}", g.object_name), fmt::format("#door model {}", g.object_name),
false, true,
g.object_name g.object_name
) )
) )
@ -750,7 +675,7 @@ void DoorManipulation::DisplayModelsFromFileResults(
"[{}] ", "[{}] ",
Saylink::Create( Saylink::Create(
fmt::format("#door showmodelsfromfile {}", g.file_from), fmt::format("#door showmodelsfromfile {}", g.file_from),
false, true,
g.file_from g.file_from
) )
) )

View File

@ -28,7 +28,7 @@
*/ */
void NpcScaleManager::ScaleNPC(NPC *npc) void NpcScaleManager::ScaleNPC(NPC *npc)
{ {
if (npc->IsSkipAutoScale()) { if (npc->IsSkipAutoScale() || npc->GetNPCTypeID() == 0) {
return; return;
} }