Esempio n. 1
0
 public bool carAbilitConditionsOk(RoleInGame player, Car car, Command c)
 {
     if (c.c == "SetCollect")
     {
         if (car.ability.leftVolume > 0)
         {
             SetCollect sc = (SetCollect)c;
             if (Program.dt.GetFpByIndex(that._collectPosition[sc.collectIndex]).FastenPositionID == sc.fastenpositionID)
             {
                 return(true);
             }
             else
             {
                 return(false);
             }
         }
         else
         {
             this.WebNotify(player, "小车已经没有多余手机容量了,已经安排返回!");
             return(false);
         }
     }
     else
     {
         return(false);
     }
 }
Esempio n. 2
0
 /// <summary>
 /// 收集失败,安排返回。
 /// </summary>
 /// <param name="car"></param>
 /// <param name="player"></param>
 /// <param name="sc"></param>
 /// <param name="notifyMsg"></param>
 private void collectFailedThenReturn(Car car, Player player, SetCollect sc, ref List <string> notifyMsg)
 {
     if (car.state == CarState.waitForCollectOrAttack || car.state == CarState.waitOnRoad)
     {
         //Console.Write($"现在剩余容量为{car.ability.leftVolume},总容量为{car.ability.Volume}");
         //Console.Write($"你装不下了!");
         Console.Write($"该汽车被安排回去了");
         var from   = GetFromWhenUpdateCollect(this._Players[sc.Key], sc.cType, car);
         int startT = 1;
         //var carKey = $"{sc.car}_{}";
         var returnPath_Record = this._Players[sc.Key].returningRecord[sc.car];
         // var returnPath_Record = this.returningRecord(carKey];
         Thread th = new Thread(() => setReturn(startT, new commandWithTime.returnning()
         {
             c          = "returnning",
             key        = sc.Key,
             car        = sc.car,
             returnPath = returnPath_Record,
             target     = from,
             changeType = CollectReturn,
         }));
         th.Start();
         //car.changeState++;//更改状态
         //getAllCarInfomations(sc.Key, ref notifyMsg);
     }
     else if (car.state == CarState.waitAtBaseStation)
     {
     }
 }
Esempio n. 3
0
 /// <summary>
 /// 启动到达线程
 /// </summary>
 /// <param name="startT">线程起始时间</param>
 /// <param name="car">执行任务小车</param>
 /// <param name="sc">传参对象</param>
 /// <param name="returnPath">计划的返还路径</param>
 /// <param name="goMile">去里程,主要用于里程统计!</param>
 private void StartArriavalThread(int startT, Car car, SetCollect sc, List <Model.MapGo.nyrqPosition> returnPath, int goMile)
 {
     //Thread th = new Thread(() => setArrive(startT, new commandWithTime.placeArriving()
     //{
     //    c = "placeArriving",
     //    key = sc.Key,
     //    car = sc.car,
     //    returnPath = returnPath,
     //    target = car.targetFpIndex,
     //    costMile = goMile
     //}));
     //th.Start();
 }
Esempio n. 4
0
 public bool conditionsOk(Command c, out string reason)
 {
     if (c.c == "SetCollect")
     {
         SetCollect sc = (SetCollect)c;
         if (string.IsNullOrEmpty(sc.cType))
         {
             reason = "";
             return(false);
         }
         else if (!(sc.cType == "findWork"))
         {
             reason = "";
             return(false);
         }
         else if (string.IsNullOrEmpty(sc.fastenpositionID))
         {
             reason = "";
             return(false);
         }
         else if (!CityRunFunction.FormatLike.LikeFsPresentCode(sc.fastenpositionID))
         {
             reason = "";
             return(false);
         }
         else if (sc.collectIndex < 0 || sc.collectIndex >= 38)
         {
             reason = "";
             return(false);
         }
         else if (Program.dt.GetFpByIndex(that._collectPosition[sc.collectIndex]).FastenPositionID != sc.fastenpositionID)
         {
             reason = "";
             return(false);
         }
         else
         {
             reason = "";
             return(true);
         }
     }
     else
     {
         reason = "";
         return(false);
     }
 }
