extends Control @onready var close_btn = %CloseBtn @onready var save_btn = %SaveBtn @onready var status_lbl = %StatusLabel @onready var text_edit = %TextEdit func _ready(): close_btn.pressed.connect(func(): queue_free()) save_btn.pressed.connect(_on_save) _load_config() func _load_config(): if not NakamaManager.session: status_lbl.text = "Not authenticated" return status_lbl.text = "Loading..." var res = await NakamaManager.client.rpc_async(NakamaManager.session, "get_daily_reward_config_admin", "{}") if res.is_exception(): status_lbl.text = "Error: " + res.get_exception().message return var json = JSON.new() if json.parse(res.payload) == OK: var config = json.get_data().get("config", {}) if config.is_empty(): # generate default 12 months for 2026/2027 var year = 2026 for m in range(1, 13): var m_str = "%d-%02d" % [year, m] var arr = [] for d in range(30): arr.append(min(10 + d*5, 100)) # Reward is star currency, max 100 config[m_str] = arr text_edit.text = JSON.stringify(config, "\t") status_lbl.text = "Loaded" func _on_save(): var json = JSON.new() if json.parse(text_edit.text) != OK: status_lbl.text = "Invalid JSON syntax. Please check your formatting." return status_lbl.text = "Saving..." var req = { "config": json.get_data() } var res = await NakamaManager.client.rpc_async(NakamaManager.session, "set_daily_reward_config", JSON.stringify(req)) if res.is_exception(): status_lbl.text = "Save error: " + res.get_exception().message else: status_lbl.text = "Config saved successfully!"