Exemplo n.º 1
0
 /// <summary>
 ///     Вызывает метод у игрока. Формат должен быть следующим:
 ///     {MethodName}.{arg[0]}.{arg[1]}
 /// </summary>
 private static void CallPlayerMethod(string playerid, string data) {
     Player pl = ServerGame.GetPlayer(playerid);
     string[] args = data.Split('.');
     switch (args[0]) {
         case "attack":
             //TODO: вынести в отдельные методы
             var ent = new MysticProjectile(pl.AttackDamage, Util.GetUniqueId()) {
                 PositionX = pl.PositionX,
                 PositionY = pl.PositionY,
                 Direction =
                     Entity.AngleBetweenPoints(new CCPoint(pl.PositionX, pl.PositionY),
                         new CCPoint(Int32.Parse(args[1]), Int32.Parse(args[2]))),
                 OwnerId = playerid
             };
             ServerGame.ServerScene.GetGameLayer(pl.AccState.Location).AddEntity(ent);
             break;
         case "upgradeHp":
             pl.AccState.Upgrade(AcccountUpgrade.Hp);
             break;
         case "upgradeAttack":
             pl.AccState.Upgrade(AcccountUpgrade.Attack);
             break;
         case "upgradeSpeed":
             pl.AccState.Upgrade(AcccountUpgrade.Speed);
             break;
         case "upgradeClass":
             pl.AccState.Upgrade(AcccountUpgrade.Class);
             break;
         default:
             Log.Print("Not found player method: " + string.Join(" ", args), LogType.Error);
             break;
     }
 }
Exemplo n.º 2
0
        // TODO: сделать в конструкторе

        /** AccState - если создается игрок, ему передается для связывания... (что плохо :( )*/

        public void AddEntity(EntityState es, AccountState accState = null) {
            Entity entity = null;

            /* Получаем название объекта по изображению */
            string textureName = es.TextureName;
            textureName = textureName.Replace("\\", "/").Split('/').Last();

            /** TODO: можно ли вынести куда-нибудь? можно ли обойтись без этого? 
                скорее всего в Resources, через словарь */
            switch (textureName) {
                case Resources.ClassMystic:
                case Resources.ClassReaper:
                case Resources.ClassSniper:
                    entity = new Player(es.Id, textureName, accState);
                    break;
                case Resources.ItemGold:
                    entity = new GoldStack(es.Id);
                    break;
                case Resources.ItemGate:
                    entity = new Gate(es.Id);
                    break;
                case Resources.ItemHealpot:
                    entity = new HealPot(es.Id);
                    break;
                case Resources.ObjectSmith:
                    entity = new Smith(es.Id);
                    break;
                case Resources.ProjectileMystic:
                    entity = new MysticProjectile(es.AttackDamage, es.Id);
                    break;
                case Resources.ProjectileLaser:
                case Resources.ProjectileCardinalPulse:
                case Resources.ProjectileCardinalRocket:
                    entity = new EnemyRangeProjectile(es.AttackDamage, textureName, es.Id);
                    break;
                case Resources.ParticleMeleeSweepAttack:
                    entity = new EnemyMeleeProjectile(es.AttackDamage, textureName, es.Id);
                    break;
                case Resources.ParticleMeleeSweepStart:
                    entity = new EnemyMeleeProjectileStart(es.AttackDamage, textureName, es.Id);
                    break;
                case Resources.EnemyMeleeRobot:
                case Resources.EnemyMagicMelee:
                case Resources.EnemyPirate:
                    entity = new MeleeEnemy(textureName, es.Id);
                    break;
                case Resources.EnemyStinger:
                case Resources.EnemyMagicRange:
                    entity = new RangeEnemy(textureName, es.Id);
                    break;
                case Resources.BossEmperor:
                    entity = new Emperor(es.Id);
                    break;
                case Resources.BossCardinal:
                    entity = new Cardinal(es.Id);
                    break;
                case Resources.BossInteritus:
                    entity = new Interitus(es.Id);
                    break;
                case Resources.BossMossorus:
                    entity = new Mossorus(es.Id);
                    break;
            }

            if (entity != null) {
                EntityState.AppendStateToEntity(entity, es);
                AddEntity(entity);
            }
            else {
                Log.Print("Error! Entity isn't created, New entity will not be added. " + textureName, LogType.Error);
            }
        }