Example #1
0
        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);
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
        static async Task sendMsg(string fromUrl, string v, bool send)
        {
            await Startup.sendMsg(fromUrl, v);

            //if (send)
            //    await Startup.sendMsg(fromUrl, v,true);
        }
Example #4
0
        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("");
        }
Example #5
0
        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]);
            }
        }
Example #6
0
        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);
            }
        }
Example #7
0
        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("");
            }
        }
Example #8
0
        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);
            }
        }
Example #9
0
        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);
            }
        }
Example #10
0
        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
        }
Example #11
0
        /// <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();
            }
        }
Example #12
0
        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);
            }
        }
Example #13
0
        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);
            }
        }
Example #14
0
        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);
            }
        }
Example #15
0
        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);
            }
        }
Example #16
0
        /// <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);
            }
        }
Example #17
0
        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);
            }
        }
Example #18
0
        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);
            }
        }
Example #19
0
        internal async Task <string> updateCollect(SetCollect sc)
        {
            if (string.IsNullOrEmpty(sc.car))
            {
                return("");
            }
            else if (!(sc.car == "carA" || sc.car == "carB" || sc.car == "carC" || sc.car == "carD" || sc.car == "carE"))
            {
                return("");
            }
            else if (string.IsNullOrEmpty(sc.cType))
            {
                return("");
            }
            else if (!(sc.cType == "findWork"))
            {
                return("");
            }

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

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

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

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

                    await Startup.sendMsg(url, sendMsg);
                }
                return("");
            }
        }
Example #20
0
        /*
         * 攻击的目的是为了增加股份。
         * 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("");
            }
        }
Example #21
0
        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");
        }
Example #22
0
        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);
            }
        }
Example #23
0
        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");
            }
        }
Example #24
0
        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("");
            }
        }
Example #25
0
        ///// <summary>
        ///// 用于向税收受益者传送收益消息。
        ///// </summary>
        ///// <param name="key">一般是税收受益者的key</param>
        ///// <param name="placeIndex">地点ID</param>
        ///// <param name="msgsWithUrl">用于广播消息</param>
        //private void SendSingleTax2(string key, int placeIndex, ref List<string> msgsWithUrl)
        //{

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

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



        //}


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

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

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

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

                    await Startup.sendMsg(url, sendMsg);
                }
                return("");
            }
        }
Example #26
0
        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");
            }
        }
Example #27
0
        /// <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);
            }
        }
Example #28
0
        //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);
            }
        }
Example #29
0
        //更新玩家的贡献率!
        /// <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);
            //}
        }
Example #30
0
        /// <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);
            }
        }