mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-24 21:48:39 +01:00
[READY]Arconomy: Sales Taggers, split profits on barcoded, sold items! (#49111)
* Startwork * "Arcane: Everything works up until the export datum bullshit" * I got up to "Split Profit" in "sell object" * This is when I switched over to components and it STILL doesn't work * alright stopwork for the 'night' * So this is the version that crashes * One step further in my descent to madness. * Alright, this should be working (Minus maybe profit_split) * Alright splitting up custom sales splits is broken right now. * Profit split works now. * Alright what the hell is going on here. * Revert "Alright what the hell is going on here." This reverts commit 6cb3b6eb56ea45ede3496bbe219ca18302c806e2. * Oh wait, I can do commit messages through VSC? * Adds a quick little box with all the shipping supplies you'll ever want, unwrapping signal * Added shipping box to all maps and the service/cargo lathes. * Fuck you mapmerge hook you ain't shit * Alright, yet another take of making it get rid of the pricetag * [3:43 PM] oranges: anturk is smart (This is true) * Tested, cleaned up component procs, and limits signals sent a bit. * Whoops * Other comments from Ninja over discord * Left in a comment line. * Fixes the issue with ind. barcodes, adds examine. * Well thank GOD the children wern't there to see it * Adds a do_after to prevent accidents. * Fixes merge conflicts * Fixes merge conflict. Twice in one day. * Fixes merge conflict. * one tiny bit of documentation * Travis play nice.
This commit is contained in:
@@ -8,9 +8,15 @@
|
||||
var/giftwrapped = FALSE
|
||||
var/sortTag = 0
|
||||
var/obj/item/paper/note
|
||||
var/obj/item/barcode/sticker
|
||||
|
||||
/obj/structure/bigDelivery/interact(mob/user)
|
||||
to_chat(user, "<span class='notice'>You start to unwrap the package...</span>")
|
||||
if(!do_after(user, 15, target = user))
|
||||
return
|
||||
playsound(src.loc, 'sound/items/poster_ripped.ogg', 50, TRUE)
|
||||
new /obj/effect/decal/cleanable/wrapping(get_turf(user))
|
||||
unwrap_contents()
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/bigDelivery/Destroy()
|
||||
@@ -31,6 +37,8 @@
|
||||
else
|
||||
. += "There's a [note.name] attached to it..."
|
||||
. += note.examine(user)
|
||||
if(sticker)
|
||||
. += "There's a barcode attached to the side."
|
||||
|
||||
/obj/structure/bigDelivery/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/destTagger))
|
||||
@@ -78,6 +86,48 @@
|
||||
overlaystring = copytext(overlaystring, 5) //5 == length("gift") + 1
|
||||
add_overlay(overlaystring)
|
||||
|
||||
else if(istype(W, /obj/item/sales_tagger))
|
||||
var/obj/item/sales_tagger/tagger = W
|
||||
if(sticker)
|
||||
to_chat(user, "<span class='warning'>This package already has a barcode attached!</span>")
|
||||
return
|
||||
if(!(tagger.payments_acc))
|
||||
to_chat(user, "<span class='warning'>Swipe an ID on [tagger] first!</span>")
|
||||
return
|
||||
if(tagger.paper_count <= 0)
|
||||
to_chat(user, "<span class='warning'>[tagger] is out of paper!</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] attaches a barcode to [src].</span>", "<span class='notice'>You attach a barcode to [src].</span>")
|
||||
tagger.paper_count -= 1
|
||||
sticker = new /obj/item/barcode(src)
|
||||
sticker.payments_acc = tagger.payments_acc //new tag gets the tagger's current account.
|
||||
sticker.percent_cut = tagger.percent_cut //same, but for the percentage taken.
|
||||
|
||||
var/list/wrap_contents = src.GetAllContents()
|
||||
for(var/obj/I in wrap_contents)
|
||||
I.AddComponent(/datum/component/pricetag, sticker.payments_acc, tagger.percent_cut)
|
||||
var/overlaystring = "[icon_state]_tag"
|
||||
if(giftwrapped)
|
||||
overlaystring = copytext(overlaystring, 5)
|
||||
add_overlay(overlaystring)
|
||||
else if(istype(W, /obj/item/barcode))
|
||||
var/obj/item/barcode/stickerA = W
|
||||
if(sticker)
|
||||
to_chat(user, "<span class='warning'>This package already has a barcode attached!</span>")
|
||||
return
|
||||
if(!(stickerA.payments_acc))
|
||||
to_chat(user, "<span class='warning'>This barcode seems to be invalid. Guess it's trash now.</span>")
|
||||
return
|
||||
if(!user.transferItemToLoc(W, src))
|
||||
to_chat(user, "<span class='warning'>For some reason, you can't attach [W]!</span>")
|
||||
return
|
||||
sticker = stickerA
|
||||
var/overlaystring = "[icon_state]_tag"
|
||||
if(giftwrapped)
|
||||
overlaystring = copytext_char(overlaystring, 5) //5 == length("gift") + 1
|
||||
add_overlay(overlaystring)
|
||||
|
||||
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -93,11 +143,18 @@
|
||||
to_chat(user, "<span class='notice'>You successfully removed [O]'s wrapping !</span>")
|
||||
O.forceMove(loc)
|
||||
playsound(src.loc, 'sound/items/poster_ripped.ogg', 50, TRUE)
|
||||
new /obj/effect/decal/cleanable/wrapping(get_turf(user))
|
||||
unwrap_contents()
|
||||
qdel(src)
|
||||
else
|
||||
if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded.
|
||||
to_chat(user, "<span class='warning'>You fail to remove [O]'s wrapping!</span>")
|
||||
|
||||
/obj/structure/bigDelivery/proc/unwrap_contents()
|
||||
if(!sticker)
|
||||
return
|
||||
for(var/obj/I in src.GetAllContents())
|
||||
SEND_SIGNAL(I, COMSIG_STRUCTURE_UNWRAPPED)
|
||||
|
||||
/obj/item/smallDelivery
|
||||
name = "parcel"
|
||||
@@ -108,17 +165,23 @@
|
||||
var/giftwrapped = 0
|
||||
var/sortTag = 0
|
||||
var/obj/item/paper/note
|
||||
var/obj/item/barcode/sticker
|
||||
|
||||
/obj/item/smallDelivery/contents_explosion(severity, target)
|
||||
for(var/atom/movable/AM in contents)
|
||||
AM.ex_act()
|
||||
|
||||
/obj/item/smallDelivery/attack_self(mob/user)
|
||||
to_chat(user, "<span class='notice'>You start to unwrap the package...</span>")
|
||||
if(!do_after(user, 15, target = user))
|
||||
return
|
||||
user.temporarilyRemoveItemFromInventory(src, TRUE)
|
||||
unwrap_contents()
|
||||
for(var/X in contents)
|
||||
var/atom/movable/AM = X
|
||||
user.put_in_hands(AM)
|
||||
playsound(src.loc, 'sound/items/poster_ripped.ogg', 50, TRUE)
|
||||
new /obj/effect/decal/cleanable/wrapping(get_turf(user))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/smallDelivery/attack_self_tk(mob/user)
|
||||
@@ -133,6 +196,8 @@
|
||||
var/atom/movable/AM = X
|
||||
AM.forceMove(src.loc)
|
||||
playsound(src.loc, 'sound/items/poster_ripped.ogg', 50, TRUE)
|
||||
new /obj/effect/decal/cleanable/wrapping(get_turf(user))
|
||||
unwrap_contents()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/smallDelivery/examine(mob/user)
|
||||
@@ -143,6 +208,8 @@
|
||||
else
|
||||
. += "There's a [note.name] attached to it..."
|
||||
. += note.examine(user)
|
||||
if(sticker)
|
||||
. += "There's a barcode attached to the side."
|
||||
|
||||
/obj/item/smallDelivery/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/destTagger))
|
||||
@@ -190,6 +257,54 @@
|
||||
overlaystring = copytext_char(overlaystring, 5) //5 == length("gift") + 1
|
||||
add_overlay(overlaystring)
|
||||
|
||||
else if(istype(W, /obj/item/sales_tagger))
|
||||
var/obj/item/sales_tagger/tagger = W
|
||||
if(sticker)
|
||||
to_chat(user, "<span class='warning'>This package already has a barcode attached!</span>")
|
||||
return
|
||||
if(!(tagger.payments_acc))
|
||||
to_chat(user, "<span class='warning'>Swipe an ID on [tagger] first!</span>")
|
||||
return
|
||||
if(tagger.paper_count <= 0)
|
||||
to_chat(user, "<span class='warning'>[tagger] is out of paper!</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] attaches a barcode to [src].</span>", "<span class='notice'>You attach a barcode to [src].</span>")
|
||||
tagger.paper_count -= 1
|
||||
sticker = new /obj/item/barcode(src)
|
||||
sticker.payments_acc = tagger.payments_acc //new tag gets the tagger's current account.
|
||||
sticker.percent_cut = tagger.percent_cut //as above, as before.
|
||||
|
||||
var/list/wrap_contents = src.GetAllContents()
|
||||
for(var/obj/I in wrap_contents)
|
||||
I.AddComponent(/datum/component/pricetag, sticker.payments_acc, tagger.percent_cut)
|
||||
var/overlaystring = "[icon_state]_tag"
|
||||
if(giftwrapped)
|
||||
overlaystring = copytext(overlaystring, 5)
|
||||
add_overlay(overlaystring)
|
||||
|
||||
else if(istype(W, /obj/item/barcode))
|
||||
var/obj/item/barcode/stickerA = W
|
||||
if(sticker)
|
||||
to_chat(user, "<span class='warning'>This package already has a barcode attached!</span>")
|
||||
return
|
||||
if(!(stickerA.payments_acc))
|
||||
to_chat(user, "<span class='warning'>This barcode seems to be invalid. Guess it's trash now.</span>")
|
||||
return
|
||||
if(!user.transferItemToLoc(W, src))
|
||||
to_chat(user, "<span class='warning'>For some reason, you can't attach [W]!</span>")
|
||||
return
|
||||
sticker = stickerA
|
||||
var/overlaystring = "[icon_state]_tag"
|
||||
if(giftwrapped)
|
||||
overlaystring = copytext_char(overlaystring, 5) //5 == length("gift") + 1
|
||||
add_overlay(overlaystring)
|
||||
|
||||
/obj/item/smallDelivery/proc/unwrap_contents()
|
||||
if(!sticker)
|
||||
return
|
||||
for(var/obj/I in src.GetAllContents())
|
||||
SEND_SIGNAL(I, COMSIG_ITEM_UNWRAPPED)
|
||||
|
||||
/obj/item/destTagger
|
||||
name = "destination tagger"
|
||||
desc = "Used to set the destination of properly wrapped packages."
|
||||
@@ -197,7 +312,7 @@
|
||||
icon_state = "cargotagger"
|
||||
var/currTag = 0 //Destinations are stored in code\globalvars\lists\flavor_misc.dm
|
||||
var/locked_destination = FALSE //if true, users can't open the destination tag window to prevent changing the tagger's current destination
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
item_state = "electronic"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
@@ -243,3 +358,90 @@
|
||||
var/n = text2num(href_list["nextTag"])
|
||||
currTag = n
|
||||
openwindow(usr)
|
||||
|
||||
/obj/item/sales_tagger
|
||||
name = "sales tagger"
|
||||
desc = "A scanner that lets you tag wrapped items for sale, splitting the profit between you and cargo. Ctrl-Click to clear the registered account."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "salestagger"
|
||||
item_state = "electronic"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
///The account which is recieving the split profits.
|
||||
var/datum/bank_account/payments_acc = null
|
||||
var/paper_count = 10
|
||||
var/max_paper_count = 20
|
||||
///Details the percentage the scanned account recieves off the final sale.
|
||||
var/percent_cut = 20
|
||||
|
||||
/obj/item/sales_tagger/examine(mob/user)
|
||||
. = ..()
|
||||
. += "[src] has [paper_count]/[max_paper_count] available barcodes. Refill with paper."
|
||||
. += "Profit split on sale is currently set to [percent_cut]%."
|
||||
|
||||
/obj/item/sales_tagger/attackby(obj/item/I, mob/living/user, params)
|
||||
. = ..()
|
||||
if(istype(I, /obj/item/card/id))
|
||||
var/obj/item/card/id/potential_acc = I
|
||||
if(potential_acc.registered_account)
|
||||
payments_acc = potential_acc.registered_account
|
||||
playsound(src, 'sound/machines/ping.ogg', 40, TRUE)
|
||||
to_chat(user, "<span class='notice'>[src] registers the ID card. Tag a wrapped item to create a barcode.</span>")
|
||||
else if(!potential_acc.registered_account)
|
||||
to_chat(user, "<span class='warning'>This ID card has no account registered!</span>")
|
||||
return
|
||||
else if(payments_acc != potential_acc.registered_account)
|
||||
to_chat(user, "<span class='notice'>ID card already registered.</span>")
|
||||
if(istype(I, /obj/item/paper))
|
||||
if (!(paper_count >= max_paper_count))
|
||||
paper_count += 10
|
||||
qdel(I)
|
||||
if (paper_count >= max_paper_count)
|
||||
paper_count = max_paper_count
|
||||
to_chat(user, "<span class='notice'>[src]'s paper supply is now full.</span>")
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You refill [src]'s paper supply, you have [paper_count] left.</span>")
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src]'s paper supply is full.</span>")
|
||||
return
|
||||
|
||||
/obj/item/sales_tagger/attack_self(mob/user)
|
||||
. = ..()
|
||||
if(paper_count <= 0)
|
||||
to_chat(user, "<span class='warning'>You're out of paper!'.</span>")
|
||||
return
|
||||
if(!payments_acc)
|
||||
to_chat(user, "<span class='warning'>You need to swipe [src] with an ID card first.</span>")
|
||||
return
|
||||
paper_count -= 1
|
||||
playsound(src, 'sound/machines/click.ogg', 40, TRUE)
|
||||
to_chat(user, "<span class='notice'>You print a new barcode.</span>")
|
||||
var/obj/item/barcode/new_barcode = new /obj/item/barcode(src)
|
||||
new_barcode.payments_acc = payments_acc //The sticker gets the scanner's registered account.
|
||||
user.put_in_hands(new_barcode)
|
||||
|
||||
/obj/item/sales_tagger/CtrlClick(mob/user)
|
||||
. = ..()
|
||||
payments_acc = null
|
||||
to_chat(user, "<span class='notice'>You clear the registered account.</span>")
|
||||
|
||||
/obj/item/sales_tagger/AltClick(mob/user)
|
||||
. = ..()
|
||||
var/potential_cut = input("How much would you like to payout to the registered card?","Percentage Profit") as num|null
|
||||
if(!potential_cut)
|
||||
percent_cut = 50
|
||||
percent_cut = clamp(round(potential_cut, 1), 1, 50)
|
||||
to_chat(user, "<span class='notice'>[percent_cut]% profit will be recieved if a package with a barcode is sold.</span>")
|
||||
|
||||
/obj/item/barcode
|
||||
name = "Barcode tag"
|
||||
desc = "A tiny tag, associated with a crewmember's account. Attach to a wrapped item to give that account a portion of the wrapped item's profit."
|
||||
icon = 'icons/obj/bureaucracy.dmi'
|
||||
icon_state = "barcode"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
///All values inheirited from the sales tagger it came from.
|
||||
var/datum/bank_account/payments_acc = null
|
||||
var/percent_cut = 5
|
||||
|
||||
Reference in New Issue
Block a user