Пример #1
0
        void CollectF(Car car, Player player, SetCollect sc, ref List <string> notifyMsg, out MileResultReason reason)
        {
            var from   = GetFromWhenUpdateCollect(this._Players[sc.Key], sc.cType, car);
            var to     = getCollectPositionTo();//  this.promoteMilePosition;
            var fp1    = Program.dt.GetFpByIndex(from);
            var fp2    = Program.dt.GetFpByIndex(to);
            var fbBase = Program.dt.GetFpByIndex(player.StartFPIndex);
            //var goPath = Program.dt.GetAFromB(fp1, fp2.FastenPositionID);
            //var goPath = Program.dt.GetAFromB(from, to);
            var goPath = this.GetAFromB(from, to, player, ref notifyMsg);
            //var returnPath = Program.dt.GetAFromB(to, player.StartFPIndex);
            var returnPath = this.GetAFromB(to, player.StartFPIndex, player, ref notifyMsg);
            var goMile     = GetMile(goPath);
            var returnMile = GetMile(returnPath);

            if (car.ability.leftMile >= goMile + returnMile)
            {
                int startT;
                EditCarStateWhenCollectStartOK(player, ref car, to, fp1, sc, goPath, ref notifyMsg, out startT);
                StartArriavalThread(startT, car, sc, returnPath, goMile);
                //  getAllCarInfomations(sc.Key, ref notifyMsg);
                reason = MileResultReason.Abundant;//返回原因
            }

            else if (car.ability.leftMile >= goMile)
            {
                printState(player, car, $"剩余里程为{car.ability.leftMile}去程{goMile},回程{returnMile},你去了回不来。所以安排返回");
                reason = MileResultReason.CanNotReturn;
            }
            else
            {
                printState(player, car, $"剩余里程为{car.ability.leftMile}去程{goMile},回程{returnMile},去不了。所以安排返回");
                reason = MileResultReason.CanNotReach;
                //   return false;
            }
        }
Пример #2
0
        ///// <summary>
        /////
        ///// </summary>
        ///// <param name="player">玩家</param>
        ///// <param name="car">小车</param>
        ///// <param name="sa"></param>
        ///// <param name="notifyMsg"></param>
        ///// <param name="victimState">0,代表用户不存在了。1代表已经破产,2代表正常</param>

        /// <summary>
        /// 此函数,必须在this._Players.ContainsKey(sa.targetOwner)=true且this._Players[sa.targetOwner].Bust=false情况下运行。请提前进行判断!
        /// </summary>
        /// <param name="player">玩家</param>
        /// <param name="car"></param>
        /// <param name="sa"></param>
        /// <param name="notifyMsg"></param>
        /// <param name="victimState"></param>
        /// <param name="reason"></param>
        void attack(Player player, Car car, SetAttack sa, ref List <string> notifyMsg, out MileResultReason Mrr)
        {
            //   if (this._Players.ContainsKey(sa.targetOwner))
            {
                //if (this._Players[sa.targetOwner].Bust)

                if (car.ability.costBusiness + car.ability.costVolume > 0)
                {
                    var from   = this.getFromWhenAttack(player, car);
                    var to     = sa.target;
                    var fp1    = Program.dt.GetFpByIndex(from);
                    var fp2    = Program.dt.GetFpByIndex(to);
                    var baseFp = Program.dt.GetFpByIndex(player.StartFPIndex);

                    // var goPath = Program.dt.GetAFromB(fp1, fp2.FastenPositionID);

                    //var goPath = Program.dt.GetAFromB(from, to);
                    var goPath = this.GetAFromB(from, to, player, ref notifyMsg);
                    //var returnPath = Program.dt.GetAFromB(fp2, baseFp.FastenPositionID);
                    //var returnPath = Program.dt.GetAFromB(to, player.StartFPIndex);
                    var returnPath = this.GetAFromB(to, player.StartFPIndex, player, ref notifyMsg);

                    var goMile     = GetMile(goPath);
                    var returnMile = GetMile(returnPath);



                    //第一步,计算去程和回程。
                    if (car.ability.leftMile >= goMile + returnMile)
                    {
                        int startT;
                        EditCarStateWhenAttackStartOK(player, ref car, to, fp1, sa, goPath, out startT, ref notifyMsg);
                        SetAttackArrivalThread(startT, car, sa, returnPath);
                        // getAllCarInfomations(sa.Key, ref notifyMsg);
                        Mrr = MileResultReason.Abundant;
                    }

                    else if (car.ability.leftMile >= goMile)
                    {
                        //当攻击失败,必须返回
                        Console.Write($"去程{goMile},回程{returnMile}");
                        Console.Write($"你去了回不来");
                        Mrr = MileResultReason.CanNotReturn;
                    }
                    else
                    {
#warning 这里要在web前台进行提示
                        //当攻击失败,必须返回
                        Console.Write($"去程{goMile},回程{returnMile}");
                        Console.Write($"你去不了");
                        Mrr = MileResultReason.CanNotReach;
                    }
                }
                else
                {
                    Mrr = MileResultReason.MoneyIsNotEnougt;
                }
            }
            //else
            //{
            //    throw new Exception("此方法,不该在此条件下运行");
            //}
        }
