diff --git a/code/modules/economy/trader.dm b/code/modules/economy/trader.dm index dc179523759..b95fcfa6bbd 100644 --- a/code/modules/economy/trader.dm +++ b/code/modules/economy/trader.dm @@ -24,6 +24,7 @@ var/sound_lastplayed = 0 //Automatically set when the sound is played. var/pick_inventory = FALSE //If true, when initialized the trader will randomly pick things from its start products list to set up var/pick_inventory_quantity = 0 //This is how many things will be picked if pick_inventory is TRUE + var/move_trader = FALSE /obj/trader/Initialize(mapload) . = ..() @@ -39,6 +40,8 @@ var/obj/p = new item(src) products += p start_products -= item + if(move_trader) + move_trader() /obj/trader/Destroy() . = ..() @@ -127,7 +130,6 @@ to_chat(user, "You aren't close enough.") trading = FALSE return - visible_message("\The [src] drops the banked [welcome_accepts_name].") return_funds() else to_chat(user, "You decided leave your change banked.") @@ -199,6 +201,9 @@ var/obj/item/weapon/spacecash/a = c a.worth -= amount a.update_icon() + if(a.worth <= 0) + bank -= a + qdel(a) if("item") var/v = amount while(v > 0) @@ -209,8 +214,11 @@ v -= accepted_item_worth /obj/trader/proc/return_funds() + var/u_get_refund = FALSE switch(accepts) if("coin") + if(coinbalance) + u_get_refund = TRUE while(coinbalance > 0) if(coinbalance >= 20) new /obj/item/weapon/aliencoin/phoron(get_turf(loc)) @@ -226,12 +234,41 @@ coinbalance -- if("money") for(var/obj/c in bank) + u_get_refund = TRUE c.forceMove(get_turf(loc)) bank -= c if("item") for(var/obj/c in bank) + u_get_refund = TRUE c.forceMove(get_turf(loc)) bank -= c + if(u_get_refund) + visible_message("\The [src] drops the banked [welcome_accepts_name].") + else + visible_message("\The [src] doesn't have anything banked for you.") + +/obj/trader/proc/move_trader() + var/list/pt = list() + for(var/obj/move_trader_landmark/t in world) + if(t.trader_type == type) + pt += t + if(pt.len > 0) + var/obj/dt = pick(pt) + forceMove(get_turf(dt)) + dir = dt.dir + else + log_and_message_admins("tried to move itself but its target pick list was empty, so it was not moved. (JMP)") + +/obj/move_trader_landmark //You need to place the trader somewhere in the world and enable the 'move_trader' var. When the trader initializes, it will make a list of these landmarks and then move itself. + name = "trader spawner" + desc = "Spawns a trader!" + icon = 'icons/obj/landmark_vr.dmi' + icon_state = "blue-x" + invisibility = 101 + mouse_opacity = 0 + density = 0 + anchored = 1 + var/trader_type //The type path for the trader you want to be able to land here. /obj/trader/capture_crystal name = "curious trader" @@ -298,7 +335,13 @@ /obj/item/device/denecrotizer = 10, /obj/item/clothing/shoes/boots/speed = 15, /obj/item/weapon/bluespace_harpoon = 20, - /obj/item/weapon/telecube/randomized = 5 + /obj/item/weapon/telecube/randomized = 5, + /obj/item/device/bodysnatcher = 20, + /obj/item/device/survivalcapsule = 25, + /obj/item/device/survivalcapsule/luxury = 20, + /obj/item/device/survivalcapsule/luxurybar = 15, + /obj/item/device/survivalcapsule/popcabin = 20, + /obj/item/device/survivalcapsule/escapepod = 5 ) prices = list( /obj/item/capture_crystal/basic = 6, @@ -317,7 +360,13 @@ /obj/item/device/denecrotizer = 20, /obj/item/clothing/shoes/boots/speed = 20, /obj/item/weapon/bluespace_harpoon = 20, - /obj/item/weapon/telecube/randomized = 50 + /obj/item/weapon/telecube/randomized = 50, + /obj/item/device/bodysnatcher = 20, + /obj/item/device/survivalcapsule = 10, + /obj/item/device/survivalcapsule/luxury = 20, + /obj/item/device/survivalcapsule/luxurybar = 25, + /obj/item/device/survivalcapsule/popcabin = 10, + /obj/item/device/survivalcapsule/escapepod = 30 ) multiple = list( /obj/item/capture_crystal/basic = 10, diff --git a/icons/obj/landmark_vr.dmi b/icons/obj/landmark_vr.dmi new file mode 100644 index 00000000000..709bcfcfde5 Binary files /dev/null and b/icons/obj/landmark_vr.dmi differ