 |
 |
 |
 |
|
 |
 |
|
 |
 |
| Author |
Message |
Poi
Joined: 14 Apr 2006 Posts: 240
|
Posted: Sat May 06, 2006 11:11 am Post subject: |
|
|
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: | 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
endprogram |
|
|
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
 |
 |
|
 |
 |
|
 |
 |
| Author |
Message |
Bytehawk
Joined: 03 Feb 2006 Posts: 56 Location: Germany, Franconia
|
Posted: Mon May 08, 2006 4:25 am Post subject: |
|
|
If 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.
| Code: | 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;
endif |
|
|
 |
|
|
 |
 |
| Author |
Message |
Poi
Joined: 14 Apr 2006 Posts: 240
|
Posted: Tue May 09, 2006 5:41 pm Post subject: |
|
|
EScript 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.
| Code: | 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
endprogram |
|
|
 |
|
|
 |
 |
|
 |
 |
| Author |
Message |
CWO
Joined: 04 Feb 2006 Posts: 698 Location: Chicago, IL USA
|
Posted: Fri May 12, 2006 12:22 am Post subject: |
|
|
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...
| Code: |
elseif (!sign && !(ListItemsNearLocationOfType (who.x, who.y, who.z, RANGE, 0xecb9).size () > 0))
SendSysMessage(who, "You cannot place a vendor here.");
return;
|
change that to this...
| Code: |
if (!sign && !(ListItemsNearLocationOfType (who.x, who.y, who.z, RANGE, 0xecb9).size () > 0))
SendSysMessage(who, "You cannot place a vendor here.");
return;
endif
|
|
|
 |
|
|
 |
 |
| Author |
Message |
Pierce
Joined: 02 Feb 2006 Posts: 259
|
Posted: Fri May 12, 2006 7:55 am Post subject: |
|
|
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!!):
| Code: |
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: |
if(thing.objtype in signs)
sign := thing;
broadcast("Sign found. ObjType is: " + sign.objtype);
break;
endif
|
If it is a live server you better do it this way:
| Code: |
if(thing.objtype in signs)
sign := thing;
if(who.cmdlevel)
SendSysMessage(who, "Sign found. ObjType is: " + sign.objtype);
endif
break;
endif
|
You only need to recompile the script an unload it (if it is unloadable). |
|
 |
|
|
 |
 |
|