From 5545d032be188fd8b22b87dbbfe9a6f3ebd5eedd Mon Sep 17 00:00:00 2001 From: "petethegoat@gmail.com" Date: Fri, 18 Nov 2011 00:45:50 +0000 Subject: [PATCH] Experimental DMF vending machine update, by Tobba. Pretty sure everyone who cares knows about this already, but the low down is that shit is more responsive and potentially prettier. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2529 316c924e-a436-60f5-8080-3fe189b3f50e --- code/game/machinery/vending.dm | 111 ++++-- code/game/skincmd.dm | 13 + html/changelog.html | 9 + icons/vending_icons/vendingslot_bg.png | Bin 0 -> 3375 bytes interface/skin.dmf | 490 ++++++++++++++++++++++++- tgstation.dme | 2 + 6 files changed, 594 insertions(+), 31 deletions(-) create mode 100644 code/game/skincmd.dm create mode 100644 icons/vending_icons/vendingslot_bg.png diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 74dfd1b5cae..ffb449cbead 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -4,6 +4,7 @@ WIRE_SCANID = 2 WIRE_SHOCK = 3 WIRE_SHOOTINV = 4 + var/page /datum/data/vending_product var/product_name = "generic" @@ -13,6 +14,7 @@ /obj/machinery/vending/New() ..() + page = 1 spawn(4) src.slogan_list = dd_text2List(src.product_slogans, ";") var/list/temp_paths = dd_text2List(src.product_paths, ";") @@ -93,6 +95,80 @@ continue return +/obj/machinery/vending/proc/updateWindow(mob/user as mob) + var/i + for (i = 1, i <= 6, i++) + winclone(user, "vendingslot", "vendingslot[i]") + winset(user, "vendingwindow.slot[i]", "left=vendingslot[i]") + winset(user, "vendingslot[i].buy", "command=\"skincmd vending;buy[i-1]\"") + winset(user, "vendingwindow.title", "text=\"[src.name]\"") + var/list/products = src.product_records + var/pages = -round(-products.len / 6) + if (page > pages) + page = pages + winset(user, "vendingwindow.page", "text=[page]/[pages]") + + var/base = (page-1)*6+1 + for (i = 0, i < 6, i++) + if (products.len >= base + i) + var/datum/data/vending_product/product = products[base + i] + winset(user, "vendingslot[i+1].name", "text=\"[product.product_name]\"") + if (product.amount > 0) + winset(user, "vendingslot[i+1].stock", "text=\"Left in stock: [product.amount]\"") + winset(user, "vendingslot[i+1].stock", "text-color=\"#000000\"") + winshow(user, "vendingslot[i+1].buy", 1) + else + winset(user, "vendingslot[i+1].stock", "text=\"OUT OF STOCK\"") + winset(user, "vendingslot[i+1].stock", "text-color=\"#FF0000\"") + winshow(user, "vendingslot[i+1].buy", 0) + winshow(user, "vendingwindow.slot[i+1]", 1) + else + winshow(user, "vendingwindow.slot[i+1]", 0) + +/obj/machinery/vending/SkinCmd(mob/user as mob, var/data as text) + if (get_dist(user, src) > 1) + return + var/list/products = src.product_records + var/pages = -round(-products.len / 6) + switch(data) + if ("pagen") + page++ + if (page > pages) + page = pages + if ("pagep") + page-- + if (page < 1) + page = 1 + if (copytext(data, 1, 4) == "buy") + var/base = (page-1)*6+1 + var/num = text2num(copytext(data, 4)) + if (products.len < base + num) + return + var/datum/data/vending_product/R = products[base + num] + var/product_path = text2path(R.product_path) + + if (R.amount <= 0) + return + if (!src.vend_ready) + return + + R.amount-- + src.vend_ready = 0 + + if(((src.last_reply + (src.vend_delay + 200)) <= world.time) && src.vend_reply) + spawn(0) + src.speak(src.vend_reply) + src.last_reply = world.time + + use_power(5) + if (src.icon_vend) //Show the vending animation if needed + flick(src.icon_vend,src) + spawn(src.vend_delay) + new product_path(get_turf(src)) + src.vend_ready = 1 + + updateWindow(user) + /obj/machinery/vending/attackby(obj/item/weapon/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/card/emag)) @@ -135,32 +211,9 @@ if(src.shock(user, 100)) return - var/dat = "Select an item:
" - - if (product_coin != "") - dat += "Coin slot: [coin ? coin : "No coin inserted"] (Remove)

" - - if (src.product_records.len == 0) - dat += "No product loaded!" - else - var/list/display_records = src.product_records - if(src.extended_inventory) - display_records = src.product_records + src.hidden_records - if(src.coin) - display_records = src.product_records + src.coin_records - if(src.coin && src.extended_inventory) - display_records = src.product_records + src.hidden_records + src.coin_records - - for (var/datum/data/vending_product/R in display_records) - dat += "[R.product_name]:" - dat += " [R.amount] " - if (R.amount > 0) - dat += "Vend" - else - dat += "SOLD OUT" - dat += "
" - - dat += "
" + updateWindow(user) + winshow(user, "vendingwindow", 1) + user.skincmds["vending"] = src if(panel_open) var/list/vendwires = list( @@ -169,7 +222,7 @@ "Goldenrod" = 3, "Green" = 4, ) - dat += "


Access Panel
" + var/dat = "


Access Panel
" for(var/wiredesc in vendwires) var/is_uncut = src.wires & APCWireColorToFlag[vendwires[wiredesc]] dat += "[wiredesc] wire: " @@ -188,9 +241,9 @@ if (product_slogans != "") dat += "The speaker switch is [src.shut_up ? "off" : "on"]. Toggle" + user << browse(dat, "") + onclose(user, "") - user << browse(dat, "") - onclose(user, "") return /obj/machinery/vending/Topic(href, href_list) diff --git a/code/game/skincmd.dm b/code/game/skincmd.dm new file mode 100644 index 00000000000..fd9131538e4 --- /dev/null +++ b/code/game/skincmd.dm @@ -0,0 +1,13 @@ +/mob/var/skincmds = list() +/obj/proc/SkinCmd(mob/user as mob, var/data as text) + +/proc/SkinCmdRegister(var/mob/user, var/name as text, var/O as obj) + user.skincmds[name] = O + +/mob/verb/skincmd(data as text) + set hidden = 1 + + var/ref = copytext(data, 1, findtext(data, ";")) + if (src.skincmds[ref] != null) + var/obj/a = src.skincmds[ref] + a.SkinCmd(src, copytext(data, findtext(data, ";") + 1)) \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index 441190001e0..a7d656e3d00 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -54,6 +54,15 @@ Stuff which is in development and not yet visible to players or just code relate (ie. code improvements for expandability, etc.) should not be listed here. They should be listed in the changelog upon commit tho. Thanks. --> +16 November 2011 +
    +
  • Tobba updated: +
      +
    • Report any issues with the updated vending machines!
    • +
    +
  • +
+ 16 November 2011
  • Petethegoat updated: diff --git a/icons/vending_icons/vendingslot_bg.png b/icons/vending_icons/vendingslot_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..6fb6fdcf8b9b2bbbef8acce5dc0c9dd9bf07a262 GIT binary patch literal 3375 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 cxVRt(v