コード例 #1
0
            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
コード例 #2
0
            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
コード例 #3
0
            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
コード例 #4
0
            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
コード例 #5
0
        }         //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
コード例 #6
0
            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
コード例 #7
0
        }         //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
コード例 #8
0
        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);
        }