Exemple #1
0
        internal static async Task <string> setToCollectTax(State s, Tax tax)
        {
            //  Regex r = new Regex("^car(?<car>[A-E]{1})_(?<key>[a-f0-9]{32})$");
            //   Regex rex_Target = new Regex("^(?<target>[a-f0-9]{32})$");

            //var m = r.Match(tax.car);
            // var m_Target = rex_Target.Match(attack.TargetOwner);
            //if (m.Success)//&& m_Target.Success)
            {
                //   var targetOwner = m_Target.Groups["target"].Value;

                // Console.WriteLine($"正则匹配成功:{m.Groups["car"] }+{m.Groups["key"] }");
                // if (m.Groups["key"].Value == s.Key)
                {
                    var getPosition = new SetTax()
                    {
                        c   = "SetTax",
                        Key = s.Key,
                        //       car = "car" + m.Groups["car"].Value,
                        target = tax.Target
                    };
                    var msg = Newtonsoft.Json.JsonConvert.SerializeObject(getPosition);
                    await Startup.sendInmationToUrlAndGetRes(Room.roomUrls[s.roomIndex], msg);
                }
            }
            return("");
        }
Exemple #2
0
        private void getTaxFailedThenReturn(Car car, Player player, SetTax st, ref List <string> notifyMsg)
        {
            if (car.state == CarState.waitForTaxOrAttack || car.state == CarState.waitOnRoad)
            {
                //Console.Write($"现在剩余业务为{car.ability.leftBusiness},总业务为{car.ability.Business}");
                //Console.Write($"你装不下了!");
                Console.Write($"该汽车被安排回去了");
                var    from              = getFromWhenDoCollectTax(this._Players[st.Key], car);
                int    startT            = 1;
                var    returnPath_Record = this._Players[st.Key].returningRecord[st.car];
                Thread th = new Thread(() => setReturn(startT, new commandWithTime.returnning()
                {
                    c          = "returnning",
                    key        = st.Key,
                    car        = st.car,
                    returnPath = returnPath_Record,
                    target     = from,
                    changeType = "tax-return",
                }));
                th.Start();

                // car.changeState++;//更改状态
            }
        }
Exemple #3
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;
            }
        }
Exemple #4
0
        ///// <summary>
        ///// 用于向税收受益者传送收益消息。
        ///// </summary>
        ///// <param name="key">一般是税收受益者的key</param>
        ///// <param name="placeIndex">地点ID</param>
        ///// <param name="msgsWithUrl">用于广播消息</param>
        //private void SendSingleTax2(string key, int placeIndex, ref List<string> msgsWithUrl)
        //{

        //    var player = this._Players[key];
        //    var url = this._Players[key].FromUrl;
        //    List<TaxWebObj> objs = new List<TaxWebObj>();
        //    if (this._Players[key].TaxInPosition.ContainsKey(placeIndex))
        //    {
        //        TaxNotify tn = new TaxNotify()
        //        {
        //            c = "TaxNotify",
        //            fp = Program.dt.GetFpByIndex(placeIndex),
        //            WebSocketID = this._Players[key].WebSocketID,
        //            tax = this._Players[key].TaxInPosition[placeIndex],
        //            target = placeIndex
        //        };

        //        var sendMsg = Newtonsoft.Json.JsonConvert.SerializeObject(tn);
        //        msgsWithUrl.Add(url);
        //        msgsWithUrl.Add(sendMsg);
        //    }



        //}


        internal async Task <string> updateTax(SetTax st)
        {
            if (string.IsNullOrEmpty(st.car))
            {
                return("");
            }
            else if (!(st.car == "carA" || st.car == "carB" || st.car == "carC" || st.car == "carD" || st.car == "carE"))
            {
                return("");
            }
            else
            {
                var           carIndex  = getCarIndex(st.car);
                List <string> notifyMsg = new List <string>();
                lock (this.PlayerLock)
                {
                    if (this._Players.ContainsKey(st.Key))
                    {
                        if (this._Players[st.Key].Bust)
                        {
                        }
                        else if (this._Players[st.Key].TaxContainsKey(st.target))
                        {
                            var player = this._Players[st.Key];
                            var car    = this._Players[st.Key].getCar(carIndex);
                            switch (car.state)
                            {
                            case CarState.waitAtBaseStation:
                            {
                                if (car.purpose == Purpose.@null)
                                {
                                    if (car.ability.leftBusiness > 0)
                                    {
                                        MileResultReason reason;
                                        DoCollectTaxF(player, car, st, ref notifyMsg, out reason);
                                        if (reason == MileResultReason.Abundant)
                                        {
                                            printState(player, car, "已经在收税的路上了");
                                        }
                                        else
                                        {
                                            printState(player, car, "没有能启动税收!");
                                        }
                                    }
                                    else
                                    {
                                        throw new Exception("从基地里出来,leftBusiness 就不为0!");
                                    }
                                }
                            }; break;

                            case CarState.waitOnRoad:
                            {
                                if (car.purpose == Purpose.@null || car.purpose == Purpose.tax)
                                {
                                    if (car.ability.leftBusiness > 0)
                                    {
                                        MileResultReason reason;
                                        DoCollectTaxF(player, car, st, ref notifyMsg, out reason);
                                        if (reason == MileResultReason.Abundant)
                                        {
                                            printState(player, car, "已经在税收的路上了");
                                        }
                                        else
                                        {
                                            printState(player, car, $"里程问题,被安排回去");
                                            getTaxFailedThenReturn(car, player, st, ref notifyMsg);
                                        }
                                    }
                                    else
                                    {
                                        printState(player, car, $"业务已满,被安排回去");
                                        getTaxFailedThenReturn(car, player, st, ref notifyMsg);
                                    }
                                }
                            }; break;

                            case CarState.waitForTaxOrAttack:
                            {
                                if (car.purpose == Purpose.tax)
                                {
                                    if (car.ability.leftBusiness > 0)
                                    {
                                        MileResultReason reason;
                                        DoCollectTaxF(player, car, st, ref notifyMsg, out reason);
                                        if (reason == MileResultReason.Abundant)
                                        {
                                            printState(player, car, "已经在税收的路上了");
                                        }
                                        else
                                        {
                                            printState(player, car, $"里程问题,被安排回去");
                                            getTaxFailedThenReturn(car, player, st, ref notifyMsg);
                                        }
                                    }
                                    else
                                    {
                                        printState(player, car, $"业务已满,被安排回去");
                                        getTaxFailedThenReturn(car, player, st, ref notifyMsg);
                                    }
                                }
                            }; break;
                            }
                        }
                        {
                            //  case "findWork":
                            {
                            };
                        }
                    }
                }

                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("");
            }
        }
