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); }
/// <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); }
/// <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); } }
/// <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); }