Compare commits

..

18 Commits

Author SHA1 Message Date
74bdfd5f69 Add FAQ entries for patching schedule and upcoming ship releases 2025-08-24 12:32:47 +02:00
06086f05b3 Add Align & Mine event dataset and loot table, implement deduplication and paraphrasing scripts
- Created a new JSONL file for the Align & Mine event dataset containing user-assistant interactions.
- Added a loot table JSONL file detailing various items and their acquisition methods.
- Implemented a deduplication script to filter unique user messages from a dataset.
- Developed a paraphrasing script to generate variations of user messages using multiple models.
2025-08-23 12:58:39 +02:00
e9d6947880 Fix typo in recommended weapons summary for clarity in schifflayout.json 2025-08-23 12:57:56 +02:00
321cc42ba9 Update landingZone descriptions in map.json for consistency in language 2025-08-19 19:22:09 +02:00
eac35411b2 Update loot_material_locations.json for consistency and clarity in item descriptions 2025-08-19 17:10:37 +02:00
55814054ca Refactor fetch_wikelo_information to also support armor. Making the RAG for Wikelo mission obsolete. 2025-08-19 15:30:27 +02:00
1e272da943 in a db, so not needed anymore. 2025-08-19 14:55:12 +02:00
007aa63528 Wikelo ship missions are now a db to reduce the clutter of information via RAG and get accurate and non-hallucinated output. 2025-08-19 14:54:43 +02:00
c8fba0594c Implement streaming responses from Open-WebUI and update configuration for streaming support 2025-08-19 12:22:25 +02:00
e9cfea1424 Fix typo in output message for Ingame Shop location 2025-08-18 12:00:20 +02:00
a5c719c758 Add comprehensive guides for Foxwell Enforcement and Headhunter missions, including mission details, progression paths, and optimization strategies. 2025-08-18 12:00:13 +02:00
1207ed0ea0 Refactor logging implementation to replace print statements with logging calls for better traceability and debugging.
Fixes DM boolean.
2025-08-17 16:03:09 +02:00
c7dd2a88d8 Update price output format to include SCU for clarity in sell and buy price responses 2025-08-16 17:33:13 +02:00
0dc5eb5e20 Refactor commodity price fetching methods for clarity, accuracy and less context. 2025-08-16 16:59:11 +02:00
3fd5dcdfbe Add fitment details for L-21 Wolf and update vehicle compatibility for Polaris and Idris 2025-08-16 16:58:51 +02:00
c8f9efa67c Add ship weapon layout recommendation for PVE and PVP 2025-08-16 16:58:41 +02:00
06d70a8a4f removed old dependancy 2025-08-15 16:59:16 +02:00
c94d46885a Buyable ships: Switched from starcitizen.tools to UEX for more reliable information 2025-08-15 16:59:04 +02:00
22 changed files with 2201 additions and 636 deletions

BIN
databases/buyable_ships.db Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -18,5 +18,7 @@ tools:
- Tool_ID_1 - Tool_ID_1
- Tool_ID_2 - Tool_ID_2
use_streaming: true # Allows to stream the answer to feel more interactive.
# optional system prompt (you can leave it empty to use the default one or the systemprompt given in open-webui for the specific model) # optional system prompt (you can leave it empty to use the default one or the systemprompt given in open-webui for the specific model)
system_prompt: "" system_prompt: ""

View File