Exemple #5
0
        internal string updateTax(SetTax st)
        {
            {
                List <string> notifyMsg = new List <string>();
                lock (this.PlayerLock)
                {
                    if (this._Players.ContainsKey(st.Key))
                    {
                        if (this._Players[st.Key].Bust)
                        {
                        }
                        else if (this._Players[st.Key].TaxContainsKey(st.target))
                        {
                            var player = this._Players[st.Key];
                            var car    = this._Players[st.Key].getCar();
                            switch (car.state)
                            {
                            case CarState.waitAtBaseStation:
                            {
                                if (car.purpose == Purpose.@null)
                                {
                                    if (car.ability.leftBusiness > 0)
                                    {
                                        MileResultReason reason;
                                        DoCollectTaxF(player, car, st, ref notifyMsg, out reason);
                                        if (reason == MileResultReason.Abundant)
                                        {
                                            printState(player, car, "已经在收税的路上了");
                                        }
                                        else
                                        {
                                            printState(player, car, "没有能启动税收!");
                                        }
                                    }
                                    else
                                    {
                                        throw new Exception("从基地里出来,leftBusiness 就不为0!");
                                    }
                                }
                            }; break;

                            case CarState.waitOnRoad:
                            {
                                if (car.purpose == Purpose.@null || car.purpose == Purpose.tax)
                                {
                                    if (car.ability.leftBusiness > 0)
                                    {
                                        MileResultReason reason;
                                        DoCollectTaxF(player, car, st, ref notifyMsg, out reason);
                                        if (reason == MileResultReason.Abundant)
                                        {
                                            printState(player, car, "已经在税收的路上了");
                                        }
                                        else
                                        {
                                            printState(player, car, $"里程问题,被安排回去");
                                            getTaxFailedThenReturn(car, player, st, ref notifyMsg);
                                        }
                                    }
                                    else
                                    {
                                        printState(player, car, $"业务已满,被安排回去");
                                        getTaxFailedThenReturn(car, player, st, ref notifyMsg);
                                    }
                                }
                            }; break;

                            case CarState.waitForTaxOrAttack:
                            {
                                if (car.purpose == Purpose.tax)
                                {
                                    if (car.ability.leftBusiness > 0)
                                    {
                                        MileResultReason reason;
                                        DoCollectTaxF(player, car, st, ref notifyMsg, out reason);
                                        if (reason == MileResultReason.Abundant)
                                        {
                                            printState(player, car, "已经在税收的路上了");
                                        }
                                        else
                                        {
                                            printState(player, car, $"里程问题,被安排回去");
                                            getTaxFailedThenReturn(car, player, st, ref notifyMsg);
                                        }
                                    }
                                    else
                                    {
                                        printState(player, car, $"业务已满,被安排回去");
                                        getTaxFailedThenReturn(car, player, st, ref notifyMsg);
                                    }
                                }
                            }; break;
                            }
                        }
                    }
                }

                for (var i = 0; i < notifyMsg.Count; i += 2)
                {
                    var url     = notifyMsg[i];
                    var sendMsg = notifyMsg[i + 1];
                    Startup.sendMsg(url, sendMsg);
                }
                return("");
            }
        }
Exemple #6
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("");
            }
            }
        }