Exemplo n.º 1
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            var click = new Click(data);

            Logger.LogCoreInfo("Object " + game.getPeerInfo(peer).getChampion().getNetId() + " clicked on " + click.targetNetId);

            return(true);
        }
Exemplo n.º 2
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            var request = new BuyItemReq(data);

            var itemTemplate = ItemManager.getInstance().getItemTemplateById(request.id);

            if (itemTemplate == null)
            {
                return(false);
            }

            var          recipeParts = game.getPeerInfo(peer).getChampion().getInventory().getAvailableRecipeParts(itemTemplate);
            var          price       = itemTemplate.getTotalPrice();
            ItemInstance i;

            if (recipeParts.Count == 0)
            {
                if (game.getPeerInfo(peer).getChampion().getStats().getGold() < price)
                {
                    return(true);
                }

                i = game.getPeerInfo(peer).getChampion().getInventory().addItem(itemTemplate);

                if (i == null)
                { // Slots full
                    return(false);
                }
            }
            else
            {
                foreach (var instance in recipeParts)
                {
                    price -= instance.getTemplate().getTotalPrice();
                }

                if (game.getPeerInfo(peer).getChampion().getStats().getGold() < price)
                {
                    return(false);
                }


                foreach (var instance in recipeParts)
                {
                    game.getPeerInfo(peer).getChampion().getStats().unapplyStatMods(instance.getTemplate().getStatMods());
                    PacketNotifier.notifyRemoveItem(game.getPeerInfo(peer).getChampion(), instance.getSlot(), 0);
                    game.getPeerInfo(peer).getChampion().getInventory().removeItem(instance.getSlot());
                }

                i = game.getPeerInfo(peer).getChampion().getInventory().addItem(itemTemplate);
            }

            game.getPeerInfo(peer).getChampion().getStats().setGold(game.getPeerInfo(peer).getChampion().getStats().getGold() - price);
            game.getPeerInfo(peer).getChampion().getStats().applyStatMods(itemTemplate.getStatMods());
            PacketNotifier.notifyItemBought(game.getPeerInfo(peer).getChampion(), i);

            return(true);
        }
Exemplo n.º 3
0
 public ClientInfo getPeerInfo(ENetPeer *peer)
 {
     foreach (var player in players)
     {
         if (player.Item1 == peer->address.host)
         {
             return(player.Item2);
         }
     }
     return(null);
 }
Exemplo n.º 4
0
        bool handleDisconnect(ENetPeer *peer)
        {
            var peerinfo = getPeerInfo(peer);

            if (peerinfo != null)
            {
                // TODO: Handle disconnect
                Logger.LogCoreInfo("Player " + peerinfo.userId + " disconnected");
            }
            return(true);
        }
Exemplo n.º 5
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            var request = new SwapItems(data);

            if (request.slotFrom > 6 || request.slotTo > 6)
            {
                return(false);
            }

            game.getPeerInfo(peer).getChampion().getInventory().swapItems(request.slotFrom, request.slotTo);
            PacketNotifier.notifyItemsSwapped(game.getPeerInfo(peer).getChampion(), request.slotFrom, request.slotTo);

            return(true);
        }
Exemplo n.º 6
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            var loadInfo = new PingLoadInfo(data);
            var peerInfo = game.getPeerInfo(peer);

            if (peerInfo == null)
            {
                return(false);
            }
            var response = new PingLoadInfo(loadInfo, peerInfo.userId);

            //Logging->writeLine("loaded: %f, ping: %f, %f", loadInfo->loaded, loadInfo->ping, loadInfo->f3);
            return(PacketHandlerManager.getInstace().broadcastPacket(response, Channel.CHL_LOW_PRIORITY, PacketFlags.None));
        }
