本文整理汇总了C#中Zepheus.Zone.Game.ZoneCharacter.Move方法的典型用法代码示例。如果您正苦于以下问题:C# ZoneCharacter.Move方法的具体用法?C# ZoneCharacter.Move怎么用?C# ZoneCharacter.Move使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Zepheus.Zone.Game.ZoneCharacter
的用法示例。
在下文中一共展示了ZoneCharacter.Move方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: HandleMovement
private static void HandleMovement(ZoneCharacter character, Packet packet, bool run, bool stop = false)
{
if (character.State == PlayerState.Dead || character.State == PlayerState.Resting || character.State == PlayerState.Vendor)
{
character.CheatTracker.AddCheat(CheatTypes.INVALID_MOVE, 50);
return;
}
int newX, oldX, newY, oldY;
if (!stop)
{
if (!packet.TryReadInt(out oldX) || !packet.TryReadInt(out oldY) ||
!packet.TryReadInt(out newX) || !packet.TryReadInt(out newY))
{
Log.WriteLine(LogLevel.Warn, "Invalid movement packet detected.");
return;
}
}
else
{
if (!packet.TryReadInt(out newX) || !packet.TryReadInt(out newY))
{
Log.WriteLine(LogLevel.Warn, "Invalid stop packet detected.");
return;
}
oldX = character.Position.X;
oldY = character.Position.Y;
}
if (character.Map.Block != null)
{
if (Settings.Instance.UseSHBD)
{
if (!character.Map.Block.CanWalk(newX, newY))
{
Log.WriteLine(LogLevel.Debug, "Blocking walk at {0}:{1}.", newX, newY);
SendPositionBlock(character, newX, newY);
SendTeleportCharacter(character, oldX, oldY);
return;
}
}
}
double distance = Vector2.Distance(newX, oldX, newY, oldY);
if ((run && distance > 500d) || (!run && distance > 400d)) //TODO: mounts don't check with these speeds
{
character.CheatTracker.AddCheat(Security.CheatTypes.SPEEDWALK, 50);
return;
}
if (!stop)
{
int deltaY = newY - character.Position.Y;
int deltaX = newX - character.Position.X;
double radians = Math.Atan((double)deltaY / deltaX);
double angle = radians * (180 / Math.PI);
character.Rotation = (byte)(angle / 2);
}
character.Move(oldX, oldY, newX, newY, !run, stop); // hehe
}
示例2: HandleMovement
private static void HandleMovement(ZoneCharacter character, Packet packet, bool run, bool stop = false)
{
if (character.State == PlayerState.Dead || character.State == PlayerState.Resting || character.State == PlayerState.Vendor)
{
character.CheatTracker.AddCheat(CheatTypes.InvalidMove, 50);
return;
}
int newX, oldX, newY, oldY;
if (!stop)
{
if (!packet.TryReadInt(out oldX) || !packet.TryReadInt(out oldY) ||
!packet.TryReadInt(out newX) || !packet.TryReadInt(out newY))
{
Log.WriteLine(LogLevel.Warn, "Invalid movement packet detected.");
return;
}
}
else
{
if (!packet.TryReadInt(out newX) || !packet.TryReadInt(out newY))
{
Log.WriteLine(LogLevel.Warn, "Invalid stop packet detected.");
return;
}
oldX = character.Position.X;
oldY = character.Position.Y;
}
if (character.Map.Block != null)
{
if (!character.Map.Block.CanWalk(newX, newY))
{
Log.WriteLine(LogLevel.Debug, "Blocking walk at {0}:{1}.", newX, newY);
SendPositionBlock(character, newX, newY);
SendTeleportCharacter(character, oldX, oldY);
return;
}
}
double distance = Vector2.Distance(newX, oldX, newY, oldY);
if ((run && distance > 500d) || (!run && distance > 400d)) //TODO: mounts don't check with these speeds
{
character.CheatTracker.AddCheat(CheatTypes.Speedwalk, 50);
return;
}
if (!stop)
{
int deltaY = newY - character.Position.Y;
int deltaX = newX - character.Position.X;
double radians = Math.Atan((double)deltaY / deltaX);
double angle = radians * (180 / Math.PI);
character.Rotation = (byte)(angle / 2);
}
foreach (var member in character.Party)
{
if (member.Key != character.Name)
{
using (var ppacket = new Packet(SH14Type.UpdatePartyMemberLoc))
{
ppacket.WriteByte(1);//unk
ppacket.WriteString(character.Name, 16);
ppacket.WriteInt(character.Position.X);
ppacket.WriteInt(character.Position.Y);
member.Value.SendPacket(ppacket);
}
}
}
character.Move(oldX, oldY, newX, newY, !run, stop); // hehe
}