private static void OnWeaponPrewarn(object unused) { // Limpiamos el timer weaponTimer.Dispose(); int currentSpawn = 0; weaponCrateList = new List <WeaponCrateModel>(); // Elegimos una localización aleatoria de las existentes Random random = new Random(); int spawnPosition = random.Next(Constants.MAX_WEAPON_SPAWNS); // Añadimos las cajas de armas y munición List <Vector3> weaponSpawns = GetRandomWeaponSpawns(spawnPosition); // Creamos las cajas para las localizaciones dadas foreach (Vector3 spawn in weaponSpawns) { // Obtenemos el contenido int type = currentSpawn % 2; int chance = random.Next(type == 0 ? Constants.MAX_WEAPON_CHANCE : Constants.MAX_AMMO_CHANCE); CrateContentModel crateContent = GetRandomCrateContent(type, chance); // Creamos la caja WeaponCrateModel weaponCrate = new WeaponCrateModel(); weaponCrate.contentItem = crateContent.item; weaponCrate.contentAmount = crateContent.amount; weaponCrate.position = spawn; weaponCrate.carriedEntity = String.Empty; weaponCrate.crateObject = NAPI.Object.CreateObject(481432069, spawn, new Vector3(0.0f, 0.0f, 0.0f), 0); // Añadimos la caja a la lista weaponCrateList.Add(weaponCrate); // Incrementamos el contador currentSpawn++; } // Avisamos del punto a todas las facciones foreach (Client player in NAPI.Pools.GetAllPlayers()) { if (NAPI.Data.HasEntityData(player, EntityData.PLAYER_PLAYING) && NAPI.Data.GetEntityData(player, EntityData.PLAYER_FACTION) > Constants.LAST_STATE_FACTION) { NAPI.Chat.SendChatMessageToPlayer(player, Constants.COLOR_INFO + Messages.INF_WEAPON_SPAWN_ISLAND); } } // Creamos un temporizador para avisar a la policía weaponTimer = new Timer(OnPoliceCalled, null, 240000, Timeout.Infinite); }
public static WeaponCrateModel GetPlayerCarriedWeaponCrate(int playerId) { WeaponCrateModel weaponCrate = null; foreach (WeaponCrateModel weaponCrateModel in weaponCrateList) { if (weaponCrateModel.carriedEntity == Constants.ITEM_ENTITY_PLAYER && weaponCrateModel.carriedIdentifier == playerId) { weaponCrate = weaponCrateModel; break; } } return(weaponCrate); }
public static WeaponCrateModel GetClosestWeaponCrate(Client player, float distance = 1.5f) { WeaponCrateModel weaponCrate = null; foreach (WeaponCrateModel weaponCrateModel in weaponCrateList) { if (player.Position.DistanceTo(weaponCrateModel.position) < distance && weaponCrateModel.carriedEntity == String.Empty) { weaponCrate = weaponCrateModel; break; } } return(weaponCrate); }
private static void OnWeaponPrewarn(object unused) { weaponTimer.Dispose(); int currentSpawn = 0; weaponCrateList = new List <WeaponCrateModel>(); Random random = new Random(); int spawnPosition = random.Next(Constants.MAX_WEAPON_SPAWNS); // Get crates' spawn points List <Vector3> weaponSpawns = GetRandomWeaponSpawns(spawnPosition); NAPI.Task.Run(() => { foreach (Vector3 spawn in weaponSpawns) { // Calculate weapon or ammunition crate int type = currentSpawn % 2; int chance = random.Next(type == 0 ? Constants.MAX_WEAPON_CHANCE : Constants.MAX_AMMO_CHANCE); CrateContentModel crateContent = GetRandomCrateContent(type, chance); // We create the crate WeaponCrateModel weaponCrate = new WeaponCrateModel(); { weaponCrate.contentItem = crateContent.item; weaponCrate.contentAmount = crateContent.amount; weaponCrate.position = spawn; weaponCrate.carriedEntity = string.Empty; weaponCrate.crateObject = NAPI.Object.CreateObject(481432069, spawn, new Vector3(), 0); } weaponCrateList.Add(weaponCrate); currentSpawn++; } }); // Warn all the factions about the place foreach (Client player in NAPI.Pools.GetAllPlayers()) { if (player.GetData(EntityData.PLAYER_PLAYING) != null && player.GetData(EntityData.PLAYER_FACTION) > Constants.LAST_STATE_FACTION) { player.SendChatMessage(Constants.COLOR_INFO + InfoRes.weapon_spawn_island); } } // Timer to warn the police weaponTimer = new Timer(OnPoliceCalled, null, 240000, Timeout.Infinite); }
public static void OnPlayerDisconnected(Client player, DisconnectionType type, string reason) { WeaponCrateModel weaponCrate = GetPlayerCarriedWeaponCrate(player.Value); if (weaponCrate != null) { weaponCrate.position = new Vector3(player.Position.X, player.Position.Y, player.Position.X - 1.0f); weaponCrate.carriedEntity = string.Empty; weaponCrate.carriedIdentifier = 0; // Place the crate on the floor weaponCrate.crateObject.Detach(); weaponCrate.crateObject.Position = weaponCrate.position; } }
public static void OnPlayerDisconnected(Client player, byte type, string reason) { // Obtenemos el id del personaje WeaponCrateModel weaponCrate = GetPlayerCarriedWeaponCrate(player.Value); if (weaponCrate != null) { weaponCrate.position = new Vector3(player.Position.X, player.Position.Y, player.Position.X - 1.0f); weaponCrate.carriedEntity = String.Empty; weaponCrate.carriedIdentifier = 0; // Colocamos el objeto en su posición NAPI.Entity.DetachEntity(weaponCrate.crateObject); NAPI.Entity.SetEntityPosition(weaponCrate.crateObject, weaponCrate.position); } }