Esempio n. 1
0
        protected int Proceed(RegionTimer timer)
        {
            GamePlayer player = (GamePlayer)timer.Properties.getProperty <object>("repair_player", null);
            GameLiving obj    = (GameLiving)timer.Properties.getProperty <object>("repair_target", null);

            if (player == null || obj == null)
            {
                if (log.IsWarnEnabled)
                {
                    log.Warn("There was a problem getting back the target or player in door/component repair!");
                }
                return(0);
            }

            player.CraftTimer.Stop();
            player.Out.SendCloseTimerWindow();

            if (!PreFireChecks(player, obj))
            {
                return(0);
            }

            if (Util.ChanceDouble(CalculateRepairChance(player, obj)))
            {
                int start = obj.HealthPercent;
                if (obj is GameKeepDoor)
                {
                    GameKeepDoor door = obj as GameKeepDoor;
                    door.Repair((int)(door.MaxHealth * 0.15));
                }
                if (obj is GameKeepComponent)
                {
                    GameKeepComponent component = obj as GameKeepComponent;
                    component.Repair((int)(component.MaxHealth * 0.15));
                }
                if (obj is GameSiegeWeapon)
                {
                    GameSiegeWeapon weapon = obj as GameSiegeWeapon;
                    weapon.Repair();
                }
                int finish = obj.HealthPercent;
                CalculatePlayersWood(player, (GetTotalWoodForLevel(obj.Level + 1)));
                DisplayMessage(player, "You successfully repair the component by 15%!");

                /*
                 * - Realm points will now be awarded for successfully repairing a door or outpost piece.
                 * Players will receive approximately 10% of the amount repaired in realm points.
                 * (Note that realm points for repairing a door or outpost piece will not work in the battlegrounds.)
                 */
                // tolakram - we have no idea how many hit points a live door has so this code is not accurate
                int amount = (finish - start) * obj.Level;                  // level of non claimed keep is 4
                player.GainRealmPoints(Math.Min(150, amount));
            }
            else
            {
                DisplayMessage(player, "You fail to repair the component!");
            }

            return(0);
        }
Esempio n. 2
0
 /// <summary>
 /// new siege weapon animation packet 1.110
 /// </summary>
 public override void SendSiegeWeaponAnimation(GameSiegeWeapon siegeWeapon)
 {
     if (siegeWeapon == null)
     {
         return;
     }
     using (var pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.SiegeWeaponAnimation)))
     {
         pak.WriteInt((uint)siegeWeapon.ObjectID);
         pak.WriteInt(
             (uint)
             (siegeWeapon.TargetObject == null
              ? (siegeWeapon.GroundTarget == null ? 0 : siegeWeapon.GroundTarget.X)
              : siegeWeapon.TargetObject.X));
         pak.WriteInt(
             (uint)
             (siegeWeapon.TargetObject == null
              ? (siegeWeapon.GroundTarget == null ? 0 : siegeWeapon.GroundTarget.Y)
              : siegeWeapon.TargetObject.Y));
         pak.WriteInt(
             (uint)
             (siegeWeapon.TargetObject == null
              ? (siegeWeapon.GroundTarget == null ? 0 : siegeWeapon.GroundTarget.Z)
              : siegeWeapon.TargetObject.Z));
         pak.WriteInt((uint)(siegeWeapon.TargetObject == null ? 0 : siegeWeapon.TargetObject.ObjectID));
         pak.WriteShort(siegeWeapon.Effect);
         pak.WriteShort((ushort)(siegeWeapon.SiegeWeaponTimer.TimeUntilElapsed)); // timer is no longer ( value / 100 )
         pak.WriteByte((byte)siegeWeapon.SiegeWeaponTimer.CurrentAction);
         pak.Fill(0, 3);                                                          // TODO : these bytes change depending on siege weapon action, to implement when different ammo types available.
         SendTCP(pak);
     }
 }