@@ -1,8 +1,16 @@
#!/usr/bin/env python3
import yaml import yaml
import asyncio import asyncio
import discord import discord
from discord.ext import commands from discord.ext import commands
import aiohttp import aiohttp
import logging
# ────────────────────────────────────────────────
# Setup logging
# ────────────────────────────────────────────────
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# ──────────────────────────────────────────────── # ────────────────────────────────────────────────
def load_config(path: str): def load_config(path: str):
@@ -21,6 +29,7 @@ MODEL_NAME = config["model_name"] # Model name to use, e.g., "gpt-3.5-tur
KNOW_BASE = config["knowledge_base"] # Knowledge base to use, e.g., "knowledge_base_v1" KNOW_BASE = config["knowledge_base"] # Knowledge base to use, e.g., "knowledge_base_v1"
TOOLS = config.get("tools", []) # list of tool-ids TOOLS = config.get("tools", []) # list of tool-ids
USE_STREAMING = config.get("use_streaming", False) # Enable/disable streaming responses
SYSTEM_PROMPT = config.get("system_prompt", None) # Optional system prompt to prepend to user messages SYSTEM_PROMPT = config.get("system_prompt", None) # Optional system prompt to prepend to user messages
ALLOW_DMS = config.get("allow_dms", False) # Allow DMs to the bot (default: False) ALLOW_DMS = config.get("allow_dms", False) # Allow DMs to the bot (default: False)
@@ -49,7 +58,9 @@ async def _query_openwebui(user_text: str, channel_id: int, tools_list: list):
# Attach tools if provided in the config file # Attach tools if provided in the config file
if tools_list: if tools_list:
payload["tool_ids"] = tools_list payload["tool_ids"] = tools_list
print(f"🔧 Using tools: {payload['tool_ids']}") logging.debug(f"🔧 Using tools: {payload['tool_ids']}")
logging.debug(f"Request payload to Open-WebUI: {payload}")
# The endpoint path for your instance appears to be /api/chat/completions # The endpoint path for your instance appears to be /api/chat/completions
async with session.post(f"{OPENWEBUI_URL}/api/chat/completions", async with session.post(f"{OPENWEBUI_URL}/api/chat/completions",
@@ -63,8 +74,94 @@ async def _query_openwebui(user_text: str, channel_id: int, tools_list: list):
# If the response is OK, parse the JSON and return the content # If the response is OK, parse the JSON and return the content
response_data = await resp.json() response_data = await resp.json()
logging.debug(f"Unparsed response from Open-WebUI: {response_data}")
return response_data['choices'][0]['message']['content'] return response_data['choices'][0]['message']['content']
async def _query_openwebui_streaming(user_text: str, channel_id: int, tools_list: list, message_to_edit):
"""
Stream response from Open-WebUI and edit Discord message progressively.
Args:
user_text (str): The user's message to send to the Open-WebUI.
channel_id (int): The Discord channel ID where the message was sent.
tools_list (list): List of tool IDs to use, if any.
message_to_edit: The Discord message object to edit with streaming content.
"""
async with aiohttp.ClientSession() as session:
payload = {
"model": MODEL_NAME,
"stream": True, # Enable streaming
"messages": [
{
"role": "user",
"content": user_text
}
]
}
if tools_list:
payload["tool_ids"] = tools_list
logging.debug(f"🔧 Using tools: {payload['tool_ids']}")
logging.debug(f"Request payload to Open-WebUI: {payload}")
async with session.post(f"{OPENWEBUI_URL}/api/chat/completions",
json=payload,
headers={"Authorization": f"Bearer {OPENWEBUI_API_KEY}"}) as resp:
if resp.status != 200:
data = await resp.text()
raise RuntimeError(f"Open-WebUI responded {resp.status}: {data}")
accumulated_content = ""
last_edit_time = 0
edit_interval = 1.0 # Edit every 1 second to avoid rate limits
async for line in resp.content:
line = line.decode('utf-8').strip()
if line.startswith('data: '):
data_str = line[6:] # Remove 'data: ' prefix
if data_str == '[DONE]':
break
try:
import json
chunk_data = json.loads(data_str)
if 'choices' in chunk_data and len(chunk_data['choices']) > 0:
delta = chunk_data['choices'][0].get('delta', {})
if 'content' in delta:
accumulated_content += delta['content']
# Edit message periodically to avoid rate limits
current_time = asyncio.get_event_loop().time()
if current_time - last_edit_time >= edit_interval:
try:
# Limit message length to Discord's 2000 character limit
content_to_show = accumulated_content[:1900]
if len(accumulated_content) > 1900:
content_to_show += "..."
await message_to_edit.edit(content=content_to_show)
last_edit_time = current_time
except discord.HTTPException:
# Handle rate limits gracefully
pass
except json.JSONDecodeError:
continue
# Final edit with complete content
try:
final_content = accumulated_content[:2000] # Respect Discord's limit
await message_to_edit.edit(content=final_content)
except discord.HTTPException:
pass
return accumulated_content
# --------------------------------------------------------------------------- # # --------------------------------------------------------------------------- #
# Discord bot logic discord.py # Discord bot logic discord.py
# --------------------------------------------------------------------------- # # --------------------------------------------------------------------------- #
@@ -78,12 +175,13 @@ bot = commands.Bot(command_prefix='!', intents=intents) # Command prefix is '!'
@bot.event @bot.event
async def on_ready(): async def on_ready():
print(f"✅ Logged in as {bot.user} (id={bot.user.id})") logging.info(f"✅ Logged in as {bot.user} (id={bot.user.id})")
# Only a test for commands, I add later # Only a test for commands, I add later
@bot.command(name="ping") @bot.command(name="ping")
async def ping(ctx): async def ping(ctx):
await ctx.send("🏓 Pong!") await ctx.send("🏓 Pong!")
return
# --------------------------------------------------------------------------- # # --------------------------------------------------------------------------- #
# Main logic only respond to allowed channels / DM flag # Main logic only respond to allowed channels / DM flag
@@ -92,21 +190,33 @@ async def ping(ctx):
@bot.event @bot.event
async def on_message(message): async def on_message(message):
# Ignore messages from bots (incl. the bot itself) # Ignore messages from bots (incl. the bot itself)
if message.author.bot: return if message.author.bot:
return
# Allow commands to be processed # This is crucial: process commands first.
await bot.process_commands(message) await bot.process_commands(message)
# Skip if we are in a DM and that is disabled # Now, check if a command was actually invoked. If so, we don't want
if not ALLOW_DMS and isinstance(message.channel, discord.DMChannel): return # to treat it as a prompt for the AI, so we stop here.
ctx = await bot.get_context(message)
if ctx.valid:
return
# Determine if the message is a DM
is_dm = isinstance(message.channel, discord.DMChannel)
# Skip if it's a DM and DMs are disabled
if is_dm and not ALLOW_DMS:
return
# --- debugging --- # --- debugging ---
print(f" Message received in channel: {message.channel.id}") logging.info(f" Message received in channel: {message.channel.id}")
print(f"📢 Whitelisted channels are: {WHITELIST_CHANNELS}") logging.info(f"📢 Whitelisted channels are: {WHITELIST_CHANNELS}")
# ----------------------------- # -----------------------------
# Allow only the whitelist channels empty list means “all channels” # Allow only whitelisted channels (if not a DM)
if WHITELIST_CHANNELS and message.channel.id not in WHITELIST_CHANNELS: # An empty whitelist means all guild channels are allowed.
if not is_dm and WHITELIST_CHANNELS and message.channel.id not in WHITELIST_CHANNELS:
return return
# ----------------------------------------------------------------------- # # ----------------------------------------------------------------------- #
@@ -124,12 +234,22 @@ async def on_message(message):
# B. Query Open-WebUI and show typing indicator # B. Query Open-WebUI and show typing indicator
# ----------------------------------------------------------------------- # # ----------------------------------------------------------------------- #
try: try:
if USE_STREAMING:
# Send initial "collecting information" message
initial_message = await message.reply("Bitte warte kurz, die Informationen werden gesammelt...")
# Start streaming response and edit the message
await _query_openwebui_streaming(prompt, message.channel.id, TOOLS, initial_message)
else:
# Use the original non-streaming approach
async with message.channel.typing(): async with message.channel.typing():
# Query the Open-WebUI API while showing "Bot is typing..."
reply = await _query_openwebui(prompt, message.channel.id, TOOLS) reply = await _query_openwebui(prompt, message.channel.id, TOOLS)
# Send the reply
await message.reply(reply) await message.reply(reply)
except Exception as e: except Exception as e:
# If we're in streaming mode and have an initial message, edit it with error
if USE_STREAMING and 'initial_message' in locals():
await initial_message.edit(content=f"⚠ Error contacting the Open-WebUI API: {e}")
else:
await message.reply(f"⚠ Error contacting the Open-WebUI API: {e}") await message.reply(f"⚠ Error contacting the Open-WebUI API: {e}")
# No need to return here as the function ends after this block. # No need to return here as the function ends after this block.
@@ -139,6 +259,7 @@ async def on_message(message):
if __name__ == "__main__": if __name__ == "__main__":
try: try:
asyncio.run(bot.run(DISCORD_TOKEN)) # DO NOT wrap bot.run in asyncio.run()
bot.run(DISCORD_TOKEN)
except KeyboardInterrupt: except KeyboardInterrupt:
print("🤖 Shutting down…") logging.info("🤖 Shutting down…")

View File

@@ -0,0 +1,240 @@
{
"titel": "Der umfassende Leitfaden zu Foxwell Enforcement Missionen",
"beschreibung": "Willkommen, Auftragnehmer. Dieser Leitfaden wurde von der Alaska Star Citizen Organization (907th) erstellt und gibt einen vollständigen Überblick über den Aufstiegsweg bei Foxwell Enforcement einem privaten Sicherheitsunternehmen mit Hauptsitz im Stanton-System. Durch die Befolgung dieses Dokuments kannst du effizient die Ränge erklimmen, deine Reputation steigern und die anspruchsvollsten sowie lukrativsten Verträge freischalten, darunter Begegnungen mit legendären AcePiloten, Kampfeinsätze gegen Großschiffe und vieles mehr.",
"beginn": {
"bewertung": "Bevor du reguläre Aufträge annehmen kannst, musst du deinen Wert beweisen. Der erste Schritt besteht darin, die Mission \"Security Contractor Evaluation\" anzunehmen und abzuschließen. Diese einleitende Mission bestätigt deine grundlegenden Kampfqualifikationen für Sicherheitsaufgaben.",
"abschluss": {
"nachricht": "Nach dem Abschluss schaltest du die erste Stufe der Patrouillen und Hinterhaltsmissionen frei."
}
},
"missionsprogressionPfad": {
"beschreibung": "Die Freischaltung höherer Foxwell-Missionen erfolgt anhand der Anzahl abgeschlossener Missionen, nicht direkt über das Reputationsniveau. Es gibt zwei unabhängige Raumkampfspuren: Patrouille und Hinterhalt. Jede Spur hat ihren eigenen Fortschrittspfad."
},
"patrouillenMissionsprogression": [
{
"missionName": "Security Contractor Evaluation",
"abgeschlosseneAufgabenFuerNächsteStufe": 1,
"tierOderFarben": "Zertifizierung",
"empfohleneSpielerzahl": 1,
"maxFeinde": "≤12",
"typ": "FPS-Kampf",
"aUEC_Payout": 20000,
"scripBonusMG": 0,
"potenzielleCargoBelohnungen": ["FPSAusrüstung"],
"cargoWertSchätzung": null
},
{
"missionName": "Routine Patrol",
"abgeschlosseneAufgabenFuerNächsteStufe": 5,
"tierOderFarben": "Gelb",
"empfohleneSpielerzahl": 1,
"maxFeinde": "46",
"möglicheFeindeSchiffe": ["Aurora","Mustang","Buccaneer"],
"aUEC_Payout": 30000,
"scripBonusMG": 2,
"potenzielleCargoBelohnungen": ["Agrarprodukte","Abfall"],
"cargoWertSchätzung": "~500015000"
},
{
"missionName": "Security Sweep",
"abgeschlosseneAufgabenFuerNächsteStufe": 5,
"tierOderFarben": "Gelb",
"empfohleneSpielerzahl": 1,
"maxFeinde": "68",
"möglicheFeindeSchiffe": ["Gladius","Arrow","Buccaneer","Cutlass Black"],
"aUEC_Payout": 50000,
"scripBonusMG": 4,
"potenzielleCargoBelohnungen": ["Verarbeitete Lebensmittel","Distilliertes Getränk"],
"cargoWertSchätzung": "~1500040000"
},
{
"missionName": "Security Patrol",
"abgeschlosseneAufgabenFuerNächsteStufe": 5,
"tierOderFarben": "Orange",
"empfohleneSpielerzahl": "23",
"maxFeinde": "1015",
"möglicheFeindeSchiffe": ["Cutlass Black","Freelancer","Super Hornet","Vanguard Warden"],
"aUEC_Payout": 74000,
"scripBonusMG": 8,
"potenzielleCargoBelohnungen": ["Distilliertes Getränk", "verschiedene Handelswaren"],
"cargoWertSchätzung": "~50000100000"
},
{
"missionName": "Potential Security Threat",
"abgeschlosseneAufgabenFuerNächsteStufe": 10,
"tierOderFarben": "Orange",
"empfohleneSpielerzahl": "24",
"maxFeinde": "810",
"möglicheFeindeSchiffe": ["leichte und mittlere Kampfschiffe"],
"aUEC_Payout": 135000,
"scripBonusMG": 14,
"potenzielleCargoBelohnungen": ["verschiedene Handelswaren"],
"cargoWertSchätzung": "~70000150000"
},
{
"missionName": "High-Risk Security Patrol",
"abgeschlosseneAufgabenFuerNächsteStufe": 10,
"tierOderFarben": "Rot",
"empfohleneSpielerzahl": "35 (kleines Team)",
"maxFeinde": "1012",
"möglicheFeindeSchiffe": ["HammerHead","Constellation","Corsair","Retaliator", "schwere Kampfschiffe"],
"aUEC_Payout": 200000,
"scripBonusMG": 18,
"potenzielleCargoBelohnungen": ["SLAM","WiDoW","hochwertige Mineralien"],
"cargoWertSchätzung": "~150000300000+"
},
{
"missionName": "Secure Threatened Space",
"abgeschlosseneAufgabenFuerNächsteStufe": null,
"tierOderFarben": "Rot",
"empfohleneSpielerzahl": "48 (großes Team)",
"maxFeinde": "1015",
"möglicheFeindeSchiffe": ["Hammerhead","Redeemer","Retaliator - Talon","Vanguard","Cutlass Black","Gladius","Scorpius","Hurricane","Buccaneer"],
"aUEC_Payout": 350000,
"scripBonusMG": 24,
"potenzielleCargoBelohnungen": ["Laranit","Agricium","SLAM"],
"cargoWertSchätzung": "~200000500000+"
}
],
"hinterhaltMissionsprogression": [
{
"missionName": "Security Contractor Evaluation",
"abgeschlosseneAufgabenFuerNächsteStufe": 1,
"tierOderFarben": "Zertifizierung",
"empfohleneSpielerzahl": 1,
"maxFeinde": "34",
"typ": "Bunker-Mission",
"aUEC_Payout": 20000,
"scripBonusMG": 0,
"potenzielleCargoBelohnungen": null,
"cargoWertSchätzung": null
},
{
"missionName": "Ambush an Amateur",
"abgeschlosseneAufgabenFuerNächsteStufe": 5,
"tierOderFarben": "Gelb",
"empfohleneSpielerzahl": 1,
"maxFeinde": "24",
"möglicheFeindeSchiffe": ["leichte Kampfschiffe (Arrow, Gladius)"],
"aUEC_Payout": 20000,
"scripBonusMG": 1,
"potenzielleCargoBelohnungen": ["Abfall", "Grundwaren"],
"cargoWertSchätzung": "~10005000"
},
{
"missionName": "Surprise Strike",
"abgeschlosseneAufgabenFuerNächsteStufe": 5,
"tierOderFarben": "Gelb",
"empfohleneSpielerzahl": "12",
"maxFeinde": "24",
"möglicheFeindeSchiffe": ["Avenger Titan 315p","Cutlass","Freelancer + leichte Kampfschiffe"],
"aUEC_Payout": 30000,
"scripBonusMG": 3,
"potenzielleCargoBelohnungen": ["Abfall", "Grundwaren"],
"cargoWertSchätzung": "~30008000"
},
{
"missionName": "Spring a Trap",
"abgeschlosseneAufgabenFuerNächsteStufe": 5,
"tierOderFarben": "Orange",
"empfohleneSpielerzahl": "24",
"maxFeinde": "46",
"möglicheFeindeSchiffe": ["Cutlass Black / Freelancer MIS / RAFT + leichte Kampfschiffe"],
"aUEC_Payout": 40000,
"scripBonusMG": 5,
"potenzielleCargoBelohnungen": ["Handelswaren","raffinierte Materialien"],
"cargoWertSchätzung": "~50000100000"
},
{
"missionName": "Return the Favor",
"abgeschlosseneAufgabenFuerNächsteStufe": 10,
"tierOderFarben": "Orange",
"empfohleneSpielerzahl": "46 (kleines Team)",
"maxFeinde": "46",
"möglicheFeindeSchiffe": ["RAFT","Valkyrie / Mercury / Taurus / Andromeda", "Corsair + leichte Kampfschiffe"],
"aUEC_Payout": 75000,
"scripBonusMG": 8,
"potenzielleCargoBelohnungen": ["Variiert (Konvoikargo)"],
"cargoWertSchätzung": "~100000250000"
},
{
"missionName": "Ambush Attack Squad",
"abgeschlosseneAufgabenFuerNächsteStufe": 10,
"tierOderFarben": "Rot",
"empfohleneSpielerzahl": "68 (mittleres Team)",
"maxFeinde": "68",
"möglicheFeindeSchiffe": ["Reclaimer","Starfarer","Caterpillar C2","Carrack","600i","Corsair"],
"aUEC_Payout": 120000,
"scripBonusMG": 12,
"potenzielleCargoBelohnungen": ["Militärkomponenten", "hochwertige Waren"],
"cargoWertSchätzung": "~150000300000"
},
{
"missionName": "Surprise Attack",
"abgeschlosseneAufgabenFuerNächsteStufe": null,
"tierOderFarben": "Rot",
"empfohleneSpielerzahl": "8+ (großes Team)",
"maxFeinde": "1216",
"möglicheFeindeSchiffe": ["Polaris"],
"aUEC_Payout": 200000,
"scripBonusMG": 16,
"potenzielleCargoBelohnungen": ["Variiert"],
"cargoWertSchätzung": "~200000500000+"
}
],
"payoutTrendAnalyse": {
"patrouillenSerie": "Die Payouts steigen von 20 000 aUEC bei der Evaluation bis zu 350 000 aUEC bei „Secure Threatened Space“. Die Erhöhungen spiegeln das zunehmende Risiko und die steigende Gefechtskomplexität wider.",
"hinterhaltSerie": "Analog zur Patrouillenserie beginnen die Payouts ebenfalls mit 20 000 aUEC für die Evaluation. Sie steigen schrittweise bis zu 200 000 aUEC bei der höchsten Stufe „Surprise Attack“."
},
"reputationVsMissions": {
"beschreibung": "Die Freischaltung von Missionen erfolgt ausschließlich über die Anzahl abgeschlossener Missionen in einer jeweiligen Serie. Reputation (Rep) wird für jede absolvierte Foxwell-Mission vergeben und kann zusätzliche Gelegenheiten oder leicht verbesserte Vertragskonditionen bieten, ist jedoch kein direkter Unlock-Faktor.",
"aktuellerStatus": "Deine aktuelle Reputation mit Foxwell findest du im mobiGlas."
},
"mercenaryGuildScrips": {
"beschreibung": "Mercenary Guild (MG) Scrips sind ein physischen Gegenstand, der für die meisten FoxwellMissionen vergeben wird. Sie können nicht in regulären Shops ausgegeben werden, sondern dienen einem speziellen Handelsweg für seltene und exklusive Ausrüstung.",
"aktuellerEinsatz": {
"gegenüberFavor": "Der Standardaustausch ist 50 MG Scrips = 1 Wikelos Favor.",
"Vendor": "Die Abmachung erfolgt über „Collections“-Missionen beim BanuVendor Wikelo. Sein Emporium befindet sich an Stationen Kinga, Selo oder Dasi."
},
"zukunftspläne": {
"beschreibung": "Langfristig beabsichtigt die Mercenary Guild, eigene Händler zu eröffnen, bei denen MGScrips direkt für exklusive Gegenstände eingelöst werden können.",
"geplanteBelohnungen": [
"Mercenarythemenbasierte Rüstung",
"einzigartige Schiffwaffen",
"speziell entwickelte Schiffsbauteile"
],
"zeitplan": "Keine offizielle Zeitlinie."
}
},
"acePiloten": {
"beschreibung": "AcePiloten sind Elitefeinde, die bei höheren Stufen (Orange & Rot) in beiden Serien auftauchen. Sie erscheinen als zufällige Eskalation und fungieren oft als Endboss.",
"belohnungenUndEinlösung": {
"Helm": "Der Ace Interceptor Helm ist ein hochgradig barterbarer Gegenstand, der bei Wikelo in Sammlungen gegen exklusive Belohnungen eingetauscht werden kann, z. B. seltene Waffen, spezielle Rüstungsets und hochwertige Schiffskomponenten."
},
"tipsZumBekämpfen": [
"Schalte das Ace-Schiff aus, bevor du die Mission abschließt.",
"Sammle den Helm, bevor das Objektiv verschwindet.",
"AcePiloten tragen häufig Scrips im Kernpanzer."
],
"besonderheiten": {
"SpawnOrt": "Nur in Patrouillenmissionen, nicht bei Hinterhalten.",
"Flugzeugmodell": "Mk I Hornet Ghost."
}
},
"zusätzlicheHinweise": {
"fehlerbehebungMissionMarker": "Wenn die Marker nach dem Eliminieren aller Feinde verschwinden, bewege dein Schiff mindestens 25 km von der Bergbaustation entfernt. Ein neuer Marker weist dich zurück.",
"acePilotBegegnungen": [
"Erhöhe deine Chancen bei Orange und RotStufen.",
"Gründe diese Missionen nach dem Freischalten."
]
},
"referenzen": [
"Foxwell Enforcement Deep Dive.mp3 (16 Minuten)",
"Star Citizen Tools Wiki Foxwell Enforcement",
"How To Grind Foxwell Ambush Mission: A Comprehensive Reputation & Mission Guide & Tips 4k",
"4.1.1 Foxwell Patrol: Complete Mission Guide & Walkthrough | Great Space Combat Missions! 4k",
"Foxwell Patrol Missions: Missions Sheet ☄ChrisGBG☄'s Star Citizen Reference Sheets",
"Foxwell Ambush Missions: Missions Sheet ☄ChrisGBG☄'s Star Citizen Reference Sheets",
"the907th.org Alaska's Star Citizen Organization"
]
}

View File

@@ -0,0 +1,160 @@
{
"titel": "Beste Missionen für die Headhunter Reputation Star Citizen 4.3",
"beschreibung": "Dieser Leitfaden fasst die wichtigsten Headhunter-Missionen zusammen, gruppiert sie nach RepLevel und gibt Optimierungsstrategien für einen effizienten Grind.",
"reputationLevels": [
{
"levelName": "Beginner → Junior Contractor",
"missionen": [
{
"name": "Arrow Salvage (10k aUEC)",
"ziel": "Salvage kaputte Arrow von Asteroidenbasen",
"durchführung": "Zum Marker fliegen, Salvagestrahl verwenden, Schrott einsammeln und zurückkehren. Dauer ca. 5 Min.",
"ReputationGewinn": "Mittel ideal für Einsteiger",
"tipps": [
"Auf NavigationsFehler achten; bei Glitches den Vertrag im mobiGlas neu abholen.",
"Falls ihr damit kein Geld verdienen wollt, einfach Schiff abschießen."
]
},
{
"name": "Hit a CFP Ship (20k aUEC)",
"ziel": "Ein einzelnes CFP-Schiff in der Nähe einer Asteroidenbasis vernichten",
"durchführung": "Quantum zum Marker, Ziel (z. B. Mustang oder Aurora) abschießen und bei Zeitverfügbarkeit Fracht plündern. Dauer ca. 7 Min.",
"ReputationGewinn": "Hoher ReputationGewinn für frühe Levels",
"tipps": [
"Ein Jäger für schnelle Kills nutzen Escorts meiden."
]
},
{
"name": "Treat Yourself to a Fight (20k aUEC)",
"ziel": "Ein feindliches Schiff (z. B. Cutlass Black) eliminieren",
"durchführung": "Zum AsteroidenCluster fliegen, Hauptschiff anvisieren und Escorts ignorieren. Dauer ca. 7 Min.",
"ReputationGewinn": "Hoher RepGewinn; gut kombinierbar mit „Hit a CFP Ship“",
"tipps": [
"Attrition3 Repeater für schnellere Kills ausstatten."
]
}
]
},
{
"levelName": "Junior Contractor → Contractor",
"missionen": [
{
"name": "Salvage Contract (50k aUEC)",
"ziel": "Schrott von größeren Wracks sammeln",
"durchführung": "Salvage Schiff benutzen, Marker erreichen, Schrott salvieren und zurückkehren. Dauer ca. 10 Min.",
"ReputationGewinn": "Signifikant, aber selten schnell neu verfügbar",
"tipps": [
"Falls der Marker zu einem falschen Vertrag führt, trotzdem abschließen Rep + aUEC.",
"Falls ihr damit kein Geld verdienen wollt, einfach Schiff abschießen."
]
},
{
"name": "Headhunter Pilot in Trouble (47k aUEC)",
"ziel": "Ein Headhunter-Schiff vor Angreifern schützen",
"durchführung": "Quantum zum Marker, 23 feindliche Schiffe (z. B. Gladius oder Buccaneer) eliminieren und das Verbündete am Leben lassen. Dauer ca. 12 Min.",
"ReputationGewinn": "Hoher RepGewinn mit einem Starter-Schiff machbar",
"tipps": [
"Nah dran zum Verbündeten bleiben, Aggro anziehen; FR66 Schilde für schnelles wiederaufladen nutzen."
]
}
]
},
{
"levelName": "Contractor → Senior Contractor",
"missionen": [
{
"name": "Headhunter Ship Needs Backup (72k aUEC)",
"ziel": "Ein Headhunter-Schiff gegen mehrere Feinde verteidigen (z. B. Vanguard oder Hornet)",
"durchführung": "Dedizierten Fighter wie Anvil Hornet F7C oder Vanguard Harbinger einsetzen, Gegner schnell eliminieren und das Verbündete schützen. Dauer ca. 15 Min.",
"ReputationGewinn": "Sehr hoch führt zum Senior Contractor",
"tipps": [
"Attrition4 Repeater + FR76 Schilde für härtere Kämpfe ausstatten."
]
},
{
"name": "Kill Order (80k aUEC, Asteroid Cluster)",
"ziel": "Ein Hochwertiges Ziel nahe einer Asteroidenbasis eliminieren",
"durchführung": "Quantum zum Marker, Ziel zerstören und Escorts meiden. Dauer ca. 10 Min, sofern der Marker nicht bugged.",
"ReputationGewinn": "Hoher ReputationGewinn prüfe, ob ein FastTravel Marker vorhanden ist",
"tipps": [
"Schiff für hohe DPS einsetzen; bei fehlendem Marker abbrechen."
]
}
]
},
{
"levelName": "Senior Contractor → Elite Contractor",
"missionen": [
{
"name": "Purge Xenothreat Server (233k aUEC)",
"ziel": "XenothreatServer in einer Datenfarm zerstören (z. B. Canards View)",
"durchführung": "Zum Standort fliegen, alle bis auf einen Server zerstören, bis zu 3 Missionen stapeln und abschließen. Dauer ca. 20 Min pro Stapel.",
"ReputationGewinn": "Massiv Stapeln kann jedoch als Exploit patcht werden",
"tipps": [
"C2 Hercules für PostMission Cargo Looting nutzen; bei fehlenden Servern Bug an Issue Council melden."
]
},
{
"name": "Need a Death at Asteroid Base (104k aUEC)",
"ziel": "Ein Ziel in einer Asteroidenbasis töten",
"durchführung": "Quantum zum Marker, Ziel eliminieren (50 % SpawnChance). Dauer ca. 10 Min bei funktionierendem Contract.",
"ReputationGewinn": "Hoher RepGewinn häufig bugged; abbrechen, wenn das Ziel nicht erscheint",
"tipps": [
"Gladius für Wendigkeit einsetzen; bei Bug auf neuen Server wiederholen."
]
}
]
}
],
"bugVermeidung": {
"beschreibung": "Tipps zur Vermeidung von bugged Missionen in Alpha 4.3",
"strategien": [
{
"name": "\"Kill\" Missions",
"tipps": [
"Vermeide Verträge mit \"Kill\" im Titel (z.B. Kill Order), wenn sie bugged sind oft keine FastTravel Marker oder zu weit entfernt."
]
},
{
"name": "Navigation Glitches",
"tipps": [
"Bei falschem Marker trotzdem Mission abschließen; im mobiGlas neu tracken, um das Problem zu beheben."
]
},
{
"name": "Server Crashes",
"tipps": [
"Abgebrochene Missionen beeinflussen Rep nicht Spiel neustarten für neue Verträge."
]
}
],
"workaround": "Server über das Hauptmenü wechseln, falls Missionen nicht neu auftauchen oder Ziele nicht spawnen."
},
"optimierungReputationGrind": {
"missionStacking": [
"Mehrere (34) Verträge gleichzeitig annehmen (z.B. Arrow Salvage + Hit a CFP Ship + Treat Yourself to a Fight).",
"AsteroidenbasisMissionen rund um Bloom nutzen schneller QuantumTravel.",
"Exploits wie 60x Purge Xenothreat Server vermeiden, um Bans zu verhindern."
],
"schiffsAuswahl": [
{
"phase": "Frühes Spiel",
"empfehlung": "Aurora MR oder Mustang Alpha mit Attrition2 Repeater risikoarm"
},
{
"phase": "Mittelspiel",
"empfehlung": "Gladius oder Hornet F7C für 47k72k Missionen"
},
{
"phase": "Spätes Spiel",
"empfehlung": "Heavy oder Stealth Fighter für 80k+ Aufträge"
}
],
"zeitmanagement": [
"Start mit Arrow Salvage (5 Min), dann Hit a CFP Ship oder Treat Yourself to a Fight (710 Min).",
"Protect-Missionen wie Pilot in Trouble oder Ship Needs Backup erst bei Auslauf von SalvageMissionen nutzen (1215 Min).",
"Falls Verträge nicht neu auftauchen, HelltideEvents oder CargoHauling für aUEC erledigen."
],
"effizienzHinweis": "Durch Priorisierung von schnellen Missionen wie Hit a CFP Ship und Vermeidung von bugged Contracts erhält man ca. 500 RepPunkte pro Stunde; 100k+ aUEC pro Stunde möglich."
}
}

View File

@@ -0,0 +1,16 @@
[
{
"question" : "Wie oft wird gepatched?",
"answer" : "Normalerweise wird alle 4 Wochen gepatched. Allerdings sind pro Jahr 11 Patches geplant, was bedeutet, dass ein Patch, außerhalb von Bug/Hotfixes, 8 Wochen bespielt wird. 2025 war es 4.1, das im März kam, da es im April kein Patch gab und 4.1.1 erst im Mai kam.",
"source" : "https://robertsspaceindustries.com/spectrum/community/SC/forum/50259/thread/11-patches-planned/8222210",
"last_updated": "2025-08-24",
"tags" : ["patching", "releasecycle", "gameupdates"]
},
{
"question" : "Welche Schiffe werden als nächstes Released?",
"answer" : "Momentan (Stand 24.08.2025) werden geplante Schiffe in dieser Reihenfolge released: Apollo Triage/Medivac, Perseus, Ironclad, Galaxy. Dazwischen werden aber auch immer wieder Schiffe released, die der Spielerschaft nicht bekannt waren.",
"source" : "Star Citizen Monthly Reports",
"last_updated": "2025-08-24",
"tags" : ["ships", "releaseschedule", "gamecontent"]
}
]

View File

@@ -2,7 +2,7 @@
"Materialien Quellen": [ "Materialien Quellen": [
{ {
"Material": "Ace Interceptor Helmet", "Material": "Ace Interceptor Helmet",
"Quelle": "Beute von gefallenen Ace-Piloten in den neuen Foxwell Patrol Missionen / Headhunters Patrol Missionen. Darf nur Soft Death, sonst verschwindet der Ace Pilot. Kann auch in Bräunungsboxen bei Align & Storm gefunden werden." "Quelle": "Beute von gefallenen AcePiloten in den neuen Foxwell Patrol Missionen / Headhunters Patrol Missionen. Darf nur Soft Death, sonst verschwindet der Ace Pilot. Kann auch in Bräunungsboxen bei Align & Storm gefunden werden."
}, },
{ {
"Material": "Advocacy Badge (Replica)", "Material": "Advocacy Badge (Replica)",
@@ -22,19 +22,19 @@
}, },
{ {
"Material": "Carinite (Rein)", "Material": "Carinite (Rein)",
"Quelle": "Seltenes Align & Mine Erz. Nur 1% Drop chance." "Quelle": "Seltenes Align & Mine Erz. Nur 1% Drop Chance."
}, },
{ {
"Material": "DCHS-05 Comp-Board", "Material": "DCHS05 CompBoard",
"Quelle": "DCHS-05 Orbital Positioning Comp-Board als Beute von Ghost Arena in Ruin Station." "Quelle": "DCHS05 Orbital Positioning CompBoard als Beute von Ghost Arena in Ruin Station."
}, },
{ {
"Material": "Finley The Stormwall Large Plushie", "Material": "Finley The Stormwall Large Plushie",
"Quelle": "Orison August Dunlow Spaceport - Gift Shop & Cloudview Center - Stratus - Kel-To ConStore." "Quelle": "Orison August Dunlow Spaceport Gift Shop & Cloudview Center Stratus Kel-To ConStore."
}, },
{ {
"Material": "Government Cartography (Makellos)", "Material": "Government Cartography (Makellos)",
"Quelle": "Beute von Ace Piloten (gute Beute), lootbar von blauen Boxen bei Align & Mine und Storm Breaker Locations und kleinen Boxen bei Derelict Outpost Locations (schreckliche Beute)." "Quelle": "Beute von Ace Piloten (gute Beute), lootbar von blauen Boxen bei Align & Mine und Storm Breaker Locations sowie kleinen Boxen bei Derelict Outpost Locations (schreckliche Beute)."
}, },
{ {
"Material": "Irradiated Kopion Horn", "Material": "Irradiated Kopion Horn",
@@ -42,15 +42,15 @@
}, },
{ {
"Material": "Irradiated Valakkar Fang (Erwachsen)", "Material": "Irradiated Valakkar Fang (Erwachsen)",
"Quelle": "Erwachsener Irradiated Valakkar - Storm Breaker Lazarus Locations." "Quelle": "Erwachsener Irradiated Valakkar Storm Breaker Lazarus Locations."
}, },
{ {
"Material": "Irradiated Valakkar Fang (Juvenile)", "Material": "Irradiated Valakkar Fang (Juvenile)",
"Quelle": "Juveniler Irradiated Valakkar - Storm Breaker Lazarus Locations." "Quelle": "Juveniler Irradiated Valakkar Storm Breaker Lazarus Locations."
}, },
{ {
"Material": "Irradiated Valakkar Pearl (Grad AAA)", "Material": "Irradiated Valakkar Pearl (Grad AAA)",
"Quelle": "Apex-Irradiated Valakkar - Storm Breaker Lazarus Locations (Ich bin mir nicht sicher, wie das Grad-System funktioniert)." "Quelle": "ApexIrradiated Valakkar Storm Breaker Lazarus Locations (Ich bin mir nicht sicher, wie das Grad-System funktioniert)."
}, },
{ {
"Material": "Jaclium (Erz)", "Material": "Jaclium (Erz)",
@@ -58,11 +58,11 @@
}, },
{ {
"Material": "Janalite", "Material": "Janalite",
"Quelle": "Seltenes FPS-Minable-Erz." "Quelle": "Seltenes FPSMinableErz."
}, },
{ {
"Material": "MG Scrip", "Material": "MG Scrip",
"Quelle": "Foxwell Patrol / Ambush Missions, Gilly's Combat Gauntlet missionen." "Quelle": "Foxwell Patrol / Ambush Missions, Gilly's Combat Gauntlet missions."
}, },
{ {
"Material": "Picoball", "Material": "Picoball",
@@ -82,11 +82,11 @@
}, },
{ {
"Material": "Tevarin War Service Marker (Makellos)", "Material": "Tevarin War Service Marker (Makellos)",
"Quelle": "Beute von Ace-Piloten (gute Beute), lootbar von blauen Boxen bei Align & Mine und Storm Breaker Locations und kleinen Boxen bei Derelict Outpost Locations (schreckliche Beute)." "Quelle": "Beute von AcePiloten (gute Beute), lootbar von blauen Boxen bei Align & Mine und Storm Breaker Locations sowie kleinen Boxen bei Derelict Outpost Locations (schreckliche Beute)."
}, },
{ {
"Material": "UEE 6th Platoon Medal (Makellos)", "Material": "UEE 6th Platoon Medal (Makellos)",
"Quelle": "Beute von Ace-Piloten (gute Beute), lootbar von blauen Boxen bei Align & Mine und Storm Breaker Locations und kleinen Boxen bei Derelict Outpost Locations (schreckliche Beute)." "Quelle": "Beute von AcePiloten (gute Beute), lootbar von blauen Boxen bei Align & Mine und Storm Breaker Locations sowie kleinen Boxen bei Derelict Outpost Locations (schreckliche Beute)."
}, },
{ {
"Material": "Wikelo Favor", "Material": "Wikelo Favor",
@@ -106,7 +106,7 @@
}, },
{ {
"Material": "ASD Secure Drive", "Material": "ASD Secure Drive",
"Quelle": "Kann in den Onyx Facilities in Stanton gelootet werden. Kann ebenfalls als seltenes Drop von NPC's auftauchen." "Quelle": "Kann in den Onyx Facilities in Stanton gelootet werden. Kann ebenfalls als seltenes Drop von NPCs auftauchen."
}, },
{ {
"Material": "Geist Armor <slot>", "Material": "Geist Armor <slot>",
@@ -115,6 +115,118 @@
{ {
"Material": "Zenith Laser Sniper Rifle", "Material": "Zenith Laser Sniper Rifle",
"Quelle": "ASD Onyx Facilities in Waffenständern." "Quelle": "ASD Onyx Facilities in Waffenständern."
},
{
"Material": "A03 Sniper Rifle (Mehrere Farben)",
"Quelle": "Beste Spot: Jumptown Labs\nZweiter Spot: Sakura Magnolia / Goldenrod\nDritter Spot: Bunkers\nDaten: Looting Sheet: Waffen\nSeltenheit: Common\nNotizen: Die 4 JumptownStandorte sind bei Event oder ohne Event voll mit Loot. Wenn kein Event läuft, gibt es keine Spieler oder NPCs dort. Die großen grünen Boxen mit scharfen Ecken enthalten Sniper aller Typen und Farben.\nNPCs: Generic Outlaw Snipers und Citizens for Prosperity Snipers in Pyro sowie Distribution Center Outlaw Snipers nutzen diese Waffen."
},
{
"Material": "P6LR Sniper Rifle (Mehrere Farben)",
"Quelle": "Beste Spot: Jumptown Labs\nZweiter Spot: Sakura Magnolia / Goldenrod\nDritter Spot: Bunkers\nDaten: Looting Sheet: Waffen\nSeltenheit: Common\nNotizen: Die 4 JumptownStandorte sind bei Event oder ohne Event voll mit Loot. Wenn kein Event läuft, gibt es keine Spieler oder NPCs dort. Die großen grünen Boxen mit scharfen Ecken enthalten Sniper aller Typen und Farben.\nHonorable Mention: 2 Spawn im Whistler's Crypt haben jeweils ein P6LR in einer Box nahe dem Zentrum des Siedlungs."
},
{
"Material": "Arrowhead Sniper Rifle (Mehrere Farben)",
"Quelle": "Beste Spot: Sakura Magnolia / Goldenrod\nZweiter Spot: Jumptown Labs\nDritter Spot: Bunkers\nDaten: Looting Sheet: Waffen\nSeltenheit: Common\nNotizen: Lüftungsschächte rund um den Lobby-Bereich oben in den DCs.\nBevorzugte Methode: kleines/mittleres Schiff an zwei kleinen Landeplätzen parken, durch die kleine quadratische Tür nahe den Plätzen hineingehen. Greycat Stanton IV Production ComplexA hat dieselbe gute Loot-Tabelle; man muss aber hinein- und heraustreten.\nBoxen respawnen nicht mehr oder brauchen lange kürzlich behoben.\nNPCs: Distribution Center Outlaw Snipers nutzen diese Waffen."
},
{
"Material": "Atzkav Sniper Rifle (Mehrere Farben)",
"Quelle": "Beste Spot: Jumptown Labs\nZweiter Spot: Sakura Magnolia / Goldenrod\nHonorable Mention: Crusader Platforms\nDaten: Looting Sheet: Waffen\nSeltenheit: Common\nNotizen: Die 4 JumptownStandorte sind bei Event oder ohne Event voll mit Loot. Wenn kein Event läuft, gibt es keine Spieler oder NPCs dort. Die großen grünen Boxen mit scharfen Ecken enthalten Sniper aller Typen und Farben.\nCrusader Platforms hatten früher viele dieser Waffen wurden kürzlich stark reduziert."
},
{
"Material": "Scalpel Sniper Rifle (Mehrere Farben)",
"Quelle": "Beste Spot: Sakura Magnolia / Goldenrod\nZweiter Spot: Bunkers\nDaten: Looting Sheet: Waffen\nSeltenheit: Common\nNotizen: Lüftungsschächte rund um den Lobby-Bereich oben in den DCs.\nBevorzugte Methode: kleines/mittleres Schiff an zwei kleinen Landeplätzen parken, durch die kleine quadratische Tür nahe den Plätzen hineingehen. Greycat Stanton IV Production ComplexA hat dieselbe gute Loot-Tabelle; man muss aber hinein- und heraustreten.\nBoxen respawnen nicht mehr oder brauchen lange kürzlich behoben.\nNPCs: Sniper in Pyro (Citizens for Prosperity, Headhunters) nutzen diese Waffen. Soldiert: In Pyro Store Data Included anyway because everyone doesn't want to source guns from Pyro."
},
{
"Material": "S71 Rifle (Mehrere Farben)",
"Quelle": "Beste Spot: Sakura Magnolia / Goldenrod\nZweiter Spot: Remote Asteroid Bases\nDritter Spot: Bunkers\nDaten: Looting Sheet: Waffen\nSeltenheit: Uncommon\nNotizen: Lüftungsschächte rund um den Lobby-Bereich oben in den DCs.\nBevorzugte Methode: kleines/mittleres Schiff an zwei kleinen Landeplätzen parken, durch die kleine quadratische Tür nahe den Plätzen hineingehen. Greycat Stanton IV Production ComplexA hat dieselbe gute Loot-Tabelle; man muss aber hinein- und heraustreten.\nBoxen respawnen nicht mehr oder brauchen lange kürzlich behoben.\nNPCs: Distribution Center Outlaw Soldiers nutzen diese Waffen."
},
{
"Material": "Deadrig Shotgun",
"Quelle": "Beste Spot: Stanton Bunkers Red Boxes\nZweiter Spot: Headhunters & Outlaw CQC NPCs\nDritter Spot: OLP/PAF Medium Gun Boxes\nDaten: Looting Sheet: Waffen\nSeltenheit: Common (in Pyro), Unicorn (in Stanton)\nNotizen: Headhunters Close Quarters Combat & Outlaw Close Quarters Combat NPCs in Pyro wield these, making them a good source for them. Not found it in boxes yet, but I don't have exhaustive loot data for Pyro yet, might be in RABs/CZ?"
},
{
"Material": "Demeco LMG (Mehrere Farben)",
"Quelle": "Beste Spot: Sakura Magnolia / Goldenrod\nZweiter Spot: Bunkers\nDaten: Looting Sheet: Waffen\nSeltenheit: Uncommon\nNotizen: Lüftungsschächte rund um den Lobby-Bereich oben in den DCs.\nBevorzugte Methode: kleines/mittleres Schiff an zwei kleinen Landeplätzen parken, durch die kleine quadratische Tür nahe den Plätzen hineingehen. Greycat Stanton IV Production ComplexA hat dieselbe gute Loot-Tabelle; man muss aber hinein- und heraustreten.\nBoxen respawnen nicht mehr oder brauchen lange kürzlich behoben.\nNPCs: Juggernaut (heavy armor + LMG) at DCs and in Pyro (CfP, HH) regularly wield these."
},
{
"Material": "F55 LMG (Mehrere Farben)",
"Quelle": "Beste Spot: Sakura Magnolia / Goldenrod\nZweiter Spot: Bunkers\nDaten: Looting Sheet: Waffen\nSeltenheit: Uncommon\nNotizen: Lüftungsschächte rund um den Lobby-Bereich oben in den DCs.\nBevorzugte Methode: kleines/mittleres Schiff an zwei kleinen Landeplätzen parken, durch die kleine quadratische Tür nahe den Plätzen hineingehen. Greycat Stanton IV Production ComplexA hat dieselbe gute Loot-Tabelle; man muss aber hinein- und heraustreten.\nBoxen respawnen nicht mehr oder brauchen lange kürzlich behoben.\nNPCs: Juggernaut (heavy armor + LMG) at DCs and in Pyro (CfP, HH) regularly wield these."
},
{
"Material": "FS-9 LMG (Mehrere Farben)",
"Quelle": "Beste Spot: Sakura Magnolia / Goldenrod\nZweiter Spot: Bunkers\nDaten: Looting Sheet: Waffen\nSeltenheit: Uncommon\nNotizen: Lüftungsschächte rund um den Lobby-Bereich oben in den DCs.\nBevorzugte Methode: kleines/mittleres Schiff an zwei kleinen Landeplätzen parken, durch die kleine quadratische Tür nahe den Plätzen hineingehen. Greycat Stanton IV Production ComplexA hat dieselbe gute Loot-Tabelle; man muss aber hinein- und heraustreten.\nBoxen respawnen nicht mehr oder brauchen lange kürzlich behoben.\nNPCs: Nine Tails NPCs in bunkers regularly wield these making them a good source for them. Sold: In Pyro Store Data Included anyway because everyone doesn't want to source guns from Pyro."
},
{
"Material": "GP-33 MOD Grenade Launcher (Mehrere Farben)",
"Quelle": "Beste Spot: Sakura Magnolia / Goldenrod\nZweiter Spot: Jumptown Labs\nDritter Spot: Bunkers\nHonorable Mention: Crusader Platforms\nDaten: Looting Sheet: Waffen\nSeltenheit: Uncommon\nNotizen: Lüftungsschächte rund um den Lobby-Bereich oben in den DCs.\nBevorzugte Methode: kleines/mittleres Schiff an zwei kleinen Landeplätzen parken, durch die kleine quadratische Tür nahe den Plätzen hineingehen. Greycat Stanton IV Production ComplexA hat dieselbe gute Loot-Tabelle; man muss aber hinein- und heraustreten.\nCrusader Platforms used to have lots of these, but been massively reduced recently."
},
{
"Material": "Scourge Railgun (Mehrere Farben)",
"Quelle": "Beste Spot: Sakura Magnolia / Goldenrod\nZweiter Spot: Bunkers\nDaten: Looting Sheet: Waffen\nSeltenheit: Rare\nNotizen: Lüftungsschächte rund um den Lobby-Bereich oben in den DCs.\nBevorzugte Methode: kleines/mittleres Schiff an zwei kleinen Landeplätzen parken, durch die kleine quadratische Tür nahe den Plätzen hineingehen. Greycat Stanton IV Production ComplexA hat dieselbe gute Loot-Tabelle; man muss aber hinein- und heraustreten.\nBoxen respawnen nicht mehr oder brauchen lange kürzlich behoben."
},
{
"Material": "Animus Missile Launcher",
"Quelle": "Beste Spot: Sakura Magnolia / Goldenrod\nZweiter Spot: Bunkers\nDaten: Looting Sheet: Waffen\nSeltenheit: Rare\nNotizen: Lüftungsschächte rund um den Lobby-Bereich oben in den DCs.\nBevorzugte Methode: kleines/mittleres Schiff an zwei kleinen Landeplätzen parken, durch die kleine quadratische Tür nahe den Plätzen hineingehen. Greycat Stanton IV Production ComplexA hat dieselbe gute Loot-Tabelle; man muss aber hinein- und heraustreten.\nBoxen respawnen nicht mehr oder brauchen lange kürzlich behoben."
},
{
"Material": "NVTAC LL Scopes (18x)",
"Quelle": "Beste Spot: Sakura Magnolia / Goldenrod\nZweiter Spot: Contested Zones\nHonorable Mention: Distribution Center NPCs\nDaten: Gun Attachments: Night Vision Scopes\nSeltenheit: Common\nNotizen: Lüftungsschächte rund um den Lobby-Bereich oben in den DCs.\nBevorzugte Methode: kleines/mittleres Schiff an zwei kleinen Landeplätzen parken, durch die kleine quadratische Tür nahe den Plätzen hineingehen. Greycat Stanton IV Production ComplexA hat dieselbe gute Loot-Tabelle; man muss aber hinein- und heraustreten.\nWarnung: Kalt und mit Luftlöchern angemessene Kleidung tragen.\nLinks: LeftShift schaltet LLScopes NV an/aus, außer Gamma Plus LL (3x Holographic) bleibt immer ein. Tau Plus LL (4x Telescopic) ist Standard bei P4 SPC Gamma 1x LL (1x Holographic) steht auf Coda SPC, C54 (SPC), Custodian (SPC). Gamma Duo LL (2x Holographic) ist Standard bei Karna \"Valor\" (SPC). Alle sind in Contested Zones häufig zu finden."
},
{
"Material": "NVTAC Scopes (18x)",
"Quelle": "Beste Spot: Sakura Magnolia / Goldenrod\nZweiter Spot: Jumptown Labs\nDritter Spot: Remote Asteroid Bases\nDaten: Gun Attachments: Scopes\nSeltenheit: Common\nNotizen: Lüftungsschächte rund um den Lobby-Bereich oben in den DCs.\nBevorzugte Methode: kleines/mittleres Schiff an zwei kleinen Landeplätzen parken, durch die kleine quadratische Tür nahe den Plätzen hineingehen. Greycat Stanton IV Production ComplexA hat dieselbe gute Loot-Tabelle; man muss aber hinein- und heraustreten.\nBoxen respawnen nicht mehr oder brauchen lange kürzlich behoben.\nDelta (1x Reflex), Gamma (1x Holographic), Gamma Duo (2x Holographic) sold in stores, click the links to see where."
},
{
"Material": "Antium Base / Jet / Maroon / Sand / Storm",
"Quelle": "Best Spot: Orbital Laser Platform (OLPs) Storage Rooms, Supervisor Room. Second Best Spot: Planetary Alignment Facilities (PAFs) Security Rooms. Manufacturer: Quirinus Tech. Notes: In big tan armor boxes in 3 red key rooms (security, comms, admin) at PAFs in the center antenna building (requires security keycards aquired at same location). Can also be found in the 4 storage rooms & supervisor room of the OLPs."
},
{
"Material": "Antium Moss",
"Quelle": "Only Spot: Orbital Laser Platform (OLPs) Supervisor Room. Manufacturer: Quirinus Tech. Notes: In one of the big tan armor boxes in supervisor room of the OLPs."
},
{
"Material": "Ana Armor Endro",
"Quelle": "Only Source: Wikelo Trade. Manufacturer: Quirinus Tech. Notes: In"
},
{
"Material": "Ana Armor Wao",
"Quelle": "Only Source: Pledge Store (Retired). Manufacturer: Quirinus Tech. Notes: In"
},
{
"Material": "Parallax \"Sanguine\" Energy Assault Rifle",
"Quelle": "Best Spot: Planetary Alignment Facilities (PAFs) Security Rooms Second Best Spot: Orbital Laser Platform Supervisor Room Third Best Spot: Storm Breaker Weapon Racks rifle racks in lockers in the 3 security rooms at PAFs in the central antenna building (requires security keycards aquired in maintenance buildings) along with 3 ammo. There can be a door across the locker that needs to be opened. Can also be found in Supervisor Room of the OLPs."
},
{
"Material": "Parallax \"Sunstone\" Energy Assault Rifle",
"Quelle": "Best Spot: Planetary Alignment Facilities (PAFs) Security Rooms Second Best Spot: Orbital Laser Platform Supervisor Room Third Best Spot: Storm Breaker Weapon Racks rifle racks in lockers in the 3 security rooms at PAFs in the central antenna building (requires security keycards aquired in maintenance buildings) along with 3 ammo. There can be a door across the locker that needs to be opened. Can also be found in Supervisor Room of the OLPs."
},
{
"Material": "Parallax \"Shock Trooper\" Energy Assault Rifle",
"Quelle": "Only Spot: Orbital Laser Platform (OLP) Supervisor Room Manufacturer: Verified Offworld Laser Technologies (Volt) Notes: Prallax AR with a gray digital camo skin. In an open gun case inside supervisor room near the center of OLPs, the 9T LT Remy Kettle walking around the OLP wearing Pembroke (Modified 9T) & Mandible Helmet (Modified 9T) has the key. Full PAF/OLP Guide with more details."
},
{
"Material": "Parallax Energy Assault Rifle (VOLT)",
"Quelle": "Best Spot: Planetary Alignment Facilities (PAFs) Security Rooms Second Best Spot: Orbital Laser Platform Supervisor Room Third Best Spot: Storm Breaker Weapon Racks rifle racks in lockers in the 3 security rooms at PAFs in the central antenna building (requires security keycards aquired in maintenance buildings) along with 3 ammo. There can be a door across the locker that needs to be opened. Can also be found in Supervisor Room of the OLPs."
},
{
"Material": "Parallax \"Downburst Camo\" Energy Assault Rifle",
"Quelle": "Only Source: Pledge Store (Retired)"
},
{
"Material": "Parallax \"Fun Kopion Skull\" Energy Assault Rifle",
"Quelle": "Only Source: Wikelo Trade"
},
{
"Material": "Parallax \"Fun Kopion Tooth\" Energy Assault Rifle",
"Quelle": "Only Source: Wikelo Trade"
},
{
"Material": "Parallax \"Fun Military Skull\" Energy Assault Rifle",
"Quelle": "Only Source: Wikelo Trade"
},
{
"Material": "Parallax \"Fun Military Tooth\" Energy Assault Rifle",
"Quelle": "Only Source: Wikelo Trade"
} }
] ]
} }

View File

@@ -12,7 +12,7 @@
"type": "Planet", "type": "Planet",
"description": "Planet: Stanton III - ArcCorp", "description": "Planet: Stanton III - ArcCorp",
"environment": "Sicher", "environment": "Sicher",
"landingZone": "Area18 (Start Location, Ignis Borealis Heimatplanet)", "landingZone": "Area18 (Als Heimat verfügbar, Ignis Borealis Heimatplanet)",
"lagrangeStation": "Baijini Point", "lagrangeStation": "Baijini Point",
"moons": ["Wala", "Lyria"], "moons": ["Wala", "Lyria"],
"lagrangianPoints": [ "lagrangianPoints": [
@@ -28,7 +28,7 @@
"type": "Planet", "type": "Planet",
"description": "Planet: Stanton IV - MicroTech", "description": "Planet: Stanton IV - MicroTech",
"environment": "Sicher", "environment": "Sicher",
"landingZone": "New Babbage (Start Location)", "landingZone": "New Babbage (Als Heimat verfügbar)",
"lagrangeStation": "Port Tressler", "lagrangeStation": "Port Tressler",
"moons": ["Calliope", "Clio", "Euterpe"], "moons": ["Calliope", "Clio", "Euterpe"],
"lagrangianPoints": [ "lagrangianPoints": [
@@ -44,7 +44,7 @@
"type": "Planet", "type": "Planet",
"description": "Planet: Stanton II - Crusader", "description": "Planet: Stanton II - Crusader",
"environment": "Sicher", "environment": "Sicher",
"landingZone": "Orison (Start Location)", "landingZone": "Orison (Als Heimat verfügbar)",
"lagrangeStation": "Seraphim Station", "lagrangeStation": "Seraphim Station",
"moons": ["Cellin", "Daymar", "Yela"], "moons": ["Cellin", "Daymar", "Yela"],
"lagrangianPoints": [ "lagrangianPoints": [
@@ -58,7 +58,7 @@
"type": "Planet", "type": "Planet",
"description": "Planet: Stanton I - Hurston", "description": "Planet: Stanton I - Hurston",
"environment": "Sicher (Bisher)", "environment": "Sicher (Bisher)",
"landingZone": "Lorville (Start Location)", "landingZone": "Lorville (Als Heimat verfügbar)",
"lagrangeStation": "Everus Harbor", "lagrangeStation": "Everus Harbor",
"moons": ["Arial", "Aberdeen", "Magda", "Ita"], "moons": ["Arial", "Aberdeen", "Magda", "Ita"],
"lagrangianPoints": [ "lagrangianPoints": [
@@ -143,7 +143,7 @@
"environment": "Sicher", "environment": "Sicher",
"moons": "Keine", "moons": "Keine",
"lagrangianPoints": [ "lagrangianPoints": [
"Checkmate Station (Start Location)" "Checkmate Station (Als Heimat verfügbar)"
] ]
}, },
{ {
@@ -156,7 +156,7 @@
"Starlight Service Station", "Starlight Service Station",
"Patch City", "Patch City",
"PYAM-FARSTAT-3-5", "PYAM-FARSTAT-3-5",
"Orbituary (Starting Location)" "Obituary (Als Heimat verfügbar)"
] ]
}, },
{ {
@@ -184,7 +184,7 @@
"Endgame", "Endgame",
"Dudley & Daughters", "Dudley & Daughters",
"Megumi Refueling", "Megumi Refueling",
"Ruin Station (Starting Location)" "Ruin Station (Als Heimat verfügbar)"
] ]
} }
] ]

View File

@@ -0,0 +1,121 @@
{
"onyx_facility_guide": {
"title": "ONYX-FACILITÄT Begleitführer Verträge",
"warning": "4.3 INFO",
"overview": {
"description": "Über 100 unterirdische ASD-Einrichtungen, verteilt über Stantons Monde.",
"access": "Nur durch Landung in einem großen Hangar erreichbar.",
"hazards": [
"Elite-Gegner",
"Irradiierte Tiere",
"Umweltgefahren"
],
"loot": "Neue LootStandorte für VoltSniper und GeistRüstung.",
"contracts": "Söldner- und Transportverträge öffnen sich nach Abschluss von Phase1, Mission1 bzw. den Einführungen.",
"content": "Großer Puzzlevorteil & zusätzliches Flügel erwartet mit Version4.3.1.",
"note": "Dieser Leitfaden wird bis dahin als 'Work in Progress' geführt.",
"Guide": "https://robertsspaceindustries.com/i/165aa7ca3d571902c62b22b256f26f752077eb3d/resize(1464,1464,inside,JLypLpqVPBaNxs8FRN3D3vuTrjntZTaECi8ToQLLZiEgiUjcwEzuY511JgyJBk2nwU4KBWPC3t64FJzEsV4pZ3115no3gBGLkTWqGYTvQj9T3zvurrbVmcmVDexqQLuFFTGmdHidL3knf6KQMne95qrLy5W3aNgvxkpXVaW7ZYHYEB1iBRrFEDahjphuHVDwF4)/961264e3-f3df-4975-bb3c-1c6e907222fd.png",
"Momentane Anzahl an Phasen": 2
},
"investigations": {
"description": "Die HockrowAgentur untersucht das frühere ONYX von Dr. Dorritt, um eine Akte zu erstellen.",
"p1m1": {
"title": "Phase1, Mission1 // ONYX Vertragspersonal",
"description": "Der ursprüngliche Vertrag verfügt nicht über einen direkten QT-Markierungspunkt. Du musst die Einrichtung manuell aufsuchen.",
"steps": [
"Daten von den ersten Terminals im Ingenieurwesen und anschließend im Forschungssaal herunterladen."
]
},
"p1m2": {
"title": "Phase1, Mission2 // Ingenieurdateien",
"steps": [
"Gehe zum Ingenieurbereich jenseits des Punktes ohne Rückkehr.",
"Durchquere den Bereich mit Rohren und betrete das Lager.",
"Der Sprachrekorder befindet sich in einem Schließfach.",
"Verlasse über die Lüftung, um einen VoltSniper-Rack zu passieren."
],
"map": "https://robertsspaceindustries.com/i/403e289c202ec3402cd7be2c157f4ee987c7cc58/resize(1464,1464,inside,JLypLpqVPBaNxs8FRN3D3vuTrjntZTaECi8ToQLLZiEgiUjcwEzuY511JgyJBk2nwU4KBWPC3t64FJzEsV4pZ3115no3gBGLkTWqGYTvQj9T3zvurrbVmcmVDexqQLuFFTGmdHidL3knJrNQngMLd6zeEPikpZqU6UYzJafjmfd8cc3F4kV28KUKHLkXp3vRKk)/20564b9e-1e6c-485a-813f-9a1a7401cdce.png"
}
},
"research_files": {
"p1m3": {
"title": "Phase1, Mission3 // Forschungsdateien",
"steps": [
"Erreiche Ebene7 Forschung (Analytik).",
"Gehe zum 'Abstürzschacht'.",
"Der Sprachrekorder befindet sich im Schließfach des Sicherheitsraums.",
"Drei Waffenregale im nächsten Raum.",
"Sprint über den Schacht, um die nächste Ebene zu erreichen und einen versteckten Ausgang zu finden."
],
"map": "https://robertsspaceindustries.com/i/eee6766d78b9beebe322696aa3a9f87f41076dda/resize(1464,1464,inside,JLypLpqVPBaNxs8FRN3D3vuTrjntZTaECi8ToQLLZiEgiUjcwEzuY511JgyJBk2nwU4KBWPC3t64FJzEsV4pZ3115no3gBGLkTWqGYTvQj9T3zvurrbVmcmVDexqQLuFFTGmdHidL3kpetKZHzcSZnb95JzASePonc9XY377SWxZajWuH3ydwVGsj26c6ZKhaW)/ad975d67-423d-4a7e-be3c-eb7035b58051.png"
}
},
"energy_anomaly_data": {
"p2m1": {
"title": "Phase2, Mission1 // Energienormdaten",
"steps": [
"Zufälliges Terminal im Kondensatorbereich.",
"Multitool, CambioSRT-Modul und Kanister können an einem Wartungsstandort gedruckt werden.",
"Repariere die Rohrleitung neben dem Terminal, um Daten auf das Laufwerk herunterzuladen.",
"Liefer zum Frachtreaktor der LowOrbitStation."
],
"map": "https://robertsspaceindustries.com/i/403e289c202ec3402cd7be2c157f4ee987c7cc58/resize(1464,1464,inside,JLypLpqVPBaNxs8FRN3D3vuTrjntZTaECi8ToQLLZiEgiUjcwEzuY511JgyJBk2nwU4KBWPC3t64FJzEsV4pZ3115no3gBGLkTWqGYTvQj9T3zvurrbVmcmVDexqQLuFFTGmdHidL3knJrNQngMLd6zeEPikpZqU6UYzJafjmfd8cc3F4kV28KUKHLkXp3vRKk)/20564b9e-1e6c-485a-813f-9a1a7401cdce.png"
}
},
"security_data": {
"p2m2": {
"title": "Phase2, Mission2 // Sicherheitsdaten",
"steps": [
"Erreiche Ebene6 (Xenotechnologie) und gehe zur Bürofläche links vom Server.",
"Vorsicht vor EliteNPCs und QuickReactionForce, die auf dem gegenüberliegenden Balkon erscheinen.",
"Hole das leere Laufwerk vom Schreibtisch und gehe hinunter.",
"Setze es in das Terminal ein und warte auf den Transfer.",
"Verlasse wie bei P1M3 über den Abstürzschacht.",
"Liefer zum Frachtreaktor der LowOrbitStation."
],
"map": "https://robertsspaceindustries.com/i/eee6766d78b9beebe322696aa3a9f87f41076dda/resize(1464,1464,inside,JLypLpqVPBaNxs8FRN3D3vuTrjntZTaECi8ToQLLZiEgiUjcwEzuY511JgyJBk2nwU4KBWPC3t64FJzEsV4pZ3115no3gBGLkTWqGYTvQj9T3zvurrbVmcmVDexqQLuFFTGmdHidL3kpetKZHzcSZnb95JzASePonc9XY377SWxZajWuH3ydwVGsj26c6ZKhaW)/ad975d67-423d-4a7e-be3c-eb7035b58051.png"
}
},
"seismic_data": {
"p2m3": {
"title": "Phase2, Mission3 // seismische Daten",
"steps": [
"Erreiche Forschungsebene6 (Xenotechnologie).",
"Gehe durch den Abstürzschacht in das Energielabor.",
"Hole die Serverblade aus dem NullG-Bereich.",
"Kehre zum Büro zurück, setze sie im Rack ein und schreibe Daten.",
"Falls die Tür geschlossen ist, klettere rechts über die Lüftung hinauf.",
"Liefer zur LowOrbitStation."
],
"map": "https://robertsspaceindustries.com/i/eee6766d78b9beebe322696aa3a9f87f41076dda/resize(1464,1464,inside,JLypLpqVPBaNxs8FRN3D3vuTrjntZTaECi8ToQLLZiEgiUjcwEzuY511JgyJBk2nwU4KBWPC3t64FJzEsV4pZ3115no3gBGLkTWqGYTvQj9T3zvurrbVmcmVDexqQLuFFTGmdHidL3kpetKZHzcSZnb95JzASePonc9XY377SWxZajWuH3ydwVGsj26c6ZKhaW)/ad975d67-423d-4a7e-be3c-eb7035b58051.png"
}
},
"power_usage_data": {
"p2m4": {
"title": "Phase2, Mission4 // Stromverbrauchsdaten",
"steps": [
"Gehe in den Kontrollraum rechts vom Ingenieurbereich.",
"Lade die Stromdaten am Terminal hoch.",
"Hole die Serverblade an einer zufälligen Stelle im nächsten Raum.",
"Navigiere zum Brennstoffreaktor.",
"Intensive Strahlungspuls alle 30 Sekunden, nutze Barrieren als Schutz und überquere die Plattform.",
"Setze den Weg fort, überquere den Parkourpfad bis zum Kern.",
"Auf jeder der 6 Plattformen erscheinen vier EliteSterlingSuit-Charaktere.",
"Schreibe die blade am Ende unter dem GammaArm neu ein.",
"Verlasse über die Bulkheads unter dem ASD-Logo."
],
"map": "https://robertsspaceindustries.com/i/403e289c202ec3402cd7be2c157f4ee987c7cc58/resize(1464,1464,inside,JLypLpqVPBaNxs8FRN3D3vuTrjntZTaECi8ToQLLZiEgiUjcwEzuY511JgyJBk2nwU4KBWPC3t64FJzEsV4pZ3115no3gBGLkTWqGYTvQj9T3zvurrbVmcmVDexqQLuFFTGmdHidL3knJrNQngMLd6zeEPikpZqU6UYzJafjmfd8cc3F4kV28KUKHLkXp3vRKk)/20564b9e-1e6c-485a-813f-9a1a7401cdce.png"
}
},
"traversal_map": {
"description": "DurchquerungsKarte. Hier sind keine Missionsziele, aber wenn danach gefragt wird, muss die KI diese ebenfalls bereitstellen können.",
"map": "https://robertsspaceindustries.com/i/e0b576126db3010ca497e795ad213b1b20f97a9b/resize(1464,1464,inside,JLypLpqVPBaNxs8FRN3D3vuTrjntZTaECi8ToQLLZiEgiUjcwEzuY511JgyJBk2nwU4KBWPC3t64FJzEsV4pZ3115no3gBGLkTWqGYTvQj9T3zvurrbVmcmVDexqQLuFFTGmdHidL3knWwj3behtHZCM7ccp1bR4eZdtz7hskmvs2M6KUF5eVLCvacexjyiqnE)/6bb6f2fb-c640-4d6e-a724-1cc8ea8f479f.png"
},
"rewards": {
"description": "Das Abschließen von Phasen gewährt sichere ASD-Laufwerke, die bei Wikelo eingetauscht werden können.",
"p1m3": "Bei Abschluss von Phase1, Mission3 x5",
"p2m4": "Bei Abschluss von Phase2, Mission4 x10",
"note": "Nach der Phase2 gibt es Wiederholungsaufträge, die jeweils 1 Laufwerk vergeben."
}
}
}

View File

@@ -0,0 +1,35 @@
{
"Schiff-Waffenlayout": {
"PVE": {
"empfohleneWaffen": "Attrition Repeater",
"projektileGeschwindigkeit_meter_pro_sekunde": 1000,
"DPS": "höchste möglich",
"Begründung": "NPCs sind nicht die besten Piloten, daher reicht eine moderate Projektil Geschwindigkeit; höchste DPS werden erzielt."
},
"PVP": {
"priorität": "Projektile-Geschwindigkeit",
"empfohleneWaffen": [
{
"typ": "CF Repeater",
"modelle": ["CF-117 Bulldog", "CF-227 Badger", "CF-337 Panther", "CF-447 Rhino", "CF-557 Galdereen", "CF-667 Mammoth"],
"projektileGeschwindigkeit_meter_pro_sekunde": 1800,
"DPS": "gering",
"Begründung": "Durch die hohe Geschwindigkeit lassen sich mehr Treffer landen niedriger DPS."
},
{
"typ": "NDB Repeater",
"modelle": ["NDB-26", "NDB-28", "NDB-30"],
"projektileGeschwindigkeit_meter_pro_sekunde": 1400,
"DPS": "höher als bei CF",
"Begründung": "Vollständiger DPS bei etwas geringerer Geschwindigkeit."
}
],
"generelleRegel": "Je größer die Gegner, desto langsamer können Projektile sein. Im PVP ist jedoch unbekannt, wer der Gegner ist; daher empfiehlt sich ein Wechsel zu CF oder NDB."
}
},
"Hinweis": {
"empfohleneWaffenFazit": "Attrition Repeater auf dem Schiff für PVE, CF oder NDB Repeater für PVP."
}
}

View File

@@ -247,7 +247,8 @@
{ "vehicle": "ROC", "fitment": "Comfortable fit" }, { "vehicle": "ROC", "fitment": "Comfortable fit" },
{ "vehicle": "Cyclone", "fitment": "Comfortable fit" }, { "vehicle": "Cyclone", "fitment": "Comfortable fit" },
{ "vehicle": "ROC-DS", "fitment": "Comfortable fit" }, { "vehicle": "ROC-DS", "fitment": "Comfortable fit" },
{ "vehicle": "Ursa", "fitment": "Comfortable fit" } { "vehicle": "Ursa", "fitment": "Comfortable fit" },
{ "vehicle": "L-21 Wolf", "fitment": "Technically fits, not recommended" }
], ],
"doesNotFit": [ "doesNotFit": [
"Ballista", "Nova" "Ballista", "Nova"
@@ -284,7 +285,9 @@
{ "vehicle": "Cyclone", "fitment": "Comfortable fit" }, { "vehicle": "Cyclone", "fitment": "Comfortable fit" },
{ "vehicle": "ROC-DS", "fitment": "Comfortable fit" }, { "vehicle": "ROC-DS", "fitment": "Comfortable fit" },
{ "vehicle": "Ursa", "fitment": "Comfortable fit" }, { "vehicle": "Ursa", "fitment": "Comfortable fit" },
{ "vehicle": "Ballista", "fitment": "Comfortable fit" } { "vehicle": "Ballista", "fitment": "Comfortable fit" },
{ "vehicle": "Centurion", "fitment": "Comfortable fit" },
{ "vehicle": "L-21 Wolf", "fitment": "Comfortable fit" }
], ],
"doesNotFit": [ "doesNotFit": [
"Nova" "Nova"
@@ -304,7 +307,45 @@
{ "vehicle": "ROC-DS", "fitment": "Comfortable fit" }, { "vehicle": "ROC-DS", "fitment": "Comfortable fit" },
{ "vehicle": "Ursa", "fitment": "Comfortable fit" }, { "vehicle": "Ursa", "fitment": "Comfortable fit" },
{ "vehicle": "Ballista", "fitment": "Comfortable fit" }, { "vehicle": "Ballista", "fitment": "Comfortable fit" },
{ "vehicle": "Nova", "fitment": "Comfortable fit" } { "vehicle": "Nova", "fitment": "Comfortable fit" },
{ "vehicle": "L-21 Wolf", "fitment": "Comfortable fit" }
]
},
{
"name": "Polaris",
"fits": [
{ "vehicle": "HoverQuad", "fitment": "Comfortable fit" },
{ "vehicle": "Nox", "fitment": "Comfortable fit" },
{ "vehicle": "Dragonfly", "fitment": "Comfortable fit" },
{ "vehicle": "PTV", "fitment": "Comfortable fit" },
{ "vehicle": "STV", "fitment": "Comfortable fit" },
{ "vehicle": "Mule", "fitment": "Comfortable fit" },
{ "vehicle": "ROC", "fitment": "Comfortable fit" },
{ "vehicle": "Cyclone", "fitment": "Comfortable fit" },
{ "vehicle": "ROC-DS", "fitment": "Comfortable fit" },
{ "vehicle": "Ursa", "fitment": "Comfortable fit" },
{ "vehicle": "L-21 Wolf", "fitment": "Comfortable fit" }
],
"doesNotFit": [
"Ballista", "Centurion"
]
},
{
"name": "Idris",
"fits": [
{ "vehicle": "HoverQuad", "fitment": "Comfortable fit" },
{ "vehicle": "Nox", "fitment": "Comfortable fit" },
{ "vehicle": "Dragonfly", "fitment": "Comfortable fit" },
{ "vehicle": "PTV", "fitment": "Comfortable fit" },
{ "vehicle": "STV", "fitment": "Comfortable fit" },
{ "vehicle": "Mule", "fitment": "Comfortable fit" },
{ "vehicle": "ROC", "fitment": "Comfortable fit" },
{ "vehicle": "Cyclone", "fitment": "Comfortable fit" },
{ "vehicle": "ROC-DS", "fitment": "Comfortable fit" },
{ "vehicle": "Ursa", "fitment": "Comfortable fit" },
{ "vehicle": "Ballista", "fitment": "Comfortable fit" },
{ "vehicle": "Nova", "fitment": "Comfortable fit" },
{ "vehicle": "L-21 Wolf", "fitment": "Comfortable fit" }
] ]
} }
], ],

