Player Vendors!
Player Vendors!
All greetings!
At me a problem with player vendors, they sell things only to the owners! How it to correct?
At me a problem with player vendors, they sell things only to the owners! How it to correct?
Here the script, is a default! чё in it to correct it is necessary that normally worked?
Code: Select all
use npc;
use basic;
use os;
use uo;
use util;
include "util/bank";
include "include/attributes";
include "include/eventID";
include "include/sysEvent";
include "include/randName";
include "include/vetement";
include "include/utility";
include "include/mrcSpawn";
include "include/dist";
include "include/client";
include "include/NPCBackpacks";
include "include/yesNo";
include "include/canAccess";
const UOBJ_GOLD_COIN := 0xeed;
const STARTHAIR := 0x2030;
const ENDHAIR := 0x2060;
set_priority( 50 );
var inv_fs, inv_pb;
var me := Self();
var master := CInt(GetObjProperty(me, "master"));
var cont := GetObjProperty(me, "cont");
var firstname;
set_critical(1);
var vendors := GetGlobalProperty("pcvendors");
if(!vendors)
vendors := {};
endif
if(me.serial in vendors)
else
vendors.append(me.serial);
endif
SetGlobalProperty("pcvendors", vendors);
set_critical(0);
program merchant()
Detach();
run_script_to_completion("NPCKeeper", me);
start_script(":playervendor:payCounter", me);
var nme := SplitWords(me.name);
firstname := lower(nme[1]);
var oldpack := me.backpack;
if(oldpack.objtype != 0x966c)
MoveItemToLocation(oldpack, 5851, 1161, 0, MOVEITEM_FORCELOCATION);
var newpack := CreateItemAtLocation(5851, 1162, 0, 0x966c, 1);
EquipItem(me, newpack);
foreach thing in ListRootItemsInContainer(oldpack)
MoveItemToContainer(thing, newpack);
endforeach
DestroyItem(oldpack);
endif
inv_pb := find_or_create_in_pack(me.serial + " PB", 0xe75);
inv_fs := find_or_create_in_pack(me.serial + " 1C", 0xe75);
SetObjProperty(inv_pb, "Vendor", me.serial);
SetObjProperty(inv_fs, "Vendor", me.serial);
SetObjProperty(inv_pb, "Vendored", me.serial);
SetObjProperty(inv_fs, "Vendored", me.serial);
SetObjProperty(inv_pb, "Master", master);
SetObjProperty(inv_fs, "Master", master);
if(!inv_fs || !inv_pb || !inv_fs)
exit;
endif
SetObjProperty(me,"serial", me.serial);
EnableEvents( SYSEVENT_ITEM_GIVEN + SYSEVENT_MERCHANT_SOLD + SYSEVENT_DOUBLECLICKED);
EnableEvents( SYSEVENT_SPEECH, 4);
var res;
var ev;
var text;
while(1)
ev := os::wait_for_event(120);
if(ev)
var who := ev.source;
case (ev.type)
SYSEVENT_DOUBLECLICKED: if(CheckLineOfSight(me, who))
SendOpenSpecialContainer(who, inv_fs);
else
SendSysMessage(who, "You cannot see that.");
endif
SYSEVENT_SPEECH: text := lower(ev.text);
if((text[firstname] and text["buy"]) or (text["vendor"] and text["buy"]))
TurnToward(who);
if(!CheckLineOfSight(me, who))
PrintTextAbovePrivate(me, "Who is speaking? I cannot see you.", who);
else
process_sale(ev.source);
endif
elseif((text[firstname] and text["purchase"]) or (text["vendor"] and text["purchase"]))
if(who.serial == master)
addthingstobuy(who);
endif
elseif(((text[firstname]) && (text["dismiss"])) and (ev.source.serial == master))
TurnToward(who);
if(YesNo(who, "Fire him?"))
Fireme();
endif
elseif((text[firstname] and text["sell"]) or (text["vendor"] and text["sell"]))
TurnToward(who);
SpoutBuyList(who);
elseif((text[firstname] and text["contact"]) or (text["vendor"] and text["contact"]))
TurnToward(who);
if(who.serial == master)
cont := recontact(who);
SetObjProperty(me, "cont", cont);
else
PrintTextAbovePrivate(me, "You may contact my employer " + cont, who);
endif
elseif(((text[firstname] and text["collect"]) or (text["vendor"] and text["collect"])) && (who.serial == master))
TurnToward(who);
cashout(who);
elseif(((text[firstname] and text["gold"]) or (text["vendor"] and text["gold"])) && (who.serial == master))
TurnToward(who);
cashout(who);
elseif(((text[firstname] and text["status"]) or (text["vendor"] and text["status"])) && (who.serial == master))
TurnToward(who);
statuscheck(who);
elseif(((text[firstname] and text["info"]) or (text["vendor"] and text["info"])) && (who.serial == master))
TurnToward(who);
statuscheck(who);
elseif(((text[firstname] and text["wear"]) or (text["vendor"] and text["wear"])) && (who.serial == master))
TurnToward(who);
PrintTextAbovePrivate(me, "What shall I wear?", who);
var this := Target(who);
if (!can_access(ev.source, this))
PrintTextAbovePrivate(me, "I don't see what you are talking about.", ev.source);
elseif (this in ListEquippedItems(ev.source))
PrintTextAbovePrivate(me, "Please take that off, first!", ev.source);
else
if (Distance(me, this) < 3)
wear_item( this);
else
PrintTextAbovePrivate(me, "That is too far away.", ev.source);
endif
endif
elseif(((text[firstname] and text["strip"]) or (text["vendor"] and text["strip"])) && (who.serial == master))
TurnToward( who );
PrintTextAbovePrivate(me, "Ooh, I think I feel a draft!", who);
strip_items(who);
elseif((text[firstname] and text["help"]) or (text["vendor"] and text["help"]))
TurnToward( who );
PrintTextAbovePrivate(me, "I will obey the following orders:", who);
sleep(1);
PrintTextAbovePrivate(me, "dismiss, sell, contact, collect,", who);
sleep(2);
PrintTextAbovePrivate(me, "wear, strip, status and purchase", who);
endif
SYSEVENT_ITEM_GIVEN: if(who.serial == master)
SetObjProperty(ev.container, "Hold", 1);
stockitem(ev);
EraseObjProperty(ev.container, "Hold");
else
buyitem(who, ev.item);
endif
endcase
sleep(1);
endif
if(GetObjProperty(me,"deadbeat"))
Fireme();
endif
endwhile
endprogram
function clearance(who, items)
foreach trg in items
trg.name := GetObjProperty(trg,"OldName");
EraseObjProperty(trg, "OldName");
EraseObjProperty(trg, "Vendored");
EraseObjProperty(trg, "price");
EraseObjProperty(trg, "Owner");
EraseObjProperty(trg, "Master");
if(trg.isA(POLCLASS_CONTAINER))
SetObjProperty(trg, "Owner", who.serial);
endif
endforeach
endfunction
function statuscheck(who);
var gold := CInt(GetObjProperty(me, "g"));
var rsrv := CInt(GetObjProperty(me, "r"));
var fees := 0;
var mypay := 50;
foreach item in inv_fs
fees := fees + GetObjProperty(item,"price");
endforeach
mypay := mypay + Cint(fees / 100);
var gamedays := (gold + rsrv) / mypay;
var realdays := gamedays / 8;
PrintTextAbovePrivate(me, "I am holding " + gold + " gold coins for you.", who);
sleep(1);
PrintTextAbovePrivate(me, "and am holding " + rsrv + " gold coins for future wages.", who);
sleep(1);
if(realdays == 1)
PrintTextAbovePrivate(me, "I have enough gold to continue working for " + gamedays + " day. [1 real world day]", who);
else
PrintTextAbovePrivate(me, "I have enough gold to continue working for " + gamedays + " days. [" + realdays + " real world days]", who);
endif
endfunction
function process_sale(who);
var gold := GetObjProperty(me,"g");
if(Distance(me, who) > 3)
PrintTextAbovePrivate(me, "You must come closer if you wish to purchase something.", who);
return;
endif
PrintTextAbovePrivate(me, "What do you wish to purchase?", who);
var trg := Target(who);
if(!trg)
SendSysMessage(who,"cancelled");
return;
endif
var ok := 0;
foreach item in EnumerateItemsInContainer(inv_fs)
if(trg == item)
ok := 1;
break;
endif
endforeach
if(ok == 0)
PrintTextAbovePrivate(me, "You cannot purchase that", who);
return;
elseif(ok == 1)
var bankbox := FindBankBox(who);
var price := CInt(GetObjProperty(trg, "price"));
if((!price) || (price == error))
PrintTextAbovePrivate(me, "Im sorry, but that is not for sale.", who);
return;
endif
var holder := {};
set_critical(1);
if(GetPayment(who, price))
trg.movable:=1;
if(MoveItemToContainer(trg, who.backpack))
PrintTextAbovePrivate(me,"I have withdrawn " + price + " gold from your backpack.", who);
SetObjProperty(me,"g", (price + gold));
holder.append(trg);
if(trg.isA(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(trg)
holder.append(thing);
endforeach
endif
clearance(who, holder);
else
PrintTextAbovePrivate(me,"You do not have enough room for that in your backpack", who);
GiveRefund(who, price);
endif
else
var contents := EnumerateItemsInContainer(bankbox);
var amt := 0;
foreach item in contents
if((item.objtype == 0xeed) && (item.amount >= price))
amt := item;
break;
endif
endforeach
if(amt != 0)
if(SubtractAmount(amt, price))
if(MoveItemToContainer(trg, who.backpack))
PrintTextAbovePrivate(me,"I have withdrawn " + price + " gold from your bank account.", who);
SetObjProperty(me,"g", (price + gold));
holder.append(trg);
if(trg.isA(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(trg)
holder.append(thing);
endforeach
endif
clearance(who, holder);
else
PrintTextAbovePrivate(me,"You do not have enough room for that in your backpack", who);
AddAmount(amt, price);
endif
endif
else
PrintTextAbovePrivate(me,"You cannot afford this item.", who);
endif
endif
set_critical(0);
endif
endfunction
function stockitem(tev)
if((tev.item.objtype == UOBJ_GOLD_COIN) and (!tev.container))
TakeGold(tev);
return;
endif
var tname;
var item := tev.item;
SetObjProperty(item, "OldName", item.name);
PrintTextAbovePrivate(me, "How much shall I charge for this item? ", tev.source);
var cost := CInt(RequestInput(tev.source, item, ""));
if(cost < 0)
PrintTextAbovePrivate(me, "You cannot sell items for values below zero", tev.source);
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
elseif(cost > 60000)
PrintTextAbovePrivate(me, "You cannot price items for more than 60000 gold.", tev.source);
if(item.isa(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(item)
thing.name := GetObjProperty(thing,"OldName");
EraseObjProperty(thing, "OldName");
EraseObjProperty(thing, "Vendored");
EraseObjProperty(thing, "price");
thing.movable := 1;
endforeach
endif
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
elseif(cost == 0)
if(item.isa(POLCLASS_CONTAINER))
if((item.objtype == 0x1940) || (item.objtype == 0xefa) || (item.objtype == 0x6100))
PrintTextAbovePrivate(me, "You cannot sell that item for 0 gold.", tev.source);
if(item.isa(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(item)
thing.name := GetObjProperty(thing,"OldName");
EraseObjProperty(thing, "OldName");
EraseObjProperty(thing, "Vendored");
EraseObjProperty(thing, "price");
thing.movable := 1;
endforeach
endif
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
else
var items := 0;
foreach thing in EnumerateItemsInContainer(item)
items := 1;
break;
endforeach
if(items == 1)
PrintTextAbovePrivate(me, "Well, just keep it, then", tev.source);
if(item.isa(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(item)
thing.name := GetObjProperty(thing,"OldName");
EraseObjProperty(thing, "OldName");
EraseObjProperty(thing, "Vendored");
EraseObjProperty(thing, "price");
thing.movable := 1;
endforeach
endif
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
endif
PrintTextAbovePrivate(me, "How shall I advertise this item?", tev.source);
tname := RequestInput(tev.source, item, "");
SetObjProperty(item, "price", "Not For Sale");
cost := "Not For Sale";
endif
else
PrintTextAbovePrivate(me, "Well, just keep it, then", tev.source);
if(item.isa(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(item)
thing.name := GetObjProperty(thing,"OldName");
EraseObjProperty(thing, "OldName");
EraseObjProperty(thing, "Vendored");
EraseObjProperty(thing, "price");
thing.movable := 1;
endforeach
endif
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
endif
endif
if(item.isa(POLCLASS_CONTAINER))
var theoldname;
foreach thing in EnumerateItemsInContainer(item)
theoldname := thing.desc;
if(!item.desc)
theoldname := "";
endif
SetName(thing, thing.desc + " [Cost: Not For Sale]");
SetObjProperty(thing, "OldName", theoldname);
SetObjProperty(thing, "Vendored", me.serial);
SetObjProperty(thing, "price", "Not For Sale");
thing.movable := 1;
endforeach
SetObjProperty(item, "Master", master);
item.movable := 1;
endif
var oldname := item.desc;
if(!item.desc)
oldname := "";
endif
SetObjProperty(item, "OldName", oldname);
SetObjProperty(item, "price", CInt(cost));
SetObjProperty(item, "Vendored", me.serial);
if(tname)
SetName(item, tname + " [Cost: " + cost + " ]");
else
SetName(item, item.desc + " [Cost: " + cost + " ]");
endif
if(!tev.vendor)
MoveItemToContainer(item, inv_fs);
endif
if(cost == "Not For Sale")
PrintTextAbovePrivate(me, "I'll just hang on to that for ya.", tev.source);
else
PrintTextAbovePrivate(me, "I will sell that for " + cost + " gold.", tev.source);
endif
endfunction
function cashout(person)
var mygold := CInt(GetObjProperty(me, "g"));
var payment := 0;
var rsrv := GetObjProperty(me,"r");
var pbank := FindBankBox(person);
if(mygold > 0)
while(mygold > 60000)
CreateItemInContainer(pbank, UOBJ_GOLD_COIN, 60000);
payment := payment + 60000;
mygold := mygold - 60000;
endwhile
payment := payment + mygold;
PrintTextAbovePrivate(me, "Ive placed " + payment + " gold coins in your bank box.", person);
CreateItemInContainer(pbank, UOBJ_GOLD_COIN, mygold);
SetObjProperty(me, "g", 0);
else
PrintTextAbovePrivate(me, "I am not holding any gold for you.", person);
endif
if(rsrv)
PrintTextAbovePrivate(me, "You have left me " + rsrv + " reserve gold coins to use towards my future wages.", person);
else
PrintTextAbovePrivate(me, "but you have left me nothing towards my future wages.", person);
endif
endfunction
function recontact(who)
var cnt := SendTextEntryGump( who, "How shall I tell people to contact you? ", TE_CANCEL_DISABLE, TE_STYLE_NORMAL, 50);
return cnt;
endfunction
function wear_item(item)
foreach thing in ListEquippedItems(me)
MoveItemToContainer(thing, inv_pb);
endforeach
EquipItem(me, item);
foreach thingie in EnumerateItemsInContainer(inv_pb)
EquipItem(me, thingie);
endforeach
foreach thingie in EnumerateItemsInContainer(inv_pb)
MoveItemToLocation(thingie, me.x, me.y, me.z, MOVEITEM_FORCELOCATION );
endforeach
endfunction
function strip_items(mmaster)
foreach thing in ListEquippedItems(me)
if ((thing.objtype < STARTHAIR) || (thing.objtype > ENDHAIR))
MoveItemToContainer(thing, inv_pb);
endif
endforeach
foreach thing in EnumerateItemsInContainer(inv_fs)
if (thing.container.serial == inv_fs.serial)
MoveItemToContainer(thing, inv_pb);
endif
endforeach
foreach thingie in EnumerateItemsInContainer(inv_pb)
if (thingie.container.serial == inv_pb.serial)
MoveItemToContainer(thingie, mmaster.backpack);
endif
endforeach
endfunction
function Fireme()
var mypack := findmypack(me.serial);
var mygold := CInt(GetObjProperty(me, "g"));
var payment := 0;
if(mygold > 0)
while(mygold > 60000)
CreateItemInContainer(mypack, UOBJ_GOLD_COIN, 60000);
payment := payment + 60000;
mygold := mygold - 60000;
endwhile
CreateItemInContainer(mypack, UOBJ_GOLD_COIN, mygold);
endif
foreach thing in ListRootItemsInContainer(inv_fs)
MoveItemToContainer(thing, mypack);
endforeach
foreach thingy in ListRootItemsInContainer(inv_pb)
MoveItemToContainer(thingy, mypack);
endforeach
RevokePrivilege( me, "invul" );
say("I regret nothing!");
ApplyRawDamage( me, GetHp(me) +3);
endfunction
function addthingstobuy(who)
var buylist := {};
var buyprice := { };
var buyobj := { };
var i;
if (!GetObjProperty(me,"buylist"))
buylist := {};
buyprice := {};
buyobj := { };
else
buylist := GetObjProperty(me,"buylist");
buyprice := GetObjProperty(me,"buyprice");
buyobj := GetObjProperty(me,"buyobj");
endif
PrintTextAbovePrivate(me, "What do you want me to buy?", who);
var what := Target( master );
if ((!what) || (what == error) || (GetStrength(what)) )
PrintTextAbovePrivate(me, "Nevermind", who);
return;
endif
if (what.desc in buylist)
PrintTextAbovePrivate(me, "I will no longer purchase "+what.desc, who);
var newbuylist := { };
var newbuyprice := { };
var newbuyobj := { };
for (i := 1; i<=len(buylist); i:=i+1)
if (buylist[i] != what.desc)
newbuylist[len(newbuylist)+1] := buylist[i];
newbuyprice[len(newbuyprice)+1] := buyprice[i];
newbuyobj[len(newbuyobj)+1] := buyobj[i];
endif
endfor
SetObjProperty(me,"buylist",newbuylist);
SetObjProperty(me,"buyprice",newbuyprice);
SetObjProperty(me,"buyobj",newbuyobj);
return;
endif
if (!what.objtype)
PrintTextAbovePrivate(me, "I can't buy those. What the hell is that, anyway?", who);
return;
endif
buylist[ len(buylist)+1] := what.desc;
buyprice[ len(buyprice)+1] := CInt(SendTextEntryGump( master,"How much shall I pay for this item? ", TE_CANCEL_ENABLE, TE_STYLE_NORMAL));
buyobj[ len(buyobj)+1] := what.objtype;
if (len(buylist)==1)
PrintTextAbovePrivate(me, "I will purchase "+buylist[1], master);
elseif (len(buylist)==2)
PrintTextAbovePrivate(me, "I will purchase "+buylist[1] +" and "+ buylist[2], master);
else
var buying := "I will purchase "+buylist[1];
for (i := 2; i<=len(buylist)-1; i:=i+1)
buying := buying + ", " +buylist[i];
endfor
buying := buying + " and " + buylist[len(buylist)];
PrintTextAbovePrivate(me, buying, master);
endif
SetObjProperty(me,"buylist",buylist);
SetObjProperty(me,"buyprice",buyprice);
SetObjProperty(me,"buyobj",buyobj);
endfunction
function SpoutBuyList(you)
var buylist := {};
var buyprice := {};
var i;
if (!GetObjProperty(me,"buylist"))
PrintTextAbovePrivate(me, "I don't buy anything.", you);
return;
else
buylist := GetObjProperty(me,"buylist");
buyprice := GetObjProperty(me,"buyprice");
endif
for (i := 1; i<=len(buylist); i:=i+1)
PrintTextAbovePrivate(me, "I'll pay "+ buyprice[i] + " for " + buylist[i], you);
sleep(2);
endfor
PrintTextAbovePrivate(me, "Just hand me what you want me to buy.", you);
endfunction
function buyitem(you, it)
var mypack := findmypack(me.serial);
var itsownerserial := CInt(GetObjProperty(it, "ownerserial"));
if (itsownerserial == CInt(master))
PrintTextAbovePrivate(me, "I'll see that this is returned to my employer.", you);
MoveItemToContainer(it,mypack);
NotifyMaster(you.name + " gave me an item of yours.");
return;
endif
var buylist := {};
var buyprice := { };
var buyobj := { };
var i;
if (!GetObjProperty(me,"buylist"))
PrintTextAbovePrivate(me, "I don't buy anything", you);
MoveItemToContainer(it,you.backpack);
return;
else
buylist := GetObjProperty(me,"buylist");
buyprice := GetObjProperty(me,"buyprice");
buyobj := GetObjProperty(me,"buyobj");
endif
if (!(it.objtype in buyobj))
PrintTextAbovePrivate(me, "Ugh, I don't want that.", you);
MoveItemToContainer(it,you.backpack);
return;
endif
var index := 0;
for (i := 1; i<=len(buylist); i:=i+1)
if (it.objtype == buyobj[i])
index := i;
break;
endif
endfor
if (!index)
PrintTextAbovePrivate(me, "Ugh, I don't want that.", you);
MoveItemToContainer(it,you.backpack);
return;
endif
var mygold := CInt(GetObjProperty(me, "g"));
if ( (mygold-250) < (buyprice[index]*it.amount))
PrintTextAbovePrivate(me, "Sorry, I can't afford that right now.", you);
MoveItemToContainer(it,you.backpack);
return;
endif
var itamount := it.amount;
var itdesc := it.desc;
if ( grabitem(it,mypack) )
PrintTextAbovePrivate(me, "Thank you! Here's your " + (buyprice[index]*itamount) + " gold.", you);
CreateItemInContainer(you.backpack, UOBJ_GOLD_COIN, buyprice[index]*itamount );
NotifyMaster(you.name + " just sold me " + itdesc);
else
NotifyMaster("My backpack is full!");
MoveItemToContainer(it,you.backpack);
return;
endif
var theprice := buyprice[index]*itamount;
var mypay := CInt(GetObjProperty(me,"mypay"));
var commission := CInt( 0.05 * theprice);
mygold := mygold - theprice;
mypay := mypay + commission;
if (mygold >= mypay)
mypay := 0;
mygold := mygold - mypay;
else
mypay := mypay - mygold;
mygold := 0;
endif
SetObjProperty(me, "mypay",mypay);
SetObjProperty(me, "g", mygold);
endfunction
function NotifyMaster(themessage)
foreach onlinechr in EnumerateOnlineCharacters()
if (onlinechr.serial == master)
SendSysMessage(onlinechr, me.name + " : " + themessage);
break;
endif
endforeach
endfunction
function TakeGold(ev)
var goldamount := ev.item.amount;
var mygold := CInt(GetObjProperty(me, "r"));
if(goldamount)
mygold := mygold + goldamount;
var totalgold := CInt(GetObjProperty(me,"g")) + mygold;
PrintTextAbovePrivate(me, "I am holding " + totalgold + " gold for you.", ev.source);
endif
SetObjProperty(me, "r", mygold);
DestroyItem(ev.item);
endfunction
function grabitem(it,mypack)
var mystuff := EnumerateItemsInContainer(mypack);
if (it.amount > 1 )
foreach item in mystuff
if (item.objtype == it.objtype)
if (CreateItemInContainer( mypack, it.objtype, it.amount ))
DestroyItem(it);
return 1;
else
return 0;
endif
endif
endforeach
else
foreach item in mystuff
if ((item.objtype == it.objtype) && (item.amount > 1 ))
if ( CreateItemInContainer( mypack, it.objtype, it.amount ) )
DestroyItem(it);
return 1;
else
return 0;
endif
endif
endforeach
endif
if (MoveItemToContainer(it,mypack))
return 1;
else
return 0;
endif
endfunction
function GetPayment(player, price)
var backpack := EnumerateItemsInContainer(player.backpack);
var a := 0;
foreach item in backpack
if ((item.objtype == 0xeed) && (item.amount >= price) )
if(SubtractAmount(item, price))
a := 1;
break;
endif
endif
endforeach
if(a == 1)
return 1;
else
return 0;
endif
endfunction
function Giverefund(who, price)
CreateItemInContainer(who.backpack, 0xeed, price);
endfunction
function find_or_create_in_pack(name, objtype);
var mypack := me.backpack;
var check := 0;
foreach thing in ListRootItemsInContainer(mypack)
if(thing.name == name)
check := thing;
break;
endif
endforeach
if(check == 0)
check := CreateItemInContainer(mypack, objtype, 1);
SetName(check, name);
endif
return check;
endfunctionHere the script, is a default! чё in it to correct it is necessary that normally worked?
Code: Select all
use npc;
use basic;
use os;
use uo;
use util;
include "util/bank";
include "include/attributes";
include "include/eventID";
include "include/sysEvent";
include "include/randName";
include "include/vetement";
include "include/utility";
include "include/mrcSpawn";
include "include/dist";
include "include/client";
include "include/NPCBackpacks";
include "include/yesNo";
include "include/canAccess";
const UOBJ_GOLD_COIN := 0xeed;
const STARTHAIR := 0x2030;
const ENDHAIR := 0x2060;
set_priority( 50 );
var inv_fs, inv_pb;
var me := Self();
var master := CInt(GetObjProperty(me, "master"));
var cont := GetObjProperty(me, "cont");
var firstname;
set_critical(1);
var vendors := GetGlobalProperty("pcvendors");
if(!vendors)
vendors := {};
endif
if(me.serial in vendors)
else
vendors.append(me.serial);
endif
SetGlobalProperty("pcvendors", vendors);
set_critical(0);
program merchant()
Detach();
run_script_to_completion("NPCKeeper", me);
start_script(":playervendor:payCounter", me);
var nme := SplitWords(me.name);
firstname := lower(nme[1]);
var oldpack := me.backpack;
if(oldpack.objtype != 0x966c)
MoveItemToLocation(oldpack, 5851, 1161, 0, MOVEITEM_FORCELOCATION);
var newpack := CreateItemAtLocation(5851, 1162, 0, 0x966c, 1);
EquipItem(me, newpack);
foreach thing in ListRootItemsInContainer(oldpack)
MoveItemToContainer(thing, newpack);
endforeach
DestroyItem(oldpack);
endif
inv_pb := find_or_create_in_pack(me.serial + " PB", 0xe75);
inv_fs := find_or_create_in_pack(me.serial + " 1C", 0xe75);
SetObjProperty(inv_pb, "Vendor", me.serial);
SetObjProperty(inv_fs, "Vendor", me.serial);
SetObjProperty(inv_pb, "Vendored", me.serial);
SetObjProperty(inv_fs, "Vendored", me.serial);
SetObjProperty(inv_pb, "Master", master);
SetObjProperty(inv_fs, "Master", master);
if(!inv_fs || !inv_pb || !inv_fs)
exit;
endif
SetObjProperty(me,"serial", me.serial);
EnableEvents( SYSEVENT_ITEM_GIVEN + SYSEVENT_MERCHANT_SOLD + SYSEVENT_DOUBLECLICKED);
EnableEvents( SYSEVENT_SPEECH, 4);
var res;
var ev;
var text;
while(1)
ev := os::wait_for_event(120);
if(ev)
var who := ev.source;
case (ev.type)
SYSEVENT_DOUBLECLICKED: if(CheckLineOfSight(me, who))
SendOpenSpecialContainer(who, inv_fs);
else
SendSysMessage(who, "You cannot see that.");
endif
SYSEVENT_SPEECH: text := lower(ev.text);
if((text[firstname] and text["buy"]) or (text["vendor"] and text["buy"]))
TurnToward(who);
if(!CheckLineOfSight(me, who))
PrintTextAbovePrivate(me, "Who is speaking? I cannot see you.", who);
else
process_sale(ev.source);
endif
elseif((text[firstname] and text["purchase"]) or (text["vendor"] and text["purchase"]))
if(who.serial == master)
addthingstobuy(who);
endif
elseif(((text[firstname]) && (text["dismiss"])) and (ev.source.serial == master))
TurnToward(who);
if(YesNo(who, "Fire him?"))
Fireme();
endif
elseif((text[firstname] and text["sell"]) or (text["vendor"] and text["sell"]))
TurnToward(who);
SpoutBuyList(who);
elseif((text[firstname] and text["contact"]) or (text["vendor"] and text["contact"]))
TurnToward(who);
if(who.serial == master)
cont := recontact(who);
SetObjProperty(me, "cont", cont);
else
PrintTextAbovePrivate(me, "You may contact my employer " + cont, who);
endif
elseif(((text[firstname] and text["collect"]) or (text["vendor"] and text["collect"])) && (who.serial == master))
TurnToward(who);
cashout(who);
elseif(((text[firstname] and text["gold"]) or (text["vendor"] and text["gold"])) && (who.serial == master))
TurnToward(who);
cashout(who);
elseif(((text[firstname] and text["status"]) or (text["vendor"] and text["status"])) && (who.serial == master))
TurnToward(who);
statuscheck(who);
elseif(((text[firstname] and text["info"]) or (text["vendor"] and text["info"])) && (who.serial == master))
TurnToward(who);
statuscheck(who);
elseif(((text[firstname] and text["wear"]) or (text["vendor"] and text["wear"])) && (who.serial == master))
TurnToward(who);
PrintTextAbovePrivate(me, "What shall I wear?", who);
var this := Target(who);
if (!can_access(ev.source, this))
PrintTextAbovePrivate(me, "I don't see what you are talking about.", ev.source);
elseif (this in ListEquippedItems(ev.source))
PrintTextAbovePrivate(me, "Please take that off, first!", ev.source);
else
if (Distance(me, this) < 3)
wear_item( this);
else
PrintTextAbovePrivate(me, "That is too far away.", ev.source);
endif
endif
elseif(((text[firstname] and text["strip"]) or (text["vendor"] and text["strip"])) && (who.serial == master))
TurnToward( who );
PrintTextAbovePrivate(me, "Ooh, I think I feel a draft!", who);
strip_items(who);
elseif((text[firstname] and text["help"]) or (text["vendor"] and text["help"]))
TurnToward( who );
PrintTextAbovePrivate(me, "I will obey the following orders:", who);
sleep(1);
PrintTextAbovePrivate(me, "dismiss, sell, contact, collect,", who);
sleep(2);
PrintTextAbovePrivate(me, "wear, strip, status and purchase", who);
endif
SYSEVENT_ITEM_GIVEN: if(who.serial == master)
SetObjProperty(ev.container, "Hold", 1);
stockitem(ev);
EraseObjProperty(ev.container, "Hold");
else
buyitem(who, ev.item);
endif
endcase
sleep(1);
endif
if(GetObjProperty(me,"deadbeat"))
Fireme();
endif
endwhile
endprogram
function clearance(who, items)
foreach trg in items
trg.name := GetObjProperty(trg,"OldName");
EraseObjProperty(trg, "OldName");
EraseObjProperty(trg, "Vendored");
EraseObjProperty(trg, "price");
EraseObjProperty(trg, "Owner");
EraseObjProperty(trg, "Master");
if(trg.isA(POLCLASS_CONTAINER))
SetObjProperty(trg, "Owner", who.serial);
endif
endforeach
endfunction
function statuscheck(who);
var gold := CInt(GetObjProperty(me, "g"));
var rsrv := CInt(GetObjProperty(me, "r"));
var fees := 0;
var mypay := 50;
foreach item in inv_fs
fees := fees + GetObjProperty(item,"price");
endforeach
mypay := mypay + Cint(fees / 100);
var gamedays := (gold + rsrv) / mypay;
var realdays := gamedays / 8;
PrintTextAbovePrivate(me, "I am holding " + gold + " gold coins for you.", who);
sleep(1);
PrintTextAbovePrivate(me, "and am holding " + rsrv + " gold coins for future wages.", who);
sleep(1);
if(realdays == 1)
PrintTextAbovePrivate(me, "I have enough gold to continue working for " + gamedays + " day. [1 real world day]", who);
else
PrintTextAbovePrivate(me, "I have enough gold to continue working for " + gamedays + " days. [" + realdays + " real world days]", who);
endif
endfunction
function process_sale(who);
var gold := GetObjProperty(me,"g");
if(Distance(me, who) > 3)
PrintTextAbovePrivate(me, "You must come closer if you wish to purchase something.", who);
return;
endif
PrintTextAbovePrivate(me, "What do you wish to purchase?", who);
var trg := Target(who);
if(!trg)
SendSysMessage(who,"cancelled");
return;
endif
var ok := 0;
foreach item in EnumerateItemsInContainer(inv_fs)
if(trg == item)
ok := 1;
break;
endif
endforeach
if(ok == 0)
PrintTextAbovePrivate(me, "You cannot purchase that", who);
return;
elseif(ok == 1)
var bankbox := FindBankBox(who);
var price := CInt(GetObjProperty(trg, "price"));
if((!price) || (price == error))
PrintTextAbovePrivate(me, "Im sorry, but that is not for sale.", who);
return;
endif
var holder := {};
set_critical(1);
if(GetPayment(who, price))
trg.movable:=1;
if(MoveItemToContainer(trg, who.backpack))
PrintTextAbovePrivate(me,"I have withdrawn " + price + " gold from your backpack.", who);
SetObjProperty(me,"g", (price + gold));
holder.append(trg);
if(trg.isA(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(trg)
holder.append(thing);
endforeach
endif
clearance(who, holder);
else
PrintTextAbovePrivate(me,"You do not have enough room for that in your backpack", who);
GiveRefund(who, price);
endif
else
var contents := EnumerateItemsInContainer(bankbox);
var amt := 0;
foreach item in contents
if((item.objtype == 0xeed) && (item.amount >= price))
amt := item;
break;
endif
endforeach
if(amt != 0)
if(SubtractAmount(amt, price))
if(MoveItemToContainer(trg, who.backpack))
PrintTextAbovePrivate(me,"I have withdrawn " + price + " gold from your bank account.", who);
SetObjProperty(me,"g", (price + gold));
holder.append(trg);
if(trg.isA(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(trg)
holder.append(thing);
endforeach
endif
clearance(who, holder);
else
PrintTextAbovePrivate(me,"You do not have enough room for that in your backpack", who);
AddAmount(amt, price);
endif
endif
else
PrintTextAbovePrivate(me,"You cannot afford this item.", who);
endif
endif
set_critical(0);
endif
endfunction
function stockitem(tev)
if((tev.item.objtype == UOBJ_GOLD_COIN) and (!tev.container))
TakeGold(tev);
return;
endif
var tname;
var item := tev.item;
SetObjProperty(item, "OldName", item.name);
PrintTextAbovePrivate(me, "How much shall I charge for this item? ", tev.source);
var cost := CInt(RequestInput(tev.source, item, ""));
if(cost < 0)
PrintTextAbovePrivate(me, "You cannot sell items for values below zero", tev.source);
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
elseif(cost > 60000)
PrintTextAbovePrivate(me, "You cannot price items for more than 60000 gold.", tev.source);
if(item.isa(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(item)
thing.name := GetObjProperty(thing,"OldName");
EraseObjProperty(thing, "OldName");
EraseObjProperty(thing, "Vendored");
EraseObjProperty(thing, "price");
thing.movable := 1;
endforeach
endif
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
elseif(cost == 0)
if(item.isa(POLCLASS_CONTAINER))
if((item.objtype == 0x1940) || (item.objtype == 0xefa) || (item.objtype == 0x6100))
PrintTextAbovePrivate(me, "You cannot sell that item for 0 gold.", tev.source);
if(item.isa(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(item)
thing.name := GetObjProperty(thing,"OldName");
EraseObjProperty(thing, "OldName");
EraseObjProperty(thing, "Vendored");
EraseObjProperty(thing, "price");
thing.movable := 1;
endforeach
endif
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
else
var items := 0;
foreach thing in EnumerateItemsInContainer(item)
items := 1;
break;
endforeach
if(items == 1)
PrintTextAbovePrivate(me, "Well, just keep it, then", tev.source);
if(item.isa(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(item)
thing.name := GetObjProperty(thing,"OldName");
EraseObjProperty(thing, "OldName");
EraseObjProperty(thing, "Vendored");
EraseObjProperty(thing, "price");
thing.movable := 1;
endforeach
endif
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
endif
PrintTextAbovePrivate(me, "How shall I advertise this item?", tev.source);
tname := RequestInput(tev.source, item, "");
SetObjProperty(item, "price", "Not For Sale");
cost := "Not For Sale";
endif
else
PrintTextAbovePrivate(me, "Well, just keep it, then", tev.source);
if(item.isa(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(item)
thing.name := GetObjProperty(thing,"OldName");
EraseObjProperty(thing, "OldName");
EraseObjProperty(thing, "Vendored");
EraseObjProperty(thing, "price");
thing.movable := 1;
endforeach
endif
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
endif
endif
if(item.isa(POLCLASS_CONTAINER))
var theoldname;
foreach thing in EnumerateItemsInContainer(item)
theoldname := thing.desc;
if(!item.desc)
theoldname := "";
endif
SetName(thing, thing.desc + " [Cost: Not For Sale]");
SetObjProperty(thing, "OldName", theoldname);
SetObjProperty(thing, "Vendored", me.serial);
SetObjProperty(thing, "price", "Not For Sale");
thing.movable := 1;
endforeach
SetObjProperty(item, "Master", master);
item.movable := 1;
endif
var oldname := item.desc;
if(!item.desc)
oldname := "";
endif
SetObjProperty(item, "OldName", oldname);
SetObjProperty(item, "price", CInt(cost));
SetObjProperty(item, "Vendored", me.serial);
if(tname)
SetName(item, tname + " [Cost: " + cost + " ]");
else
SetName(item, item.desc + " [Cost: " + cost + " ]");
endif
if(!tev.vendor)
MoveItemToContainer(item, inv_fs);
endif
if(cost == "Not For Sale")
PrintTextAbovePrivate(me, "I'll just hang on to that for ya.", tev.source);
else
PrintTextAbovePrivate(me, "I will sell that for " + cost + " gold.", tev.source);
endif
endfunction
function cashout(person)
var mygold := CInt(GetObjProperty(me, "g"));
var payment := 0;
var rsrv := GetObjProperty(me,"r");
var pbank := FindBankBox(person);
if(mygold > 0)
while(mygold > 60000)
CreateItemInContainer(pbank, UOBJ_GOLD_COIN, 60000);
payment := payment + 60000;
mygold := mygold - 60000;
endwhile
payment := payment + mygold;
PrintTextAbovePrivate(me, "Ive placed " + payment + " gold coins in your bank box.", person);
CreateItemInContainer(pbank, UOBJ_GOLD_COIN, mygold);
SetObjProperty(me, "g", 0);
else
PrintTextAbovePrivate(me, "I am not holding any gold for you.", person);
endif
if(rsrv)
PrintTextAbovePrivate(me, "You have left me " + rsrv + " reserve gold coins to use towards my future wages.", person);
else
PrintTextAbovePrivate(me, "but you have left me nothing towards my future wages.", person);
endif
endfunction
function recontact(who)
var cnt := SendTextEntryGump( who, "How shall I tell people to contact you? ", TE_CANCEL_DISABLE, TE_STYLE_NORMAL, 50);
return cnt;
endfunction
function wear_item(item)
foreach thing in ListEquippedItems(me)
MoveItemToContainer(thing, inv_pb);
endforeach
EquipItem(me, item);
foreach thingie in EnumerateItemsInContainer(inv_pb)
EquipItem(me, thingie);
endforeach
foreach thingie in EnumerateItemsInContainer(inv_pb)
MoveItemToLocation(thingie, me.x, me.y, me.z, MOVEITEM_FORCELOCATION );
endforeach
endfunction
function strip_items(mmaster)
foreach thing in ListEquippedItems(me)
if ((thing.objtype < STARTHAIR) || (thing.objtype > ENDHAIR))
MoveItemToContainer(thing, inv_pb);
endif
endforeach
foreach thing in EnumerateItemsInContainer(inv_fs)
if (thing.container.serial == inv_fs.serial)
MoveItemToContainer(thing, inv_pb);
endif
endforeach
foreach thingie in EnumerateItemsInContainer(inv_pb)
if (thingie.container.serial == inv_pb.serial)
MoveItemToContainer(thingie, mmaster.backpack);
endif
endforeach
endfunction
function Fireme()
var mypack := findmypack(me.serial);
var mygold := CInt(GetObjProperty(me, "g"));
var payment := 0;
if(mygold > 0)
while(mygold > 60000)
CreateItemInContainer(mypack, UOBJ_GOLD_COIN, 60000);
payment := payment + 60000;
mygold := mygold - 60000;
endwhile
CreateItemInContainer(mypack, UOBJ_GOLD_COIN, mygold);
endif
foreach thing in ListRootItemsInContainer(inv_fs)
MoveItemToContainer(thing, mypack);
endforeach
foreach thingy in ListRootItemsInContainer(inv_pb)
MoveItemToContainer(thingy, mypack);
endforeach
RevokePrivilege( me, "invul" );
say("I regret nothing!");
ApplyRawDamage( me, GetHp(me) +3);
endfunction
function addthingstobuy(who)
var buylist := {};
var buyprice := { };
var buyobj := { };
var i;
if (!GetObjProperty(me,"buylist"))
buylist := {};
buyprice := {};
buyobj := { };
else
buylist := GetObjProperty(me,"buylist");
buyprice := GetObjProperty(me,"buyprice");
buyobj := GetObjProperty(me,"buyobj");
endif
PrintTextAbovePrivate(me, "What do you want me to buy?", who);
var what := Target( master );
if ((!what) || (what == error) || (GetStrength(what)) )
PrintTextAbovePrivate(me, "Nevermind", who);
return;
endif
if (what.desc in buylist)
PrintTextAbovePrivate(me, "I will no longer purchase "+what.desc, who);
var newbuylist := { };
var newbuyprice := { };
var newbuyobj := { };
for (i := 1; i<=len(buylist); i:=i+1)
if (buylist[i] != what.desc)
newbuylist[len(newbuylist)+1] := buylist[i];
newbuyprice[len(newbuyprice)+1] := buyprice[i];
newbuyobj[len(newbuyobj)+1] := buyobj[i];
endif
endfor
SetObjProperty(me,"buylist",newbuylist);
SetObjProperty(me,"buyprice",newbuyprice);
SetObjProperty(me,"buyobj",newbuyobj);
return;
endif
if (!what.objtype)
PrintTextAbovePrivate(me, "I can't buy those. What the hell is that, anyway?", who);
return;
endif
buylist[ len(buylist)+1] := what.desc;
buyprice[ len(buyprice)+1] := CInt(SendTextEntryGump( master,"How much shall I pay for this item? ", TE_CANCEL_ENABLE, TE_STYLE_NORMAL));
buyobj[ len(buyobj)+1] := what.objtype;
if (len(buylist)==1)
PrintTextAbovePrivate(me, "I will purchase "+buylist[1], master);
elseif (len(buylist)==2)
PrintTextAbovePrivate(me, "I will purchase "+buylist[1] +" and "+ buylist[2], master);
else
var buying := "I will purchase "+buylist[1];
for (i := 2; i<=len(buylist)-1; i:=i+1)
buying := buying + ", " +buylist[i];
endfor
buying := buying + " and " + buylist[len(buylist)];
PrintTextAbovePrivate(me, buying, master);
endif
SetObjProperty(me,"buylist",buylist);
SetObjProperty(me,"buyprice",buyprice);
SetObjProperty(me,"buyobj",buyobj);
endfunction
function SpoutBuyList(you)
var buylist := {};
var buyprice := {};
var i;
if (!GetObjProperty(me,"buylist"))
PrintTextAbovePrivate(me, "I don't buy anything.", you);
return;
else
buylist := GetObjProperty(me,"buylist");
buyprice := GetObjProperty(me,"buyprice");
endif
for (i := 1; i<=len(buylist); i:=i+1)
PrintTextAbovePrivate(me, "I'll pay "+ buyprice[i] + " for " + buylist[i], you);
sleep(2);
endfor
PrintTextAbovePrivate(me, "Just hand me what you want me to buy.", you);
endfunction
function buyitem(you, it)
var mypack := findmypack(me.serial);
var itsownerserial := CInt(GetObjProperty(it, "ownerserial"));
if (itsownerserial == CInt(master))
PrintTextAbovePrivate(me, "I'll see that this is returned to my employer.", you);
MoveItemToContainer(it,mypack);
NotifyMaster(you.name + " gave me an item of yours.");
return;
endif
var buylist := {};
var buyprice := { };
var buyobj := { };
var i;
if (!GetObjProperty(me,"buylist"))
PrintTextAbovePrivate(me, "I don't buy anything", you);
MoveItemToContainer(it,you.backpack);
return;
else
buylist := GetObjProperty(me,"buylist");
buyprice := GetObjProperty(me,"buyprice");
buyobj := GetObjProperty(me,"buyobj");
endif
if (!(it.objtype in buyobj))
PrintTextAbovePrivate(me, "Ugh, I don't want that.", you);
MoveItemToContainer(it,you.backpack);
return;
endif
var index := 0;
for (i := 1; i<=len(buylist); i:=i+1)
if (it.objtype == buyobj[i])
index := i;
break;
endif
endfor
if (!index)
PrintTextAbovePrivate(me, "Ugh, I don't want that.", you);
MoveItemToContainer(it,you.backpack);
return;
endif
var mygold := CInt(GetObjProperty(me, "g"));
if ( (mygold-250) < (buyprice[index]*it.amount))
PrintTextAbovePrivate(me, "Sorry, I can't afford that right now.", you);
MoveItemToContainer(it,you.backpack);
return;
endif
var itamount := it.amount;
var itdesc := it.desc;
if ( grabitem(it,mypack) )
PrintTextAbovePrivate(me, "Thank you! Here's your " + (buyprice[index]*itamount) + " gold.", you);
CreateItemInContainer(you.backpack, UOBJ_GOLD_COIN, buyprice[index]*itamount );
NotifyMaster(you.name + " just sold me " + itdesc);
else
NotifyMaster("My backpack is full!");
MoveItemToContainer(it,you.backpack);
return;
endif
var theprice := buyprice[index]*itamount;
var mypay := CInt(GetObjProperty(me,"mypay"));
var commission := CInt( 0.05 * theprice);
mygold := mygold - theprice;
mypay := mypay + commission;
if (mygold >= mypay)
mypay := 0;
mygold := mygold - mypay;
else
mypay := mypay - mygold;
mygold := 0;
endif
SetObjProperty(me, "mypay",mypay);
SetObjProperty(me, "g", mygold);
endfunction
function NotifyMaster(themessage)
foreach onlinechr in EnumerateOnlineCharacters()
if (onlinechr.serial == master)
SendSysMessage(onlinechr, me.name + " : " + themessage);
break;
endif
endforeach
endfunction
function TakeGold(ev)
var goldamount := ev.item.amount;
var mygold := CInt(GetObjProperty(me, "r"));
if(goldamount)
mygold := mygold + goldamount;
var totalgold := CInt(GetObjProperty(me,"g")) + mygold;
PrintTextAbovePrivate(me, "I am holding " + totalgold + " gold for you.", ev.source);
endif
SetObjProperty(me, "r", mygold);
DestroyItem(ev.item);
endfunction
function grabitem(it,mypack)
var mystuff := EnumerateItemsInContainer(mypack);
if (it.amount > 1 )
foreach item in mystuff
if (item.objtype == it.objtype)
if (CreateItemInContainer( mypack, it.objtype, it.amount ))
DestroyItem(it);
return 1;
else
return 0;
endif
endif
endforeach
else
foreach item in mystuff
if ((item.objtype == it.objtype) && (item.amount > 1 ))
if ( CreateItemInContainer( mypack, it.objtype, it.amount ) )
DestroyItem(it);
return 1;
else
return 0;
endif
endif
endforeach
endif
if (MoveItemToContainer(it,mypack))
return 1;
else
return 0;
endif
endfunction
function GetPayment(player, price)
var backpack := EnumerateItemsInContainer(player.backpack);
var a := 0;
foreach item in backpack
if ((item.objtype == 0xeed) && (item.amount >= price) )
if(SubtractAmount(item, price))
a := 1;
break;
endif
endif
endforeach
if(a == 1)
return 1;
else
return 0;
endif
endfunction
function Giverefund(who, price)
CreateItemInContainer(who.backpack, 0xeed, price);
endfunction
function find_or_create_in_pack(name, objtype);
var mypack := me.backpack;
var check := 0;
foreach thing in ListRootItemsInContainer(mypack)
if(thing.name == name)
check := thing;
break;
endif
endforeach
if(check == 0)
check := CreateItemInContainer(mypack, objtype, 1);
SetName(check, name);
endif
return check;
endfunctionHere the script, is a default! чё in it to correct it is necessary that normally worked?
Code: Select all
use npc;
use basic;
use os;
use uo;
use util;
include "util/bank";
include "include/attributes";
include "include/eventID";
include "include/sysEvent";
include "include/randName";
include "include/vetement";
include "include/utility";
include "include/mrcSpawn";
include "include/dist";
include "include/client";
include "include/NPCBackpacks";
include "include/yesNo";
include "include/canAccess";
const UOBJ_GOLD_COIN := 0xeed;
const STARTHAIR := 0x2030;
const ENDHAIR := 0x2060;
set_priority( 50 );
var inv_fs, inv_pb;
var me := Self();
var master := CInt(GetObjProperty(me, "master"));
var cont := GetObjProperty(me, "cont");
var firstname;
set_critical(1);
var vendors := GetGlobalProperty("pcvendors");
if(!vendors)
vendors := {};
endif
if(me.serial in vendors)
else
vendors.append(me.serial);
endif
SetGlobalProperty("pcvendors", vendors);
set_critical(0);
program merchant()
Detach();
run_script_to_completion("NPCKeeper", me);
start_script(":playervendor:payCounter", me);
var nme := SplitWords(me.name);
firstname := lower(nme[1]);
var oldpack := me.backpack;
if(oldpack.objtype != 0x966c)
MoveItemToLocation(oldpack, 5851, 1161, 0, MOVEITEM_FORCELOCATION);
var newpack := CreateItemAtLocation(5851, 1162, 0, 0x966c, 1);
EquipItem(me, newpack);
foreach thing in ListRootItemsInContainer(oldpack)
MoveItemToContainer(thing, newpack);
endforeach
DestroyItem(oldpack);
endif
inv_pb := find_or_create_in_pack(me.serial + " PB", 0xe75);
inv_fs := find_or_create_in_pack(me.serial + " 1C", 0xe75);
SetObjProperty(inv_pb, "Vendor", me.serial);
SetObjProperty(inv_fs, "Vendor", me.serial);
SetObjProperty(inv_pb, "Vendored", me.serial);
SetObjProperty(inv_fs, "Vendored", me.serial);
SetObjProperty(inv_pb, "Master", master);
SetObjProperty(inv_fs, "Master", master);
if(!inv_fs || !inv_pb || !inv_fs)
exit;
endif
SetObjProperty(me,"serial", me.serial);
EnableEvents( SYSEVENT_ITEM_GIVEN + SYSEVENT_MERCHANT_SOLD + SYSEVENT_DOUBLECLICKED);
EnableEvents( SYSEVENT_SPEECH, 4);
var res;
var ev;
var text;
while(1)
ev := os::wait_for_event(120);
if(ev)
var who := ev.source;
case (ev.type)
SYSEVENT_DOUBLECLICKED: if(CheckLineOfSight(me, who))
SendOpenSpecialContainer(who, inv_fs);
else
SendSysMessage(who, "You cannot see that.");
endif
SYSEVENT_SPEECH: text := lower(ev.text);
if((text[firstname] and text["buy"]) or (text["vendor"] and text["buy"]))
TurnToward(who);
if(!CheckLineOfSight(me, who))
PrintTextAbovePrivate(me, "Who is speaking? I cannot see you.", who);
else
process_sale(ev.source);
endif
elseif((text[firstname] and text["purchase"]) or (text["vendor"] and text["purchase"]))
if(who.serial == master)
addthingstobuy(who);
endif
elseif(((text[firstname]) && (text["dismiss"])) and (ev.source.serial == master))
TurnToward(who);
if(YesNo(who, "Fire him?"))
Fireme();
endif
elseif((text[firstname] and text["sell"]) or (text["vendor"] and text["sell"]))
TurnToward(who);
SpoutBuyList(who);
elseif((text[firstname] and text["contact"]) or (text["vendor"] and text["contact"]))
TurnToward(who);
if(who.serial == master)
cont := recontact(who);
SetObjProperty(me, "cont", cont);
else
PrintTextAbovePrivate(me, "You may contact my employer " + cont, who);
endif
elseif(((text[firstname] and text["collect"]) or (text["vendor"] and text["collect"])) && (who.serial == master))
TurnToward(who);
cashout(who);
elseif(((text[firstname] and text["gold"]) or (text["vendor"] and text["gold"])) && (who.serial == master))
TurnToward(who);
cashout(who);
elseif(((text[firstname] and text["status"]) or (text["vendor"] and text["status"])) && (who.serial == master))
TurnToward(who);
statuscheck(who);
elseif(((text[firstname] and text["info"]) or (text["vendor"] and text["info"])) && (who.serial == master))
TurnToward(who);
statuscheck(who);
elseif(((text[firstname] and text["wear"]) or (text["vendor"] and text["wear"])) && (who.serial == master))
TurnToward(who);
PrintTextAbovePrivate(me, "What shall I wear?", who);
var this := Target(who);
if (!can_access(ev.source, this))
PrintTextAbovePrivate(me, "I don't see what you are talking about.", ev.source);
elseif (this in ListEquippedItems(ev.source))
PrintTextAbovePrivate(me, "Please take that off, first!", ev.source);
else
if (Distance(me, this) < 3)
wear_item( this);
else
PrintTextAbovePrivate(me, "That is too far away.", ev.source);
endif
endif
elseif(((text[firstname] and text["strip"]) or (text["vendor"] and text["strip"])) && (who.serial == master))
TurnToward( who );
PrintTextAbovePrivate(me, "Ooh, I think I feel a draft!", who);
strip_items(who);
elseif((text[firstname] and text["help"]) or (text["vendor"] and text["help"]))
TurnToward( who );
PrintTextAbovePrivate(me, "I will obey the following orders:", who);
sleep(1);
PrintTextAbovePrivate(me, "dismiss, sell, contact, collect,", who);
sleep(2);
PrintTextAbovePrivate(me, "wear, strip, status and purchase", who);
endif
SYSEVENT_ITEM_GIVEN: if(who.serial == master)
SetObjProperty(ev.container, "Hold", 1);
stockitem(ev);
EraseObjProperty(ev.container, "Hold");
else
buyitem(who, ev.item);
endif
endcase
sleep(1);
endif
if(GetObjProperty(me,"deadbeat"))
Fireme();
endif
endwhile
endprogram
function clearance(who, items)
foreach trg in items
trg.name := GetObjProperty(trg,"OldName");
EraseObjProperty(trg, "OldName");
EraseObjProperty(trg, "Vendored");
EraseObjProperty(trg, "price");
EraseObjProperty(trg, "Owner");
EraseObjProperty(trg, "Master");
if(trg.isA(POLCLASS_CONTAINER))
SetObjProperty(trg, "Owner", who.serial);
endif
endforeach
endfunction
function statuscheck(who);
var gold := CInt(GetObjProperty(me, "g"));
var rsrv := CInt(GetObjProperty(me, "r"));
var fees := 0;
var mypay := 50;
foreach item in inv_fs
fees := fees + GetObjProperty(item,"price");
endforeach
mypay := mypay + Cint(fees / 100);
var gamedays := (gold + rsrv) / mypay;
var realdays := gamedays / 8;
PrintTextAbovePrivate(me, "I am holding " + gold + " gold coins for you.", who);
sleep(1);
PrintTextAbovePrivate(me, "and am holding " + rsrv + " gold coins for future wages.", who);
sleep(1);
if(realdays == 1)
PrintTextAbovePrivate(me, "I have enough gold to continue working for " + gamedays + " day. [1 real world day]", who);
else
PrintTextAbovePrivate(me, "I have enough gold to continue working for " + gamedays + " days. [" + realdays + " real world days]", who);
endif
endfunction
function process_sale(who);
var gold := GetObjProperty(me,"g");
if(Distance(me, who) > 3)
PrintTextAbovePrivate(me, "You must come closer if you wish to purchase something.", who);
return;
endif
PrintTextAbovePrivate(me, "What do you wish to purchase?", who);
var trg := Target(who);
if(!trg)
SendSysMessage(who,"cancelled");
return;
endif
var ok := 0;
foreach item in EnumerateItemsInContainer(inv_fs)
if(trg == item)
ok := 1;
break;
endif
endforeach
if(ok == 0)
PrintTextAbovePrivate(me, "You cannot purchase that", who);
return;
elseif(ok == 1)
var bankbox := FindBankBox(who);
var price := CInt(GetObjProperty(trg, "price"));
if((!price) || (price == error))
PrintTextAbovePrivate(me, "Im sorry, but that is not for sale.", who);
return;
endif
var holder := {};
set_critical(1);
if(GetPayment(who, price))
trg.movable:=1;
if(MoveItemToContainer(trg, who.backpack))
PrintTextAbovePrivate(me,"I have withdrawn " + price + " gold from your backpack.", who);
SetObjProperty(me,"g", (price + gold));
holder.append(trg);
if(trg.isA(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(trg)
holder.append(thing);
endforeach
endif
clearance(who, holder);
else
PrintTextAbovePrivate(me,"You do not have enough room for that in your backpack", who);
GiveRefund(who, price);
endif
else
var contents := EnumerateItemsInContainer(bankbox);
var amt := 0;
foreach item in contents
if((item.objtype == 0xeed) && (item.amount >= price))
amt := item;
break;
endif
endforeach
if(amt != 0)
if(SubtractAmount(amt, price))
if(MoveItemToContainer(trg, who.backpack))
PrintTextAbovePrivate(me,"I have withdrawn " + price + " gold from your bank account.", who);
SetObjProperty(me,"g", (price + gold));
holder.append(trg);
if(trg.isA(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(trg)
holder.append(thing);
endforeach
endif
clearance(who, holder);
else
PrintTextAbovePrivate(me,"You do not have enough room for that in your backpack", who);
AddAmount(amt, price);
endif
endif
else
PrintTextAbovePrivate(me,"You cannot afford this item.", who);
endif
endif
set_critical(0);
endif
endfunction
function stockitem(tev)
if((tev.item.objtype == UOBJ_GOLD_COIN) and (!tev.container))
TakeGold(tev);
return;
endif
var tname;
var item := tev.item;
SetObjProperty(item, "OldName", item.name);
PrintTextAbovePrivate(me, "How much shall I charge for this item? ", tev.source);
var cost := CInt(RequestInput(tev.source, item, ""));
if(cost < 0)
PrintTextAbovePrivate(me, "You cannot sell items for values below zero", tev.source);
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
elseif(cost > 60000)
PrintTextAbovePrivate(me, "You cannot price items for more than 60000 gold.", tev.source);
if(item.isa(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(item)
thing.name := GetObjProperty(thing,"OldName");
EraseObjProperty(thing, "OldName");
EraseObjProperty(thing, "Vendored");
EraseObjProperty(thing, "price");
thing.movable := 1;
endforeach
endif
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
elseif(cost == 0)
if(item.isa(POLCLASS_CONTAINER))
if((item.objtype == 0x1940) || (item.objtype == 0xefa) || (item.objtype == 0x6100))
PrintTextAbovePrivate(me, "You cannot sell that item for 0 gold.", tev.source);
if(item.isa(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(item)
thing.name := GetObjProperty(thing,"OldName");
EraseObjProperty(thing, "OldName");
EraseObjProperty(thing, "Vendored");
EraseObjProperty(thing, "price");
thing.movable := 1;
endforeach
endif
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
else
var items := 0;
foreach thing in EnumerateItemsInContainer(item)
items := 1;
break;
endforeach
if(items == 1)
PrintTextAbovePrivate(me, "Well, just keep it, then", tev.source);
if(item.isa(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(item)
thing.name := GetObjProperty(thing,"OldName");
EraseObjProperty(thing, "OldName");
EraseObjProperty(thing, "Vendored");
EraseObjProperty(thing, "price");
thing.movable := 1;
endforeach
endif
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
endif
PrintTextAbovePrivate(me, "How shall I advertise this item?", tev.source);
tname := RequestInput(tev.source, item, "");
SetObjProperty(item, "price", "Not For Sale");
cost := "Not For Sale";
endif
else
PrintTextAbovePrivate(me, "Well, just keep it, then", tev.source);
if(item.isa(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(item)
thing.name := GetObjProperty(thing,"OldName");
EraseObjProperty(thing, "OldName");
EraseObjProperty(thing, "Vendored");
EraseObjProperty(thing, "price");
thing.movable := 1;
endforeach
endif
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
endif
endif
if(item.isa(POLCLASS_CONTAINER))
var theoldname;
foreach thing in EnumerateItemsInContainer(item)
theoldname := thing.desc;
if(!item.desc)
theoldname := "";
endif
SetName(thing, thing.desc + " [Cost: Not For Sale]");
SetObjProperty(thing, "OldName", theoldname);
SetObjProperty(thing, "Vendored", me.serial);
SetObjProperty(thing, "price", "Not For Sale");
thing.movable := 1;
endforeach
SetObjProperty(item, "Master", master);
item.movable := 1;
endif
var oldname := item.desc;
if(!item.desc)
oldname := "";
endif
SetObjProperty(item, "OldName", oldname);
SetObjProperty(item, "price", CInt(cost));
SetObjProperty(item, "Vendored", me.serial);
if(tname)
SetName(item, tname + " [Cost: " + cost + " ]");
else
SetName(item, item.desc + " [Cost: " + cost + " ]");
endif
if(!tev.vendor)
MoveItemToContainer(item, inv_fs);
endif
if(cost == "Not For Sale")
PrintTextAbovePrivate(me, "I'll just hang on to that for ya.", tev.source);
else
PrintTextAbovePrivate(me, "I will sell that for " + cost + " gold.", tev.source);
endif
endfunction
function cashout(person)
var mygold := CInt(GetObjProperty(me, "g"));
var payment := 0;
var rsrv := GetObjProperty(me,"r");
var pbank := FindBankBox(person);
if(mygold > 0)
while(mygold > 60000)
CreateItemInContainer(pbank, UOBJ_GOLD_COIN, 60000);
payment := payment + 60000;
mygold := mygold - 60000;
endwhile
payment := payment + mygold;
PrintTextAbovePrivate(me, "Ive placed " + payment + " gold coins in your bank box.", person);
CreateItemInContainer(pbank, UOBJ_GOLD_COIN, mygold);
SetObjProperty(me, "g", 0);
else
PrintTextAbovePrivate(me, "I am not holding any gold for you.", person);
endif
if(rsrv)
PrintTextAbovePrivate(me, "You have left me " + rsrv + " reserve gold coins to use towards my future wages.", person);
else
PrintTextAbovePrivate(me, "but you have left me nothing towards my future wages.", person);
endif
endfunction
function recontact(who)
var cnt := SendTextEntryGump( who, "How shall I tell people to contact you? ", TE_CANCEL_DISABLE, TE_STYLE_NORMAL, 50);
return cnt;
endfunction
function wear_item(item)
foreach thing in ListEquippedItems(me)
MoveItemToContainer(thing, inv_pb);
endforeach
EquipItem(me, item);
foreach thingie in EnumerateItemsInContainer(inv_pb)
EquipItem(me, thingie);
endforeach
foreach thingie in EnumerateItemsInContainer(inv_pb)
MoveItemToLocation(thingie, me.x, me.y, me.z, MOVEITEM_FORCELOCATION );
endforeach
endfunction
function strip_items(mmaster)
foreach thing in ListEquippedItems(me)
if ((thing.objtype < STARTHAIR) || (thing.objtype > ENDHAIR))
MoveItemToContainer(thing, inv_pb);
endif
endforeach
foreach thing in EnumerateItemsInContainer(inv_fs)
if (thing.container.serial == inv_fs.serial)
MoveItemToContainer(thing, inv_pb);
endif
endforeach
foreach thingie in EnumerateItemsInContainer(inv_pb)
if (thingie.container.serial == inv_pb.serial)
MoveItemToContainer(thingie, mmaster.backpack);
endif
endforeach
endfunction
function Fireme()
var mypack := findmypack(me.serial);
var mygold := CInt(GetObjProperty(me, "g"));
var payment := 0;
if(mygold > 0)
while(mygold > 60000)
CreateItemInContainer(mypack, UOBJ_GOLD_COIN, 60000);
payment := payment + 60000;
mygold := mygold - 60000;
endwhile
CreateItemInContainer(mypack, UOBJ_GOLD_COIN, mygold);
endif
foreach thing in ListRootItemsInContainer(inv_fs)
MoveItemToContainer(thing, mypack);
endforeach
foreach thingy in ListRootItemsInContainer(inv_pb)
MoveItemToContainer(thingy, mypack);
endforeach
RevokePrivilege( me, "invul" );
say("I regret nothing!");
ApplyRawDamage( me, GetHp(me) +3);
endfunction
function addthingstobuy(who)
var buylist := {};
var buyprice := { };
var buyobj := { };
var i;
if (!GetObjProperty(me,"buylist"))
buylist := {};
buyprice := {};
buyobj := { };
else
buylist := GetObjProperty(me,"buylist");
buyprice := GetObjProperty(me,"buyprice");
buyobj := GetObjProperty(me,"buyobj");
endif
PrintTextAbovePrivate(me, "What do you want me to buy?", who);
var what := Target( master );
if ((!what) || (what == error) || (GetStrength(what)) )
PrintTextAbovePrivate(me, "Nevermind", who);
return;
endif
if (what.desc in buylist)
PrintTextAbovePrivate(me, "I will no longer purchase "+what.desc, who);
var newbuylist := { };
var newbuyprice := { };
var newbuyobj := { };
for (i := 1; i<=len(buylist); i:=i+1)
if (buylist[i] != what.desc)
newbuylist[len(newbuylist)+1] := buylist[i];
newbuyprice[len(newbuyprice)+1] := buyprice[i];
newbuyobj[len(newbuyobj)+1] := buyobj[i];
endif
endfor
SetObjProperty(me,"buylist",newbuylist);
SetObjProperty(me,"buyprice",newbuyprice);
SetObjProperty(me,"buyobj",newbuyobj);
return;
endif
if (!what.objtype)
PrintTextAbovePrivate(me, "I can't buy those. What the hell is that, anyway?", who);
return;
endif
buylist[ len(buylist)+1] := what.desc;
buyprice[ len(buyprice)+1] := CInt(SendTextEntryGump( master,"How much shall I pay for this item? ", TE_CANCEL_ENABLE, TE_STYLE_NORMAL));
buyobj[ len(buyobj)+1] := what.objtype;
if (len(buylist)==1)
PrintTextAbovePrivate(me, "I will purchase "+buylist[1], master);
elseif (len(buylist)==2)
PrintTextAbovePrivate(me, "I will purchase "+buylist[1] +" and "+ buylist[2], master);
else
var buying := "I will purchase "+buylist[1];
for (i := 2; i<=len(buylist)-1; i:=i+1)
buying := buying + ", " +buylist[i];
endfor
buying := buying + " and " + buylist[len(buylist)];
PrintTextAbovePrivate(me, buying, master);
endif
SetObjProperty(me,"buylist",buylist);
SetObjProperty(me,"buyprice",buyprice);
SetObjProperty(me,"buyobj",buyobj);
endfunction
function SpoutBuyList(you)
var buylist := {};
var buyprice := {};
var i;
if (!GetObjProperty(me,"buylist"))
PrintTextAbovePrivate(me, "I don't buy anything.", you);
return;
else
buylist := GetObjProperty(me,"buylist");
buyprice := GetObjProperty(me,"buyprice");
endif
for (i := 1; i<=len(buylist); i:=i+1)
PrintTextAbovePrivate(me, "I'll pay "+ buyprice[i] + " for " + buylist[i], you);
sleep(2);
endfor
PrintTextAbovePrivate(me, "Just hand me what you want me to buy.", you);
endfunction
function buyitem(you, it)
var mypack := findmypack(me.serial);
var itsownerserial := CInt(GetObjProperty(it, "ownerserial"));
if (itsownerserial == CInt(master))
PrintTextAbovePrivate(me, "I'll see that this is returned to my employer.", you);
MoveItemToContainer(it,mypack);
NotifyMaster(you.name + " gave me an item of yours.");
return;
endif
var buylist := {};
var buyprice := { };
var buyobj := { };
var i;
if (!GetObjProperty(me,"buylist"))
PrintTextAbovePrivate(me, "I don't buy anything", you);
MoveItemToContainer(it,you.backpack);
return;
else
buylist := GetObjProperty(me,"buylist");
buyprice := GetObjProperty(me,"buyprice");
buyobj := GetObjProperty(me,"buyobj");
endif
if (!(it.objtype in buyobj))
PrintTextAbovePrivate(me, "Ugh, I don't want that.", you);
MoveItemToContainer(it,you.backpack);
return;
endif
var index := 0;
for (i := 1; i<=len(buylist); i:=i+1)
if (it.objtype == buyobj[i])
index := i;
break;
endif
endfor
if (!index)
PrintTextAbovePrivate(me, "Ugh, I don't want that.", you);
MoveItemToContainer(it,you.backpack);
return;
endif
var mygold := CInt(GetObjProperty(me, "g"));
if ( (mygold-250) < (buyprice[index]*it.amount))
PrintTextAbovePrivate(me, "Sorry, I can't afford that right now.", you);
MoveItemToContainer(it,you.backpack);
return;
endif
var itamount := it.amount;
var itdesc := it.desc;
if ( grabitem(it,mypack) )
PrintTextAbovePrivate(me, "Thank you! Here's your " + (buyprice[index]*itamount) + " gold.", you);
CreateItemInContainer(you.backpack, UOBJ_GOLD_COIN, buyprice[index]*itamount );
NotifyMaster(you.name + " just sold me " + itdesc);
else
NotifyMaster("My backpack is full!");
MoveItemToContainer(it,you.backpack);
return;
endif
var theprice := buyprice[index]*itamount;
var mypay := CInt(GetObjProperty(me,"mypay"));
var commission := CInt( 0.05 * theprice);
mygold := mygold - theprice;
mypay := mypay + commission;
if (mygold >= mypay)
mypay := 0;
mygold := mygold - mypay;
else
mypay := mypay - mygold;
mygold := 0;
endif
SetObjProperty(me, "mypay",mypay);
SetObjProperty(me, "g", mygold);
endfunction
function NotifyMaster(themessage)
foreach onlinechr in EnumerateOnlineCharacters()
if (onlinechr.serial == master)
SendSysMessage(onlinechr, me.name + " : " + themessage);
break;
endif
endforeach
endfunction
function TakeGold(ev)
var goldamount := ev.item.amount;
var mygold := CInt(GetObjProperty(me, "r"));
if(goldamount)
mygold := mygold + goldamount;
var totalgold := CInt(GetObjProperty(me,"g")) + mygold;
PrintTextAbovePrivate(me, "I am holding " + totalgold + " gold for you.", ev.source);
endif
SetObjProperty(me, "r", mygold);
DestroyItem(ev.item);
endfunction
function grabitem(it,mypack)
var mystuff := EnumerateItemsInContainer(mypack);
if (it.amount > 1 )
foreach item in mystuff
if (item.objtype == it.objtype)
if (CreateItemInContainer( mypack, it.objtype, it.amount ))
DestroyItem(it);
return 1;
else
return 0;
endif
endif
endforeach
else
foreach item in mystuff
if ((item.objtype == it.objtype) && (item.amount > 1 ))
if ( CreateItemInContainer( mypack, it.objtype, it.amount ) )
DestroyItem(it);
return 1;
else
return 0;
endif
endif
endforeach
endif
if (MoveItemToContainer(it,mypack))
return 1;
else
return 0;
endif
endfunction
function GetPayment(player, price)
var backpack := EnumerateItemsInContainer(player.backpack);
var a := 0;
foreach item in backpack
if ((item.objtype == 0xeed) && (item.amount >= price) )
if(SubtractAmount(item, price))
a := 1;
break;
endif
endif
endforeach
if(a == 1)
return 1;
else
return 0;
endif
endfunction
function Giverefund(who, price)
CreateItemInContainer(who.backpack, 0xeed, price);
endfunction
function find_or_create_in_pack(name, objtype);
var mypack := me.backpack;
var check := 0;
foreach thing in ListRootItemsInContainer(mypack)
if(thing.name == name)
check := thing;
break;
endif
endforeach
if(check == 0)
check := CreateItemInContainer(mypack, objtype, 1);
SetName(check, name);
endif
return check;
endfunctionHere the script, is a default! What in it to correct it is necessary that normally worked?
Code: Select all
use npc;
use basic;
use os;
use uo;
use util;
include "util/bank";
include "include/attributes";
include "include/eventID";
include "include/sysEvent";
include "include/randName";
include "include/vetement";
include "include/utility";
include "include/mrcSpawn";
include "include/dist";
include "include/client";
include "include/NPCBackpacks";
include "include/yesNo";
include "include/canAccess";
const UOBJ_GOLD_COIN := 0xeed;
const STARTHAIR := 0x2030;
const ENDHAIR := 0x2060;
set_priority( 50 );
var inv_fs, inv_pb;
var me := Self();
var master := CInt(GetObjProperty(me, "master"));
var cont := GetObjProperty(me, "cont");
var firstname;
set_critical(1);
var vendors := GetGlobalProperty("pcvendors");
if(!vendors)
vendors := {};
endif
if(me.serial in vendors)
else
vendors.append(me.serial);
endif
SetGlobalProperty("pcvendors", vendors);
set_critical(0);
program merchant()
Detach();
run_script_to_completion("NPCKeeper", me);
start_script(":playervendor:payCounter", me);
var nme := SplitWords(me.name);
firstname := lower(nme[1]);
var oldpack := me.backpack;
if(oldpack.objtype != 0x966c)
MoveItemToLocation(oldpack, 5851, 1161, 0, MOVEITEM_FORCELOCATION);
var newpack := CreateItemAtLocation(5851, 1162, 0, 0x966c, 1);
EquipItem(me, newpack);
foreach thing in ListRootItemsInContainer(oldpack)
MoveItemToContainer(thing, newpack);
endforeach
DestroyItem(oldpack);
endif
inv_pb := find_or_create_in_pack(me.serial + " PB", 0xe75);
inv_fs := find_or_create_in_pack(me.serial + " 1C", 0xe75);
SetObjProperty(inv_pb, "Vendor", me.serial);
SetObjProperty(inv_fs, "Vendor", me.serial);
SetObjProperty(inv_pb, "Vendored", me.serial);
SetObjProperty(inv_fs, "Vendored", me.serial);
SetObjProperty(inv_pb, "Master", master);
SetObjProperty(inv_fs, "Master", master);
if(!inv_fs || !inv_pb || !inv_fs)
exit;
endif
SetObjProperty(me,"serial", me.serial);
EnableEvents( SYSEVENT_ITEM_GIVEN + SYSEVENT_MERCHANT_SOLD + SYSEVENT_DOUBLECLICKED);
EnableEvents( SYSEVENT_SPEECH, 4);
var res;
var ev;
var text;
while(1)
ev := os::wait_for_event(120);
if(ev)
var who := ev.source;
case (ev.type)
SYSEVENT_DOUBLECLICKED: if(CheckLineOfSight(me, who))
SendOpenSpecialContainer(who, inv_fs);
else
SendSysMessage(who, "You cannot see that.");
endif
SYSEVENT_SPEECH: text := lower(ev.text);
if((text[firstname] and text["buy"]) or (text["vendor"] and text["buy"]))
TurnToward(who);
if(!CheckLineOfSight(me, who))
PrintTextAbovePrivate(me, "Who is speaking? I cannot see you.", who);
else
process_sale(ev.source);
endif
elseif((text[firstname] and text["purchase"]) or (text["vendor"] and text["purchase"]))
if(who.serial == master)
addthingstobuy(who);
endif
elseif(((text[firstname]) && (text["dismiss"])) and (ev.source.serial == master))
TurnToward(who);
if(YesNo(who, "Fire him?"))
Fireme();
endif
elseif((text[firstname] and text["sell"]) or (text["vendor"] and text["sell"]))
TurnToward(who);
SpoutBuyList(who);
elseif((text[firstname] and text["contact"]) or (text["vendor"] and text["contact"]))
TurnToward(who);
if(who.serial == master)
cont := recontact(who);
SetObjProperty(me, "cont", cont);
else
PrintTextAbovePrivate(me, "You may contact my employer " + cont, who);
endif
elseif(((text[firstname] and text["collect"]) or (text["vendor"] and text["collect"])) && (who.serial == master))
TurnToward(who);
cashout(who);
elseif(((text[firstname] and text["gold"]) or (text["vendor"] and text["gold"])) && (who.serial == master))
TurnToward(who);
cashout(who);
elseif(((text[firstname] and text["status"]) or (text["vendor"] and text["status"])) && (who.serial == master))
TurnToward(who);
statuscheck(who);
elseif(((text[firstname] and text["info"]) or (text["vendor"] and text["info"])) && (who.serial == master))
TurnToward(who);
statuscheck(who);
elseif(((text[firstname] and text["wear"]) or (text["vendor"] and text["wear"])) && (who.serial == master))
TurnToward(who);
PrintTextAbovePrivate(me, "What shall I wear?", who);
var this := Target(who);
if (!can_access(ev.source, this))
PrintTextAbovePrivate(me, "I don't see what you are talking about.", ev.source);
elseif (this in ListEquippedItems(ev.source))
PrintTextAbovePrivate(me, "Please take that off, first!", ev.source);
else
if (Distance(me, this) < 3)
wear_item( this);
else
PrintTextAbovePrivate(me, "That is too far away.", ev.source);
endif
endif
elseif(((text[firstname] and text["strip"]) or (text["vendor"] and text["strip"])) && (who.serial == master))
TurnToward( who );
PrintTextAbovePrivate(me, "Ooh, I think I feel a draft!", who);
strip_items(who);
elseif((text[firstname] and text["help"]) or (text["vendor"] and text["help"]))
TurnToward( who );
PrintTextAbovePrivate(me, "I will obey the following orders:", who);
sleep(1);
PrintTextAbovePrivate(me, "dismiss, sell, contact, collect,", who);
sleep(2);
PrintTextAbovePrivate(me, "wear, strip, status and purchase", who);
endif
SYSEVENT_ITEM_GIVEN: if(who.serial == master)
SetObjProperty(ev.container, "Hold", 1);
stockitem(ev);
EraseObjProperty(ev.container, "Hold");
else
buyitem(who, ev.item);
endif
endcase
sleep(1);
endif
if(GetObjProperty(me,"deadbeat"))
Fireme();
endif
endwhile
endprogram
function clearance(who, items)
foreach trg in items
trg.name := GetObjProperty(trg,"OldName");
EraseObjProperty(trg, "OldName");
EraseObjProperty(trg, "Vendored");
EraseObjProperty(trg, "price");
EraseObjProperty(trg, "Owner");
EraseObjProperty(trg, "Master");
if(trg.isA(POLCLASS_CONTAINER))
SetObjProperty(trg, "Owner", who.serial);
endif
endforeach
endfunction
function statuscheck(who);
var gold := CInt(GetObjProperty(me, "g"));
var rsrv := CInt(GetObjProperty(me, "r"));
var fees := 0;
var mypay := 50;
foreach item in inv_fs
fees := fees + GetObjProperty(item,"price");
endforeach
mypay := mypay + Cint(fees / 100);
var gamedays := (gold + rsrv) / mypay;
var realdays := gamedays / 8;
PrintTextAbovePrivate(me, "I am holding " + gold + " gold coins for you.", who);
sleep(1);
PrintTextAbovePrivate(me, "and am holding " + rsrv + " gold coins for future wages.", who);
sleep(1);
if(realdays == 1)
PrintTextAbovePrivate(me, "I have enough gold to continue working for " + gamedays + " day. [1 real world day]", who);
else
PrintTextAbovePrivate(me, "I have enough gold to continue working for " + gamedays + " days. [" + realdays + " real world days]", who);
endif
endfunction
function process_sale(who);
var gold := GetObjProperty(me,"g");
if(Distance(me, who) > 3)
PrintTextAbovePrivate(me, "You must come closer if you wish to purchase something.", who);
return;
endif
PrintTextAbovePrivate(me, "What do you wish to purchase?", who);
var trg := Target(who);
if(!trg)
SendSysMessage(who,"cancelled");
return;
endif
var ok := 0;
foreach item in EnumerateItemsInContainer(inv_fs)
if(trg == item)
ok := 1;
break;
endif
endforeach
if(ok == 0)
PrintTextAbovePrivate(me, "You cannot purchase that", who);
return;
elseif(ok == 1)
var bankbox := FindBankBox(who);
var price := CInt(GetObjProperty(trg, "price"));
if((!price) || (price == error))
PrintTextAbovePrivate(me, "Im sorry, but that is not for sale.", who);
return;
endif
var holder := {};
set_critical(1);
if(GetPayment(who, price))
trg.movable:=1;
if(MoveItemToContainer(trg, who.backpack))
PrintTextAbovePrivate(me,"I have withdrawn " + price + " gold from your backpack.", who);
SetObjProperty(me,"g", (price + gold));
holder.append(trg);
if(trg.isA(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(trg)
holder.append(thing);
endforeach
endif
clearance(who, holder);
else
PrintTextAbovePrivate(me,"You do not have enough room for that in your backpack", who);
GiveRefund(who, price);
endif
else
var contents := EnumerateItemsInContainer(bankbox);
var amt := 0;
foreach item in contents
if((item.objtype == 0xeed) && (item.amount >= price))
amt := item;
break;
endif
endforeach
if(amt != 0)
if(SubtractAmount(amt, price))
if(MoveItemToContainer(trg, who.backpack))
PrintTextAbovePrivate(me,"I have withdrawn " + price + " gold from your bank account.", who);
SetObjProperty(me,"g", (price + gold));
holder.append(trg);
if(trg.isA(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(trg)
holder.append(thing);
endforeach
endif
clearance(who, holder);
else
PrintTextAbovePrivate(me,"You do not have enough room for that in your backpack", who);
AddAmount(amt, price);
endif
endif
else
PrintTextAbovePrivate(me,"You cannot afford this item.", who);
endif
endif
set_critical(0);
endif
endfunction
function stockitem(tev)
if((tev.item.objtype == UOBJ_GOLD_COIN) and (!tev.container))
TakeGold(tev);
return;
endif
var tname;
var item := tev.item;
SetObjProperty(item, "OldName", item.name);
PrintTextAbovePrivate(me, "How much shall I charge for this item? ", tev.source);
var cost := CInt(RequestInput(tev.source, item, ""));
if(cost < 0)
PrintTextAbovePrivate(me, "You cannot sell items for values below zero", tev.source);
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
elseif(cost > 60000)
PrintTextAbovePrivate(me, "You cannot price items for more than 60000 gold.", tev.source);
if(item.isa(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(item)
thing.name := GetObjProperty(thing,"OldName");
EraseObjProperty(thing, "OldName");
EraseObjProperty(thing, "Vendored");
EraseObjProperty(thing, "price");
thing.movable := 1;
endforeach
endif
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
elseif(cost == 0)
if(item.isa(POLCLASS_CONTAINER))
if((item.objtype == 0x1940) || (item.objtype == 0xefa) || (item.objtype == 0x6100))
PrintTextAbovePrivate(me, "You cannot sell that item for 0 gold.", tev.source);
if(item.isa(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(item)
thing.name := GetObjProperty(thing,"OldName");
EraseObjProperty(thing, "OldName");
EraseObjProperty(thing, "Vendored");
EraseObjProperty(thing, "price");
thing.movable := 1;
endforeach
endif
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
else
var items := 0;
foreach thing in EnumerateItemsInContainer(item)
items := 1;
break;
endforeach
if(items == 1)
PrintTextAbovePrivate(me, "Well, just keep it, then", tev.source);
if(item.isa(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(item)
thing.name := GetObjProperty(thing,"OldName");
EraseObjProperty(thing, "OldName");
EraseObjProperty(thing, "Vendored");
EraseObjProperty(thing, "price");
thing.movable := 1;
endforeach
endif
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
endif
PrintTextAbovePrivate(me, "How shall I advertise this item?", tev.source);
tname := RequestInput(tev.source, item, "");
SetObjProperty(item, "price", "Not For Sale");
cost := "Not For Sale";
endif
else
PrintTextAbovePrivate(me, "Well, just keep it, then", tev.source);
if(item.isa(POLCLASS_CONTAINER))
foreach thing in EnumerateItemsInContainer(item)
thing.name := GetObjProperty(thing,"OldName");
EraseObjProperty(thing, "OldName");
EraseObjProperty(thing, "Vendored");
EraseObjProperty(thing, "price");
thing.movable := 1;
endforeach
endif
EraseObjProperty(item, "Master");
EraseObjProperty(item, "price");
EraseObjProperty(item, "OldName");
EraseObjProperty(item, "Vendored");
item.movable := 1;
MoveItemToContainer(item, tev.source.backpack);
return;
endif
endif
if(item.isa(POLCLASS_CONTAINER))
var theoldname;
foreach thing in EnumerateItemsInContainer(item)
theoldname := thing.desc;
if(!item.desc)
theoldname := "";
endif
SetName(thing, thing.desc + " [Cost: Not For Sale]");
SetObjProperty(thing, "OldName", theoldname);
SetObjProperty(thing, "Vendored", me.serial);
SetObjProperty(thing, "price", "Not For Sale");
thing.movable := 1;
endforeach
SetObjProperty(item, "Master", master);
item.movable := 1;
endif
var oldname := item.desc;
if(!item.desc)
oldname := "";
endif
SetObjProperty(item, "OldName", oldname);
SetObjProperty(item, "price", CInt(cost));
SetObjProperty(item, "Vendored", me.serial);
if(tname)
SetName(item, tname + " [Cost: " + cost + " ]");
else
SetName(item, item.desc + " [Cost: " + cost + " ]");
endif
if(!tev.vendor)
MoveItemToContainer(item, inv_fs);
endif
if(cost == "Not For Sale")
PrintTextAbovePrivate(me, "I'll just hang on to that for ya.", tev.source);
else
PrintTextAbovePrivate(me, "I will sell that for " + cost + " gold.", tev.source);
endif
endfunction
function cashout(person)
var mygold := CInt(GetObjProperty(me, "g"));
var payment := 0;
var rsrv := GetObjProperty(me,"r");
var pbank := FindBankBox(person);
if(mygold > 0)
while(mygold > 60000)
CreateItemInContainer(pbank, UOBJ_GOLD_COIN, 60000);
payment := payment + 60000;
mygold := mygold - 60000;
endwhile
payment := payment + mygold;
PrintTextAbovePrivate(me, "Ive placed " + payment + " gold coins in your bank box.", person);
CreateItemInContainer(pbank, UOBJ_GOLD_COIN, mygold);
SetObjProperty(me, "g", 0);
else
PrintTextAbovePrivate(me, "I am not holding any gold for you.", person);
endif
if(rsrv)
PrintTextAbovePrivate(me, "You have left me " + rsrv + " reserve gold coins to use towards my future wages.", person);
else
PrintTextAbovePrivate(me, "but you have left me nothing towards my future wages.", person);
endif
endfunction
function recontact(who)
var cnt := SendTextEntryGump( who, "How shall I tell people to contact you? ", TE_CANCEL_DISABLE, TE_STYLE_NORMAL, 50);
return cnt;
endfunction
function wear_item(item)
foreach thing in ListEquippedItems(me)
MoveItemToContainer(thing, inv_pb);
endforeach
EquipItem(me, item);
foreach thingie in EnumerateItemsInContainer(inv_pb)
EquipItem(me, thingie);
endforeach
foreach thingie in EnumerateItemsInContainer(inv_pb)
MoveItemToLocation(thingie, me.x, me.y, me.z, MOVEITEM_FORCELOCATION );
endforeach
endfunction
function strip_items(mmaster)
foreach thing in ListEquippedItems(me)
if ((thing.objtype < STARTHAIR) || (thing.objtype > ENDHAIR))
MoveItemToContainer(thing, inv_pb);
endif
endforeach
foreach thing in EnumerateItemsInContainer(inv_fs)
if (thing.container.serial == inv_fs.serial)
MoveItemToContainer(thing, inv_pb);
endif
endforeach
foreach thingie in EnumerateItemsInContainer(inv_pb)
if (thingie.container.serial == inv_pb.serial)
MoveItemToContainer(thingie, mmaster.backpack);
endif
endforeach
endfunction
function Fireme()
var mypack := findmypack(me.serial);
var mygold := CInt(GetObjProperty(me, "g"));
var payment := 0;
if(mygold > 0)
while(mygold > 60000)
CreateItemInContainer(mypack, UOBJ_GOLD_COIN, 60000);
payment := payment + 60000;
mygold := mygold - 60000;
endwhile
CreateItemInContainer(mypack, UOBJ_GOLD_COIN, mygold);
endif
foreach thing in ListRootItemsInContainer(inv_fs)
MoveItemToContainer(thing, mypack);
endforeach
foreach thingy in ListRootItemsInContainer(inv_pb)
MoveItemToContainer(thingy, mypack);
endforeach
RevokePrivilege( me, "invul" );
say("I regret nothing!");
ApplyRawDamage( me, GetHp(me) +3);
endfunction
function addthingstobuy(who)
var buylist := {};
var buyprice := { };
var buyobj := { };
var i;
if (!GetObjProperty(me,"buylist"))
buylist := {};
buyprice := {};
buyobj := { };
else
buylist := GetObjProperty(me,"buylist");
buyprice := GetObjProperty(me,"buyprice");
buyobj := GetObjProperty(me,"buyobj");
endif
PrintTextAbovePrivate(me, "What do you want me to buy?", who);
var what := Target( master );
if ((!what) || (what == error) || (GetStrength(what)) )
PrintTextAbovePrivate(me, "Nevermind", who);
return;
endif
if (what.desc in buylist)
PrintTextAbovePrivate(me, "I will no longer purchase "+what.desc, who);
var newbuylist := { };
var newbuyprice := { };
var newbuyobj := { };
for (i := 1; i<=len(buylist); i:=i+1)
if (buylist[i] != what.desc)
newbuylist[len(newbuylist)+1] := buylist[i];
newbuyprice[len(newbuyprice)+1] := buyprice[i];
newbuyobj[len(newbuyobj)+1] := buyobj[i];
endif
endfor
SetObjProperty(me,"buylist",newbuylist);
SetObjProperty(me,"buyprice",newbuyprice);
SetObjProperty(me,"buyobj",newbuyobj);
return;
endif
if (!what.objtype)
PrintTextAbovePrivate(me, "I can't buy those. What the hell is that, anyway?", who);
return;
endif
buylist[ len(buylist)+1] := what.desc;
buyprice[ len(buyprice)+1] := CInt(SendTextEntryGump( master,"How much shall I pay for this item? ", TE_CANCEL_ENABLE, TE_STYLE_NORMAL));
buyobj[ len(buyobj)+1] := what.objtype;
if (len(buylist)==1)
PrintTextAbovePrivate(me, "I will purchase "+buylist[1], master);
elseif (len(buylist)==2)
PrintTextAbovePrivate(me, "I will purchase "+buylist[1] +" and "+ buylist[2], master);
else
var buying := "I will purchase "+buylist[1];
for (i := 2; i<=len(buylist)-1; i:=i+1)
buying := buying + ", " +buylist[i];
endfor
buying := buying + " and " + buylist[len(buylist)];
PrintTextAbovePrivate(me, buying, master);
endif
SetObjProperty(me,"buylist",buylist);
SetObjProperty(me,"buyprice",buyprice);
SetObjProperty(me,"buyobj",buyobj);
endfunction
function SpoutBuyList(you)
var buylist := {};
var buyprice := {};
var i;
if (!GetObjProperty(me,"buylist"))
PrintTextAbovePrivate(me, "I don't buy anything.", you);
return;
else
buylist := GetObjProperty(me,"buylist");
buyprice := GetObjProperty(me,"buyprice");
endif
for (i := 1; i<=len(buylist); i:=i+1)
PrintTextAbovePrivate(me, "I'll pay "+ buyprice[i] + " for " + buylist[i], you);
sleep(2);
endfor
PrintTextAbovePrivate(me, "Just hand me what you want me to buy.", you);
endfunction
function buyitem(you, it)
var mypack := findmypack(me.serial);
var itsownerserial := CInt(GetObjProperty(it, "ownerserial"));
if (itsownerserial == CInt(master))
PrintTextAbovePrivate(me, "I'll see that this is returned to my employer.", you);
MoveItemToContainer(it,mypack);
NotifyMaster(you.name + " gave me an item of yours.");
return;
endif
var buylist := {};
var buyprice := { };
var buyobj := { };
var i;
if (!GetObjProperty(me,"buylist"))
PrintTextAbovePrivate(me, "I don't buy anything", you);
MoveItemToContainer(it,you.backpack);
return;
else
buylist := GetObjProperty(me,"buylist");
buyprice := GetObjProperty(me,"buyprice");
buyobj := GetObjProperty(me,"buyobj");
endif
if (!(it.objtype in buyobj))
PrintTextAbovePrivate(me, "Ugh, I don't want that.", you);
MoveItemToContainer(it,you.backpack);
return;
endif
var index := 0;
for (i := 1; i<=len(buylist); i:=i+1)
if (it.objtype == buyobj[i])
index := i;
break;
endif
endfor
if (!index)
PrintTextAbovePrivate(me, "Ugh, I don't want that.", you);
MoveItemToContainer(it,you.backpack);
return;
endif
var mygold := CInt(GetObjProperty(me, "g"));
if ( (mygold-250) < (buyprice[index]*it.amount))
PrintTextAbovePrivate(me, "Sorry, I can't afford that right now.", you);
MoveItemToContainer(it,you.backpack);
return;
endif
var itamount := it.amount;
var itdesc := it.desc;
if ( grabitem(it,mypack) )
PrintTextAbovePrivate(me, "Thank you! Here's your " + (buyprice[index]*itamount) + " gold.", you);
CreateItemInContainer(you.backpack, UOBJ_GOLD_COIN, buyprice[index]*itamount );
NotifyMaster(you.name + " just sold me " + itdesc);
else
NotifyMaster("My backpack is full!");
MoveItemToContainer(it,you.backpack);
return;
endif
var theprice := buyprice[index]*itamount;
var mypay := CInt(GetObjProperty(me,"mypay"));
var commission := CInt( 0.05 * theprice);
mygold := mygold - theprice;
mypay := mypay + commission;
if (mygold >= mypay)
mypay := 0;
mygold := mygold - mypay;
else
mypay := mypay - mygold;
mygold := 0;
endif
SetObjProperty(me, "mypay",mypay);
SetObjProperty(me, "g", mygold);
endfunction
function NotifyMaster(themessage)
foreach onlinechr in EnumerateOnlineCharacters()
if (onlinechr.serial == master)
SendSysMessage(onlinechr, me.name + " : " + themessage);
break;
endif
endforeach
endfunction
function TakeGold(ev)
var goldamount := ev.item.amount;
var mygold := CInt(GetObjProperty(me, "r"));
if(goldamount)
mygold := mygold + goldamount;
var totalgold := CInt(GetObjProperty(me,"g")) + mygold;
PrintTextAbovePrivate(me, "I am holding " + totalgold + " gold for you.", ev.source);
endif
SetObjProperty(me, "r", mygold);
DestroyItem(ev.item);
endfunction
function grabitem(it,mypack)
var mystuff := EnumerateItemsInContainer(mypack);
if (it.amount > 1 )
foreach item in mystuff
if (item.objtype == it.objtype)
if (CreateItemInContainer( mypack, it.objtype, it.amount ))
DestroyItem(it);
return 1;
else
return 0;
endif
endif
endforeach
else
foreach item in mystuff
if ((item.objtype == it.objtype) && (item.amount > 1 ))
if ( CreateItemInContainer( mypack, it.objtype, it.amount ) )
DestroyItem(it);
return 1;
else
return 0;
endif
endif
endforeach
endif
if (MoveItemToContainer(it,mypack))
return 1;
else
return 0;
endif
endfunction
function GetPayment(player, price)
var backpack := EnumerateItemsInContainer(player.backpack);
var a := 0;
foreach item in backpack
if ((item.objtype == 0xeed) && (item.amount >= price) )
if(SubtractAmount(item, price))
a := 1;
break;
endif
endif
endforeach
if(a == 1)
return 1;
else
return 0;
endif
endfunction
function Giverefund(who, price)
CreateItemInContainer(who.backpack, 0xeed, price);
endfunction
function find_or_create_in_pack(name, objtype);
var mypack := me.backpack;
var check := 0;
foreach thing in ListRootItemsInContainer(mypack)
if(thing.name == name)
check := thing;
break;
endif
endforeach
if(check == 0)
check := CreateItemInContainer(mypack, objtype, 1);
SetName(check, name);
endif
return check;
endfunctionSo now trace this back into your script. Apparently, its getting to this:
PrintTextAbovePrivate(me,"You do not have enough room for that in your backpack", who);
So now you have to look back at what steps it took to get here... its after an "else" so lets look at the "if" conditions.
if(MoveItemToContainer(trg, who.backpack))
Seems a bit wierd that this is failing you think? So now we need to know what problem POL is possibly having when doing that command. So now you change it to send a message with the error.
replace the one line " if(MoveItemToContainer(trg, who.backpack)) " with the 3 lines I put in code there and see what message its sending you.
PrintTextAbovePrivate(me,"You do not have enough room for that in your backpack", who);
So now you have to look back at what steps it took to get here... its after an "else" so lets look at the "if" conditions.
if(MoveItemToContainer(trg, who.backpack))
Seems a bit wierd that this is failing you think? So now we need to know what problem POL is possibly having when doing that command. So now you change it to send a message with the error.
Code: Select all
var themove := MoveItemToContainer(trg, who.backpack);
SendSysMessage(who, CStr(themove));
If (themove)
Now how do owners put things on and take things off of the vendors? Do they just manage the backpack just as any other container? If so, this is probably an OnRemove problem. The fourth parameter of OnRemove is the "move type"
program OnRemove(who, backpack, item, movetype)
first thing in the script should be
if (movetype == MOVETYPE_COREMOVE)
return 1;
endif
This will allow any CORE move like MoveItemTo*/MoveObjectToLocation to be accepted. If its not even checking if its the core, just the owner, this is the problem.
program OnRemove(who, backpack, item, movetype)
first thing in the script should be
if (movetype == MOVETYPE_COREMOVE)
return 1;
endif
This will allow any CORE move like MoveItemTo*/MoveObjectToLocation to be accepted. If its not even checking if its the core, just the owner, this is the problem.