-- name: \\#ffbd00\\McDonald's \\#ff0000\\Server \\#ffbd00\\Commands -- description: \\#ffbd00\\McDonald's \\#ff0000\\Server \\#ffbd00\\Commands\nBy \\#ffd700\\SuperStar\n\n\\#ffd700\\Have Some Fun. Adds some commands and a Money counter on the top of your screen to improve your McDonald's experience! CMDS: 1./add to add money 2. /take to take away money 3. /order to order anything with a custom message 4. /seemoney to toggle the money counter hud off or on -- Initialize global sync table for money gGlobalSyncTable.money = 0 -- Initialize player sync table for roles and panel state for i = 0, MAX_PLAYERS - 1 do gPlayerSyncTable[i].role = "customer" gPlayerSyncTable[i].panelOpen = false end -- Local variables local showMoney = true -- Localize functions for performance local network_is_server = network_is_server local djui_chat_message_create = djui_chat_message_create local djui_hud_set_resolution = djui_hud_set_resolution local djui_hud_set_font = djui_hud_set_font local djui_hud_set_color = djui_hud_set_color local djui_hud_render_rect = djui_hud_render_rect local djui_hud_print_text = djui_hud_print_text local djui_hud_get_screen_width = djui_hud_get_screen_width local djui_hud_get_screen_height = djui_hud_get_screen_height local djui_hud_measure_text = djui_hud_measure_text -- Utility function to format money with commas local function format_money(n) local s = tostring(n) while true do s, k = string.gsub(s, "^(-?%d+)(%d%d%d)", "%1,%2") if k == 0 then break end end return s end -- Get role counts local function get_counts() local managers = 0 local employees = 0 local customers = 0 for i = 0, MAX_PLAYERS - 1 do if gNetworkPlayers[i].connected then local role = gPlayerSyncTable[i].role if role == "manager" then managers = managers + 1 elseif role == "employee" then employees = employees + 1 else customers = customers + 1 end end end return managers, employees, customers end -- HUD rendering for money display local function hud_render_money() if not showMoney then return end djui_hud_set_resolution(RESOLUTION_N64) djui_hud_set_font(FONT_NORMAL) local scale = 0.5 local text = "CASH REGISTER" local moneyText = "McDonald's Money: $" .. format_money(gGlobalSyncTable.money) -- Calculate positions local screenWidth = djui_hud_get_screen_width() local width = djui_hud_measure_text(text) * scale local moneyWidth = djui_hud_measure_text(moneyText) * scale local maxWidth = math.max(width, moneyWidth) local x = (screenWidth - maxWidth) * 0.5 local y = 20 -- Render McDonald's colored background (red) djui_hud_set_color(218, 41, 28, 200) djui_hud_render_rect(x - 10, y - 5, maxWidth + 20, 40) -- Render "CASH REGISTER" in white at top djui_hud_set_color(255, 255, 255, 255) djui_hud_print_text(text, x, y, scale) -- Render money text in yellow djui_hud_set_color(255, 199, 44, 255) djui_hud_print_text(moneyText, x, y + 20, scale) end -- HUD rendering for worker panel local function hud_render_panel() -- Only render if the local player has their panel open if not gPlayerSyncTable[0].panelOpen then return end -- Set up DJUI resolution and font djui_hud_set_resolution(RESOLUTION_N64) djui_hud_set_font(FONT_NORMAL) local w = djui_hud_get_screen_width() local h = djui_hud_get_screen_height() local x = w - 220 local y = 60 djui_hud_set_color(255, 220, 0, 180) djui_hud_render_rect(x, y, 200, 140) -- text color djui_hud_set_color(0, 0, 0, 255) -- title djui_hud_print_text("McDonald's", x + 40, y + 10, 1) local m, e, c = get_counts() djui_hud_print_text("Managers: " .. m, x + 20, y + 50, 0.8) djui_hud_print_text("Employees: " .. e, x + 20, y + 70, 0.8) djui_hud_print_text("Customers: " .. c, x + 20, y + 90, 0.8) end -- Combined HUD render function local function on_hud_render() hud_render_money() hud_render_panel() end hook_event(HOOK_ON_HUD_RENDER, on_hud_render) -- Update function for D-Pad toggle local function on_update() local m = gMarioStates[0] if not m then return end -- D-Pad Left toggle (only local player can toggle their own panel) if m.controller.buttonPressed & L_JPAD ~= 0 then gPlayerSyncTable[0].panelOpen = not gPlayerSyncTable[0].panelOpen end end hook_event(HOOK_UPDATE, on_update) -- Chat command: seemoney local function on_seemoney_command(msg) showMoney = not showMoney djui_chat_message_create("Money display: " .. (showMoney and "enabled" or "disabled")) return true end -- Chat command: add money local function on_add_money_command(msg) if not network_is_server() then djui_chat_message_create("\\#ffa0a0\\Only the host can add money!") return true end local amount = tonumber(msg) if not amount then djui_chat_message_create("Usage: /add ") return true end gGlobalSyncTable.money = gGlobalSyncTable.money + math.floor(amount) djui_chat_message_create("Added $" .. format_money(amount)) return true end -- Chat command: take money local function on_take_money_command(msg) if not network_is_server() then djui_chat_message_create("\\#ffa0a0\\Only the host can take money!") return true end local amount = tonumber(msg) if not amount then djui_chat_message_create("Usage: /take ") return true end gGlobalSyncTable.money = math.max(0, gGlobalSyncTable.money - math.floor(amount)) djui_chat_message_create("Removed $" .. format_money(amount)) return true end -- Chat command: set role local function on_role_command(msg) if not network_is_server() then djui_chat_message_create("Host only!") return true end local args = {} for word in string.gmatch(msg, "%S+") do table.insert(args, word) end local target = args[1] local role = args[2] if target == nil or role == nil then djui_chat_message_create("Usage: /role ") return true end -- Find player by name local targetIndex = nil for i = 0, MAX_PLAYERS - 1 do if gNetworkPlayers[i].connected and gNetworkPlayers[i].name == target then targetIndex = i break end end if targetIndex == nil then djui_chat_message_create("Player not found: " .. target) return true end gPlayerSyncTable[targetIndex].role = role djui_chat_message_create(target .. " set to " .. role) return true end -- Chat command: mcdinfo local function on_mcd_info_command(msg) djui_chat_message_create("--- Welcome to \\#ff0000\\Domi\\#ffbd00\\nator\\'s MCD server! ---") djui_chat_message_create("Use /order To Order!") return true end -- Hook to receive order messages from other players local function on_packet_receive(dataTable) if dataTable.type == "order" then djui_chat_message_create("\\#FFCC00\\" .. dataTable.player .. " \\#FFFFFF\\ordered \\#00FF00\\" .. dataTable.message) end end hook_event(HOOK_ON_PACKET_RECEIVE, on_packet_receive) -- Chat command: order (CORRECTED - uses network_send to broadcast to all players) local function on_order_command(msg) local player_name = gNetworkPlayers[0].name if msg == "" or msg == nil then msg = "nothing" end -- Send the order message to all players using network_send network_send(true, { type = "order", player = player_name, message = msg }) -- Also display locally djui_chat_message_create("\\#FFCC00\\" .. player_name .. " \\#FFFFFF\\ordered \\#00FF00\\" .. msg) return true end -- Hook all chat commands hook_chat_command("seemoney", "[toggle] show/hide money display", on_seemoney_command) hook_chat_command("add", "", on_add_money_command) hook_chat_command("take", "", on_take_money_command) hook_chat_command("role", "[player_name] - Set player role (host only)", on_role_command) hook_chat_command("mcdinfo", "Displays McDonald's server details", on_mcd_info_command) hook_chat_command("order", "[anything] Places an order", on_order_command)