Example #1
0
        public void UpdateMemberRank(GuildMember Member, GuildRank NewRank)
        {
            Member.Rank = NewRank;
            Member.Save();


            //broadcast to members
            using (var packet = new Packet(SH29Type.UpdateGuildMemberRank))
            {
                packet.WriteString(Member.Character.Character.Name, 16);
                packet.WriteByte((byte)NewRank);


                Broadcast(packet);
            }


            //broadcast to zones
            using (var packet = new InterPacket(InterHeader.ZoneGuildMemberRankUpdate))
            {
                packet.WriteInt(ID);
                packet.WriteInt(Member.Character.ID);
                packet.WriteByte((byte)NewRank);


                ZoneManager.Broadcast(packet);
            }
        }
Example #2
0
        public static void SendZoneStarted(byte zoneid, string ip, ushort port, List <MapInfo> maps)
        {
            using (var packet = new InterPacket(InterHeader.Zoneopened))
            {
                packet.WriteByte(zoneid);
                packet.WriteStringLen(ip);
                packet.WriteUShort(port);
                packet.WriteInt(maps.Count);
                foreach (var m in maps)
                {
                    packet.WriteUShort(m.ID);
                    packet.WriteStringLen(m.ShortName);
                    packet.WriteStringLen(m.FullName);
                    packet.WriteInt(m.RegenX);
                    packet.WriteInt(m.RegenY);
                    packet.WriteByte(m.Kingdom);
                    packet.WriteUShort(m.ViewRange);
                }

                foreach (var c in Program.Zones.Values)
                {
                    if (c.ID != zoneid)
                    {
                        c.SendPacket(packet);
                    }
                }
            }
        }
Example #3
0
        public static void SendZoneList(ZoneConnection zc)
        {
            using (var packet = new InterPacket(InterHeader.Zonelist))
            {
                packet.Write(Program.Zones.Values.Count);
                foreach (var z in Program.Zones.Values)
                {
                    packet.Write(z.ID);
                    packet.Write(z.IP);
                    packet.Write(z.Port);
                    packet.WriteInt(z.Maps.Count);
                    foreach (var m in z.Maps)
                    {
                        packet.WriteUShort(m.ID);
                        packet.WriteStringLen(m.ShortName);
                        packet.WriteStringLen(m.FullName);
                        packet.WriteInt(m.RegenX);
                        packet.WriteInt(m.RegenY);
                        packet.WriteByte(m.Kingdom);
                        packet.WriteUShort(m.ViewRange);
                    }
                }

                zc.SendPacket(packet);
            }
        }
Example #4
0
        private static void On_CharacterManager_CharacterLogout(WorldCharacter Character)
        {
            GuildMember member;

            if (Character.Guild != null &&
                Character.Guild.GetMember(Character.Character.Name, out member))
            {
                //send guild member logged out to other guild members
                using (var packet = new Packet(SH29Type.GuildMemberLoggedOut))
                {
                    packet.WriteString(Character.Character.Name, 16);


                    Character.Guild.Broadcast(packet, member);
                }


                //send packet to zone that guild member logged out
                using (var packet = new InterPacket(InterHeader.ZoneGuildMemberLogout))
                {
                    packet.WriteInt(Character.Guild.ID);
                    packet.WriteInt(Character.ID);


                    ZoneManager.Broadcast(packet);
                }
            }
        }
Example #5
0
        public static void RemoveBuff(AbStateInfo AbState, params WorldCharacter[] Receiver)
        {
            using (var packet = new InterPacket(InterHeader.ZoneCharacterRemoveBuff))
            {
                packet.WriteUShort(AbState.ID);

                packet.WriteInt(Receiver.Length);
                Array.ForEach(Receiver, ch => packet.WriteInt(ch.ID));


                ZoneManager.Broadcast(packet);
            }
        }
