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 AddRewardItem(WorldConnector pConnector, InterPacket pPacket)
        {
            byte   count;
            ushort ItemID;
            string Charname;

            if (!pPacket.TryReadUShort(out ItemID))
            {
                return;
            }

            if (!pPacket.TryReadByte(out count))
            {
                return;
            }

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

            ZoneClient pClient = ClientManager.Instance.GetClientByName(Charname);

            if (pClient == null)
            {
                return;
            }

            pClient.Character.GiveMasterRewardItem(ItemID, count);
        }
Example #3
0
        public static GroupMember ReadGroupMemberFromDatabase(long pCharId)
        {
            //--------------------------------------------------
            // Quries used in this function
            //--------------------------------------------------
            const string get_groupmem_query =
                "SELECT `Name`, `IsGroupMaster` " +
                "FROM `fiesta_world`.`characters` " +
                "WHERE `CharID` = '{0}'";

            //--------------------------------------------------
            // Read member from database.
            //--------------------------------------------------
            string name     = "";
            bool   isOnline = false;
            bool   isMaster = false;

            using (var client = Program.DatabaseManager.GetClient())
                using (var cmd = new MySqlCommand(string.Format(get_groupmem_query, pCharId), client.GetConnection()))
                    using (var reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            name = reader.GetString("Name");
                            if (reader.IsDBNull(reader.GetOrdinal("IsGroupMaster")))
                            {
                                isMaster = false;
                            }
                            else
                            {
                                isMaster = reader.GetBoolean("IsGroupMaster");
                            }
                        }
                    }

            GroupMember member = new GroupMember(name, isMaster, isOnline);

            if (ClientManager.Instance.HasClient(name))
            {
                var client = ClientManager.Instance.GetClientByCharName(name);
                member.IsOnline  = true;
                member.Character = client.Character;
            }
            else
            {
                member.IsOnline = (bool)InterFunctionCallbackProvider.Instance.QueuePacket(id =>
                {
                    var packet = new InterPacket(InterHeader.FunctionCharIsOnline);
                    packet.WriteLong(id);
                    packet.WriteString(name, 16);
                    return(packet);
                }, packet =>
                {
                    bool value = false;
                    packet.TryReadBool(out value);
                    return(value);
                });
            }
            return(member);
        }
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 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 #6
0
 public static void SendAssigned(WorldConnection wc)
 {
     using (var p = new InterPacket(InterHeader.Assigned))
     {
         wc.SendPacket(p);
     }
 }
Example #7
0
 public void SendPong()
 {
     using (var packet = new InterPacket(InterHeader.Pong))
     {
         client.SendPacket(packet);
     }
 }
Example #8
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 #9
0
        public static void On_InterClient_GuildCreated(WorldConnector pConnector, InterPacket pPacket)
        {
            int guildID, characterID;

            if (!pPacket.TryReadInt(out guildID) ||
                !pPacket.TryReadInt(out characterID))
            {
                return;
            }


            Guild guild;

            if (GetGuildByID(guildID, out guild))
            {
                //check if character is on local zone, if so assign guild to him
                ZoneCharacter character;
                if (CharacterManager.GetLoggedInCharacter(characterID, out character))
                {
                    character.Guild        = guild;
                    character.GuildAcademy = guild.Academy;


                    GuildMember member;
                    if (guild.GetMember(characterID, out member))
                    {
                        member.Character      = character;
                        character.GuildMember = member;
                    }
                }
            }
        }
