Exemple #1
0
        public override void processMessage(RawMessage message, User user)
        {
            if (user.player != null && user.player.playerState != Player.PlayerState.DEAD &&        // adam oyunda mi, ölü mü
                user.player.game.gameState == Science_Wars_Server.Game.GameState.PLAYTIME &&        // oyun pause olmamis ya da bitmemis degil mi?
                user.player.board.nextBoard.boardState != Board.BoardState.COLLAPSING)              // onumuzdeki board çöküyor mu?
            {
                int typeId = message.getInt("tid");

                if (typeId < 0 || typeId >= user.unlockedMinions.Length)
                {
                    return;
                }

                if (user.player.availableMinions[typeId] == false)  // bu availableMinions zaten sadece o scienceType a ait minionlara true iceriyor. Bir daha science type kontrolu yapmaya gerek yok
                {
                    return;
                }

                Minion minion = (Minion)Activator.CreateInstance(TypeIdGenerator.getMinionType(typeId), user.player.game, user.player);

                if (user.player.trySpendCash(minion.getCost()))
                {
                    // STATCODE
                    PlayerStats pStats = user.player.game.statTracker.getPlayerStatsOfPlayer(user.player);
                    pStats.minionsSend += 1;

                    user.player.addIncome(minion.getIncome());
                    user.player.board.nextBoard.AddMinion(minion);
                    OutgoingMessages.Game.GCreateMinionResult.sendMessage(user.player.game.players, minion);
                }
            }
        }
        public override void processMessage(RawMessage message, User user)
        {
            if (user.player != null && user.player.playerState != Player.PlayerState.DEAD &&        // adam oyunda mi, ölü mü
                user.player.game.gameState == Science_Wars_Server.Game.GameState.PLAYTIME &&        // oyun pause olmamis ya da bitmemis degil mi?
                user.player.board.nextBoard.boardState != Board.BoardState.COLLAPSING)              // onumuzdeki board çöküyor mu?
            {
                int oldMinionTypeId      = message.getInt("tid");
                int upgradedMinionTypeId = message.getInt("utid");

                if ((oldMinionTypeId < 0 || oldMinionTypeId >= user.player.availableMinions.Length) &&  // verilen typeId'ler mantikli.
                    (upgradedMinionTypeId < 0 || upgradedMinionTypeId >= user.player.availableMinions.Length))
                {
                    return;
                }

                if (user.player.availableMinions[oldMinionTypeId] == false || user.unlockedMinions[upgradedMinionTypeId] == false) // bu minionlar unlocked mi? (dikkat: birinin unlock durumuna bakiyoruz digerinin available durumuna )
                {
                    return;
                }

                if (checkIfMinionUpgradableTo(oldMinionTypeId, TypeIdGenerator.getMinionType(upgradedMinionTypeId)) == false)    // bu minion verilen miniona upgrade edilebilir mi
                {
                    return;
                }

                Minion minion = (Minion)Activator.CreateInstance(TypeIdGenerator.getMinionType(upgradedMinionTypeId), user.player.game, user.player);   // bir instance olusturuyoruz. tek sebebi upgradeCost u ogrenmek. damn...

                if (user.player.trySpendCash(minion.getUpgradeCost()))
                {
                    user.player.availableMinions[oldMinionTypeId]      = false;
                    user.player.availableMinions[upgradedMinionTypeId] = true;
                    OutgoingMessages.Game.GUpgradeMinionResult.sendMessage(user.player, oldMinionTypeId, upgradedMinionTypeId);
                }
            }
        }
