using System;
using System.Data;
using System.Threading;
using System.Collections.Generic;
using Woodpecker.Storage;
using Woodpecker.Specialized.Text;
using Woodpecker.Net.Game.Messages;
using Woodpecker.Game.Items;
using Woodpecker.Game.Items.Pets;
using Woodpecker.Game.Rooms.Units;
using Woodpecker.Game.Rooms.Pathfinding;
namespace Woodpecker.Game.Rooms.Instances.Interaction
{
public partial class flatReactor : roomReactor
{
///
/// 76 - "AL"
///
public void THROW_DICE()
{
int itemID = int.Parse(Request.Content);
Session.roomInstance.interactWithDice(itemID, Session.ID, true);
}
///
/// 77 - "AM"
///
public void DICE_OFF()
{
int itemID = int.Parse(Request.Content);
Session.roomInstance.interactWithDice(itemID, Session.ID, false);
}
}
}
namespace Woodpecker.Game.Rooms.Instances
{
public partial class roomInstance
{
#region Methods
public void interactWithDice(int itemID, uint sessionID, bool spinDice)
{
floorItem pItem = this.getFloorItem(itemID);
if (pItem != null && pItem.Definition.Behaviour.isDice) // Valid item
{
roomUser pUser = this.getRoomUser(sessionID);
if (pUser == null || !tilesTouch(pItem.X, pItem.Y, pUser.X, pUser.Y))
return; // Invalid position of room user and dice item
pUser = null;
serverMessage Message = new serverMessage(90); // "AZ"
Message.Append(itemID);
itemID *= 38;
int randomNumber = 0;
if (spinDice) // New spin
{
this.sendMessage(Message); // Start spin animation for clients
// Generate random number
randomNumber = new Random(DateTime.Now.Millisecond).Next(1, 7); // 1-6
itemID += randomNumber;
}
Message.Append(" " + itemID.ToString()); // Append 'new' item ID
if (spinDice) // New spin, send delayed message
this.sendMessage(Message.ToString(), 1000);
else // Send message immediately
this.sendMessage(Message);
pItem.customData = randomNumber.ToString(); // Set custom data
pItem.requiresUpdate = true; // Request update of dice customdata
}
}
#endregion
}
}