Esempio n. 3
0
 public override void DamageTarget(AttackData ad, bool showEffectAnimation, int attackResult)
 {
     if (Caster is GameSiegeWeapon)
     {
         GameSiegeWeapon siege = (Caster as GameSiegeWeapon);
         if (siege.Owner != null)
         {
             ad.Attacker = siege.Owner;
         }
     }
     base.DamageTarget(ad, showEffectAnimation, attackResult);
 }
Esempio n. 4
0
        public void OnCommand(GameClient client, string[] args)
        {
            if (IsSpammingCommand(client.Player, "repair"))
            {
                return;
            }

            WorldInventoryItem item = client.Player.TargetObject as WorldInventoryItem;

            if (item != null)
            {
                client.Player.RepairItem(item.Item);
                return;
            }

            GameKeepDoor door = client.Player.TargetObject as GameKeepDoor;

            if (door != null)
            {
                if (!PreFireChecks(client.Player, door))
                {
                    return;
                }

                StartRepair(client.Player, door);
            }

            GameKeepComponent component = client.Player.TargetObject as GameKeepComponent;

            if (component != null)
            {
                if (!PreFireChecks(client.Player, component))
                {
                    return;
                }

                StartRepair(client.Player, component);
            }

            GameSiegeWeapon weapon = client.Player.TargetObject as GameSiegeWeapon;

            if (weapon != null)
            {
                if (!PreFireChecks(client.Player, weapon))
                {
                    return;
                }

                StartRepair(client.Player, weapon);
            }
        }
Esempio n. 5
0
 /// <summary>
 /// new siege weapon fireanimation 1.110 // patch 0021
 /// </summary>
 /// <param name="siegeWeapon">The siege weapon</param>
 /// <param name="timer">How long the animation lasts for</param>
 public override void SendSiegeWeaponFireAnimation(GameSiegeWeapon siegeWeapon, int timer)
 {
     if (siegeWeapon == null)
     {
         return;
     }
     using (var pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.SiegeWeaponAnimation)))
     {
         pak.WriteInt((uint)siegeWeapon.ObjectID);
         pak.WriteInt((uint)(siegeWeapon.TargetObject == null ? siegeWeapon.GroundTarget.X : siegeWeapon.TargetObject.X));
         pak.WriteInt((uint)(siegeWeapon.TargetObject == null ? siegeWeapon.GroundTarget.Y : siegeWeapon.TargetObject.Y));
         pak.WriteInt((uint)(siegeWeapon.TargetObject == null ? siegeWeapon.GroundTarget.Z + 50 : siegeWeapon.TargetObject.Z + 50));
         pak.WriteInt((uint)(siegeWeapon.TargetObject == null ? 0 : siegeWeapon.TargetObject.ObjectID));
         pak.WriteShort(siegeWeapon.Effect);
         pak.WriteShort((ushort)(timer));     // timer is no longer ( value / 100 )
         pak.WriteByte((byte)SiegeTimer.eAction.Fire);
         pak.WriteShort(0xE134);              // default ammo type, the only type currently supported on DOL
         pak.WriteByte(0x08);                 // always this flag when firing
         SendTCP(pak);
     }
 }
Esempio n. 6
0
        public override void SendDamageMessages(AttackData ad)
        {
            string modmessage = "";

            if (ad.Modifier > 0)
            {
                modmessage = " (+" + ad.Modifier + ")";
            }
            if (ad.Modifier < 0)
            {
                modmessage = " (" + ad.Modifier + ")";
            }

            if (Caster is GameSiegeWeapon)
            {
                GameSiegeWeapon siege = (Caster as GameSiegeWeapon);
                if (siege.Owner != null)
                {
                    siege.Owner.Out.SendMessage(string.Format("You hit {0} for {1}{2} damage!", ad.Target.GetName(0, false), ad.Damage, modmessage), eChatType.CT_YouHit, eChatLoc.CL_SystemWindow);
                }
            }
        }
