Added Mods

- New Trader Mod; Painter
  - Along with a new weapon attachment mod; Black Core
- Make Val/VSS Great Again
This commit is contained in:
2025-01-15 20:53:42 -05:00
parent c3fcfb84f8
commit a161750966
109 changed files with 6721 additions and 2 deletions
+28
View File
@@ -0,0 +1,28 @@
[General]
gameName=spt
modid=0
version=d2025.1.15.0
newestVersion=
category="1,"
nexusFileStatus=1
installationFile=MoxoPixel-Painter.zip
repository=Nexus
ignoredVersion=
comments=
notes=
nexusDescription=
url=
hasCustomURL=false
lastNexusQuery=
lastNexusUpdate=
nexusLastModified=2025-01-16T01:48:28Z
nexusCategory=0
converted=false
validated=false
color=@Variant(\0\0\0\x43\0\xff\xff\0\0\0\0\0\0\0\0)
tracked=0
[installedFiles]
1\modid=0
1\fileid=0
size=1
@@ -0,0 +1,21 @@
{
"manifest":
[
{
"key": "mysterybox.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/commonassets/physics/physicsmaterials.bundle"
]
},
{
"key": "mysterybox_2.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"assets/commonassets/physics/physicsmaterials.bundle"
]
}
]
}
@@ -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
}
@@ -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": "668ff5bde41a0cce3b142464",
"_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": "6699546547ad52e0fccf6da9",
"_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"
}
]
],
"668ff5bde41a0cce3b142464": [
[
{
"count": 500000,
"_tpl": "5449016a4bdc2d6f028b456f"
}
]
],
"668ff5bde41a0cce3b142465": [
[
{
"count": 60,
"_tpl": "5d235b4d86f7742e017bc88a"
}
]
],
"6699546547ad52e0fccf6da9": [
[
{
"count": 400000,
"_tpl": "5449016a4bdc2d6f028b456f"
}
]
],
"6699546547ad52e0fccf6da0": [
[
{
"count": 50,
"_tpl": "5d235b4d86f7742e017bc88a"
}
]
]
},
"loyal_level_items": {
"672e2804a0529208b4e10e18": 4,
"672e284a363b798192b802af": 4,
"672e289bb4096716fcb918a7": 4,
"668ff5bde41a0cce3b142464": 2,
"668ff5bde41a0cce3b142465": 4,
"6699546547ad52e0fccf6da9": 2,
"6699546547ad52e0fccf6da0": 4
}
}
@@ -0,0 +1,123 @@
{
"_id": "668aaff35fd574b6dcc4a686",
"working": true,
"availableInRaid": false,
"items_buy": {
"category": [
"5448ecbe4bdc2d60728b4568"
],
"id_list": []
},
"items_buy_prohibited": {},
"customization_seller": false,
"name": "Ivan Samoylov",
"surname": "Unknown",
"nickname": "Painter",
"location": "Tarkov Suburbs",
"avatar": "/files/trader/avatar/painter.jpg",
"balance_rub": 5000000,
"balance_dol": 0,
"balance_eur": 0,
"unlockedByDefault": true,
"discount": 0,
"discount_end": 0,
"buyer_up": false,
"currency": "RUB",
"nextResupply": 1631489718,
"repair": {
"availability": false,
"quality": "0",
"excluded_id_list": [],
"excluded_category": [],
"currency": "5449016a4bdc2d6f028b456f",
"currency_coefficient": 1,
"price_rate": 1
},
"insurance": {
"availability": false,
"min_payment": 0,
"min_return_hour": 0,
"max_return_hour": 0,
"max_storage_time": 99,
"excluded_category": []
},
"isCanTransferItems": false,
"gridHeight": 300,
"loyaltyLevels": [{
"minLevel": 1,
"minSalesSum": 0,
"minStanding": 0,
"buy_price_coef": 48,
"repair_price_coef": 0,
"insurance_price_coef": 0,
"exchange_price_coef": 0,
"heal_price_coef": 0
},
{
"minLevel": 9,
"minSalesSum": 500000,
"minStanding": 0.04,
"buy_price_coef": 48,
"repair_price_coef": 0,
"insurance_price_coef": 0,
"exchange_price_coef": 0,
"heal_price_coef": 0
},
{
"minLevel": 20,
"minSalesSum": 1300000,
"minStanding": 0.1,
"buy_price_coef": 48,
"repair_price_coef": 0,
"insurance_price_coef": 0,
"exchange_price_coef": 0,
"heal_price_coef": 0
},
{
"minLevel": 28,
"minSalesSum": 3000000,
"minStanding": 0.14,
"buy_price_coef": 48,
"repair_price_coef": 0,
"insurance_price_coef": 0,
"exchange_price_coef": 0,
"heal_price_coef": 0
}
],
"prohibitedTransferableItems": {
"category": [],
"id_list": []
},
"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": []
}
}
@@ -0,0 +1,53 @@
{
"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, 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 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. I owe you one.",
"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 radio 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 targeting innocent civilians, looting valuable resources, and spreading fear throughout the region. It's time to put an end to their reign of terror and restore peace to the land. Your mission is to eliminate the rogue PMCs and bring justice to those who have suffered at their hands. Be prepared for a fierce battle, as these rogue 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 an insane amount of gun powder and plexiglass. I have a special project in mind and I need these materials to make it happen. 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": "So... I heard some PMCs are pissed about your involvment with my gambling business. They say that WE ripped them off. I don't know why they invlolve you in the dicussion but here we are. Maybe because you provided me with the resuources to build it up? Who knows but you should get ready to defend yourself. It's time to get bloody creative.",
"painter_8 failMessageText": "",
"painter_8 successMessageText": "This is... What did I just witness? Anyways... Now I can start selling the ammunition you salvaged from the PMCs.",
"672e33c986ff5b896eb503cd": "Eliminate 100 PMC"
}
@@ -0,0 +1,53 @@
{
"painter_1 name": "Aufgeklebt",
"painter_1 description": "Ich brauche deine Hilfe, um die taktische Effizienz von PMCs in ganz Tarkov zu verbessern. Finde verschiedene Arten von Klebeband, darunter auch Isolierband, damit ich spezielle Magazine herstellen kann. Diese verklebten Magazine ermöglichen es PMCs nicht nur, ihre geladene Munition leicht zu identifizieren, sondern helfen ihnen auch dabei, bei heftigen Feuergefechten schnell heruntergefallene Magazine zu finden. Das Gebiet von Tarkov ist ein gefährlicher Ort und jeder Vorteil zählt.",
"painter_1 note": "Manche Menschen haben Angst vor jedem, der frei herumläuft.",
"painter_1 failMessageText": "",
"painter_1 successMessageText": "Gute Arbeit, das ganze Klebeband zu finden. Damit läuft mein Laden wieder reibungslos. Hier ist eine Kleinigkeit für Ihre Mühe. Ich weiß Ihre Hilfe zu schätzen.",
"painter_1 location": "any",
"672e31c3262af62a8eb157cd": "Klebeband finden und übergeben",
"672e31d7701987cf15698b30": "Isolierband finden und übergeben",
"painter_2 name": "Topographie",
"painter_2 description": "Du musst für mich ein paar topografische Karten finden, ich kann sie verwenden, um Vorlagen für ein paar richtig gut aussehende Gemälde zu erstellen.",
"painter_2 failMessageText": "",
"painter_2 successMessageText": "Perfekt. Ich werde mich sofort an die Arbeit mit diesen Farben machen. Sie werden so gut aussehen.",
"672e323797a187aabc88ca4a": "Topografische Karten finden und weitergeben",
"painter_3 name": "Graben Sie Tief",
"painter_3 description": "Nach einem gnadenlosen SCAV-Überfall auf meine Werkstatt haben diese skrupellosen Plünderer einen Waffenvorrat erbeutet, in den ich mein ganzes Herzblut gesteckt hatte. Ich habe es geschafft, ihren geheimnisvollen Aufenthaltsort aufzudecken, und jetzt ist es an der Zeit, sie den Tag bereuen zu lassen, an dem sie mir in die Quere gekommen sind. Wage dich in ihre Höhle, überbringe eine klare Botschaft und stelle sicher, dass sie nie wieder so dreiste Aktionen durchführen. In Tarkov ist Vergeltung angesagt, und Rache ist die einzige Währung, die sie verstehen.",
"painter_3 failMessageText": "",
"painter_3 successMessageText": "Danke. Ich schulde dir was.",
"672e3295e4287b00f37700c1": "Eliminiere 10 Scavs beim Customs",
"painter_4 name": "Werkstattsanierung",
"painter_4 description": "Die Echos der Zerstörung meiner Werkstatt sind noch immer zu spüren, aber mit deiner Hilfe kann ich mit dem Wiederaufbau beginnen. Ich konnte einige wichtige Werkzeuge und Materialien retten, aber ich brauche noch mehr, um meine Werkstatt wieder zum Leben zu erwecken. Deine Aufgabe ist es, die Außenbezirke von Tarkov nach wertvollen Ressourcen abzusuchen. Suche nach Industriebedarf, seltenen Metallen und elektronischen Bauteilen. Hüte dich vor den Gefahren, die im Schatten lauern, denn Plünderer und rivalisierende Fraktionen könnten versuchen, deinen Fortschritt zu behindern. Sobald du die notwendigen Materialien gesammelt hast, bring sie zu mir zurück, damit wir mit der Renovierung der Werkstatt beginnen können.",
"painter_4 failMessageText": "",
"painter_4 successMessageText": "Ihr habt es geschafft! Mit diesen Materialien kann ich endlich mit der Renovierung meiner Werkstatt beginnen. Als Zeichen meiner Dankbarkeit nehmt diese Belohnung an.",
"painter_4 location": "any",
"672e32c9be76a4ab7682ece9": "Toolset finden und übergeben",
"672e32d8386445826a2adfee": "Bolzen finden und übergeben",
"672e32e7eb649d0132dfc0db": "Schraubenmuttern finden und übergeben",
"painter_5 name": "Funkstille",
"painter_5 description": "Da meine Werkstatt wieder reibungslos läuft, muss ich einen sichereren Weg finden, um mit meinen Kontakten vor Ort zu kommunizieren. Ich habe Gerüchte über einen leistungsstarken Funksender gehört, der alle Ecken von Tarkov erreichen kann. Mit diesem Sender kann ich wichtige Informationen senden und empfangen und so sicherstellen, dass meine Abläufe reibungslos ablaufen. Ihre Aufgabe ist es, den Funksender zu finden und ihn mir zurückzubringen. Seien Sie vorsichtig, da rivalisierende Fraktionen versuchen könnten, den Sender abzufangen und Sie daran zu hindern, Ihre Mission abzuschließen. Sobald Sie den Sender gesichert haben, kehren Sie zu mir zurück, damit wir eine sichere Kommunikationslinie einrichten können.",
"painter_5 failMessageText": "",
"painter_5 successMessageText": "Großartig! Mit diesem Funksender kann ich jetzt ohne Unterbrechungen mit meinen Kontakten vor Ort kommunizieren. Hier ist eine kleine Belohnung für Ihre Bemühungen. Ich weiß Ihre Hilfe zu schätzen.",
"painter_5 location": "any",
"672e33074cd02462a61760a2": "COFDM-Funksignalsender finden und übergeben",
"painter_6 name": "Gefährliche Gewässer",
"painter_6 description": "Eine Gruppe von PMCs hat in der Gegend von Tarkov Chaos verursacht und das fragile Kräftegleichgewicht gestört. Sie haben unschuldige Zivilisten ins Visier genommen, wertvolle Ressourcen geplündert und in der gesamten Region Angst verbreitet. Es ist Zeit, ihrer Schreckensherrschaft ein Ende zu setzen und den Frieden im Land wiederherzustellen. Ihre Mission ist es, die abtrünnigen PMCs zu eliminieren und denjenigen Gerechtigkeit widerfahren zu lassen, die unter ihnen gelitten haben. Machen Sie sich auf einen erbitterten Kampf gefasst, denn diese abtrünnigen PMCs sind gut ausgerüstet und bestens ausgebildet. Sobald Sie die Bedrohung neutralisiert haben, kehren Sie zu mir zurück, damit wir den Sieg feiern und die Gefallenen ehren können. Meine Informationen besagen, dass sie derzeit in der Gegend von Shoreline operieren.",
"painter_6 failMessageText": "",
"painter_6 successMessageText": "Schön. Jetzt geh und ruh dich aus. Du hast es dir verdient.",
"672e334a39064994fc3bd86f": "Eliminiere 15 PMCs an der Shoreline",
"painter_7 name": "Frei Geboren",
"painter_7 description": "Du musst für mich eine unglaubliche Menge Schießpulver und Plexiglas finden. Ich habe ein besonderes Projekt im Sinn und brauche diese Materialien, um es umzusetzen. Viel Glück!",
"painter_7 failMessageText": "",
"painter_7 successMessageText": "Gut.",
"painter_7 location": "any",
"672e33753bc2b4d394df066d": "Finde und übergebe den Gunpowder Kite",
"672e338893682a2593697a37": "Finde und übergebe Gunpowder Eagle",
"672e339460bf295e1f0771b5": "Finde und übergebe Gunpowder Hawk",
"672e339f6a58d92a168c9845": "Finden und übergeben Stück Plexiglas",
"painter_8 name": "Schrumpffolie",
"painter_8 description": "Also ... ich habe gehört, dass einige PMCs sauer über Ihre Beteiligung an meinem Glücksspielgeschäft sind. Sie sagen, dass WIR sie betrogen haben. Ich weiß nicht, warum sie Sie in die Diskussion verwickeln, aber so ist es nun einmal. Vielleicht, weil Sie mir die Ressourcen zur Verfügung gestellt haben, um es aufzubauen? Wer weiß, aber Sie sollten sich darauf vorbereiten, sich zu verteidigen. Es ist Zeit, verdammt kreativ zu werden.",
"painter_8 failMessageText": "",
"painter_8 successMessageText": "Das ist... Was habe ich gerade gesehen? Wie auch immer... Jetzt kann ich anfangen, die Munition zu verkaufen, die Sie von den PMCs geborgen haben.",
"672e33c986ff5b896eb503cd": "Eliminiere 100 PMC"
}
@@ -0,0 +1,56 @@
{
"painter_1 name": "Заклеим скотчем",
"painter_1 description": "Мне нужна ваша помощь в повышении тактической эффективности ЧВК по всему Таркову. Найдите различные типы лент, в том числе клейкую ленту и изоленту, чтобы я мог создавать специализированные магазины. Эти заклеенные лентой магазины не только позволяют ЧВК легко идентифицировать заряженные боеприпасы, но также помогают им быстро находить упавшие магазины во время интенсивных перестрелок. Район Таркова — опасное место, и каждое преимущество имеет значение.",
"painter_1 note": "Некоторые люди бояться,когда за ними бежат.",
"painter_1 failMessageText": "",
"painter_1 successMessageText": "Хорошая работа, вы нашли все ленты. Благодаря этому, мой магазин снова будет работать бесперебойно. Вот кое-что в качестве вашей награды. Я ценю вашу помощь.",
"painter_1 location": "Любая локация",
"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": "Спасибо. Я твой должник",
"painter_3 location": "Таможня",
"672e3295e4287b00f37700c1": "Уничтожить диких на Таможне",
"painter_4 name": "Ремонт Мастерской",
"painter_4 description": "Эхо разрушения моей мастерской все еще звучит, но с вашей помощью я могу начать путь к восстановлению. Мне удалось спасти некоторые необходимые инструменты и материалы, но мне нужно больше, чтобы вернуть мою мастерскую к жизни. Ваша задача — обыскать окрестности Таркова в поисках ценных ресурсов. Поиск промышленных материалов, редких металлов и электронных компонентов. Остерегайтесь опасностей, скрывающихся в тени, поскольку дикие и конкурирующие фракции могут попытаться помешать вашему прогрессу. Как только вы соберете необходимые материалы, верните их мне, чтобы мы могли начать ремонт мастерской.",
"painter_4 failMessageText": "",
"painter_4 successMessageText": "Вы сделали это! С помощью этих материалов я наконец могу начать процесс ремонта своей мастерской. В знак моей благодарности примите эту награду.",
"painter_4 location": "Любая локация",
"672e32c9be76a4ab7682ece9": "Найти и передать инструменты",
"672e32d8386445826a2adfee": "Найти и передать болты",
"672e32e7eb649d0132dfc0db": "Найти и передать гайки",
"painter_5 name": "Радиомолчание",
"painter_5 description": "Поскольку моя мастерская снова работает гладко, мне нужно найти более безопасный способ общения со своими контактами на местах. До меня дошли слухи о мощном радиопередатчике, способном достичь всех уголков Таркова. Этот передатчик позволит мне отправлять и получать важную информацию, гарантируя бесперебойную работу моих операций. Ваша задача — найти радиопередатчик и принести его мне. Будьте осторожны, так как соперничающие группировки могут попытаться перехватить передатчик и помешать вам выполнить миссию. Как только вы закрепите передатчик, вернитесь ко мне, чтобы мы могли установить безопасную линию связи.",
"painter_5 failMessageText": "",
"painter_5 successMessageText": "Отлично! С помощью этого радиопередатчика я теперь могу без перебоев общаться со своими контактами в полевых условиях. Вот кое-что за ваши усилия. Я ценю вашу помощь.",
"painter_5 location": "Любая локация",
"672e33074cd02462a61760a2": "Найти и передать военный COFDM беспроводной передатчик сигналов SG-C10",
"painter_6 name": "Опасные воды",
"painter_6 description": "Группа ЧВК сеет хаос в районе Таркова, нарушая хрупкий баланс сил. Они нападают на невинных мирных жителей, грабят ценные ресурсы и сеют страх по всему региону. Пришло время положить конец их террору и восстановить мир на земле. Ваша миссия — ликвидировать мошеннические ЧВК и восстановить справедливость для тех, кто пострадал от их рук. Будьте готовы к ожесточенному бою, ведь эти мошеннические ЧВК хорошо оснащены и хорошо обучены. Как только вы нейтрализуете угрозу, вернитесь ко мне, чтобы мы могли отпраздновать победу и почтить память павших. По моим данным, в настоящее время они действуют в районе Берега.",
"painter_6 failMessageText": "",
"painter_6 successMessageText": "Хорошо. Теперь ты можешь отдохнуть, ты это заслужил.",
"painter_6 location": "Берег",
"672e334a39064994fc3bd86f": "Уничтожьте 15 ЧВК В районе Берега",
"painter_7 name": "Свободнорожденный",
"painter_7 description": "Мне нужно, чтобы ты нашел некоторое количество пороха и оргстекла. У меня есть специальный проект, и мне нужны эти материалы, чтобы воплотить его в жизнь. Удачи!",
"painter_7 failMessageText": "",
"painter_7 successMessageText": "Хорошо.",
"painter_7 location": "Любая локация",
"672e33753bc2b4d394df066d": "Найти и передать оружейный порох Коршун",
"672e338893682a2593697a37": "Найти и передать оружейный порох Орёл",
"672e339460bf295e1f0771b5": "Найти и передать оружейный порох Ястреб",
"672e339f6a58d92a168c9845": "Найти и передать оргстекло",
"painter_8 name": "Термоукладка",
"painter_8 description": "Итак... Я слышал, что некоторые ЧВК недовольны вашим вмешательством в мой игорный бизнес. Они говорят, что МЫ их обворовали. Я не знаю, почему они вовлекают вас в дискуссию, но мы здесь. Может быть, потому, что вы предоставили мне ресурсы для его создания? Кто знает, но вам следует быть готовым защитить себя. Пришло время проявить чертовски творческий подход. Покажите им,чего вы стоите!",
"painter_8 failMessageText": "",
"painter_8 successMessageText": "Это... Что я только что стал свидетелем? В любом случае... Теперь я могу начать продавать боеприпасы, которые вы украли у ЧВК.",
"painter_8 location": "Любая локация",
"672e33c986ff5b896eb503cd": "Уничтожить 100 ЧВК по всей территории Таркова"
}
@@ -0,0 +1,960 @@
{
"668aacd1dee3de3ce276fdef": {
"QuestName": "Taped Up",
"_id": "668aacd1dee3de3ce276fdef",
"canShowNotificationsInGame": true,
"changeQuestMessageText": "painter_1 changeQuestMessageText",
"conditions": {
"AvailableForFinish": [
{
"conditionType": "HandoverItem",
"dogtagLevel": 0,
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e31c3262af62a8eb157cd",
"index": 0,
"maxDurability": 100,
"minDurability": 0,
"onlyFoundInRaid": true,
"parentId": "",
"target": ["57347c1124597737fb1379e3"],
"value": "3",
"visibilityConditions": []
},
{
"conditionType": "HandoverItem",
"dogtagLevel": 0,
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e31d7701987cf15698b30",
"index": 1,
"maxDurability": 100,
"minDurability": 0,
"onlyFoundInRaid": true,
"parentId": "",
"target": ["5734795124597738002c6176"],
"value": "3",
"visibilityConditions": []
}
],
"AvailableForStart": [
{
"compareMethod": ">=",
"conditionType": "Level",
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e31eeb489152e7707cb72",
"index": 0,
"parentId": "",
"value": 1,
"visibilityConditions": []
}
],
"Fail": []
},
"declinePlayerMessage": "painter_1 declinePlayerMessage",
"description": "painter_1 description",
"failMessageText": "painter_1 failMessageText",
"image": "/files/quest/icon/painter_1_thumbnail.png",
"instantComplete": false,
"isKey": false,
"location": "any",
"name": "painter_1 name",
"note": "painter_1 note",
"restartable": false,
"rewards": {
"Fail": [],
"Started": [],
"Success": [
{
"id": "672e320f0ed0c138d60be692",
"index": 0,
"type": "Experience",
"value": "2500"
},
{
"id": "672e321a311745b947c86297",
"index": 1,
"target": "668aaff35fd574b6dcc4a686",
"type": "TraderStanding",
"value": "0.02"
},
{
"findInRaid": true,
"id": "672e322347a9f6b4122f26c1",
"index": 2,
"items": [
{
"_id": "672e322618e2333119497dc9",
"_tpl": "5449016a4bdc2d6f028b456f",
"upd": {
"StackObjectsCount": 21000
}
}
],
"target": "672e322618e2333119497dc9",
"type": "Item",
"value": "20500"
}
]
},
"secretQuest": false,
"side": "Pmc",
"startedMessageText": "painter_1 startedMessageText",
"successMessageText": "painter_1 successMessageText",
"traderId": "668aaff35fd574b6dcc4a686",
"type": "PickUp"
},
"668aace8ff74aecfbcfbe9e6": {
"QuestName": "Topographics",
"_id": "668aace8ff74aecfbcfbe9e6",
"canShowNotificationsInGame": true,
"changeQuestMessageText": "painter_2 changeQuestMessageText",
"conditions": {
"AvailableForFinish": [
{
"conditionType": "HandoverItem",
"dogtagLevel": 0,
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e323797a187aabc88ca4a",
"index": 1,
"maxDurability": 100,
"minDurability": 0,
"onlyFoundInRaid": true,
"parentId": "",
"target": ["62a0a124de7ac81993580542"],
"value": "1",
"visibilityConditions": []
}
],
"AvailableForStart": [
{
"availableAfter": 0,
"conditionType": "Quest",
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e324934b8ff780512ec50",
"index": 1,
"parentId": "",
"status": [4],
"target": "668aacd1dee3de3ce276fdef",
"visibilityConditions": []
}
],
"Fail": []
},
"declinePlayerMessage": "painter_2 declinePlayerMessage",
"description": "painter_2 description",
"failMessageText": "painter_2 failMessageText",
"image": "/files/quest/icon/painter_2_thumbnail.png",
"instantComplete": false,
"isKey": false,
"location": "any",
"name": "painter_2 name",
"note": "painter_2 note",
"restartable": false,
"rewards": {
"Fail": [],
"Started": [],
"Success": [
{
"id": "672e3258a638ea171fc6a0b6",
"index": 0,
"type": "Experience",
"value": "6500"
},
{
"findInRaid": true,
"id": "672e325a9f4a5085cc20a7ec",
"index": 1,
"items": [
{
"_id": "672e325c7c1121e5395d35cd",
"_tpl": "5449016a4bdc2d6f028b456f",
"upd": {
"StackObjectsCount": 35500
}
}
],
"target": "672e325c7c1121e5395d35cd",
"type": "Item",
"value": "35500"
},
{
"id": "672e3263804e6e913647b594",
"index": 2,
"target": "668aaff35fd574b6dcc4a686",
"type": "TraderStanding",
"value": "0.02"
}
]
},
"secretQuest": false,
"side": "Pmc",
"startedMessageText": "painter_2 description",
"successMessageText": "painter_2 successMessageText",
"traderId": "668aaff35fd574b6dcc4a686",
"type": "PickUp"
},
"668aad1d97c0b19780ebf9c2": {
"QuestName": "Dig Deep",
"_id": "668aad1d97c0b19780ebf9c2",
"canShowNotificationsInGame": true,
"changeQuestMessageText": "painter_3 changeQuestMessageText",
"conditions": {
"AvailableForFinish": [
{
"conditionType": "CounterCreator",
"counter": {
"conditions": [
{
"compareMethod": ">=",
"conditionType": "Kills",
"id": "672e326e957ba4b27be8a570",
"target": "Savage",
"value": "1"
},
{
"conditionType": "Location",
"id": "672e327ba37230a48fc86c5f",
"target": ["bigmap"]
}
],
"id": "672e3285d8846577b4de301c"
},
"doNotResetIfCounterCompleted": false,
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e3295e4287b00f37700c1",
"index": 1,
"oneSessionOnly": false,
"parentId": "",
"type": "Elimination",
"value": "10",
"visibilityConditions": []
}
],
"AvailableForStart": [
{
"availableAfter": 0,
"conditionType": "Quest",
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e32a15f33429ec9dd1864",
"index": 1,
"parentId": "",
"status": [4],
"target": "668aace8ff74aecfbcfbe9e6",
"visibilityConditions": []
}
],
"Fail": []
},
"declinePlayerMessage": "painter_3 declinePlayerMessage",
"description": "painter_3 description",
"failMessageText": "painter_3 failMessageText",
"image": "/files/quest/icon/painter_3_thumbnail.png",
"instantComplete": false,
"isKey": false,
"location": "56f40101d2720b2a4d8b45d6",
"name": "painter_3 name",
"note": "painter_3 note",
"restartable": false,
"rewards": {
"Fail": [],
"Started": [],
"Success": [
{
"id": "672e32ac9fc5610c6495993a",
"index": 0,
"type": "Experience",
"value": "6500"
},
{
"id": "672e32aeaa0ec3f416123e5e",
"index": 1,
"target": "668aaff35fd574b6dcc4a686",
"type": "TraderStanding",
"value": "0.02"
},
{
"findInRaid": true,
"id": "672e32affeac239b74d81f71",
"index": 2,
"items": [
{
"_id": "672e32b1b37629655d837d0a",
"_tpl": "5449016a4bdc2d6f028b456f",
"upd": {
"StackObjectsCount": 39000
}
}
],
"target": "672e32b1b37629655d837d0a",
"type": "Item",
"value": "39500"
},
{
"findInRaid": true,
"id": "672e32b93e3c3479564195ec",
"index": 3,
"items": [
{
"_id": "672e32bb2333f51f9c6c08c4",
"_tpl": "5d403f9186f7743cac3f229b",
"upd": {
"StackObjectsCount": 3
}
}
],
"target": "672e32bb2333f51f9c6c08c4",
"type": "Item",
"value": "3"
}
]
},
"secretQuest": false,
"side": "Pmc",
"startedMessageText": "painter_3 description",
"successMessageText": "painter_3 successMessageText",
"traderId": "668aaff35fd574b6dcc4a686",
"type": "Elimination"
},
"668aad2b0f0c52ff9b51625d": {
"QuestName": "Workshop Refurbishment",
"_id": "668aad2b0f0c52ff9b51625d",
"canShowNotificationsInGame": true,
"changeQuestMessageText": "painter_4 changeQuestMessageText",
"conditions": {
"AvailableForFinish": [
{
"conditionType": "HandoverItem",
"dogtagLevel": 0,
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e32c9be76a4ab7682ece9",
"index": 0,
"maxDurability": 100,
"minDurability": 0,
"onlyFoundInRaid": true,
"parentId": "",
"target": ["590c2e1186f77425357b6124"],
"value": "1",
"visibilityConditions": []
},
{
"conditionType": "HandoverItem",
"dogtagLevel": 0,
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e32d8386445826a2adfee",
"index": 1,
"maxDurability": 100,
"minDurability": 0,
"onlyFoundInRaid": true,
"parentId": "",
"target": ["57347c5b245977448d35f6e1"],
"value": "3",
"visibilityConditions": []
},
{
"conditionType": "HandoverItem",
"dogtagLevel": 0,
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e32e7eb649d0132dfc0db",
"index": 2,
"maxDurability": 100,
"minDurability": 0,
"onlyFoundInRaid": true,
"parentId": "",
"target": ["57347c77245977448d35f6e2"],
"value": "3",
"visibilityConditions": []
}
],
"AvailableForStart": [
{
"availableAfter": 0,
"conditionType": "Quest",
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e32f318a4d0481537902d",
"index": 1,
"parentId": "",
"status": [4],
"target": "668aad1d97c0b19780ebf9c2",
"visibilityConditions": []
}
],
"Fail": []
},
"declinePlayerMessage": "painter_4 declinePlayerMessage",
"description": "painter_4 description",
"failMessageText": "painter_4 failMessageText",
"image": "/files/quest/icon/painter_4_thumbnail.png",
"instantComplete": false,
"isKey": false,
"location": "any",
"name": "painter_4 name",
"note": "painter_4 note",
"restartable": false,
"rewards": {
"Fail": [],
"Started": [],
"Success": [
{
"id": "672e32f713d2c32fd0ab716b",
"index": 0,
"type": "Experience",
"value": "2500"
},
{
"findInRaid": true,
"id": "672e32f8f7a6c399a761a62f",
"index": 1,
"items": [
{
"_id": "672e32f908b40ed46e9aa44a",
"_tpl": "5c05308086f7746b2101e90b",
"upd": {
"StackObjectsCount": 1
}
}
],
"target": "672e32f908b40ed46e9aa44a",
"type": "Item",
"value": "1"
},
{
"id": "672e32fe9bd3504432668960",
"index": 2,
"target": "668aaff35fd574b6dcc4a686",
"type": "TraderStanding",
"value": "0.03"
}
]
},
"secretQuest": false,
"side": "Pmc",
"startedMessageText": "painter_4 startedMessageText",
"successMessageText": "painter_4 successMessageText",
"traderId": "668aaff35fd574b6dcc4a686",
"type": "PickUp"
},
"668aad328a1b4ad3818169cf": {
"QuestName": "Radio Silence",
"_id": "668aad328a1b4ad3818169cf",
"canShowNotificationsInGame": true,
"changeQuestMessageText": "painter_5 changeQuestMessageText",
"conditions": {
"AvailableForFinish": [
{
"conditionType": "HandoverItem",
"dogtagLevel": 0,
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e33074cd02462a61760a2",
"index": 0,
"maxDurability": 100,
"minDurability": 0,
"onlyFoundInRaid": true,
"parentId": "",
"target": ["5c052f6886f7746b1e3db148"],
"value": "1",
"visibilityConditions": []
}
],
"AvailableForStart": [
{
"availableAfter": 0,
"conditionType": "Quest",
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e33139f6ec10a5d314e75",
"index": 1,
"parentId": "",
"status": [4],
"target": "668aad2b0f0c52ff9b51625d",
"visibilityConditions": []
}
],
"Fail": []
},
"declinePlayerMessage": "painter_5 declinePlayerMessage",
"description": "painter_5 description",
"failMessageText": "painter_5 failMessageText",
"image": "/files/quest/icon/painter_5_thumbnail.png",
"instantComplete": false,
"isKey": false,
"location": "any",
"name": "painter_5 name",
"note": "painter_5 note",
"restartable": false,
"rewards": {
"Fail": [],
"Started": [],
"Success": [
{
"id": "672e331a18ecf91f7135cfbc",
"index": 0,
"type": "Experience",
"value": "2500"
},
{
"findInRaid": true,
"id": "672e331ca9ec1a9b0ff50961",
"index": 1,
"items": [
{
"_id": "672e331de1cb340521837424",
"_tpl": "5e2aedd986f7746d404f3aa4",
"upd": {
"StackObjectsCount": 3
}
}
],
"target": "672e331de1cb340521837424",
"type": "Item",
"value": "1"
},
{
"findInRaid": true,
"id": "672e33236d76f0037ade6462",
"index": 2,
"items": [
{
"_id": "672e332433dd94c340abaf64",
"_tpl": "5449016a4bdc2d6f028b456f",
"upd": {
"StackObjectsCount": 51000
}
}
],
"target": "672e332433dd94c340abaf64",
"type": "Item",
"value": "50500"
},
{
"id": "672e332b978a9cce93f8aba0",
"index": 3,
"target": "668aaff35fd574b6dcc4a686",
"type": "TraderStanding",
"value": "0.03"
}
]
},
"secretQuest": false,
"side": "Pmc",
"startedMessageText": "painter_5 startedMessageText",
"successMessageText": "painter_5 successMessageText",
"traderId": "668aaff35fd574b6dcc4a686",
"type": "PickUp"
},
"668aad49a21e4d37c83d4ffc": {
"QuestName": "Dangerous Waters",
"_id": "668aad49a21e4d37c83d4ffc",
"canShowNotificationsInGame": true,
"changeQuestMessageText": "painter_6 changeQuestMessageText",
"conditions": {
"AvailableForFinish": [
{
"conditionType": "CounterCreator",
"counter": {
"conditions": [
{
"compareMethod": ">=",
"conditionType": "Kills",
"id": "672e3337719c01963ea93651",
"target": "AnyPmc",
"value": "1"
},
{
"conditionType": "Location",
"id": "672e333bec632da64d734e2d",
"target": ["Shoreline"]
}
],
"id": "672e33405decb9faa41db3ca"
},
"doNotResetIfCounterCompleted": false,
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e334a39064994fc3bd86f",
"index": 1,
"oneSessionOnly": false,
"parentId": "",
"type": "Elimination",
"value": "15",
"visibilityConditions": []
}
],
"AvailableForStart": [
{
"availableAfter": 0,
"conditionType": "Quest",
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e33594fd1e90a00dc344e",
"index": 1,
"parentId": "",
"status": [4],
"target": "668aad328a1b4ad3818169cf",
"visibilityConditions": []
}
],
"Fail": []
},
"declinePlayerMessage": "painter_6 declinePlayerMessage",
"description": "painter_6 description",
"failMessageText": "painter_6 failMessageText",
"image": "/files/quest/icon/painter_6_thumbnail.png",
"instantComplete": false,
"isKey": false,
"location": "5704e554d2720bac5b8b456e",
"name": "painter_6 name",
"note": "painter_6 note",
"restartable": false,
"rewards": {
"Fail": [],
"Started": [],
"Success": [
{
"id": "672e335d2f242b0ba98b196d",
"index": 0,
"type": "Experience",
"value": "6500"
},
{
"id": "672e33605cc6a53650006991",
"index": 1,
"target": "668aaff35fd574b6dcc4a686",
"type": "TraderStanding",
"value": "0.04"
},
{
"findInRaid": true,
"id": "672e3362123bcde9f627012d",
"index": 2,
"items": [
{
"_id": "672e3363e49a3c871e52b94c",
"_tpl": "5449016a4bdc2d6f028b456f",
"upd": {
"StackObjectsCount": 80000
}
}
],
"target": "672e3363e49a3c871e52b94c",
"type": "Item",
"value": "80000"
},
{
"findInRaid": true,
"id": "672e33688da7b757361b0fc3",
"index": 3,
"items": [
{
"_id": "672e33699042e3aae2094982",
"_tpl": "5d1b376e86f774252519444e",
"upd": {
"StackObjectsCount": 1
}
}
],
"target": "672e33699042e3aae2094982",
"type": "Item",
"value": "1"
}
]
},
"secretQuest": false,
"side": "Pmc",
"startedMessageText": "painter_6 description",
"successMessageText": "painter_6 successMessageText",
"traderId": "668aaff35fd574b6dcc4a686",
"type": "Elimination"
},
"668aad3c3ff8f5b258e3a65b": {
"QuestName": "Born Free",
"_id": "668aad3c3ff8f5b258e3a65b",
"canShowNotificationsInGame": true,
"changeQuestMessageText": "painter_7 changeQuestMessageText",
"conditions": {
"AvailableForFinish": [
{
"conditionType": "HandoverItem",
"dogtagLevel": 0,
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e33753bc2b4d394df066d",
"index": 0,
"maxDurability": 100,
"minDurability": 0,
"onlyFoundInRaid": true,
"parentId": "",
"target": ["590c5a7286f7747884343aea"],
"value": "7",
"visibilityConditions": []
},
{
"conditionType": "HandoverItem",
"dogtagLevel": 0,
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e338893682a2593697a37",
"index": 1,
"maxDurability": 100,
"minDurability": 0,
"onlyFoundInRaid": true,
"parentId": "",
"target": ["5d6fc78386f77449d825f9dc"],
"value": "7",
"visibilityConditions": []
},
{
"conditionType": "HandoverItem",
"dogtagLevel": 0,
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e339460bf295e1f0771b5",
"index": 2,
"maxDurability": 100,
"minDurability": 0,
"onlyFoundInRaid": true,
"parentId": "",
"target": ["5d6fc87386f77449db3db94e"],
"value": "7",
"visibilityConditions": []
},
{
"conditionType": "HandoverItem",
"dogtagLevel": 0,
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e339f6a58d92a168c9845",
"index": 3,
"maxDurability": 100,
"minDurability": 0,
"onlyFoundInRaid": true,
"parentId": "",
"target": ["59e366c186f7741778269d85"],
"value": "7",
"visibilityConditions": []
}
],
"AvailableForStart": [
{
"availableAfter": 0,
"conditionType": "Quest",
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e33a8cd1e9476551db9ea",
"index": 1,
"parentId": "",
"status": [4],
"target": "668aad49a21e4d37c83d4ffc",
"visibilityConditions": []
}
],
"Fail": []
},
"declinePlayerMessage": "painter_7 declinePlayerMessage",
"description": "painter_7 description",
"failMessageText": "painter_7 failMessageText",
"image": "/files/quest/icon/painter_7_thumbnail.png",
"instantComplete": false,
"isKey": false,
"location": "any",
"name": "painter_7 name",
"note": "painter_7 note",
"restartable": false,
"rewards": {
"Fail": [],
"Started": [],
"Success": [
{
"id": "672e33acba7dc114726c9ccc",
"index": 0,
"type": "Experience",
"value": "2500"
},
{
"findInRaid": true,
"id": "672e33ad3e0a2d403e1ae5b4",
"index": 1,
"items": [
{
"_id": "672e33ad2bd6d0ddc2311ea2",
"_tpl": "5449016a4bdc2d6f028b456f",
"upd": {
"StackObjectsCount": 110000
}
}
],
"target": "672e33ad2bd6d0ddc2311ea2",
"type": "Item",
"value": "110000"
},
{
"id": "672e33b369515ce7af7df6ff",
"index": 2,
"items": [
{
"_id": "672e2804a0529208b4e10e18",
"_tpl": "5c0a840b86f7742ffa4f2482"
}
],
"loyaltyLevel": 4,
"target": "672e2804a0529208b4e10e18",
"traderId": "668aaff35fd574b6dcc4a686",
"type": "AssortmentUnlock"
},
{
"id": "672e33b879e2d665bfa01bcc",
"index": 3,
"target": "668aaff35fd574b6dcc4a686",
"type": "TraderStanding",
"value": "0.04"
}
]
},
"secretQuest": false,
"side": "Pmc",
"startedMessageText": "painter_7 startedMessageText",
"successMessageText": "painter_7 successMessageText",
"traderId": "668aaff35fd574b6dcc4a686",
"type": "PickUp"
},
"668c18eb12542b3c3ff6e20f": {
"QuestName": "Shrink Wrap",
"_id": "668c18eb12542b3c3ff6e20f",
"canShowNotificationsInGame": true,
"changeQuestMessageText": "painter_8 changeQuestMessageText",
"conditions": {
"AvailableForFinish": [
{
"conditionType": "CounterCreator",
"counter": {
"conditions": [
{
"compareMethod": ">=",
"conditionType": "Kills",
"id": "672e33c211d2133aed1ccd66",
"target": "AnyPmc",
"value": "1"
}
],
"id": "672e33c4c2f8b0ce34a78768"
},
"doNotResetIfCounterCompleted": false,
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "672e33c986ff5b896eb503cd",
"index": 1,
"oneSessionOnly": false,
"parentId": "",
"type": "Elimination",
"value": "100",
"visibilityConditions": []
}
],
"AvailableForStart": [
{
"availableAfter": 0,
"conditionType": "Quest",
"dynamicLocale": false,
"globalQuestCounterId": "",
"id": "6748f226384e5edc1e86a07a",
"index": 1,
"parentId": "",
"status": [4],
"target": "668aad3c3ff8f5b258e3a65b",
"visibilityConditions": []
}
],
"Fail": []
},
"declinePlayerMessage": "painter_8 declinePlayerMessage",
"description": "painter_8 description",
"failMessageText": "painter_8 failMessageText",
"image": "/files/quest/icon/painter_8_thumbnail.png",
"instantComplete": false,
"isKey": false,
"location": "any",
"name": "painter_8 name",
"note": "painter_8 note",
"restartable": false,
"rewards": {
"Fail": [],
"Started": [],
"Success": [
{
"id": "672e33d7328feb52bd28d5d9",
"index": 0,
"type": "Experience",
"value": "6500"
},
{
"id": "672e33d832bdd4504eee296f",
"index": 1,
"target": "668aaff35fd574b6dcc4a686",
"type": "TraderStanding",
"value": "0.04"
},
{
"findInRaid": true,
"id": "672e33da4a034853ff35fdbb",
"index": 2,
"items": [
{
"_id": "672e33db64495f03c3642ee2",
"_tpl": "5449016a4bdc2d6f028b456f",
"upd": {
"StackObjectsCount": 120000
}
}
],
"target": "672e33db64495f03c3642ee2",
"type": "Item",
"value": "120000"
},
{
"id": "672e33e1d44cac74b631eec5",
"index": 3,
"items": [
{
"_id": "672e284a363b798192b802af",
"_tpl": "54527ac44bdc2d36668b4567"
}
],
"loyaltyLevel": 4,
"target": "672e284a363b798192b802af",
"traderId": "668aaff35fd574b6dcc4a686",
"type": "AssortmentUnlock"
},
{
"id": "672e33e5031e7626d247b917",
"index": 4,
"items": [
{
"_id": "672e289bb4096716fcb918a7",
"_tpl": "5a6086ea4f39f99cd479502f"
}
],
"loyaltyLevel": 4,
"target": "672e289bb4096716fcb918a7",
"traderId": "668aaff35fd574b6dcc4a686",
"type": "AssortmentUnlock"
}
]
},
"secretQuest": false,
"side": "Pmc",
"startedMessageText": "painter_8 description",
"successMessageText": "painter_8 successMessageText",
"traderId": "668aaff35fd574b6dcc4a686",
"type": "Elimination"
}
}
@@ -0,0 +1,26 @@
{
"name": "Painter - Trader",
"version": "1.1.3",
"main": "src/mod.js",
"license": "MIT",
"author": "MoxoPixel",
"sptVersion": "3.10.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.4",
"winston": "3.12"
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 KiB

@@ -0,0 +1,497 @@
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 { NewItemFromCloneDetails } from "@spt/models/spt/mod/NewItemDetails";
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";
const fs = require('fs');
const modPath = path.normalize(path.join(__dirname, '..'));
class painter 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<ILogger>("WinstonLogger");
const PreSptModLoader: PreSptModLoader = container.resolve<PreSptModLoader>("PreSptModLoader");
const imageRouter: ImageRouter = container.resolve<ImageRouter>("ImageRouter");
const configServer = container.resolve<ConfigServer>("ConfigServer");
const traderConfig: ITraderConfig = configServer.getConfig<ITraderConfig>(ConfigTypes.TRADER);
const questConfig: IQuestConfig = configServer.getConfig<IQuestConfig>(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>("ConfigServer")
const imageRouter: ImageRouter = container.resolve<ImageRouter>("ImageRouter")
const traderConfig: ITraderConfig = configServer.getConfig(ConfigTypes.TRADER)
const jsonUtil: JsonUtil = container.resolve<JsonUtil>("JsonUtil")
const databaseServer: DatabaseServer = container.resolve<DatabaseServer>("DatabaseServer")
const databaseService = container.resolve<DatabaseService>("DatabaseService")
const customItem = container.resolve<CustomItemService>("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;
// Ensure the properties exist before setting their values
if (repeatableQuests.Elimination) {
repeatableQuests.Elimination.successMessageText = "A damn beast you are, hehe. Good work, here's your share.";
repeatableQuests.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.Completion) {
repeatableQuests.Completion.successMessageText = "There you are! You got everything? Good stuff.";
repeatableQuests.Completion.description = "I have a mission for you. I need you to gather some items for me. You up for it?";
}
if (repeatableQuests.Exploration) {
repeatableQuests.Exploration.successMessageText = "Marvelous, young man. Thank you for some fine work.";
repeatableQuests.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)
if (configJson.enableLootBoxes) {
const mystery_box_1: 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"
},
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.",
},
},
};
customItem.createItemFromClone(mystery_box_1);
// 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";
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
}
};
const mystery_box_2: 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"
},
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.",
},
},
};
customItem.createItemFromClone(mystery_box_2);
this.logger.info("Painter loot boxes added");
}
}
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<string, string>[]
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) {
let questCount = 0
this.loadFiles(`${modPath}/db/quests/`, [".json"], function (filePath) {
const item = require(filePath)
if (Object.keys(item).length < 1) return
for (const quest in item) {
tables.templates.quests[quest] = item[quest]
questCount++
}
})
}
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) {
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) {
let imageCount = 0
this.loadFiles(`${modPath}/res/quests/`, [".png", ".jpg"], function (filePath) {
imageRouter.addRoute(`/files/quest/icon/${path.basename(filePath, path.extname(filePath))}`, filePath);
imageCount++
})
}
}
module.exports = { mod: new painter() }