Files
Grinch-AP/worlds/kdl3/gifting.py
Silvris 211456242e KDL3: update to gifting protocol 3 and update settings usage (#4814)
* gift version 3

* update settings usage

* that really has just been broken this entire time

* remove unnecessary print

* Update client.py

* fix random flavor handling

* fix incorrect sender/receiver

---------

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
2025-06-16 13:00:47 -04:00

287 lines
6.8 KiB
Python

# Small subfile to handle gifting info such as desired traits and giftbox management
import typing
if typing.TYPE_CHECKING:
from SNIClient import SNIContext
async def update_object(ctx: "SNIContext", key: str, value: typing.Dict[str, typing.Any]) -> None:
await ctx.send_msgs([
{
"cmd": "Set",
"key": key,
"default": {},
"want_reply": False,
"operations": [
{"operation": "update", "value": value}
]
}
])
async def pop_object(ctx: "SNIContext", key: str, value: str) -> None:
await ctx.send_msgs([
{
"cmd": "Set",
"key": key,
"default": {},
"want_reply": False,
"operations": [
{"operation": "pop", "value": value}
]
}
])
async def initialize_giftboxes(ctx: "SNIContext", giftbox_key: str, motherbox_key: str, is_open: bool) -> None:
ctx.set_notify(motherbox_key, giftbox_key)
await update_object(ctx, f"Giftboxes;{ctx.team}", {f"{ctx.slot}":
{
"is_open": is_open,
**kdl3_gifting_options
}})
await update_object(ctx, f"Giftbox;{ctx.team};{ctx.slot}", {})
ctx.client_handler.gifting = is_open
kdl3_gifting_options = {
"accepts_any_gift": True,
"desired_traits": [
"Consumable", "Food", "Drink", "Candy", "Tomato",
"Invincible", "Life", "Heal", "Health", "Trap",
"Goo", "Gel", "Slow", "Slowness", "Eject", "Removal"
],
"minimum_gift_version": 3,
}
kdl3_gifts = {
1: {
"item_name": "1-Up",
"amount": 1,
"item_value": 400000,
"traits": [
{
"trait": "Consumable",
"quality": 1,
"duration": 1,
},
{
"trait": "Life",
"quality": 1,
"duration": 1
}
]
},
2: {
"item_name": "Maxim Tomato",
"amount": 1,
"item_value": 500000,
"traits": [
{
"trait": "Consumable",
"quality": 5,
"duration": 1,
},
{
"trait": "Heal",
"quality": 5,
"duration": 1,
},
{
"trait": "Food",
"quality": 5,
"duration": 1,
},
{
"trait": "Tomato",
"quality": 5,
"duration": 1,
},
{
"trait": "Vegetable",
"quality": 5,
"duration": 1,
}
]
},
3: {
"item_name": "Energy Drink",
"amount": 1,
"item_value": 100000,
"traits": [
{
"trait": "Consumable",
"quality": 1,
"duration": 1,
},
{
"trait": "Heal",
"quality": 1,
"duration": 1,
},
{
"trait": "Drink",
"quality": 1,
"duration": 1,
},
]
},
5: {
"item_name": "Small Star Piece",
"amount": 1,
"item_value": 10000,
"traits": [
{
"trait": "Currency",
"quality": 1,
"duration": 1,
},
{
"trait": "Money",
"quality": 1,
"duration": 1,
},
{
"trait": "Star",
"quality": 1,
"duration": 1
}
]
},
6: {
"item_name": "Medium Star Piece",
"amount": 1,
"item_value": 30000,
"traits": [
{
"trait": "Currency",
"quality": 3,
"duration": 1,
},
{
"trait": "Money",
"quality": 3,
"duration": 1,
},
{
"trait": "Star",
"quality": 3,
"duration": 1
}
]
},
7: {
"item_name": "Large Star Piece",
"amount": 1,
"item_value": 50000,
"traits": [
{
"trait": "Currency",
"quality": 5,
"duration": 1,
},
{
"trait": "Money",
"quality": 5,
"duration": 1,
},
{
"trait": "Star",
"quality": 5,
"duration": 1
}
]
},
}
kdl3_trap_gifts = {
0: {
"item_name": "Gooey Bag",
"amount": 1,
"item_value": 10000,
"traits": [
{
"trait": "Trap",
"quality": 1,
"duration": 1,
},
{
"trait": "Goo",
"quality": 1,
"duration": 1,
},
{
"trait": "Gel",
"quality": 1,
"duration": 1
}
]
},
1: {
"item_name": "Slowness",
"amount": 1,
"item_value": 10000,
"traits": [
{
"trait": "Trap",
"quality": 1,
"duration": 1,
},
{
"trait": "Slow",
"quality": 1,
"duration": 1,
},
{
"trait": "Slowness",
"quality": 1,
"duration": 1
}
]
},
2: {
"item_name": "Eject Ability",
"amount": 1,
"item_value": 10000,
"traits": [
{
"trait": "Trap",
"quality": 1,
"duration": 1,
},
{
"trait": "Eject",
"quality": 1,
"duration": 1,
},
{
"trait": "Removal",
"quality": 1,
"duration": 1
}
]
},
3: {
"item_name": "Bad Meal",
"amount": 1,
"item_value": 10000,
"traits": [
{
"trait": "Trap",
"quality": 1,
"duration": 1,
},
{
"trait": "Damage",
"quality": 1,
"duration": 1,
},
{
"trait": "Food",
"quality": 1,
"duration": 1
}
]
},
}