Пример #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="player"></param>
        /// <param name="car"></param>
        /// <param name="sp"></param>
        /// <param name="notifyMsg"></param>
        /// <returns>true:表示已执行;false,表示各种原因(去不了、去了回不来)未执行。</returns>
        bool promote(Player player, Car car, SetPromote sp, ref List <string> notifyMsg, out MileResultReason reason)
        {
            var from = this.getFromWhenUpdatePromote(player, car);
            var to   = GetPromotePositionTo(sp.pType);//  this.promoteMilePosition;

            var fp1    = Program.dt.GetFpByIndex(from);
            var fp2    = Program.dt.GetFpByIndex(to);
            var baseFp = Program.dt.GetFpByIndex(player.StartFPIndex);

            //var goPath = Program.dt.GetAFromB(fp1, fp2.FastenPositionID);
            //var returnPath = Program.dt.GetAFromB(fp2, baseFp.FastenPositionID);
            // var goPath = Program.dt.GetAFromB(from, to);
            var goPath = this.GetAFromB(from, to, player, ref notifyMsg);
            // var returnPath = Program.dt.GetAFromB(to, player.StartFPIndex);
            var returnPath = this.GetAFromB(to, player.StartFPIndex, player, ref notifyMsg);

            var goMile     = GetMile(goPath);
            var returnMile = GetMile(returnPath);


            //第一步,计算去程和回程。
            if (car.ability.leftMile >= goMile + returnMile)
            {
                int startT;
                EditCarStateWhenPromoteStartOK(player, ref car, to, fp1, to, sp, goPath, ref notifyMsg, out startT);
                StartDiamondOwnerThread(startT, car, sp, returnPath, goMile);
                //  getAllCarInfomations(sp.Key, ref notifyMsg);
                reason = MileResultReason.Abundant;
                return(true);
            }

            else if (car.ability.leftMile >= goMile)
            {
                printState(player, car, $"去程{goMile},回程{returnMile},去了回不来");
                reason = MileResultReason.CanNotReturn;
                return(false);
            }
            else
            {
                printState(player, car, $"去程{goMile},回程{returnMile},去不了");
                reason = MileResultReason.CanNotReach;
                return(false);
            }
        }
Пример #4
0
        void DoCollectTaxF(Player player, Car car, SetTax st, ref List <string> notifyMsg, out MileResultReason reason)
        {
            var from   = this.getFromWhenDoCollectTax(player, car);
            var to     = st.target;
            var fp1    = Program.dt.GetFpByIndex(from);
            var fp2    = Program.dt.GetFpByIndex(to);
            var baseFp = Program.dt.GetFpByIndex(player.StartFPIndex);

            // var goPath = Program.dt.GetAFromB(from, to);
            var goPath = this.GetAFromB(from, to, player, ref notifyMsg);
            // var returnPath = Program.dt.GetAFromB(to, player.StartFPIndex);
            var returnPath = this.GetAFromB(to, player.StartFPIndex, player, ref notifyMsg);

            var goMile     = GetMile(goPath);
            var returnMile = GetMile(returnPath);

            if (car.ability.leftMile >= goMile + returnMile)
            {
                car.targetFpIndex = to;
                Console.WriteLine($"{car.name}的目标设置成了{Program.dt.GetFpByIndex(to).FastenPositionName}");

                car.setPurpose(player, ref notifyMsg, Purpose.tax);
                //car.purpose = Purpose.tax;
                var speed  = car.ability.Speed;
                int startT = 0;
                List <Data.PathResult> result;
                if (car.state == CarState.waitAtBaseStation)
                {
                    result = getStartPositon(fp1, st.car, ref startT);
                }
                else if (car.state == CarState.waitForTaxOrAttack)
                {
                    result = new List <Data.PathResult>();
                }
                else if (car.state == CarState.waitOnRoad && car.ability.diamondInCar == "" && (car.purpose == Purpose.@null || car.purpose == Purpose.tax))
                {
                    result = new List <Data.PathResult>();
                }
                else
                {
                    throw new Exception($"未知情况!{Newtonsoft.Json.JsonConvert.SerializeObject(car)}");
                }
                car.setState(player, ref notifyMsg, CarState.roadForTax);
                //car.state = CarState.roadForTax;
                Program.dt.GetAFromBPoint(goPath, fp1, speed, ref result, ref startT);
                result.RemoveAll(item => item.t0 == item.t1);

                var animateData = new AnimateData()
                {
                    animateData = result,
                    recordTime  = DateTime.Now
                };
                car.setAnimateData(player, ref notifyMsg, animateData);

                //car.animateData = new AnimateData()
                //{
                //    animateData = result,
                //    recordTime = DateTime.Now
                //};
                Thread th = new Thread(() => setArrive(startT, new commandWithTime.placeArriving()
                {
                    c          = "placeArriving",
                    key        = st.Key,
                    car        = st.car,
                    returnPath = returnPath,
                    target     = to,
                    costMile   = goMile
                }));
                th.Start();


                reason = MileResultReason.Abundant;

                //   car.changeState++;//更改状态
                car.setPurpose(player, ref notifyMsg, Purpose.tax);
                //car.purpose = Purpose.tax;

                //getAllCarInfomations(st.Key, ref notifyMsg);
            }

            else if (car.ability.leftMile >= goMile)
            {
                //当攻击失败,必须返回
                Console.Write($"去程{goMile},回程{returnMile}");
                Console.Write($"你去了回不来");

#warning 这里要在前台进行提示
                reason = MileResultReason.CanNotReturn;
            }
            else
            {
#warning 这里要在web前台进行提示
                //当攻击失败,必须返回
                Console.Write($"去程{goMile},回程{returnMile}");
                Console.Write($"你去不了");
                reason = MileResultReason.CanNotReach;
            }
        }
