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
vender script help

 
Post new topic   Reply to topic    PenUltima Online Forum Index -> General Help 096
Display posts from previous:   

Author Message
Poi



Joined: 14 Apr 2006
Posts: 217

PostPosted: Fri Jan 25, 2008 12:41 am    Post subject: vender script help Reply with quote

Im editing the vendor deed script so that you can place on specific tiles and name your vendor whatever, but im having issues..
My script so far:
Code:
use os;
use uo;
include "include/canAccess";
include "include/attributes";
var text :=;
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;

foreach static in (ListStaticsAtLocation(who.x, who.y, who.z, ITEMS_IGNORE_MULTIS, who.realm))
   var value := static.objtype;
   if(static.z == who.z)
      if(value == 0x4F6)
         var sign;
         place := CreateNpcFromTemplate("playervendor", who.x, who.y, who.z);
         if(!place)
            SendSysMessage( who, "Your vendor has not been created");
            return;
         else
            text := RequestInput(who,who.backpack,"What would you like to name your vendor?");
            SendSysMessage(who, "You have successfully created a vendor");
            SetObjProperty(place, "master", who.serial);
            SetObjProperty(place, "mn", who.name);
            SetObjProperty(place, "r", 1500);
            SetName(place, text + " (" + who.name + ")");
            if(!DestroyItem(deed))
               RevokePrivilege(place, "invul");
               SetObjProperty(place, "guardkill", 1);
               ApplyRawDamage(place, (GetHp(place) + 5));
            endif
         exit;
      endif
   endif
endforeach

       var sign;
    place := CreateNpcFromTemplate("playervendor", who.x, who.y, who.z);
    if(!place)
      SendSysMessage( who, "Your vendor has not been created");
      return;
    else
   text := RequestInput(who,who.backpack,"What would you like to name your vendor?");


      SendSysMessage(who, "You have successfully created a vendor");
      SetObjProperty(place, "master", who.serial);
      SetObjProperty(place, "mn", who.name);
      SetObjProperty(place, "r", 1500);
   if (text)
   SetName(place, text + " (" + who.name + ")");
   endif
      if(!DestroyItem(deed))
        RevokePrivilege(place, "invul");
        SetObjProperty(place, "guardkill", 1);
        ApplyRawDamage(place, (GetHp(place) + 5));
      endif


  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
endprogram


Error:

Quote:

C:\pol096\scripts>ecompile -a
EScript Compiler v1.05
Copyright (C) 1994-2007 Eric N. Swanson

Compiling: ../scripts/items/vendorDeed.src
Unhandled reserved word: endforeach
Error compiling statement at C:\pol096\scripts\items\vendorDeed.src, Line 43
Error in IF statement starting at File: C:\pol096\scripts\items\vendorDeed.src,
Line 21
Error compiling statement at C:\pol096\scripts\items\vendorDeed.src, Line 21
Error compiling statement at C:\pol096\scripts\items\vendorDeed.src, Line 19
Error detected in program body.
Error occurred at C:\pol096\scripts\items\vendorDeed.src, Line 43
Execution aborted due to: Error compiling file

C:\pol096\scripts>

No idea what im doin wrong..

Author Message
cucciola3000



Joined: 25 Aug 2006
Posts: 11

PostPosted: Fri Jan 25, 2008 5:49 am    Post subject: Reply with quote

can you try to close if statement whit endif after or before exit; instruction

Code:


else
   text := RequestInput(who,who.backpack,"What would you like to name your vendor?");
   SendSysMessage(who, "You have successfully created a vendor");
   SetObjProperty(place, "master", who.serial);
   SetObjProperty(place, "mn", who.name);
   SetObjProperty(place, "r", 1500);
   SetName(place, text + " (" + who.name + ")");
   if(!DestroyItem(deed))
     RevokePrivilege(place, "invul");
     SetObjProperty(place, "guardkill", 1);
     ApplyRawDamage(place, (GetHp(place) + 5));
   endif
endif
   exit;
 

Author Message
Poi



Joined: 14 Apr 2006
Posts: 217

PostPosted: Fri Jan 25, 2008 9:31 am    Post subject: Reply with quote

cucciola3000 wrote:
can you try to close if statement whit endif after or before exit; instruction

Code:


else
   text := RequestInput(who,who.backpack,"What would you like to name your vendor?");
   SendSysMessage(who, "You have successfully created a vendor");
   SetObjProperty(place, "master", who.serial);
   SetObjProperty(place, "mn", who.name);
   SetObjProperty(place, "r", 1500);
   SetName(place, text + " (" + who.name + ")");
   if(!DestroyItem(deed))
     RevokePrivilege(place, "invul");
     SetObjProperty(place, "guardkill", 1);
     ApplyRawDamage(place, (GetHp(place) + 5));
   endif
endif
   exit;
 



Now it says
Quote:

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\pol096\scripts>ecompile -a
EScript Compiler v1.05
Copyright (C) 1994-2007 Eric N. Swanson