Example #6
0
        public static void SendChangeMap(WorldCharacter pChar, int OldMap)
        {
            CharacterManager.InvokeChangeMapEvent(pChar);
            var conn = Program.GetZoneByMap(OldMap);

            using (var packet = new InterPacket(InterHeader.GetBroadcastList))
            {
                packet.WriteString(pChar.Character.Name, 16);
                packet.WriteInt(pChar.Character.PositionInfo.XPos);
                packet.WriteInt(pChar.Character.PositionInfo.YPos);
                conn.SendPacket(packet);
            }
        }
Example #7
0
 public static void SendChangeZoneToWorld(ZoneCharacter character, ushort mapid, int x, int y, string ip, ushort port, ushort randomid)
 {
     using (var packet = new InterPacket(InterHeader.ChangeZone))
     {
         packet.WriteUShort(mapid);
         packet.WriteInt(x);
         packet.WriteInt(y);
         packet.WriteString(character.Name, 16);
         packet.WriteString(Settings.Instance.IP, 16);
         packet.WriteUShort(port);
         packet.WriteUShort(randomid);
         WorldConnector.Instance.SendPacket(packet);
     }
 }
Example #8
0
 public void SendTransferClientFromZone(int accountID, string userName, string charName, int CharID, ushort randid, byte admin, string hostIP)
 {
     using (var packet = new InterPacket(InterHeader.Clienttransfer))
     {
         packet.WriteByte(1);
         packet.WriteInt(accountID);
         packet.WriteStringLen(userName);
         packet.WriteStringLen(charName);
         packet.WriteInt(CharID);
         packet.WriteUShort(randid);
         packet.WriteByte(admin);
         packet.WriteStringLen(hostIP);
         this.SendPacket(packet);
     }
 }
Example #9
0
        public static void SetBuff(AbStateInfo AbState, uint Strength, uint KeepTime, params WorldCharacter[] Receiver)
        {
            using (var packet = new InterPacket(InterHeader.ZONE_CharacterSetBuff))
            {
                packet.WriteUShort(AbState.ID);
                packet.WriteUInt(Strength);
                packet.WriteUInt(KeepTime);

                packet.WriteInt(Receiver.Length);
                Array.ForEach(Receiver, ch => packet.WriteInt(ch.ID));



                ZoneManager.Instance.Broadcast(packet);
            }
        }
Example #10
0
 public static void TransferClient(byte zoneID, ushort mapid, int accountID, string userName, int CharID, string charName, ushort randid, byte admin, string hostIP)
 {
     using (var packet = new InterPacket(InterHeader.Clienttransferzone))
     {
         packet.WriteByte(zoneID);
         packet.WriteInt(accountID);
         packet.WriteUShort(mapid);
         packet.WriteStringLen(userName);
         packet.WriteStringLen(charName);
         packet.WriteInt(CharID);
         packet.WriteUShort(randid);
         packet.WriteByte(admin);
         packet.WriteStringLen(hostIP);
         WorldConnector.Instance.SendPacket(packet);
     }
 }
Example #11
0
        public static void Broadcast(WorldConnector pConnector, InterPacket pPacket)
        {
            int packetlenght;

            byte[] packet;
            string charname;

            if (!pPacket.TryReadString(out charname, 16))
            {
                return;
            }

            if (!pPacket.TryReadInt(out packetlenght))
            {
                return;
            }

            if (!pPacket.TryReadBytes(packetlenght, out packet))
            {
                return;
            }

            var pClient = ClientManager.Instance.GetClientByCharName(charname);

            if (pClient == null)
            {
                return;
            }
            using (var ipacket = new InterPacket(InterHeader.SendBroiadCastList))
            {
                var Sender =
                    pClient.Character.Map.GetCharactersBySectors(pClient.Character.MapSector.SurroundingSectors);
                if (Sender.Count == 0)
                {
                    return;
                }
                ipacket.WriteInt(packetlenght);
                ipacket.WriteBytes(packet);
                ipacket.WriteInt(Sender.Count);
                foreach (var character in Sender)
                {
                    ipacket.WriteString(character.Name, 16);
                }

                pConnector.SendPacket(ipacket);
            }
        }