Пример #5
0
        private void bust(Player player, Car car, SetBust sb, ref List <string> notifyMsg, out MileResultReason Mrr)
        {
            {
                //if (this._Players[sa.targetOwner].Bust)


                {
                    var from   = this.getFromWhenAttack(player, car);
                    var to     = sb.target;
                    var fp1    = Program.dt.GetFpByIndex(from);
                    var fp2    = Program.dt.GetFpByIndex(to);
                    var baseFp = Program.dt.GetFpByIndex(player.StartFPIndex);

                    // var goPath = Program.dt.GetAFromB(fp1, fp2.FastenPositionID);
                    var goPath = this.GetAFromB(from, to, player, ref notifyMsg);
                    // var goPath = Program.dt.GetAFromB(from, to);
                    //var returnPath = Program.dt.GetAFromB(fp2, baseFp.FastenPositionID);
                    var returnPath = this.GetAFromB(to, player.StartFPIndex, player, ref notifyMsg);
                    //var returnPath = Program.dt.GetAFromB(to, player.StartFPIndex);

                    var goMile     = GetMile(goPath);
                    var returnMile = GetMile(returnPath);


                    //第一步,计算去程和回程。
                    if (car.ability.leftMile >= goMile + returnMile)
                    {
                        int startT;
                        EditCarStateWhenBustStartOK(player, ref car, to, fp1, sb, goPath, out startT, ref notifyMsg);
                        SetBustArrivalThread(startT, car, sb, returnPath);
                        // getAllCarInfomations(sa.Key, ref notifyMsg);
                        Mrr = MileResultReason.Abundant;
                    }

                    else if (car.ability.leftMile >= goMile)
                    {
                        //当攻击失败,必须返回
                        Console.Write($"去程{goMile},回程{returnMile}");
                        Console.Write($"你去了回不来");
                        Mrr = MileResultReason.CanNotReturn;
                    }
                    else
                    {
#warning 这里要在web前台进行提示
                        //当攻击失败,必须返回
                        Console.Write($"去程{goMile},回程{returnMile}");
                        Console.Write($"你去不了");
                        Mrr = MileResultReason.CanNotReach;
                    }
                }
            }
        }
Пример #6
0
 public RoomMainF.RoomMain.commandWithTime.ReturningOjb maindDo(RoleInGame player, Car car, Command c, ref List <string> notifyMsg, out MileResultReason mrr)
 {
     if (c.c == "SetAttack")
     {
         var sa = (SetAttack)c;
         return(attack(player, car, sa, ref notifyMsg, out mrr));
     }
     else
     {
         throw new Exception($"数据传输错误!(传出类型为{c.c})");
     }
 }
Пример #7
0
        public ReturningOjb maindDo(RoleInGame player, Car car, Command c, ref List <string> notifyMsg, out MileResultReason mrr)
        {
            //throw new NotImplementedException();
            //    car.state = CarState.returning;
            OrderToReturn otr = (OrderToReturn)c;

            car.setState(player, ref notifyMsg, CarState.returning);
            setReturn(new returnning()
            {
                c            = "returnning",
                changeType   = returnning.ChangeType.BeforeTax,
                key          = otr.Key,
                returningOjb = player.returningOjb,
                target       = car.targetFpIndex
            });
            mrr = MileResultReason.Abundant;
            return(player.returningOjb);
        }
Пример #8
0
        public commandWithTime.ReturningOjb randomWhenConfused(RoleInGame player, RoleInGame boss, Car car, interfaceOfHM.ContactInterface ci, ref List <string> notifyMsg, out MileResultReason Mrr)
        {
            var randomValue = that.rm.Next(0, 5);

            if (randomValue == 4)
            {
                return(contactPassBossAddress(player, boss, car, ci, ref notifyMsg, out Mrr));
            }
            else
            {
                var victim             = that._Players[ci.targetOwner];
                var target             = Program.dt.GetFpByIndex(victim.StartFPIndex);
                var collectIndexTarget = that.getCollectPositionsByDistance(target)[randomValue];
                var sc = new SetCollect()
                {
                    c                = "SetCollect",
                    collectIndex     = collectIndexTarget,
                    cType            = "findWork",
                    fastenpositionID = Program.dt.GetFpByIndex(that._collectPosition[collectIndexTarget]).FastenPositionID,
                    Key              = player.Key
                };
                return(that.collectE.collectPassBossAddress(player, boss, car, sc, ref notifyMsg, out Mrr));
            }
        }
