Merge pull request #556 from KinglyKrab/master

#summon will now work when you are in an instance.
This commit is contained in:
Akkadius 2016-09-12 01:42:53 -05:00 committed by GitHub
commit a9070b1327
4 changed files with 27 additions and 1 deletions

View File

@ -2147,4 +2147,16 @@ int Database::GetIPExemption(std::string account_ip) {
}
return RuleI(World, MaxClientsPerIP);
}
int Database::GetInstanceID(uint32 char_id, uint32 zone_id) {
std::string query = StringFormat("SELECT instance_list.id FROM instance_list INNER JOIN instance_list_player ON instance_list.id = instance_list_player.id WHERE instance_list.zone = '%i' AND instance_list_player.charid = '%i'", zone_id, char_id);
auto results = QueryDatabase(query);
if (results.Success() && results.RowCount() > 0) {
auto row = results.begin();
return atoi(row[0]);;
}
return 0;
}

View File

@ -189,6 +189,8 @@ public:
int GetIPExemption(std::string account_ip);
int GetInstanceID(uint32 char_id, uint32 zone_id);
/* Groups */

View File

@ -1007,6 +1007,7 @@ void command_summon(Client *c, const Seperator *sep)
szp->x_pos = c->GetX(); // May need to add a factor of 8 in here..
szp->y_pos = c->GetY();
szp->z_pos = c->GetZ();
szp->instance_id = zone->GetInstanceID();
worldserver.SendPacket(pack);
safe_delete(pack);
}

View File

@ -543,7 +543,18 @@ void WorldServer::Process() {
else {
SendEmoteMessage(szp->adminname, 0, 0, "Summoning %s to %s %1.1f, %1.1f, %1.1f", szp->name, szp->zone, szp->x_pos, szp->y_pos, szp->z_pos);
}
client->MovePC(database.GetZoneID(szp->zone), szp->instance_id, szp->x_pos, szp->y_pos, szp->z_pos, client->GetHeading(), szp->ignorerestrictions, GMSummon);
if (!szp->instance_id) {
client->MovePC(database.GetZoneID(szp->zone), szp->instance_id, szp->x_pos, szp->y_pos, szp->z_pos, client->GetHeading(), szp->ignorerestrictions, GMSummon);
} else {
if (database.GetInstanceID(client->CharacterID(), database.GetZoneID(szp->zone)) == 0) {
client->AssignToInstance(szp->instance_id);
client->MovePC(database.GetZoneID(szp->zone), szp->instance_id, szp->x_pos, szp->y_pos, szp->z_pos, client->GetHeading(), szp->ignorerestrictions, GMSummon);
} else {
client->RemoveFromInstance(database.GetInstanceID(client->CharacterID(), database.GetZoneID(szp->zone)));
client->AssignToInstance(szp->instance_id);
client->MovePC(database.GetZoneID(szp->zone), szp->instance_id, szp->x_pos, szp->y_pos, szp->z_pos, client->GetHeading(), szp->ignorerestrictions, GMSummon);
}
}
}
break;
}