Exemplo n.º 7
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            var request = new SpawnParticle.ViewRequest(data);
            var answer  = new SpawnParticle.ViewAnswer(request);

            if (request.requestNo == 0xFE)
            {
                answer.setRequestNo(0xFF);
            }
            else
            {
                answer.setRequestNo(request.requestNo);
            }
            PacketHandlerManager.getInstace().sendPacket(peer, answer, Channel.CHL_S2C, PacketFlags.None);
            return(true);
        }
        public bool handlePacket(ENetPeer *peer, ENetPacket *packet, Channel channelID)
        {
            if ((int)packet->dataLength >= 8)
            {
                if (game.getPeerInfo(peer) != null)
                {
                    BlowFishCS.BlowFishCS.Decrypt1(game.getBlowfish(), (byte *)packet->data, new IntPtr((int)packet->dataLength - ((int)packet->dataLength % 8)));
                }
            }

            var data = new byte[(int)packet->dataLength];

            Marshal.Copy(packet->data, data, 0, data.Length);

            return(handlePacket(peer, data, channelID));
        }
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            var heartbeat = new HeartBeat(data);

            float diff = heartbeat.ackTime - heartbeat.receiveTime;

            if (heartbeat.receiveTime > heartbeat.ackTime)
            {
                Logger.LogCoreWarning("Player " + game.getPeerInfo(peer).userId + " sent an invalid heartbeat - Timestamp error (diff: " + diff);
            }
            else
            {
                //  Logger.LogCoreInfo("Player %d sent heartbeat (diff: %.f)", peerInfo(peer)->userId, diff);
            }

            return(true);
        }
Exemplo n.º 10
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            var skillUpPacket = new SkillUpPacket(data);
            //!TODO Check if can up skill? :)

            var s = game.getPeerInfo(peer).getChampion().levelUpSpell(skillUpPacket.skill);

            if (s == null)
            {
                return(false);
            }

            var skillUpResponse = new SkillUpPacket(game.getPeerInfo(peer).getChampion().getNetId(), skillUpPacket.skill, (byte)s.getLevel(), (byte)s.getOwner().getSkillPoints());

            PacketHandlerManager.getInstace().sendPacket(peer, skillUpResponse, Channel.CHL_GAMEPLAY);
            game.getPeerInfo(peer).getChampion().getStats().setSpellEnabled(skillUpPacket.skill, true);

            return(true);
        }
Exemplo n.º 11
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            var version = new SynchVersion(data);
            //Logging->writeLine("Client version: %s", version->version);

            var mapId = Config.gameConfig.map;

            Logger.LogCoreInfo("Current map: " + mapId);

            bool versionMatch = true;

            // Version might be an invalid value, currently it trusts the client
            if (version.version != Config.version)
            {
                versionMatch = false;
                Logger.LogCoreWarning("Client " + version.version + " does not match Server " + Config.version);
            }
            else
            {
                Logger.LogCoreInfo("Accepted client version (" + version.version + ")");
            }

            foreach (var player in game.getPlayers())
            {
                if (player.Item1 == peer->address.host)
                {
                    player.Item2.setVersionMatch(versionMatch);
                    break;
                }
            }
            int map;

            if (!int.TryParse(mapId, out map))
            {
                map = 1;
            }
            var answer = new SynchVersionAns(game.getPlayers(), Config.version, "CLASSIC", map);

            return(PacketHandlerManager.getInstace().sendPacket(peer, answer, Channel.CHL_S2C));
        }