Пример #9
0
        internal commandWithTime.ReturningOjb randomWhenConfused(RoleInGame player, RoleInGame boss, Car car, SetAttack sa, ref List <string> notifyMsg, out MileResultReason Mrr)
        {
            AttackObj ao = new AttackObj(sa,
                                         (int startT, Car car, SetAttack sa, int goMile, Node goPath, commandWithTime.ReturningOjb ro) =>
            {
                //this.SetAttackArrivalThread()
                List <string> notifyMsg = new List <string>();
                car.setState(player, ref notifyMsg, CarState.working);
                this.sendMsg(notifyMsg);
                this.SetAttackArrivalThread(startT, 0, player, car, sa, goMile, goPath, ro);
            }
                                         );

            return(this.randomWhenConfused(player, boss, car, ao, ref notifyMsg, out Mrr));
        }
Пример #10
0
        private RoomMainF.RoomMain.commandWithTime.ReturningOjb contactPassBossAddress(RoleInGame player, RoleInGame boss, Car car, interfaceOfHM.ContactInterface ci, ref List <string> notifyMsg, out MileResultReason mrr)
        {
            if (that._Players.ContainsKey(ci.targetOwner))
            {
                var victimOrBeneficiary = that._Players[ci.targetOwner];
                OssModel.FastonPosition fpResult;
                var distanceIsEnoughToStart = that.theNearestToPlayerIsCarNotMoney(player, car, victimOrBeneficiary, out fpResult);
                if (distanceIsEnoughToStart)
                {
                    if (ci.carLeftConditions(car))
                    {
                        var from   = this.getFromWhenAction(player, car);
                        var to     = ci.target;
                        var fp1    = Program.dt.GetFpByIndex(from);
                        var fp2    = Program.dt.GetFpByIndex(to);
                        var baseFp = Program.dt.GetFpByIndex(player.StartFPIndex);

                        // var goPath = Program.dt.GetAFromB(fp1, fp2.FastenPositionID);

                        //var goPath = Program.dt.GetAFromB(from, to);
                        var goPath = that.GetAFromB_v2(from, to, player, ref notifyMsg);
                        //var returnPath = Program.dt.GetAFromB(fp2, baseFp.FastenPositionID);
                        //var returnPath = Program.dt.GetAFromB(to, player.StartFPIndex);
                        var returnToBossAddrPath = that.GetAFromB_v2(to, boss.StartFPIndex, player, ref notifyMsg);
                        var returnToSelfAddrPath = that.GetAFromB_v2(boss.StartFPIndex, player.StartFPIndex, player, ref notifyMsg);

                        var goMile = that.GetMile(goPath);
                        var returnToBossAddrPathMile = that.GetMile(returnToBossAddrPath);
                        var returnToSelfAddrPathMile = that.GetMile(returnToSelfAddrPath);

                        //第一步,计算去程和回程。
                        if (car.ability.leftMile >= goMile + returnToBossAddrPathMile + returnToSelfAddrPathMile)
                        {
                            int startT;
                            this.EditCarStateWhenActionStartOK(player, ref car, to, fp1, goPath, ref notifyMsg, out startT);
                            var ro = commandWithTime.ReturningOjb.ojbWithBoss(returnToBossAddrPath, returnToSelfAddrPath, boss);
                            ci.SetArrivalThread(startT, car, goMile, goPath, ro);
                            mrr = MileResultReason.Abundant;
                            return(ro);
                        }

                        else if (car.ability.leftMile >= goMile)
                        {
                            mrr = MileResultReason.CanNotReturn;
                            return(player.returningOjb);
                        }
                        else
                        {
                            mrr = MileResultReason.CanNotReach;
                            return(player.returningOjb);
                        }
                    }
                    else
                    {
                        this.WebNotify(player, "你身上的剩余业务空间不够啦!");
                        mrr = MileResultReason.MoneyIsNotEnougt;
                        return(player.returningOjb);
                    }
                }
                else
                {
                    mrr = MileResultReason.NearestIsMoneyWhenAttack;
                    that.ViewPosition(player, fpResult, ref notifyMsg);
                    this.WebNotify(player, $"离【{victimOrBeneficiary.PlayerName}】最近的是[{fpResult.FastenPositionName}]处的钱,不是你的车,攻击失败!");
                    return(player.returningOjb);
                }
            }
            else
            {
                throw new Exception("判断条件异常!");
            }
        }
