public static string dataPacket(ConnectedUser user) { int[] RoomIDs = MySQL.runReadColumn("SELECT id FROM rooms WHERE owner='"+user._UserID+"'", 0, null); RoomDataPacket[] ownRooms = new RoomDataPacket[RoomIDs.Length]; for (int i = 0; i < RoomIDs.Length; i++) { string[] roomData = MySQL.runReadRow("SELECT name, descr, max, safe FROM rooms WHERE id = '" + RoomIDs[i] + "'"); RoomDataPacket getr = new RoomDataPacket(); getr.I = RoomIDs[i]; getr.N = roomData[0]; getr.D = roomData[1]; getr.O = user._Username; if (RoomManager.containsRoom(RoomIDs[i])) { getr.U = RoomManager.getRoom(RoomIDs[i]).countUsers(); } else { getr.U = 0; } getr.M = int.Parse(roomData[2]); getr.T = "private"; getr.S = int.Parse(roomData[3]); getr.F = 0; //FAVORIET? ownRooms[i] = getr; } NavigatorPacket AllRooms = new NavigatorPacket(); AllRooms.P = publicRooms; AllRooms.R = guestRooms; AllRooms.O = ownRooms; string AllRoomsString = JsonConvert.SerializeObject(AllRooms); return AllRoomsString; }
public static Room joinRoom(ConnectedUser User, int roomID) { if (!containsRoom(roomID)) { addRoom(roomID, new PrivateRoom(roomID)); getRoom(roomID).addUser(User); return getRoom(roomID); } else { getRoom(roomID).addUser(User); return getRoom(roomID); } }
public static void addUser(int userID, ConnectedUser User) { if (_Users.ContainsKey(userID)) { ConnectedUser oldUser = ((ConnectedUser)_Users[userID]); oldUser.Disconnect(); if (_Users.ContainsKey(userID)) _Users.Remove(userID); } _Users.Add(userID, User); Config.Debug.WriteLine("[" + User.connectionID + "]" + " User [" + User._UserID + "] connected."); if (_Users.Count > _peakUserCount) _peakUserCount = _Users.Count; MySQL.runQuery("UPDATE store_values SET value = '" + _Users.Count + "' WHERE name = 'jabbos_online'"); }
public virtual void actionFurni(ConnectedUser User, int I) { }
public void vote(string vote, ConnectedUser user) { if (user._UserID != RoomOwner && !user._Room_Voted) { if (vote == "up") { MySQL.runQuery("UPDATE rooms SET score = " + ++score + " WHERE id = '" + RoomID + "'"); } else if (vote == "down") { MySQL.runQuery("UPDATE rooms SET score = " + --score + " WHERE id = '" + RoomID + "'"); } MySQL.runQuery("INSERT INTO room_votes SET user='******', room='" + RoomID + "'"); user._Room_Voted = true; } RoomScorePacket toremove = new RoomScorePacket(); toremove.S = score; string scorePacketString = JsonConvert.SerializeObject(toremove); user.sendData("066" + scorePacketString + "#"); }
public void userChat(ConnectedUser sender, string message, string userName) { sendChat(sender._UserID, message, userName); foreach (RoomBot Bot in _Bots.Values) { Bot.DoChat(message, sender); } }
public override void loadRoomPacket(ConnectedUser user) { int votedCheck = int.Parse(MySQL.runRead("SELECT count(user) FROM room_votes WHERE user='******' AND room='" + RoomID + "'")); if (votedCheck > 0) { user._Room_Voted = true; } else { user._Room_Voted = false; } if (user._UserID == RoomOwner) { user._Room_Voted = true; } FurniturePacket[] Items = new FurniturePacket[furniture.Count]; int i = 0; foreach (Item itm in furniture.Values) { FurniturePacket getf = new FurniturePacket(); getf.I = itm.id; getf.T = itm.tile; getf.S = itm.stacknr; getf.SH = itm.stackheight; getf.H = itm.turn; getf.A = itm.action; getf.F = itm.furni; Items[i] = getf; i++; } RoomLoadDataPacket rd = new RoomLoadDataPacket(); rd.I = RoomID; rd.N = RoomName; rd.D = RoomDescr; rd.O = RoomOwner; rd.ON = RoomOwnerName; rd.Fl = floorType; rd.Wl = wallType; rd.L = lang; rd.B = breed; rd.Do = door; rd.M = RoomSize; rd.R = user._HasRights; rd.H = holes; rd.V = user._Room_Voted; rd.S = score; rd.F = Items; string ItemsData = JsonConvert.SerializeObject(rd); user.sendData("041" + ItemsData + "#"); }
public override void doFurni(ConnectedUser user, int id, string tile) { bool inRoom = false; bool donating = false; Item furniData; if (furniture.ContainsKey(id)) { furniData = getItem(id); inRoom = true; } else { string[] data = MySQL.runReadRow("SELECT owner, room, tile, stacknr, stackheight, turn, action, furni, tradeable FROM items WHERE id = '" + id + "'"); furniData = new Item(id, int.Parse(data[0]), int.Parse(data[1]), data[2], int.Parse(data[3]), int.Parse(data[4]), int.Parse(data[5]), int.Parse(data[6]), data[7], int.Parse(data[8])); } CatalogueManager.ItemTemplate furniTemplate = CatalogueManager.getTemplate(furniData.furni); if (user._HasRights) { List<Point> currentTiles; if (furniTemplate.soort != "poster") { currentTiles = getCurrentTiles(furniData, inRoom); } else { currentTiles = new List<Point>(); } if (tile == "inv") { if (RoomOwner == user._UserID || RankManager.containsRight(user._Rank, "always_pickup")) { // check if it's the room, otherwise: remove from hashtable! if (inRoom) { // remove from room furniture.Remove(id); MySQL.runQuery("UPDATE items SET owner='" + user._UserID + "', room='0', tile='" + tile + "', stacknr='1', stackheight='0', turn='1', action='0' WHERE id='" + id + "'"); if (RoomOwner != user._UserID) { MySQL.runQuery("INSERT INTO furni_history SET id='" + id + "', `date`='" + timestamp.get + "', `type`='take', `from`='" + RoomOwner + "', `to`='" + user._UserID + "', credits='0';"); } updateHeightmapping(); FurniturePacket movePacket = new FurniturePacket(); movePacket.I = furniData.id; movePacket.T = tile; movePacket.S = 1; movePacket.SH = 0; movePacket.H = 1; movePacket.A = 0; movePacket.F = furniData.furni; string movePacketString = JsonConvert.SerializeObject(movePacket); user.sendData("047" + movePacketString + "#"); FurnitureRemovePacket removePacket = new FurnitureRemovePacket(); removePacket.I = furniData.id; string removePacketString = JsonConvert.SerializeObject(removePacket); sendDataButNotTo(user, "048" + removePacketString + "#"); // chair stuff if (furniTemplate.soort == "stoel") { StringBuilder sendText = new StringBuilder(); for (int i = 0; i < currentTiles.Count; i++) { Point thisTile = currentTiles[i]; if (_sqUnit[thisTile.X, thisTile.Y] == true) { foreach (ConnectedUser seatUser in _Users.Values) { if (seatUser._Room_X == thisTile.X && seatUser._Room_Y == thisTile.Y) { seatUser._Room_Sit = ""; SetSitPacket setSit = new SetSitPacket(); setSit.I = seatUser._UserID; setSit.S = seatUser._Room_Sit; string SetSitPacket = JsonConvert.SerializeObject(setSit); sendText.Append("080"); sendText.Append(SetSitPacket); sendText.Append("#"); } } } } string sendTextString = sendText.ToString(); if (sendTextString != "") { foreach (ConnectedUser usr in _Users.Values) { usr.sendData(sendTextString); } } } } } } else { if (inRoom || furniData.owner == user._UserID) { // moving or placing in room, not putting in inventory if (!inRoom && furniData.owner == user._UserID && RoomOwner != user._UserID) { donating = true; } if (donating && furniData.tradeable == 0) { // not tradeable user.sendData(user.notify(TextsManager.get("untradeable"), TextsManager.get("notify_default"))); } else { if (furniTemplate.soort != "poster") { int X = int.Parse(tile.Split('_')[0]) - 1; int Y = int.Parse(tile.Split('_')[1]) - 1; string check = furniPlaceable(furniData, new int[] { X, Y }, furniData.turn, furniTemplate.lang, furniTemplate.breed, inRoom, currentTiles); if (check == "free") { furniData.tile = tile; if (!inRoom) { furniture.Add(id, furniData); } else { furniture[id] = furniData; // update hashtable } MySQL.runQuery("UPDATE items SET owner='" + RoomOwner + "', room='" + RoomID + "', tile='" + tile + "' WHERE id='" + id + "'"); if (donating) { MySQL.runQuery("INSERT INTO furni_history SET id='" + id + "', `date`='" + timestamp.get + "', `type`='don', `from`='" + user._UserID + "', `to`='" + RoomOwner + "', credits='0';"); } updateHeightmapping(); FurniturePacket movepacket = new FurniturePacket(); movepacket.I = furniData.id; movepacket.T = furniData.tile; movepacket.S = furniData.stacknr; movepacket.SH = furniData.stackheight; movepacket.H = furniData.turn; movepacket.A = furniData.action; movepacket.F = furniData.furni; string movepacketstring = JsonConvert.SerializeObject(movepacket); foreach (ConnectedUser usr in _Users.Values) { usr.sendData("047" + movepacketstring + "#"); } // chair stuff if (furniTemplate.soort == "stoel" && inRoom) { StringBuilder sendText = new StringBuilder(); for (int i = 0; i < currentTiles.Count; i++) { Point thisTile = currentTiles[i]; if (_sqUnit[thisTile.X, thisTile.Y] == true) { foreach (ConnectedUser seatUser in _Users.Values) { if (seatUser._Room_X == thisTile.X && seatUser._Room_Y == thisTile.Y) { if (_sqState[seatUser._Room_X, seatUser._Room_Y] == squareState.Seat) { seatUser._Room_Dir = _sqRot[seatUser._Room_X, seatUser._Room_Y] * 2; seatUser._Room_Sit = seatUser._Room_Dir.ToString() + "|" + _sqTile[seatUser._Room_X, seatUser._Room_Y]; } else { seatUser._Room_Sit = ""; } SetSitPacket setSit = new SetSitPacket(); setSit.I = seatUser._UserID; setSit.S = seatUser._Room_Sit; string SetSitPacket = JsonConvert.SerializeObject(setSit); sendText.Append("080"); sendText.Append(SetSitPacket); sendText.Append("#"); } } } } string sendTextString = sendText.ToString(); if (sendTextString != "") { foreach (ConnectedUser usr in _Users.Values) { usr.sendData(sendTextString); } } } } } else { if (!inRoom) // only place and pickup poster, don't move them { string coords = tile.Split('@')[0]; int X = int.Parse(coords.Split('|')[0]); int Y = int.Parse(coords.Split('|')[1]); int H = int.Parse(tile.Split('@')[1]); furniData.tile = coords; furniData.turn = H; furniture.Add(id, furniData); MySQL.runQuery("UPDATE items SET owner='" + RoomOwner + "', room='" + RoomID + "', tile='" + coords + "', turn='" + H + "' WHERE id='" + id + "'"); if (donating) { MySQL.runQuery("INSERT INTO furni_history SET id='" + id + "', `date`='" + timestamp.get + "', `type`='don', `from`='" + user._UserID + "', `to`='" + RoomOwner + "', credits='0';"); } FurniturePacket movepacket = new FurniturePacket(); movepacket.I = furniData.id; movepacket.T = furniData.tile; movepacket.S = furniData.stacknr; movepacket.SH = furniData.stackheight; movepacket.H = furniData.turn; movepacket.A = furniData.action; movepacket.F = furniData.furni; string movepacketstring = JsonConvert.SerializeObject(movepacket); foreach (ConnectedUser usr in _Users.Values) { usr.sendData("047" + movepacketstring + "#"); } } } } } } } }
public void sendDataButNotTo(ConnectedUser NotTo, string Data) { foreach (ConnectedUser User in _Users.Values) { if (User != NotTo) { User.sendData(Data); } } }
public void removeUser(ConnectedUser userToRemove) { if (!containsUser(userToRemove._UserID)) { return; } _Users.Remove(userToRemove._UserID); foreach (ConnectedUser usr in _Users.Values) { RemoveAvatarPacket toremove = new RemoveAvatarPacket(); toremove.I = userToRemove._UserID; string stringtoremove = JsonConvert.SerializeObject(toremove); usr.sendData("058" + stringtoremove + "#"); } if (!(userToRemove._Room_X == doorstep_x && userToRemove._Room_Y == doorstep_y)) { try { _sqUnit[userToRemove._Room_X, userToRemove._Room_Y] = false; } catch { } } userToRemove._Room_X = 0; userToRemove._Room_Y = 0; userToRemove._Room_X_Target = 0; userToRemove._Room_Y_Target = 0; userToRemove._HasRights = false; userToRemove._Drink = ""; userToRemove._Brb = 0; userToRemove._Room_Sit = ""; if ((countUsers()) == 0) { _Users.Clear(); _Bots.Clear(); RoomManager.removeRoom(RoomID); } }
public virtual void pickAllUp(ConnectedUser User) { }
public virtual void loadRoomPacket(ConnectedUser User) { }
public void getDrink(string drink, ConnectedUser user) { if (drink == "" || drink == "camera") { user._Drink = drink; GiveDrinkPacket giveDrink = new GiveDrinkPacket(); giveDrink.I = user._UserID; giveDrink.D = drink; string giveDrinkString = JsonConvert.SerializeObject(giveDrink); string sendText = "074" + giveDrinkString + "#"; foreach (ConnectedUser usr in _Users.Values) { usr.sendData(sendText); } } }
public virtual void doFurni(ConnectedUser User, int I, string T) { }
public void addUser(ConnectedUser User) { removeUser(User); // just a check int users = countUsers(); if (users < max_users) { User._Room_X = door_x; User._Room_Y = door_y; User._Room_Z = 0; User._Room_Dir = door_dir * 2; User._Room_X_Target = door_x; User._Room_Y_Target = door_y; User._Drink = ""; User._Brb = 0; User._Room_Sit = ""; if (RoomOwner == User._UserID || RankManager.containsRight(User._Rank, "always_rights")) { User._HasRights = true; } else { if (MySQL.runRead("SELECT userid FROM room_rights WHERE roomid = '" + RoomID + "' AND userid = '" + User._UserID + "'", null) == 0) { User._HasRights = false; } else { User._HasRights = true; } } loadRoomPacket(User); foreach (ConnectedUser usr in _Users.Values) { AddAvatarPacket avatars = new AddAvatarPacket(); avatars.I = User._UserID; avatars.U = User._Username; avatars.M = User._Mission; avatars.C = User._Figure; avatars.B = User._Badge; avatars.D = User._Drink; avatars.Brb = User._Brb; avatars.S = User._Room_Sit; avatars.X = User._Room_X; avatars.Y = User._Room_Y; avatars.H = User._Room_Dir; avatars.F = User._HasRights; string stringavatars = JsonConvert.SerializeObject(avatars); usr.sendData("056" + stringavatars + "#"); } _Users.Add(User._UserID, User); sendRoomData(User); } else { // room is full sendData("061#"); } }
public override void turnFurni(ConnectedUser user, int id) { if (furniture.ContainsKey(id) && user._HasRights) { Item furniData = getItem(id); CatalogueManager.ItemTemplate furniTemplate = CatalogueManager.getTemplate(furniData.furni); if (furniData.tile != "inv" && furniTemplate.soort != "poster") { int turns = furniTemplate.afb; int turnNow = furniData.turn; int turnNext = turnNow; if (furniTemplate.soort == "stoel" && turns == 1) { turns = 4; } if (turnNow == turns) { turnNext = 1; } else { turnNext = turnNow + 1; } int X = int.Parse(furniData.tile.Split('_')[0]) - 1; int Y = int.Parse(furniData.tile.Split('_')[1]) - 1; List<Point> currentTiles = getCurrentTiles(furniData, true); string check = furniPlaceable(furniData, new int[] { X, Y }, turnNext, furniTemplate.lang, furniTemplate.breed, true, currentTiles); if (check == "free") { furniData.turn = turnNext; furniture[id] = furniData; // update hashtable MySQL.runQuery("UPDATE items SET turn='" + turnNext + "' WHERE id='" + id + "'"); updateHeightmapping(); FurniturePacket movepacket = new FurniturePacket(); movepacket.I = furniData.id; movepacket.T = furniData.tile; movepacket.S = furniData.stacknr; movepacket.SH = furniData.stackheight; movepacket.H = furniData.turn; movepacket.A = furniData.action; movepacket.F = furniData.furni; string movepacketstring = JsonConvert.SerializeObject(movepacket); foreach (ConnectedUser usr in _Users.Values) { usr.sendData("047" + movepacketstring + "#"); } } // chair stuff if (furniTemplate.soort == "stoel") { StringBuilder sendText = new StringBuilder(); for (int i = 0; i < currentTiles.Count; i++) { Point thisTile = currentTiles[i]; if (_sqUnit[thisTile.X, thisTile.Y] == true) { foreach (ConnectedUser seatUser in _Users.Values) { if (seatUser._Room_X == thisTile.X && seatUser._Room_Y == thisTile.Y) { if (_sqState[seatUser._Room_X, seatUser._Room_Y] == squareState.Seat) { seatUser._Room_Dir = _sqRot[seatUser._Room_X, seatUser._Room_Y] * 2; seatUser._Room_Sit = seatUser._Room_Dir.ToString() + "|" + _sqTile[seatUser._Room_X, seatUser._Room_Y]; } else { seatUser._Room_Sit = ""; } SetSitPacket setSit = new SetSitPacket(); setSit.I = seatUser._UserID; setSit.S = seatUser._Room_Sit; string SetSitPacket = JsonConvert.SerializeObject(setSit); sendText.Append("080"); sendText.Append(SetSitPacket); sendText.Append("#"); } } } } string sendTextString = sendText.ToString(); if (sendTextString != "") { foreach (ConnectedUser usr in _Users.Values) { usr.sendData(sendTextString); } } } } } }
public void sendRoomData(ConnectedUser User) { WaitDelegate X = new WaitDelegate(sendRoomData2); IAsyncResult ar = X.BeginInvoke(User, null, null); ar.AsyncWaitHandle.WaitOne(1000, false); if (ar.IsCompleted) { X.EndInvoke(ar); } }
public override void actionFurni(ConnectedUser user, int id) { if (furniture.ContainsKey(id) && user._HasRights) { Item furniData = getItem(id); CatalogueManager.ItemTemplate furniTemplate = CatalogueManager.getTemplate(furniData.furni); if (furniData.tile != "inv" && furniTemplate.action == 1) { // don't close door while an avatar is still in it! bool usersInDoor = false; if (furniTemplate.soort == "poort") { int X = int.Parse(furniData.tile.Split('_')[0]) - 1; int Y = int.Parse(furniData.tile.Split('_')[1]) - 1; int lengte = 0; int breedte = 0; switch(furniData.turn) { case 1: lengte = furniTemplate.lang; breedte = furniTemplate.breed; break; case 2: lengte = furniTemplate.breed; breedte = furniTemplate.lang; break; case 3: lengte = furniTemplate.lang; breedte = furniTemplate.breed; break; case 4: lengte = furniTemplate.breed; breedte = furniTemplate.lang; break; } for (int i1 = 0; i1 < lengte; i1++) { for (int i2 = 0; i2 < breedte; i2++) { int thisX = X - i1; int thisY = Y + i2; if (_sqUnit[thisX, thisY]) { usersInDoor = true; } } } } if (!usersInDoor) { int actionNext = 0; if (furniData.action == 1) { actionNext = 0; } else { actionNext = 1; } furniData.action = actionNext; furniture[id] = furniData; // update hashtable MySQL.runQuery("UPDATE items SET action='" + actionNext + "' WHERE id='" + id + "'"); updateHeightmapping(); FurniturePacket movepacket = new FurniturePacket(); movepacket.I = furniData.id; movepacket.T = furniData.tile; movepacket.S = furniData.stacknr; movepacket.SH = furniData.stackheight; movepacket.H = furniData.turn; movepacket.A = furniData.action; movepacket.F = furniData.furni; string movepacketstring = JsonConvert.SerializeObject(movepacket); foreach (ConnectedUser usr in _Users.Values) { usr.sendData("047" + movepacketstring + "#"); } } } } }
public void sendRoomData2(ConnectedUser User) { string sendText = ""; foreach (ConnectedUser usr in _Users.Values) { AddAvatarPacket avatars = new AddAvatarPacket(); avatars.I = usr._UserID; avatars.U = usr._Username; avatars.M = usr._Mission; avatars.C = usr._Figure; avatars.B = usr._Badge; avatars.D = usr._Drink; avatars.Brb = usr._Brb; avatars.S = usr._Room_Sit; avatars.X = usr._Room_X; avatars.Y = usr._Room_Y; avatars.H = usr._Room_Dir; avatars.F = false; avatars.R = usr._HasRights; string stringavatars = JsonConvert.SerializeObject(avatars); sendText += "056" + stringavatars + "#"; } foreach (RoomBot bot in _Bots.Values) { // TODO: make it have a better id and different id AddAvatarPacket avatars = new AddAvatarPacket(); avatars.I = bot._MyAvatarID; avatars.U = bot._MyName; avatars.M = bot._MyMission; avatars.C = bot._MyFigure; avatars.B = "7"; // bot badge avatars.D = ""; avatars.Brb = 0; avatars.S = bot._Sit; avatars.X = bot._MyX; avatars.Y = bot._MyY; avatars.H = bot._MyZ; avatars.F = false; avatars.R = false; string stringavatars = JsonConvert.SerializeObject(avatars); sendText += "056" + stringavatars + "#"; } sendText += "044" + "#"; User.sendData(sendText); }
public override void pickAllUp(ConnectedUser user) { if (user._HasRights) { if (RoomOwner == user._UserID || RankManager.containsRight(user._Rank, "always_pickup")) { List<int> removeIDs = new List<int>(); foreach (Item itm in furniture.Values) { removeIDs.Add(itm.id); } removeIDs.ToArray(); foreach (int furniID in removeIDs) { doFurni(user, furniID, "inv"); } } } }
public virtual void turnFurni(ConnectedUser User, int I) { }
public void DoChat(string Message, ConnectedUser User) { Message = Message.ToLower(); string[] messageWords = Message.Split(' '); if (chatTriggers != null) { foreach (chatTrigger Trigger in chatTriggers) { for (int i = 0; i < messageWords.Length; i++) { if (messageWords[i] != " " && messageWords[i] != "") { if (Trigger.containsWord(messageWords[i])) { _MyRoom.sendChat(_MyAvatarID, Trigger.Reply, _MyName); } } } } } }
public void updateBrb(int brb, ConnectedUser user) { if (brb == 0 || brb == 1) { user._Brb = brb; UpdateBrbPacket updateBrb = new UpdateBrbPacket(); updateBrb.I = user._UserID; updateBrb.Brb = brb; string updateBrbString = JsonConvert.SerializeObject(updateBrb); string sendText = "082" + updateBrbString + "#"; foreach (ConnectedUser usr in _Users.Values) { usr.sendData(sendText); } } }