Example #12
0
 public void ChangeMoney(long NewMoney)
 {
     Character.Money = NewMoney;
     using (var packet = new InterPacket(InterHeader.UpdateMoneyFromWorld))
     {
         packet.WriteInt(Character.ID);
         packet.WriteLong(NewMoney);
     }
 }
Example #13
0
        public static void SendGetCharacterBroaucast(WorldCharacter pChar, Packet pPacket)
        {
            var conn = Program.GetZoneByMap(pChar.Character.PositionInfo.Map);

            using (var packet = new InterPacket(InterHeader.GetBroadcastList))
            {
                packet.WriteString(pChar.Character.Name, 16);
                packet.WriteInt(pPacket.ToNormalArray().Length);
                packet.WriteBytes(pPacket.ToNormalArray());
                conn.SendPacket(packet);
            }
        }
Example #14
0
 public void SendTransferClientFromWorld(int accountID, string userName, byte admin, string hostIP, string hash)
 {
     using (var packet = new InterPacket(InterHeader.CLIENTTRANSFER))
     {
         packet.WriteByte(0);
         packet.WriteInt(accountID);
         packet.WriteStringLen(userName);
         packet.WriteStringLen(hash);
         packet.WriteByte(admin);
         packet.WriteStringLen(hostIP);
         this.SendPacket(packet);
     }
 }
Example #15
0
        public void SendData()
        {
            using (var packet = new InterPacket(InterHeader.Assigned))
            {
                packet.WriteByte(ID);
                packet.WriteStringLen(String.Format("{0}-{1}", Settings.Instance.GameServiceUri, ID));
                packet.WriteUShort((ushort)(Settings.Instance.ZoneBasePort + ID));

                packet.WriteInt(Maps.Count);
                foreach (var m in Maps)
                {
                    packet.WriteUShort(m.ID);
                    packet.WriteStringLen(m.ShortName);
                    packet.WriteStringLen(m.FullName);
                    packet.WriteInt(m.RegenX);
                    packet.WriteInt(m.RegenY);
                    packet.WriteByte(m.Kingdom);
                    packet.WriteUShort(m.ViewRange);
                }
                this.SendPacket(packet);
            }
        }
Example #16
0
        private static void On_CharacterManager_CharacterLogout(WorldCharacter Character)
        {
            if (Character.IsInGuildAcademy)
            {
                using (var packet = new Packet(SH38Type.AcademyMemberLoggedOut))
                {
                    packet.WriteString(Character.Character.Name, 16);


                    Character.Guild.Broadcast(packet);
                    Character.GuildAcademy.Broadcast(packet);
                }

                using (var packet = new InterPacket(InterHeader.ZONE_AcademyMemberOffline))
                {
                    packet.WriteInt(Character.Guild.ID);
                    packet.WriteInt(Character.ID);


                    ZoneManager.Instance.Broadcast(packet);
                }
            }
        }
Example #17
0
        private static void On_CharacterManager_CharacterLogin(WorldCharacter character)
        {
            if (character.IsInGuildAcademy)
            {
                using (var packet = new Packet(SH38Type.AcademyMemberLoggedIn))
                {
                    packet.WriteString(character.Character.Name, 16);


                    character.Guild.Broadcast(packet);
                    character.GuildAcademy.Broadcast(packet);
                }

                using (var packet = new InterPacket(InterHeader.ZoneAcademyMemberOnline))
                {
                    packet.WriteInt(character.Guild.ID);
                    packet.WriteInt(character.ID);


                    ZoneManager.Broadcast(packet);
                }
            }
        }
Example #18
0
        public static void BanAccount(ZoneConnection zc, InterPacket packet)
        {
            string playername;

            if (packet.TryReadString(out playername, 16))
            {
                WorldClient bannclient = ClientManager.Instance.GetClientByCharname(playername);
                if (bannclient != null)
                {
                    using (var p = new InterPacket(InterHeader.BanAccount))
                    {
                        p.WriteInt(bannclient.AccountID);
                        LoginConnector.Instance.SendPacket(p);
                    }
                    bannclient.Disconnect();
                }
            }
        }
