/// <summary> /// This is called when the GameRelicPads are added to world /// </summary> /// <param name="pad"></param> public static void AddRelicPad(GameRelicPad pad) { lock (m_relicPads.SyncRoot) { if (!m_relicPads.Contains(pad)) { m_relicPads.Add(pad); } } }
public virtual void RelicPadTakesOver(GameRelicPad pad, bool returning) { m_currentRelicPad = pad; Realm = pad.Realm; LastRealm = pad.Realm; pad.MountRelic(this, returning); CurrentRegionID = pad.CurrentRegionID; PlayerLoosesRelic(true); Position = pad.Position; Heading = pad.Heading; SaveIntoDatabase(); AddToWorld(); }
public void OnCommand(GameClient client, string[] args) { if (args.Length != 4 || (args[1] != "magic" && args[1] != "strength")) { DisplaySyntax(client); return; } ushort emblem = ushort.Parse(args[3]); emblem += (ushort)((args[1] == "magic") ? 10 : 0); GameRelicPad pad = new GameRelicPad(); pad.Name = args[2]; pad.Realm = (eRealm)byte.Parse(args[3]); pad.Emblem = emblem; pad.CurrentRegionID = client.Player.CurrentRegionID; pad.X = client.Player.X; pad.Y = client.Player.Y; pad.Z = client.Player.Z; pad.Heading = client.Player.Heading; pad.AddToWorld(); pad.SaveIntoDatabase(); }
/// <summary> /// This is called when the GameRelicPads are added to world /// </summary> /// <param name="pad"></param> public static void AddRelicPad(GameRelicPad pad) { lock (m_relicPads.SyncRoot) { if (!m_relicPads.Contains(pad)) m_relicPads.Add(pad); } }
/// <summary> /// This method is called from the Interaction with the GameStaticItem /// </summary> /// <param name="player"></param> protected virtual void PlayerTakesRelic(GamePlayer player) { if (player.TempProperties.getProperty<object>(PLAYER_CARRY_RELIC_WEAK, null) != null) { player.Out.SendMessage("You are already carrying a relic.", eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (player.IsStealthed) { player.Out.SendMessage("You cannot carry a relic while stealthed.", eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (!player.IsAlive) { player.Out.SendMessage("You are dead!", eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (IsMounted) { AbstractGameKeep keep = GameServer.KeepManager.GetKeepCloseToSpot(m_currentRelicPad.CurrentRegionID, m_currentRelicPad, WorldMgr.VISIBILITY_DISTANCE); log.DebugFormat("keep {0}", keep); if (keep != null && keep.Realm != player.Realm) { player.Out.SendMessage("You must capture this keep before taking a relic.", eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } } if (player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, m_item)) { if (m_item == null) log.Warn("GameRelic: Could not retrive " + Name + " as InventoryItem on player " + player.Name); InventoryLogging.LogInventoryAction(this, player, eInventoryActionType.Other, m_item.Template, m_item.Count); m_currentCarrier = player; player.TempProperties.setProperty(PLAYER_CARRY_RELIC_WEAK, this); player.Out.SendUpdateMaxSpeed(); if (IsMounted) { m_currentRelicPad.RemoveRelic(this); ReturnRelicPad = m_currentRelicPad; LastRealm = m_currentRelicPad.Realm; // save who owned this in case of server restart while relic is off pad m_currentRelicPad = null; } RemoveFromWorld(); SaveIntoDatabase(); Realm = 0; SetHandlers(player, true); StartPlayerTimer(player); if (m_returnRelicTimer != null) { m_returnRelicTimer.Stop(); m_returnRelicTimer = null; } } else { player.Out.SendMessage("You dont have enough space in your backpack to carry this.", eChatType.CT_System, eChatLoc.CL_SystemWindow); } }
public virtual void RelicPadTakesOver(GameRelicPad pad, bool returning) { m_currentRelicPad = pad; Realm = pad.Realm; LastRealm = pad.Realm; pad.MountRelic(this, returning); CurrentRegionID = pad.CurrentRegionID; PlayerLoosesRelic(true); X = pad.X; Y = pad.Y; Z = pad.Z; Heading = pad.Heading; SaveIntoDatabase(); AddToWorld(); }
public PadArea(GameRelicPad parentPad) : base("", parentPad.Position, PAD_AREA_RADIUS) { m_parent = parentPad; }
public PadArea(GameRelicPad parentPad) : base("", parentPad.X, parentPad.Y, parentPad.Z, PAD_AREA_RADIUS) { m_parent = parentPad; }
/// <summary> /// This method is called from the Interaction with the GameStaticItem /// </summary> /// <param name="player"></param> protected virtual void PlayerTakesRelic(GamePlayer player) { if (player.TempProperties.getProperty <object>(PLAYER_CARRY_RELIC_WEAK, null) != null) { player.Out.SendMessage("You are already carrying a relic.", eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (player.IsStealthed) { player.Out.SendMessage("You cannot carry a relic while stealthed.", eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (!player.IsAlive) { player.Out.SendMessage("You are dead!", eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (IsMounted) { AbstractGameKeep keep = GameServer.KeepManager.GetKeepCloseToSpot(m_currentRelicPad.CurrentRegionID, m_currentRelicPad, WorldMgr.VISIBILITY_DISTANCE); log.DebugFormat("keep {0}", keep); if (keep != null && keep.Realm != player.Realm) { player.Out.SendMessage("You must capture this keep before taking a relic.", eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } } if (player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, m_item)) { if (m_item == null) { log.Warn("GameRelic: Could not retrive " + Name + " as InventoryItem on player " + player.Name); } InventoryLogging.LogInventoryAction(this, player, eInventoryActionType.Other, m_item.Template, m_item.Count); m_currentCarrier = player; player.TempProperties.setProperty(PLAYER_CARRY_RELIC_WEAK, this); player.Out.SendUpdateMaxSpeed(); if (IsMounted) { m_currentRelicPad.RemoveRelic(this); ReturnRelicPad = m_currentRelicPad; LastRealm = m_currentRelicPad.Realm; // save who owned this in case of server restart while relic is off pad m_currentRelicPad = null; } RemoveFromWorld(); SaveIntoDatabase(); Realm = 0; SetHandlers(player, true); StartPlayerTimer(player); if (m_returnRelicTimer != null) { m_returnRelicTimer.Stop(); m_returnRelicTimer = null; } } else { player.Out.SendMessage("You dont have enough space in your backpack to carry this.", eChatType.CT_System, eChatLoc.CL_SystemWindow); } }
/// <summary> /// load all relics from DB /// </summary> /// <returns></returns> public static bool Init() { lock (m_relics.SyncRoot) { //at first remove all relics foreach (GameRelic rel in m_relics.Values) { rel.SaveIntoDatabase(); rel.RemoveFromWorld(); } //then clear the hashtable m_relics.Clear(); //then we remove all relics from the pads foreach (GameRelicPad pad in m_relicPads) { pad.RemoveRelic(); } // if relics are on the ground during init we will return them to their owners List <GameRelic> lostRelics = new List <GameRelic>(); var relics = GameServer.Database.SelectAllObjects <DBRelic>(); foreach (DBRelic datarelic in relics) { if (datarelic.relicType < 0 || datarelic.relicType > 1 || datarelic.OriginalRealm < 1 || datarelic.OriginalRealm > 3) { log.Warn("DBRelic: Could not load " + datarelic.RelicID + ": Realm or Type missmatch."); continue; } if (WorldMgr.GetRegion((ushort)datarelic.Region) == null) { log.Warn("DBRelic: Could not load " + datarelic.RelicID + ": Region missmatch."); continue; } GameRelic relic = new GameRelic(datarelic); m_relics.Add(datarelic.RelicID, relic); relic.AddToWorld(); GameRelicPad pad = GetPadAtRelicLocation(relic); if (pad != null) { if (relic.RelicType == pad.PadType) { relic.RelicPadTakesOver(pad, true); log.Debug("DBRelic: " + relic.Name + " has been loaded and added to pad " + pad.Name + "."); } } else { lostRelics.Add(relic); } } foreach (GameRelic lostRelic in lostRelics) { eRealm returnRealm = (eRealm)lostRelic.LastRealm; if (returnRealm == eRealm.None) { returnRealm = lostRelic.OriginalRealm; } // ok, now we have a realm to return the relic too, lets find a pad foreach (GameRelicPad pad in m_relicPads) { if (pad.MountedRelic == null && pad.Realm == returnRealm && pad.PadType == lostRelic.RelicType) { lostRelic.RelicPadTakesOver(pad, true); log.Debug("Lost Relic: " + lostRelic.Name + " has returned to last pad: " + pad.Name + "."); } } } // Final cleanup. If any relic is still unmounted then mount the damn thing to any empty pad foreach (GameRelic lostRelic in lostRelics) { if (lostRelic.CurrentRelicPad == null) { foreach (GameRelicPad pad in m_relicPads) { if (pad.MountedRelic == null && pad.PadType == lostRelic.RelicType) { lostRelic.RelicPadTakesOver(pad, true); log.Debug("Lost Relic: " + lostRelic.Name + " auto assigned to pad: " + pad.Name + "."); } } } } } log.Debug(m_relicPads.Count + " relicpads" + ((m_relicPads.Count > 1) ? "s were" : " was") + " loaded."); log.Debug(m_relics.Count + " relic" + ((m_relics.Count > 1) ? "s were" : " was") + " loaded."); return(true); }
public PadArea(GameRelicPad parentPad) : base(string.Empty, parentPad.X, parentPad.Y, parentPad.Z, PAD_AREA_RADIUS) { m_parent = parentPad; }