/// <summary> /// Called when the living is about to get an item from someone /// else /// </summary> /// <param name="source">Source from where to get the item</param> /// <param name="item">Item to get</param> /// <returns>true if the item was successfully received</returns> public override bool ReceiveItem(GameLiving source, InventoryItem item) { if (source == null || item == null) { return(false); } if (source is GamePlayer) { GamePlayer player = (GamePlayer)source; if (item.Name.ToLower().StartsWith(LanguageMgr.GetTranslation(ServerProperties.Properties.DB_LANGUAGE, "GameStableMaster.ReceiveItem.TicketTo")) && item.Item_Type == 40) { foreach (GameNPC npc in GetNPCsInRadius(1500)) { if (npc is GameTaxiBoat) { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "GameBoatStableMaster.ReceiveItem.Departed", Name), eChatType.CT_System, eChatLoc.CL_PopupWindow); return(false); } } string destination = item.Name.Substring(LanguageMgr.GetTranslation(ServerProperties.Properties.DB_LANGUAGE, "GameStableMaster.ReceiveItem.TicketTo").Length); PathPoint path = MovementMgr.LoadPath(item.Id_nb); // PathPoint path = MovementMgr.Instance.LoadPath(this.Name + "=>" + destination); if ((path != null) && (Math.Abs(path.X - X) < 500) && (Math.Abs(path.Y - Y) < 500)) { player.Inventory.RemoveCountFromStack(item, 1); InventoryLogging.LogInventoryAction(player, this, eInventoryActionType.Merchant, item.Template); GameTaxiBoat boat = new GameTaxiBoat(); boat.Name = "Boat to " + destination; boat.Realm = source.Realm; boat.X = path.X; boat.Y = path.Y; boat.Z = path.Z; boat.CurrentRegion = CurrentRegion; boat.Heading = path.GetHeading(path.Next); boat.AddToWorld(); boat.CurrentWayPoint = path; GameEventMgr.AddHandler(boat, GameNPCEvent.PathMoveEnds, new DOLEventHandler(OnHorseAtPathEnd)); // new MountHorseAction(player, boat).Start(400); new HorseRideAction(boat).Start(30 * 1000); player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "GameBoatStableMaster.ReceiveItem.SummonedBoat", Name, destination), eChatType.CT_System, eChatLoc.CL_SystemWindow); return(true); } else { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "GameBoatStableMaster.ReceiveItem.UnknownWay", Name, destination), eChatType.CT_System, eChatLoc.CL_SystemWindow); } } } return(base.ReceiveItem(source, item)); }
/// <summary> /// Called when the living is about to get an item from someone /// else /// </summary> /// <param name="source">Source from where to get the item</param> /// <param name="item">Item to get</param> /// <returns>true if the item was successfully received</returns> public override bool ReceiveItem(GameLiving source, InventoryItem item) { if (source == null || item == null) { return(false); } if (source is GamePlayer) { GamePlayer player = (GamePlayer)source; if (item.Item_Type == 40 && isItemInMerchantList(item)) { PathPoint path = MovementMgr.LoadPath(item.Id_nb); if ((path != null) && ((Math.Abs(path.X - this.X)) < 500) && ((Math.Abs(path.Y - this.Y)) < 500)) { player.Inventory.RemoveCountFromStack(item, 1); InventoryLogging.LogInventoryAction(player, this, eInventoryActionType.Merchant, item.Template); GameTaxi mount; // item.Color of ticket is used for npctemplate. defaults to standard horse if item.color is 0 if (item.Color > 0) { mount = new GameTaxi(NpcTemplateMgr.GetTemplate(item.Color)); } else { mount = new GameTaxi(); foreach (GameNPC npc in GetNPCsInRadius(400)) { if (npc.Name == LanguageMgr.GetTranslation(ServerProperties.Properties.DB_LANGUAGE, "GameStableMaster.ReceiveItem.HorseName")) { mount.Model = npc.Model; mount.Name = npc.Name; break; } } } switch ((eRace)player.Race) { case eRace.Lurikeen: mount.Size = 31; break; case eRace.Kobold: mount.Size = 38; break; case eRace.Dwarf: mount.Size = 42; break; case eRace.Inconnu: mount.Size = 45; break; case eRace.Frostalf: case eRace.Shar: mount.Size = 48; break; case eRace.Briton: case eRace.Saracen: case eRace.Celt: mount.Size = 50; break; case eRace.Valkyn: mount.Size = 52; break; case eRace.Avalonian: case eRace.Highlander: case eRace.Norseman: case eRace.Elf: case eRace.Sylvan: mount.Size = 55; break; case eRace.Firbolg: mount.Size = 62; break; case eRace.HalfOgre: case eRace.AlbionMinotaur: case eRace.MidgardMinotaur: case eRace.HiberniaMinotaur: mount.Size = 65; break; case eRace.Troll: mount.Size = 67; break; default: mount.Size = 55; break; } mount.Realm = source.Realm; mount.X = path.X; mount.Y = path.Y; mount.Z = path.Z; mount.CurrentRegion = CurrentRegion; mount.Heading = path.GetHeading(path.Next); mount.AddToWorld(); mount.CurrentWayPoint = path; GameEventMgr.AddHandler(mount, GameNPCEvent.PathMoveEnds, new DOLEventHandler(OnHorseAtPathEnd)); new MountHorseAction(player, mount).Start(400); new HorseRideAction(mount).Start(4000); return(true); } } else { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "GameStableMaster.Receive.UnknownWay"), eChatType.CT_System, eChatLoc.CL_SystemWindow); } } return(false); }