1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-23 03:24:20 +00:00

roll: Improve and fix everything

This commit is contained in:
Steffo 2022-08-21 01:44:38 +02:00
parent d6c32c908b
commit cb86e0923d
Signed by: steffo
GPG key ID: 6965406171929D01
3 changed files with 61 additions and 24 deletions

View file

@ -111,7 +111,7 @@ register_telegram(tg_router, commands.fiorygi_bury, ["bury"],
register_telegram(tg_router, commands.version, ["version"]) register_telegram(tg_router, commands.version, ["version"])
register_telegram(tg_router, commands.cv, ["cv", "civù"]) register_telegram(tg_router, commands.cv, ["cv", "civù"])
register_telegram(tg_router, commands.rocoinflip, ["rocoinflip"], r'"(?P<teama>[^"]+)"\s+"(?P<teamb>[^"]+)"') register_telegram(tg_router, commands.rocoinflip, ["rocoinflip"], r'"(?P<teama>[^"]+)"\s+"(?P<teamb>[^"]+)"')
register_telegram(tg_router, commands.roll, ["roll"], r"(?P<qty>[0-9]*)d(?P<die>[0-9]+)(?P<mod>[+-][0-9]+)") register_telegram(tg_router, commands.roll, ["roll"], r"(?P<qty>[0-9]*)d(?P<die>[0-9]+)(?P<mod>[+-][0-9]+)?")
register_telegram(tg_router, commands.diobot, ["diobot", "phrase"]) register_telegram(tg_router, commands.diobot, ["diobot", "phrase"])
register_telegram(tg_router, commands.loginprogress, ["loginprogress"]) register_telegram(tg_router, commands.loginprogress, ["loginprogress"])

View file

@ -21,3 +21,4 @@ from .smecds import *
from .spell import * from .spell import *
from .version import * from .version import *
from .whoami import * from .whoami import *
from .roll import *

View file

@ -1,3 +1,4 @@
import typing as t
import datetime import datetime
import random import random
@ -8,41 +9,76 @@ import royalpack.bolts as rb
@rb.capture_errors @rb.capture_errors
@engi.TeleportingConversation @engi.TeleportingConversation
async def roll(*, _msg: engi.Message, qty: int, die: int, mod: int, **__): async def roll(*, _msg: engi.Message, qty: int, die: int, mod: t.Optional[int], **__):
""" """
Tira un dado nel formato di D&D: `1d20+1`, ad esempio. Tira un dado nel formato di D&D: `1d20+1`, ad esempio.
Non perfettamente casuale, **non usare per competizioni o altre cose serie**!
""" """
# modificatore supersegreto della fortuna. Ooooh! Questo è Top Secret! # modificatore supersegreto della fortuna. ooooh! questo è top secret!
# Steffo: hol up # "blame cate for this" --steffo
r = random.Random(x=hash(datetime.date.today()))
luck = r.randrange(-100, 100)/100*die/3
random.seed(datetime.datetime.now()) # usa il giorno attuale come seed
seed = hash(datetime.date.today())
lrand = random.Random(x=seed)
# la variazione massima del risultato deve essere di un sesto del tiro
luck = lrand.triangular(low=-0.17, high=0.17, mode=0.0)
# rolliamo i dadi richiesti # veniamo al dunque
roll = []
for i in range(quantity):
extracted = random.randint(1, die)
result = int(round(extracted+luck, 0)) # resetta il seed
drand = random.Random()
# tiriamo i dadi richiesti!
rolls = []
for i in range(qty):
# trova il risultato base del tiro
result = drand.randint(1, die)
# tira il valore di fortuna per vedere l'effetto sul dado
result += (drand.random() * luck) * die
# arrotonda il risultato
result = round(result)
# limita il risultato tra massimo e minimo per non destare sospetti
result = min(result, die) result = min(result, die)
result = max(result, 1) result = max(result, 1)
roll.append(result) rolls.append(result)
# decidi un'emoji da mostrare
if luck > 0:
emoji = "🔆"
else:
emoji = "🔅"
# formuliamo una risposta da mostrare all'utente # formuliamo una risposta da mostrare all'utente
answer = f"🎲 {qty}d{die}{mod:+} = {roll}"
if mod:
answer +=" "
if mod > 0:
answer += "+"
answer +=str(mod)
answer += " = "+str(sum(roll)+mod)
await _msg.reply(text=answer) # usando una lista di stringhe che uniremo per inviare il messaggio
# perchè? performance!
answer = [
f"{emoji} {qty}d{die}",
]
if mod and mod != 0:
answer.append(f"{mod:+}")
answer.append(" = ")
total = 0
for index, result in enumerate(rolls):
if index != 0:
answer.append("+")
answer.append(f"{result}")
total += result
answer.append(f" = \uE01B{total}\uE00B")
await _msg.reply(text="".join(answer))
__all__ = (
__all__ = ("roll",) "roll",
)