private void Create()
        {
            Debug.Log("Creating new character...");
            CreatePacket createPacket = new CreatePacket()
            {
                ClassType = Class.Wizard.Id, SkinType = 0
            };

            _client.SendPacket(createPacket);
        }
Example #2
0
        void ProcessCreatePacket(CreatePacket pkt)
        {
            Console.WriteLine("Client char create packet");
            int nextCharId = 1;

            nextCharId = db0.GetNextCharID(account);
            var cmd = db0.CreateQuery();

            cmd.CommandText = "SELECT maxCharSlot FROM accounts WHERE id=@accId;";
            cmd.Parameters.AddWithValue("@accId", account.AccountId);
            object maxChar1 = cmd.ExecuteScalar();
            int    maxChar  = int.Parse(maxChar1.ToString());

            cmd             = db0.CreateQuery();
            cmd.CommandText = "SELECT COUNT(id) FROM characters WHERE accId=@accId AND dead = FALSE;";
            cmd.Parameters.AddWithValue("@accId", account.AccountId);
            object currChar1 = cmd.ExecuteScalar();
            int    currChar  = int.Parse(currChar1.ToString());

            if (currChar >= maxChar)
            {
                Disconnect();
            }
            if (CheckAccountInUse(account.AccountId) != false)
            {
                Console.WriteLine("Account in use: " + account.AccountId);
                SendPacket(new svrPackets.FailurePacket()
                {
                    Message = "Account in use! Retrying..."
                });
                return;
            }
            Console.WriteLine("Client second char create packet");

            character = Database.CreateCharacter(pkt.ObjectType, nextCharId);

            int[] stats = new int[]
            {
                character.MaxHitPoints,
                character.MaxMagicPoints,
                character.Attack,
                character.Defense,
                character.Speed,
                character.Dexterity,
                character.HpRegen,
                character.MpRegen,
            };

            bool ok = true;

            cmd = db0.CreateQuery();
            cmd.Parameters.AddWithValue("@accId", account.AccountId);
            cmd.Parameters.AddWithValue("@charId", nextCharId);
            cmd.Parameters.AddWithValue("@charType", pkt.ObjectType);
            cmd.Parameters.AddWithValue("@items", character._Equipment);
            cmd.Parameters.AddWithValue("@stats", Utils.GetCommaSepString(stats));
            cmd.Parameters.AddWithValue("@fameStats", character.FameStats.ToString());
            cmd.CommandText = "INSERT INTO characters (accId, charId, charType, level, exp, fame, items, hp, mp, stats, dead, pet, fameStats) VALUES (@accId, @charId, @charType, 1, 0, 0, @items, 100, 100, @stats, FALSE, -1, @fameStats);";
            int v = cmd.ExecuteNonQuery();

            //int v = 1;
            ok = v > 0;

            Console.WriteLine("Client char create packet result: " + ok);

            if (ok)
            {
                SendPacket(new CreateResultPacket()
                {
                    CharacterID = character.CharacterId,
                    ObjectID    = RealmManager.Worlds[targetWorld].EnterWorld(entity = new Player(this))
                });
                stage = ProtocalStage.Ready;
            }
            else
            {
                SendPacket(new svrPackets.FailurePacket()
                {
                    Message = "Failed to Load character."
                });
            }
        }
        private void ProcessCreatePacket(CreatePacket pkt)
        {
            //          try
            //          {
            var nextCharId = 1;

            nextCharId = db.GetNextCharId(account);
            var cmd = db.CreateQuery();

            cmd.CommandText = "SELECT maxCharSlot FROM accounts WHERE id=@accId;";
            cmd.Parameters.AddWithValue("@accId", account.AccountId);
            var maxChar = (int)cmd.ExecuteScalar();

            cmd             = db.CreateQuery();
            cmd.CommandText = "SELECT COUNT(id) FROM characters WHERE accId=@accId AND dead = FALSE;";
            cmd.Parameters.AddWithValue("@accId", account.AccountId);
            var currChar = (int)(long)cmd.ExecuteScalar();


            if (currChar >= maxChar)
            {
                Disconnect();
                return;
            }
            if (CheckAccountInUse(account.AccountId) != false)
            {
                Console.ForegroundColor = ConsoleColor.Blue;
                Console.WriteLine(@"Account in use: " + account.AccountId);
                Console.ForegroundColor = ConsoleColor.White;
                SendPacket(new FailurePacket
                {
                    Message = "Account in use! Retrying..."
                });
                return;
            }

            character = Database.CreateCharacter(pkt.ObjectType, nextCharId);


            var stats = new int[]
            {
                character.MaxHitPoints,
                character.MaxMagicPoints,
                character.Attack,
                character.Defense,
                character.Speed,
                character.Dexterity,
                character.HpRegen,
                character.MpRegen,
            };

            var ok = true;

            cmd = db.CreateQuery();
            cmd.Parameters.AddWithValue("@accId", account.AccountId);
            cmd.Parameters.AddWithValue("@charId", nextCharId);
            cmd.Parameters.AddWithValue("@charType", pkt.ObjectType);
            cmd.Parameters.AddWithValue("@items", Utils.GetCommaSepString(character.EquipSlots()));
            cmd.Parameters.AddWithValue("@stats", Utils.GetCommaSepString(stats));
            cmd.Parameters.AddWithValue("@fameStats", character.FameStats.ToString());
            cmd.CommandText =
                "INSERT INTO characters (accId, charId, charType, level, exp, fame, items, hp, mp, stats, dead, pet, fameStats) VALUES (@accId, @charId, @charType, 1, 0, 0, @items, 100, 100, @stats, FALSE, -1, @fameStats);";
            var v = cmd.ExecuteNonQuery();

            ok = v > 0;

            if (ok)
            {
                if (account.Bonuses != null)
                {
                    if (account.Bonuses.Count > 0)
                    {
                        var chrEquip = character.Equipment;
                        for (var i = 4; i < 12; i++)
                        {
                            if (chrEquip[i] == -1)
                            {
                                chrEquip[i] = account.Bonuses.First();
                                account.Bonuses.Remove(account.Bonuses.First());
                                SendPacket(new TextPacket
                                {
                                    Name       = "",
                                    BubbleTime = 0,
                                    Stars      = -1,
                                    Text       = "You received " + XmlDatas.TypeToId[chrEquip[i]] + "."
                                });
                                if (account.Bonuses.Count == 0)
                                {
                                    break;
                                }
                            }
                        }
                        db.SetBonuses(account.AccountId, account.Bonuses);
                        character.Equipment = chrEquip;
                    }
                    else
                    {
                    }
                }
                else
                {
                    account.Bonuses = new List <short>();
                }
                if (IP.Gifts != null)
                {
                    if (IP.Gifts.Count > 0)
                    {
                        var chrEquip = character.Equipment;
                        for (var i = 4; i < 12; i++)
                        {
                            if (chrEquip[i] == -1)
                            {
                                chrEquip[i] = IP.Gifts.First();
                                IP.Gifts.Remove(IP.Gifts.First());
                                SendPacket(new TextPacket
                                {
                                    Name       = "",
                                    BubbleTime = 0,
                                    Stars      = -1,
                                    Text       = "You received " + XmlDatas.TypeToId[chrEquip[i]] + "."
                                });
                                if (IP.Gifts.Count == 0)
                                {
                                    break;
                                }
                            }
                        }
                        db.SetBonuses(IP.Address, IP.Gifts);
                        character.Equipment = chrEquip;
                    }
                    else
                    {
                    }
                }
                else
                {
                    IP.Gifts = new List <short>();
                }
                db.SaveBackpacks(character, account);
            }

            if (ok)
            {
                var target = RealmManager.Worlds[targetWorld];
                //Delay to let client load remote texture
//                target.Timers.Add(new WorldTimer(2000, (w, t) => SendPacket(new CreateResultPacket
                target.Timers.Add(new WorldTimer(500, (w, t) => SendPacket(new CreateResultPacket
                {
                    CharacterID = character.CharacterId,
                    ObjectID    = RealmManager.Worlds[targetWorld].EnterWorld(entity = new Player(this))
                })));
                stage = ProtocalStage.Ready;
            }
            else
            {
                SendPacket(new FailurePacket
                {
                    Message = "Failed to Load character."
                });
            }
            //           }
            //           catch (Exception e) { }
        }
