@takaro/modules 0.0.14 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/main.js +2 -0
  2. package/dist/main.js.map +1 -1
  3. package/dist/modules/dailyRewards/commands/daily.d.ts +1 -0
  4. package/dist/modules/dailyRewards/commands/daily.js +106 -0
  5. package/dist/modules/dailyRewards/commands/daily.js.map +1 -0
  6. package/dist/modules/dailyRewards/commands/streak.d.ts +1 -0
  7. package/dist/modules/dailyRewards/commands/streak.js +34 -0
  8. package/dist/modules/dailyRewards/commands/streak.js.map +1 -0
  9. package/dist/modules/dailyRewards/commands/topstreak.d.ts +1 -0
  10. package/dist/modules/dailyRewards/commands/topstreak.js +44 -0
  11. package/dist/modules/dailyRewards/commands/topstreak.js.map +1 -0
  12. package/dist/modules/dailyRewards/functions/utils.d.ts +5 -0
  13. package/dist/modules/dailyRewards/functions/utils.js +32 -0
  14. package/dist/modules/dailyRewards/functions/utils.js.map +1 -0
  15. package/dist/modules/dailyRewards/hooks/dailyLoginCheck.d.ts +1 -0
  16. package/dist/modules/dailyRewards/hooks/dailyLoginCheck.js +19 -0
  17. package/dist/modules/dailyRewards/hooks/dailyLoginCheck.js.map +1 -0
  18. package/dist/modules/dailyRewards/index.d.ts +4 -0
  19. package/dist/modules/dailyRewards/index.js +117 -0
  20. package/dist/modules/dailyRewards/index.js.map +1 -0
  21. package/dist/modules/geoBlock/hooks/IPDetected.js +4 -2
  22. package/dist/modules/geoBlock/hooks/IPDetected.js.map +1 -1
  23. package/dist/modules/gimme/commands/gimme.js +17 -6
  24. package/dist/modules/gimme/commands/gimme.js.map +1 -1
  25. package/dist/modules/gimme/index.js +23 -2
  26. package/dist/modules/gimme/index.js.map +1 -1
  27. package/dist/modules/playerOnboarding/commands/starterkit.js +16 -3
  28. package/dist/modules/playerOnboarding/commands/starterkit.js.map +1 -1
  29. package/dist/modules/playerOnboarding/index.js +24 -3
  30. package/dist/modules/playerOnboarding/index.js.map +1 -1
  31. package/dist/modules.json +72 -7
  32. package/package.json +1 -1
  33. package/scripts/buildBuiltinJson.ts +46 -2
  34. package/src/__tests__/economy/shop.integration.test.ts +23 -0
  35. package/src/__tests__/gimme.integration.test.ts +8 -2
  36. package/src/__tests__/onboarding.integration.test.ts +23 -20
  37. package/src/main.ts +2 -0
  38. package/src/modules/dailyRewards/commands/daily.js +118 -0
  39. package/src/modules/dailyRewards/commands/streak.js +42 -0
  40. package/src/modules/dailyRewards/commands/topstreak.js +54 -0
  41. package/src/modules/dailyRewards/functions/utils.js +36 -0
  42. package/src/modules/dailyRewards/hooks/dailyLoginCheck.js +24 -0
  43. package/src/modules/dailyRewards/index.ts +126 -0
  44. package/src/modules/geoBlock/hooks/IPDetected.js +4 -2
  45. package/src/modules/gimme/commands/gimme.js +16 -6
  46. package/src/modules/gimme/index.ts +23 -2
  47. package/src/modules/playerOnboarding/commands/starterkit.js +19 -5
  48. package/src/modules/playerOnboarding/index.ts +24 -3
package/dist/main.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { ChatBridge } from './modules/chatBridge/index.js';
2
+ import { DailyRewards } from './modules/dailyRewards/index.js';
2
3
  import { EconomyUtils } from './modules/economyUtils/index.js';
3
4
  import { GeoBlock } from './modules/geoBlock/index.js';
4
5
  import { Gimme } from './modules/gimme/index.js';
@@ -26,6 +27,7 @@ export function getModules() {
26
27
  new Lottery(),
27
28
  new GeoBlock(),
28
29
  new TimedShutdown(),
30
+ new DailyRewards(),
29
31
  ];
30
32
  }
