Plus emu R2 Group furniture

Oct 12, 2013
69
1
Hello guys,

i have been trying to add the "group furniture" fix so it doesnt dc you when you click on the group furniture but i don't get it working. this is my groupmanager.cs:



using System;using System.Collections.Generic;
using System.Linq;
using System.Text;
using Database_Manager.Database.Session_Details.Interfaces;
using System.Data;
using Silverwave.Messages;
using Silverwave.HabboHotel.GameClients;
using Silverwave.HabboHotel.Users;
using Silverwave.Messages.Headers;
using Silverwave.HabboHotel.Rooms;


namespace Silverwave.HabboHotel.Groups
{
class GroupManager
{
internal List<GroupBases> Bases;
internal List<GroupSymbols> Symbols;
internal List<GroupBaseColours> BaseColours;
internal Dictionary<int, GroupSymbolColours> SymbolColours;
internal Dictionary<int, GroupBackGroundColours> BackGroundColours;


private Dictionary<uint, Group> Groups;


internal void InitGroups()
{
this.Bases = new List<GroupBases>();
this.Symbols = new List<GroupSymbols>();
this.BaseColours = new List<GroupBaseColours>();
this.SymbolColours = new Dictionary<int, GroupSymbolColours>();
this.BackGroundColours = new Dictionary<int, GroupBackGroundColours>();
this.Groups = new Dictionary<uint, Group>();
ClearInfo();
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{


dbClient.setQuery("SELECT * FROM groups_items WHERE enabled='1'");
DataTable dItems = dbClient.getTable();


foreach (DataRow dRow in dItems.Rows)
{
switch (dRow[0].ToString())
{
case "base":
Bases.Add(new GroupBases((int)dRow[1], dRow[2].ToString(), dRow[3].ToString()));
break;


case "symbol":
Symbols.Add(new GroupSymbols((int)dRow[1], dRow[2].ToString(), dRow[3].ToString()));
break;


case "color":
BaseColours.Add(new GroupBaseColours((int)dRow[1], dRow[2].ToString()));
break;


case "color2":
SymbolColours.Add((int)dRow[1], new GroupSymbolColours((int)dRow[1], dRow[2].ToString()));
break;


case "color3":
BackGroundColours.Add((int)dRow[1], new GroupBackGroundColours((int)dRow[1], dRow[2].ToString()));
break;
}
}
}
}


internal void ClearInfo()
{
Bases.Clear();
Symbols.Clear();
BaseColours.Clear();
SymbolColours.Clear();
BackGroundColours.Clear();
}


internal void CreateGroup(string Name, string Desc, uint RoomId, string Badge, GameClient Session, int Colour1, int Colour2, out Group Group)
{
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("INSERT INTO groups (`name`, `desc`,`badge`,`owner_id`,`created`,`room_id`,`colour1`,`colour2`) VALUES" +
"(@name, @desc, @badge, " + Session.GetHabbo().Id + ", UNIX_TIMESTAMP(), " + RoomId + ",'" + SymbolColours[Colour1].Colour + "','" + BackGroundColours[Colour2].Colour + "')");
dbClient.addParameter("name", Name);
dbClient.addParameter("desc", Desc);
dbClient.addParameter("badge", Badge);
uint InsertId = (uint)dbClient.insertQuery();


dbClient.runFastQuery("UPDATE rooms SET group_id=" + InsertId + " WHERE id=" + RoomId + " LIMIT 1");


Dictionary<uint, GroupUser> Member = new Dictionary<uint, GroupUser>();
Member.Add(Session.GetHabbo().Id, new GroupUser(Session.GetHabbo().Id, InsertId, 2));
Groups.Add(InsertId, new Group((uint)InsertId, Name, Desc, RoomId, Badge, SilverwaveEnvironment.GetUnixTimestamp(), Session.GetHabbo().Id, Colour1, Colour2, Member, new List<uint>(), new Dictionary<uint,GroupUser>(), 0, 1));
Session.GetHabbo().UserGroups.Add(new GroupUser(Session.GetHabbo().Id, InsertId, 2));
dbClient.runFastQuery("INSERT INTO group_memberships (group_id, user_id, rank) VALUES (" + InsertId + ", " + Session.GetHabbo().Id + ", '2')");
Group = GetGroup(InsertId);


dbClient.runFastQuery("UPDATE user_stats SET groupid=" + InsertId + " WHERE id= " + Session.GetHabbo().Id + " LIMIT 1");


dbClient.runFastQuery("DELETE FROM room_rights WHERE room_id=" + RoomId);
}
}


internal Group GetGroup(uint GroupId)
{
if (Groups != null)
{
if (Groups.ContainsKey(GroupId))
{
return Groups[GroupId];
}
else
{
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("SELECT * FROM groups WHERE id=" + GroupId + " LIMIT 1");
DataRow dRow = dbClient.getRow();


if (dRow == null)
{
return null;
}


dbClient.setQuery("SELECT user_id, rank FROM group_memberships WHERE group_id=" + GroupId);
DataTable d = dbClient.getTable();


dbClient.setQuery("SELECT user_id FROM group_requests WHERE group_id=" + GroupId);
DataTable r = dbClient.getTable();


Dictionary<uint, GroupUser> Member = new Dictionary<uint, GroupUser>();
Dictionary<uint, GroupUser> Admins = new Dictionary<uint, GroupUser>();
List<uint> Requests = new List<uint>();
foreach (DataRow Row in d.Rows)
{
Member.Add((uint)Row[0], new GroupUser((uint)Row[0], (uint)GroupId, Convert.ToInt16(Row[1])));
if (Convert.ToInt16(Row[1]) == 1)
Admins.Add((uint)Row[0], new GroupUser((uint)Row[0], (uint)GroupId, 1));
}
foreach (DataRow Row in r.Rows)
Requests.Add((uint)Row[0]);


Group Group = new Group((uint)dRow[0], dRow[1].ToString(), dRow[2].ToString(), (uint)dRow[6], dRow[3].ToString(), (int)dRow[5], (uint)dRow[4], (int)dRow[8], (int)dRow[9], Member, Requests, Admins, Convert.ToUInt16(dRow[7]), Convert.ToUInt16(dRow[10]));


Groups.Add((uint)dRow[0], Group);


return Group;
}
}
}
return null;
}


internal List<GroupUser> GetUserGroups(uint UserId)
{
List<GroupUser> Group = new List<GroupUser>();
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("SELECT group_id, rank FROM group_memberships WHERE user_id=" + UserId);
DataTable d = dbClient.getTable();

foreach (DataRow Row in d.Rows)
{
Group.Add(new GroupUser(UserId, (uint)Row[0], Convert.ToInt16(Row[1])));
}


return Group;
}
}


internal ServerMessage SerializeGroupMembers(ServerMessage Response, Group Group, uint ReqType, GameClient Session, string SearchVal = "", int Page = 0)
{
if (Group == null || Session == null)
return null;


if (Page < 1)
Page = 0;


List<List<GroupUser>> Users = Split(GetGroupUsersByString(Group, SearchVal, ReqType));
Response.AppendInt32(Group.Id);
Response.AppendString(Group.Name);
Response.AppendInt32(Group.RoomId);
Response.AppendString(Group.Badge);
switch (ReqType)
{
case 0:
Response.AppendInt32(Group.Members.Count);
Response.AppendInt32(Users[(int)Page].Count);
foreach (GroupUser User in Users[(int)Page])
{
Habbo Habbo = SilverwaveEnvironment.getHabboForId(User.Id);
if (Habbo == null)
{
Response.AppendInt32(0);
Response.AppendInt32(0);
Response.AppendString("");
Response.AppendString("");
Response.AppendString("");
}
else
{
Response.AppendInt32((User.Rank == 2) ? 0 : (User.Rank == 1) ? 1 : 2);
Response.AppendInt32(Habbo.Id);
Response.AppendString(Habbo.Username);
Response.AppendString(Habbo.Look);
Response.AppendString("");
}
}
break;
case 1:
Response.AppendInt32(Group.Admins.Count);
if (Group.Admins.Count > 0)
{
Response.AppendInt32(Users[(int)Page].Count);
foreach (GroupUser User in Users[(int)Page])
{
Habbo Habbo = SilverwaveEnvironment.getHabboForId(User.Id);
if (Habbo == null)
{
Response.AppendInt32(0);
Response.AppendInt32(0);
Response.AppendString("");
Response.AppendString("");
Response.AppendString("");
}
else
{
Response.AppendInt32((User.Rank == 2) ? 0 : (User.Rank == 1) ? 1 : 2);
Response.AppendInt32(Habbo.Id);
Response.AppendString(Habbo.Username);
Response.AppendString(Habbo.Look);
Response.AppendString("");
}
}
}
else
Response.AppendInt32(0);
break;


case 2:
List<List<uint>> Userx = Split(GetGroupRequestsByString(Group, SearchVal, ReqType));
Response.AppendInt32(Group.Requests.Count);
if (Group.Requests.Count > 0)
{
Response.AppendInt32(Userx[(int)Page].Count);
foreach (uint User in Userx[(int)Page])
{
Habbo Habbo = SilverwaveEnvironment.getHabboForId(User);
if (Habbo == null)
{
Response.AppendInt32(0);
Response.AppendInt32(0);
Response.AppendString("");
Response.AppendString("");
Response.AppendString("");
}
else
{
Response.AppendInt32(3);
Response.AppendInt32(Habbo.Id);
Response.AppendString(Habbo.Username);
Response.AppendString(Habbo.Look);
Response.AppendString("");
}
}
}
else
Response.AppendInt32(0);
break;
}
Response.AppendBoolean((Session.GetHabbo().Id == Group.CreatorId));
Response.AppendInt32(14);
Response.AppendInt32(Page);
Response.AppendInt32(ReqType); // 0 = all users, 1 = admins, 2 = requests
Response.AppendString(SearchVal);
return Response;
}


internal List<GroupUser> GetGroupUsersByString(Group Group, String SearchVal, uint Req)
{
var Users = new List<GroupUser>();
if (string.IsNullOrWhiteSpace(SearchVal))
{
if (Req == 0)
foreach (GroupUser U in Group.Members.Values)
Users.Add(U);
else
foreach (GroupUser U in Group.Admins.Values)
Users.Add(U);
}
else
{
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("SELECT id FROM users WHERE username LIKE @query");
dbClient.addParameter("query", "%" + SearchVal + "%");
DataTable Table = dbClient.getTable();
if (Table == null)
{
if (Req == 0)
foreach (GroupUser U in Group.Members.Values)
Users.Add(U);
else
foreach (GroupUser U in Group.Admins.Values)
Users.Add(U);
}
else
{
foreach (DataRow Row in Table.Rows)
{
if (Group.Members.ContainsKey((uint)Row[0]))
Users.Add(Group.Members[(uint)Row[0]]);
}
}
}
}
return Users;
}


internal List<uint> GetGroupRequestsByString(Group Group, String SearchVal, uint Req)
{
if (string.IsNullOrWhiteSpace(SearchVal))
return Group.Requests;
var Users = new List<uint>();
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("SELECT id FROM users WHERE username LIKE @query");
dbClient.addParameter("query", "%" + SearchVal + "%");
DataTable Table = dbClient.getTable();
if (Table != null)
{
foreach (DataRow Row in Table.Rows)
{
if (Group.Requests.Contains((uint)Row[0]))
Users.Add((uint)Row[0]);
}
}
}
return Users;
}


internal void SerializeGroupInfo(Group Group, ServerMessage Response, GameClient Session, bool NewWindow = false)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
DateTime Time = origin.AddSeconds(Group.CreateTime);
if (Group == null || Session == null)
return;
Response.Init(Outgoing.SerializeGroupInfo);
Response.AppendInt32(Group.Id);
Response.AppendBoolean(true); //isVisible
Response.AppendInt32(Group.State); // Type (0 = 50k users, 1 = Request, 2 = blocked, 3 = ?, 4 = ?..
Response.AppendString(Group.Name);
Response.AppendString(Group.Description);
Response.AppendString(Group.Badge);
Response.AppendInt32(Group.RoomId);
Response.AppendString((SilverwaveEnvironment.GetGame().GetRoomManager().GenerateRoomData(Group.RoomId) == null) ? "No room found.." : SilverwaveEnvironment.GetGame().GetRoomManager().GenerateRoomData(Group.RoomId).Name); // room name
Response.AppendInt32((Group.CreatorId == Session.GetHabbo().Id) ? 3 : (Group.Requests.Contains(Session.GetHabbo().Id)) ? 2 : (Group.Members.ContainsKey(Session.GetHabbo().Id)) ? 1 : 0); //Member
Response.AppendInt32(Group.Members.Count); // Members
Response.AppendBoolean(Session.GetHabbo().FavouriteGroup == Group.Id);
Response.AppendString(Time.Day + "-" + Time.Month + "-" + Time.Year);
Response.AppendBoolean(Group.CreatorId == Session.GetHabbo().Id);
Response.AppendBoolean((Group.Admins.ContainsKey(Session.GetHabbo().Id))); // admin
Response.AppendString((SilverwaveEnvironment.getHabboForId(Group.CreatorId) == null) ? "" : SilverwaveEnvironment.getHabboForId(Group.CreatorId).Username);
Response.AppendBoolean(NewWindow); // Show group info
Response.AppendBoolean(Group.AdminOnlyDeco == 0); // Any user can place furni in home room
Response.AppendInt32(Group.Requests.Count); // Pending users
Response.AppendBoolean(false);
Session.SendMessage(Response);
}


