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); }
/// <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); } }
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); }
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); } }
/// <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); } }
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); } } }
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); } }
public void SendSiegeWeaponInterface(GameSiegeWeapon siegeWeapon, int time) { }
public void SendSiegeWeaponFireAnimation(GameSiegeWeapon siegeWeapon, int timer) { }
public void SendSiegeWeaponAnimation(GameSiegeWeapon siegeWeapon) { }
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); } }
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); } }
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); } }
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); } }