Esempio n. 7
0
		public override void SendSiegeWeaponInterface(GameSiegeWeapon siegeWeapon, int time)
		{
			using (GSTCPPacketOut pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.SiegeWeaponInterface)))
			{
				ushort flag = (ushort)((siegeWeapon.EnableToMove ? 1 : 0) | siegeWeapon.AmmoType << 8);
				pak.WriteShort(flag); //byte Ammo,  byte SiegeMoving(1/0)
				pak.WriteByte(0);
				pak.WriteByte(0); // Close interface(1/0)
				pak.WriteByte((byte)(time));//time in 100ms
				pak.WriteByte((byte)siegeWeapon.Ammo.Count); // external ammo count
				pak.WriteByte((byte)siegeWeapon.SiegeWeaponTimer.CurrentAction);
				pak.WriteByte((byte)siegeWeapon.AmmoSlot);
				pak.WriteShort(siegeWeapon.Effect);
				pak.WriteShort(0); // SiegeHelperTimer ?
				pak.WriteShort(0); // SiegeTimer ?
				pak.WriteShort((ushort)siegeWeapon.ObjectID);
	
	            string name = siegeWeapon.Name;
	
	            LanguageDataObject translation = LanguageMgr.GetTranslation(m_gameClient, siegeWeapon);
	            if (translation != null)
	            {
	                if (!Util.IsEmpty(((DBLanguageNPC)translation).Name))
	                    name = ((DBLanguageNPC)translation).Name;
	            }
	
	            pak.WritePascalString(name + " (" + siegeWeapon.CurrentState.ToString() + ")");
				foreach (InventoryItem item in siegeWeapon.Ammo)
				{
					pak.WriteByte((byte)item.SlotPosition);
					if (item == null)
					{
						pak.Fill(0x00, 18);
						continue;
					}
					pak.WriteByte((byte)item.Level);
					pak.WriteByte((byte)item.DPS_AF);
					pak.WriteByte((byte)item.SPD_ABS);
					pak.WriteByte((byte)(item.Hand * 64));
					pak.WriteByte((byte)((item.Type_Damage * 64) + item.Object_Type));
					pak.WriteShort((ushort)item.Weight);
					pak.WriteByte(item.ConditionPercent); // % of con
					pak.WriteByte(item.DurabilityPercent); // % of dur
					pak.WriteByte((byte)item.Quality); // % of qua
					pak.WriteByte((byte)item.Bonus); // % bonus
					pak.WriteShort((ushort)item.Model);
					if (item.Emblem != 0)
						pak.WriteShort((ushort)item.Emblem);
					else
						pak.WriteShort((ushort)item.Color);
					pak.WriteShort((ushort)item.Effect);
					if (item.Count > 1)
						pak.WritePascalString(item.Count + " " + item.Name);
					else
						pak.WritePascalString(item.Name);
				}
				SendTCP(pak);
			}
		}
Esempio n. 8
0
 public void SendSiegeWeaponInterface(GameSiegeWeapon siegeWeapon, int time)
 {
 }
Esempio n. 9
0
 public void SendSiegeWeaponFireAnimation(GameSiegeWeapon siegeWeapon, int timer)
 {
 }
Esempio n. 10
0
 public void SendSiegeWeaponAnimation(GameSiegeWeapon siegeWeapon)
 {
 }