Example #4
0
    protected override void OnMessage(MessageEventArgs e)
    {
        // Console.WriteLine(e.Data);
        Packet packet   = JsonConvert.DeserializeObject <Packet>(e.Data);
        string socketID = ID;

        // join packet -- 0
        if (packet.type == Packets.JOIN)
        {
            JoinPacket jPacket = JsonConvert.DeserializeObject <JoinPacket>(packet.data);
            joinLobby(jPacket.lobbyID, jPacket.playerID, jPacket.name, socketID);
        }
        // create packet -- 1
        else if (packet.type == Packets.CREATE)
        {
            try
            {
                Console.WriteLine("making new create packet");
                // Create a lobby with given parameters
                CreatePacket createPacket = JsonConvert.DeserializeObject <CreatePacket>(packet.data);
                createLobby(createPacket.maxPlayers, createPacket.name, createPacket.playerID, socketID, Context.WebSocket);
            }
            catch (NullReferenceException nre)
            {
                Console.WriteLine("hi");
                Console.WriteLine(nre);
            }
        }
        // start packet -- 2
        else if (packet.type == 2)
        {
            startGame(packet);
        }
        else if (packet.type == Packets.PLAYER_INPUT)
        {
            PlayerInputPacket playerInputPacket = JsonConvert.DeserializeObject <PlayerInputPacket>(packet.data);
            Player            currentPlayer     = null;
            foreach (Player player in lobbies[playerInputPacket.lobbyID].players)
            {
                if (player.socketID == ID)
                {
                    currentPlayer = player;
                }
            }
            if (currentPlayer == null)
            {
                // no valid player found in lobby
                return;
            }
            // validate move
            foreach (Player player in lobbies[playerInputPacket.lobbyID].players)
            {
                if (player.socketID != ID)
                {
                    if (player.currentBlockPosition != null)
                    {
                        foreach (int[] pos1 in player.currentBlockPosition)
                        {
                            foreach (int[] pos2 in playerInputPacket.shapeIndices)
                            {
                                if (pos1 == pos2)
                                {
                                    Send("COLLISION");
                                    return;
                                }
                            }
                        }
                    }
                }
            }
            UpdatePacket update = processInput(playerInputPacket);
            if (playerInputPacket.move != "freeze")
            {
                currentPlayer.currentBlockPosition = playerInputPacket.shapeIndices;
                playerInputPacket.playerID         = currentPlayer.id;
                foreach (Player player in lobbies[playerInputPacket.lobbyID].players)
                {
                    if (player.socketID != ID)
                    {
                        Sessions.SendTo(JsonConvert.SerializeObject(update), player.socketID);
                    }
                }
            }
            else
            {
                // remove column is ID # 2
                // remove area is   ID # 3
                // area removes 2 up, 2 left, 2 right, 2 down
                Lobby lobby = lobbies[playerInputPacket.lobbyID];

                update.shapeIndices = playerInputPacket.shapeIndices;
                foreach (int[] pos in playerInputPacket.shapeIndices)
                {
                    // FREEZE
                    lobby.game.board.board[pos[0], pos[1]] = pos[2];
                }

                // Prints prints = new Prints();
                // Console.WriteLine("LOBBY BOARD");
                // prints.PrintMultiDimArr(lobby.game.board.board);

                checkRows(lobby);

                foreach (Player player in lobby.players)
                {
                    if (player.socketID != ID)
                    {
                        Sessions.SendTo(JsonConvert.SerializeObject(update), player.socketID);
                    }
                }
            }
            // on place piece put on board ;GJ
        }
        else if (packet.type == Packets.BOT_UPDATE) // 7
        {
            BotPacket bot = JsonConvert.DeserializeObject <BotPacket>(packet.data);
            if (bot.action == 1)
            {
                lobbies[bot.lobbyID].botCount++;
                lobbies[bot.lobbyID].numPlayers++;
                alertLobby(-2, bot.lobbyID, Packets.ADD_BOT);
            }
            else if (bot.action == 0)
            {
                lobbies[bot.lobbyID].botCount--;
                lobbies[bot.lobbyID].numPlayers--;
                alertLobby(-2, bot.lobbyID, Packets.REMOVE_BOT);
            }
        }
        else if (packet.type == Packets.SHAPE_BLUEPRINT)
        {
            ShapeBlueprintPacket sbp = JsonConvert.DeserializeObject <ShapeBlueprintPacket>(packet.data);
            foreach (Player player in lobbies[sbp.lobbyID].players)
            {
                if (player.socketID != ID)
                {
                    Sessions.SendTo(JsonConvert.SerializeObject(sbp), player.socketID);
                }
                else
                {
                    //player.currentBlock = sbp.shapeBlueprint;
                }
            }
        }
        else if (packet.type == Packets.TEAM_NAME)
        {
            // format the packet to be a scors packet with all the team information
            TeamPacket tPacket = JsonConvert.DeserializeObject <TeamPacket>(packet.data);

            foreach (Player player in lobbies[tPacket.lobbyid].players)
            {
                if (player.socketID != ID)
                {
                    Sessions.SendTo(JsonConvert.SerializeObject(tPacket), player.socketID);
                }
                else
                {
                    //player.currentBlock = sbp.shapeBlueprint;
                }
            }
        }
        else if (packet.type == Packets.GAME_END)
        {
            EndPacket end = JsonConvert.DeserializeObject <EndPacket>(packet.data);
            if (checkGameEnd(end))
            {
                foreach (Player player in lobbies[end.lobbyID].players)
                {
                    Sessions.SendTo(JsonConvert.SerializeObject(end), player.socketID);
                }
            }
        }
        else if (packet.type == Packets.POS_UPDATE)
        {
            PositionPacket pp = JsonConvert.DeserializeObject <PositionPacket>(packet.data);
            foreach (Player player in lobbies[pp.lobbyID].players)
            {
                if (player.socketID == ID)
                {
                    player.currentBlockPosition = pp.shapeIndices;
                }
            }
        }
        else
        {
            Console.WriteLine("bad packet");
            Console.WriteLine(packet.type);
            Send("bad packet!!! :(");
        }
    }