Example #19
0
        public void RemoveMember(GuildMember Member, MySqlConnection con = null, bool BroadcastRemove = true)
        {
            lock (ThreadLocker)
            {
                var conCreated = con == null;
                if (conCreated)
                {
                    con = Program.DatabaseManager.GetClient().GetConnection();
                }


                //remove from db
                using (var cmd = con.CreateCommand())
                {
                    cmd.CommandText = "GuildMember_Remove";

                    cmd.Parameters.Add(new MySqlParameter("@pGuildID", ID));
                    cmd.Parameters.Add(new MySqlParameter("@pCharacterID", Member.Character.ID));


                    cmd.ExecuteNonQuery();
                }


                //remove from list
                Members.Remove(Member);

                //update character
                Member.Character.Guild        = null;
                Member.Character.GuildMember  = null;
                Member.Character.GuildAcademy = null;


                //broadcast member left packet
                if (BroadcastRemove)
                {
                    using (var packet = new Packet(SH29Type.GuildMemberLeft))
                    {
                        packet.WriteString(Member.Character.Character.Name);


                        Broadcast(packet);
                    }

                    //send packet to zones that a member has been removed
                    using (var packet = new InterPacket(InterHeader.ZoneGuildMemberRemove))
                    {
                        packet.WriteInt(ID);
                        packet.WriteInt(Member.Character.ID);


                        ZoneManager.Broadcast(packet);
                    }
                }


                //clean up
                Member.Dispose();


                if (conCreated)
                {
                    con.Dispose();
                }
            }
        }
Example #20
0
        public void RemoveMember(GuildAcademyMember Member)
        {
            lock (Guild.ThreadLocker)
            {
                //remove from db
                using (var con = Program.DatabaseManager.GetClient().GetConnection())
                {
                    using (var cmd = con.CreateCommand())
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.CommandText = "GuildAcademyMember_Remove";

                        cmd.Parameters.Add(new MySqlParameter("@pGuildID", Guild.ID));
                        cmd.Parameters.Add(new MySqlParameter("@pCharacterID", Member.Character.ID));


                        cmd.ExecuteNonQuery();
                    }
                }


                //remove from list
                Members.Remove(Member);

                //clean character
                Member.Character.Guild              = null;
                Member.Character.GuildAcademy       = null;
                Member.Character.GuildAcademyMember = null;


                //send packets
                using (var packet = new Packet(SH38Type.LeaveAcademyResponse))
                {
                    packet.WriteUShort((ushort)GuildAcademyResponse.LeaveSuccess);


                    Member.Character.Client.SendPacket(packet);
                }

                using (var packet = new Packet(SH38Type.AcademyMemberLeft))
                {
                    packet.WriteString(Member.Character.Character.Name, 16);


                    Broadcast(packet);
                    Guild.Broadcast(packet);
                }

                //send packet to zones
                using (var packet = new InterPacket(InterHeader.ZoneAcademyMemberLeft))
                {
                    packet.WriteInt(Guild.ID);
                    packet.WriteInt(Member.Character.ID);


                    ZoneManager.Broadcast(packet);
                }


                //clean up
                Member.Dispose();
            }
        }