Esempio n. 11
0
		public virtual void SendSiegeWeaponFireAnimation(GameSiegeWeapon siegeWeapon, int timer)
		{
			if (siegeWeapon == null)
				return;
			using (var pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.SiegeWeaponAnimation)))
			{
				pak.WriteInt((uint) siegeWeapon.ObjectID);
				pak.WriteInt((uint) (siegeWeapon.TargetObject == null ? 0 : siegeWeapon.TargetObject.X));
				pak.WriteInt((uint) (siegeWeapon.TargetObject == null ? 0 : siegeWeapon.TargetObject.Y));
				pak.WriteInt((uint) (siegeWeapon.TargetObject == null ? 0 : siegeWeapon.TargetObject.Z + 50));
				pak.WriteInt((uint) (siegeWeapon.TargetObject == null ? 0 : siegeWeapon.TargetObject.ObjectID));
				pak.WriteShort(siegeWeapon.Effect);
				pak.WriteShort((ushort) (timer/100));
				pak.WriteByte((byte) SiegeTimer.eAction.Fire);
				pak.WriteByte(0xAA);
				pak.WriteShort(0xFFBF);
				SendTCP(pak);
			}
		}
Esempio n. 12
0
		public virtual void SendSiegeWeaponAnimation(GameSiegeWeapon siegeWeapon)
		{
			if (siegeWeapon == null)
				return;
			using (var pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.SiegeWeaponAnimation)))
			{
				pak.WriteInt((uint) siegeWeapon.ObjectID);
				pak.WriteInt(
					(uint)
					(siegeWeapon.TargetObject == null
					 ? (siegeWeapon.GroundTarget == null ? 0 : siegeWeapon.GroundTarget.X)
					 : siegeWeapon.TargetObject.X));
				pak.WriteInt(
					(uint)
					(siegeWeapon.TargetObject == null
					 ? (siegeWeapon.GroundTarget == null ? 0 : siegeWeapon.GroundTarget.Y)
					 : siegeWeapon.TargetObject.Y));
				pak.WriteInt(
					(uint)
					(siegeWeapon.TargetObject == null
					 ? (siegeWeapon.GroundTarget == null ? 0 : siegeWeapon.GroundTarget.Z)
					 : siegeWeapon.TargetObject.Z));
				pak.WriteInt((uint) (siegeWeapon.TargetObject == null ? 0 : siegeWeapon.TargetObject.ObjectID));
				pak.WriteShort(siegeWeapon.Effect);
				pak.WriteShort((ushort) (siegeWeapon.SiegeWeaponTimer.TimeUntilElapsed/100));
				pak.WriteByte((byte) siegeWeapon.SiegeWeaponTimer.CurrentAction);
				pak.Fill(0, 3);
				SendTCP(pak);
			}
		}
Esempio n. 13
0
		public virtual void SendSiegeWeaponInterface(GameSiegeWeapon siegeWeapon, int time)
		{
			using (var pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.SiegeWeaponInterface)))
			{
				var flag = (ushort) ((siegeWeapon.EnableToMove ? 1 : 0) | siegeWeapon.AmmoType << 8);
				pak.WriteShort(flag); //byte Ammo,  byte SiegeMoving(1/0)
				pak.WriteByte(0);
				pak.WriteByte(0); // Close interface(1/0)
				pak.WriteByte((byte) (time/10)); //time in 1000ms
				pak.WriteByte((byte) siegeWeapon.Ammo.Count); // external ammo count
				pak.WriteByte((byte) siegeWeapon.SiegeWeaponTimer.CurrentAction);
				pak.WriteByte((byte) siegeWeapon.AmmoSlot);
				pak.WriteShort(siegeWeapon.Effect);
				pak.WriteShort((ushort) time); // time (?)
				pak.WriteInt((uint) siegeWeapon.ObjectID);

                DBLanguageNPC translation = siegeWeapon.GetTranslation(m_gameClient);

                pak.WritePascalString(translation.Name + " (" + siegeWeapon.CurrentState + ")");
				foreach (InventoryItem item in siegeWeapon.Ammo)
				{
					pak.WriteByte((byte) item.SlotPosition);
					pak.WriteByte((byte) item.Level);
					pak.WriteByte((byte) item.DPS_AF);
					pak.WriteByte((byte) item.SPD_ABS);
					pak.WriteByte((byte) (item.Hand*64));
					pak.WriteByte((byte) ((item.Type_Damage*64) + item.Object_Type));
					pak.WriteShort((ushort) item.Weight);
					pak.WriteByte(item.ConditionPercent); // % of con
					pak.WriteByte(item.DurabilityPercent); // % of dur
					pak.WriteByte((byte) item.Quality); // % of qua
					pak.WriteByte((byte) item.Bonus); // % bonus
					pak.WriteShort((ushort) item.Model);
					if (item.Emblem != 0)
						pak.WriteShort((ushort) item.Emblem);
					else
						pak.WriteShort((ushort) item.Color);
					pak.WriteShort((ushort) item.Effect);
					if (item.Count > 1)
						pak.WritePascalString(item.Count + " " + item.Name);
					else
						pak.WritePascalString(item.Name);
				}
				SendTCP(pak);
			}
		}
