/// <summary> /// Tries to bind this Character to the given NPC. /// </summary> /// <returns>whether the given NPC is an actual InnKeeper and this char could be bound to that Inn.</returns> public bool TryBindTo(NPC innKeeper) { OnInteract(innKeeper); if (innKeeper.BindPoint != NamedWorldZoneLocation.Zero && innKeeper.CanInteractWith(this)) { BindTo(innKeeper); return true; } return false; }
/// <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.CanInteractWith(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; }
private static bool ArmorerCheatChecks(Character curChar, NPC armorer) { if (curChar == null) return false; if (armorer == null) return false; if (!armorer.CanInteractWith(curChar)) return false; // Remove Auras not compatible with NPC interaction curChar.Auras.RemoveByFlag(AuraInterruptFlags.OnStartAttack); return true; }