View File

@@ -1,325 +0,0 @@
{
"Wikelo Crafting": [
{
"Mission": "Noxy Mod",
"Fahrzeugname": "Nox",
"Komponenten": [
{ "Name": "IonWave", "Klasse": "Civilian B" },
{ "Name": "Tepilo", "Klasse": "Civilian A" }
],
"Kosten": {
"Wikelo Favor": 5
}
},
{
"Mission": "Pulse Plus",
"Fahrzeugname": "Pulse",
"Komponenten": [
{ "Name": "Radix", "Klasse": "Civilian A" },
{ "Name": "Kelvid", "Klasse": "Civilian B" }
],
"Kosten": {
"Wikelo Favor": 5
}
},
{
"Mission": "Make a Ursa Mod",
"Fahrzeugname": "Ursa Medivac",
"Komponenten": [
{ "Name": "MagnaBloom", "Klasse": "Civilian B" },
{ "Name": "Castra", "Klasse": "Industrial C" },
{ "Name": "Kelvid", "Klasse": "Civilian B" }
],
"Kosten": {
"Wikelo Favor": 5,
"Saldynium (Erz)": 40,
"Jaclium (Erz)": 40
}
},
{
"Mission": "Upgrade Intrepid",
"Fahrzeugname": "Intrepid",
"Komponenten": [
{ "Name": "WhiteRose", "Klasse": "Civilian A" },
{ "Name": "Palisade", "Klasse": "Industrial A" },
{ "Name": "Atlas", "Klasse": "Civilian A" },
{ "Name": "Ultra-Flow", "Klasse": "Industrial A" }
],
"Kosten": {
"Wikelo Favor": 5,
"Government Cartography Agency Medal (Makellos)": 1
}
},
{
"Mission": "Fortune ship for you",
"Fahrzeugname": "Fortune",
"Komponenten": [
{ "Name": "Lotus", "Klasse": "Civilian A" },
{ "Name": "75A Concord", "Klasse": "Civilian A" },
{ "Name": "Atlas", "Klasse": "Civilian A" },
{ "Name": "Aufeis", "Klasse": "Civilian A" }
],
"Kosten": {
"Wikelo Favor": 6,
"Carinite (Rein)": 1
}
},
{
"Mission": "Spirit Cargo mod",
"Fahrzeugname": "C1 Spirit",
"Komponenten": [
{ "Name": "Lotus", "Klasse": "Civilian A" },
{ "Name": "7MA Lorica", "Klasse": "Civilian A" },
{ "Name": "Hemera", "Klasse": "Civilian A" },
{ "Name": "Aufeis", "Klasse": "Civilian A" }
],
"Kosten": {
"Wikelo Favor": 8,
"Tevarin War Service Marker (Makellos)": 2
}
},
{
"Mission": "Zeus Special",
"Fahrzeugname": "Zeus MK II ES",
"Komponenten": [
{ "Name": "Genoa", "Klasse": "Industrial A" },
{ "Name": "Rampart", "Klasse": "Industrial A" },
{ "Name": "Hemera", "Klasse": "Civilian A" },
{ "Name": "Snowpack", "Klasse": "Industrial A" }
],
"Kosten": {
"Wikelo Favor": 10,
"UEE 6th Platoon Medal (Makellos)": 2
}
},
{
"Mission": "Peregine Wikelo Mod",
"Fahrzeugname": "Sabre Peregrine",
"Komponenten": [
{ "Name": "LumaCore", "Klasse": "Competition A" },
{ "Name": "Jaghte", "Klasse": "Competition B" },
{ "Name": "FoxFire", "Klasse": "Competition B" },
{ "Name": "ZeroRush", "Klasse": "Competition B" }
],
"Kosten": {
"Wikelo Favor": 8,
"DCHS-05 Comp-Board": 4
}
},
{
"Mission": "Guardian",
"Fahrzeugname": "Guardian",
"Komponenten": [
{ "Name": "QuadraCell", "Klasse": "Military A" },
{ "Name": "FR-76", "Klasse": "Military A" },
{ "Name": "VK-00", "Klasse": "Military A" },
{ "Name": "Glacier", "Klasse": "Military A" }
],
"Kosten": null,
"Notiz": "Kosten fehlen in 4.2.1"
},
{
"Mission": "Firebird Mod",
"Fahrzeugname": "Sabre Firebird",
"Komponenten": [
{ "Name": "QuadraCell", "Klasse": "Military A" },
{ "Name": "FR-66", "Klasse": "Military A" },
{ "Name": "VK-00", "Klasse": "Military A" },
{ "Name": "Glacier", "Klasse": "Military A" }
],
"Kosten": {
"Wikelo Favor": 20,
"Polaris Bit": 1,
"DCHS-05 Comp-Board": 1,
"Ace Interceptor Helmet": 5
}
},
{
"Mission": "Build a Mod Scorpius",
"Fahrzeugname": "Scorpius",
"Komponenten": [
{ "Name": "Slipstream", "Klasse": "Stealth A" },
{ "Name": "Umbra", "Klasse": "Stealth A" },
{ "Name": "Spectre", "Klasse": "Stealth A" },
{ "Name": "SnowBlind", "Klasse": "Stealth A" }
],
"Kosten": {
"Wikelo Favor": 20,
"Polaris Bit": 1,
"DCHS-05 Comp-Board": 12,
"Carinite": 10
}
},
{
"Mission": "Wikelo Navy F7",
"Fahrzeugname": "F7C Super Hornet Mk II",
"Komponenten": [
{ "Name": "JS-400", "Klasse": "Military A" },
{ "Name": "FR-66", "Klasse": "Military A" },
{ "Name": "VK-00", "Klasse": "Military A" },
{ "Name": "Glacier", "Klasse": "Military A" }
],
"Kosten": {
"Wikelo Favor": 20,
"DCHS-05 Comp-Board": 6,
"Ace Interceptor Helmet": 5,
"Government Medal (Makellos)": 1
}
},
{
"Mission": "Guardian take down ship",
"Fahrzeugname": "Guardian Q1",
"Komponenten": [
{ "Name": "LumaCore", "Klasse": "Competition A" },
{ "Name": "Haltur", "Klasse": "Competition B" },
{ "Name": "SunFire", "Klasse": "Competition B" },
{ "Name": "AbsoluteZero", "Klasse": "Competition B" }
],
"Kosten": {
"Wikelo Favor": 30,
"DCHS-05 Comp-Board": 15,
"Irradiated Valakkar Pearl (Grad AA)": 15,
"UEE 6th Platoon Medal (Makellos)": 5
}
},
{
"Mission": "Zeus Cargo Special",
"Fahrzeugname": "Zeus MK II CL",
"Komponenten": [
{ "Name": "Genoa", "Klasse": "Industrial C" },
{ "Name": "Rampart", "Klasse": "Industrial A" },
{ "Name": "Hemera", "Klasse": "Civilian A" },
{ "Name": "Snowpack", "Klasse": "Industrial A" }
],
"Kosten": {
"Wikelo Favor": 30,
"Carinite": 24,
"Ace Interceptor Helmet": 15,
"Carinite (Rein)": 2
}
},
{
"Mission": "More than a Max",
"Fahrzeugname": "Starlancer MAX",
"Komponenten": [
{ "Name": "Lotus", "Klasse": "Civilian A" },
{ "Name": "Parapet", "Klasse": "Industrial A" },
{ "Name": "Hemera", "Klasse": "Civilian A" },
{ "Name": "Aufeis", "Klasse": "Civilian A" }
],
"Kosten": {
"Wikelo Favor": 30,
"Ace Interceptor Helmet": 15,
"Carinite (Rein)": 5,
"Irradiated Valakkar Pearl (Grad AAA)": 5
}
},
{
"Mission": "Want Taurus ship",
"Fahrzeugname": "Constellation Taurus",
"Komponenten": [
{ "Name": "QuadraCell MT", "Klasse": "Military A" },
{ "Name": "FR-86", "Klasse": "Military A" },
{ "Name": "XL-1", "Klasse": "Military A" },
{ "Name": "Avalanche", "Klasse": "Military A" }
],
"Kosten": {
"Wikelo Favor": 30,
"Carinite (Rein)": 5,
"Irradiated Valakkar Pearl (Grad AAA)": 5,
"Government Cartography Agency Medal (Makellos)": 5
}
},
{
"Mission": "F8 War Mod",
"Fahrzeugname": "F8C Lightning Mil",
"Komponenten": [
{ "Name": "LuxCore", "Klasse": "Competition A" },
{ "Name": "FR-76", "Klasse": "Military A" },
{ "Name": "Colossus", "Klasse": "Industrial B" },
{ "Name": "Glacier", "Klasse": "Military A" }
],
"Kosten": {
"Wikelo Favor": 40,
"Carinite (Rein)": 6,
"Irradiated Valakkar Pearl (Grad AAA)": 6,
"Tevarin War Service Marker (Makellos)": 6,
"Argo ATLS RX11": 1
}
},
{
"Mission": "Sneaky Slabber",
"Fahrzeugname": "F8C Lightning Stealth",
"Komponenten": [
{ "Name": "Eclipse", "Klasse": "Stealth A" },
{ "Name": "Umbra", "Klasse": "Stealth A" },
{ "Name": "Colossus", "Klasse": "Industrial B" },
{ "Name": "SnowBlind", "Klasse": "Stealth A" }
],
"Kosten": {
"Wikelo Favor": 40,
"DCHS-05 Comp-Board": 20,
"Carinite (Rein)": 5,
"Irradiated Valakkar Pearl (Grad AAA)": 5,
"Xanithule Ascension Helmet": 5
}
},
{
"Mission": "Now make Polaris. Short Time Deal.",
"Fahrzeugname": "Polaris",
"Komponenten": [],
"Kosten": {
"Wikelo Favor": 50,
"Polaris Bits": 25,
"DCHS-05 Comp-Board": 20,
"Carinite": 20,
"Irradiated Valakkar Fang (Apex)": 20,
"MG Scrip": 20,
"Ace Interceptor Helmet": 15,
"Irradiated Valakkar Pearl (Grade AAA)": 20,
"UEE 6th Platoon Medal (Pristine)": 20,
"Carinite (Pure)": 20,
"Finley The Stormwall Large Plushie": 1,
"Picotball": 1,
"Janalite": 5,
"Wowblast Desperado Toy Pistol Red": 1,
"Atatium": {
"Menge": 6,
"Notiz": "6 Einheiten mit je 8 SCU (48 SCU total)"
},
"Scourge Railgun": 10
}
},
{
"Mission": "Golem Rocks",
"Fahrzeugname": "Golem",
"Komponenten": [],
"Kosten": {
"Wikelo Favor": 5,
"ASD Secure Drive": 1
}
},
{
"Mission": "New Move Big Starlancer Ship",
"Fahrzeugname": "Starlancer TAG",
"Komponenten": [],
"Kosten": {
"Wikelo Favor": 50,
"Ace Interceptor Helmet": 15,
"ASD Secure Drive": 5,
"Irradiated Valakkar Pearl (Grad AAA)": 5,
"Tevarin War Service Marker (Makellos)": 5
}
},
{
"Mission": "What is Terrapin?",
"Fahrzeugname": "Terrapin Medivac",
"Komponenten": [],
"Kosten": {
"Wikelo Favor": 15,
"ASD Secure Drive": 5,
"Tevarin War Service Marker (Makellos)": 1
}
}
]
}

