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(""); }
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++;//更改状态 } }
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; } }
///// <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(""); } }
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(""); } }
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(""); } } }