internal async Task TellOtherPlayerMyFatigueDegree(string key) { List <string> notifyMsg = new List <string>(); lock (this.PlayerLock) { foreach (var item in this._Players) { if (item.Key == key) { } else { // item.Value.brokenParameterT1; brokenParameterT1RecordChanged(item.Key, key, this._Players[key].brokenParameterT1, ref notifyMsg); } } } 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); } }
internal async Task OrderToSubsidize(OrderToSubsidize ots) { List <string> notifyMsg = new List <string>(); if (BitCoin.Sign.checkSign(ots.signature, ots.Key, ots.address)) { lock (this.PlayerLock) if (this._Players.ContainsKey(ots.Key)) { if (!this._Players[ots.Key].Bust) { long subsidizeGet, subsidizeLeft; DalOfAddress.MoneyGet.GetSubsidizeAndLeft(ots.address, ots.value, out subsidizeGet, out subsidizeLeft); var player = this._Players[ots.Key]; player.MoneySet(player.Money + subsidizeGet, ref notifyMsg); // player.setSupportToPlayMoney(player.SupportToPlayMoney + subsidizeGet, ref notifyMsg); SendLeftMoney(player, subsidizeLeft, ots.address, ref notifyMsg); //player.SupportToPlay. } } } else { Console.WriteLine($"检验签名失败,{ots.Key},{ots.signature},{ots.address}"); } 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); } }
static async Task sendMsg(string fromUrl, string v, bool send) { await Startup.sendMsg(fromUrl, v); //if (send) // await Startup.sendMsg(fromUrl, v,true); }
internal async Task <string> SaveMoney(SaveMoney saveMoney) { // var doSaveMoney = false; long money = 0; List <string> notifyMsg = new List <string>(); lock (this.PlayerLock) { if (this._Players.ContainsKey(saveMoney.Key)) { if (this._Players[saveMoney.Key].Bust) { } else { var player = this._Players[saveMoney.Key]; switch (saveMoney.dType) { case "half": { money = this._Players[saveMoney.Key].MoneyForSave / 2; if (money > 0) { // doSaveMoney = true; player.MoneySet(player.Money - money, ref notifyMsg); } }; break; case "all": { money = this._Players[saveMoney.Key].MoneyForSave; if (money > 0) { // doSaveMoney = true; player.MoneySet(player.Money - money, ref notifyMsg); } }; break; } } } } for (var i = 0; i < notifyMsg.Count; i += 2) { var url = notifyMsg[i]; var sendMsg = notifyMsg[i + 1]; Console.WriteLine($"url:{url}"); if (!string.IsNullOrEmpty(url)) { await Startup.sendMsg(url, sendMsg); } } if (money > 0) { DalOfAddress.MoneyAdd.AddMoney(saveMoney.address, money); //Thread th = new Thread(() => ); //th.Start(); } return(""); }
private async void priceChanged(string priceType, long value) { List <string> msgs = new List <string>(); lock (this.PlayerLock) { foreach (var item in this._Players) { var player = item.Value; var obj = new BradDiamondPrice { c = "BradDiamondPrice", WebSocketID = player.WebSocketID, priceType = priceType, price = value }; var json = Newtonsoft.Json.JsonConvert.SerializeObject(obj); msgs.Add(player.FromUrl); msgs.Add(json); } } for (var i = 0; i < msgs.Count; i += 2) { await Startup.sendMsg(msgs[i], msgs[i + 1]); } }
internal async Task SendMsg(DialogMsg dm) { List <string> notifyMsg = new List <string>(); lock (this.PlayerLock) if (this._Players.ContainsKey(dm.Key)) { if (this._Players.ContainsKey(dm.To)) { notifyMsg.Add(this._Players[dm.Key].FromUrl); dm.WebSocketID = this._Players[dm.Key].WebSocketID; notifyMsg.Add(Newtonsoft.Json.JsonConvert.SerializeObject(dm)); notifyMsg.Add(this._Players[dm.To].FromUrl); dm.WebSocketID = this._Players[dm.To].WebSocketID; notifyMsg.Add(Newtonsoft.Json.JsonConvert.SerializeObject(dm)); } } for (var i = 0; i < notifyMsg.Count; i += 2) { var url = notifyMsg[i]; var sendMsg = notifyMsg[i + 1]; await Startup.sendMsg(url, sendMsg); } }
internal async Task <string> OrderToReturn(OrderToReturn otr) { if (string.IsNullOrEmpty(otr.car)) { return(""); } else if (!(otr.car == "carA" || otr.car == "carB" || otr.car == "carC" || otr.car == "carD" || otr.car == "carE")) { return(""); } else { List <string> notifyMsg = new List <string>(); lock (this.PlayerLock) { if (this._Players.ContainsKey(otr.Key)) { if (this._Players[otr.Key].Bust) { } else { var player = this._Players[otr.Key]; var carIndex = getCarIndex(otr.car); var car = this._Players[otr.Key].getCar(carIndex); switch (car.state) { case CarState.waitOnRoad: { SendOrderToReturnWhenCarIsStoping(otr, car); }; break; case CarState.waitForCollectOrAttack: { SendOrderToReturnWhenCarIsStoping(otr, car); }; break; case CarState.waitForTaxOrAttack: { SendOrderToReturnWhenCarIsStoping(otr, car); }; 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(""); } }
private async void setBack(int startT, commandWithTime.comeBack comeBack) { Thread.Sleep(startT); List <string> notifyMsg = new List <string>(); lock (this.PlayerLock) { var player = this._Players[comeBack.key]; var car = player.getCar(comeBack.car); if (car.state == CarState.returning) { // var moneyCanSave1 = player.GetMoneyCanSave(); player.MoneySet(player.Money + car.ability.costBusiness + car.ability.costVolume, ref notifyMsg); //player.Money += car.ability.costBusiness; //player.Money += car.ability.costVolume; //if (car.ability.subsidize > 0) //{ // player.setSupportToPlayMoney(player.SupportToPlayMoney + car.ability.subsidize, ref notifyMsg); // //player.SupportToPlay.Money += car.ability.subsidize; //} if (!string.IsNullOrEmpty(car.ability.diamondInCar)) { player.PromoteDiamondCount[car.ability.diamondInCar]++; SendPromoteCountOfPlayer(car.ability.diamondInCar, player, ref notifyMsg); } car.ability.Refresh(player, car, ref notifyMsg); car.Refresh(player, ref notifyMsg); //AbilityChanged(player, car, ref notifyMsg, "business"); //AbilityChanged(player, car, ref notifyMsg, "volume"); //AbilityChanged(player, car, ref notifyMsg, "mile"); printState(player, car, "执行了归位"); // var moneyCanSave2 = player.GetMoneyCanSave(); //if (moneyCanSave1 != moneyCanSave2) { // MoneyCanSaveChanged(player, moneyCanSave2, ref notifyMsg); } } else { throw new Exception($"{car.name}返回是状态为{this._Players[comeBack.key].getCar(comeBack.car).state}"); } } 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); } }
internal async void SetReturn() { List <string> notifyMsg = new List <string>(); lock (this.PlayerLock) { List <string> keysNeedToSetReturn = new List <string>(); foreach (var item in this._Players) { if (item.Value.Bust) { keysNeedToSetReturn.Add(item.Key); } } for (var i = 0; i < keysNeedToSetReturn.Count; i++) { List <int> indexAll = new List <int>() { 0, 1, 2, 3, 4 }; var needToSetReturn = (from item in indexAll where this._Players[keysNeedToSetReturn[i]].getCar(item).state == CarState.waitForCollectOrAttack || this._Players[keysNeedToSetReturn[i]].getCar(item).state == CarState.waitForTaxOrAttack || this._Players[keysNeedToSetReturn[i]].getCar(item).state == CarState.waitOnRoad select item).ToList(); for (var j = 0; j < needToSetReturn.Count; j++) { var carName = getCarName(needToSetReturn[j]); var car = this._Players[keysNeedToSetReturn[i]].getCar(needToSetReturn[j]); var returnPath_Record = this._Players[keysNeedToSetReturn[i]].returningRecord[carName]; var key = keysNeedToSetReturn[i]; Thread th = new Thread(() => setReturn(0, new commandWithTime.returnning() { c = "returnning", key = key, car = carName, returnPath = returnPath_Record, target = car.targetFpIndex, changeType = "sys-return", })); th.Start(); } } } 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); } }
private async Task SendAllTax(string key) { List <string> notifyMsg = new List <string>(); SendAllTax(key, ref notifyMsg); 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); } //ref msgsWithUrl }
/// <summary> /// 到达某一地点。变更里程,进行collcet交易。 /// </summary> /// <param name="startT"></param> /// <param name="pa"></param> private async void setArrive(int startT, commandWithTime.placeArriving pa) { /* * 到达地点某地点时,说明汽车在这个地点待命。 */ Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}开始执行setArrive"); Thread.Sleep(startT + 1); Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}开始执行setArrive正文"); List <string> notifyMsg = new List <string>(); bool needUpdateCollectState = false; lock (this.PlayerLock) { var player = this._Players[pa.key]; var car = this._Players[pa.key].getCar(pa.car); if (car.state == CarState.roadForCollect) { arriveThenDoCollect(ref player, ref car, pa, ref notifyMsg, out needUpdateCollectState); } else if (car.state == CarState.roadForTax) { arriveThenGetTax(ref player, ref car, pa, ref notifyMsg); //if (car.targetFpIndex == -1) //{ // throw new Exception("这个地点应该是等待的地点!"); //} } } 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); } Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}执行setReturn结束"); if (needUpdateCollectState) { await CheckAllPlayersCollectState(); } }
private async Task sendCarStateAndPurpose(string key) { List <string> notifyMsg = new List <string>(); var player = this._Players[key]; for (var i = 0; i < 5; i++) { var car = this._Players[key].getCar(i); SendStateOfCar(player, car, ref notifyMsg); SendPurposeOfCar(player, car, ref notifyMsg); } 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); } }
private async Task sendCarAbilityState(string key) { List <string> notifyMsg = new List <string>(); var player = this._Players[key]; for (var i = 0; i < 5; i++) { var car = this._Players[key].getCar(i); AbilityChanged2_0(player, car, ref notifyMsg, "business"); AbilityChanged2_0(player, car, ref notifyMsg, "volume"); AbilityChanged2_0(player, car, ref notifyMsg, "mile"); AbilityChanged2_0(player, car, ref notifyMsg, "speed"); } 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); } }
private async Task TellMeOthersRightAndDuty(string key) { List <string> notifyMsg = new List <string>(); if (this._Players.ContainsKey(key)) { var self = this._Players[key]; foreach (var item in this._Players) { if (item.Key != key) { tellMyRightAndDutyToOther(item.Value, self, ref notifyMsg); } } } for (var i = 0; i < notifyMsg.Count; i += 2) { var url = notifyMsg[i]; var sendMsg = notifyMsg[i + 1]; await Startup.sendMsg(url, sendMsg); } }
private async Task CheckPromoteState(string key, string promoteType) { string url = ""; string sendMsg = ""; lock (this.PlayerLock) if (this._Players.ContainsKey(key)) { if (this._Players[key].PromoteState[promoteType] == this.getPromoteState(promoteType)) { } else { var infomation = BaseInfomation.rm.GetPromoteInfomation(this._Players[key].WebSocketID, promoteType); url = this._Players[key].FromUrl; sendMsg = Newtonsoft.Json.JsonConvert.SerializeObject(infomation); this._Players[key].PromoteState[promoteType] = this.getPromoteState(promoteType); } } if (!string.IsNullOrEmpty(url)) { await Startup.sendMsg(url, sendMsg); } }
/// <summary> /// 商店-玩家索引。key,代表所在位置的 商店index,value(string)代表player.key /// </summary> // Dictionary<int, string> _FpOwner { get; set; } /// <summary> /// 获取收集金钱的状态 /// </summary> /// <param name="key"></param> /// <returns></returns> private async Task CheckCollectState(string key) { string url = ""; string sendMsg = ""; lock (this.PlayerLock) if (this._Players.ContainsKey(key)) { if (this._Players[key].Collect == this.collectPosition) { } else { var infomation = BaseInfomation.rm.GetCollectInfomation(this._Players[key].WebSocketID); url = this._Players[key].FromUrl; sendMsg = Newtonsoft.Json.JsonConvert.SerializeObject(infomation); this._Players[key].Collect = this.collectPosition; } } if (!string.IsNullOrEmpty(url)) { await Startup.sendMsg(url, sendMsg); } }
internal async void ClearPlayers() { // return; List <string> notifyMsg = new List <string>(); lock (this.PlayerLock) { List <string> keysOfAll = new List <string>(); List <string> keysNeedToClear = new List <string>(); foreach (var item in this._Players) { if (item.Value.Bust) { List <int> indexAll = new List <int>() { 0, 1, 2, 3, 4 }; var countAtBaseStation = (from indexItem in indexAll where item.Value.getCar(indexItem).state == CarState.waitAtBaseStation select indexItem).Count(); if (countAtBaseStation == 5) { keysNeedToClear.Add(item.Key); // this._Players.Remove(keysNeedToClear[i]); //for (var j = 0; j < keysOfAll.Count; j++) //{ // if (this._Players[keysOfAll[j]].others.ContainsKey(keysNeedToClear[i])) // { // this._Players[keysOfAll[j]].others.Remove(keysNeedToClear[i]); // } // if (this._Players[keysOfAll[j]].DebtsContainsKey(keysNeedToClear[i])) // { // this._Players[keysOfAll[j]].DebtsRemove(keysNeedToClear[i]); // } //} //continue; } else { keysOfAll.Add(item.Key); } } else { keysOfAll.Add(item.Key); } } for (var i = 0; i < keysNeedToClear.Count; i++) { this._Players.Remove(keysNeedToClear[i]); for (var j = 0; j < keysOfAll.Count; j++) { if (this._Players[keysOfAll[j]].othersContainsKey(keysNeedToClear[i])) { this._Players[keysOfAll[j]].othersRemove(keysNeedToClear[i], ref notifyMsg); } if (this._Players[keysOfAll[j]].DebtsContainsKey(keysNeedToClear[i])) { this._Players[keysOfAll[j]].DebtsRemove(keysNeedToClear[i], ref notifyMsg); } // if (this._Players[keysOfAll[j]].(keysNeedToClear[i])). } continue; } } 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); } }
internal async void Buy(SetBuyDiamond bd) { List <string> notifyMsg = new List <string>(); lock (this.PlayerLock) if (this._Players.ContainsKey(bd.Key)) { var player = this._Players[bd.Key]; if (player.Bust) { } //else if(player.) else { switch (bd.pType) { case "mile": { if (this.Market.mile_Price != null) { var calValue = this.Market.mile_Price.Value; if (player.Money >= calValue) { player.MoneySet(player.Money - calValue, ref notifyMsg); player.PromoteDiamondCount[bd.pType]++; SendPromoteCountOfPlayer(bd.pType, player, ref notifyMsg); this.Market.Send(bd.pType, 1); } } else { Console.WriteLine("市場沒開放"); } }; break; case "business": { if (this.Market.business_Price != null) { var calValue = this.Market.business_Price.Value; if (player.Money >= calValue) { player.MoneySet(player.Money - calValue, ref notifyMsg); player.PromoteDiamondCount[bd.pType]++; SendPromoteCountOfPlayer(bd.pType, player, ref notifyMsg); this.Market.Send(bd.pType, 1); } } else { Console.WriteLine("市場沒開放"); } }; break; case "volume": { if (this.Market.volume_Price != null) { var calValue = this.Market.volume_Price.Value; if (player.Money >= calValue) { player.MoneySet(player.Money - calValue, ref notifyMsg); player.PromoteDiamondCount[bd.pType]++; SendPromoteCountOfPlayer(bd.pType, player, ref notifyMsg); this.Market.Send(bd.pType, 1); } } else { Console.WriteLine("市場沒開放"); } }; break; case "speed": { if (this.Market.speed_Price != null) { var calValue = this.Market.speed_Price.Value; if (player.Money >= calValue) { player.MoneySet(player.Money - calValue, ref notifyMsg); player.PromoteDiamondCount[bd.pType]++; SendPromoteCountOfPlayer(bd.pType, player, ref notifyMsg); this.Market.Send(bd.pType, 1); } } else { Console.WriteLine("市場沒開放"); } }; 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); } }
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(""); } }
/* * 攻击的目的是为了增加股份。 * A玩家,拿100块钱攻击B玩家,B玩家的债务增加100,使用金额都增加90 * 当第一股东不是B玩家时,是A玩家时。A玩家有权对B进行破产清算。 */ internal async Task <string> updateAttack(SetAttack sa) { // Attack a = new Attack(sa, this); //a.doAttack(); if (string.IsNullOrEmpty(sa.car)) { return(""); } else if (!(sa.car == "carA" || sa.car == "carB" || sa.car == "carC" || sa.car == "carD" || sa.car == "carE")) { return(""); } else if (!(this._Players.ContainsKey(sa.targetOwner))) { return(""); } else if (this._Players[sa.targetOwner].StartFPIndex != sa.target) { return(""); } else if (sa.targetOwner == sa.Key) { #warning 这里要加日志,出现了自己攻击自己!!! return(""); } else { var carIndex = getCarIndex(sa.car); List <string> notifyMsg = new List <string>(); lock (this.PlayerLock) { if (this._Players.ContainsKey(sa.Key)) { if (this._Players[sa.Key].Bust) { } else { // case "findWork": { var player = this._Players[sa.Key]; var car = this._Players[sa.Key].getCar(carIndex); switch (car.state) { case CarState.waitAtBaseStation: { if (car.purpose == Purpose.@null) { var moneyIsEnoughToStart = giveMoneyFromPlayerToCarForAttack(player, car, ref notifyMsg); if (moneyIsEnoughToStart) { var state = CheckTargetState(sa.targetOwner); if (state == CarStateForBeAttacked.CanBeAttacked) { MileResultReason mrr; attack(player, car, sa, ref notifyMsg, out mrr); if (mrr == MileResultReason.Abundant) { } else { if (mrr == MileResultReason.CanNotReach) { } else if (mrr == MileResultReason.CanNotReturn) { } else if (mrr == MileResultReason.MoneyIsNotEnougt) { } giveMoneyFromCarToPlayer(player, car, ref notifyMsg); } // doAttack(player, car, sa, ref notifyMsg); } else if (state == CarStateForBeAttacked.HasBeenBust) { Console.WriteLine($"攻击对象已经破产!"); giveMoneyFromCarToPlayer(player, car, ref notifyMsg); } else if (state == CarStateForBeAttacked.NotExisted) { Console.WriteLine($"攻击对象已经退出了游戏!"); giveMoneyFromCarToPlayer(player, car, ref notifyMsg); } else { throw new Exception($"{state.ToString()}未注册!"); } } else { #warning 前端要提示 Console.WriteLine($"金钱不足以展开攻击!"); giveMoneyFromCarToPlayer(player, car, ref notifyMsg); //carsAttackFailedThenMustReturn(car, player, sa, ref notifyMsg); } } }; break; case CarState.waitOnRoad: { /* * 在接收到攻击指令时,如果小车在路上,说明, * 其上一个任务是抢能力宝石,结果是没抢到。其 * 目的应该应该为purpose=null */ if (car.purpose == Purpose.@null) { var state = CheckTargetState(sa.targetOwner); if (state == CarStateForBeAttacked.CanBeAttacked) { MileResultReason mrr; attack(player, car, sa, ref notifyMsg, out mrr); if (mrr == MileResultReason.Abundant) { } else if (mrr == MileResultReason.CanNotReach) { carsAttackFailedThenMustReturn(car, player, sa, ref notifyMsg); } else if (mrr == MileResultReason.CanNotReturn) { carsAttackFailedThenMustReturn(car, player, sa, ref notifyMsg); } else if (mrr == MileResultReason.MoneyIsNotEnougt) { carsAttackFailedThenMustReturn(car, player, sa, ref notifyMsg); } // doAttack(player, car, sa, ref notifyMsg); } else if (state == CarStateForBeAttacked.HasBeenBust) { carsAttackFailedThenMustReturn(car, player, sa, ref notifyMsg); Console.WriteLine($"攻击对象已经破产!"); } else if (state == CarStateForBeAttacked.NotExisted) { carsAttackFailedThenMustReturn(car, player, sa, ref notifyMsg); Console.WriteLine($"攻击对象已经退出了游戏!"); } else { throw new Exception($"{state.ToString()}未注册!"); } } }; break; case CarState.waitForTaxOrAttack: { if (car.purpose == Purpose.tax) { var state = CheckTargetState(sa.targetOwner); if (state == CarStateForBeAttacked.CanBeAttacked) { MileResultReason mrr; attack(player, car, sa, ref notifyMsg, out mrr); if (mrr == MileResultReason.Abundant) { } else if (mrr == MileResultReason.CanNotReach) { carsAttackFailedThenMustReturn(car, player, sa, ref notifyMsg); } else if (mrr == MileResultReason.CanNotReturn) { carsAttackFailedThenMustReturn(car, player, sa, ref notifyMsg); } else if (mrr == MileResultReason.MoneyIsNotEnougt) { carsAttackFailedThenMustReturn(car, player, sa, ref notifyMsg); } // doAttack(player, car, sa, ref notifyMsg); } else if (state == CarStateForBeAttacked.HasBeenBust) { Console.WriteLine($"攻击对象已经破产!"); carsAttackFailedThenMustReturn(car, player, sa, ref notifyMsg); } else if (state == CarStateForBeAttacked.NotExisted) { Console.WriteLine($"攻击对象已经退出了游戏!"); carsAttackFailedThenMustReturn(car, player, sa, ref notifyMsg); } else { throw new Exception($"{state.ToString()}未注册!"); } } }; break; case CarState.waitForCollectOrAttack: { if (car.purpose == Purpose.collect) { var state = CheckTargetState(sa.targetOwner); if (state == CarStateForBeAttacked.CanBeAttacked) { MileResultReason mrr; attack(player, car, sa, ref notifyMsg, out mrr); if (mrr == MileResultReason.Abundant) { } else if (mrr == MileResultReason.CanNotReach) { carsAttackFailedThenMustReturn(car, player, sa, ref notifyMsg); } else if (mrr == MileResultReason.CanNotReturn) { carsAttackFailedThenMustReturn(car, player, sa, ref notifyMsg); } else if (mrr == MileResultReason.MoneyIsNotEnougt) { carsAttackFailedThenMustReturn(car, player, sa, ref notifyMsg); } } else if (state == CarStateForBeAttacked.HasBeenBust) { Console.WriteLine($"攻击对象已经破产!"); carsAttackFailedThenMustReturn(car, player, sa, ref notifyMsg); } else if (state == CarStateForBeAttacked.NotExisted) { carsAttackFailedThenMustReturn(car, player, sa, ref notifyMsg); Console.WriteLine($"攻击对象已经退出了游戏!"); } else { throw new Exception($"{state.ToString()}未注册!"); } } }; break; } }; } } } for (var i = 0; i < notifyMsg.Count; i += 2) { var url = notifyMsg[i]; var sendMsg = notifyMsg[i + 1]; Console.WriteLine($"url:{url}"); if (!string.IsNullOrEmpty(url)) { await Startup.sendMsg(url, sendMsg); } } return(""); } }
private async Task <string> setBustF(int startT, commandWithTime.bustSet bustSet) { lock (this.PlayerLock) { var player = this._Players[bustSet.key]; var car = this._Players[bustSet.key].getCar(bustSet.car); if (car.purpose == Purpose.attack) { } else { Console.WriteLine($"{Newtonsoft.Json.JsonConvert.SerializeObject(car)}"); throw new Exception("car.purpose 未注册"); } } Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}开始执行setBustF"); Thread.Sleep(startT + 1); Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}开始执行setBustF正文"); List <string> notifyMsg = new List <string>(); bool needUpdatePlayers = false; lock (this.PlayerLock) { var player = this._Players[bustSet.key]; var car = this._Players[bustSet.key].getCar(bustSet.car); // car.targetFpIndex = this._Players[dor.key].StartFPIndex; if (bustSet.changeType == "Bust" && car.state == CarState.roadForAttack) { if (car.targetFpIndex == -1) { throw new Exception("居然来了一个没有目标的车!!!"); } else if (car.ability.diamondInCar != "") { throw new Exception("怎么能让满载宝石的车出来攻击?"); } else if (!(car.purpose == Purpose.attack)) { throw new Exception($"错误的purpose:{car.purpose}"); } else if (car.ability.costBusiness != 0) { throw new Exception($"执行破产业务时,错误的car.ability.costBusiness :{car.ability.costBusiness }"); } else { /* * 当到达地点时,有可能攻击攻击对象不存在。 * 也有可能攻击对象已破产。 * 还有正常情况。 * 这三种情况都要考虑到。 */ var attackMoney = 0; Console.WriteLine($"player:{player.Key},car{bustSet.car},bustMoney:{0}"); if (this._Players.ContainsKey(bustSet.victim)) { var victim = this._Players[bustSet.victim]; if (!victim.Bust) { // var m1 = victim.GetMoneyCanSave(); // var lastDebt = victim.LastDebt; if (player.DebtsContainsKey(bustSet.victim)) { /* * step1用 business 和 volume 先偿还债务! * s */ int k = 0; do { { var debt = Math.Min(car.ability.costBusiness, player.DebtsGet(bustSet.victim)); player.SetDebts(bustSet.victim, player.DebtsGet(bustSet.victim) - debt, ref notifyMsg); // player.Debts[dOwner.victim] -= debt; //car.ability.costBusiness -= debt; if (debt > 0) { car.ability.setCostBusiness(car.ability.costBusiness - debt, player, car, ref notifyMsg); } //AbilityChanged(player, car, ref notifyMsg, "business"); } { // player.DebtsGet var debt = Math.Min(car.ability.costVolume, player.DebtsGet(bustSet.victim)); player.SetDebts(bustSet.victim, player.DebtsGet(bustSet.victim) - debt, ref notifyMsg); //player.Debts[dOwner.victim] -= debt; //car.ability.costVolume -= debt; if (debt > 0) { car.ability.setCostVolume(car.ability.costVolume - debt, player, car, ref notifyMsg); } //AbilityChanged(player, car, ref notifyMsg, "volume"); } // attackMoney = car.ability.costBusiness + car.ability.costVolume; k++; if (k > 1000) { Console.ReadLine(); } }while (attackMoney != 0 && player.DebtsGet(bustSet.victim) != 0); if (player.DebtsGet(bustSet.victim) == 0) { player.DebtsRemove(bustSet.victim, ref notifyMsg); } } { //执行 攻击动作! // if (attackMoney > 0) { var attack = car.ability.costBusiness; if (attack > 0) { victim.AddDebts(player.Key, attack, ref notifyMsg); car.ability.setCostBusiness(car.ability.costBusiness - attack, player, car, ref notifyMsg); } // car.ability.costBusiness -= attack; //AbilityChanged(player, car, ref notifyMsg, "business"); } { var attack = car.ability.costVolume; if (attack > 0) { victim.AddDebts(player.Key, attack, ref notifyMsg); car.ability.setCostVolume(car.ability.costVolume - attack, player, car, ref notifyMsg); } //car.ability.costVolume -= attack; //AbilityChanged(player, car, ref notifyMsg, "volume"); } } // var m2 = victim.GetMoneyCanSave(); // if (m1 != m2) { /*执行破产过程*/ if (victim.TheLargestHolderKey == player.Key) { //victim.Bust = true; victim.SetBust(true, ref notifyMsg); } } { /*分配财富*/ var money = Math.Max(victim.Money - 500, 0); var shares = victim.Shares; List <string> keys = new List <string>(); var copy = victim.DebtsCopy; foreach (var item in copy) { keys.Add(item.Key); } if (victim.sumDebets > 0) { for (var i = 0; i < keys.Count; i++) { copy[keys[i]] = money * copy[keys[i]] / victim.sumDebets; } for (var i = 0; i < keys.Count; i++) { this._Players[keys[i]].AddTax(victim.StartFPIndex, Math.Max(1, copy[keys[i]]), ref notifyMsg); } } } } else { //这种情况也有可能存在。 } } else { //这种情况有可能存在. } /* * 无论什么情况,直接返回。 */ Thread th = new Thread(() => setReturn(0, new commandWithTime.returnning() { c = "returnning", key = bustSet.key, car = bustSet.car, returnPath = bustSet.returnPath,//returnPath_Record, target = bustSet.target, changeType = bustSet.changeType, })); th.Start(); ; } } else { throw new Exception("car.state == CarState.buying!或者 dor.changeType不是四种类型"); } } 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); } Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}执行setReturn结束"); if (needUpdatePlayers) { #warning 随着前台显示内容的丰富,这里要更新前台的player信息。 // await CheckAllPlayersPromoteState(dor.changeType); } return("ok"); }
internal async void Sell(SetSellDiamond ss) { List <string> notifyMsg = new List <string>(); lock (this.PlayerLock) if (this._Players.ContainsKey(ss.Key)) { var player = this._Players[ss.Key]; if (player.Bust) { } //else if(player.) else { switch (ss.pType) { case "mile": { if (this.Market.mile_Price != null) { var calValue = this.Market.mile_Price.Value; if (player.PromoteDiamondCount[ss.pType] > 0) { player.MoneySet(player.Money + calValue, ref notifyMsg); player.PromoteDiamondCount[ss.pType]--; SendPromoteCountOfPlayer(ss.pType, player, ref notifyMsg); this.Market.Receive(ss.pType, 1); } else { Console.WriteLine($"没有宝石"); } } else { Console.WriteLine("市場沒開放"); } }; break; case "business": { if (this.Market.business_Price != null) { var calValue = this.Market.business_Price.Value; if (player.PromoteDiamondCount[ss.pType] > 0) { player.MoneySet(player.Money + calValue, ref notifyMsg); player.PromoteDiamondCount[ss.pType]--; SendPromoteCountOfPlayer(ss.pType, player, ref notifyMsg); this.Market.Receive(ss.pType, 1); } else { Console.WriteLine($"没有宝石"); } } else { Console.WriteLine("市場沒開放"); } }; break; case "volume": { if (this.Market.volume_Price != null) { var calValue = this.Market.volume_Price.Value; if (player.PromoteDiamondCount[ss.pType] > 0) { player.MoneySet(player.Money + calValue, ref notifyMsg); player.PromoteDiamondCount[ss.pType]--; SendPromoteCountOfPlayer(ss.pType, player, ref notifyMsg); this.Market.Receive(ss.pType, 1); } else { Console.WriteLine($"没有宝石"); #warning 这里要提示前台 } } else { Console.WriteLine("市場沒開放"); } }; break; case "speed": { if (this.Market.speed_Price != null) { var calValue = this.Market.speed_Price.Value; if (player.PromoteDiamondCount[ss.pType] > 0) { player.MoneySet(player.Money + calValue, ref notifyMsg); player.PromoteDiamondCount[ss.pType]--; SendPromoteCountOfPlayer(ss.pType, player, ref notifyMsg); this.Market.Receive(ss.pType, 1); } else { Console.WriteLine($"没有宝石"); } } else { Console.WriteLine("市場沒開放"); } }; 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); } }
internal async Task <string> SetAbility(SetAbility sa) { if (string.IsNullOrEmpty(sa.car)) { return("wrong car"); } else if (!(sa.car == "carA" || sa.car == "carB" || sa.car == "carC" || sa.car == "carD" || sa.car == "carE")) { return($"wrong car:{sa.car}"); } else if (string.IsNullOrEmpty(sa.pType)) { return($"wrong pType:{sa.pType}"); } else if (!(sa.pType == "mile" || sa.pType == "business" || sa.pType == "volume" || sa.pType == "speed")) { return($"wrong pType:{sa.pType}");; } else { List <string> notifyMsg = new List <string>(); lock (this.PlayerLock) { if (this._Players.ContainsKey(sa.Key)) { var carIndex = getCarIndex(sa.car); var player = this._Players[sa.Key]; var car = player.getCar(carIndex); if (player.Bust) { WebNotify(player, "您已破产"); return($"{player.Key} go bust!"); #warning 这里要提示前台,已经进行破产清算了。 } else { switch (sa.pType) { case "mile": case "business": case "volume": case "speed": { if (player.PromoteDiamondCount[sa.pType] > 0) { car.ability.AbilityAdd(sa.pType, player, car, ref notifyMsg); player.PromoteDiamondCount[sa.pType]--; SendPromoteCountOfPlayer(sa.pType, player, ref notifyMsg); } }; break; } } } else { return($"not has player-{sa.Key}!"); } } 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("ok"); } }
internal async Task <string> updateBust(SetBust sb) { if (string.IsNullOrEmpty(sb.car)) { return(""); } else if (!(sb.car == "carA" || sb.car == "carB" || sb.car == "carC" || sb.car == "carD" || sb.car == "carE")) { return(""); } else if (!(this._Players.ContainsKey(sb.targetOwner))) { return(""); } else if (this._Players[sb.targetOwner].StartFPIndex != sb.target) { return(""); } else if (sb.targetOwner == sb.Key) { #warning 这里要加日志,出现了自己破产自己!!! return(""); } else { var carIndex = getCarIndex(sb.car); List <string> notifyMsg = new List <string>(); lock (this.PlayerLock) { if (this._Players.ContainsKey(sb.Key)) { if (this._Players[sb.Key].Bust) { } else { // case "findWork": { var player = this._Players[sb.Key]; var car = this._Players[sb.Key].getCar(carIndex); switch (car.state) { case CarState.waitAtBaseStation: { if (car.purpose == Purpose.@null) { { //var state = CheckTargetState(sa.targetOwner); if (this._Players[sb.targetOwner].TheLargestHolderKey == player.Key) { MileResultReason mrr; bust(player, car, sb, ref notifyMsg, out mrr); if (mrr == MileResultReason.Abundant) { } else { if (mrr == MileResultReason.CanNotReach) { } else if (mrr == MileResultReason.CanNotReturn) { } giveMoneyFromCarToPlayer(player, car, ref notifyMsg); } // doAttack(player, car, sa, ref notifyMsg); } else { Console.WriteLine($"攻击对象的最大股东不是你!"); giveMoneyFromCarToPlayer(player, car, ref notifyMsg); } //else if (state == CarStateForBeAttacked.NotExisted) //{ // Console.WriteLine($"攻击对象已经退出了游戏!"); // giveMoneyFromCarToPlayer(player, car, ref notifyMsg); //} //else //{ // throw new Exception($"{state.ToString()}未注册!"); //} } // else // { //#warning 前端要提示 // Console.WriteLine($"金钱不足以展开攻击!"); // //carsBustFailedThenMustReturn(car, player, sb, ref notifyMsg); // carsBustFailedThenMustReturn(car, player, sb, ref notifyMsg); // } } }; break; } }; } } } for (var i = 0; i < notifyMsg.Count; i += 2) { var url = notifyMsg[i]; var sendMsg = notifyMsg[i + 1]; Console.WriteLine($"url:{url}"); if (!string.IsNullOrEmpty(url)) { await Startup.sendMsg(url, sendMsg); } } return(""); } }
///// <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 async Task <string> updatePromote(SetPromote sp) { throw new Exception("作废!"); //{"Key":"1faff8e98891e33f6defc9597354c08b","pType":"mile","car":"carE","c":"SetPromote"} // Console.WriteLine($"{Newtonsoft.Json.JsonConvert.SerializeObject(sp)}"); //return ""; if (string.IsNullOrEmpty(sp.car)) { return("wrong car"); } else if (!(sp.car == "carA" || sp.car == "carB" || sp.car == "carC" || sp.car == "carD" || sp.car == "carE")) { return($"wrong car:{sp.car}"); } else if (string.IsNullOrEmpty(sp.pType)) { return($"wrong pType:{sp.pType}"); } else if (!(sp.pType == "mile" || sp.pType == "business" || sp.pType == "volume" || sp.pType == "speed")) { return($"wrong pType:{sp.pType}");; } else { var carIndex = getCarIndex(sp.car); List <string> notifyMsg = new List <string>(); var player = this._Players[sp.Key]; var car = player.getCar(carIndex); if (player.Bust) { WebNotify(player, "您已破产"); return($"{player.Key} go bust!"); #warning 这里要提示前台,已经进行破产清算了。 } else { lock (this.PlayerLock) { if (this._Players.ContainsKey(sp.Key)) { //if(sp.pType=="mi") switch (sp.pType) { case "mile": case "business": case "volume": case "speed": { switch (car.purpose) { case Purpose.@null: { switch (car.state) { case CarState.waitAtBaseStation: { // if(player.Money<) var moneyIsEnoughToStart = giveMoneyFromPlayerToCarForPromoting(player, car, sp.pType, ref notifyMsg); if (moneyIsEnoughToStart) { MileResultReason reason; var hasBeginToPromote = promote(player, car, sp, ref notifyMsg, out reason); if (hasBeginToPromote) { WebNotify(player, $"{car.name}在路上寻找能力宝石的路上了!!!"); printState(player, car, "开始在路上寻找能力宝石的路上了!!!"); } else { if (reason == MileResultReason.CanNotReach) { WebNotify(player, $"{car.name}的剩余里程不足以支持到达目的地!"); //WebNotify(player, $"资金不够,{car.name}未能上路!!!"); } else if (reason == MileResultReason.CanNotReturn) { WebNotify(player, $"到达目的地后,{car.name}的剩余里程不足以支持返回!"); } printState(player, car, "各种原因,不能开始!"); giveMoneyFromCarToPlayer(player, car, ref notifyMsg); } } else { WebNotify(player, $"钱不够了,由于本身待在基地,不用返回"); printState(player, car, "钱不够了,由于本身待在基地,不用返回。"); } }; break; case CarState.waitOnRoad: { if (car.ability.diamondInCar == "") { if (car.ability.SumMoneyCanForPromote >= this.promotePrice[sp.pType]) { MileResultReason reason; var hasBeginToPromote = promote(player, car, sp, ref notifyMsg, out reason); if (hasBeginToPromote) { WebNotify(player, $"{car.name}在路上寻找能力宝石的路上了!!!"); printState(player, car, $"已经在收集{sp.pType}宝石的路上了!"); } else { if (reason == MileResultReason.CanNotReach) { WebNotify(player, $"{car.name}的剩余里程不足以支持到达目的地!"); //WebNotify(player, $"资金不够,{car.name}未能上路!!!"); } else if (reason == MileResultReason.CanNotReturn) { WebNotify(player, $"到达目的地后,{car.name}的剩余里程不足以支持返回!"); } printState(player, car, "收集宝石剩余里程不足,必须立即返回!"); setReturnWhenPromoteFailed(sp, car); } } else { WebNotify(player, $"资金不够,{car.name}被安排返航!!!"); printState(player, car, "在路上走的车,想找宝石,钱不够啊,必须立即返回!"); Console.WriteLine($"宝石的价格{this.promotePrice[sp.pType]},钱不够啊,{car.ability.costBusiness},{car.ability.costVolume}!"); #warning 在路上,由于资金不够,这里没有能测到。 setReturnWhenPromoteFailed(sp, car); } } else { Console.WriteLine("在路上走的车,有了宝石,居然没返回!"); //throw new Exception(); } }; break; default: { var msg = $"{car.state.ToString()}状态下不能提升能力!"; Console.WriteLine(msg); }; break; } }; break; default: { Console.WriteLine($"{car.purpose}状态下不能获取提升能力宝石了!"); return($"{car.purpose}-state can not do action !"); }; break; } }; break; } } else { return($"not has player-{sp.Key}!"); } } } 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("ok"); } }
/// <summary> /// /// </summary> /// <param name="startT"></param> /// <param name="dor"></param> private async void setDiamondOwner(int startT, commandWithTime.diamondOwner dor) { Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}开始执行setDiamondOwner"); Thread.Sleep(startT + 1); Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}开始执行setDiamondOwner正文"); List <string> notifyMsg = new List <string>(); bool needUpdatePromoteState = false; lock (this.PlayerLock) { var player = this._Players[dor.key]; var car = this._Players[dor.key].getCar(dor.car); { if ((dor.changeType == "mile" || dor.changeType == "business" || dor.changeType == "volume" || dor.changeType == "speed") && car.state == CarState.buying) { if (car.targetFpIndex == -1) { throw new Exception("居然来了一个没有目标的车!!!"); } if (car.ability.diamondInCar != "") { throw new Exception("怎么能让满载车出来购买?"); } if (!(car.purpose == Purpose.collect || car.purpose == Purpose.@null || car.purpose == Purpose.tax)) { //在执行抢能力提升宝石是,有可能之前是在基地等待 car.purpose == Purpose.@null //在执行抢能力提升宝石时,也有可能之前是在完成收集任务之后 car.purpose == Purpose.collect //在执行抢能力提升宝石时,也有可能之前是在完成收集保护费之后 car.purpose == Purpose.tax throw new Exception($"错误的purpose:{car.purpose}"); } if (dor.target == this.getPromoteState(dor.changeType)) { /* * 这里,整个流程,保证玩家在开始任务的时候,钱是够的。如果不够,要爆异常的。 */ var needMoney = this.promotePrice[dor.changeType]; if (car.ability.SumMoneyCanForPromote < needMoney) { /* * 这里,在逻辑上保证了car.ability.SumMoneyCanForPromote >=needMoney * 首先在出发的时候就进行判断 * 其次,在promote地点选择的时候,会避免使用玩家的target. * 最后保证了dor.target == this.getPromoteState(dor.changeType) 条件下, * 肯定car.ability.SumMoneyCanForPromote >= needMoney */ throw new Exception("钱不够,还让执行setDiamondOwner"); } Console.WriteLine($"需要用钱支付"); printState(player, car, $"支付前:costBusiness:{car.ability.costBusiness},costVolume:{car.ability.costVolume},needMoney:{needMoney}"); //var costBusiness1 = car.ability.costBusiness; // bool needToUpdateCostBussiness; car.ability.payForPromote(needMoney, player, car, ref notifyMsg);//用汽车上的钱支付 //if (needToUpdateCostBussiness) // AbilityChanged(player, car, ref notifyMsg, "business"); printState(player, car, $"支付后:costBusiness:{car.ability.costBusiness},costVolume:{car.ability.costVolume},needMoney:{needMoney}"); setPromtePosition(dor.changeType); //this.promoteMilePosition = GetRandomPosition(); needUpdatePromoteState = true; car.ability.setDiamondInCar(dor.changeType, player, car, ref notifyMsg); // car.ability.diamondInCar = dor.changeType; printState(player, car, "执行购买过程!需要立即执行返回!"); Thread th = new Thread(() => setReturn(0, new commandWithTime.returnning() { c = "returnning", key = dor.key, car = dor.car, returnPath = dor.returnPath,//returnPath_Record, target = dor.target, changeType = dor.changeType, })); th.Start(); ; } else { Console.WriteLine("由于迟到没有执行购买过程!"); car.ability.setCostMiles(car.ability.costMiles + dor.costMile, player, car, ref notifyMsg); // car.ability.costMiles += dor.costMile; // AbilityChanged(player, car, ref notifyMsg, "mile"); Console.WriteLine($"{player.PlayerName}的{dor.car}执行完购买宝石过程,由于没有抢到,停在路上,待命中...!"); carParkOnRoad(dor.target, ref car, player, ref notifyMsg); if (this.debug) { } if (car.purpose == Purpose.@null && car.state == CarState.buying) { car.setState(player, ref notifyMsg, CarState.waitOnRoad); //car.state = CarState.waitOnRoad; this._Players[dor.key].returningRecord[dor.car] = dor.returnPath; } else { throw new Exception($"错误的目标{car.purpose } 和 状态{car.state}"); } // car.state = CarState.waitOnRoad; } } else { throw new Exception("car.state == CarState.buying!或者 dor.changeType不是四种类型"); } } } 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); } Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}执行setReturn结束"); if (needUpdatePromoteState) { await CheckAllPlayersPromoteState(dor.changeType); } }
//const double debtAssetsScale = 1.2; /// <summary> /// /// </summary> /// <param name="startT"></param> /// <param name="dor"></param> private async void setDebt(int startT, commandWithTime.debtOwner dOwner) { /* * 先还钱,再借给钱! */ lock (this.PlayerLock) { var player = this._Players[dOwner.key]; var car = this._Players[dOwner.key].getCar(dOwner.car); if (car.purpose == Purpose.attack) { } else { Console.WriteLine($"{Newtonsoft.Json.JsonConvert.SerializeObject(car)}"); throw new Exception("car.purpose 未注册"); } } Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}开始执行setDebt"); Thread.Sleep(startT + 1); Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}开始执行setDebt正文"); List <string> notifyMsg = new List <string>(); bool needUpdatePlayers = false; lock (this.PlayerLock) { var player = this._Players[dOwner.key]; var car = this._Players[dOwner.key].getCar(dOwner.car); // car.targetFpIndex = this._Players[dor.key].StartFPIndex; if (dOwner.changeType == "Attack" && car.state == CarState.roadForAttack) { if (car.targetFpIndex == -1) { throw new Exception("居然来了一个没有目标的车!!!"); } else if (car.ability.diamondInCar != "") { throw new Exception("怎么能让满载宝石的车出来攻击?"); } else if (!(car.purpose == Purpose.attack)) { throw new Exception($"错误的purpose:{car.purpose}"); } else if (car.ability.costBusiness + car.ability.costVolume <= 0) { #warning 出来攻击时,costBusiness>0 throw new Exception($"错误的car.ability.costBusiness :{car.ability.costBusiness }"); } else { /* * 当到达地点时,有可能攻击对象不存在。 * 也有可能攻击对象已破产。 * 还有正常情况。 * 这三种情况都要考虑到。 */ var attackMoney = car.ability.costBusiness + car.ability.costVolume; Console.WriteLine($"player:{player.Key},car{dOwner.car},attackMoney:{attackMoney}"); if (this._Players.ContainsKey(dOwner.victim)) { var victim = this._Players[dOwner.victim]; if (!victim.Bust) { // var m1 = victim.GetMoneyCanSave(); // var lastDebt = victim.LastDebt; if (player.DebtsContainsKey(dOwner.victim)) { /* * step1用 business 和 volume 先偿还债务! * s */ int k = 0; do { { var debt = Math.Min(car.ability.costBusiness, player.DebtsGet(dOwner.victim)); player.SetDebts(dOwner.victim, player.DebtsGet(dOwner.victim) - debt, ref notifyMsg); // player.Debts[dOwner.victim] -= debt; //car.ability.costBusiness -= debt; if (debt > 0) { car.ability.setCostBusiness(car.ability.costBusiness - debt, player, car, ref notifyMsg); } //AbilityChanged(player, car, ref notifyMsg, "business"); } { // player.DebtsGet var debt = Math.Min(car.ability.costVolume, player.DebtsGet(dOwner.victim)); player.SetDebts(dOwner.victim, player.DebtsGet(dOwner.victim) - debt, ref notifyMsg); //player.Debts[dOwner.victim] -= debt; //car.ability.costVolume -= debt; if (debt > 0) { car.ability.setCostVolume(car.ability.costVolume - debt, player, car, ref notifyMsg); } //AbilityChanged(player, car, ref notifyMsg, "volume"); } attackMoney = car.ability.costBusiness + car.ability.costVolume; k++; if (k > 1000) { Console.WriteLine("出现了金钱没有清0的状况!"); Console.ReadLine(); } }while (attackMoney != 0 && player.DebtsGet(dOwner.victim) != 0); if (player.DebtsGet(dOwner.victim) == 0) { player.DebtsRemove(dOwner.victim, ref notifyMsg); } } { //执行 攻击动作! { var attack = car.ability.costBusiness; if (attack > 0) { victim.AddDebts(player.Key, attack, ref notifyMsg); car.ability.setCostBusiness(car.ability.costBusiness - attack, player, car, ref notifyMsg); } // car.ability.costBusiness -= attack; //AbilityChanged(player, car, ref notifyMsg, "business"); } { var attack = car.ability.costVolume; if (attack > 0) { victim.AddDebts(player.Key, attack, ref notifyMsg); car.ability.setCostVolume(car.ability.costVolume - attack, player, car, ref notifyMsg); } } } { /* * A.告诉被攻击者,还有多少权利,多少义务。 * B.告诉攻击者,还有多少权利,多少义务。 */ tellMyRightAndDutyToOther(player, victim, ref notifyMsg); tellMyRightAndDutyToOther(victim, player, ref notifyMsg); } } else { //这种情况也有可能存在。 } } else { //这种情况有可能存在. } /* * 无论什么情况,直接返回。 */ Thread th = new Thread(() => setReturn(0, new commandWithTime.returnning() { c = "returnning", key = dOwner.key, car = dOwner.car, returnPath = dOwner.returnPath,//returnPath_Record, target = dOwner.target, changeType = dOwner.changeType, })); th.Start(); ; } } else { throw new Exception("car.state == CarState.buying!或者 dor.changeType不是四种类型"); } } 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); } Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}执行setReturn结束"); if (needUpdatePlayers) { #warning 随着前台显示内容的丰富,这里要更新前台的player信息。 // await CheckAllPlayersPromoteState(dor.changeType); } }
//更新玩家的贡献率! /// <summary> /// 更新玩家的资金回报率! /// </summary> internal async void UpdatePlayerFatigueDegree() { /* * 后台,调整了玩家的资金回报率(游戏难度),要进行广播。告诉所有参与的人! */ List <string> notifyMsg = new List <string>(); List <string> keysOfAll = new List <string>(); lock (this.PlayerLock) { // List<string> keysOfAll = new List<string>(); foreach (var item in this._Players) { if (!item.Value.Bust) { keysOfAll.Add(item.Key); } } for (var i = 0; i < keysOfAll.Count; i++) { if (this.rm.Next(0, 5) != 0) { continue; } var recordValue = this._Players[keysOfAll[i]].brokenParameterT1 + 1; this._Players[keysOfAll[i]].setBrokenParameterT1(recordValue, ref notifyMsg); // await TellOtherPlayerMyFatigueDegree(getPosition.Key); for (var j = 0; j < keysOfAll.Count; j++) { if (i != j) { if (this._Players[keysOfAll[j]].othersContainsKey(keysOfAll[i])) { var other = this._Players[keysOfAll[j]].GetOthers(keysOfAll[i]); if (other.brokenParameterT1Record != recordValue) { other.setBrokenParameterT1Record(recordValue, ref notifyMsg); tellMyRightAndDutyToOther(this._Players[keysOfAll[i]], this._Players[keysOfAll[j]], ref notifyMsg); } } } } } } 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); } for (var i = 0; i < keysOfAll.Count; i++) { await TellOtherPlayerMyFatigueDegree(keysOfAll[i]); } // return; //List<string> notifyMsg = new List<string>(); //lock (this.PlayerLock) //{ // List<string> keysOfAll = new List<string>(); // List<string> keysNeedToClear = new List<string>(); // foreach (var item in this._Players) // { // if (item.Value.Bust) // { // List<int> indexAll = new List<int>() // { // 0,1,2,3,4 // }; // var countAtBaseStation = (from indexItem in indexAll // where // item.Value.getCar(indexItem).state == CarState.waitAtBaseStation // select indexItem).Count(); // if (countAtBaseStation == 5) // { // keysNeedToClear.Add(item.Key); // // this._Players.Remove(keysNeedToClear[i]); // //for (var j = 0; j < keysOfAll.Count; j++) // //{ // // if (this._Players[keysOfAll[j]].others.ContainsKey(keysNeedToClear[i])) // // { // // this._Players[keysOfAll[j]].others.Remove(keysNeedToClear[i]); // // } // // if (this._Players[keysOfAll[j]].DebtsContainsKey(keysNeedToClear[i])) // // { // // this._Players[keysOfAll[j]].DebtsRemove(keysNeedToClear[i]); // // } // //} // //continue; // } // else // { // keysOfAll.Add(item.Key); // } // } // else // { // keysOfAll.Add(item.Key); // } // } // for (var i = 0; i < keysNeedToClear.Count; i++) // { // this._Players.Remove(keysNeedToClear[i]); // for (var j = 0; j < keysOfAll.Count; j++) // { // if (this._Players[keysOfAll[j]].othersContainsKey(keysNeedToClear[i])) // { // this._Players[keysOfAll[j]].othersRemove(keysNeedToClear[i], ref notifyMsg); // } // if (this._Players[keysOfAll[j]].DebtsContainsKey(keysNeedToClear[i])) // { // this._Players[keysOfAll[j]].DebtsRemove(keysNeedToClear[i], ref notifyMsg); // } // } // continue; // } //} //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); //} }
/// <summary> /// set return 本身自带广播功能 /// </summary> /// <param name="startT"></param> /// <param name="cmp"></param> private async void setReturn(int startT, commandWithTime.returnning cmp) { Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}开始执行setReturn"); Thread.Sleep(startT + 1); Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}开始执行setReturn正文"); List <string> notifyMsg = new List <string>(); bool needUpdatePromoteState = false; lock (this.PlayerLock) { var player = this._Players[cmp.key]; var car = this._Players[cmp.key].getCar(cmp.car); car.targetFpIndex = this._Players[cmp.key].StartFPIndex; if ((cmp.changeType == "mile" || cmp.changeType == "business" || cmp.changeType == "volume" || cmp.changeType == "speed") && car.state == CarState.buying) { ReturnThenSetComeBack(player, car, cmp, ref notifyMsg); } else if ((cmp.changeType == "mile" || cmp.changeType == "business" || cmp.changeType == "volume" || cmp.changeType == "speed") && car.state == CarState.waitOnRoad) { /* * 此项对应的条件是在找能力提升宝石过程中,里程不够然后安排返回。 * */ ReturnThenSetComeBack(player, car, cmp, ref notifyMsg); } else if (cmp.changeType == CollectReturn && (car.state == CarState.waitForCollectOrAttack || car.state == CarState.waitOnRoad)) { ReturnThenSetComeBack(player, car, cmp, ref notifyMsg); } else if (cmp.changeType == "tax-return" && (car.state == CarState.waitForTaxOrAttack || car.state == CarState.waitOnRoad)) { ReturnThenSetComeBack(player, car, cmp, ref notifyMsg); } else if (cmp.changeType == "Attack" && car.state == CarState.roadForAttack && car.purpose == Purpose.attack) { ReturnThenSetComeBack(player, car, cmp, ref notifyMsg); } else if (cmp.changeType == AttackFailedReturn) { ReturnThenSetComeBack(player, car, cmp, ref notifyMsg); } else if (cmp.changeType == "sys-return") { //if (car.state == CarState.roadForAttack) { ReturnThenSetComeBack(player, car, cmp, ref notifyMsg); } } else if (cmp.changeType == "orderToReturn") { ReturnThenSetComeBack(player, car, cmp, ref notifyMsg); } else if (cmp.changeType == "Bust" && car.state == CarState.roadForAttack && car.purpose == Purpose.attack) { ReturnThenSetComeBack(player, car, cmp, ref notifyMsg); } else { var json = Newtonsoft.Json.JsonConvert.SerializeObject(car); for (var i = 0; i < 100; i++) { Console.WriteLine("↓↓↓↓↓出现异常↓↓↓↓↓"); } Console.WriteLine(json); DebugRecord.FileRecord($@"-----setReturn 以下情况未注册----- {json} -----setReturn 以下情况未注册-----"); } } 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); } Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}执行setReturn结束"); if (needUpdatePromoteState) { await CheckAllPlayersPromoteState(cmp.changeType); } }