@takaro/modules 0.0.13 → 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.
- package/dist/main.js +2 -0
- package/dist/main.js.map +1 -1
- package/dist/modules/dailyRewards/commands/daily.d.ts +1 -0
- package/dist/modules/dailyRewards/commands/daily.js +106 -0
- package/dist/modules/dailyRewards/commands/daily.js.map +1 -0
- package/dist/modules/dailyRewards/commands/streak.d.ts +1 -0
- package/dist/modules/dailyRewards/commands/streak.js +34 -0
- package/dist/modules/dailyRewards/commands/streak.js.map +1 -0
- package/dist/modules/dailyRewards/commands/topstreak.d.ts +1 -0
- package/dist/modules/dailyRewards/commands/topstreak.js +44 -0
- package/dist/modules/dailyRewards/commands/topstreak.js.map +1 -0
- package/dist/modules/dailyRewards/functions/utils.d.ts +5 -0
- package/dist/modules/dailyRewards/functions/utils.js +32 -0
- package/dist/modules/dailyRewards/functions/utils.js.map +1 -0
- package/dist/modules/dailyRewards/hooks/dailyLoginCheck.d.ts +1 -0
- package/dist/modules/dailyRewards/hooks/dailyLoginCheck.js +19 -0
- package/dist/modules/dailyRewards/hooks/dailyLoginCheck.js.map +1 -0
- package/dist/modules/dailyRewards/index.d.ts +4 -0
- package/dist/modules/dailyRewards/index.js +117 -0
- package/dist/modules/dailyRewards/index.js.map +1 -0
- package/dist/modules/economyUtils/commands/shop.js +6 -6
- package/dist/modules/economyUtils/commands/shop.js.map +1 -1
- package/dist/modules/economyUtils/cronJobs/zombieKillReward.d.ts +1 -0
- package/dist/modules/economyUtils/cronJobs/zombieKillReward.js +66 -0
- package/dist/modules/economyUtils/cronJobs/zombieKillReward.js.map +1 -0
- package/dist/modules/economyUtils/index.js +21 -2
- package/dist/modules/economyUtils/index.js.map +1 -1
- package/dist/modules/geoBlock/hooks/IPDetected.js +4 -2
- package/dist/modules/geoBlock/hooks/IPDetected.js.map +1 -1
- package/dist/modules/gimme/commands/gimme.js +17 -6
- package/dist/modules/gimme/commands/gimme.js.map +1 -1
- package/dist/modules/gimme/index.js +23 -2
- package/dist/modules/gimme/index.js.map +1 -1
- package/dist/modules/playerOnboarding/commands/starterkit.js +16 -3
- package/dist/modules/playerOnboarding/commands/starterkit.js.map +1 -1
- package/dist/modules/playerOnboarding/index.js +24 -3
- package/dist/modules/playerOnboarding/index.js.map +1 -1
- package/dist/modules.json +88 -11
- package/package.json +1 -1
- package/scripts/buildBuiltinJson.ts +46 -2
- package/src/__tests__/economy/shop.integration.test.ts +23 -0
- package/src/__tests__/economy/zombieKillReward.integration.test.ts +296 -0
- package/src/__tests__/gimme.integration.test.ts +8 -2
- package/src/__tests__/onboarding.integration.test.ts +23 -20
- package/src/main.ts +2 -0
- package/src/modules/dailyRewards/commands/daily.js +118 -0
- package/src/modules/dailyRewards/commands/streak.js +42 -0
- package/src/modules/dailyRewards/commands/topstreak.js +54 -0
- package/src/modules/dailyRewards/functions/utils.js +36 -0
- package/src/modules/dailyRewards/hooks/dailyLoginCheck.js +24 -0
- package/src/modules/dailyRewards/index.ts +126 -0
- package/src/modules/economyUtils/commands/shop.js +6 -6
- package/src/modules/economyUtils/cronJobs/zombieKillReward.js +82 -0
- package/src/modules/economyUtils/index.ts +23 -2
- package/src/modules/geoBlock/hooks/IPDetected.js +4 -2
- package/src/modules/gimme/commands/gimme.js +16 -6
- package/src/modules/gimme/index.ts +23 -2
- package/src/modules/playerOnboarding/commands/starterkit.js +19 -5
- 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;
|
|
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 @@
|
|
|
1
|
+
export {};
|
|
@@ -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,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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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { takaro, data, TakaroUserError } from '@takaro/helpers';
|
|
2
2
|
async function main() {
|
|
3
|
-
const { arguments: args, player, gameServerId
|
|
3
|
+
const { arguments: args, player, gameServerId } = data;
|
|
4
4
|
const { page, item, action } = args;
|
|
5
5
|
const prefix = (await takaro.settings.settingsControllerGetOne('commandPrefix', gameServerId)).data.data.value;
|
|
6
6
|
// If command is called without any arguments
|
|
@@ -29,12 +29,14 @@ async function main() {
|
|
|
29
29
|
}
|
|
30
30
|
const currencyName = (await takaro.settings.settingsControllerGetOne('currencyName', data.gameServerId)).data.data;
|
|
31
31
|
if (!item) {
|
|
32
|
-
// List the shop items
|
|
32
|
+
// List the shop items with index
|
|
33
|
+
let index = 1;
|
|
33
34
|
for (const listing of shopItems.data.data) {
|
|
34
35
|
const items = listing.items.slice(0, 3).map((item) => {
|
|
35
36
|
return `${item.amount}x ${item.item.name}`;
|
|
36
37
|
});
|
|
37
|
-
await player.pm(
|
|
38
|
+
await player.pm(`${index} - ${listing.name} - ${listing.price} ${currencyName.value}. ${items.join(', ')}`);
|
|
39
|
+
index++;
|
|
38
40
|
}
|
|
39
41
|
return;
|
|
40
42
|
}
|
|
@@ -52,12 +54,10 @@ async function main() {
|
|
|
52
54
|
return;
|
|
53
55
|
}
|
|
54
56
|
if (action === 'buy') {
|
|
55
|
-
if (!user)
|
|
56
|
-
throw new TakaroUserError('You must link your account to Takaro to use this command.');
|
|
57
57
|
const orderRes = await takaro.shopOrder.shopOrderControllerCreate({
|
|
58
58
|
amount: 1,
|
|
59
59
|
listingId: selectedItem.id,
|
|
60
|
-
|
|
60
|
+
playerId: player.id,
|
|
61
61
|
});
|
|
62
62
|
await player.pm(`You have purchased ${selectedItem.name} for ${selectedItem.price} ${currencyName.value}.`);
|
|
63
63
|
await takaro.shopOrder.shopOrderControllerClaim(orderRes.data.data.id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shop.js","sourceRoot":"","sources":["../../../../src/modules/economyUtils/commands/shop.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEhE,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"shop.js","sourceRoot":"","sources":["../../../../src/modules/economyUtils/commands/shop.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { data, takaro, checkPermission } from '@takaro/helpers';
|
|
2
|
+
const VARIABLE_KEY = 'lastZombieKillReward';
|
|
3
|
+
async function main() {
|
|
4
|
+
const { gameServerId, module: mod } = data;
|
|
5
|
+
const lastRunRes = (await takaro.variable.variableControllerSearch({
|
|
6
|
+
filters: {
|
|
7
|
+
key: [VARIABLE_KEY],
|
|
8
|
+
gameServerId: [gameServerId],
|
|
9
|
+
moduleId: [mod.moduleId],
|
|
10
|
+
},
|
|
11
|
+
})).data.data;
|
|
12
|
+
// We last ran the rewards script at this time
|
|
13
|
+
// If this is the first time we run it, just get the last 5 minutes
|
|
14
|
+
const lastRun = lastRunRes.length ? new Date(JSON.parse(lastRunRes[0].value)) : new Date(Date.now() - 5 * 60 * 1000);
|
|
15
|
+
// Fetch all the kill events since the last time we gave out rewards
|
|
16
|
+
const killEvents = (await takaro.event.eventControllerSearch({
|
|
17
|
+
filters: { eventName: ['entity-killed'], gameserverId: [gameServerId] },
|
|
18
|
+
greaterThan: { createdAt: lastRun.toISOString() },
|
|
19
|
+
limit: 1000,
|
|
20
|
+
})).data.data;
|
|
21
|
+
console.log(`Found ${killEvents.length} kill events since ${lastRun.toISOString()}`);
|
|
22
|
+
// Group the events by player
|
|
23
|
+
const playerKills = {};
|
|
24
|
+
for (const killEvent of killEvents) {
|
|
25
|
+
if (!playerKills[killEvent.playerId]) {
|
|
26
|
+
playerKills[killEvent.playerId] = [];
|
|
27
|
+
}
|
|
28
|
+
playerKills[killEvent.playerId].push(killEvent);
|
|
29
|
+
}
|
|
30
|
+
// Give each player their reward
|
|
31
|
+
// We use Promise.allSettled to run this concurrently
|
|
32
|
+
const results = await Promise.allSettled(Object.entries(playerKills).map(async ([playerId, kills]) => {
|
|
33
|
+
const pog = (await takaro.playerOnGameserver.playerOnGameServerControllerGetOne(gameServerId, playerId)).data
|
|
34
|
+
.data;
|
|
35
|
+
const hasPermission = checkPermission(pog, 'ZOMBIE_KILL_REWARD_OVERRIDE');
|
|
36
|
+
const defaultReward = mod.userConfig.zombieKillReward;
|
|
37
|
+
const reward = hasPermission && hasPermission.count != null ? hasPermission.count : defaultReward;
|
|
38
|
+
const totalReward = reward * kills.length;
|
|
39
|
+
return takaro.playerOnGameserver.playerOnGameServerControllerAddCurrency(gameServerId, playerId, {
|
|
40
|
+
currency: totalReward,
|
|
41
|
+
});
|
|
42
|
+
}));
|
|
43
|
+
// Log any errors
|
|
44
|
+
for (const result of results) {
|
|
45
|
+
if (result.status === 'rejected') {
|
|
46
|
+
console.error(result.reason);
|
|
47
|
+
throw new Error(`Failed to give rewards: ${result.reason}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Update the last run time
|
|
51
|
+
if (lastRunRes.length) {
|
|
52
|
+
await takaro.variable.variableControllerUpdate(lastRunRes[0].id, {
|
|
53
|
+
value: JSON.stringify(new Date()),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
await takaro.variable.variableControllerCreate({
|
|
58
|
+
key: VARIABLE_KEY,
|
|
59
|
+
value: JSON.stringify(new Date()),
|
|
60
|
+
moduleId: mod.moduleId,
|
|
61
|
+
gameServerId,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
await main();
|
|
66
|
+
//# sourceMappingURL=zombieKillReward.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zombieKillReward.js","sourceRoot":"","sources":["../../../../src/modules/economyUtils/cronJobs/zombieKillReward.js"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BuiltinModule, ICommand, IPermission } from '../../BuiltinModule.js';
|
|
1
|
+
import { BuiltinModule, ICommand, ICronJob, IPermission } from '../../BuiltinModule.js';
|
|
2
2
|
export class EconomyUtils extends BuiltinModule {
|
|
3
3
|
constructor() {
|
|
4
4
|
super('economyUtils', 'A set of commands to allow players to manage their currency.', JSON.stringify({
|
|
@@ -11,6 +11,12 @@ export class EconomyUtils extends BuiltinModule {
|
|
|
11
11
|
description: 'When a player transfers money, they must confirm the transfer when the amount is equal or above this value. Set to 0 to disable.',
|
|
12
12
|
default: 0,
|
|
13
13
|
},
|
|
14
|
+
zombieKillReward: {
|
|
15
|
+
title: 'Zombie kill reward',
|
|
16
|
+
type: 'number',
|
|
17
|
+
description: 'The default amount of currency a player receives for killing a zombie. This can be overridden by roles.',
|
|
18
|
+
default: 1,
|
|
19
|
+
},
|
|
14
20
|
},
|
|
15
21
|
required: [],
|
|
16
22
|
additionalProperties: false,
|
|
@@ -22,6 +28,19 @@ export class EconomyUtils extends BuiltinModule {
|
|
|
22
28
|
description: 'Allows players to manage currency of other players. This includes granting and revoking currency.',
|
|
23
29
|
canHaveCount: false,
|
|
24
30
|
}),
|
|
31
|
+
new IPermission({
|
|
32
|
+
permission: 'ZOMBIE_KILL_REWARD_OVERRIDE',
|
|
33
|
+
friendlyName: 'Zombie kill reward override',
|
|
34
|
+
description: 'Allows a role to override the amount of currency a player receives for killing a entity.',
|
|
35
|
+
canHaveCount: true,
|
|
36
|
+
}),
|
|
37
|
+
];
|
|
38
|
+
this.cronJobs = [
|
|
39
|
+
new ICronJob({
|
|
40
|
+
function: this.loadFn('cronJobs', 'zombieKillReward'),
|
|
41
|
+
name: 'zombieKillReward',
|
|
42
|
+
temporalValue: '*/5 * * * *',
|
|
43
|
+
}),
|
|
25
44
|
];
|
|
26
45
|
this.commands = [
|
|
27
46
|
new ICommand({
|
|
@@ -64,7 +83,7 @@ export class EconomyUtils extends BuiltinModule {
|
|
|
64
83
|
function: this.loadFn('commands', 'revokeCurrency'),
|
|
65
84
|
name: 'revokeCurrency',
|
|
66
85
|
trigger: 'revokecurrency',
|
|
67
|
-
helpText: '
|
|
86
|
+
helpText: 'Revokes money from a player. The money disappears.',
|
|
68
87
|
arguments: [
|
|
69
88
|
{
|
|
70
89
|
name: 'receiver',
|