コード例 #1
0
ファイル: InterHandler.cs プロジェクト: Dextan/Estrella
        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;

            ZoneClient pClient = ClientManager.Instance.GetClientByCharName(charname);
            if (pClient == null)
                return;
            using (var ipacket = new InterPacket(InterHeader.SendBroiadCastList))
            {
                List<ZoneCharacter> 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);
            }
        }
コード例 #2
0
ファイル: BuffManager.cs プロジェクト: Dextan/Estrella
        public static void RemoveBuff(AbStateInfo AbState, params WorldCharacter[] Receiver)
        {
            using (var packet = new InterPacket(InterHeader.ZONE_CharacterRemoveBuff))
            {
                packet.WriteUShort(AbState.ID);

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

                ZoneManager.Instance.Broadcast(packet);
            }
        }
コード例 #3
0
ファイル: WorldConnection.cs プロジェクト: Canic/Zepheus_2k15
 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);
     }
 }
コード例 #4
0
ファイル: ZoneConnection.cs プロジェクト: Dextan/Estrella
        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);
            }
        }
コード例 #5
0
ファイル: WorldConnection.cs プロジェクト: Dextan/Estrella
 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);
     }
 }
コード例 #6
0
ファイル: InterHandler.cs プロジェクト: Dextan/Estrella
 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();
           }
       }
 }
コード例 #7
0
ファイル: InterHandler.cs プロジェクト: Dextan/Estrella
 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);
         }
     }
 }
コード例 #8
0
ファイル: InterHandler.cs プロジェクト: Dextan/Estrella
 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);
     }
 }
コード例 #9
0
ファイル: InterHandler.cs プロジェクト: Dextan/Estrella
        public static void SendGetCharacterBroaucast(WorldCharacter pChar,FiestaLib.Networking.Packet pPacket)
        {
            ZoneConnection 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);
            }
        }
コード例 #10
0
ファイル: InterHandler.cs プロジェクト: Dextan/Estrella
        public static void SendChangeMap(WorldCharacter pChar,int OldMap)
        {
            Managers.CharacterManager.InvokeChangeMapEvent(pChar);
            ZoneConnection 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);
            }
        }
コード例 #11
0
ファイル: GuildAcademy.cs プロジェクト: Dextan/Estrella
        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.ZONE_AcademyMemberLeft))
                {
                    packet.WriteInt(Guild.ID);
                    packet.WriteInt(Member.Character.ID);

                    ZoneManager.Instance.Broadcast(packet);
                }

                //clean up
                Member.Dispose();
            }
        }
コード例 #12
0
ファイル: Guild.cs プロジェクト: Dextan/Estrella
        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.ZONE_GuildMemberRankUpdate))
            {
                packet.WriteInt(ID);
                packet.WriteInt(Member.Character.ID);
                packet.WriteByte((byte)NewRank);

                ZoneManager.Instance.Broadcast(packet);
            }
        }
コード例 #13
0
ファイル: GuildManager.cs プロジェクト: Dextan/Estrella
        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.ZONE_GuildMemberLogout))
                {
                    packet.WriteInt(Character.Guild.ID);
                    packet.WriteInt(Character.ID);

                    ZoneManager.Instance.Broadcast(packet);
                }
            }
        }
コード例 #14
0
ファイル: GuildManager.cs プロジェクト: Dextan/Estrella
        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.ZONE_GuildMemberLogin))
                {
                    packet.WriteInt(guild.ID);
                    packet.WriteInt(Character.ID);

                    ZoneManager.Instance.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);
                }
            }
        }
コード例 #15
0
ファイル: GuildManager.cs プロジェクト: Dextan/Estrella
        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.ZONE_GuildMessageUpdate))
                {
                    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.Instance.Broadcast(packet);
                }
            }
        }
コード例 #16
0
ファイル: GuildManager.cs プロジェクト: Dextan/Estrella
        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 packet = new Packet(SH29Type.GuildNameResult))
                {
                    packet.WriteInt(guild.ID);
                    packet.WriteString(guild.Name, 16);

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

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

                    ZoneManager.Instance.Broadcast(packet);
                }

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

            SendGuildCreateResponse(Client, name, password, allowGuildWar, response);
        }
コード例 #17
0
ファイル: GuildAcademy.cs プロジェクト: Dextan/Estrella
        public void AddMember(WorldCharacter Character, GuildAcademyRank Rank)
        {
            if (Character.Character.CharLevel < 10
                || Character.Character.CharLevel > 60)
                return;

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

            lock (Guild.ThreadLocker)
            {
                if (Members.Count >= MaxMembers)
                {
                    Handlers.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
                                Handlers.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.ZONE_AcademyMemberJoined))
                                {
                                    packet.WriteInt(Guild.ID);
                                    packet.WriteInt(Character.ID);
                                    packet.WriteDateTime(registerDate);

                                    ZoneManager.Instance.Broadcast(packet);
                                }

                                break;

                            case -1:
                                Handlers.Handler38.SendAcademyResponse(Character.Client, Guild.Name, GuildAcademyResponse.AlreadyInAcademy);
                                return;
                            case -2:
                            default:
                                Handlers.Handler38.SendAcademyResponse(Character.Client, Guild.Name, GuildAcademyResponse.DatabaseError);
                                return;
                        }
                    }
                }
            }
        }
コード例 #18
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();
               }
            }
        }
コード例 #19
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);
                }
            }
        }
コード例 #20
0
ファイル: InterHandler.cs プロジェクト: Dextan/Estrella
 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);
     }
 }
コード例 #21
0
ファイル: InterHandler.cs プロジェクト: Dextan/Estrella
 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);
       }
 }
コード例 #22
0
ファイル: Guild.cs プロジェクト: Dextan/Estrella
        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.ZONE_GuildMemberRemove))
                    {
                        packet.WriteInt(ID);
                        packet.WriteInt(Member.Character.ID);

                        ZoneManager.Instance.Broadcast(packet);
                    }
                }

                //clean up
                Member.Dispose();

                if (conCreated)
                {
                    con.Dispose();
                }
            }
        }
コード例 #23
0
ファイル: WorldCharacter.cs プロジェクト: Dextan/Estrella
 public void ChangeMoney(long NewMoney)
 {
     this.Character.Money = NewMoney;
        using (InterPacket packet = new InterPacket(InterHeader.UpdateMoneyFromWorld))
        {
        packet.WriteInt(this.Character.ID);
        packet.WriteLong(NewMoney);
        }
 }
コード例 #24
0
ファイル: Guild.cs プロジェクト: Dextan/Estrella
        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.ZONE_GuildMemberAdd))
                    {
                        packet.WriteInt(ID);
                        packet.WriteInt(Character.ID);
                        packet.WriteByte((byte)newMember.Rank);
                        packet.WriteUShort(newMember.Corp);

                       Managers.ZoneManager.Instance.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();
                }
            }
        }