Esempio n. 5
0
        private void MeetWithNPC(SetCollect sc)
        {
            var positionInt = this._collectPosition[sc.collectIndex];
            var npcs        = this.getGetAllNPC();

            for (var i = 0; i < npcs.Count; i++)
            {
                var npc = npcs[i];
                if (npc.Radius > Distance(positionInt, npc.StartFPIndex))
                {
                    if (!npc.Molester.Contains(sc.Key))
                    {
                        npc.Molester.Add(sc.Key);
                    }
                }
            }
            //   throw new NotImplementedException();
        }
Esempio n. 6
0
    /// <summary>
    /// Ge tEnemy Perfab list(バグってる、直す必要がある)
    /// </summary>
    /// <param name="ed">Enemy Date</param>
    public void GetEnemyPerfabs(string ed)
    {
        PlayerRoot pr = this.GetComponent <PlayerRoot>();
        SetCollect sc = JsonUtility.FromJson <SetCollect>(ed);
        float      p  = 0;

        foreach (var set in sc.sets)
        {
            p += set.probability;
        }
        float setNum = Random.Range(0, p);

        p = 0;
        foreach (var set in sc.sets)
        {
            p += set.probability;
            if (setNum <= p)
            {
                foreach (var name in set.enemy_set)
                {
                    switch (name)
                    {
                    case "A":
                        EnemyPrefabList.Add(pr.e_prefabList[1]);
                        break;

                    case "D":
                        EnemyPrefabList.Add(pr.e_prefabList[2]);
                        break;

                    case "M":
                        EnemyPrefabList.Add(pr.e_prefabList[3]);
                        break;

                    case "S":
                        EnemyPrefabList.Add(pr.e_prefabList[0]);
                        break;
                    }
                }
            }
        }
    }
Esempio n. 7
0
 internal static async Task <string> setCollect(State s, Collect collect)
 {
     if (collect.cType == "findWork")
     {
         {
             {
                 var getPosition = new SetCollect()
                 {
                     c   = "SetCollect",
                     Key = s.Key,
                     //car = "car" + m.Groups["car"].Value,
                     cType            = collect.cType,
                     fastenpositionID = collect.fastenpositionID,
                     collectIndex     = collect.collectIndex
                 };
                 var msg = Newtonsoft.Json.JsonConvert.SerializeObject(getPosition);
                 await Startup.sendInmationToUrlAndGetRes(Room.roomUrls[s.roomIndex], msg);
             }
         }
     }
     return("");
 }
Esempio n. 8
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;
            }
        }
Esempio n. 9
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));
            }
        }