Example #21
0
        public void AddMember(WorldCharacter Character, GuildAcademyRank Rank)
        {
            if (Character.Character.CharLevel < 10 ||
                Character.Character.CharLevel > 60)
            {
                return;
            }


            if (Character.IsInGuild ||
                Character.IsInGuildAcademy)
            {
                Handler38.SendAcademyResponse(Character.Client, Guild.Name, GuildAcademyResponse.AlreadyInAcademy);
                return;
            }

            lock (Guild.ThreadLocker)
            {
                if (Members.Count >= MaxMembers)
                {
                    Handler38.SendAcademyResponse(Character.Client, Guild.Name, GuildAcademyResponse.AcademyFull);
                    return;
                }


                var registerDate = Program.CurrentTime;

                //add to sql
                using (var con = Program.DatabaseManager.GetClient().GetConnection())
                {
                    using (var cmd = con.CreateCommand())
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.CommandText = "GuildAcademyMember_Create";

                        cmd.Parameters.Add(new MySqlParameter("@pGuildID", Guild.ID));
                        cmd.Parameters.Add(new MySqlParameter("@pCharacterID", Character.ID));
                        cmd.Parameters.Add(new MySqlParameter("@pRegisterDate", registerDate));
                        cmd.Parameters.Add(new MySqlParameter("@pRank", (byte)Rank));


                        switch (Convert.ToInt32(cmd.ExecuteScalar()))
                        {
                        case 0:

                            var member = new GuildAcademyMember(this, Character, registerDate, Rank);

                            //Add to list
                            Members.Add(member);

                            //Update character
                            Character.Guild              = Guild;
                            Character.GuildAcademy       = this;
                            Character.GuildAcademyMember = member;


                            //send packets to client
                            Handler38.SendAcademyResponse(Character.Client, Guild.Name,
                                                          GuildAcademyResponse.JoinSuccess);
                            using (var packet = new Packet(SH4Type.CharacterGuildacademyinfo))
                            {
                                WriteInfo(packet);

                                Character.Client.SendPacket(packet);
                            }

                            member.BroadcastGuildName();
                            using (var packet = new Packet(SH38Type.AcademyMemberJoined))
                            {
                                member.WriteInfo(packet);

                                Broadcast(packet);
                                Guild.Broadcast(packet);
                            }


                            //send packet to zones
                            using (var packet = new InterPacket(InterHeader.ZoneAcademyMemberJoined))
                            {
                                packet.WriteInt(Guild.ID);
                                packet.WriteInt(Character.ID);
                                packet.WriteDateTime(registerDate);


                                ZoneManager.Broadcast(packet);
                            }


                            break;

                        case -1:
                            Handler38.SendAcademyResponse(Character.Client, Guild.Name,
                                                          GuildAcademyResponse.AlreadyInAcademy);
                            return;

                        case -2:
                        default:
                            Handler38.SendAcademyResponse(Character.Client, Guild.Name,
                                                          GuildAcademyResponse.DatabaseError);
                            return;
                        }
                    }
                }
            }
        }
Example #22
0
        private static void On_CharacterManager_CharacterLogin(WorldCharacter Character)
        {
            if (Character.IsInGuild)
            {
                var guild = Character.Guild;

                //send guild info to client
                using (var packet = new Packet(SH4Type.CharacterGuildinfo))
                {
                    guild.WriteGuildInfo(packet);


                    Character.Client.SendPacket(packet);
                }


                //send member list to client
                guild.SendMemberList(Character.Client);


                GuildMember member;
                if (guild.GetMember(Character.Character.Name, out member))
                {
                    //send guild member logged in to other guild members
                    using (var packet = new Packet(SH29Type.GuildMemberLoggedIn))
                    {
                        packet.WriteString(Character.Character.Name, 16);


                        Character.Guild.Broadcast(packet, member);
                    }
                }


                //send packet to zone that guild member logged in
                using (var packet = new InterPacket(InterHeader.ZoneGuildMemberLogin))
                {
                    packet.WriteInt(guild.ID);
                    packet.WriteInt(Character.ID);


                    ZoneManager.Broadcast(packet);
                }
            }
            else
            {
                using (var packet = new Packet(SH4Type.CharacterGuildinfo))
                {
                    packet.WriteInt(0);


                    Character.Client.SendPacket(packet);
                }
            }


            //academy
            var academy = Character.GuildAcademy;

            if (academy != null)
            {
                if (Character.IsInGuildAcademy)
                {
                    using (var packet = new Packet(SH4Type.CharacterGuildacademyinfo))
                    {
                        academy.WriteInfo(packet);


                        Character.Client.SendPacket(packet);
                    }


                    academy.SendMemberList(Character.Client);
                }
                else
                {
                    using (var packet = new Packet(SH4Type.CharacterGuildacademyinfo))
                    {
                        packet.Fill(5, 0);


                        Character.Client.SendPacket(packet);
                    }
                }
            }
            else
            {
                using (var packet = new Packet(SH4Type.CharacterGuildacademyinfo))
                {
                    packet.Fill(5, 0);


                    Character.Client.SendPacket(packet);
                }
            }
        }
