private Spawner GetSpawner(SpawnConfig config) { if (limitIfLowRadius && BurnController.GetInstance().burningZone.radius < 10) { return(config.spawners[0]); } var spawnerIndex = Random.Range(0, config.spawners.Length); var spawner = config.spawners[spawnerIndex]; var corner1 = spawner.transform.position + new Vector3(-.5f, .5f, 0); var corner2 = spawner.transform.position + new Vector3(.5f, -.5f, 0); int layerMask = 1 << (int)Layers.PLAYER; var overlapCollider = Physics2D.OverlapArea(corner1, corner2, layerMask); if (overlapCollider != null && overlapCollider.GetComponent <Player>() != null) { if (spawnerIndex > 0) { return(config.spawners[spawnerIndex - 1]); } else if (spawnerIndex < config.spawners.Length) { return(config.spawners[spawnerIndex + 1]); } return(null); } return(spawner); }
public void Configure(SpawnConfig config, EnemyTarget target, Wave wave, PrecalculatedPath path) { // just for reference currentConfig = config; currentWave = wave; color = config.color; spriteRenderer.sprite = sprites.GetSprite(currentConfig.kind); switch (currentConfig.color) { case ColorType.Red: spriteRenderer.color = Color.red; gameObject.layer = LayerMask.NameToLayer("EnemyRed"); break; case ColorType.Green: spriteRenderer.color = Color.green; gameObject.layer = LayerMask.NameToLayer("EnemyGreen"); break; case ColorType.Blue: spriteRenderer.color = Color.blue; gameObject.layer = LayerMask.NameToLayer("EnemyBlue"); break; } health = currentConfig.health; spinner.speed = currentConfig.spinSpeed; pathFollower.speed = currentConfig.walkSpeed; pathFollower.target = target; pathFollower.UpdatePath(path.path, path.calculatedAt); }
protected override void ServerPrepareEvent(Triggers triggers) { triggers.Add(GetTrigger <TriggerTimeInterval>() .Configure(RateWorldEventIntervalPsiGroveInfestation.SharedValueIntervalHours)); this.SpawnScriptConfig = Api.GetProtoEntity <SpawnEventPsiGroveInfestation>() .Configure(densityMultiplier: 1.0); }
// Start is called before the first frame update void Start() { spawnConfig = CreatureFactory.Instance.configSpawn; nbSpecies = spawnConfig.Species.Length; //nbCreaturesPerSpecie = spawnConfig.NbCreaturesPerSpecie; //nbCreatures = nbCreaturesPerSpecie *nbSpecies; Generate(generationSeed, terrainSizeX, terrainSizeY); }
private SpawnOverTime CreateSpawnOverTime(SpawnConfig spawnConfig) { SpawnOverTime sot = new SpawnOverTime(); sot.SetEnv(defaultEnvironment); sot.SetHeroAndMonsterConfig(heroAndMonsterConfig); sot.SetCookies(spawnConfig.CookiesList()); return(sot); }
public SpawnConfig GetCurrentSpawnConfig() { if (CurrentLevel == null) { return(SpawnConfig.defaultValues()); } return(CurrentLevel.spawnConfig); }
public CharacterSpawner(SpawnConfig spawnConfig, MonoBehaviour serviceMonoBehaviour) { _spawnPosition = spawnConfig.SpawnPosition; _spawnFrequency = spawnConfig.SpawnFrequency; ObjectPool.Instance.FillPool(spawnConfig.Pools); _serviceMonoBehaviour = serviceMonoBehaviour; _keys = new string[ObjectPool.Instance.poolDictionary.Count]; ObjectPool.Instance.poolDictionary.Keys.CopyTo(_keys, 0); _charactersParent = new GameObject("SpawnedCharacters").transform; _charactersParent.position = Vector3.zero; }
protected override void ServerPrepareEvent(Triggers triggers) { triggers // trigger on time interval .Add(GetTrigger <TriggerTimeInterval>() .Configure( this.ServerGetIntervalForThisEvent(defaultInterval: (from: TimeSpan.FromHours(4), to: TimeSpan.FromHours(6))) )); this.SpawnScriptConfig = Api.GetProtoEntity <SpawnEventPsiGroveInfestation>() .Configure(densityMultiplier: 1.0); }
void UpdateSpawnedObjects(SpawnConfig config) { var pos_x = Player.transform.position.x - Player.transform.position.x % config.Density; var pos_y = Player.transform.position.y - Player.transform.position.y % config.Density; float range = 0; while (range < UpdateRange) { range += config.Density; } for (float x = pos_x - range; x < pos_x + range; x += config.Density) { for (float y = pos_y - range; y < pos_y + range && y < config.MaxY; y += config.Density) { Vector2 pos = new Vector2(x, y); if (config.Instances.ContainsKey(pos)) { continue; } var threshold = config.StartThreshold + Mathf.Abs(pos_y) * config.ThresholdModifier; if (Random.Range(0f, 1f) > threshold) { config.Instances[pos] = null; } else { var inst = Instantiate(config.Prefabs[Random.Range(0, config.Prefabs.Count)]); inst.transform.position = pos + new Vector2(Random.Range(-config.PositionVariance, config.PositionVariance), Random.Range(-config.PositionVariance, config.PositionVariance)); inst.transform.localScale *= Random.Range(config.ScaleMin, config.ScaleMax); config.Instances[pos] = inst; } } } }
private void InitializeCharacterSpawner(SpawnConfig spawnConfig, MonoBehaviour serviceMonoBehaviour) { _characterSpawner = new CharacterSpawner(spawnConfig, serviceMonoBehaviour); }
public SpawnSystem(SpawnConfig config) { _config = config; }
public AutoHost(MetaDataCache cache, AhConfig config, int hostingPort, SpawnConfig spawn) { this.config = config; Commands = new CommandList(config); this.cache = cache; SpawnConfig = spawn; this.hostingPort = hostingPort; string version = config.SpringVersion ?? Program.main.Config.SpringVersion ?? tas.ServerSpringVersion; // tas empty at this point! Possible null exception springPaths = new SpringPaths(Program.main.paths.GetEngineFolderByVersion(version), writableFolderOverride: Program.main.Config.DataDir); Program.main.paths.SpringVersionChanged += (s, e) => { if (!String.IsNullOrEmpty(requestedEngineChange) && requestedEngineChange == Program.main.paths.SpringVersion) { config.SpringVersion = requestedEngineChange; springPaths.SetEnginePath(Program.main.paths.GetEngineFolderByVersion(requestedEngineChange)); requestedEngineChange = null; tas.Say(TasClient.SayPlace.Battle, "", "rehosting to engine version " + springPaths.SpringVersion, true); ComRehost(TasSayEventArgs.Default, new string[] { }); } }; spring = new Spring(springPaths) { UseDedicatedServer = true }; bool isManaged = SpawnConfig == null && config.Mode != AutohostMode.None; tas = new TasClient(null, MainConfig.SpringieVersion, isManaged ? GlobalConst.ZkSpringieManagedCpu : GlobalConst.ZkLobbyUserCpu, false, Program.main.Config.IpOverride); pollTimer = new Timer(PollTimeout * 1000); pollTimer.Enabled = false; pollTimer.AutoReset = false; pollTimer.Elapsed += pollTimer_Elapsed; spring.SpringExited += spring_SpringExited; spring.GameOver += spring_GameOver; spring.SpringExited += spring_SpringExited; spring.SpringStarted += spring_SpringStarted; spring.PlayerSaid += spring_PlayerSaid; spring.BattleStarted += spring_BattleStarted; tas.BattleUserLeft += tas_BattleUserLeft; tas.UserStatusChanged += tas_UserStatusChanged; tas.BattleUserStatusChanged += TasOnBattleUserStatusChanged; tas.BattleUserJoined += tas_BattleUserJoined; tas.MyBattleMapChanged += tas_MyBattleMapChanged; tas.BattleLockChanged += tas_BattleLockChanged; tas.BattleOpened += tas_BattleOpened; tas.UserAdded += (o, u) => { if (u.Data.Name == GetAccountName()) { Start(null, null); } }; tas.RegistrationDenied += (s, e) => { ErrorHandling.HandleException(null, "Registration denied: " + e.ServerParams[0]); CloneNumber++; tas.Login(GetAccountName(), config.Password); }; tas.RegistrationAccepted += (s, e) => tas.Login(GetAccountName(), config.Password); tas.AgreementRecieved += (s, e) => { tas.AcceptAgreement(); PlasmaShared.Utils.SafeThread(() => { Thread.Sleep(7000); tas.Login(GetAccountName(), config.Password); }).Start(); }; tas.ConnectionLost += tas_ConnectionLost; tas.Connected += tas_Connected; tas.LoginDenied += tas_LoginDenied; tas.LoginAccepted += tas_LoginAccepted; tas.Said += tas_Said; tas.MyBattleStarted += tas_MyStatusChangedToInGame; linkProvider = new ResourceLinkProvider(this); tas.Connect(Program.main.Config.ServerHost, Program.main.Config.ServerPort); Program.main.Downloader.PackagesChanged += Downloader_PackagesChanged; timer = new Timer(15000); timer.Elapsed += (s, e) => { try { timer.Stop(); timerTick++; // auto update engine branch if (!String.IsNullOrEmpty(config.AutoUpdateSpringBranch) && timerTick % 4 == 0) { CheckEngineBranch(); } // auto verify pw map if (!spring.IsRunning && config.Mode != AutohostMode.None) { if (SpawnConfig == null && config.Mode == AutohostMode.Planetwars) { ServerVerifyMap(false); } } // auto start split vote if (!spring.IsRunning && config.SplitBiggerThan != null && tas.MyBattle != null && config.SplitBiggerThan < tas.MyBattle.NonSpectatorCount) { if (DateTime.Now.Subtract(spring.GameExited).TotalSeconds >= GameExitSplitDelay) { ComSplitPlayers(TasSayEventArgs.Default, new string[] {}); } /* * int cnt = tas.MyBattle.NonSpectatorCount; * if (cnt > lastSplitPlayersCountCalled && cnt%2 == 0) { * StartVote(new VoteSplitPlayers(tas, spring, this), TasSayEventArgs.Default, new string[] { }); * lastSplitPlayersCountCalled = cnt; * }*/ } // auto rehost to latest mod version if (!string.IsNullOrEmpty(config.AutoUpdateRapidTag) && SpawnConfig == null) { UpdateRapidMod(config.AutoUpdateRapidTag); } if (lockedUntil != DateTime.MinValue && lockedUntil < DateTime.Now) { ComUnlock(TasSayEventArgs.Default, new string[] {}); } } catch (Exception ex) { Trace.TraceError(ex.ToString()); } finally { timer.Start(); } }; timer.Start(); }
//public GUISkin guiSkin; // Use this for initialization IEnumerator Start() { yield return(0); spawnSpeed = 2 - waveNum * 0.1f; timeBetweenWaves = 1.0f; gameScene = GameApp.GetInstance().GetGameScene(); GameApp.GetInstance().GetGameScene().ArenaTrigger = this; doors = GameObject.FindGameObjectsWithTag("Door"); doorCount = doors.Length; waveStartTime = Time.time; player = GameApp.GetInstance().GetGameScene().GetPlayer(); paramXML = new GameParametersXML(); if (Application.isEditor || Application.platform == RuntimePlatform.IPhonePlayer) { spawnConfigInfo = paramXML.Load(null, GameApp.GetInstance().GetGameState().LevelNum); } else { spawnConfigInfo = paramXML.Load("/", GameApp.GetInstance().GetGameState().LevelNum); } int limit = GameApp.GetInstance().GetGameConfig().globalConf.enemyLimit; waveNum = 0; int startWaveNum = GameApp.GetInstance().GetGameState().LevelNum; int roundNum = 0; gameScene.ArenaTrigger = this; Debug.Log("wave num:" + spawnConfigInfo.Waves.Count); foreach (Wave wave in spawnConfigInfo.Waves) { int enemyLeft = GameApp.GetInstance().GetGameScene().GetEnemies().Count; while (enemyLeft > 0 && Time.time - waveStartTime < Constant.MAX_WAVE_TIME) { yield return(0); enemyLeft = GameApp.GetInstance().GetGameScene().GetEnemies().Count; } waveNum++; waveStartTime = Time.time; gameScene.CalculateDifficultyFactor(GameApp.GetInstance().GetGameState().LevelNum); Debug.Log("Wave " + waveNum); GameApp.GetInstance().GetGameScene().BonusWeapon = null; GameApp.GetInstance().DebugInfo = ""; //GameApp.GetInstance().GetGameScene().RefreshWoodBoxes(); yield return(new WaitForSeconds(wave.intermission)); foreach (Round round in wave.Rounds) { roundNum++; Debug.Log("Round " + roundNum); yield return(new WaitForSeconds(round.intermission)); foreach (EnemyInfo enemyInfo in round.EnemyInfos) { EnemyType enemyType = enemyInfo.EType; //Debug.Log("Spawn " + enemyInfo.Count + " " + enemyType + " from " + enemyInfo.From); int spawnNum = enemyInfo.Count; SpawnFromType from = enemyInfo.From; GameObject enemyPrefab = null;// GameApp.GetInstance().GetResourceConfig().enemy[(int)enemyType]; Transform grave = null; if (from == SpawnFromType.Grave) { grave = CalculateGravePosition(player.GetTransform()); } for (int i = 0; i < spawnNum; i++) { bool bElite = false; bElite = EliteSpawn(enemyType, spawnNum, i); if (bElite) { enemyPrefab = GameApp.GetInstance().GetResourceConfig().enemy_elite[(int)enemyType]; } else { enemyPrefab = GameApp.GetInstance().GetResourceConfig().enemy[(int)enemyType]; } enemyLeft = GameApp.GetInstance().GetGameScene().GetEnemies().Count; while (enemyLeft >= limit) { yield return(0); enemyLeft = GameApp.GetInstance().GetGameScene().GetEnemies().Count; } Vector3 spawnPosition = Vector3.zero; if (from == SpawnFromType.Door) { spawnPosition = doors[currentDoorIndex].transform.position; currentDoorIndex++; if (currentDoorIndex == doorCount) { currentDoorIndex = 0; } } else if (from == SpawnFromType.Grave) { float rndX = Random.Range(-grave.localScale.x / 2, grave.localScale.x / 2); float rndZ = Random.Range(-grave.localScale.z / 2, grave.localScale.z / 2); spawnPosition = grave.position + new Vector3(rndX, 0f, rndZ); GameObject.Instantiate(GameApp.GetInstance().GetResourceConfig().graveRock, spawnPosition + Vector3.down * 0.3f, Quaternion.identity); } GameObject currentEnemy = null; if (bElite) { currentEnemy = (GameObject)Instantiate(enemyPrefab, spawnPosition, Quaternion.Euler(0, 0, 0)); } else { currentEnemy = gameScene.GetEnemyPool(enemyType).CreateObject(spawnPosition, Quaternion.Euler(0, 0, 0)); currentEnemy.layer = PhysicsLayer.ENEMY; } int enemyID = GameApp.GetInstance().GetGameScene().GetNextEnemyID(); currentEnemy.name = ConstData.ENEMY_NAME + enemyID.ToString(); Enemy enemy = null; switch ((int)enemyType) { case 0: enemy = new Zombie(); break; case 1: enemy = new Nurse(); break; case 2: enemy = new Tank(); currentEnemy.transform.Translate(Vector3.up * 2); break; case 3: enemy = new Hunter(); break; case 4: enemy = new Boomer(); break; case 5: enemy = new Swat(); break; } enemy.IsElite = bElite; enemy.Init(currentEnemy); enemy.EnemyType = enemyType; //enemy.Spawn = this; enemy.Name = currentEnemy.name; if (from == SpawnFromType.Grave) { enemy.SetInGrave(true); } GameApp.GetInstance().GetGameScene().GetEnemies().Add(currentEnemy.name, enemy); yield return(new WaitForSeconds(0.3f)); } } } } int enemyCount = GameApp.GetInstance().GetGameScene().GetEnemies().Count; while (enemyCount > 0) { enemyCount = GameApp.GetInstance().GetGameScene().GetEnemies().Count; yield return(0); } //Scene Ends GameApp.GetInstance().GetGameScene().PlayingState = PlayingState.GameWin; List <Weapon> weaponList = GameApp.GetInstance().GetGameState().GetWeapons(); GameConfig gConfig = GameApp.GetInstance().GetGameConfig(); WeaponConfig wConf = gConfig.GetUnLockWeapon(GameApp.GetInstance().GetGameState().LevelNum); if (wConf != null) { foreach (Weapon w in weaponList) { //No duplicated weapons if (w.Name == wConf.name) { if (w.Exist == WeaponExistState.Locked) { w.Exist = WeaponExistState.Unlocked; GameApp.GetInstance().GetGameScene().BonusWeapon = w; break; } } } } else { GameApp.GetInstance().GetGameScene().BonusWeapon = null; } GameApp.GetInstance().GetGameState().Achievement.CheckAchievemnet_Survivior(GameApp.GetInstance().GetGameState().LevelNum); GameApp.GetInstance().GetGameState().Achievement.CheckAchievemnet_LastSurvivior(GameApp.GetInstance().GetGameState().LevelNum); GameApp.GetInstance().GetGameState().Achievement.SubmitScore(GameApp.GetInstance().GetGameState().LevelNum); GameApp.GetInstance().GetGameState().LevelNum++; /* * AvatarType aType = (AvatarType)Mathf.Clamp((GameApp.GetInstance().GetGameState().LevelNum - 1)/5, 0, GameApp.GetInstance().GetGameState().GetAvatarNum() - 1); * * if (GameApp.GetInstance().GetGameState().GetAvatarData(aType) == AvatarState.NotAvaliable) * { * GameApp.GetInstance().GetGameState().EnableAvatar(aType); * } */ //GameApp.GetInstance().GetGameState().AddScore(1000); GameApp.GetInstance().Save(); yield return(new WaitForSeconds(4.0f)); if (gameScene.BonusWeapon != null) { GameUIScript.GetGameUIScript().ClearLevelInfo(); GameUIScript.GetGameUIScript().GetPanel(GameUIName.NEW_ITEM).Show(); yield return(new WaitForSeconds(4.0f)); } FadeAnimationScript.GetInstance().StartFade(new Color(0, 0, 0, 0.0f), new Color(0, 0, 0, 1), 1.0f); yield return(new WaitForSeconds(1.5f)); UIResourceMgr.GetInstance().UnloadAllUIMaterials(); Application.LoadLevel(SceneName.MAP); }
public void StartSpawning(SpawnConfig config) { Configure(config); StartSpawning(); }
public void Configure(SpawnConfig config) => Configure( config.type, config.limit, config.rate, config.delay, config.minDistance, config.maxDistance );
public AutoHost(MetaDataCache cache, AhConfig config, int hostingPort, SpawnConfig spawn) { this.config = config; Commands = new CommandList(config); this.cache = cache; SpawnConfig = spawn; this.hostingPort = hostingPort; string version = config.SpringVersion ?? Program.main.Config.SpringVersion ?? GlobalConst.DefaultEngineOverride; springPaths = new SpringPaths(Program.main.paths.GetEngineFolderByVersion(version), Program.main.Config.DataDir); springPaths.SpringVersionChanged += (s, e) => { if (!String.IsNullOrEmpty(requestedEngineChange) && requestedEngineChange == springPaths.SpringVersion) { config.SpringVersion = requestedEngineChange; springPaths.SetEnginePath(Program.main.paths.GetEngineFolderByVersion(requestedEngineChange)); requestedEngineChange = null; tas.Say(SayPlace.Battle, "", "rehosting to engine version " + springPaths.SpringVersion, true); ComRehost(TasSayEventArgs.Default, new string[] { }); } }; spring = new Spring(springPaths) { UseDedicatedServer = true }; bool isManaged = SpawnConfig == null && config.Mode != AutohostMode.None; tas = new TasClient(MainConfig.SpringieVersion, isManaged ? Login.ClientTypes.SpringieManaged : Login.ClientTypes.Springie, Program.main.Config.IpOverride); pollTimer = new Timer(PollTimeout*1000); pollTimer.Enabled = false; pollTimer.AutoReset = false; pollTimer.Elapsed += pollTimer_Elapsed; spring.SpringExited += spring_SpringExited; spring.GameOver += spring_GameOver; spring.SpringExited += spring_SpringExited; spring.SpringStarted += spring_SpringStarted; spring.PlayerSaid += spring_PlayerSaid; spring.BattleStarted += spring_BattleStarted; tas.BattleUserLeft += tas_BattleUserLeft; tas.UserStatusChanged += tas_UserStatusChanged; tas.BattleUserJoined += tas_BattleUserJoined; tas.MyBattleMapChanged += tas_MyBattleMapChanged; tas.BattleOpened += tas_BattleOpened; tas.UserAdded += (o, u) => { if (u.Name == GetAccountName()) OpenBattleRoom(null, null); }; tas.RegistrationDenied += (s, e) => { Trace.TraceWarning("Registration denied: {0} {1}", e.ResultCode.Description(), e.Reason); CloneNumber++; tas.Login(GetAccountName(), config.Password); }; tas.RegistrationAccepted += (s, e) => tas.Login(GetAccountName(), config.Password); tas.ConnectionLost += tas_ConnectionLost; tas.Connected += tas_Connected; tas.LoginDenied += tas_LoginDenied; tas.LoginAccepted += tas_LoginAccepted; tas.Said += tas_Said; tas.MyBattleStarted += tas_MyStatusChangedToInGame; linkSpringieClient = new ResourceLinkSpringieClient(this); // queue autohost if (config != null && config.MinToJuggle != null && SpawnConfig == null) { queue = new MatchMakerQueue(this); } Program.main.Downloader.PackagesChanged += Downloader_PackagesChanged; timer = new Timer(15000); timer.Elapsed += (s, e) => { try { timer.Stop(); timerTick++; // auto update engine branch if (!String.IsNullOrEmpty(config.AutoUpdateSpringBranch) && timerTick%4 == 0) CheckEngineBranch(); // auto verify pw map if (!spring.IsRunning && config.Mode != AutohostMode.None) if (SpawnConfig == null && config.Mode == AutohostMode.Planetwars) ServerVerifyMap(false); // auto start split vote if (!spring.IsRunning && config.SplitBiggerThan != null && tas.MyBattle != null && config.SplitBiggerThan < tas.MyBattle.NonSpectatorCount) { if (DateTime.Now.Subtract(spring.GameExited).TotalSeconds >= GameExitSplitDelay) ComSplitPlayers(TasSayEventArgs.Default, new string[]{}); /* int cnt = tas.MyBattle.NonSpectatorCount; if (cnt > lastSplitPlayersCountCalled && cnt%2 == 0) { StartVote(new VoteSplitPlayers(tas, spring, this), TasSayEventArgs.Default, new string[] { }); lastSplitPlayersCountCalled = cnt; }*/ } // auto rehost to latest mod version if (!string.IsNullOrEmpty(config.AutoUpdateRapidTag) && SpawnConfig == null) UpdateRapidMod(config.AutoUpdateRapidTag); } catch (Exception ex) { Trace.TraceError(ex.ToString()); } finally { timer.Start(); } }; timer.Start(); }
public void RunCommand(TasSayEventArgs e, string com, string[] words) { switch (com) { case "listmaps": ComListMaps(e, words); break; case "listmods": ComListMods(e, words); break; case "help": ComHelp(e, words); break; case "map": ComMap(e, words); break; case "start": if (tas.MyBattle != null) { int cnt = tas.MyBattle.NonSpectatorCount; if (cnt == 1) ComStart(e, words); else StartVote(new VoteStart(tas, spring, this), e, words); } break; case "forcestart": ComForceStart(e, words); break; case "force": ComForce(e, words); break; case "split": ComSplit(e, words); break; case "corners": ComCorners(e, words); break; case "maplink": linkSpringieClient.FindLinks(words, ResourceLinkSpringieClient.FileType.Map, tas, e); break; case "modlink": linkSpringieClient.FindLinks(words, ResourceLinkSpringieClient.FileType.Mod, tas, e); break; case "ring": ComRing(e, words); break; case "kick": ComKick(e, words); break; case "exit": ComExit(e, words); break; case "vote": RegisterVote(e, words.Length < 1 || words[0] != "2"); break; case "y": RegisterVote(e, true); break; case "n": RegisterVote(e, false); break; case "votemap": StartVote(new VoteMap(tas, spring, this), e, words); break; case "votekick": StartVote(new VoteKick(tas, spring, this), e, words); break; case "votespec": StartVote(new VoteSpec(tas, spring, this), e, words); break; case "voteresign": StartVote(new VoteResign(tas, spring, this), e, words); break; case "voteforcestart": StartVote(new VoteForceStart(tas, spring, this), e, words); break; case "voteforce": StartVote(new VoteForce(tas, spring, this), e, words); break; case "voteexit": StartVote(new VoteExit(tas, spring, this), e, words); break; case "voteresetoptions": StartVote(new VoteResetOptions(tas, spring, this), e, words); break; case "predict": ComPredict(e, words); break; case "rehost": ComRehost(e, words); break; case "random": ComRandom(e, words); break; case "balance": ComBalance(e, words); break; case "say": ComSay(e, words); break; case "team": ComAlly(e, words); break; case "resetoptions": ComResetOptions(e, words); break; case "helpall": ComHelpAll(e, words); break; case "springie": ComSpringie(e, words); break; case "endvote": StopVote(); SayBattle("poll cancelled"); break; case "addbox": ComAddBox(e, words); break; case "clearbox": ComClearBox(e, words); break; case "cbalance": ComCBalance(e, words); break; case "notify": ComNotify(e, words); break; case "boss": ComBoss(e, words); break; case "setpassword": ComSetPassword(e, words); break; case "setgametitle": ComSetGameTitle(e, words); break; case "setmaxplayers": ComSetMaxPlayers(e, words); break; case "spec": ComForceSpectator(e, words); break; case "specafk": ComForceSpectatorAfk(e, words); break; case "saveboxes": ComSaveBoxes(e, words); break; case "cheats": if (spring.IsRunning) { spring.SayGame("/cheat"); SayBattle("Cheats!"); } else Respond(e, "Cannot set cheats, game not running"); break; case "hostsay": if (spring.IsRunning) spring.SayGame(Utils.Glue(words)); else Respond(e, "Game not running"); break; case "listoptions": ComListOptions(e, words); break; case "setoptions": ComSetOption(e, words); break; case "votesetoptions": StartVote(new VoteSetOptions(tas, spring, this), e, words); break; case "splitplayers": ComSplitPlayers(e, words); break; case "votesplitplayers": StartVote(new VoteSplitPlayers(tas, spring, this), e, words); break; case "setengine": ComSetEngine(e, words); break; case "transmit": ComTransmit(e, words); break; case "move": ComMove(e, words); break; case "votemove": StartVote(new VoteMove(tas, spring, this), e, words); break; case "adduser": ComAddUser(e,words); break; case "spawn": { string args = Utils.Glue(words); if (String.IsNullOrEmpty(args)) { Respond(e, "Please specify parameters"); return; } var configKeys = new Dictionary<string, string>(); foreach (string f in args.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { string[] parts = f.Split('='); if (parts.Length == 2) configKeys[parts[0].Trim()] = parts[1].Trim(); } var sc = new SpawnConfig(e.UserName, configKeys); if (String.IsNullOrEmpty(sc.Mod)) { Respond(e, "Please specify at least mod name: !spawn mod=zk:stable"); return; } Program.main.SpawnAutoHost(config, sc).Start(); } break; } }
public void RunCommand(TasSayEventArgs e, string com, string[] words) { switch (com) { case "listmaps": ComListMaps(e, words); break; case "listmods": ComListMods(e, words); break; case "help": ComHelp(e, words); break; case "map": ComMap(e, words); break; case "start": if (tas.MyBattle != null) { int cnt = tas.MyBattle.NonSpectatorCount; if (cnt == 1) { ComStart(e, words); } else { StartVote(new VoteStart(tas, spring, this), e, words); } } break; case "forcestart": ComForceStart(e, words); break; case "force": ComForce(e, words); break; case "split": ComSplit(e, words); break; case "corners": ComCorners(e, words); break; case "maplink": linkSpringieClient.FindLinks(words, ResourceLinkSpringieClient.FileType.Map, tas, e); break; case "modlink": linkSpringieClient.FindLinks(words, ResourceLinkSpringieClient.FileType.Mod, tas, e); break; case "ring": ComRing(e, words); break; case "kick": ComKick(e, words); break; case "exit": ComExit(e, words); break; case "vote": RegisterVote(e, words.Length < 1 || words[0] != "2"); break; case "y": RegisterVote(e, true); break; case "n": RegisterVote(e, false); break; case "votemap": StartVote(new VoteMap(tas, spring, this), e, words); break; case "votekick": StartVote(new VoteKick(tas, spring, this), e, words); break; case "votespec": StartVote(new VoteSpec(tas, spring, this), e, words); break; case "voteresign": StartVote(new VoteResign(tas, spring, this), e, words); break; case "voteforcestart": StartVote(new VoteForceStart(tas, spring, this), e, words); break; case "voteforce": StartVote(new VoteForce(tas, spring, this), e, words); break; case "voteexit": StartVote(new VoteExit(tas, spring, this), e, words); break; case "voteresetoptions": StartVote(new VoteResetOptions(tas, spring, this), e, words); break; case "predict": ComPredict(e, words); break; case "rehost": ComRehost(e, words); break; case "random": ComRandom(e, words); break; case "balance": ComBalance(e, words); break; case "say": ComSay(e, words); break; case "team": ComAlly(e, words); break; case "resetoptions": ComResetOptions(e, words); break; case "helpall": ComHelpAll(e, words); break; case "springie": ComSpringie(e, words); break; case "endvote": StopVote(); SayBattle("poll cancelled"); break; case "addbox": ComAddBox(e, words); break; case "clearbox": ComClearBox(e, words); break; case "cbalance": ComCBalance(e, words); break; case "notify": ComNotify(e, words); break; case "boss": ComBoss(e, words); break; case "setpassword": ComSetPassword(e, words); break; case "setgametitle": ComSetGameTitle(e, words); break; case "setmaxplayers": ComSetMaxPlayers(e, words); break; case "spec": ComForceSpectator(e, words); break; case "specafk": ComForceSpectatorAfk(e, words); break; case "saveboxes": ComSaveBoxes(e, words); break; case "cheats": if (spring.IsRunning) { spring.SayGame("/cheat"); SayBattle("Cheats!"); } else { Respond(e, "Cannot set cheats, game not running"); } break; case "hostsay": if (spring.IsRunning) { spring.SayGame(Utils.Glue(words)); } else { Respond(e, "Game not running"); } break; case "listoptions": ComListOptions(e, words); break; case "setoptions": ComSetOption(e, words); break; case "votesetoptions": StartVote(new VoteSetOptions(tas, spring, this), e, words); break; case "splitplayers": ComSplitPlayers(e, words); break; case "votesplitplayers": StartVote(new VoteSplitPlayers(tas, spring, this), e, words); break; case "setengine": ComSetEngine(e, words); break; case "transmit": ComTransmit(e, words); break; case "move": ComMove(e, words); break; case "votemove": StartVote(new VoteMove(tas, spring, this), e, words); break; case "adduser": ComAddUser(e, words); break; case "spawn": { string args = Utils.Glue(words); if (String.IsNullOrEmpty(args)) { Respond(e, "Please specify parameters"); return; } var configKeys = new Dictionary <string, string>(); foreach (string f in args.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { string[] parts = f.Split('='); if (parts.Length == 2) { configKeys[parts[0].Trim()] = parts[1].Trim(); } } var sc = new SpawnConfig(e.UserName, configKeys); if (String.IsNullOrEmpty(sc.Mod)) { Respond(e, "Please specify at least mod name: !spawn mod=zk:stable"); return; } Program.main.SpawnAutoHost(config, sc).Start(); } break; } }
public void SetConfiguration(SpawnConfig spawnConfig) { this.spawnConfig = spawnConfig; }
public SpawnConfig Load(string path, int levelNum) { SpawnConfig spawnConfig = new SpawnConfig(); spawnConfig.Waves = new List <Wave>(); XmlReader reader = null; StringReader s = null; Stream stream = null; Debug.Log("Load"); XmlDocument xmlDoc = new XmlDocument(); if (path != null) { Debug.Log("path not null"); path = Application.dataPath + path; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } stream = File.Open(path + "config.xml", FileMode.Open); xmlDoc.Load(stream); //reader = XmlReader.Create(stream); } else { //TextAsset XMLFile = (TextAsset)Resources.Load(path); TextAsset XMLFile = GameApp.GetInstance().GetResourceConfig().configXml; xmlDoc.LoadXml(XMLFile.text); //s = new StringReader(XMLFile.text); //reader = XmlReader.Create(s); } Wave wave = null; Round round = null; XmlNodeList levelList = xmlDoc.SelectNodes("Config/EnemySpawns/Level"); if (levelNum <= levelList.Count) { levelNum = (levelNum - 1); } else { int rnd = Random.Range(levelList.Count - 10, levelList.Count); levelNum = rnd; } Debug.Log("levelNum" + levelNum); XmlNodeList waveList = levelList[levelNum].SelectNodes("Wave"); foreach (XmlNode waveNode in waveList) { wave = new Wave(); wave.Rounds = new List <Round>(); spawnConfig.Waves.Add(wave); wave.intermission = int.Parse(waveNode.Attributes["intermission"].Value); XmlNodeList roundList = waveNode.SelectNodes("Round"); foreach (XmlNode roundNode in roundList) { round = new Round(); round.EnemyInfos = new List <EnemyInfo>(); wave.Rounds.Add(round); round.intermission = int.Parse(roundNode.Attributes["intermission"].Value); XmlNodeList enemyList = roundNode.SelectNodes("Enemy"); foreach (XmlNode enemyNode in enemyList) { EnemyInfo enemyInfo = new EnemyInfo(); round.EnemyInfos.Add(enemyInfo); string eType = enemyNode.Attributes["id"].Value; if (eType == "zombie") { enemyInfo.EType = EnemyType.E_ZOMBIE; } else if (eType == "nurse") { enemyInfo.EType = EnemyType.E_NURSE; } else if (eType == "tank") { enemyInfo.EType = EnemyType.E_TANK; } else if (eType == "hunter") { enemyInfo.EType = EnemyType.E_HUNTER; } else if (eType == "boomer") { enemyInfo.EType = EnemyType.E_BOOMER; } else if (eType == "swat") { enemyInfo.EType = EnemyType.E_SWAT; } enemyInfo.Count = int.Parse(enemyNode.Attributes["count"].Value); string spawnFrom = enemyNode.Attributes["from"].Value; if (spawnFrom == "grave") { enemyInfo.From = SpawnFromType.Grave; } else if (spawnFrom == "door") { enemyInfo.From = SpawnFromType.Door; } } } } /* * * Debug.Log("level num " + levelNum); * int level = 0; * while (reader.Read()) * { * * if (reader.NodeType == XmlNodeType.Element) * { * if (reader.Name == "Level") * { * level++; * if (level == levelNum) * { * break; * } * } * * } * * * * } * Debug.Log("level Num" + level); * bool levelEnd = false; * while (reader.Read() && !levelEnd) * { * Debug.Log(reader.Name); * switch (reader.NodeType) * { * * case XmlNodeType.Element: * * if (reader.Name == "Wave") * { * wave = new Wave(); * wave.Rounds = new List<Round>(); * spawnConfig.Waves.Add(wave); * if (reader.HasAttributes) * { * while (reader.MoveToNextAttribute()) * { * if (reader.Name == "intermission") * { * wave.intermission = int.Parse(reader.Value); * } * } * } * } * else if (reader.Name == "Round") * { * round = new Round(); * round.EnemyInfos = new List<EnemyInfo>(); * wave.Rounds.Add(round); * * if (reader.HasAttributes) * { * while (reader.MoveToNextAttribute()) * { * if (reader.Name == "intermission") * { * round.intermission = int.Parse(reader.Value); * } * } * } * * } * else if (reader.Name == "Enemy") * { * * } * * break; * case XmlNodeType.Text: * Debug.Log("Text " + reader.Value); * break; * * case XmlNodeType.EndElement: * if (reader.Name == "Level") * { * levelEnd = true; * } * break; * } * } * * * if (reader != null) * reader.Close(); * * if (s != null) * { * s.Close(); * } */ if (stream != null) { stream.Close(); } return(spawnConfig); }
public AutoHost(MetaDataCache cache, AhConfig config, int hostingPort, SpawnConfig spawn) { this.config = config; Commands = new CommandList(config); this.cache = cache; SpawnConfig = spawn; this.hostingPort = hostingPort; string version = config.SpringVersion ?? Program.main.Config.SpringVersion ?? GlobalConst.DefaultEngineOverride; springPaths = new SpringPaths(Program.main.paths.GetEngineFolderByVersion(version), Program.main.Config.DataDir); springPaths.SpringVersionChanged += (s, e) => { if (!String.IsNullOrEmpty(requestedEngineChange) && requestedEngineChange == springPaths.SpringVersion) { config.SpringVersion = requestedEngineChange; springPaths.SetEnginePath(Program.main.paths.GetEngineFolderByVersion(requestedEngineChange)); requestedEngineChange = null; tas.Say(SayPlace.Battle, "", "rehosting to engine version " + springPaths.SpringVersion, true); ComRehost(TasSayEventArgs.Default, new string[] { }); } }; spring = new Spring(springPaths) { UseDedicatedServer = true }; bool isManaged = SpawnConfig == null && config.Mode != AutohostMode.None; tas = new TasClient(MainConfig.SpringieVersion, isManaged ? Login.ClientTypes.SpringieManaged : Login.ClientTypes.Springie, Program.main.Config.IpOverride); pollTimer = new Timer(PollTimeout * 1000); pollTimer.Enabled = false; pollTimer.AutoReset = false; pollTimer.Elapsed += pollTimer_Elapsed; spring.SpringExited += spring_SpringExited; spring.GameOver += spring_GameOver; spring.SpringExited += spring_SpringExited; spring.SpringStarted += spring_SpringStarted; spring.PlayerSaid += spring_PlayerSaid; spring.BattleStarted += spring_BattleStarted; tas.BattleUserLeft += tas_BattleUserLeft; tas.UserStatusChanged += tas_UserStatusChanged; tas.BattleUserJoined += tas_BattleUserJoined; tas.MyBattleMapChanged += tas_MyBattleMapChanged; tas.BattleOpened += tas_BattleOpened; tas.UserAdded += (o, u) => { if (u.Name == GetAccountName()) { OpenBattleRoom(null, null); } }; tas.RegistrationDenied += (s, e) => { Trace.TraceWarning("Registration denied: {0} {1}", e.ResultCode.Description(), e.Reason); CloneNumber++; tas.Login(GetAccountName(), config.Password); }; tas.RegistrationAccepted += (s, e) => tas.Login(GetAccountName(), config.Password); tas.ConnectionLost += tas_ConnectionLost; tas.Connected += tas_Connected; tas.LoginDenied += tas_LoginDenied; tas.LoginAccepted += tas_LoginAccepted; tas.Said += tas_Said; tas.MyBattleStarted += tas_MyStatusChangedToInGame; linkSpringieClient = new ResourceLinkSpringieClient(this); // queue autohost if (config != null && config.MinToJuggle != null && SpawnConfig == null) { queue = new MatchMakerQueue(this); } Program.main.Downloader.PackagesChanged += Downloader_PackagesChanged; timer = new Timer(15000); timer.Elapsed += (s, e) => { try { timer.Stop(); timerTick++; // auto update engine branch if (!String.IsNullOrEmpty(config.AutoUpdateSpringBranch) && timerTick % 4 == 0) { CheckEngineBranch(); } // auto verify pw map if (!spring.IsRunning && config.Mode != AutohostMode.None) { if (SpawnConfig == null && config.Mode == AutohostMode.Planetwars) { ServerVerifyMap(false); } } // auto start split vote if (!spring.IsRunning && config.SplitBiggerThan != null && tas.MyBattle != null && config.SplitBiggerThan < tas.MyBattle.NonSpectatorCount) { if (DateTime.Now.Subtract(spring.GameExited).TotalSeconds >= GameExitSplitDelay) { ComSplitPlayers(TasSayEventArgs.Default, new string[] {}); } /* * int cnt = tas.MyBattle.NonSpectatorCount; * if (cnt > lastSplitPlayersCountCalled && cnt%2 == 0) { * StartVote(new VoteSplitPlayers(tas, spring, this), TasSayEventArgs.Default, new string[] { }); * lastSplitPlayersCountCalled = cnt; * }*/ } // auto rehost to latest mod version if (!string.IsNullOrEmpty(config.AutoUpdateRapidTag) && SpawnConfig == null) { UpdateRapidMod(config.AutoUpdateRapidTag); } } catch (Exception ex) { Trace.TraceError(ex.ToString()); } finally { timer.Start(); } }; timer.Start(); }
public CurrentlyExecutingTaskKey(SpawnConfig config, IProtoTrigger trigger, IServerZone zone) { this.config = config; this.trigger = trigger; this.zone = zone; }