Esempio n. 10
0
        internal async Task <string> updateCollect(SetCollect sc)
        {
            if (string.IsNullOrEmpty(sc.car))
            {
                return("");
            }
            else if (!(sc.car == "carA" || sc.car == "carB" || sc.car == "carC" || sc.car == "carD" || sc.car == "carE"))
            {
                return("");
            }
            else if (string.IsNullOrEmpty(sc.cType))
            {
                return("");
            }
            else if (!(sc.cType == "findWork"))
            {
                return("");
            }

            else
            {
                var           carIndex  = getCarIndex(sc.car);
                List <string> notifyMsg = new List <string>();
                lock (this.PlayerLock)
                {
                    if (this._Players.ContainsKey(sc.Key))
                    {
                        if (this._Players[sc.Key].Bust)
                        {
                        }
                        else
                        {
                            switch (sc.cType)
                            {
                            case "findWork":
                            {
                                var player = this._Players[sc.Key];
                                var car    = this._Players[sc.Key].getCar(carIndex);
                                if (car.purpose == Purpose.@null || car.purpose == Purpose.collect)
                                {
                                    switch (car.state)
                                    {
                                    case CarState.waitForCollectOrAttack:
                                    {
                                        if (car.purpose == Purpose.collect)
                                        {
                                            if (car.ability.leftVolume > 0)
                                            {
                                                MileResultReason result;
                                                CollectF(car, player, sc, ref notifyMsg, out result);
                                                if (result == MileResultReason.Abundant)
                                                {
                                                    printState(player, car, "已经在收集金钱的路上了");
                                                }
                                                else
                                                {
                                                    printState(player, car, $"里程问题,被安排回去");
                                                    //Console.Write($"现在剩余容量为{car.ability.leftVolume},总容量为{car.ability.Volume}");
                                                    //Console.Write($"你装不下了!");
                                                    collectFailedThenReturn(car, player, sc, ref notifyMsg);
                                                    if (result == MileResultReason.CanNotReach)
                                                    {
                                                        WebNotify(player, "您的剩余里程不足以支持您到达目的地!");
                                                    }
                                                    else if (result == MileResultReason.CanNotReturn)
                                                    {
                                                        WebNotify(player, "到达目的地后,您的剩余里程不足以支持您返回!");
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                printState(player, car, $"收集仓已满,被安排回去");
                                                collectFailedThenReturn(car, player, sc, ref notifyMsg);
                                                WebNotify(player, $"收集仓已满,被安排回去");
                                            }
                                        }
                                    }; break;

                                    case CarState.waitAtBaseStation:
                                    {
                                        /*
                                         * 在基地进行等待。收集不需要volume 或者business
                                         */
                                        if (car.purpose == Purpose.@null)
                                        {
                                            MileResultReason result;
                                            CollectF(car, player, sc, ref notifyMsg, out result);
                                            if (result == MileResultReason.Abundant)
                                            {
                                                printState(player, car, "已经在收集金钱的路上了");
                                            }
                                            else
                                            {
                                                printState(player, car, $"里程问题,未能启动!");
                                            }
                                        }
                                    }; break;

                                    case CarState.waitOnRoad:
                                    {
                                        if (car.purpose != Purpose.tax && car.purpose != Purpose.attack)
                                        {
                                            if (car.ability.leftVolume > 0)
                                            {
                                                MileResultReason result;
                                                CollectF(car, player, sc, ref notifyMsg, out result);
                                                if (result == MileResultReason.Abundant)
                                                {
                                                    printState(player, car, "已经在收集金钱的路上了");
                                                }
                                                else
                                                {
                                                    printState(player, car, $"里程问题,被安排回去");
                                                    collectFailedThenReturn(car, player, sc, ref notifyMsg);
                                                }
                                            }
                                            else
                                            {
                                                printState(player, car, $"收集仓已满,被安排回去");
                                                collectFailedThenReturn(car, player, sc, ref notifyMsg);
                                            }
                                        }
                                        else
                                        {
                                            Console.WriteLine("CarState.waitOnRoad car.purpose= Purpose.tax");
                                            //throw new Exception();
                                        }
                                    }; break;
                                    }
                                }
                            }; break;
                            }
                        }
                    }
                }

                for (var i = 0; i < notifyMsg.Count; i += 2)
                {
                    var url     = notifyMsg[i];
                    var sendMsg = notifyMsg[i + 1];
                    Console.WriteLine($"url:{url}");

                    await Startup.sendMsg(url, sendMsg);
                }
                return("");
            }
        }
Esempio n. 11
0
 public string updateCollect(SetCollect sc)
 {
     return(this.collectE.updateCollect(sc));
 }
Esempio n. 12
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);
            }
        }
