Beispiel #1
0
        internal void setDebt(commandWithTime.debtOwner dOwner, interfaceOfHM.AttackT at)
        {
            List <string> notifyMsg = new List <string>();

            //  bool needUpdatePlayers = false;
            lock (that.PlayerLock)
            {
                var player = that._Players[dOwner.key];
                var car    = that._Players[dOwner.key].getCar();
                // car.targetFpIndex = this._Players[dor.key].StartFPIndex;
                ;
                if (at.CheckCarState(car))
                {
                    if (car.targetFpIndex == -1)
                    {
                        throw new Exception("居然来了一个没有目标的车!!!");
                    }
                    else
                    {
                        /*
                         * 当到达地点时,有可能攻击对象不存在。
                         * 也有可能攻击对象已破产。
                         * 还有正常情况。
                         * 这三种情况都要考虑到。
                         */
                        //attackTool at = new attackTool();
                        // var attackMoney = car.ability.Business;
                        if (that._Players.ContainsKey(dOwner.victim))
                        {
                            var victim = that._Players[dOwner.victim];
                            if (!victim.Bust)
                            {
                                var percentValue = getAttackPercentValue(player, victim);
                                percentValue = at.DealWithPercentValue(percentValue, player, victim, this.that);
                                //if(victim.Money*100/ car.ability.Business)
                                long reduceSum = 0;
                                var  m         = victim.Money - reduceSum;
                                long reduce;
                                if (m > 0)
                                {
                                    this.DealWithReduceWhenAttack(at, player, car, victim, percentValue, ref notifyMsg, out reduce, m, ref reduceSum);
                                }
                                else
                                {
                                    reduceSum = 0;
                                    reduce    = 0;
                                }
                                if (at.isMagic)
                                {
                                    that.magicE.AmbushSelf(victim, at, ref notifyMsg, ref reduceSum);
                                    at.MagicAnimateShow(player, victim, ref notifyMsg);
                                }

                                if (reduceSum > 0)
                                {
                                    victim.MoneySet(victim.Money - reduceSum, ref notifyMsg);
                                }
                                if (reduce > 0)
                                {
                                    this.WebNotify(player, $"你对【{victim.PlayerName}】进行了{at.GetSkillName()},获得{(reduce / 100.00).ToString("f2")}金币。其还有{(victim.Money / 100.00).ToString("f2")}金币。");
                                }
                                if (victim.Money == 0)
                                {
                                    victim.SetBust(true, ref notifyMsg);
                                }
                                if (victim.playerType == RoleInGame.PlayerType.NPC)
                                {
                                    ((NPC)victim).BeingAttackedF(dOwner.key, ref notifyMsg);
                                }
                            }
                            else
                            {
                                //这种情况也有可能存在。
                            }
                        }
                        else
                        {
                            //这种情况有可能存在.
                        }

                        /*
                         * 无论什么情况,直接返回。
                         */
                        //  if (car.ability.leftBusiness <= 0 && car.ability.leftVolume <= 0)
                        {
                            car.setState(player, ref notifyMsg, CarState.returning);
                            that.retutnE.SetReturnT(0, new commandWithTime.returnning()
                            {
                                c   = "returnning",
                                key = dOwner.key,
                                // car = dOwner.car,
                                //returnPath = dOwner.returnPath,//returnPath_Record,
                                target       = dOwner.target,
                                changeType   = dOwner.changeType,
                                returningOjb = dOwner.returningOjb
                            });
                        }
                        //else
                        //{
                        //    car.setState(player, ref notifyMsg, 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}");
                Startup.sendMsg(url, sendMsg);
            }
            // Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}执行setReturn结束");
        }
Beispiel #2
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);
            }
        }