User:Allen Kerensky/Myriad Lite Preview 5/Target

= Myriad Lite Target =

The practice target is an object that reports the Myriad Lite attacks and damage amounts. This is useful for verifying if your objects and scripts are working correctly, or just practicing with your fists and weapons.

Setup

 * 1) Get yourself a "Noob", which makes a perfectly useful target item: https://marketplace.secondlife.com/p/Art-Laxness-Noob-Pack/371307
 * 2) Drag and Drop in the Myriad Lite Target script from inventory into the object

The noob is now ready to act as target or practice dummy for testing Close Combat with fists or melee weapons and Ranged Combat with firearms.

Myriad_Lite_Target-v0.0.6-20120202.lsl
//============================================================================ // Myriad_Lite_Target-v0.0.6-20120202.lsl // Copyright (c) 2012 By Allen Kerensky (OSG/SL) // The Myriad RPG System was designed, written, and illustrated by Ashok Desai // Myriad RPG licensed under the Creative Commons Attribution 2.0 UK: England and Wales // http://creativecommons.org/licenses/by/2.0/uk/ // Myriad Lite software Copyright (c) 2011-2012 by Allen Kerensky (OSG/SL) // Baroun's Adventure Machine Copyright (c) 2008-2011 by Baroun Tardis (SL) // Myriad Lite and Baroun's Adventure Machine licensed under the // Creative Commons Attribution-Share Alike-Non-Commercial 3.0 Unported // http://creativecommons.org/licenses/by-nc-sa/3.0/ // You must agree to the terms of this license before making any use of this software. // If you do not agree to this license, simply delete these materials. // There is no warranty, express or implied, for your use of these materials. //============================================================================

//============================================================================ // MESSAGE FORMAT REFERENCE //============================================================================ // CHANPLAYER IN - DEPRECATED - HITCHECK|int attackstat|int attackskill|int attackdice|key owner|str name // CHANPLAYER IN - RANGEDHIT|int attackstat|int attackskill|int attackdice|key weaponowner|str name // CHANPLAYER IN - CLOSEHIT|int attackstat|int attackskill|int attackdice|key weaponowner|str name

//============================================================================ // GLOBAL VARIABLES //============================================================================ integer CHANOBJECT; // channel the target listens on for attacks integer HANDOBJECT; // chat channel handle to remove channel later if needed integer MINSTAT = 1; // minimum value of a statistic integer MAXSTAT = 10; // maximum value of a statistic integer MINSKILL = 1; // minimum value of a skill integer MAXSKILL = 5; // maximum value of a skill integer MINDAMAGE = 1; // minimum damage dice a weapon can inflict integer MAXDAMAGE = 5; // maximum damage dice a weapon can inflict

//============================================================================ // GLOBAL ERROR - report errors on debug channel //============================================================================ ERROR(string errmsg) { llSay(DEBUG_CHANNEL,"ERROR: "+errmsg); }

//============================================================================ // DEFAULT STATE //============================================================================ default { //   // STATE_ENTRY EVENT //   state_entry { llSetPrimitiveParams([PRIM_PHANTOM, FALSE]); // ensure all prims are not phantom to register collisions CHANOBJECT = (integer)("0x"+llGetSubString((string)llGetKey,0,6)); // calculate dynamic channel to listen on       HANDOBJECT = llListen(CHANOBJECT,"",NULL_KEY,""); // start listener for attack events }   //    // ON_REZ EVENT //   on_rez(integer param) { param = 0; // LSLINT llResetScript; // nothing drastic, just reset script and start from the top }

//   // LISTEN EVENT - whispers, says, shouts, regionsays //   listen(integer channel,string speakername,key speakerid,string message) { speakername = ""; // LSLINT speakerid = NULL_KEY; // LSLINT if ( channel == CHANOBJECT ) { // is this message on the dynamic channel? list fields = llParseString2List(message,["|"],[]); // break message into parts split by | symbol string command = llList2String(fields,0); // field 0 is the command if ( command == "HITCHECK" || command == "RANGEDHIT" || command == "CLOSEHIT" ) { // is this an attack command? integer attackstat = llList2Integer(fields,1); // get the value of the attacker's stat integer attackskill = llList2Integer(fields,2); // get the attackers skill level integer attackdice = llList2Integer(fields,3); // get the attackers weapon attack dice key owner = llList2Key(fields,4); // get the owner of the attacking object string item = llList2String(fields,5); // get the name of the attacking object if ( attackstat < MINSTAT || attackstat > MAXSTAT ) { // is attack stat valid? ERROR("Attack stat value out of range: "+(string)MINSTAT+"-"+(string)MAXSTAT); // report the invalid value return; // exit early since we've hit a fatal error with message }               if ( attackskill < MINSKILL || attackstat > MAXSKILL ) { // is attacker skill value valid? ERROR("Attack skill value out of range: "+(string)MINSKILL+"-"+(string)MAXSKILL); // report invalid value return; // exit early since we've hit a fatal error with message }                               if ( attackdice < MINDAMAGE || attackdice > MAXDAMAGE ) { // is attack dice of object valid? ERROR("Attack dice value out of range: "+(string)MINDAMAGE+"-"+(string)MAXDAMAGE); // report invalid value return; // exit early since we've hit a fatal error with message }               // its all good - report the hit llShout(PUBLIC_CHANNEL,"/me hit by "+llKey2Name(owner)+"'s "+item+" for "+(string)attackdice+" attack dice!"); return; // exit early in case we add more commands later } // end if attack command } // end if channel object }   } // end default //============================================================================ // END //============================================================================