Vendor placing..
Vendor placing..
Hey in vendordeed.scr i found this line:
if(!sign)
SendSysMessage(who, "You cannot place a vendor here.");
return;
And wondered if i changed it to this or somehting like this if it would work:
var tile := 0x0000
if(!sign or !tile)
SendSysMessage(who, "You cannot place a vendor here.");
return;
So that i could place on those tiles also.
if(!sign)
SendSysMessage(who, "You cannot place a vendor here.");
return;
And wondered if i changed it to this or somehting like this if it would work:
var tile := 0x0000
if(!sign or !tile)
SendSysMessage(who, "You cannot place a vendor here.");
return;
So that i could place on those tiles also.
Is somethign wrong wiht this because its sitl giving me "You can't place your vendor here" Yes i have the correct obj types
Code: Select all
use os;
use uo;
include "include/canAccess";
include "include/attributes";
const SEARCH_RANGE := 10;
program makevendor(who, deed)
EraseObjProperty(who, "IsMeditating");
EraseObjProperty(who, "HealTimer");
if(!can_access(who, deed))
return;
endif
if(!ReserveItem(deed))
return;
endif
var place;
if(who.multi.serial)
var multi := who.multi;
var sign;
foreach thing in (multi.components)
if(thing.objtype == 0xbd2)
sign := thing;
var tile := 0xecb9;
break;
endif
endforeach
var tile := 0xecb9;
if(!sign or !tile)
SendSysMessage(who, "You cannot place a vendor here.");
return;
endif
if(!GetObjProperty(sign, "Public"))
SendSysMessage(who, "You can only place vendors in public houses.");
return;
endif
place := CreateNpcFromTemplate("playervendor", who.x, who.y, who.z);
if(!place)
SendSysMessage( who, "Your vendor has not been created");
return;
else
SendSysMessage(who, "You have successfully created a vendor");
SetObjProperty(place, "master", who.serial);
SetObjProperty(place, "mn", who.name);
SetObjProperty(place, "r", 1500);
if(!DestroyItem(deed))
RevokePrivilege(place, "invul");
SetObjProperty(place, "guardkill", 1);
ApplyRawDamage(place, (GetHp(place) + 5));
endif
endif
else
SendSysMessage( who, "You cannot place your vendor here");
return;
endif
endprogramIf I understand it right, you want to place vendors in houses that haven't got signs? Then this may help. It checks for a housesign or an object of type 0xecb9 within RANGE tiles. Player has to be in a multi tho.
To let vendors be placed anywhere when there's an object of type 0xecb9 near, just put in the ListItemsNearLocationOfType statement as an elseif condition.
To let vendors be placed anywhere when there's an object of type 0xecb9 near, just put in the ListItemsNearLocationOfType statement as an elseif condition.
Code: Select all
const RANGE:= 5;
program makevendor(who, deed)
[...]
if (who.multi.serial)
[...]
if (!sign && !(ListItemsNearLocationOfType (who.x, who.y, who.z, RANGE, 0xecb9).size () > 0))
SendSysMessage (who, "You cannot place a vendor here.");
return 0;
endif
[...]
else
SendSysMessage (who, "You cannot place your vendor here");
return 0;
endifEScript Compiler v1.03
Copyright (C) 1994-2003 Eric N. Swanson
Compiling: E:/pol/scripts/items/vendorDeed.src
Variable sign has not been declared on line 29.
Error compiling statement at E:\pol\scripts\items\vendorDeed.src, Line 19
Error detected in program body.
Error occurred at E:\pol\scripts\items\vendorDeed.src, Line 29
Execution aborted due to: Error compiling file
E:\pol\scripts>
No im not stupid, sign HAS been declared.
Copyright (C) 1994-2003 Eric N. Swanson
Compiling: E:/pol/scripts/items/vendorDeed.src
Variable sign has not been declared on line 29.
Error compiling statement at E:\pol\scripts\items\vendorDeed.src, Line 19
Error detected in program body.
Error occurred at E:\pol\scripts\items\vendorDeed.src, Line 29
Execution aborted due to: Error compiling file
E:\pol\scripts>
No im not stupid, sign HAS been declared.
Code: Select all
use os;
use uo;
include "include/canAccess";
include "include/attributes";
const SEARCH_RANGE := 10;
const RANGE:= 0;
program makevendor(who, deed)
var tile := 0xecb9;
EraseObjProperty(who, "IsMeditating");
EraseObjProperty(who, "HealTimer");
if(!can_access(who, deed))
return;
endif
if(!ReserveItem(deed))
return;
endif
var place;
if(who.multi.serial)
var multi := who.multi;
var sign := 0xdb2;
foreach thing in (multi.components)
if(thing.objtype == 0xbd2)
sign := thing;
break;
endif
endforeach
elseif (!sign && !(ListItemsNearLocationOfType (who.x, who.y, who.z, RANGE, 0xecb9).size () > 0))
SendSysMessage(who, "You cannot place a vendor here.");
return;
if(!GetObjProperty(sign, "Public"))
SendSysMessage(who, "You can only place vendors in public houses.");
return;
endif
place := CreateNpcFromTemplate("playervendor", who.x, who.y, who.z);
if(!place)
SendSysMessage( who, "Your vendor has not been created");
return;
else
SendSysMessage(who, "You have successfully created a vendor");
SetObjProperty(place, "master", who.serial);
SetObjProperty(place, "mn", who.name);
SetObjProperty(place, "r", 1500);
if(!DestroyItem(deed))
RevokePrivilege(place, "invul");
SetObjProperty(place, "guardkill", 1);
ApplyRawDamage(place, (GetHp(place) + 5));
endif
endif
else
SendSysMessage( who, "You cannot place your vendor here");
return;
endif
endprogramyes but its inside the IF.
look at that a little closer. You have to declare it before the IF if you're going to use it in the ELSEIF part.
Code: Select all
if(who.multi.serial)
var multi := who.multi;
var sign := 0xdb2;
...
elseif (!sign && !(ListItemsNearLocationOfType (who.x, who.y, who.z, RANGE, 0xecb9).size () > 0))
Actually, I think I possibly know what you're getting at. I'm a bit tired but its only a couple lines to change so try it...
change that to this...
Code: Select all
elseif (!sign && !(ListItemsNearLocationOfType (who.x, who.y, who.z, RANGE, 0xecb9).size () > 0))
SendSysMessage(who, "You cannot place a vendor here.");
return;
Code: Select all
if (!sign && !(ListItemsNearLocationOfType (who.x, who.y, who.z, RANGE, 0xecb9).size () > 0))
SendSysMessage(who, "You cannot place a vendor here.");
return;
endif
I think first of all you should tell us what 0xecb9 is exactly. Is that a sign or is that simple tile on which vendors could be placed? In both cases we need to now if it is a house component or not.
If i assume it is a sign, your script could look like this (not tested!!):
And perhaps a few tips on how you can find such errors very fast.
If you are doing in on a test server, put in some broadcast giving out variables or whatever so you can see where the problem is, e.g.
If it is a live server you better do it this way:
You only need to recompile the script an unload it (if it is unloadable).
If i assume it is a sign, your script could look like this (not tested!!):
Code: Select all
use os;
use uo;
include "include/canAccess";
include "include/attributes";
program makevendor(who, deed)
EraseObjProperty(who, "IsMeditating");
EraseObjProperty(who, "HealTimer");
if(!can_access(who, deed))
return;
endif
if(!ReserveItem(deed))
return;
endif
var multi,sign;
var signs := {0xbd2,0xecb9};
if(who.multi.serial)
multi := who.multi;
foreach thing in (multi.components)
if(thing.objtype in signs)
sign := thing;
break;
endif
endforeach
else
SendSysMessage(who, "You cannot place a vendor here.");
return;
endif
if(!sign)
SendSysMessage(who, "You cannot place a vendor here.");
return;
endif
if(!GetObjProperty(sign, "Public"))
SendSysMessage(who, "You can only place vendors in public houses.");
return;
endif
var place := CreateNpcFromTemplate("playervendor", who.x, who.y, who.z);
if(!place)
SendSysMessage( who, "Your vendor has not been created");
return;
else
SendSysMessage(who, "You have successfully created a vendor");
SetObjProperty(place, "master", who.serial);
SetObjProperty(place, "mn", who.name);
SetObjProperty(place, "r", 1500);
if(!DestroyItem(deed))
RevokePrivilege(place, "invul");
SetObjProperty(place, "guardkill", 1);
ApplyRawDamage(place, (GetHp(place) + 5));
endif
endif
endprogram
And perhaps a few tips on how you can find such errors very fast.
If you are doing in on a test server, put in some broadcast giving out variables or whatever so you can see where the problem is, e.g.
Code: Select all
if(thing.objtype in signs)
sign := thing;
broadcast("Sign found. ObjType is: " + sign.objtype);
break;
endif
Code: Select all
if(thing.objtype in signs)
sign := thing;
if(who.cmdlevel)
SendSysMessage(who, "Sign found. ObjType is: " + sign.objtype);
endif
break;
endif
Ok, everyone that is trying to help thanks but forget all that because now ill just do i region, please guide me on what to do here is my current script:
And i've got no idea where to start
Code: Select all
use os;
use uo;
include "include/canAccess";
include "include/attributes";
const SEARCH_RANGE := 10;
program makevendor(who, deed)
EraseObjProperty(who, "IsMeditating");
EraseObjProperty(who, "HealTimer");
if(!can_access(who, deed))
return;
endif
if(!ReserveItem(deed))
return;
endif
var place;
if(who.multi.serial)
var multi := who.multi;
var sign;
foreach thing in (multi.components)
if(thing.objtype == 0xbd2)
sign := thing;
break;
endif
endforeach
if(!sign)
SendSysMessage(who, "You cannot place a vendor here.");
return;
endif
if(!GetObjProperty(sign, "Public"))
SendSysMessage(who, "You can only place vendors in public houses.");
return;
endif
place := CreateNpcFromTemplate("playervendor", who.x, who.y, who.z);
if(!place)
SendSysMessage( who, "Your vendor has not been created");
return;
else
SendSysMessage(who, "You have successfully created a vendor");
SetObjProperty(place, "master", who.serial);
SetObjProperty(place, "mn", who.name);
SetObjProperty(place, "r", 1500);
if(!DestroyItem(deed))
RevokePrivilege(place, "invul");
SetObjProperty(place, "guardkill", 1);
ApplyRawDamage(place, (GetHp(place) + 5));
endif
endif
else
SendSysMessage( who, "You cannot place your vendor here");
return;
endif
endprogramAnd i've got no idea where to start
ok, so what you do here is
then declare these variables at the top of your script
var leftx := // The leftmost X (or western border) of your region
var rightx := // The rightmost X (or eastern border)
var topy := // The topmost Y (or northern border)
var bottomy := // The bottommost border (or southern border)
Be aware that the script I put there does no other checking of any kind if you're within the region box unless you're in a house then it will do all house checks. If you want to add extra checks and restrictions for your region, add them after
elseif ((who.x > leftx) && (who.x < rightx) && (who.y > topy) && (who.y < bottomy))
Code: Select all
program makevendor(who, deed)
EraseObjProperty(who, "IsMeditating");
EraseObjProperty(who, "HealTimer");
if(!can_access(who, deed))
return;
endif
if(!ReserveItem(deed))
return;
endif
var place;
if(who.multi.serial)
var multi := who.multi;
var sign;
foreach thing in (multi.components)
if(thing.objtype == 0xbd2)
sign := thing;
break;
endif
endforeach
if(!sign)
SendSysMessage(who, "You cannot place a vendor here.");
return;
endif
if(!GetObjProperty(sign, "Public"))
SendSysMessage(who, "You can only place vendors in public houses.");
return;
endif
CreateVendor(who, deed);
elseif ((who.x > leftx) && (who.x < rightx) && (who.y > topy) && (who.y < bottomy))
CreateVendor(who, deed);
else
SendSysMessage( who, "You cannot place your vendor here");
return;
endif
endprogram
function CreateVendor(who, deed)
place := CreateNpcFromTemplate("playervendor", who.x, who.y, who.z);
if(!place)
SendSysMessage( who, "Your vendor has not been created");
return;
else
SendSysMessage(who, "You have successfully created a vendor");
SetObjProperty(place, "master", who.serial);
SetObjProperty(place, "mn", who.name);
SetObjProperty(place, "r", 1500);
if(!DestroyItem(deed))
RevokePrivilege(place, "invul");
SetObjProperty(place, "guardkill", 1);
ApplyRawDamage(place, (GetHp(place) + 5));
endif
endif
endfunction
then declare these variables at the top of your script
var leftx := // The leftmost X (or western border) of your region
var rightx := // The rightmost X (or eastern border)
var topy := // The topmost Y (or northern border)
var bottomy := // The bottommost border (or southern border)
Be aware that the script I put there does no other checking of any kind if you're within the region box unless you're in a house then it will do all house checks. If you want to add extra checks and restrictions for your region, add them after
elseif ((who.x > leftx) && (who.x < rightx) && (who.y > topy) && (who.y < bottomy))
Thank you, no you didnt solve my problem, you opened a new gateway to how i could place vendors on these tiles 
Simple simple simple..:
For further refrence:
Simple simple simple..:
For further refrence:
use os;
use uo;
include "include/canAccess";
include "include/attributes";
program makevendor(who, deed)
EraseObjProperty(who, "IsMeditating");
EraseObjProperty(who, "HealTimer");
if(!can_access(who, deed))
return;
endif
if(!ReserveItem(deed))
return;
endif
var place;
if(who.multi.serial)
var multi := who.multi;
var sign;
foreach thing in (multi.components)
if(thing.objtype == 0xbd2)
sign := thing;
break;
endif
endforeach
if(!sign)
SendSysMessage(who, "You cannot place a vendor here.");
return;
endif
if(!GetObjProperty(sign, "Public"))
SendSysMessage(who, "You can only place vendors in public houses.");
return;
endif
CreateVendor(who, deed);
elseif (0xecb9)
CreateVendor(who, deed);
else
SendSysMessage( who, "You cannot place your vendor here");
return;
endif
endprogram
function CreateVendor(who, deed)
var place := CreateNpcFromTemplate("playervendor", who.x, who.y, who.z);
if(!place)
SendSysMessage( who, "Your vendor has not been created");
return;
else
SendSysMessage(who, "You have successfully created a vendor");
SetObjProperty(place, "master", who.serial);
SetObjProperty(place, "mn", who.name);
SetObjProperty(place, "r", 1500);
if(!DestroyItem(deed))
RevokePrivilege(place, "invul");
SetObjProperty(place, "guardkill", 1);
ApplyRawDamage(place, (GetHp(place) + 5));
endif
endif
endfunction