Example #10
0
        public static void HandleClientTransferZone(ZoneConnection zc, InterPacket packet)
        {
            byte   admin, zoneid;
            int    accountid, CharID;
            string username, charname, hostip;
            ushort randid, mapid;

            if (!packet.TryReadByte(out zoneid) || !packet.TryReadInt(out accountid) ||
                !packet.TryReadUShort(out mapid) || !packet.TryReadString(out username) ||
                !packet.TryReadString(out charname) || !packet.TryReadInt(out CharID) ||
                !packet.TryReadUShort(out randid) || !packet.TryReadByte(out admin) ||
                !packet.TryReadString(out hostip))
            {
                return;
            }

            if (Program.Zones.ContainsKey(zoneid))
            {
                ZoneConnection z;
                if (Program.Zones.TryGetValue(zoneid, out z))
                {
                    z.SendTransferClientFromZone(accountid, username, charname, CharID, randid, admin, hostip);
                }
            }
            else
            {
                Log.WriteLine(LogLevel.Warn, "Uh oh, Zone {0} tried to transfer {1} to zone {1} D:", zc.ID, charname,
                              zoneid);
            }
        }
Example #11
0
        public static void ReciveCoper(ZoneConnection zc, InterPacket packet)
        {
            string charname;
            long   coper;
            bool   typ;

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

            if (!packet.TryReadLong(out coper))
            {
                return;
            }
            if (!packet.TryReadBool(out typ))
            {
                return;
            }

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

            if (typ)
            {
                pClient.Character.Character.ReviveCoper += coper;
            }
            else
            {
                pClient.Character.RecviveCoperMaster += coper;
                pClient.Character.UpdateRecviveCoper();
            }
        }
Example #12
0
        public static void HandleServerAssignement(WorldConnection wc, InterPacket packet)
        {
            if (!packet.TryReadByte(out var wid) || !packet.TryReadString(out var name) || !packet.TryReadString(out var ip) ||
                !packet.TryReadUShort(out var port))
            {
                Log.WriteLine(LogLevel.Error, "Could not read World ID in inter server packet.");
                wc.Disconnect();
                return;
            }

            if (WorldManager.Instance.Worlds.ContainsKey(wid))
            {
                Log.WriteLine(LogLevel.Error, "Already loaded this world?");
                wc.Disconnect();
                return;
            }

            wc.Name     = name;
            wc.ID       = wid;
            wc.IP       = ip;
            wc.Port     = port;
            wc.IsAWorld = true;

            if (WorldManager.Instance.Worlds.TryAdd(wc.ID, wc))
            {
                Log.WriteLine(LogLevel.Info, "Assigned world {0}!", wc.ID);
                SendAssigned(wc);
            }
            else
            {
                Log.WriteLine(LogLevel.Error, "Couldn't assign world {0}..", wc.ID);
            }
        }
Example #13
0
 public void Broadcast(InterPacket pPacket)
 {
     foreach (var zone in Program.Zones.Values)
     {
         zone.SendPacket(pPacket);
     }
 }
Example #14
0
 public void SendPacket(InterPacket packet)
 {
     if (this.client == null)
     {
         return;
     }
     this.client.SendPacket(packet);
 }
Example #15
0
 public static void Banaccount(WorldConnection wc, InterPacket packet)
 {
     if (packet.TryReadInt(out var accountId))
     {
         Program.DatabaseManager.GetClient()
         .ExecuteQuery("UPDATE Accounts Set Blocked='1' WHERE ID=" + accountId + "");
     }
 }
Example #16
0
 public static void TryAssiging(WorldConnector lc)
 {
     using (var p = new InterPacket(InterHeader.ASSIGN))
     {
         p.WriteStringLen(Settings.Instance.IP);
         lc.SendPacket(p);
     }
 }
Example #17
0
 public void SendPing()
 {
     Pong = false;
     using (var packet = new InterPacket(InterHeader.PING))
     {
         client.SendPacket(packet);
     }
 }
Example #18
0
 public static void BackTo(ZoneClient client, Packet packet)
 {
     using (var iacket = new InterPacket(InterHeader.ClientDisconect))
     {
         iacket.WriteString(client.Character.Character.Name, 16);
         WorldConnector.Instance.SendPacket(iacket);
     }
 }