Esempio n. 13
0
        //private void StartArriavalThread(int startT, Car car, SetCollect sc, commandWithTime.ReturningOjb ro, int goMile)
        //{
        //    this.startNewThread(startT + 100, new commandWithTime.placeArriving()
        //    {
        //        c = "placeArriving",
        //        key = sc.Key,
        //        //car = sc.car,
        //        returningOjb = ro,
        //        target = car.targetFpIndex,
        //        costMile = goMile
        //    }, this);
        //    //Thread th = new Thread(() => setArrive(startT, ));
        //    //th.Start();
        //}
        private void StartArriavalThread(int startT, int step, RoleInGame player, Car car, SetCollect sc, commandWithTime.ReturningOjb ro, int goMile, Node goPath)
        {
            System.Threading.Thread th = new System.Threading.Thread(() =>
            {
                if (step >= goPath.path.Count - 1)
                {
                    this.startNewThread(startT + 100, new commandWithTime.placeArriving()
                    {
                        c   = "placeArriving",
                        key = sc.Key,
                        //car = sc.car,
                        returningOjb = ro,
                        target       = car.targetFpIndex,
                        costMile     = goMile
                    }, this);
                }
                else
                {
                    if (step == 0)
                    {
                        this.ThreadSleep(startT);
                        if (player.playerType == RoleInGame.PlayerType.NPC || player.Bust)
                        {
                        }
                        else
                        {
                            StartSelectThread(goPath.path[step].selections, goPath.path[step].selectionCenter, (Player)player);
                        }

                        List <string> notifyMsg = new List <string>();
                        int newStartT;
                        step++;
                        if (step < goPath.path.Count)
                        {
                            EditCarStateAfterSelect(step, player, ref car, goPath, ref notifyMsg, out newStartT);
                        }
                        else
                        {
                            newStartT = 0;
                        }

                        car.setState(player, ref notifyMsg, CarState.working);
                        this.sendMsg(notifyMsg);
                        StartArriavalThread(newStartT, step, player, car, sc, ro, goMile, goPath);
                    }
                    else
                    {
                        this.ThreadSleep(startT);
                        if (player.playerType == RoleInGame.PlayerType.NPC || player.Bust)
                        {
                            this.ThreadSleep(500);
                        }
                        else if (startT != 0)
                        {
                            StartSelectThread(goPath.path[step].selections, goPath.path[step].selectionCenter, (Player)player);
                        }
                        step++;
                        List <string> notifyMsg = new List <string>();
                        int newStartT;
                        if (step < goPath.path.Count)
                        {
                            EditCarStateAfterSelect(step, player, ref car, goPath, ref notifyMsg, out newStartT);
                        }
                        // else if(step==goPath.path.Count-1)
                        //EditCarStateAfterSelect(step,player,ref car,)
                        else
                        {
                            throw new Exception("这种情况不会出现");
                        }
                        //newStartT = 0;
                        car.setState(player, ref notifyMsg, CarState.working);
                        this.sendMsg(notifyMsg);
                        StartArriavalThread(newStartT, step, player, car, sc, ro, goMile, goPath);
                    }
                }
            });
            th.Start();
            //Thread th = new Thread(() => setArrive(startT, ));
            //th.Start();
        }
Esempio n. 14
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);
                }
            }
        }
Esempio n. 15
0
 internal string updateCollect(SetCollect sc)
 {
     return(this.updateAction(this, sc, sc.Key));
 }
