HeroProxy.cs 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784
  1. using Newtonsoft.Json.Linq;
  2. using System;
  3. using System.Collections.Generic;
  4. /// <summary>
  5. /// 英雄Proxy
  6. /// </summary>
  7. class HeroProxy : ProxyBase<HeroProxy>
  8. {
  9. /// <summary>
  10. /// init
  11. /// </summary>
  12. public HeroProxy() => this.opeCode = OpeCode.ope_hero;
  13. #region 数值 计算公式 变化 升阶 升级
  14. /// <summary>
  15. /// 获得 角色某个等级 等阶 状态下的属性值
  16. /// </summary>
  17. /// <param name="atype"></param>
  18. /// <param name="level">等级</param>
  19. /// <param name="gradeLevel">品阶(SCBD)</param>
  20. /// <returns></returns>
  21. public float getHeroProperty(string modelId, EHeroProperties attType,
  22. int level, string gradeLevel)
  23. {
  24. float result = 0; // 结果
  25. float gradeF = 0; // 品阶加成
  26. sm_hero heroMo = sm_hero.GetMoByID(modelId);
  27. if (heroMo == null) // 找不到英雄模板数据
  28. {
  29. return 0;
  30. }
  31. ////========================================
  32. #region 属性成长
  33. //第一步, 根据玩家的等阶,来找出,对应的等阶,的各个属性成长的曲线类型,也就是说0阶的时候, 各个属性的成长系数是SABCD的哪搞一个。
  34. //然后 根据 SABCD的类型以及 想查找的属性, 找出对应的 这个属性的成长系数
  35. var gradeLevelMo = sm_heroextra_level.GetMoById(heroMo.heroId, gradeLevel);
  36. if (gradeLevelMo != null)
  37. {
  38. switch (attType)
  39. {
  40. case EHeroProperties.HP:
  41. gradeF = gradeLevelMo.hp;
  42. break;
  43. case EHeroProperties.MOFAKANGXING:
  44. gradeF = gradeLevelMo.mofakangxing;
  45. break;
  46. case EHeroProperties.FASHUQIANGDU:
  47. gradeF = gradeLevelMo.fashuqiangdu;
  48. break;
  49. case EHeroProperties.WULIGONGJI:
  50. gradeF = gradeLevelMo.wuligongji;
  51. break;
  52. case EHeroProperties.FANGYUHUJIA:
  53. gradeF = gradeLevelMo.fangyuhujia;
  54. break;
  55. case EHeroProperties.NENGLIANGZHI:
  56. gradeF = gradeLevelMo.nengliangzhi;
  57. break;
  58. case EHeroProperties.GONGJISUDU:
  59. gradeF = gradeLevelMo.gongjisudu;
  60. break;
  61. case EHeroProperties.CRICITAL:
  62. gradeF = gradeLevelMo.baoji;
  63. break;
  64. case EHeroProperties.KANGBAOJI:
  65. gradeF = gradeLevelMo.kangbaoji;
  66. break;
  67. case EHeroProperties.YANLI:
  68. gradeF = gradeLevelMo.yanli;
  69. break;
  70. }
  71. }
  72. else
  73. {
  74. gradeF = 0;
  75. }
  76. #endregion
  77. /* 角色成长公式
  78. 生命=初始生命+生命成长*(角色等级-1))+武器加成+言灵加成
  79. 言能=初始言能+言能成长*(角色等级-1))
  80. 物攻=初始物攻+物攻成长*(角色等级-1))+武器加成+言灵加成
  81. 护甲=初始护甲+护甲成长*(角色等级-1))+武器加成+言灵加成
  82. 言攻=初始言攻+言攻成长*(角色等级-1))+武器加成+言灵加成
  83. 言抗=初始言抗+言抗成长*(角色等级-1))+武器加成+言灵加成
  84. 暴击=初始暴击+暴击成长*(角色等级-1))+武器加成+言灵加成
  85. 暴击率=暴击/(75+角色等级*5)
  86. */
  87. // 武器成长 和 言灵成长都是直接数值, 所以放到外面再做加法也可以.
  88. ////========================================
  89. if (heroMo != null)
  90. {
  91. switch (attType)
  92. {
  93. case EHeroProperties.HP:
  94. result += heroMo.hp + gradeF * (level - 1);
  95. break;
  96. case EHeroProperties.NENGLIANGZHI:
  97. result += heroMo.nengliangzhi + gradeF * (level - 1);
  98. break;
  99. case EHeroProperties.WULIGONGJI:
  100. result += heroMo.wuligongji + gradeF * (level - 1);
  101. break;
  102. case EHeroProperties.FANGYUHUJIA:
  103. result += heroMo.fangyuhujia + gradeF * (level - 1);
  104. break;
  105. case EHeroProperties.FASHUQIANGDU:
  106. result += heroMo.fashuqiangdu + gradeF * (level - 1);
  107. break;
  108. case EHeroProperties.MOFAKANGXING:
  109. result += heroMo.mofakangxing + gradeF * (level - 1);
  110. break;
  111. case EHeroProperties.GONGJISUDU:
  112. result += heroMo.gongjisudu + gradeF * (level - 1);
  113. break;
  114. case EHeroProperties.CRICITAL:
  115. //result += heroMo.baoji / (75 + level * 5); // 2020.6.3 修正暴击算法, 暴击率是暴击值/(75+level*5) 而此处只计算暴击值,战斗中根据这个公式计算暴击率
  116. result += heroMo.baoji + gradeF * (level - 1);
  117. break;
  118. case EHeroProperties.KANGBAOJI:
  119. //result += heroMo.baoji / (75 + level * 5); // 2020.6.3 修正暴击算法, 暴击率是暴击值/(75+level*5) 而此处只计算暴击值,战斗中根据这个公式计算暴击率
  120. result += heroMo.kangbaoji + gradeF * (level - 1);
  121. break;
  122. case EHeroProperties.YANLI:
  123. //result += heroMo.baoji / (75 + level * 5); // 2020.6.3 修正暴击算法, 暴击率是暴击值/(75+level*5) 而此处只计算暴击值,战斗中根据这个公式计算暴击率
  124. result += heroMo.yanli + gradeF * (level - 1);
  125. break;
  126. }
  127. }
  128. return result;
  129. }
  130. #endregion
  131. #region ' API '
  132. #region 注释掉内容
  133. /////// <summary>
  134. /////// [6301] 升级英雄 消耗其他英雄卡牌来升级【功能一模式】
  135. /////// </summary>
  136. /////// <param name="uid">玩家ID</param>
  137. /////// <param name="zoneid">分区ID</param>
  138. /////// <param name="heroId">英雄ID</param>
  139. /////// <param name="costHeroListStr">消耗的英雄UID字符组</param>
  140. /////// <param name="costGold">消耗金币</param>
  141. /////// <param name="callback">成功回调(无返回参数)</param>
  142. ////public void HeroLevelUpgrade(string uid, int zoneid, string heroId, string costHeroListStr, int costGold, Action<JObject> callback)
  143. ////{
  144. //// Post(CmdCode.hero_levelup, uid, zoneid, new object[] { heroId, costHeroListStr, costGold },
  145. //// resp =>
  146. //// {
  147. //// if (callback != null)
  148. //// {
  149. //// callback.Invoke(resp.result);
  150. //// }
  151. //// });
  152. ////}
  153. ///// <summary>
  154. ///// [6301] 升级英雄 消耗经验卡 碎片等来升级 【功能二模式】
  155. ///// </summary>
  156. ///// <param name="uid"></param>
  157. ///// <param name="zoneid"></param>
  158. ///// <param name="heroId"></param>
  159. ///// <param name="costHeroListStr"></param>
  160. ///// <param name="costGold"></param>
  161. ///// <param name="callback"></param>
  162. //public void HeroLevelUpgradeCostItem(string uid, int zoneid, string heroId, string costItemListStr, int costGold, Action<JObject> callback)
  163. //{
  164. // Post(CmdCode.hero_levelup, uid, zoneid, new object[] { heroId, costItemListStr, costGold },
  165. // resp =>
  166. // {
  167. // if (callback != null)
  168. // {
  169. // callback.Invoke(resp.result);
  170. // }
  171. // });
  172. //}
  173. #endregion
  174. /// <summary>
  175. /// [6304] 英雄升阶 (消耗碎片
  176. /// version: 2020.1.15 调试对接
  177. /// 2019.12.10 代码整理按照策划要求修改第一版.
  178. /// </summary>
  179. /// <param name="heroUid"></param>
  180. /// <param name="costItemId">消耗道具(经验丹)Id</param>
  181. /// <param name="costNum">消耗数量</param>
  182. /// <param name="callback"></param>
  183. public void HeroUpgrade(string heroUid, string nextGrade, Action<GameHeroVo> callback)
  184. {
  185. Post(CmdCode.hero_stageup, new object[] { heroUid, nextGrade },
  186. resp =>
  187. {
  188. if (callback != null)
  189. {
  190. //undone: 扣减碎片数量 -wg 2019年12月10日
  191. var hero = UserProxy.Instance.player.collectHero.UpdateHero(resp.result);
  192. var mo = sm_heroextra_level.GetMoById(int.Parse(hero.typeId), nextGrade);
  193. UserProxy.Instance.player.collectItem.ConsumePacketItem(mo.segID.ToString(), mo.segNum);
  194. callback.Invoke(hero);
  195. }
  196. });
  197. }
  198. /// <summary>
  199. /// [6301] 升级英雄 消耗经验丹 等来提升经验升级
  200. /// version: 2020.1.15 调试对接
  201. /// 2019.12.10 代码整理按照策划要求修改第一版
  202. /// </summary>
  203. /// <param name="heroUid"></param>
  204. /// <param name="costItemId">消耗道具(经验丹)Id</param>
  205. /// <param name="costNum">消耗数量</param>
  206. /// <param name="callback"></param>
  207. public void HeroLevelUpCostItem(string heroUid, int costItemId, int costNum, Action<GameHeroVo> callback)
  208. {
  209. Post(CmdCode.hero_levelup, new object[] { heroUid, costItemId, costNum },
  210. resp =>
  211. {
  212. // undone: 扣减相应的 经验丹数量 -王刚 2019年12月10日09:24:21
  213. //UserProxy.Instance.player.collectItem.ConsumePacketItem(costItemId.ToString(), costNum);
  214. //UserProxy.Instance.player.InitFromStore(JObject.FromObject(resp.result["store"]));
  215. UserProxy.Instance.player.baseInfo.gold = int.Parse(resp.result["gold"].ToString());
  216. var hero = UserProxy.Instance.player.collectHero.UpdateHero(JObject.FromObject( resp.result["hero"]));
  217. callback?.Invoke(hero);
  218. });
  219. }
  220. #region 已注释掉内容
  221. /////// <summary>
  222. /////// [6306] 更改英雄的锁定状态
  223. /////// </summary>
  224. /////// <param name="uid">玩家UID</param>
  225. /////// <param name="zoneid">玩家分区ID</param>
  226. /////// <param name="heroUID">英雄唯一ID</param>
  227. /////// <param name="isLock">是否锁定</param>
  228. /////// <param name="callback">成功回调处理</param>
  229. ////public void ChangeHeroLockState(string uid, int zoneid, string heroUID, bool isLock, Action callback)
  230. ////{
  231. //// Post(CmdCode.hero_changelockstate, uid, zoneid, new object[] { heroUID, isLock },
  232. //// resp =>
  233. //// {
  234. //// if (callback != null)
  235. //// {
  236. //// callback.Invoke();
  237. //// }
  238. //// });
  239. ////}
  240. ///////// <summary>
  241. ///////// 获得一个英雄
  242. ///////// </summary>
  243. ///////// <param name="uid">玩家UID</param>
  244. ///////// <param name="zoneid">玩家分区ID</param>
  245. ///////// <param name="heroid">模板ID</param>
  246. ///////// <param name="callback">成功回调处理</param>
  247. //////public void GetHero(string uid, int zoneid, string heroid, Action<JObject> callback)
  248. //////{
  249. ////// Post(CmdCode.cmd_hero_gethero, uid, zoneid, new object[] { heroid },
  250. ////// resp =>
  251. ////// {
  252. ////// if (callback != null)
  253. ////// {
  254. ////// callback.Invoke(resp.result);
  255. ////// }
  256. ////// });
  257. //////}
  258. #endregion
  259. /// <summary>
  260. /// 6321 花费钻石或者金币或者 人民币购买一个 英雄
  261. /// </summary>
  262. /// <param name="heroid"></param>
  263. /// <param name="callback"></param>
  264. public void BuyHero(string heroid, string type, int price, int piecesId, int piecesNum, Action<JObject> callback)
  265. {
  266. Post(CmdCode.cmd_hero_buyHero, new object[] { heroid, type, price, piecesId, piecesNum }, resp => callback?.Invoke(resp.result));
  267. }
  268. #region 已注释内容
  269. /////// <summary>
  270. /////// [6309]对英雄进行强化升阶
  271. /////// </summary>
  272. /////// <param name="uid">玩家UID</param>
  273. /////// <param name="zoneid">玩家分区ID</param>
  274. /////// <param name="herouid">突破的英雄UID</param>
  275. /////// <param name="costHeros">消耗的英雄UID字符组</param>
  276. /////// <param name="costGold">消耗金币</param>
  277. /////// <param name="callback">成功回调处理</param>
  278. ////public void HeroStrength(string uid, int zoneid, string herouid, string costHeros, int costGold, Action<JObject> callback)
  279. ////{
  280. //// Post(CmdCode.cmd_hero_strength, uid, zoneid, new object[] { herouid, costHeros, costGold },
  281. //// resp =>
  282. //// {
  283. //// if (callback != null)
  284. //// {
  285. //// callback.Invoke(resp.result);
  286. //// }
  287. //// });
  288. ////}
  289. /////// <summary>
  290. /////// [6305 ]对英雄进行升星
  291. /////// </summary>
  292. /////// <param name="uid">玩家UID</param>
  293. /////// <param name="zoneid">玩家分区ID</param>
  294. /////// <param name="herouid">操作的英雄UID</param>
  295. /////// <param name="costHeros">消耗的英雄UID字符组合</param>
  296. /////// <param name="costGold">消耗金币</param>
  297. /////// <param name="callback">成功回调处理</param>
  298. ////public void HeroUpStar(string uid, int zoneid, string herouid, string costHeros, int costGold, Action<JObject> callback)
  299. ////{
  300. //// Post(CmdCode.hero_upstar, uid, zoneid, new object[] { herouid, costHeros, costGold },
  301. //// resp =>
  302. //// {
  303. //// if (callback != null)
  304. //// {
  305. //// callback.Invoke(resp.result);
  306. //// }
  307. //// });
  308. ////}
  309. /////// <summary>
  310. /////// [6305 ]对英雄进行升星
  311. /////// </summary>
  312. ////public void HeroUpStar(string uid, int zoneid, string herouid, string costpieces, int piecesNum, string costIitems, int itemNum, string moneyType, int num, Action<JObject> callback)
  313. ////{
  314. //// Post(CmdCode.hero_upstar, uid, zoneid, new object[] { herouid, costpieces, piecesNum, costIitems, itemNum, moneyType, num },
  315. //// resp =>
  316. //// {
  317. //// if (callback != null)
  318. //// {
  319. //// callback.Invoke(resp.result);
  320. //// }
  321. //// });
  322. ////}
  323. #endregion
  324. /// <summary>
  325. /// 6322 英雄神血升级
  326. /// </summary>
  327. /// <param name="herouid"></param>
  328. /// <param name="costpieces"></param>
  329. /// <param name="piecesNum"></param>
  330. /// <param name="moneyType"></param>
  331. /// <param name="num"></param>
  332. /// <param name="callback"></param>
  333. [Obsolete("升级神血", true)]
  334. public void HeroUpGodBlood(string herouid, string costpieces, int piecesNum, string moneyType, int num, Action<JObject> callback)
  335. {
  336. Post(CmdCode.cmd_hero_upGodBlood, new object[] { herouid, costpieces, piecesNum, moneyType, num }, resp => callback?.Invoke(resp.result));
  337. }
  338. #region 已注释内容
  339. /////// <summary>
  340. /////// [6310 ]对英雄进行结算好感度
  341. /////// </summary>
  342. /////// <param name="uid">玩家UID</param>
  343. /////// <param name="zoneid">玩家分区ID</param>
  344. /////// <param name="herouid">操作的英雄UID</param>
  345. /////// <param name="favorId">解锁的好感度</param>
  346. /////// <param name="callback">成功回调处理</param>
  347. ////public void HeroOpenFavor(string uid, int zoneid, string herouid, int favorId, Action<JObject> callback)
  348. ////{
  349. //// Post(CmdCode.cmd_hero_openFavor, uid, zoneid, new object[] { herouid, favorId },
  350. //// resp =>
  351. //// {
  352. //// if (callback != null)
  353. //// {
  354. //// callback.Invoke(resp.result);
  355. //// }
  356. //// });
  357. ////}
  358. /////// <summary>
  359. /////// [6311 ]对英雄分解.进而获得晶石
  360. /////// </summary>
  361. /////// <param name="uid">玩家UID</param>
  362. /////// <param name="zoneid">玩家分区ID</param>
  363. /////// <param name="costHeros">分解消耗的英雄id列表</param>
  364. /////// <param name="callback">成功回调处理</param>
  365. ////public void HeroSeparate(string uid, int zoneid, string costHeros, Action<JObject> callback)
  366. ////{
  367. //// Post(CmdCode.cmd_hero_separate, uid, zoneid, new object[] { costHeros },
  368. //// resp =>
  369. //// {
  370. //// if (callback != null)
  371. //// {
  372. //// callback.Invoke(resp.result);
  373. //// }
  374. //// });
  375. ////}
  376. ///////// <summary>
  377. ///////// 6312 购买玩家可以收集的英雄的数量上限
  378. ///////// </summary>
  379. ///////// <param name="uid">玩家UID</param>
  380. ///////// <param name="zoneid">玩家分区ID</param>
  381. ///////// <param name="buyNum">购买数量</param>
  382. ///////// <param name="costCash">消耗钻石</param>
  383. ///////// <param name="callback">成功回调处理</param>
  384. //////public void BuyHeroMaxCountLimt(string uid, int zoneid, int buyNum, int costCash, Action<JObject> callback)
  385. //////{
  386. ////// Post(CmdCode.cmd_hero_buyCollectHeroLimtCount, uid, zoneid, new object[] { buyNum, costCash },
  387. ////// resp =>
  388. ////// {
  389. ////// if (callback != null)
  390. ////// {
  391. ////// callback.Invoke(resp.result);
  392. ////// }
  393. ////// });
  394. //////}
  395. ///////// <summary>
  396. ///////// 6313 更改好友支援的英雄ID
  397. ///////// </summary>
  398. ///////// <param name="uid">玩家UID</param>
  399. ///////// <param name="zoneid">玩家分区ID</param>
  400. ///////// <param name="heroUId">操作的英雄UID</param>
  401. ///////// <param name="callback">成功回调处理</param>
  402. //////public void ChangeFriendSupport(string uid, int zoneid, string heroUId, Action<JObject> callback)
  403. //////{
  404. ////// Post(CmdCode.cmd_hero_changefriendsupport, uid, zoneid, new object[] { heroUId },
  405. ////// resp =>
  406. ////// {
  407. ////// if (callback != null)
  408. ////// {
  409. ////// callback.Invoke(resp.result);
  410. ////// }
  411. ////// });
  412. //////}
  413. #endregion
  414. /// <summary>
  415. /// 6314 对英雄的技能进行升级
  416. /// </summary>
  417. /// <param name="heroUId">操作的英雄UID</param>
  418. /// <param name="mainSkillId">升级的技能ID</param>
  419. /// <param name="subskillID">升级的技能类型</param>
  420. /// <param name="callback">成功回调处理</param>
  421. public void HeroUpgradeSkillLevel(int heroUId, int mainSkillId, int subskillID, Action<GameHeroVo> callback)
  422. {
  423. Post(CmdCode.cmd_hero_upgradeSkillLevel, new object[] { heroUId, mainSkillId, subskillID }, resp =>
  424. {
  425. var sm = sm_subSkill.GetMoById(sm_subSkill.GetMoById(subskillID).nextLevel_Id); // 扣除金币
  426. UserProxy.Instance.player.ChangeUserAccount(AccountType.gold, -int.Parse(sm.upgradeCost));
  427. var hero = UserProxy.Instance.player.collectHero.UpdateHero(resp.result); // 更新英雄
  428. callback?.Invoke(hero);
  429. });
  430. }
  431. /// <summary>
  432. /// 6325 英雄 - 一键升级某个子技能
  433. /// </summary>
  434. /// <param name="heroUID">英雄实例ID</param>
  435. /// <param name="mainSkillId">主技能id</param>
  436. /// <param name="subSkillId">子技能ID</param>
  437. /// <param name="targetSubSkillID">将要升级到的子技能ID</param>
  438. /// <param name="costGold">花费金币</param>
  439. /// <param name="callback"></param>
  440. public void HeroOnekeyUpgradeSkillLevel(int heroUID, int mainSkillId, int subSkillId, int targetSubSkillID, int costGold, Action<GameHeroVo> callback)
  441. {
  442. Post(CmdCode.cmd_hero_onekeyUpgradeSkill, new object[] { heroUID, mainSkillId, subSkillId, targetSubSkillID, costGold }, resp =>
  443. {
  444. UserProxy.Instance.player.ChangeUserAccount(AccountType.gold, -costGold); // 扣除金币
  445. var hero = UserProxy.Instance.player.collectHero.UpdateHero(resp.result); // 更新英雄
  446. callback?.Invoke(hero);
  447. });
  448. }
  449. /// <summary>
  450. /// 6324 英雄 - 解锁某个子技能
  451. /// </summary>
  452. /// <param name="heroUID">英雄实例ID</param>
  453. /// <param name="mainSkillId">主机能ID</param>
  454. /// <param name="subSkillId">子技能ID</param>
  455. /// <param name="callback"></param>
  456. public void HeroUnlockSkill(int heroUID, int mainSkillId, int subSkillId, Action<GameHeroVo> callback)
  457. {
  458. Post(CmdCode.cmd_hero_unlockSkill, new object[] { heroUID, mainSkillId, subSkillId }, resp =>
  459. {
  460. var sm = sm_subSkill.GetMoById(subSkillId); // 扣除金币
  461. UserProxy.Instance.player.ChangeUserAccount(AccountType.gold, -int.Parse(sm.unlockCost));
  462. var hero = UserProxy.Instance.player.collectHero.UpdateHero(resp.result); // 更新英雄
  463. callback?.Invoke(hero);
  464. });
  465. }
  466. /// <summary>
  467. /// 6315 对英雄的战队配置存储文件
  468. /// </summary>
  469. /// <param name="teamconfig">队伍配置的字符串文件</param>
  470. /// <param name="callback">成功回调处理</param>
  471. public void SaveHeroTeamConfig(string teamconfig, Action<JObject> callback)
  472. {
  473. Post(CmdCode.cmd_hero_saveHeroTeamConfig, new object[] { teamconfig }, resp => callback?.Invoke(resp.result));
  474. }
  475. /// <summary>
  476. /// 6327 言灵升级
  477. /// </summary>
  478. /// <param name="uid"></param>
  479. /// <param name="wuqiList"></param>
  480. /// <param name="items"></param>
  481. /// <param name="callback"></param>
  482. public void YanLingUpgrade(int uid, List<ItemVo> itemList, Action<UserYanlingVo> callback)
  483. {
  484. List<string> yanlingList = new List<string>();
  485. Dictionary<string, int> items = new Dictionary<string, int>();
  486. foreach (ItemVo vo in itemList)
  487. {
  488. if (vo.nMo.subType == (int)EItemSubType.YanLing)
  489. {
  490. yanlingList.Add(vo.uid);
  491. }
  492. else
  493. {
  494. items[vo.typeId] = vo.count;
  495. }
  496. }
  497. Post(CmdCode.cmd_hero_YanlinUpLevel, new object[] { uid, yanlingList, items }, resp =>
  498. {
  499. var p = UserProxy.Instance.player;
  500. p.InitFromStore((JObject)resp.result["store"]);
  501. UserProxy.Instance.player.baseInfo.gold = int.Parse(resp.result["gold"].ToString());
  502. callback?.Invoke(p.collectYanling.items[uid]);
  503. });
  504. }
  505. /// <summary>
  506. /// 言灵突破
  507. /// </summary>
  508. /// <param name="yanlingUID"></param>
  509. /// <param name="callback"></param>
  510. public void YanLingTupo(int uid, Action callback)
  511. {
  512. Post(CmdCode.cmd_hero_StrengthenStar, new object[] { uid }, resp =>
  513. {
  514. //var p = UserProxy.Instance.player;
  515. //p.InitFromStore((JObject)resp.result["store"]);
  516. UserProxy.Instance.player.baseInfo.gold = int.Parse(resp.result["gold"].ToString());
  517. callback?.Invoke();
  518. });
  519. }
  520. /// <summary>
  521. /// 6326 言灵强化升星---废弃
  522. /// </summary>
  523. /// <param name="callback"></param>
  524. /// <param name="faild"></param>
  525. [Obsolete("请清理调用此方法的旧模块,有问题找-gwang", true)]
  526. public void StrengthenStar(int yanlingUid,List<int> uidList,Action<UserYanlingVo> callback, Action faild = null)
  527. {
  528. Post(CmdCode.cmd_hero_StrengthenStar, new object[] { yanlingUid, uidList},
  529. resp =>
  530. {
  531. //var p = UserProxy.Instance.player;
  532. //p.InitFromStore((JObject)resp.result["store"]);
  533. UserYanlingVo vo = UserProxy.Instance.player.collectYanling.items[yanlingUid];
  534. if (callback != null)
  535. {
  536. callback.Invoke(vo);
  537. }
  538. });
  539. }
  540. /// <summary>
  541. /// 6327 言灵等级升级---废弃
  542. /// </summary>
  543. /// <param name="yanlingUid"></param>
  544. /// <param name="type"></param>
  545. /// <param name="callback"></param>
  546. /// <param name="faild"></param>
  547. [Obsolete("请清理调用此方法的旧模块,有问题找-gwang",true)]
  548. public void YanlinUpLevel(int yanlingUid,int type, Action<UserYanlingVo> callback, Action faild = null)
  549. {
  550. Post(CmdCode.cmd_hero_YanlinUpLevel, new object[] { yanlingUid, type },
  551. resp =>
  552. {
  553. var p = UserProxy.Instance.player;
  554. //p.InitFromStore((JObject)resp.result["store"]);
  555. p.baseInfo.gold = int.Parse(resp.result["gold"].ToString());
  556. p.baseInfo.resPoint = int.Parse(resp.result["resPoint"].ToString());
  557. UserYanlingVo vo = UserProxy.Instance.player.collectYanling.items[yanlingUid];
  558. if (callback != null)
  559. {
  560. callback.Invoke(vo);
  561. }
  562. });
  563. }
  564. /// <summary>
  565. /// 突破
  566. /// </summary>
  567. /// <param name="id"></param>
  568. /// <param name="callback"></param>
  569. public void HuanlingshiTuPo(int id,Action<GameHeroVo> callback)
  570. {
  571. Post(CmdCode.cmd_hero_tupo, new object[] { id },
  572. resp =>
  573. {
  574. var p = UserProxy.Instance.player;
  575. //p.InitFromStore((JObject)resp.result["store"]);
  576. p.baseInfo.gold = int.Parse(resp.result["gold"].ToString());
  577. var vo = UserProxy.Instance.player.collectHero.UpdateHero(JObject.FromObject(resp.result["hero"]));
  578. if (callback != null)
  579. {
  580. callback.Invoke(vo);
  581. }
  582. });
  583. }
  584. /// <summary>
  585. /// 选择一件添加后的加成的星级经验
  586. /// </summary>
  587. /// <param name="uidList"></param>
  588. /// <returns></returns>
  589. public int GetAddStarExp(List<int> uidList)
  590. {
  591. Dictionary<int, UserYanlingVo> items = UserProxy.Instance.player.collectYanling.items;
  592. int addExp = 0;
  593. foreach (int uid in uidList)
  594. {
  595. if (items.ContainsKey(uid))
  596. {
  597. sm_item_yanling mo = sm_item_yanling.GetMoById(int.Parse(items[uid].typeId));
  598. addExp += mo.addStarExp;
  599. }
  600. }
  601. return addExp;
  602. }
  603. /// <summary>
  604. /// 言灵替换
  605. /// </summary>
  606. /// <param name="yanlingUid"></param>
  607. /// <param name="yanlingReplaceUid"></param>
  608. /// <param name="callback"></param>
  609. /// <param name="faild"></param>
  610. public void YanlinReplace(int heroId, int yanlingRank, int heroReplaceId, int yanlingReplaceRank, Action<GameHeroVo> callback)
  611. {
  612. Post(CmdCode.cmd_hero_YanLingReplace, new object[] { heroId, yanlingRank, heroReplaceId, yanlingReplaceRank },
  613. resp =>
  614. {
  615. var p = UserProxy.Instance.player;
  616. p.InitFromStore((JObject)resp.result["store"]);
  617. JObject jhero = JObject.Parse(resp.result["hero"].ToString());
  618. foreach (KeyValuePair<string, JToken> kv in jhero)
  619. {
  620. var heroVo = UserProxy.Instance.player.collectHero.UpdateHero(JObject.FromObject(kv.Value));
  621. }
  622. var vo = UserProxy.Instance.player.collectHero.UpdateHero(JObject.FromObject(resp.result["selfhero"]));
  623. callback?.Invoke(vo);
  624. });
  625. }
  626. /// <summary>
  627. /// 6330 召唤言灵
  628. /// </summary>
  629. /// <param name="heroId"></param>
  630. /// <param name="callback"></param>
  631. public void zhaohuanYanLing(int cardId, Action<ItemVo> callback)
  632. {
  633. Post(CmdCode.cmd_hero_zhaohuanYanLing, new object[] { cardId },
  634. resp =>
  635. {
  636. var p = UserProxy.Instance.player;
  637. p.InitFromStore((JObject)resp.result["store"]);
  638. p.baseInfo.gold = int.Parse(resp.result["gold"].ToString());
  639. string yanlingId = resp.result["yanlingId"].ToString();
  640. ItemVo vo = new ItemVo();
  641. vo.typeId = yanlingId;
  642. vo.count = 1;
  643. callback?.Invoke(vo);
  644. });
  645. }
  646. #region ' 英雄评价相关 '
  647. /// <summary>
  648. /// 6316 拉取指定英雄的评论信息
  649. /// </summary>
  650. /// <param name="heroModelId">英雄ID</param>
  651. /// <param name="callback">成功回调处理,参数:{"ret" => [], 'score' => int}</param>
  652. public void GetDiscuss(string heroModelId, int index, Action<GetDiscussRetVo> callback)
  653. {
  654. Post(CmdCode.cmd_hero_GetDiscuss, new object[] { heroModelId, index }, resp => callback.Invoke(resp.result.ToObject<GetDiscussRetVo>()));
  655. }
  656. /// <summary>
  657. /// 6317 评论指定英雄
  658. /// </summary>
  659. /// <param name="heroId">英雄ID</param>
  660. /// <param name="content">评价内容</param>
  661. /// <param name="callback">成功回调处理,参数:{"ret" => { 'uid' => $uid,'name' => $req->userInfo->game->name,'msg' => $content,'ts' => now(),'praise' => 0 }}</param>
  662. public void PosttDiscuss(string heroId, string content, Action<PostDiscussRetVo> callback)
  663. {
  664. Post(CmdCode.cmd_hero_PostDiscuss, new object[] { heroId, content },
  665. resp => callback?.Invoke(resp.result.ToObject<PostDiscussRetVo>()));
  666. }
  667. /// <summary>
  668. /// 6319 删除对某个英雄的评价
  669. /// </summary>
  670. /// <param name="heroId">英雄ID</param>
  671. /// <param name="callback">成功回调处理,参数:{"ret" => { 'uid' => $uid,'name' => $req->userInfo->game->name,'msg' => $content,'ts' => now(),'praise' => 0 }}</param>
  672. public void DeleteDiscuss(string heroId, Action<DeleteDiscussRetVo> callback)
  673. {
  674. Post(CmdCode.cmd_hero_DeleteDiscuss, new object[] { heroId }, resp => callback?.Invoke(resp.result.ToObject<DeleteDiscussRetVo>()));
  675. }
  676. /// <summary>
  677. /// 6318 给指定评价点赞
  678. /// </summary>
  679. /// <param name="heroId">英雄ID</param>
  680. /// <param name="discuss_uid">评价以评论者的uid作为索引</param>
  681. /// <param name="callback">成功回调处理,参数:{"ret" => { 'uid' => $uid,'name' => $req->userInfo->game->name,'msg' => $content,'ts' => now(),'praise' => 0 }}</param>
  682. public void PraiseDiscuss(string heroId, string discuss_uid, Action<PriaseDiscussRetVo> callback)
  683. {
  684. Post(CmdCode.cmd_hero_PraiseDiscuss, new object[] { heroId, discuss_uid }, resp => callback?.Invoke(resp.result.ToObject<PriaseDiscussRetVo>()));
  685. }
  686. /// <summary>
  687. /// 6320 给某个英雄打分
  688. /// </summary>
  689. /// <param name="heroId">英雄ID</param>
  690. /// <param name="score">评分(0~5)</param>
  691. /// <param name="callback">成功回调处理,参数:{"ret" => { 'uid' => $uid,'name' => $req->userInfo->game->name,'msg' => $content,'ts' => now(),'praise' => 0 }}</param>
  692. public void ScoreIt(string heroId, int score, Action<ScoreItRetVo> callback)
  693. {
  694. Post(CmdCode.cmd_hero_scoreit, new object[] { heroId, score }, resp => callback?.Invoke(resp.result.ToObject<ScoreItRetVo>()));
  695. }
  696. #endregion
  697. ///////// <summary>
  698. ///////// 通过消耗英雄碎片 解锁英雄
  699. ///////// </summary>
  700. ///////// <param name="uid"></param>
  701. ///////// <param name="zoneid"></param>
  702. ///////// <param name="heroModelId"></param>
  703. ///////// <param name="score"></param>
  704. ///////// <param name="callback"></param>
  705. //////public void UnLockHeroByPieces(string uid, int zoneid, string heroModelId, int piecesId, int piecesNum, Action<JObject> callback)
  706. //////{
  707. ////// Post(CmdCode.cmd_hero_unlockByPieces, uid, zoneid, new object[] { heroModelId, piecesId, piecesNum },
  708. ////// resp =>
  709. ////// {
  710. ////// if (callback != null)
  711. ////// {
  712. ////// callback.Invoke(resp.result);
  713. ////// }
  714. ////// });
  715. //////}
  716. ///
  717. #endregion
  718. }