Example #23
0
        public static void On_GameClient_CreateGuild(WorldClient Client, Packet Packet)
        {
            string name, password;
            bool   allowGuildWar;

            if (!Packet.TryReadString(out name, 16) ||
                !Packet.TryReadString(out password, 8) ||
                !Packet.ReadSkip(4) || // unk ?
                !Packet.TryReadBool(out allowGuildWar))
            {
                return;
            }


            GuildCreateResponse response;

            if (Client.Character.Character.CharLevel < 20)
            {
                response = GuildCreateResponse.LevelTooLow;
            }
            else if (Client.Character.Character.Money < Guild.Price)
            {
                response = GuildCreateResponse.MoneyTooLow;
            }
            else
            {
                //encrypt guild pw
                var pwData = Encoding.UTF8.GetBytes(password);
//                InterCrypto.Encrypt(ref pwData, 0, pwData.Length);


                Guild guild;

                //try to create guild
                lock (ThreadLocker)
                {
                    int result;
                    int guildID;
                    var createTime = Program.CurrentTime;

                    using (var con = Program.DatabaseManager.GetClient().GetConnection())
                    {
                        //insert guild in db
                        using (var cmd = con.CreateCommand())
                        {
                            cmd.CommandType = CommandType.StoredProcedure;
                            cmd.CommandText = "Guild_Create";

                            cmd.Parameters.Add(new MySqlParameter("@pName", name));
                            cmd.Parameters.Add(new MySqlParameter("@pPassword", pwData));
                            cmd.Parameters.Add(new MySqlParameter("@pAllowGuildWar", allowGuildWar));
                            cmd.Parameters.Add(new MySqlParameter("@pCreaterID", Client.Character.ID));
                            cmd.Parameters.Add(new MySqlParameter("@pCreateTime", createTime));

                            var idParam = cmd.Parameters.Add(new MySqlParameter("@pID", SqlDbType.Int)
                            {
                                Direction = ParameterDirection.Output
                            });
                            result  = Convert.ToInt32(cmd.ExecuteScalar());
                            guildID = (int)idParam.Value;
                        }

                        switch (result)
                        {
                        case -1:
                            //guild name already exists (ToDo: get response code)

                            SendGuildCreateResponse(Client, name, password, allowGuildWar,
                                                    GuildCreateResponse.AlredyExist);
                            return;

                        case -2:     //database error @ insert guild (ToDo: get response code)
                            SendGuildCreateResponse(Client, name, password, allowGuildWar,
                                                    GuildCreateResponse.Failed);
                            return;

                        case -3:     //database error @ insert guild academy (ToDo: get response code)
                            SendGuildCreateResponse(Client, name, password, allowGuildWar,
                                                    GuildCreateResponse.Failed);
                            return;

                        case 0:

                            //create guild
                            guild = new Guild(con, guildID, name, pwData, allowGuildWar, Client.Character,
                                              createTime);
                            //insert guild master (character will get updated)
                            guild.AddMember(Client.Character, GuildRank.Master, con, false, false);
                            //add to loaded guilds
                            LoadedGuilds.Add(guild);

                            break;


                        default:
                            return;
                        }
                    }
                }


                Client.Character.
                //revoke money
                Client.Character.ChangeMoney(Client.Character.Character.Money - Guild.Price);

                //let character broadcast guild name packet
                using (var packetX = new Packet(SH29Type.GuildNameResult))
                {
                    packetX.WriteInt(guild.ID);
                    packetX.WriteString(guild.Name, 16);


                    BroadcastManager.Instance.BroadcastInRange(Client.Character, packetX, true);
                }

                //let zone know that a guild has been loaded
                using (var packetX = new InterPacket(InterHeader.ZoneGuildCreated))
                {
                    packetX.WriteInt(guild.ID);
                    packetX.WriteInt(Client.Character.ID);


                    ZoneManager.Broadcast(packetX);
                }


                //set response to success
                response = GuildCreateResponse.Success;
            }

            SendGuildCreateResponse(Client, name, password, allowGuildWar, response);
        }