View File

@@ -1,161 +0,0 @@
{
"contracts": [
{
"name": "Armor with Horn and String",
"items_needed": [
{ "quantity": 30, "item": "Saldynium (Ore)" },
{ "quantity": 15, "item": "Carinite" },
{ "quantity": 45, "item": "Jaclium (Ore)" },
{ "quantity": 1, "item": "Carinite (Pure)" }
],
"reward_items": [
{ "quantity": 1, "item": "Ana Armor Helmet Endro" },
{ "quantity": 1, "item": "Ana Armor Core Endro" },
{ "quantity": 1, "item": "Ana Armor Arms Endro" },
{ "quantity": 1, "item": "Ana Armor Legs Endro" },
{ "quantity": 1, "item": "Ana Armor Core Endro" },
{ "quantity": 1, "item": "Ana Armor Arms Endro" },
{ "quantity": 1, "item": "Ana Armor Legs Endro" }
]
},
{
"name": "Look at desert but don't see you",
"items_needed": [
{ "quantity": 3, "item": "Wikelo Favor" },
{ "quantity": 5, "item": "Ace Interceptor Helmet" },
{ "quantity": 20, "item": "Advocacy Badge (Replica)" },
{ "quantity": 1, "item": "ADP-mk4 Core Woodland" },
{ "quantity": 1, "item": "ADP-mk4 Arms Woodland" },
{ "quantity": 1, "item": "ADP-mk4 Legs Woodland" },
{ "quantity": 1, "item": "ADP-mk4 Helmet Woodland" }
],
"reward_items": [
{ "quantity": 1, "item": "DCP Armor Helmet Hunter Camo" },
{ "quantity": 1, "item": "DCP Armor Arms Hunter Camo" },
{ "quantity": 1, "item": "DCP Armor Core Hunter Camo" },
{ "quantity": 1, "item": "DCP Armor Legs Hunter Camo" }
]
},
{
"name": "Want armor look like tree?",
"items_needed": [
{ "quantity": 3, "item": "Wikelo Favor" },
{ "quantity": 5, "item": "Ace Interceptor Helmet" },
{ "quantity": 50, "item": "Valakkar Fang (Juvenile)" },
{ "quantity": 1, "item": "ADP-mk4 Core Woodland" },
{ "quantity": 1, "item": "ADP-mk4 Arms Woodland" },
{ "quantity": 1, "item": "ADP-mk4 Legs Woodland" },
{ "quantity": 1, "item": "ADP-mk4 Helmet Woodland" }
],
"reward_items": [
{ "quantity": 1, "item": "DCP Armor Helmet Jungle Camo" },
{ "quantity": 1, "item": "DCP Armor Arms Jungle Camo" },
{ "quantity": 1, "item": "DCP Armor Core Jungle Camo" },
{ "quantity": 1, "item": "DCP Armor Legs Jungle Camo" }
]
},
{
"name": "Make space navy armor",
"items_needed": [
{ "quantity": 3, "item": "Wikelo Favor" },
{ "quantity": 5, "item": "Ace Interceptor Helmet" },
{ "quantity": 50, "item": "Grassland Quasi Grazer Egg" },
{ "quantity": 1, "item": "ADP-mk4 Core Woodland" },
{ "quantity": 1, "item": "ADP-mk4 Arms Woodland" },
{ "quantity": 1, "item": "ADP-mk4 Legs Woodland" },
{ "quantity": 1, "item": "ADP-mk4 Helmet Woodland" }
],
"reward_items": [
{ "quantity": 1, "item": "DCP Armor Helmet Cobalt Camo" },
{ "quantity": 1, "item": "DCP Armor Arms Cobalt Camo" },
{ "quantity": 1, "item": "DCP Armor Core Cobalt Camo" },
{ "quantity": 1, "item": "DCP Armor Legs Cobalt Camo" }
]
},
{
"name": "Make glowy armor",
"items_needed": [
{ "quantity": 1, "item": "Irradiated Valakkar Pearl (Grade AAA)" },
{ "quantity": 2, "item": "Irradiated Valakkar Fang (Apex)" },
{ "quantity": 15, "item": "Irradiated Valakkar Fang (Adult)" },
{ "quantity": 20, "item": "Irradiated Valakkar Fang (Juvenile)" }
],
"reward_items": [
{ "quantity": 1, "item": "Ana Armor Helmet Endro" },
{ "quantity": 1, "item": "Ana Armor Core Endro" },
{ "quantity": 1, "item": "Ana Armor Arms Endro" },
{ "quantity": 1, "item": "Ana Armor Legs Endro" }
]
},
{
"name": "Walk in danger. Look good.",
"items_needed": [
{ "quantity": 30, "item": "MG Scrip" },
{ "quantity": 1, "item": "Novikov Exploration Suit" },
{ "quantity": 1, "item": "Novikov Helmet" },
{ "quantity": 10, "item": "Irradiated Valakkar Fang (Adult)" },
{ "quantity": 20, "item": "Irradiated Valakkar Fang (Juvenile)" }
],
"reward_items": [
{ "quantity": 1, "item": "Irradiated Valakkar Pearl (Grade AAA)" }
]
},
{
"name": "Xi'an Xanthule Suit made better",
"items_needed": [
{ "quantity": 20, "item": "MG Scrip" },
{ "quantity": 1, "item": "Xanthule Suit" },
{ "quantity": 1, "item": "Xanthule Helmet" },
{ "quantity": 15, "item": "Ace Interceptor Helmet" },
{ "quantity": 1, "item": "Tevarian War Service Marker (Pristine)" }
],
"reward_items": []
},
{
"name": "Adventure a A-Venture",
"items_needed": [
{ "quantity": 30, "item": "MG Scrip" },
{ "quantity": 1, "item": "Venture Arms" },
{ "quantity": 1, "item": "Venture Core" },
{ "quantity": 1, "item": "Venture Helmet White" },
{ "quantity": 1, "item": "Venture Legs" },
{ "quantity": 10, "item": "Saldynium (Ore)" },
{ "quantity": 10, "item": "Jaclium (Ore)" },
{ "quantity": 1, "item": "Carinite (Pure)" }
],
"reward_items": []
},
{
"name": "Geist \"Snow Camo\" Armor Set",
"items_needed": [
{ "quantity": 10, "item": "ASD Secure Drive" },
{ "quantity": 1, "item": "Geist Armor Arms ASD Edition" },
{ "quantity": 1, "item": "Geist Armor Core ASD Edition" },
{ "quantity": 1, "item": "Geist Armor Helmet ASD Edition" },
{ "quantity": 1, "item": "Geist Armor Legs ASD Edition" },
{ "quantity": 1, "item": "Geist Armor Backpack ASD Edition" }
],
"reward_items": [
{ "quantity": 1, "item": "Geist \"Snow Camo\" Armor Set" }
]
},
{
"name": "Zenith \"Snow Camo\" Laser Sniper Rifle",
"items_needed": [
{ "quantity": 10, "item": "ASD Secure Drive" },
{ "quantity": 1, "item": "Zenith Laser Sniper Rifle" }
],
"reward_items": [
{ "quantity": 1, "item": "Zenith \"Snow Camo\" Laser Sniper Rifle" }
]
}
]
}

