Пример #1
0
        void HandleMonsterStateUpdateOnOperation(string json, Command cmd)
        {
            //Bundle bundle = new Bundle();
            GameMonster gm = JsonConvert.DeserializeObject <GameMonster>(json);

            monsterOperator.EnqueueOperator(cmd, gm);
        }
Пример #2
0
    public GameMonster UpdateHp(GameMonster gm, MarsPeer peer)
    {
        GameMonster gameMonster = null;

        this.gameMonsters.TryGetValue(gm.id, out gameMonster);

        if (gameMonster != null)
        {
            gameMonster.hp -= gm.deductHp;
            gameMonster.hp  = Math.Max(gameMonster.hp, 0);

            if (gameMonster.hp <= 0)
            {
                //TODO: when monster die give some reward...
                gameMonster.gameReward          = new GameReward();
                gameMonster.gameReward.exp      = 100;
                gameMonster.gameReward.item     = new Item();
                gameMonster.gameReward.item.id  = "100001";
                gameMonster.gameReward.item.num = 10;

                RoleMySQL.instance.AddExp(peer.roleId, gameMonster.gameReward.exp);
            }
        }
        return(gameMonster);
    }
Пример #3
0
    public void UpdateAttId(GameMonster gm)
    {
        GameMonster gameMonster = null;

        this.gameMonsters.TryGetValue(gm.id, out gameMonster);

        if (gameMonster != null)
        {
            gameMonster.attId -= gm.attId;
        }
    }
Пример #4
0
        public override void ExecuteOperation(Command cmd, params object[] objs)
        {
            base.ExecuteOperation(cmd, objs);

            switch (cmd)
            {
            case Command.MonsterRefresh:
                FightRegion fr = (FightRegion)objs[0];
                HandleMonsterRefresh(fr);
                marsPeer.SendClientResponse(bundle);
                break;

            case Command.MonsterStateUpdate:
                GameMonster gm = (GameMonster)objs[0];
                HandleMonsterStateUpdate(gm);
                marsPeer.SendClientResponse(bundle);
                break;
            }
        }
Пример #5
0
        void HandleMonsterStateUpdate(GameMonster gm)
        {
            GameMonster gameMonster = new GameMonster();

            gameMonster.id = gm.id;
            GameMonster g_gm = marsPeer.fightCache.UpdateHp(gm, marsPeer);

            if (g_gm != null)
            {
                gameMonster.hp = g_gm.hp;
                if (g_gm.gameReward != null)
                {
                    gameMonster.gameReward = g_gm.gameReward;
                }
            }
            bundle.gameMonster = gameMonster;

            if (marsPeer.team != null)
            {
                //bundle.cmd = cmd;
                RoomInstance.instance.BroadcastEvent(marsPeer, bundle, Room.BroadcastType.Region);
            }
        }
Пример #6
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="gm"></param>
    public void UpdateMonsters(string id, Dictionary <string, GameMonster> gameMonsters)
    {
        FightCache fightCache = GetFightCache(id, null);

        foreach (GameMonster gm in gameMonsters.Values)
        {
            if (fightCache != null)
            {
                GameMonster g_gm = fightCache.gameMonsters[gm.id];
                g_gm.x      = gm.x;
                g_gm.z      = gm.z;
                g_gm.xRo    = gm.xRo;
                g_gm.zRo    = gm.zRo;
                g_gm.action = gm.action;
                g_gm.state  = gm.state;
                if (g_gm.state == 1)
                {
                    g_gm.target_x = gm.target_x;
                    g_gm.target_y = gm.target_y;
                    g_gm.target_z = gm.target_z;
                }
            }
        }
    }
