diff --git a/code/modules/arcade/arcade_base.dm b/code/modules/arcade/arcade_base.dm index 8a3a1ae7009..da83338b5f3 100644 --- a/code/modules/arcade/arcade_base.dm +++ b/code/modules/arcade/arcade_base.dm @@ -11,8 +11,8 @@ var/tokens = 0 var/freeplay = 0 //for debugging and admin kindness var/token_price = 0 - var/playing = 0 //only has one set of controls, so only one person can play at once var/last_winner = null //for letting people who to hunt down and steal prizes from + var/window_name = "arcade" //in case you want to change the window name for certain machines /obj/machinery/arcade/New() ..() @@ -34,22 +34,29 @@ else user << "\The [src.name] has [tokens] play credits!" +/obj/machinery/arcade/attack_hand(mob/user as mob) + if(..()) + if(in_use && src == user.machine) //this one checks if they fell down/died and closes the game + src.close_game() + return + if(in_use && src == user.machine) //this one just checks if they are playing so it doesn't eat tokens + return + interact(user) + /obj/machinery/arcade/interact(mob/user as mob) if(stat & BROKEN || panel_open) - return 0 + return if(!tokens && !freeplay) user << "\The [src.name] doesn't have enough credits to play! Pay first!" - return 0 - if(!playing && (tokens || freeplay)) - user.set_machine(src) - playing = 1 - if(!freeplay) - tokens -= 1 - return 1 - if(playing && (src != user.machine)) - user << "Someone else is already playing this machine, please wait your turn!" - return 0 - return 1 + return + if(!in_use && (tokens || freeplay)) + in_use = 1 + start_play(user) + return + if(in_use) + if(src != user.machine) + user << "Someone else is already playing this machine, please wait your turn!" + return /obj/machinery/arcade/attackby(var/obj/item/O as obj, var/mob/user as mob, params) if(istype(O, /obj/item/weapon/screwdriver) && anchored) @@ -129,4 +136,30 @@ T.date = current_date_string T.time = worldtime2text() customer_account.transaction_log.Add(T) - return 1 \ No newline at end of file + return 1 + +/obj/machinery/arcade/proc/start_play(mob/user as mob) + user.set_machine(src) + if(!freeplay) + tokens -= 1 + +/obj/machinery/arcade/proc/close_game() + in_use = 0 + for(var/mob/user in viewers(world.view, src)) // I don't know who you are. + if(user.client && user.machine == src) // I will look for you, + user.unset_machine() // I will find you, + user << browse(null, "window=[window_name]") // And I will kill you. + return + +/obj/machinery/arcade/proc/win() + return + +/obj/machinery/arcade/process() + if(in_use) + src.updateUsrDialog() + if(!in_use) + src.close_game() + +/obj/machinery/arcade/Destroy() + src.close_game() + return ..() \ No newline at end of file diff --git a/code/modules/arcade/claw_game.dm b/code/modules/arcade/claw_game.dm index fb7d41d487e..30dae8567d0 100644 --- a/code/modules/arcade/claw_game.dm +++ b/code/modules/arcade/claw_game.dm @@ -6,6 +6,7 @@ icon = 'icons/obj/arcade.dmi' icon_state = "clawmachine_1_on" token_price = 15 + window_name = "Claw Game" var/machine_image = "_1" var/bonus_prize_chance = 5 //chance to dispense a SECOND prize if you win, increased by matter bin rating @@ -18,8 +19,11 @@ 'icons/obj/arcade_images/prizeorbs.png') /obj/machinery/arcade/claw/New() + src.addAtProcessing() + machine_image = pick("_1", "_2") update_icon() + component_parts = list() component_parts += new /obj/item/weapon/circuitboard/clawgame(null) component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) @@ -27,6 +31,7 @@ component_parts += new /obj/item/stack/cable_coil(null, 5) component_parts += new /obj/item/stack/sheet/glass(null, 1) RefreshParts() + if(!claw_game_html) claw_game_html = file2text('code/modules/arcade/crane.html') claw_game_html = replacetext(claw_game_html, "/* ref src */", "\ref[src]") @@ -48,7 +53,7 @@ icon_state = "clawmachine[machine_image]_on" return -/obj/machinery/arcade/claw/proc/win() +/obj/machinery/arcade/claw/win() icon_state = "clawmachine[machine_image]_win" visible_message("[src.name] beeps, \"WINNER!\"") if(prob(bonus_prize_chance)) @@ -59,17 +64,12 @@ spawn(10) update_icon() -/obj/machinery/arcade/claw/attack_hand(mob/user as mob) - interact(user) - -/obj/machinery/arcade/claw/interact(mob/user as mob) - if(!..()) - return +/obj/machinery/arcade/claw/start_play(mob/user as mob) + ..() user << browse_rsc('page.css') for(var/i=1, i<=img_resources.len, i++) user << browse_rsc(img_resources[i]) - user << browse(claw_game_html, "window=arcade;size=700x600;can_close=0") - return + user << browse(claw_game_html, "window=[window_name];size=700x600") /obj/machinery/arcade/claw/Topic(href, list/href_list) if(..()) @@ -77,8 +77,6 @@ var/prize_won = null prize_won = href_list["prizeWon"] if(!isnull(prize_won)) - usr.unset_machine() - playing = 0 - usr << browse(null, "window=arcade") //just in case + close_game() if(prize_won == "1") - win() + win() \ No newline at end of file diff --git a/code/modules/arcade/crane.html b/code/modules/arcade/crane.html index 22fdc0e782c..3cf0fc67ae3 100644 --- a/code/modules/arcade/crane.html +++ b/code/modules/arcade/crane.html @@ -49,7 +49,7 @@ setTimeout(function(){ state='falling'; $('#debug-streak').html(0); //reset streak - setTimeout(gameShutDown(),500); //end game because you dropped it + setTimeout(gameShutDown,500); //end game because you dropped it },4*error+300); } @@ -252,9 +252,14 @@ if(prizeWon) close_game_link = '