Ejemplo n.º 1
0
 /// <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);
         }
     }
 }
Ejemplo n.º 2
0
 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();
 }
Ejemplo n.º 3
0
		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();
		}
Ejemplo n.º 4
0
		/// <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);
			}
		}
Ejemplo n.º 5
0
		/// <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);
			}
		}
Ejemplo n.º 6
0
		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();
		}
Ejemplo n.º 7
0
 public PadArea(GameRelicPad parentPad)
     : base("", parentPad.Position, PAD_AREA_RADIUS)
 {
     m_parent = parentPad;
 }
Ejemplo n.º 8
0
 public PadArea(GameRelicPad parentPad)
     : base("", parentPad.X, parentPad.Y, parentPad.Z, PAD_AREA_RADIUS)
 {
     m_parent = parentPad;
 }
Ejemplo n.º 9
0
        /// <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);
            }
        }
Ejemplo n.º 10
0
 public PadArea(GameRelicPad parentPad)
     : base("", parentPad.X, parentPad.Y, parentPad.Z, PAD_AREA_RADIUS)
 {
     m_parent = parentPad;
 }
Ejemplo n.º 11
0
        /// <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);
        }
Ejemplo n.º 12
0
 public PadArea(GameRelicPad parentPad)
     : base(string.Empty, parentPad.X, parentPad.Y, parentPad.Z, PAD_AREA_RADIUS)
 {
     m_parent = parentPad;
 }