/// <summary> /// Sends the given Character on the given Path. /// </summary> /// <param name="chr">The Character to fly around.</param> /// <param name="destinations">An array of destination TaxiNodes.</param> /// <returns>Whether the client was sent on its way.</returns> internal static bool TryFly(Character chr, NPC vendor, PathNode[] destinations) { var client = chr.Client; if (vendor == null && chr.Role.IsStaff) { var dest = destinations.LastOrDefault(); if (dest != null) { chr.TeleportTo(dest); return true; } return false; } if (vendor == null || !vendor.CheckVendorInteraction(chr)) { TaxiHandler.SendActivateTaxiReply(client, TaxiActivateResponse.NotAvailable); } else if (PreFlightCheatChecks(client, destinations) && PreFlightValidPathCheck(client, destinations) && (client.ActiveCharacter.GodMode || PreFlightMoneyCheck(client))) { // All good, send an "All Good" reply to the client. TaxiHandler.SendActivateTaxiReply(client, TaxiActivateResponse.Ok); // PvP flag is auto-cleared when starting a taxi-flight chr.UpdatePvPState(false, true); FlyUnit(chr, true); return true; } return false; }
internal void EnterZone(Character chr, Zone oldZone) { UpdateChannels(chr, oldZone); WorldStateHandler.SendInitWorldStates(chr, WorldStates, this); if (oldZone != null) { oldZone.LeaveZone(chr); } // update PvPState var isBg = Map.IsBattleground; if (RealmServerConfiguration.ServerType.HasAnyFlag(RealmServerType.PVP | RealmServerType.RPPVP) || isBg) { if (isBg || Template.IsHostileTo(chr)) { chr.UpdatePvPState(true, true); chr.PlayerFlags |= PlayerFlags.PVP; chr.PlayerFlags &= ~(PlayerFlags.InPvPSanctuary | PlayerFlags.FreeForAllPVP); } else if (Template.IsSanctuary) { chr.PvPState = PvPState.InPvPSanctuary; chr.PlayerFlags |= PlayerFlags.InPvPSanctuary; chr.PlayerFlags &= ~(PlayerFlags.PVP | PlayerFlags.FreeForAllPVP); } else { chr.UpdatePvPState(false); chr.PlayerFlags &= ~(PlayerFlags.PVP | PlayerFlags.InPvPSanctuary | PlayerFlags.FreeForAllPVP); } if (Template.IsArena) { chr.PvPState = PvPState.FFAPVP; chr.PlayerFlags |= PlayerFlags.FreeForAllPVP; chr.PlayerFlags &= ~(PlayerFlags.InPvPSanctuary); } } Template.OnPlayerEntered(chr, oldZone); }