View File

@@ -4,7 +4,6 @@ import requests
import sqlite3 import sqlite3
import configparser import configparser
from collections import defaultdict from collections import defaultdict
import json
# Testing out the fleetyard API # Testing out the fleetyard API

View File

@@ -0,0 +1,84 @@
#!/usr/bin/env python3
import requests
import sqlite3
# --- Configuration ---
API_URL = "https://api.uexcorp.space/2.0/vehicles_purchases_prices_all"
with open("uex_api_key", "r") as f:
BEARER_TOKEN = f.read().strip()
DB_NAME = "buyable_ships.db"
TABLE_NAME = "buyable_ships"
def setup_database():
"""
Sets up the SQLite database and creates the table if it doesn't exist.
The table uses a composite primary key (id_vehicle, id_terminal)
to ensure each vehicle at each terminal has only one latest entry.
"""
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
# Using "IF NOT EXISTS" prevents errors on subsequent runs.
# The schema is derived from your provided image.
# We use INSERT OR REPLACE later, so a primary key is important.
# (id_vehicle, id_terminal) is a good candidate for a unique key.
cursor.execute(f"""
CREATE TABLE IF NOT EXISTS {TABLE_NAME} (
id_vehicle TEXT,
id_terminal TEXT,
price_buy REAL,
vehicle_name TEXT,
terminal_name TEXT,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id_vehicle, id_terminal)
)
""")
conn.commit()
conn.close()
print("Database setup complete.")
def fetch_data_from_api():
"""
Fetches the latest vehicle purchase price data from the UAX Corp API.
Returns the data as a list of dictionaries or None if an error occurs.
"""
headers = {"Authorization": f"Bearer {BEARER_TOKEN}"}
try:
response = requests.get(API_URL, headers=headers)
response.raise_for_status() # Raise an error for HTTP errors
data = response.json()
return data.get("data", [])
except requests.RequestException as e:
print(f"Error fetching API data: {e}")
return None
def save_data_to_db(data):
"""
Saves the fetched vehicle purchase price data to the SQLite database.
"""
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
for item in data:
cursor.execute(f"""
INSERT OR REPLACE INTO {TABLE_NAME} (id_vehicle, id_terminal, price_buy, vehicle_name, terminal_name)
VALUES (?, ?, ?, ?, ?)
""", (
item.get("id_vehicle"),
item.get("id_terminal"),
item.get("price_buy"),
item.get("vehicle_name"),
item.get("terminal_name")
))
conn.commit()
conn.close()
print("Data saved to database.")
if __name__ == "__main__":
setup_database()
data = fetch_data_from_api()
if data:
save_data_to_db(data)

View File