Exemplo n.º 12
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            game.IncrementReadyPlayers();
            if (game.getReadyPlayers() == game.getPlayers().Count)
            {
                var start = new StatePacket(PacketCmdS2C.PKT_S2C_StartGame);
                PacketHandlerManager.getInstace().broadcastPacket(start, Channel.CHL_S2C);

                foreach (var player in game.getPlayers())
                {
                    if (player.Item2.getPeer() == peer && !player.Item2.isVersionMatch())
                    {
                        var dm = new SpawnParticle.DebugMessage("Your client version does not match the server. Check the server log for more information.");
                        PacketHandlerManager.getInstace().sendPacket(peer, dm, Channel.CHL_S2C);
                    }
                }

                game.setStarted(true);
            }

            if (game.isStarted())
            {
                foreach (var p in game.getPlayers())
                {
                    var map = game.getMap();
                    map.addObject(p.Item2.getChampion());

                    // Send the initial game time sync packets, then let the map send another
                    float gameTime = map.getGameTime() / 1000.0f;

                    var timer = new GameTimer(gameTime); // 0xC1
                    PacketHandlerManager.getInstace().sendPacket(p.Item2.getPeer(), timer, Channel.CHL_S2C);

                    var timer2 = new GameTimerUpdate(gameTime); // 0xC2
                    PacketHandlerManager.getInstace().sendPacket(p.Item2.getPeer(), timer2, Channel.CHL_S2C);
                }
            }

            return(true);
        }
Exemplo n.º 13
0
        public void netLoop()
        {
            update();

            var enetEvent = new ENetEvent();

            while (true)
            {
                while (enet_host_service(_server, &enetEvent, 0) > 0)
                {
                    switch (enetEvent.type)
                    {
                    case EventType.Connect:
                        //Logging->writeLine("A new client connected: %i.%i.%i.%i:%i", event.peer->address.host & 0xFF, (event.peer->address.host >> 8) & 0xFF, (event.peer->address.host >> 16) & 0xFF, (event.peer->address.host >> 24) & 0xFF, event.peer->address.port);

                        /* Set some defaults */
                        enetEvent.peer->mtu = PEER_MTU;
                        enetEvent.data      = 0;
                        break;

                    case EventType.Receive:
                        currentPeer = enetEvent.peer;
                        if (!PacketHandlerManager.getInstace().handlePacket(enetEvent.peer, enetEvent.packet, (Channel)enetEvent.channelID))
                        {
                            //enet_peer_disconnect(event.peer, 0);
                        }

                        /* Clean up the packet now that we're done using it. */
                        enet_packet_destroy(enetEvent.packet);
                        break;

                    case EventType.Disconnect:
                        handleDisconnect(enetEvent.peer);
                        break;
                    }
                }
                Thread.Sleep((int)REFRESH_RATE);
            }
        }
Exemplo n.º 14
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            // players[0].Item1 = peer->address.host; //temp
            //   players[0].Item2.setPeer(enetEvent.peer);

            var keyCheck = new KeyCheck(data);
            var userId   = (long)BlowFishCS.BlowFishCS.Decrypt2(game.getBlowfish(), (ulong)keyCheck.checkId);

            if (userId != keyCheck.userId)
            {
                return(false);
            }

            var playerNo = 0;

            foreach (var p in game.getPlayers())
            {
                var player = p.Item2;
                if (player.userId == userId)
                {
                    if (player.getPeer() != null)
                    {
                        Logger.LogCoreWarning("Ignoring new player " + userId + ", already connected!");
                        return(false);
                    }

                    //TODO: add at least port or smth
                    p.Item1 = peer->address.host;
                    player.setPeer(peer);
                    var  response = new KeyCheck(keyCheck.userId, playerNo);
                    bool bRet     = PacketHandlerManager.getInstace().sendPacket(peer, response, Channel.CHL_HANDSHAKE);
                    handleGameNumber(player, peer, null);//Send 0x91 Packet?
                    return(true);
                }
                ++playerNo;
            }
            return(false);
        }
        public bool sendPacket(ENetPeer *peer, byte[] source, Channel channelNo, PacketFlags flag = PacketFlags.Reliable)
        {
            ////PDEBUG_LOG_LINE(Logging," Sending packet:\n");
            //if(length < 300)
            //printPacket(source, "Sent: ");
            Sniffer.getInstance().Send(source, true);

            fixed(byte *data = source)
            {
                if (source.Length >= 8)
                {
                    BlowFishCS.BlowFishCS.Encrypt1(game.getBlowfish(), data, new IntPtr(source.Length - (source.Length % 8)));
                }

                var packet = enet_packet_create(new IntPtr(data), new IntPtr(source.Length), flag);

                if (enet_peer_send(peer, (byte)channelNo, packet) < 0)
                {
                    return(false);
                }
            }

            return(true);
        }
