Expanded gift system used by spt bot

Gifts can be given multiple times
stash expansions are limited to 5 max by default
dev balaclava can be given 5 times, majority of gifts are 1 use still

Updated data structure to persist gifts received, this will break profiles
This commit is contained in:
Dev 2024-06-08 17:54:05 +01:00
parent f475d4f6f3
commit 75a34f5ca2
9 changed files with 158 additions and 69 deletions

View File

@ -26,6 +26,9 @@
"commandoEnabled": true, "commandoEnabled": true,
"commandoFeatures": { "commandoFeatures": {
"giveCommandEnabled": true "giveCommandEnabled": true
},
"commandUseLimits": {
"StashRows": 5
} }
} }
}, },

View File

@ -219,7 +219,8 @@
"parentId": "658efad286f149afb701c2cc", "parentId": "658efad286f149afb701c2cc",
"slotId": "Helmet_back" "slotId": "Helmet_back"
} }
] ],
"maxToSendPlayer": 1
}, },
"NewYear2021": { "NewYear2021": {
"sender": "System", "sender": "System",
@ -447,7 +448,8 @@
"parentId": "64b4473f3b4c4dd8cdf9999", "parentId": "64b4473f3b4c4dd8cdf9999",
"slotId": "mod_charge" "slotId": "mod_charge"
} }
] ],
"maxToSendPlayer": 1
}, },
"Christmas2022": { "Christmas2022": {
"items": [ "items": [
@ -501,7 +503,8 @@
"messageText": "Merry christmas!", "messageText": "Merry christmas!",
"timestampToSend": 42069, "timestampToSend": 42069,
"associatedEvent": "Christmas", "associatedEvent": "Christmas",
"collectionTimeHours": 48 "collectionTimeHours": 48,
"maxToSendPlayer": 1
}, },
"1CLICKDRESSUP": { "1CLICKDRESSUP": {
"items": [ "items": [
@ -665,7 +668,8 @@
"messageText": "1CLICKDRESSUP", "messageText": "1CLICKDRESSUP",
"timestampToSend": 42069, "timestampToSend": 42069,
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"BARMALEY": { "BARMALEY": {
"items": [ "items": [
@ -826,7 +830,8 @@
"messageText": "BARMALEY", "messageText": "BARMALEY",
"timestampToSend": 42069, "timestampToSend": 42069,
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"S00NS00N": { "S00NS00N": {
"items": [ "items": [
@ -907,7 +912,8 @@
"messageText": "S00NS00N", "messageText": "S00NS00N",
"timestampToSend": 42069, "timestampToSend": 42069,
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"TRAMBON": { "TRAMBON": {
"items": [ "items": [
@ -1084,7 +1090,8 @@
"messageText": "TRAMBON", "messageText": "TRAMBON",
"timestampToSend": 42069, "timestampToSend": 42069,
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"PINEWOOD": { "PINEWOOD": {
"items": [ "items": [
@ -1173,7 +1180,8 @@
"messageText": "PINEWOOD", "messageText": "PINEWOOD",
"timestampToSend": 42069, "timestampToSend": 42069,
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"HESOYAM": { "HESOYAM": {
"items": [ "items": [
@ -1190,7 +1198,8 @@
"sender": "System", "sender": "System",
"messageText": "HESOYAM", "messageText": "HESOYAM",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"PraporGiftDay1": { "PraporGiftDay1": {
"items": [ "items": [
@ -1225,7 +1234,8 @@
"sender": "Trader", "sender": "Trader",
"trader": "PRAPOR", "trader": "PRAPOR",
"localeTextId": "5fd4c8b59e4b2a58b34bbd28 0", "localeTextId": "5fd4c8b59e4b2a58b34bbd28 0",
"collectionTimeHours": 48 "collectionTimeHours": 48,
"maxToSendPlayer": 1
}, },
"PraporGiftDay2": { "PraporGiftDay2": {
"items": [ "items": [
@ -1260,7 +1270,8 @@
"sender": "Trader", "sender": "Trader",
"trader": "PRAPOR", "trader": "PRAPOR",
"localeTextId": "5fd4c8d49e4b2a58b34bbd29 0", "localeTextId": "5fd4c8d49e4b2a58b34bbd29 0",
"collectionTimeHours": 48 "collectionTimeHours": 48,
"maxToSendPlayer": 1
}, },
"KAPPA4U": { "KAPPA4U": {
"items": [ "items": [
@ -1277,7 +1288,8 @@
"sender": "System", "sender": "System",
"messageText": "Easy Kappa", "messageText": "Easy Kappa",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"ENDOFWIPE": { "ENDOFWIPE": {
"items": [ "items": [
@ -1303,7 +1315,8 @@
"sender": "System", "sender": "System",
"localeTextId": "626e5d63bc92c87fd22a943f 0", "localeTextId": "626e5d63bc92c87fd22a943f 0",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"IAMADIRTYLITTLEGOBLIN": { "IAMADIRTYLITTLEGOBLIN": {
"items": [ "items": [
@ -1320,7 +1333,8 @@
"sender": "System", "sender": "System",
"messageText": "You dirty little cheating goblin", "messageText": "You dirty little cheating goblin",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 5
}, },
"CHOMP": { "CHOMP": {
"items": [ "items": [
@ -1337,7 +1351,8 @@
"sender": "System", "sender": "System",
"messageText": "caw caw", "messageText": "caw caw",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"CWX": { "CWX": {
"items": [ "items": [
@ -1354,7 +1369,8 @@
"sender": "System", "sender": "System",
"messageText": "un oh stinky", "messageText": "un oh stinky",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"VALENS": { "VALENS": {
"items": [ "items": [
@ -1494,7 +1510,8 @@
"sender": "System", "sender": "System",
"messageText": "It's time to pew pew.", "messageText": "It's time to pew pew.",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"TERKOIZ": { "TERKOIZ": {
"items": [ "items": [
@ -1511,7 +1528,8 @@
"sender": "System", "sender": "System",
"messageText": "Out of the way, i'm a motorist", "messageText": "Out of the way, i'm a motorist",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"WAFFLE": { "WAFFLE": {
"items": [ "items": [
@ -1537,7 +1555,8 @@
"sender": "System", "sender": "System",
"messageText": "JONKLER NO", "messageText": "JONKLER NO",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"NIGHTWING": { "NIGHTWING": {
"items": [ "items": [
@ -1563,7 +1582,9 @@
"sender": "System", "sender": "System",
"messageText": "JONKLER NO", "messageText": "JONKLER NO",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendToPlayer": 1,
"maxToSendPlayer": 1
}, },
"BSGBIRTHDAY2023": { "BSGBIRTHDAY2023": {
"sender": "System", "sender": "System",
@ -1709,7 +1730,8 @@
"parentId": "652a6f5c35258f985804aa0b", "parentId": "652a6f5c35258f985804aa0b",
"slotId": "main" "slotId": "main"
} }
] ],
"maxToSendPlayer": 1
}, },
"GROUNDZERO": { "GROUNDZERO": {
"items": [ "items": [
@ -1722,7 +1744,8 @@
"sender": "System", "sender": "System",
"messageText": "GROUNDZERO", "messageText": "GROUNDZERO",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"IAMMIGHTY": { "IAMMIGHTY": {
"items": [ "items": [
@ -1962,7 +1985,8 @@
"sender": "System", "sender": "System",
"messageText": "IAMMIGHTY", "messageText": "IAMMIGHTY",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"ARMORPLATES": { "ARMORPLATES": {
"items": [ "items": [
@ -2096,7 +2120,8 @@
"sender": "System", "sender": "System",
"messageText": "ARMORPLATES", "messageText": "ARMORPLATES",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"RICHANDEXPENSIVE": { "RICHANDEXPENSIVE": {
"items": [ "items": [
@ -2164,7 +2189,8 @@
"sender": "System", "sender": "System",
"messageText": "RICHANDEXPENSIVE", "messageText": "RICHANDEXPENSIVE",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"LEFTHANDHEADEYES": { "LEFTHANDHEADEYES": {
"items": [ "items": [
@ -2190,7 +2216,8 @@
"sender": "System", "sender": "System",
"messageText": "LEFTHANDHEADEYES", "messageText": "LEFTHANDHEADEYES",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"EDITPROFILE": { "EDITPROFILE": {
"items": [ "items": [
@ -2612,7 +2639,8 @@
"sender": "System", "sender": "System",
"localeTextId": "5a2d28f786f77436023be4a5 0", "localeTextId": "5a2d28f786f77436023be4a5 0",
"collectionTimeHours": 72, "collectionTimeHours": 72,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"TWITCHNEWYEARS2023": { "TWITCHNEWYEARS2023": {
"items": [ "items": [
@ -3026,7 +3054,8 @@
"sender": "System", "sender": "System",
"localeTextId": "5e0653ba86f774478f700632 3", "localeTextId": "5e0653ba86f774478f700632 3",
"collectionTimeHours": 72, "collectionTimeHours": 72,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"LUNARNEWYEAR2024": { "LUNARNEWYEAR2024": {
"items": [ "items": [
@ -3219,7 +3248,8 @@
"sender": "System", "sender": "System",
"associatedEvent": "Promo", "associatedEvent": "Promo",
"collectionTimeHours": 72, "collectionTimeHours": 72,
"messageText": "<ch>Thank you for activating the code.</ch><cz>Thank you for activating the code.</cz><en>Thank you for activating the code.</en><fr>Thank you for activating the code.</fr><ge>Thank you for activating the code.</ge><hu>Thank you for activating the code.</hu><it>Thank you for activating the code.</it><jp>Thank you for activating the code.</jp><kr>Thank you for activating the code.</kr><pl>Thank you for activating the code.</pl><po>Thank you for activating the code.</po><sk>Thank you for activating the code.</sk><es>Thank you for activating the code.</es><es-mx>Thank you for activating the code.</es-mx><tu>Thank you for activating the code.</tu><ru>Thank you for activating the code.</ru><ro>Thank you for activating the code.</ro>" "messageText": "<ch>Thank you for activating the code.</ch><cz>Thank you for activating the code.</cz><en>Thank you for activating the code.</en><fr>Thank you for activating the code.</fr><ge>Thank you for activating the code.</ge><hu>Thank you for activating the code.</hu><it>Thank you for activating the code.</it><jp>Thank you for activating the code.</jp><kr>Thank you for activating the code.</kr><pl>Thank you for activating the code.</pl><po>Thank you for activating the code.</po><sk>Thank you for activating the code.</sk><es>Thank you for activating the code.</es><es-mx>Thank you for activating the code.</es-mx><tu>Thank you for activating the code.</tu><ru>Thank you for activating the code.</ru><ro>Thank you for activating the code.</ro>",
"maxToSendPlayer": 1
}, },
"ETSREWARD": { "ETSREWARD": {
"items": [ "items": [
@ -3466,7 +3496,8 @@
"sender": "System", "sender": "System",
"associatedEvent": "Promo", "associatedEvent": "Promo",
"collectionTimeHours": 72, "collectionTimeHours": 72,
"messageText": "<ch>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</ch><cz>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</cz><en>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</en><fr>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</fr><ge>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</ge><hu>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</hu><it>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</it><jp>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</jp><kr>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</kr><pl>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</pl><po>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</po><sk>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</sk><es>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</es><es-mx>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</es-mx><tu>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</tu><ru>Привет, боец. Слыхал, ты местным работягам активно помогал, проверял всё на прочность, так сказать. Это дело правильное, молодец, вояка. Ребята сверху тебе за это подарочек передали в знак благодарности. Продолжай в том же духе!</ru><ro>Promo code is activated</ro>" "messageText": "<ch>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</ch><cz>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</cz><en>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</en><fr>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</fr><ge>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</ge><hu>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</hu><it>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</it><jp>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</jp><kr>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</kr><pl>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</pl><po>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</po><sk>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</sk><es>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</es><es-mx>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</es-mx><tu>Greetings, warrior. I've heard you've been helping out our local hard workers with their stuff, testing everything out, so to speak. That's a good deed, soldier, great job. The higher-ups sent you a little present as a token of gratitude. Keep it up!</tu><ru>Привет, боец. Слыхал, ты местным работягам активно помогал, проверял всё на прочность, так сказать. Это дело правильное, молодец, вояка. Ребята сверху тебе за это подарочек передали в знак благодарности. Продолжай в том же духе!</ru><ro>Promo code is activated</ro>",
"maxToSendPlayer": 1
}, },
"KONTOROVICH": { "KONTOROVICH": {
"items": [ "items": [
@ -3662,7 +3693,8 @@
"sender": "System", "sender": "System",
"associatedEvent": "Promo", "associatedEvent": "Promo",
"collectionTimeHours": 72, "collectionTimeHours": 72,
"messageText": "Thank you for purchasing of the first book in EFT series by A, Kontorovich. We are glad to give you this theme package with ingame items." "messageText": "Thank you for purchasing of the first book in EFT series by A, Kontorovich. We are glad to give you this theme package with ingame items.",
"maxToSendPlayer": 1
}, },
"UNHEARD": { "UNHEARD": {
"items": [ "items": [
@ -3679,7 +3711,8 @@
"sender": "System", "sender": "System",
"messageText": "Have a nice 20 minute adventure in the blatant plagiarist game. In and out", "messageText": "Have a nice 20 minute adventure in the blatant plagiarist game. In and out",
"collectionTimeHours": 72, "collectionTimeHours": 72,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"TOURNAMENTGIFT": { "TOURNAMENTGIFT": {
"items": [{ "items": [{
@ -5440,7 +5473,8 @@
"value": 1, "value": 1,
"entity": "5c0647fdd443bc2504c2d371" "entity": "5c0647fdd443bc2504c2d371"
} }
] ],
"maxToSendPlayer": 1
}, },
"HIDEOUTCAT": { "HIDEOUTCAT": {
"items": [ "items": [
@ -5457,7 +5491,8 @@
"sender": "System", "sender": "System",
"associatedEvent": "Promo", "associatedEvent": "Promo",
"collectionTimeHours": 72, "collectionTimeHours": 72,
"messageText": "Hideout cat." "messageText": "Hideout cat.",
"maxToSendPlayer": 1
}, },
"KILLA": { "KILLA": {
"items": [{ "items": [{
@ -5481,7 +5516,8 @@
"sender": "System", "sender": "System",
"messageText": "TarkovTV May 2024 gift", "messageText": "TarkovTV May 2024 gift",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"BITCOIN": { "BITCOIN": {
"items": [{ "items": [{
@ -5709,7 +5745,8 @@
"sender": "System", "sender": "System",
"messageText": "TarkovTV May 2024 gift", "messageText": "TarkovTV May 2024 gift",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"GROUNDZERO2": { "GROUNDZERO2": {
"items": [{ "items": [{
@ -5865,7 +5902,8 @@
"sender": "System", "sender": "System",
"messageText": "TarkovTV May 2024 gift", "messageText": "TarkovTV May 2024 gift",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"OBDOLBOS": { "OBDOLBOS": {
"items": [{ "items": [{
@ -6001,7 +6039,8 @@
"sender": "System", "sender": "System",
"messageText": "TarkovTV May 2024 gift", "messageText": "TarkovTV May 2024 gift",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
}, },
"THICC": { "THICC": {
"items": [{ "items": [{
@ -6136,7 +6175,8 @@
"sender": "System", "sender": "System",
"messageText": "TarkovTV May 2024 gift", "messageText": "TarkovTV May 2024 gift",
"collectionTimeHours": 48, "collectionTimeHours": 48,
"associatedEvent": "Promo" "associatedEvent": "Promo",
"maxToSendPlayer": 1
} }
} }
} }

View File

@ -59,6 +59,8 @@ export class SptDialogueChatBot implements IDialogueChatBot
const giftSent = this.giftService.sendGiftToPlayer(sessionId, request.text); const giftSent = this.giftService.sendGiftToPlayer(sessionId, request.text);
const requestInput = request.text.toLowerCase();
if (giftSent === GiftSentResult.SUCCESS) if (giftSent === GiftSentResult.SUCCESS)
{ {
this.mailSendService.sendUserMessageToPlayer( this.mailSendService.sendUserMessageToPlayer(
@ -85,7 +87,7 @@ export class SptDialogueChatBot implements IDialogueChatBot
return; return;
} }
if (request.text.toLowerCase().includes("love you")) if (requestInput.includes("love you"))
{ {
this.mailSendService.sendUserMessageToPlayer( this.mailSendService.sendUserMessageToPlayer(
sessionId, sessionId,
@ -99,7 +101,7 @@ export class SptDialogueChatBot implements IDialogueChatBot
); );
} }
if (request.text.toLowerCase() === "spt") if (requestInput === "spt")
{ {
this.mailSendService.sendUserMessageToPlayer( this.mailSendService.sendUserMessageToPlayer(
sessionId, sessionId,
@ -108,7 +110,7 @@ export class SptDialogueChatBot implements IDialogueChatBot
); );
} }
if (["hello", "hi", "sup", "yo", "hey"].includes(request.text.toLowerCase())) if (["hello", "hi", "sup", "yo", "hey"].includes(requestInput))
{ {
this.mailSendService.sendUserMessageToPlayer( this.mailSendService.sendUserMessageToPlayer(
sessionId, sessionId,
@ -128,7 +130,7 @@ export class SptDialogueChatBot implements IDialogueChatBot
); );
} }
if (request.text.toLowerCase() === "nikita") if (requestInput === "nikita")
{ {
this.mailSendService.sendUserMessageToPlayer( this.mailSendService.sendUserMessageToPlayer(
sessionId, sessionId,
@ -137,12 +139,12 @@ export class SptDialogueChatBot implements IDialogueChatBot
"I know that guy!", "I know that guy!",
"Cool guy, he made EFT!", "Cool guy, he made EFT!",
"Legend", "Legend",
"Remember when he said webel-webel-webel-webel, classic nikita moment", "Remember when he said webel-webel-webel-webel, classic Nikita moment",
]), ]),
); );
} }
if (request.text.toLowerCase() === "are you a bot") if (requestInput === "are you a bot")
{ {
this.mailSendService.sendUserMessageToPlayer( this.mailSendService.sendUserMessageToPlayer(
sessionId, sessionId,
@ -151,7 +153,7 @@ export class SptDialogueChatBot implements IDialogueChatBot
); );
} }
if (request.text.toLowerCase() === "itsonlysnowalan") if (requestInput === "itsonlysnowalan")
{ {
this.weatherConfig.overrideSeason = Season.WINTER; this.weatherConfig.overrideSeason = Season.WINTER;
@ -162,7 +164,19 @@ export class SptDialogueChatBot implements IDialogueChatBot
); );
} }
if (request.text.toLowerCase() === "givemespace") if (requestInput === "givemespace")
{
const stashRowGiftId = "StashRows";
if (
this.profileHelper.playerHasRecievedMaxNumberOfGift(sessionId, stashRowGiftId))
{
this.mailSendService.sendUserMessageToPlayer(
sessionId,
sptFriendUser,
"You cannot accept any more of this gift",
);
}
else
{ {
this.profileHelper.addStashRowsBonusToProfile(sessionId, 2); this.profileHelper.addStashRowsBonusToProfile(sessionId, 2);
@ -171,6 +185,13 @@ export class SptDialogueChatBot implements IDialogueChatBot
sptFriendUser, sptFriendUser,
this.randomUtil.getArrayValue(["Added 2 rows to stash, please restart your game to see them"]), this.randomUtil.getArrayValue(["Added 2 rows to stash, please restart your game to see them"]),
); );
this.profileHelper.flagGiftReceivedInProfile(
sessionId,
stashRowGiftId,
this.coreConfig.features.chatbotFeatures.commandUseLimits[stashRowGiftId],
);
}
} }
return request.dialogId; return request.dialogId;

View File

@ -367,17 +367,32 @@ export class ProfileHelper
* Store giftid in profile spt object * Store giftid in profile spt object
* @param playerId Player to add gift flag to * @param playerId Player to add gift flag to
* @param giftId Gift player received * @param giftId Gift player received
* @param maxCount Limit of how many of this gift a player can have
*/ */
public addGiftReceivedFlagToProfile(playerId: string, giftId: string): void public flagGiftReceivedInProfile(playerId: string, giftId: string, maxCount: number): void
{ {
const profileToUpdate = this.getFullProfile(playerId); const profileToUpdate = this.getFullProfile(playerId);
const giftHistory = profileToUpdate.spt.receivedGifts;
if (!giftHistory)
{
profileToUpdate.spt.receivedGifts = [];
}
profileToUpdate.spt.receivedGifts.push({ giftId: giftId, timestampAccepted: this.timeUtil.getTimestamp() }); // nullguard receivedGifts
profileToUpdate.spt.receivedGifts ||= [];
const giftData = profileToUpdate.spt.receivedGifts.find((gift) => gift.giftId === giftId);
if (giftData)
{
// Increment counter
giftData.current++;
}
else
{
// Player has never received gift, make a new object
profileToUpdate.spt.receivedGifts.push(
{
giftId: giftId,
timestampLastAccepted: this.timeUtil.getTimestamp(),
max: maxCount,
current: 1,
});
}
} }
/** /**
@ -386,7 +401,7 @@ export class ProfileHelper
* @param giftId Gift to check for * @param giftId Gift to check for
* @returns True if player has recieved gift previously * @returns True if player has recieved gift previously
*/ */
public playerHasRecievedGift(playerId: string, giftId: string): boolean public playerHasRecievedMaxNumberOfGift(playerId: string, giftId: string): boolean
{ {
const profile = this.getFullProfile(playerId); const profile = this.getFullProfile(playerId);
if (!profile) if (!profile)
@ -400,7 +415,13 @@ export class ProfileHelper
return false; return false;
} }
return !!profile.spt.receivedGifts.find((x) => x.giftId === giftId); const giftDataFromProfile = profile.spt.receivedGifts.find((x) => x.giftId === giftId);
if (!giftDataFromProfile)
{
return false;
}
return giftDataFromProfile.current >= giftDataFromProfile.max;
} }
/** /**

View File

@ -231,7 +231,9 @@ export interface ModDetails
export interface ReceivedGift export interface ReceivedGift
{ {
giftId: string giftId: string
timestampAccepted: number timestampLastAccepted: number
current: number
max: number
} }
export interface Vitality export interface Vitality

View File

@ -94,6 +94,7 @@ export interface IChatbotFeatures
sptFriendEnabled: boolean sptFriendEnabled: boolean
commandoEnabled: boolean commandoEnabled: boolean
commandoFeatures: ICommandoFeatures commandoFeatures: ICommandoFeatures
commandUseLimits: Record<string, number>
} }
export interface ICommandoFeatures export interface ICommandoFeatures

View File

@ -32,4 +32,5 @@ export interface Gift
collectionTimeHours: number collectionTimeHours: number
/** Optional, can be used to change profile settings like level/skills */ /** Optional, can be used to change profile settings like level/skills */
profileChangeEvents?: IProfileChangeEvent[] profileChangeEvents?: IProfileChangeEvent[]
maxToSendPlayer?: number
} }

View File

@ -56,7 +56,7 @@ export class GiftService
return GiftSentResult.FAILED_GIFT_DOESNT_EXIST; return GiftSentResult.FAILED_GIFT_DOESNT_EXIST;
} }
if (this.profileHelper.playerHasRecievedGift(playerId, giftId)) if (this.profileHelper.playerHasRecievedMaxNumberOfGift(playerId, giftId))
{ {
this.logger.debug(`Player already recieved gift: ${giftId}`); this.logger.debug(`Player already recieved gift: ${giftId}`);
@ -154,7 +154,7 @@ export class GiftService
this.mailSendService.sendMessageToPlayer(details); this.mailSendService.sendMessageToPlayer(details);
} }
this.profileHelper.addGiftReceivedFlagToProfile(playerId, giftId); this.profileHelper.flagGiftReceivedInProfile(playerId, giftId, giftData.maxToSendPlayer ?? 1);
return GiftSentResult.SUCCESS; return GiftSentResult.SUCCESS;
} }
@ -208,13 +208,13 @@ export class GiftService
switch (day) switch (day)
{ {
case 1: case 1:
if (this.profileHelper.playerHasRecievedGift(sessionId, "PraporGiftDay1")) if (this.profileHelper.playerHasRecievedMaxNumberOfGift(sessionId, "PraporGiftDay1"))
{ {
this.sendGiftToPlayer(sessionId, "PraporGiftDay1"); this.sendGiftToPlayer(sessionId, "PraporGiftDay1");
} }
break; break;
case 2: case 2:
if (this.profileHelper.playerHasRecievedGift(sessionId, "PraporGiftDay2")) if (this.profileHelper.playerHasRecievedMaxNumberOfGift(sessionId, "PraporGiftDay2"))
{ {
this.sendGiftToPlayer(sessionId, "PraporGiftDay2"); this.sendGiftToPlayer(sessionId, "PraporGiftDay2");
} }

View File

@ -614,7 +614,7 @@ export class SeasonalEventService
*/ */
protected giveGift(playerId: string, giftkey: string): void protected giveGift(playerId: string, giftkey: string): void
{ {
if (!this.profileHelper.playerHasRecievedGift(playerId, giftkey)) if (!this.profileHelper.playerHasRecievedMaxNumberOfGift(playerId, giftkey))
{ {
this.giftService.sendGiftToPlayer(playerId, giftkey); this.giftService.sendGiftToPlayer(playerId, giftkey);
} }