Example #1
0
        /// <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);
        }
Example #2
0
        /// <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));
        }
Example #3
0
        /// <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);
        }
Example #4
0
        /// <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));
        }
Example #5
0
        /// <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);
        }
Example #6
0
        /// <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));
        }
Example #7
0
        /// <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));
        }
Example #8
0
        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));
        }
Example #9
0
        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));
        }
Example #10
0
        /// <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);
        }
Example #11
0
        //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)));
        }
Example #12
0
        /// <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);
        }
Example #13
0
        //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());
        }
Example #14
0
        //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));
        }
Example #15
0
        /// <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());
        }