private void NotifyClientDiceRoll(int itemId, int rollVal, bool isRoll) { ClientMessage mMessage = new ClientMessage(); mMessage.Init(90); //AZ mMessage.appendString(itemId.ToString()); if (isRoll) mRoomInstance.RoomBroadcast(mMessage); mMessage.appendString(" "); mMessage.appendInt(rollVal); if (isRoll) { new RoomInstance.RoomDelayBroadcastDelegate(mRoomInstance.RoomDelayBroadcast).BeginInvoke(mMessage, 2000, null, null); } else { mRoomInstance.RoomBroadcast(mMessage); } }
private void ProcessTeleporter(FurniInfo Teleporter1, RoomUser user) { FurniInfo Teleporter2 = null; Point invalidPoint = new Point(Teleporter1.PosX, Teleporter1.PosY); if (Teleporter1.PosRotation == 0 || Teleporter1.PosRotation == 2) invalidPoint.X++; if (Teleporter1.PosRotation == 4) invalidPoint.Y++; if (InstanceManager.Game.Furni.FurniExists(Teleporter1.TeleportId)) { Teleporter2 = InstanceManager.Game.Furni.GetFurni(Teleporter1.TeleportId); } if (!user.UserLocked) { user.UserLocked = true; Thread.Sleep(1000); if (Teleporter1.PosX == user.CurrentX && Teleporter1.PosY == user.CurrentY) { ClientMessage message = new ClientMessage(); if (Teleporter2 != null && Teleporter2.RoomID > 0 && Teleporter1.Flags.IsTeleport && Teleporter2.Flags.IsTeleport) { message.Init(89); //AY message.appendInt(Teleporter1.FurniID); message.appendString("/"); message.appendString(user.UserInfo.sUsername); message.appendString("/"); message.appendString(Teleporter1.FurniSprite); mRoomInstance.RoomBroadcast(message); if (Teleporter2.RoomID == Teleporter1.RoomID) //Same room { Thread.Sleep(2000); Teleporter2 = InstanceManager.Game.Furni.GetFurni(Teleporter1.TeleportId); Teleporter1 = InstanceManager.Game.Furni.GetFurni(Teleporter1.FurniID); if (Teleporter2.RoomID == Teleporter1.RoomID && Teleporter1.PosX == user.CurrentX && Teleporter1.PosY == user.CurrentY) { message.Init(92); //A\ message.appendInt(Teleporter2.FurniID); message.appendString("/"); message.appendString(user.UserInfo.sUsername); message.appendString("/"); message.appendString(Teleporter2.FurniSprite); mRoomInstance.RoomBroadcast(message); mPlayerMap[user.CurrentX, user.CurrentY] = false; user.CurrentX = Teleporter2.PosX; user.CurrentY = Teleporter2.PosY; user.CurrentZ = Teleporter2.PosZ; mRoomInstance.AnnounceUserStatus(user.SessionID, true); mPlayerMap[user.CurrentX, user.CurrentY] = true; user.UserLocked = false; } else { if (Teleporter1.PosX == user.CurrentX && Teleporter1.PosY == user.CurrentY) { RequestSetStuffDataFloorItem(Teleporter1.FurniID, "TRUE", user, FurniInfo.VarTypes.TempOpen); RequestMovePlayer(user.SessionID, invalidPoint.X, invalidPoint.Y, null, true); } user.UserLocked = false; } } else //In another room { InstanceManager.Sessions.GetSession(user.SessionID).authenticatedDoor = Teleporter2.FurniID; InstanceManager.Sessions.GetSession(user.SessionID).authenticatedFlat = Teleporter2.RoomID; message.Init(62); //@~ message.appendArgumentInt(Teleporter2.FurniID); message.appendArgumentInt(Teleporter2.RoomID); mRoomInstance.SendMessage(message, user.SessionID); } } else //No linked teleporter exists { Thread.Sleep(700); RequestSetStuffDataFloorItem(Teleporter1.FurniID, "TRUE", user, FurniInfo.VarTypes.TempOpen); RequestMovePlayer(user.SessionID, invalidPoint.X, invalidPoint.Y, null, true); user.UserLocked = false; } } } }
public void RequestPickupWallItem(int itemId, int userId) { if (ContainsItem(itemId)) { FurniInfo info = GetFurniObject(itemId); if (info != null) { if (info.Flags.WallItem) { if (!info.Flags.StickyNote) //Can't pick up stickies { InstanceManager.Game.Furni.PickupItem(itemId, userId); mWallFurni = InstanceManager.Game.Furni.GetRoomWallFurni(mRoomInstance.RoomInfo.RoomID); ClientMessage mMessage = new ClientMessage(); mMessage.Init(84); // AT mMessage.appendInt(itemId); mRoomInstance.RoomBroadcast(mMessage); } } } } }
public void RequestPickupFloorStuff(int itemId, int userId) { if (ContainsItem(itemId)) { FurniInfo furni = GetFurniObject(itemId); if (furni != null) { if (!furni.Flags.WallItem) { InstanceManager.Game.Furni.PickupItem(itemId, userId); mFloorFurni = InstanceManager.Game.Furni.GetRoomFloorFurni(mRoomInstance.RoomInfo.RoomID); ClientMessage mMessage = new ClientMessage(); mMessage.Init(94); // A^ mMessage.appendInt(itemId); mRoomInstance.RoomBroadcast(mMessage); GenerateMaps(); mMessage.Init(31); //@_ mMessage.appendString(ClientMap); mRoomInstance.RoomBroadcast(mMessage); // Remove statuses on users effected by this item UpdateChangedUsers(furni.PosX, furni.PosY); Dictionary<int, AffectedTile> affectedTiles = GetAffectedTiles(furni); foreach (AffectedTile affectedTile in affectedTiles.Values) { UpdateChangedUsers(affectedTile.X, affectedTile.Y); } } } } }
public void RequestOpenPresent(int userId, int presentId, Users.UserInfo userInfo, long sessionId) { if (ContainsItem(presentId)) { FurniInfo furni = GetFurniObject(presentId); if (furni != null) { if (furni.Flags.Gift) { GiftInfo gift = InstanceManager.Game.Furni.GetGift(presentId); int newId = 0; InstanceManager.Game.Catalogue.BuyItem("0", gift.PurchaseCode, gift.Payload, ref userInfo, true, ref newId); InstanceManager.Game.Furni.DeleteGift(presentId); InstanceManager.Game.Furni.DeleteFurni(presentId); mFloorFurni = InstanceManager.Game.Furni.GetRoomFloorFurni(mRoomInstance.RoomInfo.RoomID); FurniInfo info = InstanceManager.Game.Furni.GetFurni(newId); ClientMessage mMessage = new ClientMessage(); mMessage.Init(129); //BA mMessage.appendString(info.FurniSprite); mMessage.appendChar(13); mMessage.appendString(info.FurniSprite); if (info.Flags.WallItem) { mMessage.appendString(" "); mMessage.appendString(info.Col); mMessage.appendChar(13); } else { mMessage.appendChar(13); mMessage.appendInt(info.L); mMessage.appendChar(13); mMessage.appendInt(info.W); mMessage.appendChar(13); mMessage.appendString(info.Col); } mRoomInstance.SendMessage(mMessage, sessionId); mMessage.Init(94); // A^ mMessage.appendInt(presentId); mRoomInstance.RoomBroadcast(mMessage); GenerateMaps(); mMessage.Init(31); //@_ mMessage.appendString(ClientMap); mRoomInstance.RoomBroadcast(mMessage); } } } }
public void RequestDeleteSticky(int itemId, int userId, long sessionId) { if (ContainsItem(itemId)) { FurniInfo info = GetFurniObject(itemId); if (info.Flags.StickyNote) { InstanceManager.Game.Furni.DeleteFurni(itemId); mWallFurni = InstanceManager.Game.Furni.GetRoomWallFurni(mRoomInstance.RoomInfo.RoomID); ClientMessage mMessage = new ClientMessage(); mMessage.Init(84); // AT mMessage.appendInt(itemId); mRoomInstance.RoomBroadcast(mMessage); } else { RequestPickupWallItem(itemId, userId); InstanceManager.Sessions.InvokeReactorMethod(sessionId, "UpdateHandInvoker"); } } }
public void RequestChangeStickyData(int itemId, string newMessage, int newItemType, long sessionId) { if (ContainsItem(itemId)) { FurniInfo info = GetFurniObject(itemId); if (info != null) { if (info.Flags.StickyNote) { if (newItemType > 0) InstanceManager.Game.Furni.SetItemType(itemId, newItemType); if (newMessage.Length > 685) newMessage = newMessage.Substring(0, 685); newMessage = SpecialFiltering.FilterChars("2,9,47", newMessage); InstanceManager.Game.Furni.SetStuffDataFloorItem(itemId, newMessage); mWallFurni = InstanceManager.Game.Furni.GetRoomWallFurni(mRoomInstance.RoomInfo.RoomID); info = GetFurniObject(itemId); ClientMessage message = new ClientMessage(); message.Init(85); //AU message.appendInt(itemId); message.appendChar(9); message.appendString(info.FurniSprite); message.appendChar(9); message.appendString(" "); message.appendString(info.WallLocation); message.appendChar(9); message.appendString(info.Col); mRoomInstance.RoomBroadcast(message); } } } }