Utiliser cette classe pour creer une nouvelle configuration de spawn.
Esempio n. 1
0
    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);
    }
Esempio n. 2
0
    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);
    }
Esempio n. 3
0
        protected override void ServerPrepareEvent(Triggers triggers)
        {
            triggers.Add(GetTrigger <TriggerTimeInterval>()
                         .Configure(RateWorldEventIntervalPsiGroveInfestation.SharedValueIntervalHours));

            this.SpawnScriptConfig = Api.GetProtoEntity <SpawnEventPsiGroveInfestation>()
                                     .Configure(densityMultiplier: 1.0);
        }
Esempio n. 4
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);
        }
Esempio n. 6
0
    public SpawnConfig GetCurrentSpawnConfig()
    {
        if (CurrentLevel == null)
        {
            return(SpawnConfig.defaultValues());
        }

        return(CurrentLevel.spawnConfig);
    }
Esempio n. 7
0
 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;
 }
Esempio n. 8
0
        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);
        }
Esempio n. 9
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;
                }
            }
        }
    }
Esempio n. 10
0
 private void InitializeCharacterSpawner(SpawnConfig spawnConfig, MonoBehaviour serviceMonoBehaviour)
 {
     _characterSpawner = new CharacterSpawner(spawnConfig, serviceMonoBehaviour);
 }
Esempio n. 11
0
 public SpawnSystem(SpawnConfig config)
 {
     _config = config;
 }
Esempio n. 12
0
        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();
        }
Esempio n. 13
0
    //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);
    }
Esempio n. 14
0
 public void StartSpawning(SpawnConfig config)
 {
     Configure(config);
     StartSpawning();
 }
Esempio n. 15
0
 public void Configure(SpawnConfig config) =>
 Configure(
     config.type, config.limit, config.rate,
     config.delay, config.minDistance, config.maxDistance
     );
Esempio n. 16
0
        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();
           
        }
Esempio n. 17
0
        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;
            }
        }
Esempio n. 18
0
        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;
 }
Esempio n. 20
0
    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);
    }
Esempio n. 21
0
        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();
        }
Esempio n. 22
0
 public CurrentlyExecutingTaskKey(SpawnConfig config, IProtoTrigger trigger, IServerZone zone)
 {
     this.config  = config;
     this.trigger = trigger;
     this.zone    = zone;
 }