Example #19
0
 public static void UpdateMoneyWorld(long Money, string charname)
 {
     using (var packet = new InterPacket(InterHeader.UpdateMoney))
     {
         packet.WriteString(charname, 16);
         packet.WriteLong(Money);
         WorldConnector.Instance.SendPacket(packet);
     }
 }
Example #20
0
 public static void SendLevelUpToWorld(byte Level, string charname)
 {
     using (var packet = new InterPacket(InterHeader.CharacterLevelUP))
     {
         packet.WriteByte(Level);
         packet.WriteString(charname, 16);
         WorldConnector.Instance.SendPacket(packet);
     }
 }
Example #21
0
 public void ChangeMoney(long NewMoney)
 {
     Character.Money = NewMoney;
     using (var packet = new InterPacket(InterHeader.UpdateMoneyFromWorld))
     {
         packet.WriteInt(Character.ID);
         packet.WriteLong(NewMoney);
     }
 }
Example #22
0
        private Mutex QueueAndReturnMutex(InterPacket packet, long id)
        {
            var m = new Mutex();

            m.WaitOne();
            waithandlers.Add(id, m);
            WorldConnector.Instance.SendPacket(packet);
            return(m);
        }
Example #23
0
        public static void NewPartyCreated(WorldConnector lc, InterPacket packet)
        {
            long id;

            if (!packet.TryReadLong(out id))
            {
                throw new InvalidPacketException();
            }
            GroupManager.Instance.NewGroupCreated(id);
        }
Example #24
0
 public static void SendReciveCoper(string name, long Coper, bool CoperType)
 {
     using (var packet = new InterPacket(InterHeader.ReciveCoper))
     {
         packet.WriteString(name, 16);
         packet.WriteLong(Coper);
         packet.WriteBool(CoperType);
         WorldConnector.Instance.SendPacket(packet);
     }
 }
Example #25
0
        public static void NewGroupCreated(WorldConnector pConnector, InterPacket pPacket)
        {
            long groupId = -1;

            if (!pPacket.TryReadLong(out groupId))
            {
                throw new InvalidPacketException();
            }
            GroupManager.Instance.NewGroupCreated(groupId);
        }
Example #26
0
 public static void SendAddReward(ZoneConnection ZC, ushort itemID, byte count, string CharName)
 {
     using (var packet = new InterPacket(InterHeader.SendAddRewardItem))
     {
         packet.WriteUShort(itemID);
         packet.WriteByte(count);
         packet.WriteString(CharName, 16);
         ZC.SendPacket(packet);
     }
 }
Example #27
0
        public static void GroupBrokeUp(WorldConnector lc, InterPacket packet)
        {
            long groupId;

            if (!packet.TryReadLong(out groupId))
            {
                return;
            }
            GroupManager.Instance.GroupBrokeUp(groupId);
        }
Example #28
0
        private void SendAddMemberInterPacket(GroupMember pMember)
        {
            ZoneConnection con = Program.GetZoneByMap(pMember.Character.Character.PositionInfo.Map);

            using (var pack = new InterPacket(InterHeader.AddPartyMember))
            {
                pack.WriteLong(this.Id);
                pack.WriteString(pMember.Name, 16);
                con.SendPacket(pack);
            }
        }
Example #29
0
 public static void SendZoneStopped(byte zoneid)
 {
     using (var packet = new InterPacket(InterHeader.Zoneclosed))
     {
         packet.Write(zoneid);
         foreach (var c in Program.Zones.Values)
         {
             c.SendPacket(packet);
         }
     }
 }
Example #30
0
 public static void TryAssiging(LoginConnector lc)
 {
     using (var p = new InterPacket(InterHeader.Assign))
     {
         p.WriteByte(Settings.Instance.Id);
         p.WriteStringLen(Settings.Instance.WorldName);
         p.WriteStringLen(Settings.Instance.Ip);
         p.WriteUShort(Settings.Instance.Port);
         lc.SendPacket(p);
     }
 }