ItemModel.ts 6.9 KB

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