Add the most important command and feature in the entire game,

This commit is contained in:
SilicaAndPina 2021-03-31 01:26:55 +13:00
parent b8242010ad
commit 5cac72f67a
4 changed files with 117 additions and 16 deletions

View file

@ -0,0 +1,89 @@
using HISP.Server;
using System;
using System.Threading;
namespace HISP.Player
{
public class Dance : IDisposable
{
public const int DanceSpeed = 1000;
private Timer danceTimer;
public string Moves;
public int MoveIndex;
private User baseUser;
public Dance(User BaseUser, string DanceMoves)
{
baseUser = BaseUser;
Moves = DanceMoves.ToLower();
MoveIndex = -1;
danceTimer = new Timer(new TimerCallback(onDanceTick), null, DanceSpeed, DanceSpeed);
}
private void onDanceTick(object state)
{
MoveIndex++;
if (MoveIndex >= Moves.Length)
goto done;
int onHorse = 0;
int facing = baseUser.Facing;
while (facing >= 5)
{
facing -= 5;
onHorse++;
}
char moveInDir = Moves[MoveIndex];
int direction;
switch(moveInDir)
{
case 'u':
direction = PacketBuilder.DIRECTION_UP;
break;
case 'd':
direction = PacketBuilder.DIRECTION_DOWN;
break;
case 'l':
direction = PacketBuilder.DIRECTION_LEFT;
break;
case 'r':
direction = PacketBuilder.DIRECTION_RIGHT;
break;
default:
goto done;
}
baseUser.Facing = direction + (onHorse * 5);
byte[] moveResponse = PacketBuilder.CreateMovementPacket(baseUser.X, baseUser.Y, baseUser.CharacterId, baseUser.Facing, PacketBuilder.DIRECTION_NONE, false);
baseUser.LoggedinClient.SendPacket(moveResponse);
GameServer.UpdateUserFacingAndLocation(baseUser);
done:;
if (MoveIndex < Moves.Length)
{
danceTimer.Change(DanceSpeed, DanceSpeed);
}
else
{
this.Dispose();
}
}
public void Dispose()
{
baseUser = null;
Moves = null;
danceTimer.Dispose();
danceTimer = null;
MoveIndex = -1;
}
}
}