Compiling: ../scripts/items/vendorDeed.src
Expected Unknown Token: (281,8) before endprogram
Error compiling statement at C:\pol096\scripts\items\vendorDeed.src, Line 48
Error detected in program body.
Error occurred at C:\pol096\scripts\items\vendorDeed.src, Line 104
Execution aborted due to: Error compiling file

C:\pol096\scripts>


Author Message
MontuZ
Distro Developer


Joined: 10 Feb 2006
Posts: 293
Location: Myrtle Beach, South Carolina

PostPosted: Fri Jan 25, 2008 3:09 pm    Post subject: Reply with quote

This should work....

Code:

use os;
use uo;

include "include/attributes";

program MakeVendor(mobile, deed)

   EraseObjProperty(mobile, "IsMeditating");
   EraseObjProperty(mobile, "HealTimer");

   if ( mobile.Backpack != deed.Container )
      SendSysMessage(mobile, "Aborted. That item must be in your backpack.");
      return 0;
   endif

   if ( !ReserveItem(deed) )
      SendSysMessage(mobile, "Aborted. That item is already being used.");
      return 0;
   endif

   // code here to check to see if it's okay to create the
   // player vendor here. just return 0 if it's not okay.


   var player_vendor := CreateNpcFromTemplate("playervendor", mobile.x, mobile.y, mobile.z);

   if ( !player_vendor )
      SendSysMessage(mobile, "Unable to place vendor in that location.");
      return 0;
   endif

   var new_name := RequestInput(mobile, mobile.Backpack, "What would you like to name your vendor?");

   if ( !new_name )
      SendSysMessage(mobile, "Aborted.");
      KillMobile(player_vendor);
      return 0;
   endif

   if ( !DestroyItem(deed) )
      SendSysMessage(mobile, "Unable to create vendor.");
      KillMobile(player_vendor);
      return 0;
   else
      SendSysMessage(mobile, "You successfully placed your vendor.");
      SetObjProperty(player_vendor, "master", mobile.Serial);
      SetObjProperty(player_vendor, "mn", mobile.Name);
      SetObjProperty(player_vendor, "r", 1500);
      SetName(player_vendor, (new_name)+" (" + mobile.Name + ")");
      return 1;
   endif

endprogram

function KillMobile(mobile)

   RevokePrivilege(mobile, "invul");
   SetObjProperty(mobile, "guardkill", 1);
   ApplyRawDamage(mobile, (GetHp(mobile) + 5));
   return 1;

endfunction


future reference, this should be posted in Scripting Help forum along with core and scriptset(such as 095/096 distro) in the post. Very Happy

Author Message
Poi



Joined: 14 Apr 2006
Posts: 217

PostPosted: Fri Jan 25, 2008 6:05 pm    Post subject: Reply with quote

MontuZ wrote:
This should work....

Code:

use os;
use uo;

include "include/attributes";

program MakeVendor(mobile, deed)

   EraseObjProperty(mobile, "IsMeditating");
   EraseObjProperty(mobile, "HealTimer");

   if ( mobile.Backpack != deed.Container )
      SendSysMessage(mobile, "Aborted. That item must be in your backpack.");
      return 0;
   endif

   if ( !ReserveItem(deed) )
      SendSysMessage(mobile, "Aborted. That item is already being used.");
      return 0;
   endif

   // code here to check to see if it's okay to create the
   // player vendor here. just return 0 if it's not okay.


   var player_vendor := CreateNpcFromTemplate("playervendor", mobile.x, mobile.y, mobile.z);

   if ( !player_vendor )
      SendSysMessage(mobile, "Unable to place vendor in that location.");
      return 0;
   endif

   var new_name := RequestInput(mobile, mobile.Backpack, "What would you like to name your vendor?");

   if ( !new_name )
      SendSysMessage(mobile, "Aborted.");
      KillMobile(player_vendor);
      return 0;
   endif

   if ( !DestroyItem(deed) )
      SendSysMessage(mobile, "Unable to create vendor.");
      KillMobile(player_vendor);
      return 0;
   else
      SendSysMessage(mobile, "You successfully placed your vendor.");
      SetObjProperty(player_vendor, "master", mobile.Serial);
      SetObjProperty(player_vendor, "mn", mobile.Name);
      SetObjProperty(player_vendor, "r", 1500);
      SetName(player_vendor, (new_name)+" (" + mobile.Name + ")");
      return 1;
   endif

endprogram

function KillMobile(mobile)

   RevokePrivilege(mobile, "invul");
   SetObjProperty(mobile, "guardkill", 1);
   ApplyRawDamage(mobile, (GetHp(mobile) + 5));
   return 1;

endfunction


future reference, this should be posted in Scripting Help forum along with core and scriptset(such as 095/096 distro) in the post. Very Happy



Sorry about it being in the wrong place but heres my code:
Code:
use os;
use uo;

include "include/attributes";

program MakeVendor(mobile, deed)

   EraseObjProperty(mobile, "IsMeditating");
   EraseObjProperty(mobile, "HealTimer");

   if ( mobile.Backpack != deed.Container )
      SendSysMessage(mobile, "Aborted. That item must be in your backpack.");
      return 0;
   endif

   if ( !ReserveItem(deed) )
      SendSysMessage(mobile, "Aborted. That item is already being used.");
      return 0;
   endif


