diff --git a/user/mods/aMoxoPixel-Painter/bundles.json b/user/mods/aMoxoPixel-Painter/bundles.json new file mode 100644 index 0000000..0319d4d --- /dev/null +++ b/user/mods/aMoxoPixel-Painter/bundles.json @@ -0,0 +1,44 @@ +{ + "manifest": [ + { + "key": "mysterybox.bundle", + "dependencyKeys": [ + "cubemaps", + "shaders", + "assets/commonassets/physics/physicsmaterials.bundle" + ] + }, + { + "key": "mysterybox_2.bundle", + "dependencyKeys": [ + "cubemaps", + "shaders", + "assets/commonassets/physics/physicsmaterials.bundle" + ] + }, + { + "key": "figurine_batman.bundle", + "dependencyKeys": [ + "cubemaps", + "shaders", + "assets/commonassets/physics/physicsmaterials.bundle" + ] + }, + { + "key": "dodo338383899.bundle", + "dependencyKeys": [ + "cubemaps", + "shaders", + "assets/commonassets/physics/physicsmaterials.bundle" + ] + }, + { + "key": "mos115.bundle", + "dependencyKeys": [ + "cubemaps", + "shaders", + "assets/commonassets/physics/physicsmaterials.bundle" + ] + } + ] +} \ No newline at end of file diff --git a/user/mods/aMoxoPixel-Painter/bundles/dodo338383899.bundle b/user/mods/aMoxoPixel-Painter/bundles/dodo338383899.bundle new file mode 100644 index 0000000..7ce9c79 Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/bundles/dodo338383899.bundle differ diff --git a/user/mods/aMoxoPixel-Painter/bundles/figurine_batman.bundle b/user/mods/aMoxoPixel-Painter/bundles/figurine_batman.bundle new file mode 100644 index 0000000..c98e8e4 Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/bundles/figurine_batman.bundle differ diff --git a/user/mods/aMoxoPixel-Painter/bundles/mos115.bundle b/user/mods/aMoxoPixel-Painter/bundles/mos115.bundle new file mode 100644 index 0000000..48db24f Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/bundles/mos115.bundle differ diff --git a/user/mods/aMoxoPixel-Painter/bundles/mysterybox.bundle b/user/mods/aMoxoPixel-Painter/bundles/mysterybox.bundle new file mode 100644 index 0000000..2731f07 Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/bundles/mysterybox.bundle differ diff --git a/user/mods/aMoxoPixel-Painter/bundles/mysterybox_2.bundle b/user/mods/aMoxoPixel-Painter/bundles/mysterybox_2.bundle new file mode 100644 index 0000000..19894d0 Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/bundles/mysterybox_2.bundle differ diff --git a/user/mods/aMoxoPixel-Painter/config.json b/user/mods/aMoxoPixel-Painter/config.json new file mode 100644 index 0000000..e8e975b --- /dev/null +++ b/user/mods/aMoxoPixel-Painter/config.json @@ -0,0 +1,5 @@ +{ + "enableRepeatableQuests": true, + "//": "DO NOT TURN OFF LOOT BOXES IF YOU HAVE ONE OF PAINTERS LOOT BOXES IN YOUR STASH", + "enableLootBoxes": true +} \ No newline at end of file diff --git a/user/mods/aMoxoPixel-Painter/db/assort.json b/user/mods/aMoxoPixel-Painter/db/assort.json new file mode 100644 index 0000000..1e05d74 --- /dev/null +++ b/user/mods/aMoxoPixel-Painter/db/assort.json @@ -0,0 +1,145 @@ +{ + "items": [ + { + "_id": "672e2804a0529208b4e10e18", + "_tpl": "5c0a840b86f7742ffa4f2482", + "parentId": "hideout", + "slotId": "hideout", + "upd": { + "UnlimitedCount": true, + "StackObjectsCount": 2 + } + }, + { + "_id": "672e284a363b798192b802af", + "_tpl": "54527ac44bdc2d36668b4567", + "parentId": "hideout", + "slotId": "hideout", + "upd": { + "UnlimitedCount": true, + "StackObjectsCount": 9999999, + "BuyRestrictionMax": 180, + "BuyRestrictionCurrent": 0 + } + }, + { + "_id": "672e289bb4096716fcb918a7", + "_tpl": "5a6086ea4f39f99cd479502f", + "parentId": "hideout", + "slotId": "hideout", + "upd": { + "UnlimitedCount": true, + "StackObjectsCount": 9999999, + "BuyRestrictionMax": 90, + "BuyRestrictionCurrent": 0 + } + }, + { + "_id": "67fef66cfdca1b1dd0eee5a1", + "_tpl": "668ff5bde41a0cce3b142464", + "parentId": "hideout", + "slotId": "hideout", + "upd": { + "UnlimitedCount": false, + "StackObjectsCount": 999 + } + }, + { + "_id": "668ff5bde41a0cce3b142465", + "_tpl": "668ff5bde41a0cce3b142464", + "parentId": "hideout", + "slotId": "hideout", + "upd": { + "UnlimitedCount": false, + "StackObjectsCount": 999 + } + }, + { + "_id": "67fef6965e89bd6294ac0c05", + "_tpl": "6699546547ad52e0fccf6da9", + "parentId": "hideout", + "slotId": "hideout", + "upd": { + "UnlimitedCount": false, + "StackObjectsCount": 999 + } + }, + { + "_id": "6699546547ad52e0fccf6da0", + "_tpl": "6699546547ad52e0fccf6da9", + "parentId": "hideout", + "slotId": "hideout", + "upd": { + "UnlimitedCount": false, + "StackObjectsCount": 999 + } + } + ], + "barter_scheme": { + "672e2804a0529208b4e10e18": [ + [ + { + "count": 17500000, + "_tpl": "5449016a4bdc2d6f028b456f" + } + ] + ], + "672e284a363b798192b802af": [ + [ + { + "count": 680, + "_tpl": "5449016a4bdc2d6f028b456f" + } + ] + ], + "672e289bb4096716fcb918a7": [ + [ + { + "count": 980, + "_tpl": "5449016a4bdc2d6f028b456f" + } + ] + ], + "67fef66cfdca1b1dd0eee5a1": [ + [ + { + "count": 500000, + "_tpl": "5449016a4bdc2d6f028b456f" + } + ] + ], + "668ff5bde41a0cce3b142465": [ + [ + { + "count": 60, + "_tpl": "5d235b4d86f7742e017bc88a" + } + ] + ], + "67fef6965e89bd6294ac0c05": [ + [ + { + "count": 400000, + "_tpl": "5449016a4bdc2d6f028b456f" + } + ] + ], + "6699546547ad52e0fccf6da0": [ + [ + { + "count": 50, + "_tpl": "5d235b4d86f7742e017bc88a" + } + ] + ] + }, + "loyal_level_items": { + "672e2804a0529208b4e10e18": 4, + "672e284a363b798192b802af": 4, + "672e289bb4096716fcb918a7": 4, + "67fef66cfdca1b1dd0eee5a1": 2, + "668ff5bde41a0cce3b142465": 4, + "67fef6965e89bd6294ac0c05": 2, + "6699546547ad52e0fccf6da0": 4 + } +} diff --git a/user/mods/aMoxoPixel-Painter/db/base.json b/user/mods/aMoxoPixel-Painter/db/base.json new file mode 100644 index 0000000..fae09ff --- /dev/null +++ b/user/mods/aMoxoPixel-Painter/db/base.json @@ -0,0 +1,128 @@ +{ + "_id": "668aaff35fd574b6dcc4a686", + "working": true, + "availableInRaid": false, + "avatar": "/files/trader/avatar/painter.jpg", + "balance_rub": 5000000, + "balance_dol": 0, + "balance_eur": 0, + "buyer_up": false, + "currency": "RUB", + "customization_seller": false, + "discount": 0, + "discount_end": 0, + "gridHeight": 300, + "insurance": { + "availability": false, + "excluded_category": [], + "max_return_hour": 0, + "max_storage_time": 99, + "min_payment": 0, + "min_return_hour": 0 + }, + "isCanTransferItems": false, + "items_buy": { + "category": [ + "5448ecbe4bdc2d60728b4568" + ], + "id_list": [] + }, + "items_buy_prohibited": { + "category": [], + "id_list": [] + }, + "location": "Tarkov Suburbs", + "loyaltyLevels": [ + { + "buy_price_coef": 48, + "exchange_price_coef": 0, + "heal_price_coef": 0, + "insurance_price_coef": 0, + "minLevel": 1, + "minSalesSum": 0, + "minStanding": 0, + "repair_price_coef": 0 + }, + { + "buy_price_coef": 48, + "exchange_price_coef": 0, + "heal_price_coef": 0, + "insurance_price_coef": 0, + "minLevel": 9, + "minSalesSum": 500000, + "minStanding": 0.08, + "repair_price_coef": 0 + }, + { + "buy_price_coef": 48, + "exchange_price_coef": 0, + "heal_price_coef": 0, + "insurance_price_coef": 0, + "minLevel": 18, + "minSalesSum": 1300000, + "minStanding": 0.16, + "repair_price_coef": 0 + }, + { + "buy_price_coef": 48, + "exchange_price_coef": 0, + "heal_price_coef": 0, + "insurance_price_coef": 0, + "minLevel": 30, + "minSalesSum": 3000000, + "minStanding": 0.22, + "repair_price_coef": 0 + } + ], + "medic": false, + "name": "Ivan Samoylov", + "surname": "Unknown", + "nickname": "Painter", + "nextResupply": 1631489718, + "prohibitedTransferableItems": { + "category": [], + "id_list": [] + }, + "repair": { + "availability": false, + "currency": "5449016a4bdc2d6f028b456f", + "currency_coefficient": 1, + "excluded_category": [], + "excluded_id_list": [], + "price_rate": 1, + "quality": "0" + }, + "sell_category": [ + "5b5f78dc86f77409407a7f8e", + "5b5f71b386f774093f2ecf11", + "5b5f71c186f77409407a7ec0", + "5b5f71de86f774093f2ecf13", + "5b5f724186f77447ed5636ad", + "5b5f736886f774094242f193", + "5b5f73ec86f774093e6cb4fd", + "5b5f74cc86f77447ec5d770a", + "5b5f750686f774093e6cb503", + "5b5f751486f77447ec5d770c", + "5b5f752e86f774093e6cb505", + "5b5f754a86f774094242f19b", + "5b5f755f86f77447ec5d770e", + "5b5f757486f774093e6cb507", + "5b5f75b986f77447ec5d7710", + "5b5f75c686f774094242f19f", + "5b5f75e486f77447ec5d7712", + "5b5f760586f774093e6cb509", + "5b5f761f86f774094242f1a1", + "5b5f764186f77447ec5d7714", + "5b47574386f77428ca22b33e", + "5b47574386f77428ca22b341", + "5b47574386f77428ca22b345", + "5b47574386f77428ca22b2ef", + "5b47574386f77428ca22b343" + ], + "sell_modifier_for_prohibited_items": 0, + "transferableItems": { + "category": [], + "id_list": [] + }, + "unlockedByDefault": true + } \ No newline at end of file diff --git a/user/mods/aMoxoPixel-Painter/db/locales/ch/painterCH.json b/user/mods/aMoxoPixel-Painter/db/locales/ch/painterCH.json new file mode 100644 index 0000000..b67d7f7 --- /dev/null +++ b/user/mods/aMoxoPixel-Painter/db/locales/ch/painterCH.json @@ -0,0 +1,80 @@ +{ + "painter_1 name": "贴条", + "painter_1 description": "我需要你的帮助来提高塔科夫境内PMC的战术效率。寻找各种类型的胶带,包括布基胶带和绝缘胶带,以便我能制作专用弹匣。这些贴条弹匣不仅能让PMC轻松识别已装弹匣,还能帮助他们在激烈交火时快速捡起掉落的弹匣。塔科夫很危险,每个优势都至关重要。", + "painter_1 note": "有些人害怕那些自由奔跑的人。", + "painter_1 failMessageText": "", + "painter_1 successMessageText": "干得不错,找齐了所有胶带。这样我的商店能顺利运转了。给你点奖励,感谢你的帮助。", + "painter_1 location": "any", + "672e31c3262af62a8eb157cd": "寻找并交付布基胶带", + "672e31d7701987cf15698b30": "寻找并交付绝缘胶带", + "painter_2 name": "地形图", + "painter_2 description": "我需要你找到一些地形图,你知道的,就是那些你在塔科夫各地能找到的地图。我可以用它们来制作一些非常好看的涂装模板。", + "painter_2 failMessageText": "", + "painter_2 successMessageText": "完美。我会立即着手制作涂装。它们将看起来很出色。", + "672e323797a187aabc88ca4a": "寻找并交付地形图", + "painter_3 name": "深挖", + "painter_3 description": "在一次残酷的SCAV对我工坊的洗劫之后,这些无情的拾荒者带走了我倾注血汗的武器。我已经发现了他们那个令人毛骨悚然的藏身之处,现在是让他们后悔那一天的时刻。深入他们的巢穴,发出响亮的讯息,确保他们永远不敢再做这种大胆的事情。塔科夫的复仇时间到了,而他们唯一能理解的货币就是报复。", + "painter_3 failMessageText": "", + "painter_3 successMessageText": "谢谢你。我喜欢你。", + "672e3295e4287b00f37700c1": "在海关消灭10名SCAV", + "painter_4 name": "工坊重建", + "painter_4 description": "我的工坊被毁的回声仍在回荡,但有了你的帮助,我可以开始重建。我已经设法抢救了一些必要的工具和材料,但还需要更多。你的任务是在塔科夫郊区寻找有价值的资源:工业用品、稀有金属、电工元件。要小心,阴影中潜伏着拾荒者和敌对派系,可能会阻挠你。一旦收集到所需材料,把它们带回来,我们就能开始重建工坊。", + "painter_4 failMessageText": "", + "painter_4 successMessageText": "你做到了!有了这些材料,我终于可以开始重建工坊。作为感谢,拿着这份奖励吧。", + "painter_4 location": "any", + "672e32c9be76a4ab7682ece9": "寻找并交付工具套装", + "672e32d8386445826a2adfee": "寻找并交付螺栓", + "672e32e7eb649d0132dfc0db": "寻找并交付螺母", + "painter_5 name": "无线沉默", + "painter_5 description": "我的工坊恢复运行后,我需要一种更安全的方式与外部联系人沟通。我听说有一种强力无线传输器可以覆盖整个塔科夫。这个传输器能让我发送和接收关键信息,保证行动顺利。你的任务是找到这个无线传输器并带回来。要小心,因为敌对派系可能会试图拦截你。一旦你安全带回传输器,就回来找我,我们将建立安全的通信线路。", + "painter_5 failMessageText": "", + "painter_5 successMessageText": "太好了!有了这个传输器,我现在可以毫无中断地与外部联系人沟通。这里是你应得的奖励。感谢你的帮助。", + "painter_5 location": "any", + "672e33074cd02462a61760a2": "寻找并交付 COFDM 无线信号传输器", + "painter_6 name": "危险水域", + "painter_6 description": "一群PMC在塔科夫地区制造混乱,破坏了脆弱的力量平衡。他们散播恐惧。你的任务是消灭这些坏运气PMC,为受害者伸张正义。准备迎接激烈战斗,因为他们装备精良、训练有素。据我的情报,他们目前活跃在海滨地区。", + "painter_6 failMessageText": "", + "painter_6 successMessageText": "不错。现在去休息一下吧。你应得的。", + "672e334a39064994fc3bd86f": "在海滨消灭15名PMC", + "painter_7 name": "天生自由", + "painter_7 description": "我需要你为我找到火药和有机玻璃。我有一个特别的项目在酝酿,需要这些材料才能实现。回报很丰厚。祝你好运!", + "painter_7 failMessageText": "", + "painter_7 successMessageText": "好。", + "painter_7 location": "any", + "672e33753bc2b4d394df066d": "寻找并交付 火药 Kite", + "672e338893682a2593697a37": "寻找并交付 火药 Eagle", + "672e339460bf295e1f0771b5": "寻找并交付 火药 Hawk", + "672e339f6a58d92a168c9845": "寻找并交付 一片有机玻璃", + "painter_8 name": "收缩膜", + "painter_8 description": "嘿,哥们……我听说一些PMC对你和我的赌博业务很生气。他们说我们骗了他们。嗯……我们确实这样做了,但我不知道为什么他们把你拉进来了。但他们正在集结,现在想揍我们。拿出你的大杀器,给他们点颜色看看。", + "painter_8 failMessageText": "", + "painter_8 successMessageText": "你还活着?!总之……我又要开始心理治疗了。", + "672e33c986ff5b896eb503cd": "消灭48名PMC", + "painter_9 name": "黑暗骑士", + "painter_9 description": "听着,我需要你帮我找到一个特别的蝙蝠侠手办。这不仅仅是个收藏品——它是我正在制作的一个独特项目的重要组件。在你寻找的时候,顺便扮演下黑暗骑士:消灭一些SCAV小混混,做个反英雄。想象这是角色扮演——成为塔科夫需要的英雄。黑暗在召唤,穿上你的装备,让这些罪犯见识下正义的力量!", + "painter_9 failMessageText": "", + "painter_9 successMessageText": "出色的工作,黑暗骑士!你证明了自己配得上战袍。有了这款蝙蝠侠手办,我的项目终于可以完成了。多亏了你,塔科夫更安全了。这是你的应得奖励——就像整个城市的谢意。", + "6848f9c9d567f37e6b729842": "在突袭中找到蝙蝠侠手办", + "6848f9de85ccce5e3a78c9e9": "交付蝙蝠侠手办", + "6848f99d34b6c6122c735e05": "消灭20名SCAV", + "painter_10 name": "最后一笔", + "painter_10 description": "你...你真的做到了。你让我的生活变得—*无限*—轻松。最后一个任务,然后我就能离开这个该死的垃圾堆。我只需要再找几个零件来完成我的杰作:一个临时的直升机船。别问它怎么工作的。只要把东西带来就行。我*发誓*你会得到丰厚的奖励。像传奇级别的奖励。", + "painter_10 failMessageText": "", + "painter_10 successMessageText": "你这个绝对的猛人。真正的英雄。人中之神。现在,关于那个奖励...所以,有趣的故事,我不知道怎么造直升机。或者船。或者任何那样的东西,真的。我只是喜欢这个想法。现在这些物品有点没用了。我很没用。但是嘿!这里有个金色的粪便。对的。它很亮。它...有象征意义。你懂的。不管怎样,谢谢你,永远对不起。", + "684dce0db74a157e696d440c": "寻找并交付丙烷罐 (5L)", + "684de44841a695c11db3996c": "寻找并交付金属备用零件", + "684de575d34628e3dfc940ff": "寻找并交付印刷电路板", + "684de443e988e5c59b5ec688": "寻找并交付电动机", + "684de44575288597828a1728": "寻找并交付高级电流转换器", + "painter_11 name": "抵抗是徒劳的", + "painter_11 description": "我需要你为我组装一把武器。这是一个特殊项目,需要独特的零件组合。这把武器将成为我在塔科夫行动的强大工具,我需要它尽快准备好。收集必要的组件并把它们带给我。我会确保你得到丰厚的报酬。我需要一把AK-103,配备Magpul PMAG 30发弹匣,AK Vezhlivyy Strelok VS-24 + VS-33c导气装置护木,AK Custom Arms AGS-74 PRO + 狙击手套件手枪握把,AK AK-EVO枪托,OKP-7反射瞄准镜(燕尾槽)。武器耐久度应超过80,人体工程学65以上,有效距离约200。", + "painter_11 failMessageText": "", + "painter_11 successMessageText": "出色的工作!武器现在已经完成并准备投入行动。你的努力非常宝贵,我感谢你对这个项目的奉献。这是你应得的奖励。明智地使用它。", + "684f142d6734c9fb25ceeecb": "按照给定规格改装AK-103", + "painter_12 name": "镆", + "painter_12 description": "我需要你在塔科夫的特定位置放置一个信号干扰器。我认为最好把它放在海关地图上装有化学品的汽车里。这个干扰器将打断敌人的通信,给我们战术优势。该位置戒备森严,所以要准备好战斗。一旦你放置了干扰器,回来找我领取奖励。", + "painter_12 failMessageText": "", + "painter_12 successMessageText": "任务完成。信号干扰器已就位,我们的敌人将拼命恢复他们的通信。这将给我们在该地区带来显著优势。这是你出色工作的奖励。好好保管。", + "68586394ca1d107631558586": "在车辆内放置信号干扰器", + "68586a4d4ca5206d3e5b4c6b": "在海关地图上生存突袭" +} \ No newline at end of file diff --git a/user/mods/aMoxoPixel-Painter/db/locales/en/painterEN.json b/user/mods/aMoxoPixel-Painter/db/locales/en/painterEN.json new file mode 100644 index 0000000..c22e358 --- /dev/null +++ b/user/mods/aMoxoPixel-Painter/db/locales/en/painterEN.json @@ -0,0 +1,80 @@ +{ + "painter_1 name": "Taped Up", + "painter_1 description": "I need your help in enhancing the tactical efficiency of PMCs across Tarkov. Find various types of tape, including duct tape and insulating tape, so I can craft specialized magazines. These taped magazines not only allow PMCs to easily identify their loaded ammunition but also assist them in quickly locating dropped magazines during intense firefights. The Tarkov area is a dangerous place, and every advantage counts.", + "painter_1 note": "Some people are scared of anybody who runs free.", + "painter_1 failMessageText": "", + "painter_1 successMessageText": "Nice work finding all the tape. This will get my shop running smoothly again. Here's a little something for your trouble. I appreciate your help.", + "painter_1 location": "any", + "672e31c3262af62a8eb157cd": "Find and handover Duct tape", + "672e31d7701987cf15698b30": "Find and handover Insulating tape", + "painter_2 name": "Topographics", + "painter_2 description": "I need you to find some topographic maps, you know, those maps you can find around Tarkov. I can use them to create templates for some really good looking paints.", + "painter_2 failMessageText": "", + "painter_2 successMessageText": "Perfect. I'll get to work on these paints right away. They will look crisp.", + "672e323797a187aabc88ca4a": "Find and handover Topographic survey maps", + "painter_3 name": "Dig Deep", + "painter_3 description": "In the gritty aftermath of a merciless SCAV raid on my workshop, those ruthless scavengers made off with a cache of weapons I had poured my blood, sweat, and tears into. I've managed to uncover their haunting whereabouts, and now it's time to make them rue the day they crossed me. Venture into their den, deliver a resounding message, and ensure they never dare to pull such audacious moves again. It's payback time in Tarkov, and vengeance is the only currency they'll understand.", + "painter_3 failMessageText": "", + "painter_3 successMessageText": "Thank you. Nice work out there.", + "672e3295e4287b00f37700c1": "Eliminate 10 Scavs on Customs", + "painter_4 name": "Workshop Refurbishment", + "painter_4 description": "The echoes of my workshop's destruction still resonate, but with your help, I can start the journey towards rebuilding. I've managed to salvage some essential tools and materials, but I need more to bring my workshop back to life. Your task is to scour the outskirts of Tarkov for valuable resources. Search for industrial supplies, rare metals, and electronic components. Beware of the dangers lurking in the shadows, as scavengers and rival factions may try to hinder your progress. Once you've gathered the necessary materials, bring them back to me so we can begin the workshop's refurbishment.", + "painter_4 failMessageText": "", + "painter_4 successMessageText": "You've done it! With these materials, I can finally begin the process of refurbishing my workshop. As a token of my gratitude, take this reward.", + "painter_4 location": "any", + "672e32c9be76a4ab7682ece9": "Find and handover Toolset", + "672e32d8386445826a2adfee": "Find and handover Bolts", + "672e32e7eb649d0132dfc0db": "Find and handover Screw nuts", + "painter_5 name": "Radio Silence", + "painter_5 description": "With my workshop running smoothly again, I need to find a more secured way to communicate with my contacts in the field. I've heard rumors of a powerful radio transmitter that can reach all corners of Tarkov. This transmitter will allow me to send and receive critical information, ensuring that my operations run smoothly. Your task is to locate the radio transmitter and bring it back to me. Be cautious, as rival factions may try to intercept the transmitter and prevent you from completing your mission. Once you've secured the transmitter, return to me so we can establish a secure line of communication.", + "painter_5 failMessageText": "", + "painter_5 successMessageText": "Great! With this transmitter, I can now communicate with my contacts in the field without any interruptions. Here's a little something for your efforts. I appreciate your help.", + "painter_5 location": "any", + "672e33074cd02462a61760a2": "Find and handover COFDM Wireless Signal Transmitter", + "painter_6 name": "Dangerous Waters", + "painter_6 description": "A group of PMCs has been causing chaos in the Tarkov area, disrupting the fragile balance of power. They've been spreading fear throughout the region. Your mission is to eliminate these bad karma PMCs and bring justice to those who have suffered at their hands. It's time to put an end to their reign of terror. Be prepared for a fierce battle, as these PMCs are well-equipped and highly trained. Once you've neutralized the threat, return to me so we can celebrate the victory and honor the fallen. My intel says they are currently operating in the Shoreline area.", + "painter_6 failMessageText": "", + "painter_6 successMessageText": "Nice. Now, go and get some rest. You've earned it.", + "672e334a39064994fc3bd86f": "Eliminate 15 PMCs on Shoreline", + "painter_7 name": "Born Free", + "painter_7 description": "I need you to find gun powder and plexiglass for me. I have a special project in mind and I need these materials to make it happen. The reward will be worth it. Good luck!", + "painter_7 failMessageText": "", + "painter_7 successMessageText": "Good.", + "painter_7 location": "any", + "672e33753bc2b4d394df066d": "Find and handover Gunpowder Kite", + "672e338893682a2593697a37": "Find and handover Gunpowder Eagle", + "672e339460bf295e1f0771b5": "Find and handover Gunpowder Hawk", + "672e339f6a58d92a168c9845": "Find and handover Piece of plexiglass", + "painter_8 name": "Shrink Wrap", + "painter_8 description": "Hey man... I heard some PMCs are pissed about your involvment with my gambling business. They blame us ripping them off. I mean... I kinda did but I don't know why they choose to invlolve you but here we are. I hear they are ganging up on us right now, please show them your big guns.", + "painter_8 failMessageText": "", + "painter_8 successMessageText": "You're alive?! Anyways... I need another therapy session.", + "672e33c986ff5b896eb503cd": "Eliminate 48 PMCs", + "painter_9 name": "The Dark Knight", + "painter_9 description": "Listen up, I need you to track down a very special Batman figurine for me. This isn't just any collectible - it's a crucial component for a unique project I've been working on. While you're out there hunting for it, why not embrace the Dark Knight persona? Take out some scav goons and channel your inner vigilante. Think of it as method acting - become the hero Tarkov needs. The shadows are calling, so gear up and show these criminals what justice looks like!", + "painter_9 failMessageText": "", + "painter_9 successMessageText": "Outstanding work, Dark Knight! You've proven yourself worthy of the cape and cowl. With this Batman figurine, my project can finally come to fruition. Gotham... I mean, Tarkov is safer thanks to your efforts. Here's your well-earned reward - consider it payment from a grateful city.", + "6848f9c9d567f37e6b729842": "Find Batman figurine in raid", + "6848f9de85ccce5e3a78c9e9": "Handover the Batman figurine", + "6848f99d34b6c6122c735e05": "Eliminate 20 SCAVs", + "painter_10 name": "The Final Touch", + "painter_10 description": "You... you actually did it. You made my life—*infinitely*—easier. One final task and I'm out of this forsaken dump. I just need a few more parts to finish my masterpiece: a makeshift helicopter-boat. Don't ask how it works. Just bring the stuff. I *swear* you'll be handsomely rewarded. Like, legendary-tier reward.", + "painter_10 failMessageText": "", + "painter_10 successMessageText": "You absolute unit. A true hero. A god among men. Now, about that reward… So, funny story, I have no idea how to build a helicopter. Or a boat. Or anything like that, really. I just liked the idea. The items are kinda worthless now. I'm useless. But hey! Here's a golden turd. Yup. It's shiny. It's... symbolic. You get it. Anyway, thanks and sorry forever.", + "684dce0db74a157e696d440c": "Find and handover Propane tank (5L)", + "684de44841a695c11db3996c": "Find and handover Metal spare parts", + "684de575d34628e3dfc940ff": "Find and handover Printed circuit board", + "684de443e988e5c59b5ec688": "Find and handover Electric motor", + "684de44575288597828a1728": "Find and handover Advanced current converter", + "painter_11 name": "Resistance Is Futile", + "painter_11 description": "I need you to assemble a weapon for me. It's a special project that requires a unique combination of parts. The weapon will be a powerful tool for my operations in Tarkov, and I need it to be ready as soon as possible. Gather the necessary components and bring them to me. I'll make sure you are well compensated for your efforts. I need an AK-103 with a Magpul PMAG 30-round magazine, AK Vezhlivyy Strelok VS-24 + VS-33c handguard with gas tube, AK Custom Arms AGS-74 PRO + Sniper Kit pistol grip, AK AK-EVO stock, OKP-7 reflex sight (Dovetail). The weapon should have durability over 80. Ergonomics 65 or over, effective distance around 200.", + "painter_11 failMessageText": "", + "painter_11 successMessageText": "Excellent work! The weapon is now complete and ready for action. Your efforts have been invaluable, and I appreciate your dedication to this project. Here's your well-deserved reward. Use it wisely.", + "684f142d6734c9fb25ceeecb": "Modify a AK-103 to comply with the given specifications", + "painter_12 name": "Moscovium", + "painter_12 description": "I need you to place a signal jammer at a specific location in Tarkov. I think it would be best to place it in the car with the chemicals on Customs. This jammer will disrupt enemy communications and give us a tactical advantage. The location is heavily guarded, so be prepared for a fight. Once you've placed the jammer, return to me for your reward.", + "painter_12 failMessageText": "", + "painter_12 successMessageText": "Mission accomplished. The signal jammer is in place, and our enemies will be scrambling to regain their communications. This will give us a significant edge in that area. Here's your reward for a job well done. I got it from Therapist who got it from... I have no idea but... Keep it very safe.", + "68586394ca1d107631558586": "Place a signal jammer inside the vehicle", + "68586a4d4ca5206d3e5b4c6b": "Survive the raid on Customs" +} \ No newline at end of file diff --git a/user/mods/aMoxoPixel-Painter/db/locales/ge/painterGE.json b/user/mods/aMoxoPixel-Painter/db/locales/ge/painterGE.json new file mode 100644 index 0000000..c802844 --- /dev/null +++ b/user/mods/aMoxoPixel-Painter/db/locales/ge/painterGE.json @@ -0,0 +1,80 @@ +{ + "painter_1 name": "Abgeklebt", + "painter_1 description": "Ich brauche deine Hilfe, um die taktische Effizienz der PMCs in ganz Tarkov zu verbessern. Finde verschiedene Arten von Klebeband, darunter Gewebeband und Isolierband, damit ich spezielle Magazine herstellen kann. Diese markierten Magazine helfen PMCs nicht nur dabei, ihre Munition schneller zu erkennen, sondern auch, heruntergefallene Magazine im Feuergefecht leichter wiederzufinden. Tarkov ist gefährlich – jeder Vorteil zählt.", + "painter_1 note": "Manche Menschen fürchten sich vor denen, die frei leben.", + "painter_1 failMessageText": "", + "painter_1 successMessageText": "Gut gemacht, du hast alles Klebeband gefunden. Damit kann mein Laden wieder richtig laufen. Hier, eine Kleinigkeit für deinen Aufwand. Danke dir.", + "painter_1 location": "any", + "672e31c3262af62a8eb157cd": "Finde und übergib Gewebeband", + "672e31d7701987cf15698b30": "Finde und übergib Isolierband", + "painter_2 name": "Topografie", + "painter_2 description": "Ich brauche ein paar topografische Karten – du weißt schon, die, die man überall in Tarkov finden kann. Ich kann sie nutzen, um Vorlagen für richtig stylische Lackierungen zu erstellen.", + "painter_2 failMessageText": "", + "painter_2 successMessageText": "Perfekt. Ich fang sofort an. Die Lackierungen werden top aussehen.", + "672e323797a187aabc88ca4a": "Finde und übergib topografische Karten", + "painter_3 name": "Grabe Tiefer", + "painter_3 description": "Nach einem brutalen SCAV-Überfall auf meine Werkstatt haben die verdammten Plünderer meine geliebte Waffenladung gestohlen, in die ich alles gesteckt hatte. Aber ich habe ihr Versteck gefunden. Jetzt ist es Zeit, ihnen zu zeigen, mit wem sie sich angelegt haben. Geh zu ihnen, setz ein Zeichen und sorge dafür, dass sie sowas nie wieder wagen. Es ist Zeit für Vergeltung – in Tarkov zählt nur Rache.", + "painter_3 failMessageText": "", + "painter_3 successMessageText": "Danke. Du bist mir sympathisch.", + "672e3295e4287b00f37700c1": "Eliminiere 10 Scavs auf Zollgelände", + "painter_4 name": "Werkstatt-Renovierung", + "painter_4 description": "Der Klang der zerstörten Werkstatt hallt noch in meinem Kopf, aber mit deiner Hilfe kann ich mit dem Wiederaufbau beginnen. Ich habe ein paar Werkzeuge und Materialien retten können, aber es reicht nicht. Durchsuche die Umgebung von Tarkov nach brauchbaren Ressourcen – Industriebedarf, seltene Metalle, elektronische Bauteile. Aber sei vorsichtig, rivalisierende Gruppen und Plünderer werden dich aufhalten wollen. Wenn du alles hast, bring es zu mir – dann geht’s an die Renovierung.", + "painter_4 failMessageText": "", + "painter_4 successMessageText": "Geschafft! Mit diesen Materialien kann ich endlich mit der Renovierung beginnen. Als Dankeschön – nimm das hier.", + "painter_4 location": "any", + "672e32c9be76a4ab7682ece9": "Finde und übergib Werkzeugsatz", + "672e32d8386445826a2adfee": "Finde und übergib Bolzen", + "672e32e7eb649d0132dfc0db": "Finde und übergib Schraubenmuttern", + "painter_5 name": "Funkstille", + "painter_5 description": "Jetzt, wo meine Werkstatt wieder läuft, brauche ich eine sichere Möglichkeit, mit meinen Kontakten zu kommunizieren. Es gibt Gerüchte über einen leistungsstarken Funksender, der ganz Tarkov abdeckt. Mit dem kann ich wichtige Informationen senden und empfangen – unterbrechungsfrei. Finde den Sender und bring ihn zu mir. Aber Vorsicht – andere Fraktionen könnten versuchen, ihn dir abzuluchsen.", + "painter_5 failMessageText": "", + "painter_5 successMessageText": "Perfekt! Jetzt kann ich störungsfrei mit meinen Leuten kommunizieren. Hier ist deine Belohnung – danke für deinen Einsatz.", + "painter_5 location": "any", + "672e33074cd02462a61760a2": "Finde und übergib COFDM-Funksignal-Sender", + "painter_6 name": "Gefährliche Gewässer", + "painter_6 description": "Eine Gruppe von PMCs sorgt für Chaos in Tarkov und bringt das Machtgefüge ins Wanken. Sie verbreiten Angst. Deine Aufgabe: Schalte diese Karma-Schurken aus und bring Gerechtigkeit. Sei bereit für heftige Kämpfe – sie sind gut ausgerüstet und trainiert. Meine Informationen sagen, sie sind derzeit an der Küste aktiv.", + "painter_6 failMessageText": "", + "painter_6 successMessageText": "Gut gemacht. Jetzt gönn dir eine Pause. Du hast es verdient.", + "672e334a39064994fc3bd86f": "Eliminiere 15 PMCs an der Küste", + "painter_7 name": "Frei Geboren", + "painter_7 description": "Ich brauche Schießpulver und Plexiglas für ein besonderes Projekt. Wenn du mir das bringst, gibt's eine dicke Belohnung. Viel Glück!", + "painter_7 failMessageText": "", + "painter_7 successMessageText": "Gut.", + "painter_7 location": "any", + "672e33753bc2b4d394df066d": "Finde und übergib Schießpulver Kite", + "672e338893682a2593697a37": "Finde und übergib Schießpulver Eagle", + "672e339460bf295e1f0771b5": "Finde und übergib Schießpulver Hawk", + "672e339f6a58d92a168c9845": "Finde und übergib Stück Plexiglas", + "painter_8 name": "Schrumpffolie", + "painter_8 description": "Hey... einige PMCs sind ziemlich sauer, weil du bei meinem Glücksspielding mitgemacht hast. Sie sagen, wir hätten sie abgezockt. Also... haben wir auch irgendwie, aber warum sie dich jetzt auch auf dem Kieker haben, keine Ahnung. Jedenfalls rotten sie sich zusammen – zeig ihnen mal, was du drauf hast.", + "painter_8 failMessageText": "", + "painter_8 successMessageText": "Du lebst?! Äh... ich glaub, ich brauch wieder 'ne Therapiesitzung.", + "672e33c986ff5b896eb503cd": "Eliminiere 48 PMCs", + "painter_9 name": "Der Dunkle Ritter", + "painter_9 description": "Pass auf, ich brauch eine ganz besondere Batman-Figur. Das ist nicht nur ein Sammlerstück – sie ist entscheidend für ein Projekt, an dem ich arbeite. Während du danach suchst, kannst du ruhig mal auf Batman machen – baller ein paar Scavs weg, spiel den dunklen Rächer. Denk dran: Tarkov braucht Helden. Zeit, den Verbrechern Gerechtigkeit zu bringen!", + "painter_9 failMessageText": "", + "painter_9 successMessageText": "Starke Arbeit, Dunkler Ritter! Du hast bewiesen, dass du den Umhang verdienst. Mit der Batman-Figur kann ich mein Projekt endlich abschließen. Tarkov ist dank dir ein Stück sicherer. Hier deine Belohnung – die Stadt sagt danke.", + "6848f9c9d567f37e6b729842": "Finde Batman-Figur im Raid", + "6848f9de85ccce5e3a78c9e9": "Übergib die Batman-Figur", + "6848f99d34b6c6122c735e05": "Eliminiere 20 Scavs", + "painter_10 name": "Der Letzte Schliff", + "painter_10 description": "Du... du hast es wirklich geschafft. Du hast mein Leben—*unendlich*—leichter gemacht. Eine letzte Aufgabe und ich bin raus aus diesem verfluchten Drecksloch. Ich brauche nur noch ein paar Teile, um mein Meisterwerk zu vollenden: einen improvisierten Helikopter-Boot. Frag nicht, wie das funktioniert. Bring einfach das Zeug. Ich *schwöre*, du wirst fürstlich belohnt. Wie, legendäre Belohnung.", + "painter_10 failMessageText": "", + "painter_10 successMessageText": "Du absoluter Held. Ein wahrer Champion. Ein Gott unter Menschen. Nun, was die Belohnung angeht... Also, lustige Geschichte: Ich hab keine Ahnung, wie man einen Helikopter baut. Oder ein Boot. Oder überhaupt sowas. Die Idee hat mir nur gefallen. Die Teile sind jetzt ziemlich wertlos. Ich bin nutzlos. Aber hey! Hier ist ein goldener Haufen. Jup. Er glänzt. Er ist... symbolisch. Du verstehst schon. Jedenfalls danke und sorry für immer.", + "684dce0db74a157e696d440c": "Finde und übergib Propantank (5L)", + "684de44841a695c11db3996c": "Finde und übergib Metallersatzteile", + "684de575d34628e3dfc940ff": "Finde und übergib Leiterplatte", + "684de443e988e5c59b5ec688": "Finde und übergib Elektromotor", + "684de44575288597828a1728": "Finde und übergib Erweiterte Stromwandler", + "painter_11 name": "Widerstand ist zwecklos", + "painter_11 description": "Ich brauche dich, um eine Waffe für mich zusammenzubauen. Es ist ein spezielles Projekt, das eine einzigartige Kombination von Teilen erfordert. Die Waffe wird ein mächtiges Werkzeug für meine Operationen in Tarkov sein, und ich brauche sie so schnell wie möglich einsatzbereit. Sammle die notwendigen Komponenten und bringe sie zu mir. Ich sorge dafür, dass du gut entlohnt wirst. Ich brauche eine AK-103 mit einem Magpul PMAG 30-Schuss Magazin, AK Vezhlivyy Strelok VS-24 + VS-33c Handschutz mit Gasrohr, AK Custom Arms AGS-74 PRO + Sniper Kit Pistolengriff, AK AK-EVO Schaft, OKP-7 Reflexvisier (Schwalbenschwanz). Die Waffe sollte über 80 Haltbarkeit haben. Ergonomie 65 oder höher, effektive Reichweite um die 200.", + "painter_11 failMessageText": "", + "painter_11 successMessageText": "Ausgezeichnete Arbeit! Die Waffe ist jetzt komplett und einsatzbereit. Deine Bemühungen waren von unschätzbarem Wert, und ich schätze deine Hingabe für dieses Projekt. Hier ist deine wohlverdiente Belohnung. Nutze sie weise.", + "684f142d6734c9fb25ceeecb": "Modifiziere eine AK-103 entsprechend den gegebenen Spezifikationen", + "painter_12 name": "Moscovium", + "painter_12 description": "Ich brauche dich, um einen Signalstörer an einem bestimmten Ort in Tarkov zu platzieren. Ich denke, es wäre am besten, ihn in das Auto mit den Chemikalien auf dem Zollgelände zu legen. Dieser Störsender wird die feindliche Kommunikation unterbrechen und uns einen taktischen Vorteil verschaffen. Der Ort ist stark bewacht, also sei auf einen Kampf vorbereitet. Sobald du den Störsender platziert hast, komm zu mir zurück für deine Belohnung.", + "painter_12 failMessageText": "", + "painter_12 successMessageText": "Mission erfüllt. Der Signalstörer ist installiert, und unsere Feinde werden sich abmühen, ihre Kommunikation wiederherzustellen. Das wird uns einen erheblichen Vorteil in diesem Bereich verschaffen. Hier ist deine Belohnung für gut geleistete Arbeit. Bewahre sie sicher auf.", + "68586394ca1d107631558586": "Platziere einen Signalstörer im Fahrzeug", + "68586a4d4ca5206d3e5b4c6b": "Überlebe den Raid auf dem Zollgelände" +} \ No newline at end of file diff --git a/user/mods/aMoxoPixel-Painter/db/locales/ru/painterRU.json b/user/mods/aMoxoPixel-Painter/db/locales/ru/painterRU.json new file mode 100644 index 0000000..d79022f --- /dev/null +++ b/user/mods/aMoxoPixel-Painter/db/locales/ru/painterRU.json @@ -0,0 +1,80 @@ +{ + "painter_1 name": "Заклеено", + "painter_1 description": "Мне нужна твоя помощь в повышении тактической эффективности ЧВК по всему Таркову. Найди разные виды изоленты, включая армированную и электроизоляционную — я использую их для создания специализированных магазинов. Такие магазины помогают бойцам быстро отличать снаряжённые магазины и находить их в разгар перестрелки. В Таркове важна каждая мелочь.", + "painter_1 note": "Некоторые боятся тех, кто живёт свободно.", + "painter_1 failMessageText": "", + "painter_1 successMessageText": "Отличная работа, нашёл всю изоленту. Теперь моя мастерская снова будет работать как часы. Держи награду за помощь. Я ценю это.", + "painter_1 location": "any", + "672e31c3262af62a8eb157cd": "Найти и передать армированную изоленту", + "672e31d7701987cf15698b30": "Найти и передать электроизоляционную ленту", + "painter_2 name": "Топографика", + "painter_2 description": "Мне нужно найти несколько топографических карт — ты знаешь, те, что можно найти по всему Таркову. Я использую их как шаблоны для крутой покраски.", + "painter_2 failMessageText": "", + "painter_2 successMessageText": "Идеально. Я сразу же возьмусь за покраску. Будет выглядеть шикарно.", + "672e323797a187aabc88ca4a": "Найти и передать топографические карты", + "painter_3 name": "Копни Глубже", + "painter_3 description": "После жёсткого рейда ШАКАЛов на мою мастерскую они унесли целую кучу оружия, в которое я вложил всё — кровь, пот и душу. Но я нашёл их логово. Теперь ты пойдёшь туда, отомстишь и дашь понять, что такие выходки не прощаются. Время расплаты в Таркове, и единственная валюта здесь — месть.", + "painter_3 failMessageText": "", + "painter_3 successMessageText": "Спасибо. Ты мне нравишься.", + "672e3295e4287b00f37700c1": "Уничтожить 10 ШАКАЛов на Таможне", + "painter_4 name": "Ремонт Мастерской", + "painter_4 description": "Эхо разрушенной мастерской всё ещё звучит в голове, но с твоей помощью я смогу начать восстановление. Я уже нашёл часть инструментов и материалов, но нужно больше. Ищи промышленные ресурсы, редкие металлы и электронику. Осторожно — в тенях бродят враждебные группировки и мародёры. Принеси всё необходимое, и мы начнём восстановление.", + "painter_4 failMessageText": "", + "painter_4 successMessageText": "Ты справился! С этими материалами я наконец смогу приступить к восстановлению мастерской. Вот тебе награда в знак благодарности.", + "painter_4 location": "any", + "672e32c9be76a4ab7682ece9": "Найти и передать набор инструментов", + "672e32d8386445826a2adfee": "Найти и передать болты", + "672e32e7eb649d0132dfc0db": "Найти и передать гайки", + "painter_5 name": "Радиомолчание", + "painter_5 description": "Теперь, когда моя мастерская снова работает, мне нужен более надёжный способ связи с контактами в поле. Говорят, где-то есть мощный радиопередатчик, который охватывает весь Тарков. С ним я смогу передавать важную информацию без перебоев. Найди этот передатчик и принеси мне. Осторожно — другие группировки могут попытаться тебе помешать.", + "painter_5 failMessageText": "", + "painter_5 successMessageText": "Отлично! Теперь с этим передатчиком я смогу спокойно поддерживать связь с полевыми контактами. Вот награда за твою помощь. Я ценю это.", + "painter_5 location": "any", + "672e33074cd02462a61760a2": "Найти и передать беспроводной передатчик COFDM", + "painter_6 name": "Опасные Воды", + "painter_6 description": "Группа ЧВК наводит хаос в районе Таркова, ломая хрупкий баланс сил. Они сеют страх. Твоя задача — устранить этих 'плохих кармических' бойцов и восстановить справедливость. Жди тяжёлого боя — они хорошо вооружены и обучены. По последним данным, они действуют в районе Берега.", + "painter_6 failMessageText": "", + "painter_6 successMessageText": "Неплохо. А теперь иди, отдохни. Ты это заслужил.", + "672e334a39064994fc3bd86f": "Уничтожить 15 ЧВК на Береге", + "painter_7 name": "Рождённый Свободным", + "painter_7 description": "Мне нужна пороховая смесь и оргстекло. У меня в голове один особый проект, и без этих материалов он не взлетит. Награда будет стоить того. Удачи!", + "painter_7 failMessageText": "", + "painter_7 successMessageText": "Хорошо.", + "painter_7 location": "any", + "672e33753bc2b4d394df066d": "Найти и передать порох «Кайт»", + "672e338893682a2593697a37": "Найти и передать порох «Игл»", + "672e339460bf295e1f0771b5": "Найти и передать порох «Хоук»", + "672e339f6a58d92a168c9845": "Найти и передать кусок оргстекла", + "painter_8 name": "Упаковка", + "painter_8 description": "Эй, чувак... слышал, ЧВКшники злятся из-за твоей связи с моим игровым бизнесом. Они думают, что мы их надули. Ну, в общем-то, так и есть... но зачем приплели тебя — не знаю. В общем, они собрались толпой, и сейчас хотят нас размазать. Покажи им, кто тут с большими пушками.", + "painter_8 failMessageText": "", + "painter_8 successMessageText": "Ты жив?! Ну... мне снова нужен сеанс терапии.", + "672e33c986ff5b896eb503cd": "Уничтожить 48 ЧВК", + "painter_9 name": "Тёмный Рыцарь", + "painter_9 description": "Слушай, мне нужно, чтобы ты нашёл одну особенную фигурку Бэтмена. Это не просто игрушка — это важный элемент моего уникального проекта. Пока ищешь, можешь заодно поиграть в Бэтмена — завали пару ШАКАЛов, почувствуй себя героем. Войди в роль. Тени зовут — покажи преступникам, что такое правосудие!", + "painter_9 failMessageText": "", + "painter_9 successMessageText": "Отличная работа, Тёмный Рыцарь! Ты доказал, что достоин плаща. С этой фигуркой я наконец завершу проект. Тарков в безопасности, благодаря тебе. Вот твоя заслуженная награда — считай, что это благодарность от всего города.", + "6848f9c9d567f37e6b729842": "Найти фигурку Бэтмена в рейде", + "6848f9de85ccce5e3a78c9e9": "Передать фигурку Бэтмена", + "6848f99d34b6c6122c735e05": "Уничтожить 20 ШАКАЛов", + "painter_10 name": "Последний Штрих", + "painter_10 description": "Ты... ты действительно сделал это. Ты сделал мою жизнь—*бесконечно*—проще. Последнее задание, и я сваливаю из этой проклятой помойки. Мне нужно ещё несколько деталей, чтобы завершить мой шедевр: самодельный вертолёт-лодку. Не спрашивай, как это работает. Просто принеси вещи. Клянусь, ты будешь щедро вознаграждён. Легендарного уровня награда.", + "painter_10 failMessageText": "", + "painter_10 successMessageText": "Ты абсолютный гигант. Настоящий герой. Бог среди людей. Итак, насчёт награды... Забавная история: понятия не имею, как строить вертолёт. Или лодку. Или вообще что-либо подобное. Мне просто понравилась идея. Детали теперь бесполезны. Я бесполезен. Но эй! Вот золотая какашка. Да. Она блестящая. Она... символическая. Ты понимаешь. В любом случае, спасибо и извини навсегда.", + "684dce0db74a157e696d440c": "Найти и передать баллон с пропаном (5л)", + "684de44841a695c11db3996c": "Найти и передать металлические запчасти", + "684de575d34628e3dfc940ff": "Найти и передать печатную плату", + "684de443e988e5c59b5ec688": "Найти и передать электродвигатель", + "684de44575288597828a1728": "Найти и передать продвинутый преобразователь тока", + "painter_11 name": "Сопротивление бесполезно", + "painter_11 description": "Мне нужно, чтобы ты собрал для меня оружие. Это особый проект, требующий уникального сочетания деталей. Оружие станет мощным инструментом для моих операций в Таркове, и мне нужно, чтобы оно было готово как можно скорее. Собери необходимые компоненты и принеси их мне. Я позабочусь о том, чтобы ты был хорошо вознаграждён. Мне нужен АК-103 с магазином Magpul PMAG на 30 патронов, цевьё AK Vezhlivyy Strelok VS-24 + VS-33c с газовой трубкой, пистолетная рукоятка AK Custom Arms AGS-74 PRO + Sniper Kit, приклад AK AK-EVO, рефлекторный прицел OKP-7 (ласточкин хвост). Оружие должно иметь прочность свыше 80, эргономику 65 и выше, эффективную дальность около 200.", + "painter_11 failMessageText": "", + "painter_11 successMessageText": "Отличная работа! Оружие теперь готово к бою. Твои усилия были бесценны, и я ценю твою преданность этому проекту. Вот твоя заслуженная награда. Используй её мудро.", + "684f142d6734c9fb25ceeecb": "Модифицировать АК-103 в соответствии с заданными характеристиками", + "painter_12 name": "Московий", + "painter_12 description": "Мне нужно, чтобы ты установил глушитель сигналов в определённом месте в Таркове. Думаю, лучше всего разместить его в машине с химикатами на Таможне. Этот глушитель нарушит связь противника и даст нам тактическое преимущество. Место хорошо охраняется, так что будь готов к бою. Как только установишь глушитель, возвращайся ко мне за наградой.", + "painter_12 failMessageText": "", + "painter_12 successMessageText": "Миссия выполнена. Глушитель сигналов установлен, и наши враги будут изо всех сил пытаться восстановить связь. Это даст нам значительное преимущество в этом районе. Вот твоя награда за хорошо проделанную работу. Береги её.", + "68586394ca1d107631558586": "Установить глушитель сигналов в транспортном средстве", + "68586a4d4ca5206d3e5b4c6b": "Выжить в рейде на Таможне" +} \ No newline at end of file diff --git a/user/mods/aMoxoPixel-Painter/db/quests/painter.json b/user/mods/aMoxoPixel-Painter/db/quests/painter.json new file mode 100644 index 0000000..d6eba93 --- /dev/null +++ b/user/mods/aMoxoPixel-Painter/db/quests/painter.json @@ -0,0 +1,2007 @@ +{ + "668aacd1dee3de3ce276fdef": { + "QuestName": "Taped Up", + "_id": "668aacd1dee3de3ce276fdef", + "acceptanceAndFinishingSource": "eft", + "arenaLocations": [], + "canShowNotificationsInGame": true, + "changeQuestMessageText": "painter_1 changeQuestMessageText", + "conditions": { + "AvailableForFinish": [ + { + "conditionType": "HandoverItem", + "dogtagLevel": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e31c3262af62a8eb157cd", + "index": 0, + "isEncoded": false, + "maxDurability": 100, + "minDurability": 0, + "onlyFoundInRaid": true, + "parentId": "", + "target": ["57347c1124597737fb1379e3"], + "value": 3, + "visibilityConditions": [] + }, + { + "conditionType": "HandoverItem", + "dogtagLevel": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e31d7701987cf15698b30", + "index": 1, + "isEncoded": false, + "maxDurability": 100, + "minDurability": 0, + "onlyFoundInRaid": true, + "parentId": "", + "target": ["5734795124597738002c6176"], + "value": 3, + "visibilityConditions": [] + } + ], + "AvailableForStart": [ + { + "compareMethod": ">=", + "conditionType": "Level", + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e31eeb489152e7707cb72", + "index": 0, + "isEncoded": false, + "parentId": "", + "value": 1, + "visibilityConditions": [] + } + ], + "Fail": [] + }, + "declinePlayerMessage": "painter_1 declinePlayerMessage", + "description": "painter_1 description", + "failMessageText": "painter_1 failMessageText", + "gameModes": [], + "image": "/files/quest/icon/painter_1_thumbnail.png", + "instantComplete": false, + "isKey": false, + "location": "any", + "name": "painter_1 name", + "note": "painter_1 note", + "progressSource": "eft", + "rankingModes": [], + "restartable": false, + "rewards": { + "Fail": [], + "Started": [], + "Success": [ + { + "id": "672e320f0ed0c138d60be692", + "index": 0, + "type": "Experience", + "unknown": false, + "value": 2500 + }, + { + "id": "672e321a311745b947c86297", + "index": 1, + "target": "668aaff35fd574b6dcc4a686", + "type": "TraderStanding", + "unknown": false, + "value": 0.02 + }, + { + "findInRaid": true, + "id": "68617810de5bd00f30d4cfdb", + "index": 2, + "items": [ + { + "_id": "6861780b94558e78ea3a70a5", + "_tpl": "5d235b4d86f7742e017bc88a", + "upd": { + "StackObjectsCount": 5 + } + } + ], + "target": "6861780b94558e78ea3a70a5", + "type": "Item", + "unknown": false, + "value": 5 + }, + { + "findInRaid": true, + "id": "672e322347a9f6b4122f26c1", + "index": 3, + "items": [ + { + "_id": "672e322618e2333119497dc9", + "_tpl": "5449016a4bdc2d6f028b456f", + "upd": { + "StackObjectsCount": 21000 + } + } + ], + "target": "672e322618e2333119497dc9", + "type": "Item", + "unknown": false, + "value": 20500 + } + ] + }, + "secretQuest": false, + "side": "Pmc", + "startedMessageText": "painter_1 startedMessageText", + "status": 0, + "successMessageText": "painter_1 successMessageText", + "traderId": "668aaff35fd574b6dcc4a686", + "type": "PickUp" + }, + "668aace8ff74aecfbcfbe9e6": { + "QuestName": "Topographics", + "_id": "668aace8ff74aecfbcfbe9e6", + "acceptanceAndFinishingSource": "eft", + "arenaLocations": [], + "canShowNotificationsInGame": true, + "changeQuestMessageText": "painter_2 changeQuestMessageText", + "conditions": { + "AvailableForFinish": [ + { + "conditionType": "HandoverItem", + "dogtagLevel": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e323797a187aabc88ca4a", + "index": 0, + "isEncoded": false, + "maxDurability": 100, + "minDurability": 0, + "onlyFoundInRaid": true, + "parentId": "", + "target": ["62a0a124de7ac81993580542"], + "value": 1, + "visibilityConditions": [] + } + ], + "AvailableForStart": [ + { + "availableAfter": 0, + "conditionType": "Quest", + "dispersion": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e324934b8ff780512ec50", + "index": 0, + "parentId": "", + "status": [4], + "target": "668aacd1dee3de3ce276fdef", + "visibilityConditions": [] + } + ], + "Fail": [] + }, + "declinePlayerMessage": "painter_2 declinePlayerMessage", + "description": "painter_2 description", + "failMessageText": "painter_2 failMessageText", + "gameModes": [], + "image": "/files/quest/icon/painter_2_thumbnail.png", + "instantComplete": false, + "isKey": false, + "location": "any", + "name": "painter_2 name", + "note": "painter_2 note", + "progressSource": "eft", + "rankingModes": [], + "restartable": false, + "rewards": { + "Fail": [], + "Started": [], + "Success": [ + { + "availableInGameEditions": [], + "id": "672e3258a638ea171fc6a0b6", + "index": 0, + "type": "Experience", + "unknown": false, + "value": 6500 + }, + { + "findInRaid": true, + "id": "68617965194eedc69f05331e", + "index": 1, + "items": [ + { + "_id": "68617962a3882cd0bdac3e2e", + "_tpl": "590a3cd386f77436f20848cb", + "upd": { + "StackObjectsCount": 3 + } + } + ], + "target": "68617962a3882cd0bdac3e2e", + "type": "Item", + "unknown": false, + "value": 3 + }, + { + "findInRaid": true, + "id": "68617849058ac0054cf6e24d", + "index": 2, + "items": [ + { + "_id": "686178466d4116851c804857", + "_tpl": "5d235b4d86f7742e017bc88a", + "upd": { + "StackObjectsCount": 5 + } + } + ], + "target": "686178466d4116851c804857", + "type": "Item", + "unknown": false, + "value": 5 + }, + { + "availableInGameEditions": [], + "findInRaid": true, + "id": "672e325a9f4a5085cc20a7ec", + "index": 3, + "items": [ + { + "_id": "672e325c7c1121e5395d35cd", + "_tpl": "5449016a4bdc2d6f028b456f", + "upd": { + "StackObjectsCount": 35500 + } + } + ], + "target": "672e325c7c1121e5395d35cd", + "type": "Item", + "unknown": false, + "value": 35500 + }, + { + "availableInGameEditions": [], + "id": "672e3263804e6e913647b594", + "index": 4, + "target": "668aaff35fd574b6dcc4a686", + "type": "TraderStanding", + "unknown": false, + "value": 0.03 + } + ] + }, + "secretQuest": false, + "side": "Pmc", + "startedMessageText": "painter_2 description", + "status": 0, + "successMessageText": "painter_2 successMessageText", + "traderId": "668aaff35fd574b6dcc4a686", + "type": "PickUp" + }, + "668aad1d97c0b19780ebf9c2": { + "QuestName": "Dig Deep", + "_id": "668aad1d97c0b19780ebf9c2", + "acceptanceAndFinishingSource": "eft", + "arenaLocations": [], + "canShowNotificationsInGame": true, + "changeQuestMessageText": "painter_3 changeQuestMessageText", + "conditions": { + "AvailableForFinish": [ + { + "completeInSeconds": 0, + "conditionType": "CounterCreator", + "counter": { + "conditions": [ + { + "bodyPart": [], + "compareMethod": ">=", + "conditionType": "Kills", + "daytime": { + "from": 0, + "to": 0 + }, + "distance": { + "compareMethod": ">=", + "value": 0 + }, + "dynamicLocale": false, + "enemyEquipmentExclusive": [], + "enemyEquipmentInclusive": [], + "enemyHealthEffects": [], + "id": "672e326e957ba4b27be8a570", + "resetOnSessionEnd": false, + "savageRole": [], + "target": "Savage", + "value": 1, + "weapon": [], + "weaponCaliber": [], + "weaponModsExclusive": [], + "weaponModsInclusive": [] + }, + { + "conditionType": "Location", + "dynamicLocale": false, + "id": "672e327ba37230a48fc86c5f", + "target": ["bigmap"] + } + ], + "id": "672e3285d8846577b4de301c" + }, + "doNotResetIfCounterCompleted": false, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e3295e4287b00f37700c1", + "index": 0, + "isNecessary": false, + "isResetOnConditionFailed": false, + "oneSessionOnly": false, + "parentId": "", + "type": "Elimination", + "value": 10, + "visibilityConditions": [] + } + ], + "AvailableForStart": [ + { + "availableAfter": 0, + "conditionType": "Quest", + "dispersion": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e32a15f33429ec9dd1864", + "index": 0, + "parentId": "", + "status": [4], + "target": "668aace8ff74aecfbcfbe9e6", + "visibilityConditions": [] + } + ], + "Fail": [] + }, + "declinePlayerMessage": "painter_3 declinePlayerMessage", + "description": "painter_3 description", + "failMessageText": "painter_3 failMessageText", + "gameModes": [], + "image": "/files/quest/icon/painter_3_thumbnail.png", + "instantComplete": false, + "isKey": false, + "location": "56f40101d2720b2a4d8b45d6", + "name": "painter_3 name", + "note": "painter_3 note", + "progressSource": "eft", + "rankingModes": [], + "restartable": false, + "rewards": { + "Fail": [], + "Started": [], + "Success": [ + { + "id": "672e32ac9fc5610c6495993a", + "index": 0, + "type": "Experience", + "unknown": false, + "value": 6500 + }, + { + "findInRaid": true, + "id": "672e32affeac239b74d81f71", + "index": 1, + "items": [ + { + "_id": "672e32b1b37629655d837d0a", + "_tpl": "5449016a4bdc2d6f028b456f", + "upd": { + "StackObjectsCount": 39000 + } + } + ], + "target": "672e32b1b37629655d837d0a", + "type": "Item", + "unknown": false, + "value": 39500 + }, + { + "findInRaid": true, + "id": "672e32b93e3c3479564195ec", + "index": 2, + "items": [ + { + "_id": "672e32bb2333f51f9c6c08c4", + "_tpl": "5d403f9186f7743cac3f229b", + "upd": { + "StackObjectsCount": 3 + } + } + ], + "target": "672e32bb2333f51f9c6c08c4", + "type": "Item", + "unknown": false, + "value": 3 + }, + { + "id": "68617a316c47049dab671d28", + "index": 3, + "target": "54cb57776803fa99248b456e", + "type": "TraderStanding", + "unknown": false, + "value": 0.02 + }, + { + "id": "672e32aeaa0ec3f416123e5e", + "index": 4, + "target": "668aaff35fd574b6dcc4a686", + "type": "TraderStanding", + "unknown": false, + "value": 0.03 + } + ] + }, + "secretQuest": false, + "side": "Pmc", + "startedMessageText": "painter_3 description", + "status": 0, + "successMessageText": "painter_3 successMessageText", + "traderId": "668aaff35fd574b6dcc4a686", + "type": "Elimination" + }, + "668aad2b0f0c52ff9b51625d": { + "QuestName": "Workshop Refurbishment", + "_id": "668aad2b0f0c52ff9b51625d", + "acceptanceAndFinishingSource": "eft", + "arenaLocations": [], + "canShowNotificationsInGame": true, + "changeQuestMessageText": "painter_4 changeQuestMessageText", + "conditions": { + "AvailableForFinish": [ + { + "conditionType": "HandoverItem", + "dogtagLevel": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e32c9be76a4ab7682ece9", + "index": 0, + "isEncoded": false, + "maxDurability": 100, + "minDurability": 0, + "onlyFoundInRaid": true, + "parentId": "", + "target": ["590c2e1186f77425357b6124"], + "value": "1", + "visibilityConditions": [] + }, + { + "conditionType": "HandoverItem", + "dogtagLevel": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e32d8386445826a2adfee", + "index": 1, + "isEncoded": false, + "maxDurability": 100, + "minDurability": 0, + "onlyFoundInRaid": true, + "parentId": "", + "target": ["57347c5b245977448d35f6e1"], + "value": "3", + "visibilityConditions": [] + }, + { + "conditionType": "HandoverItem", + "dogtagLevel": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e32e7eb649d0132dfc0db", + "index": 2, + "isEncoded": false, + "maxDurability": 100, + "minDurability": 0, + "onlyFoundInRaid": true, + "parentId": "", + "target": ["57347c77245977448d35f6e2"], + "value": "3", + "visibilityConditions": [] + } + ], + "AvailableForStart": [ + { + "availableAfter": 0, + "conditionType": "Quest", + "dispersion": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e32f318a4d0481537902d", + "index": 0, + "parentId": "", + "status": [4], + "target": "668aad1d97c0b19780ebf9c2", + "visibilityConditions": [] + } + ], + "Fail": [] + }, + "declinePlayerMessage": "painter_4 declinePlayerMessage", + "description": "painter_4 description", + "failMessageText": "painter_4 failMessageText", + "gameModes": [], + "image": "/files/quest/icon/painter_4_thumbnail.png", + "instantComplete": false, + "isKey": false, + "location": "any", + "name": "painter_4 name", + "note": "painter_4 note", + "progressSource": "eft", + "rankingModes": [], + "restartable": false, + "rewards": { + "Fail": [], + "Started": [], + "Success": [ + { + "id": "672e32f713d2c32fd0ab716b", + "index": 0, + "type": "Experience", + "unknown": false, + "value": 2500 + }, + { + "findInRaid": true, + "id": "672e32f8f7a6c399a761a62f", + "index": 1, + "items": [ + { + "_id": "672e32f908b40ed46e9aa44a", + "_tpl": "5c05308086f7746b2101e90b", + "upd": { + "StackObjectsCount": 1 + } + } + ], + "target": "672e32f908b40ed46e9aa44a", + "type": "Item", + "unknown": false, + "value": 1 + }, + { + "findInRaid": true, + "id": "672e322347a9f6b4122f26c1", + "index": 2, + "items": [ + { + "_id": "672e322618e2333119497dc9", + "_tpl": "5449016a4bdc2d6f028b456f", + "upd": { + "StackObjectsCount": 31000 + } + } + ], + "target": "672e322618e2333119497dc9", + "type": "Item", + "unknown": false, + "value": 30500 + }, + { + "id": "672e32fe9bd3504432668960", + "index": 3, + "target": "668aaff35fd574b6dcc4a686", + "type": "TraderStanding", + "unknown": false, + "value": 0.03 + } + ] + }, + "secretQuest": false, + "side": "Pmc", + "startedMessageText": "painter_4 startedMessageText", + "status": 0, + "successMessageText": "painter_4 successMessageText", + "traderId": "668aaff35fd574b6dcc4a686", + "type": "PickUp" + }, + "668aad328a1b4ad3818169cf": { + "QuestName": "Radio Silence", + "_id": "668aad328a1b4ad3818169cf", + "acceptanceAndFinishingSource": "eft", + "arenaLocations": [], + "canShowNotificationsInGame": true, + "changeQuestMessageText": "painter_5 changeQuestMessageText", + "conditions": { + "AvailableForFinish": [ + { + "conditionType": "HandoverItem", + "dogtagLevel": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e33074cd02462a61760a2", + "index": 0, + "isEncoded": false, + "maxDurability": 100, + "minDurability": 0, + "onlyFoundInRaid": true, + "parentId": "", + "target": ["5c052f6886f7746b1e3db148"], + "value": "1", + "visibilityConditions": [] + } + ], + "AvailableForStart": [ + { + "availableAfter": 0, + "conditionType": "Quest", + "dispersion": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e33139f6ec10a5d314e75", + "index": 0, + "parentId": "", + "status": [4], + "target": "668aad2b0f0c52ff9b51625d", + "visibilityConditions": [] + } + ], + "Fail": [] + }, + "declinePlayerMessage": "painter_5 declinePlayerMessage", + "description": "painter_5 description", + "failMessageText": "painter_5 failMessageText", + "gameModes": [], + "image": "/files/quest/icon/painter_5_thumbnail.png", + "instantComplete": false, + "isKey": false, + "location": "any", + "name": "painter_5 name", + "note": "painter_5 note", + "progressSource": "eft", + "rankingModes": [], + "restartable": false, + "rewards": { + "Fail": [], + "Started": [], + "Success": [ + { + "id": "672e331a18ecf91f7135cfbc", + "index": 0, + "type": "Experience", + "unknown": false, + "value": 2500 + }, + { + "findInRaid": true, + "id": "672e331ca9ec1a9b0ff50961", + "index": 1, + "items": [ + { + "_id": "672e331de1cb340521837424", + "_tpl": "5e2aedd986f7746d404f3aa4", + "upd": { + "StackObjectsCount": 3 + } + } + ], + "target": "672e331de1cb340521837424", + "type": "Item", + "unknown": false, + "value": 1 + }, + { + "findInRaid": true, + "id": "672e33236d76f0037ade6462", + "index": 2, + "items": [ + { + "_id": "672e332433dd94c340abaf64", + "_tpl": "5449016a4bdc2d6f028b456f", + "upd": { + "StackObjectsCount": 51000 + } + } + ], + "target": "672e332433dd94c340abaf64", + "type": "Item", + "unknown": false, + "value": 50500 + }, + { + "id": "68617b553da7f429a1390657", + "index": 3, + "target": "Attention", + "type": "Skill", + "unknown": false, + "value": 400 + }, + { + "id": "68617b5706f7dc5c9143cb01", + "index": 4, + "target": "Search", + "type": "Skill", + "unknown": false, + "value": 600 + }, + { + "id": "672e332b978a9cce93f8aba0", + "index": 5, + "target": "668aaff35fd574b6dcc4a686", + "type": "TraderStanding", + "unknown": false, + "value": 0.03 + } + ] + }, + "secretQuest": false, + "side": "Pmc", + "startedMessageText": "painter_5 startedMessageText", + "status": 0, + "successMessageText": "painter_5 successMessageText", + "traderId": "668aaff35fd574b6dcc4a686", + "type": "PickUp" + }, + "668aad49a21e4d37c83d4ffc": { + "QuestName": "Dangerous Waters", + "_id": "668aad49a21e4d37c83d4ffc", + "acceptanceAndFinishingSource": "eft", + "arenaLocations": [], + "canShowNotificationsInGame": true, + "changeQuestMessageText": "painter_6 changeQuestMessageText", + "conditions": { + "AvailableForFinish": [ + { + "completeInSeconds": 0, + "conditionType": "CounterCreator", + "counter": { + "conditions": [ + { + "bodyPart": [], + "compareMethod": ">=", + "conditionType": "Kills", + "daytime": { + "from": 0, + "to": 0 + }, + "distance": { + "compareMethod": ">=", + "value": 0 + }, + "dynamicLocale": false, + "enemyEquipmentExclusive": [], + "enemyEquipmentInclusive": [], + "enemyHealthEffects": [], + "id": "672e3337719c01963ea93651", + "resetOnSessionEnd": false, + "savageRole": [], + "target": "AnyPmc", + "value": 1, + "weapon": [], + "weaponCaliber": [], + "weaponModsExclusive": [], + "weaponModsInclusive": [] + }, + { + "conditionType": "Location", + "id": "672e333bec632da64d734e2d", + "target": ["Shoreline"] + } + ], + "id": "672e33405decb9faa41db3ca" + }, + "doNotResetIfCounterCompleted": false, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e334a39064994fc3bd86f", + "index": 0, + "isNecessary": false, + "isResetOnConditionFailed": false, + "oneSessionOnly": false, + "parentId": "", + "type": "Elimination", + "value": "15", + "visibilityConditions": [] + } + ], + "AvailableForStart": [ + { + "availableAfter": 0, + "conditionType": "Quest", + "dispersion": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e33594fd1e90a00dc344e", + "index": 0, + "parentId": "", + "status": [4], + "target": "668aad328a1b4ad3818169cf", + "visibilityConditions": [] + } + ], + "Fail": [] + }, + "declinePlayerMessage": "painter_6 declinePlayerMessage", + "description": "painter_6 description", + "failMessageText": "painter_6 failMessageText", + "gameModes": [], + "image": "/files/quest/icon/painter_6_thumbnail.png", + "instantComplete": false, + "isKey": false, + "location": "5704e554d2720bac5b8b456e", + "name": "painter_6 name", + "note": "painter_6 note", + "progressSource": "eft", + "rankingModes": [], + "restartable": false, + "rewards": { + "Fail": [], + "Started": [], + "Success": [ + { + "id": "672e335d2f242b0ba98b196d", + "index": 0, + "type": "Experience", + "unknown": false, + "value": 6500 + }, + { + "findInRaid": true, + "id": "672e3362123bcde9f627012d", + "index": 1, + "items": [ + { + "_id": "672e3363e49a3c871e52b94c", + "_tpl": "5449016a4bdc2d6f028b456f", + "upd": { + "StackObjectsCount": 80000 + } + } + ], + "target": "672e3363e49a3c871e52b94c", + "type": "Item", + "unknown": false, + "value": 80000 + }, + { + "findInRaid": true, + "id": "672e33688da7b757361b0fc3", + "index": 2, + "items": [ + { + "_id": "672e33699042e3aae2094982", + "_tpl": "5d1b376e86f774252519444e", + "upd": { + "StackObjectsCount": 1 + } + } + ], + "target": "672e33699042e3aae2094982", + "type": "Item", + "unknown": false, + "value": 1 + }, + { + "findInRaid": true, + "id": "68617c668852f40cf488d9c6", + "index": 3, + "items": [ + { + "_id": "68617c638b17fc811633692c", + "_tpl": "5c052fb986f7746b2101e909", + "upd": { + "StackObjectsCount": 1 + } + } + ], + "target": "68617c638b17fc811633692c", + "type": "Item", + "unknown": false, + "value": 1 + }, + { + "id": "672e33605cc6a53650006991", + "index": 4, + "target": "668aaff35fd574b6dcc4a686", + "type": "TraderStanding", + "unknown": false, + "value": 0.04 + } + ] + }, + "secretQuest": false, + "side": "Pmc", + "startedMessageText": "painter_6 description", + "status": 0, + "successMessageText": "painter_6 successMessageText", + "traderId": "668aaff35fd574b6dcc4a686", + "type": "Elimination" + }, + "668aad3c3ff8f5b258e3a65b": { + "QuestName": "Born Free", + "_id": "668aad3c3ff8f5b258e3a65b", + "acceptanceAndFinishingSource": "eft", + "arenaLocations": [], + "canShowNotificationsInGame": true, + "changeQuestMessageText": "painter_7 changeQuestMessageText", + "conditions": { + "AvailableForFinish": [ + { + "conditionType": "HandoverItem", + "dogtagLevel": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e33753bc2b4d394df066d", + "index": 0, + "isEncoded": false, + "maxDurability": 100, + "minDurability": 0, + "onlyFoundInRaid": true, + "parentId": "", + "target": ["590c5a7286f7747884343aea"], + "value": "7", + "visibilityConditions": [] + }, + { + "conditionType": "HandoverItem", + "dogtagLevel": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e338893682a2593697a37", + "index": 1, + "isEncoded": false, + "maxDurability": 100, + "minDurability": 0, + "onlyFoundInRaid": true, + "parentId": "", + "target": ["5d6fc78386f77449d825f9dc"], + "value": "7", + "visibilityConditions": [] + }, + { + "conditionType": "HandoverItem", + "dogtagLevel": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e339460bf295e1f0771b5", + "index": 2, + "isEncoded": false, + "maxDurability": 100, + "minDurability": 0, + "onlyFoundInRaid": true, + "parentId": "", + "target": ["5d6fc87386f77449db3db94e"], + "value": "7", + "visibilityConditions": [] + }, + { + "conditionType": "HandoverItem", + "dogtagLevel": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e339f6a58d92a168c9845", + "index": 3, + "isEncoded": false, + "maxDurability": 100, + "minDurability": 0, + "onlyFoundInRaid": true, + "parentId": "", + "target": ["59e366c186f7741778269d85"], + "value": "7", + "visibilityConditions": [] + } + ], + "AvailableForStart": [ + { + "availableAfter": 0, + "conditionType": "Quest", + "dispersion": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e33a8cd1e9476551db9ea", + "index": 0, + "parentId": "", + "status": [4], + "target": "668aad49a21e4d37c83d4ffc", + "visibilityConditions": [] + } + ], + "Fail": [] + }, + "declinePlayerMessage": "painter_7 declinePlayerMessage", + "description": "painter_7 description", + "failMessageText": "painter_7 failMessageText", + "gameModes": [], + "image": "/files/quest/icon/painter_7_thumbnail.png", + "instantComplete": false, + "isKey": false, + "location": "any", + "name": "painter_7 name", + "note": "painter_7 note", + "progressSource": "eft", + "rankingModes": [], + "restartable": false, + "rewards": { + "Fail": [], + "Started": [], + "Success": [ + { + "id": "672e33acba7dc114726c9ccc", + "index": 0, + "type": "Experience", + "unknown": false, + "value": 8500 + }, + { + "findInRaid": true, + "id": "672e33ad3e0a2d403e1ae5b4", + "index": 1, + "items": [ + { + "_id": "672e33ad2bd6d0ddc2311ea2", + "_tpl": "5449016a4bdc2d6f028b456f", + "upd": { + "StackObjectsCount": 110000 + } + } + ], + "target": "672e33ad2bd6d0ddc2311ea2", + "type": "Item", + "unknown": false, + "value": 110000 + }, + { + "findInRaid": true, + "id": "68617cc34dacec73ed5a3c5e", + "index": 2, + "items": [ + { + "_id": "68617cc5d61375e195edccff", + "_tpl": "5d235b4d86f7742e017bc88a", + "upd": { + "StackObjectsCount": 30 + } + } + ], + "target": "68617cc5d61375e195edccff", + "type": "Item", + "unknown": false, + "value": 30 + }, + { + "id": "672e33b369515ce7af7df6ff", + "index": 3, + "items": [ + { + "_id": "672e2804a0529208b4e10e18", + "_tpl": "5c0a840b86f7742ffa4f2482" + } + ], + "loyaltyLevel": 4, + "target": "672e2804a0529208b4e10e18", + "traderId": "668aaff35fd574b6dcc4a686", + "type": "AssortmentUnlock" + }, + { + "id": "672e33b879e2d665bfa01bcc", + "index": 4, + "target": "668aaff35fd574b6dcc4a686", + "type": "TraderStanding", + "unknown": false, + "value": 0.04 + } + ] + }, + "secretQuest": false, + "side": "Pmc", + "startedMessageText": "painter_7 startedMessageText", + "status": 0, + "successMessageText": "painter_7 successMessageText", + "traderId": "668aaff35fd574b6dcc4a686", + "type": "PickUp" + }, + "668c18eb12542b3c3ff6e20f": { + "QuestName": "Shrink Wrap", + "_id": "668c18eb12542b3c3ff6e20f", + "acceptanceAndFinishingSource": "eft", + "arenaLocations": [], + "canShowNotificationsInGame": true, + "changeQuestMessageText": "painter_8 changeQuestMessageText", + "conditions": { + "AvailableForFinish": [ + { + "completeInSeconds": 0, + "conditionType": "CounterCreator", + "counter": { + "conditions": [ + { + "bodyPart": [], + "compareMethod": ">=", + "conditionType": "Kills", + "daytime": { + "from": 0, + "to": 0 + }, + "distance": { + "compareMethod": ">=", + "value": 0 + }, + "dynamicLocale": false, + "enemyEquipmentExclusive": [], + "enemyEquipmentInclusive": [], + "enemyHealthEffects": [], + "id": "672e33c211d2133aed1ccd66", + "resetOnSessionEnd": false, + "savageRole": [], + "target": "AnyPmc", + "value": 1, + "weapon": [], + "weaponCaliber": [], + "weaponModsExclusive": [], + "weaponModsInclusive": [] + } + ], + "id": "672e33c4c2f8b0ce34a78768" + }, + "doNotResetIfCounterCompleted": false, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "672e33c986ff5b896eb503cd", + "index": 0, + "isNecessary": false, + "isResetOnConditionFailed": false, + "oneSessionOnly": false, + "parentId": "", + "type": "Elimination", + "value": 48, + "visibilityConditions": [] + } + ], + "AvailableForStart": [ + { + "availableAfter": 0, + "conditionType": "Quest", + "dispersion": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "6748f226384e5edc1e86a07a", + "index": 0, + "parentId": "", + "status": [4], + "target": "668aad3c3ff8f5b258e3a65b", + "visibilityConditions": [] + } + ], + "Fail": [] + }, + "declinePlayerMessage": "painter_8 declinePlayerMessage", + "description": "painter_8 description", + "failMessageText": "painter_8 failMessageText", + "gameModes": [], + "image": "/files/quest/icon/painter_8_thumbnail.png", + "instantComplete": false, + "isKey": false, + "location": "any", + "name": "painter_8 name", + "note": "painter_8 note", + "progressSource": "eft", + "rankingModes": [], + "restartable": false, + "rewards": { + "Fail": [], + "Started": [], + "Success": [ + { + "id": "672e33d7328feb52bd28d5d9", + "index": 0, + "type": "Experience", + "unknown": false, + "value": 9500 + }, + { + "availableInGameEditions": [], + "findInRaid": true, + "id": "672e33da4a034853ff35fdbb", + "index": 1, + "items": [ + { + "_id": "672e33db64495f03c3642ee2", + "_tpl": "5449016a4bdc2d6f028b456f", + "upd": { + "StackObjectsCount": 160000 + } + } + ], + "target": "672e33db64495f03c3642ee2", + "type": "Item", + "unknown": false, + "value": 160000 + }, + { + "id": "672e33e1d44cac74b631eec5", + "index": 2, + "items": [ + { + "_id": "672e284a363b798192b802af", + "_tpl": "54527ac44bdc2d36668b4567" + } + ], + "loyaltyLevel": 4, + "target": "672e284a363b798192b802af", + "traderId": "668aaff35fd574b6dcc4a686", + "unknown": false, + "type": "AssortmentUnlock" + }, + { + "id": "672e33e5031e7626d247b917", + "index": 3, + "items": [ + { + "_id": "672e289bb4096716fcb918a7", + "_tpl": "5a6086ea4f39f99cd479502f" + } + ], + "loyaltyLevel": 4, + "target": "672e289bb4096716fcb918a7", + "traderId": "668aaff35fd574b6dcc4a686", + "unknown": false, + "type": "AssortmentUnlock" + }, + { + "id": "672e33d832bdd4504eee296f", + "index": 4, + "target": "668aaff35fd574b6dcc4a686", + "type": "TraderStanding", + "unknown": false, + "value": 0.04 + } + ] + }, + "secretQuest": false, + "side": "Pmc", + "startedMessageText": "painter_8 description", + "status": 0, + "successMessageText": "painter_8 successMessageText", + "traderId": "668aaff35fd574b6dcc4a686", + "type": "Elimination" + }, + "6848f88e54cef2b50b3a2589": { + "QuestName": "The Dark Knight", + "_id": "6848f88e54cef2b50b3a2589", + "acceptanceAndFinishingSource": "eft", + "arenaLocations": [], + "canShowNotificationsInGame": true, + "changeQuestMessageText": "painter_9 changeQuestMessageText", + "conditions": { + "AvailableForFinish": [ + { + "conditionType": "FindItem", + "countInRaid": false, + "dogtagLevel": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "6848f9c9d567f37e6b729842", + "index": 0, + "isEncoded": false, + "maxDurability": 100, + "minDurability": 0, + "onlyFoundInRaid": true, + "parentId": "", + "target": [ + "672e2e75d78fe9e90c8cb393" + ], + "value": 1, + "visibilityConditions": [] + }, + { + "conditionType": "HandoverItem", + "dogtagLevel": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "6848f9de85ccce5e3a78c9e9", + "index": 1, + "isEncoded": false, + "maxDurability": 100, + "minDurability": 0, + "onlyFoundInRaid": true, + "parentId": "", + "target": [ + "672e2e75d78fe9e90c8cb393" + ], + "value": 1, + "visibilityConditions": [ + { + "conditionType": "CompleteCondition", + "id": "6848f9d601437caa3ccc3219", + "target": "6848f9c9d567f37e6b729842" + } + ] + }, + { + "completeInSeconds": 0, + "conditionType": "CounterCreator", + "counter": { + "conditions": [ + { + "bodyPart": [], + "compareMethod": ">=", + "conditionType": "Kills", + "daytime": { + "from": 0, + "to": 0 + }, + "distance": { + "compareMethod": ">=", + "value": 0 + }, + "dynamicLocale": false, + "enemyEquipmentExclusive": [], + "enemyEquipmentInclusive": [], + "enemyHealthEffects": [], + "id": "6848f9abb211398c8b963de3", + "resetOnSessionEnd": false, + "savageRole": [], + "target": "Savage", + "value": 1, + "weapon": [], + "weaponCaliber": [], + "weaponModsExclusive": [], + "weaponModsInclusive": [] + } + ], + "id": "6848f99fb33e3598fa83290e" + }, + "doNotResetIfCounterCompleted": false, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "6848f99d34b6c6122c735e05", + "index": 2, + "isNecessary": false, + "isResetOnConditionFailed": false, + "oneSessionOnly": false, + "parentId": "", + "type": "Elimination", + "value": 20, + "visibilityConditions": [] + } + ], + "AvailableForStart": [ + { + "availableAfter": 0, + "conditionType": "Quest", + "dispersion": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "6748f226384e5edc1e86a07a", + "index": 0, + "parentId": "", + "status": [4], + "target": "668aad3c3ff8f5b258e3a65b", + "visibilityConditions": [] + } + ], + "Fail": [] + }, + "declinePlayerMessage": "painter_9 declinePlayerMessage", + "description": "painter_9 description", + "failMessageText": "painter_9 failMessageText", + "gameModes": [], + "image": "/files/quest/icon/painter_9_thumbnail.png", + "instantComplete": false, + "isKey": false, + "location": "any", + "name": "painter_9 name", + "note": "painter_9 note", + "progressSource": "eft", + "rankingModes": [], + "restartable": false, + "rewards": { + "Fail": [], + "Started": [], + "Success": [ + { + "id": "6848fa5d68d1d8955a6c7f96", + "index": 0, + "type": "Experience", + "unknown": false, + "value": 6500 + }, + { + "availableInGameEditions": [], + "findInRaid": true, + "id": "6848fa65045c1bfb2e940527", + "index": 1, + "items": [ + { + "_id": "6848fa67d339363e7399c514", + "_tpl": "5696686a4bdc2da3298b456a", + "upd": { + "StackObjectsCount": 2800 + } + } + ], + "target": "6848fa67d339363e7399c514", + "type": "Item", + "unknown": false, + "value": 2800 + }, + { + "findInRaid": true, + "id": "68490d231de70ae787730b78", + "index": 2, + "items": [ + { + "_id": "68490d2509c2895bf61f44e1", + "_tpl": "5c052f6886f7746b1e3db148", + "upd": { + "StackObjectsCount": 1 + } + } + ], + "target": "68490d2509c2895bf61f44e1", + "type": "Item", + "unknown": false, + "value": 1 + }, + { + "id": "68617d7078e4542563e35f26", + "index": 3, + "target": "Attention", + "type": "Skill", + "unknown": false, + "value": 400 + }, + { + "id": "68617d6e244df9758e1a852e", + "index": 4, + "target": "Search", + "type": "Skill", + "unknown": false, + "value": 600 + }, + { + "id": "6848fa6076bcbe29939de36f", + "index": 5, + "target": "668aaff35fd574b6dcc4a686", + "type": "TraderStanding", + "unknown": false, + "value": 0.03 + } + ] + }, + "secretQuest": false, + "side": "Pmc", + "startedMessageText": "painter_9 description", + "status": 0, + "successMessageText": "painter_9 successMessageText", + "traderId": "668aaff35fd574b6dcc4a686", + "type": "Elimination" + }, + "684dcdde28c416fb7410b974": { + "QuestName": "The Final Touch", + "_id": "684dcdde28c416fb7410b974", + "acceptanceAndFinishingSource": "eft", + "arenaLocations": [], + "canShowNotificationsInGame": true, + "changeQuestMessageText": "painter_10 changeQuestMessageText", + "conditions": { + "AvailableForFinish": [ + { + "conditionType": "HandoverItem", + "dogtagLevel": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "684dce0db74a157e696d440c", + "index": 0, + "isEncoded": false, + "maxDurability": 100, + "minDurability": 0, + "onlyFoundInRaid": true, + "parentId": "", + "target": ["59fafb5d86f774067a6f2084"], + "value": 4, + "visibilityConditions": [] + }, + { + "conditionType": "HandoverItem", + "dogtagLevel": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "684de44841a695c11db3996c", + "index": 1, + "isEncoded": false, + "maxDurability": 100, + "minDurability": 0, + "onlyFoundInRaid": true, + "parentId": "", + "target": ["61bf7b6302b3924be92fa8c3"], + "value": 10, + "visibilityConditions": [] + }, + { + "conditionType": "HandoverItem", + "dogtagLevel": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "684de575d34628e3dfc940ff", + "index": 2, + "isEncoded": false, + "maxDurability": 100, + "minDurability": 0, + "onlyFoundInRaid": true, + "parentId": "", + "target": ["590a3b0486f7743954552bdb"], + "value": 2, + "visibilityConditions": [] + }, + { + "conditionType": "HandoverItem", + "dogtagLevel": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "684de443e988e5c59b5ec688", + "index": 3, + "isEncoded": false, + "maxDurability": 100, + "minDurability": 0, + "onlyFoundInRaid": true, + "parentId": "", + "target": ["5d1b2fa286f77425227d1674"], + "value": 1, + "visibilityConditions": [] + }, + { + "conditionType": "HandoverItem", + "dogtagLevel": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "684de44575288597828a1728", + "index": 4, + "isEncoded": false, + "maxDurability": 100, + "minDurability": 0, + "onlyFoundInRaid": true, + "parentId": "", + "target": ["6389c85357baa773a825b356"], + "value": 1, + "visibilityConditions": [] + } + ], + "AvailableForStart": [ + { + "availableAfter": 0, + "conditionType": "Quest", + "dispersion": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "684dceb1a57b9bab0b8d266d", + "index": 0, + "parentId": "", + "status": [4], + "target": "6848f88e54cef2b50b3a2589", + "visibilityConditions": [] + } + ], + "Fail": [] + }, + "declinePlayerMessage": "painter_10 declinePlayerMessage", + "description": "painter_10 description", + "failMessageText": "painter_10 failMessageText", + "gameModes": [], + "image": "/files/quest/icon/painter_10_thumbnail.png", + "instantComplete": false, + "isKey": false, + "location": "any", + "name": "painter_10 name", + "note": "painter_10 note", + "progressSource": "eft", + "rankingModes": [], + "restartable": false, + "rewards": { + "Fail": [], + "Started": [], + "Success": [ + { + "id": "684dce3088036780dd7c7b28", + "index": 0, + "type": "Experience", + "unknown": false, + "value": 20000 + }, + { + "findInRaid": true, + "id": "684dcf692a8dc96f91a487d2", + "index": 1, + "items": [ + { + "_id": "684dcf60f383208942ac6142", + "_tpl": "684db00229850b2f1f7832c1", + "upd": { + "StackObjectsCount": 1 + } + } + ], + "target": "684dcf60f383208942ac6142", + "type": "Item", + "unknown": true, + "value": 1 + }, + { + "id": "684dce3863f0eadbf9660a58", + "index": 2, + "target": "668aaff35fd574b6dcc4a686", + "type": "TraderStanding", + "unknown": false, + "value": 0.04 + } + ] + }, + "secretQuest": false, + "side": "Pmc", + "startedMessageText": "painter_10 startedMessageText", + "status": 0, + "successMessageText": "painter_10 successMessageText", + "traderId": "668aaff35fd574b6dcc4a686", + "type": "PickUp" + }, + "684f091cc78564e2180a2eb6": { + "QuestName": "Resistance Is Futile", + "_id": "684f091cc78564e2180a2eb6", + "acceptanceAndFinishingSource": "eft", + "arenaLocations": [], + "canShowNotificationsInGame": true, + "changeQuestMessageText": "painter_11 changeQuestMessageText", + "conditions": { + "AvailableForFinish": [ + { + "baseAccuracy": { + "compareMethod": ">=", + "value": 0 + }, + "conditionType": "WeaponAssembly", + "containsItems": [ + "59d6272486f77466146386ff", + "5cf656f2d7f00c06585fb6eb", + "6087e663132d4d12c81fd96b", + "6761779c48fa5c377e06fc3f", + "57486e672459770abd687134" + ], + "durability": { + "compareMethod": ">=", + "value": 80 + }, + "dynamicLocale": false, + "effectiveDistance": { + "compareMethod": ">=", + "value": 200 + }, + "emptyTacticalSlot": { + "compareMethod": ">=", + "value": 0 + }, + "ergonomics": { + "compareMethod": ">=", + "value": 65 + }, + "globalQuestCounterId": "", + "hasItemFromCategory": [], + "height": { + "compareMethod": ">=", + "value": 0 + }, + "id": "684f142d6734c9fb25ceeecb", + "index": 0, + "magazineCapacity": { + "compareMethod": ">=", + "value": 0 + }, + "muzzleVelocity": { + "compareMethod": ">=", + "value": 0 + }, + "parentId": "", + "recoil": { + "compareMethod": ">=", + "value": 0 + }, + "target": [ + "5ac66d2e5acfc43b321d4b53" + ], + "value": 1, + "visibilityConditions": [], + "weight": { + "compareMethod": ">=", + "value": 0 + }, + "width": { + "compareMethod": ">=", + "value": 0 + } + } + ], + "AvailableForStart": [ + { + "compareMethod": ">=", + "conditionType": "Level", + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "684f0a8a5645810369b816be", + "index": 0, + "isEncoded": false, + "parentId": "", + "value": 20, + "visibilityConditions": [] + } + ], + "Fail": [] + }, + "declinePlayerMessage": "painter_11 declinePlayerMessage", + "description": "painter_11 description", + "failMessageText": "painter_11 failMessageText", + "gameModes": [], + "image": "/files/quest/icon/painter_11_thumbnail.png", + "instantComplete": false, + "isKey": false, + "location": "any", + "name": "painter_11 name", + "note": "painter_11 note", + "progressSource": "eft", + "rankingModes": [], + "restartable": false, + "rewards": { + "Fail": [], + "Started": [], + "Success": [ + { + "id": "684f0fb47cd29e2d9c60bde0", + "index": 0, + "type": "Experience", + "unknown": false, + "value": 10000 + }, + { + "findInRaid": true, + "id": "684f0fbd8e2ba5e30d21fb47", + "index": 1, + "items": [ + { + "_id": "684f0fbe29addf223dce8159", + "_tpl": "569668774bdc2da2298b4568", + "upd": { + "StackObjectsCount": 2000 + } + } + ], + "target": "684f0fbe29addf223dce8159", + "type": "Item", + "unknown": false, + "value": 2000 + }, + { + "findInRaid": true, + "id": "684f108bccc2cc7fc44acb8c", + "index": 2, + "items": [ + { + "_id": "684f1093f3fd04289157596c", + "_tpl": "664a5480bfcc521bad3192ca", + "upd": { + "StackObjectsCount": 1 + } + } + ], + "target": "684f1093f3fd04289157596c", + "type": "Item", + "unknown": true, + "value": 1 + }, + { + "findInRaid": true, + "id": "684f1212314e81c1732445fd", + "index": 3, + "items": [ + { + "_id": "684f1214153cba1ee2ac5c9f", + "_tpl": "6759bb94b8913ff13e049669", + "upd": { + "StackObjectsCount": 1 + } + } + ], + "target": "684f1214153cba1ee2ac5c9f", + "type": "Item", + "unknown": true, + "value": 1 + }, + { + "findInRaid": true, + "id": "684f1271759e8e2c7453028d", + "index": 4, + "items": [ + { + "_id": "684f126d3659ffb47b949562", + "_tpl": "6759e07e4ff23436160d7fed", + "upd": { + "StackObjectsCount": 1 + } + } + ], + "target": "684f126d3659ffb47b949562", + "type": "Item", + "unknown": true, + "value": 1 + }, + { + "id": "684f0fb5cedfe173a2672c07", + "index": 5, + "target": "668aaff35fd574b6dcc4a686", + "type": "TraderStanding", + "unknown": false, + "value": 0.02 + } + ] + }, + "secretQuest": false, + "side": "Pmc", + "startedMessageText": "painter_11 startedMessageText", + "status": 0, + "successMessageText": "painter_11 successMessageText", + "traderId": "668aaff35fd574b6dcc4a686", + "type": "WeaponAssembly" + }, + "685862c625c24fd649b370c6": { + "QuestName": "Moscovium", + "_id": "685862c625c24fd649b370c6", + "acceptanceAndFinishingSource": "eft", + "arenaLocations": [], + "canShowNotificationsInGame": true, + "changeQuestMessageText": "painter_12 changeQuestMessageText", + "conditions": { + "AvailableForFinish": [ + { + "conditionType": "PlaceBeacon", + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "68586394ca1d107631558586", + "index": 0, + "parentId": "", + "plantTime": 20, + "target": [ + "5ac78a9b86f7741cca0bbd8d" + ], + "value": 1, + "visibilityConditions": [], + "zoneId": "gazel" + }, + { + "completeInSeconds": 0, + "conditionType": "CounterCreator", + "counter": { + "conditions": [ + { + "conditionType": "ExitStatus", + "dynamicLocale": false, + "id": "68586a67f20757f5b8193c68", + "status": [ + "Survived", + "Runner" + ] + }, + { + "conditionType": "Location", + "dynamicLocale": false, + "id": "68586a6440e59aceb7b38d61", + "target": [ + "bigmap" + ] + } + ], + "id": "68586a5b2b5553a919b2938b" + }, + "doNotResetIfCounterCompleted": false, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "68586a4d4ca5206d3e5b4c6b", + "index": 1, + "isNecessary": false, + "isResetOnConditionFailed": false, + "oneSessionOnly": false, + "parentId": "", + "type": "Completion", + "value": 1, + "visibilityConditions": [ + { + "conditionType": "CompleteCondition", + "id": "68586a3b261431201ee4d775", + "target": "68586394ca1d107631558586" + } + ] + } + ], + "AvailableForStart": [ + { + "availableAfter": 0, + "conditionType": "Quest", + "dispersion": 0, + "dynamicLocale": false, + "globalQuestCounterId": "", + "id": "68586390dc03d3e7cd5a615c", + "index": 0, + "parentId": "", + "status": [4], + "target": "684f091cc78564e2180a2eb6", + "visibilityConditions": [] + } + ], + "Fail": [] + }, + "declinePlayerMessage": "painter_12 declinePlayerMessage", + "description": "painter_12 description", + "failMessageText": "painter_12 failMessageText", + "gameModes": [], + "image": "/files/quest/icon/painter_12_thumbnail.png", + "instantComplete": false, + "isKey": false, + "location": "any", + "name": "painter_12 name", + "note": "painter_12 note", + "progressSource": "eft", + "rankingModes": [], + "restartable": false, + "rewards": { + "Fail": [], + "Started": [], + "Success": [ + { + "id": "6858639946a19bb464a77089", + "index": 0, + "type": "Experience", + "unknown": false, + "value": 6200 + }, + { + "findInRaid": true, + "id": "6858691de15a3e7d91f7afb2", + "index": 1, + "items": [ + { + "_id": "6858691faf96d6b21be96510", + "_tpl": "685867727d49afb420c2b29e", + "upd": { + "StackObjectsCount": 1 + } + } + ], + "target": "6858691faf96d6b21be96510", + "type": "Item", + "unknown": true, + "value": 1 + }, + { + "findInRaid": true, + "id": "685863a375ba1c7d9bc455ef", + "index": 2, + "items": [ + { + "_id": "685863a46991e53a6c97a7c9", + "_tpl": "5449016a4bdc2d6f028b456f", + "upd": { + "StackObjectsCount": 31000 + } + } + ], + "target": "685863a46991e53a6c97a7c9", + "type": "Item", + "unknown": false, + "value": 30500 + }, + { + "id": "685863a9a51f4be475e99868", + "index": 3, + "target": "668aaff35fd574b6dcc4a686", + "type": "TraderStanding", + "unknown": false, + "value": 0.03 + } + ] + }, + "secretQuest": false, + "side": "Pmc", + "startedMessageText": "painter_12 startedMessageText", + "status": 0, + "successMessageText": "painter_12 successMessageText", + "traderId": "668aaff35fd574b6dcc4a686", + "type": "Completion" + } +} diff --git a/user/mods/aMoxoPixel-Painter/package.json b/user/mods/aMoxoPixel-Painter/package.json new file mode 100644 index 0000000..fd7d35f --- /dev/null +++ b/user/mods/aMoxoPixel-Painter/package.json @@ -0,0 +1,27 @@ +{ + "name": "Painter", + "version": "1.1.7", + "main": "src/mod.js", + "license": "MIT", + "author": "MoxoPixel", + "sptVersion": "3.11.X", + "isBundleMod": true, + "scripts": { + "setup": "npm i", + "build": "node ./build.mjs", + "buildinfo": "node ./build.mjs --verbose" + }, + "devDependencies": { + "@types/node": "20.11", + "@typescript-eslint/eslint-plugin": "7.2", + "@typescript-eslint/parser": "7.2", + "archiver": "^6.0", + "eslint": "8.57", + "fs-extra": "11.2", + "ignore": "^5.2", + "tsyringe": "4.8.0", + "typescript": "5.8", + "winston": "3.12" + }, + "contributors": [] +} \ No newline at end of file diff --git a/user/mods/aMoxoPixel-Painter/res/painter.jpg b/user/mods/aMoxoPixel-Painter/res/painter.jpg new file mode 100644 index 0000000..24ca682 Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/res/painter.jpg differ diff --git a/user/mods/aMoxoPixel-Painter/res/quests/painter_10_thumbnail.png b/user/mods/aMoxoPixel-Painter/res/quests/painter_10_thumbnail.png new file mode 100644 index 0000000..53c9e35 Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/res/quests/painter_10_thumbnail.png differ diff --git a/user/mods/aMoxoPixel-Painter/res/quests/painter_11_thumbnail.png b/user/mods/aMoxoPixel-Painter/res/quests/painter_11_thumbnail.png new file mode 100644 index 0000000..c671420 Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/res/quests/painter_11_thumbnail.png differ diff --git a/user/mods/aMoxoPixel-Painter/res/quests/painter_12_thumbnail.png b/user/mods/aMoxoPixel-Painter/res/quests/painter_12_thumbnail.png new file mode 100644 index 0000000..161df36 Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/res/quests/painter_12_thumbnail.png differ diff --git a/user/mods/aMoxoPixel-Painter/res/quests/painter_1_thumbnail.png b/user/mods/aMoxoPixel-Painter/res/quests/painter_1_thumbnail.png new file mode 100644 index 0000000..4b4fa73 Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/res/quests/painter_1_thumbnail.png differ diff --git a/user/mods/aMoxoPixel-Painter/res/quests/painter_2_thumbnail.png b/user/mods/aMoxoPixel-Painter/res/quests/painter_2_thumbnail.png new file mode 100644 index 0000000..9e23d86 Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/res/quests/painter_2_thumbnail.png differ diff --git a/user/mods/aMoxoPixel-Painter/res/quests/painter_3_thumbnail.png b/user/mods/aMoxoPixel-Painter/res/quests/painter_3_thumbnail.png new file mode 100644 index 0000000..90bc36b Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/res/quests/painter_3_thumbnail.png differ diff --git a/user/mods/aMoxoPixel-Painter/res/quests/painter_4_thumbnail.png b/user/mods/aMoxoPixel-Painter/res/quests/painter_4_thumbnail.png new file mode 100644 index 0000000..dbc1316 Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/res/quests/painter_4_thumbnail.png differ diff --git a/user/mods/aMoxoPixel-Painter/res/quests/painter_5_thumbnail.png b/user/mods/aMoxoPixel-Painter/res/quests/painter_5_thumbnail.png new file mode 100644 index 0000000..e253bfd Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/res/quests/painter_5_thumbnail.png differ diff --git a/user/mods/aMoxoPixel-Painter/res/quests/painter_6_thumbnail.png b/user/mods/aMoxoPixel-Painter/res/quests/painter_6_thumbnail.png new file mode 100644 index 0000000..45597e6 Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/res/quests/painter_6_thumbnail.png differ diff --git a/user/mods/aMoxoPixel-Painter/res/quests/painter_7_thumbnail.png b/user/mods/aMoxoPixel-Painter/res/quests/painter_7_thumbnail.png new file mode 100644 index 0000000..c087f93 Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/res/quests/painter_7_thumbnail.png differ diff --git a/user/mods/aMoxoPixel-Painter/res/quests/painter_8_thumbnail.png b/user/mods/aMoxoPixel-Painter/res/quests/painter_8_thumbnail.png new file mode 100644 index 0000000..4b11bb0 Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/res/quests/painter_8_thumbnail.png differ diff --git a/user/mods/aMoxoPixel-Painter/res/quests/painter_9_thumbnail.png b/user/mods/aMoxoPixel-Painter/res/quests/painter_9_thumbnail.png new file mode 100644 index 0000000..5846ecb Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/res/quests/painter_9_thumbnail.png differ diff --git a/user/mods/aMoxoPixel-Painter/res/quests/placeholder.png b/user/mods/aMoxoPixel-Painter/res/quests/placeholder.png new file mode 100644 index 0000000..2920207 Binary files /dev/null and b/user/mods/aMoxoPixel-Painter/res/quests/placeholder.png differ diff --git a/user/mods/aMoxoPixel-Painter/src/CustomItemsManager.ts b/user/mods/aMoxoPixel-Painter/src/CustomItemsManager.ts new file mode 100644 index 0000000..5d86800 --- /dev/null +++ b/user/mods/aMoxoPixel-Painter/src/CustomItemsManager.ts @@ -0,0 +1,488 @@ +import { IDatabaseTables } from "@spt/models/spt/server/IDatabaseTables"; +import { CustomItemService } from "@spt/services/mod/CustomItemService"; +import { NewItemFromCloneDetails } from "@spt/models/spt/mod/NewItemDetails"; +import { IItemConfig } from "@spt/models/spt/config/IItemConfig"; +import { ConfigServer } from "@spt/servers/ConfigServer"; +import { ConfigTypes } from "@spt/models/enums/ConfigTypes"; +import { IInventoryConfig } from "@spt/models/spt/config/IInventoryConfig"; +import { ILogger } from "@spt/models/spt/utils/ILogger"; + +/** + * Manages creation of custom items for the Painter mod + */ +export class CustomItemsManager +{ + constructor(private logger: ILogger) + {} + + /** + * Create all custom items for the Painter mod + */ + public createCustomItems( + customItemService: CustomItemService, + configServer: ConfigServer, + tables: IDatabaseTables, + inventoryConfig: IInventoryConfig, + enableLootBoxes: boolean + ): void + { + // Create figurines + this.createFigurines(customItemService, configServer, tables); + + // Create loot boxes if enabled + if (enableLootBoxes) + { + this.createLootBoxes(customItemService, tables, inventoryConfig); + } + } + + /** + * Create Batman and Golden Turd figurines + */ + private createFigurines(customItemService: CustomItemService, configServer: ConfigServer, tables: IDatabaseTables): void + { + const batmanFigurine: NewItemFromCloneDetails = { + itemTplToClone: "655c67782a1356436041c9c5", + overrideProperties: { + Name: "Batman figurine", + ShortName: "Batman", + Description: "Rare larger figurine of Batman, a superhero of the American comic book publisher DC Comics, Batman.", + Prefab: { + "path": "figurine_batman.bundle", + "rcid": "" + }, + CanRequireOnRagfair: false, + CanSellOnRagfair: true + }, + parentId: "57864a3d24597754843f8721", + newId: "672e2e75d78fe9e90c8cb393", + fleaPriceRoubles: 154000, + handbookPriceRoubles: 154000, + handbookParentId: "5b47574386f77428ca22b2f1", + locales: { + en: { + name: "Batman figurine", + shortName: "Batman", + description: "Rare larger figurine of Batman, a superhero of the American comic book publisher DC Comics, Batman." + } + } + }; + + const dodoFigurine: NewItemFromCloneDetails = { + itemTplToClone: "59e3647686f774176a362507", + overrideProperties: { + Name: "Golden Turd figurine", + ShortName: "Turd", + Description: "Awarded to the master of annoying tasks, it is said that it was made from the golden poop of a dodo bird.", + Prefab: { + "path": "dodo338383899.bundle", + "rcid": "" + }, + CanRequireOnRagfair: false, + CanSellOnRagfair: false, + Weight: 69, + ExaminedByDefault: false + }, + parentId: "57864a3d24597754843f8721", + newId: "684db00229850b2f1f7832c1", + fleaPriceRoubles: 69, + handbookPriceRoubles: 69, + handbookParentId: "5b47574386f77428ca22b2f1", + locales: { + en: { + name: "Golden Turd figurine", + shortName: "Turd", + description: "Awarded to the master of annoying tasks, it is said that it was made from the golden poop of a dodo bird." + } + } + }; + + const mosFigurine: NewItemFromCloneDetails = { + itemTplToClone: "59e3647686f774176a362507", + overrideProperties: { + Name: "Moscovium (Material 115)", + ShortName: "MC-115", + Description: "Sealed compound made from Moscovium, a synthetic element with atomic number 115, known for its unique properties. Does it bend space and time? Who knows.", + Prefab: { + "path": "mos115.bundle", + "rcid": "" + }, + CanRequireOnRagfair: false, + CanSellOnRagfair: false, + Weight: 69, + ExaminedByDefault: false + }, + parentId: "57864a3d24597754843f8721", + newId: "685867727d49afb420c2b29e", + fleaPriceRoubles: 69, + handbookPriceRoubles: 69, + handbookParentId: "5b47574386f77428ca22b2f1", + locales: { + en: { + name: "Moscovium (Material 115)", + shortName: "MC-115", + description: "Sealed compound made from Moscovium, a synthetic element with atomic number 115, known for its unique properties. Does it bend space and time? Who knows." + } + } + }; + + customItemService.createItemFromClone(batmanFigurine); + customItemService.createItemFromClone(dodoFigurine); + customItemService.createItemFromClone(mosFigurine); + this.logger.info("Painter custom items added"); + + // Add figurines to Hall of Fame + this.addToHallOfFame(tables, "672e2e75d78fe9e90c8cb393", "655c67782a1356436041c9c5", "Batman figurine"); + this.addToHallOfFame(tables, "684db00229850b2f1f7832c1", "59e3647686f774176a362507", "Golden Turd figurine"); + this.addToHallOfFame(tables, "685867727d49afb420c2b29e", "59e3647686f774176a362507", "Moscovium (Material 115)"); + + // Prevent dodoFigurine from being lootable + this.preventDodoFromBeingLootable(configServer); + this.preventMosFromBeingLootable(configServer); + } + + /** + * Create mystery loot boxes + */ + private createLootBoxes(customItemService: CustomItemService, tables: IDatabaseTables, inventoryConfig: IInventoryConfig): void + { + const mysteryBoxOne: NewItemFromCloneDetails = { + itemTplToClone: "6489b2b131a2135f0d7d0fcb", + overrideProperties: { + Name: "Painter's Special Delivery", + ShortName: "Painter Lootbox", + Description: "A lootbox filled with various items, including some of the most sought after barter items.", + Weight: 25, + Prefab: { + "path": "mysterybox.bundle", + "rcid": "" + }, + Width: 4, + Height: 4, + BackgroundColor: "blue", + CanRequireOnRagfair: false, + CanSellOnRagfair: false + }, + parentId: "62f109593b54472778797866", + newId: "668ff5bde41a0cce3b142464", + fleaPriceRoubles: 500000, + handbookPriceRoubles: 500000, + handbookParentId: "5b5f6fa186f77409407a7eb7", + locales: { + en: { + name: "Painter's Special Delivery", + shortName: "Painter Lootbox", + description: "A lootbox filled with 20 items, including some of the most sought after barter items. Get a LEDX or go broke. The choise is yours." + } + } + }; + + customItemService.createItemFromClone(mysteryBoxOne); + + // Change item _name to remove it from the *actual* sealed weapon crate logic, this removes it from airdrops and allows easier access to change the contents + const customIteminDB = tables.templates.items["668ff5bde41a0cce3b142464"]; + customIteminDB._name = "668ff5bde41a0cce3b142464"; + + // Configure loot pool for mystery box + this.configureMysteryBoxLoot(inventoryConfig); + + const mysteryBoxTwo: NewItemFromCloneDetails = { + itemTplToClone: "6489981f7063b903ff4b8565", + overrideProperties: { + Name: "Painter's War Box", + ShortName: "Painter Warbox", + Description: "A lootbox filled with various items, some of the most sought after military items.", + Weight: 30, + Prefab: { + "path": "mysterybox_2.bundle", + "rcid": "" + }, + Width: 4, + Height: 3, + BackgroundColor: "blue", + CanRequireOnRagfair: false, + CanSellOnRagfair: false + }, + parentId: "62f109593b54472778797866", + newId: "6699546547ad52e0fccf6da9", + fleaPriceRoubles: 500000, + handbookPriceRoubles: 500000, + handbookParentId: "5b5f6fa186f77409407a7eb7", + locales: { + en: { + name: "Painter's War Box", + shortName: "Painter Warbox", + description: "A lootbox filled with various items, some of the most sought after military items." + } + } + }; + + customItemService.createItemFromClone(mysteryBoxTwo); + this.logger.info("Painter loot boxes added"); + } + + /** + * Configure the mystery box loot pool with various high-value items + */ + private configureMysteryBoxLoot(inventoryConfig: IInventoryConfig): void + { + inventoryConfig.randomLootContainers["668ff5bde41a0cce3b142464"] = { + rewardCount: 20, + foundInRaid: true, + rewardTplPool: { + "5bc9be8fd4351e00334cae6e": 5, + "5d03794386f77420415576f5": 1, + "5672cb124bdc2d1a0f8b4568": 10, + "6389c85357baa773a825b356": 1, + "59faf98186f774067b6be103": 5, + "5d1b32c186f774252167a530": 5, + "590de71386f774347051a052": 5, + "590de7e986f7741b096e5f32": 5, + "573475fb24597737fb1379e1": 10, + "6389c6c7dbfd5e4b95197e68": 5, + "5e2af4d286f7746d4159f07a": 5, + "62a0a098de7ac8199358053b": 5, + "62a091170b9d3c46de5b6cf2": 5, + "5bc9c049d4351e44f824d360": 5, + "62a08f4c4f842e1bd12d9d62": 5, + "57347c5b245977448d35f6e1": 10, + "59e361e886f774176c10a2a5": 5, + "62a0a043cf4a99369e2624a5": 5, + "59e3606886f77417674759a5": 5, + "56742c324bdc2d150f8b456d": 10, + "5c1265fc86f7743f896a21c2": 5, + "5d1b309586f77425227d1676": 10, + "59e3639286f7741777737013": 1, + "619cbfeb6b8a1b37a54eebfa": 5, + "5c06779c86f77426e00dd782": 10, + "5e54f6af86f7742199090bf3": 5, + "5af0484c86f7740f02001f7f": 10, + "60391a8b3364dc22b04d0ce5": 5, + "62a09ee4cf4a99369e262453": 10, + "5c06782b86f77426df5407d2": 10, + "5733279d245977289b77ec24": 5, + "59e3658a86f7741776641ac4": 5, + "573474f924597738002c6174": 5, + "5c1267ee86f77416ec610f72": 5, + "57347b8b24597737dd42e192": 10, + "59e358a886f7741776641ac3": 5, + "590c2c9c86f774245b1f03f2": 10, + "5e2af41e86f774755a234b67": 5, + "59e35cbb86f7741778269d83": 5, + "5734779624597737e04bf329": 10, + "56742c284bdc2d98058b456d": 10, + "5e2aee0a86f774755a234b62": 5, + "590a386e86f77429692b27ab": 5, + "5bc9b9ecd4351e3bac122519": 5, + "5d1b3f2d86f774253763b735": 5, + "590a373286f774287540368b": 5, + "57347c1124597737fb1379e3": 10, + "5734781f24597737e04bf32a": 5, + "5672cb304bdc2dc2088b456a": 5, + "59e35de086f7741778269d84": 5, + "5d1b2fa286f77425227d1674": 5, + "6389c70ca33d8c4cdf4932c6": 5, + "590a3cd386f77436f20848cb": 10, + "5d1b371186f774253763a656": 5, + "6389c7f115805221fb410466": 1, + "63a0b208f444d32d6f03ea1e": 1, + "5bc9b355d4351e6d1509862a": 5, + "5d63d33b86f7746ea9275524": 10, + "5d4042a986f7743185265463": 10, + "5e2af47786f7746d404f3aaa": 5, + "5d1b2f3f86f774252167a52c": 1, + "5b43575a86f77424f443fe62": 5, + "590a3efd86f77437d351a25b": 5, + "590c595c86f7747884343ad7": 5, + "5672cb724bdc2dc2088b456b": 5, + "5bc9b720d4351e450201234b": 5, + "62a09cfe4f842e1bd12da3e4": 5, + "5734758f24597738025ee253": 5, + "5bc9bc53d4351e00367fbcee": 5, + "5d235a5986f77443f6329bc6": 5, + "57347ca924597744596b4e71": 1, + "5e2aedd986f7746d404f3aa4": 5, + "5d6fc78386f77449d825f9dc": 5, + "5d6fc87386f77449db3db94e": 5, + "590c5a7286f7747884343aea": 5, + "5d1b317c86f7742523398392": 5, + "573478bc24597738002c6175": 5, + "5e2af2bc86f7746d3f3c33fc": 5, + "5734795124597738002c6176": 10, + "5d0377ce86f774186372f689": 1, + "5e2af29386f7746d4159f077": 5, + "5c0530ee86f774697952d952": 1, + "5d1b392c86f77425243e98fe": 10, + "60b0f7057897d47c5b04ab94": 5, + "60b0f561c4449e4cb624c1d7": 5, + "590a391c86f774385a33c404": 5, + "573476d324597737da2adc13": 10, + "5b4335ba86f7744d2837a264": 5, + "619cc01e0a7c3a1a2731940c": 5, + "5d40419286f774318526545f": 10, + "5d1b36a186f7742523398433": 1, + "61bf7b6302b3924be92fa8c3": 10, + "6389c7750ef44505c87f5996": 1, + "5d0375ff86f774186372f685": 1, + "5d0376a486f7747d8050965c": 1, + "5c052f6886f7746b1e3db148": 1, + "619cbf476b8a1b37a54eebf8": 5, + "5d03784a86f774203e7e0c4d": 1, + "5d0378d486f77420421a5ff4": 1, + "5d40425986f7743185265461": 10, + "5d1b2ffd86f77425243e8d17": 10, + "5d0379a886f77420407aa271": 1, + "5bc9c377d4351e3bac12251b": 5, + "5af0534a86f7743b6f354284": 5, + "5d4041f086f7743cac3f22a7": 5, + "59e3556c86f7741776641ac2": 10, + "5e2af02c86f7746d420957d4": 10, + "590c31c586f774245e3141b2": 10, + "59e35ef086f7741777737012": 10, + "59e35abd86f7741778269d82": 5, + "59e3596386f774176c10a2a2": 5, + "5c12688486f77426843c7d32": 5, + "573477e124597737dd42e191": 10, + "5d03775b86f774203e7e0c4b": 1, + "5d1b313086f77425227d1678": 10, + "59faff1d86f7746c51718c9c": 1, + "59e366c186f7741778269d85": 10, + "5d1b3a5d86f774252167ba22": 5, + "619cbfccbedcde2f5b3f7bdd": 5, + "590c2b4386f77425357b6123": 10, + "5af04b6486f774195a3ebb49": 10, + "5c052e6986f7746b207bc3c9": 1, + "5af0561e86f7745f5f3ad6ac": 5, + "59e36c6f86f774176c10a2a7": 5, + "57347c2e24597744902c94a1": 5, + "5d1b327086f7742525194449": 5, + "62a09cb7a04c0c5c6e0a84f8": 5, + "590a3b0486f7743954552bdb": 1, + "577e1c9d2459773cd707c525": 5, + "59fafb5d86f774067a6f2084": 1, + "5d1c774f86f7746d6620f8db": 10, + "57347baf24597738002c6178": 10, + "60391afc25aff57af81f7085": 1, + "5e54f62086f774219b0f1937": 5, + "590a358486f77429692b2790": 5, + "5e2aef7986f7746d3f3c33f5": 5, + "5e2af4a786f7746d3f3c3400": 5, + "59faf7ca86f7740dbe19f6c2": 5, + "5d1b31ce86f7742523398394": 10, + "5d40412b86f7743cb332ac3a": 5, + "590c2d8786f774245b1f03f3": 10, + "57347c77245977448d35f6e2": 10, + "62a0a0bb621468534a797ad5": 5, + "61bf83814088ec1a363d7097": 5, + "590c35a486f774273531c822": 10, + "5d1b39a386f774252339976f": 10, + "5bc9bdb8d4351e003562b8a1": 5, + "5e2af00086f7746d3f3c33f7": 10, + "5c13cd2486f774072c757944": 10, + "590a3c0a86f774385a33c450": 10, + "5734770f24597738025ee254": 10, + "5e2af37686f774755a234b65": 10, + "5c12620d86f7743f8b198b72": 1, + "5c13cef886f774072e618e82": 10, + "590c2e1186f77425357b6124": 5, + "57347c93245977448d35f6e3": 10, + "60391b0fb847c71012789415": 5, + "57347cd0245977445a2d6ff1": 10, + "5e2af22086f7746d3f3c33fa": 10, + "5c052fb986f7746b2101e909": 1, + "590a3d9c86f774385926e510": 10, + "5909e99886f7740c983b9984": 10, + "5f745ee30acaeb0d490d8c5b": 5, + "5c05308086f7746b2101e90b": 1, + "5c05300686f7746dce784e5d": 1, + "5d1b385e86f774252167b98a": 5, + "590c5bbd86f774785762df04": 10, + "590c5c9f86f77477c91c36e7": 10, + "5d1c819a86f774771b0acd6c": 5, + "573476f124597737e04bf328": 10, + "59e3647686f774176a362507": 5, + "5d1b304286f774253763a528": 5, + "590c311186f77424d1667482": 5, + "590c346786f77423e50ed342": 10, + "56742c2e4bdc2d95058b456d": 10 + } + }; + } + + /** + * Add custom figurines to Hall of Fame filters + */ + private addToHallOfFame(tables: IDatabaseTables, newItemId: string, originalItemId: string, itemName: string): void + { + const hallOfFame1 = tables.templates.items["63dbd45917fff4dee40fe16e"]; + const hallOfFame2 = tables.templates.items["65424185a57eea37ed6562e9"]; + const hallOfFame3 = tables.templates.items["6542435ea57eea37ed6562f0"]; + + const hallOfFames = [hallOfFame1, hallOfFame2, hallOfFame3]; + let totalAdditions = 0; + + hallOfFames.forEach((hall) => + { + if (hall && hall._props && hall._props.Slots) + { + let additionsThisHall = 0; + for (const slot of hall._props.Slots) + { + if (slot._props && slot._props.filters) + { + for (const filter of slot._props.filters) + { + // Only add the new item if the original cloned item is already in this filter + if (filter.Filter && filter.Filter.includes(originalItemId) && !filter.Filter.includes(newItemId)) + { + filter.Filter.push(newItemId); + additionsThisHall++; + totalAdditions++; + } + } + } + } + if (additionsThisHall > 0) + { + this.logger.debug(`Added ${itemName} to ${additionsThisHall} slot(s) in ${hall._name}`); + } + } + }); + + if (totalAdditions > 0) + { + this.logger.debug(`Successfully added ${itemName} (${newItemId}) to ${totalAdditions} total Hall of Fame slot(s)`); + } + else + { + this.logger.debug(`WARNING: No Hall of Fame slots found for ${itemName} - original item ${originalItemId} may not be in any Hall of Fame filters`); + } + } + + /** + * Prevent the Golden Turd figurine from being lootable + */ + private preventDodoFromBeingLootable(configServer: ConfigServer): void + { + const itemConfig: IItemConfig = configServer.getConfig(ConfigTypes.ITEM); + const dodoFigurineId = "684db00229850b2f1f7832c1"; + + // Add to lootable item blacklist to prevent it from spawning in any loot containers or loose loot + if (!itemConfig.lootableItemBlacklist.includes(dodoFigurineId)) + { + itemConfig.lootableItemBlacklist.push(dodoFigurineId); + } + } + + private preventMosFromBeingLootable(configServer: ConfigServer): void + { + const itemConfig: IItemConfig = configServer.getConfig(ConfigTypes.ITEM); + const mosFigurineId = "685867727d49afb420c2b29e"; + + // Add to lootable item blacklist to prevent it from spawning in any loot containers or loose loot + if (!itemConfig.lootableItemBlacklist.includes(mosFigurineId)) + { + itemConfig.lootableItemBlacklist.push(mosFigurineId); + } + } +} diff --git a/user/mods/aMoxoPixel-Painter/src/mod.ts b/user/mods/aMoxoPixel-Painter/src/mod.ts new file mode 100644 index 0000000..82d35ec --- /dev/null +++ b/user/mods/aMoxoPixel-Painter/src/mod.ts @@ -0,0 +1,274 @@ +import { DependencyContainer } from "tsyringe"; +import { IPreSptLoadMod } from "@spt/models/external/IPreSptLoadMod"; +import { IPostDBLoadMod } from "@spt/models/external/IPostDBLoadMod"; +import { ILogger } from "@spt/models/spt/utils/ILogger"; +import { PreSptModLoader } from "@spt/loaders/PreSptModLoader"; +import { DatabaseServer } from "@spt/servers/DatabaseServer"; +import { ImageRouter } from "@spt/routers/ImageRouter"; +import { ConfigServer } from "@spt/servers/ConfigServer"; +import { ConfigTypes } from "@spt/models/enums/ConfigTypes"; +import { ITraderAssort, ITraderBase } from "@spt/models/eft/common/tables/ITrader"; +import { ITraderConfig, IUpdateTime } from "@spt/models/spt/config/ITraderConfig"; +import { IQuestConfig } from "@spt/models/spt/config/IQuestConfig"; +import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig"; +import { JsonUtil } from "@spt/utils/JsonUtil"; +import { IDatabaseTables } from "@spt/models/spt/server/IDatabaseTables"; +import { Traders } from "@spt/models/enums/Traders"; + +import { IInventoryConfig } from "@spt/models/spt/config/IInventoryConfig"; +import { DatabaseService } from "@spt/services/DatabaseService"; +import { CustomItemService } from "@spt/services/mod/CustomItemService"; + +import { CustomItemsManager } from "./CustomItemsManager"; +import * as configJson from "../config.json"; +import * as baseJson from "../db/base.json"; +import * as assortJson from "../db/assort.json"; +import * as path from "path"; +import * as fs from "fs"; + +const modPath = path.normalize(path.join(__dirname, "..")); + +class PainterTrader implements IPreSptLoadMod, IPostDBLoadMod +{ + mod: string + logger: ILogger + private configServer: ConfigServer + private ragfairConfig: IRagfairConfig + + constructor() + { + this.mod = "aMoxoPixel-Painter" + } + + public preSptLoad(container: DependencyContainer): void + { + this.logger = container.resolve("WinstonLogger"); + + const PreSptModLoader: PreSptModLoader = container.resolve("PreSptModLoader"); + const imageRouter: ImageRouter = container.resolve("ImageRouter"); + const configServer = container.resolve("ConfigServer"); + const traderConfig: ITraderConfig = configServer.getConfig(ConfigTypes.TRADER); + const questConfig: IQuestConfig = configServer.getConfig(ConfigTypes.QUEST); + + if (!traderConfig.moddedTraders) + { + traderConfig.moddedTraders = { clothingService: [] }; + } + + if (configJson.enableRepeatableQuests) + { + const PainterRepeatQuests = { + traderId: "668aaff35fd574b6dcc4a686", + name: "painter", + questTypes: ["Completion", "Exploration", "Elimination"], + rewardBaseWhitelist: [ + "543be6564bdc2df4348b4568", + "5448e5284bdc2dcb718b4567", + "5485a8684bdc2da71d8b4567", + "57864a3d24597754843f8721", + "55818af64bdc2d5b648b4570", + "57864e4c24597754843f8723", + "57864a66245977548f04a81f", + "57864ee62459775490116fc1", + "590c745b86f7743cc433c5f2" + ], + rewardCanBeWeapon: true, + weaponRewardChancePercent: 20 + }; + questConfig.repeatableQuests[0].traderWhitelist.push(PainterRepeatQuests); // Daily quests + questConfig.repeatableQuests[1].traderWhitelist.push(PainterRepeatQuests); // Weekly quests + this.logger.info("Painter repeatable quests added to quest config"); + } + + this.registerProfileImage(PreSptModLoader, imageRouter); + this.setupTraderUpdateTime(traderConfig); + this.setupTraderServices(traderConfig); + + Traders["668aaff35fd574b6dcc4a686"] = "668aaff35fd574b6dcc4a686"; + } + + public postDBLoad(container: DependencyContainer): void + { + this.configServer = container.resolve("ConfigServer"); + this.ragfairConfig = this.configServer.getConfig(ConfigTypes.RAGFAIR) + + const configServer: ConfigServer = container.resolve("ConfigServer") + const imageRouter: ImageRouter = container.resolve("ImageRouter") + const jsonUtil: JsonUtil = container.resolve("JsonUtil") + const databaseServer: DatabaseServer = container.resolve("DatabaseServer") + + const databaseService = container.resolve("DatabaseService") + const customItem = container.resolve("CustomItemService") + const inventoryConfig: IInventoryConfig = configServer.getConfig(ConfigTypes.INVENTORY) + const tables: IDatabaseTables = databaseService.getTables() + + if (configJson.enableRepeatableQuests) + { + const repeatableQuests = databaseServer.getTables().templates.repeatableQuests; + const rqLocales = databaseServer.getTables().locales.global.en; + + if (repeatableQuests.templates.Elimination) + { + repeatableQuests.templates.Elimination.successMessageText = "A damn beast you are, hehe. Good work, here's your share."; + repeatableQuests.templates.Elimination.description = "I have a mission for you. I need you to eliminate some trash from Tarkov's streets. You up for it?"; + } + if (repeatableQuests.templates.Completion) + { + repeatableQuests.templates.Completion.successMessageText = "There you are! You got everything? Good stuff."; + repeatableQuests.templates.Completion.description = "I have a mission for you. I need you to gather some items for me. You up for it?"; + } + if (repeatableQuests.templates.Exploration) + { + repeatableQuests.templates.Exploration.successMessageText = "Marvelous, young man. Thank you for some fine work."; + repeatableQuests.templates.Exploration.description = "Ah, mercenary, do you want to do a good deed? My clients are asking to ensure a safe area to conduct a specific secret operation. I would like to appoint you for this, as you are the most competent of the local workers. You will have to survey the area and report back to me. Good luck."; + } + + // Update localization files + rqLocales["616041eb031af660100c9967 successMessageText 668aaff35fd574b6dcc4a686 0"] = "Marvelous, young man. Thank you for the work."; + rqLocales["616041eb031af660100c9967 description 668aaff35fd574b6dcc4a686 0"] = "Ah, mercenary, do you want to do a good deed? My clients are asking to ensure a safe area to conduct a specific secret operation. I would like to appoint you for this, as you are the most competent of the local workers. You will have to survey the area and report back to me. Good luck."; + rqLocales["61604635c725987e815b1a46 successMessageText 668aaff35fd574b6dcc4a686 0"] = "There you are! You got everything? Good stuff."; + rqLocales["61604635c725987e815b1a46 description 668aaff35fd574b6dcc4a686 0"] = "I have a mission for you. I need you to gather some items for me. You up for it?"; + rqLocales["616052ea3054fc0e2c24ce6e successMessageText 668aaff35fd574b6dcc4a686 0"] = "A damn beast you are, hehe. Good work, here's your share."; + rqLocales["616052ea3054fc0e2c24ce6e description 668aaff35fd574b6dcc4a686 0"] = "I have a mission for you. I need you to eliminate some trash from Tarkov's streets. You up for it?"; + + this.logger.info("Painter repeatable quest messages added to localization files"); + } + + this.addTraderToDb(baseJson, tables, jsonUtil) + this.addTraderToLocales(tables, baseJson.name, "Ivan Samoylov", baseJson.nickname, baseJson.location, "Ivan Samoylov is a master craftsman renowned for his exceptional skill in creating exquisite weapon cosmetics. With an innate talent for blending artistry and functionality, he transforms ordinary weapons into mesmerizing works of art.") + this.ragfairConfig.traders[baseJson._id] = true + + this.importQuests(tables) + this.importQuestLocales(tables) + this.routeQuestImages(imageRouter) + + // Create all custom items using the CustomItemsManager + const customItemsManager = new CustomItemsManager(this.logger); + customItemsManager.createCustomItems(customItem, configServer, tables, inventoryConfig, configJson.enableLootBoxes); + } + + private registerProfileImage(preSptModLoader: PreSptModLoader, imageRouter: ImageRouter): void + { + const imageFilepath = `./${preSptModLoader.getModPath(this.mod)}res` + + imageRouter.addRoute(baseJson.avatar.replace(".jpg", ""), `${imageFilepath}/painter.jpg`) + } + + private setupTraderUpdateTime(traderConfig: ITraderConfig): void + { + const traderRefreshRecord: IUpdateTime = { traderId: baseJson._id, seconds: { min: 2000, max: 6600 } } + + traderConfig.updateTime.push(traderRefreshRecord) + } + + private setupTraderServices(traderConfig: ITraderConfig): void + { + const traderId = baseJson._id; + if (!traderConfig.moddedTraders) + { + traderConfig.moddedTraders = { clothingService: [] }; + } + traderConfig.moddedTraders.clothingService.push(traderId); + } + + private addTraderToDb(traderDetailsToAdd: any, tables: IDatabaseTables, jsonUtil: JsonUtil): void + { + tables.traders[traderDetailsToAdd._id] = { + assort: jsonUtil.deserialize(jsonUtil.serialize(assortJson)) as ITraderAssort, + base: jsonUtil.deserialize(jsonUtil.serialize(traderDetailsToAdd)) as ITraderBase, + questassort: { + started: {}, + success: { + "672e2804a0529208b4e10e18": "668aad3c3ff8f5b258e3a65b", + "672e284a363b798192b802af": "668c18eb12542b3c3ff6e20f", + "672e289bb4096716fcb918a7": "668c18eb12542b3c3ff6e20f" + }, + fail: {} + } + } + } + + private addTraderToLocales(tables: IDatabaseTables, fullName: string, firstName: string, nickName: string, location: string, description: string) + { + const locales = Object.values(tables.locales.global) as Record[] + for (const locale of locales) + { + locale[`${baseJson._id} FullName`] = fullName + locale[`${baseJson._id} FirstName`] = firstName + locale[`${baseJson._id} Nickname`] = nickName + locale[`${baseJson._id} Location`] = location + locale[`${baseJson._id} Description`] = description + } + } + + public loadFiles(dirPath, extName, cb) + { + if (!fs.existsSync(dirPath)) return + const dir = fs.readdirSync(dirPath, { withFileTypes: true }) + dir.forEach(item => + { + const itemPath = path.normalize(`${dirPath}/${item.name}`) + if (item.isDirectory()) this.loadFiles(itemPath, extName, cb) + else if (extName.includes(path.extname(item.name))) cb(itemPath) + }); + } + + public importQuests(tables) + { + this.loadFiles(`${modPath}/db/quests/`, [".json"], function (filePath) + { + // eslint-disable-next-line @typescript-eslint/no-var-requires + const item = require(filePath) + if (Object.keys(item).length < 1) return + for (const quest in item) + { + tables.templates.quests[quest] = item[quest] + } + }) + } + + public importQuestLocales(tables) + { + const serverLocales = ["ch", "cz", "en", "es", "es-mx", "fr", "ge", "hu", "it", "jp", "pl", "po", "ru", "sk", "tu"] + const addedLocales = {} + + for (const locale of serverLocales) + { + this.loadFiles(`${modPath}/db/locales/${locale}`, [".json"], function (filePath) + { + // eslint-disable-next-line @typescript-eslint/no-var-requires + const localeFile = require(filePath) + if (Object.keys(localeFile).length < 1) return + for (const currentItem in localeFile) + { + tables.locales.global[locale][currentItem] = localeFile[currentItem] + if (!Object.keys(addedLocales).includes(locale)) addedLocales[locale] = {} + addedLocales[locale][currentItem] = localeFile[currentItem] + } + }) + } + + for (const locale of serverLocales) + { + if (locale == "en") continue + for (const englishItem in addedLocales["en"]) + { + if (locale in addedLocales) + { + if (englishItem in addedLocales[locale]) continue + } + if (tables.locales.global[locale] != undefined) tables.locales.global[locale][englishItem] = addedLocales["en"][englishItem] + } + } + } + + public routeQuestImages(imageRouter) + { + this.loadFiles(`${modPath}/res/quests/`, [".png", ".jpg"], function (filePath) + { + imageRouter.addRoute(`/files/quest/icon/${path.basename(filePath, path.extname(filePath))}`, filePath); + }) + } +} + +module.exports = { mod: new PainterTrader() } \ No newline at end of file