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); } }
/// <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) { } }
/// <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(); }
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); } }
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(); }
/// <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; } } } } }
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(""); }
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; } }
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)); } }
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(""); } }
public string updateCollect(SetCollect sc) { return(this.collectE.updateCollect(sc)); }
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); } }
//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(); }
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); } } }
internal string updateCollect(SetCollect sc) { return(this.updateAction(this, sc, sc.Key)); }
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(""); } }
/// <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 //}; }
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(""); } } }