Files
tipibot/strings/games.py
2026-08-19 19:12:48 +03:00

308 lines
18 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Minigames & gambling: slots, roulette, RPS, blackjack, heist, jailbreak.
Auto-split from the original strings.py; edit strings here.
"""
from core.emoji import EMOJI as E
__all__ = [
'SLOTS_TIERS',
'ROULETTE',
'HEIST_STORY',
'HEIST_UI',
'BJ',
'JAILBREAK_UI',
'SLOTS_UI',
'RPS_UI',
'RPS_CHOICES',
'BJ_UI',
]
# ---------------------------------------------------------------------------
# /slots outcome strings (title, colour)
# ---------------------------------------------------------------------------
SLOTS_TIERS: dict[str, tuple[str, int]] = {
"jackpot": (f"{E['TipiFIRE']} JACKPOT!!!", 0xF4C430),
"triple": ("🎰 Kolmik!", 0x57F287),
"pair": ("🎰 Paar", 0x99AAB5),
"miss": (f"{E['TipICRY']} Ei õnnestunud", 0xED4245),
}
# ---------------------------------------------------------------------------
# /roulette outcome strings
# ---------------------------------------------------------------------------
ROULETTE: dict = {
"emoji": {"punane": "🔴", "must": "", "roheline": "🟢"},
"genitive": {"punane": "punase", "must": "musta", "roheline": "rohelise"},
"win_title": "{emoji} Võitsid!",
"lose_title": "{emoji} Kaotasid!",
"win_desc": "Ratas peatus **{genitive}** peal!{mult}\n+{change}\nSaldo: {balance}",
"lose_desc": "Ratas peatus **{genitive}** peal.\n-{change}\nSaldo: {balance}",
"spin_title": "🎰 Ratas keerleb...",
"spin_stop": "🎰 Ratas peatub...",
"spin_strip": "{s0} {s1} {s2} {s3} {s4}",
}
# ---------------------------------------------------------------------------
# /heist narrative story lines
# Placeholders: {leader}, {member}, {names}, {vehicle}
# ---------------------------------------------------------------------------
HEIST_STORY: dict = {
"vehicles": [
"Škoda",
"BMW",
"Lada",
"Mazda",
],
"arrival": [
"{leader} keerab nurga taga {vehicle} mootori kinni. Maskid ette. Keegi ei räägi.",
"{vehicle} peatub ühe kvartali kaugusel sihtmärgist. {leader}: *\"Pank on seal. Tegutseme plaani järgi.\"*",
"Meeskond astub {vehicle}st välja. {leader} kuulab kõrvamonitori. *\"Kaks valvurit, üks pimeala. Liigume nüüd.\"*",
"{leader} jälgib {vehicle}st sissepääsu. *\"Valvurite vahetus 40 sekundi pärast. See on meie ajaaken.\"*",
"Kell 3 öösel. Tänav on tühi. {vehicle} seisab väljas tühikäigul. {leader} tõmbab maski ette.",
"{vehicle} veereb aeglaselt vaiksesse pimedasse vahetänavasse. {leader}: *\"Viimane kontroll. Kõik valmis?\"*",
"{leader} koputab armatuurlauale. *\"Kui midagi läheb valesti, me lahkume kohe.\"* Vaikus vastuseks.",
"Tuul sahiseb mööda tühja tänavat. {vehicle} uksed avanevad korraga.",
"{member} kontrollib relva. {leader} vaatab kella. *\"Me oleme graafikus.\"*",
"{vehicle} tuled kustuvad. Linn jääb vaikseks. Nad liiguvad.",
],
"entry_sneaky": [
"{member} tõmbab kloonitud kaarti külgukse juures. Lukk klõpsab hääleta lahti.",
"Meeskond libiseb sisse laadimisestakaadi kaudu, riietatud öisteks koristajateks.",
"{leader} on kaks nädalat valvurite graafikut pähe õppinud. Röövlid kõnnivad sisse vahetuse ajal.",
"Võltsitud alltöövõtja kaardi abil saavad nad fuajeest läbi ilma lisaküsimuseta.",
"{member} lülitab välikaamerad sülearvutist välja. {leader} kõnnib sisse, nagu see oleks tema oma maja.",
"{member} kasutab signaaliblokeerijat. Häired ei jõua kunagi süsteemi.",
"{leader} avab ventilatsiooniluugi. *\"Läheme ülevalt.\"*",
"Turvamees haigutab. Sekund hiljem on ta seotud ja vaikselt nurka lohistatud.",
"{member} süstib lukku mikrokaamera. Mehhanism kaardistatakse sekunditega.",
],
"entry_loud": [
"{leader} lööb esiuksed lahti. *\"KÕIK PÕRANDALE - KOHE!\"*",
"Esmalt suitsugranaadid. Selleks ajaks, kui suits vaibub, on meeskond juba sees.",
"{leader} tulistab ühe lasu lakke. Haudvaikus. *\"Oleme siin seifi pärast! Kui teete koostööd, siis pääsete elusana.\"*",
"*\"Kui keegi ei liigu, ei saa keegi ka viga.\"* {leader} omab ruumi täielikku tähelepanu.",
"{member} lükkab kilbist elektri välja. Pimeduses juhib {leader} meeskonna mälu järgi edasi.",
"*\"See on rööv! Kõik pikali!\"* {leader} hääl kajab läbi saali.",
"Alarm hakkab ulguma juba enne, kui nad täielikult sisse jõuavad.",
"Klaas puruneb. Inimesed karjuvad. Täielik kaos.",
],
"inside": [
"{names} liiguvad kiiresti läbi fuajee, sidudes turvamehi postide külge kinni.",
"{member} katab väljapääsud. {leader} suundub otse seifi poole.",
"Üks kassapidajatest proovib käivitada vaikset häiret, kuid {member} märkab ta nihelemist ja peatab ta hoiatuslasuga.",
"{leader} hoiab töötajad rahulikuna samal ajal, kui teised suunduvad alumisele korrusele.",
"Turvakaamerad on tsüklil. {names} on korrusel üksi.",
"{member} kontrollib kellaaega. *\"Me oleme 30 sekundit ees.\"*",
"{leader} annab käemärgi. Meeskond jaguneb ilma sõnadeta.",
"Koridor on tühi. Liiga tühi. {leader} peatub hetkeks.",
"{names} liiguvad trepist alla, sammud summutatud.",
"Üks uks on lukus. {member} avab selle sekundiga.",
],
"vault": [
"Neljanda taseme ajalukuga seif. {member} tõmbab puuri välja. *\"Anna mulle kolm minutit.\"*",
"{leader} vaatab seifi ust. *\"Dünamiit.\"* Keegi ei vaidle.",
"{member} ühendub seifi juhtpaneeliga. Vana tarkvara. Ülevõtmine võtab 90 sekundit.",
"Seifil on käsikombinatsiooni lukk. Hea, et {leader} veetis kuu aega juhatajaga, teenides tema usaldust.",
"{member} paigutab lõhkeained. Meeskond astub tagasi. Üks kontrollitud plahvatus.",
"{leader} teeb magnetlukule tühistuse. Nagu õpikust võetud. Mehhanism annab järgi.",
"{member} higistab. *\"See pole standardlukk... anna mulle aega.\"*",
"{leader} kuulab vastu seifi ust. *\"Sees on liikumisandur.\"*",
"{member} lõikab läbi metallkihi nagu võid.",
"Ajurünnak. {leader} meenutab skeemi ja leiab nõrga koha.",
"{member} ühendab juhtmed ümber. Säde. Vaikus. Lukk avaneb.",
],
"vault_open": [
"Uks avaneb. Kuhi-kuhja järel raha, põrandast laeni. Täpselt nagu plaanitud.",
"*\"...jackpot.\"* {leader} piilub seifi sisse. Meeskond seisab hetkeks vaikuses.",
"{member} hakkab kotte täis laduma. {leader} piilub juba väljapääsu poole.",
"Puhas. Kiire. {names} on seifis ja täidavad kotte enne, kui tolm settib.",
"Seif on lahti. {leader} võtab hinge. *\"Okei. Kottidesse ja liikuma.\"*",
"{leader} naeratab esimest korda. *\"See oli seda väärt.\"*",
"Raha lõhn täidab õhu. {member}: *\"Võtame kõik.\"*",
"{names} töötavad vaikides. Iga liigutus loeb.",
"Kotid täituvad kiiremini kui oodatud.",
"{leader} pilk muutub tõsiseks. *\"Aeg otsas. Liigume.\"*",
],
"police_inbound": [
"Raadio krõbiseb. *\"Kõik üksused, relvastatud rööv Keskpangas-\"*",
"Väljas on kuulda eemalt ulguvaid sireene. {leader}: *\"Meil on umbes neli minutit. Liikuma.\"*",
"Punased ja sinised tuled vilguvad ülemistest akendest läbi. Varualarm käivitati.",
"Politsei helikopter skaneerib piirkonda prožektoriga. Aken sulgub kiiresti.",
"{member} kontrollib politsei skännerit. *\"Nad teavad. Kolm üksust, kaks minutit eemal.\"*",
"{member} kuulab raadiosidet. *\"Nad sulgevad kvartaleid.\"*",
"Sireenid lähenevad kiiremini kui plaanitud.",
"Helikopteri valgus libiseb üle akna. Liiga lähedal.",
],
"getaway_success": [
"Adrenaliin. {names} jooksevad {vehicle} juurde. Kõik sees. {leader} keerab mootori käima.",
"{member} haarab roolist. {leader} on kõrval. *\"Lähme.\"* Rahulikult.",
"{leader} libistab {vehicle} kõrvalteed pidi minema. Sireen kaugel taga. Nad on kiiremad.",
"Rohelised tuled. {vehicle} sõidab vaikselt mööda parklas ootavast patrullautost. Keegi ei märka.",
"{member} näitab teed. {leader} sõidab vaikselt läbi tagakvartali. Käed lõdvad.",
"{vehicle} rehvid vilisevad, kui nad pööravad kitsasse tänavasse.",
"{leader} sõidab ilma tuledeta. Ainult mälu juhib teda.",
"{member} vaatab kaarti. *\"Vasak, siis kohe parem!\"*",
"Mootor möirgab. Nad kaovad öösse.",
"{vehicle} libiseb läbi viimase rohelise tule.",
],
"getaway_fail": [
"{names} jooksevad {vehicle} juurde. Sireenid igalt poolt.",
"{member} haarab roolist. {leader} on kõrval. *\"Mine! MINE!\"*",
"{vehicle} kihutab tänavale, kuid helikopteri valgusvihk osutab neile. Kõik on nähtaval.",
"Kolm patrullautot jõuavad nende taha. {member} vaatab üle õla. *\"Nad on meil kannul.\"*",
"Raadio krõbiseb. *\"Sihtmärk kinnitatud. Blokeeri Liivalaia tänav.\"*",
"{vehicle} ei käivitu. {member}: *\"Päriselt ka või?!\"*",
"{member} komistab teel autoni. Tal oli pael lahti tulnud",
"{leader} avastab, et autot pole kuskil näha. See pukseeriti ära."
],
"escape_success": [
"{names} murravad läbi perimeetri enne väravate sulgemist. Puhas põgenemine.",
"{leader} oli planeerinud kolm väljumisteed. Vaja läks ühte. {vehicle} kaob linna.",
"Kahe kvartali kaugusel asuv peibutushäire tõmbab üksused eemale. {names} on kadunud enne, kui keegi seifi kontrollib.",
"Naelribad? Juba eemaldatud. Teeblokk? Vale tänav. {leader} mõtles kõigele.",
"{vehicle} sõidab maanteele nagu poleks midagi juhtunud. {leader} hingab esimest korda tunnis välja.",
"*\"Oleme vabad.\"* {member} piilub kardinate tagant välja. Tühi tänav. Nad tegid ära.",
"{names} kaovad sügavale linna nagu neid poleks kunagi olnud.",
"Raadio jääb vaikseks. Keegi ei jälita enam.",
"{vehicle} jäetakse maha. Uus plaan aktiveerub.",
"{leader}: *\"See oli liiga lihtne...\"*",
],
"escape_fail": [
"Patrullauto lõikab {vehicle} teekonna sillal ära. Mõlemalt poolt ümbritsetud. Ongi läbi.",
"{member} kukutab koti. Kolm sekundit kõhklust - ja uksed on ümber piiratud.",
"Helikopter jälgib neid kuni pelgupaigani. Kõik väljapääsud on kaetud.",
"{leader} arvutab võimalusi. *\"Väljapääsu pole.\"* Käed lähevad üles.",
"Naelribad lõhuvad {vehicle} rehvid. Meeskond libiseb liikluse keskele seisma.",
"{vehicle} põrkub vastu teetõket. Mootor sureb. Igast suunast tuled.",
],
}
# ---------------------------------------------------------------------------
# /heist UI strings
# ---------------------------------------------------------------------------
HEIST_UI: dict[str, str] = {
"names_duo": "**{a}** ja **{b}**",
"names_sep": " & ",
"names_crew": "**{leader}** ja meeskond",
"btn_join": "Ühine röövimisega 🔫",
"btn_start": "Alusta kohe ▶",
"already_joined": "Sa oled juba sees!",
"only_organizer": "Ainult heisti algataja saab heisti alustada.",
"lobby_desc": "**Osalejad ({n}/{max}):**\n{names}\n\nÕnnestumise tõenäosus: **{chance}%**\n\n*Ühinemisaken sulgub <t:{ts}:R>*",
"cancel_desc": "Ei piisanud osalejaid (vajad vähemalt **{min}**). Heist tühistati.",
"started_title": "🔫 Grupirööv käib...",
"started_desc": "**{n}** osalejat alustasid heisti. Jälgi allpool!",
"story_title": "🔫 Grupirööv",
"win_desc": "**Osalejad:**\n{names}\n\nSaak jagati võrdselt.\n**Igaüks sai: +{payout}**",
"fail_desc": "**Osalejad:**\n{names}\n\nKõik osalejad saavad **1,5 tundi vangi** + trahv ~15% saldost.",
}
# ---------------------------------------------------------------------------
# Blackjack in-game strings
# ---------------------------------------------------------------------------
BJ: dict[str, str] = {
"dealing": "*Jagame kaardid...*",
"result_field": "Tulemus",
"push_result": "±0 (panus tagasi)",
"doubled_label": "💰 *Topeltpanus: {total}*",
"btn_hit": "🃏 Võta kaart",
"btn_stand": "✋ Seisa",
"btn_double": "💰 Kahekordista (+{bet}⬡)",
"btn_split": "✂️ Split (+{bet}⬡)",
}
# ---------------------------------------------------------------------------
# /jailbreak UI strings
# ---------------------------------------------------------------------------
JAILBREAK_UI: dict[str, str] = {
"btn_roll": "🎲 Viska täringud ({try_}/{max})",
"rolling_desc": f"{E['TipiDICE']} *Täringud lendavad...*",
"free_desc": "{d1} {d2}\n\n✅ Viskasid duubli - pääsesid vanglast!",
"miss_desc": "{d1} {d2}\n\n{left} katset jäänud. Proovi uuesti!",
"intro_desc": "Oled vangis kuni {ts}.\n\nViska täringuid ja proovi **duublit** saada - siis pääsed tasuta vabaks!\nSul on **{tries} katset**. Ebaõnnestumisel saad valida: maksa kautsjon **(2030% saldost, min 350 ⬡)** või jää vanglasse kuni aja lõpuni.",
"already_bail": "Oled juba täringuid visanud. Ainuke väljapääs on kautsjon.\n\n💰 **Kautsjon: {min} {max}** (2030% saldost)\nSaldo: {bal} Väljas: {ts}",
"already_broke": "Oled juba täringuid visanud. Sul pole piisavalt raha kautsjoni maksmiseks.\n\n💰 Kautsjoni miinimum: **{min}** - sul on ainult {bal}\nVäljas: {ts}",
"bail_btn": "💸 Maksa kautsjon",
"bail_broke_desc": "❌ Sul pole piisavalt raha (min {min}).\nJääd vanglasse kuni aja lõpuni! Saldo: {balance}",
"bail_paid_desc": "✅ Kautsjon makstud: **{fine}**\nOled vaba! Saldo: {balance}",
"bail_already_free": "✅ Oled juba vaba - kautsjonit ei võetud. Saldo: {balance}",
"fail_broke_desc": "{d1} {d2} - ei olnud duubel\n\n❌ Sul pole kautsjoni maksmiseks piisavalt raha (min 350 ⬡).\nJääd vanglasse kuni aja lõpuni! Saldo: {balance}",
"fail_bail_desc": "{d1} {d2} - ei olnud duubel\n\nKautsjon makstud: **{fine}**\nSaldo: {balance}",
"fail_bail_offer": "{d1} {d2} - ei olnud duubel\n\n💰 **Kautsjon: {min} - {max}** (20-30% saldost)\nSaldo: {bal}\n\nSaad maksta kautsjoni või jääda vanglasse kuni aja lõpuni.",
}
# ---------------------------------------------------------------------------
# /slots additional UI strings (titles/footers per outcome)
# ---------------------------------------------------------------------------
SLOTS_UI: dict[str, str] = {
"playing": "🎰 Mängimas...",
"jackpot_footer": E["TipiKARIKAS"] + " Kolm karikat! +{change}",
"triple_footer": "✅ Kolm ühesugust! +{change}",
"pair_footer": "Kaks ühesugust! +{change}",
"miss_footer": "-{amount}",
"balance_line": "\nSaldo: {balance}",
}
# ---------------------------------------------------------------------------
# /rps UI strings
# ---------------------------------------------------------------------------
RPS_UI: dict[str, str] = {
"vs_bot_desc": "Tee oma valik! ⬇️",
"vs_bot_bet": "\nPanus: {bet}",
"result_tie": "🤝 Viik!",
"result_win": "🎉 Sina võitsid!",
"result_lose": "🤖 Bot võitis!",
"result_desc": "Sina: {player_pick} {player_name}\nBot: {bot_pick} {bot_name}\n\n**{result}**{bet_line}",
"bet_win": "\n+{amount} · Saldo: {balance}",
"bet_lose": "\n-{amount} · Saldo: {balance}",
"bet_tie": "\nViik - panus tagasi · Saldo: {balance}",
"challenge_desc": "{challenger} kutsub välja {opponent}{bet}\n\n{opponent}, kas võtad vastu? ⬇️",
"challenge_bet": " · Panus: {bet}",
"challenge_footer": "Väljakutse aegub 60 sekundi pärast",
"duel_active_desc": "{a} vs {b}{bet}\n\nMõlemad mängijad valivad DM-is. ⏳",
"duel_active_bet": " · Panus: {bet}",
"duel_dm": "⚔️ **KPK vs {opponent}**{bet}\nTee oma valik! ⬇️",
"duel_dm_bet": "\nPanus: {bet}",
"duel_waiting": "Valisid {choice} **{name}**. Ootame vastase valikut... ⏳",
"duel_result_a": "**⚔️ KPK tulemus vs {opponent}**\nSinu valik: {pick_a} {name_a}\nVastase valik: {pick_b} {name_b}\n\n**{result}**{bet_line}\nSaldo: {balance}",
"duel_verdict_win": "🏆 **{name}** võitis!",
"duel_verdict_tie": "🤝 Viik!",
"duel_broke": "\n⚠️ Makse ebaõnnestus (ebapiisav saldo)",
"duel_expire_dm": "⏰ KPK duell aegus - keegi ei teinud valikut õigeaegselt.",
"duel_expire_desc": "{a} vs {b}\n\nMäng aegus - valik jäi tegemata.",
"duel_dm_fail": "Ei saanud DM saata: **{names}**. Kontrolli privaatsussätteid.",
"duel_decline": "**{name}** keeldus väljakutsest.",
"duel_no_answer": "**{name}** ei vastanud väljakutsele.",
"duel_insufficient": "{mention}-l pole piisavalt TipiCOINi panuseks.",
"duel_done_desc": "{a} {pick_a} vs {pick_b} {b}\n\n**{verdict}**\n\n{name_a}: {bal_a}\n{name_b}: {bal_b}",
"server_only": "Seda käsku saab kasutada ainult serveris.",
"btn_accept": "Võta vastu ✅",
"btn_decline": "Keeldu ❌",
"btn_rock": "🪨 Kivi",
"btn_paper": "📄 Paber",
"btn_scissors": "✂️ Käärid",
}
RPS_CHOICES: dict[str, str] = {
"🪨": "Kivi",
"📄": "Paber",
"✂️": "Käärid",
}
BJ_UI: dict[str, str] = {
"dealer": "Dealer",
"player": "Sina",
"hand_n": "Käsi {n}",
"hand_active": "▶ **Käsi {n}**",
"hand_pending": "Käsi {n} *...*",
"bust": " 💥",
"balance_line": " · Saldo: {balance}",
}