Advertisement
Guest User

saltpie temp mod of a mod

a guest
Feb 19th, 2023
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.11 KB | None | 0 0
  1. /* eslint-disable @typescript-eslint/no-unused-vars */
  2. /* eslint-disable @typescript-eslint/indent */
  3. import { DependencyContainer } from "tsyringe";
  4. import { IPreAkiLoadMod } from "@spt-aki/models/external/IPreAkiLoadMod";
  5. import { IPostDBLoadMod } from "@spt-aki/models/external/IPostDBLoadMod";
  6. import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
  7. import { PreAkiModLoader } from "@spt-aki/loaders/PreAkiModLoader";
  8. import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
  9. import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
  10. import { ImageRouter } from "@spt-aki/routers/ImageRouter";
  11. import { ConfigServer } from "@spt-aki/servers/ConfigServer";
  12. import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes";
  13. import { ITraderAssort, ITraderBase } from "@spt-aki/models/eft/common/tables/ITrader";
  14. import { ITraderConfig, UpdateTime } from "@spt-aki/models/spt/config/ITraderConfig";
  15. import { JsonUtil } from "@spt-aki/utils/JsonUtil";
  16. import { Item } from "@spt-aki/models/eft/common/tables/IItem";
  17. import { ILocaleGlobalBase } from "@spt-aki/models/spt/server/ILocaleBase";
  18. import ImporterUtil from "@spt-aki/utils/ImporterUtil";
  19. import RagfairPriceService from "@spt-aki/services/RagfairPriceService";
  20. import * as baseJson from "../db/base.json";
  21. import { profile } from "console";
  22. import type { StaticRouterModService } from "@spt-aki/services/mod/staticRouter/StaticRouterModService";
  23.  
  24. import { HandbookHelper } from "@spt-aki/helpers/HandbookHelper";
  25. class SampleTrader implements IPreAkiLoadMod, IPostDBLoadMod {
  26. mod: string;
  27. logger: ILogger;
  28.  
  29. constructor() {
  30. this.mod = "Hephaestus";
  31. }
  32.  
  33. // Perform these actions before server fully loads
  34. public preAkiLoad(container: DependencyContainer): void {
  35. this.logger = container.resolve<ILogger>("WinstonLogger");
  36. const staticRouterModService = container.resolve<StaticRouterModService>("StaticRouterModService");
  37. this.logger.debug(`[${this.mod}] Loading... `);
  38. this.registerProfileImage(container);
  39. this.setupTraderUpdateTime(container);
  40. staticRouterModService.registerStaticRouter(
  41. "HephaestusUpdateLogin",
  42. [
  43. {
  44. url: "/launcher/profile/login",
  45. action: (url: string, info: any, sessionId: string, output: string) => {
  46. //
  47. const databaseServer = container.resolve<DatabaseServer>("DatabaseServer");
  48. const tables = databaseServer.getTables();
  49. tables.traders[baseJson._id].assort = this.createAssortTable(container, sessionId);
  50. return output;
  51. },
  52. },
  53. ],
  54. "aki"
  55. );
  56. staticRouterModService.registerStaticRouter(
  57. "HephaestusUpdate",
  58. [
  59. {
  60. url: "/client/game/profile/items/moving",
  61. action: (url: string, info: any, sessionId: string, output: string) => {
  62. //
  63. if (info.data[0].Action != "Examine") {
  64. const databaseServer = container.resolve<DatabaseServer>("DatabaseServer");
  65. const tables = databaseServer.getTables();
  66. tables.traders[baseJson._id].assort = this.createAssortTable(container, sessionId);
  67. }
  68. return output;
  69. },
  70. },
  71. ],
  72. "aki"
  73. );
  74. this.logger.debug(`[${this.mod}] Loaded`);
  75. }
  76.  
  77. public postDBLoad(container: DependencyContainer): void {
  78. this.logger.debug(`[${this.mod}] Delayed Loading... `);
  79. const databaseServer = container.resolve<DatabaseServer>("DatabaseServer");
  80.  
  81. const jsonUtil = container.resolve<JsonUtil>("JsonUtil");
  82.  
  83. // Keep a reference to the tables
  84. const tables = databaseServer.getTables();
  85. // Add the new trader to the trader lists in DatabaseServer
  86.  
  87. tables.traders[baseJson._id] = {
  88. assort: {
  89. items: [],
  90. barter_scheme: {},
  91. loyal_level_items: {},
  92. },
  93. base: jsonUtil.deserialize(jsonUtil.serialize(baseJson)) as ITraderBase,
  94. questassort: undefined,
  95. };
  96. // For each language, add locale for the new trader
  97. const locales = Object.values(tables.locales.global) as Record<string, string>[];
  98. for (const locale of locales) {
  99. locale[`${baseJson._id} FullName`] = baseJson.name;
  100. locale[`${baseJson._id} FirstName`] = "Hephaestus";
  101. locale[`${baseJson._id} Nickname`] = baseJson.nickname;
  102. locale[`${baseJson._id} Location`] = baseJson.location;
  103. locale[`${baseJson._id} Description`] = "You share the reseller license of your creations to Hephaestus and in return you get a hefty discount.";
  104. }
  105. this.logger.debug(`[${this.mod}] Delayed Loaded`);
  106. }
  107.  
  108. private registerProfileImage(container: DependencyContainer): void {
  109. // Reference the mod "res" folder
  110.  
  111. const preAkiModLoader = container.resolve<PreAkiModLoader>("PreAkiModLoader");
  112. const imageFilepath = `./${preAkiModLoader.getModPath(this.mod)}res`;
  113. // Register route pointing to the profile picture
  114. const imageRouter = container.resolve<ImageRouter>("ImageRouter");
  115. imageRouter.addRoute(baseJson.avatar.replace(".jpg", ""), `${imageFilepath}/img.jpg`);
  116. }
  117.  
  118. private setupTraderUpdateTime(container: DependencyContainer): void {
  119. // Add refresh time in seconds when Config server allows to set configs
  120. const configServer = container.resolve<ConfigServer>("ConfigServer");
  121. const traderConfig = configServer.getConfig<ITraderConfig>(ConfigTypes.TRADER);
  122. const traderRefreshConfig: UpdateTime = { traderId: baseJson._id, seconds: 3600 };
  123. traderConfig.updateTime.push(traderRefreshConfig);
  124. }
  125.  
  126. private getPresets(container: DependencyContainer, assortTable, currency, sessionId) {
  127. const jsonUtil = container.resolve<JsonUtil>("JsonUtil");
  128. const importer = container.resolve("ImporterUtil");
  129. const handbookHelper = container.resolve<HandbookHelper>("HandbookHelper");
  130.  
  131. let profiles = {};
  132. const RandomUtil = container.resolve("RandomUtil");
  133. if (sessionId) {
  134. let t = container.resolve("ProfileHelper").getFullProfile(sessionId);
  135. profiles = { [sessionId]: t };
  136. } else {
  137. profiles = importer.loadRecursive("user/profiles/");
  138. }
  139. let pool = [];
  140. for (let p in profiles || []) {
  141. for (let wbk in profiles[p].weaponbuilds) {
  142. let wb = profiles[p].weaponbuilds[wbk];
  143. let preItems = wb.items;
  144. let id = preItems[0]._id;
  145. let tpl = preItems[0]._tpl;
  146. if (pool.includes(id)) {
  147. continue;
  148. }
  149. pool.push(id);
  150. preItems[0] = {
  151. _id: id,
  152. _tpl: tpl,
  153. parentId: "hideout",
  154. slotId: "hideout",
  155. upd: {
  156. UnlimitedCount: true,
  157. StackObjectsCount: 2000,
  158. },
  159. preWeapon: true,
  160. };
  161. let preItemsObj = jsonUtil.clone(preItems);
  162.  
  163.  
  164. let totalPrice = 0;
  165. for (let preItemObj of preItemsObj) {
  166. assortTable.items.push(preItemObj);
  167. totalPrice += handbookHelper.getTemplatePrice(preItemObj._tpl);
  168. }
  169.  
  170. const price = totalPrice || 712;
  171. console.log({ price });
  172. let offerRequire = [
  173. {
  174. count: price,
  175. _tpl: currency,
  176. },
  177. ];
  178. // offerRequire[0].count = Math.round(offerRequire[0].count * RandomUtil.getFloat(0.2, 0.4));
  179. assortTable.barter_scheme[id] = [offerRequire];
  180. assortTable.loyal_level_items[id] = 1;
  181. }
  182. }
  183. return assortTable;
  184. }
  185.  
  186. private createAssortTable(container, sessionId): ITraderAssort {
  187. // Assort table
  188. let assortTable: ITraderAssort = {
  189. items: [],
  190. barter_scheme: {},
  191. loyal_level_items: {},
  192. };
  193. // const currency = "5449016a4bdc2d6f028b456f";//ROUBLES
  194. let currency = "569668774bdc2da2298b4568";
  195. let config;
  196. try {
  197. config = require(`../config/config.json`);
  198. } catch (e) {}
  199. try {
  200. assortTable = this.getPresets(container, assortTable, (config || {}).currency || currency, sessionId);
  201. } catch (error) {
  202. console.error(error);
  203. }
  204. return assortTable;
  205. }
  206. }
  207.  
  208. module.exports = { mod: new SampleTrader() };
  209.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement