View difference between Paste ID: AP7EcgZW and xuqcSTba
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);