Example #24
0
        public void AddMember(WorldCharacter Character, GuildRank Rank, MySqlConnection con = null,
                              bool BroadcastAdd = true, bool SendGuildInfoToClient = true)
        {
            lock (ThreadLocker)
            {
                var conCreated = con == null;
                if (conCreated)
                {
                    con = Program.DatabaseManager.GetClient().GetConnection();
                }

                //add to db
                int result;
                using (var cmd = con.CreateCommand())
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "GuildMember_Create";

                    cmd.Parameters.Add(new MySqlParameter("@pGuildID", ID));
                    cmd.Parameters.Add(new MySqlParameter("@pCharacterID", Character.ID));
                    cmd.Parameters.Add(new MySqlParameter("@pRank", (byte)Rank));
                    cmd.Parameters.Add(new MySqlParameter("@pCorp", Convert.ToInt16("0")));


                    result = Convert.ToInt32(cmd.ExecuteScalar());
                }

                if (result == -1)
                {
                    return;
                }
                //create object
                var newMember = new GuildMember(this, Character, Rank, 0);

                //update character
                Character.Guild        = this;
                Character.GuildMember  = newMember;
                Character.GuildAcademy = Academy;

                //add to list
                Members.Add(newMember);


                if (BroadcastAdd)
                {
                    newMember.BroadcastGuildName();

                    //broadcast that guild member joined
                    using (var packet = new Packet(SH29Type.GuildMemberJoined))
                    {
                        newMember.WriteInfo(packet);


                        Broadcast(packet, newMember);
                    }

                    using (var packet = new Packet(SH29Type.GuildMemberLoggedIn))
                    {
                        packet.WriteString(newMember.Character.Character.Name, 16);


                        Broadcast(packet, newMember);
                    }


                    //let zone know that a new member has been added to guild
                    using (var packet = new InterPacket(InterHeader.ZoneGuildMemberAdd))
                    {
                        packet.WriteInt(ID);
                        packet.WriteInt(Character.ID);
                        packet.WriteByte((byte)newMember.Rank);
                        packet.WriteUShort(newMember.Corp);


                        ZoneManager.Broadcast(packet);
                    }
                }

                //send guild info to new member
                if (SendGuildInfoToClient)
                {
                    SendMemberList(newMember.Character.Client);

                    using (var packet = new Packet(SH4Type.CharacterGuildinfo))
                    {
                        WriteGuildInfo(packet);
                        newMember.Character.Client.SendPacket(packet);
                    }
                }


                if (conCreated)
                {
                    con.Dispose();
                }
            }
        }