Пример #11
0
        public RoomMainF.RoomMain.commandWithTime.ReturningOjb contact(RoleInGame player, Car car, interfaceOfHM.ContactInterface ci, ref List <string> notifyMsg, out MileResultReason Mrr)
        {
            //sa = attackTargetChange(player, sa);
            RoleInGame boss;

            if (player.HasTheBoss(roomMain._Players, out boss))
            {
                if (player.confuseRecord.IsBeingControlled())
                {
                    if (player.confuseRecord.getControlType() == Manager_Driver.ConfuseManger.ControlAttackType.Confuse)
                    {
                        return(randomWhenConfused(player, boss, car, ci, ref notifyMsg, out Mrr));
                    }
                    else
                    {
                        return(contactPassBossAddress(player, boss, car, ci, ref notifyMsg, out Mrr));
                    }
                }
                else
                {
                    return(contactPassBossAddress(player, boss, car, ci, ref notifyMsg, out Mrr));
                }
                //return promotePassBossAddress(player, boss, car, sp, ref notifyMsg, out reason);
            }
            else
            {
                if (that._Players.ContainsKey(ci.targetOwner))
                {
                    //beneficiary
                    var victimOrBeneficiary = that._Players[ci.targetOwner];
                    OssModel.FastonPosition fpResult;
                    var distanceIsEnoughToStart = that.theNearestToPlayerIsCarNotMoney(player, car, victimOrBeneficiary, out fpResult);
                    if (distanceIsEnoughToStart)
                    {
                        if (ci.carLeftConditions(car))
                        {
                            var from = this.getFromWhenAction(player, car);
                            var to   = ci.target;
                            var fp1  = Program.dt.GetFpByIndex(from);
                            //var fp2 = Program.dt.GetFpByIndex(to);
                            //var baseFp = Program.dt.GetFpByIndex(player.StartFPIndex);
                            var goPath = that.GetAFromB_v2(from, to, player, ref notifyMsg);
                            //var returnPath = Program.dt.GetAFromB(fp2, baseFp.FastenPositionID);
                            //var returnPath = Program.dt.GetAFromB(to, player.StartFPIndex);
                            var returnPath = that.GetAFromB_v2(to, player.StartFPIndex, player, ref notifyMsg);

                            var goMile     = that.GetMile(goPath);
                            var returnMile = that.GetMile(returnPath);



                            //第一步,计算去程和回程。
                            if (car.ability.leftMile >= goMile + returnMile)
                            {
                                int startT;
                                this.EditCarStateWhenActionStartOK(player, ref car, to, fp1, goPath, ref notifyMsg, out startT);
                                ci.SetArrivalThread(startT, car, goMile, goPath, commandWithTime.ReturningOjb.ojbWithoutBoss(returnPath));

                                // getAllCarInfomations(sa.Key, ref notifyMsg);
                                Mrr = MileResultReason.Abundant;
                                return(commandWithTime.ReturningOjb.ojbWithoutBoss(returnPath));
                            }

                            else if (car.ability.leftMile >= goMile)
                            {
                                Mrr = MileResultReason.CanNotReturn;
                                return(player.returningOjb);
                            }
                            else
                            {
                                Mrr = MileResultReason.CanNotReach;
                                return(player.returningOjb);
                            }
                        }
                        else
                        {
                            Mrr = MileResultReason.MoneyIsNotEnougt;
                            this.WebNotify(player, "你身上的剩余业务空间不够啦!");
                            return(player.returningOjb);
                        }
                    }
                    else
                    {
                        Mrr = MileResultReason.NearestIsMoneyWhenAttack;
                        this.WebNotify(player, $"离【{victimOrBeneficiary.PlayerName}】最近的是[{fpResult.FastenPositionName}]处的钱,不是你的车,攻击失败!");
                        that.ViewPosition(player, fpResult, ref notifyMsg);
                        return(player.returningOjb);
                    }
                }
                else
                {
                    throw new Exception("准备运行条件里没有筛查?");
                }
            }
        }
Пример #12
0
 public commandWithTime.ReturningOjb maindDo(RoleInGame player, Car car, Command c, ref List <string> notifyMsg, out MileResultReason mrr)
 {
     // throw new NotImplementedException();
     if (c.c == "SetPromote")
     {
         var sp = (SetPromote)c;
         return(this.promote(player, car, sp, ref notifyMsg, out mrr));
     }
     else
     {
         throw new Exception($"数据传输错误!(传出类型为{c.c})");
     }
 }
