mirror of
https://github.com/goonstation/goonstation-2016.git
synced 2026-07-19 21:12:41 +01:00
970 lines
42 KiB
Plaintext
970 lines
42 KiB
Plaintext
/obj/npc/trader
|
|
name="Trader"
|
|
var/bullshit =0
|
|
var/hiketolerance = 20 //How much they will tolerate price hike
|
|
var/list/droplist = null //What the merchant will drop upon their death
|
|
var/list/goods_sell = new/list() //What products the trader sells
|
|
var/list/goods_buy = new/list() //what products the merchant buys
|
|
var/list/shopping_cart = new/list() //What has been bought
|
|
var/obj/item/sell = null //Item to sell
|
|
var/portrait_setup = null
|
|
var/obj/item/sellitem = null
|
|
var/item_name = "--------"
|
|
var/obj/item/card/id/scan = null
|
|
//Trader dialogue
|
|
var/sell_dialogue = null
|
|
var/buy_dialogue = null
|
|
var/list/successful_sale_dialogue = null
|
|
var/list/failed_sale_dialogue = null
|
|
var/list/successful_purchase_dialogue = null
|
|
var/list/failed_purchase_dialogue = null
|
|
var/pickupdialogue = null
|
|
var/pickupdialoguefailure = null
|
|
var/list/trader_area = "/area/trade_outpost/martian"
|
|
var/doing_a_thing = 0
|
|
|
|
// This list is in a specific order!!
|
|
// String 1 - player is being dumb and hiked a price up when buying, trader accepted it because they're a dick
|
|
// String 2 - same as above only the trader is being nice about it
|
|
// String 3 - same as string 1 except we're selling
|
|
// String 4 - same as string 3 except with a nice trader
|
|
// String 5 - player haggled further than the trader is willing to tolerate
|
|
// String 6 - trader has had enough of your bullshit and is leaving
|
|
var/list/errormsgs = list("...huh. If you say so!",
|
|
"Huh? You want to pay <i>more</i> for my wares than i'm offering?",
|
|
"Wha.. well, okay! I'm not gonna complain!",
|
|
"Wait, what? You want me to pay you <i>less</i> for your wares?",
|
|
"What the f... umm, no? Make me a serious offer.",
|
|
"Sorry, you're terrible at this. I must be going.")
|
|
// Next list - the last entry will always be used on the trader's final haggling offer
|
|
// otherwise the trader picks randomly from the list including the "final offer" in order to bluff players
|
|
var/list/hagglemsgs = list("Alright, how's this sound?",
|
|
"You drive a hard bargain. How's this price?",
|
|
"You're busting my balls here. How's this?",
|
|
"I'm being more than generous here, I think you'll agree.",
|
|
"This is my final offer. Can't do better than this.")
|
|
|
|
|
|
|
|
anger()
|
|
for(var/mob/M in AIviewers(src))
|
|
boutput(M, "<span style=\"color:red\"><B>[src.name]</B> becomes angry!</span>")
|
|
src.desc = "[src] looks angry"
|
|
spawn(rand(1000,3000))
|
|
src.visible_message("<b>[src.name] calms down.</b>")
|
|
src.desc = "[src] looks a bit annoyed."
|
|
src.temp = "[src.name] has calmed down.<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
|
src.angry = 0
|
|
return
|
|
|
|
attack_hand(var/mob/user as mob)
|
|
if(..())
|
|
return
|
|
if(angry)
|
|
boutput(user, "<span style=\"color:red\">[src] is angry and won't trade with anyone right now.</span>")
|
|
return
|
|
user.machine = src
|
|
var/dat = updatemenu()
|
|
if(!temp)
|
|
dat += {"[src.greeting]<HR>
|
|
<A href='?src=\ref[src];purchase=1'>Purchase Items</A><BR>
|
|
<A href='?src=\ref[src];sell=1'>Sell Items</A><BR>
|
|
<A href='?src=\ref[src];viewcart=1'>View Cart</A><BR>
|
|
<A href='?src=\ref[src];pickuporder=1'>I'm Ready to Pick Up My Order</A><BR>
|
|
<A href='?action=mach_close&window=trader'>Goodbye</A>"}
|
|
|
|
user << browse(dat, "window=trader;size=575x530")
|
|
onclose(user, "trader")
|
|
return
|
|
|
|
disposing()
|
|
goods_sell = null
|
|
goods_buy = null
|
|
shopping_cart = null
|
|
..()
|
|
|
|
Topic(href, href_list)
|
|
if(..())
|
|
return
|
|
|
|
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
|
usr.machine = src
|
|
///////////////////////////////
|
|
///////Generate Purchase List//
|
|
///////////////////////////////
|
|
if (href_list["purchase"])
|
|
src.temp =buy_dialogue + "<HR><BR>"
|
|
for(var/datum/commodity/N in goods_sell)
|
|
// Have to send the type instead of a reference to the obj because it would get caught by the garbage collector. oh well.
|
|
src.temp += {"<A href='?src=\ref[src];doorder=\ref[N]'><B><U>[N.comname]</U></B></A><BR>
|
|
<B>Cost:</B> [N.price] Credits<BR>
|
|
<B>Description:</B> [N.desc]<BR>
|
|
<A href='?src=\ref[src];haggleb=\ref[N]'><B><U>Haggle</U></B></A><BR><BR>"}
|
|
src.temp += "<BR><A href='?src=\ref[src];mainmenu=1'>Ok</A>"
|
|
//////////////////////////////////////////////
|
|
///////Handle the buying of a specific item //
|
|
//////////////////////////////////////////////
|
|
else if (href_list["doorder"])
|
|
if(!scan)
|
|
src.temp = {"You have to scan a card in first.<BR>
|
|
<BR><A href='?src=\ref[src];purchase=1'>OK</A>"}
|
|
src.updateUsrDialog()
|
|
return
|
|
if (src.scan.registered in FrozenAccounts)
|
|
boutput(usr, "<span style=\"color:red\">Your account cannot currently be liquidated due to active borrows.</span>")
|
|
return
|
|
var/datum/data/record/account = null
|
|
account = FindBankAccountByName(src.scan.registered)
|
|
if (account)
|
|
var/quantity = 1
|
|
quantity = input("How many units do you want to purchase? Maximum: 10", "Trader Purchase", null, null) as num
|
|
if (quantity < 1)
|
|
quantity = 0
|
|
return
|
|
else if (quantity >= 10)
|
|
quantity = 10
|
|
|
|
////////////
|
|
var/datum/commodity/P = locate(href_list["doorder"])
|
|
|
|
if(P)
|
|
if(account.fields["current_money"] >= P.price * quantity)
|
|
account.fields["current_money"] -= P.price * quantity
|
|
while(quantity-- > 0)
|
|
shopping_cart += new P.comtype()
|
|
src.temp = {"[pick(successful_purchase_dialogue)]<BR>
|
|
<BR><A href='?src=\ref[src];purchase=1'>What other things have you got for sale?</A>
|
|
<BR><A href='?src=\ref[src];pickuporder=1'>I want to pick up my order.</A>
|
|
<BR><A href='?src=\ref[src];mainmenu=1'>I've got some other business.</A>"}
|
|
else
|
|
src.temp = {"[pick(failed_purchase_dialogue)]<BR>
|
|
<BR><A href='?src=\ref[src];purchase=1'>OK</A>"}
|
|
else
|
|
src.temp = {"[src] looks bewildered for a second. Seems like they can't find your item.<BR>
|
|
<BR><A href='?src=\ref[src];purchase=1'>OK</A>"}
|
|
else
|
|
src.temp = {"That's odd I can't seem to find your account
|
|
<BR><A href='?src=\ref[src];purchase=1'>OK</A>"}
|
|
|
|
///////////////////////////////////////////
|
|
///Handles haggling for buying ////////////
|
|
///////////////////////////////////////////
|
|
else if (href_list["haggleb"])
|
|
|
|
var/askingprice= input(usr, "Please enter your asking price.", "Haggle", 0) as null|num
|
|
if(askingprice)
|
|
var/datum/commodity/N = locate(href_list["haggleb"])
|
|
if(N)
|
|
if(patience == N.haggleattempts)
|
|
src.temp = "[src.name] becomes angry and won't trade anymore."
|
|
src.add_fingerprint(usr)
|
|
src.updateUsrDialog()
|
|
angry = 1
|
|
anger()
|
|
else
|
|
haggle(askingprice, 1, N)
|
|
src.temp +="<BR><A href='?src=\ref[src];purchase=1'>Ok</A>"
|
|
|
|
|
|
/////////////////////////////////////////////
|
|
///////Generate list of items user can sell//
|
|
/////////////////////////////////////////////
|
|
else if (href_list["sell"])
|
|
src.temp = "[src.sell_dialogue]<HR><BR>"
|
|
for(var/datum/commodity/N in goods_buy)
|
|
if(N.hidden)
|
|
continue
|
|
else
|
|
temp+={"<B>[N.comname] for [N.price] Credits:</B> [N.indemand ? N.desc_buy_demand : N.desc_buy]<BR>
|
|
<A href='?src=\ref[src];haggles=[N]'><B><U>Haggle</U></B></A><BR><BR>"}
|
|
if(src.sellitem)
|
|
src.item_name = src.sellitem.name
|
|
else
|
|
src.item_name = "--------"
|
|
src.temp += {"<HR>What do you wish to sell? <a href='?src=\ref[src];sellitem=1'>[src.item_name]</a><br>
|
|
<BR><A href='?src=\ref[src];selltheitem=1'>Sell Item</A>
|
|
<BR><A href='?src=\ref[src];mainmenu=1'>Ok</A>"}
|
|
|
|
///////////////////////////////////////////
|
|
///Haggle for selling /////////////////////
|
|
///////////////////////////////////////////
|
|
else if (href_list["haggles"])
|
|
|
|
var/askingprice= input(usr, "Please enter your asking price.", "Haggle", 0) as null|num
|
|
if(askingprice)
|
|
var/datum/commodity/N = locate(href_list["haggles"])
|
|
if(N)
|
|
if(patience == N.haggleattempts)
|
|
|
|
src.temp = "[src.name] becomes angry and won't trade anymore."
|
|
src.add_fingerprint(usr)
|
|
src.updateUsrDialog()
|
|
angry = 1
|
|
anger()
|
|
else
|
|
haggle(askingprice, 0, N)
|
|
src.temp +="<BR><A href='?src=\ref[src];sell=1'>Ok</A>"
|
|
|
|
////////////////////////////////////////
|
|
////////Slot holder for the current item///
|
|
///////////////////////////////////////
|
|
else if (href_list["sellitem"])
|
|
if (src.sellitem)
|
|
src.sellitem.set_loc(src.loc)
|
|
src.sellitem = null
|
|
else
|
|
var/obj/item/I = usr.equipped()
|
|
if (!I)
|
|
return
|
|
usr.drop_item()
|
|
// in case dropping the item somehow deletes it?? idk there was a runtime error still
|
|
if (!I)
|
|
return
|
|
I.set_loc(src)
|
|
src.sellitem = I
|
|
src.item_name = I.name
|
|
src.temp = "[src.sell_dialogue]<HR><BR>"
|
|
for(var/datum/commodity/N in goods_buy)
|
|
if(N.hidden)
|
|
continue
|
|
else
|
|
temp+="<B>[N.comname] for [N.price] Credits:</B> [N.indemand ? N.desc_buy_demand : N.desc_buy]<BR><BR>"
|
|
if(src.sellitem)
|
|
src.item_name = src.sellitem.name
|
|
else
|
|
src.item_name = "--------"
|
|
src.temp += {"<HR>What do you wish to sell? <a href='?src=\ref[src];sellitem=1'>[src.item_name]</a><br>
|
|
<BR><A href='?src=\ref[src];selltheitem=1'>Sell Item</A>
|
|
<BR><A href='?src=\ref[src];mainmenu=1'>Ok</A>
|
|
<BR><i>To sell large quantities at once, clickdrag a crate onto [src].</i>"}
|
|
|
|
///////////////////////////////////////////
|
|
/////////Actually Sell the item //////////
|
|
//////////////////////////////////////////
|
|
else if (href_list["selltheitem"])
|
|
if(!src.sellitem)
|
|
src.updateUsrDialog()
|
|
return
|
|
if (doing_a_thing)
|
|
src.updateUsrDialog()
|
|
return
|
|
if(!src.scan)
|
|
src.temp = {"You have to scan a card in first.<BR>
|
|
<BR><A href='?src=\ref[src];sell=1'>OK</A>"}
|
|
src.updateUsrDialog()
|
|
return
|
|
if(ispath(sellitem, /obj/item/reagent_containers/food/snacks/ingredient/meat))
|
|
sellitem = /obj/item/reagent_containers/food/snacks/ingredient/meat
|
|
if(ispath(sellitem, /obj/item/reagent_containers/food/snacks/plant))
|
|
sellitem = /obj/item/reagent_containers/food/snacks/plant
|
|
if(ispath(sellitem, /obj/item/electronics))
|
|
sellitem = /obj/item/electronics
|
|
if(ispath(sellitem, /obj/item/parts/robot_parts))
|
|
sellitem = /obj/item/parts/robot_parts
|
|
for(var/datum/commodity/N in goods_buy)
|
|
if(N.comtype == src.sellitem.type)
|
|
var/datum/data/record/account = null
|
|
account = FindBankAccountByName(src.scan.registered)
|
|
if (!account)
|
|
src.temp = {" [src] looks slightly agitated when he realizes there is no bank account associated with the ID card.<BR>
|
|
<BR><A href='?src=\ref[src];sell=1'>OK</A>"}
|
|
src.add_fingerprint(usr)
|
|
src.updateUsrDialog()
|
|
return
|
|
else
|
|
doing_a_thing = 1
|
|
account.fields["current_money"] += N.price
|
|
src.temp = pick(src.successful_sale_dialogue) + "<BR>"
|
|
src.temp += "<BR><A href='?src=\ref[src];sell=1'>OK</A>"
|
|
qdel (src.sellitem)
|
|
src.add_fingerprint(usr)
|
|
src.updateUsrDialog()
|
|
doing_a_thing = 0
|
|
return
|
|
src.temp = {"[pick(failed_sale_dialogue)]<BR>
|
|
<BR><A href='?src=\ref[src];sell=1'>OK</A>"}
|
|
|
|
///////////////////////////////////
|
|
////////Handle Bank account Set-Up ///////
|
|
//////////////////////////////////
|
|
else if (href_list["card"])
|
|
if (src.scan) src.scan = null
|
|
else
|
|
var/obj/item/I = usr.equipped()
|
|
if (istype(I, /obj/item/card/id))
|
|
boutput(usr, "<span style=\"color:blue\">You swipe the ID card in the card reader.</span>")
|
|
var/datum/data/record/account = null
|
|
account = FindBankAccountByName(I:registered)
|
|
if(account)
|
|
var/enterpin = input(usr, "Please enter your PIN number.", "Card Reader", 0) as null|num
|
|
if (enterpin == I:pin)
|
|
boutput(usr, "<span style=\"color:blue\">Card authorized.</span>")
|
|
src.scan = I
|
|
else
|
|
boutput(usr, "<span style=\"color:red\">Pin number incorrect.</span>")
|
|
src.scan = null
|
|
else
|
|
boutput(usr, "<span style=\"color:red\">No bank account associated with this ID found.</span>")
|
|
src.scan = null
|
|
////////////////////////////////////////////////////
|
|
//////View what still needs to be picked up/////////
|
|
///////////////////////////////////////////////////
|
|
else if (href_list["viewcart"])
|
|
src.temp = "<B>Current Items in Cart: </B>"
|
|
for(var/obj/S in shopping_cart)
|
|
temp+= "<BR>[S.name]"
|
|
src.temp += "<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
|
////////////////////////////////////////////////////
|
|
/////Pick up the goods ordered from merchant////////
|
|
//////////////////////////////////////////////////////
|
|
else if (href_list["pickuporder"])
|
|
if(shopping_cart.len)
|
|
spawncrate()
|
|
src.temp = pickupdialogue
|
|
else
|
|
src.temp = pickupdialoguefailure
|
|
src.temp += "<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
|
|
|
else if (href_list["mainmenu"])
|
|
src.temp = null
|
|
src.add_fingerprint(usr)
|
|
src.updateUsrDialog()
|
|
return
|
|
/////////////////////////////////////////////
|
|
/////Update the menu with the default items
|
|
////////////////////////////////////////////
|
|
proc/updatemenu()
|
|
|
|
var/dat
|
|
dat = portrait_setup
|
|
dat +="<B>Scanned Card:</B> <A href='?src=\ref[src];card=1'>([src.scan])</A><BR>"
|
|
if(scan)
|
|
var/datum/data/record/account = null
|
|
account = FindBankAccountByName(src.scan.registered)
|
|
if (account)
|
|
dat+="<B>Current Funds</B>: [account.fields["current_money"]] Credits<HR>"
|
|
else
|
|
dat+="<HR>"
|
|
else
|
|
dat+="<HR>"
|
|
if(temp)
|
|
dat+=temp
|
|
return dat
|
|
///////////////////////////////////////
|
|
///////Spawn the crates full of goods///
|
|
////////////////////////////////////////
|
|
proc/spawncrate()
|
|
var/list/markers = new/list()
|
|
var/pickedloc = 0
|
|
var/found = 0
|
|
|
|
var/list/area_turfs = get_area_turfs(trader_area)
|
|
if (!area_turfs || !area_turfs.len)
|
|
area_turfs = get_area_turfs( get_area(src) )
|
|
|
|
for(var/turf/T in area_turfs)
|
|
for(var/obj/marker/supplymarker/D in T)
|
|
markers += D
|
|
|
|
for(var/C in markers)
|
|
if (locate(/obj/storage/crate) in get_turf(C))
|
|
continue
|
|
found = 1
|
|
pickedloc = get_turf(C)
|
|
if (!found)
|
|
if (islist(markers) && markers.len)
|
|
pickedloc = get_turf(pick(markers))
|
|
else
|
|
pickedloc = get_turf(src) // put it SOMEWHERE
|
|
|
|
var/obj/storage/crate/A = new /obj/storage/crate(pickedloc)
|
|
showswirl(pickedloc)
|
|
A.name = "Goods Crate ([src.name])"
|
|
for(var/obj/O in shopping_cart)
|
|
O.set_loc(A)
|
|
shopping_cart = new/list()
|
|
|
|
////////////////////////////////////////////////////
|
|
/////////Proc for haggling with dealer ////////////
|
|
///////////////////////////////////////////////////
|
|
proc/haggle(var/askingprice, var/buying, var/datum/commodity/H)
|
|
// if something's gone wrong and there's no input, reject the haggle
|
|
// also reject if there's no change in the price at all
|
|
if (!askingprice) return
|
|
if (askingprice == H.price) return
|
|
// if the player is being dumb and haggling in the wrong direction, tell them (unless the trader is an asshole)
|
|
if (buying == 1)
|
|
// we're buying, so we want to pay less per unit
|
|
if(askingprice > H.price)
|
|
if (src.bullshit >= 5)
|
|
src.temp = src.errormsgs[1]
|
|
H.price = askingprice
|
|
return
|
|
else
|
|
src.temp = src.errormsgs[2]
|
|
return
|
|
else
|
|
// we're selling, so we want to be paid MORE per unit
|
|
if(askingprice < H.price)
|
|
if (src.bullshit >= 5)
|
|
H.price = askingprice
|
|
src.temp = "<B>Cost:</B> [H.price] Credits<BR>"
|
|
src.temp += src.errormsgs[3]
|
|
return
|
|
else
|
|
src.temp = "<B>Cost:</B> [H.price] Credits<BR>"
|
|
src.temp += src.errormsgs[4]
|
|
return
|
|
// check if the price increase % of the haggle is more than this trader will tolerate
|
|
var/hikeperc = askingprice - H.price
|
|
hikeperc = (hikeperc / H.price) * 100
|
|
var/negatol = 0 - src.hiketolerance
|
|
if (buying == 1) // we're buying, so price must be checked for negative
|
|
if (hikeperc <= negatol)
|
|
src.temp = "<B>Cost:</B> [H.price] Credits<BR>"
|
|
src.temp += src.errormsgs[5]
|
|
H.haggleattempts++
|
|
return
|
|
else
|
|
if (hikeperc >= src.hiketolerance) // we're selling, so check hike for positive
|
|
src.temp = src.errormsgs[5]
|
|
H.haggleattempts++
|
|
return
|
|
// now, the actual haggling part! find the middle ground between the two prices
|
|
var/middleground = (H.price + askingprice) / 2
|
|
var/negotiate = abs(H.price-middleground)-1
|
|
if (buying == 1)
|
|
H.price =round(middleground + rand(0,negotiate))
|
|
else
|
|
if(middleground-H.price <= 0.5)
|
|
H.price = round(middleground + 1)
|
|
else
|
|
H.price = round(middleground - rand(0,negotiate))
|
|
|
|
src.temp = "<B>New Cost:</B> [H.price] Credits<BR><HR>"
|
|
H.haggleattempts++
|
|
// warn the player if the trader isn't going to take any more haggling
|
|
if (patience == H.haggleattempts)
|
|
src.temp += src.hagglemsgs[src.hagglemsgs.len]
|
|
else
|
|
src.temp += pick(src.hagglemsgs)
|
|
|
|
|
|
///////////////////////////////////
|
|
////// batch selling - cogwerks ///
|
|
///////////////////////////////////
|
|
|
|
MouseDrop_T(atom/movable/O as obj, mob/user as mob)
|
|
if(get_dist(O,user) > 1) return
|
|
if(!istype(user,/mob/living/)) return
|
|
if(!src.scan)
|
|
boutput(user, "<span style=\"color:red\">You have to scan your ID first!</span>")
|
|
return
|
|
if(angry)
|
|
boutput(user, "<span style=\"color:red\">[src] is angry and won't trade with anyone right now.</span>")
|
|
return
|
|
if(!alive)
|
|
boutput(user, "<span style=\"color:red\">[src] is dead!</span>")
|
|
return
|
|
var/datum/data/record/account = null
|
|
account = FindBankAccountByName(src.scan.registered)
|
|
if(!account)
|
|
boutput(user, "<span style=\"color:red\">[src]There is no account registered with this card!</span>")
|
|
return
|
|
/*if (istype(O, /obj/item))
|
|
user.visible_message("<span style=\"color:blue\">[src] rummages through [user]'s goods.</span>")
|
|
var/staystill = user.loc
|
|
for(var/datum/commodity/N in goods_buy)
|
|
if (N.comtype == O.type)
|
|
user.visible_message("<span style=\"color:blue\">[src] is willing to buy all of [O].</span>")
|
|
for(N.comtype in view(1,user))
|
|
account.fields["current_money"] += N.price
|
|
qdel(N.comtype)
|
|
sleep(2)
|
|
if (user.loc != staystill) break*/
|
|
if (istype(O, /obj/storage/crate/))
|
|
if (O:locked)
|
|
user.show_text("[src] stares at the locked [O], unamused. Maybe you should make sure the thing's open, first.", "red")
|
|
return
|
|
spawn(1)
|
|
user.visible_message("<span style=\"color:blue\">[src] rummages through [user]'s [O].</span>")
|
|
playsound(src.loc, "rustle", 60, 1)
|
|
var/cratevalue = null
|
|
for (var/obj/M in O.contents)
|
|
//boutput(world, "<span style=\"color:blue\">HELLO I AM [M]</span>")
|
|
//boutput(world, "<span style=\"color:blue\">AND MY TYPE PATH IS [M.type]</span>")
|
|
for(var/datum/commodity/N in src.goods_buy)
|
|
if(M) // fuck the hell off you dirty null.type errors
|
|
if(N.comtype == M.type)
|
|
//boutput(world, "<b>MY ASSOCIATED DATUM IS [N]</b>")
|
|
//boutput(world, "<span style=\"color:blue\">[M] IS GOING TO SELL FOR [N.price] HOT BALLS</span>")
|
|
//boutput(world, "<span style=\"color:blue\">UPDATING CRATE VALUE TO [cratevalue] OR FUCKING ELSE</span>")
|
|
cratevalue += N.price
|
|
qdel( M )
|
|
if(cratevalue)
|
|
boutput(user, "<span style=\"color:blue\">[src] takes what they want from [O]. [cratevalue] credits have been transferred to your account.</span>")
|
|
account.fields["current_money"] += cratevalue
|
|
else
|
|
boutput(user, "<span style=\"color:blue\">[src] finds nothing of interest in [O].</span>")
|
|
|
|
/////////////////////////////////////////////////////
|
|
///////////////THE TRADERS ///////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
|
|
//////Generic Randomized visitor
|
|
/obj/npc/trader/random
|
|
icon_state = "welder"
|
|
picture = "generic.png"
|
|
trader_area = "/area/shuttle/merchant_shuttle/left"
|
|
|
|
New()
|
|
..()
|
|
icon_state = pick("martian","martianP","martianW","martianSP","mars_bot","welder","petbee","lavacrab","boogie","walrus","owl","goose","possum","bumblespider","big_spide[pick("","-red","-blue","-green")]")
|
|
|
|
var/pickprename = pick("Honest","Fair","Merchant","Trader","Kosher","Real Deal","Dealer", "Old", "Ol'", "Zesty", "Sassy", "Bargain", "Discount", "Uncle", "Big", "Little")
|
|
//var/pickfirstname = pick(first_names)
|
|
var/picklastname = pick(last_names)
|
|
src.name = "[pickprename] [picklastname]"
|
|
|
|
greeting= {"WELL HI THERE, STEP RIGHT UP AND BUY MY STUFF!"}
|
|
|
|
portrait_setup = "<img src='[resource("images/traders/[src.picture]")]'><HR><B>[src.name]</B><HR>"
|
|
|
|
sell_dialogue = "Ah, an entepreneur after my own heart! I have a few friends who are looking for things to buy!"
|
|
|
|
buy_dialogue = "YES, COME RIGHT UP AND BUY MY FRIEND!"
|
|
|
|
successful_purchase_dialogue = list("ANOTHER SATISFIED CUSTOMER!",
|
|
"Thank you and HAVE A NICE DAY!",
|
|
"SOLD, TO THE PERSON IN THE FUNNY JUMPSUIT!")
|
|
|
|
failed_sale_dialogue = list("Don't waste my time, kid, I can't buy that!",
|
|
"I've got nobody who wants to buy that junk!",
|
|
"What, do you think I'm stupid?!? Get out of here!",
|
|
"Haha, nice try kid, but I've been in the business longer than that.")
|
|
|
|
successful_sale_dialogue = list("Thank you very much!",
|
|
"I'll take it!",
|
|
"Come back anytime!")
|
|
|
|
failed_purchase_dialogue = list("Come back when you can afford this stuff!",
|
|
"You ain't got the cash, kid!",
|
|
"Might want to check your account, 'cause I don't see the money in it!")
|
|
|
|
pickupdialogue = "THANK YOU!"
|
|
|
|
pickupdialoguefailure = "You need to BUY things before you pick them up!"
|
|
|
|
src.hiketolerance = rand(2,4)
|
|
src.hiketolerance *= 10
|
|
|
|
var/items_for_sale = rand(5,8)
|
|
var/items_wanted = rand(2,5)
|
|
|
|
var/list/commercetypes = list(/datum/commodity/ore,
|
|
/datum/commodity/podparts,
|
|
/datum/commodity/drugs,
|
|
/datum/commodity/contraband,
|
|
/datum/commodity/salvage,
|
|
/datum/commodity/junk,
|
|
/datum/commodity/diner,
|
|
/datum/commodity/bodyparts,
|
|
/datum/commodity/medical,
|
|
/datum/commodity/synthmodule)
|
|
|
|
var/list/selltypes = typesof(pick(commercetypes))
|
|
var/list/buytypes = typesof(pick(commercetypes))
|
|
|
|
while(selltypes.len > 0 && src.goods_sell.len < items_for_sale)
|
|
var/pickedselltype = pick(selltypes)
|
|
var/datum/commodity/sellitem = new pickedselltype(src)
|
|
selltypes -= pickedselltype
|
|
if(sellitem.comtype != null)
|
|
src.goods_sell += sellitem
|
|
|
|
while(buytypes.len > 0 && src.goods_buy.len < items_wanted)
|
|
var/pickedbuytype = pick(buytypes)
|
|
var/datum/commodity/buyitem = new pickedbuytype(src)
|
|
buytypes -= pickedbuytype
|
|
if(buyitem.comtype != null)
|
|
src.goods_buy += buyitem
|
|
|
|
activatesecurity()
|
|
for(var/mob/M in AIviewers(src))
|
|
boutput(M, "<B>[src.name]</B> yells, \"Get 'em boys!\"")
|
|
for(var/turf/T in get_area_turfs( get_area(src) ))
|
|
for(var/obj/decal/fakeobjects/teleport_pad/D in T)
|
|
var/N = pick(1,2)
|
|
var/obj/critter/martian/P = null
|
|
if (N == 1)
|
|
P = new /obj/critter/martian/soldier
|
|
else
|
|
P = new /obj/critter/martian/warrior
|
|
P.set_loc(D.loc)
|
|
showswirl(P.loc)
|
|
|
|
|
|
//////Martian
|
|
/obj/npc/trader/martian
|
|
icon_state = "martianP"
|
|
picture = "martian.png"
|
|
trader_area = "/area/martian_trader"
|
|
New()
|
|
..()
|
|
src.goods_sell += new /datum/commodity/ore/uqill(src) // cogwerks - changed from molitz, who the hell ever needs that
|
|
src.goods_sell += new /datum/commodity/ore/plasmastone(src) // no guns, no, bad
|
|
src.goods_sell += new /datum/commodity/ore/bohrum(src)
|
|
src.goods_sell += new /datum/commodity/ore/cerenkite(src)
|
|
src.goods_sell += new /datum/commodity/ore/telecrystal(src)
|
|
|
|
src.goods_buy += new /datum/commodity/laser_gun(src)
|
|
src.goods_buy += new /datum/commodity/relics/skull(src)
|
|
src.goods_buy += new /datum/commodity/relics/relic(src)
|
|
src.goods_buy += new /datum/commodity/relics/gnome(src)
|
|
src.goods_buy += new /datum/commodity/relics/crown(src)
|
|
src.goods_buy += new /datum/commodity/relics/armor(src)
|
|
|
|
|
|
|
|
|
|
|
|
src.name = pick( "L'zeurk Xin", "Norzamed Bno", "Kleptar Sde", "Z'orrel Ryvc")
|
|
greeting= {"As you approach the martian, thoughts begins to enter your head.
|
|
<I>\"Greetings Human, unlike most martians, I am quite friendly. All I desire is to sell my wares\"</I>.
|
|
<b>[src.name]</b> gestures towards his goods and awaits for you to make your choice."}
|
|
|
|
portrait_setup = "<img src='[resource("images/traders/[src.picture]")]'><HR><B>[src.name]</B><HR>"
|
|
|
|
sell_dialogue = "You recieve visions of various indviuals who are looking to purchase something, and get the feeling that <B>[src.name]</B> will act as the middle man."
|
|
|
|
buy_dialogue = "You hear a voice in your head,<I>\"Please select what you would like to buy\".</I>"
|
|
|
|
successful_sale_dialogue = list("<i>A wave of joy washes over you upon the completion of the sale.</i>",
|
|
"In your head you hear a voice say, <i>\"Thank you for your business. Perhaps we shouldn't wipe you all out.\"</i>",
|
|
"[src.name] quickly begans putting his new merchandise away. Despite that, you somehow know that the martian is grateful for the sale")
|
|
|
|
failed_sale_dialogue = list("<i>You feel an intense feeling of irritation come over you</i>. A foreign thought enters your head, <i>\"Please don't waste my time. I have better things to do than to look at worthless junk.\"</i>",
|
|
"[src] telepathically communicates to you, <i>\"I'm sorry I currently have no interest in that item, perhaps you should try another trader.\"",
|
|
"You suddenly and unnaturally feel incredibly stupid and embarassed about your mistake. You hang your head in shame.",
|
|
"The martian pats you gently on the head, and shakes it head. It seems [src] feels sorry for you")
|
|
|
|
successful_purchase_dialogue = list("[src.name] communicates to you, <i>\"Thank you for your business\"</i>.",
|
|
"A thought enters your head, <i>\"An excellent choice. Tell me when you are ready to pick it up\".</i>")
|
|
|
|
failed_purchase_dialogue = list("[src.name] communicates to you, <i>\"I am sorry, but you currenty do not have enough funds to purchase this.\"</I>",
|
|
"[src.name] communicates to you, <i>\"Are you trying to pull a trick on me because I am a martian? You don't have enough credits to purchase this.\"</I>")
|
|
|
|
pickupdialogue = "A foreign thought enters your head, <i>\"Thank you for your business. Please come again\"</i>"
|
|
|
|
pickupdialoguefailure = "[src.name] checks something on a strange device. <i>\"I'm sorry, but you don't have anything to pick up\"</i>."
|
|
|
|
activatesecurity()
|
|
for(var/mob/M in AIviewers(src))
|
|
boutput(M, "<B>[src.name]</B> yells, \"mortigi c^iujn!\"")
|
|
for(var/turf/T in get_area_turfs( get_area(src) ))
|
|
for(var/obj/decal/fakeobjects/teleport_pad/D in T)
|
|
var/obj/critter/martian/soldier/P = new /obj/critter/martian/soldier
|
|
P.set_loc(D.loc)
|
|
showswirl(P.loc)
|
|
|
|
////////Robot
|
|
/obj/npc/trader/robot
|
|
icon = 'icons/misc/evilreaverstation.dmi' // changed from the ancient robot sprite to pr1
|
|
icon_state = "pr1_b"
|
|
picture = "robot.png"
|
|
trader_area = "/area/turret_protected/robot_trade_outpost"
|
|
var/productset = 0 // 0 is robots and salvage, 1 is podparts and drugs, 2 is produce. 3 is syndicate junk, 4 is medical stuff
|
|
var/illegal = 0 // maybe trading with illegal bots could flag the user's criminal record for smuggling
|
|
|
|
New()
|
|
..()
|
|
switch(productset)
|
|
if(1) // drugs and pod stuff
|
|
src.goods_sell += new /datum/commodity/podparts/engine(src)
|
|
src.goods_sell += new /datum/commodity/podparts/laser(src)
|
|
src.goods_sell += new /datum/commodity/podparts/asslaser(src)
|
|
src.goods_sell += new /datum/commodity/podparts/blackarmor(src)
|
|
src.goods_sell += new /datum/commodity/podparts/skin_stripe_r(src)
|
|
src.goods_sell += new /datum/commodity/podparts/skin_stripe_b(src)
|
|
src.goods_sell += new /datum/commodity/podparts/skin_flames(src)
|
|
src.goods_sell += new /datum/commodity/contraband/ntso_uniform(src)
|
|
src.goods_sell += new /datum/commodity/contraband/ntso_beret(src)
|
|
src.goods_sell += new /datum/commodity/contraband/ntso_vest(src)
|
|
src.goods_sell += new /datum/commodity/drugs/methamphetamine(src)
|
|
src.goods_sell += new /datum/commodity/drugs/crank(src)
|
|
//src.goods_sell += new /datum/commodity/drugs/bathsalts(src)
|
|
src.goods_sell += new /datum/commodity/drugs/catdrugs(src)
|
|
src.goods_sell += new /datum/commodity/drugs/morphine(src)
|
|
src.goods_sell += new /datum/commodity/drugs/krokodil(src)
|
|
src.goods_sell += new /datum/commodity/drugs/lsd(src)
|
|
src.goods_sell += new /datum/commodity/pills/uranium(src)
|
|
|
|
src.goods_buy += new /datum/commodity/drugs/shrooms(src)
|
|
src.goods_buy += new /datum/commodity/drugs/cannabis(src)
|
|
src.goods_buy += new /datum/commodity/drugs/cannabis_mega(src)
|
|
src.goods_buy += new /datum/commodity/drugs/cannabis_white(src)
|
|
src.goods_buy += new /datum/commodity/drugs/cannabis_omega(src)
|
|
|
|
if(2) // diner attendant
|
|
src.goods_sell += new /datum/commodity/diner/mysteryburger(src)
|
|
src.goods_sell += new /datum/commodity/diner/monster(src)
|
|
src.goods_sell += new /datum/commodity/diner/sloppyjoe(src)
|
|
src.goods_sell += new /datum/commodity/diner/mashedpotatoes(src)
|
|
src.goods_sell += new /datum/commodity/diner/waffles(src)
|
|
src.goods_sell += new /datum/commodity/diner/pancake(src)
|
|
src.goods_sell += new /datum/commodity/diner/meatloaf(src)
|
|
src.goods_sell += new /datum/commodity/diner/slurrypie(src)
|
|
src.goods_sell += new /datum/commodity/diner/daily_special(src)
|
|
|
|
src.goods_buy += new /datum/commodity/produce/special/gmelon(src)
|
|
src.goods_buy += new /datum/commodity/produce/special/greengrape(src)
|
|
src.goods_buy += new /datum/commodity/produce/special/ghostchili(src)
|
|
src.goods_buy += new /datum/commodity/produce/special/chilly(src)
|
|
src.goods_buy += new /datum/commodity/produce/special/lashberry(src)
|
|
src.goods_buy += new /datum/commodity/produce/special/purplegoop(src)
|
|
src.goods_buy += new /datum/commodity/produce/special/glowfruit(src)
|
|
|
|
if(3) // syndicate bot
|
|
src.goods_sell += new /datum/commodity/contraband/command_suit(src)
|
|
src.goods_sell += new /datum/commodity/contraband/swatmask(src)
|
|
src.goods_sell += new /datum/commodity/contraband/radiojammer(src)
|
|
src.goods_sell += new /datum/commodity/contraband/stealthstorage(src)
|
|
src.goods_sell += new /datum/commodity/contraband/disguiser(src)
|
|
src.goods_sell += new /datum/commodity/contraband/birdbomb(src)
|
|
src.goods_sell += new /datum/commodity/contraband/flare(src)
|
|
src.goods_sell += new /datum/commodity/contraband/eguncell_highcap(src)
|
|
src.goods_sell += new /datum/commodity/podparts/cloak(src)
|
|
src.goods_sell += new /datum/commodity/podparts/redarmor(src)
|
|
src.goods_sell += new /datum/commodity/podparts/ballistic(src)
|
|
src.goods_sell += new /datum/commodity/podparts/artillery(src)
|
|
src.goods_sell += new /datum/commodity/contraband/artillery_ammo(src)
|
|
|
|
src.goods_buy += new /datum/commodity/contraband/egun(src)
|
|
src.goods_buy += new /datum/commodity/contraband/secheadset(src)
|
|
src.goods_buy += new /datum/commodity/contraband/hosberet(src)
|
|
src.goods_buy += new /datum/commodity/contraband/spareid(src)
|
|
src.goods_buy += new /datum/commodity/contraband/captainid(src)
|
|
src.goods_buy += new /datum/commodity/goldbar(src)
|
|
|
|
if(4) // medical
|
|
src.goods_sell += new /datum/commodity/medical/injectorbelt(src)
|
|
src.goods_sell += new /datum/commodity/medical/strange_reagent(src)
|
|
src.goods_sell += new /datum/commodity/medical/firstaidR(src)
|
|
src.goods_sell += new /datum/commodity/medical/firstaidBr(src)
|
|
src.goods_sell += new /datum/commodity/medical/firstaidB(src)
|
|
src.goods_sell += new /datum/commodity/medical/firstaidT(src)
|
|
src.goods_sell += new /datum/commodity/medical/firstaidO(src)
|
|
src.goods_sell += new /datum/commodity/medical/firstaidN(src)
|
|
src.goods_sell += new /datum/commodity/synthmodule/bacteria(src)
|
|
src.goods_sell += new /datum/commodity/synthmodule/virii(src)
|
|
src.goods_sell += new /datum/commodity/synthmodule/fungi(src)
|
|
src.goods_sell += new /datum/commodity/synthmodule/parasite(src)
|
|
src.goods_sell += new /datum/commodity/synthmodule/gmcell(src)
|
|
src.goods_sell += new /datum/commodity/synthmodule/vaccine(src)
|
|
src.goods_sell += new /datum/commodity/pathogensample(src)
|
|
|
|
src.goods_sell += new /datum/commodity/bodyparts/cyberheart(src)
|
|
src.goods_sell += new /datum/commodity/bodyparts/cyberbutt(src)
|
|
src.goods_sell += new /datum/commodity/bodyparts/cybereye(src)
|
|
src.goods_sell += new /datum/commodity/bodyparts/cybereye_sunglass(src)
|
|
src.goods_sell += new /datum/commodity/bodyparts/cybereye_thermal(src)
|
|
src.goods_sell += new /datum/commodity/bodyparts/cybereye_meson(src)
|
|
src.goods_sell += new /datum/commodity/bodyparts/cybereye_spectro(src)
|
|
src.goods_sell += new /datum/commodity/bodyparts/cybereye_prodoc(src)
|
|
src.goods_sell += new /datum/commodity/bodyparts/cybereye_camera(src)
|
|
src.goods_sell += new /datum/commodity/bodyparts/cybereye_ecto(src)
|
|
|
|
src.goods_buy += new /datum/commodity/bodyparts/armL(src)
|
|
src.goods_buy += new /datum/commodity/bodyparts/armR(src)
|
|
src.goods_buy += new /datum/commodity/bodyparts/legL(src)
|
|
src.goods_buy += new /datum/commodity/bodyparts/legR(src)
|
|
src.goods_buy += new /datum/commodity/bodyparts/brain(src)
|
|
src.goods_buy += new /datum/commodity/bodyparts/synthbrain(src)
|
|
src.goods_buy += new /datum/commodity/bodyparts/aibrain(src)
|
|
src.goods_buy += new /datum/commodity/bodyparts/butt(src)
|
|
src.goods_buy += new /datum/commodity/bodyparts/synthbutt(src)
|
|
src.goods_buy += new /datum/commodity/bodyparts/heart(src)
|
|
src.goods_buy += new /datum/commodity/bodyparts/synthheart(src)
|
|
src.goods_buy += new /datum/commodity/bodyparts/eye(src)
|
|
src.goods_buy += new /datum/commodity/bodyparts/syntheye(src)
|
|
src.goods_buy += new /datum/commodity/bodyparts/lung(src)
|
|
|
|
else // salvage goods
|
|
src.goods_sell += new /datum/commodity/fuel(src)
|
|
src.goods_sell += new /datum/commodity/junk/horsemask(src)
|
|
src.goods_sell += new /datum/commodity/junk/batmask(src)
|
|
src.goods_sell += new /datum/commodity/junk/johnny(src)
|
|
src.goods_sell += new /datum/commodity/junk/buddy(src)
|
|
src.goods_sell += new /datum/commodity/junk/cowboy_boots(src)
|
|
src.goods_sell += new /datum/commodity/junk/cowboy_hat(src)
|
|
src.goods_sell += new /datum/commodity/medical/injectormask(src)
|
|
src.goods_sell += new /datum/commodity/contraband/briefcase(src)
|
|
src.goods_sell += new /datum/commodity/boogiebot(src)
|
|
src.goods_sell += new /datum/commodity/junk/voltron(src)
|
|
src.goods_sell += new /datum/commodity/junk/cloner_upgrade(src)
|
|
src.goods_sell += new /datum/commodity/podparts/goldarmor(src)
|
|
|
|
src.goods_buy += new /datum/commodity/salvage/scrap(src)
|
|
src.goods_buy += new /datum/commodity/salvage/machinedebris(src)
|
|
src.goods_buy += new /datum/commodity/salvage/robotdebris(src)
|
|
src.goods_buy += new /datum/commodity/relics/gnome(src)
|
|
src.goods_buy += new /datum/commodity/goldbar(src)
|
|
|
|
//src.name = pick( "Unit DX-495E", "Unit DX-495H", "Unit DX-575E", "Unit DX-485F", "Unit DX-385D", "Sketchy D", "Skeevy D")
|
|
|
|
greeting= {"[src.name]'s eyes light up, and he states, \"Salutations organic, welcome to my shop. Please browse my wares.\""}
|
|
|
|
portrait_setup = "<img src='[resource("images/traders/[src.picture]")]'><HR><B>[src.name]</B><HR>"
|
|
|
|
sell_dialogue = "[src.name] states, \"There are several individuals in my database that are looking to procure goods."
|
|
|
|
buy_dialogue = "[src.name] states,\"Please select what you would like to buy\"."
|
|
|
|
successful_sale_dialogue = list("[src.name] states, \"Thank you for the business organic.\"",
|
|
"[src.name], \"I am adding you to the Good Customer Database.\"")
|
|
|
|
failed_sale_dialogue = list("[src.name] states, \"<ERROR> Item not in purchase database.\"",
|
|
"[src.name] states, \"I'm sorry I currently have no interest in that item, perhaps you should try another trader.\"",
|
|
"[src.name] starts making a loud and irritating noise. [src.name] states, \"Fatal Exception Error: Cannot locate item\"",
|
|
"[src.name] states, \"Invalid Input\"")
|
|
|
|
successful_purchase_dialogue = list("[src.name] states, \"Thank you for your business\".",
|
|
"[src.name] states, \"My logic drives calculate that was a wise purchase\".")
|
|
|
|
failed_purchase_dialogue = list("[src.name] states, \"I am sorry, but you currenty do not have enough funds to purchase this.\"",
|
|
"[src.name] states, \"Is this organic unit malfunctioning? You do not have enough funds to buy this\"")
|
|
|
|
pickupdialogue = "[src.name] states, \"Thank you for your business. Please come again\"."
|
|
|
|
pickupdialoguefailure = "[src.name] states, \"I'm sorry, but you don't have anything to pick up\"."
|
|
|
|
activatesecurity()
|
|
for(var/mob/M in AIviewers(src))
|
|
boutput(M, "<B>[src.name]</B> exclaims, \"SECURITY SYSTEM COMING ONLINE\"")
|
|
for(var/turf/T in get_area_turfs( get_area(src) ))
|
|
for (var/obj/machinery/bot/guardbot/G in T)
|
|
G.turn_on()
|
|
|
|
|
|
/// BZZZZZZZZZZZ
|
|
|
|
/obj/npc/trader/bee
|
|
icon = 'icons/obj/trader.dmi'
|
|
icon_state = "bee"
|
|
picture = "bee.png"
|
|
name = "Bombini" // like the tribe of bumblebees
|
|
trader_area = "/area/bee_trader"
|
|
|
|
New()
|
|
..()
|
|
/////////////////////////////////////////////////////////
|
|
//// sell list //////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////
|
|
src.goods_sell += new /datum/commodity/guardbot_kit(src)
|
|
src.goods_sell += new /datum/commodity/guardbot_medicator(src)
|
|
src.goods_sell += new /datum/commodity/guardbot_flash(src)
|
|
src.goods_sell += new /datum/commodity/guardbot_taser(src)
|
|
src.goods_sell += new /datum/commodity/guardbot_smoker(src)
|
|
src.goods_sell += new /datum/commodity/royaljelly(src)
|
|
src.goods_sell += new /datum/commodity/beeegg(src)
|
|
src.goods_sell += new /datum/commodity/b33egg(src)
|
|
src.goods_sell += new /datum/commodity/bee_kibble(src)
|
|
/////////////////////////////////////////////////////////
|
|
//// buy list ///////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////
|
|
src.goods_buy += new /datum/commodity/honey(src)
|
|
src.goods_buy += new /datum/commodity/contraband/spareid/bee(src)
|
|
src.goods_buy += new /datum/commodity/contraband/captainid/bee(src)
|
|
src.goods_buy += new /datum/commodity/goldbar(src)
|
|
/////////////////////////////////////////////////////////
|
|
|
|
greeting= {"[src.name] buzzes cheerfully."}
|
|
|
|
portrait_setup = "<img src='[resource("images/traders/[src.picture]")]'><HR><B>[src.name]</B><HR>"
|
|
|
|
sell_dialogue = "[src.name] bumbles a bit."
|
|
|
|
buy_dialogue = "[src.name] buzzes inquisitively."
|
|
|
|
successful_sale_dialogue = list("[src.name] does a little dance. He looks pretty pleased.")
|
|
|
|
failed_sale_dialogue = list("[src.name] grumbles.",
|
|
"[src.name] buzzes grumpily.",
|
|
"[src.name] grumpily bumbles.",
|
|
"[src.name] looks sad. Look what you've gone and done.")
|
|
|
|
successful_purchase_dialogue = list("[src.name] grustles.",
|
|
"[src.name] buzzes happily. You feel happier too.")
|
|
|
|
failed_purchase_dialogue = list("[src.name] gives a somber little buzz.",
|
|
"[src.name] pouts. You feel pretty bad about yourself.")
|
|
|
|
pickupdialogue = "[src.name] bumbles a bunch."
|
|
|
|
pickupdialoguefailure = "[src.name] grumps."
|
|
|
|
activatesecurity()
|
|
for(var/mob/M in AIviewers(src))
|
|
boutput(M, "<B>[src.name]</B> exclaims, \"BZZZZZZZZZZZ!\"")
|
|
for(var/turf/T in get_area_turfs( get_area(src) ))
|
|
for (var/obj/critter/domestic_bee/B in T)
|
|
B.aggressive = 1 // be, aggressive. bee be aggressive
|
|
B.atkcarbon = 1
|
|
|
|
// Hon- I mean, hello sir.
|
|
|
|
/obj/npc/trader/exclown
|
|
icon = 'icons/obj/trader.dmi'
|
|
icon_state = "exclown"
|
|
picture = "exclown.png"
|
|
name = "Geoff Honkington"
|
|
trader_area = "/area/hallway/secondary/entry"
|
|
|
|
New()
|
|
..()
|
|
/////////////////////////////////////////////////////////
|
|
//// sell list //////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////
|
|
src.goods_sell += new /datum/commodity/costume/bee(src)
|
|
src.goods_sell += new /datum/commodity/costume/monkey(src)
|
|
src.goods_sell += new /datum/commodity/costume/robuddy(src)
|
|
src.goods_sell += new /datum/commodity/costume/waltwhite(src)
|
|
src.goods_sell += new /datum/commodity/costume/spiderman(src)
|
|
src.goods_sell += new /datum/commodity/costume/wonka(src)
|
|
src.goods_sell += new /datum/commodity/costume/light_borg(src)
|
|
src.goods_sell += new /datum/commodity/costume/utena(src)
|
|
src.goods_sell += new /datum/commodity/balloons(src)
|
|
/////////////////////////////////////////////////////////
|
|
//// buy list ///////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////
|
|
src.goods_buy += new /datum/commodity/goldbar(src)
|
|
/////////////////////////////////////////////////////////
|
|
|
|
greeting= {"Psst, I've got what you need HON- Ahem, disregard that."}
|
|
|
|
portrait_setup = "<img src='[resource("images/traders/[src.picture]")]'><HR><B>[src.name]</B><HR>"
|
|
|
|
sell_dialogue = "Waddya have to sell?"
|
|
|
|
buy_dialogue = "Feel free to browse my wares, but you better hurry!"
|
|
|
|
successful_purchase_dialogue = list("Another satisfied customer.",
|
|
"Thank you.",
|
|
"It's been a pleasure doing business with you.")
|
|
|
|
failed_sale_dialogue = list("Don't waste my time, kid, I can't buy that!",
|
|
"I've got nobody who wants to buy that junk!",
|
|
"What, do you think I'm stupid?!? Get out of here!",
|
|
"Haha, nice try kid, but I've been in the business longer than that.")
|
|
|
|
successful_sale_dialogue = list("Thank you very much!",
|
|
"I'll take it!",
|
|
"Come back anytime!")
|
|
|
|
failed_purchase_dialogue = list("Come back when you can afford this stuff!",
|
|
"You ain't got the cash, kid!",
|
|
"Might want to check your account, 'cause I don't see the money in it!")
|
|
|
|
pickupdialogue = "Thank you very mhHHHONK- Uh, nothing."
|
|
|
|
pickupdialoguefailure = "You need to BUY things before you pick them up!" |