mirror of
https://github.com/islehorse/HISP.git
synced 2025-04-22 04:35:52 +12:00
Add Feature pt1
This commit is contained in:
parent
a184e4d735
commit
092534e331
131 changed files with 3113 additions and 1418 deletions
91
HorseIsleServer/LibHISP/Player/Dance.cs
Normal file
91
HorseIsleServer/LibHISP/Player/Dance.cs
Normal file
|
@ -0,0 +1,91 @@
|
|||
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;
|
||||
baseUser.ActiveDance = this;
|
||||
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.ActiveDance = null;
|
||||
baseUser = null;
|
||||
Moves = null;
|
||||
danceTimer.Dispose();
|
||||
danceTimer = null;
|
||||
MoveIndex = -1;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue