static bool OnGuildSetONote(LoginClient client, CMSG msgID, BinReader data) { DBGuild tguild = client.Character.Guild; if (tguild == null || client.Character.GuildID == 0) { SendResult(client, 2, " ", (int)GUILDRESULT.NOT_IN_GUILD); return(true); } DBCharacter tChar = (DBCharacter)DataServer.Database.FindObjectByKey(typeof(DBCharacter), data.ReadString()); if (tChar == null) { return(true); } DBGuildMembers tMember = (DBGuildMembers)DataServer.Database.FindObjectByKey(typeof(DBGuildMembers), tChar.ObjectId); if (tMember == null) { Chat.System(client, "No member found for " + tChar.Name); return(true); } tMember.OfficerNote = data.ReadString(); DataServer.Database.SaveObject(tMember); SendRoster(client, tguild); return(true); } //OnGuildRoster
static bool OnGuildLeader(LoginClient client, CMSG msgID, BinReader data) { DBGuild guild = client.Character.Guild; if (guild == null || client.Character.GuildID == 0) { SendResult(client, 2, " ", (int)GUILDRESULT.NOT_IN_GUILD); return(true); } if (client.Character.GuildRank != 0) { SendResult(client, 1, " ", (int)GUILDRESULT.PERMISSIONS); ; return(true); } string name = data.ReadString(); DBCharacter tChar = (DBCharacter)DataServer.Database.FindObjectByKey(typeof(DBCharacter), name.ToLower()); if (tChar == null) { SendResult(client, 1, name, (int)GUILDRESULT.NOT_FOUND); return(true); } else if (client.Character.GuildID != tChar.GuildID) { SendResult(client, 1, name, (int)GUILDRESULT.NOT_IN_GUILD_S); return(true); } DBGuildMembers tMember = (DBGuildMembers)DataServer.Database.FindObjectByKey(typeof(DBGuildMembers), tChar.ObjectId); if (tMember == null) { SendResult(client, 1, name, (int)GUILDRESULT.INTERNAL); return(true); } tChar.GuildRank = 0; tMember.Rank = 0; guild.Leader = tChar.ObjectId; client.Character.GuildRank = 1; DBGuildMembers oldLeader = (DBGuildMembers)DataServer.Database.FindObjectByKey(typeof(DBGuildMembers), client.Character.ObjectId); if (oldLeader == null) { SendResult(client, 1, name, (int)GUILDRESULT.INTERNAL); return(true); } oldLeader.Rank = 1; SendToWorld(client, tChar); SendToWorld(client, client.Character); GuildMessage(guild, tChar.Name + " has been promoted to the rank of " + guild.getRankName(tChar.GuildRank) + " by " + client.Character.Name); SendRoster(client, guild); return(true); } //OnGuildLeader
static bool OnGuildRemove(LoginClient client, CMSG msgID, BinReader data) { DBGuild guild = client.Character.Guild; if (guild == null || client.Character.GuildID == 0) { SendResult(client, 2, " ", (int)GUILDRESULT.NOT_IN_GUILD); return(true); } if ((guild.getRankFlags(client.Character.GuildRank) & (uint)GUILDFLAGS.DEMOTE) != (uint)GUILDFLAGS.DEMOTE) { SendResult(client, 1, " ", (int)GUILDRESULT.PERMISSIONS); ; return(true); } string name = data.ReadString(); DBCharacter tChar = (DBCharacter)DataServer.Database.FindObjectByKey(typeof(DBCharacter), name.ToLower()); if (tChar == null) { SendResult(client, 1, name, (int)GUILDRESULT.NOT_FOUND); return(true); } else if (client.Character.GuildID != tChar.GuildID) { SendResult(client, 1, name, (int)GUILDRESULT.NOT_IN_GUILD_S); return(true); } // 2 1 if (tChar.GuildRank <= client.Character.GuildRank) { SendResult(client, 1, name, (int)GUILDRESULT.RANK_TO_HIGH); return(true); } DBGuildMembers member = (DBGuildMembers)DataServer.Database.FindObjectByKey(typeof(DBGuildMembers), tChar.ObjectId); if (member == null || member.GuildID != client.Character.GuildID) { SendResult(client, 1, name, (int)GUILDRESULT.NOT_IN_GUILD_S); return(true); } if (RemoveMember(member, client)) { Chat.System(client, "You have removed " + tChar.Name + " from the guild"); } else { SendResult(client, 1, name, (int)GUILDRESULT.INTERNAL); } return(true); } //OnGuildRemove
static bool OnGuildDemote(LoginClient client, CMSG msgID, BinReader data) { DBGuild guild = client.Character.Guild; if (guild == null || client.Character.GuildID == 0) { SendResult(client, 2, " ", (int)GUILDRESULT.NOT_IN_GUILD); return(true); } if ((guild.getRankFlags(client.Character.GuildRank) & (uint)GUILDFLAGS.DEMOTE) != (uint)GUILDFLAGS.DEMOTE) { SendResult(client, 1, " ", (int)GUILDRESULT.PERMISSIONS); ; return(true); } string name = data.ReadString(); DBCharacter tChar = (DBCharacter)DataServer.Database.FindObjectByKey(typeof(DBCharacter), name.ToLower()); if (tChar == null) { SendResult(client, 1, name, (int)GUILDRESULT.NOT_FOUND); return(true); } else if (client.Character.GuildID != tChar.GuildID) { SendResult(client, 1, name, (int)GUILDRESULT.NOT_IN_GUILD_S); return(true); } // 2 1 if (tChar.GuildRank <= client.Character.GuildRank) { SendResult(client, 1, name, (int)GUILDRESULT.RANK_TO_HIGH); return(true); } else if (tChar.GuildRank >= guild.MaxRank) { SendResult(client, 1, name, (int)GUILDRESULT.RANK_TO_LOW); return(true); } DBGuildMembers tMember = (DBGuildMembers)DataServer.Database.FindObjectByKey(typeof(DBGuildMembers), tChar.ObjectId); if (tMember != null) { tChar.GuildRank++; } tMember.Rank++; SendToWorld(client, tChar); GuildMessage(guild, tChar.Name + "has been demoted to the rank of " + guild.getRankName(tChar.GuildRank) + " by " + client.Character.Name); SendRoster(client, guild); return(true); } //OnGuildDemote
} //RemoveMember public static bool AddMember(LoginClient client, DBGuild newGuild, uint Rank) { client.Character.GuildID = newGuild.ObjectId; client.Character.GuildRank = Rank; client.Character.GuildName = newGuild.Name; client.Character.Guild = newGuild; DataServer.Database.SaveObject(client.Character); SendToWorld(client, client.Character); DBGuildMembers newMember = new DBGuildMembers(); newMember.GuildID = newGuild.ObjectId; newMember.MemberID = client.Character.ObjectId; newMember.Rank = (uint)Rank; DataServer.Database.AddNewObject(newMember); DataServer.Database.SaveObject(newMember); DataServer.Database.FillObjectRelations(newMember); DataServer.Database.FillObjectRelations(newGuild); return(true); } //AddMember
static bool OnGuildLeave(LoginClient client, CMSG msgID, BinReader data) { if (client.Character.GuildRank == 0) { Chat.GuildSay(0, client, "You must appoint a new guild leader using /gleader before you can leave", CHATMESSAGETYPE.GUILD); //SendResult(client, 3, " ", (int)GUILDRESULT.PERMISSIONS); //Didnt like this message return(true); } DBGuildMembers member = (DBGuildMembers)DataServer.Database.FindObjectByKey(typeof(DBGuildMembers), client.Character.ObjectId); if (member == null) { client.Character.GuildID = 0; //To correct if Character DB still has Guild info when client.Character.GuildRank = 0; //there is not a member record. Shouldnt happen but... client.Character.GuildName = " "; SendToWorld(client, client.Character); } else { RemoveMember(member, client); } return(true); } //OnGuildLeave
} //GuildPackets public static bool RemoveMember(DBGuildMembers tMember, LoginClient client) { DBCharacter tChar; LoginClient tClient = null; DBGuild oldGuild = client.Character.Guild; if (tMember == null) { Chat.System(client, "tMember was null"); return(false); } if (tMember.MemberID != client.Character.ObjectId) { tClient = LoginServer.GetLoginClientByCharacterID(tMember.MemberID); } else { tClient = client; } if (tClient != null) { tChar = tClient.Character; if (client.Character.ObjectId == tMember.MemberID) { Chat.System(tClient, "You have left " + oldGuild.Name); GuildMessage(oldGuild, client.Character.Name + " has left the guild"); } else { Chat.System(tClient, "You have been removed from " + oldGuild.Name + " by " + client.Character.Name); GuildMessage(oldGuild, tClient.Character.Name + " has removed from the guild by " + client.Character.Name); } //SendToWorld(client, tChar); ScriptPacket scrpkg = new ScriptPacket(SCRMSG.GUILDUPDATE); scrpkg.Write(tClient.Character.ObjectId); scrpkg.Write(0); scrpkg.Write(0); client.WorldConnection.Send(scrpkg); } else { tChar = (DBCharacter)DataServer.Database.FindObjectByKey(typeof(DBCharacter), tMember.MemberID); if (tChar == null) { Console.WriteLine("Character not found when removing member from guild"); return(false); } } tChar.GuildID = 0; tChar.GuildRank = 0; tChar.GuildName = " "; tChar.Guild = null; DataServer.Database.SaveObject(tChar); if (tMember == null) { return(false); } DataServer.Database.DeleteObject(tMember); DataServer.Database.FillObjectRelations(oldGuild); return(true); } //RemoveMember
static bool HandleCharDelete(LoginClient client, CMSG msgID, BinReader data) { uint id = data.ReadUInt32(); if (client.Account.Characters == null) { client.Close(client.Account.Name + " tried to delete a character when there was none on the account."); return(true); } foreach (DBCharacter c in client.Account.Characters) { if (id == c.ObjectId) { if (c.OnFriends != null) { foreach (DBFriendList Friend in c.OnFriends) { LoginClient FriendOnline = LoginServer.GetLoginClientByCharacterID(Friend.Owner_ID); if (FriendOnline != null) { BinWriter flist = LoginClient.NewPacket(SMSG.FRIEND_STATUS); Chat.System(FriendOnline, client.Character.Name + " is Online"); flist.Write((char)0x05); flist.Write((ulong)c.ObjectId); FriendOnline.Send(flist); try { DataServer.Database.DeleteObject(Friend); } catch (Exception e) { Console.WriteLine("Deleting Friend failed! " + e.Message); } FriendOnline.Character.Friends = null; DataServer.Database.FillObjectRelations(FriendOnline.Character); } else { try { DataServer.Database.DeleteObject(Friend); } catch (Exception) { Console.WriteLine("Deleting Friend failed!"); } } FriendOnline = null; } } try { DataServer.Database.DeleteObject(c); } catch (Exception e) { Console.WriteLine("Deleting character " + c.ObjectId + " failed! " + e.Message); } DBGuildMembers cMember = (DBGuildMembers)DataServer.Database.FindObjectByKey(typeof(DBGuild), c.ObjectId); if (cMember != null) { DBGuild guild = (DBGuild)DataServer.Database.FindObjectByKey(typeof(DBGuild), c.GuildID); DataServer.Database.DeleteObject(cMember); if (guild != null) { DataServer.Database.FillObjectRelations(guild); } } client.Account.Characters = null; DataServer.Database.FillObjectRelations(client.Account); BinWriter w = LoginClient.NewPacket(SMSG.CHAR_DELETE); w.Write((byte)0x36); client.Send(w); return(true); } } client.Close(client.Account.Name + " tried to delete a character that didn't belong to him."); return(true); }