ItemModel.ts 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. import Gamecfg from "../../../common/gameCfg";
  2. import { gameMethod } from "../../../common/gameMethod";
  3. import { xlsItemInfo } from "../../../common/xlsConfig";
  4. import { KindItem } from "../../../common/Xys";
  5. import UIHelp from "../../../logic/ui/UIHelp";
  6. import EventMng from "../../../manager/EventMng";
  7. import { ResItemInfo } from "../../../shared/item/PtlItemInfo";
  8. import { MsgItemChange_s } from "../../../shared/item/server/MsgItemChange_s";
  9. import { I18n } from "../../../utils/I18nUtil";
  10. import { ItemEvent } from "../../const/EventConst";
  11. import { IconUrl } from "../../const/ResConst";
  12. import { ConstItem, ItemBaseCfg, ItemKind } from "../../const/TypeConst";
  13. import GameDataCenter from "../../GameDataCenter";
  14. import { ItemModelData } from "./ItemModelData";
  15. export default class ItemModel extends ItemModelData {
  16. // 本次登录不再提示是否购买,直接买的列表
  17. buyNowList: { [key: string]: boolean } = {};
  18. // private _showEfect: number[] = null;
  19. // get showEffectList() {
  20. // if (this._showEfect == null) {
  21. // this._showEfect = Gamecfg.mathInfo.getItem("item_show_effect")?.pram?.item;
  22. // }
  23. // return this._showEfect;
  24. // }
  25. constructor() {
  26. super("item");
  27. this.buyNowList = {};
  28. }
  29. onRegister(): void {
  30. GameDataCenter.gameServer.ListenMsg("item/server/ItemChange_s", this.onItemChange, this);
  31. }
  32. onItemChange(msg: MsgItemChange_s) {
  33. for (let key in msg) {
  34. if (Object.prototype.hasOwnProperty.call(msg, key)) {
  35. this.ItemInfo[key] = msg[key];
  36. }
  37. }
  38. EventMng.emit(ItemEvent.UP_ITEM);
  39. }
  40. setItemInfo(res: ResItemInfo) {
  41. this.ItemInfo = res;
  42. }
  43. getKindItem(kindItem: KindItem): KindItem {
  44. let item: KindItem = [];
  45. item[0] = kindItem?.[0] ?? 1;
  46. item[1] = kindItem?.[1];
  47. item[2] = this.getItemCount(kindItem);
  48. return item;
  49. }
  50. getItemCount(kindItem: KindItem | ConstItem): number {
  51. if (kindItem?.[0] == ItemKind.money) {
  52. switch (kindItem?.[1]) {
  53. case ConstItem.sp[1]:
  54. return GameDataCenter.gridMap.hcInfo?.tili ?? 0;
  55. default:
  56. return this.ItemInfo?.[kindItem?.[1]] ?? 0;
  57. }
  58. }
  59. }
  60. getItemCfgBase(kindItem: KindItem | ConstItem): ItemBaseCfg {
  61. // console.log("kindItem:", kindItem)
  62. let baseInfo: ItemBaseCfg = {
  63. id: "",
  64. name: "",
  65. icon: "",
  66. pinzhi: 0,
  67. desc: "",
  68. type: "",
  69. detailType: "",
  70. from: [],
  71. param: {},
  72. iconUrl: "",
  73. iconshowtype: 0,
  74. };
  75. let kind = kindItem?.[0];
  76. let conf: any = null;
  77. let id = kindItem?.[1];
  78. let temp: { name: string; desc: string; url: string; pinzhi: number } = { name: null, desc: null, url: null, pinzhi: null };
  79. switch (kind) {
  80. case ItemKind.money:
  81. conf = Gamecfg.itemInfo.getItem(id?.toString());
  82. temp.name = I18n.getItemMoneyName(id);
  83. temp.desc = I18n.getItemMoneyDesc(id);
  84. temp.url = IconUrl.item + conf?.icon;
  85. break;
  86. }
  87. if (conf == null) {
  88. console.error("道具配置找不到:", JSON.stringify(kindItem));
  89. return baseInfo;
  90. }
  91. baseInfo.id = conf.id;
  92. baseInfo.name = temp.name; // temp.name
  93. baseInfo.icon = conf?.icon || "";
  94. baseInfo.pinzhi = conf?.pinzhi || temp?.pinzhi || 1;
  95. baseInfo.desc = temp?.desc || "";
  96. baseInfo.type = conf?.type || "";
  97. baseInfo.detailType = conf?.detailType || "";
  98. baseInfo.from = conf?.from || [];
  99. baseInfo.param = conf?.param || {};
  100. baseInfo.iconUrl = temp.url || "";
  101. baseInfo.iconshowtype = conf?.iconshowtype || 0;
  102. baseInfo.kind = kind;
  103. return baseInfo;
  104. }
  105. //根据类型获取道具列表
  106. getItemListByType(type: string): KindItem[] {
  107. let list: KindItem[] = [];
  108. return list;
  109. }
  110. // 检测道具是否满足,弹出获取途径
  111. isEnough(needItem: KindItem | ConstItem, showTips: boolean = true, preCostCount: number = 0): boolean {
  112. if (gameMethod.isEmpty(needItem)) {
  113. console.error("item.isEnough 传入参数错误");
  114. return;
  115. }
  116. //不传数量默认为1
  117. if ((this.getItemCount(needItem) - preCostCount) >= (needItem[2] ?? 1)) {
  118. return true;
  119. }
  120. if (showTips) {
  121. // if (UIHelp.IsShowingUI(UIBattleFailView) == false) {
  122. let itemCfg = Gamecfg.itemInfo.getItem(needItem[1].toString());
  123. if (!itemCfg) return false;
  124. UIHelp.ShowI18nTips("common_unenough_1", I18n.getItemMoneyName(itemCfg.id));
  125. if (this.checkJumpList(itemCfg).length > 0) {
  126. // FguiMgr.Instance.openUI(ItemDetailViewView, ViewZorder.POP, null, needItem); //来源改成详情
  127. }
  128. // }
  129. }
  130. return false;
  131. }
  132. /** 对多个道具检测是否足够 */
  133. isEnoughItems(needItems: KindItem[], showTips: boolean = true) {
  134. let isEnough: boolean = true;
  135. needItems.some(element => {
  136. if (!this.isEnough(element, showTips)) {
  137. isEnough = false;
  138. return;
  139. }
  140. });
  141. return isEnough;
  142. }
  143. /**
  144. * 检测道具预表现后是否满足,弹出获取途径
  145. * @param needItem
  146. * @param showTips
  147. * @param preCost 已预扣除道具数量
  148. * @returns
  149. */
  150. isPreEnough(needItem: KindItem | ConstItem, showTips: boolean = true): boolean {
  151. if (gameMethod.isEmpty(needItem)) {
  152. console.error("item.isEnough 传入参数错误");
  153. return;
  154. }
  155. //不传数量默认为1
  156. if (this.getItemPreCostCount(needItem) >= (needItem[2] ?? 1)) {
  157. return true;
  158. }
  159. if (showTips) {
  160. // if (UIHelp.IsShowingUI(UIBattleFailView) == false) {
  161. let itemCfg = Gamecfg.itemInfo.getItem(needItem[1].toString());
  162. if (!itemCfg) return false;
  163. UIHelp.ShowI18nTips("common_unenough_1", I18n.getItemMoneyName(itemCfg.id));
  164. if (this.checkJumpList(itemCfg).length > 0) {
  165. // FguiMgr.Instance.openUI(ItemDetailViewView, ViewZorder.POP, null, needItem); //来源改成详情
  166. }
  167. // }
  168. }
  169. return false;
  170. }
  171. private cacheItemCost: {
  172. [id: number]: number;
  173. } = {};
  174. getItemPreCostCount(kindItem: KindItem | ConstItem) {
  175. if (kindItem?.[0] == ItemKind.money) {
  176. let count = this.getItemCount(kindItem);
  177. count -= this.getItemPreCost(kindItem);
  178. return count < 0 ? 0 : count;
  179. }
  180. }
  181. private getItemPreCost(item: ConstItem | KindItem) {
  182. return this.cacheItemCost[item[1]] ?? 0;
  183. }
  184. addPreCost(item: ConstItem | KindItem, num: number) {
  185. if (this.cacheItemCost[item[1]] == null) {
  186. this.cacheItemCost[item[1]] = 0;
  187. }
  188. this.cacheItemCost[item[1]] += num;
  189. }
  190. clearPreCostItem(): void {
  191. this.cacheItemCost = {};
  192. }
  193. checkJumpList(itemMoney: xlsItemInfo): xlsJumpInfo[] {
  194. let jumplist = [];
  195. // if (itemMoney?.from?.length > 0) {
  196. // for (let index = 0; index < itemMoney.from.length; index++) {
  197. // let id = itemMoney.from[index]?.toString();
  198. // let jumpCfg = Gamecfg.jumpInfo.getItem(id);
  199. // if (jumpCfg) {
  200. // //关闭支付,隐藏跳转
  201. // if (jumpCfg.isHideByPay && !GameDataCenter.order.isOpenPay) {
  202. // continue;
  203. // }
  204. // jumplist.push(jumpCfg);
  205. // }
  206. // }
  207. // }
  208. return jumplist;
  209. }
  210. //发送消息
  211. async sendItemInfo() {
  212. let ret = await GameDataCenter.gameServer.ReqApi("item/ItemInfo", {});
  213. if (ret?.res) {
  214. this.setItemInfo(ret.res);
  215. EventMng.emit(ItemEvent.UP_ITEM);
  216. }
  217. }
  218. }