foreach static in ListStaticsAtLocation(mobile.x, mobile.y, mobile.z, ITEMS_IGNORE_MULTIS, mobile.realm)
   var value := static.objtype;
   if(static.z == mobile.z)
      if(value != 0x4F6)
      return 0;
      endif
   endif
endforeach

   // code here to check to see if it's okay to create the
   // player vendor here. just return 0 if it's not okay.


   var player_vendor := CreateNpcFromTemplate("playervendor", mobile.x, mobile.y, mobile.z);

   if ( !player_vendor )
      SendSysMessage(mobile, "Unable to place vendor in that location.");
      return 0;
   endif

   var new_name := RequestInput(mobile, mobile.Backpack, "What would you like to name your vendor?");

   if ( !new_name )
      SendSysMessage(mobile, "Aborted.");
      KillMobile(player_vendor);
      return 0;
   endif

   if ( !DestroyItem(deed) )
      SendSysMessage(mobile, "Unable to create vendor.");
      KillMobile(player_vendor);
      return 0;
   else
      SetName(player_vendor, (new_name)+" (" + mobile.Name + ")");
      SendSysMessage(mobile, "You successfully placed your vendor.");
      SetObjProperty(player_vendor, "master", mobile.Serial);
      SetObjProperty(player_vendor, "mn", mobile.Name);
      SetObjProperty(player_vendor, "r", 1500);
      return 1;
   endif

endprogram

function KillMobile(mobile)

   RevokePrivilege(mobile, "invul");
   SetObjProperty(mobile, "guardkill", 1);
   ApplyRawDamage(mobile, (GetHp(mobile) + 5));
   return 1;

endfunction


And now they can place them anywhere

Author Message
MontuZ
Distro Developer


Joined: 10 Feb 2006
Posts: 293
Location: Myrtle Beach, South Carolina

PostPosted: Sat Jan 26, 2008 6:35 am    Post subject: Reply with quote

See what I did with your location check? Put it into a function, just return 0 if it's not a good location, return 1 if it is.

Code:

use os;
use uo;

include "include/attributes";

program MakeVendor(mobile, deed)

   EraseObjProperty(mobile, "IsMeditating");
   EraseObjProperty(mobile, "HealTimer");

   if ( mobile.Backpack != deed.Container )
      SendSysMessage(mobile, "Aborted. That item must be in your backpack.");
      return 0;
   endif

   if ( !ReserveItem(deed) )
      SendSysMessage(mobile, "Aborted. That item is already being used.");
      return 0;
   endif


   if ( !CanPlace(mobile) )
      SendSysMessage(mobile, "You cannot place a vendor here.");
      return 0;
   endif

   var player_vendor := CreateNpcFromTemplate("playervendor", mobile.x, mobile.y, mobile.z);

   if ( !player_vendor )
      SendSysMessage(mobile, "Unable to place vendor in that location.");
      return 0;
   endif

   var new_name := RequestInput(mobile, mobile.Backpack, "What would you like to name your vendor?");

   if ( !new_name )
      SendSysMessage(mobile, "Aborted.");
      KillMobile(player_vendor);
      return 0;
   endif

   if ( !DestroyItem(deed) )
      SendSysMessage(mobile, "Unable to create vendor.");
      KillMobile(player_vendor);
      return 0;
   else
      SetName(player_vendor, (new_name)+" (" + mobile.Name + ")");
      SendSysMessage(mobile, "You successfully placed your vendor.");
      SetObjProperty(player_vendor, "master", mobile.Serial);
      SetObjProperty(player_vendor, "mn", mobile.Name);
      SetObjProperty(player_vendor, "r", 1500);
      return 1;
   endif

endprogram

function CanPlace(mobile)

   foreach static in ListStaticsAtLocation(mobile.x, mobile.y, mobile.z, ITEMS_IGNORE_MULTIS, mobile.realm)
      if ( static.z == mobile.z )
         if( static.Objtype == 0x4F6 )
            return 1;
         endif
      endif
   endforeach

   return 0;

endfunction

function KillMobile(mobile)

   RevokePrivilege(mobile, "invul");
   SetObjProperty(mobile, "guardkill", 1);
   ApplyRawDamage(mobile, (GetHp(mobile) + 5));
   return 1;

endfunction

Author Message
Poi



Joined: 14 Apr 2006
Posts: 217

PostPosted: Wed Jan 30, 2008 9:45 am    Post subject: Reply with quote

Alright, but now my problem is the part that is suppose to determine the tile i'm standing on does not work properly, any ideas?

Author Message
MontuZ
Distro Developer


Joined: 10 Feb 2006
Posts: 293
Location: Myrtle Beach, South Carolina

PostPosted: Wed Jan 30, 2008 6:39 pm    Post subject: Reply with quote

The tile you want them to be standing, will it be static, maptile or just a regular world item that can be .created?

Post new topic   Reply to topic    PenUltima Online Forum Index -> General Help 096 All times are GMT - 4 Hours
Page 1 of 1

 




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