using System; using System.Collections.Generic; using Woodpecker.Specialized.Text; using Woodpecker.Specialized.Encoding; using Woodpecker.Net.Game.Messages; using Woodpecker.Game.Moderation; using Woodpecker.Game.Rooms.Units; using Woodpecker.Game.Rooms.Instances; using Woodpecker.Game.Rooms.Pathfinding; namespace Woodpecker.Game.Rooms.Instances.Interaction { /// /// Provides common target methods for both public spaces and user flats. /// public partial class roomReactor : Reactor { #region Target methods /// /// 52 - "@t" /// public void CHAT() { roomUser Me = Session.roomInstance.getRoomUser(Session.ID); if (!Me.isMuted) { string Text = Request.getParameter(0); stringFunctions.filterVulnerableStuff(ref Text, true); if (!this.handleSpecialChatCommand(Text)) { Session.roomInstance.sendTalk(Me.ID, Me.X, Me.Y, Text); Session.roomInstance.animateTalkingUnit(Me, ref Text, true); ObjectTree.Game.Moderation.addChatMessageToLogStack(Session.ID, Session.User.ID, Session.roomID, 0, chatType.say, ref Text); } } } /// /// 55 - "@w" /// public void SHOUT() { roomUser Me = Session.roomInstance.getRoomUser(Session.ID); if (!Me.isMuted) { string Text = Request.getParameter(0); stringFunctions.filterVulnerableStuff(ref Text, true); if (!this.handleSpecialChatCommand(Text)) { Session.roomInstance.sendShout(Me.ID, Me.X, Me.Y, Text); Session.roomInstance.animateTalkingUnit(Me, ref Text, true); ObjectTree.Game.Moderation.addChatMessageToLogStack(Session.ID, Session.User.ID, Session.roomID, 0, chatType.shout, ref Text); } } } /// /// 56 - "@x" /// public void WHISPER() { roomUser Me = Session.roomInstance.getRoomUser(Session.ID); if (!Me.isMuted) { string whisperBody = Request.getParameter(0); string receiverName = whisperBody.Substring(0, whisperBody.IndexOf(' ')); string Text = whisperBody.Substring(receiverName.Length + 1); stringFunctions.filterVulnerableStuff(ref Text, true); serverMessage Whisper = new serverMessage(25); // "@Y" Whisper.appendWired(Me.ID); Whisper.appendClosedValue(Text); Session.gameConnection.sendMessage(Whisper); if (receiverName.Length > 0 && receiverName != Session.User.Username) { roomUser Receiver = Session.roomInstance.getRoomUser(receiverName); if (Receiver != null) Receiver.Session.gameConnection.sendMessage(Whisper); ObjectTree.Game.Moderation.addChatMessageToLogStack(Session.ID, Session.User.ID, Session.roomID, Receiver.Session.User.ID, chatType.whisper, ref Text); } } } /// /// 60 - "@|" /// public void G_HMAP() { Response.Initialize(31); // "@_" Response.Append(Session.roomInstance.getClientFloorMap()); sendResponse(); } /// /// 61 - "@}" /// public void G_USRS() { Response.Initialize(28); // "@\" Response.Append(Session.roomInstance.getRoomUnits()); sendResponse(); } /// /// 62 - "@~" /// public void G_OBJS() { Response.Initialize(30); // "@^" Response.Append(Session.roomInstance.getFloorItems(true)); sendResponse(); Response.Initialize(32); // "@`" Response.Append(Session.roomInstance.getFloorItems(false)); sendResponse(); } /// /// 63 - "@" /// public void G_ITEMS() { Response.Initialize(45); // "@m" Response.Append(Session.roomInstance.getWallItems()); sendResponse(); } /// /// 64 - "A@" /// public void G_STAT() { Response.Initialize(34); // "@b" Response.Append(Session.roomInstance.getRoomUnitStatuses()); sendResponse(); Session.roomInstance.startUser(Session); } /// /// 75 - "AK" /// public void MOVE() { try { byte toX = Convert.ToByte(base64Encoding.Decode(Request.Content.Substring(0, 2))); byte toY = Convert.ToByte(base64Encoding.Decode(Request.Content.Substring(2, 2))); Session.roomInstance.requestStartRoomUnitWalk(Session.ID, toX, toY, false); } catch { } } /// /// 79 - "AO" /// public void LOOKTO() { roomUser Me = Session.roomInstance.getRoomUser(Session.ID); if (!Me.hasStatus("sit") && !Me.hasStatus("lay")) // Can rotate { string[] Coords = Request.Content.Split(' '); int toX = int.Parse(Coords[0]); int toY = int.Parse(Coords[1]); Me.rotationHead = rotationCalculator.calculateHumanDirection(Me.X, Me.Y, toX, toY); Me.rotationBody = Me.rotationHead; Me.requiresUpdate = true; } } /// /// 80 - "AP" /// public void CARRYDRINK() { roomUser Me = Session.roomInstance.getRoomUser(Session.ID); Items.carryItemHelper.setHandItem(ref Me, Request.Content); } /// /// 87 - "AW" /// public void CARRYITEM() { string Item = "20"; // Camera roomUser Me = Session.roomInstance.getRoomUser(Session.ID); Items.carryItemHelper.setHandItem(ref Me, Item); } /// /// 93 - "A]" /// public void DANCE() { roomUser Me = Session.roomInstance.getRoomUser(Session.ID); if(Me.hasStatus("sit") || Me.hasStatus("lay") || Me.hasStatus("swim")) // Can't dance right now return; string danceType = null; if (Request.Content.Length > 0) // Club dance { int danceID = Request.getNextWiredParameter(); if (danceID < 1 || danceID > 4 || !Session.User.hasFuseRight("fuse_use_club_dance")) return; danceType = danceID.ToString(); } Me.removeStatus("handitem"); Me.addStatus("dance", "dance", danceType, 0, null, 0, 0); } /// /// 94 - "A^" /// public void WAVE() { roomUser Me = Session.roomInstance.getRoomUser(Session.ID); Me.addStatus("wave", "wave", null, 2, null, 0, 0); } /// /// 115 - "As" /// public void GOAWAY() { Session.kickFromRoom(""); } /// /// 126 - "A~" /// public void GETROOMAD() { Response.Initialize(208); // "CP" string adImage = ""; // TODO: configure this ad string adUri = ""; // TODO: idem dito if (adImage.Length > 0) { Response.appendTabbedValue(adImage); Response.Append(adUri); } else Response.Append(0); // No advertisement to be shown sendResponse(); } /// /// 158 - "B^" /// public void SETBADGE() { string newBadge = Request.getParameter(0); if(!ObjectTree.Game.Users.userHasBadge(Session.User,newBadge)) return; bool showBadge = wireEncoding.decodeBoolean(Request.Content[Request.Content.Length - 1]); if(showBadge) Session.User.Badge = newBadge; else Session.User.Badge = ""; Session.roomInstance.updateUserBadge(Session.ID); Session.User.updateAppearanceDetails(); } /// /// 215 - "CW" /// public void GET_ALIAS_LIST() { Response.Initialize(295); // "Dg" Response.Append(ObjectTree.Game.Items.spriteIndex); sendResponse(); Response.Initialize(297); // "Di" Response.appendWired(false); sendResponse(); } #endregion } }