31
33
  return cached;
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC3G,cAAc,gBAAgB,CAAC;AAE/B,IAAI,MAAM,GAAyC,IAAI,CAAC;AAExD,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG;YACP,IAAI,KAAK,EAAE;YACX,IAAI,SAAS,EAAE;YACf,IAAI,gBAAgB,EAAE;YACtB,IAAI,cAAc,EAAE;YACpB,IAAI,UAAU,EAAE;YAChB,IAAI,KAAK,EAAE;YACX,IAAI,cAAc,EAAE;YACpB,IAAI,YAAY,EAAE;YAClB,IAAI,OAAO,EAAE;YACb,IAAI,QAAQ,EAAE;YACd,IAAI,aAAa,EAAE;SACpB,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC3G,cAAc,gBAAgB,CAAC;AAE/B,IAAI,MAAM,GAAyC,IAAI,CAAC;AAExD,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG;YACP,IAAI,KAAK,EAAE;YACX,IAAI,SAAS,EAAE;YACf,IAAI,gBAAgB,EAAE;YACtB,IAAI,cAAc,EAAE;YACpB,IAAI,UAAU,EAAE;YAChB,IAAI,KAAK,EAAE;YACX,IAAI,cAAc,EAAE;YACpB,IAAI,YAAY,EAAE;YAClB,IAAI,OAAO,EAAE;YACb,IAAI,QAAQ,EAAE;YACd,IAAI,aAAa,EAAE;YACnB,IAAI,YAAY,EAAE;SACnB,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,106 @@
1
+ import { takaro, data, TakaroUserError, checkPermission } from '@takaro/helpers';
2
+ import { DAILY_KEY, STREAK_KEY, getMultiplier } from './utils.js';
3
+ async function main() {
4
+ const { pog, gameServerId, module: mod } = data;
5
+ if (!checkPermission(pog, 'DAILY_CLAIM')) {
6
+ throw new TakaroUserError('You do not have permission to claim daily rewards.');
7
+ }
8
+ // Get last claim time
9
+ const lastClaimRes = await takaro.variable.variableControllerSearch({
10
+ filters: {
11
+ key: [DAILY_KEY],
12
+ gameServerId: [gameServerId],
13
+ playerId: [pog.playerId],
14
+ moduleId: [mod.moduleId],
15
+ },
16
+ });
17
+ const now = new Date();
18
+ let streak = 1;
19
+ if (lastClaimRes.data.data.length > 0) {
20
+ const lastClaim = new Date(JSON.parse(lastClaimRes.data.data[0].value));
21
+ const hoursSinceLastClaim = (now - lastClaim) / (1000 * 60 * 60);
22
+ // Check if 24 hours have passed
23
+ if (hoursSinceLastClaim < 24) {
24
+ const nextClaimTime = new Date(lastClaim.getTime() + 24 * 60 * 60 * 1000);
25
+ throw new TakaroUserError(`You can claim your next reward at ${nextClaimTime.toLocaleString()}`);
26
+ }
27
+ // Get current streak
28
+ const streakRes = await takaro.variable.variableControllerSearch({
29
+ filters: {
30
+ key: [STREAK_KEY],
31
+ gameServerId: [gameServerId],
32
+ playerId: [pog.playerId],
33
+ moduleId: [mod.moduleId],
34
+ },
35
+ });
36
+ if (streakRes.data.data.length > 0) {
37
+ // If claimed within 48 hours, increment streak
38
+ if (hoursSinceLastClaim < 48) {
39
+ streak = Math.min(JSON.parse(streakRes.data.data[0].value) + 1, mod.userConfig.maxStreak);
40
+ await takaro.variable.variableControllerUpdate(streakRes.data.data[0].id, {
41
+ value: JSON.stringify(streak),
42
+ });
43
+ }
44
+ else {
45
+ // Reset streak if more than 48 hours
46
+ await takaro.variable.variableControllerUpdate(streakRes.data.data[0].id, {
47
+ value: JSON.stringify(1),
48
+ });
49
+ }
50
+ }
51
+ else {
52
+ // Create new streak record
53
+ await takaro.variable.variableControllerCreate({
54
+ key: STREAK_KEY,
55
+ value: JSON.stringify(1),
56
+ gameServerId,
57
+ playerId: pog.playerId,
58
+ moduleId: mod.moduleId,
59
+ });
60
+ }
61
+ // Update last claim time
62
+ await takaro.variable.variableControllerUpdate(lastClaimRes.data.data[0].id, {
63
+ value: JSON.stringify(now),
64
+ });
65
+ }
66
+ else {
67
+ // First time claim
68
+ await takaro.variable.variableControllerCreate({
69
+ key: DAILY_KEY,
70
+ value: JSON.stringify(now),
71
+ gameServerId,
72
+ playerId: pog.playerId,
73
+ moduleId: mod.moduleId,
74
+ });
75
+ await takaro.variable.variableControllerCreate({
76
+ key: STREAK_KEY,
77
+ value: JSON.stringify(1),
78
+ gameServerId,
79
+ playerId: pog.playerId,
80
+ moduleId: mod.moduleId,
81
+ });
82
+ }
83
+ const multiplier = await getMultiplier(pog);
84
+ const baseReward = mod.userConfig.baseReward * streak * multiplier;
85
+ let bonusReward = 0;
86
+ let milestoneMessage = '';
87
+ // Check for milestones
88
+ for (const milestone of mod.userConfig.milestoneRewards) {
89
+ if (streak === milestone.days) {
90
+ bonusReward = milestone.reward;
91
+ milestoneMessage = `\n${milestone.message}`;
92
+ break;
93
+ }
94
+ }
95
+ // Award total rewards
96
+ const totalReward = baseReward + bonusReward;
97
+ await takaro.playerOnGameserver.playerOnGameServerControllerAddCurrency(gameServerId, pog.playerId, {
98
+ currency: totalReward,
99
+ });
100
+ const currencyName = (await takaro.settings.settingsControllerGetOne('currencyName', gameServerId)).data.data.value;
101
+ await pog.pm(`Daily reward claimed! You received ${totalReward} ${currencyName}\n` +
102
+ `Current streak: ${streak} days${multiplier > 1 ? ` (${multiplier}x bonus!)` : ''}` +
103
+ milestoneMessage);
104
+ }
105
+ await main();
106
+ //# sourceMappingURL=daily.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daily.js","sourceRoot":"","sources":["../../../../src/modules/dailyRewards/commands/daily.js"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
1
+ import { data, takaro } from '@takaro/helpers';
2
+ import { getPlayerStreak, getLastClaim, getMultiplier } from './utils.js';
3
+ async function main() {
4
+ const { pog, gameServerId, module: mod } = data;
5
+ const streak = await getPlayerStreak(gameServerId, pog.playerId, mod.moduleId);
6
+ const lastClaim = await getLastClaim(gameServerId, pog.playerId, mod.moduleId);
7
+ const multiplier = await getMultiplier(pog);
8
+ const prefix = (await takaro.settings.settingsControllerGetOne('commandPrefix', gameServerId)).data.data.value;
9
+ if (!streak || !lastClaim) {
10
+ await pog.pm(`You haven't claimed any daily rewards yet! Use ${prefix}daily to get started.`);
11
+ return;
12
+ }
13
+ const nextClaimTime = new Date(lastClaim.getTime() + 24 * 60 * 60 * 1000);
14
+ const now = new Date();
15
+ const canClaim = now >= nextClaimTime;
16
+ // Find next milestone
17
+ let nextMilestone = null;
18
+ for (const milestone of mod.userConfig.milestoneRewards) {
19
+ if (milestone.days > streak) {
20
+ nextMilestone = milestone;
21
+ break;
22
+ }
23
+ }
24
+ let message = `Current streak: ${streak} days${multiplier > 1 ? ` (${multiplier}x donor bonus!)` : ''}\n`;
25
+ message += canClaim
26
+ ? `Your daily reward is available! Use ${prefix}daily to claim it!\n`
27
+ : `Next reward available at: ${nextClaimTime.toLocaleString()}\n`;
28
+ if (nextMilestone) {
29
+ message += `\n🎯 Next milestone: ${nextMilestone.days} days (${nextMilestone.days - streak} days to go!)`;
30
+ }
31
+ await pog.pm(message);
32
+ }
33
+ await main();
34
+ //# sourceMappingURL=streak.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streak.js","sourceRoot":"","sources":["../../../../src/modules/dailyRewards/commands/streak.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE1E,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAEhD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,YAAY,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/E,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,YAAY,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/E,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAE/G,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,CAAC,EAAE,CAAC,kDAAkD,MAAM,uBAAuB,CAAC,CAAC;QAC9F,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,GAAG,IAAI,aAAa,CAAC;IAEtC,sBAAsB;IACtB,IAAI,aAAa,GAAG,IAAI,CAAC;IACzB,KAAK,MAAM,SAAS,IAAI,GAAG,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;QACxD,IAAI,SAAS,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC;YAC5B,aAAa,GAAG,SAAS,CAAC;YAC1B,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,OAAO,GAAG,mBAAmB,MAAM,QAAQ,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,iBAAiB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IAC1G,OAAO,IAAI,QAAQ;QACjB,CAAC,CAAC,uCAAuC,MAAM,sBAAsB;QACrE,CAAC,CAAC,6BAA6B,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC;IAEpE,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,IAAI,wBAAwB,aAAa,CAAC,IAAI,UAAU,aAAa,CAAC,IAAI,GAAG,MAAM,eAAe,CAAC;IAC5G,CAAC;IAED,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,IAAI,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,44 @@
1
+ import { takaro, data } from '@takaro/helpers';
2
+ import { STREAK_KEY } from './utils.js';
3
+ async function main() {
4
+ const { pog, gameServerId, module: mod, arguments: args } = data;
5
+ // Limit count to reasonable number
6
+ const count = Math.min(Math.max(1, args.count), 50);
7
+ // Get all streaks
8
+ const streaksRes = await takaro.variable.variableControllerSearch({
9
+ filters: {
10
+ key: [STREAK_KEY],
11
+ gameServerId: [gameServerId],
12
+ moduleId: [mod.moduleId],
13
+ },
14
+ limit: 1000, // Get all possible streaks
15
+ });
16
+ if (streaksRes.data.data.length === 0) {
17
+ await pog.pm('No players have started their daily streak yet!');
18
+ return;
19
+ }
20
+ // Sort by streak value
21
+ const sortedStreaks = streaksRes.data.data
22
+ .map((record) => ({
23
+ playerId: record.playerId,
24
+ streak: JSON.parse(record.value),
25
+ }))
26
+ .sort((a, b) => b.streak - a.streak)
27
+ .slice(0, count);
28
+ // Get player names
29
+ const playerDetails = await Promise.all(sortedStreaks.map(async (record) => {
30
+ const player = (await takaro.player.playerControllerGetOne(record.playerId)).data.data;
31
+ return {
32
+ name: player.name,
33
+ streak: record.streak,
34
+ };
35
+ }));
36
+ // Build message
37
+ let message = `Top ${count} Daily Streaks:\n\n`;
38
+ playerDetails.forEach((player, index) => {
39
+ message += `${index + 1}. ${player.name}: ${player.streak} days\n`;
40
+ });
41
+ await pog.pm(message);
42
+ }
43
+ await main();
44
+ //# sourceMappingURL=topstreak.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topstreak.js","sourceRoot":"","sources":["../../../../src/modules/dailyRewards/commands/topstreak.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAEjE,mCAAmC;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAEpD,kBAAkB;IAClB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAChE,OAAO,EAAE;YACP,GAAG,EAAE,CAAC,UAAU,CAAC;YACjB,YAAY,EAAE,CAAC,YAAY,CAAC;YAC5B,QAAQ,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;SACzB;QACD,KAAK,EAAE,IAAI,EAAE,2BAA2B;KACzC,CAAC,CAAC;IAEH,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,GAAG,CAAC,EAAE,CAAC,iDAAiD,CAAC,CAAC;QAChE,OAAO;IACT,CAAC;IAED,uBAAuB;IACvB,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI;SACvC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;KACjC,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;SACnC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAEnB,mBAAmB;IACnB,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QACjC,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACvF,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IAEF,gBAAgB;IAChB,IAAI,OAAO,GAAG,OAAO,KAAK,qBAAqB,CAAC;IAChD,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACtC,OAAO,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,SAAS,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,IAAI,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ export function getMultiplier(pog: any): Promise<any>;
2
+ export function getPlayerStreak(gameServerId: any, playerId: any, moduleId: any): Promise<number>;
3
+ export function getLastClaim(gameServerId: any, playerId: any, moduleId: any): Promise<Date | null>;
4
+ export const DAILY_KEY: "daily_timestamp";
5
+ export const STREAK_KEY: "daily_streak";
@@ -0,0 +1,32 @@
1
+ import { takaro, checkPermission } from '@takaro/helpers';
2
+ export const DAILY_KEY = 'daily_timestamp';
3
+ export const STREAK_KEY = 'daily_streak';
4
+ export async function getMultiplier(pog) {
5
+ const perm = checkPermission(pog, 'DAILY_REWARD_MULTIPLIER');
6
+ if (perm)
7
+ return perm.count;
8
+ return 1;
9
+ }
10
+ export async function getPlayerStreak(gameServerId, playerId, moduleId) {
11
+ const streakRes = await takaro.variable.variableControllerSearch({
12
+ filters: {
13
+ key: [STREAK_KEY],
14
+ gameServerId: [gameServerId],
15
+ playerId: [playerId],
16
+ moduleId: [moduleId],
17
+ },
18
+ });
19
+ return streakRes.data.data.length ? parseInt(JSON.parse(streakRes.data.data[0].value)) : 0;
20
+ }
21
+ export async function getLastClaim(gameServerId, playerId, moduleId) {
22
+ const lastClaimRes = await takaro.variable.variableControllerSearch({
23
+ filters: {
24
+ key: [DAILY_KEY],
25
+ gameServerId: [gameServerId],
26
+ playerId: [playerId],
27
+ moduleId: [moduleId],
28
+ },
29
+ });
30
+ return lastClaimRes.data.data.length ? new Date(JSON.parse(lastClaimRes.data.data[0].value)) : null;
31
+ }
32
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/modules/dailyRewards/functions/utils.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,CAAC,MAAM,SAAS,GAAG,iBAAiB,CAAC;AAC3C,MAAM,CAAC,MAAM,UAAU,GAAG,cAAc,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAG;IACrC,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;IAC7D,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IAC5B,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ;IACpE,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC/D,OAAO,EAAE;YACP,GAAG,EAAE,CAAC,UAAU,CAAC;YACjB,YAAY,EAAE,CAAC,YAAY,CAAC;YAC5B,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ;IACjE,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAClE,OAAO,EAAE;YACP,GAAG,EAAE,CAAC,SAAS,CAAC;YAChB,YAAY,EAAE,CAAC,YAAY,CAAC;YAC5B,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACtG,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { data, takaro } from '@takaro/helpers';
2
+ import { getLastClaim } from './utils.js';
3
+ async function main() {
4
+ const { pog, gameServerId, module: mod } = data;
5
+ const prefix = (await takaro.settings.settingsControllerGetOne('commandPrefix', gameServerId)).data.data.value;
6
+ const lastClaim = await getLastClaim(gameServerId, pog.playerId, mod.moduleId);
7
+ // First time player
8
+ if (!lastClaim) {
9
+ await pog.pm(`Welcome! Use ${prefix}daily to claim your first daily reward and start your streak!`);
10
+ return;
11
+ }
12
+ const now = new Date();
13
+ const nextClaimTime = new Date(lastClaim.getTime() + 24 * 60 * 60 * 1000);
14
+ if (now >= nextClaimTime) {
15
+ await pog.pm(`Your daily reward is ready! Use ${prefix}daily to claim it!`);
16
+ }
17
+ }
18
+ await main();
19
+ //# sourceMappingURL=dailyLoginCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dailyLoginCheck.js","sourceRoot":"","sources":["../../../../src/modules/dailyRewards/hooks/dailyLoginCheck.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAChD,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAE/G,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,YAAY,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE/E,oBAAoB;IACpB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,GAAG,CAAC,EAAE,CAAC,gBAAgB,MAAM,+DAA+D,CAAC,CAAC;QACpG,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAE1E,IAAI,GAAG,IAAI,aAAa,EAAE,CAAC;QACzB,MAAM,GAAG,CAAC,EAAE,CAAC,mCAAmC,MAAM,oBAAoB,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,MAAM,IAAI,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { BuiltinModule } from '../../BuiltinModule.js';
2
+ export declare class DailyRewards extends BuiltinModule<DailyRewards> {
3
+ constructor();
4
+ }
@@ -0,0 +1,117 @@
1
+ /* eslint-disable quotes */
2
+ import { BuiltinModule, ICommand, IFunction, IHook, IPermission } from '../../BuiltinModule.js';
3
+ export class DailyRewards extends BuiltinModule {
4
+ constructor() {
5
+ super('dailyRewards', 'Provides daily login rewards with streak tracking', JSON.stringify({
6
+ $schema: 'http://json-schema.org/draft-07/schema#',
7
+ type: 'object',
8
+ properties: {
9
+ baseReward: {
10
+ type: 'number',
11
+ title: 'Base Reward',
12
+ description: 'Base amount of currency given for daily rewards. This is multiplied by streak level.',
13
+ default: 100,
14
+ minimum: 1,
15
+ },
16
+ maxStreak: {
17
+ type: 'number',
18
+ title: 'Maximum Streak',
19
+ description: 'Maximum streak level a player can reach',
20
+ default: 365,
21
+ minimum: 1,
22
+ },
23
+ milestoneRewards: {
24
+ type: 'array',
25
+ title: 'Milestone Rewards',
26
+ description: 'Additional rewards for reaching certain streak milestones',
27
+ items: {
28
+ type: 'object',
29
+ properties: {
30
+ days: {
31
+ type: 'number',
32
+ description: 'Days needed to reach milestone',
33
+ minimum: 1,
34
+ },
35
+ reward: {
36
+ type: 'number',
37
+ description: 'Bonus reward amount',
38
+ },
39
+ message: {
40
+ type: 'string',
41
+ description: 'Message to show when milestone is reached',
42
+ },
43
+ },
44
+ },
45
+ default: [
46
+ { days: 7, reward: 1000, message: 'You did it! 7 days in a row!' },
47
+ { days: 30, reward: 5000, message: "A whole month! You're on fire!" },
48
+ { days: 90, reward: 20000, message: "90 days! You're unstoppable!" },
49
+ { days: 180, reward: 50000, message: "Half a year! You're a legend!" },
50
+ { days: 365, reward: 150000, message: "365 days! You're a true champion!" },
51
+ ],
52
+ },
53
+ },
54
+ required: ['baseReward', 'maxStreak', 'milestoneRewards'],
55
+ additionalProperties: false,
56
+ }));
57
+ this.functions = [
58
+ new IFunction({
59
+ name: 'utils',
60
+ function: this.loadFn('functions', 'utils'),
61
+ }),
62
+ ];
63
+ this.permissions = [
64
+ new IPermission({
65
+ permission: 'DAILY_CLAIM',
66
+ friendlyName: 'Claim Daily Rewards',
67
+ description: 'Allows the player to claim daily rewards',
68
+ canHaveCount: false,
69
+ }),
70
+ new IPermission({
71
+ permission: 'DAILY_REWARD_MULTIPLIER',
72
+ friendlyName: 'Multiplier',
73
+ description: 'Control the multiplier per role. This is useful to give your donors a little extra. Count is an integer multiplier.',
74
+ canHaveCount: true,
75
+ }),
76
+ ];
77
+ this.commands = [
78
+ new ICommand({
79
+ function: this.loadFn('commands', 'daily'),
80
+ name: 'daily',
81
+ trigger: 'daily',
82
+ helpText: 'Claim your daily reward',
83
+ arguments: [],
84
+ }),
85
+ new ICommand({
86
+ function: this.loadFn('commands', 'streak'),
87
+ name: 'streak',
88
+ trigger: 'streak',
89
+ helpText: 'Check your current daily reward streak and next claim time',
90
+ arguments: [],
91
+ }),
92
+ new ICommand({
93
+ function: this.loadFn('commands', 'topstreak'),
94
+ name: 'topstreak',
95
+ trigger: 'topstreak',
96
+ helpText: 'Shows the players with highest daily reward streaks',
97
+ arguments: [
98
+ {
99
+ name: 'count',
100
+ type: 'number',
101
+ defaultValue: '5',
102
+ helpText: 'Number of players to show (max 25)',
103
+ position: 0,
104
+ },
105
+ ],
106
+ }),
107
+ ];
108
+ this.hooks = [
109
+ new IHook({
110
+ eventType: 'player-connected',
111
+ name: 'dailyLoginCheck',
112
+ function: this.loadFn('hooks', 'dailyLoginCheck'),
113
+ }),
114
+ ];
115
+ }
116
+ }
117
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/dailyRewards/index.ts"],"names":[],"mappings":"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"}
@@ -7,9 +7,11 @@ async function main() {
7
7
  if (ban) {
8
8
  const now = new Date();
9
9
  const expiresAt = new Date(now.getTime() + banDuration * 1000);
10
- await takaro.gameserver.gameServerControllerBanPlayer(gameServerId, player.id, {
10
+ await takaro.player.banControllerCreate({
11
+ gameServerId,
12
+ playerId: player.id,
13
+ until: expiresAt,
11
14
  reason: message,
12
- expiresAt,
13
15
  });
14
16
  }
15
17
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"IPDetected.js","sourceRoot":"","sources":["../../../../src/modules/geoBlock/hooks/IPDetected.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEhE,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC3C,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;IACnC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IAE9E,KAAK,UAAU,YAAY;QACzB,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC;YAC/D,MAAM,MAAM,CAAC,UAAU,CAAC,6BAA6B,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,EAAE;gBAC7E,MAAM,EAAE,OAAO;gBACf,SAAS;aACV,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,EAAE;gBAC9E,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAC3D,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,MAAM,YAAY,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAC5D,MAAM,YAAY,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"IPDetected.js","sourceRoot":"","sources":["../../../../src/modules/geoBlock/hooks/IPDetected.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEhE,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC3C,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;IACnC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IAE9E,KAAK,UAAU,YAAY;QACzB,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC;YAC/D,MAAM,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC;gBACtC,YAAY;gBACZ,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,EAAE;gBAC9E,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAC3D,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,MAAM,YAAY,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAC5D,MAAM,YAAY,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,IAAI,EAAE,CAAC"}
@@ -9,12 +9,23 @@ async function main() {
9
9
  const randomIndex = Math.floor(Math.random() * (items.length + commands.length));
10
10
  const randomOption = items.concat(commands)[randomIndex];
11
11
  if (randomIndex < items.length) {
12
- await takaro.gameserver.gameServerControllerGiveItem(data.gameServerId, data.player.id, {
13
- name: randomOption,
14
- amount: 1,
15
- quality: '0',
16
- });
17
- await data.player.pm(`You received ${randomOption}!`);
12
+ if (typeof randomOption === 'string') {
13
+ await takaro.gameserver.gameServerControllerGiveItem(data.gameServerId, data.player.id, {
14
+ name: randomOption,
15
+ amount: 1,
16
+ quality: '0',
17
+ });
18
+ await data.player.pm(`You received ${randomOption}!`);
19
+ }
20
+ else {
21
+ const item = (await takaro.item.itemControllerFindOne(randomOption.item)).data.data;
22
+ await takaro.gameserver.gameServerControllerGiveItem(data.gameServerId, data.player.id, {
23
+ name: item.code,
24
+ amount: randomOption.amount,
25
+ quality: randomOption.quality ?? '',
26
+ });
27
+ await data.player.pm(`You received ${randomOption.amount}x ${item.name}!`);
28
+ }
18
29
  }
19
30
  else {
20
31
  await takaro.gameserver.gameServerControllerExecuteCommand(data.gameServerId, { command: randomOption });
@@ -1 +1 @@
1
- {"version":3,"file":"gimme.js","sourceRoot":"","sources":["../../../../src/modules/gimme/commands/gimme.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEhE,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;IAEjD,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,eAAe,CACvB,iGAAiG,CAClG,CAAC;IACJ,CAAC;IAED,oFAAoF;IACpF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACjF,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC;IAEzD,IAAI,WAAW,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,MAAM,CAAC,UAAU,CAAC,4BAA4B,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;YACtF,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,GAAG;SACb,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,gBAAgB,YAAY,GAAG,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;IAC3G,CAAC;AACH,CAAC;AAED,MAAM,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"gimme.js","sourceRoot":"","sources":["../../../../src/modules/gimme/commands/gimme.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEhE,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;IAEjD,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,eAAe,CACvB,iGAAiG,CAClG,CAAC;IACJ,CAAC;IAED,oFAAoF;IACpF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACjF,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC;IAEzD,IAAI,WAAW,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC/B,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,MAAM,CAAC,UAAU,CAAC,4BAA4B,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;gBACtF,IAAI,EAAE,YAAY;gBAClB,MAAM,EAAE,CAAC;gBACT,OAAO,EAAE,GAAG;aACb,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,gBAAgB,YAAY,GAAG,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACpF,MAAM,MAAM,CAAC,UAAU,CAAC,4BAA4B,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;gBACtF,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,YAAY,CAAC,MAAM;gBAC3B,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,EAAE;aACpC,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,gBAAgB,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;IAC3G,CAAC;AACH,CAAC;AAED,MAAM,IAAI,EAAE,CAAC"}
@@ -12,7 +12,22 @@ export class Gimme extends BuiltinModule {
12
12
  description: 'List of items that a player can receive.',
13
13
  uniqueItems: true,
14
14
  items: {
15
- type: 'string',
15
+ type: 'object',
16
+ title: 'Item',
17
+ properties: {
18
+ item: {
19
+ type: 'string',
20
+ title: 'Item',
21
+ },
22
+ amount: {
23
+ type: 'number',
24
+ title: 'Amount',
25
+ },
26
+ quality: {
27
+ type: 'string',
28
+ title: 'Quality',
29
+ },
30
+ },
16
31
  },
17
32
  },
18
33
  commands: {
@@ -27,7 +42,13 @@ export class Gimme extends BuiltinModule {
27
42
  required: ['items'],
28
43
  additionalProperties: false,
29
44
  }), JSON.stringify({
30
- items: { 'ui:widget': 'item' },
45
+ items: {
46
+ items: {
47
+ item: {
48
+ 'ui:widget': 'item',
49
+ },
50
+ },
51
+ },
31
52
  }));
32
53
  this.commands = [
33
54
  new ICommand({
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/gimme/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,OAAO,KAAM,SAAQ,aAAoB;IAC7C;QACE,KAAK,CACH,OAAO,EACP,gDAAgD,EAChD,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE,yCAAyC;YAClD,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,aAAa,EAAE,MAAM;oBACrB,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,OAAO;oBACd,WAAW,EAAE,0CAA0C;oBACvD,WAAW,EAAE,IAAI;oBACjB,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;qBACf;iBACF;gBACD,QAAQ,EAAE;oBACR,KAAK,EAAE,UAAU;oBACjB,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;qBACf;iBACF;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;YACnB,oBAAoB,EAAE,KAAK;SAC5B,CAAC,EACF,IAAI,CAAC,SAAS,CAAC;YACb,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;SAC/B,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG;YACd,IAAI,QAAQ,CAAC;gBACX,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC;gBAC1C,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,OAAO;gBAChB,QAAQ,EAAE,0DAA0D;gBACpE,SAAS,EAAE,EAAE;aACd,CAAC;SACH,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/gimme/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,OAAO,KAAM,SAAQ,aAAoB;IAC7C;QACE,KAAK,CACH,OAAO,EACP,gDAAgD,EAChD,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE,yCAAyC;YAClD,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,aAAa,EAAE,MAAM;oBACrB,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,OAAO;oBACd,WAAW,EAAE,0CAA0C;oBACvD,WAAW,EAAE,IAAI;oBACjB,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,KAAK,EAAE,MAAM;wBACb,UAAU,EAAE;4BACV,IAAI,EAAE;gCACJ,IAAI,EAAE,QAAQ;gCACd,KAAK,EAAE,MAAM;6BACd;4BACD,MAAM,EAAE;gCACN,IAAI,EAAE,QAAQ;gCACd,KAAK,EAAE,QAAQ;6BAChB;4BACD,OAAO,EAAE;gCACP,IAAI,EAAE,QAAQ;gCACd,KAAK,EAAE,SAAS;6BACjB;yBACF;qBACF;iBACF;gBACD,QAAQ,EAAE;oBACR,KAAK,EAAE,UAAU;oBACjB,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;qBACf;iBACF;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;YACnB,oBAAoB,EAAE,KAAK;SAC5B,CAAC,EACF,IAAI,CAAC,SAAS,CAAC;YACb,KAAK,EAAE;gBACL,KAAK,EAAE;oBACL,IAAI,EAAE;wBACJ,WAAW,EAAE,MAAM;qBACpB;iBACF;aACF;SACF,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG;YACd,IAAI,QAAQ,CAAC;gBACX,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC;gBAC1C,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,OAAO;gBAChB,QAAQ,EAAE,0DAA0D;gBACpE,SAAS,EAAE,EAAE;aACd,CAAC;SACH,CAAC;IACJ,CAAC;CACF"}
@@ -16,10 +16,23 @@ async function main() {
16
16
  throw new TakaroUserError('You already used starterkit on this server');
17
17
  }
18
18
  await data.player.pm('You are about to receive your starter kit...');
19
- await Promise.all(items.map(async (item) => {
19
+ const itemRecords = (await takaro.item.itemControllerSearch({ filters: { id: items.map((_) => _.item) } })).data.data;
20
+ const fullItems = items.map((item) => {
21
+ const itemRecord = itemRecords.find((record) => record.id === item.item);
22
+ if (!itemRecord) {
23
+ throw new TakaroUserError(`Item with ID ${item.item} not found.`);
24
+ }
25
+ return {
26
+ code: itemRecord.code,
27
+ quality: item.quality,
28
+ amount: item.amount,
29
+ };
30
+ });
31
+ await Promise.all(fullItems.map(async (item) => {
20
32
  return takaro.gameserver.gameServerControllerGiveItem(data.gameServerId, data.player.id, {
21
- name: item,
22
- amount: 1,
33
+ name: item.code,
34
+ quality: item.quality ?? '',
35
+ amount: item.amount,
23
36
  });
24
37
  }));
25
38
  await takaro.variable.variableControllerCreate({
@@ -1 +1 @@
1
- {"version":3,"file":"starterkit.js","sourceRoot":"","sources":["../../../../src/modules/playerOnboarding/commands/starterkit.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEhE,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEzC,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC;IAErD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,eAAe,CACvB,0FAA0F,CAC3F,CAAC;IACJ,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACvE,OAAO,EAAE;YACP,GAAG,EAAE,CAAC,YAAY,CAAC;YACnB,YAAY,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;YACjC,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;SAC3B;KACF,CAAC,CAAC;IAEH,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,eAAe,CAAC,4CAA4C,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,8CAA8C,CAAC,CAAC;IAErE,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACvB,OAAO,MAAM,CAAC,UAAU,CAAC,4BAA4B,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;YACvF,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,CAAC;SACV,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC7C,GAAG,EAAE,YAAY;QACjB,KAAK,EAAE,GAAG;QACV,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;KACzB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,KAAK,CAAC,MAAM,gBAAgB,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"starterkit.js","sourceRoot":"","sources":["../../../../src/modules/playerOnboarding/commands/starterkit.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEhE,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEzC,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC;IAErD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,eAAe,CACvB,0FAA0F,CAC3F,CAAC;IACJ,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACvE,OAAO,EAAE;YACP,GAAG,EAAE,CAAC,YAAY,CAAC;YACnB,YAAY,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;YACjC,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;SAC3B;KACF,CAAC,CAAC;IAEH,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,eAAe,CAAC,4CAA4C,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,8CAA8C,CAAC,CAAC;IAErE,MAAM,WAAW,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACtH,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACnC,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;QACzE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,eAAe,CAAC,gBAAgB,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC;QACpE,CAAC;QACD,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,GAAG,CACf,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,CAAC,UAAU,CAAC,4BAA4B,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;YACvF,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC7C,GAAG,EAAE,YAAY;QACjB,KAAK,EAAE,GAAG;QACV,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;KACzB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,KAAK,CAAC,MAAM,gBAAgB,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,IAAI,EAAE,CAAC"}