ActiveProxy.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463
  1. using UnityEngine;
  2. using System;
  3. using System.Collections;
  4. using System.Linq;
  5. using Newtonsoft.Json.Linq;
  6. using System.Collections.Generic;
  7. /// <summary>
  8. ///
  9. /// </summary>
  10. public class ActiveProxy : ProxyBase<ActiveProxy>
  11. {
  12. #region ` constructor `
  13. public ActiveProxy() => this.opeCode = OpeCode.ope_active;
  14. #endregion
  15. #region 七日签到奖励
  16. /// <summary>
  17. /// [6502] 七日签到福利 - 领取奖励
  18. /// </summary>
  19. /// <param name="day">第x天(1~7) </param>
  20. /// <param name="callback">成功回调函数</param>
  21. public void Day7_DrawReward(int day, Action<string> callback)
  22. {
  23. Post(CmdCode.cmd_active_day7_drawreward, new object[] { day },
  24. resp =>
  25. {
  26. var p = UserProxy.Instance.player;
  27. p.baseInfo.gold = Convert.ToInt32(resp.result["gold"].ToString());
  28. p.baseInfo.cash = Convert.ToInt32(resp.result["cash"].ToString());
  29. p.baseInfo.tili = Convert.ToInt32(resp.result["tili"].ToString());
  30. p.collectHero.InitData((JObject)resp.result["hero"],p); // 英雄
  31. p.PrivateState.day7_drawed.Add(day); // 同步领取记录
  32. callback?.Invoke(sm_activity_day7.GetMoById(day).reward);
  33. });
  34. }
  35. #endregion
  36. /// <summary>
  37. /// [6503] 查询开服时间戳
  38. /// </summary>
  39. /// <param name="callback">成功回调函数</param>
  40. public void GetZonePublicTs(Action<DateTime> callback)
  41. {
  42. Post(CmdCode.cmd_active_getZonePublicTs, new object[] { }, resp => callback?.Invoke(new DateTime().FromUnixStamp((uint)resp.result)));
  43. }
  44. #region ' 废弃 '
  45. /// <summary>
  46. /// [6509] 抽奖(已经变为开箱子功能)
  47. /// </summary>
  48. /// <param name="type">道具的typeid</param>
  49. /// <param name="slotid">卡槽id(0,1,2,3) ----这个变为数量</param>
  50. /// <>cash是免冷却开宝箱所需要费的钻石数量 <>
  51. /// <param name="callback">成功回调函数</param>
  52. [Obsolete("2020.8.17")]
  53. public void Lottery(int type, int slotid, int cash = 0, Action<JObject> callback = null, Action<object> onfail = null)
  54. {
  55. Post(CmdCode.cmd_active_lottery, new object[] { type, slotid, cash }, resp => callback?.Invoke(resp.result));
  56. }
  57. /// <summary>
  58. /// [6510] 新手抽奖
  59. /// </summary>
  60. /// <param name="type">道具的typeid</param>
  61. /// <param name="number">可选, 连抽次数</param>
  62. /// <param name="callback">成功回调函数</param>
  63. [Obsolete("2020.8.17")]
  64. public void LotteryNew(int type, int number = 1, Action<JObject> callback = null)
  65. {
  66. Post(CmdCode.cmd_active_lottery_new, new object[] { type, number }, resp => callback?.Invoke(resp.result));
  67. }
  68. /// <summary>
  69. /// [6511] 抽奖 - 领取保底奖励
  70. /// </summary>
  71. /// <param name="type">道具的typeid</param>
  72. /// <param name="cishu">奖励所需次数, 注意不是自己的抽奖次数</param>
  73. /// <param name="callback">成功回调函数</param>
  74. [Obsolete("2020.8.17")]
  75. public void Lottery_baodi_jiangli(int type, int cishu = 10, Action<JObject> callback = null)
  76. {
  77. Post(CmdCode.cmd_active_lottery_baodi, new object[] { type, cishu }, resp => callback?.Invoke(resp.result));
  78. }
  79. /// <summary>
  80. /// [6512] 抽奖 - 领取保底奖励
  81. /// </summary>
  82. /// <param name="slotid">卡槽id</param>
  83. /// <param name="callback">成功回调函数</param>
  84. [Obsolete]
  85. public void Lottery_draw_hero(int slotid, Action<JObject> callback = null)
  86. {
  87. Post(CmdCode.cmd_active_lottery_drawhero, new object[] { slotid }, resp => callback?.Invoke(resp.result));
  88. }
  89. /// <summary>
  90. /// [6513] 抽奖 - 拉取最新的抽奖信息
  91. /// </summary>
  92. /// <param name="callback"></param>
  93. [Obsolete]
  94. public void Loterry_info(Action<JObject> callback = null)
  95. {
  96. Post(CmdCode.cmd_active_lottery_info, new object[] { }, resp => callback?.Invoke(resp.result));
  97. }
  98. /// <summary>
  99. /// [6514] 抽奖 - 解锁卡槽 , 备注, 暂时没有任何消耗, 发送请求直接开启
  100. /// </summary>
  101. /// <param name="slotid">卡槽id</param>
  102. /// <param name="callback">成功回调函数</param>
  103. [Obsolete]
  104. public void Lottery_unlock_slot(int slotid, Action<JObject> callback = null)
  105. {
  106. Post(CmdCode.cmd_active_lottery_unlock_slot, new object[] { slotid }, resp => callback?.Invoke(resp.result));
  107. }
  108. /// <summary>
  109. /// [6515] 抽奖 - 新生招募, 加速搜索, 默认行为,扣除一枚打车券,将slot->opents设置为now()之前的值.
  110. /// </summary>
  111. /// <param name="slotid">卡槽id</param>
  112. /// <param name="callback">成功回调函数</param>
  113. [Obsolete]
  114. public void Lottery_speedup_search(int slotid, Action<JObject> callback = null)
  115. {
  116. Post(CmdCode.cmd_active_lottery_speedup_search, new object[] { slotid }, resp => callback?.Invoke(resp.result));
  117. }
  118. /// <summary>
  119. /// [6514] 活动 - 领取全服注册礼包
  120. /// </summary>
  121. /// <param name="slotid">卡槽id</param>
  122. /// <param name="callback">成功回调函数</param>
  123. [Obsolete("2020.8.18")]
  124. public void DrawRegGift(int slotid, Action<JObject> callback = null)
  125. {
  126. Post(CmdCode.cmd_active_drawRegGift, new object[] { slotid },
  127. resp =>
  128. callback?.Invoke(resp.result));
  129. }
  130. /// <summary>
  131. /// 6516 查询全服的注册人数
  132. /// </summary>
  133. /// <param name="callback"></param>
  134. [Obsolete("2020.8.18")]
  135. public void GetRegNumber(Action<JObject> callback = null)
  136. {
  137. Post(CmdCode.cmd_active_getRegNumber, new object[] { },
  138. resp =>
  139. callback?.Invoke(resp.result));
  140. }
  141. /// <summary>
  142. /// 6515 领取 每天 时间段的 赠送体力活动
  143. /// </summary>
  144. /// <param name="callback"></param>
  145. public void DrawPresentTili(Action<JObject> callback = null)
  146. {
  147. Post(CmdCode.cmd_active_presentTili, new object[] { },
  148. resp =>
  149. callback?.Invoke(resp.result));
  150. }
  151. #endregion
  152. /// <summary>
  153. /// [6512] 活动 - 凭兑换码领取礼包
  154. /// </summary>
  155. /// <param name="token">兑换码</param>
  156. /// <param name="callback">成功回调函数</param>
  157. public void DrawGiftByToken(string token, Action<string> callback = null)
  158. {
  159. Post(CmdCode.cmd_active_drawGiftByToken, new object[] { (int)EActivityType.CDKeyActive, token },
  160. resp =>
  161. {
  162. var p = UserProxy.Instance.player;
  163. p.baseInfo.gold = Convert.ToInt32(resp.result["gold"].ToString());
  164. p.baseInfo.cash = Convert.ToInt32(resp.result["cash"].ToString());
  165. p.baseInfo.tili = Convert.ToInt32(resp.result["tili"].ToString());
  166. p.collectHero.InitData((JObject)resp.result["hero"],p); // 英雄
  167. var rewardstr = resp.result["reward"].ToString();
  168. callback?.Invoke(rewardstr);
  169. });
  170. }
  171. /// <summary>
  172. /// [6513] 活动 - 领取连续在线礼包
  173. /// </summary>
  174. /// <param name="giftId">礼包编号(1,2,3...顺序)</param>
  175. /// <param name="callback"></param>
  176. public void DrawOnlineGift(int giftId, Action<JObject> callback = null)
  177. {
  178. Post(CmdCode.cmd_active_drawOnlineGift, new object[] { giftId },
  179. resp =>
  180. {
  181. var p = UserProxy.Instance.player;
  182. p.baseInfo.gold = Convert.ToInt32(resp.result["gold"].ToString());
  183. p.baseInfo.cash = Convert.ToInt32(resp.result["cash"].ToString());
  184. p.baseInfo.tili = Convert.ToInt32(resp.result["tili"].ToString());
  185. p.collectHero.InitData((JObject)resp.result["hero"],p); // 英雄
  186. var rewardstr = resp.result["reward"].ToString();
  187. p.PrivateState.onlineGiftts = resp.result["onlineGiftts"].ToObject<int>();
  188. p.PrivateState.onlineGiftIDs = resp.result["onlineGiftIDs"].ToObject<List<int>>();
  189. callback?.Invoke(resp.result);
  190. });
  191. }
  192. /// <summary>
  193. /// 刷新下在线信息
  194. /// </summary>
  195. /// <param name="callback"></param>
  196. public void GetOnlineInfo(Action<UIVO_ActivityMain.OnlineGiftInfo_RetVo> callback)
  197. {
  198. Post(CmdCode.cmd_active_getTodayOnlineInfos, new object[] { }, resp =>
  199. {
  200. var ret = resp.result.ToObject<UIVO_ActivityMain.OnlineGiftInfo_RetVo>();
  201. var p = UserProxy.Instance.player;
  202. p.PrivateState.onlineGiftts = ret.onlineGiftts;
  203. p.PrivateState.onlineGiftIDs = ret.onlineGiftIDs;
  204. callback?.Invoke(ret);
  205. });
  206. }
  207. /// <summary>
  208. /// 获取神庙所有的标签时间
  209. /// </summary>
  210. /// <param name="type"></param>
  211. public void GetShenmiaoData(Action<List<ShenMiaoVo>> callback)
  212. {
  213. Post(CmdCode.cmd_active_GetShenmiaoData, new object[] { }, resp =>
  214. {
  215. var p = UserProxy.Instance.player;
  216. p.shenmiaoInfo.Initlize(resp.result["shenmiaoInfo"]);
  217. Dictionary<int, Ins_Active> activeDic = p.shenmiaoInfo.activeDic;
  218. List<ShenMiaoVo> list = new List<ShenMiaoVo>();
  219. foreach (KeyValuePair<int, Ins_Active> kv in activeDic)
  220. {
  221. ShenMiaoVo vo = new ShenMiaoVo((EShenMiaoActiveType)kv.Key);
  222. list.Add(vo);
  223. }
  224. if (callback != null)
  225. {
  226. callback.Invoke(list);
  227. }
  228. });
  229. }
  230. /// <summary>
  231. /// 抽奖
  232. /// </summary>
  233. /// <param name="type">1 or 10</param>
  234. /// <param name="callback"></param>
  235. public void GetShenmiaoPrize(EShenMiaoActiveType type,int num, Action<List<ItemVo>> callback)
  236. {
  237. Post(CmdCode.cmd_active_shenmiaoDrawPrize, new object[] { (int)type,num }, resp =>
  238. {
  239. var p = UserProxy.Instance.player;
  240. p.shenmiaoInfo.Initlize(resp.result["shenmiaoInfo"]);
  241. JArray arr = JArray.Parse(resp.result["list"].ToString());
  242. List<ItemVo> list = new List<ItemVo>();
  243. foreach (JToken id in arr)
  244. {
  245. ItemVo vo = new ItemVo();
  246. vo.typeId = id.ToString();
  247. vo.count = 1;
  248. list.Add(vo);
  249. }
  250. if (callback != null)
  251. {
  252. callback.Invoke(list);
  253. }
  254. });
  255. }
  256. /// <summary>
  257. /// 神庙买券---临时
  258. /// </summary>
  259. /// <param name="costId"></param>
  260. /// <param name="num"></param>
  261. /// <param name="callback"></param>
  262. public void buyShenmiaoDrawTicket(int costId,int num,Action callback)
  263. {
  264. if (costId == 3320001)
  265. {
  266. costId = 801022;
  267. }
  268. else
  269. {
  270. costId = 801023;
  271. }
  272. Post(CmdCode.cmd_active_buyShenmiaoDrawTicket, new object[] { costId, num }, resp =>
  273. {
  274. var p = UserProxy.Instance.player;
  275. p.baseInfo.cash = int.Parse(resp.result["cash"].ToString());
  276. if (callback != null)
  277. {
  278. callback.Invoke();
  279. }
  280. });
  281. }
  282. /// <summary>
  283. /// 获取当前体力
  284. /// </summary>
  285. /// <param name="num"></param>
  286. /// <param name="callback"></param>
  287. public void GetCurTili(Action callback)
  288. {
  289. Post(CmdCode.cmd_active_GetCurTili, new object[] { }, resp =>
  290. {
  291. var p = UserProxy.Instance.player;
  292. p.baseInfo.tili = int.Parse(resp.result["tili"].ToString());
  293. p.PrivateState.TiliTime = long.Parse(resp.result["time"].ToString());
  294. callback?.Invoke();
  295. });
  296. }
  297. /// <summary>
  298. /// 购买体力
  299. /// </summary>
  300. /// <param name="callback"></param>
  301. public void BuyTili(Action callback)
  302. {
  303. Post(CmdCode.cmd_active_BuyTili, new object[] { }, resp =>
  304. {
  305. var p = UserProxy.Instance.player;
  306. p.baseInfo.tili = int.Parse(resp.result["tili"].ToString());
  307. p.PrivateState.TiliTime = long.Parse(resp.result["time"].ToString());
  308. p.baseInfo.cash = int.Parse(resp.result["cash"].ToString());
  309. p.PrivateState.buyTiliNum = int.Parse(resp.result["buyTiliNum"].ToString());
  310. callback?.Invoke();
  311. });
  312. }
  313. #region 内部类
  314. /// <summary>
  315. /// 活动UI
  316. /// </summary>
  317. public class UIVO_ActivityMain
  318. {
  319. /// <summary>
  320. /// 当前(正在进行)活动列表
  321. /// </summary>
  322. /// <returns></returns>
  323. public List<sm_activity> CurActivities() => GameConfigData.Ins.activity.Values.Where(a => a.IsOpen()).ToList();
  324. /// <summary>
  325. /// 7日签到信息
  326. /// </summary>
  327. public class Day7_UIVO
  328. {
  329. /// <summary>
  330. /// 7天信息列表
  331. /// </summary>
  332. public List<DayInfo> dayInfos = new[] { 1, 2, 3, 4, 5, 6, 7 }.ToList().ConvertAll<DayInfo>(i => new DayInfo(i));
  333. /// <summary>
  334. /// 每天的信息
  335. /// </summary>
  336. public class DayInfo
  337. {
  338. private Player p = UserProxy.Instance.player;
  339. /// <summary>
  340. /// 第几天
  341. /// </summary>
  342. public readonly int day;
  343. public DayInfo(int _day)
  344. {
  345. this.day = _day;
  346. }
  347. /// <summary>
  348. /// 配置数据
  349. /// </summary>
  350. public sm_activity_day7 Mo => sm_activity_day7.GetMoById(day);
  351. /// <summary>
  352. /// 奖励物品
  353. /// </summary>
  354. public ItemVo item => ItemVo.ParsItemContentStr(Mo.reward).First();
  355. /// <summary>
  356. /// 是否已经领取
  357. /// </summary>
  358. public bool HasDrawed => p.PrivateState.day7_drawed.Contains(day);
  359. /// <summary>
  360. /// 是否可以领取
  361. /// </summary>
  362. public bool CanDraw => p.PrivateState.LoginDays.Count >= day;
  363. }
  364. }
  365. /// <summary>
  366. /// 查询在线奖励信息返回值结构
  367. /// </summary>
  368. public class OnlineGiftInfo_RetVo
  369. {
  370. public int onlineGiftts;
  371. public List<int> onlineGiftIDs;
  372. /// <summary>
  373. /// 在线总时长
  374. /// </summary>
  375. public TimeSpan TotalOnlineTime => TimeSpan.FromSeconds(onlineGiftts);
  376. }
  377. /// <summary>
  378. /// 在线奖励
  379. /// </summary>
  380. public class OnlineGift_UIVO
  381. {
  382. /// <summary>
  383. /// 奖励信息
  384. /// </summary>
  385. public List<GiftInfo> giftInfos = GameConfigData.Ins.activity_onlinegift.Values.ToList().ConvertAll(mo => new GiftInfo(mo));
  386. public class GiftInfo
  387. {
  388. private readonly Player p = UserProxy.Instance.player;
  389. /// <summary>
  390. /// 时长(TimeSpan)(秒)
  391. /// </summary>
  392. public readonly sm_activity_onlinegift _mo;
  393. public GiftInfo(sm_activity_onlinegift _ts) => _mo = _ts;
  394. /// <summary>
  395. /// mo
  396. /// </summary>
  397. public sm_activity_onlinegift Mo => _mo;
  398. /// <summary>
  399. /// 换算为分钟
  400. /// </summary>
  401. public int Minutes => Mo?.onlineSec / 60 ?? 0;
  402. /// <summary>
  403. /// 奖励道具
  404. /// </summary>
  405. public ItemVo reward_item => ItemVo.ParsItemContentStr(Mo?.rewardstr ?? "").First();
  406. /// <summary>
  407. /// 是否已经领取奖励
  408. /// </summary>
  409. /// <returns></returns>
  410. public bool HasDrawed() => p.PrivateState.onlineGiftIDs.Contains(Mo.typeId);
  411. /// <summary>
  412. /// 是否可以领取奖励
  413. /// </summary>
  414. /// <returns></returns>
  415. public bool CanDraw() => p.PrivateState.onlineGiftts >= Mo.onlineSec;
  416. }
  417. }
  418. }
  419. #endregion
  420. }