public override bool OnBeginSpellCast(Mobile from, ISpell s) { if (from.IsPlayer()) from.SendLocalizedMessage(502629); // You cannot cast spells here. return (from.IsStaff()); }
public override bool OnSkillUse(Mobile from, int Skill) { if (from.IsPlayer()) from.SendMessage("You may not use skills in jail."); return (from.IsStaff()); }
public override bool OnMoveInto(Mobile m, Direction d, Point3D newLocation, Point3D oldLocation) { if (!base.OnMoveInto(m, d, newLocation, oldLocation)) return false; if (m.IsStaff()) return true; if (m is BaseCreature) { BaseCreature bc = m as BaseCreature; if (!bc.Controlled && !bc.Summoned) return true; } if (this.m_Quest == null) return true; PlayerMobile player = m as PlayerMobile; if (player != null && player.Quest != null && player.Quest.GetType() == this.m_Quest && (this.m_MinObjective == null || player.Quest.FindObjective(this.m_MinObjective) != null) && (this.m_MaxObjective == null || player.Quest.FindObjective(this.m_MaxObjective) == null)) { return true; } else { if (this.m_Message != 0) m.SendLocalizedMessage(this.m_Message); return false; } }
public override bool DropToMobile(Mobile from, Mobile target, Point3D p) { bool ret = base.DropToMobile(from, target, p); if (ret && !this.Accepted && this.Parent != from.Backpack) { if (from.IsStaff()) { return true; } else if (!(from is PlayerMobile) || this.CanDrop((PlayerMobile)from)) { return true; } else { from.SendLocalizedMessage(1049344); // You decide against trading the item. You still need it for your quest. return false; } } else { return ret; } }
public override bool DropToItem(Mobile from, Item target, Point3D p) { bool ret = base.DropToItem(from, target, p); if (ret && !this.Accepted && this.Parent != from.Backpack) { if (from.IsStaff()) { return true; } else if (!(from is PlayerMobile) || this.CanDrop((PlayerMobile)from)) { return true; } else { from.SendLocalizedMessage(1049343); // You can only drop quest items into the top-most level of your backpack while you still need them for your quest. return false; } } else { return ret; } }
public override void OnEnter(Mobile m) { if (m == null || m is WandererOfTheVoid) return; if (m.IsStaff()) return; if (this.Controller.Successful != null) { if (m is PlayerMobile) { if (m == this.Controller.Successful) { return; } } else if (m is BaseCreature) { BaseCreature bc = (BaseCreature)m; if ((bc.Controlled && bc.ControlMaster == this.Controller.Successful) || bc.Summoned) { return; } } } Timer kick = new LeverPuzzleController.LampRoomKickTimer(m); kick.Start(); }
public override bool OnMoveOver(Mobile m) { if (m.IsStaff()) return true; bool sendMessage = m.Player; if (m is BaseCreature) m = ((BaseCreature)m).ControlMaster; PlayerMobile pm = m as PlayerMobile; if (pm != null) { QuestSystem qs = pm.Quest; if (qs is DarkTidesQuest) { QuestObjective obj = qs.FindObjective(typeof(SpeakCavePasswordObjective)); if (obj != null && obj.Completed) { if (sendMessage) m.SendLocalizedMessage(1060648); // With Horus' permission, you are able to pass through the barrier. return true; } } } if (sendMessage) m.SendLocalizedMessage(1060649, "", 0x66D); // Without the permission of the guardian Horus, the magic of the barrier prevents your passage. return false; }
public override bool AllowHarmful(Mobile from, Mobile target) { if (from.IsPlayer()) from.SendMessage("You may not do that in jail."); return (from.IsStaff()); }
public override bool OnSkillUse(Mobile m, int Skill) /* just in case */ { if ((this.Controller.Successful == null) || (m.IsStaff() && m != this.Controller.Successful)) { return false; } return true; }
public override void OnSnoop(Mobile from) { if (from.IsStaff()) { from.CloseGump(typeof(XmlQuestStatusGump)); from.SendGump(new XmlQuestStatusGump(this, this.TitleString)); } }
public override void OnTrigger(Mobile from) { if (from.IsStaff()) return; Effects.SendLocationEffect(this.Location, this.Map, 0x1D99, 48, 2, this.GetEffectHue(), 0); if (from.Alive && this.CheckRange(from.Location, 0)) Spells.SpellHelper.Damage(TimeSpan.FromTicks(1), from, from, Utility.Dice(10, 7, 0)); }
public override void OnTrigger(Mobile from) { if (!from.Alive || this.ItemID != 0x1125 || from.IsStaff()) return; this.ItemID = 0x1126; Effects.PlaySound(this.Location, this.Map, 0x306); Spells.SpellHelper.Damage(TimeSpan.FromSeconds(0.5), from, from, Utility.Dice(2, 4, 0)); Timer.DelayCall(TimeSpan.FromSeconds(2.0), new TimerCallback(OnMushroomReset)); }
public override bool OnMoveOver(Mobile m) { if (m.IsStaff()) return true; var pm = m as PlayerMobile; if (pm != null && pm.Profession == 4) { m.SendLocalizedMessage(1060188, "", 0x24); // The wicked may not enter! return false; } return base.OnMoveOver(m); }
public override bool OnMoveOver(Mobile m) { if (m.IsStaff()) return true; // If the mobile is to the north of the barrier, allow him to pass if (this.Y >= m.Y) return true; if (m is BaseCreature) { Mobile master = ((BaseCreature)m).GetMaster(); // Allow creatures to cross from the south to the north only if their master is near to the north if (master != null && this.Y >= master.Y && master.InRange(this, 4)) return true; else return false; } PlayerMobile pm = m as PlayerMobile; if (pm != null) { EminosUndertakingQuest qs = pm.Quest as EminosUndertakingQuest; if (qs != null) { SneakPastGuardiansObjective obj = qs.FindObjective(typeof(SneakPastGuardiansObjective)) as SneakPastGuardiansObjective; if (obj != null) { if (m.Hidden) return true; // Hidden ninjas can pass if (!obj.TaughtHowToUseSkills) { obj.TaughtHowToUseSkills = true; qs.AddConversation(new NeedToHideConversation()); } } } } return false; }
public override bool OnMoveInto(Mobile m, Direction d, Point3D newLocation, Point3D oldLocation) { if (!base.OnMoveInto(m, d, newLocation, oldLocation)) return false; if (m.IsStaff() || this.Contains(oldLocation)) return true; if (m is PlayerMobile) { PlayerMobile pm = (PlayerMobile)m; if (pm.DuelContext != null) { m.SendMessage("You may not enter this area while participating in a duel or a tournament."); return false; } } return (Faction.Find(m, true, true) != null); }
public override bool OnMoveInto(Mobile m, Direction d, Point3D newLocation, Point3D oldLocation) { if (!base.OnMoveInto(m, d, newLocation, oldLocation)) return false; if (m.IsStaff()) return true; if (this.m_Quest == null) return true; PlayerMobile player = m as PlayerMobile; if (player != null && player.Quest != null && player.Quest.GetType() == this.m_Quest) { if (!player.HasGump(typeof(QuestCancelGump))) player.Quest.BeginCancelQuest(); return false; } return true; }
public override void OnMovement(Mobile m, Point3D oldLocation) { base.OnMovement(m, oldLocation); if (m.Location == oldLocation || !m.Player || !m.Alive || m.IsStaff()) return; if (this.CheckRange(m.Location, oldLocation, 1)) { this.CheckTimer(); Spells.SpellHelper.Damage(TimeSpan.FromTicks(1), m, m, Utility.RandomMinMax(1, 10)); m.PlaySound(m.Female ? 0x327 : 0x437); if (m.Body.IsHuman) m.Animate(20, 1, 1, true, false, 0); } }
public bool IsBanned(Mobile m) { if (m == null || m == this.Owner || m.IsStaff() || this.m_Bans == null) return false; Account theirAccount = m.Account as Account; for (int i = 0; i < this.m_Bans.Count; ++i) { Mobile c = (Mobile)this.m_Bans[i]; if (c == m) return true; Account bannedAccount = c.Account as Account; if (bannedAccount != null && bannedAccount == theirAccount) return true; } return false; }
private static void EventSink_Login(LoginEventArgs args) { int userCount = NetState.Instances.Count; int itemCount = World.Items.Count; int mobileCount = World.Mobiles.Count; Mobile m = args.Mobile; m.SendMessage("Welcome, {0}! There {1} currently {2} user{3} online, with {4} item{5} and {6} mobile{7} in the world.", args.Mobile.Name, userCount == 1 ? "is" : "are", userCount, userCount == 1 ? "" : "s", itemCount, itemCount == 1 ? "" : "s", mobileCount, mobileCount == 1 ? "" : "s"); #region Enhance Client List <MondainQuester> listQuester = new List <MondainQuester>(); List <BaseHealer> listHealers = new List <BaseHealer>(); foreach (Mobile m_mobile in World.Mobiles.Values) { MondainQuester mQuester = m_mobile as MondainQuester; if (mQuester != null) { listQuester.Add(mQuester); } BaseHealer mHealer = m_mobile as BaseHealer; if (mHealer != null) { listHealers.Add(mHealer); } } foreach (MondainQuester quester in listQuester) { if (args.Mobile.NetState != null) { string name = string.Empty; if (quester.Name != null) { name += quester.Name; } if (quester.Title != null) { name += " " + quester.Title; } args.Mobile.NetState.Send(new DisplayWaypoint(quester.Serial, quester.X, quester.Y, quester.Z, quester.Map.MapID, WaypointType.QuestGiver, name)); } } /* I think on Uo only see healer waypoints if you die. so this is commented out until tested more on Uo TC. * foreach (BaseHealer healer in listHealers) * { * string name = string.Empty; * if (healer.Name != null) * name += healer.Name; * if (healer.Title != null) * name += " " + healer.Title; * args.Mobile.NetState.Send(new DisplayWaypoint(healer.Serial, healer.X, healer.Y, healer.Z, healer.Map.MapID, WaypointType.Resurrection, name)); * } */ #endregion if (m.IsStaff()) { Server.Engines.Help.PageQueue.Pages_OnCalled(m); } }
public void Activate(Mobile from, int state, ArrayList links) { if (this.Disabled) { return; } string status_str = null; // assign the switch state this.m_SwitchState = state; if (this.m_SwitchState < 0) { this.m_SwitchState = 0; } if (this.m_SwitchState > 1) { this.m_SwitchState = 1; } // update the graphic this.SetSwitchStatic(); //if (from != null) //{ // from.PlaySound(m_SwitchSound); //} try { Effects.PlaySound(this.Location, this.Map, this.m_SwitchSound); } catch { } // if a target object has been specified then apply the property modification if (this.m_SwitchState == 0 && this.m_TargetItem0 != null && !this.m_TargetItem0.Deleted && this.m_TargetProperty0 != null && this.m_TargetProperty0.Length > 0) { BaseXmlSpawner.ApplyObjectStringProperties(null, this.m_TargetProperty0, this.m_TargetItem0, from, this, out status_str); } if (this.m_SwitchState == 1 && this.m_TargetItem1 != null && !this.m_TargetItem1.Deleted && this.m_TargetProperty1 != null && this.m_TargetProperty1.Length > 0) { BaseXmlSpawner.ApplyObjectStringProperties(null, this.m_TargetProperty1, this.m_TargetItem1, from, this, out status_str); } // if the switch is linked, then activate the link as well if (this.Link != null && this.Link is ILinkable) { if (links == null) { links = new ArrayList(); } // activate other linked objects if they have not already been activated if (!links.Contains(this)) { links.Add(this); ((ILinkable)this.Link).Activate(from, state, links); } } // report any problems to staff if (status_str != null && from != null && from.IsStaff()) { from.SendMessage("{0}", status_str); } }
public ClientGump(Mobile from, NetState state, string initialText) : base(30, 20) { if (state == null) { return; } m_State = state; AddPage(0); AddBackground(0, 0, 400, 274, 5054); AddImageTiled(10, 10, 380, 19, 0xA40); AddAlphaRegion(10, 10, 380, 19); AddImageTiled(10, 32, 380, 232, 0xA40); AddAlphaRegion(10, 32, 380, 232); AddHtml(10, 10, 380, 20, Color(Center("User Information"), LabelColor32), false, false); int line = 0; AddHtml(14, 36 + (line * 20), 200, 20, Color("Address:", LabelColor32), false, false); AddHtml(70, 36 + (line++ *20), 200, 20, Color(state.ToString(), LabelColor32), false, false); AddHtml(14, 36 + (line * 20), 200, 20, Color("Client:", LabelColor32), false, false); AddHtml(70, 36 + (line++ *20), 200, 20, Color(state.Version == null ? "(null)" : state.Version.ToString(), LabelColor32), false, false); AddHtml(14, 36 + (line * 20), 200, 20, Color("Version:", LabelColor32), false, false); ExpansionInfo info = state.ExpansionInfo; string expansionName = info.Name; AddHtml(70, 36 + (line++ *20), 200, 20, Color(expansionName, LabelColor32), false, false); Account a = state.Account as Account; Mobile m = state.Mobile; if (from.AccessLevel >= AccessLevel.GameMaster && a != null) { AddHtml(14, 36 + (line * 20), 200, 20, Color("Account:", LabelColor32), false, false); AddHtml(70, 36 + (line++ *20), 200, 20, Color(a.Username, LabelColor32), false, false); } if (m != null) { AddHtml(14, 36 + (line * 20), 200, 20, Color("Mobile:", LabelColor32), false, false); AddHtml(70, 36 + (line++ *20), 200, 20, Color(string.Format("{0} (0x{1:X})", m.Name, m.Serial.Value), LabelColor32), false, false); AddHtml(14, 36 + (line * 20), 200, 20, Color("Location:", LabelColor32), false, false); AddHtml(70, 36 + (line++ *20), 200, 20, Color(string.Format("{0} [{1}]", m.Location, m.Map), LabelColor32), false, false); AddButton(13, 157, 0xFAB, 0xFAD, 1, GumpButtonType.Reply, 0); AddHtml(48, 158, 200, 20, Color("Send Message", LabelColor32), false, false); AddImageTiled(12, 182, 376, 80, 0xA40); AddImageTiled(13, 183, 374, 78, 0xBBC); AddTextEntry(15, 183, 372, 78, 0x480, 0, ""); AddImageTiled(245, 35, 142, 144, 5058); AddImageTiled(246, 36, 140, 142, 0xA40); AddAlphaRegion(246, 36, 140, 142); line = 0; if (BaseCommand.IsAccessible(from, m)) { AddButton(246, 36 + (line * 20), 0xFA5, 0xFA7, 4, GumpButtonType.Reply, 0); AddHtml(280, 38 + (line++ *20), 100, 20, Color("Properties", LabelColor32), false, false); } if (from != m) { AddButton(246, 36 + (line * 20), 0xFA5, 0xFA7, 5, GumpButtonType.Reply, 0); AddHtml(280, 38 + (line++ *20), 100, 20, Color("Go to them", LabelColor32), false, false); AddButton(246, 36 + (line * 20), 0xFA5, 0xFA7, 6, GumpButtonType.Reply, 0); AddHtml(280, 38 + (line++ *20), 100, 20, Color("Bring them here", LabelColor32), false, false); } AddButton(246, 36 + (line * 20), 0xFA5, 0xFA7, 7, GumpButtonType.Reply, 0); AddHtml(280, 38 + (line++ *20), 100, 20, Color("Move to target", LabelColor32), false, false); if (from.AccessLevel >= AccessLevel.GameMaster && from.AccessLevel > m.AccessLevel) { AddButton(246, 36 + (line * 20), 0xFA5, 0xFA7, 8, GumpButtonType.Reply, 0); AddHtml(280, 38 + (line++ *20), 100, 20, Color("Disconnect", LabelColor32), false, false); if (m.Alive) { AddButton(246, 36 + (line * 20), 0xFA5, 0xFA7, 9, GumpButtonType.Reply, 0); AddHtml(280, 38 + (line++ *20), 100, 20, Color("Kill", LabelColor32), false, false); } else { AddButton(246, 36 + (line * 20), 0xFA5, 0xFA7, 10, GumpButtonType.Reply, 0); AddHtml(280, 38 + (line++ *20), 100, 20, Color("Resurrect", LabelColor32), false, false); } } if (from.IsStaff() && from.AccessLevel > m.AccessLevel) { AddButton(246, 36 + (line * 20), 0xFA5, 0xFA7, 11, GumpButtonType.Reply, 0); AddHtml(280, 38 + (line++ *20), 100, 20, Color("Skills browser", LabelColor32), false, false); } } }
public static void DoPassiveDetect(Mobile src) { if (src == null || src.Map == null || src.Location == Point3D.Zero || src.IsStaff()) { return; } double ss = src.Skills[SkillName.DetectHidden].Value; if (ss <= 0) { return; } IPooledEnumerable eable = src.Map.GetMobilesInRange(src.Location, 4); if (eable == null) { return; } foreach (Mobile m in eable) { if (m == null || m is ShadowKnight) { continue; } int noto = Notoriety.Compute(src, m); if (m != src && noto != Notoriety.Innocent && noto != Notoriety.Ally && noto != Notoriety.Invulnerable) { double ts = (m.Skills[SkillName.Hiding].Value + m.Skills[SkillName.Stealth].Value) / 2; if (src.Race == Race.Elf) { ss += 20; } if (src.AccessLevel >= m.AccessLevel && Utility.Random(1000) < (ss - ts) + 1) { m.RevealingAction(); m.SendLocalizedMessage(500814); // You have been revealed! } } } eable.Free(); eable = src.Map.GetItemsInRange(src.Location, 8); foreach (var item in eable) { if (item is IRevealableItem && ((IRevealableItem)item).CheckPassiveDetect(src)) { src.SendLocalizedMessage(1153493); // Your keen senses detect something hidden in the area... } } eable.Free(); }
public override void OnTrigger(Mobile from) { if (!from.Alive || from.IsStaff()) return; Effects.SendLocationEffect(this.Location, this.Map, GetBaseID(this.Type) + 1, 18, 3, this.GetEffectHue(), 0); Effects.PlaySound(this.Location, this.Map, 0x22C); foreach (Mobile mob in this.GetMobilesInRange(0)) { if (mob.Alive && !mob.IsDeadBondedPet) Spells.SpellHelper.Damage(TimeSpan.FromTicks(1), mob, mob, Utility.RandomMinMax(1, 6) * 6); } Timer.DelayCall(TimeSpan.FromSeconds(1.0), new TimerCallback(OnSpikeExtended)); from.LocalOverheadMessage(MessageType.Regular, 0x22, 500852); // You stepped onto a spike trap! }
public override bool OnCombatantChange(Mobile from, IDamageable Old, IDamageable New) { return(from.IsStaff()); }
public override void OnResponse(NetState state, RelayInfo info) { if (info.ButtonID == 0) // Cancel { return; } if (m_Mobile.Deleted || m_Moongate.Deleted || m_Mobile.Map == null) { return; } var switches = info.Switches; if (switches.Length == 0) { return; } var switchID = switches[0]; var listIndex = switchID / 100; var listEntry = switchID % 100; if (listIndex < 0 || listIndex >= m_Lists.Length) { return; } var list = m_Lists[listIndex]; if (listEntry < 0 || listEntry >= list.Entries.Length) { return; } var entry = list.Entries[listEntry]; if (m_Mobile.Map == list.Map && m_Mobile.InRange(entry.Location, 1)) { m_Mobile.SendLocalizedMessage(1019003); // You are already there. return; } if (m_Mobile.IsStaff()) { //Staff can always use a gate! } else if (!m_Mobile.InRange(m_Moongate.GetWorldLocation(), 1) || m_Mobile.Map != m_Moongate.Map) { m_Mobile.SendLocalizedMessage(1019002); // You are too far away to use the gate. return; } else if (m_Mobile.Player && SpellHelper.RestrictRedTravel && m_Mobile.Murderer && list.Map != Map.Felucca && !Siege.SiegeShard) { m_Mobile.SendLocalizedMessage(1019004); // You are not allowed to travel there. return; } else if (Sigil.ExistsOn(m_Mobile) && list.Map != Faction.Facet) { m_Mobile.SendLocalizedMessage(1019004); // You are not allowed to travel there. return; } else if (m_Mobile.Criminal) { m_Mobile.SendLocalizedMessage(1005561, "", 0x22); // Thou'rt a criminal and cannot escape so easily. return; } else if (SpellHelper.CheckCombat(m_Mobile)) { m_Mobile.SendLocalizedMessage(1005564, "", 0x22); // Wouldst thou flee during the heat of battle?? return; } else if (m_Mobile.Spell != null) { m_Mobile.SendLocalizedMessage(1049616); // You are too busy to do that at the moment. return; } BaseCreature.TeleportPets(m_Mobile, entry.Location, list.Map); m_Mobile.Combatant = null; m_Mobile.Warmode = false; m_Mobile.Hidden = true; m_Mobile.MoveToWorld(entry.Location, list.Map); Effects.PlaySound(entry.Location, list.Map, 0x1FE); CityTradeSystem.OnPublicMoongateUsed(m_Mobile); }
public MoongateGump(Mobile mobile, Item moongate) : base(100, 100) { m_Mobile = mobile; m_Moongate = moongate; PMList[] checkLists; if (mobile.Player) { if (mobile.IsStaff()) { var flags = mobile.NetState == null ? ClientFlags.None : mobile.NetState.Flags; if (Core.SA && (flags & ClientFlags.TerMur) != 0) { checkLists = PMList.SALists; } else if (Core.SE && (flags & ClientFlags.Tokuno) != 0) { checkLists = PMList.SELists; } else if (Core.AOS && (flags & ClientFlags.Malas) != 0) { checkLists = PMList.AOSLists; } else if ((flags & ClientFlags.Ilshenar) != 0) { checkLists = PMList.LBRLists; } else { checkLists = PMList.UORLists; } } else if (Sigil.ExistsOn(mobile)) { checkLists = PMList.SigilLists; } else if (SpellHelper.RestrictRedTravel && mobile.Murderer && !Siege.SiegeShard) { checkLists = PMList.RedLists; } else { var flags = mobile.NetState == null ? ClientFlags.None : mobile.NetState.Flags; var young = mobile is PlayerMobile && ((PlayerMobile)mobile).Young; if (Core.SA && (flags & ClientFlags.TerMur) != 0) { checkLists = young ? PMList.SAListsYoung : PMList.SALists; } else if (Core.SE && (flags & ClientFlags.Tokuno) != 0) { checkLists = young ? PMList.SEListsYoung : PMList.SELists; } else if (Core.AOS && (flags & ClientFlags.Malas) != 0) { checkLists = young ? PMList.AOSListsYoung : PMList.AOSLists; } else if ((flags & ClientFlags.Ilshenar) != 0) { checkLists = young ? PMList.LBRListsYoung : PMList.LBRLists; } else { checkLists = young ? PMList.UORListsYoung : PMList.UORLists; } } } else { checkLists = PMList.SELists; } m_Lists = new PMList[checkLists.Length]; for (var i = 0; i < m_Lists.Length; ++i) { m_Lists[i] = checkLists[i]; } for (var i = 0; i < m_Lists.Length; ++i) { if (m_Lists[i].Map == mobile.Map) { var temp = m_Lists[i]; m_Lists[i] = m_Lists[0]; m_Lists[0] = temp; break; } } AddPage(0); AddBackground(0, 0, 380, 280, 5054); AddButton(10, 210, 4005, 4007, 1, GumpButtonType.Reply, 0); AddHtmlLocalized(45, 210, 140, 25, 1011036, false, false); // OKAY AddButton(10, 235, 4005, 4007, 0, GumpButtonType.Reply, 0); AddHtmlLocalized(45, 235, 140, 25, 1011012, false, false); // CANCEL AddHtmlLocalized(5, 5, 200, 20, 1012011, false, false); // Pick your destination: for (var i = 0; i < checkLists.Length; ++i) { if (Siege.SiegeShard && checkLists[i].Number == 1012000) // Trammel { continue; } AddButton(10, 35 + (i * 25), 2117, 2118, 0, GumpButtonType.Page, Array.IndexOf(m_Lists, checkLists[i]) + 1); AddHtmlLocalized(30, 35 + (i * 25), 150, 20, checkLists[i].Number, false, false); } for (var i = 0; i < m_Lists.Length; ++i) { RenderPage(i, Array.IndexOf(checkLists, m_Lists[i])); } }
public static int MobileNotoriety(Mobile source, IDamageable damageable) { Mobile target = damageable as Mobile; if (target == null) { return(Notoriety.CanBeAttacked); } if (target.Blessed) { return(Notoriety.Invulnerable); } if (target is BaseVendor && ((BaseVendor)target).IsInvulnerable) { return(Notoriety.Invulnerable); } if (target is PlayerVendor || target is TownCrier) { return(Notoriety.Invulnerable); } EnemyOfOneContext context = EnemyOfOneSpell.GetContext(source); if (context != null && context.IsEnemy(target)) { return(Notoriety.Enemy); } if (PVPArenaSystem.IsEnemy(source, target)) { return(Notoriety.Enemy); } if (PVPArenaSystem.IsFriendly(source, target)) { return(Notoriety.Ally); } if (target.IsStaff()) { return(Notoriety.CanBeAttacked); } var bc = target as BaseCreature; if (source.Player && bc != null) { Mobile master = bc.GetMaster(); if (master != null && master.IsStaff()) { return(Notoriety.CanBeAttacked); } master = bc.ControlMaster; if (master != null && !bc.ForceNotoriety) { if (source == master && CheckAggressor(target.Aggressors, source)) { return(Notoriety.CanBeAttacked); } if (CheckAggressor(source.Aggressors, bc)) { return(Notoriety.CanBeAttacked); } return(MobileNotoriety(source, master)); } } if (target.Murderer) { return(Notoriety.Murderer); } if (target.Body.IsMonster && IsSummoned(bc)) { if (!(target is BaseFamiliar) && !(target is ArcaneFey) && !(target is Golem)) { return(Notoriety.Murderer); } } if (bc != null && (bc.AlwaysMurderer || bc.IsAnimatedDead)) { return(Notoriety.Murderer); } if (target.Criminal) { return(Notoriety.Criminal); } Guild sourceGuild = GetGuildFor(source.Guild as Guild, source); Guild targetGuild = GetGuildFor(target.Guild as Guild, target); if (sourceGuild != null && targetGuild != null) { if (sourceGuild == targetGuild) { return(Notoriety.Ally); } if (sourceGuild.IsAlly(targetGuild)) { return(Notoriety.Ally); } if (sourceGuild.IsEnemy(targetGuild)) { return(Notoriety.Enemy); } } if (ViceVsVirtueSystem.Enabled && ViceVsVirtueSystem.IsEnemy(source, target) && (ViceVsVirtueSystem.EnhancedRules || source.Map == ViceVsVirtueSystem.Facet)) { return(Notoriety.Enemy); } if (Stealing.ClassicMode && target is PlayerMobile && ((PlayerMobile)target).PermaFlags.Contains(source)) { return(Notoriety.CanBeAttacked); } if (bc != null && bc.AlwaysAttackable) { return(Notoriety.CanBeAttacked); } if (CheckHouseFlag(source, target, target.Location, target.Map)) { return(Notoriety.CanBeAttacked); } //If Target is NOT A baseCreature, OR it's a BC and the BC is initial innocent... if (!(bc != null && ((BaseCreature)target).InitialInnocent)) { if (!target.Body.IsHuman && !target.Body.IsGhost && !IsPet(target as BaseCreature) && !(target is PlayerMobile)) { return(Notoriety.CanBeAttacked); } } if (CheckAggressor(source.Aggressors, target)) { return(Notoriety.CanBeAttacked); } if (source is PlayerMobile && CheckPetAggressor((PlayerMobile)source, target)) { return(Notoriety.CanBeAttacked); } if (CheckAggressed(source.Aggressed, target)) { return(Notoriety.CanBeAttacked); } if (source is PlayerMobile && CheckPetAggressed((PlayerMobile)source, target)) { return(Notoriety.CanBeAttacked); } if (bc != null) { if (bc.AlwaysInnocent) { return(Notoriety.Innocent); } else if (bc.Controlled && bc.ControlOrder == OrderType.Guard && bc.ControlTarget == source) { return(Notoriety.CanBeAttacked); } } if (source is BaseCreature) { Mobile master = ((BaseCreature)source).GetMaster(); if (master != null) { if (CheckAggressor(master.Aggressors, target)) { return(Notoriety.CanBeAttacked); } if (MobileNotoriety(master, target) == Notoriety.CanBeAttacked) { return(Notoriety.CanBeAttacked); } if (target is BaseCreature) { return(Notoriety.CanBeAttacked); } } } return(Notoriety.Innocent); }
public static bool Mobile_AllowHarmful(Mobile from, IDamageable damageable) { Mobile target = damageable as Mobile; if (from == null || target == null || from.IsStaff() || target.IsStaff()) { return(true); } Map map = from.Map; if (map != null && (map.Rules & MapRules.HarmfulRestrictions) == 0) { return(true); // In felucca, anything goes } BaseCreature bc = from as BaseCreature; if (!from.Player && !(bc != null && bc.GetMaster() != null && bc.GetMaster().IsPlayer())) { if (!CheckAggressor(from.Aggressors, target) && !CheckAggressed(from.Aggressed, target) && target is PlayerMobile && ((PlayerMobile)target).CheckYoungProtection(from)) { return(false); } return(true); // Uncontrolled NPCs are only restricted by the young system } // Summons should follow the same rules as their masters if (from is BaseCreature && ((BaseCreature)from).Summoned && ((BaseCreature)from).SummonMaster != null) { from = ((BaseCreature)from).SummonMaster; } if (target is BaseCreature && ((BaseCreature)target).Summoned && ((BaseCreature)target).SummonMaster != null) { target = ((BaseCreature)target).SummonMaster; } Guild fromGuild = GetGuildFor(from.Guild as Guild, from); Guild targetGuild = GetGuildFor(target.Guild as Guild, target); if (fromGuild != null && targetGuild != null) { if (fromGuild == targetGuild || fromGuild.IsAlly(targetGuild) || fromGuild.IsEnemy(targetGuild)) { return(true); // Guild allies or enemies can be harmful } } if (ViceVsVirtueSystem.Enabled && ViceVsVirtueSystem.EnhancedRules && ViceVsVirtueSystem.IsEnemy(from, damageable)) { return(true); } if (target is BaseCreature) { if (((BaseCreature)target).Controlled) { return(false); // Cannot harm other controlled mobiles } if (((BaseCreature)target).Summoned && from != ((BaseCreature)target).SummonMaster) { return(false); // Cannot harm other controlled mobiles } } if (target.Player) { return(false); // Cannot harm other players } if (!(target is BaseCreature && ((BaseCreature)target).InitialInnocent)) { if (Notoriety.Compute(from, target) == Notoriety.Innocent) { return(false); // Cannot harm innocent mobiles } } return(true); }
public static void Container_Snoop(Container cont, Mobile from) { if (from.IsStaff() || from.InRange(cont.GetWorldLocation(), 1)) { Mobile root = cont.RootParent as Mobile; if (root != null && !root.Alive) { return; } if (root != null && root.IsStaff() && from.IsPlayer()) { from.SendLocalizedMessage(500209); // You can not peek into the container. return; } if (root != null && from.IsPlayer() && !CheckSnoopAllowed(from, root)) { from.SendLocalizedMessage(1001018); // You cannot perform negative acts on your target. return; } if (root != null && from.IsPlayer() && from.Skills[SkillName.Snooping].Value < Utility.Random(100)) { Map map = from.Map; if (map != null) { string message = String.Format("You notice {0} attempting to peek into {1}'s belongings.", from.Name, root.Name); IPooledEnumerable eable = map.GetClientsInRange(from.Location, 8); foreach (NetState ns in eable) { if (ns.Mobile != from) { ns.Mobile.SendMessage(message); } } eable.Free(); } } if (from.IsPlayer()) { Titles.AwardKarma(from, -4, true); } if (from.IsStaff() || from.CheckTargetSkill(SkillName.Snooping, cont, 0.0, 100.0)) { if (cont is TrapableContainer && ((TrapableContainer)cont).CheckTrap(from)) { ((TrapableContainer)cont).ExecuteTrap(from); return; } cont.DisplayTo(from); } else { from.SendLocalizedMessage(500210); // You failed to peek into the container. if (from.Skills[SkillName.Hiding].Value / 2 < Utility.Random(100)) { from.RevealingAction(); } } } else { from.SendLocalizedMessage(500446); // That is too far away. } }
public bool IsGuardCandidate(Mobile m) { if (m is BaseGuard || !m.Alive || m.IsStaff() || m.Blessed || (m is BaseCreature && ((BaseCreature)m).IsInvulnerable) || IsDisabled()) { return false; } return (!AllowReds && m.Kills >= 5) || m.Criminal; }
public void OnMovement(Mobile mob, Mobile mover, Point3D oldLocation) { if ((this.m_Flags & IHSFlags.OnMovement) == 0) return; // not enabled if (!mover.Player || (mover.Hidden && mover.IsStaff())) return; if (!mob.InRange(mover, 5) || mob.InRange(oldLocation, 5)) return; // only talk when they enter 5 tile range if (90 > Utility.Random(100)) return; // 90% chance to do nothing; 10% chance to talk this.SaySentance(mob, 6); }
protected override void OnTarget(Mobile from, object targeted) { if (targeted is Mobile targ) { if (from != targ) { from.SendMessage("You may only set your own body to GM style."); } else { m_Mobile = from; if (Config.Get("Staff.Staffbody", true)) { m_Mobile.BodyValue = 987; if (Config.Get("Staff.UseColoring", true)) { switch (m_Mobile.AccessLevel) { case AccessLevel.Owner: m_Mobile.Hue = Config.Get("Staff.Owner", 1001); break; case AccessLevel.Developer: m_Mobile.Hue = Config.Get("Staff.Developer", 1001); break; case AccessLevel.Administrator: m_Mobile.Hue = Config.Get("Staff.Administrator", 1001); break; case AccessLevel.Seer: m_Mobile.Hue = Config.Get("Staff.Seer", 467); break; case AccessLevel.GameMaster: m_Mobile.Hue = Config.Get("Staff.GameMaster", 39); break; case AccessLevel.Counselor: m_Mobile.Hue = Config.Get("Staff.Counselor", 3); break; } } } if (Config.Get("Staff.CutHair", true)) { m_Mobile.HairItemID = 0; } if (Config.Get("Staff.CutFacialHair", true)) { m_Mobile.FacialHairItemID = 0; } CommandLogging.WriteLine(from, "{0} {1} is assuming a GM body", from.AccessLevel, CommandLogging.Format(from)); Container pack = from.Backpack; ArrayList ItemsToDelete = new ArrayList(); foreach (Item item in from.Items) { if (item.Layer != Layer.Bank && item.Layer != Layer.Hair && item.Layer != Layer.FacialHair && item.Layer != Layer.Mount && item.Layer != Layer.Backpack) { ItemsToDelete.Add(item); } } foreach (Item item in ItemsToDelete) { item.Delete(); } if (pack == null) { pack = new Backpack { Movable = false }; from.AddItem(pack); } else { pack.Delete(); pack = new Backpack { Movable = false }; from.AddItem(pack); } from.Hunger = 20; from.Thirst = 20; from.Fame = 0; from.Karma = 0; from.Kills = 0; from.Hidden = true; from.Blessed = true; from.Hits = from.HitsMax; from.Mana = from.ManaMax; from.Stam = from.StamMax; if (from.IsStaff()) { EquipItem(new StaffRing()); PackItem(new GMHidingStone()); PackItem(new GMEthereal()); PackItem(new StaffOrb()); from.RawStr = 100; from.RawDex = 100; from.RawInt = 100; from.Hits = from.HitsMax; from.Mana = from.ManaMax; from.Stam = from.StamMax; for (int i = 0; i < targ.Skills.Length; ++i) { targ.Skills[i].Base = 120; } } if (Config.Get("Staff.GiveBoots", true)) { int color = 0; if (Config.Get("Staff.UseColoring", true)) { switch (m_Mobile.AccessLevel) { case AccessLevel.Owner: color = Config.Get("Staff.Owner", 1001); break; case AccessLevel.Developer: color = Config.Get("Staff.Developer", 1001); break; case AccessLevel.Administrator: color = Config.Get("Staff.Administrator", 1001); break; case AccessLevel.Seer: color = Config.Get("Staff.Seer", 467); break; case AccessLevel.GameMaster: color = Config.Get("Staff.GameMaster", 39); break; case AccessLevel.Counselor: color = Config.Get("Staff.Counselor", 3); break; } } if (from.IsStaff() && from.AccessLevel <= AccessLevel.Spawner) { EquipItem(new FurBoots(color)); } else if (from.AccessLevel == AccessLevel.GameMaster) { EquipItem(new FurBoots(color)); } if (from.AccessLevel == AccessLevel.Seer) { EquipItem(new FurBoots(color)); } if (from.AccessLevel == AccessLevel.Administrator) { EquipItem(new FurBoots(color)); } if (from.AccessLevel == AccessLevel.Developer) { EquipItem(new FurBoots(color)); } if (from.AccessLevel >= AccessLevel.CoOwner) { EquipItem(new FurBoots(color)); } } } } }
public static bool Mobile_AllowBeneficial(Mobile from, Mobile target) { return(true); // Anything goes in DW! if (from == null || target == null || from.IsStaff() || target.IsStaff()) { return(true); } var map = from.Map; #region Factions/VvV if (Settings.Enabled) { var targetFaction = Faction.Find(target, true); if ((!Core.ML || map == Faction.Facet) && targetFaction != null) { if (Faction.Find(from, true) != targetFaction) { return(false); } } } if (ViceVsVirtueSystem.Enabled) { if (ViceVsVirtueSystem.IsEnemy(from, target)) { return(false); } } #endregion #region Mondain's Legacy if (target is Gregorio) { return(false); } #endregion if (map != null && (map.Rules & MapRules.BeneficialRestrictions) == 0) { return(true); // In felucca, anything goes } if (!from.Player) { return(true); // NPCs have no restrictions } if (target is BaseCreature && !((BaseCreature)target).Controlled) { return(false); // Players cannot heal uncontrolled mobiles } if (XmlPoints.AreInAnyGame(target)) { return(XmlPoints.AreTeamMembers(from, target)); } if (from is PlayerMobile && ((PlayerMobile)from).Young && target is BaseCreature && ((BaseCreature)target).Controlled) { return(true); } if (from is PlayerMobile && ((PlayerMobile)from).Young && (!(target is PlayerMobile) || !((PlayerMobile)target).Young)) { return(false); // Young players cannot perform beneficial actions towards older players } var fromGuild = from.Guild as Guild; var targetGuild = target.Guild as Guild; if (fromGuild != null && targetGuild != null) { if (targetGuild == fromGuild || fromGuild.IsAlly(targetGuild)) { return(true); // Guild members can be beneficial } } return(CheckBeneficialStatus(GetGuildStatus(from), GetGuildStatus(target))); }
private bool CanMoveOver(Mobile m, Mobile t) { return((!t.Alive || !m.Alive || t.IsDeadBondedPet || m.IsDeadBondedPet) || (t.Hidden && t.IsStaff())); }
public virtual void Open(Mobile from, bool checkSelfLoot) { if (from.IsStaff() || from.InRange(GetWorldLocation(), 2)) { #region Self Looting bool selfLoot = (checkSelfLoot && (from == m_Owner)); if (selfLoot) { SetFlag(CorpseFlag.SelfLooted, true); var items = new List <Item>(Items); bool gathered = false; for (int k = 0; k < EquipItems.Count; ++k) { Item item2 = EquipItems[k]; if (!items.Contains(item2) && item2.IsChildOf(from.Backpack)) { items.Add(item2); gathered = true; } } bool didntFit = false; Container pack = from.Backpack; bool checkRobe = true; for (int i = 0; !didntFit && i < items.Count; ++i) { Item item = items[i]; Point3D loc = item.Location; if ((item.Layer == Layer.Hair || item.Layer == Layer.FacialHair) || !item.Movable) { continue; } if (checkRobe) { DeathRobe robe = from.FindItemOnLayer(Layer.OuterTorso) as DeathRobe; if (robe != null) { if (Core.SA) { robe.Delete(); } else { Map map = from.Map; if (map != null && map != Map.Internal) { robe.MoveToWorld(from.Location, map); } } } } if (m_EquipItems.Contains(item) && from.EquipItem(item)) { gathered = true; } else if (pack != null && pack.CheckHold(from, item, false, true)) { item.Location = loc; pack.AddItem(item); gathered = true; } else { didntFit = true; } } if (gathered && !didntFit) { SetFlag(CorpseFlag.Carved, true); if (ItemID == 0x2006) { ProcessDelta(); SendRemovePacket(); ItemID = Utility.Random(0xECA, 9); // bone graphic Hue = 0; ProcessDelta(); } from.PlaySound(0x3E3); from.SendLocalizedMessage(1062471); // You quickly gather all of your belongings. items.Clear(); m_EquipItems.Clear(); return; } if (gathered && didntFit) { from.SendLocalizedMessage(1062472); // You gather some of your belongings. The rest remain on the corpse. } } #endregion if (!CheckLoot(from, null)) { return; } #region Quests PlayerMobile player = from as PlayerMobile; if (player != null) { QuestSystem qs = player.Quest; if (qs is UzeraanTurmoilQuest) { GetDaemonBoneObjective obj = qs.FindObjective(typeof(GetDaemonBoneObjective)) as GetDaemonBoneObjective; if (obj != null && obj.CorpseWithBone == this && (!obj.Completed || UzeraanTurmoilQuest.HasLostDaemonBone(player))) { Item bone = new QuestDaemonBone(); if (player.PlaceInBackpack(bone)) { obj.CorpseWithBone = null; player.SendLocalizedMessage(1049341, "", 0x22); // You rummage through the bones and find a Daemon Bone! You quickly place the item in your pack. if (!obj.Completed) { obj.Complete(); } } else { bone.Delete(); player.SendLocalizedMessage(1049342, "", 0x22); // Rummaging through the bones you find a Daemon Bone, but can't pick it up because your pack is too full. Come back when you have more room in your pack. } return; } } else if (qs is TheSummoningQuest) { VanquishDaemonObjective obj = qs.FindObjective(typeof(VanquishDaemonObjective)) as VanquishDaemonObjective; if (obj != null && obj.Completed && obj.CorpseWithSkull == this) { GoldenSkull sk = new GoldenSkull(); if (player.PlaceInBackpack(sk)) { obj.CorpseWithSkull = null; player.SendLocalizedMessage(1050022); // For your valor in combating the devourer, you have been awarded a golden skull. qs.Complete(); } else { sk.Delete(); player.SendLocalizedMessage(1050023); // You find a golden skull, but your backpack is too full to carry it. } } } } #endregion base.OnDoubleClick(from); } else { from.SendLocalizedMessage(500446); // That is too far away. return; } }
public static void Container_Snoop(Container cont, Mobile from) { if (from.IsStaff() || from.InRange(cont.GetWorldLocation(), 1)) { Mobile root = cont.RootParent as Mobile; if (root != null && !root.Alive) { return; } if (root is BaseCreature && !(cont is StrongBackpack)) { return; } if (root != null && root.IsStaff() && from.IsPlayer()) { from.SendLocalizedMessage(500209); // You can not peek into the container. return; } if (root != null && from.IsPlayer() && !CheckSnoopAllowed(from, root)) { from.SendLocalizedMessage(1001018); // You cannot perform negative acts on your target. return; } if (root != null && from.IsPlayer() && from.Skills[SkillName.Snooping].Value < Utility.Random(100)) { Map map = from.Map; if (map != null) { string message = String.Format("You notice {0} peeking into your belongings!", from.Name); root.Send(new AsciiMessage(-1, -1, MessageType.Label, 946, 3, "", message)); } } if (from.IsPlayer()) { Titles.AwardKarma(from, -4, true); } if (from.IsStaff() || from.CheckTargetSkill(SkillName.Snooping, cont, 0.0, 100.0)) { if (cont is TrapableContainer && ((TrapableContainer)cont).ExecuteTrap(from)) { return; } cont.DisplayTo(from); } else { from.SendLocalizedMessage(500210); // You failed to peek into the container. if (from.Skills[SkillName.Hiding].Value / 2 < Utility.Random(100)) { from.RevealingAction(); } } } else { from.SendLocalizedMessage(500446); // That is too far away. } }
public virtual void Open(Mobile from, bool checkSelfLoot) { if (from.IsStaff() || from.InRange(GetWorldLocation(), 2)) { #region Self Looting bool selfLoot = (checkSelfLoot && (from == m_Owner)); if (selfLoot) { var items = new List <Item>(Items); bool gathered = false; for (int k = 0; k < EquipItems.Count; ++k) { Item item2 = EquipItems[k]; if (!items.Contains(item2) && item2.IsChildOf(from.Backpack)) { items.Add(item2); gathered = true; } } bool didntFit = false; Container pack = from.Backpack; bool checkRobe = true; for (int i = 0; !didntFit && i < items.Count; ++i) { Item item = items[i]; Point3D loc = item.Location; if ((item.Layer == Layer.Hair || item.Layer == Layer.FacialHair) || !item.Movable) { continue; } if (checkRobe) { DeathRobe robe = from.FindItemOnLayer(Layer.OuterTorso) as DeathRobe; if (robe != null) { if (Core.SA) { robe.Delete(); } else { Map map = from.Map; if (map != null && map != Map.Internal) { robe.MoveToWorld(from.Location, map); } } } } if (m_EquipItems.Contains(item) && from.EquipItem(item)) { gathered = true; } else if (pack != null && pack.CheckHold(from, item, false, true)) { item.Location = loc; pack.AddItem(item); gathered = true; } else { didntFit = true; } } if (gathered && !didntFit) { SetFlag(CorpseFlag.Carved, true); if (ItemID == 0x2006) { ProcessDelta(); SendRemovePacket(); ItemID = Utility.Random(0xECA, 9); // bone graphic Hue = 0; ProcessDelta(); } from.PlaySound(0x3E3); from.SendLocalizedMessage(1062471); // You quickly gather all of your belongings. items.Clear(); m_EquipItems.Clear(); return; } if (gathered && didntFit) { from.SendLocalizedMessage(1062472); // You gather some of your belongings. The rest remain on the corpse. } } #endregion if (!CheckLoot(from, null)) { return; } base.OnDoubleClick(from); } else { from.SendLocalizedMessage(500446); // That is too far away. return; } }
public override bool IsChildVisibleTo(Mobile m, Item child) { if (!m.Player || m.IsStaff()) //Staff and creatures not subject to instancing. return true; if (this.m_InstancedItems != null) { InstancedItemInfo info; if (this.m_InstancedItems.TryGetValue(child, out info) && (this.InstancedCorpse || info.Perpetual)) { return info.IsOwner(m); //IsOwner checks Party stuff. } } return true; }
public override bool OnDragLift(Mobile from) { return(from.IsStaff()); }
public override void OnMovement(Mobile m, Point3D oldLocation) { if (this.m_NextSpawn < DateTime.Now) // means we haven't spawned anything if the next spawn is below { if (Utility.InRange(m.Location, this.Location, 1) && !Utility.InRange(oldLocation, this.Location, 1) && m.Player && !(m.IsStaff() || m.Hidden)) { if (this.m_Timer == null || !this.m_Timer.Running) this.m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(2), new TimerCallback(HeedWarning)); } } base.OnMovement(m, oldLocation); }
public void Ban(Mobile from, Mobile targ) { if (!this.IsFriend(from) || this.m_Bans == null) return; if (targ.IsStaff() && from.AccessLevel <= targ.AccessLevel) { from.SendLocalizedMessage(501354); // Uh oh...a bigger boot may be required. } else if (this.IsFriend(targ)) { from.SendLocalizedMessage(501348); // You cannot eject a friend of the house! } else if (targ is PlayerVendor) { from.SendLocalizedMessage(501351); // You cannot eject a vendor. } else if (this.m_Bans.Count >= MaxBans) { from.SendLocalizedMessage(501355); // The ban limit for this house has been reached! } else if (this.IsBanned(targ)) { from.SendLocalizedMessage(501356); // This person is already banned! } else if (!this.IsInside(targ)) { from.SendLocalizedMessage(501352); // You may not eject someone who is not in your house! } else if (!this.Public && this.IsAosRules) { from.SendLocalizedMessage(1062521); // You cannot ban someone from a private house. Revoke their access instead. } else if (targ is BaseCreature && ((BaseCreature)targ).NoHouseRestrictions) { from.SendLocalizedMessage(1062040); // You cannot ban that. } else { this.m_Bans.Add(targ); from.SendLocalizedMessage(1042839, targ.Name); // ~1_PLAYER_NAME~ has been banned from this house. targ.SendLocalizedMessage(501340); // You have been banned from this house. targ.MoveToWorld(this.BanLocation, this.Map); } }
public static bool Mobile_AllowHarmful(Mobile from, IDamageable damageable) { return(true); // Anything goes in DW! var target = damageable as Mobile; if (from == null || target == null || from.IsStaff() || target.IsStaff()) { return(true); } #region Mondain's Legacy if (target is Gregorio) { if (Gregorio.IsMurderer(from)) { return(true); } from.SendLocalizedMessage(1075456); // You are not allowed to damage this NPC unless your on the Guilty Quest return(false); } #endregion var map = from.Map; if (map != null && (map.Rules & MapRules.HarmfulRestrictions) == 0) { return(true); // In felucca, anything goes } // Summons should follow the same rules as their masters if (from is BaseCreature && ((BaseCreature)from).Summoned && ((BaseCreature)from).SummonMaster != null) { from = ((BaseCreature)from).SummonMaster; } if (target is BaseCreature && ((BaseCreature)target).Summoned && ((BaseCreature)target).SummonMaster != null) { target = ((BaseCreature)target).SummonMaster; } var bc = from as BaseCreature; if (!from.Player && !(bc != null && bc.GetMaster() != null && bc.GetMaster().IsPlayer())) { if (!CheckAggressor(from.Aggressors, target) && !CheckAggressed(from.Aggressed, target) && target is PlayerMobile && ((PlayerMobile)target).CheckYoungProtection(from)) { return(false); } return(true); // Uncontrolled NPCs are only restricted by the young system } if (XmlPoints.AreChallengers(from, target)) { return(true); } var fromGuild = GetGuildFor(from.Guild as Guild, from); var targetGuild = GetGuildFor(target.Guild as Guild, target); if (fromGuild != null && targetGuild != null) { if (fromGuild == targetGuild || fromGuild.IsAlly(targetGuild) || fromGuild.IsEnemy(targetGuild)) { return(true); // Guild allies or enemies can be harmful } } if (target is BaseCreature) { if (((BaseCreature)target).Controlled) { return(false); // Cannot harm other controlled mobiles } if (((BaseCreature)target).Summoned && from != ((BaseCreature)target).SummonMaster) { return(false); // Cannot harm other controlled mobiles } } if (target.Player) { return(false); // Cannot harm other players } if (!(target is BaseCreature && ((BaseCreature)target).InitialInnocent)) { if (Notoriety.Compute(from, target) == Notoriety.Innocent) { return(false); // Cannot harm innocent mobiles } } return(true); }
public bool HasAccess(Mobile m) { if (m == null) return false; if (m.IsStaff() || this.IsFriend(m) || (this.m_Access != null && this.m_Access.Contains(m))) return true; if (m is BaseCreature) { BaseCreature bc = (BaseCreature)m; if (bc.NoHouseRestrictions) return true; if (bc.Controlled || bc.Summoned) { m = bc.ControlMaster; if (m == null) m = bc.SummonMaster; if (m == null) return false; if (m.IsStaff() || this.IsFriend(m) || (this.m_Access != null && this.m_Access.Contains(m))) return true; } } return false; }
public MoongateGump(Mobile mobile, Item moongate) : base(100, 100) { m_Mobile = mobile; m_Moongate = moongate; PMList[] checkLists; if (mobile.Player) { if (mobile.IsStaff()) { checkLists = PMList.Lists; } else if (Engines.VvV.VvVSigil.ExistsOn(mobile)) { checkLists = PMList.SigilLists; } else if (SpellHelper.RestrictRedTravel && mobile.Murderer && !Siege.SiegeShard) { checkLists = PMList.RedLists; } else { bool young = mobile is PlayerMobile pm && pm.Young; checkLists = young ? PMList.ListsYoung : PMList.Lists; } } else { checkLists = PMList.Lists; } m_Lists = new PMList[checkLists.Length]; for (int i = 0; i < m_Lists.Length; ++i) { m_Lists[i] = checkLists[i]; } for (int i = 0; i < m_Lists.Length; ++i) { if (m_Lists[i].Map == mobile.Map) { PMList temp = m_Lists[i]; m_Lists[i] = m_Lists[0]; m_Lists[0] = temp; break; } } AddPage(0); AddBackground(0, 0, 380, 280, 5054); AddButton(10, 210, 4005, 4007, 1, GumpButtonType.Reply, 0); AddHtmlLocalized(45, 210, 140, 25, 1011036, false, false); // OKAY AddButton(10, 235, 4005, 4007, 0, GumpButtonType.Reply, 0); AddHtmlLocalized(45, 235, 140, 25, 1011012, false, false); // CANCEL AddHtmlLocalized(5, 5, 200, 20, 1012011, false, false); // Pick your destination: for (int i = 0; i < checkLists.Length; ++i) { if (Siege.SiegeShard && checkLists[i].Number == 1012000) // Trammel { continue; } AddButton(10, 35 + (i * 25), 2117, 2118, 0, GumpButtonType.Page, Array.IndexOf(m_Lists, checkLists[i]) + 1); if (checkLists[i].Number.Number > 0) { AddHtmlLocalized(30, 35 + (i * 25), 150, 20, checkLists[i].Number.Number, false, false); } else if (!string.IsNullOrEmpty(checkLists[i].Number.String)) { AddHtml(30, 35 + (i * 25), 150, 20, checkLists[i].Number.String, false, false); } } for (int i = 0; i < m_Lists.Length; ++i) { RenderPage(i, Array.IndexOf(checkLists, m_Lists[i])); } }
protected override void OnTarget(Mobile from, object targeted) { if (targeted is Mobile) { Mobile targ = (Mobile)targeted; if (from != targ) { from.SendMessage("You may only set your own body to GM style."); } else { m_Mobile = from; CommandLogging.WriteLine(from, "{0} {1} is assuming a GM body", from.AccessLevel, CommandLogging.Format(from)); Container pack = from.Backpack; ArrayList ItemsToDelete = new ArrayList(); foreach (Item item in from.Items) { if (item.Layer != Layer.Bank && item.Layer != Layer.Hair && item.Layer != Layer.FacialHair && item.Layer != Layer.Mount && item.Layer != Layer.Backpack) { ItemsToDelete.Add(item); } } foreach (Item item in ItemsToDelete) { item.Delete(); } if (pack == null) { pack = new Backpack(); pack.Movable = false; from.AddItem(pack); } else { pack.Delete(); pack = new Backpack(); pack.Movable = false; from.AddItem(pack); } from.Hunger = 20; from.Thirst = 20; from.Fame = 0; from.Karma = 0; from.Kills = 0; from.Hidden = true; from.Blessed = true; from.Hits = from.HitsMax; from.Mana = from.ManaMax; from.Stam = from.StamMax; if (from.IsStaff()) { EquipItem(new StaffRing()); EquipItem(new StaffRobe()); PackItem(new GMHidingStone()); PackItem(new GMEthereal()); PackItem(new StaffOrb(from)); PackItem(new Spellbook((ulong)18446744073709551615)); PackItem(new NecromancerSpellbook((ulong)0xffff)); PackItem(new BookOfChivalry()); PackItem(new BookOfBushido()); PackItem(new SpellweavingBook((ulong)0xffff)); from.RawStr = 100; from.RawDex = 100; from.RawInt = 100; from.Hits = from.HitsMax; from.Mana = from.ManaMax; from.Stam = from.StamMax; for (int i = 0; i < targ.Skills.Length; ++i) { targ.Skills[i].Base = 120; } } if (from.IsStaff() && from.AccessLevel <= AccessLevel.Spawner) { EquipItem(new FurBoots(3)); } else if (from.AccessLevel == AccessLevel.GameMaster) { EquipItem(new FurBoots(39)); } if (from.AccessLevel == AccessLevel.Seer) { EquipItem(new FurBoots(467)); } if (from.AccessLevel == AccessLevel.Administrator) { EquipItem(new FurBoots(1001)); } if (from.AccessLevel == AccessLevel.Developer) { EquipItem(new FurBoots(1001)); } if (from.AccessLevel >= AccessLevel.CoOwner) { EquipItem(new FurBoots(1001)); } } } }
public static bool Mobile_AllowHarmful(Mobile from, Mobile target) { if (from == null || target == null || from.IsStaff() || target.IsStaff()) { return(true); } Map map = from.Map; #region Factions Faction targetFaction = Faction.Find(target, true); if ((!Core.ML || map == Faction.Facet) && targetFaction != null) { if (Faction.Find(from, true) != targetFaction) { return(true); // In factions, anything goes } } #endregion #region Mondain's Legacy if (target is Gregorio) { if (Gregorio.IsMurderer(from)) { return(true); } from.SendLocalizedMessage(1075456); // You are not allowed to damage this NPC unless your on the Guilty Quest return(false); } #endregion #region Dueling PlayerMobile pmFrom = from as PlayerMobile; PlayerMobile pmTarg = target as PlayerMobile; if (pmFrom == null && from is BaseCreature) { BaseCreature bcFrom = (BaseCreature)from; if (bcFrom.Summoned) { pmFrom = bcFrom.SummonMaster as PlayerMobile; } } if (pmTarg == null && target is BaseCreature) { BaseCreature bcTarg = (BaseCreature)target; if (bcTarg.Summoned) { pmTarg = bcTarg.SummonMaster as PlayerMobile; } } if (pmFrom != null && pmTarg != null) { if (pmFrom.DuelContext != pmTarg.DuelContext && ((pmFrom.DuelContext != null && pmFrom.DuelContext.Started) || (pmTarg.DuelContext != null && pmTarg.DuelContext.Started))) { return(false); } if (pmFrom.DuelContext != null && pmFrom.DuelContext == pmTarg.DuelContext && ((pmFrom.DuelContext.StartedReadyCountdown && !pmFrom.DuelContext.Started) || pmFrom.DuelContext.Tied || pmFrom.DuelPlayer.Eliminated || pmTarg.DuelPlayer.Eliminated)) { return(false); } if (pmFrom.DuelContext != null && pmFrom.DuelContext == pmTarg.DuelContext && pmFrom.DuelContext.m_Tournament != null && pmFrom.DuelContext.m_Tournament.IsNotoRestricted && pmFrom.DuelPlayer != null && pmTarg.DuelPlayer != null && pmFrom.DuelPlayer.Participant == pmTarg.DuelPlayer.Participant) { return(false); } if (pmFrom.DuelContext != null && pmFrom.DuelContext == pmTarg.DuelContext && pmFrom.DuelContext.Started) { return(true); } } if ((pmFrom != null && pmFrom.DuelContext != null && pmFrom.DuelContext.Started) || (pmTarg != null && pmTarg.DuelContext != null && pmTarg.DuelContext.Started)) { return(false); } Engines.ConPVP.SafeZone sz = from.Region.GetRegion(typeof(Engines.ConPVP.SafeZone)) as Engines.ConPVP.SafeZone; if (sz != null /*&& sz.IsDisabled()*/) { return(false); } sz = target.Region.GetRegion(typeof(Engines.ConPVP.SafeZone)) as Engines.ConPVP.SafeZone; if (sz != null /*&& sz.IsDisabled()*/) { return(false); } #endregion if (map != null && (map.Rules & MapRules.HarmfulRestrictions) == 0) { return(true); // In felucca, anything goes } BaseCreature bc = from as BaseCreature; if (!from.Player && !(bc != null && bc.GetMaster() != null && bc.GetMaster().IsPlayer())) { if (!CheckAggressor(from.Aggressors, target) && !CheckAggressed(from.Aggressed, target) && target is PlayerMobile && ((PlayerMobile)target).CheckYoungProtection(from)) { return(false); } return(true); // Uncontrolled NPCs are only restricted by the young system } if (XmlPoints.AreChallengers(from, target)) { return(true); } Guild fromGuild = GetGuildFor(from.Guild as Guild, from); Guild targetGuild = GetGuildFor(target.Guild as Guild, target); if (fromGuild != null && targetGuild != null && (fromGuild == targetGuild || fromGuild.IsAlly(targetGuild) || fromGuild.IsEnemy(targetGuild))) { return(true); // Guild allies or enemies can be harmful } if (target is BaseCreature && (((BaseCreature)target).Controlled || (((BaseCreature)target).Summoned && from != ((BaseCreature)target).SummonMaster))) { return(false); // Cannot harm other controlled mobiles } if (target.Player) { return(false); // Cannot harm other players } if (!(target is BaseCreature && ((BaseCreature)target).InitialInnocent)) { if (Notoriety.Compute(from, target) == Notoriety.Innocent) { return(false); // Cannot harm innocent mobiles } } return(true); }
public void CompleteCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CustomCraft customCraft) { int badCraft = craftSystem.CanCraft(from, tool, m_Type); if (badCraft > 0) { if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) { from.SendGump(new CraftGump(from, craftSystem, tool, badCraft)); } else { from.SendLocalizedMessage(badCraft); } AutoCraftTimer.EndTimer(from); return; } int checkResHue = 0, checkMaxAmount = 0; object checkMessage = null; // Not enough resource to craft it if (!ConsumeRes(from, typeRes, craftSystem, ref checkResHue, ref checkMaxAmount, ConsumeType.None, ref checkMessage)) { if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) { from.SendGump(new CraftGump(from, craftSystem, tool, checkMessage)); } else if (checkMessage is int && (int)checkMessage > 0) { from.SendLocalizedMessage((int)checkMessage); } else if (checkMessage is string) { from.SendMessage((string)checkMessage); } AutoCraftTimer.EndTimer(from); return; } else if (!ConsumeAttributes(from, ref checkMessage, false)) { if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) { from.SendGump(new CraftGump(from, craftSystem, tool, checkMessage)); } else if (checkMessage is int && (int)checkMessage > 0) { from.SendLocalizedMessage((int)checkMessage); } else if (checkMessage is string) { from.SendMessage((string)checkMessage); } AutoCraftTimer.EndTimer(from); return; } bool toolBroken = false; int ignored = 1; int endquality = 1; bool allRequiredSkills = true; if (CheckSkills(from, typeRes, craftSystem, ref ignored, ref allRequiredSkills)) { // Resource int resHue = 0; int maxAmount = 0; object message = null; // Not enough resource to craft it if (!ConsumeRes(from, typeRes, craftSystem, ref resHue, ref maxAmount, ConsumeType.All, ref message)) { if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) { from.SendGump(new CraftGump(from, craftSystem, tool, message)); } else if (message is int && (int)message > 0) { from.SendLocalizedMessage((int)message); } else if (message is string) { from.SendMessage((string)message); } AutoCraftTimer.EndTimer(from); return; } else if (!ConsumeAttributes(from, ref message, true)) { if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) { from.SendGump(new CraftGump(from, craftSystem, tool, message)); } else if (message is int && (int)message > 0) { from.SendLocalizedMessage((int)message); } else if (message is string) { from.SendMessage((string)message); } AutoCraftTimer.EndTimer(from); return; } tool.UsesRemaining--; if (craftSystem is DefBlacksmithy) { AncientSmithyHammer hammer = from.FindItemOnLayer(Layer.OneHanded) as AncientSmithyHammer; if (hammer != null && hammer != tool) { #region Mondain's Legacy if (hammer is HammerOfHephaestus) { if (hammer.UsesRemaining > 0) { hammer.UsesRemaining--; } if (hammer.UsesRemaining < 1) { from.PlaceInBackpack(hammer); } } else { hammer.UsesRemaining--; if (hammer.UsesRemaining < 1) { hammer.Delete(); } } #endregion } } #region Mondain's Legacy if (tool is HammerOfHephaestus) { if (tool.UsesRemaining < 1) { tool.UsesRemaining = 0; } } else { if (tool.UsesRemaining < 1) { toolBroken = true; } if (toolBroken) { tool.Delete(); } } #endregion int num = 0; Item item; if (customCraft != null) { item = customCraft.CompleteCraft(out num); } else if (typeof(MapItem).IsAssignableFrom(ItemType) && from.Map != Map.Trammel && from.Map != Map.Felucca) { item = new IndecipherableMap(); from.SendLocalizedMessage(1070800); // The map you create becomes mysteriously indecipherable. } else { item = Activator.CreateInstance(ItemType) as Item; } if (item != null) { #region Mondain's Legacy if (item is Board) { Type resourceType = typeRes; if (resourceType == null) { resourceType = Resources.GetAt(0).ItemType; } CraftResource thisResource = CraftResources.GetFromType(resourceType); switch (thisResource) { case CraftResource.OakWood: item = new OakBoard(); break; case CraftResource.AshWood: item = new AshBoard(); break; case CraftResource.YewWood: item = new YewBoard(); break; case CraftResource.Heartwood: item = new HeartwoodBoard(); break; case CraftResource.Bloodwood: item = new BloodwoodBoard(); break; case CraftResource.Frostwood: item = new FrostwoodBoard(); break; default: item = new Board(); break; } } #endregion if (item is ICraftable) { endquality = ((ICraftable)item).OnCraft(quality, makersMark, from, craftSystem, typeRes, tool, this, resHue); } else if (item is Food) { ((Food)item).PlayerConstructed = true; } else if (item.Hue == 0) { item.Hue = resHue; } if (maxAmount > 0) { if (!item.Stackable && item is IUsesRemaining) { ((IUsesRemaining)item).UsesRemaining *= maxAmount; } else { item.Amount = maxAmount; } } #region Plant Pigments if (item is PlantPigment && (craftSystem is DefAlchemy || craftSystem is DefCooking)) { ((PlantPigment)item).PigmentHue = PlantPigmentHueInfo.HueFromPlantHue(m_PlantHue); } if (item is NaturalDye && (craftSystem is DefAlchemy || craftSystem is DefCooking)) { ((NaturalDye)item).PigmentHue = PlantPigmentHueInfo.GetInfo(m_PlantPigmentHue).PlantPigmentHue; } if (item is SoftenedReeds && (craftSystem is DefAlchemy || craftSystem is DefCooking)) { ((SoftenedReeds)item).PlantHue = PlantHueInfo.GetInfo(m_PlantHue).PlantHue; } if (item is BaseContainer && (craftSystem is DefBasketweaving)) { (item).Hue = PlantHueInfo.GetInfo(m_PlantHue).Hue; } CraftContext context = craftSystem.GetContext(from); if (context.QuestOption == CraftQuestOption.QuestItem) { PlayerMobile px = from as PlayerMobile; if (!QuestHelper.CheckItem(px, item)) from.SendLocalizedMessage(1072355, null, 0x23); // That item does not match any of your quest criteria } #endregion from.AddToBackpack(item); if (from.IsStaff()) { CommandLogging.WriteLine( from, "Crafting {0} with craft system {1}", CommandLogging.Format(item), craftSystem.GetType().Name); } AutoCraftTimer.OnSuccessfulCraft(from); //from.PlaySound( 0x57 ); } if (num == 0) { num = craftSystem.PlayEndingEffect(from, false, true, toolBroken, endquality, makersMark, this); } bool queryFactionImbue = false; int availableSilver = 0; FactionItemDefinition def = null; Faction faction = null; if (item is IFactionItem) { def = FactionItemDefinition.Identify(item); if (def != null) { faction = Faction.Find(from); if (faction != null) { Town town = Town.FromRegion(from.Region); if (town != null && town.Owner == faction) { Container pack = from.Backpack; if (pack != null) { availableSilver = pack.GetAmount(typeof(Silver)); if (availableSilver >= def.SilverCost) { queryFactionImbue = Faction.IsNearType(from, def.VendorType, 12); } } } } } } // TODO: Scroll imbuing if (queryFactionImbue) { from.SendGump(new FactionImbueGump(quality, item, from, craftSystem, tool, num, availableSilver, faction, def)); } else if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) { from.SendGump(new CraftGump(from, craftSystem, tool, num)); } else if (num > 0) { from.SendLocalizedMessage(num); } } else if (!allRequiredSkills) { if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) { from.SendGump(new CraftGump(from, craftSystem, tool, 1044153)); } else { from.SendLocalizedMessage(1044153); // You don't have the required skills to attempt this item. } AutoCraftTimer.EndTimer(from); } else { ConsumeType consumeType = (UseAllRes ? ConsumeType.Half : ConsumeType.All); int resHue = 0; int maxAmount = 0; object message = null; // Not enough resource to craft it if (!ConsumeRes(from, typeRes, craftSystem, ref resHue, ref maxAmount, consumeType, ref message, true)) { if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) { from.SendGump(new CraftGump(from, craftSystem, tool, message)); } else if (message is int && (int)message > 0) { from.SendLocalizedMessage((int)message); } else if (message is string) { from.SendMessage((string)message); } AutoCraftTimer.EndTimer(from); return; } tool.UsesRemaining--; if (tool.UsesRemaining < 1) { toolBroken = true; } if (toolBroken) { tool.Delete(); } // SkillCheck failed. int num = craftSystem.PlayEndingEffect(from, true, true, toolBroken, endquality, false, this); if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) { from.SendGump(new CraftGump(from, craftSystem, tool, num)); } else if (num > 0) { from.SendLocalizedMessage(num); } } }
public static int MobileNotoriety(Mobile source, Mobile target) { if (Core.AOS && (target.Blessed || (target is BaseVendor && ((BaseVendor)target).IsInvulnerable) || target is PlayerVendor || target is TownCrier)) { return(Notoriety.Invulnerable); } #region Dueling if (source is PlayerMobile && target is PlayerMobile) { PlayerMobile pmFrom = (PlayerMobile)source; PlayerMobile pmTarg = (PlayerMobile)target; if (pmFrom.DuelContext != null && pmFrom.DuelContext.StartedBeginCountdown && !pmFrom.DuelContext.Finished && pmFrom.DuelContext == pmTarg.DuelContext) { return(pmFrom.DuelContext.IsAlly(pmFrom, pmTarg) ? Notoriety.Ally : Notoriety.Enemy); } } #endregion if (target.IsStaff()) { return(Notoriety.CanBeAttacked); } if (source.Player && !target.Player && source is PlayerMobile && target is BaseCreature) { BaseCreature bc = (BaseCreature)target; Mobile master = bc.GetMaster(); if (master != null && master.IsStaff()) { return(Notoriety.CanBeAttacked); } master = bc.ControlMaster; if (Core.ML && master != null) { if ((source == master && CheckAggressor(target.Aggressors, source)) || (CheckAggressor(source.Aggressors, bc))) { return(Notoriety.CanBeAttacked); } else { return(MobileNotoriety(source, master)); } } if (!bc.Summoned && !bc.Controlled && ((PlayerMobile)source).EnemyOfOneType == target.GetType()) { return(Notoriety.Enemy); } } if (target.Kills >= 5 || (target.Body.IsMonster && IsSummoned(target as BaseCreature) && !(target is BaseFamiliar) && !(target is ArcaneFey) && !(target is Golem)) || (target is BaseCreature && (((BaseCreature)target).AlwaysMurderer || ((BaseCreature)target).IsAnimatedDead))) { return(Notoriety.Murderer); } #region Mondain's Legacy if (target is Gregorio) { Gregorio gregorio = (Gregorio)target; if (Gregorio.IsMurderer(source)) { return(Notoriety.Murderer); } return(Notoriety.Innocent); } else if (source.Player && target is Engines.Quests.BaseEscort) { return(Notoriety.Innocent); } #endregion if (target.Criminal) { return(Notoriety.Criminal); } if (XmlPoints.AreTeamMembers(source, target)) { return(Notoriety.Ally); } else if (XmlPoints.AreChallengers(source, target)) { return(Notoriety.Enemy); } Guild sourceGuild = GetGuildFor(source.Guild as Guild, source); Guild targetGuild = GetGuildFor(target.Guild as Guild, target); if (sourceGuild != null && targetGuild != null) { if (sourceGuild == targetGuild || sourceGuild.IsAlly(targetGuild)) { return(Notoriety.Ally); } else if (sourceGuild.IsEnemy(targetGuild)) { return(Notoriety.Enemy); } } Faction srcFaction = Faction.Find(source, true, true); Faction trgFaction = Faction.Find(target, true, true); if (srcFaction != null && trgFaction != null && srcFaction != trgFaction && source.Map == Faction.Facet) { return(Notoriety.Enemy); } if (SkillHandlers.Stealing.ClassicMode && target is PlayerMobile && ((PlayerMobile)target).PermaFlags.Contains(source)) { return(Notoriety.CanBeAttacked); } if (target is BaseCreature && ((BaseCreature)target).AlwaysAttackable) { return(Notoriety.CanBeAttacked); } if (CheckHouseFlag(source, target, target.Location, target.Map)) { return(Notoriety.CanBeAttacked); } if (!(target is BaseCreature && ((BaseCreature)target).InitialInnocent)) //If Target is NOT A baseCreature, OR it's a BC and the BC is initial innocent... { if (!target.Body.IsHuman && !target.Body.IsGhost && !IsPet(target as BaseCreature) && !(target is PlayerMobile) || !Core.ML && !target.CanBeginAction(typeof(Server.Spells.Seventh.PolymorphSpell))) { return(Notoriety.CanBeAttacked); } } if (CheckAggressor(source.Aggressors, target)) { return(Notoriety.CanBeAttacked); } if (CheckAggressed(source.Aggressed, target)) { return(Notoriety.CanBeAttacked); } if (target is BaseCreature) { BaseCreature bc = (BaseCreature)target; if (bc.Controlled && bc.ControlOrder == OrderType.Guard && bc.ControlTarget == source) { return(Notoriety.CanBeAttacked); } } if (source is BaseCreature) { BaseCreature bc = (BaseCreature)source; Mobile master = bc.GetMaster(); if (master != null) { if (CheckAggressor(master.Aggressors, target) || MobileNotoriety(master, target) == Notoriety.CanBeAttacked || target is BaseCreature) { return(Notoriety.CanBeAttacked); } } } return(Notoriety.Innocent); }
public virtual bool Validate(Mobile m) { if (m == null || !m.Player || m.IsStaff() || Core.AOS) return true; Guild g = m.Guild as Guild; if (g == null || g.Type != GuildType.Chaos) { m.FixedEffect(0x3728, 10, 13); this.Delete(); return false; } return true; }
/*private static bool CheckHarmfulStatus( GuildStatus from, GuildStatus target ) * { * if ( from == GuildStatus.Waring && target == GuildStatus.Waring ) * return true; * * return false; * }*/ public static bool Mobile_AllowBeneficial(Mobile from, Mobile target) { if (from == null || target == null || from.IsStaff() || target.IsStaff()) { return(true); } #region Dueling PlayerMobile pmFrom = from as PlayerMobile; PlayerMobile pmTarg = target as PlayerMobile; if (pmFrom == null && from is BaseCreature) { BaseCreature bcFrom = (BaseCreature)from; if (bcFrom.Summoned) { pmFrom = bcFrom.SummonMaster as PlayerMobile; } } if (pmTarg == null && target is BaseCreature) { BaseCreature bcTarg = (BaseCreature)target; if (bcTarg.Summoned) { pmTarg = bcTarg.SummonMaster as PlayerMobile; } } if (pmFrom != null && pmTarg != null) { if (pmFrom.DuelContext != pmTarg.DuelContext && ((pmFrom.DuelContext != null && pmFrom.DuelContext.Started) || (pmTarg.DuelContext != null && pmTarg.DuelContext.Started))) { return(false); } if (pmFrom.DuelContext != null && pmFrom.DuelContext == pmTarg.DuelContext && ((pmFrom.DuelContext.StartedReadyCountdown && !pmFrom.DuelContext.Started) || pmFrom.DuelContext.Tied || pmFrom.DuelPlayer.Eliminated || pmTarg.DuelPlayer.Eliminated)) { return(false); } if (pmFrom.DuelPlayer != null && !pmFrom.DuelPlayer.Eliminated && pmFrom.DuelContext != null && pmFrom.DuelContext.IsSuddenDeath) { return(false); } if (pmFrom.DuelContext != null && pmFrom.DuelContext == pmTarg.DuelContext && pmFrom.DuelContext.m_Tournament != null && pmFrom.DuelContext.m_Tournament.IsNotoRestricted && pmFrom.DuelPlayer != null && pmTarg.DuelPlayer != null && pmFrom.DuelPlayer.Participant != pmTarg.DuelPlayer.Participant) { return(false); } if (pmFrom.DuelContext != null && pmFrom.DuelContext == pmTarg.DuelContext && pmFrom.DuelContext.Started) { return(true); } } if ((pmFrom != null && pmFrom.DuelContext != null && pmFrom.DuelContext.Started) || (pmTarg != null && pmTarg.DuelContext != null && pmTarg.DuelContext.Started)) { return(false); } Engines.ConPVP.SafeZone sz = from.Region.GetRegion(typeof(Engines.ConPVP.SafeZone)) as Engines.ConPVP.SafeZone; if (sz != null /*&& sz.IsDisabled()*/) { return(false); } sz = target.Region.GetRegion(typeof(Engines.ConPVP.SafeZone)) as Engines.ConPVP.SafeZone; if (sz != null /*&& sz.IsDisabled()*/) { return(false); } #endregion Map map = from.Map; #region Factions Faction targetFaction = Faction.Find(target, true); if ((!Core.ML || map == Faction.Facet) && targetFaction != null) { if (Faction.Find(from, true) != targetFaction) { return(false); } } #endregion #region Mondain's Legacy if (target is Gregorio) { return(false); } #endregion if (map != null && (map.Rules & MapRules.BeneficialRestrictions) == 0) { return(true); // In felucca, anything goes } if (!from.Player) { return(true); // NPCs have no restrictions } if (target is BaseCreature && !((BaseCreature)target).Controlled) { return(false); // Players cannot heal uncontrolled mobiles } if (XmlPoints.AreInAnyGame(target)) { return(XmlPoints.AreTeamMembers(from, target)); } if (from is PlayerMobile && ((PlayerMobile)from).Young && target is BaseCreature && ((BaseCreature)target).Controlled) { return(true); } if (from is PlayerMobile && ((PlayerMobile)from).Young && (!(target is PlayerMobile) || !((PlayerMobile)target).Young)) { return(false); // Young players cannot perform beneficial actions towards older players } Guild fromGuild = from.Guild as Guild; Guild targetGuild = target.Guild as Guild; if (fromGuild != null && targetGuild != null && (targetGuild == fromGuild || fromGuild.IsAlly(targetGuild))) { return(true); // Guild members can be beneficial } return(CheckBeneficialStatus(GetGuildStatus(from), GetGuildStatus(target))); }
public virtual void Open(Mobile from, bool checkSelfLoot) { if (from.IsStaff() || from.InRange(this.GetWorldLocation(), 2)) { #region Self Looting bool selfLoot = (checkSelfLoot && (from == m_Owner)); if (selfLoot) { List<Item> items = new List<Item>(this.Items); bool gathered = false; for (int k = 0; k < EquipItems.Count; ++k) { Item item2 = EquipItems[k]; if (!items.Contains(item2) && item2.IsChildOf(from.Backpack)) { items.Add(item2); gathered = true; } } bool didntFit = false; Container pack = from.Backpack; bool checkRobe = true; for (int i = 0; !didntFit && i < items.Count; ++i) { Item item = items[i]; Point3D loc = item.Location; if ((item.Layer == Layer.Hair || item.Layer == Layer.FacialHair) || !item.Movable) continue; if (checkRobe) { DeathRobe robe = from.FindItemOnLayer(Layer.OuterTorso) as DeathRobe; if (robe != null) { if (Core.SA) { robe.Delete(); } else { Map map = from.Map; if (map != null && map != Map.Internal) robe.MoveToWorld(from.Location, map); } } } if (m_EquipItems.Contains(item) && from.EquipItem(item)) { gathered = true; } else if (pack != null && pack.CheckHold(from, item, false, true)) { item.Location = loc; pack.AddItem(item); gathered = true; } else { didntFit = true; } } if (gathered && !didntFit) { SetFlag(CorpseFlag.Carved, true); if (ItemID == 0x2006) { ProcessDelta(); SendRemovePacket(); ItemID = Utility.Random(0xECA, 9); // bone graphic Hue = 0; ProcessDelta(); } from.PlaySound(0x3E3); from.SendLocalizedMessage(1062471); // You quickly gather all of your belongings. items.Clear(); m_EquipItems.Clear(); return; } if (gathered && didntFit) from.SendLocalizedMessage(1062472); // You gather some of your belongings. The rest remain on the corpse. } #endregion if (!this.CheckLoot(from, null)) return; #region Quests PlayerMobile player = from as PlayerMobile; if (player != null) { QuestSystem qs = player.Quest; if (qs is UzeraanTurmoilQuest) { GetDaemonBoneObjective obj = qs.FindObjective(typeof(GetDaemonBoneObjective)) as GetDaemonBoneObjective; if (obj != null && obj.CorpseWithBone == this && (!obj.Completed || UzeraanTurmoilQuest.HasLostDaemonBone(player))) { Item bone = new QuestDaemonBone(); if (player.PlaceInBackpack(bone)) { obj.CorpseWithBone = null; player.SendLocalizedMessage(1049341, "", 0x22); // You rummage through the bones and find a Daemon Bone! You quickly place the item in your pack. if (!obj.Completed) obj.Complete(); } else { bone.Delete(); player.SendLocalizedMessage(1049342, "", 0x22); // Rummaging through the bones you find a Daemon Bone, but can't pick it up because your pack is too full. Come back when you have more room in your pack. } return; } } else if (qs is TheSummoningQuest) { VanquishDaemonObjective obj = qs.FindObjective(typeof(VanquishDaemonObjective)) as VanquishDaemonObjective; if (obj != null && obj.Completed && obj.CorpseWithSkull == this) { GoldenSkull sk = new GoldenSkull(); if (player.PlaceInBackpack(sk)) { obj.CorpseWithSkull = null; player.SendLocalizedMessage(1050022); // For your valor in combating the devourer, you have been awarded a golden skull. qs.Complete(); } else { sk.Delete(); player.SendLocalizedMessage(1050023); // You find a golden skull, but your backpack is too full to carry it. } } } } #endregion base.OnDoubleClick(from); } else { from.SendLocalizedMessage(500446); // That is too far away. return; } }
public override void OnResponse(NetState sender, RelayInfo info) { int page = m_Page; Mobile from = m_From; BaseHouse house = m_House; BasePlayerBB board = m_Board; if (!board.CheckUse(house, from)) { from.SendLocalizedMessage(1062396); // This bulletin board must be locked down in a house to be usable. return; } else if (!from.InRange(board.GetWorldLocation(), 2) || !from.InLOS(board)) { from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that. return; } else if (!board.CheckAccess(house, from)) { from.SendLocalizedMessage(1062398); // You are not allowed to post to this bulletin board. return; } switch (info.ButtonID) { case 1: // Post message { from.Prompt = new BasePlayerBB.PostPrompt(page, house, board, false); from.SendLocalizedMessage(1062397); // Please enter your message: break; } case 2: // Set title { if (board.CanPostGreeting(house, from)) { from.Prompt = new BasePlayerBB.SetTitlePrompt(page, house, board); from.SendLocalizedMessage(1062402); // Enter new title: } break; } case 3: // Post greeting { if (board.CanPostGreeting(house, from)) { from.Prompt = new BasePlayerBB.PostPrompt(page, house, board, true); from.SendLocalizedMessage(1062404); // Enter new greeting (this will always be the first post): } break; } case 4: // Scroll up { if (page == 0) { page = board.Messages.Count; } else { page -= 1; } from.SendGump(new PlayerBBGump(from, house, board, page)); break; } case 5: // Scroll down { page += 1; page %= board.Messages.Count + 1; from.SendGump(new PlayerBBGump(from, house, board, page)); break; } case 6: // Banish poster { if (house != null && house.IsOwner(from)) { if (page >= 1 && page <= board.Messages.Count) { PlayerBBMessage message = board.Messages[page - 1]; Mobile poster = message.Poster; if (poster == null) { from.SendGump(new PlayerBBGump(from, house, board, page)); return; } if (poster.IsStaff() && from.AccessLevel <= poster.AccessLevel) { from.SendLocalizedMessage(501354); // Uh oh...a bigger boot may be required. } else if (house.IsFriend(poster)) { from.SendLocalizedMessage(1060750); // That person is a friend, co-owner, or owner of this house, and therefore cannot be banished! } else if (poster is PlayerVendor) { from.SendLocalizedMessage(501351); // You cannot eject a vendor. } else if (house.Bans.Count >= BaseHouse.MaxBans) { from.SendLocalizedMessage(501355); // The ban limit for this house has been reached! } else if (house.IsBanned(poster)) { from.SendLocalizedMessage(501356); // This person is already banned! } else if (poster is BaseCreature && ((BaseCreature)poster).NoHouseRestrictions) { from.SendLocalizedMessage(1062040); // You cannot ban that. } else { if (!house.Bans.Contains(poster)) { house.Bans.Add(poster); } from.SendLocalizedMessage(1062417); // That person has been banned from this house. if (house.IsInside(poster) && !board.CheckAccess(house, poster)) { poster.MoveToWorld(house.BanLocation, house.Map); } } } from.SendGump(new PlayerBBGump(from, house, board, page)); } break; } case 7: // Delete message { if (board.CanPostGreeting(house, from)) { if (page >= 1 && page <= board.Messages.Count) { board.Messages.RemoveAt(page - 1); } from.SendGump(new PlayerBBGump(from, house, board, 0)); } break; } case 8: // Post props { if (from.AccessLevel >= AccessLevel.GameMaster) { PlayerBBMessage message = board.Greeting; if (page >= 1 && page <= board.Messages.Count) { message = board.Messages[page - 1]; } from.SendGump(new PlayerBBGump(from, house, board, page)); from.SendGump(new PropertiesGump(from, message)); } break; } } }
public override void OnDoubleClick(Mobile from) { if (from.IsStaff() || from.InRange(this.GetWorldLocation(), 2) || this.RootParent is PlayerVendor) this.Open(from); else from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that. }
public override void OnMovement(Mobile m, Point3D oldLocation) { if (m_NextSpawn < DateTime.UtcNow) // means we haven't spawned anything if the next spawn is below { if (Utility.InRange(m.Location, Location, 1) && !Utility.InRange(oldLocation, Location, 1) && m.Player && !(m.IsStaff() || m.Hidden)) { if (m_Timer == null || !m_Timer.Running) { m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(2), HeedWarning); } } } base.OnMovement(m, oldLocation); }
protected override void OnTarget(Mobile from, object targeted) { if (targeted is Mobile) { Mobile targ = (Mobile)targeted; if (from != targ) from.SendMessage("You may only set your own body to GM style."); else { m_Mobile = from; CommandLogging.WriteLine(from, "{0} {1} is assuming a GM body", from.AccessLevel, CommandLogging.Format(from)); Container pack = from.Backpack; ArrayList ItemsToDelete = new ArrayList(); foreach (Item item in from.Items) { if (item.Layer != Layer.Bank && item.Layer != Layer.Hair && item.Layer != Layer.FacialHair && item.Layer != Layer.Mount && item.Layer != Layer.Backpack) { ItemsToDelete.Add(item); } } foreach (Item item in ItemsToDelete) item.Delete(); if (pack == null) { pack = new Backpack(); pack.Movable = false; from.AddItem(pack); } else { pack.Delete(); pack = new Backpack(); pack.Movable = false; from.AddItem(pack); } from.Hunger = 20; from.Thirst = 20; from.Fame = 0; from.Karma = 0; from.Kills = 0; from.Hidden = true; from.Blessed = true; from.Hits = from.HitsMax; from.Mana = from.ManaMax; from.Stam = from.StamMax; if (from.IsStaff()) { EquipItem(new StaffRing()); EquipItem(new StaffRobe()); PackItem(new GMHidingStone()); PackItem(new GMEthereal()); PackItem(new StaffOrb(from)); PackItem(new Spellbook((ulong)18446744073709551615)); PackItem(new NecromancerSpellbook((ulong)0xffff)); PackItem(new BookOfChivalry()); PackItem(new BookOfBushido()); PackItem(new SpellweavingBook((ulong)0xffff)); from.RawStr = 100; from.RawDex = 100; from.RawInt = 100; from.Hits = from.HitsMax; from.Mana = from.ManaMax; from.Stam = from.StamMax; for (int i = 0; i < targ.Skills.Length; ++i) targ.Skills[i].Base = 120; } if (from.IsStaff() && from.AccessLevel <= AccessLevel.Spawner) EquipItem(new FurBoots(3)); else if (from.AccessLevel == AccessLevel.GameMaster) EquipItem(new FurBoots(39)); if (from.AccessLevel == AccessLevel.Seer) EquipItem(new FurBoots(467)); if (from.AccessLevel == AccessLevel.Administrator) EquipItem(new FurBoots(1001)); if (from.AccessLevel == AccessLevel.Developer) EquipItem(new FurBoots(1001)); if (from.AccessLevel >= AccessLevel.CoOwner) EquipItem(new FurBoots(1001)); } } }
public void CompleteCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CustomCraft customCraft) { int badCraft = craftSystem.CanCraft(from, tool, m_Type); if (badCraft > 0) { if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) { from.SendGump(new CraftGump(from, craftSystem, tool, badCraft)); } else { from.SendLocalizedMessage(badCraft); } AutoCraftTimer.EndTimer(from); return; } int checkResHue = 0, checkMaxAmount = 0; object checkMessage = null; // Not enough resource to craft it if (!ConsumeRes(from, typeRes, craftSystem, ref checkResHue, ref checkMaxAmount, ConsumeType.None, ref checkMessage)) { if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) { from.SendGump(new CraftGump(from, craftSystem, tool, checkMessage)); } else if (checkMessage is int && (int)checkMessage > 0) { from.SendLocalizedMessage((int)checkMessage); } else if (checkMessage is string) { from.SendMessage((string)checkMessage); } AutoCraftTimer.EndTimer(from); return; } else if (!ConsumeAttributes(from, ref checkMessage, false)) { if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) { from.SendGump(new CraftGump(from, craftSystem, tool, checkMessage)); } else if (checkMessage is int && (int)checkMessage > 0) { from.SendLocalizedMessage((int)checkMessage); } else if (checkMessage is string) { from.SendMessage((string)checkMessage); } AutoCraftTimer.EndTimer(from); return; } bool toolBroken = false; int ignored = 1; int endquality = 1; bool allRequiredSkills = true; if (CheckSkills(from, typeRes, craftSystem, ref ignored, ref allRequiredSkills)) { // Resource int resHue = 0; int maxAmount = 0; object message = null; // Not enough resource to craft it if (!ConsumeRes(from, typeRes, craftSystem, ref resHue, ref maxAmount, ConsumeType.All, ref message)) { if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) { from.SendGump(new CraftGump(from, craftSystem, tool, message)); } else if (message is int && (int)message > 0) { from.SendLocalizedMessage((int)message); } else if (message is string) { from.SendMessage((string)message); } AutoCraftTimer.EndTimer(from); return; } else if (!ConsumeAttributes(from, ref message, true)) { if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) { from.SendGump(new CraftGump(from, craftSystem, tool, message)); } else if (message is int && (int)message > 0) { from.SendLocalizedMessage((int)message); } else if (message is string) { from.SendMessage((string)message); } AutoCraftTimer.EndTimer(from); return; } tool.UsesRemaining--; if (craftSystem is DefBlacksmithy) { AncientSmithyHammer hammer = from.FindItemOnLayer(Layer.OneHanded) as AncientSmithyHammer; if (hammer != null && hammer != tool) { #region Mondain's Legacy if (hammer is HammerOfHephaestus) { if (hammer.UsesRemaining > 0) { hammer.UsesRemaining--; } if (hammer.UsesRemaining < 1) { from.PlaceInBackpack(hammer); } } else { hammer.UsesRemaining--; if (hammer.UsesRemaining < 1) { hammer.Delete(); } } #endregion } } #region Mondain's Legacy if (tool is HammerOfHephaestus) { if (tool.UsesRemaining < 1) { tool.UsesRemaining = 0; } } else { if (tool.UsesRemaining < 1) { toolBroken = true; } if (toolBroken) { tool.Delete(); } } #endregion int num = 0; Item item; if (customCraft != null) { item = customCraft.CompleteCraft(out num); } else if (typeof(MapItem).IsAssignableFrom(ItemType) && from.Map != Map.Trammel && from.Map != Map.Felucca) { item = new IndecipherableMap(); from.SendLocalizedMessage(1070800); // The map you create becomes mysteriously indecipherable. } else { item = Activator.CreateInstance(ItemType) as Item; } if (item != null) { #region Mondain's Legacy if (item is Board) { Type resourceType = typeRes; if (resourceType == null) { resourceType = Resources.GetAt(0).ItemType; } CraftResource thisResource = CraftResources.GetFromType(resourceType); switch (thisResource) { case CraftResource.OakWood: item = new OakBoard(); break; case CraftResource.AshWood: item = new AshBoard(); break; case CraftResource.YewWood: item = new YewBoard(); break; case CraftResource.Heartwood: item = new HeartwoodBoard(); break; case CraftResource.Bloodwood: item = new BloodwoodBoard(); break; case CraftResource.Frostwood: item = new FrostwoodBoard(); break; default: item = new Board(); break; } } #endregion if (item is ICraftable) { endquality = ((ICraftable)item).OnCraft(quality, makersMark, from, craftSystem, typeRes, tool, this, resHue); } else if (item is Food) { ((Food)item).PlayerConstructed = true; } else if (item.Hue == 0) { item.Hue = resHue; } if (maxAmount > 0) { if (!item.Stackable && item is IUsesRemaining) { ((IUsesRemaining)item).UsesRemaining *= maxAmount; } else { item.Amount = maxAmount; } } #region Plant Pigments if (item is PlantPigment && (craftSystem is DefAlchemy || craftSystem is DefCooking)) { ((PlantPigment)item).PigmentHue = PlantPigmentHueInfo.HueFromPlantHue(m_PlantHue); } if (item is NaturalDye && (craftSystem is DefAlchemy || craftSystem is DefCooking)) { ((NaturalDye)item).PigmentHue = PlantPigmentHueInfo.GetInfo(m_PlantPigmentHue).PlantPigmentHue; } if (item is SoftenedReeds && (craftSystem is DefAlchemy || craftSystem is DefCooking)) { ((SoftenedReeds)item).PlantHue = PlantHueInfo.GetInfo(m_PlantHue).PlantHue; } if (item is BaseContainer && (craftSystem is DefBasketweaving)) { (item).Hue = PlantHueInfo.GetInfo(m_PlantHue).Hue; } CraftContext context = craftSystem.GetContext(from); if (context.QuestOption == CraftQuestOption.QuestItem) { PlayerMobile px = from as PlayerMobile; if (!QuestHelper.CheckItem(px, item)) from.SendLocalizedMessage(1072355, null, 0x23); // That item does not match any of your quest criteria } #endregion if (tool.Parent is Container) { Container cntnr = (Container) tool.Parent; cntnr.TryDropItem(from, item, false); } else { from.AddToBackpack(item); } EventSink.InvokeCraftSuccess(new CraftSuccessEventArgs(from, item, tool)); if (from.IsStaff()) { CommandLogging.WriteLine( from, "Crafting {0} with craft system {1}", CommandLogging.Format(item), craftSystem.GetType().Name); } AutoCraftTimer.OnSuccessfulCraft(from); //from.PlaySound( 0x57 ); } if (num == 0) { num = craftSystem.PlayEndingEffect(from, false, true, toolBroken, endquality, makersMark, this); } bool queryFactionImbue = false; int availableSilver = 0; FactionItemDefinition def = null; Faction faction = null; if (item is IFactionItem) { def = FactionItemDefinition.Identify(item); if (def != null) { faction = Faction.Find(from); if (faction != null) { Town town = Town.FromRegion(from.Region); if (town != null && town.Owner == faction) { Container pack = from.Backpack; if (pack != null) { availableSilver = pack.GetAmount(typeof(Silver)); if (availableSilver >= def.SilverCost) { queryFactionImbue = Faction.IsNearType(from, def.VendorType, 12); } } } } } } // TODO: Scroll imbuing if (queryFactionImbue) { from.SendGump(new FactionImbueGump(quality, item, from, craftSystem, tool, num, availableSilver, faction, def)); } else if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) { from.SendGump(new CraftGump(from, craftSystem, tool, num)); } else if (num > 0) { from.SendLocalizedMessage(num); } } else if (!allRequiredSkills) { if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) { from.SendGump(new CraftGump(from, craftSystem, tool, 1044153)); } else { from.SendLocalizedMessage(1044153); // You don't have the required skills to attempt this item. } AutoCraftTimer.EndTimer(from); } else { ConsumeType consumeType = (UseAllRes ? ConsumeType.Half : ConsumeType.All); int resHue = 0; int maxAmount = 0; object message = null; // Not enough resource to craft it if (!ConsumeRes(from, typeRes, craftSystem, ref resHue, ref maxAmount, consumeType, ref message, true)) { if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) { from.SendGump(new CraftGump(from, craftSystem, tool, message)); } else if (message is int && (int)message > 0) { from.SendLocalizedMessage((int)message); } else if (message is string) { from.SendMessage((string)message); } AutoCraftTimer.EndTimer(from); return; } tool.UsesRemaining--; if (tool.UsesRemaining < 1) { toolBroken = true; } if (toolBroken) { tool.Delete(); } // SkillCheck failed. int num = craftSystem.PlayEndingEffect(from, true, true, toolBroken, endquality, false, this); if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) { from.SendGump(new CraftGump(from, craftSystem, tool, num)); } else if (num > 0) { from.SendLocalizedMessage(num); } } }