/// <summary>获取讲价后的价格</summary> private Int64 GetBargainPrice(tg_user_extend extend, RoleItem role, Int64 total, int type, ref bool success) { //根据概率来计算讨价是否成功 var prob = GetEloquence(role.LifeSkill.sub_eloquence, role.LifeSkill.sub_eloquence_level); var rs = new RandomSingle(); success = rs.IsTrue(prob.Eloquence); #if DEBUG success = true; #endif if (!success) { return(total); } //判断用户家臣称号是否达成---LZH (new Share.Title()).IsTitleAcquire(extend, (int)TitleGetType.BARGARN_SUCCUSS); //判断称号信息 var calculate = GetCalculate(role.LifeSkill.sub_calculate, role.LifeSkill.sub_calculate_level); if (type == (int)BusinessType.Buy) { total -= Convert.ToInt32(total * calculate.Buy / 100); } else { total += Convert.ToInt32(total * calculate.Sell / 100); } return(total); }
/// <summary> 获取随机非主角武将 </summary> /// <param name="count">要获取的个数</param> /// <param name="list">品质概率对象集合</param> public List <BaseRoleInfo> GetRoleByType(int count, List <ObjectsDouble> list) { var rs = new RandomSingle(); var obj = rs.RandomFun(count, list); var l = obj.Select(m => Convert.ToInt32(m.Name)).ToList(); return(!l.Any() ? new List <BaseRoleInfo>() : GetRoleByType(l)); }
/// <summary> /// 公式计算伤害 /// </summary> /// <param name="defrole"></param> /// <param name="attackroles"></param> /// <returns></returns> private int GetHurt(DefenseRoles defrole, AttackRoles attackroles) { var attacktype = (int)WarFightEffectVoType.普通攻击; var dodge = attackroles.dodge + attackroles.buffs.Where(q => q.type == (int)WarFightEffectType.Dodge).Sum(q => q.value); var rolehits = defrole.hits + defrole.buffs.Where(q => q.type == (int)WarFightEffectType.Hits).Sum(q => q.value); var hits = Common.GetInstance().GetRule("32094", rolehits, dodge); var ishurt = new RandomSingle().IsTrue(hits); if (!ishurt) { return((int)WarFightEffectVoType.躲避); } // var basecap = Common.GetInstance().GetRule("32086", defrole.Role.base_captain); var equipattack = Common.GetInstance().GetRule("32087", defrole.EquipAddAttack); var total_fo = tg_role.GetSingleTotal(RoleAttributeType.ROLE_FORCE, defrole.Role); var roleattack = Common.GetInstance().GetRule("32088", total_fo, defrole.Role.base_captain); var soldierattack = Common.GetInstance().GetRule("32089", defrole.attack, defrole.morale, defrole.SoldierCount); var rivaldefense = Common.GetInstance().GetRule("32090", attackroles.EquipAddDefense); var addhurt = Common.GetInstance().GetRule("32091", defrole.Role.base_force); var redhurt = Common.GetInstance().GetRule("32092", attackroles.Role.base_brains); var rangesplit = defrole.hurtRange.Split("_"); var hurtrange = RNG.Next(Convert.ToInt32(rangesplit[0]), (Convert.ToInt32(rangesplit[1]))); var skilladdattack = defrole.buffs.Where(q => q.type == (int)WarFightEffectType.AddAttack) .Sum(q => q.value); var skilladddefense = attackroles.buffs.Where(q => q.type == (int)WarFightEffectType.AddDefense).Sum(q => q.value); var list = new List <Double>() { equipattack, roleattack, soldierattack, rivaldefense, addhurt, redhurt, skilladdattack, skilladddefense, hurtrange, }; var hurt = Common.GetInstance().GetRule("32093", list); var crit = defrole.crit + defrole.buffs.Where(q => q.type == (int)WarFightEffectType.Hits).Sum(q => q.value); var iscrit = new RandomSingle().IsTrue(crit); if (iscrit) { attacktype = (int)WarFightEffectVoType.暴击; hurt = Common.GetInstance().GetRule("32095", hurt); } attackroles.SoldierCount -= (int)hurt; return(attacktype); }
/// <summary>随机属性个数</summary> private static int RandomAttributeNumber() { var rs = new RandomSingle(); var list = Variable.BASE_EQUIPATTRATE.OrderByDescending(m => m.rate) .Select(m => new Objects { Name = m.id.ToString(), Probabilities = m.rate }).ToList(); var result = rs.RandomFun(list); return(Convert.ToInt32(result.Name)); }
/// <summary>根据概率随机掉落一个装备</summary> /// <param name="user_id">玩家ID</param> /// <param name="rate">成功概率</param> /// <param name="list">装备集合</param> private static tg_bag RandomRateEquip(Int64 user_id, Double rate, List <BaseEquip> list) { if (!list.Any()) { return(null); } var rs = new RandomSingle(); //判断是否掉装备 var isequip = rs.IsTrue(rate); return(isequip ? RateEquip(user_id, list) : null); }
/// <summary>随机一个品质</summary> private int RandomGrade(int identity) { var rs = new RandomSingle(); var list = Variable.BASE_RECRUITRATE.Where(m => m.identity == identity) .OrderByDescending(m => m.rate) .Select(m => new Objects { Name = m.grade.ToString(), Probabilities = m.rate }).ToList(); //读取当前身份概率集合 var result = rs.RandomFun(list); return(Convert.ToInt32(result.Name)); }
/// <summary>随机一个品质</summary> /// <param name="level"></param> private static int RandomGrade(int level) { var rs = new RandomSingle(); //读取当前等级装备概率集合 var list = Variable.BASE_EQUIPRATE.Where(m => m.level == level) .OrderByDescending(m => m.rate) .Select(m => new Objects { Name = m.grade.ToString(), Probabilities = m.rate }).ToList(); var result = rs.RandomFun(list); return(Convert.ToInt32(result.Name)); }
private void testRandomSingleIsTrue() { Stopwatch sw = Stopwatch.StartNew(); var test = new RandomSingle(); for (int i = 1; i < 100; i++) { var temp = test.IsTrue(5.1); DisplayGlobal.log.Write(string.Format("概率结果:{0} ", temp.ToString())); } sw.Stop(); DisplayGlobal.log.Write(string.Format("总耗时:{0} 毫秒", sw.ElapsedMilliseconds)); }
private void testRandomSingle() { //for (int i = 0; i < 10; i++) //{ // var temp = RNG.NextDouble(15,50.00,i).ToString(); // LogWrite(temp); //} Stopwatch sw = Stopwatch.StartNew(); var test = new RandomSingle(); test.Max = 1000; int a = 0, b = 0, c = 0, d = 0, f = 0; for (int i = 1; i < 100; i++) { var t = test.RandomFun(10, new[] { 1, 10, 49, 15, 25 }); foreach (var item in t) { switch (item) { case 1: a++; break; case 10: b++; break; case 49: c++; break; case 15: d++; break; case 25: f++; break; } } // LogWrite(string.Format("概率:{0} 结果:{1} {2}:{3}:{4}:{5}:{6}", "5, 10, 45, 15, 25", t.ToString(), a, b, c, d, f)); DisplayGlobal.log.Write(string.Format("概率:{0} 结果:{1} {2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}", "1,10, 49, 15, 25", t.Count.ToString(), t[0], t[1], t[2], t[3], t[4] , t[5], t[6], t[7], t[8], t[9] ) ); } sw.Stop(); DisplayGlobal.log.Write(string.Format("总耗时:{0} 毫秒", sw.ElapsedMilliseconds)); DisplayGlobal.log.Write(string.Format("统计:{0}:{1}:{2}:{3}:{4}", a, b, c, d, f)); }
/// <summary>刷新怪物</summary> public string RefreshNpc(List <BaseTowerEnemy> towerenemys) { List <ObjectsDouble> probabilities = new List <ObjectsDouble>(); foreach (var item in towerenemys) { var ob = new ObjectsDouble(); ob.Name = item.id.ToString(); ob.Probabilities = item.odds; probabilities.Add(ob); } RandomSingle rs = new RandomSingle(); var _ob = rs.RandomFun(probabilities); var npcid = _ob.Name; return(npcid); }
//private static WORK_IS_FIGHT _objInstance; ///// <summary> WORK_IS_FIGHT单体模式 </summary> //public static WORK_IS_FIGHT GetInstance() //{ // return _objInstance ?? (_objInstance = new WORK_IS_FIGHT()); //} /// <summary> 请求是否触发拦路 </summary> public ASObject CommandStart(TGGSession session, ASObject data) { var taskid = Convert.ToInt64(data.FirstOrDefault(q => q.Key == "taskId").Value); var task = tg_task.FindByid(taskid); if (task == null || task.task_type != (int)TaskType.WORK_TASK) { return(CommonHelper.ErrorResult((int)ResultType.TASK_VOCATION_NOTASK)); } if (task.task_state != (int)TaskStateType.TYPE_UNFINISHED) { return(CommonHelper.ErrorResult((int)ResultType.TASK_VOCATION_NOTASK)); } if (task.is_lock == (int)GuardTaskType.TRIGGER) { return(new ASObject(BulidData(false))); } var stepList = task.task_step_data.Split('|'); if (!stepList.Any()) { return(CommonHelper.ErrorResult((int)ResultType.TASK_STEP_NULL)); } var type = stepList[0].Split('_').First(); if (type != Convert.ToInt32(TaskStepType.ESCORT).ToString()) { return(CommonHelper.ErrorResult((int)ResultType.TASK_NO_ESCORT)); } var r = new RandomSingle(); if (r.IsTrue(75)) { return(new ASObject(BulidData(true))); } task.is_lock = (int)GuardTaskType.TRIGGER; task.Update(); return(new ASObject(BulidData(false))); }
/// <summary>刷新怪物</summary> public string RefreshNpc(int site) { var npcs = Variable.BASE_TOWERENEMY.Where(m => m.pass == site).ToList(); if (!npcs.Any()) { return(null); } List <ObjectsDouble> probabilities = new List <ObjectsDouble>(); foreach (var item in npcs) { var ob = new ObjectsDouble(); ob.Name = item.id.ToString(); ob.Probabilities = item.odds; probabilities.Add(ob); } RandomSingle rs = new RandomSingle(); var _ob = rs.RandomFun(probabilities); var npcid = _ob.Name; return(npcid); }
//private static WAR_DESTRUCTION _objInstance; ///// <summary>WAR_DESTRUCTION单体模式</summary> //public static WAR_DESTRUCTION GetInstance() //{ // return _objInstance ?? (_objInstance = new WAR_DESTRUCTION()); //} /// <summary> 破坏 </summary> public ASObject CommandStart(TGGSession session, ASObject data) { if (!data.ContainsKey("id") || !data.ContainsKey("roleid")) { return(null); } var id = Convert.ToInt32(data.FirstOrDefault(m => m.Key == "id").Value); var rid = Convert.ToInt64(data.FirstOrDefault(m => m.Key == "roleid").Value); var uid = session.Player.User.id; var warRole = tg_war_role.GetEntityByUserIdAndId(uid, rid); if (!tg_war_role.RoleIsIdle(warRole)) { return(CommonHelper.ErrorResult(ResultType.WAR_ROLE_STATE_ERROR)); } var city = (new Share.War()).GetWarCity(id); if (city == null) { return(CommonHelper.ErrorResult(ResultType.NO_DATA)); } var time = (DateTime.Now.Ticks - 621355968000000000) / 10000; if (city.destroy_time > time) { return(CommonHelper.ErrorResult(ResultType.WAR_CITY_PROTECT_STATE)); } var item = Common.GetInstance().GetRoleItem(warRole.rid, uid); if (item == null) { return(CommonHelper.ErrorResult(ResultType.NO_DATA)); } var rule = Variable.BASE_RULE.FirstOrDefault(m => m.id == "32046"); var baseRuleFanRong = Variable.BASE_RULE.FirstOrDefault(m => m.id == "32115"); var baseRuleNaiJiu = Variable.BASE_RULE.FirstOrDefault(m => m.id == "32116"); var baseRuleZhiAn = Variable.BASE_RULE.FirstOrDefault(m => m.id == "32117"); if (rule == null || baseRuleFanRong == null || baseRuleNaiJiu == null || baseRuleZhiAn == null) { return(CommonHelper.ErrorResult(ResultType.BASE_TABLE_ERROR)); } var totalpower = tg_role.GetTotalPower(item.Kind); var power = Convert.ToInt32(rule.value); if (totalpower < power) { return(CommonHelper.ErrorResult(ResultType.BASE_PLAYER_POWER_ERROR)); } var prob = (new TGTask()).GetTaskProb(item, (int)TaskStepType.SEARCH_GOODS); prob += Convert.ToInt32((new Share.War()).GetTactics(uid, (int)WarTacticsType.DESTROY_PROBABILITY) * 100); var b = new RandomSingle().IsTrue(prob); //概率结果 var r = item.Kind.CloneEntity(); if (b) { var rv = Variable.BASE_RULE.FirstOrDefault(m => m.id == "32022"); if (rv == null) { return(CommonHelper.ErrorResult(ResultType.BASE_TABLE_ERROR)); } var value = Convert.ToInt32(rv.value); city.destroy_time = (DateTime.Now.AddMinutes(value).Ticks - 621355968000000000) / 10000; #region 破坏效果扣除 var number = Convert.ToInt32((new Share.War()).GetTactics(uid, (int)WarTacticsType.DESTROY)); var boom = Convert.ToInt32(baseRuleFanRong.value) + number; var peace = Convert.ToInt32(baseRuleZhiAn.value) + number; var strong = Convert.ToInt32(baseRuleNaiJiu.value) + number; if (boom < city.boom) { city.boom -= boom; } else { boom = Convert.ToInt32(city.boom); city.boom = 0; } if (peace < city.peace) { city.peace -= peace; } else { peace = Convert.ToInt32(city.peace); city.peace = 0; } if (strong < city.strong) { city.strong -= strong; } else { strong = Convert.ToInt32(city.strong); city.strong = 0; } city.destroy_boom = boom; city.destroy_peace = peace; city.destroy_strong = strong; #endregion city.Update(); (new Share.War()).SaveWarCityAll(city); (new Share.War()).DestructionTask(city); (new Role()).PowerUpdateAndSend(item.Kind, power, item.Kind.user_id); Common.GetInstance().SaveRoleStateAndSend(warRole, (int)WarRoleStateType.DESTROY, "32023"); (new Share.War()).SendCity(city.base_id, city.user_id); } else { (new Role()).PowerUpdateAndSend(item.Kind, power, item.Kind.user_id); Common.GetInstance().SaveRoleStateAndSend(warRole, (int)WarRoleStateType.PRISONERS, "32021"); } //日志插入 (new Role()).LogInsert(r, power, ModuleNumber.WAR, (int)WarCommand.WAR_DESTRUCTION, "合战", "破坏"); return(CommonHelper.SuccessResult()); }
//private static WAR_COPY_ATTACK _objInstance; ///// <summary>WAR_COPY_ATTACK单体模式</summary> //public static WAR_COPY_ATTACK GetInstance() //{ // return _objInstance ?? (_objInstance = new WAR_COPY_ATTACK()); //} /// <summary> 出阵 </summary> public ASObject CommandStart(TGGSession session, ASObject data) { var planId = session.Player.War.planId; if (planId == 0) { return(CommonHelper.ErrorResult(ResultType.BASE_TABLE_ERROR)); } var _id = data.ContainsKey("id") ? data["id"] : null; var _zhenId = data.ContainsKey("zhenId") ? data["zhenId"] : null; var _list = data.ContainsKey("list") ? data["list"] : null; if (_id == null || _zhenId == null || _list == null) { return(CommonHelper.ErrorResult(ResultType.FRONT_DATA_ERROR)); } var id = Convert.ToInt32(_id); var zhenId = Convert.ToInt32(_zhenId); var objs = _list as object[]; var list = new List <WarRolesLinesVo>(); var userid = session.Player.User.id; var level = session.Player.Role.Kind.role_level; var username = session.Player.User.player_name; var baseWarCopy = Variable.BASE_WAR_COPY.FirstOrDefault(m => m.id == id); if (baseWarCopy == null) { return(CommonHelper.ErrorResult(ResultType.BASE_TABLE_ERROR)); } if (level < baseWarCopy.level) { return(CommonHelper.ErrorResult(ResultType.WAR_LEVEL_ERROR)); } var warroles = new List <tg_war_role>(); var result = BuildWarRole(objs, userid, ref list, ref warroles); if (result != ResultType.SUCCESS) { return(CommonHelper.ErrorResult(result)); } if (!warroles.Any()) { return(CommonHelper.ErrorResult(ResultType.WAR_COPY_ROLE_ERROR)); } var count = warroles.Sum(m => m.army_soldier); var model = tg_war_copy.GetFindByUserId(userid); var temp = tg_war_copy_count.GetEntityBySceneId(userid, baseWarCopy.sceneId); if (model == null || temp == null) { return(CommonHelper.ErrorResult(ResultType.WAR_COPY_SOLDIER_NULL)); } if (count <= 0) { return(CommonHelper.ErrorResult(ResultType.WAR_COPY_SOLDIER_COUNT_ERROR)); } if (temp.count <= 0) { return(CommonHelper.ErrorResult(ResultType.WAR_COPY_COUNT_ERROR)); } if (model.forces < count) { return(CommonHelper.ErrorResult(ResultType.WAR_COPY_SOLDIER_COUNT_ERROR)); } var entity = new WarFight(planId, baseWarCopy, list, warroles, zhenId, model.morale, username); var fightvo = new FightProcess().GetFightProcess(entity); //调用合战战斗 if (fightvo == null) { return(CommonHelper.ErrorResult(ResultType.WAR_FIGHT_ERROR)); } if (fightvo.Item2.result.isWin == 1) //胜利 { var rewards = GetReward(baseWarCopy.reward); //组装获取奖励 var str = GetReward(rewards); //获取邮件通用奖励字符串 model.score += baseWarCopy.integral; model.latest_time = DateTime.Now.Ticks; var flag = new RandomSingle().IsTrue(baseWarCopy.dropProbability); if (flag) //是否获得筑城令 { var prop = GetProp(baseWarCopy, userid); if (prop != null) { str = str + "|" + (int)GoodsType.TYPE_PROP + "_" + prop.base_id + "_" + prop.bind + "_" + prop.count; rewards.Add(new RewardVo { goodsType = (int)GoodsType.TYPE_PROP, increases = new List <ASObject> { AMFConvert.ToASObject(EntityToVo.ToPropVo(prop)) }, }); } } (new Share.Message()).BuildMessagesSend(userid, "挑战合战副本胜利奖励", "挑战合战副本胜利奖励", str); temp.count -= 1; temp.Update(); fightvo.Item2.result.reward = rewards; } model.forces -= fightvo.Item2.result.myDieCount; if (model.forces < 0) { model.forces = 0; } model.Update(); return(BuildData(fightvo.Item2)); }
/// <summary> 放火 </summary> public ASObject CommandStart(TGGSession session, ASObject data) { if (!data.ContainsKey("id") || !data.ContainsKey("roleid")) { return(null); } var id = Convert.ToInt32(data.FirstOrDefault(m => m.Key == "id").Value); var rid = Convert.ToInt64(data.FirstOrDefault(m => m.Key == "roleid").Value); //合战的武将主Id var uid = session.Player.User.id; var warRole = tg_war_role.GetEntityByUserIdAndId(uid, rid); if (warRole == null) { return(CommonHelper.ErrorResult(ResultType.NO_DATA)); } if (!tg_war_role.RoleIsIdle(warRole)) //验证武将状态 { return(CommonHelper.ErrorResult(ResultType.WAR_ROLE_STATE_ERROR)); } var item = Common.GetInstance().GetRoleItem(warRole.rid, uid); if (item == null) { return(CommonHelper.ErrorResult(ResultType.NO_DATA)); } var rule = Variable.BASE_RULE.FirstOrDefault(m => m.id == "32046"); if (rule == null) { return(CommonHelper.ErrorResult(ResultType.BASE_TABLE_ERROR)); } var totalpower = tg_role.GetTotalPower(item.Kind); var power = Convert.ToInt32(rule.value); if (totalpower < power) { return(CommonHelper.ErrorResult(ResultType.BASE_PLAYER_POWER_ERROR)); } var prob = (new TGTask()).GetTaskProb(item, (int)TaskStepType.SEARCH_GOODS); prob += Convert.ToInt32((new Share.War()).GetTactics(uid, (int)WarTacticsType.FIRE_PROBABILITY) * 100); var b = new RandomSingle().IsTrue(prob); //概率结果 var r = item.Kind.CloneEntity(); if (b) { var city = (new Share.War()).GetWarCity(id); var rv = Variable.BASE_RULE.FirstOrDefault(m => m.id == "32019"); if (city == null || rv == null) { return(CommonHelper.ErrorResult(ResultType.BASE_TABLE_ERROR)); } var value = Convert.ToInt32(rv.value); city.fire_time = (DateTime.Now.AddMinutes(value).Ticks - 621355968000000000) / 10000; var f = city.Update() > 0; if (!f) { return(CommonHelper.ErrorResult(ResultType.DATABASE_ERROR)); } (new Share.War()).SaveWarCityAll(city); (new Share.War()).SendCity(city.base_id, city.user_id); (new Role()).PowerUpdateAndSend(item.Kind, power, item.Kind.user_id); Common.GetInstance().SaveRoleStateAndSend(warRole, (int)WarRoleStateType.FIRE, "32020"); } else { (new Role()).PowerUpdateAndSend(item.Kind, power, item.Kind.user_id); Common.GetInstance().SaveRoleStateAndSend(warRole, (int)WarRoleStateType.PRISONERS, "32021"); } //日志插入 (new Role()).LogInsert(r, power, ModuleNumber.WAR, (int)WarCommand.WAR_ARSON, "合战", "放火"); return(CommonHelper.SuccessResult()); }