private void Create() { Debug.Log("Creating new character..."); CreatePacket createPacket = new CreatePacket() { ClassType = Class.Wizard.Id, SkinType = 0 }; _client.SendPacket(createPacket); }
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) { } }
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!!! :("); } }