Exemple #3
0
        private void setAvailableMinionsOfPlayer()
        {
            Type root = null;

            switch (PlayerMe.self.board.scienceType)
            {
            case ScienceType.PHYS:
                root = typeof(PhysicsMinion);
                break;

            case ScienceType.CHEM:
                root = typeof(ChemistryMinion);
                break;

            case ScienceType.BIO:
                root = typeof(BiologyMinion);
                break;
            }

            PlayerMe.availableMinionTypes = new List <Type>();
            for (int i = 0; i < UserMe.unlockedMinions.Length; i++)
            {
                if (UserMe.unlockedMinions[i])
                {
                    Type       minionType = TypeIdGenerator.getMinionType(i);
                    MinionNode minionNode = TypeIdGenerator.getMinionNodeInsts(minionType);
                    if (UserMe.unlockedMinions[i] && minionNode.parent != null && minionNode.parent.minionType == root)
                    {
                        PlayerMe.availableMinionTypes.Add(minionType);
                    }
                }
            }
        }
Exemple #4
0
        public override void processMessage(RawMessage message)
        {
            int    tid    = message.getInt("tid");
            Minion minion = (Minion)System.Activator.CreateInstance(TypeIdGenerator.getMinionType(tid));

            User user = Assets.Scripts.Engine.Game.getUserById(message.getInt("uid"));

            if (user != null)           // random minionlarda null gelebilir.
            {
                minion.ownerPlayer = user.player;

                if (user.player == PlayerMe.self)
                {
                    PlayerMe.income += minion.getIncome();
                    PlayerMe.cash   -= minion.getCost();
                    Runner.Graphics.updateCashAndIncome();
                }
            }

            minion.instanceId                       = message.getInt("iid");
            minion.position                         = new MinionPosition();
            minion.position.pathPosition            = new PathPosition(0, 0);
            minion.position.board                   = Assets.Scripts.Engine.Game.getBoardById(message.getInt("bid"));
            minion.position.pathPosition.pointIndex = message.getInt("cid");
            minion.position.pathPosition.ratio      = message.getFloat("t");

            minion.position.board.AddMinion(minion);
            Runner.Graphics.createMinion(minion);
        }
        public override void processMessage(RawMessage message)
        {
            Type currentMinionType  = TypeIdGenerator.getMinionType(message.getInt("tid"));
            Type upgradedMinionType = TypeIdGenerator.getMinionType(message.getInt("utid"));


            for (int i = 0; i < PlayerMe.availableMinionTypes.Count; i++)
            {
                if (currentMinionType == PlayerMe.availableMinionTypes[i])
                {
                    PlayerMe.availableMinionTypes[i] = upgradedMinionType;
                    break;
                }
            }
            Runner.Graphics.upgradeMinion(currentMinionType, upgradedMinionType);
        }
Exemple #6
0
        private void checkRandomMinionTime()
        {
            if (currentlySpawning)
            {
                nextRandomMinionTime -= Chronos.deltaTime;

                if (nextRandomMinionTime <= 0)
                {
                    nextRandomMinionTime = RANDOM_MINION_TIME_BETWEEN_EACH_MINION;
                    remainingRandomMinionCount--;

                    // ne tur minionlar spawnlayabilecegine karar vermek lazim. suanda random, kullanicilarin yapmasi mumkun olmayanlar bile cikabiliyor.
                    // mesela frankenscienist dev minion da cikabilir.
                    Type   nextType = TypeIdGenerator.getMinionType(RandomNumberProvider.random.Next(TypeIdGenerator.getMinionTypeCount()));
                    Minion newSpawn;

                    foreach (var player in  players)
                    {
                        if (player.playerState == Player.PlayerState.ALIVE)
                        {
                            newSpawn = (Minion)Activator.CreateInstance(nextType, this, null);
                            player.board.AddMinion(newSpawn);
                            Messages.OutgoingMessages.Game.GCreateMinionResult.sendMessage(players, newSpawn);
                        }
                    }
                    if (remainingRandomMinionCount == 0)
                    {
                        currentlySpawning    = false;
                        nextRandomMinionTime = RANDOM_MINION_TIME_DEFAULT;
                        Messages.OutgoingMessages.Game.GRandomMinionTimeInfo.sendMessage(players);
                    }
                }
            }
            else if (nextRandomMinionTime <= 0)
            {
                remainingRandomMinionCount = RandomNumberProvider.random.Next(3, 4);
                currentlySpawning          = true;
            }
        }