[Rule] Allow GMs to silently summon (#3910)

* [Rule] Allow GMs to silently summon

Disable to silently summon players with #summon.

Converted SummonPC to a MessageString

* Implementing an automatic detection of gm hidden mode and silent summoning.
This commit is contained in:
Fryguy 2024-01-08 23:28:50 -05:00 committed by GitHub
parent e6dc980315
commit 98928aee74
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 18 additions and 9 deletions

View File

@ -11974,6 +11974,8 @@ std::string GetZoneModeString(ZoneMode mode)
return "ZoneToSafeCoords"; return "ZoneToSafeCoords";
case GMSummon: case GMSummon:
return "GMSummon"; return "GMSummon";
case GMHiddenSummon:
return "GMHiddenSummon";
case ZoneToBindPoint: case ZoneToBindPoint:
return "ZoneToBindPoint"; return "ZoneToBindPoint";
case ZoneSolicited: case ZoneSolicited:

View File

@ -114,6 +114,7 @@ enum { //scribing argument to MemorizeSpell
typedef enum { typedef enum {
ZoneToSafeCoords, // Always send ZonePlayerToBind_Struct to client: Succor/Evac ZoneToSafeCoords, // Always send ZonePlayerToBind_Struct to client: Succor/Evac
GMSummon, // Always send ZonePlayerToBind_Struct to client: Only a GM Summon GMSummon, // Always send ZonePlayerToBind_Struct to client: Only a GM Summon
GMHiddenSummon, // Always send ZonePlayerToBind_Struct to client silently: Only a GM Summon
ZoneToBindPoint, // Always send ZonePlayerToBind_Struct to client: Death Only ZoneToBindPoint, // Always send ZonePlayerToBind_Struct to client: Death Only
ZoneSolicited, // Always send ZonePlayerToBind_Struct to client: Portal, Translocate, Evac spells that have a x y z coord in the spell data ZoneSolicited, // Always send ZonePlayerToBind_Struct to client: Portal, Translocate, Evac spells that have a x y z coord in the spell data
ZoneUnsolicited, ZoneUnsolicited,

View File

@ -91,7 +91,7 @@ void command_summon(Client *c, const Seperator *sep)
c->GetZ(), c->GetZ(),
c->GetHeading(), c->GetHeading(),
2, 2,
GMSummon c->GetHideMe() ? GMHiddenSummon : GMSummon
); );
return; return;
} }

View File

@ -88,6 +88,7 @@ void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) {
target_zone_id = zone->GetZoneID(); target_zone_id = zone->GetZoneID();
break; break;
case GMSummon: case GMSummon:
case GMHiddenSummon:
case ZoneSolicited: //we told the client to zone somewhere, so we know where they are going. case ZoneSolicited: //we told the client to zone somewhere, so we know where they are going.
target_zone_id = zonesummon_id; target_zone_id = zonesummon_id;
break; break;
@ -276,6 +277,7 @@ void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) {
target_heading = safe_heading; target_heading = safe_heading;
break; break;
case GMSummon: case GMSummon:
case GMHiddenSummon:
target_x = m_ZoneSummonLocation.x; target_x = m_ZoneSummonLocation.x;
target_y = m_ZoneSummonLocation.y; target_y = m_ZoneSummonLocation.y;
target_z = m_ZoneSummonLocation.z; target_z = m_ZoneSummonLocation.z;
@ -697,6 +699,9 @@ void Client::ProcessMovePC(uint32 zoneID, uint32 instance_id, float x, float y,
Message(Chat::Yellow, "You have been summoned by a GM!"); Message(Chat::Yellow, "You have been summoned by a GM!");
ZonePC(zoneID, instance_id, x, y, z, heading, ignorerestrictions, zm); ZonePC(zoneID, instance_id, x, y, z, heading, ignorerestrictions, zm);
break; break;
case GMHiddenSummon:
ZonePC(zoneID, instance_id, x, y, z, heading, ignorerestrictions, zm);
break;
case ZoneToBindPoint: case ZoneToBindPoint:
ZonePC(zoneID, instance_id, x, y, z, heading, ignorerestrictions, zm); ZonePC(zoneID, instance_id, x, y, z, heading, ignorerestrictions, zm);
break; break;
@ -704,7 +709,7 @@ void Client::ProcessMovePC(uint32 zoneID, uint32 instance_id, float x, float y,
ZonePC(zoneID, instance_id, x, y, z, heading, ignorerestrictions, zm); ZonePC(zoneID, instance_id, x, y, z, heading, ignorerestrictions, zm);
break; break;
case SummonPC: case SummonPC:
Message(Chat::Yellow, "You have been summoned!"); MessageString(Chat::Yellow, PLAYER_SUMMONED);
ZonePC(zoneID, instance_id, x, y, z, heading, ignorerestrictions, zm); ZonePC(zoneID, instance_id, x, y, z, heading, ignorerestrictions, zm);
break; break;
case Rewind: case Rewind:
@ -761,6 +766,7 @@ void Client::ZonePC(uint32 zoneID, uint32 instance_id, float x, float y, float z
heading = zone_safe_point.w; heading = zone_safe_point.w;
break; break;
case GMSummon: case GMSummon:
case GMHiddenSummon:
m_Position = glm::vec4(x, y, z, heading); m_Position = glm::vec4(x, y, z, heading);
m_ZoneSummonLocation = m_Position; m_ZoneSummonLocation = m_Position;
zonesummon_id = zoneID; zonesummon_id = zoneID;