Esempio n. 14
0
        public override void SendSiegeWeaponInterface(GameSiegeWeapon siegeWeapon, int time)
        {
            using (GSTCPPacketOut pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.SiegeWeaponInterface)))
            {
                ushort flag = (ushort)((siegeWeapon.EnableToMove ? 1 : 0) | siegeWeapon.AmmoType << 8);
                pak.WriteShort(flag);                        //byte Ammo,  byte SiegeMoving(1/0)
                pak.WriteByte(0);
                pak.WriteByte(0);                            // Close interface(1/0)
                pak.WriteByte((byte)(time));                 //time in 100ms
                pak.WriteByte((byte)siegeWeapon.Ammo.Count); // external ammo count
                pak.WriteByte((byte)siegeWeapon.SiegeWeaponTimer.CurrentAction);
                pak.WriteByte((byte)siegeWeapon.AmmoSlot);
                pak.WriteShort(siegeWeapon.Effect);
                pak.WriteShort(0);                 // SiegeHelperTimer ?
                pak.WriteShort(0);                 // SiegeTimer ?
                pak.WriteShort((ushort)siegeWeapon.ObjectID);

                string name = siegeWeapon.Name;

                LanguageDataObject translation = LanguageMgr.GetTranslation(m_gameClient, siegeWeapon);
                if (translation != null)
                {
                    if (!Util.IsEmpty(((DBLanguageNPC)translation).Name))
                    {
                        name = ((DBLanguageNPC)translation).Name;
                    }
                }

                pak.WritePascalString(name + " (" + siegeWeapon.CurrentState.ToString() + ")");
                foreach (InventoryItem item in siegeWeapon.Ammo)
                {
                    pak.WriteByte((byte)item.SlotPosition);
                    if (item == null)
                    {
                        pak.Fill(0x00, 18);
                        continue;
                    }
                    pak.WriteByte((byte)item.Level);
                    pak.WriteByte((byte)item.DPS_AF);
                    pak.WriteByte((byte)item.SPD_ABS);
                    pak.WriteByte((byte)(item.Hand * 64));
                    pak.WriteByte((byte)((item.Type_Damage * 64) + item.Object_Type));
                    pak.WriteShort((ushort)item.Weight);
                    pak.WriteByte(item.ConditionPercent);                // % of con
                    pak.WriteByte(item.DurabilityPercent);               // % of dur
                    pak.WriteByte((byte)item.Quality);                   // % of qua
                    pak.WriteByte((byte)item.Bonus);                     // % bonus
                    pak.WriteShort((ushort)item.Model);
                    if (item.Emblem != 0)
                    {
                        pak.WriteShort((ushort)item.Emblem);
                    }
                    else
                    {
                        pak.WriteShort((ushort)item.Color);
                    }
                    pak.WriteShort((ushort)item.Effect);
                    if (item.Count > 1)
                    {
                        pak.WritePascalString(item.Count + " " + item.Name);
                    }
                    else
                    {
                        pak.WritePascalString(item.Name);
                    }
                }
                SendTCP(pak);
            }
        }