Show scripttypes.html syntax highlighted
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Script Types Reference</TITLE>
<META http-equiv=Content-Type content="text/html; charset=windows-1252">
<META content="POL, EScript, documentation" name=keyword>
<META content="Racalac, Rykard" name=Author>
<STYLE type=text/css>BODY {
FONT-WEIGHT: normal; FONT-SIZE: 8pt; COLOR: #000000; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}
TD {
FONT-WEIGHT: normal; FONT-SIZE: 8pt; COLOR: #000000; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}
P {
FONT-WEIGHT: normal; FONT-SIZE: 8pt; COLOR: #000000; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}
</STYLE>
</HEAD>
<BODY bgColor=#f0f0f0>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 14pt; TEXT-ALIGN: left">POL Script Types
</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; TEXT-ALIGN: left">This is a list
of all the different script types used in the POL system. Some only pertain to
specific objects, and/or specifc events, as described. </P>
<HR>
<BR><?xml version="1.0" encoding="UTF-8"?>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; TEXT-ALIGN: left">Last Modified:
6/19/2003<BR></P>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#AIScript>
<TH align=middle colSpan=2>AIScript</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program AIscript()</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>return value ignored</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Normal</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>1</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>When an NPC is created (either new or from world save on
startup)</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in a .src file, in a package or
/scripts/ai</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>In the NPC's npcdesc.cfg entry, the 'Script' property
defines the location of the AI script. This is in package format
':pkgname:scriptname', or if just 'scriptname' in the same package, or
/scripts/ai. Also, setting npc.script allows you to change the
script.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script acts as an NPC's control script, allowing it to
move, fight, and react to events. This script should not exit until the
NPC dies, or the NPC will become 'braindead'. Normally there exists a loop
where events are processed and other actions are performed.</TD></TR>
<TR>
<TD colSpan=2>This is the only script type where NPC.EM functions are
allowed.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>//Not a completely usable AI script, for example, doesn't close the distance to an opponent
// or react to other sysevents.
use uo;
use npc;
use os;
include "include/sysEvent";
var me;
program my_example_aicript()
var me := Self();
var event;
EnableEvents(SYSEVENT_SPEECH,5);
EnableEvents(SYSEVENT_ENGAGED);
while(me)
event := wait_for_event(15);
if(event)
case(event.type)
SYSEVENT_SPEECH: Say( event.source.name + " said: " + event.text );
SYSEVENT_ENGAGED: SetOpponent( event.source );
endcase
endif
Wander();
endwhile
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#NPC"><B>NPC</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Config Files</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="configfiles.html#npcdesc.cfg"><B>npcdesc.cfg</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#AttackHitScript>
<TH align=middle colSpan=2>AttackHitScript</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program attackhitscript(attacker, defender,
weapon, armor, basedamage, rawdamage )</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>attacker</VAR></TD>
<TD>Character Ref of player attacking with weapon</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>defender</VAR></TD>
<TD>Character Ref</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>weapon</VAR></TD>
<TD>Weapon Ref</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>armor</VAR></TD>
<TD>Armor Ref, or 0 if no armor was hit.</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>basedamage</VAR></TD>
<TD>Integer damage amount due to random weapon damage, strength, and
tactics.</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>rawdamage</VAR></TD>
<TD>Integer damage amount due basedamage, minus amount absorbed by
armor.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>return value ignored</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Normal</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>100</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>When a weapon with a hit script defined successfully hits an
opponent. (note not called automatically if Attack syshook is
called)</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in a .src file, in a package or
/scripts/items</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>In the NPC's npcdesc.cfg entry, the 'AttackHitScript'
property defines the location of the NPC's intrinsic weapon hit script.
This is in package format ':pkgname:scriptname', or if just 'scriptname'
in the same package, or /scripts/items.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script acts the same as a HitScript, but it is for an
NPC's "intrinsic weapon" which is a fake weapon for NPCs that attack with
bare fists. See HitScript and npcdesc.cfg.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Weapon"><B>Weapon</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="objref.html#NPC"><B>NPC</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Config Files</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="configfiles.html#npcdesc.cfg"><B>npcdesc.cfg</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Script Types</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="scripttypes.html#HitScript"><B>HitScript</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#AuxServiceScript>
<TH align=middle colSpan=2>AuxServiceScript</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program auxservice(connection)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>connection</VAR></TD>
<TD>Aux Connection Object</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>return value ignored, exiting aux service script closes
connection.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Normal</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>1</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>When a network connection is created on the defined port in
auxsvc.cfg.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in a .src file, in a package.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Define the 'Script' property in auxsvc.cfg.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script allows a scripter to communicate with an
external TCP/IP application, using the normal POL packed string format for
communcation.</TD></TR>
<TR>
<TD colSpan=2>wait_for_event allows packet reads, with ev.type == "recv"
and ev.value the unpacked data.</TD></TR>
<TR>
<TD colSpan=2>connection.transmit(unpacked object) is the interface for
sending data to the external application.</TD></TR>
<TR>
<TD colSpan=2>If you save the service script PID to a global variable,
other scripts may communicate with the external application via your
service script.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>//auxsvc.cfg:
AuxService
{
Port 5009
Script aux1
}
//aux1.src:
use uo;
use os;
program auxtest( connection )
var ev;
print( "aux service is running" );
while (connection)
ev := wait_for_event( 5 );
if (ev)
print(ev.value);
endif
endwhile
print( "aux connection closed" );
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#AuxConnection"><B>AuxConnection</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Config Files</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="configfiles.html#auxsvc.cfg"><B>auxsvc.cfg</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#boat.ecl>
<TH align=middle colSpan=2>boat.ecl</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program boatcontrol(boat)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>boat</VAR></TD>
<TD>Boat Ref</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Return value ignored</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Normal</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>1</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Immediately after the item is created (includes
boot-up).</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in the boat.src file, only in
/scripts/misc</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Always called when a boat is created/started.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script acts as a control script for a boat. Use it for
navigation commands (e.g. the tillerman control script), boat decay,
etc.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
use os;
program my_example_boatscript(boat)
RegisterForSpeechEvents(boat.tillerman, 5);
var who;
while(boat) //exit loop if boat is destroyed
ev := wait_for_event(120);
if(ev)
who := ev.source;
PrintTextAbove(boat.tillerman, who.name + " is a scurvy dog for saying: " + ev.text);
endif
endwhile
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Boat"><B>Boat</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Script Types</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="scripttypes.html#ControlScript"><B>ControlScript</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#CanInsertScript>
<TH align=middle colSpan=2>CanInsertScript</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program caninsertscript(character, container,
movetype, inserttype, adding_item, existing_stack,
amount_to_add)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>character</VAR></TD>
<TD>Character Ref, or uninitialized, see below</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>container</VAR></TD>
<TD>Container Ref</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>movetype</VAR></TD>
<TD>integer</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>inserttype</VAR></TD>
<TD>integer</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>adding_item</VAR></TD>
<TD>Item Ref</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>existing_stack</VAR></TD>
<TD>Item Ref</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>amt_to_add</VAR></TD>
<TD>integer</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>If 1, item is allowed to be inserted into the container,
else it is not inserted.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Run To Completion</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>critical</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>While the item is being moved into (or created in) a
container, by user dragging, script function, or the core.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in a .src file, in a package or
/scripts/control</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>In the item's itemdesc.cfg entry, the 'CanInsertScript'
property defines the location of the can insert script. This is in package
format ':pkgname:scriptname', or if just 'scriptname' in the same package,
or /scripts/control.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script allows control over what items may be inserted
into a container by returning 1 or 0. This script is called fairly often,
and is run critical, so try not to do too many calculations in it.</TD></TR>
<TR>
<TD colSpan=2>IMPORTANT: the first parameter (character) MAY be passed as
an uninitialized object if the item was not moved by character (i.e. by a
script function or the core), so please check it before you use it.</TD></TR>
<TR>
<TD colSpan=2>inserttype will be INSERT_ADD_ITEM if a new item is being
inserted into the container (existing_stack and amt_to_add are uninit), or
INSERT_INCREASE_STACK if an existing item's amount is merely being
increased (note 'adding_item' can be uninit if one of the CreateItem
functions is merely adding to an existing stack, as opposed to a client
action)</TD></TR>
<TR>
<TD colSpan=2>These are the times when canInsert scripts are called:
Client drag/drop, vendor buy: when moving items to the player's backpack,
vendor sell: when putting gold in the player's backpack, secure trade,
when cancelling or confirming a trade, MoveItemToContainer,
CreateItemInContainer, CreateItemInInventory, CreateItemInBackpack.</TD></TR>
<TR>
<TD colSpan=2>You should not destroy the adding_item in the CanInsert
script.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
program my_example_caninsertscript(character, container, item)
if(character != error)
if(character.weight > 400)
return 0;
else
return 1;
endif
else
return 1;
endprogram</PRE></TD></TR>
<TR>
<TD colSpan=2><PRE>UO.EM constants used with the 'movetype' parameter:
const MOVETYPE_PLAYER := 0; // physically moved (dragged) by a player
const MOVETYPE_COREMOVE := 1; // moved by the core (eg, MoveItemToContainer().)
Insert scripts only:
const MOVETYPE_CORECREATE := 2; // created by core (eg, CreateItemInBackpack().)</PRE></TD></TR>
<TR>
<TD colSpan=2><PRE>UO.em constants used with the 'inserttype' parameter:
const INSERT_ADD_ITEM := 1;
const INSERT_INCREASE_STACK := 2;</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Character"><B>Character</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="objref.html#Container"><B>Container</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="objref.html#Item"><B>Item</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Config Files</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="configfiles.html#itemdesc.cfg"><B>itemdesc.cfg</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Script Types</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="scripttypes.html#OnInsertScript"><B>OnInsertScript</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="scripttypes.html#CanRemoveScript"><B>CanRemoveScript</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="scripttypes.html#OnRemoveScript"><B>OnRemoveScript</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#CanRemoveScript>
<TH align=middle colSpan=2>CanRemoveScript</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program canremovescript(character, container,
item, movetype)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>character</VAR></TD>
<TD>Character Ref, or uninitialized, see below</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>container</VAR></TD>
<TD>Container Ref</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>item</VAR></TD>
<TD>Item Ref</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>movetype</VAR></TD>
<TD>Integer</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>If 1, item is allowed to be removed from the container, else
it is not removed.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Run To Completion</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>critical</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>While the item is being moved out of a container, by user
dragging, script function, or the core.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in a .src file, in a package or
/scripts/control</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>In the item's itemdesc.cfg entry, the 'CanRemoveScript'
property defines the location of the can remove script. This is in package
format ':pkgname:scriptname', or if just 'scriptname' in the same package,
or /scripts/control.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script allows control over what items may be removed
from a container by returning 1 or 0. This script is called fairly often,
and is run critical, so try not to do too many calculations in it.</TD></TR>
<TR>
<TD colSpan=2>IMPORTANT: the first parameter (character) MAY be passed as
an uninitialized object if the item was not moved by character (i.e. by a
script function or the core), so please check it before you use it.</TD></TR>
<TR>
<TD colSpan=2>You should not destroy the item in the CanRemove
script.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
program my_example_canremovescript(character, container, item)
var cursed := GetObjPropert(item,"cursed");
if(cursed == 1)
return 0;
else
return 1;
endprogram</PRE></TD></TR>
<TR>
<TD colSpan=2><PRE>UO.EM constants used with the 'movetype' parameter:
const MOVETYPE_PLAYER := 0; // physically moved (dragged) by a player
const MOVETYPE_COREMOVE := 1; // moved by the core (eg, MoveItemToLocation().)</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Character"><B>Character</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="objref.html#Container"><B>Container</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="objref.html#Item"><B>Item</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Config Files</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="configfiles.html#itemdesc.cfg"><B>itemdesc.cfg</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Script Types</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="scripttypes.html#OnInsertScript"><B>OnInsertScript</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="scripttypes.html#CanInsertScript"><B>CanInsertScript</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="scripttypes.html#OnRemoveScript"><B>OnRemoveScript</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#chrdeath.ecl>
<TH align=middle colSpan=2>chrdeath.ecl</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program chrdeath(corpse, ghost)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>corpse</VAR></TD>
<TD>Player corpse ref</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>ghost</VAR></TD>
<TD>Character Ref</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>return value ignored</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Normal</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>1</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>When an Player Character is killed.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in the chrdeath.src file, only in
/scripts/misc (only one should exist in the system)</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script is called for all Players.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script allows side effects to be triggered as a result
of Player death, like unmounting players off their mount, allowing ghosts
to report their murderer, Auto-Resurrect choices, etc.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
program my_example_chrdeath(corpse,ghost)
Broadcast(ghost.name + "'s death cry is heard throughout the realm!");
//useful stuff here...
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Corpse"><B>Corpse</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="objref.html#Character"><B>Character</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Script Types</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="scripttypes.html#death.ecl"><B>death.ecl</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#ConsoleScript>
<TH align=middle colSpan=2>ConsoleScript</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program consolescript(cmd)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>cmd</VAR></TD>
<TD>command string, i.e. 'B'</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>return value ignored</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Normal</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>1</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>When a character is entered into the POL Console, i.e.
'B'.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in a .src file, only in
/scripts/console</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Map a command character to a console script in
/config/console.cfg</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script allows an administrator to activate POL scripts
without needing to log into the game. The scripts could be used to shut
down theserver after a time, or print a online character list,
etc.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>There are four special command script names:
[lock] lock the console
[unlock] unlock the console
[lock/unlock] toggle the lock status of the console
[threadstatus] will display thread status and checkpoints</PRE></TD></TR>
<TR>
<TD colSpan=2><PRE>// Print number of toplevel items in the world.
use uo;
program consolescript( cmd )
print( "System Message: Current # of Toplevel Items - " + polcore().itemcount );
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Config Files</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="configfiles.html#console.cfg"><B>console.cfg</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#ControlScript>
<TH align=middle colSpan=2>ControlScript</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program controlscript(item)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>item</VAR></TD>
<TD>Item Ref</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Return value ignored</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Normal</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>1</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Immediately after the item is created (includes
boot-up).</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in a .src file, in a package or
/scripts/control</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>In the item's itemdesc.cfg entry, the 'ControlScript'
property defines the location of the control script. This is in package
format ':pkgname:scriptname', or if just 'scriptname' in the same package,
or /scripts/control.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script is called when the item is created and stays
attached to the item. Usually control scripts do not exit until the item
is destroyed (note, you must handle this yourself). They generally use a
loop to process events or do some housecleaning after some sleeping, or
wait_for_event.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
use os;
program my_example_controlscript(item)
RegisterForSpeechEvents(item, 5);
var who;
while(item) //exit loop if item is destroyed
ev := wait_for_event(120);
if(ev)
who := ev.source;
PrintTextAbove(item, who.name + " said: " + ev.text);
endif
endwhile
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Item"><B>Item</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Config Files</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="configfiles.html#itemdesc.cfg"><B>itemdesc.cfg</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Script Types</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="scripttypes.html#AIScript"><B>AIScript</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#CreateScript>
<TH align=middle colSpan=2>CreateScript</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program createscript(item)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>item</VAR></TD>
<TD>Item Ref</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>If 0, item is destroyed, else item is added to the
world.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Run To Completion</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>critical</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>While the item is being created (via uo.em create item
functions, or by the core).</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in a .src file, in a package or
/scripts/control</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>In the item's itemdesc.cfg entry, the 'CreateScript'
property defines the location of the create script. This is in package
format ':pkgname:scriptname', or if just 'scriptname' in the same package,
or /scripts/control.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script is called when the item is created. Return 1 to
allow the item to be created, 0 to destroy the item.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
program my_example_createscript(item)
if(item.x >= 500 && item.x <= 600)
print("Item created in illegal location");
return 0;
endif
return 1;
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Item"><B>Item</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Config Files</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="configfiles.html#itemdesc.cfg"><B>itemdesc.cfg</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Script Types</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="scripttypes.html#DestroyScript"><B>DestroyScript</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#dblclickself.ecl>
<TH align=middle colSpan=2>dblclickself.ecl</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program dblclickself(character)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>character</VAR></TD>
<TD>Character ref</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>return value ignored</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Normal</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>100</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>When a player character double clicks on himself or herself.
Not called with the "open paperdoll" client macro.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in dblclickself.src file, only in
/scripts/misc</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>If the compiled file exists it is automatically called on
doubleclick.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script allows an alternate behavior other than the
default 'open paperdoll' behavior. Useful for things like
dismounting.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
include "include/client";
program dblclickself( me )
var mount := GetEquipmentByLayer( me, LAYER_MOUNT );
if (!mount)
OpenPaperdoll( me, me );
return;
endif
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Character"><B>Character</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#death.ecl>
<TH align=middle colSpan=2>death.ecl</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program death(corpse)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>corpse</VAR></TD>
<TD>NPC corpse ref</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>return value ignored</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Normal</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>1</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>When an NPC is killed.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in the death.src file, only in /scripts/misc
(only one should exist in the system)</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script is called for all NPCs.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script allows side effects to be triggered as a result
of NPC death, like unmounting players off their dying mount, playing death
sounds, etc.</TD></TR>
<TR>
<TD colSpan=2>This script is common for all NPCs, and is called for
each.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
program my_example_death(corpse)
PrintTextAbove(corpse,"ARRRRGH");
PlaySoundEffect(SFX_VICTORY); //fake constant
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Corpse"><B>Corpse</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="objref.html#NPC"><B>NPC</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Config Files</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="configfiles.html#npcdesc.cfg"><B>npcdesc.cfg</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Script Types</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="scripttypes.html#chrdeath.ecl"><B>chrdeath.ecl</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#DestroyScript>
<TH align=middle colSpan=2>DestroyScript</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program destroyscript(item)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>item</VAR></TD>
<TD>Item Ref</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>If 1, item is allowed to be destroyed, else it is not
destroyed.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Run To Completion</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>critical</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>While the item is being destroyed (UO.EM::DestroyItem() or
core decay).</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in a .src file, in a package or
/scripts/control</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>In the item's itemdesc.cfg entry, the 'DestroyScript'
property defines the location of the create script. This is in package
format ':pkgname:scriptname', or if just 'scriptname' in the same package,
or /scripts/control.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script is called while the item is being destroyed.
Return 1 to allow the item to be destroy, 0 to not allow
destruction.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
program my_example_destroyscript(item)
var gm_flag := GetObjProperty(item,"GM_FLAG");
if(gm_flag != error)
return 0;
else
return 1;
endif
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Item"><B>Item</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Config Files</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="configfiles.html#itemdesc.cfg"><B>itemdesc.cfg</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#EquipScript>
<TH align=middle colSpan=2>EquipScript</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program equipscript(character, item,
startup)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>character</VAR></TD>
<TD>Character Ref, or uninitialized, see below</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>item</VAR></TD>
<TD>Item Ref</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>startup</VAR></TD>
<TD>Integer 0/1 if item is being equipped due to server
start</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>1 if the item should be equipped, 0 to disallow
equipping.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Run To Completion</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>critical</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>When the item is being equipped on character, either by
client dragging or script function, after the equiptest.ecl check is
passed.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in a .src file, in a package or
/scripts/control</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>In the item's itemdesc.cfg entry, the 'EquipScript' property
defines the location of the equip script. This is in package format
':pkgname:scriptname', or if just 'scriptname' in the same package, or
/scripts/control. Also, setting item.unequipscript allows you to change
the script.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script allows side effects to be triggered as a result
of the item being equipped on a character.</TD></TR>
<TR>
<TD colSpan=2>Also can be used to disallow equipping, by the return
value.</TD></TR>
<TR>
<TD colSpan=2>Doesn't make sense for items that cannot be equipped, like
walls or doors and such.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
const FOR_CLASS := "warrior";
program my_example_equipscript(character, item, startup)
var class := GetObjProperty(character, "class");
if(class != FOR_CLASS)
if(!startup)
SendSysmessage(character,"Your class may not equip that item.");
endif
return 0;
else
return 1;
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Character"><B>Character</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="objref.html#Item"><B>Item</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Config Files</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="configfiles.html#itemdesc.cfg"><B>itemdesc.cfg</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Script Types</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="scripttypes.html#UnEquipScript"><B>UnEquipScript</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="scripttypes.html#equiptest.ecl"><B>equiptest.ecl</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="scripttypes.html#unequiptest.ecl"><B>unequiptest.ecl</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#equiptest.ecl>
<TH align=middle colSpan=2>equiptest.ecl</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program equiptest(character, item,
startup)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>character</VAR></TD>
<TD>Character Ref, or uninitialized, see below</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>item</VAR></TD>
<TD>Item Ref</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>startup</VAR></TD>
<TD>Integer 0/1 if item is being equiped on startup</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>1 if the item can be equipped, 0 to disallow
equipping.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Run To Completion</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>critical</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>When the item is being equipped by character, either by
client dragging or script function.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in the equiptest.src file, in a package or
/scripts/misc (only one should exist in the system)</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script allows side effects to be triggered as a result
of the item being equipped by a character.</TD></TR>
<TR>
<TD colSpan=2>This script is common for all items, and is called for each.
useful for equip checks that are the same for all items, so the code does
not need to be replicated in all EquipScripts.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
program my_example_equiptest(character, item, startup)
var firstletter := lower(character.name[1]);
if(firstletter == "t")
SendSysmessage(character,"Sorry, character name starting with
't' can't equip any items, for some reason.");
return 0;
else
return 1;
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Character"><B>Character</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="objref.html#Item"><B>Item</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Config Files</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="configfiles.html#itemdesc.cfg"><B>itemdesc.cfg</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Script Types</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="scripttypes.html#EquipScript"><B>EquipScript</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="scripttypes.html#UnEquipScript"><B>UnEquipScript</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="scripttypes.html#unequiptest.ecl"><B>unequiptest.ecl</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#ExportedVitalsFunction>
<TH align=middle colSpan=2>ExportedVitalsFunction</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>exported function
vitalsfunc(character)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>character</VAR></TD>
<TD>Character Ref</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Integer return used by core, see below</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Run To Completion</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>critical</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Both exported functions on character create and when a
script calls RecalcVitals()</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>As exported functions in a .src, as defined in
vitals.cfg.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Define vitals functions in vitals.cfg.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>There exists 2 exported functions for vitals calculation:
RegenRateFunction and MaximumFunction.</TD></TR>
<TR>
<TD colSpan=2>Each vital defined should have both of these functions.
RegenRateFunction should return the regeneration rate for that vital for
that character (see vitals.cfg for format)</TD></TR>
<TR>
<TD colSpan=2>MaximumFunction should return the maximum vital value for
the character in hundreths of a point</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>//In a .src file, like regen.src:
//vitals.cfg defines MaximumFunction regen:GetLifeMaximumValueExported , etc.
//Life vital funcs:
use uo;
exported function GetLifeMaximumValueExported(mob)
return (GetAttribute(mob, ATTRIBUTEID_STRENGTH) * 100);
endfunction</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Character"><B>Character</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Config Files</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="configfiles.html#vitals.cfg"><B>vitals.cfg</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#help.ecl>
<TH align=middle colSpan=2>help.ecl</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program help(character)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>character</VAR></TD>
<TD>Character ref</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>return value ignored</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Normal</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>100</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>When a player presses the "Help" button on the
paperdoll.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in help.src file, only in
/scripts/misc</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Automatically called if file exists.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script type handles help button on the paperdoll.
Useful for implimenting a help gump or staff paging system.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
program help( character )
SendSysmessage(character,"You're helpless.");
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Character"><B>Character</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#HitScript>
<TH align=middle colSpan=2>HitScript</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program hitscript(attacker, defender, weapon,
armor, basedamage, rawdamage )</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>attacker</VAR></TD>
<TD>Character Ref of player attacking with weapon</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>defender</VAR></TD>
<TD>Character Ref</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>weapon</VAR></TD>
<TD>Weapon Ref</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>armor</VAR></TD>
<TD>Armor Ref, or 0 if no armor was hit.</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>basedamage</VAR></TD>
<TD>Integer damage amount due to random weapon damage, strength, and
tactics.</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>rawdamage</VAR></TD>
<TD>Integer damage amount due basedamage, minus amount absorbed by
armor.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>return value ignored</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Normal</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>100</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>When a weapon with a hit script defined successfully hits an
opponent. (note not called automatically if Attack syshook is
called)</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in a .src file, in a package or
/scripts/items</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>In the weapon's itemdesc.cfg entry, the 'HitScript' property
defines the location of the hit script. This is in package format
':pkgname:scriptname', or if just 'scriptname' in the same package, or
/scripts/control. Also, setting weapon.hitscript allows you to change the
script.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script allows the scripter to control damage dealt to a
defender, equipment, and to trigger extra effects like poisoned
weapons.</TD></TR>
<TR>
<TD colSpan=2>Only one core-called hitscript may be defined per
weapon.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
use util;
program my_example_hitscript(attacker, defender, weapon, armor, basedamage, rawdamage)
ApplyDamage(defender,rawdamage);
if(RandomInt(20) == 2)
armor.hp := armor.hp - 1;
endif
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Character"><B>Character</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="objref.html#Item"><B>Item</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="objref.html#Weapon"><B>Weapon</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Config Files</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="configfiles.html#itemdesc.cfg"><B>itemdesc.cfg</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Script Types</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="scripttypes.html#OnHitScript"><B>OnHitScript</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#logoff.ecl>
<TH align=middle colSpan=2>logoff.ecl</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program logoff(character)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>character</VAR></TD>
<TD>Character ref</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>return value ignored</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Run To Completion</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>critical</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>After the linger time expires after a client logs
off.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in logoff.src file, in /scripts/misc or any
package</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>If the compiled file exists it is automatically
called.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script allows the scripter to run cleanup code after a
character exits the world. Useful for stuff like cleaning up summoned
NPCs, etc.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
program logoff( character )
Broadcast(character.name + " exited the world." );
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Character"><B>Character</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Script Types</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="scripttypes.html#logon.ecl"><B>logon.ecl</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="scripttypes.html#reconnect.ecl"><B>reconnect.ecl</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="scripttypes.html#logofftest.ecl"><B>logofftest.ecl</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#logofftest.ecl>
<TH align=middle colSpan=2>logofftest.ecl</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program logofftest(character)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>character</VAR></TD>
<TD>Character ref</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Integer value returned is number of seconds to have the
character 'linger' in the world.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Run To Completion</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>critical</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>When a client logs out.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in logofftest.src file, only in
/scripts/misc</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>If the compiled file exists it is automatically
called.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script allows the scripter to control how long the
character lingers in the world after logoff.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
program logofftest( character )
if(character.cmdlevel > 0)
return 0;
else
return 300;
endif
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Character"><B>Character</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Script Types</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="scripttypes.html#logon.ecl"><B>logon.ecl</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="scripttypes.html#reconnect.ecl"><B>reconnect.ecl</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="scripttypes.html#logoff.ecl"><B>logoff.ecl</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#logon.ecl>
<TH align=middle colSpan=2>logon.ecl</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program logon(character)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>character</VAR></TD>
<TD>Character ref</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>return value ignored</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Run To Completion</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>critical</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>When a client logs into the game server.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in logon.src file, in /scripts/misc or any
package</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>If the compiled file exists it is automatically
called.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script allows code to run when the player logs in. Can
be used for welcome messages, etc.</TD></TR>
<TR>
<TD colSpan=2>This script runs critical, so be careful how much code you
run!</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
program logon( character )
SendSysmessage(character, "Welcome to POL.");
Broadcast( character.name + " has entered the world.");
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Character"><B>Character</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Script Types</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="scripttypes.html#reconnect.ecl"><B>reconnect.ecl</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="scripttypes.html#logofftest.ecl"><B>logofftest.ecl</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="scripttypes.html#logoff.ecl"><B>logoff.ecl</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#MethodScript>
<TH align=middle colSpan=2>MethodScript</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>exported function
methodname(params,...)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>item</VAR></TD>
<TD>Item Ref</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>core ignores return value, except for Install() see
below</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Install() Run To Completion, methods normal</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Install() critical, methods 1</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>When a script calls the method for the item, i.e.
item.methodname()</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>In a .src file, and MUST BE in a package.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>In the item's itemdesc.cfg entry, the 'MethodScript'
property defines the location of the create script. This is in package
format ':pkgname:scriptname', or if just 'scriptname' in the same
package.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Method Scripts allow new object methods to be defined, and
can override built-in methods. For example, you may define a method
door.wackymethod() or override door.open().</TD></TR>
<TR>
<TD colSpan=2>To enable the exported functions in the script, the
'program' in the file must return 1. This is the 'Install()' program that
enables the exported methods.</TD></TR>
<TR>
<TD colSpan=2>The exported functions may take any number of
parameters</TD></TR>
<TR>
<TD colSpan=2>To instead call the built-in methods for an object, preceed
the name with an underscore '_'. So if you override door.close(), use
door._close() to instead call the built-in version.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>// This simple example shows how to override the door.open() method
pkg/.../door/itemdesc.cfg:
Door 0x0675
{
xmod -1
ymod +1
script door
doortype metal
MethodScript cdoor.ecl //note .ecl extension
}
pkg/.../door/cdoor.src:
exported function open( door )
print( "cdoor::open(" + door.serial + ")" );
return door._open();
endfunction
program install()
print( "installing cdoor" );
return 1;
endprogram</PRE></TD></TR>
<TR>
<TD colSpan=2><PRE>// This example shows how to define your own methods
//pkg/.../mypkg/itemdesc.cfg:
Item 0xE000
{
//normal itemdesc.cfg entries, graphic, etc.
Name widget
MethodScript widget_methods.ecl
}
// pkg/.../mypkg/widget_methods.src:
program install()
print("installing widget");
return 1;
endprogram
exported function discombobulate(flag1, message) //pass by reference here is ok too!
if(flag1 > 3)
print(message);
return 1;
endif
return 0;
endfunction
// So now, in another script, if 'widget' is a reference to
// item 0xE000, call like this:
widget.discombobulate(4,"Meaningless message");</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Item"><B>Item</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Config Files</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="configfiles.html#itemdesc.cfg"><B>itemdesc.cfg</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#oncreate.ecl>
<TH align=middle colSpan=2>oncreate.ecl</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program oncreate(character,
skillids)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>character</VAR></TD>
<TD>Character ref</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>skillids</VAR></TD>
<TD>Array of the 3 integer skill IDs chosen.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>return value ignored</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Run To Completion</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>critical</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>When a new player character is created.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in oncreate.src file, only in
/scripts/misc</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>If the compiled file exists it is automatically
called.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script allows the scripter to run code when a new
character is created. Useful for giving out starting equipment,
etc.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
include "include/startEqp";
program oncreate( character )
CreateStartingEquipment(character, skillids);
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Character"><B>Character</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Script Types</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="scripttypes.html#ondelete.ecl"><B>ondelete.ecl</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#ondelete.ecl>
<TH align=middle colSpan=2>ondelete.ecl</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program ondelete(character)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>character</VAR></TD>
<TD>Character ref</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>return value ignored</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Run To Completion</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>critical</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>When a player character is deleted.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in ondelete.src file, in /scripts/misc or any
package</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>If the compiled file exists it is automatically
called.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script allows the scripter to run code when a character
is deleted.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
program ondelete( character )
Broadcast(character.name + " was deleted.");
endprogram</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Character"><B>Character</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Script Types</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="scripttypes.html#oncreate.ecl"><B>oncreate.ecl</B></A></TD></TR></TBODY></TABLE><BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=1 rules=groups width="75%" align=center
bgColor=#dddddd border=1 frame=box>
<TBODY>
<TR><A name=#OnInsertScript>
<TH align=middle colSpan=2>OnInsertScript</TH></A></TR></TBODY>
<TBODY>
<TR>
<TH align=middle colSpan=2>program oninsertscript(character, container,
movetype, inserttype, adding_item, existing_stack,
amount_to_add)</TH></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Parameters:</TH></TR></TBODY>
<TBODY>
<TR bgColor=#d4d4d4>
<TD>Name</TD>
<TD>Type</TD></TR></TBODY>
<TBODY>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>character</VAR></TD>
<TD>Character Ref, or uninitialized, see below</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>container</VAR></TD>
<TD>Container Ref</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>movetype</VAR></TD>
<TD>Integer</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>inserttype</VAR></TD>
<TD>Integer</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>adding_item</VAR></TD>
<TD>Item Ref</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>existing_stack</VAR></TD>
<TD>Item Ref</TD></TR>
<TR bgColor=#e4e4e4>
<TD width="50%"><VAR>amount_to_add</VAR></TD>
<TD>Integer</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Return values</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>return value ignored</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Scheduler Type</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>Run-To-Completion</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Default Priority</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>critical</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>When Is It Called?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>After the item is moved into (or created in) a container, by
user dragging, script function, or the core.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Where Does It Live?</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>The 'program' in a .src file, in a package or
/scripts/control</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>To Define</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>In the item's itemdesc.cfg entry, the 'OnInsertScript'
property defines the location of the on-insert script. This is in package
format ':pkgname:scriptname', or if just 'scriptname' in the same package,
or /scripts/control.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Explanation</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2>This script allows side effects to be triggered as a result
of the item insertion.</TD></TR>
<TR>
<TD colSpan=2>IMPORTANT: the first parameter (character) MAY be passed as
an uninitialized object if the item was not moved by character (i.e. by a
script function or the core), so please check it before you use it.</TD></TR>
<TR>
<TD colSpan=2>inserttype will be INSERT_ADD_ITEM if a new item is being
inserted into the container (existing_stack and amt_to_add are uninit), or
INSERT_INCREASE_STACK if an existing item's amount is merely being
increased (and adding_item is uninit).</TD></TR>
<TR>
<TD colSpan=2>These are the times when onInsert scripts are called: Client
drag/drop, vendor buy: when moving items to the player's backpack, vendor
sell: when putting gold in the player's backpack, secure trade, when
cancelling or confirming a trade, MoveItemToContainer,
CreateItemInContainer, CreateItemInInventory,
CreateItemInBackpack.</TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Examples</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><PRE>use uo;
program my_example_oninsertscript(character, container, item, item_amount)
SendSysmessage(character,"You insert " + item_amount + " "
+ item.desc + " into the container.");
PlaySoundEffectPrivate(character, SFX_BLAH, character);
endprogram</PRE></TD></TR>
<TR>
<TD colSpan=2><PRE>UO.EM constants used with the 'movetype' parameter:
const MOVETYPE_PLAYER := 0; // physically moved (dragged) by a player
const MOVETYPE_COREMOVE := 1; // moved by the core (eg, MoveItemToContainer().)
Insert scripts only:
const MOVETYPE_CORECREATE := 2; // created by core (eg, CreateItemInBackpack().)</PRE></TD></TR>
<TR>
<TD colSpan=2><PRE>UO.em constants used with the 'inserttype' parameter:
const INSERT_ADD_ITEM := 1;
const INSERT_INCREASE_STACK := 2;</PRE></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Objects</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="objref.html#Character"><B>Character</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="objref.html#Container"><B>Container</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="objref.html#Item"><B>Item</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Config Files</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="configfiles.html#itemdesc.cfg"><B>itemdesc.cfg</B></A></TD></TR></TBODY>
<TBODY>
<TR bgColor=#cccccc>
<TH align=left colSpan=2>Related Script Types</TH></TR></TBODY>
<TBODY>
<TR>
<TD colSpan=2><A
href="scripttypes.html#CanInsertScript"><B>CanInsertScript</B></A></TD></TR>
<TR>
<TD colSpan=2><A
href="scripttypes.html#CanRemoveScript"><B>CanRemoveScript</B></A></TD></TR>
<TR>