Пример #13
0
        private commandWithTime.ReturningOjb promotePassBossAddress(RoleInGame player, RoleInGame boss, Car car, SetPromote sp, ref List <string> notifyMsg, out MileResultReason mrr)
        {
            switch (sp.pType)
            {
            case "mile":
            case "business":
            case "volume":
            case "speed":
            {
                switch (car.state)
                {
                case CarState.waitAtBaseStation:
                {
                    // if(player.Money<)
                    //int collectIndex;
                    OssModel.FastonPosition fpResult;
                    var distanceIsEnoughToStart = that.theNearestToDiamondIsCarNotMoney(player, car, sp.pType, out fpResult);
                    if (distanceIsEnoughToStart)
                    {
                        var from = this.getFromWhenAction(player, car);
                        var to   = that.GetPromotePositionTo(sp.pType);              //  this.promoteMilePosition;

                        var fp1    = Program.dt.GetFpByIndex(from);
                        var fp2    = Program.dt.GetFpByIndex(to);
                        var baseFp = Program.dt.GetFpByIndex(player.StartFPIndex);
                        var goPath = that.GetAFromB_v2(from, to, player, ref notifyMsg);
                        // var returnPath = Program.dt.GetAFromB(to, player.StartFPIndex);
                        var returnToBossPath = that.GetAFromB_v2(to, boss.StartFPIndex, player, ref notifyMsg);
                        var returnToSelfPath = that.GetAFromB_v2(boss.StartFPIndex, player.StartFPIndex, player, ref notifyMsg);

                        var goMile           = that.GetMile(goPath);
                        var returnToBossMile = that.GetMile(returnToBossPath);
                        var returnToSelfMile = that.GetMile(returnToSelfPath);

                        //第一步,计算去程和回程。
                        if (car.ability.leftMile >= goMile + returnToBossMile + returnToSelfMile)
                        {
                            int startT;
                            this.EditCarStateWhenActionStartOK(player, ref car, to, fp1, goPath, ref notifyMsg, out startT);
                            RoomMainF.RoomMain.commandWithTime.ReturningOjb ro = commandWithTime.ReturningOjb.ojbWithBoss(returnToBossPath, returnToSelfPath, boss);
                            that.diamondOwnerE.StartDiamondOwnerThread(startT, 0, player, car, sp, ro, goMile, goPath);
                            //  getAllCarInfomations(sp.Key, ref notifyMsg);
                            mrr = MileResultReason.Abundant;
                            return(ro);
                        }

                        else if (car.ability.leftMile >= goMile)
                        {
                            WebNotify(player, $"去程{goMile}km,回程{returnToBossMile + returnToSelfMile}km,去了回不来");
                            mrr = MileResultReason.CanNotReturn;
                            return(player.returningOjb);
                        }
                        else
                        {
                            WebNotify(player, $"去程{goMile}km,回程{returnToBossMile + returnToSelfMile}km,去不了");
                            // printState(player, car, $"去程{goMile},回程{returnMile},去不了");
                            mrr = MileResultReason.CanNotReach;
                            return(player.returningOjb);
                        }
                    }
                    else
                    {
                        mrr = MileResultReason.NearestIsMoneyWhenPromote;
                        this.WebNotify(player, $"离宝石最近的是[{fpResult.FastenPositionName}]处的钱,不是你的车。请离宝石再近点儿!");
                        return(player.returningOjb);
                        //printState(player, car, "钱不够了,由于本身待在基地,不用返回。");
                    }
                };

                case CarState.waitOnRoad:
                {
                    OssModel.FastonPosition fpResult;
                    var distanceIsEnoughToStart = that.theNearestToDiamondIsCarNotMoney(player, car, sp.pType, out fpResult);
                    if (distanceIsEnoughToStart)
                    {
                        var from = this.getFromWhenAction(player, car);
                        var to   = that.GetPromotePositionTo(sp.pType);              //  this.promoteMilePosition;

                        var fp1    = Program.dt.GetFpByIndex(from);
                        var fp2    = Program.dt.GetFpByIndex(to);
                        var baseFp = Program.dt.GetFpByIndex(player.StartFPIndex);
                        var goPath = that.GetAFromB_v2(from, to, player, ref notifyMsg);

                        var returnToBossPath = that.GetAFromB_v2(to, boss.StartFPIndex, player, ref notifyMsg);
                        var returnToSelfPath = that.GetAFromB_v2(boss.StartFPIndex, player.StartFPIndex, player, ref notifyMsg);

                        var goMile           = that.GetMile(goPath);
                        var returnToBossMile = that.GetMile(returnToBossPath);
                        var returnToSelfMile = that.GetMile(returnToSelfPath);


                        //第一步,计算去程和回程。
                        if (car.ability.leftMile >= goMile + returnToBossMile + returnToSelfMile)
                        {
                            int startT;
                            this.EditCarStateWhenActionStartOK(player, ref car, to, fp1, goPath, ref notifyMsg, out startT);

                            RoomMainF.RoomMain.commandWithTime.ReturningOjb ro = commandWithTime.ReturningOjb.ojbWithBoss(returnToBossPath, returnToSelfPath, boss);
                            that.diamondOwnerE.StartDiamondOwnerThread(startT, 0, player, car, sp, ro, goMile, goPath);
                            mrr = MileResultReason.Abundant;
                            return(ro);
                        }

                        else if (car.ability.leftMile >= goMile)
                        {
                            WebNotify(player, $"去程{goMile}km,回程{returnToBossMile + returnToSelfMile}km,去了回不来");
                            mrr = MileResultReason.CanNotReturn;
                            return(player.returningOjb);
                        }
                        else
                        {
                            WebNotify(player, $"去程{goMile}km,回程{returnToBossMile + returnToSelfMile}km,去不了");
                            mrr = MileResultReason.CanNotReach;
                            return(player.returningOjb);
                        }
                    }
                    else
                    {
                        mrr = MileResultReason.NearestIsMoneyWhenPromote;
                        this.WebNotify(player, $"离宝石最近的是[{fpResult.FastenPositionName}]处的钱,不是你的车。请离宝石再近点儿!");
                        return(player.returningOjb);
                    }
                };

                default:
                {
                    throw new Exception($"{Enum.GetName(typeof(CarState), car.state)}不是注册的类型!");
                }
                }
            };

            default:
            {
                throw new Exception($"{sp.pType}-不是规定的输入!");
            };
            }
        }