Example #25
0
        public static void On_GameClient_UpdateGuildMessage(WorldClient Client, Packet Packet)
        {
            ushort length;
            string message;

            if (Client.Character.Guild == null ||
                !Packet.TryReadUShort(out length) ||
                !Packet.TryReadString(out message, length))
            {
                return;
            }

            //response packets
            using (var packet = new Packet(SH29Type.UnkMessageChange))
            {
                packet.WriteHexAsBytes(
                    "68 1B 00 92 AD F8 4F 2E 00 00 00 2B 00 00 00 17 00 00 00 07 00 00 00 06 00 00 00 70 00 00 00 06 00 00 00 BC 00 00 00 01 00 00 00 00 00");

                Client.SendPacket(packet);
            }

            using (var packet = new Packet(SH29Type.ClearGuildDetailsMessage))
            {
                packet.WriteUShort(3137);
                packet.WriteLong(0);


                Client.SendPacket(packet);
            }

            using (var packet = new Packet(SH29Type.UpdateGuildMessageResponse))
            {
                packet.WriteUShort(3137);
                Client.SendPacket(packet);
            }


            //update guild
            lock (Client.Character.Guild.ThreadLocker)
            {
                Client.Character.Guild.Message           = message;
                Client.Character.Guild.MessageCreater    = Client.Character;
                Client.Character.Guild.MessageCreateTime = Program.CurrentTime;

                Client.Character.Guild.Save();


                //broadcast packet to all guild members
                using (var packet = new Packet(SH29Type.SendUpdateGuildDetails))
                {
                    packet.Fill(4, 0x00);
                    packet.WriteInt(Client.Character.Guild.MessageCreateTime.Second);
                    packet.WriteInt(Client.Character.Guild.MessageCreateTime.Minute);
                    packet.WriteInt(Client.Character.Guild.MessageCreateTime.Hour);
                    packet.WriteInt(Client.Character.Guild.MessageCreateTime.Day);
                    packet.WriteInt(Client.Character.Guild.MessageCreateTime.Month - 1);
                    packet.WriteInt(Client.Character.Guild.MessageCreateTime.Year - 1900);
                    packet.WriteInt(0);
                    packet.WriteLong(0);
                    packet.WriteString(Client.Character.Character.Name, 16);
                    packet.WriteUShort(length);
                    packet.WriteString(message, length);


                    Client.Character.Guild.Broadcast(packet);
                }


                //send packet to zone that guild message changed
                using (var packet = new InterPacket(InterHeader.ZoneGuildMessageUpdate))
                {
                    packet.WriteInt(Client.Character.Guild.ID);
                    packet.WriteInt(Client.Character.ID);
                    packet.WriteDateTime(Client.Character.Guild.MessageCreateTime);

                    packet.WriteUShort(length);
                    packet.WriteString(message, length);
                    ZoneManager.Broadcast(packet);
                }
            }
        }
Example #26
0
        private static void On_CharacterManager_CharacterLevelUp(WorldCharacter Character)
        {
            //fix later
            if (Character.IsInGuildAcademy)
            {
                using (var packet = new Packet(SH38Type.AcademyMemberLevelUp))
                {
                    packet.WriteString(Character.Character.Name, 16);
                    packet.WriteByte(Character.Character.CharLevel);


                    Character.Guild.Broadcast(packet);
                    Character.GuildAcademy.Broadcast(packet);
                }


                lock (Character.Guild.ThreadLocker)
                {
                    uint points;
                    if (GuildDataProvider.Instance.AcademyLevelUpPoints.TryGetValue(Character.Character.CharLevel, out points))
                    {
                        Character.GuildAcademy.Points += (ushort)points;
                    }



                    //add time to guild buff
                    var time = Program.CurrentTime;
                    //var newTime = Math.Min(CharacterDataProvider.ChrCommon.GuildBuffMaxTime.TotalSeconds, (CharacterDataProvider.ChrCommon.GuildBuffAddTime.TotalSeconds + Character.GuildAcademy.GuildBuffKeepTime.TotalSeconds));
                    //Character.GuildAcademy.GuildBuffKeepTime = TimeSpan.FromSeconds(newTime);

                    //update guild buff to all guild/aka members
                    var toUpdate = new List <WorldCharacter>();
                    foreach (var member in Character.GuildAcademy.Members)
                    {
                        if (member.Character.IsOnline)
                        {
                            toUpdate.Add(member.Character);
                        }
                    }
                    foreach (var member in Character.Guild.Members)
                    {
                        if (member.Character.IsOnline &&
                            !toUpdate.Contains(member.Character))
                        {
                            toUpdate.Add(member.Character);
                        }
                    }

                    //BuffManager.SetBuff(GuildDataProvider.AcademyBuff, GuildDataProvider.AcademyBuffStrength, (uint)(newTime * 1000), toUpdate.ToArray());

                    toUpdate.Clear();
                    toUpdate = null;

                    //update guild buff to zones
                    using (var packet = new InterPacket(InterHeader.ZONE_AcademyBuffUpdate))
                    {
                        packet.WriteInt(Character.Guild.ID);
                        packet.WriteDateTime(time);
                        packet.WriteDouble(900);//fix later



                        ZoneManager.Instance.Broadcast(packet);
                    }



                    //broadcast info and save guild
                    Character.GuildAcademy.BroadcastInfo();
                    Character.GuildAcademy.Save();
                }
            }
        }