Esempio n. 16
0
        internal string updateCollect(SetCollect sc)
        {
            //if (string.IsNullOrEmpty(sc.car))
            //{
            //    return "";
            //}
            //else if (!(sc.car == "carA" || sc.car == "carB" || sc.car == "carC" || sc.car == "carD" || sc.car == "carE"))
            //{
            //    return "";
            //}
            //else
            if (string.IsNullOrEmpty(sc.cType))
            {
                return("");
            }
            else if (!(sc.cType == "findWork"))
            {
                return("");
            }
            if (string.IsNullOrEmpty(sc.fastenpositionID))
            {
                return("");
            }
            else if (!CityRunFunction.FormatLike.LikeFsPresentCode(sc.fastenpositionID))
            {
                return("");
            }
            else if (sc.collectIndex < 0 || sc.collectIndex >= 38)
            {
                return("");
            }
            else if (Program.dt.GetFpByIndex(this._collectPosition[sc.collectIndex]).FastenPositionID != sc.fastenpositionID)
            {
                return("");
            }
            else
            {
                //var carIndex = getCarIndex(sc.car);
                List <string> notifyMsg = new List <string>();
                lock (this.PlayerLock)
                {
                    if (this._Players.ContainsKey(sc.Key))
                    {
                        if (this._Players[sc.Key].Bust)
                        {
                        }
                        else
                        {
                            switch (sc.cType)
                            {
                            case "findWork":
                            {
                                var player = this._Players[sc.Key];
                                var car    = this._Players[sc.Key].getCar();
                                if (car.purpose == Purpose.@null || car.purpose == Purpose.collect)
                                {
                                    switch (car.state)
                                    {
                                    case CarState.waitForCollectOrAttack:
                                    {
                                        if (car.purpose == Purpose.collect)
                                        {
                                            if (car.ability.leftVolume > 0)
                                            {
                                                MileResultReason result;
                                                CollectF(car, player, sc, ref notifyMsg, out result);
                                                if (result == MileResultReason.Abundant)
                                                {
                                                    printState(player, car, "已经在收集金钱的路上了");
                                                }
                                                else
                                                {
                                                    printState(player, car, $"里程问题,被安排回去");
                                                    //Console.Write($"现在剩余容量为{car.ability.leftVolume},总容量为{car.ability.Volume}");
                                                    //Console.Write($"你装不下了!");
                                                    collectFailedThenReturn(car, player, sc, ref notifyMsg);
                                                    if (result == MileResultReason.CanNotReach)
                                                    {
                                                        WebNotify(player, "您的剩余里程不足以支持您到达目的地!");
                                                    }
                                                    else if (result == MileResultReason.CanNotReturn)
                                                    {
                                                        WebNotify(player, "到达目的地后,您的剩余里程不足以支持您返回!");
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                printState(player, car, $"收集仓已满,被安排回去");
                                                collectFailedThenReturn(car, player, sc, ref notifyMsg);
                                                WebNotify(player, $"收集仓已满,被安排回去");
                                            }
                                        }
                                    }; break;

                                    case CarState.waitAtBaseStation:
                                    {
                                        /*
                                         * 在基地进行等待。收集不需要volume 或者business
                                         */
                                        if (car.purpose == Purpose.@null)
                                        {
                                            MileResultReason result;
                                            CollectF(car, player, sc, ref notifyMsg, out result);
                                            if (result == MileResultReason.Abundant)
                                            {
                                                printState(player, car, "已经在收集金钱的路上了");
                                            }
                                            else
                                            {
                                                printState(player, car, $"里程问题,未能启动!");
                                            }
                                        }
                                    }; break;

                                    case CarState.waitOnRoad:
                                    {
                                        if (car.purpose != Purpose.tax && car.purpose != Purpose.attack)
                                        {
                                            if (car.ability.leftVolume > 0)
                                            {
                                                MileResultReason result;
                                                CollectF(car, player, sc, ref notifyMsg, out result);
                                                if (result == MileResultReason.Abundant)
                                                {
                                                    printState(player, car, "已经在收集金钱的路上了");
                                                }
                                                else
                                                {
                                                    printState(player, car, $"里程问题,被安排回去");
                                                    collectFailedThenReturn(car, player, sc, ref notifyMsg);
                                                }
                                            }
                                            else
                                            {
                                                printState(player, car, $"收集仓已满,被安排回去");
                                                collectFailedThenReturn(car, player, sc, ref notifyMsg);
                                            }
                                        }
                                        else
                                        {
                                            Console.WriteLine("CarState.waitOnRoad car.purpose= Purpose.tax");
                                            //throw new Exception();
                                        }
                                    }; break;
                                    }
                                    if (player.playerType == RoleInGame.PlayerType.player)
                                    {
                                        MeetWithNPC(sc);
                                    }
                                }
                            }; break;
                            }
                        }
                    }
                }

                for (var i = 0; i < notifyMsg.Count; i += 2)
                {
                    var url     = notifyMsg[i];
                    var sendMsg = notifyMsg[i + 1];
                    Console.WriteLine($"url:{url}");

                    Startup.sendMsg(url, sendMsg);
                }
                return("");
            }
        }
Esempio n. 17
0
        /// <summary>
        /// 修改小车相关属性
        /// </summary>
        /// <param name="car"></param>
        /// <param name="to"></param>
        /// <param name="fp1"></param>
        /// <param name="sc"></param>
        /// <param name="goPath"></param>
        private void EditCarStateWhenCollectStartOK(Player player, ref Car car, int to, Model.FastonPosition fp1, SetCollect sc, List <Model.MapGo.nyrqPosition> goPath, ref List <string> notifyMsg, out int startT)
        {
            car.targetFpIndex = to;                                 //A.更改小车目标,在其他地方引用。
            car.setPurpose(player, ref notifyMsg, Purpose.collect); //B.更改小车目的,用户操作控制
                                                                    //car.purpose = Purpose.collect;//B.更改小车目的,用户操作控制
                                                                    //    car.changeState++;//C.更改状态用去前台更新动画

            /*
             * 步骤C已经封装进 car.setAnimateData
             */
            /*
             * D.更新小车动画参数
             */

            var speed = car.ability.Speed;

            startT = 0;
            List <Data.PathResult> result;

            if (car.state == CarState.waitAtBaseStation)
            {
                result = getStartPositon(fp1, sc.car, ref startT);
            }
            else if (car.state == CarState.waitForCollectOrAttack)
            {
                result = new List <Data.PathResult>();
            }
            else if (car.state == CarState.waitOnRoad && car.ability.diamondInCar == "" && (car.purpose == Purpose.@null || car.purpose == Purpose.collect))
            {
                result = new List <Data.PathResult>();
            }
            else
            {
                throw new Exception($"未知情况!{Newtonsoft.Json.JsonConvert.SerializeObject(car)}");
            }
            car.setState(player, ref notifyMsg, CarState.roadForCollect);
            //car.state = CarState.roadForCollect;

            Program.dt.GetAFromBPoint(goPath, fp1, speed, ref result, ref startT);
            result.RemoveAll(item => item.t0 == item.t1);

            car.setAnimateData(player, ref notifyMsg, new AnimateData()
            {
                animateData = result,
                recordTime  = DateTime.Now
            });
            //car.animateData = new AnimateData()
            //{
            //    animateData = result,
            //    recordTime = DateTime.Now
            //};
        }
Esempio n. 18
0
        private string SetNPCToDoSomeThing(NPC npc, NPCAction selectV)
        {
            switch (selectV)
            {
            case NPCAction.Bust:
            {
                /*
                 * 0代表破产
                 */
                var    players = this.getGetAllPlayers();
                string keyToSetBust;
                if (SuitToSetBust(npc, players, out keyToSetBust))
                {
                    /*
                     * 如果适合破产,将设置破产
                     */
                    NpcDebugWrite($"{npc.PlayerName}({npc.Key})可以bust,其要对{this._Players[keyToSetBust].PlayerName}({keyToSetBust})进行破产清算!!!");
                    var sb = new SetBust()
                    {
                        c           = "SetBust",
                        Key         = npc.Key,
                        target      = this._Players[keyToSetBust].StartFPIndex,
                        targetOwner = keyToSetBust
                    };
                    return(updateBust(sb));
                }
                else
                {
                    NpcDebugWrite($"{npc.PlayerName}({npc.Key})不可以bust");
                    //执行攻击
                    return(SetNPCToDoSomeThing(npc, NPCAction.Attack));
                }
            };

            case NPCAction.Attack:
            {
                //   lock (this.PlayerLock)
                {
                    npc.ClearEnemiesAndMolester(this._Players);
                    if (npc.SuitToAttack())
                    {
                        if (npc.Enemies.Count > 0)
                        {
                            string enemyKey = npc.Enemies[this.rm.Next(npc.Enemies.Count)];
                            NpcDebugWrite($"{npc.PlayerName}({npc.Key})可以Attack,其要对{this._Players[enemyKey].PlayerName}({enemyKey})进行攻击!!!");
                            var sa = new SetAttack()
                            {
                                c           = "SetAttack",
                                Key         = npc.Key,
                                target      = this._Players[enemyKey].StartFPIndex,
                                targetOwner = enemyKey
                            };
                            return(updateAttack(sa));
                        }
                        else if (npc.Molester.Count > 0)
                        {
                            string molesterKey = npc.Molester[this.rm.Next(npc.Molester.Count)];
                            NpcDebugWrite($"{npc.PlayerName}({npc.Key})可以Attack,其要对{this._Players[molesterKey].PlayerName}({molesterKey})进行攻击!!!");
                            var sa = new SetAttack()
                            {
                                c           = "SetAttack",
                                Key         = npc.Key,
                                target      = this._Players[molesterKey].StartFPIndex,
                                targetOwner = molesterKey
                            };
                            return(updateAttack(sa));
                        }
                        else
                        {
                            NpcDebugWrite($"{npc.PlayerName}({npc.Key})不可以Attack");
                            return(SetNPCToDoSomeThing(npc, NPCAction.Tax));
                        }
                    }
                    else
                    {
                        NpcDebugWrite($"{npc.PlayerName}({npc.Key})不可以Attack");
                        return(SetNPCToDoSomeThing(npc, NPCAction.Tax));
                    }
                }
            };

            case NPCAction.Tax:
            {
                if (npc.SuitToCollectTax())
                {
                    var    taxInPositions = npc.TaxInPositionForeach();
                    var    position       = -1;
                    double minLength      = double.MaxValue;
                    for (int indexOfTaxPosition = 0; indexOfTaxPosition < taxInPositions.Count; indexOfTaxPosition++)
                    {
                        var length = Distance(taxInPositions[indexOfTaxPosition], npc.StartFPIndex);
                        if (length < minLength)
                        {
                            minLength = length;
                            position  = taxInPositions[indexOfTaxPosition];
                        }
                    }
                    if (position >= 0)
                    {
                        NpcDebugWrite($"{npc.PlayerName}({npc.Key})可以Tax,其要对{ Program.dt.GetFpByIndex(position).FastenPositionName}进行收取红包!!!");
                        var st = new SetTax()
                        {
                            c      = "SetTax",
                            target = position,
                            Key    = npc.Key
                        };
                        return(updateTax(st));
                    }
                    else
                    {
                        NpcDebugWrite($"{npc.PlayerName}({npc.Key})不可以Tax");
                        return(SetNPCToDoSomeThing(npc, NPCAction.Collect));
                    }
                }
                else
                {
                    NpcDebugWrite($"{npc.PlayerName}({npc.Key})不可以Tax");
                    return(SetNPCToDoSomeThing(npc, NPCAction.Collect));
                }
            };

            case NPCAction.Collect:
            {
                //  lock (this.PlayerLock)
                {
                    npc.ClearEnemiesAndMolester(this._Players);
                    if (npc.SuitToCollect())
                    {
                        //  var collectInPositions = npc.TaxInPositionForeach();
                        var    position     = -1;
                        var    collectIndex = -1;
                        double minLength    = double.MaxValue;
                        foreach (var item in this._collectPosition)
                        {
                            if (item.Value >= 0)
                            {
                                var length = Distance(item.Value, npc.StartFPIndex);
                                if (length < minLength)
                                {
                                    minLength    = length;
                                    position     = item.Value;
                                    collectIndex = item.Key;
                                }
                            }
                        }
                        if (collectIndex >= 0)
                        {
                            NpcDebugWrite($"{npc.PlayerName}({npc.Key})可以SetCollect");
                            var ut = new SetCollect()
                            {
                                c                = "SetCollect",
                                collectIndex     = collectIndex,
                                cType            = "findWork",
                                fastenpositionID = Program.dt.GetFpByIndex(position).FastenPositionID,
                                Key              = npc.Key
                            };
                            return(updateCollect(ut));
                        }
                        else
                        {
                            return(SetNPCToDoSomeThing(npc, NPCAction.Wait));
                        }
                    }
                    else
                    {
                        return(SetNPCToDoSomeThing(npc, NPCAction.Wait));
                    }
                }
            };

            case NPCAction.Wait:
            {
                if (npc.getCar().state == Car.CarState.waitForCollectOrAttack)
                {
                    var otr = new CommonClass.OrderToReturn()
                    {
                        c   = "OrderToReturn",
                        Key = npc.Key
                    };
                    return(OrderToReturn(otr));
                }
                else if (npc.getCar().state == Car.CarState.waitForTaxOrAttack)
                {
                    var otr = new CommonClass.OrderToReturn()
                    {
                        c   = "OrderToReturn",
                        Key = npc.Key
                    };
                    return(OrderToReturn(otr));
                }
                else if (npc.getCar().state == Car.CarState.waitOnRoad)
                {
                    var otr = new CommonClass.OrderToReturn()
                    {
                        c   = "OrderToReturn",
                        Key = npc.Key
                    };
                    return(OrderToReturn(otr));
                }
                else
                {
                    return("");
                }
            };

            default:
            {
                return("");
            }
            }
        }