internal void SerializeGroupInfo(Group Group, ServerMessage Response, GameClient Session, Room Room, bool NewWindow = false)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
DateTime Time = origin.AddSeconds(Group.CreateTime);
Response.Init(Outgoing.SerializeGroupInfo);
Response.AppendInt32(Group.Id);
Response.AppendBoolean(true);
Response.AppendInt32(Group.State); // Type (0 = 50k users, 1 = Request, 2 = blocked, 3 = ?, 4 = ?..
Response.AppendString(Group.Name);
Response.AppendString(Group.Description);
Response.AppendString(Group.Badge);
Response.AppendInt32(Group.RoomId);
Response.AppendString((SilverwaveEnvironment.GetGame().GetRoomManager().GenerateRoomData(Group.RoomId) == null) ? "No room found.." : SilverwaveEnvironment.GetGame().GetRoomManager().GenerateRoomData(Group.RoomId).Name); // room name
Response.AppendInt32((Group.CreatorId == Session.GetHabbo().Id) ? 3 : (Group.Requests.Contains(Session.GetHabbo().Id)) ? 2 : (Group.Members.ContainsKey(Session.GetHabbo().Id)) ? 1 : 0); //Member
Response.AppendInt32(Group.Members.Count); // Members
Response.AppendBoolean(Session.GetHabbo().FavouriteGroup == Group.Id);
Response.AppendString(Time.Day + "-" + Time.Month + "-" + Time.Year);
Response.AppendBoolean(Group.CreatorId == Session.GetHabbo().Id);
Response.AppendBoolean((Group.Admins.ContainsKey(Session.GetHabbo().Id)));
Response.AppendString((SilverwaveEnvironment.getHabboForId(Group.CreatorId) == null) ? "" : SilverwaveEnvironment.getHabboForId(Group.CreatorId).Username);
Response.AppendBoolean(NewWindow); // Show group info
Response.AppendBoolean(Group.AdminOnlyDeco == 0); // Any user can place furni in home room
Response.AppendInt32(Group.Requests.Count); // Pending users
if (Room != null)
Room.SendMessage(Response);
else if (Session != null)
Session.SendMessage(Response);


/*if (Session.GetHabbo().Id == Group.CreatorId)
SerializeGroupInfo(Group, Response, Session, false);*/
}


private static List<List<GroupUser>> Split(List<GroupUser> source)
{
return source
.Select((x, i) => new { Index = i, Value = x })
.GroupBy(x => x.Index / 14)
.Select(x => x.Select(v => v.Value).ToList())
.ToList();
}


private static List<List<uint>> Split(List<uint> source)
{
return source
.Select((x, i) => new { Index = i, Value = x })
.GroupBy(x => x.Index / 14)
.Select(x => x.Select(v => v.Value).ToList())
.ToList();
}
internal bool IsMember(uint UserId, uint GroupId)
{
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("SELECT id FROM groups_memberships WHERE user_id=" + UserId + " AND group_id=" + GroupId + " LIMIT 1");
DataRow Row = dbClient.getRow();
if (Row != null)
return true;
}
return false;
}
internal string CheckActiveSymbol(string Symbol)
{
if (Symbol == "s000" || Symbol == "s00000")
{
return "";
}
return Symbol;
}


internal string GetGroupColour(int Index, bool Colour1)
{
if (Colour1)
{
if (SymbolColours.ContainsKey(Index))
{
return SymbolColours[Index].Colour;
}
}
else
{
if (BackGroundColours.ContainsKey(Index))
{
return BackGroundColours[Index].Colour;
}
}


return "4f8a00";
}


internal void DeleteGroup(uint Id)
{
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("DELETE FROM group_memberships WHERE group_id=@id;" +
"DELETE FROM group_requests WHERE group_id=@id;" +
"DELETE FROM groups WHERE id=@id LIMIT 1;");
dbClient.addParameter("id", Id);
dbClient.runQuery();


Groups.Remove(Id);
}
}
}
}Regards
 

Users who are viewing this thread

Top