示例#1
0
        public static void LoadItem(Account player, ItemsModel item)
        {
            if (player == null || player._status.serverId == 0)
            {
                return;
            }
            GameServerModel gs = Game_SyncNet.GetServer(player._status);

            if (gs == null)
            {
                return;
            }

            using (SendGPacket pk = new SendGPacket())
            {
                pk.writeH(18);
                pk.writeQ(player.player_id);
                pk.writeQ(item._objId);
                pk.writeD(item._id);
                pk.writeC((byte)item._equip);
                pk.writeC((byte)item._category);
                pk.writeD(item._count);
                Game_SyncNet.SendPacket(pk.mstream.ToArray(), gs._syncConn);
            }
        }
示例#2
0
        /*
         * public static void Update(Clan clan, int type)
         * {
         *  foreach (GameServerModel gs in ServersXML._servers)
         *  {
         *      if (gs._serverId == 0 || gs._serverId == ConfigGS.serverId)
         *          continue;
         *
         *      using (SendGPacket pk = new SendGPacket())
         *      {
         *          pk.writeH(22);
         *          pk.writeC((byte)type);
         *          if (type == 0)
         *              pk.writeQ(clan.owner_id);
         *          else if (type == 1)
         *          {
         *              pk.writeC((byte)(clan._name.Length + 1));
         *              pk.writeS(clan._name, clan._name.Length + 1);
         *          }
         *          else if (type == 2)
         *              pk.writeC((byte)clan._name_color);
         *          Game_SyncNet.SendPacket(pk.mstream.ToArray(), gs._syncConn);
         *      }
         *  }
         * }
         */
        // send to game
        public static void Load(Clan clan, int type)
        {
            foreach (GameServerModel gs in ServersXML._servers)
            {
                if (gs._serverId == 0 || gs._serverId == ConfigGS.serverId)
                {
                    continue;
                }

                using (SendGPacket pk = new SendGPacket())
                {
                    pk.writeH(21);
                    pk.writeC((byte)type);
                    pk.writeD(clan._id);
                    if (type == 0)
                    {
                        pk.writeQ(clan.owner_id);
                        pk.writeD(clan.creationDate);
                        pk.writeC((byte)(clan._name.Length + 1));
                        pk.writeS(clan._name, clan._name.Length + 1);
                        pk.writeC((byte)(clan._info.Length + 1));
                        pk.writeS(clan._info, clan._info.Length + 1);
                    }
                    Game_SyncNet.SendPacket(pk.mstream.ToArray(), gs._syncConn);
                }
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="player">Conta principal</param>
        /// <param name="friend">Amigo que será adicionado/atualizado..</param>
        /// <param name="type">0=Adicionar|1=Atualizar|2=Deletar</param>
        ///
        // send to Game or sync
        public static void Load(Account player, Friend friend, int type)
        {
            if (player == null)
            {
                return;
            }

            GameServerModel gs = Game_SyncNet.GetServer(player._status);

            if (gs == null)
            {
                return;
            }

            using (SendGPacket pk = new SendGPacket())
            {
                pk.writeH(17);
                pk.writeQ(player.player_id);
                pk.writeC((byte)type);
                pk.writeQ(friend.player_id);

                if (type != 2)
                {
                    pk.writeC((byte)friend.state);
                }
                Game_SyncNet.SendPacket(pk.mstream.ToArray(), gs._syncConn);
            }
        }
示例#4
0
        public static void Load(Account player, Friend friend, int type)
        {
            if (player == null)
            {
                return;
            }
            GameServerModel server = Game_SyncNet.GetServer(player._status);

            if (server == null)
            {
                return;
            }
            using (SendGPacket sendGpacket = new SendGPacket())
            {
                sendGpacket.writeH((short)17);
                sendGpacket.writeQ(player.player_id);
                sendGpacket.writeC((byte)type);
                sendGpacket.writeQ(friend.player_id);
                if (type != 2)
                {
                    sendGpacket.writeC((byte)friend.state);
                    sendGpacket.writeC(friend.removed);
                }
                Game_SyncNet.SendPacket(sendGpacket.mstream.ToArray(), server.Connection);
            }
        }
示例#5
0
        public bool RemovePlayer(Account p)
        {
            bool result = false;

            try
            {
                p.channelId = -1;
                if (p.Session != null)
                {
                    lock (_players)
                    {
                        result = _players.Remove(p.Session);
                    }
                    if (result)
                    {
                        Game_SyncNet.UpdateGSCount(serverId);
                    }
                }
            }
            catch (Exception ex)
            {
                SaveLog.fatal(ex.ToString());
                Printf.b_danger("[Channel.RemovePlayer] Erro fatal!");
            }
            return(result);
        }
示例#6
0
 public static void Load(Clan clan, int type)
 {
     foreach (GameServerModel server in ServersXML._servers)
     {
         if (server._id != 0 && server._id != ConfigGS.serverId)
         {
             using (SendGPacket sendGpacket = new SendGPacket())
             {
                 sendGpacket.writeH((short)21);
                 sendGpacket.writeC((byte)type);
                 sendGpacket.writeD(clan._id);
                 if (type == 0)
                 {
                     sendGpacket.writeQ(clan.owner_id);
                     sendGpacket.writeD(clan.creationDate);
                     sendGpacket.writeC((byte)(clan._name.Length + 1));
                     sendGpacket.writeS(clan._name, clan._name.Length + 1);
                     sendGpacket.writeC((byte)(clan._info.Length + 1));
                     sendGpacket.writeS(clan._info, clan._info.Length + 1);
                 }
                 Game_SyncNet.SendPacket(sendGpacket.mstream.ToArray(), server.Connection);
             }
         }
     }
 }
示例#7
0
        public static void Update(Clan clan, int type)
        {
            foreach (GameServerModel server in ServersXML._servers)
            {
                if (server._id != 0 && server._id != ConfigGS.serverId)
                {
                    using (SendGPacket sendGpacket = new SendGPacket())
                    {
                        sendGpacket.writeH((short)22);
                        sendGpacket.writeC((byte)type);
                        switch (type)
                        {
                        case 0:
                            sendGpacket.writeQ(clan.owner_id);
                            break;

                        case 1:
                            sendGpacket.writeC((byte)(clan._name.Length + 1));
                            sendGpacket.writeS(clan._name, clan._name.Length + 1);
                            break;

                        case 2:
                            sendGpacket.writeC((byte)clan._name_color);
                            break;
                        }
                        Game_SyncNet.SendPacket(sendGpacket.mstream.ToArray(), server.Connection);
                    }
                }
            }
        }
 public void SendPacket(SendPacket sp, bool OnlyInServer)
 {
     if (_connection != null)
     {
         _connection.SendPacket(sp);
     }
     else if (!OnlyInServer && (_status.serverId != 255 && _status.serverId != ConfigGS.serverId))
     {
         Game_SyncNet.SendBytes(player_id, sp, _status.serverId);
     }
 }
 public void SendCompletePacket(byte[] data, bool OnlyInServer)
 {
     if (_connection != null)
     {
         _connection.SendCompletePacket(data);
     }
     else if (!OnlyInServer && (_status.serverId != 255 && _status.serverId != ConfigGS.serverId))
     {
         Game_SyncNet.SendCompleteBytes(player_id, data, _status.serverId);
     }
 }
示例#10
0
 public bool AddPlayer(PlayerSession pS)
 {
     lock (_players)
     {
         if (!_players.Contains(pS))
         {
             _players.Add(pS);
             Game_SyncNet.UpdateGSCount(serverId);
             return(true);
         }
         return(false);
     }
 }
示例#11
0
 public void SendCompletePacket(byte[] data, bool OnlyInServer)
 {
     if (this._connection != null)
     {
         this._connection.SendCompletePacket(data);
     }
     else
     {
         if (OnlyInServer || this._status.serverId == byte.MaxValue || (int)this._status.serverId == ConfigGS.serverId)
         {
             return;
         }
         Game_SyncNet.SendCompleteBytes(this.player_id, data, (int)this._status.serverId);
     }
 }
示例#12
0
 public void SendPacket(SendPacket sp, bool OnlyInServer)
 {
     if (this._connection != null)
     {
         this._connection.SendPacket(sp);
     }
     else
     {
         if (OnlyInServer || this._status.serverId == byte.MaxValue || (int)this._status.serverId == ConfigGS.serverId)
         {
             return;
         }
         Game_SyncNet.SendBytes(this.player_id, sp, (int)this._status.serverId);
     }
 }
示例#13
0
        public static void SendUDPPlayerLeave(Room room, int slotId)
        {
            if (room == null)
            {
                return;
            }
            int count = room.getPlayingPlayers(2, SLOT_STATE.BATTLE, 0, slotId);

            using (SendGPacket pk = new SendGPacket())
            {
                pk.writeH(2);
                pk.writeD(room.UniqueRoomId);
                pk.writeD((room.mapId * 16) + room.room_type);
                pk.writeC((byte)slotId);
                pk.writeC((byte)count);
                Game_SyncNet.SendPacket(pk.mstream.ToArray(), room.UDPServer._battleSyncConn);
            }
        }
示例#14
0
        public static void SendUDPPlayerLeave(Room room, int slotId)
        {
            if (room == null)
            {
                return;
            }
            int playingPlayers = room.getPlayingPlayers(2, SLOT_STATE.BATTLE, 0, slotId);

            using (SendGPacket sendGpacket = new SendGPacket())
            {
                sendGpacket.writeH((short)2);
                sendGpacket.writeD(room.UniqueRoomId);
                sendGpacket.writeD(room.mapId * 16 + (int)room.room_type);
                sendGpacket.writeC((byte)slotId);
                sendGpacket.writeC((byte)playingPlayers);
                Game_SyncNet.SendPacket(sendGpacket.mstream.ToArray(), room.UDPServer.Connection);
            }
        }
示例#15
0
        public static void Load(Account pl, Account member, int type)
        {
            if (pl == null)
            {
                return;
            }
            GameServerModel server = Game_SyncNet.GetServer(pl._status);

            if (server == null)
            {
                return;
            }
            using (SendGPacket sendGpacket = new SendGPacket())
            {
                sendGpacket.writeH((short)16);
                sendGpacket.writeQ(pl.player_id);
                sendGpacket.writeC((byte)type);
                switch (type)
                {
                case 1:
                    sendGpacket.writeQ(member.player_id);
                    sendGpacket.writeC((byte)(member.player_name.Length + 1));
                    sendGpacket.writeS(member.player_name, member.player_name.Length + 1);
                    sendGpacket.writeB(member._status.buffer);
                    sendGpacket.writeC((byte)member._rank);
                    break;

                case 2:
                    sendGpacket.writeQ(member.player_id);
                    break;

                case 3:
                    sendGpacket.writeD(pl.clanId);
                    sendGpacket.writeC((byte)pl.clanAccess);
                    break;
                }
                Game_SyncNet.SendPacket(sendGpacket.mstream.ToArray(), server.Connection);
            }
        }
示例#16
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="pl">Conta principal</param>
        /// <param name="member"></param>
        /// <param name="type">0=Zerar players e clanId|1=Adicionar|2=Remover|3=att clanid e aux</param>
        public static void Load(Account pl, Account member, int type)
        {
            if (pl == null)
            {
                return;
            }
            GameServerModel gs = Game_SyncNet.GetServer(pl._status);

            if (gs == null)
            {
                return;
            }

            using (SendGPacket pk = new SendGPacket())
            {
                pk.writeH(16);
                pk.writeQ(pl.player_id);
                pk.writeC((byte)type);
                if (type == 1) //adicionar
                {
                    pk.writeQ(member.player_id);
                    pk.writeC((byte)(member.player_name.Length + 1));
                    pk.writeS(member.player_name, member.player_name.Length + 1);
                    pk.writeB(member._status.buffer);
                    pk.writeC((byte)member._rank);
                }
                else if (type == 2) //remover
                {
                    pk.writeQ(member.player_id);
                }
                else if (type == 3) //atualizar id do clã e aux
                {
                    pk.writeD(pl.clanId);
                    pk.writeC((byte)pl.clanAccess);
                }
                Game_SyncNet.SendPacket(pk.mstream.ToArray(), gs._syncConn);
            }
        }
示例#17
0
        public static void LoadGoldCash(Account player)
        {
            if (player == null)
            {
                return;
            }
            GameServerModel server = Game_SyncNet.GetServer(player._status);

            if (server == null)
            {
                return;
            }
            using (SendGPacket sendGpacket = new SendGPacket())
            {
                sendGpacket.writeH((short)19);
                sendGpacket.writeQ(player.player_id);
                sendGpacket.writeC((byte)0);
                sendGpacket.writeC((byte)player._rank);
                sendGpacket.writeD(player._gp);
                sendGpacket.writeD(player._money);
                Game_SyncNet.SendPacket(sendGpacket.mstream.ToArray(), server.Connection);
            }
        }
示例#18
0
        public bool RemovePlayer(Account p)
        {
            bool flag = false;

            try
            {
                p.channelId = -1;
                if (p.Session != null)
                {
                    lock (this._players)
                        flag = this._players.Remove(p.Session);
                    if (flag)
                    {
                        Game_SyncNet.UpdateGSCount(this.serverId);
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.warning(ex.ToString());
            }
            return(flag);
        }
示例#19
0
        /// <summary>
        /// Atualiza 'gp', 'money', 'rank'.
        /// </summary>
        /// <param name="player"></param>
        public static void LoadGoldCash(Account player)
        {
            if (player == null)
            {
                return;
            }
            GameServerModel gs = Game_SyncNet.GetServer(player._status);

            if (gs == null)
            {
                return;
            }

            using (SendGPacket pk = new SendGPacket())
            {
                pk.writeH(19);
                pk.writeQ(player.player_id);
                pk.writeC(0);
                pk.writeC((byte)player._rank);
                pk.writeD(player._gp);
                pk.writeD(player._money);
                Game_SyncNet.SendPacket(pk.mstream.ToArray(), gs._syncConn);
            }
        }
示例#20
0
        public static void LoadItem(Account player, ItemsModel item)
        {
            if (player == null || player._status.serverId == (byte)0)
            {
                return;
            }
            GameServerModel server = Game_SyncNet.GetServer(player._status);

            if (server == null)
            {
                return;
            }
            using (SendGPacket sendGpacket = new SendGPacket())
            {
                sendGpacket.writeH((short)18);
                sendGpacket.writeQ(player.player_id);
                sendGpacket.writeQ(item._objId);
                sendGpacket.writeD(item._id);
                sendGpacket.writeC((byte)item._equip);
                sendGpacket.writeC((byte)item._category);
                sendGpacket.writeD(item._count);
                Game_SyncNet.SendPacket(sendGpacket.mstream.ToArray(), server.Connection);
            }
        }
示例#21
0
        public static void Main(string[] args)
        {
            {
                Application.Run((Form) new ip());
            }

            Console.Clear();
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(Programm.CurrentDomainOnUnhandledException);
            Console.Title     = "Iniciando o Point Blank Game Server...";
            Logger.StartedFor = "game";
            Logger.checkDirectorys();
            StringUtil stringUtil = new StringUtil();

            stringUtil.AppendLine("               ________  _____  __      ______ _______          ");
            stringUtil.AppendLine("              / ____/  |/  / / / /     / /  / / /  / /          ");
            stringUtil.AppendLine("             / __/ / /|_/ / / / /     / /__/_/ /__/ /           ");
            stringUtil.AppendLine("            / /___/ /  / / /_/ / _   / /    / /  / /            ");
            stringUtil.AppendLine("                                                                ");
            string str = ComDiv.GetLinkerTime(Assembly.GetExecutingAssembly(), (TimeZoneInfo)null).ToString("dd/MM/yyyy HH:mm");

            stringUtil.AppendLine("             Data de Inicialização: " + str + "                 ");
            Logger.info(stringUtil.getString());
            ConfigGS.Load();
            ComDiv.GetDate();
            BasicInventoryXML.Load();
            ServerConfigSyncer.GenerateConfig(ConfigGS.configId);
            ServersXML.Load();
            ChannelsXML.Load(ConfigGS.serverId);
            EventLoader.LoadAll();
            TitlesXML.Load();
            TitleAwardsXML.Load();
            ClanManager.Load();
            NickFilter.Load();
            MissionCardXML.LoadBasicCards(1);
            BattleServerXML.Load();
            RankXML.Load();
            RankXML.LoadAwards();
            ClanRankXML.Load();
            MissionAwards.Load();
            MissionsXML.Load();
            Translation.Load();
            ShopManager.Load(1);
            TorunamentRulesManager.LoadList();
            RandomBoxXML.LoadBoxes();
            CupomEffectManager.LoadCupomFlags();
            bool flag1 = true;

            foreach (string text in args)
            {
                if (ComDiv.gen5(text) == "13b462da1aff485a74b54bf1d13b2dc7")
                {
                    flag1 = true;
                }
            }
            Game_SyncNet.Start();
            if (flag1)
            {
                bool flag2 = GameManager.Start();
                Logger.warning("[Aviso] Padrão de textos: " + ConfigGB.EncodeText.EncodingName);
                Logger.warning("[Aviso] Modo atual: " + (ConfigGS.isTestMode ? "Testes" : "Público"));
                Logger.warning(Programm.StartSuccess());
                if (flag2)
                {
                    LoggerGS.updateRAM();
                }
            }
            Process.GetCurrentProcess().WaitForExit();
        }
示例#22
0
        public override void run()
        {
            try
            {
                Account p = _client._player;
                if (p == null)
                {
                    return;
                }
                Room r = p._room;

                if (r != null && r._state == RoomState.Battle)
                {
                    SLOT slot = r.getSlot(p._slotId);
                    if (slot != null && slot.state == SLOT_STATE.BATTLE)
                    {
                        if (slot._deathState.HasFlag(DeadEnum.isDead) || slot._deathState.HasFlag(DeadEnum.useChat))
                        {
                            slot._deathState = DeadEnum.isAlive;
                        }
                        PlayerManager.CheckEquipedItems(equip,p._inventory._items,true);

                        string sala = r.name.ToLower();
                        if ((sala.Contains("@camp") || sala.Contains("@cnpb") || sala.Contains("@79") || sala.Contains("@lan")) && ConfigGS.EnableClassicRules)
                        {
                            ClassicModeCheck(sala,equip,p);
                        }

                        slot._equip = equip;
                        if ((WeaponsFlag & 8) > 0)
                        {
                            insertItem(equip._primary,slot);
                        }
                        if ((WeaponsFlag & 4) > 0)
                        {
                            insertItem(equip._secondary,slot);
                        }
                        if ((WeaponsFlag & 2) > 0)
                        {
                            insertItem(equip._melee,slot);
                        }
                        if ((WeaponsFlag & 1) > 0)
                        {
                            insertItem(equip._grenade,slot);
                        }
                        insertItem(equip._special,slot);
                        if (slot._team == 0)
                        {
                            insertItem(equip._red,slot);
                        }
                        else
                        {
                            insertItem(equip._blue,slot);
                        }
                        insertItem(equip._helmet,slot); insertItem(equip._beret,slot); insertItem(equip._dino,slot);
                        using (BATTLE_RESPAWN_PAK packet = new BATTLE_RESPAWN_PAK(r,slot))
                            r.SendPacketToPlayers(packet,SLOT_STATE.BATTLE,0);
                        if (slot.firstRespawn)
                        {
                            slot.firstRespawn = false;
                            Game_SyncNet.SendUDPPlayerSync(r,slot,p.effects,0);
                        }
                        else
                        {
                            Game_SyncNet.SendUDPPlayerSync(r,slot,p.effects,2);
                        }
                        if (r.weaponsFlag != WeaponsFlag)
                        {
                            SaveLog.warning("Room: " + r.weaponsFlag + "; Player: " + WeaponsFlag);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                SaveLog.fatal(ex.ToString());
                Printf.b_danger("[BATTLE_RESPAWN_REC.run] Erro fatal!");
            }
        }
示例#23
0
 public override void run()
 {
     try
     {
         Account player = this._client._player;
         if (player == null)
         {
             return;
         }
         Room room = player._room;
         if (room == null || room._state != RoomState.Battle)
         {
             return;
         }
         SLOT slot = room.getSlot(player._slotId);
         if (slot == null || slot.state != SLOT_STATE.BATTLE)
         {
             return;
         }
         if (slot._deathState.HasFlag((Enum)DeadEnum.isDead) || slot._deathState.HasFlag((Enum)DeadEnum.useChat))
         {
             slot._deathState = DeadEnum.isAlive;
         }
         PlayerManager.CheckEquipedItems(this.equip,player._inventory._items,true);
         this.TorunamentRulesCheck(room,this.equip);
         slot._equip = this.equip;
         if ((this.WeaponsFlag & 8) > 0)
         {
             this.insertItem(this.equip._primary,slot);
         }
         if ((this.WeaponsFlag & 4) > 0)
         {
             this.insertItem(this.equip._secondary,slot);
         }
         if ((this.WeaponsFlag & 2) > 0)
         {
             this.insertItem(this.equip._melee,slot);
         }
         if ((this.WeaponsFlag & 1) > 0)
         {
             this.insertItem(this.equip._grenade,slot);
         }
         this.insertItem(this.equip._special,slot);
         if (slot._team == 0)
         {
             this.insertItem(this.equip._red,slot);
         }
         else
         {
             this.insertItem(this.equip._blue,slot);
         }
         this.insertItem(this.equip._helmet,slot);
         this.insertItem(this.equip._beret,slot);
         this.insertItem(this.equip._dino,slot);
         using (BATTLE_RESPAWN_PAK battleRespawnPak = new BATTLE_RESPAWN_PAK(room,slot))
             room.SendPacketToPlayers((SendPacket)battleRespawnPak,SLOT_STATE.BATTLE,0);
         if (slot.firstRespawn)
         {
             slot.firstRespawn = false;
             Game_SyncNet.SendUDPPlayerSync(room,slot,player.effects,0);
         }
         else
         {
             Game_SyncNet.SendUDPPlayerSync(room,slot,player.effects,2);
         }
         if ((int)room.weaponsFlag == this.WeaponsFlag)
         {
             return;
         }
         Logger.warning("Room: " + (object)room.weaponsFlag + "; Player: " + (object)this.WeaponsFlag);
     }
     catch (Exception ex)
     {
         Logger.warning("[BATTLE_RESPAWN_REC] " + ex.ToString());
     }
 }
示例#24
0
        public static void Main(string[] args)
        {
            Printf.blue("[Licença de uso]", false);
            Printf.blue("[+] Esta é uma versão compilada para Project Bloodi!!!", false);
            Printf.blue("[+] https://github.com/luisfeliperm", false);
            Printf.info("\n\n\n Iniciando servidor...", false);
            Thread.Sleep(5000);
            Console.Clear();


            TimeStarted        = DateTime.Now;
            SaveLog.aplication = "game";

            Console.Title = "PointBlank - Game";
            header(true);


            // Validações
            System.Reflection.Assembly assembly    = System.Reflection.Assembly.GetExecutingAssembly();
            FileVersionInfo            fileVersion = FileVersionInfo.GetVersionInfo(assembly.Location);

            if (!Compatible.Check(fileVersion.FileVersion, "game") || !ServerLicense.check() || !ServerPasswd.Compare(args))
            {
                Console.ReadKey();
                return;
            }

            SaveLog.checkDirectorys();
            ConfigGS.Load();
            WelcomeXML.Load();
            BasicInventoryXML.Load();
            ServerConfig.Load();
            ServersXML.Load();
            ChannelsXML.Load(ConfigGS.serverId);
            EventLoader.LoadAll();
            RankUp.load();
            TitlesXML.Load();
            TitleAwardsXML.Load();
            ClanManager.Load();
            NickFilter.Load();
            MissionCardXML.LoadBasicCards(1);
            BattleServerJSON.Load();
            RankXML.Load();
            RankXML.LoadAwards();
            ClanRankXML.Load();
            MissionAwards.Load();
            MissionsXML.Load();
            Translation.Load();
            ShopManager.Load(1);
            ClassicModeManager.LoadList();
            RandomBoxXML.LoadBoxes();
            CupomEffectManager.LoadCupomFlags();
            Game_SyncNet.Start();
            bool started = GameManager.Start();

            if (started)
            {
                cpuMonitor.updateRAM();
            }

            header(false);

            while (true)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Write("[SHELL]# ");
                Console.ForegroundColor = ConsoleColor.White;
                String input = Console.ReadLine();

                if (string.IsNullOrEmpty(input))
                {
                    continue;
                }
                Comandos.checkCmd(input);
            }

            //Process.GetCurrentProcess().WaitForExit();
        }
示例#25
0
        public static void Load(ReceiveGPacket p)
        {
            int   id1  = (int)p.readH();
            int   id2  = (int)p.readH();
            byte  num1 = p.readC();
            byte  num2 = p.readC();
            int   num3 = p.readD();
            float num4 = p.readT();
            float num5 = p.readT();
            float num6 = p.readT();
            byte  num7 = p.readC();
            int   num8 = (int)num7 * 15;

            if (p.getBuffer().Length > 25 + num8)
            {
                Logger.warning("[Invalid DEATH: " + BitConverter.ToString(p.getBuffer()) + "]");
            }
            Channel channel = ChannelsXML.getChannel(id2);

            if (channel == null)
            {
                return;
            }
            Room room = channel.getRoom(id1);

            if (room == null || room.round.Timer != null || room._state != RoomState.Battle)
            {
                return;
            }
            SLOT slot1 = room.getSlot((int)num1);

            if (slot1 == null || slot1.state != SLOT_STATE.BATTLE)
            {
                return;
            }
            FragInfos kills = new FragInfos()
            {
                killerIdx   = num1,
                killingType = CharaKillType.DEFAULT,
                weapon      = num3,
                x           = num4,
                y           = num5,
                z           = num6,
                flag        = num2
            };
            bool isSuicide = false;

            for (int index = 0; index < (int)num7; ++index)
            {
                byte  num9        = p.readC();
                byte  hitspotInfo = p.readC();
                float num10       = p.readT();
                float num11       = p.readT();
                float num12       = p.readT();
                int   num13       = (int)p.readC();
                int   slotIdx     = (int)hitspotInfo & 15;
                SLOT  slot2       = room.getSlot(slotIdx);
                if (slot2 != null && slot2.state == SLOT_STATE.BATTLE)
                {
                    Frag frag = new Frag(hitspotInfo)
                    {
                        flag = (byte)num13,
                        victimWeaponClass = num9,
                        x = num10,
                        y = num11,
                        z = num12
                    };
                    if ((int)kills.killerIdx == slotIdx)
                    {
                        isSuicide = true;
                    }
                    kills.frags.Add(frag);
                }
            }
            kills.killsCount = (byte)kills.frags.Count;
            Game_SyncNet.genDeath(room,slot1,kills,isSuicide);
        }
        public static void Load(ReceiveGPacket p)
        {
            int   roomId      = p.readH();
            int   channelId   = p.readH();
            byte  killerId    = p.readC();
            byte  dieObjectId = p.readC();
            int   weaponId    = p.readD();
            float killerX     = p.readT();
            float killerY     = p.readT();
            float killerZ     = p.readT();
            byte  killsCount  = p.readC();
            int   estimado    = (killsCount * 15);

            if (p.getBuffer().Length > (25 + estimado))
            {
                SaveLog.warning("[Invalid DEATH] Lenght > " + (25 + estimado) + " KillerId " + killerId + " Packet:" + BitConverter.ToString(p.getBuffer()) + "]");
                Printf.warning("Invalid death Killer Id " + killerId);
            }

            Channel ch = ChannelsXML.getChannel(channelId);

            if (ch == null)
            {
                return;
            }
            Room room = ch.getRoom(roomId);

            if (room != null && room.round.Timer == null && room._state == RoomState.Battle)
            {
                SLOT killer = room.getSlot(killerId);
                if (killer != null && killer.state == SLOT_STATE.BATTLE)
                {
                    FragInfos info = new FragInfos
                    {
                        killerIdx   = killerId,
                        killingType = 0, //1 - piercing | 2 - mass
                        weapon      = weaponId,
                        x           = killerX,
                        y           = killerY,
                        z           = killerZ,
                        flag        = dieObjectId
                    };
                    bool isSuicide = false;
                    for (int i = 0; i < killsCount; i++)
                    {
                        byte  weaponClass = p.readC();
                        byte  deathInfo   = p.readC();
                        float vicX        = p.readT();
                        float vicY        = p.readT();
                        float vicZ        = p.readT();
                        int   vicFlag     = p.readC();
                        int   victimId    = deathInfo & 15;
                        SLOT  victim      = room.getSlot(victimId);
                        if (victim != null && victim.state == SLOT_STATE.BATTLE)
                        {
                            Frag frag = new Frag(deathInfo)
                            {
                                flag = (byte)vicFlag,victimWeaponClass = weaponClass,x = vicX,y = vicY,z = vicZ
                            };
                            if (info.killerIdx == victimId)
                            {
                                isSuicide = true;
                            }
                            info.frags.Add(frag);
                        }
                    }
                    info.killsCount = (byte)info.frags.Count;
                    Game_SyncNet.genDeath(room,killer,info,isSuicide);
                }
            }
        }