Пример #14
0
        public commandWithTime.ReturningOjb collectPassBossAddress(RoleInGame player, RoleInGame boss, Car car, SetCollect sc, ref List <string> notifyMsg, out MileResultReason mrr)
        {
            if (car.ability.leftVolume > 0)
            {
                var from = this.GetFromWhenUpdateCollect(that._Players[sc.Key], sc.cType, car);
                var to   = getCollectPositionTo(sc.collectIndex); //  this.promoteMilePosition;
                                                                  //  return ActionInBoss(from, to);
                var fp1    = Program.dt.GetFpByIndex(from);
                var fp2    = Program.dt.GetFpByIndex(to);
                var fbBase = Program.dt.GetFpByIndex(player.StartFPIndex);
                //var goPath = Program.dt.GetAFromB(fp1, fp2.FastenPositionID);
                //var goPath = Program.dt.GetAFromB(from, to);
                var goPath           = that.GetAFromB_v2(from, to, player, ref notifyMsg);
                var returnToBossPath = that.GetAFromB_v2(to, boss.StartFPIndex, player, ref notifyMsg);
                var returnToSelfPath = that.GetAFromB_v2(boss.StartFPIndex, player.StartFPIndex, player, ref notifyMsg);
                var goMile           = that.GetMile(goPath);
                var returnToBossMile = that.GetMile(returnToBossPath);
                var returnToSelfMile = that.GetMile(returnToSelfPath);

                if (car.ability.leftMile >= goMile + returnToBossMile + returnToSelfMile)
                {
                    int startT;
                    this.EditCarStateWhenActionStartOK(player, ref car, to, fp1, goPath, ref notifyMsg, out startT);
                    var ro = commandWithTime.ReturningOjb.ojbWithBoss(returnToBossPath, returnToSelfPath, boss);
                    car.setState(player, ref notifyMsg, CarState.working);
                    StartArriavalThread(startT, 0, player, car, sc, ro, goMile, goPath);
                    //  getAllCarInfomations(sc.Key, ref notifyMsg);
                    mrr = MileResultReason.Abundant;//返回原因
                    return(ro);
                }

                else if (car.ability.leftMile >= goMile)
                {
                    //  printState(player, car, $"剩余里程为{car.ability.leftMile}去程{goMile},回程{returnMile},你去了回不来。所以安排返回");
                    mrr = MileResultReason.CanNotReturn;
                    return(player.returningOjb);
                }
                else
                {
                    // printState(player, car, $"剩余里程为{car.ability.leftMile}去程{goMile},回程{returnMile},去不了。所以安排返回");
                    mrr = MileResultReason.CanNotReach;
                    return(player.returningOjb);
                    //   return false;
                }
            }
            else
            {
                mrr = MileResultReason.MoneyIsNotEnougt;
                this.WebNotify(player, "你身上的剩余收集空间不够啦!");
                return(player.returningOjb);
            }
        }
