public static void Initialize() { ProjectileManager.Initialize(); WeaponManager.Initialize(); m_playerSpawners = BotHelper.GetEmptyPlayerSpawners(); Events.PlayerWeaponAddedActionCallback.Start(OnPlayerPickedupWeapon); Events.PlayerWeaponRemovedActionCallback.Start(OnPlayerDroppedWeapon); Events.PlayerMeleeActionCallback.Start(OnPlayerMeleeAction); Events.PlayerDamageCallback.Start(OnPlayerDamage); Events.PlayerDeathCallback.Start(OnPlayerDeath); Events.ProjectileHitCallback.Start(OnProjectileHit); Events.UpdateCallback.Start(OnUpdate); Events.PlayerKeyInputCallback.Start(OnPlayerKeyInput); Events.UserMessageCallback.Start(Command.OnUserMessage); var settings = Settings.Get(); if (settings.RoundsUntilFactionRotation == 1 || settings.CurrentFaction[BotTeam] == BotFaction.None) { foreach (var team in SharpHelper.EnumToList <PlayerTeam>()) { if (team == PlayerTeam.Independent) { continue; } List <BotFaction> botFactions; if (settings.BotFactions[team].Count > 1) { botFactions = settings.BotFactions[team] .Where((f) => f != settings.CurrentFaction[team]) .ToList(); } else { botFactions = settings.BotFactions[team]; } // TODO: disregard spawning only boss or not when count < 3 if team != BotTeam var faction = BotHelper.RandomFaction(botFactions, settings.BotCount); if (team == BotTeam) { ScriptHelper.PrintMessage("Change faction to " + faction); } CurrentBotFaction[team] = faction; } } else { CurrentBotFaction = settings.CurrentFaction; } BotHelper.Storage.SetItem(BotHelper.StorageKey("CURRENT_FACTION"), CurrentBotFaction.Values.Select(f => f.ToString()).ToArray()); if (settings.FactionRotationEnabled) { var roundTillNextFactionRotation = settings.RoundsUntilFactionRotation == 1 ? settings.FactionRotationInterval : settings.RoundsUntilFactionRotation - 1; BotHelper.Storage.SetItem(BotHelper.StorageKey("ROUNDS_UNTIL_FACTION_ROTATION"), roundTillNextFactionRotation); } var botSpawnCount = Math.Min(settings.BotCount, m_playerSpawners.Count); foreach (var item in CurrentBotFaction) { var team = item.Key; var faction = item.Value; if (faction == BotFaction.None) { continue; } if (team == BotTeam) { SpawnRandomFaction(faction, botSpawnCount, team); } else { SpawnRandomFaction(faction, 0, team); } } var activeUsers = ScriptHelper.GetActiveUsersByAccountID(); foreach (var ps in settings.PlayerSettings) { var pst = PlayerSettings.Parse(ps); if (activeUsers.ContainsKey(pst.AccountID)) { var userID = activeUsers[pst.AccountID].UserIdentifier; var player = Game.GetActiveUser(userID).GetPlayer(); if (pst.BotType != "None") { var botType = SharpHelper.StringToEnum <BotType>(pst.BotType); BotHelper.SetPlayer(player, botType); } foreach (var w in pst.Weapons) { BotHelper.SetWeapon(player, w[0], w[1]); } } } }
public static void SetWeapon(IEnumerable <string> arguments) { if (arguments.Count() == 2) { arguments = arguments.Concat(new string[] { "None" }); } if (arguments.Count() < 3) { ScriptHelper.PrintMessage("--BotExtended setweapon--", ScriptHelper.ERROR_COLOR); ScriptHelper.PrintMessage("Invalid arguments: " + string.Join(" ", arguments), ScriptHelper.WARNING_COLOR); return; } var playerArg = string.Join(" ", arguments.Take(arguments.Count() - 2)); IPlayer player; if (!TryParsePlayer(playerArg, out player)) { ScriptHelper.PrintMessage("--BotExtended setweapon--", ScriptHelper.ERROR_COLOR); ScriptHelper.PrintMessage("There is no player " + playerArg, ScriptHelper.WARNING_COLOR); return; } else { arguments = arguments.Skip(arguments.Count() - 2); } var weaponItemArg = arguments.First(); WeaponItem weaponItem; if (!SharpHelper.TryParseEnum(weaponItemArg, out weaponItem)) { ScriptHelper.PrintMessage("--BotExtended setweapon--", ScriptHelper.ERROR_COLOR); ScriptHelper.PrintMessage("Invalid WeaponItem: " + weaponItemArg, ScriptHelper.WARNING_COLOR); return; } else { weaponItemArg = weaponItem.ToString(); arguments = arguments.Skip(1); } var powerupArg = arguments.First(); var type = Mapper.GetWeaponItemType(weaponItem); if (type == WeaponItemType.Rifle || type == WeaponItemType.Handgun || type == WeaponItemType.Thrown) { RangedWeaponPowerup powerup; if (!SharpHelper.TryParseEnum(powerupArg, out powerup)) { ScriptHelper.PrintMessage("--BotExtended setweapon--", ScriptHelper.ERROR_COLOR); ScriptHelper.PrintMessage("Invalid range powerup: " + powerupArg, ScriptHelper.WARNING_COLOR); return; } else { powerupArg = powerup.ToString(); } } if (type == WeaponItemType.Melee) { MeleeWeaponPowerup powerup; if (!SharpHelper.TryParseEnum(powerupArg, out powerup)) { ScriptHelper.PrintMessage("--BotExtended setweapon--", ScriptHelper.ERROR_COLOR); ScriptHelper.PrintMessage("Invalid melee powerup: " + powerupArg, ScriptHelper.WARNING_COLOR); return; } else { powerupArg = powerup.ToString(); } } if (weaponItemArg == "NONE") { ScriptHelper.PrintMessage("Player " + player.Name + "'s weapon will be reset next round"); } UpdatePlayerSettings(player, (old) => old.Update(type, weaponItemArg, powerupArg)); BotHelper.SetWeapon(player, weaponItemArg, powerupArg); }