Files
dsrc/sku.0/sys.server/compiled/game/script/working/jfreeman/makemites.script
T
2013-09-10 23:17:15 -07:00

117 lines
2.8 KiB
Plaintext

include library.utils;
trigger OnDetach()
{
removeObjVar( self, "rockMiteMaking");
if ( hasObjVar( self, "miteReg" ))
killAllMites( self );
return SCRIPT_CONTINUE;
}
trigger OnRemovingFromWorld()
{
removeObjVar( self, "rockMiteMaking");
if ( hasObjVar( self, "miteReg" ))
killAllMites( self );
return SCRIPT_CONTINUE;
}
trigger OnSpeaking(string text)
{
location myLoc = getLocation( self );
if ( text.equals( "go") )
{
if ( hasObjVar( self, "rockMiteMaking" ))
{
debugSpeakMsg( self, "I'm still making rock mites!" );
return SCRIPT_CONTINUE;
}
debugSpeakMsg( self, "making rock mites!" );
setObjVar( self, "rockMiteMaking", 0 );
messageTo( self, "spawnMite", null, 0, false );
}
else if ( ( text.equals( "stop" ) || text.equals( "die" ) ) && hasObjVar( self, "rockMiteMaking" ))
{
removeObjVar( self, "rockMiteMaking");
debugSpeakMsg( self, "No more rock mites for you!" );
}
if ( text.equals( "die" ) && hasObjVar( self, "miteReg" ))
{
debugSpeakMsg( self, "MUAHAHAH!!!!" );
killAllMites( self );
}
return SCRIPT_CONTINUE;
}
messageHandler spawnMite()
{
if ( !hasObjVar( self, "rockMiteMaking" ))
return SCRIPT_CONTINUE;
int numSpawned = getIntObjVar( self, "rockMiteMaking" );
location spawnLoc = new location( getLocation( self ));
spawnLoc.x += rand( -15, 15 );
spawnLoc.z += rand( -15, 15 );
string templateName = "object/creature/monster/rock_mite/rock_mite_desert_";
switch ( rand(0,3))
{
case 0 :
templateName = templateName + "giant.iff";
break;
case 1 :
templateName = templateName + "large.iff";
break;
case 2 :
templateName = templateName + "medium.iff";
break;
case 3 :
templateName = templateName + "small.iff";
break;
}
obj_id mite = createObject( templateName, spawnLoc );
registerMite( self, mite );
numSpawned++;
if ( numSpawned > 19 )
{
debugSpeakMsg( self, "I made 20 rock mites!");
removeObjVar( self, "rockMiteMaking");
return SCRIPT_CONTINUE;
}
setObjVar( self,"rockMiteMaking",numSpawned);
messageTo( self, "spawnMite", null, 1, false );
return SCRIPT_CONTINUE;
}
void registerMite( obj_id player, obj_id mite )
{
if ( !hasObjVar( player, "miteReg" ))
{
obj_id[] mites = new obj_id[ 1 ];
mites[0] = mite;
setObjVar( player, "miteReg", mites ); // Suppress linting - This array is fixed at one element
return;
}
resizeable obj_id[] mites = getResizeableObjIdArrayObjVar( player, "miteReg" );
mites = utils.addElement( mites, mite );
if(mites != null && mites.length > 0) { // Zero length array check
setObjVar( player, "miteReg", mites );
}
}
void killAllMites( obj_id player )
{
obj_id[] mites = getObjIdArrayObjVar( player, "miteReg" );
for ( int i=0; i < mites.length; i++ )
{
destroyObject( mites[i] );
}
removeObjVar( player, "miteReg" );
}