PenUltima Online Forum Index Official Core: 096.7
Official Core: 097 2008-02-26
Donate towards the POL web hosting bill!
 POL Home   FAQ   Search    Memberlist   Usergroups    Register    Profile   Log in to check your private messages   Log in
Vendor placing..
Goto page 1, 2  Next
 
Post new topic   Reply to topic    PenUltima Online Forum Index -> General Help (095)
Display posts from previous:   

Author Message
Poi



Joined: 14 Apr 2006
Posts: 240

PostPosted: Sat May 06, 2006 10:05 am    Post subject: Vendor placing.. Reply with quote

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.

Author Message
Tritan



Joined: 04 Feb 2006
Posts: 136
Location: Illinois, USA

PostPosted: Sat May 06, 2006 10:49 am    Post subject: Reply with quote

Yes that should work like you want.

Author Message
Poi



Joined: 14 Apr 2006
Posts: 240

PostPosted: Sat May 06, 2006 11:11 am    Post subject: Reply with quote

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
Tritan



Joined: 04 Feb 2006
Posts: 136
Location: Illinois, USA

PostPosted: Sat May 06, 2006 2:22 pm    Post subject: Reply with quote

What script set are you using? This looks like the sanctuary scripts.

Now that I see your entire script I can see where you put this and what is causing the problem.

Do you just want to be able to place your vendors in set up areas only or anyplace?

Author Message
Poi



Joined: 14 Apr 2006
Posts: 240

PostPosted: Sat May 06, 2006 2:24 pm    Post subject: Reply with quote

Im using 095, service pack 2... and i justw ant them to be able to place in a house or those tiles

Author Message
Tritan



Joined: 04 Feb 2006
Posts: 136
Location: Illinois, USA

PostPosted: Sat May 06, 2006 2:31 pm    Post subject: Reply with quote

You are calling out the tile variable twice to start with. Just call it out once with the objtype you want.

Since you only want vendors placed on this one tile type just do a check for that tile. I set up regions myself for vendors to go in. It made things a little easier overall.

Author Message
Poi



Joined: 14 Apr 2006
Posts: 240

PostPosted: Sat May 06, 2006 2:37 pm    Post subject: Reply with quote

Well everyone here should know me be now.. im not smart enough to do a check for it.. and actually a region would work, but i have no idea how to make one. Although i would prefer a tile

Author Message
Poi



Joined: 14 Apr 2006
Posts: 240

PostPosted: Sat May 06, 2006 2:49 pm    Post subject: Reply with quote

hey, couldnt i "trick" it into thinking that a tile is a sign by doing this
Original:
if(thing.objtype == 0xbd2)
sign := thing;
break;
endif

Modified:
if(thing.objtype == 0xbd2 or 0xecb9)
sign := thing;
break;
endif

nope.. doesnt work..

Author Message
Bytehawk



Joined: 03 Feb 2006
Posts: 56
Location: Germany, Franconia

PostPosted: Mon May 08, 2006 4:25 am    Post subject: Reply with quote

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

PostPosted: Tue May 09, 2006 5:41 pm    Post subject: Reply with quote

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

PostPosted: Wed May 10, 2006 1:25 am    Post subject: Reply with quote

yes but its inside the IF.

Code:

  if(who.multi.serial)
    var multi := who.multi;
    var sign := 0xdb2;
    ...
  elseif (!sign && !(ListItemsNearLocationOfType (who.x, who.y, who.z, RANGE, 0xecb9).size () > 0))


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.

Author Message
Poi



Joined: 14 Apr 2006
Posts: 240

PostPosted: Thu May 11, 2006 5:56 pm    Post subject: Reply with quote

Ok you know what, forget allt hat i have bad luck it will NEVER work, how do i let a "region" or an area be placable?

Author Message
CWO



Joined: 04 Feb 2006
Posts: 698
Location: Chicago, IL USA

PostPosted: Fri May 12, 2006 12:22 am    Post subject: Reply with quote

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

PostPosted: Fri May 12, 2006 7:55 am    Post subject: Reply with quote

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).

Author Message
Poi



Joined: 14 Apr 2006
Posts: 240

PostPosted: Fri May 12, 2006 9:24 am    Post subject: Reply with quote

Its a tile, but forget that, i just wnat a region please.. or if not then i guess houses will do..

Post new topic   Reply to topic    PenUltima Online Forum Index -> General Help (095) All times are GMT - 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 




Powered by phpBB © 2001, 2005 phpBB Group :: Theme & Graphics by GHS & Scott E. Royalty