Пример #7
0
        private void CharacterFight()
        {
            List <UserCharacter> characters = _db.Characters.ToList();
            List <GameMonster>   monsters   = _db.Monsterses.ToList();
            List <Job>           jobs       = _db.Jobs.ToList();
            Random rnd         = new Random();
            int    monsterType = rnd.Next(monsters.Count);
            int    monsterJob  = rnd.Next(jobs.Count);
            Regex  regex       = new Regex("^[1-" + characters.Count + "].*?");

            for (int i = 0; i < characters.Count; i++)
            {
                _view.PrintNameChoice(i + 1, characters[i].Name);
            }

            while (true)
            {
                string query = _view.InputQuery();
                Match  match = regex.Match(query);

                if (match.Success)
                {
                    UserCharacter fighter = characters[Convert.ToInt32(match.Value) - 1];
                    fighter.Job = jobs.Find(job => job.Id == fighter.JobId);
                    GameMonster enemy = monsters[monsterType];
                    enemy.Job   = jobs[monsterJob];
                    enemy.Level = fighter.Level;
                    enemy.Str  += fighter.Level - 1;
                    enemy.Dex  += fighter.Level - 1;
                    enemy.Con  += fighter.Level - 1;
                    int characterHp  = (fighter.Con + fighter.Job.ExtraCon) * 3;
                    int enemyHp      = (enemy.Con + enemy.Job.ExtraCon) * 3;
                    int characterStr = enemy.Job.DamageBy[fighter];
                    int enemyStr     = fighter.Job.DamageBy[enemy];
                    int attackTurn   = fighter.Dex + fighter.Job.ExtraDex < enemy.Dex + enemy.Job.ExtraDex ? 1 : 0;
                    _view.PrintStartFight(fighter.Name, enemy.Name, enemy.Job.Name, fighter.Dex + fighter.Job.ExtraDex,
                                          enemy.Dex + enemy.Job.ExtraDex);

                    while (characterHp != 0 && enemyHp != 0)
                    {
                        if (attackTurn == 1)
                        {
                            int preAttackHp = characterHp;
                            characterHp = characterHp - enemyStr <= 0 ? 0 : characterHp - enemyStr;
                            _view.PrintFightLive(enemy.Name, fighter.Name, enemyStr, fighter.Job.AntagonisticBy[enemy], preAttackHp,
                                                 characterHp);
                            attackTurn = 0;
                        }
                        else
                        {
                            int preAttackHp = enemyHp;
                            enemyHp = enemyHp - characterStr <= 0 ? 0 : enemyHp - characterStr;
                            _view.PrintFightLive(fighter.Name, enemy.Name, characterStr, enemy.Job.AntagonisticBy[fighter], preAttackHp,
                                                 enemyHp);
                            attackTurn = 1;
                        }
                    }

                    if (characterHp == 0)
                    {
                        _view.PrintFightResult(enemy.Name, fighter.Name);
                        ++fighter.TotalFightTimes;
                        ++fighter.FailFightTimes;
                        _db.Entry(fighter).State = EntityState.Modified;
                        _db.SaveChanges();
                        break;
                    }

                    _view.PrintFightResult(fighter.Name, enemy.Name);
                    ++fighter.TotalFightTimes;

                    if (fighter.Exp < 1000)
                    {
                        fighter.Exp += 100;
                    }

                    if ((fighter.Exp == 100 || fighter.Exp == 300 || fighter.Exp == 600 || fighter.Exp == 1000) &&
                        fighter.Level < 5)
                    {
                        _view.PrintUpgradeNotice();
                        int point = 3;                         //新的三點
                        int str   = fighter.Str;
                        int dex   = fighter.Dex;
                        int con   = fighter.Con;

                        while (point != 0)
                        {
                            _view.PrintUpgradeMenu
                            (
                                str, fighter.Job.ExtraStr == 0 ? "" : " + " + fighter.Job.ExtraStr,
                                dex, fighter.Job.ExtraDex == 0 ? "" : " + " + fighter.Job.ExtraDex,
                                con, fighter.Job.ExtraCon == 0 ? "" : " + " + fighter.Job.ExtraCon, point
                            );
                            string choice = _view.InputQuery();

                            if (choice == "1")
                            {
                                str   += 1;
                                point -= 1;
                            }
                            else if (choice == "2")
                            {
                                dex   += 1;
                                point -= 1;
                            }
                            else if (choice == "3")
                            {
                                con   += 1;
                                point -= 1;
                            }
                            else
                            {
                                _view.PrintErrorInput();
                            }
                        }

                        fighter.Str += str - fighter.Str;
                        fighter.Dex += dex - fighter.Dex;
                        fighter.Con += con - fighter.Con;
                        ++fighter.Level;
                        _db.Entry(fighter).State = EntityState.Modified;
                        _db.SaveChanges();
                        _view.PrintUpgradeResult(fighter.Name, fighter.Level);
                        _view.PrintInformation
                        (
                            fighter.Name, fighter.Job.Name, fighter.Level, fighter.Job.Attribute, fighter.Exp,
                            fighter.Str, fighter.Job.ExtraStr == 0 ? "" : " + " + fighter.Job.ExtraStr,
                            fighter.Dex, fighter.Job.ExtraDex == 0 ? "" : " + " + fighter.Job.ExtraDex,
                            fighter.Con, fighter.Job.ExtraCon == 0 ? "" : " + " + fighter.Job.ExtraCon,
                            fighter.TotalFightTimes, fighter.FailFightTimes
                        );
                        break;
                    }

                    _db.Entry(fighter).State = EntityState.Modified;
                    _db.SaveChanges();
                    break;
                }

                if (query == "0")
                {
                    _view.PrintBackToMain();
                    break;
                }

                _view.PrintErrorInput();
            }
        }
Пример #8
0
 public void Add(GameMonster gameMonster)
 {
     gameMonsters.Add(gameMonster.id, gameMonster);
 }