private int GetTime(tg_war_battle_queue temp, int tt)
        {
            var time = tg_war_battle_queue.GetTimeInterval(temp);  //出发地到当前的间隔时间
            var t    = temp.total_Time - time - tt;                //还有多久安全行军时间

            if (t < 0)
            {
                return(Math.Abs(t)); //算出欠的分钟数
            }
            return(0);
        }
예제 #2
0
파일: WAR_GO.cs 프로젝트: Lantnr/MyTest
        /// <summary> 组装出征行军队列实体 </summary>
        /// <param name="rids">出征武将集合</param>
        /// <param name="startCityId">发出据点Id</param>
        /// <param name="endCityId">目标据点Id</param>
        /// <param name="foods">携带兵粮</param>
        /// <param name="funds">携带军资金</param>
        /// <param name="morale">出征锁定士气</param>
        /// <param name="time">到达总时间(分钟)</param>
        /// <param name="warTime">安全行军时间</param>
        /// <param name="userid">用户Id</param>
        /// <returns></returns>
        private tg_war_battle_queue BuildBattleQueue(IEnumerable <long> rids, int startCityId, int endCityId, int lastCityId, Int64 foods, Int64 funds, int morale, int time, int warTime, Int64 userid)
        {
            var t    = (DateTime.Now.Ticks - 621355968000000000) / 10000;
            var temp = new tg_war_battle_queue
            {
                foods        = foods,
                funds        = funds,
                morale       = morale,
                start_Time   = t,
                total_Time   = warTime,
                end_CityId   = endCityId,
                last_CityId  = lastCityId,
                start_CityId = startCityId,
                rid          = string.Join(",", rids),
                time         = t + (time * 60 * 1000),
                user_id      = userid,
            };

            return(temp);
        }
예제 #3
0
파일: WAR_GO.cs 프로젝트: Lantnr/MyTest
 /// <summary> 推送出征到达结算 </summary>
 /// <param name="temp">合战出征队列实体</param>
 public void TaskWarOk(tg_war_battle_queue temp)
 {
     try
     {
         var time  = temp.time - temp.start_Time;
         var token = new CancellationTokenSource();
         Task.Factory.StartNew(m =>
         {
             SpinWait.SpinUntil(() =>
             {
                 return(false);
             }, Convert.ToInt32(m));
         }, time, token.Token)
         .ContinueWith((m, n) =>
         {
             var model = n as tg_war_battle_queue;
             if (model == null)
             {
                 return;
             }
             (new Share.War()).SettlementResourceAndPush(model);
             if (!Variable.OnlinePlayer.ContainsKey(model.user_id))
             {
                 return;
             }
             var session = Variable.OnlinePlayer[model.user_id];
             var vo      = EntityToVo.ToWarGoVo(model);
             var data    = BulidData(vo);
             var pv      = session.InitProtocol((int)ModuleNumber.WAR, (int)WarCommand.PUSH_WAR_OK, (int)ResponseType.TYPE_SUCCESS, data);
             session.SendData(pv);
             token.Cancel();
         }, temp, token.Token);
     }
     catch (Exception ex)
     {
         XTrace.WriteException(ex);
     }
 }
예제 #4
0
파일: WAR_FIGHT.cs 프로젝트: Lantnr/MyTest
        /// <summary>
        /// 战斗结束
        /// </summary>
        /// <param name="player"></param>
        /// <param name="cityinfo"></param>
        /// <param name="defenseuserid"></param>
        /// <param name="fightvo"></param>
        /// <param name="bq"></param>
        /// <returns></returns>
        private bool GetFightEnd(Player player, tg_war_city cityinfo, Int64 defenseuserid, WarFightVo fightvo, tg_war_battle_queue bq)
        {
            var defenseuser = tg_user.FindByid(defenseuserid);
            var own         = Variable.BASE_OFFICE.FirstOrDefault(q => q.id == player.User.office); //占有度查询

            if (own == null)
            {
                return(false);
            }
            var left     = own.total_own - player.UserExtend.war_total_own;
            var basesize = Variable.BASE_WARCITYSIZE.FirstOrDefault(q => q.id == cityinfo.size);

            if (basesize == null)
            {
                return(false);
            }
            var defenseextend = tg_user_extend.GetByUserId(defenseuserid);

            if (fightvo.result.isWin == 1) //出征成功,攻防胜利且占有度足够
            {
                //游戏战报
                WarReportInsert(player.User.id, 100042, cityinfo.base_id, defenseuserid, player.User.player_name);
                if (left >= basesize.own) //占有度足够
                {
                    var rivalUserId = cityinfo.user_id;
                    var planlist    = GetCityPlanIds(cityinfo);
                    tg_war_city_plan.GetListDelete(planlist);        //删除所有的防守方案
                    player.UserExtend.war_total_own += basesize.own; //进攻玩家占有度使用增加

                    if (defenseextend.war_total_own >= basesize.own) //防守玩家占有度使用减少
                    {
                        defenseextend.war_total_own -= basesize.own;
                    }
                    //城市资源结算,城市改为进攻方
                    CityWarResourse(cityinfo, player.User.id);
                    player.UserExtend.Update();
                    player.User.merit += (int)Math.Floor(fightvo.result.rivalDieCount * 0.5);
                    GetCityChange(defenseuserid, cityinfo, player.User.id);

                    #region  除内政策略

                    var flag = Variable.WarCityAll.Values.Count(m => m.user_id == rivalUserId) > 0;
                    if (!flag)
                    {
                        var temp = tg_war_home_tactics.GetEntityByUserid(rivalUserId);
                        if (temp != null)
                        {
                            (new Share.War()).RemoveCD((new Share.War()).GetKey(temp.end_time, rivalUserId));
                            temp.Delete();
                        }
                    }

                    #endregion
                }
                else
                {
                    CityWarResourse(cityinfo);
                    player.User.merit += (int)Math.Floor(fightvo.result.rivalDieCount * 0.5) + basesize.addMerit;
                }
                defenseuser.merit += (int)Math.Floor(fightvo.result.rivalDieCount * 0.1);

                fightvo.result.reward.Add(new RewardVo()
                {
                    goodsType = (int)GoodsType.TYPE_MERIT,
                    value     = player.User.merit,
                });
            }
            else
            {
                //游戏战报
                WarReportInsert(player.User.id, 100043, cityinfo.base_id, defenseuserid, player.User.player_name);
                player.User.merit += (int)Math.Floor(fightvo.result.rivalDieCount * 0.1);
                defenseuser.merit += (int)Math.Floor(fightvo.result.rivalDieCount * 0.5);
                fightvo.result.reward.Add(new RewardVo()
                {
                    goodsType = (int)GoodsType.TYPE_MERIT,
                    value     = player.User.merit,
                });
                //  new Share.War().QueueResultCity(bq);
            }
            //进攻玩家发送协议
            if (Variable.OnlinePlayer.ContainsKey(player.User.id))
            {
                player.User.Update();
                player.UserExtend.Update();
                var session = Variable.OnlinePlayer[player.User.id] as TGGSession;
                session.Player = player;
                (new Share.User()).REWARDS_API(player.User.id, fightvo.result.reward);
            }
            //防守玩家发送协议
            if (Variable.OnlinePlayer.ContainsKey(defenseuserid))
            {
                defenseuser.Update();
                var session = Variable.OnlinePlayer[defenseuserid] as TGGSession;
                session.Player.User       = defenseuser;
                session.Player.UserExtend = defenseextend;
                (new Share.User()).REWARDS_API(defenseuserid, fightvo.result.reward);
            }
            return(true);
        }