Updates Combat Packets & Moves Tracking to Content (#298)
- [X] Changes outgoing combat packets - [X] Moves quest arrow to PlayerMobile and moves quest arrow packets to content. Bumps release version
This commit is contained in:
parent
55935d30b4
commit
6f5cb00cdd
19 changed files with 373 additions and 319 deletions
|
|
@ -562,8 +562,6 @@ namespace Server
|
|||
private Poison m_Poison;
|
||||
private Prompt m_Prompt;
|
||||
private ObjectPropertyList m_PropertyList;
|
||||
|
||||
private QuestArrow m_QuestArrow;
|
||||
private Race m_Race;
|
||||
private Region m_Region;
|
||||
|
||||
|
|
@ -955,7 +953,7 @@ namespace Server
|
|||
|
||||
if (m_Combatant == null)
|
||||
{
|
||||
m_NetState?.Send(new ChangeCombatant(Serial.Zero));
|
||||
m_NetState?.SendChangeCombatant(Serial.Zero);
|
||||
m_ExpireCombatant?.Stop();
|
||||
m_CombatTimer?.Stop();
|
||||
|
||||
|
|
@ -964,7 +962,7 @@ namespace Server
|
|||
}
|
||||
else
|
||||
{
|
||||
m_NetState?.Send(new ChangeCombatant(m_Combatant.Serial));
|
||||
m_NetState?.SendChangeCombatant(m_Combatant.Serial);
|
||||
m_ExpireCombatant ??= Timer.DelayCall(ExpireCombatantDelay, ExpireCombatant);
|
||||
m_ExpireCombatant.Start();
|
||||
|
||||
|
|
@ -1450,10 +1448,7 @@ namespace Server
|
|||
m_Warmode = value;
|
||||
Delta(MobileDelta.Flags);
|
||||
|
||||
if (m_NetState != null)
|
||||
{
|
||||
Send(SetWarMode.Instantiate(value));
|
||||
}
|
||||
m_NetState?.SendSetWarMode(value);
|
||||
|
||||
if (!m_Warmode)
|
||||
{
|
||||
|
|
@ -1505,8 +1500,6 @@ namespace Server
|
|||
|
||||
m_Target?.Cancel(this, TargetCancelType.Disconnected);
|
||||
|
||||
QuestArrow = null;
|
||||
|
||||
m_Spell?.OnConnectionChanged();
|
||||
|
||||
// if (m_Spell != null)
|
||||
|
|
@ -2010,20 +2003,6 @@ namespace Server
|
|||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public bool Mounted => Mount != null;
|
||||
|
||||
public QuestArrow QuestArrow
|
||||
{
|
||||
get => m_QuestArrow;
|
||||
set
|
||||
{
|
||||
if (m_QuestArrow != value)
|
||||
{
|
||||
m_QuestArrow?.Stop();
|
||||
|
||||
m_QuestArrow = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public virtual bool CanTarget => true;
|
||||
public virtual bool ClickTitle => true;
|
||||
|
||||
|
|
@ -4504,8 +4483,6 @@ namespace Server
|
|||
}
|
||||
}
|
||||
|
||||
public void ClearQuestArrow() => m_QuestArrow = null;
|
||||
|
||||
public void ClearTarget() => m_Target = null;
|
||||
|
||||
public Target BeginTarget(int range, bool allowGround, TargetFlags flags, TargetCallback callback) =>
|
||||
|
|
|
|||
|
|
@ -1,59 +0,0 @@
|
|||
/*************************************************************************
|
||||
* ModernUO *
|
||||
* Copyright 2019-2020 - ModernUO Development Team *
|
||||
* Email: hi@modernuo.com *
|
||||
* File: ArrowPackets.cs *
|
||||
* *
|
||||
* This program is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation, either version 3 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
||||
*************************************************************************/
|
||||
|
||||
namespace Server.Network
|
||||
{
|
||||
public sealed class CancelArrow : Packet
|
||||
{
|
||||
public CancelArrow() : base(0xBA, 6)
|
||||
{
|
||||
Stream.Write((byte)0);
|
||||
Stream.Write((short)-1);
|
||||
Stream.Write((short)-1);
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class SetArrow : Packet
|
||||
{
|
||||
public SetArrow(int x, int y) : base(0xBA, 6)
|
||||
{
|
||||
Stream.Write((byte)1);
|
||||
Stream.Write((short)x);
|
||||
Stream.Write((short)y);
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class CancelArrowHS : Packet
|
||||
{
|
||||
public CancelArrowHS(int x, int y, Serial s) : base(0xBA, 10)
|
||||
{
|
||||
Stream.Write((byte)0);
|
||||
Stream.Write((short)x);
|
||||
Stream.Write((short)y);
|
||||
Stream.Write(s);
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class SetArrowHS : Packet
|
||||
{
|
||||
public SetArrowHS(int x, int y, Serial s) : base(0xBA, 10)
|
||||
{
|
||||
Stream.Write((byte)1);
|
||||
Stream.Write((short)x);
|
||||
Stream.Write((short)y);
|
||||
Stream.Write(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
/*************************************************************************
|
||||
* ModernUO *
|
||||
* Copyright 2019-2020 - ModernUO Development Team *
|
||||
* Email: hi@modernuo.com *
|
||||
* File: CombatPackets.cs *
|
||||
* *
|
||||
* This program is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation, either version 3 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
||||
*************************************************************************/
|
||||
|
||||
namespace Server.Network
|
||||
{
|
||||
public sealed class Swing : Packet
|
||||
{
|
||||
public Swing(Serial attacker, Serial defender) : base(0x2F, 10)
|
||||
{
|
||||
Stream.Write((byte)0);
|
||||
Stream.Write(attacker);
|
||||
Stream.Write(defender);
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class SetWarMode : Packet
|
||||
{
|
||||
public static readonly Packet InWarMode = SetStatic(new SetWarMode(true));
|
||||
public static readonly Packet InPeaceMode = SetStatic(new SetWarMode(false));
|
||||
|
||||
public SetWarMode(bool mode) : base(0x72, 5)
|
||||
{
|
||||
Stream.Write(mode);
|
||||
Stream.Write((byte)0x00);
|
||||
Stream.Write((byte)0x32);
|
||||
Stream.Write((byte)0x00);
|
||||
}
|
||||
|
||||
public static Packet Instantiate(bool mode) => mode ? InWarMode : InPeaceMode;
|
||||
}
|
||||
|
||||
public sealed class ChangeCombatant : Packet
|
||||
{
|
||||
public ChangeCombatant(Serial combatant) : base(0xAA, 5)
|
||||
{
|
||||
Stream.Write(combatant);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -331,7 +331,7 @@ namespace Server.Network
|
|||
state.Send(new MobileIncoming(m, m));
|
||||
// state.Send( new MobileAttributes( m ) );
|
||||
state.Send(new MobileStatus(m, m));
|
||||
state.Send(SetWarMode.Instantiate(m.Warmode));
|
||||
state.SendSetWarMode(m.Warmode);
|
||||
|
||||
m.SendEverything();
|
||||
|
||||
|
|
@ -339,7 +339,7 @@ namespace Server.Network
|
|||
state.Send(new MobileUpdate(m));
|
||||
// state.Send( new MobileAttributes( m ) );
|
||||
state.Send(new MobileStatus(m, m));
|
||||
state.Send(SetWarMode.Instantiate(m.Warmode));
|
||||
state.SendSetWarMode(m.Warmode);
|
||||
state.Send(new MobileIncoming(m, m));
|
||||
}
|
||||
else if (state.StygianAbyss)
|
||||
|
|
@ -354,7 +354,7 @@ namespace Server.Network
|
|||
state.Send(new MobileIncomingSA(m, m));
|
||||
// state.Send( new MobileAttributes( m ) );
|
||||
state.Send(new MobileStatus(m, m));
|
||||
state.Send(SetWarMode.Instantiate(m.Warmode));
|
||||
state.SendSetWarMode(m.Warmode);
|
||||
|
||||
m.SendEverything();
|
||||
|
||||
|
|
@ -362,7 +362,7 @@ namespace Server.Network
|
|||
state.Send(new MobileUpdate(m));
|
||||
// state.Send( new MobileAttributes( m ) );
|
||||
state.Send(new MobileStatus(m, m));
|
||||
state.Send(SetWarMode.Instantiate(m.Warmode));
|
||||
state.SendSetWarMode(m.Warmode);
|
||||
state.Send(new MobileIncomingSA(m, m));
|
||||
}
|
||||
else
|
||||
|
|
@ -377,7 +377,7 @@ namespace Server.Network
|
|||
state.Send(new MobileIncomingOld(m, m));
|
||||
// state.Send( new MobileAttributes( m ) );
|
||||
state.Send(new MobileStatus(m, m));
|
||||
state.Send(SetWarMode.Instantiate(m.Warmode));
|
||||
state.SendSetWarMode(m.Warmode);
|
||||
|
||||
m.SendEverything();
|
||||
|
||||
|
|
@ -385,7 +385,7 @@ namespace Server.Network
|
|||
state.Send(new MobileUpdateOld(m));
|
||||
// state.Send( new MobileAttributes( m ) );
|
||||
state.Send(new MobileStatus(m, m));
|
||||
state.Send(SetWarMode.Instantiate(m.Warmode));
|
||||
state.SendSetWarMode(m.Warmode);
|
||||
state.Send(new MobileIncomingOld(m, m));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,6 @@ namespace Server.Network
|
|||
|
||||
RegisterExtended(0x05, false, ScreenSize);
|
||||
RegisterExtended(0x06, true, PartyMessage);
|
||||
RegisterExtended(0x07, true, QuestArrow);
|
||||
RegisterExtended(0x09, true, DisarmRequest);
|
||||
RegisterExtended(0x0A, true, StunRequest);
|
||||
RegisterExtended(0x0B, false, Language);
|
||||
|
|
@ -217,20 +216,6 @@ namespace Server.Network
|
|||
PartyCommands.Handler?.OnDecline(state.Mobile, World.FindMobile(reader.ReadUInt32()));
|
||||
}
|
||||
|
||||
public static void QuestArrow(NetState state, CircularBufferReader reader)
|
||||
{
|
||||
var from = state.Mobile;
|
||||
|
||||
if (from == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var rightClick = reader.ReadBoolean();
|
||||
|
||||
from.QuestArrow?.OnClick(rightClick);
|
||||
}
|
||||
|
||||
public static void Animate(NetState state, CircularBufferReader reader)
|
||||
{
|
||||
var from = state.Mobile;
|
||||
|
|
|
|||
67
Projects/Server/Network/Packets/OutgoingCombatPackets.cs
Normal file
67
Projects/Server/Network/Packets/OutgoingCombatPackets.cs
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
/*************************************************************************
|
||||
* ModernUO *
|
||||
* Copyright 2019-2020 - ModernUO Development Team *
|
||||
* Email: hi@modernuo.com *
|
||||
* File: OutgoingCombatPackets.cs *
|
||||
* *
|
||||
* This program is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation, either version 3 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
||||
*************************************************************************/
|
||||
|
||||
using System.Buffers;
|
||||
|
||||
namespace Server.Network
|
||||
{
|
||||
public static class OutgoingCombatPackets
|
||||
{
|
||||
public static void SendSwing(this NetState ns, Serial attacker, Serial defender)
|
||||
{
|
||||
if (ns == null || !ns.GetSendBuffer(out var buffer))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var writer = new CircularBufferWriter(buffer);
|
||||
writer.Write((byte)0x2F); // Packet ID
|
||||
writer.Write((byte)0);
|
||||
writer.Write(attacker);
|
||||
writer.Write(defender);
|
||||
|
||||
ns.Send(ref buffer, 10);
|
||||
}
|
||||
|
||||
public static void SendSetWarMode(this NetState ns, bool warmode)
|
||||
{
|
||||
if (ns == null || !ns.GetSendBuffer(out var buffer))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var writer = new CircularBufferWriter(buffer);
|
||||
writer.Write((byte)0x72); // Packet ID
|
||||
// Warmode, 0x00, 0x32, 0x00
|
||||
writer.Write(warmode ? 0x01003200 : 0x00003200);
|
||||
|
||||
ns.Send(ref buffer, 5);
|
||||
}
|
||||
|
||||
public static void SendChangeCombatant(this NetState ns, Serial combatant)
|
||||
{
|
||||
if (ns == null || !ns.GetSendBuffer(out var buffer))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var writer = new CircularBufferWriter(buffer);
|
||||
writer.Write((byte)0xAA); // Packet ID
|
||||
writer.Write(combatant);
|
||||
|
||||
ns.Send(ref buffer, 5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,94 +0,0 @@
|
|||
using Server.Network;
|
||||
|
||||
namespace Server
|
||||
{
|
||||
public class QuestArrow
|
||||
{
|
||||
public QuestArrow(Mobile m, Mobile t)
|
||||
{
|
||||
Running = true;
|
||||
Mobile = m;
|
||||
Target = t;
|
||||
}
|
||||
|
||||
public QuestArrow(Mobile m, Mobile t, int x, int y) : this(m, t)
|
||||
{
|
||||
Update(x, y);
|
||||
}
|
||||
|
||||
public Mobile Mobile { get; }
|
||||
|
||||
public Mobile Target { get; }
|
||||
|
||||
public bool Running { get; private set; }
|
||||
|
||||
public void Update()
|
||||
{
|
||||
Update(Target.X, Target.Y);
|
||||
}
|
||||
|
||||
public void Update(int x, int y)
|
||||
{
|
||||
if (!Running)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var ns = Mobile.NetState;
|
||||
|
||||
if (ns == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (ns.HighSeas)
|
||||
{
|
||||
ns.Send(new SetArrowHS(x, y, Target.Serial));
|
||||
}
|
||||
else
|
||||
{
|
||||
ns.Send(new SetArrow(x, y));
|
||||
}
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
Stop(Target.X, Target.Y);
|
||||
}
|
||||
|
||||
public void Stop(int x, int y)
|
||||
{
|
||||
if (!Running)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Mobile.ClearQuestArrow();
|
||||
|
||||
var ns = Mobile.NetState;
|
||||
|
||||
if (ns != null)
|
||||
{
|
||||
if (ns.HighSeas)
|
||||
{
|
||||
ns.Send(new CancelArrowHS(x, y, Target.Serial));
|
||||
}
|
||||
else
|
||||
{
|
||||
ns.Send(new CancelArrow());
|
||||
}
|
||||
}
|
||||
|
||||
Running = false;
|
||||
OnStop();
|
||||
}
|
||||
|
||||
public virtual void OnStop()
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void OnClick(bool rightClick)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue