SHOW:
|
|
- or go back to the newest paste.
| 1 | // +-------------------------------------------+ | |
| 2 | // | ___ _ _____ __ __ ____ ____ | | |
| 3 | // | | __| | | | /_\ | \ \/ / | ___| | /\ | | | |
| 4 | // | |__ | | |_ | _ | \ / | __| | \/ / | | |
| 5 | // | |___| |___| |_| |_| |__| |____| |_| \\ | | |
| 6 | // | Greek2me Blockland ID 11902 | | |
| 7 | // +-------------------------------------------+ | |
| 8 | ||
| 9 | if($Support_MultiSourceEvents::Version > 1) | |
| 10 | return; | |
| 11 | $Support_MultiSourceEvents::Version = 1; | |
| 12 | ||
| 13 | //Processes an event which occurs on multiple sources, normally bricks. | |
| 14 | //@param string inputEvent The name of the input event. | |
| 15 | //@param GameConnection client The client that activated the event. | |
| 16 | //@param ScriptObject minigame Optional. Only bricks within this minigame will be processed. | |
| 17 | function processMultiSourceInputEvent(%inputEvent, %client, %minigame) | |
| 18 | {
| |
| 19 | %group = "multiSourceEventGroup" @ inputEvent_GetInputEventIdx(%inputEvent); | |
| 20 | ||
| 21 | if(!isObject(%group)) | |
| 22 | return; | |
| 23 | ||
| 24 | for(%i = 0; %i < %group.getCount(); %i ++) | |
| 25 | {
| |
| 26 | %obj = %group.getObject(%i); | |
| 27 | ||
| 28 | if(!%minigame || %minigame == getMinigameFromObject(%obj)) | |
| 29 | {
| |
| 30 | $InputTarget_["Self"] = %obj; | |
| 31 | %obj.processInputEvent(%inputEvent, %client); | |
| 32 | } | |
| 33 | } | |
| 34 | } | |
| 35 | ||
| 36 | //Registers a multiple-source input event. Use this in place of registerInputEvent. | |
| 37 | //@param string class The object class that this event is far. | |
| 38 | //@param string inputEvent The name of the input event. | |
| 39 | //@param string targets A tab-delimited list of targets. See the link below. | |
| 40 | //@link http://forum.blockland.us/index.php?topic=40631.0 | |
| 41 | - | function registerMultiSourceInputEvent(%class, %inputEvent, %targets) |
| 41 | + | function registerMultiSourceInputEvent(%class, %inputEvent, %targets, %adminOnly) |
| 42 | {
| |
| 43 | - | registerInputEvent(%class, %inputEvent, %targets); |
| 43 | + | registerInputEvent(%class, %inputEvent, %targets, %adminOnly); |
| 44 | ||
| 45 | //for whatever reason, this doesn't take a class parameter | |
| 46 | %inputEventIdx = inputEvent_GetInputEventIdx(%inputEvent); | |
| 47 | ||
| 48 | if(%inputEventIdx != -1) | |
| 49 | $InputEvent_MultiSource[%class, %inputEventIdx] = true; | |
| 50 | } | |
| 51 | ||
| 52 | package Support_MultiSourceEvents | |
| 53 | {
| |
| 54 | function serverCmdAddEvent(%client, %enabled, %inputEventIdx, %delay, %targetIdx, %namedTargetNameIdx, %outputEventIdx, %par1, %par2, %par3, %par4) | |
| 55 | {
| |
| 56 | %obj = %client.wrenchBrick; | |
| 57 | %class = %obj.getClassName(); | |
| 58 | ||
| 59 | parent::serverCmdAddEvent(%client, %enabled, %inputEventIdx, %delay, %targetIdx, %namedTargetNameIdx, %outputEventIdx, %par1, %par2, %par3, %par4); | |
| 60 | ||
| 61 | if($InputEvent_MultiSource[%class, %inputEventIdx]) | |
| 62 | {
| |
| 63 | %group = "multiSourceEventGroup" @ %inputEventIdx; | |
| 64 | if(!isObject(%group)) | |
| 65 | {
| |
| 66 | new SimSet(%group); | |
| 67 | missionCleanup.add(%group); | |
| 68 | } | |
| 69 | %group.add(%obj); | |
| 70 | } | |
| 71 | } | |
| 72 | ||
| 73 | function SimObject::clearEvents(%this) | |
| 74 | {
| |
| 75 | %class = %this.getClassName(); | |
| 76 | for(%i = 0; %i < %this.numEvents; %i ++) | |
| 77 | {
| |
| 78 | %inputEventIdx = %this.eventInputIdx[%i]; | |
| 79 | if(!%removed[%inputEventIdx] && $InputEvent_MultiSource[%class, %inputEventIdx]) | |
| 80 | {
| |
| 81 | %removed[%inputEventIdx] = true; | |
| 82 | %group = "multiSourceEventGroup" @ %inputEventIdx; | |
| 83 | %group.remove(%this); | |
| 84 | } | |
| 85 | } | |
| 86 | return parent::clearEvents(%this); | |
| 87 | } | |
| 88 | }; | |
| 89 | activatePackage(Support_MultiSourceEvents); |