Пример #15
0
        RoomMainF.RoomMain.commandWithTime.ReturningOjb collect(RoleInGame player, Car car, SetCollect sc, ref List <string> notifyMsg, out MileResultReason Mrr)
        {
            if (player.confuseRecord.IsBeingControlled())
            {
                if (player.confuseRecord.getControlType() == Manager_Driver.ConfuseManger.ControlAttackType.Lost)
                {
                    Model.FastonPosition target;
                    if (car.state == CarState.waitOnRoad)
                    {
                        target = Program.dt.GetFpByIndex(car.targetFpIndex);
                    }
                    else if (car.state == CarState.waitAtBaseStation)
                    {
                        target = Program.dt.GetFpByIndex(player.StartFPIndex);
                    }
                    else
                    {
                        throw new Exception("");
                    }
                    var positions = that.getCollectPositionsByDistance(target);
                    if (sc.collectIndex == positions[0] || sc.collectIndex == positions[1])
                    {
                    }
                    else
                    {
                        var position0 = Program.dt.GetFpByIndex(that._collectPosition[positions[0]]);
                        var position1 = Program.dt.GetFpByIndex(that._collectPosition[positions[1]]);
                        var distance0 = CommonClass.Geography.getLengthOfTwoPoint.GetDistance(target.Latitde, target.Longitude, position0.Latitde, position0.Longitude);
                        var distance1 = CommonClass.Geography.getLengthOfTwoPoint.GetDistance(target.Latitde, target.Longitude, position1.Latitde, position1.Longitude);
                        if (distance0 < distance1)
                        {
                            this.WebNotify(player, $"您处于迷失状态,未能到达远方!只能先到附近的[{position0.FastenPositionName}]执行收集任务!");
                            var newSc = new SetCollect()
                            {
                                c                = "SetCollect",
                                collectIndex     = positions[0],
                                fastenpositionID = position0.FastenPositionID,
                                cType            = "findWork",
                                Key              = sc.Key
                            };
                            return(collect(player, car, newSc, ref notifyMsg, out Mrr));
                        }
                        else
                        {
                            this.WebNotify(player, $"您处于迷失状态,未能到达远方!只能先到附近的[{position1.FastenPositionName}]执行收集任务!");
                            var newSc = new SetCollect()
                            {
                                c                = "SetCollect",
                                collectIndex     = positions[1],
                                fastenpositionID = position1.FastenPositionID,
                                cType            = "findWork",
                                Key              = sc.Key
                            };
                            return(collect(player, car, newSc, ref notifyMsg, out Mrr));
                        }
                    }
                    //var target = Program.dt.GetFpByIndex(victim.StartFPIndex);
                    //var collectIndexTarget = that.getCollectPositionsByDistance(target)[randomValue];
                }
            }
            RoleInGame boss;

            if (player.HasTheBoss(roomMain._Players, out boss))
            {
                return(collectPassBossAddress(player, boss, car, sc, ref notifyMsg, out Mrr));
                //return promotePassBossAddress(player, boss, car, sp, ref notifyMsg, out reason);
            }
            else
            {
                if (car.ability.leftVolume > 0)
                {
                    var from   = this.GetFromWhenUpdateCollect(that._Players[sc.Key], sc.cType, car);
                    var to     = getCollectPositionTo(sc.collectIndex);//  this.promoteMilePosition;
                    var fp1    = Program.dt.GetFpByIndex(from);
                    var fp2    = Program.dt.GetFpByIndex(to);
                    var fbBase = Program.dt.GetFpByIndex(player.StartFPIndex);
                    //var goPath = Program.dt.GetAFromB(fp1, fp2.FastenPositionID);
                    //var goPath = Program.dt.GetAFromB(from, to);
                    var goPath = that.GetAFromB_v2(from, to, player, ref notifyMsg);

                    //var returnPath = Program.dt.GetAFromB(to, player.StartFPIndex);
                    var returnPath = that.GetAFromB_v2(to, player.StartFPIndex, player, ref notifyMsg);
                    var goMile     = that.GetMile(goPath);
                    var returnMile = that.GetMile(returnPath);
                    if (car.ability.leftMile >= goMile + returnMile)
                    {
                        int startT;
                        this.EditCarStateWhenActionStartOK(player, ref car, to, fp1, goPath, ref notifyMsg, out startT);
                        var ro = commandWithTime.ReturningOjb.ojbWithoutBoss(returnPath);
                        //  Thread th=new Thread() { }
                        car.setState(player, ref notifyMsg, CarState.working);
                        StartArriavalThread(startT, 0, player, car, sc, ro, goMile, goPath);
                        //if (player.playerType == RoleInGame.PlayerType.NPC)
                        //    StartArriavalThread(startT, car, sc, ro, goMile);
                        //else
                        //    StartArriavalThread(startT, car, sc, ro, goMile);
                        //   StartSelectThread(0, startT, car, sc, ro, goMile, goPath);
                        //  getAllCarInfomations(sc.Key, ref notifyMsg);
                        Mrr = MileResultReason.Abundant;//返回原因
                        return(ro);
                    }

                    else if (car.ability.leftMile >= goMile)
                    {
                        //  printState(player, car, $"剩余里程为{car.ability.leftMile}去程{goMile},回程{returnMile},你去了回不来。所以安排返回");
                        Mrr = MileResultReason.CanNotReturn;
                        return(player.returningOjb);
                    }
                    else
                    {
                        // printState(player, car, $"剩余里程为{car.ability.leftMile}去程{goMile},回程{returnMile},去不了。所以安排返回");
                        Mrr = MileResultReason.CanNotReach;
                        return(player.returningOjb);
                        //   return false;
                    }
                }
                else
                {
                    Mrr = MileResultReason.MoneyIsNotEnougt;
                    this.WebNotify(player, "你身上的剩余收集空间不够啦!");
                    return(player.returningOjb);
                }
            }
        }
Пример #16
0
 public commandWithTime.ReturningOjb maindDo(RoleInGame player, Car car, Command c, ref List <string> notifyMsg, out MileResultReason mrr)
 {
     if (c.c == "SetCollect")
     {
         var sc = (SetCollect)c;
         return(this.collect(player, car, sc, ref notifyMsg, out mrr));
     }
     else
     {
         throw new Exception($"数据传输错误!(传出类型为{c.c})");
     }
 }