Logic random outputs: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(Bug in CS:GO.)
(Improved wording of explanation of the bugged CSGO behavior)
Line 3: Line 3:
{{base point|logic_random_outputs|since=Alien Swarm|sprite=1}} It randomly fires one of up to eight separate outputs. Use [[logic_case]] in older engine branches or if you need twice as many outputs.
{{base point|logic_random_outputs|since=Alien Swarm|sprite=1}} It randomly fires one of up to eight separate outputs. Use [[logic_case]] in older engine branches or if you need twice as many outputs.
{{clr|left}}
{{clr|left}}
{{bug|{{csgo}}{{inline note|name=other games?}} The numbering of the KeyValues and outputs does not match: In-game, the game expects the KeyValues <code>OnTriggerChance0-7</code> (and not 1-8), mapping to the outputs <code>OnTrigger1-8</code>.<sup>[https://github.com/perilouswithadollarsign/cstrike15_src/blob/f82112a2388b841d72cb62ca48ab1846dfcc11c8/game/server/logic_random_outputs.cpp#L70 code]</sup> This means that the KeyValue <code>OnTriggerChance8</code> doesn't exist and that the output <code>OnTrigger1</code> can only be fired if the KeyValue <code>OnTriggerChance0</code> is given (and &gt; 0), which however is {{!fgd}}. See [[#FGD Code|below]] for a fix.}}
{{bug|{{csgo}}{{inline note|name=other games?}} Does not work properly. Use logic_case instead.<br>The numbering of the <code>OnTriggerChance</code> keyvalues is off by one: they start at 1 while the game expects them to start at 0.<sup>[https://github.com/perilouswithadollarsign/cstrike15_src/blob/f82112a2388b841d72cb62ca48ab1846dfcc11c8/game/server/logic_random_outputs.cpp#L70 code]</sup> This causes the keyvalues to not correspond to the expected outputs. See [[#FGD Code|below]] for a fix.<br>For example, <code>OnTriggerChance1</code> determines the chance of the <code>OnTrigger2</code> output. With this incorrect set of keyvalues, <code>OnTrigger1</code> is never fired and <code>OnTriggerChance8</code> does not correspond to any of the outputs.}}
{{Example|When receiving the <code>Trigger</code> input while <code>OnTriggerChance1</code> equals 0.25, this entity will fire its <code>OnTrigger1</code> output with a probability of 25 %. {{bug|{{csgo}} Instead, the output <code>OnTrigger2</code> is fired with 25 %.}}}}
{{clr}}
{{clr}}



Revision as of 14:29, 4 October 2022

English (en)Translate (Translate)

Template:Base point It randomly fires one of up to eight separate outputs. Use logic_case in older engine branches or if you need twice as many outputs.

Icon-Bug.pngBug:Counter-Strike: Global Offensive[other games?] Does not work properly. Use logic_case instead.
The numbering of the OnTriggerChance keyvalues is off by one: they start at 1 while the game expects them to start at 0.code This causes the keyvalues to not correspond to the expected outputs. See below for a fix.
For example, OnTriggerChance1 determines the chance of the OnTrigger2 output. With this incorrect set of keyvalues, OnTrigger1 is never fired and OnTriggerChance8 does not correspond to any of the outputs.  [todo tested in ?]

Keyvalues

OnTrigger1 Chance (OnTriggerChance1) to OnTrigger8 Chance (OnTriggerChance8) <float>
Chance (from 0 to 1) of the OnTrigger1-8 output firing when this entity is triggered.
Start Disabled (StartDisabled) <boolean>
Stay dormant until activated (with theEnableinput).


Flags

Only trigger once : [1]
Allow fast retrigger : [2]

Inputs

Trigger
Trigger this entity, causing its OnTrigger outputs to fire if it is enabled.
Toggle
Toggle this entity between enabled and disabled.
CancelPending
Cancel any events fired by this entity that are currently pending in the I/O event queue.

EnableDisable:

Enable / Disable
Enable/disable this entity from performing its task. It might also disappear from view.


Outputs

OnSpawn
Fired when this entity is spawned. If this entity is set to only trigger once, it will delete itself after firing this output.
OnTrigger1 to OnTrigger8
This output has a chance to fire when the entity is triggered.


FGD Code

Counter-Strike: Global Offensive[other games?] This code belongs to base.fgd. In the highlighted lines, the index of the KeyValue's name was decreased by 1 each but not their display text, so that with this fix, the numbering of the KeyValues and outputs will match in Hammer as long as SmartEdit is turned on.

@PointClass base(Targetname, EnableDisable) iconsprite("editor/logic_random_outputs.vmt") = logic_random_outputs :
	"A message forwarder. Fires up to eight separate outputs, each with a different chance of firing."
[
	spawnflags(flags) =
	[
		1: "Only trigger once" : 0
		2: "Allow fast retrigger" : 0
	]
	OnTriggerChance0(float) : "OnTrigger1 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger1 output firing when this entity is triggered."
	OnTriggerChance1(float) : "OnTrigger2 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger2 output firing when this entity is triggered."
	OnTriggerChance2(float) : "OnTrigger3 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger3 output firing when this entity is triggered."
	OnTriggerChance3(float) : "OnTrigger4 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger4 output firing when this entity is triggered."
	OnTriggerChance4(float) : "OnTrigger5 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger5 output firing when this entity is triggered."
	OnTriggerChance5(float) : "OnTrigger6 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger6 output firing when this entity is triggered."
	OnTriggerChance6(float) : "OnTrigger7 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger7 output firing when this entity is triggered."
	OnTriggerChance7(float) : "OnTrigger8 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger8 output firing when this entity is triggered."

	// Inputs
	input Trigger(void) : "Trigger this entity, causing its OnTrigger outputs to fire if it is enabled."
	input Toggle(void) : "Toggle this entity between enabled and disabled."
	input CancelPending(void) : "Cancel any events fired by this entity that are currently pending in the I/O event queue."
	
	// Outputs
	output OnSpawn(void) : "Fired when this entity is spawned. If this entity is set to only trigger once, it will "+
		"delete itself after firing this output."
	output OnTrigger1(void) : "This output has a chance to fire when the entity is triggered."
	output OnTrigger2(void) : "This output has a chance to fire when the entity is triggered."
	output OnTrigger3(void) : "This output has a chance to fire when the entity is triggered."
	output OnTrigger4(void) : "This output has a chance to fire when the entity is triggered."
	output OnTrigger5(void) : "This output has a chance to fire when the entity is triggered."
	output OnTrigger6(void) : "This output has a chance to fire when the entity is triggered."
	output OnTrigger7(void) : "This output has a chance to fire when the entity is triggered."
	output OnTrigger8(void) : "This output has a chance to fire when the entity is triggered."
]