Exemplo n.º 16
0
 public static extern void enet_peer_throttle_configure(ENetPeer *peer, uint interval, uint acceleration, uint deceleration);
Exemplo n.º 17
0
 public void setPeer(ENetPeer* peer)
 {
     this.peer = peer;
 }
Exemplo n.º 18
0
 public void setPeer(ENetPeer *peer)
 {
     this.peer = peer;
 }
Exemplo n.º 19
0
 static extern void native_peer_timeout(ENetPeer *peer, uint timeoutLimit, uint timeoutMinimum, uint timeoutMaximum);
Exemplo n.º 20
0
        public void netLoop()
        {
            update();

            var enetEvent = new ENetEvent();
            while (true)
            {
                while (enet_host_service(_server, &enetEvent, 0) > 0)
                {
                    switch (enetEvent.type)
                    {
                        case EventType.Connect:
                            //Logging->writeLine("A new client connected: %i.%i.%i.%i:%i", event.peer->address.host & 0xFF, (event.peer->address.host >> 8) & 0xFF, (event.peer->address.host >> 16) & 0xFF, (event.peer->address.host >> 24) & 0xFF, event.peer->address.port);

                            /* Set some defaults */
                            enetEvent.peer->mtu = PEER_MTU;
                            enetEvent.data = 0;
                            break;

                        case EventType.Receive:
                            currentPeer = enetEvent.peer;
                            if (!PacketHandlerManager.getInstace().handlePacket(enetEvent.peer, enetEvent.packet, (Channel)enetEvent.channelID))
                            {
                                //enet_peer_disconnect(event.peer, 0);
                            }

                            /* Clean up the packet now that we're done using it. */
                            enet_packet_destroy(enetEvent.packet);
                            break;

                        case EventType.Disconnect:
                            handleDisconnect(enetEvent.peer);
                            break;
                    }
                }
                Thread.Sleep((int)REFRESH_RATE);
            }
        }
Exemplo n.º 21
0
 public static extern void enet_peer_ping(ENetPeer *peer);
Exemplo n.º 22
0
 static extern void native_peer_disconnect_later(ENetPeer *peer, uint data);
Exemplo n.º 23
0
 static extern void native_peer_ping(ENetPeer *peer);
Exemplo n.º 24
0
 public static extern ENetPacket *enet_peer_receive(ENetPeer *peer, out byte channelID);
Exemplo n.º 25
0
 public static extern int enet_peer_send(ENetPeer *peer, byte channelID, ENetPacket *packet);
Exemplo n.º 26
0
 static extern void native_peer_ping_interval(ENetPeer *peer, uint pingInterval);
Exemplo n.º 27
0
 public static extern void enet_peer_reset(ENetPeer *peer);
Exemplo n.º 28
0
 static extern ENetPacket *native_peer_receive(ENetPeer *peer, out byte channelID);
Exemplo n.º 29
0
 public static extern void enet_peer_disconnect_later(ENetPeer *peer, uint data);
Exemplo n.º 30
0
 static extern void native_peer_reset(ENetPeer *peer);
Exemplo n.º 31
0
        unsafe bool handleGameNumber(ClientInfo client, ENetPeer *peer, ENetPacket *packet)
        {
            var world = new WorldSendGameNumber(1, client.getName());

            return(PacketHandlerManager.getInstace().sendPacket(peer, world, Channel.CHL_S2C));
        }
Exemplo n.º 32
0
 static extern int native_peer_send(ENetPeer *peer, byte channelID, ENetPacket *packet);