diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 74dfd1b5ca..ffb449cbea 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 0000000000..fd9131538e --- /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 441190001e..a7d656e3d0 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 + + 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 0000000000..6fb6fdcf8b Binary files /dev/null and b/icons/vending_icons/vendingslot_bg.png differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 7cdf65c631..434d8b171a 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -136,6 +136,40 @@ macro "macro" command = ".screenshot" is-disabled = false +macro "vending" + elem + name = "NORTHEAST" + command = "skincmd \"vending;pagen\"" + is-disabled = false + elem + name = "SOUTHEAST" + command = "skincmd \"vending;pagep\"" + is-disabled = false + elem + name = "1" + command = "skincmd \"vending;buy0\"" + is-disabled = false + elem + name = "2" + command = "skincmd \"vending;buy1\"" + is-disabled = false + elem + name = "3" + command = "skincmd \"vending;buy2\"" + is-disabled = false + elem + name = "4" + command = "skincmd \"vending;buy3\"" + is-disabled = false + elem + name = "5" + command = "skincmd \"vending;buy4\"" + is-disabled = false + elem + name = "6" + command = "skincmd \"vending;buy5\"" + is-disabled = false + menu "menu" elem @@ -567,7 +601,7 @@ window "outputwindow" window "rpane" elem "rpane" type = MAIN - pos = 559,121 + pos = 281,0 size = 640x480 anchor1 = none anchor2 = none @@ -825,7 +859,7 @@ window "infowindow" elem "info" type = INFO pos = 0,0 - size = 640x499 + size = 638x475 anchor1 = 0,0 anchor2 = 100,100 font-family = "" @@ -854,3 +888,455 @@ window "infowindow" on-hide = ".winset\"rpane.infob.is-visible=false;rpane.browseb.is-visible=true?rpane.browseb.is-checked=true rpane.rpanewindow.left=browserwindow:rpane.textb.is-visible=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=\"" on-tab = "" +window "vendingslot" + elem "vendingslot" + type = MAIN + pos = 281,0 + size = 288x60 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = false + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "pos;size;is-minimized;is-maximized" + on-size = "" + title = "" + titlebar = false + statusbar = false + can-close = false + can-minimize = false + can-resize = false + is-pane = true + is-minimized = false + is-maximized = false + can-scroll = none + icon = "" + image = 'icons\\vending_icons\\vendingslot_bg.png' + image-mode = stretch + keep-aspect = false + transparent-color = none + alpha = 255 + macro = "" + menu = "" + on-close = "" + elem "buy" + type = BUTTON + pos = 228,4 + size = 52x52 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = #9f9f9f + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + on-size = "" + text = "Buy" + image = "" + command = "" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton + elem "stock" + type = LABEL + pos = 8,36 + size = 216x20 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = true + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "" + on-size = "" + text = "Left in stock: 0" + image = "" + image-mode = center + keep-aspect = false + align = center + text-wrap = false + elem "name" + type = LABEL + pos = 8,4 + size = 216x28 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 14 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = true + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "" + on-size = "" + text = "HoNK" + image = "" + image-mode = center + keep-aspect = false + align = center + text-wrap = false + +window "vendingwindow" + elem "vendingwindow" + type = MAIN + pos = 758,177 + size = 300x470 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = false + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "pos;size;is-minimized;is-maximized" + on-size = "" + title = "" + titlebar = true + statusbar = false + can-close = true + can-minimize = false + can-resize = false + is-pane = false + is-minimized = false + is-maximized = false + can-scroll = none + icon = "" + image = "" + image-mode = stretch + keep-aspect = false + transparent-color = none + alpha = 255 + macro = "vending" + menu = "" + on-close = "" + elem "slot6" + type = CHILD + pos = 8,364 + size = 288x60 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "splitter" + on-size = "" + left = "" + right = "" + is-vert = false + splitter = 50 + show-splitter = true + lock = none + elem "slot5" + type = CHILD + pos = 8,300 + size = 288x60 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "splitter" + on-size = "" + left = "" + right = "" + is-vert = false + splitter = 50 + show-splitter = true + lock = none + elem "page" + type = LABEL + pos = 64,448 + size = 36x16 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "" + on-size = "" + text = "1/1" + image = "" + image-mode = center + keep-aspect = false + align = center + text-wrap = false + elem "button2" + type = BUTTON + pos = 96,448 + size = 16x16 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + on-size = "" + text = ">" + image = "" + command = "skincmd \"vending;pagen\"" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton + elem "button1" + type = BUTTON + pos = 48,448 + size = 16x16 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + on-size = "" + text = "<" + image = "" + command = "skincmd \"vending;pagep\"" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton + elem "label1" + type = LABEL + pos = 8,448 + size = 40x16 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "" + on-size = "" + text = "Page: " + image = "" + image-mode = center + keep-aspect = false + align = center + text-wrap = false + elem "slot4" + type = CHILD + pos = 8,236 + size = 288x60 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "splitter" + on-size = "" + left = "" + right = "" + is-vert = false + splitter = 50 + show-splitter = true + lock = none + elem "slot3" + type = CHILD + pos = 8,172 + size = 288x60 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "splitter" + on-size = "" + left = "" + right = "" + is-vert = false + splitter = 50 + show-splitter = true + lock = none + elem "slot2" + type = CHILD + pos = 8,108 + size = 288x60 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "splitter" + on-size = "" + left = "" + right = "" + is-vert = false + splitter = 50 + show-splitter = true + lock = none + elem "slot1" + type = CHILD + pos = 8,40 + size = 288x60 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "splitter" + on-size = "" + left = "" + right = "" + is-vert = false + splitter = 50 + show-splitter = true + lock = none + elem "title" + type = LABEL + pos = 5,8 + size = 291x33 + anchor1 = 1,2 + anchor2 = 99,6 + font-family = "" + font-size = 12 + font-style = "bold" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = true + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "" + on-size = "" + text = "Crazy Dave's vending machine" + image = "" + image-mode = center + keep-aspect = false + align = top + text-wrap = false + diff --git a/tgstation.dme b/tgstation.dme index 29f2f24a9d..b47ffcb92d 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -157,6 +157,7 @@ #define FILE_DIR "icons/spideros_icons" #define FILE_DIR "icons/Testing" #define FILE_DIR "icons/turf" +#define FILE_DIR "icons/vending_icons" #define FILE_DIR "interface" #define FILE_DIR "maps" #define FILE_DIR "sound" @@ -342,6 +343,7 @@ #include "code\game\master_controller.dm" #include "code\game\prisonshuttle.dm" #include "code\game\shuttle_engines.dm" +#include "code\game\skincmd.dm" #include "code\game\smoothwall.dm" #include "code\game\sound.dm" #include "code\game\specops_shuttle.dm"