<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://g1r-mp.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Monster_and_interaction_events</id>
	<title>Monster and interaction events - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://g1r-mp.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Monster_and_interaction_events"/>
	<link rel="alternate" type="text/html" href="https://g1r-mp.com/wiki/index.php?title=Monster_and_interaction_events&amp;action=history"/>
	<updated>2026-09-19T07:27:05Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://g1r-mp.com/wiki/index.php?title=Monster_and_interaction_events&amp;diff=216&amp;oldid=prev</id>
		<title>QCherry: Document monster and interaction events</title>
		<link rel="alternate" type="text/html" href="https://g1r-mp.com/wiki/index.php?title=Monster_and_interaction_events&amp;diff=216&amp;oldid=prev"/>
		<updated>2026-08-14T04:26:38Z</updated>

		<summary type="html">&lt;p&gt;Document monster and interaction events&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__NOTOC__&lt;br /&gt;
= Monster and interaction events =&lt;br /&gt;
&lt;br /&gt;
These server-side Lua events expose authoritative monster state changes and&lt;br /&gt;
normalized player interactions. They are observations of server state; clients&lt;br /&gt;
do not decide monster health, damage, death, targets, or item rewards.&lt;br /&gt;
&lt;br /&gt;
== Monster events ==&lt;br /&gt;
&lt;br /&gt;
=== onMonsterSpawn ===&lt;br /&gt;
&lt;br /&gt;
Triggered after a server-owned monster has been created.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
onMonsterSpawn(string monsterId, string monsterType, number x, number y, number z, string sourceResource)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onMonsterSpawn&amp;quot;, root, function(monsterId, monsterType, x, y, z)&lt;br /&gt;
    outputDebugString(monsterType .. &amp;quot; spawned as &amp;quot; .. monsterId)&lt;br /&gt;
end)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== onMonsterDestroy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
onMonsterDestroy(string monsterId, string sourceResource)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== onMonsterDamage ===&lt;br /&gt;
&lt;br /&gt;
Triggered after authoritative damage has been accepted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
onMonsterDamage(string monsterId, number damage, number healthAfter, int sourcePlayerId, string damageKind, string sourceResource)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onMonsterDamage&amp;quot;, root, function(monsterId, damage, healthAfter, playerId)&lt;br /&gt;
    outputDebugString(monsterId .. &amp;quot; has &amp;quot; .. healthAfter .. &amp;quot; HP remaining&amp;quot;)&lt;br /&gt;
end)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== onMonsterDeath ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
onMonsterDeath(string monsterId, int killerPlayerId, string sourceResource)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== onMonsterTargetChange ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
onMonsterTargetChange(string monsterId, int oldPlayerId, int newPlayerId, string sourceResource)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== onMonsterAttack ===&lt;br /&gt;
&lt;br /&gt;
Triggered when the server-owned AI resolves a validated attack against a&lt;br /&gt;
player. The normal player damage and life-state events are emitted separately.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
onMonsterAttack(string monsterId, int targetPlayerId, number damage, int actionId)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interaction events ==&lt;br /&gt;
&lt;br /&gt;
The common interaction events cover every supported kind. Current specialized&lt;br /&gt;
kinds are &amp;lt;code&amp;gt;mining&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;sitting&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
onPlayerInteractionState(int playerId, string kind, bool active, string phase, int actionId, int serverStartTimeMs)&lt;br /&gt;
onPlayerInteractionStart(int playerId, string kind, int actionId, int serverStartTimeMs)&lt;br /&gt;
onPlayerInteractionStop(int playerId, string kind, int actionId, int serverStartTimeMs)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mining and sitting also emit specialized equivalents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
onPlayerMiningState(int playerId, string kind, bool active, string phase, int actionId, int serverStartTimeMs)&lt;br /&gt;
onPlayerMiningStart(int playerId, string kind, int actionId, int serverStartTimeMs)&lt;br /&gt;
onPlayerMiningStop(int playerId, string kind, int actionId, int serverStartTimeMs)&lt;br /&gt;
&lt;br /&gt;
onPlayerSittingState(int playerId, string kind, bool active, string phase, int actionId, int serverStartTimeMs)&lt;br /&gt;
onPlayerSittingStart(int playerId, string kind, int actionId, int serverStartTimeMs)&lt;br /&gt;
onPlayerSittingStop(int playerId, string kind, int actionId, int serverStartTimeMs)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use start/stop events for edge-triggered rules such as mining rewards. Use&lt;br /&gt;
[[GetPlayerInteraction]], [[IsPlayerInteracting]], [[IsPlayerMining]], and&lt;br /&gt;
[[IsPlayerSitting]] for current-state queries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerMiningStop&amp;quot;, root, function(playerId)&lt;br /&gt;
    givePlayerItem(playerId, &amp;quot;ore&amp;quot;, 1)&lt;br /&gt;
    outputChatBox(&amp;quot;You mined one ore nugget.&amp;quot;, playerId)&lt;br /&gt;
end)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Lua Events]]&lt;br /&gt;
[[Category:Server Events]]&lt;br /&gt;
[[Category:Monster Functions]]&lt;br /&gt;
[[Category:Interaction Functions]]&lt;/div&gt;</summary>
		<author><name>QCherry</name></author>
	</entry>
</feed>