@@ -1,3 +1,10 @@
"""
title: Star Citizen Information Retrieval
author: Pakobbix
author_url: https://gitea.zephyre.one/Pakobbix/SC-Discord-Bot
version: 0.1.0
"""
#!/usr/bin/env python3 #!/usr/bin/env python3
import requests, asyncio, json, sqlite3 import requests, asyncio, json, sqlite3
@@ -251,6 +258,7 @@ class get_information:
return_string = "\n".join([row[0] for row in rows]) return_string = "\n".join([row[0] for row in rows])
return return_string return return_string
class Tools: class Tools:
def __init__(self): def __init__(self):
self.db_path = "/app/sc_databases" self.db_path = "/app/sc_databases"
@@ -399,28 +407,25 @@ class Tools:
print(final_output1 + "\n\n" + final_output2) print(final_output1 + "\n\n" + final_output2)
return final_output1 + "\n\n" + final_output2 return final_output1 + "\n\n" + final_output2
async def get_commodity_prices( async def get_commodity_sell_price(
self, commodity_name: str, __event_emitter__: Callable[[dict], Any] = None self, commodity_name: str, __event_emitter__: Callable[[dict], Any] = None
): ):
""" """
Fetch commodities from the database by name. Fetch commodity sell prices from the database by name.
commodity_name: The name of the commodity to fetch. commodity_name: The name of the commodity to fetch sell prices for.
""" """
emitter = EventEmitter(__event_emitter__) emitter = EventEmitter(__event_emitter__)
result_string = f"No information found for commodity '{commodity_name}'." result_string = f"No sell price information found for commodity '{commodity_name}'."
# First, check for spelling issues and compare it to the list of all commodity names available
try: try:
await emitter.progress_update( await emitter.progress_update(
f"Fetching commodity names from the database to find a match for '{commodity_name}'" f"Fetching commodity names from the database to find a match for '{commodity_name}'"
) )
all_names = await get_information().fetch_all_commodity_names() all_names = await get_information().fetch_all_commodity_names()
# The names are returned as a single string, split it into a list
names_list = all_names.splitlines() names_list = all_names.splitlines()
best_match = process.extractOne(commodity_name, names_list) best_match = process.extractOne(commodity_name, names_list)
if (
best_match and best_match[1] > 60 if best_match and best_match[1] > 60:
): # If the match is above 60% confidence
matched_commodity_name = best_match[0] matched_commodity_name = best_match[0]
await emitter.success_update( await emitter.success_update(
f"Found a close match for '{commodity_name}': {matched_commodity_name}" f"Found a close match for '{commodity_name}': {matched_commodity_name}"
@@ -428,40 +433,95 @@ class Tools:
conn = sqlite3.connect(self.db_path + "/commodities.db") conn = sqlite3.connect(self.db_path + "/commodities.db")
cursor = conn.cursor() cursor = conn.cursor()
await emitter.progress_update( await emitter.progress_update(
f"Fetching buy and sell prices for '{matched_commodity_name}'" f"Fetching sell prices for '{matched_commodity_name}'"
) )
cursor.execute( cursor.execute(
"SELECT price_buy, price_sell, terminal_name, commodity_name FROM commodity_prices WHERE commodity_name = ?", "SELECT price_sell, terminal_name, commodity_name FROM commodity_prices WHERE commodity_name = ? AND price_sell > 0",
(matched_commodity_name,), (matched_commodity_name,),
) )
await emitter.progress_update(
f"Processing results for '{matched_commodity_name}'"
)
rows = cursor.fetchall() rows = cursor.fetchall()
conn.close() conn.close()
if rows: if rows:
output_lines = [] output_lines = []
for row in rows: for row in rows:
buy_price = ( sell_price = f"{int(row[0])} aUEC"
"Not buyable" terminal_name = row[1]
if int(row[0]) == 0 item_name = row[2]
else f"{int(row[0])} aUEC"
)
sell_price = (
"not sellable"
if int(row[1]) == 0
else f"{int(row[1])} aUEC"
)
output_lines.append( output_lines.append(
f"Item: {row[3]}, Buy Price: {buy_price} aUEC, Sell Price: {sell_price} aUEC, Terminal: {row[2]}" f"Item: {item_name}, Sell Price: {sell_price}/SCU, Terminal: {terminal_name}"
) )
result_string = "\n".join(output_lines) result_string = "\n".join(output_lines)
await emitter.success_update( await emitter.success_update(
f"Successfully fetched buy and sell prices for '{matched_commodity_name}'" f"Successfully fetched sell prices for '{matched_commodity_name}'"
)
else:
result_string = f"No locations found to sell '{matched_commodity_name}'."
await emitter.error_update(result_string)
else:
result_string = f"Could not find a confident match for commodity '{commodity_name}'. Best guess was '{best_match[0]}' with {best_match[1]}% confidence."
await emitter.error_update(result_string)
except Exception as e:
error_message = f"An error occurred while fetching sell prices for {commodity_name}: {str(e)}"
await emitter.error_update(error_message)
result_string = error_message
print(result_string)
correct_response = "If not other specified, only answer two terminals with the highest sell price with the actual sell price per SCU (Star Citizen Unit).\n" + result_string
return correct_response
async def get_commodity_buy_price(
self, commodity_name: str, __event_emitter__: Callable[[dict], Any] = None
):
"""
Fetch commodity buy prices from the database by name.
commodity_name: The name of the commodity to fetch buy prices for.
"""
emitter = EventEmitter(__event_emitter__)
result_string = f"No buy price information found for commodity '{commodity_name}'."
try:
await emitter.progress_update(
f"Fetching commodity names from the database to find a match for '{commodity_name}'"
)
all_names = await get_information().fetch_all_commodity_names()
names_list = all_names.splitlines()
best_match = process.extractOne(commodity_name, names_list)
if best_match and best_match[1] > 60:
matched_commodity_name = best_match[0]
await emitter.success_update(
f"Found a close match for '{commodity_name}': {matched_commodity_name}"
)
conn = sqlite3.connect(self.db_path + "/commodities.db")
cursor = conn.cursor()
await emitter.progress_update(
f"Fetching buy prices for '{matched_commodity_name}'"
)
cursor.execute(
"SELECT price_buy, terminal_name, commodity_name FROM commodity_prices WHERE commodity_name = ? AND price_buy > 0",
(matched_commodity_name,),
)
rows = cursor.fetchall()
conn.close()
if rows:
output_lines = []
for row in rows:
buy_price = f"{int(row[0])} aUEC"
terminal_name = row[1]
item_name = row[2]
output_lines.append(
f"Item: {item_name}, Buy Price: {buy_price}/SCU, Terminal: {terminal_name}"
)
result_string = "\n".join(output_lines)
await emitter.success_update(
f"Successfully fetched buy prices for '{matched_commodity_name}'"
) )
else: else:
result_string = ( result_string = (
f"No price data found for '{matched_commodity_name}'." f"No locations found to buy '{matched_commodity_name}'."
) )
await emitter.error_update(result_string) await emitter.error_update(result_string)
else: else:
@@ -469,12 +529,13 @@ class Tools:
await emitter.error_update(result_string) await emitter.error_update(result_string)
except Exception as e: except Exception as e:
error_message = f"An error occurred while fetching information for {commodity_name}: {str(e)}" error_message = f"An error occurred while fetching buy prices for {commodity_name}: {str(e)}"
await emitter.error_update(error_message) await emitter.error_update(error_message)
result_string = error_message result_string = error_message
print(result_string) print(result_string)
return result_string correct_response = "If not other specified, only answer two terminals with the lowest buy price with the actual buy price per SCU (Star Citizen Unit).\n" + result_string
return correct_response
async def get_item_prices( async def get_item_prices(
self, item_name: str, __event_emitter__: Callable[[dict], Any] = None self, item_name: str, __event_emitter__: Callable[[dict], Any] = None
@@ -517,9 +578,7 @@ class Tools:
output_lines = [] output_lines = []
for row in rows: for row in rows:
buy_price = ( buy_price = (
"Not buyable" "Not buyable" if int(row[0]) == 0 else f"{int(row[0])} aUEC"
if int(row[0]) == 0
else f"{int(row[0])} aUEC"
) )
sell_price = ( sell_price = (
"not sellable" "not sellable"
@@ -546,7 +605,8 @@ class Tools:
print(result_string) print(result_string)
return result_string return result_string
async def get_ship_owners(self, ship_name: str, __event_emitter__: Callable[[dict], Any] = None async def get_ship_owners(
self, ship_name: str, __event_emitter__: Callable[[dict], Any] = None
): ):
""" """
Fetches the owners of a specific ship from the fleet.db sqlite database. Fetches the owners of a specific ship from the fleet.db sqlite database.
@@ -559,7 +619,9 @@ class Tools:
await emitter.progress_update( await emitter.progress_update(
f"Fetching owners for ship '{ship_name}' from the database" f"Fetching owners for ship '{ship_name}' from the database"
) )
available_ships = await get_information().get_all_ship_names_from_fleetyard_db() available_ships = (
await get_information().get_all_ship_names_from_fleetyard_db()
)
# The names are returned as a single string, split it into a list # The names are returned as a single string, split it into a list
ships_list = available_ships.splitlines() ships_list = available_ships.splitlines()
best_match = process.extractOne(ship_name, ships_list) best_match = process.extractOne(ship_name, ships_list)
@@ -584,9 +646,11 @@ class Tools:
owners = [row[2] for row in rows] owners = [row[2] for row in rows]
manufacturer_name = rows[0][0] manufacturer_name = rows[0][0]
matched_ship_name = rows[0][1] matched_ship_name = rows[0][1]
result_string = f"Please report these to the user in a bulletpoint list:\nOwners of ship {manufacturer_name} {matched_ship_name}: {', '.join(owners)}" result_string = f"Report these to the user in a bulletpoint list:\nOwners of ship {manufacturer_name} {matched_ship_name}: {', '.join(owners)}"
except Exception as e: except Exception as e:
error_message = f"An error occurred while fetching owners for {ship_name}: {str(e)}" error_message = (
f"An error occurred while fetching owners for {ship_name}: {str(e)}"
)
await emitter.error_update(error_message) await emitter.error_update(error_message)
result_string = error_message result_string = error_message
await emitter.progress_update(result_string) await emitter.progress_update(result_string)
@@ -597,86 +661,58 @@ class Tools:
self, __event_emitter__: Callable[[dict], Any] = None self, __event_emitter__: Callable[[dict], Any] = None
): ):
""" """
Fetches all buyable ships, their prices, and locations from the Star Citizen Tools wiki. Fetches all buyable ships, their prices, and locations from the buyable_ships.db database.
""" """
emitter = EventEmitter(__event_emitter__) emitter = EventEmitter(__event_emitter__)
api_url = "https://starcitizen.tools/api.php" await emitter.progress_update("Fetching purchasable ships from the database...")
ship_data = {} location_data = {}
page_title = "Purchasing_ships" final_output = "No purchasable ships found in the database."
await emitter.progress_update(f"Fetching data from {page_title}...")
params = {
"action": "parse",
"page": page_title,
"format": "json",
"prop": "text",
}
try: try:
response = await asyncio.to_thread(requests.get, api_url, params=params) conn = sqlite3.connect(self.db_path + "/buyable_ships.db")
response.raise_for_status() cursor = conn.cursor()
data = response.json() cursor.execute(
"SELECT vehicle_name, price_buy, terminal_name FROM buyable_ships ORDER BY terminal_name, vehicle_name"
)
rows = cursor.fetchall()
conn.close()
if "error" in data: if not rows:
await emitter.error_update( await emitter.error_update(
f"API Error for {page_title}: {data['error']['info']}" "No purchasable ships found in the database."
) )
return print(final_output)
html_content = data.get("parse", {}).get("text", {}).get("*", "") return final_output
if not html_content:
await emitter.error_update(f"No content found for {page_title}.")
return
await emitter.progress_update(f"Parsing data from {page_title}...") await emitter.progress_update("Processing ship data...")
soup = BeautifulSoup(html_content, "html.parser")
tables = soup.find_all("table", class_="wikitable")
for table in tables:
header_row = table.find("tr")
if not header_row:
continue
headers = [th.get_text(strip=True) for th in header_row.find_all("th")]
rows = table.find_all("tr")[1:]
for row in rows: for row in rows:
cells = row.find_all("td") ship_name, price, location = row
if not cells or len(cells) < 3: if location not in location_data:
continue location_data[location] = []
location_data[location].append({"name": ship_name, "price": price})
ship_name_tag = cells[1].find("a")
if not ship_name_tag or not ship_name_tag.get("title"):
continue
ship_name = ship_name_tag.get("title").strip()
price = cells[2].get_text(strip=True)
if ship_name not in ship_data:
ship_data[ship_name] = []
location_headers = headers[3:]
for i, cell in enumerate(cells[3:]):
if "" in cell.get_text():
location = location_headers[i]
ship_data[ship_name].append(
{"price": price + " aUEC (alpha United Earth Credits)", "location": location}
)
await emitter.success_update(f"Successfully processed {page_title}.")
except requests.exceptions.RequestException as e:
await emitter.error_update(f"Error fetching data for {page_title}: {e}")
except json.JSONDecodeError:
await emitter.error_update(f"Error decoding JSON for {page_title}.")
output_lines = [] output_lines = []
for ship_name, locations in sorted(ship_data.items()): for location, ships in sorted(location_data.items()):
output_lines.append(f"\n--- {ship_name} ---") output_lines.append(f"\n--- Ingame Shop: {location} ---")
output_lines.append("Buyable at:") for ship in ships:
for item in locations:
output_lines.append( output_lines.append(
f" - Location: {item['location']}, Price: {item['price']}" f" - {ship['name']}: {int(ship['price'])} aUEC"
) )
final_output = "\n".join(output_lines) final_output = "\n".join(output_lines)
await emitter.success_update(f"Found {len(ship_data)} unique buyable ships.") await emitter.success_update(
f"Found purchasable ships at {len(location_data)} locations."
)
except sqlite3.Error as e:
error_message = f"Database error while fetching purchasable ships: {e}"
await emitter.error_update(error_message)
final_output = error_message
except Exception as e:
error_message = f"An unexpected error occurred: {e}"
await emitter.error_update(error_message)
final_output = error_message
print(final_output) print(final_output)
return final_output return final_output
@@ -786,7 +822,115 @@ class Tools:
print(final_output) print(final_output)
return final_output return final_output
async def fetch_wikelo_information(
self,
mission_ship_or_armor_name: str,
__event_emitter__: Callable[[dict], Any] = None,
):
"""
Retrieves all columns for the Wikelo entry whose *mission* or *ship_name*
best matches ``mission_ship_name`` using fuzzy search.
Parameters
----------
mission_ship_name : str
The string to match against the `missions` and `ship_name`
fields of the table.
__event_emitter__ : Callable[[dict], Any] | None
Optional async callback that receives status updates.
Returns
-------
str
A formatted summary of the matched entry, or an error message.
"""
emitter = EventEmitter(__event_emitter__)
try:
await emitter.progress_update(
f"Searching Wikelo database for '{mission_ship_or_armor_name}'"
)
# ------------------------------------------------------------------
# 1. Pull all rows from the database
# ------------------------------------------------------------------
conn = sqlite3.connect(self.db_path + "/wikelo_crafting.db")
cursor = conn.cursor()
cursor.execute(
"""
SELECT missions, ship_name, components, costs, rewards, armor_name
FROM Wikelo_information
"""
)
rows = cursor.fetchall()
conn.close()
if not rows:
await emitter.error_update("No entries found in the Wikelo database.")
return "No entries found."
# ------------------------------------------------------------------
# 2. Build a searchable list that keeps a reference to each row.
# We create two separate search items per row one for
# the mission and one for the ship name.
# ------------------------------------------------------------------
search_items = [] # List of tuples: (search_string, label, full_row)
for row in rows:
mission, ship_name, components, costs, rewards, armor_name = row
search_items.append((mission, "mission", row))
search_items.append((ship_name, "ship", row))
search_items.append((armor_name, "armor", row))
# ------------------------------------------------------------------
# 3. Find the best fuzzy match against all searchable strings.
# ------------------------------------------------------------------
best_match = process.extractOne(
mission_ship_or_armor_name,
[item[0] for item in search_items],
)
if not best_match:
await emitter.error_update(f"No close match found for '{mission_ship_or_armor_name}'.")
return f"No close match found for '{mission_ship_or_armor_name}'."
matched_string, score = best_match
# ------------------------------------------------------------------
# 4. Retrieve the full row that produced the matched string.
# ------------------------------------------------------------------
matched_row = None
for text, label, row in search_items:
if text == matched_string:
matched_row = row
break
if not matched_row:
await emitter.error_update("Matched entry could not be found.")
return "Error: matched entry could not be located."
# ------------------------------------------------------------------
# 5. Build the output string.
# ------------------------------------------------------------------
mission, ship_name, components, costs, rewards, armor_name = matched_row
result_text = (
f"**Mission:** {mission}\n"
f"**Ship Name:** {ship_name}\n"
f"**Components:** {components}\n"
f"**Costs:** {costs}\n"
f"**Rewards:** {rewards}\n"
f"**Armor Name:** {armor_name}"
)
await emitter.success_update(
f"Found a close match ({matched_string}) with score {score}."
)
except Exception as exc:
result_text = f"Error retrieving Wikelo information: {exc}"
await emitter.error_update(result_text)
print(result_text)
return "If possible, also mention where to find the materials needed.\n" + result_text
if __name__ == "__main__": if __name__ == "__main__":
info_printer = Tools() info_printer = Tools()
asyncio.run(info_printer.get_ship_owners("Perseus")) asyncio.run(info_printer.fetch_wikelo_information("Space Navy"))

View File

@@ -0,0 +1,205 @@
[
{"role": "user", "content": "Was muss ich tun, um reguläre Foxwell-Aufträge annehmen zu können?"},
{"role": "assistant", "content": "Bevor du reguläre Aufträge annehmen kannst, musst du deinen Wert beweisen. Der erste Schritt besteht darin, die Mission 'Security Contractor Evaluation' anzunehmen und abzuschließen."},
{"role": "user", "content": "Was passiert nach dem Abschluss der Einführungsmission bei Foxwell Enforcement?"},
{"role": "assistant", "content": "Nach dem Abschluss schaltest du die erste Stufe der Patrouillen- und Hinterhaltsmissionen frei."},
{"role": "user", "content": "Wie erfolgt die Freischaltung höherer Foxwell-Missionen?"},
{"role": "assistant", "content": "Die Freischaltung höherer Foxwell-Missionen erfolgt anhand der Anzahl abgeschlossener Missionen, nicht direkt über das Reputationsniveau."},
{"role": "user", "content": "Wie viele Missionstypen gibt es bei Foxwell Enforcement?"},
{"role": "assistant", "content": "Es gibt zwei Missionstypen: Patrouille und Hinterhalt. Jede Mission hat ihren eigenen Fortschrittspfad."},
{"role": "user", "content": "Wie viele Missionen muss ich abschließen, um die nächste Stufe in der Patrouillen-Serie zu erreichen?"},
{"role": "assistant", "content": "Die Anzahl der abgeschlossenen Aufgaben für die nächste Stufe variiert. Für die erste Stufe reicht eine abgeschlossene Mission, für höhere Stufen sind es meist 5 oder 10 Missionen."},
{"role": "user", "content": "Wie viele Missionen muss ich abschließen, um von 'Security Contractor Evaluation' zu 'Routine Patrol' zu gelangen?"},
{"role": "assistant", "content": "Du musst eine Mission abschließen, um von 'Security Contractor Evaluation' zu 'Routine Patrol' zu gelangen."},
{"role": "user", "content": "Wie viele Missionen muss ich abschließen, um von 'Routine Patrol' zu 'Security Sweep' zu gelangen?"},
{"role": "assistant", "content": "Du musst fünf Missionen abschließen, um von 'Routine Patrol' zu 'Security Sweep' zu gelangen."},
{"role": "user", "content": "Wie viele Missionen muss ich abschließen, um von 'Security Sweep' zu 'Security Patrol' zu gelangen?"},
{"role": "assistant", "content": "Du musst fünf Missionen abschließen, um von 'Security Sweep' zu 'Security Patrol' zu gelangen."},
{"role": "user", "content": "Wie viele Missionen muss ich abschließen, um von 'Security Patrol' zu 'Potential Security Threat' zu gelangen?"},
{"role": "assistant", "content": "Du musst fünf Missionen abschließen, um von 'Security Patrol' zu 'Potential Security Threat' zu gelangen."},
{"role": "user", "content": "Wie viele Missionen muss ich abschließen, um von 'Potential Security Threat' zu 'High-Risk Security Patrol' zu gelangen?"},
{"role": "assistant", "content": "Du musst zehn Missionen abschließen, um von 'Potential Security Threat' zu 'High-Risk Security Patrol' zu gelangen."},
{"role": "user", "content": "Wie viele Missionen muss ich abschließen, um von 'High-Risk Security Patrol' zu 'Secure Threatened Space' zu gelangen?"},
{"role": "assistant", "content": "Du musst zehn Missionen abschließen, um von 'High-Risk Security Patrol' zu 'Secure Threatened Space' zu gelangen."},
{"role": "user", "content": "Wie viele Missionen muss ich abschließen, um von 'Security Contractor Evaluation' zu 'Ambush an Amateur' zu gelangen?"},
{"role": "assistant", "content": "Du musst eine Mission abschließen, um von 'Security Contractor Evaluation' zu 'Ambush an Amateur' zu gelangen."},
{"role": "user", "content": "Wie viele Missionen muss ich abschließen, um von 'Ambush an Amateur' zu 'Surprise Strike' zu gelangen?"},
{"role": "assistant", "content": "Du musst fünf Missionen abschließen, um von 'Ambush an Amateur' zu 'Surprise Strike' zu gelangen."},
{"role": "user", "content": "Wie viele Missionen muss ich abschließen, um von 'Surprise Strike' zu 'Spring a Trap' zu gelangen?"},
{"role": "assistant", "content": "Du musst fünf Missionen abschließen, um von 'Surprise Strike' zu 'Spring a Trap' zu gelangen."},
{"role": "user", "content": "Wie viele Missionen muss ich abschließen, um von 'Spring a Trap' zu 'Return the Favor' zu gelangen?"},
{"role": "assistant", "content": "Du musst fünf Missionen abschließen, um von 'Spring a Trap' zu 'Return the Favor' zu gelangen."},
{"role": "user", "content": "Wie viele Missionen muss ich abschließen, um von 'Return the Favor' zu 'Ambush Attack Squad' zu gelangen?"},
{"role": "assistant", "content": "Du musst zehn Missionen abschließen, um von 'Return the Favor' zu 'Ambush Attack Squad' zu gelangen."},
{"role": "user", "content": "Wie viele Missionen muss ich abschließen, um von 'Ambush Attack Squad' zu 'Surprise Attack' zu gelangen?"},
{"role": "assistant", "content": "Es gibt keine spezifische Anzahl von Missionen, die du abschließen musst, um von 'Ambush Attack Squad' zu 'Surprise Attack' zu gelangen. Diese Mission ist die höchste Stufe in der Hinterhalts-Serie."},
{"role": "user", "content": "Welche Belohnungen kann ich in der Patrouillen-Mission 'Security Contractor Evaluation' erhalten?"},
{"role": "assistant", "content": "In der Mission 'Security Contractor Evaluation' kannst du FPS-Ausrüstung als potenzielle Cargo-Belohnung erhalten."},
{"role": "user", "content": "Welche Belohnungen kann ich in der Patrouillen-Mission 'Routine Patrol' erhalten?"},
{"role": "assistant", "content": "In der Mission 'Routine Patrol' kannst du Agrarprodukte und Abfall als potenzielle Cargo-Belohnungen erhalten. Der geschätzte Wert liegt bei ~5.000-15.000 aUEC."},
{"role": "user", "content": "Welche Belohnungen kann ich in der Patrouillen-Mission 'Security Sweep' erhalten?"},
{"role": "assistant", "content": "In der Mission 'Security Sweep' kannst du verarbeitete Lebensmittel und distillierte Getränke als potenzielle Cargo-Belohnungen erhalten. Der geschätzte Wert liegt bei ~15.000-40.000 aUEC."},
{"role": "user", "content": "Welche Belohnungen kann ich in der Patrouillen-Mission 'Security Patrol' erhalten?"},
{"role": "assistant", "content": "In der Mission 'Security Patrol' kannst du distillierte Getränke und verschiedene Handelswaren als potenzielle Cargo-Belohnungen erhalten. Der geschätzte Wert liegt bei ~50.000-100.000 aUEC."},
{"role": "user", "content": "Welche Belohnungen kann ich in der Patrouillen-Mission 'Potential Security Threat' erhalten?"},
{"role": "assistant", "content": "In der Mission 'Potential Security Threat' kannst du verschiedene Handelswaren als potenzielle Cargo-Belohnungen erhalten. Der geschätzte Wert liegt bei ~70.000-150.000 aUEC."},
{"role": "user", "content": "Welche Belohnungen kann ich in der Patrouillen-Mission 'High-Risk Security Patrol' erhalten?"},
{"role": "assistant", "content": "In der Mission 'High-Risk Security Patrol' kannst du SLAM, WiDoW und hochwertige Mineralien als potenzielle Cargo-Belohnungen erhalten. Der geschätzte Wert liegt bei ~150.000-300.000+ aUEC."},
{"role": "user", "content": "Welche Belohnungen kann ich in der Patrouillen-Mission 'Secure Threatened Space' erhalten?"},
{"role": "assistant", "content": "In der Mission 'Secure Threatened Space' kannst du Laranit, Agricium und SLAM als potenzielle Cargo-Belohnungen erhalten. Der geschätzte Wert liegt bei ~200.000-500.000+ aUEC."},
{"role": "user", "content": "Welche Belohnungen kann ich in der Hinterhaltsmission 'Security Contractor Evaluation' erhalten?"},
{"role": "assistant", "content": "In der Mission 'Security Contractor Evaluation' gibt es keine potenziellen Cargo-Belohnungen."},
{"role": "user", "content": "Welche Belohnungen kann ich in der Hinterhaltsmission 'Ambush an Amateur' erhalten?"},
{"role": "assistant", "content": "In der Mission 'Ambush an Amateur' kannst du Abfall und Grundwaren als potenzielle Cargo-Belohnungen erhalten. Der geschätzte Wert liegt bei ~1.000-5.000 aUEC."},
{"role": "user", "content": "Welche Belohnungen kann ich in der Hinterhaltsmission 'Surprise Strike' erhalten?"},
{"role": "assistant", "content": "In der Mission 'Surprise Strike' kannst du Abfall und Grundwaren als potenzielle Cargo-Belohnungen erhalten. Der geschätzte Wert liegt bei ~3.000-8.000 aUEC."},
{"role": "user", "content": "Welche Belohnungen kann ich in der Hinterhaltsmission 'Spring a Trap' erhalten?"},
{"role": "assistant", "content": "In der Mission 'Spring a Trap' kannst du Handelswaren und raffinierte Materialien als potenzielle Cargo-Belohnungen erhalten. Der geschätzte Wert liegt bei ~50.000-100.000 aUEC."},
{"role": "user", "content": "Welche Belohnungen kann ich in der Hinterhaltsmission 'Return the Favor' erhalten?"},
{"role": "assistant", "content": "In der Mission 'Return the Favor' kannst du variierte Konvoi-Kargo als potenzielle Cargo-Belohnungen erhalten. Der geschätzte Wert liegt bei ~100.000-250.000 aUEC."},
{"role": "user", "content": "Welche Belohnungen kann ich in der Hinterhaltsmission 'Ambush Attack Squad' erhalten?"},
{"role": "assistant", "content": "In der Mission 'Ambush Attack Squad' kannst du Militärkomponenten und hochwertige Waren als potenzielle Cargo-Belohnungen erhalten. Der geschätzte Wert liegt bei ~150.000-300.000 aUEC."},
{"role": "user", "content": "Welche Belohnungen kann ich in der Hinterhaltsmission 'Surprise Attack' erhalten?"},
{"role": "assistant", "content": "In der Mission 'Surprise Attack' kannst du variierte Cargo-Belohnungen erhalten. Der geschätzte Wert liegt bei ~200.000-500.000+ aUEC."},
{"role": "user", "content": "Was sind Mercenary Guild (MG) Scrips?"},
{"role": "assistant", "content": "Mercenary Guild (MG) Scrips sind physische Gegenstände, die für die meisten Foxwell-Missionen vergeben werden. Sie können nicht in regulären Shops ausgegeben werden, sondern dienen einem speziellen Handelsweg für seltene und exklusive Ausrüstung."},
{"role": "user", "content": "Wie kann ich MG Scrips einlösen?"},
{"role": "assistant", "content": "Der Standardaustausch ist 50 MG Scrips = 1 Wikelo's Favor. Die Abmachung erfolgt über 'Collections'-Missionen beim Banu-Vendor Wikelo."},
{"role": "user", "content": "Wo finde ich den Banu-Vendor Wikelo?"},
{"role": "assistant", "content": "Wikelos Emporium befindet sich an Stationen Kinga, Selo oder Dasi."},
{"role": "user", "content": "Was sind Ace-Piloten und wo treten sie auf?"},
{"role": "assistant", "content": "Ace-Piloten sind Elitefeinde, die bei höheren Stufen (Orange & Rot) in beiden Serien auftauchen. Sie erscheinen als zufällige Eskalation und fungieren oft als Endboss. Sie spawnen nur in Patrouillenmissionen."},
{"role": "user", "content": "Was kann ich mit dem Ace Interceptor Helm machen?"},
{"role": "assistant", "content": "Der Ace Interceptor Helm ist ein hochgradig barterbarer Gegenstand, der bei Wikelo in Sammlungen gegen exklusive Belohnungen eingetauscht werden kann, z. B. seltene Waffen, spezielle Rüstungsets und hochwertige Schiffskomponenten."},
{"role": "user", "content": "Welche Tipps gibt es zum Bekämpfen von Ace-Piloten?"},
{"role": "assistant", "content": "Schalte das Ace-Schiff aus, bevor du die Mission abschließt. Sammle den Helm, bevor das Objektiv verschwindet. Ace-Piloten tragen häufig Scrips im Kernpanzer."},
{"role": "user", "content": "Was soll ich tun, wenn die Marker nach dem Eliminieren aller Feinde verschwinden?"},
{"role": "assistant", "content": "Bewege dein Schiff mindestens 25 km von der Bergbaustation entfernt. Ein neuer Marker weist dich zurück."},
{"role": "user", "content": "Wie kann ich meine Chancen auf Begegnungen mit Ace-Piloten erhöhen?"},
{"role": "assistant", "content": "Erhöhe deine Chancen bei Orange- und Rot-Stufen. Gründe diese Missionen nach dem Freischalten."},
{"role": "user", "content": "Wo finde ich weitere Informationen zu Foxwell Enforcement?"},
{"role": "assistant", "content": "Weitere Informationen findest du in Quellen wie 'Foxwell Enforcement Deep Dive.mp3', 'Star Citizen Tools Wiki Foxwell Enforcement' und den Referenzblättern von ChrisGBG."},
{"role": "user", "content": "Wie hoch ist der Payout in der Patrouillen-Mission 'Security Contractor Evaluation'?"},
{"role": "assistant", "content": "Der Payout in der Mission 'Security Contractor Evaluation' beträgt 20.000 aUEC."},
{"role": "user", "content": "Wie hoch ist der Payout in der Patrouillen-Mission 'Routine Patrol'?"},
{"role": "assistant", "content": "Der Payout in der Mission 'Routine Patrol' beträgt 30.000 aUEC."},
{"role": "user", "content": "Wie hoch ist der Payout in der Patrouillen-Mission 'Security Sweep'?"},
{"role": "assistant", "content": "Der Payout in der Mission 'Security Sweep' beträgt 50.000 aUEC."},
{"role": "user", "content": "Wie hoch ist der Payout in der Patrouillen-Mission 'Security Patrol'?"},
{"role": "assistant", "content": "Der Payout in der Mission 'Security Patrol' beträgt 74.000 aUEC."},
{"role": "user", "content": "Wie hoch ist der Payout in der Patrouillen-Mission 'Potential Security Threat'?"},
{"role": "assistant", "content": "Der Payout in der Mission 'Potential Security Threat' beträgt 135.000 aUEC."},
{"role": "user", "content": "Wie hoch ist der Payout in der Patrouillen-Mission 'High-Risk Security Patrol'?"},
{"role": "assistant", "content": "Der Payout in der Mission 'High-Risk Security Patrol' beträgt 200.000 aUEC."},
{"role": "user", "content": "Wie hoch ist der Payout in der Patrouillen-Mission 'Secure Threatened Space'?"},
{"role": "assistant", "content": "Der Payout in der Mission 'Secure Threatened Space' beträgt 350.000 aUEC."},
{"role": "user", "content": "Wie hoch ist der Payout in der Hinterhaltsmission 'Security Contractor Evaluation'?"},
{"role": "assistant", "content": "Der Payout in der Mission 'Security Contractor Evaluation' beträgt 20.000 aUEC."},
{"role": "user", "content": "Wie hoch ist der Payout in der Hinterhaltsmission 'Ambush an Amateur'?"},
{"role": "assistant", "content": "Der Payout in der Mission 'Ambush an Amateur' beträgt 20.000 aUEC."},
{"role": "user", "content": "Wie hoch ist der Payout in der Hinterhaltsmission 'Surprise Strike'?"},
{"role": "assistant", "content": "Der Payout in der Mission 'Surprise Strike' beträgt 30.000 aUEC."},
{"role": "user", "content": "Wie hoch ist der Payout in der Hinterhaltsmission 'Spring a Trap'?"},
{"role": "assistant", "content": "Der Payout in der Mission 'Spring a Trap' beträgt 40.000 aUEC."},
{"role": "user", "content": "Wie hoch ist der Payout in der Hinterhaltsmission 'Return the Favor'?"},
{"role": "assistant", "content": "Der Payout in der Mission 'Return the Favor' beträgt 75.000 aUEC."},
{"role": "user", "content": "Wie hoch ist der Payout in der Hinterhaltsmission 'Ambush Attack Squad'?"},
{"role": "assistant", "content": "Der Payout in der Mission 'Ambush Attack Squad' beträgt 120.000 aUEC."},
{"role": "user", "content": "Wie hoch ist der Payout in der Hinterhaltsmission 'Surprise Attack'?"},
{"role": "assistant", "content": "Der Payout in der Mission 'Surprise Attack' beträgt 200.000 aUEC."},
{"role": "user", "content": "Wie viele MG Scrips bekomme ich in der Patrouillen-Mission 'Security Contractor Evaluation'?"},
{"role": "assistant", "content": "In der Mission 'Security Contractor Evaluation' erhältst du 0 MG Scrips."},
{"role": "user", "content": "Wie viele MG Scrips bekomme ich in der Patrouillen-Mission 'Routine Patrol'?"},
{"role": "assistant", "content": "In der Mission 'Routine Patrol' erhältst du 2 MG Scrips."},
{"role": "user", "content": "Wie viele MG Scrips bekomme ich in der Patrouillen-Mission 'Security Sweep'?"},
{"role": "assistant", "content": "In der Mission 'Security Sweep' erhältst du 4 MG Scrips."},
{"role": "user", "content": "Wie viele MG Scrips bekomme ich in der Patrouillen-Mission 'Security Patrol'?"},
{"role": "assistant", "content": "In der Mission 'Security Patrol' erhältst du 8 MG Scrips."},
{"role": "user", "content": "Wie viele MG Scrips bekomme ich in der Patrouillen-Mission 'Potential Security Threat'?"},
{"role": "assistant", "content": "In der Mission 'Potential Security Threat' erhältst du 14 MG Scrips."},
{"role": "user", "content": "Wie viele MG Scrips bekomme ich in der Patrouillen-Mission 'High-Risk Security Patrol'?"},
{"role": "assistant", "content": "In der Mission 'High-Risk Security Patrol' erhältst du 18 MG Scrips."},
{"role": "user", "content": "Wie viele MG Scrips bekomme ich in der Patrouillen-Mission 'Secure Threatened Space'?"},
{"role": "assistant", "content": "In der Mission 'Secure Threatened Space' erhältst du 24 MG Scrips."},
{"role": "user", "content": "Wie viele MG Scrips bekomme ich in der Hinterhaltsmission 'Security Contractor Evaluation'?"},
{"role": "assistant", "content": "In der Mission 'Security Contractor Evaluation' erhältst du 0 MG Scrips."},
{"role": "user", "content": "Wie viele MG Scrips bekomme ich in der Hinterhaltsmission 'Ambush an Amateur'?"},
{"role": "assistant", "content": "In der Mission 'Ambush an Amateur' erhältst du 1 MG Scrip."},
{"role": "user", "content": "Wie viele MG Scrips bekomme ich in der Hinterhaltsmission 'Surprise Strike'?"},
{"role": "assistant", "content": "In der Mission 'Surprise Strike' erhältst du 3 MG Scrips."},
{"role": "user", "content": "Wie viele MG Scrips bekomme ich in der Hinterhaltsmission 'Spring a Trap'?"},
{"role": "assistant", "content": "In der Mission 'Spring a Trap' erhältst du 5 MG Scrips."},
{"role": "user", "content": "Wie viele MG Scrips bekomme ich in der Hinterhaltsmission 'Return the Favor'?"},
{"role": "assistant", "content": "In der Mission 'Return the Favor' erhältst du 8 MG Scrips."},
{"role": "user", "content": "Wie viele MG Scrips bekomme ich in der Hinterhaltsmission 'Ambush Attack Squad'?"},
{"role": "assistant", "content": "In der Mission 'Ambush Attack Squad' erhältst du 12 MG Scrips."},
{"role": "user", "content": "Wie viele MG Scrips bekomme ich in der Hinterhaltsmission 'Surprise Attack'?"},
{"role": "assistant", "content": "In der Mission 'Surprise Attack' erhältst du 16 MG Scrips."}
]

View File

@@ -0,0 +1,162 @@
[
{
"role": "user",
"content": "Was ist das Align & Mine Event?"
},
{
"role": "assistant",
"content": "Das Align & Mine Event ist ein hochriskantes Bergbau-Event in Star Citizen, bei dem Spieler zusammenarbeiten müssen, um einen Orbital-Mining-Laser zu aktivieren, der Zugang zu wertvollen unterirdischen Ressourcen freischaltet."
},
{
"role": "user",
"content": "Welche Schlüsselanforderungen gibt es für das Align & Mine Event?"
},
{
"role": "assistant",
"content": "Die Schlüsselanforderungen sind: Drei Satellitenschüsseln ausrichten, verschiedene Keycards sammeln, Batteriepacks sichern und Gegner abwehren (NPCs und andere Spieler)."
},
{
"role": "user",
"content": "Was ist das Hauptziel des Align & Mine Events?"
},
{
"role": "assistant",
"content": "Das Hauptziel ist es, den Orbital-Mining-Laser zu aktivieren und wertvolle Ressourcen zu sichern."
},
{
"role": "user",
"content": "Beschreibe den Mond Daymar."
},
{
"role": "assistant",
"content": "Daymar ist ein felsiger, wüstenähnlicher Mond mit einer Stickstoff-Methan-Atmosphäre. Die Temperaturen liegen zwischen -40°C und 78°C."
},
{
"role": "user",
"content": "Welche Ausrüstung wird für Daymar benötigt?"
},
{
"role": "assistant",
"content": "Für Daymar wird ein Standard-Raumanzug mit zusätzlichen Sauerstoffreserven benötigt."
},
{
"role": "user",
"content": "Was sind die Punkte von Interesse auf Daymar?"
},
{
"role": "assistant",
"content": "Die Punkte von Interesse auf Daymar sind Lamina und Attritus, jeweils mit drei PAF-Sites und einem OLP."
},
{
"role": "user",
"content": "Beschreibe den POI Lamina auf Daymar."
},
{
"role": "assistant",
"content": "Lamina ist ein POI auf Daymar mit drei PAF-Sites und einem OLP. Die Sublocations sind Lamina-PAF I, Lamina-PAF II, Lamina-PAF III und Lamina-OLP."
},
{
"role": "user",
"content": "Beschreibe den Mond Aberdeen."
},
{
"role": "assistant",
"content": "Aberdeen ist ein tödlich heißer Mond mit einer Schwefelatmosphäre. Die Temperaturen liegen zwischen 170°C und 237°C."
},
{
"role": "user",
"content": "Welche Ausrüstung wird für Aberdeen benötigt?"
},
{
"role": "assistant",
"content": "Für Aberdeen wird ein Pembroke Exploration Suit mit hitzebeständiger Ausrüstung benötigt."
},
{
"role": "user",
"content": "Was sind die Punkte von Interesse auf Aberdeen?"
},
{
"role": "assistant",
"content": "Die Punkte von Interesse auf Aberdeen sind Ruptura und Vivere, jeweils mit drei PAF-Sites und einem OLP."
},
{
"role": "user",
"content": "Beschreibe den POI Ruptura auf Aberdeen."
},
{
"role": "assistant",
"content": "Ruptura ist ein POI auf Aberdeen mit drei PAF-Sites und einem OLP. Die Sublocations sind Ruptura-PAF I, Ruptura-PAF II, Ruptura-PAF III und Ruptura-OLP."
},
{
"role": "user",
"content": "Was kann man nach dem Bergbau bei Wikelo's eintauschen?"
},
{
"role": "assistant",
"content": "Nach dem Bergbau können Ressourcen bei Wikelo's gegen spezielle Gegenstände wie Rüstungen und eine Polaris eingetauscht werden."
},
{
"role": "user",
"content": "Welche Ausrüstung wird für das Align & Mine Event empfohlen?"
},
{
"role": "assistant",
"content": "Empfohlene Ausrüstung umfasst einen Standard-Raumanzug mit Sauerstoffreserven für Daymar und einen Pembroke Exploration Suit für Aberdeen, Waffen wie FS-9 LMG und Arclight Pistole, sowie Tools wie MaxLift Tractor Beam und MedGun."
},
{
"role": "user",
"content": "Welche Schiffe werden für das Align & Mine Event empfohlen?"
},
{
"role": "assistant",
"content": "Empfohlene Schiffe sind der Avenger Titan für Solo-Spieler, die Cutlass Black für kleine Teams und die Valkyrie oder Carrack für Multi-Crew-Teams."
},
{
"role": "user",
"content": "Was ist der erste Schritt im Align & Mine Event?"
},
{
"role": "assistant",
"content": "Der erste Schritt ist die Aktivierung der drei Satellitenschüsseln, die um den Orbital-Mining-Laser positioniert sind."
},
{
"role": "user",
"content": "Wie findet man die Keycards im Align & Mine Event?"
},
{
"role": "assistant",
"content": "Die Keycards können bei toten NPCs/Wachen, in Schließfächern oder Kontrollräumen gefunden werden."
},
{
"role": "user",
"content": "Was passiert nach der Aktivierung der Satellitenschüsseln?"
},
{
"role": "assistant",
"content": "Nach der Aktivierung öffnet sich eine Garagentür und gibt ein Batteriepack frei. Spieler müssen drei Batterien sammeln."
},
{
"role": "user",
"content": "Wie bringt man die Batteriepacks zum Orbital-Mining-Laser?"
},
{
"role": "assistant",
"content": "Die drei Batteriepacks müssen zum Mining-Laser gebracht und mit den Power Banks verbunden werden."
},
{
"role": "user",
"content": "Was ist der letzte Schritt im Align & Mine Event?"
},
{
"role": "assistant",
"content": "Der letzte Schritt ist das Betreten der Mine und das Sammeln von wertvollen Ressourcen."
},
{
"role": "user",
"content": "Welche Tipps gibt es für das Align & Mine Event?"
},
{
"role": "assistant",
"content": "Tipps sind: Nutze einen Spotter für Valakkar-Bedrohungen, plane Rollenverteilung für Teamkoordination, sichere Batterien und Keycards vor Einbrüchen und suche nach mehreren Supervisor Access Cards für schnelleren Zugriff."
}
]

View File

@@ -0,0 +1,458 @@
[
{
"role": "user",
"content": "Woher bekommt man den Ace Interceptor Helmet?"
},
{
"role": "assistant",
"content": "Den Ace Interceptor Helmet erhältst du als Beute von gefallenen Ace-Piloten in den Foxwell Patrol Missionen oder Headhunters Patrol Missionen. Wichtig ist, dass es sich um einen Soft Death handeln muss, da der Ace-Pilot ansonsten verschwindet. Zudem kannst du ihn auch in braunen Lootkisten bei Align and Mine oder Stormbreaker finden (Sehr selten)."
},
{
"role": "user",
"content": "Wie bekommt man eine Advocacy Badge (Replica)?"
},
{
"role": "assistant",
"content": "Die Advocacy Badge (Replica) findest du als Beute an den Security Posts rund um Kareah, in den Contested Zones oder an Standorten von Larzarus."
},
{
"role": "user",
"content": "Wo kann ich den Argo ATLS Ikti finden?"
},
{
"role": "assistant",
"content": "Den Argo ATLS Ikti erhältst du im Rahmen der Wikelo Mission: "Make ATLS shoot"."
},
{
"role": "user",
"content": "Wie kommt man an Atlasium?"
},
{
"role": "assistant",
"content": "Atlasium ist eine Handelsware. Du kannst es von Händlern erwerben. Weitere Informationen dazu, wo es verkauft wird, findest du unter folgendem Link: https://uexcorp.space/commodities/info/name/atlasium/tab/locations_selling/ ."
},
{
"role": "user",
"content": "Wo finde ich Carinite?"
},
{
"role": "assistant",
"content": "Carinite kannst du bei Align & Mine als Erz abbauen."
},
{
"role": "user",
"content": "Wie bekomme ich Carinite (Rein)?"
},
{
"role": "assistant",
"content": "Reines Carinite ist ein seltenes Erz, das du bei Align & Mine abbauen kannst. Es hat jedoch nur eine Drop-Chance von etwa 1%."
},
{
"role": "user",
"content": "Wo finde ich die DCHS-05 Comp-Board?"
},
{
"role": "assistant",
"content": "Die DCHS-05 Orbital Positioning Comp-Board kannst du als Beute in der Ghost Arena in Ruin Station finden."
},
{
"role": "user",
"content": "Wo bekomme ich den Finley The Stormwall Large Plushie?"
},
{
"role": "assistant",
"content": "Den Finley The Stormwall Large Plushie kannst du im Orison August Dunlow Spaceport Gift Shop oder im Cloudview Center Stratus Kel-To ConStore kaufen."
},
{
"role": "user",
"content": "Wie erhalte ich Government Cartography (Makellos)?"
},
{
"role": "assistant",
"content": "Government Cartography (Makellos) findest du als Beute von Ace-Piloten. Zusätzlich kannst du es in blauen Boxen bei Align & Mine und Storm Breaker Standorten sowie kleinen Boxen bei Derelict Outpost Standorten looten."
},
{
"role": "user",
"content": "Wo finde ich das Irradiated Kopion Horn?"
},
{
"role": "assistant",
"content": "Das Irradiated Kopion Horn erhältst du vom Irradiated Kopion rund um die Lazarus Komplexe."
},
{
"role": "user",
"content": "Wie bekomme ich den Irradiated Valakkar Fang (Erwachsen)?"
},
{
"role": "assistant",
"content": "Den Irradiated Valakkar Fang (Erwachsen) findest du bei erwachsenen Irradiated Valakkars rund um die Lazarus Komplexe."
},
{
"role": "user",
"content": "Wo finde ich den Irradiated Valakkar Fang (Juvenile)?"
},
{
"role": "assistant",
"content": "Den Irradiated Valakkar Fang (Juvenile) erhältst du von juvenilen Irradiated Valakkars rund um die Lazarus Komplexe."
},
{
"role": "user",
"content": "Wie bekomme ich die Irradiated Valakkar Pearl (Grad AAA)?"
},
{
"role": "assistant",
"content": "Die Irradiated Valakkar Pearl (Grad AAA) findest du bei Apex-Irradiated Valakkars an Storm Breaker Lazarus Standorten. Ich bin mir jedoch nicht sicher, wie das Grad-System genau funktioniert."
},
{
"role": "user",
"content": "Wo finde ich Jaclium (Erz)?"
},
{
"role": "assistant",
"content": "Jaclium (Erz) kannst du bei Align & Mine abbauen."
},
{
"role": "user",
"content": "Wie bekomme ich Janalite?"
},
{
"role": "assistant",
"content": "Janalite ist ein seltenes FPS-minable Erz."
},
{
"role": "user",
"content": "Wo finde ich MG Scrip?"
},
{
"role": "assistant",
"content": "MG Scrip erhältst du in Foxwell Patrol- oder Ambush-Missionen sowie bei Gilly's Combat Gauntlet Missionen."
},
{
"role": "user",
"content": "Wie bekomme ich einen Picoball?"
},
{
"role": "assistant",
"content": "Picoballs findest du als Beute in Aid Shelters, Outposts, Farro Datacenter, Larzarus oder Align & Mine Paf-Standorten. Beachte, dass sie nicht neu spawnen."
},
{
"role": "user",
"content": "Wie erhalte ich Polaris Bit?"
},
{
"role": "assistant",
"content": "Polaris Bits bekommst du, indem du 24x Quantanium abbaust und mit einem Schiff konvertierst. Dies kannst du in der Mission 'Want Polaris? Need something special' tun."
},
{
"role": "user",
"content": "Wo finde ich Saldynium (Erz)?"
},
{
"role": "assistant",
"content": "Saldynium (Erz) kannst du bei Align & Mine abbauen."
},
{
"role": "user",
"content": "Wie komme ich an die Scourge Railgun?"
},
{
"role": "assistant",
"content": "Die Scourge Railgun findest du in roten Boxen in Bunkern oder großen grünen Boxen bei Align & Mine und Storm Breaker Standorten im Wartungsbereich."
},
{
"role": "user",
"content": "Wo bekomme ich den Tevarin War Service Marker (Makellos)?"
},
{
"role": "assistant",
"content": "Den Tevarin War Service Marker (Makellos) kannst du als Beute von Ace-Piloten erhalten. Zusätzlich findest du ihn in blauen Boxen bei Align & Mine und Storm Breaker Standorten sowie in kleinen Boxen bei Derelict Outpost Standorten."
},
{
"role": "user",
"content": "Wie erhalte ich die UEE 6th Platoon Medal (Makellos)?"
},
{
"role": "assistant",
"content": "Die UEE 6th Platoon Medal (Makellos) findest du als Beute von Ace-Piloten. Zudem kannst du sie in blauen Boxen bei Align & Mine und Storm Breaker Standorten sowie in kleinen Boxen bei Derelict Outpost Standorten looten."
},
{
"role": "user",
"content": "Wie bekomme ich Wikelo Favor?"
},
{
"role": "assistant",
"content": "Wikelo Favor erhältst du, indem du einer der folgenden Ressourcen sammelst und in den jeweiligen Missionen eintauschst: 50x MG Scrip (Trade Merc Scrip for Favors?), 50x Council Scrip (Trade Council Scrip for Favors?), 50x Carinite (Turn Things to Favor) oder 15x Irradiated Valakkar Pearl (Trade Worm Parts for Favors?)."
},
{
"role": "user",
"content": "Wo finde ich die Wowblast Desperado Toy Pistol Red?"
},
{
"role": "assistant",
"content": "Die Wowblast Desperado Toy Pistol Red ist allgemeine Beute und kann überall im Spiel gefunden werden."
},
{
"role": "user",
"content": "Wie erhalte ich den Xanthule Ascension Helmet?"
},
{
"role": "assistant",
"content": "Den Xanthule Ascension Helmet kannst du über eine Wikelo-Mission erhalten, in der die Basisversion in die Aufstiegsversion konvertiert wird. Zudem ist er auch im Pledge Store erhältlich."
},
{
"role": "user",
"content": "Wo bekomme ich den Xanthule Ascension Suit?"
},
{
"role": "assistant",
"content": "Den Xanthule Ascension Suit kannst du über eine Wikelo-Mission (Xi'an Xanthule Suit made better) erhalten, in der die Basisversion in die Aufstiegsversion konvertiert wird. Zudem ist er auch im Pledge Store erhältlich."
},
{
"role": "user",
"content": "Wie finde ich einen ASD Secure Drive?"
},
{
"role": "assistant",
"content": "Den ASD Secure Drive kannst du in den Onyx Facilities in Stanton bekommen als Missions Belohnung oder als seltenes Drop von NPCs erhalten."
},
{
"role": "user",
"content": "Wo bekomme ich Geist Armor?"
},
{
"role": "assistant",
"content": "Geist Armor findest du in orangenen Kisten in den ASD Onyx Facilities."
},
{
"role": "user",
"content": "Wie erhalte ich die Zenith Laser Sniper Rifle?"
},
{
"role": "assistant",
"content": "Die Zenith Laser Sniper Rifle findest du in Waffenständern in den ASD Onyx Facilities."
},
{
"role": "user",
"content": "Wo finde ich die A03 Sniper Rifle (Mehrere Farben)?"
},
{
"role": "assistant",
"content": "Die besten Spots für die A03 Sniper Rifle sind Jumptown Labs. Weitere gute Standorte sind Sakura Magnolia / Goldenrod und Bunkers. Die großen grünen Boxen mit scharfen Ecken enthalten Sniper aller Typen und Farben."
},
{
"role": "user",
"content": "Wie bekomme ich die P6-LR Sniper Rifle (Mehrere Farben)?"
},
{
"role": "assistant",
"content": "Die besten Spots für die P6-LR Sniper Rifle sind Jumptown Labs. Weitere gute Standorte sind Sakura Magnolia / Goldenrod und Bunkers. Die großen grünen Boxen mit scharfen Ecken enthalten Sniper aller Typen und Farben."
},
{
"role": "user",
"content": "Wo finde ich die Arrowhead Sniper Rifle (Mehrere Farben)?"
},
{
"role": "assistant",
"content": "Die besten Spots für die Arrowhead Sniper Rifle sind Sakura Magnolia / Goldenrod. Weitere gute Standorte sind Jumptown Labs und Bunkers. Lüftungsschächte rund um den Lobby-Bereich oben in den DCs sind besonders lohnenswert."
},
{
"role": "user",
"content": "Wie erhalte ich die Atzkav Sniper Rifle (Mehrere Farben)?"
},
{
"role": "assistant",
"content": "Die besten Spots für die Atzkav Sniper Rifle sind Jumptown Labs. Weitere gute Standorte sind Sakura Magnolia / Goldenrod und Crusader Platforms. Die großen grünen Boxen mit scharfen Ecken enthalten Sniper aller Typen und Farben."
},
{
"role": "user",
"content": "Wo bekomme ich die Scalpel Sniper Rifle (Mehrere Farben)?"
},
{
"role": "assistant",
"content": "Die besten Spots für die Scalpel Sniper Rifle sind Sakura Magnolia / Goldenrod. Weitere gute Standorte sind Bunkers. Lüftungsschächte rund um den Lobby-Bereich oben in den DCs sind besonders lohnenswert."
},
{
"role": "user",
"content": "Wie finde ich die S71 Rifle (Mehrere Farben)?"
},
{
"role": "assistant",
"content": "Die besten Spots für die S71 Rifle sind Sakura Magnolia / Goldenrod. Weitere gute Standorte sind Remote Asteroid Bases und Bunkers. Lüftungsschächte rund um den Lobby-Bereich oben in den DCs sind besonders lohnenswert."
},
{
"role": "user",
"content": "Wo bekomme ich die Deadrig Shotgun?"
},
{
"role": "assistant",
"content": "Die besten Spots für die Deadrig Shotgun sind Stanton Bunkers in roten Boxen. Weitere gute Standorte sind Headhunters & Outlaw CQC NPCs und OLP/PAF Medium Gun Boxes."
},
{
"role": "user",
"content": "Wie erhalte ich die Demeco LMG (Mehrere Farben)?"
},
{
"role": "assistant",
"content": "Die besten Spots für die Demeco LMG sind Sakura Magnolia / Goldenrod. Weitere gute Standorte sind Bunkers. Lüftungsschächte rund um den Lobby-Bereich oben in den DCs sind besonders lohnenswert."
},
{
"role": "user",
"content": "Wo finde ich die F55 LMG (Mehrere Farben)?"
},
{
"role": "assistant",
"content": "Die besten Spots für die F55 LMG sind Sakura Magnolia / Goldenrod. Weitere gute Standorte sind Bunkers. Lüftungsschächte rund um den Lobby-Bereich oben in den DCs sind besonders lohnenswert."
},
{
"role": "user",
"content": "Wie bekomme ich die FS-9 LMG (Mehrere Farben)?"
},
{
"role": "assistant",
"content": "Die besten Spots für die FS-9 LMG sind Sakura Magnolia / Goldenrod. Weitere gute Standorte sind Bunkers. Lüftungsschächte rund um den Lobby-Bereich oben in den DCs sind besonders lohnenswert."
},
{
"role": "user",
"content": "Wo erhalte ich die GP-33 MOD Grenade Launcher (Mehrere Farben)?"
},
{
"role": "assistant",
"content": "Die besten Spots für die GP-33 MOD Grenade Launcher sind Sakura Magnolia / Goldenrod. Weitere gute Standorte sind Jumptown Labs und Bunkers. Crusader Platforms hatten früher viele dieser Waffen, wurden jedoch kürzlich stark reduziert."
},
{
"role": "user",
"content": "Wie finde ich die Scourge Railgun (Mehrere Farben)?"
},
{
"role": "assistant",
"content": "Die besten Spots für die Scourge Railgun sind Sakura Magnolia / Goldenrod. Weitere gute Standorte sind Bunkers. Lüftungsschächte rund um den Lobby-Bereich oben in den DCs sind besonders lohnenswert."
},
{
"role": "user",
"content": "Wo bekomme ich die Animus Missile Launcher?"
},
{
"role": "assistant",
"content": "Die besten Spots für die Animus Missile Launcher sind Sakura Magnolia / Goldenrod. Weitere gute Standorte sind Bunkers. Lüftungsschächte rund um den Lobby-Bereich oben in den DCs sind besonders lohnenswert."
},
{
"role": "user",
"content": "Wie erhalte ich die NV-TAC LL Scopes (1-8x)?"
},
{
"role": "assistant",
"content": "Die besten Spots für die NV-TAC LL Scopes sind Sakura Magnolia / Goldenrod. Weitere gute Standorte sind Contested Zones. Lüftungsschächte rund um den Lobby-Bereich oben in den DCs sind besonders lohnenswert."
},
{
"role": "user",
"content": "Wo finde ich die NV-TAC Scopes (1-8x)?"
},
{
"role": "assistant",
"content": "Die besten Spots für die NV-TAC Scopes sind Sakura Magnolia / Goldenrod. Weitere gute Standorte sind Jumptown Labs und Remote Asteroid Bases."
},
{
"role": "user",
"content": "Wie bekomme ich Antium Base / Jet / Maroon / Sand / Storm?"
},
{
"role": "assistant",
"content": "Die besten Spots für Antium sind die Lagerräume der Orbital Laser Platforms (OLPs) und die Sicherheitsräume der Planetary Alignment Facilities (PAFs)."
},
{
"role": "user",
"content": "Wo finde ich Antium Moss?"
},
{
"role": "assistant",
"content": "Antium Moss findest du ausschließlich im Supervisor Room der Orbital Laser Platforms (OLPs)."
},
{
"role": "user",
"content": "Wie erhalte ich Ana Armor Endro?"
},
{
"role": "assistant",
"content": "Ana Armor Endro kannst du nur über den Wikelo Trade erhalten."
},
{
"role": "user",
"content": "Wo bekomme ich Ana Armor Wao?"
},
{
"role": "assistant",
"content": "Ana Armor Wao ist nur im Pledge Store (Retired) erhältlich."
},
{
"role": "user",
"content": "Wie finde ich die Parallax \"Sanguine\" Energy Assault Rifle?"
},
{
"role": "assistant",
"content": "Die besten Spots für die Parallax \"Sanguine\" Energy Assault Rifle sind die Sicherheitsräume der Planetary Alignment Facilities (PAFs) und der Supervisor Room der Orbital Laser Platforms."
},
{
"role": "user",
"content": "Wo bekomme ich die Parallax \"Sunstone\" Energy Assault Rifle?"
},
{
"role": "assistant",
"content": "Die besten Spots für die Parallax \"Sunstone\" Energy Assault Rifle sind die Sicherheitsräume der Planetary Alignment Facilities (PAFs) und der Supervisor Room der Orbital Laser Platforms."
},
{
"role": "user",
"content": "Wie erhalte ich die Parallax \"Shock Trooper\" Energy Assault Rifle?"
},
{
"role": "assistant",
"content": "Die Parallax \"Shock Trooper\" Energy Assault Rifle findest du ausschließlich im Supervisor Room der Orbital Laser Platforms (OLP)."
},
{
"role": "user",
"content": "Wo finde ich die Parallax Energy Assault Rifle (VOLT)?"
},
{
"role": "assistant",
"content": "Die besten Spots für die Parallax Energy Assault Rifle (VOLT) sind die Sicherheitsräume der Planetary Alignment Facilities (PAFs) und der Supervisor Room der Orbital Laser Platforms."
},
{
"role": "user",
"content": "Wie bekomme ich die Parallax \"Downburst Camo\" Energy Assault Rifle?"
},
{
"role": "assistant",
"content": "Die Parallax \"Downburst Camo\" Energy Assault Rifle ist nur im Pledge Store (Retired) erhältlich."
},
{
"role": "user",
"content": "Wo finde ich die Parallax \"Fun Kopion Skull\" Energy Assault Rifle?"
},
{
"role": "assistant",
"content": "Die Parallax \"Fun Kopion Skull\" Energy Assault Rifle kannst du nur über den Wikelo Trade erhalten."
},
{
"role": "user",
"content": "Wie erhalte ich die Parallax \"Fun Kopion Tooth\" Energy Assault Rifle?"
},
{
"role": "assistant",
"content": "Die Parallax \"Fun Kopion Tooth\" Energy Assault Rifle kannst du nur über den Wikelo Trade erhalten."
},
{
"role": "user",
"content": "Wo bekomme ich die Parallax \"Fun Military Skull\" Energy Assault Rifle?"
},
{
"role": "assistant",
"content": "Die Parallax \"Fun Military Skull\" Energy Assault Rifle kannst du nur über den Wikelo Trade erhalten."
},
{
"role": "user",
"content": "Wie finde ich die Parallax \"Fun Military Tooth\" Energy Assault Rifle?"
},
{
"role": "assistant",
"content": "Die Parallax \"Fun Military Tooth\" Energy Assault Rifle kannst du nur über den Wikelo Trade erhalten."
}
]

View File

@@ -0,0 +1,28 @@
import json, re
from pathlib import Path
from tqdm.auto import tqdm
def dedupe(input_file: Path, output_file: Path):
print(f"\n>>> Deduping {input_file}")
seen = set()
out_f = output_file.open("w", encoding="utf-8")
# Wir laden die Datei Zeile für Zeile (JSONL)
i = 0
with input_file.open("r", encoding="utf-8") as f:
for line in tqdm(f, desc="reading"):
msg = json.loads(line)
if msg["role"] != "user":
continue
key = re.sub(r"\s+", " ", msg["content"]).strip().lower()
if key not in seen:
seen.add(key)
out_f.write(json.dumps(msg, ensure_ascii=False) + "\n")
# nächster Zeile ist der entsprechende AssistantMessage
next_line = f.readline()
if next_line:
out_f.write(next_line.rstrip("\n") + "\n")
out_f.close()
print(f"{output_file} {len(seen)} einzigartige UserPhrasen.")

View File

@@ -0,0 +1,123 @@
#!/usr/bin/env python3
# -------------------------------------------------------------
# paraphrase_batch.py
#
# Run it once per dataset and it will automatically iterate over
# the models you listed, writing a separate JSONL for each.
#
# Usage:
# python paraphrase_batch.py --input refusal_questions.jsonl \
# --out-dir ./paraphrases
#
# -------------------------------------------------------------
import json, random, time
from pathlib import Path
import requests
from tqdm.auto import tqdm
# ---------- CONFIG ----------
API_URL = "http://10.0.0.193:123/v1"
PROMPT_TEMPLATE = (
"Paraphrasiere den folgenden Satz auf natürliche, menschliche Weise auf Deutsch.\n\n"
"Original:\n{text}\n\nParaphrase:"
)
MAX_TOKENS = 256
TEMPERATURE_RANGE = (0.45, 0.8) # per request
# ---------- MODEL LIST ----------
MODELS = [
("Qwen3-30B-A3B"),
("Mistral Small 3.2"),
("Gemma3-27B"),
("gpt-oss-20b")
]
# ---------- HELPERS ----------
def paraphrase_batch(texts, model_name, temperatures):
"""Send a batch of texts to the API and return list of paraphrases."""
payload = {
"model": model_name,
"prompt": [PROMPT_TEMPLATE.format(text=t) for t in texts],
"temperature": temperatures,
"max_tokens": MAX_TOKENS,
"n": 1
}
resp = requests.post(f"{API_URL}/completions", json=payload)
if resp.status_code != 200:
raise RuntimeError(f"API error {resp.status_code}: {resp.text}")
return [c["text"].strip() for c in resp.json()["choices"]]
# ---------- MAIN PARAPHRASE ----------
def process_model(model_name, output_path: Path, messages):
"""Paraphrase all *user* messages with a single model."""
out_f = output_path.open("w", encoding="utf-8")
i = 0
pbar = tqdm(total=len(messages)//2, desc=model_name)
while i < len(messages) - 1:
user_msg = messages[i]
assistant_msg= messages[i + 1]
# skip malformed pairs
if user_msg["role"] != "user" or assistant_msg["role"] != "assistant":
i += 1
continue
# write original pair once
out_f.write(json.dumps(user_msg, ensure_ascii=False) + "\n")
out_f.write(json.dumps(assistant_msg, ensure_ascii=False) + "\n")
# generate paraphrases for this question
n_variants = random.randint(3, 10)
texts = [user_msg["content"]] * n_variants
temps = [round(random.uniform(*TEMPERATURE_RANGE), 2) for _ in range(n_variants)]
try:
paraphrases = paraphrase_batch(texts, model_name, temps)
except Exception as e:
print(f"\n⚠️ Fehler bei {user_msg['content']!r}: {e}")
# fallback: reuse original text
paraphrases = [user_msg["content"]] * n_variants
for p in paraphrases:
out_f.write(json.dumps({"role": "user", "content": p}, ensure_ascii=False) + "\n")
out_f.write(json.dumps(assistant_msg, ensure_ascii=False) + "\n")
i += 2
pbar.update(1)
time.sleep(0.05) # gentle ratelimit
out_f.close()
print(f"{output_path} fertig {(len(messages)//2)*(1+n_variants)} Zeilen")
# ---------- MAIN ENTRY ----------
def main():
import argparse
parser = argparse.ArgumentParser(
description="Generate paraphrases for a JSONL of user/assistant pairs using multiple models."
)
parser.add_argument("--input", type=Path, default="refusal_questions.jsonl",
help="Input file (JSON array of messages)")
parser.add_argument("--out-dir", type=Path, default="./paraphrases",
help="Directory to write the permodel JSONL files")
args = parser.parse_args()
# Ensure output directory exists
args.out_dir.mkdir(parents=True, exist_ok=True)
# Load all messages once works for < 1M lines comfortably
print(f"Loading {args.input}")
with args.input.open("r", encoding="utf-8") as f:
messages = json.load(f) # expects a JSON array
# Iterate over the models automatically
for model_name in MODELS:
output_path = args.out_dir / f"{model_name}.jsonl"
process_model(model_name, output_path, messages)
if __name__ == "__main__":
main()