using System;
using Woodpecker.Specialized.Text;
using Woodpecker.Net.Game.Messages;
using Woodpecker.Game.Rooms.Instances;
using Woodpecker.Game.Rooms.Units;
using Woodpecker.Game.Items;
namespace Woodpecker.Game.Rooms.Instances.Interaction
{
///
/// Expands the roomReactor reactor with target methods that are for user flats only.
///
public partial class flatReactor : roomReactor
{
///
/// 65 - "AA"
///
public void GETSTRIP()
{
Session.sendHandStrip(Request.Content);
}
///
/// 66 - "AB"
///
public void FLATPROPBYITEM()
{
if (Session.roomInstance.sessionHasRights(Session.ID)) // Permission
{
int itemID = int.Parse(Request.Content.Split('/')[1]);
stripItem pItem = Session.itemStripHandler.getHandItem(itemID);
if (pItem != null && pItem.Definition.Behaviour.isDecoration)
{
Session.itemStripHandler.removeHandItem(itemID, true);
int decorationValue = int.Parse(pItem.customData);
if (pItem.Definition.Sprite == "wallpaper")
Session.roomInstance.Information.Wallpaper = decorationValue;
else // Floor
Session.roomInstance.Information.Floor = decorationValue;
serverMessage msgUpdate = new serverMessage(46); // "@n"
msgUpdate.Append(pItem.Definition.Sprite);
msgUpdate.Append("/");
msgUpdate.Append(decorationValue);
Session.roomInstance.sendMessage(msgUpdate);
Session.roomInstance.Information.updateFlatProperties();
}
}
}
///
/// 68 - "AD"
///
public void TRADE_DECLINE()
{
if (Session.itemStripHandler.tradeAccept)
{
Session.itemStripHandler.tradeAccept = false;
Session.refreshTradeBoxes();
if (ObjectTree.Sessions.getSession(Session.itemStripHandler.tradePartnerSessionID).itemStripHandler.tradeAccept)
{
Session.roomInstance.sendMessage(genericMessageFactory.createMessageBoxCast("Okay, you will trade!"));
}
}
}
///
/// 69 - "AE"
///
public void TRADE_ACCEPT()
{
if (Session.itemStripHandler.isTrading && !Session.itemStripHandler.tradeAccept)
{
Session.itemStripHandler.tradeAccept = true;
Session.refreshTradeBoxes();
Woodpecker.Sessions.Session partnerSession = ObjectTree.Sessions.getSession(this.Session.itemStripHandler.tradePartnerSessionID);
if (partnerSession.itemStripHandler.tradeAccept)
{
Session.itemStripHandler.swapTradeOffers(partnerSession.itemStripHandler);
System.Threading.Thread.Sleep(150); // Wait to display the refresh before the window disappears
Session.abortTrade();
// Trade complete!
}
}
}
///
/// 70 - "AF"
///
public void TRADE_CLOSE()
{
if (Session.itemStripHandler.isTrading)
{
Session.abortTrade();
}
}
///
/// 71 - "AG"
///
public void TRADE_OPEN()
{
if (Session.itemStripHandler.isTrading || !Session.User.hasFuseRight("fuse_trade")) // Can't trade
return;
int tradePartnerRoomUserID = int.Parse(Request.Content);
roomUser tradePartner = Session.roomInstance.getRoomUser(tradePartnerRoomUserID);
if (tradePartner == null || tradePartner.Session.itemStripHandler.isTrading) // Can't trade
return;
Session.roomInstance.getRoomUser(Session.ID).addStatus("trd", "trd", null, 0, null, 0, 0);
tradePartner.addStatus("trd", "trd", null, 0, null, 0, 0);
Session.itemStripHandler.initTrade(tradePartner.Session.ID);
tradePartner.Session.itemStripHandler.initTrade(Session.ID);
Session.refreshTradeBoxes();
}
///
/// 72 - "AH"
///
public void TRADE_ADDITEM()
{
if (Session.itemStripHandler.isTrading)
{
int itemID = int.Parse(Request.Content);
stripItem pItem = Session.itemStripHandler.getHandItem(itemID);
if (pItem != null && !Session.itemStripHandler.itemIsInTradeOffer(itemID)) // Item tradeable check here todo
{
Session.itemStripHandler.addItemToTradeOffer(itemID);
Session.refreshTradeBoxes();
}
}
}
///
/// 95 - "A_"
///
public void KICKUSER()
{
roomUser Me = Session.roomInstance.getRoomUser(Session.ID);
if (Me.hasRights)
{
roomUser Target = Session.roomInstance.getRoomUser(Request.Content);
if (Target == null || (Target.hasRights && !Me.isOwner) || (Target.Session.User.Role > Session.User.Role)) // Invalid
return;
Target.Session.kickFromRoom("");
}
}
///
/// 96 - "A`"
///
public void ASSIGNRIGHTS()
{
if (Session.roomInstance.sessionHasFlatAdmin(Session.ID))
{
roomUser Target = Session.roomInstance.getRoomUser(Request.Content);
if (Target == null || Target.hasRights) // Invalid
return;
Target.hasRights = true;
Target.refreshRights();
ObjectTree.Game.Rooms.addRoomRights(Session.roomID, Target.Session.User.ID);
}
}
///
/// 97 - "Aa"
///
public void REMOVERIGHTS()
{
if (Session.roomInstance.sessionHasFlatAdmin(Session.ID))
{
roomUser Target = Session.roomInstance.getRoomUser(Request.Content);
if (Target == null || !Target.hasRights || Target.isOwner) // Invalid
return;
Target.hasRights = false;
Target.refreshRights();
Target.Session.gameConnection.sendMessage(new Net.Game.Messages.serverMessage(43)); // "@k"
ObjectTree.Game.Rooms.removeRoomRights(Session.roomID, Target.Session.User.ID);
}
}
///
/// 98 - "Ab"
///
public void LETUSERIN()
{
string ringingUsername = Request.getParameter(0);
bool Decision = (Request.Content[Request.Content.Length - 1] == 'A'); // Base64 boolean
Session.roomInstance.answerDoorbell(Session.ID, ringingUsername, Decision);
}
}
}