/// <summary> 组装技能效果实体 </summary> /// <param name="item">要解析的字符串</param> /// <returns>FightSkillEffects</returns> private FightSkillEffects BuildSkillEffects(string item) { var array = item.Split('_'); if (array.Length < 5 || array.Length > 6) { return(null); } var skill = new FightSkillEffects(); skill.type = Convert.ToInt32(array[0]); //技能效果类型 skill.target = Convert.ToInt32(array[1]); //技能效果目标 (1=本方 2=敌方) skill.range = Convert.ToInt32(array[2]); //技能效果范围 (1=单体 2=全体) skill.round = Convert.ToInt32(array[3]); //技能效果回合数 skill.values = Convert.ToDouble(array[4]); //技能效果值 if (array.Length == 6) //几率类型效果 { skill.robabilityValues = Convert.ToDouble(array[5]); //技能效果几率 } if (skill.robabilityValues <= 0) { skill.robabilityValues = 100; } return(skill); }
/// <summary> 进入战斗 </summary> /// <param name="userid"></param> /// <param name="npcid">rivalid 包括npc</param> /// <param name="rolelife"></param> private int NpcChallenge(Int64 userid, int npcid, FightType type, ref Int64 rolelife) { var fight = new Share.Fight.Fight().GeFight(userid, npcid, type, rolelife, false, true); new Share.Fight.Fight().Dispose(); if (fight.Result != ResultType.SUCCESS) { return(Convert.ToInt32(fight.Result)); } rolelife = fight.PlayHp; return(fight.Iswin ? (int)FightResultType.WIN : (int)FightResultType.LOSE); }
/// <summary>增加武将气力 </summary> /// <param name="list">受影响的武将集合</param> /// <param name="skill"></param> private void RoleAddAngerCount(IEnumerable <FightRole> list, FightSkillEffects skill) { foreach (var m in list) { #if DEBUG XTrace.WriteLine("{0} {1} {2}", "原本气力 " + m.angerCount, "增加气力 " + skill.values, "剩余气力 " + m.angerCount + skill.values); #endif if (!IsTrue(skill.robabilityValues)) { continue; } m.angerCount = m.angerCount + Convert.ToInt32(skill.values); AddRoleBuff(m, skill.round, (int)FightingSkillType.INCREASES_STRENGTH, skill.values, true); } }
/// <summary>翻将</summary> public ASObject CommandStart(TGGSession session, ASObject data) { #if DEBUG XTrace.WriteLine("{0}:{1}", "TOWER_CHECKPOINT_NPC_REFRESH", "翻将"); #endif var type = Convert.ToInt32(data.FirstOrDefault(m => m.Key == "type").Value); var checkpoint = tg_duplicate_checkpoint.GetEntityByUserId(session.Player.User.id); int result = 0; string npcid; var towerenemys = new List <BaseTowerEnemy>(); if (checkpoint == null) { return(Error((int)ResultType.DATABASE_ERROR)); } result = CheckSite(checkpoint); if (result != (int)ResultType.SUCCESS) { return(Error(result)); } if (!CheckRefreshCount(checkpoint, ref towerenemys)) { return(Error((int)ResultType.TOWER_NPC_ENOUGH)); } result = Procress(checkpoint.user_id, type); if (result != (int)ResultType.SUCCESS) { return(Error(result)); } if (!towerenemys.Any()) { return(Error((int)ResultType.TOWER_NPC_ENOUGH)); } npcid = towerenemys.Count == 1 ? towerenemys[0].id.ToString() : Common.GetInstance().RefreshNpc(towerenemys); if (npcid.Length == 0) { return(Error((int)ResultType.TOWER_NPC_ENOUGH)); } checkpoint.npcids += "_" + npcid; if (!tg_duplicate_checkpoint.UpdateSite(checkpoint)) { return(Error((int)ResultType.DATABASE_ERROR)); } return(new ASObject(Common.GetInstance().BulidData((int)ResultType.SUCCESS, checkpoint, (int)DuplicateEnemyType.FIGHTING, Convert.ToInt32(npcid), session.Player.UserExtend.npc_refresh_count))); }
/// <summary>判断当层怪物是否刷新完</summary> private bool CheckRefreshCount(tg_duplicate_checkpoint checkpoint, ref List <BaseTowerEnemy> towerenemys) { var ids = new List <int>(); var npcs = Variable.BASE_TOWERENEMY.Where(m => m.pass == checkpoint.site).ToList(); if (npcs.Any()) { if (checkpoint.npcids != null) { if (checkpoint.npcids.Contains("_")) { var npcids = checkpoint.npcids.Split('_'); if (npcids.Length == npcs.Count) { return(false); } ids.Add(Convert.ToInt32(npcids[0])); ids.Add(Convert.ToInt32(npcids[1])); foreach (var item in npcs) { var te = ids.FirstOrDefault(m => m == item.id); if (te == 0) { towerenemys.Add(item); } } return(true); } ids.Add(Convert.ToInt32(checkpoint.npcids)); foreach (var item in npcs) { var te = ids.FirstOrDefault(m => m == item.id); if (te == 0) { towerenemys.Add(item); } } } } else { return(false); } return(true); }
/// <summary>验证翻将使用元宝或翻将次数</summary> private int Procress(Int64 userid, int type) { if (!Variable.OnlinePlayer.ContainsKey(userid)) { return((int)ResultType.BASE_PLAYER_OFFLINE_ERROR); } var session = Variable.OnlinePlayer[userid] as TGGSession; if (session == null) { return((int)ResultType.BASE_PLAYER_OFFLINE_ERROR); } var user_extend = session.Player.UserExtend.CloneEntity(); var user = session.Player.User.CloneEntity(); if (type == (int)DuplicateRefreshType.REFRESHCOUNT_USE) { if (user_extend.npc_refresh_count == 0) { return((int)ResultType.CHALLENGENUM_LACK); } user_extend.npc_refresh_count--; user_extend.Update(); session.Player.UserExtend = user_extend; } else if (type == (int)DuplicateRefreshType.GOLD_USE) { var base_gold = Variable.BASE_RULE.FirstOrDefault(m => m.id == "9004"); if (base_gold == null) { return((int)ResultType.BASE_TABLE_ERROR); } if (!UserResource(Convert.ToInt32(base_gold.value), ref user)) { return((int)ResultType.BASE_PLAYER_GOLD_ERROR); } user.Update(); Common.GetInstance().RewardsToUser(user, (int)GoodsType.TYPE_GOLD); } else { return((int)ResultType.FRONT_DATA_ERROR); } return((int)ResultType.SUCCESS); }
/// <summary>减少武将气力 </summary> /// <param name="list">受影响的武将集合</param> /// <param name="skill"></param> private void RoleReduceAngerCount(IEnumerable <FightRole> list, FightSkillEffects skill) { foreach (var m in list) { if (!IsTrue(skill.robabilityValues)) { continue; } var count = m.angerCount - Convert.ToInt32(skill.values); if (count < 0) { skill.values = m.angerCount; m.angerCount = 0; } AddRoleBuff(m, skill.round, (int)FightingSkillType.REDUCE_STRENGTH, skill.values, false); #if DEBUG XTrace.WriteLine("{0} {1} {2}", "原本气力 " + m.angerCount, "减少气力 " + skill.values, "剩余气力 " + count); #endif } }
/// <summary>辩才小游戏</summary> public ASObject CommandStart(TGGSession session, ASObject data) { #if DEBUG XTrace.WriteLine("{0}:{1}", "TOWER_CHECKPOINT_ELOQUENCE_GAME", "辩才小游戏"); #endif var type = Convert.ToInt32(data.FirstOrDefault(m => m.Key == "type").Value); var checkpoint = tg_duplicate_checkpoint.GetEntityByUserId(session.Player.User.id); if (checkpoint == null) { return(Error((int)ResultType.DATABASE_ERROR)); } if (!CheckType(type)) { return(Error((int)ResultType.FRONT_DATA_ERROR)); } if (checkpoint.user_blood == 0 || checkpoint.npc_blood == 0 || checkpoint.state == (int)DuplicateClearanceType.CLEARANCE_FAIL) { return(Error((int)ResultType.CHALLENGE_FAIL)); } var npccard = CardRandom(); var base_tower = Variable.BASE_TOWERELOQUENCE.FirstOrDefault(m => m.myCard == type && m.enemyCard == npccard); var base_pass = Variable.BASE_TOWERPASS.FirstOrDefault(m => m.pass == checkpoint.site); if (base_tower == null || base_pass == null) { return(Error((int)ResultType.BASE_TABLE_ERROR)); } checkpoint = GameProcess(checkpoint, base_tower); if (!tg_duplicate_checkpoint.UpdateSite(checkpoint)) { return(Error((int)ResultType.DATABASE_ERROR)); } var user = session.Player.User.CloneEntity(); if (!CheckResult(user, Convert.ToInt32(base_pass.passAward), ref checkpoint)) { TOWER_CHECKPOINT_DARE_PUSH.GetInstance().CommandStart(checkpoint.user_id, checkpoint.site, checkpoint.state); } return(new ASObject(Common.GetInstance().BulidData((int)ResultType.SUCCESS, npccard, checkpoint.user_blood, checkpoint.npc_blood))); }
/// <summary>增加印计数</summary> /// <param name="list">受影响的武将集合</param> /// <param name="skill"></param> private void AddYinCount(IEnumerable <FightRole> list, FightSkillEffects skill) { var role = list.First(); var userid = role.user_id; var value = Convert.ToInt32(skill.values); if (!dic_yincount.ContainsKey(userid)) { dic_yincount.Add(userid, value); } else { dic_yincount[userid] += value; #if DEBUG XTrace.WriteLine("{0} {1}", "增加印计数 " + value, "当前印计数 " + dic_yincount[userid]); #endif } GetYinCount(move); AddRoleBuff(role, skill.round, (int)FightingSkillType.INCREASES_YINCOUNT, value, true); }
/// <summary>减少印计数</summary> /// <param name="list">受影响的武将集合</param> /// <param name="skill"></param> private void ReduceYinCount(IEnumerable <FightRole> list, FightSkillEffects skill) { var role = list.First(); var userid = role.user_id; var value = Convert.ToInt32(skill.values); if (!dic_yincount.ContainsKey(userid)) { dic_yincount.Add(userid, 0); } else { var yincount = dic_yincount[userid]; var count = yincount - value; dic_yincount[userid] = count < 0 ? 0 : count; #if DEBUG XTrace.WriteLine("{0} {1} {2}", "原本印计数 " + yincount, "减少印计数 " + value, "剩余印计数 " + count); #endif } GetYinCount(move); AddRoleBuff(role, skill.round, (int)FightingSkillType.REDUCE__YINCOUNT, value, false); }
/// <summary>挑战怪物</summary> public ASObject CommandStart(TGGSession session, ASObject data) { #if DEBUG XTrace.WriteLine("{0}:{1}", "TOWER_CHECKPOINT_DARE", "挑战怪物"); #endif var npcid = Convert.ToInt32(data.FirstOrDefault(m => m.Key == "npcid").Value); var type = Convert.ToInt32(data.FirstOrDefault(m => m.Key == "type").Value); var user = session.Player.User.CloneEntity(); var checkpoint = tg_duplicate_checkpoint.GetEntityByUserId(session.Player.User.id); result = 0; int fightresult = 0; if (npcid == 0 || checkpoint == null) { return(Error((int)ResultType.DATABASE_ERROR)); } var towerpass = Variable.BASE_TOWERPASS.FirstOrDefault(m => m.pass == checkpoint.site); if (towerpass == null) { return(Error((int)ResultType.BASE_TABLE_ERROR)); } if (!CheckSiteResult(checkpoint, towerpass)) { return(Error(result)); } Int64 rolelife; //主角血量 if (type == (int)DuplicateTargetType.MONSTER) { rolelife = checkpoint.blood; if (!CheckDifficult(npcid, ref checkpoint)) { return(Error((int)ResultType.BASE_TABLE_ERROR)); } checkpoint.Update(); fightresult = NpcChallenge(session.Player.User.id, npcid, FightType.DUPLICATE_SHARP, ref rolelife); result = RoleLifeProcess(rolelife); } else if (type == (int)DuplicateTargetType.WATCHMEM) { if (!CheckWatchMen(checkpoint, towerpass)) { return(Error(result)); } rolelife = session.Player.Role.Kind.att_life; fightresult = NpcChallenge(session.Player.User.id, npcid, FightType.ONE_SIDE, ref rolelife); result = WatchResult(fightresult); } else { return(Error((int)ResultType.FRONT_DATA_ERROR)); } if (fightresult < 0) { return(Error((int)ResultType.FIGHT_ERROR)); } TOWER_CHECKPOINT_DARE_PUSH.GetInstance().CommandStart(checkpoint.user_id, type, result, rolelife); if (!FameReward(user, npcid, result, type)) //推送奖励 { return(Error((int)ResultType.BASE_TABLE_ERROR)); } return(new ASObject(Common.GetInstance().BuildData((int)ResultType.SUCCESS))); }