void HandleMonsterStateUpdateOnOperation(string json, Command cmd) { //Bundle bundle = new Bundle(); GameMonster gm = JsonConvert.DeserializeObject <GameMonster>(json); monsterOperator.EnqueueOperator(cmd, gm); }
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); }
public void UpdateAttId(GameMonster gm) { GameMonster gameMonster = null; this.gameMonsters.TryGetValue(gm.id, out gameMonster); if (gameMonster != null) { gameMonster.attId -= gm.attId; } }
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; } }
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); } }
/// <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; } } } }
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(); } }
public void Add(GameMonster gameMonster) { gameMonsters.Add(gameMonster.id, gameMonster); }