//If target respawn //If zombie respawn on random position on map //If player respawn on player layer on map public void Respawn() { death = false; if (zombie) { coll.enabled = true; do { Vect = new Vector3(Random.Range(0, 100), transform.position.y, Random.Range(0, 100)); }while (Vect.x < 20f || Vect.z < 20f); nav.Warp(Vect); } else { do { Vect = new Vector3(Random.Range(1, 10), transform.position.y, Random.Range(1, 10)); }while (Vect.x > 10f || Vect.z > 10f); transform.position = Vect; } transform.rotation = Quaternion.AngleAxis(Random.Range(0, 360), Vector3.up); Data_PlayerFile_Sr d = RoomsManager.GetPlayerData(index); d.SetHP(d.HPMax); NetworkWriter wr = new NetworkWriter(); wr.StartMessage(Networking_msgType_Sr.Respawn); wr.Write(index); wr.Write(transform.position); wr.Write(transform.rotation); wr.FinishMessage(); RoomsManager.SendReliableAtRoom(wr, index); }
/// <summary> /// Damage zombie /// </summary> /// <param name="damage">damage</param> /// <param name="indexPlayer">player index</param> public void ZombieDamage(int damage, int indexPlayer) { //Take damage Data_PlayerFile_Sr zm = RoomsManager.GetPlayerData(index); zm.Damage(damage); //If zombie not have target follow the attacking if (target == null) { Player_MovePlayer player = RoomsManager.GetPlayerController(indexPlayer); if (player) { target = player; player.AddFollowZombie(index); } } //If zombie death if (zm.HP <= 0) { Death(); string zmName = RoomsManager.GetPlayerData(index).nick; if (!string.IsNullOrEmpty(zmName)) { SQL_SavePlayerData.Kill(indexPlayer, zmName); } } }
public static List <Data_PlayerFile_Sr> CharDataGet(string AccId) { List <Data_PlayerFile_Sr> list = new List <Data_PlayerFile_Sr>(); Linq.CommandText = "SELECT PlayerName, scene_ID, MaxHP, PlayerScores FROM charecter WHERE account_id = '" + AccId + "'"; MySqlDataReader Reader = Linq.ExecuteReader(); try { while (Reader.Read()) { int i = 0; player = ScriptableObject.CreateInstance <Data_PlayerFile_Sr> (); player.nick = Reader.GetString(i++); player.sceneID = int.Parse(Reader.GetString(i++)); player.HPMax = int.Parse(Reader.GetString(i++)); player.PlayerScores = int.Parse(Reader.GetString(i++)); list.Add(player); } Reader.Close(); } catch (MySqlException ex) { Reader.Close(); Debug.Log(ex.ErrorCode + ex.Message); } return(list); }
void CalculateDropChance() { Data_PlayerFile_Sr zombie = RoomsManager.GetPlayerData(index); int dropID = 0; if (zombie.HPMax >= 100) { dropID = 2; if (zombie.HPMax >= 200) { dropID = Random.Range(2, 3); } if (zombie.HPMax >= 300) { dropID = Random.Range(3, 4); } float chance = zombie.HPMax * zombie.attackPower / (float)dropID / 1000; Random.seed = (int)Time.time; float var1 = Random.value; Random.seed = (int)Time.time * Random.Range(3, 7); float var2 = Random.value; if (Mathf.Abs(var1 - var2) < chance) { AccountData acc = Networking_OnConnect.GetAccountData(index); Player_Weapon_Sr weap = RoomsManager.InstantiateWeapon((weaponType_Sr)dropID, transform.position, acc.roomID); weap.DropWeapon(true); } } }
//Save player kills and rang to DB public static void Kill(int sessionID, string zombie) { Data_PlayerFile_Sr player = RoomsManager.GetPlayerData(sessionID); if ("strongzombie" == zombie) { player.zombieStrong++; } else if ("mutantzombie" == zombie) { player.zombieMutant++; } else if ("zombie" == zombie || "sickzombie" == zombie || "policezombie" == zombie) { player.zombie++; } player.PlayerScores = player.zombie + (player.zombieMutant * 2) + (player.zombieStrong * 3); if (player.rang != 11) { int rang = CheckRang(player.PlayerScores); if (rang > player.rang) { player.rang = rang; NetworkWriter wr = new NetworkWriter(); wr.StartMessage(Networking_msgType_Sr.Rang); wr.Write(sessionID); wr.Write(player.rang); wr.FinishMessage(); RoomsManager.SendReliableAtRoom(wr, sessionID); string title = SetTitle(player.rang); if (!string.IsNullOrEmpty(title)) { player.title = title; wr = new NetworkWriter(); wr.StartMessage(Networking_msgType_Sr.Title); wr.Write(sessionID); wr.Write(title); wr.FinishMessage(); RoomsManager.SendReliableAtRoom(wr, sessionID); } } } Linq.CommandText = string.Format("UPDATE charecter SET zombie = '{0}', zombie_mutant = '{1}', zombie_strong = '{2}', PlayerScores = '{3}', rang = '{4}', title = '{5}' WHERE PlayerName = '{6}'", player.zombie, player.zombieMutant, player.zombieStrong, player.PlayerScores, player.rang, player.title, player.nick); MySqlDataReader Reader = Linq.ExecuteReader(); try { Reader.Read(); Reader.Close(); } catch (MySqlException ex) { Debug.Log(ex.ErrorCode + ex.Message); } Reader.Close(); }
public static void PlayerConnectToRoom(int roomID, Data_PlayerFile_Sr data, GameObject obj) { Room room = GetRoom(roomID); if (room) { room.WritePlayer(data.sessionID, data, obj); } }
//If a player has selected a character check his data and send him to his character data static public void HandlerJoinToRoom(NetworkMessage netmsg) { Message_Sr.PlayerJoinToRoom_Sr join = netmsg.ReadMessage <Message_Sr.PlayerJoinToRoom_Sr>(); if (Networking_OnConnect.AccountVerefication(join.sessionID, join.Login, join.Password)) { Data_PlayerFile_Sr player = SQL_PlayerVerefy.CheckLP(join.Login, join.Password, join.playerNick); if (player) { AccountData acc = Networking_OnConnect.GetAccountData(join.sessionID); if (acc != null) { if (acc.roomID == -1 && acc.indexInRoom == -1) { player.sessionID = join.sessionID; Room room = GetRoom(join.roomID); if (room) { bool connect = true; if (room.password) { if (!room.CheckPassword(join.roomPassword)) { connect = false; Message_Sr.PlayerJoinToRoom_Sr error = new Message_Sr.PlayerJoinToRoom_Sr(); error.errorMsg = "Password not correct"; netmsg.conn.Send(Networking_msgType_Sr.JoinToRoom, error); } } if (room.maxPlayerNumber == room.playerNumber) { connect = false; Message_Sr.PlayerJoinToRoom_Sr error = new Message_Sr.PlayerJoinToRoom_Sr(); error.errorMsg = "Room have maximum players number"; netmsg.conn.Send(Networking_msgType_Sr.JoinToRoom, error); } if (connect) { SendRoomInstantiate(room.roomID, join.sessionID); PlayerLoad(netmsg.conn, player, join.roomID); Networking_PlayerListSend.OnPlayerList(netmsg.conn, join.roomID); Networking_PlayerListSend.SendItems(netmsg.conn, join.sessionID); } } } } } else { Disconnect(netmsg.conn.connectionId); } } }
public Data_PlayerFile_Sr GetPlayerData(int index) { Data_PlayerFile_Sr d = null; if (index >= 0 && playersData.Count > index) { if (playersData[index] != null) { d = playersData[index].playerData; } } return(d); }
public static void HandlerReady(NetworkMessage netmsg) { Message_Sr.PlayerSetReady ready = netmsg.ReadMessage <Message_Sr.PlayerSetReady>(); if (Networking_OnConnect.AccountVerefication(ready.id, ready.log, ready.pass)) { Data_PlayerFile_Sr data = GetPlayerData(ready.id); if (data) { data.PlayerReady = true; data.SetHP(data.HPMax); } } }
//Check player data, if data confirm, send player data and return true static public Data_PlayerFile_Sr CheckLP(string login, string password, string nick) { Data_PlayerFile_Sr check = null; Linq.CommandText = "SELECT id, AccountName, PasswordAc FROM accountlist WHERE AccountName='" + login + "' AND PasswordAc='" + password + "'"; MySqlDataReader Reader = Linq.ExecuteReader(); try { Reader.Read(); AcId = Reader.GetString(0); Reader.Close(); Linq.CommandText = "SELECT PlayerName, scene_ID, MaxHP, PlayerScores, x, y, z, zombie, zombie_mutant, zombie_strong, title, rang FROM charecter WHERE account_id='" + AcId + "' AND PlayerName='" + nick + "'"; MySqlDataReader Reader2 = Linq.ExecuteReader(); try { Reader2.Read(); int i = 0; playername = Reader2.GetString(i++); sceneID = int.Parse(Reader2.GetString(i++)); player = ScriptableObject.CreateInstance <Data_PlayerFile_Sr> (); player.login = login; player.password = password; player.nick = playername; player.sceneID = sceneID; player.HPMax = int.Parse(Reader2.GetString(i++)); player.PlayerScores = int.Parse(Reader2.GetString(i++)); float x = float.Parse(Reader2.GetString(i++)); float y = float.Parse(Reader2.GetString(i++)); float z = float.Parse(Reader2.GetString(i++)); player.zombie = int.Parse(Reader2.GetString(i++)); player.zombieMutant = int.Parse(Reader2.GetString(i++)); player.zombieStrong = int.Parse(Reader2.GetString(i++)); player.title = Reader2.GetString(i++); player.rang = int.Parse(Reader2.GetString(i++)); player.position.Set(x, y, z); Reader2.Close(); check = player; } catch (MySqlException ex) { Debug.Log(ex.ErrorCode + ex.Message); } Reader2.Close(); } catch (MySqlException ex) { Debug.Log(ex.ErrorCode + ex.Message); } Reader.Close(); return(check); }
//Zombie attack done and can move void ZombieAttackDone() { if (target != null) { Player_MovePlayer targ = target.GetComponent <Player_MovePlayer>(); if (targ != null) { Data_PlayerFile_Sr data = RoomsManager.GetPlayerData(targ.index); data.Damage(RoomsManager.GetPlayerData(index).attackPower); if (data.HP <= 0) { targ.Death(); } } } attack = false; }
public static void HandlerCreateRoom(NetworkMessage netmsg) { Message_Sr.PlayerCreateRoom_Sr create = netmsg.ReadMessage <Message_Sr.PlayerCreateRoom_Sr>(); if (Networking_OnConnect.AccountVerefication(create.sessionID, create.Login, create.Password)) { Data_PlayerFile_Sr player = SQL_PlayerVerefy.CheckLP(create.Login, create.Password, create.playerNick); if (player) { AccountData acc = Networking_OnConnect.GetAccountData(create.sessionID); if (acc != null) { if (acc.roomID == -1 && acc.indexInRoom == -1) { if (create.roomName.Length >= 5) { player.sessionID = create.sessionID; int roomID = -1; if (create.pass && !string.IsNullOrEmpty(create.roomPassword) && create.roomPassword.Length >= 4) { roomID = CreateRoom(create.roomName, create.mapID, create.roomPassword); } else if (!create.pass) { roomID = CreateRoom(create.roomName, create.mapID); } if (roomID != -1) { SendRoomInstantiate(roomID, create.sessionID); PlayerLoad(netmsg.conn, player, roomID); Networking_PlayerListSend.OnPlayerList(netmsg.conn, roomID); Networking_PlayerListSend.SendItems(netmsg.conn, create.sessionID); } } } } } else { Disconnect(netmsg.conn.connectionId); } } }
public static Data_PlayerFile_Sr GetPlayerData(int sessionID) { Data_PlayerFile_Sr data = null; AccountData acc = Networking_OnConnect.GetAccountData(sessionID); if (acc != null) { if (acc.roomID != -1 && acc.indexInRoom != -1) { Room room = GetRoom(acc.roomID); if (room) { data = room.GetPlayerData(acc.indexInRoom); } } } return(data); }
public void WritePlayer(int sessionID, Data_PlayerFile_Sr player, GameObject obj) { AccountData acc = Networking_OnConnect.GetAccountData(sessionID); if (acc != null) { PlayerData data = new PlayerData(); data.playerData = player; data.playerObj = obj; data.playerMoveScript = obj.GetComponent <Player_MovePlayer>(); data.sessionID = sessionID; int indexInRoom = -1; if (playerListNULLVALLUE.Count > 0) { indexInRoom = playerListNULLVALLUE[0]; playerListNULLVALLUE.RemoveAt(0); player.sessionID = sessionID; data.playerMoveScript.index = sessionID; playersData[indexInRoom] = data; acc.indexInRoom = indexInRoom; acc.roomID = roomID; } else { indexInRoom = playersData.Count; player.sessionID = sessionID; data.playerMoveScript.index = sessionID; playersData.Add(data); acc.indexInRoom = indexInRoom; acc.roomID = roomID; } playerNumber++; } }
//Add new player on map static void PlayerLoad(NetworkConnection con, Data_PlayerFile_Sr data, int roomID) { Room room = GetRoom(roomID); if (room) { GameObject go = (GameObject)Instantiate((GameObject)Resources.Load("Player"), room.spawnPosition, Quaternion.identity); go.name = data.nick; Player_MovePlayer move = go.GetComponent <Player_MovePlayer>(); move.playerCon = con; PlayerConnectToRoom(roomID, data, go); Message_Sr.NewPlayerOnScene_Sr newPL = new Message_Sr.NewPlayerOnScene_Sr(); newPL.player = GetPlayerData(data.sessionID); SendReliableToRoom(Networking_msgType_Sr.NewPlayerConnnectOnScene, newPL, roomID); Player_Weapon_Sr weap = InstantiateWeapon(weaponType_Sr.GaussGun, roomID); if (weap) { weap.TakeWeapon(move.weapon, data.sessionID); } } }
public void SpawnMob() { spawnPosition = new Vector3(5, transform.position.y, 5); GameObject obj = (GameObject)Resources.Load("Zombie"); Vector3 vect = Vector3.zero; float Hight = Random.Range(0.1f, 0.15f); float Midle = Random.Range(0.15f, 0.25f); float Low = 1 - (Hight + Midle); //check zombie number, if more than maximum players in room if (zombieNumber >= maxPlayerNumber) { zombieNumber = maxPlayerNumber - 2; } if (zombieNumber >= 3) { int zombieLow = Mathf.FloorToInt((float)zombieNumber * Low); int zombieMidle = Mathf.FloorToInt((float)zombieNumber * Midle); int zombieHight = Mathf.FloorToInt((float)zombieNumber * Hight); int sessionID = -1; for (int i = 0; i < zombieLow; i++) { do { vect = new Vector3(Random.Range(0, 100), transform.position.y, Random.Range(0, 100)); }while (vect.x < 20f || vect.z < 20f); GameObject Zombie = (GameObject)Instantiate(obj, vect, Quaternion.AngleAxis(Random.Range(0, 360), Vector3.up)); Data_PlayerFile_Sr data = ScriptableObject.CreateInstance <Data_PlayerFile_Sr>(); data.HPMax = Random.Range(60, 110); data.SetHP(data.HPMax); switch (Random.Range(1, 3)) { case 1: data.nick = "zombie"; break; case 2: data.nick = "sickzombie"; break; case 3: data.nick = "policezombie"; break; } data.PlayerReady = true; data.attackPower = Random.Range(10, 17); Zombie.GetComponent <Player_MovePlayer>().zombie = true; sessionID = Networking_OnConnect.BotAdd(roomID, playersData.Count); WritePlayer(sessionID, data, Zombie); } for (int i = 0; i < zombieMidle; i++) { do { vect = new Vector3(Random.Range(0, 100), transform.position.y, Random.Range(0, 100)); }while (vect.x < 20f || vect.z < 20f); GameObject Zombie = (GameObject)Instantiate(obj, vect, Quaternion.AngleAxis(Random.Range(0, 360), Vector3.up)); Data_PlayerFile_Sr data = ScriptableObject.CreateInstance <Data_PlayerFile_Sr>(); data.HPMax = Random.Range(180, 250); data.SetHP(data.HPMax); data.nick = "mutantzombie"; data.PlayerReady = true; data.attackPower = Random.Range(20, 30); Zombie.GetComponent <Player_MovePlayer>().zombie = true; sessionID = Networking_OnConnect.BotAdd(roomID, playersData.Count); WritePlayer(sessionID, data, Zombie); } for (int i = 0; i < zombieHight; i++) { do { vect = new Vector3(Random.Range(0, 100), transform.position.y, Random.Range(0, 100)); }while (vect.x < 20f || vect.z < 20f); GameObject Zombie = (GameObject)Instantiate(obj, vect, Quaternion.AngleAxis(Random.Range(0, 360), Vector3.up)); Data_PlayerFile_Sr data = ScriptableObject.CreateInstance <Data_PlayerFile_Sr>(); data.HPMax = Random.Range(300, 400); data.SetHP(data.HPMax); data.nick = "strongzombie"; data.PlayerReady = true; data.attackPower = Random.Range(36, 48); Zombie.GetComponent <Player_MovePlayer>().zombie = true; sessionID = Networking_OnConnect.BotAdd(roomID, playersData.Count); WritePlayer(sessionID, data, Zombie); } } }
public static void OnPlayerList(NetworkConnection con, int roomID) { Room room = GetRoom(roomID); if (room) { playersSend = packetPlayer; playersSends = 0; if (room.playersData.Count == 1) { NetworkWriter writer = new NetworkWriter(); writer.StartMessage(Networking_msgType_Sr.PlayerList); writer.Write(playersSends); writer.FinishMessage(); con.SendWriter(writer, 0); } while (!allPlayers) { if (playersSends != room.playerListCount) { lastPlayer = room.playerListCount - playersSends; NetworkWriter writer = new NetworkWriter(); writer.StartMessage(Networking_msgType_Sr.PlayerList); if (lastPlayer < playersSend) { allPlayers = true; playersSend = lastPlayer; writer.Write(playersSend); } else { writer.Write(playersSend); } for (int k = 0; k < playersSend; k++) { Data_PlayerFile_Sr data = room.GetPlayerData(playersSends); if (data) { writer.Write(true); writer.Write(data.sceneID); writer.Write(data.sessionID); writer.Write(data.rang); writer.Write(data.nick); writer.Write(data.title); writer.Write(room.playersData[playersSends].playerObj.transform.position); writer.Write(room.playersData[playersSends].playerObj.transform.rotation); writer.Write(room.playersData[playersSends].playerMoveScript.death); } else { writer.Write(false); } playersSends++; } writer.FinishMessage(); con.SendWriter(writer, 0); } else { allPlayers = true; } } allPlayers = false; } }