Skip to content

Enum "ModCallbacks"⚓︎

Execution order diagram: callback diagram

有关回调的注意事项⚓︎

首先,最好不要在高频回调如MC_NPC_UPDATE,MC_INPUT_ACTION中在不加限制的情况下使用如spawn等函数,否则将会导致游戏卡顿等问题

Value表示回调的序号

Name表示回调的名称

Function Args表示可以在Function中定义的变量

Optional Args表示可供筛选的变量

Return Type表示返回值的类型

示例代码
1
2
3
4
5
6
7
8
-- 注意,Fun Arg必须按顺序,所以要用到后面的变量但前面的没有用处时可以用"_"或其他变量名替代而非直接在第一个处当后面的变量使用
function mod:example(_,_,Ent_Player)
    if Ebt_player:GetPlayerType() == 4 then
        print("小蓝人使用了D6?!")
    end
end
-- 在最后的“CollectibleType.COLLECTIBLE_D6”即限定了只有主动道具D6被使用时该函数才会被调用
mod:AddCallback(ModCallbacks.MC_USE_ITEM, mod.example, CollectibleType.COLLECTIBLE_D6)

MC_NPC_UPDATE⚓︎

在NPC更新后调用。

返回任何值都不会影响后续回调的执行。

警告

当NPC播放“出现”动画时,此回调不会触发。例如,当一个裂口魔生成时,它会在第1帧触发,然后在第31帧及之后触发。

示例代码

这段代码会在每个NPC更新时打印“Hello World!”。

1
2
3
4
function mod:myFunction(entity) -- 'entity' 包括对一个NPC的引用
    print("Hello World!")
end
mod:AddCallback(ModCallbacks.MC_NPC_UPDATE, mod.myFunction)

这段代码只会在NPC的类型为“ENTITY_GAPER”时打印“Gaper found”。

1
2
3
4
function mod:myFunction2(entity) -- 'entity' 包括对一个NPC的引用
    print("Gaper found!")
end
mod:AddCallback(ModCallbacks.MC_NPC_UPDATE, mod.myFunction2, EntityType.ENTITY_GAPER)
DLC Value Name Function Args Optional Args Return Type
0 MC_NPC_UPDATE (EntityNPC) EntityType void

MC_POST_UPDATE⚓︎

在每次游戏更新后调用。

返回任何值都不会影响后续回调的执行。

执行信息

此回调每秒调用30次。当游戏暂停时(例如在屏幕过渡或暂停菜单时),它不会被调用。

示例代码

这段代码会在每次游戏更新时打印“Hello World!”。

1
2
3
4
function mod:myFunction()
    print("Hello World!")
end
mod:AddCallback(ModCallbacks.MC_POST_UPDATE, mod.myFunction)
DLC Value Name Function Args Optional Args Return Type
1 MC_POST_UPDATE - - void

MC_POST_RENDER⚓︎

在每次游戏渲染后调用(每秒60次)。

返回任何值都不会影响后续回调的执行。

执行信息

强烈建议仅在需要渲染某些内容时使用此函数。不建议将此函数用于不经常使用或需要持续重新计算的事情。

示例代码

这段代码会在每次游戏渲染时打印“Hello World!”。

1
2
3
4
function mod:myFunction()
    print("Hello World!")
end
mod:AddCallback(ModCallbacks.MC_POST_RENDER, mod.myFunction)
DLC Value Name Function Args Optional Args Return Type
2 MC_POST_RENDER - - void

MC_USE_ITEM⚓︎

当使用主动道具时,或者当任何道具通过EntityPlayer.UseActiveItem传递时调用。

道具的RNG允许为道具的随机事件设置种子。

返回true以显示“使用道具”动画,否则返回false。返回任何值都不会影响后续回调的执行。

如果返回的是一个表而不是布尔值,则可以将以下字段设置为非nil值以实现额外功能:

  • Discharge:确定道具使用后是否应消耗充能。
  • Remove:确定道具使用后是否应从玩家处移除。
  • ShowAnim:如果设置为true,则播放默认的使用动画(相当于在AB+中简单地返回true)。
注意

“Discharge”字段决定了美德之书是否应该生成一个灵火。将其设置为false可以防止灵火生成。

示例代码

这段代码会在每次使用主动道具时打印“Hello World!”。

1
2
3
4
function mod:myFunction(collectibleID, rngObj, playerWhoUsedItem, useFlags, activeSlot, varData)
    print("Hello World!")
end
mod:AddCallback(ModCallbacks.MC_USE_ITEM, mod.myFunction)

这段代码展示了如何使用返回值来改变道具使用的行为。在这里,它将导致道具不消耗充能,在使用时不被移除,也不显示使用动画。

1
2
3
4
5
6
7
8
function mod:myFunction2(collectibleID, rngObj, playerWhoUsedItem, useFlags, activeSlot, varData)
    return {
        Discharge = false,
        Remove = false,
        ShowAnim = false,
    }
end
mod:AddCallback(ModCallbacks.MC_USE_ITEM, mod.myFunction2)

这段代码只会在每次使用六面骰时打印“D6 used!”。

1
2
3
4
function mod:myFunction3(collectibleID, rngObj, playerWhoUsedItem, useFlags, activeSlot, varData)
    print("D6 used!")
end
mod:AddCallback(ModCallbacks.MC_USE_ITEM, mod.myFunction3, CollectibleType.COLLECTIBLE_D6)
DLC Value Name Function Args Optional Args Return Type
3 MC_USE_ITEM (CollectibleType,
RNG,
EntityPlayer,
UseFlags [int],
ActiveSlot,
CustomVarData [int])
CollectibleType boolean

MC_POST_PEFFECT_UPDATE⚓︎

在每个玩家每帧评估必须持续评估的道具效果后调用。

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
4 MC_POST_PEFFECT_UPDATE (EntityPlayer) PlayerType void

MC_USE_CARD⚓︎

当使用卡牌/符文时调用。

返回任何值都不会影响后续回调的执行。

示例代码

这段代码会在每次使用卡牌时打印“Hello World!”。

1
2
3
4
function mod:myFunction(cardID, playerWhoUsedItem, useFlags)
    print("Hello World!")
end
mod:AddCallback(ModCallbacks.MC_USE_CARD, mod.myFunction)

这段代码只会在每次使用愚者卡时打印“Fool card used!”。

1
2
3
4
function mod:myFunction2(cardID, playerWhoUsedItem, useFlags)
    print("Fool card used!")
end
mod:AddCallback(ModCallbacks.MC_USE_CARD, mod.myFunction2, Card.CARD_FOOL)
DLC Value Name Function Args Optional Args Return Type
5 MC_USE_CARD (Card,
EntityPlayer,
UseFlags [int]
Card void

MC_FAMILIAR_UPDATE⚓︎

每个跟班每帧都会调用。

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
6 MC_FAMILIAR_UPDATE (EntityFamiliar) FamiliarVariant void

MC_FAMILIAR_INIT⚓︎

在跟班初始化后立即调用。

返回任何值都不会影响后续回调的执行。

警告

在某些用例中,访问初始化的实体提供的数据是不完整的。在PostInit回调调用之前,只有PositionVelocitySpawnerTypeSpawnerVariantSpawnerEntity等一些属性被设置,因此可以访问。其他一些属性(例如效果属性或眼泪标志)将不会被设置。如果您想访问这些值,您需要挂钩到MC_POST_PEFFECT_UPDATE并在第一帧检查这些属性。

DLC Value Name Function Args Optional Args Return Type
7 MC_FAMILIAR_INIT (EntityFamiliar) FamiliarVariant void

MC_EVALUATE_CACHE⚓︎

当玩家的属性重新评估时调用一次或多次。例如,当玩家拾取一个提供属性的道具道具或使用属性药丸时,此回调将触发。

可选参数可用于指定一个CacheFlag。它必须是一个单一的CacheFlag,两个或多个CacheFlag的组合将不起作用。

返回任何值都不会影响后续回调的执行。

使用此回调来实现任何改变玩家属性、小精灵、飞行能力、武器等的功能。

自定义道具和饰品在“items.xml”文件中使用“cache”标签注释它们影响的特定属性。例如,一个增加眼泪射速和伤害的自定义被动道具应该在“items.xml”条目中包含类似以下的内容:

1
2
3
4
5
6
  <passive
    name="Foo"
    description="My cool item"
    gfx="foo.png"
    cache="damage firedelay"
  />

有了这个条目,当玩家拾取Foo道具时,MC_EVALUATE_CACHE回调将触发两次,一次是CacheFlag.CACHE_DAMAGE,一次是CacheFlag.CACHE_FIREDELAY

在为任何模组效果触发回调之前,会应用原版道具和效果的属性。

您可以通过以下步骤在其他回调中强制触发此回调:1) 手动将适当的缓存标志添加到玩家,2) 调用EntityPlayer.EvaluateItems方法。例如:

1
2
3
4
5
-- 我的自定义道具每帧改变玩家的伤害
function barPostPEffectUpdate(player)
  player:AddCacheFlags(CacheFlag.CACHE_DAMAGE)
  player:EvaluateItems() -- 现在“MC_EVALUATE_CACHE”回调将触发。
end

请注意,传递给回调的值始终是CacheFlag枚举的精确值。它永远不会是两个或多个CacheFlag的组合。因此,在比较缓存标志时,应始终使用普通相等而不是按位运算符。

DLC Value Name Function Args Optional Args Return Type
8 MC_EVALUATE_CACHE (EntityPlayer,
CacheFlag)
CacheFlag void

MC_POST_PLAYER_INIT⚓︎

在玩家实体初始化后调用。

可选参数可用于指定玩家变体。0 = 玩家,1 = 合作宝宝。

返回任何值都不会影响后续回调的执行。

警告

在某些用例中,访问初始化的实体提供的数据是不完整的。在PostInit回调调用之前,只有PositionVelocitySpawnerTypeSpawnerVariantSpawnerEntity等一些属性被设置,因此可以访问。其他一些属性(例如效果属性或眼泪标志)将不会被设置。如果您想访问这些值,您需要挂钩到MC_POST_PEFFECT_UPDATE并在第一帧检查这些属性。

条件行为

如果在继续已保存的游戏时调用EntityPlayer的某些方法,此回调会导致这些方法静默失败。这种行为是Kilburn在忏悔DLC中故意添加的,以便模组开发者更容易为自定义角色添加初始道具。(这种行为消除了模组开发者使用过滤逻辑来区分新游戏/创世纪使用/合作生成和继续游戏的情况的需要。)

已知以下EntityPlayer方法会失败:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
AddCollectible
AddTrinket
AddKeys
AddCoins
AddBombs
AddGoldenBomb
AddGoldenKey
AddGigaBombs
AddMaxHearts
AddHearts
AddBlackHearts
AddSoulHearts
AddRottenHearts
AddBoneHearts
AddGoldenHearts
AddEternalHearts
AddBrokenHearts
AddCard
AddPill
AddPrettyFly
AddJarFlies
AddJarHearts
AddSoulCharge
AddBloodCharge
AddPoopMana
SetPocketActiveItem

以下EntityPlayer方法已验证会继续触发:

1
2
3
4
5
6
AddBlueFlies
AddBlueSpider
AddWisp
AddItemWisp
AddSwarmFlyOrbital
AddFriendlyDip
DLC Value Name Function Args Optional Args Return Type
9 MC_POST_PLAYER_INIT (EntityPlayer) PlayerVariant* void

MC_USE_PILL⚓︎

当使用药丸时调用。

返回任何值都不会影响后续回调的执行。

示例代码

这段代码会在每次使用药丸时打印“Hello World!”。

1
2
3
4
function mod:myFunction(pillEffectID, playerWhoUsedItem, useFlags)
    print("Hello World!")
end
mod:AddCallback(ModCallbacks.MC_USE_PILL, mod.myFunction)

这段代码只会在每次使用剧毒臭屁药丸时打印“Bad Gas Pill used!”。

1
2
3
4
function mod:myFunction2(pillEffectID, playerWhoUsedItem, useFlags)
    print("Bad Gas Pill used!")
end
mod:AddCallback(ModCallbacks.MC_USE_PILL, mod.myFunction2, PillEffect.PILLEFFECT_BAD_GAS)
DLC Value Name Function Args Optional Args Return Type
10 MC_USE_PILL (PillEffect,
EntityPlayer,
UseFlags [int])
PillEffect void

MC_ENTITY_TAKE_DMG⚓︎

在应用新伤害之前调用。

如果实体具有DAMAGE_COUNTDOWN标志,它将在指定的持续时间内忽略任何其他DAMAGE_COUNTDOWN伤害。

如果实体或玩家应该承受伤害,则返回truenil,否则返回false以忽略伤害。如果实体是EntityPlayerDamageAmount是玩家将承受的半心伤害的整数数量。否则,DamageAmount是生命值的数量。

Bug

返回除nil以外的任何值将阻止后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
11 MC_ENTITY_TAKE_DMG (Entity [Entity],
Amount [float],
DamageFlags [int],
Source [EntityRef],
CountdownFrames [int])
EntityType boolean

MC_POST_CURSE_EVAL⚓︎

此回调在当前关卡计算其种子诅咒后但在强制诅咒应用或禁止诅咒移除之前触发(主要是由于挑战)。

如果玩家带着黑蜡烛效果进入关卡,则跳过此回调。

Curses是一个包含当前诅咒的位掩码。如果返回一个数字,它将用作新的诅咒位掩码,覆盖原始的。使用Isaac.GetCurseIdByName()来获取诅咒ID。

如果返回一个数字,它将是后续执行回调的“Curses”参数。

Bug

返回非整数或nil的值将导致游戏崩溃。

警告

最后一个返回有效返回值的回调将胜出并覆盖先前回调的返回值。

DLC Value Name Function Args Optional Args Return Type
12 MC_POST_CURSE_EVAL (Curses [int]) - int

MC_INPUT_ACTION⚓︎

每当游戏轮询ButtonAction输入时触发此回调,即使是同一动作,每帧也会触发多次。由于它与轮询有关,无论玩家是否实际按下任何特定输入,它都会触发。

此回调用于任意更改输入。例如,您可以完全禁用玩家按下某个按钮。或者,您可以强制玩家按下特定按钮,等等。如果您只想读取某个输入是否被按下,则不应使用此回调,而应在MC_POST_RENDER回调中使用Input.IsActionTriggered方法。

此回调不会影响任何通过Input类读取用户输入的自定义模组代码。

  • Entity - 请求输入的实体。大多数情况下,这将是一个玩家。但是,如果输入不是从实体类读取的,或者是由好友探测器控制的实体,则它也可以为nil
  • InputHook - 这决定了正在轮询的输入类型。这对应于Input.IsActionTriggeredInput.IsActionPressedInput.GetActionValue方法,这些方法会触发此回调。

如果您不想覆盖输入,则返回nil。如果您想覆盖输入,则对于IS_ACTION_PRESSED(0)和IS_ACTION_TRIGGERED(1)InputHook,必须返回一个布尔值;对于GET_ACTION_VALUE(2)InputHook,必须返回一个介于0.0和1.0之间的浮点数。

返回任何值都不会影响后续回调的执行。

执行信息

此回调每秒大约调用1470次。

DLC Value Name Function Args Optional Args Return Type
13 MC_INPUT_ACTION (Entity,
InputHook,
ButtonAction)
InputHook boolean or float

MC_LEVEL_GENERATOR⚓︎

Bug

此回调目前不起作用,游戏永远不会调用它!

DLC Value Name Function Args Optional Args Return Type
14 MC_LEVEL_GENERATOR - - void

MC_POST_GAME_STARTED⚓︎

当您开始游戏时调用此函数。当您继续游戏时,布尔值为true;当您开始新游戏时,布尔值为false

此回调将在MC_POST_NEW_ROOMMC_POST_NEW_LEVEL之后调用。

返回任何值都不会影响后续回调的执行。

示例代码
1
2
3
4
local function onStart(_,bool)
 print(bool)
end
mod:AddCallback(ModCallbacks.MC_POST_GAME_STARTED, onStart)
DLC Value Name Function Args Optional Args Return Type
15 MC_POST_GAME_STARTED (IsContinued [bool]) - void

MC_POST_GAME_END⚓︎

当游戏结束屏幕出现或结局开始播放时调用此函数。当您死亡并出现游戏结束时,布尔值为true;当您获胜并出现结局时,布尔值为false

返回任何值都不会影响后续回调的执行。

示例代码
1
2
3
4
local function onEnd(_,bool)
    print(bool)
end
mod:AddCallback(ModCallbacks.MC_POST_GAME_END, onEnd)
DLC Value Name Function Args Optional Args Return Type
16 MC_POST_GAME_END (IsGameOver [bool]) - void

MC_PRE_GAME_EXIT⚓︎

当您退出游戏时调用此函数。当游戏通常会创建一个可继续的存档时,布尔值为true;当不会时,布尔值为false。当游戏播放结局时,会调用两次。

返回任何值都不会影响后续回调的执行。

示例代码
1
2
3
4
local function onExit(_,bool)
    print(bool)
end
mod:AddCallback(ModCallbacks.MC_PRE_GAME_EXIT, onExit)
DLC Value Name Function Args Optional Args Return Type
17 MC_PRE_GAME_EXIT (ShouldSave [bool]) - void

MC_POST_NEW_LEVEL⚓︎

在过渡到新关卡或阶段后触发。

不直观的是,它总是在MC_POST_NEW_ROOM之后调用。

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
18 MC_POST_NEW_LEVEL - - void

MC_POST_NEW_ROOM⚓︎

在进入房间后触发。

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
19 MC_POST_NEW_ROOM - - void

MC_GET_CARD⚓︎

此回调用于处理卡牌池。

由于并非所有卡牌都有相同的生成几率,因此使用RNG进行种子随机选择。

您可以使用布尔值作为选择的筛选器。

返回值决定将生成什么Card。返回nil以不替换生成的卡牌。

返回的值不会更新后续执行回调的“Card”参数。

IncludePlayingCards参数决定是否包括类型为ItemConfigCardType.SUIT的卡牌。(这是通过查看任天堂Switch版本文件中的LuaJIT API代码确认的。)

Bug

返回非整数或nil的值将导致游戏崩溃。

警告

最后一个返回有效返回值的回调将胜出并覆盖先前回调的返回值。

DLC Value Name Function Args Optional Args Return Type
20 MC_GET_CARD (RNG,
Card,
IncludePlayingCards [bool],
IncludeRunes [bool],
OnlyRunes [bool])
- Card

MC_GET_SHADER_PARAMS⚓︎

返回一个包含自定义着色器参数的键值对的表。

返回表时将跳过其余回调。

DLC Value Name Function Args Optional Args Return Type
21 MC_GET_SHADER_PARAMS (ShaderName [string]) - table

MC_EXECUTE_CMD⚓︎

返回一个用<br />(换行符)分隔的字符串,每行对应控制台输出。CMD是控制台输入的第一个单词。

参数是输入的其余部分。

重要

此函数不会因默认游戏命令(如SpawnDebug)而被调用。

返回字符串会将其打印到控制台。

返回任何值都不会影响后续回调的执行。

Bug

返回除nil以外的任何值将导致游戏崩溃,包括字符串。

示例代码
1
2
3
4
5
6
7
8
function mod.oncmd(_, command, args)
    print(command)
    print(args)
end
mod:AddCallback(ModCallbacks.MC_EXECUTE_CMD, mod.oncmd)
-- executing command "Test apple 1 Pear test" prints
-- Test
-- apple 1 Pear test
DLC Value Name Function Args Optional Args Return Type
22 MC_EXECUTE_CMD (CMD [string],
Parameters [string])
- string

MC_PRE_USE_ITEM⚓︎

在使用道具之前调用。

返回true以阻止道具的默认代码触发。这仍会消耗道具的充能。

Bug

返回除nil以外的任何值也将阻止后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
23 MC_PRE_USE_ITEM (CollectibleType,
RNG,
EntityPlayer,
UseFlags [int],
ActiveSlot,
CustomVarData [int])
CollectibleType boolean

MC_PRE_ENTITY_SPAWN⚓︎

在实体生成之前立即调用。

可选:返回一个包含新值{ Type, Variant, Subtype, Seed }的表,以覆盖生成实体的这些值。

如果您想阻止实体生成,不能返回EntityType为0,因为这会导致游戏崩溃。

有时,如果返回的类型与原始类型不同(例如,将拾取物替换为效果),游戏会崩溃。因此,您应该将拾取物替换为新的拾取物,依此类推。

Bug

返回非表或nil的值将导致游戏崩溃。

警告

最后一个返回有效返回值的回调将胜出并覆盖先前回调的返回值。

DLC Value Name Function Args Optional Args Return Type
24 MC_PRE_ENTITY_SPAWN (EntityType,
Variant [int],
SubType [int],
Position [Vector],
Velocity [Vector],
Spawner [Entity],
Seed [int])
- table

MC_POST_FAMILIAR_RENDER⚓︎

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
25 MC_POST_FAMILIAR_RENDER (EntityFamiliar,
RenderOffset [Vector])
FamiliarVariant void

MC_PRE_FAMILIAR_COLLISION⚓︎

当实体首先与Collider碰撞时,Low值为true。如果Collider首先碰撞,则为false

返回true以忽略碰撞,返回false以进行碰撞但不执行内部代码,返回nil以继续执行内部代码(例如,接触时受到伤害)。 返回任何非nil值将跳过其余回调。

DLC Value Name Function Args Optional Args Return Type
26 MC_PRE_FAMILIAR_COLLISION (EntityFamiliar,
Collider [Entity],
Low [bool])
FamiliarVariant boolean

MC_POST_NPC_INIT⚓︎

返回任何值都不会影响后续回调的执行。

警告

在某些用例中,访问初始化的实体提供的数据是不完整的。在PostInit回调调用之前,只有PositionVelocitySpawnerTypeSpawnerVariantSpawnerEntity等一些属性被设置,因此可以访问。其他一些属性(例如效果属性或眼泪标志)将不会被设置。如果您想访问这些值,您需要挂钩到MC_NPC_UPDATE并在第一帧检查这些属性。

DLC Value Name Function Args Optional Args Return Type
27 MC_POST_NPC_INIT (EntityNPC) EntityType void

MC_POST_NPC_RENDER⚓︎

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
28 MC_POST_NPC_RENDER (EntityNPC,
RenderOffset [Vector])
EntityType void

MC_POST_NPC_DEATH⚓︎

在死亡动画播放后调用。

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
29 MC_POST_NPC_DEATH (EntityNPC) EntityType void

MC_PRE_NPC_COLLISION⚓︎

当实体首先与Collider碰撞时,Low值为true。如果Collider首先碰撞,则为false

返回true以忽略碰撞,返回false以进行碰撞但不执行内部代码,返回nil以继续执行内部代码(例如,接触时受到伤害)。 返回任何非nil值将跳过其余回调。

DLC Value Name Function Args Optional Args Return Type
30 MC_PRE_NPC_COLLISION (EntityNPC,
Collider [Entity],
Low [bool])
EntityType boolean

MC_POST_PLAYER_UPDATE⚓︎

可选参数可用于指定玩家变体。0 = 玩家,1 = 合作宝宝。

返回任何值都不会影响后续回调的执行。

执行信息

此回调每秒调用60次。

DLC Value Name Function Args Optional Args Return Type
31 MC_POST_PLAYER_UPDATE (EntityPlayer) PlayerVariant* void

MC_POST_PLAYER_RENDER⚓︎

可选参数可用于指定玩家变体。0 = 玩家,1 = 合作宝宝。

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
32 MC_POST_PLAYER_RENDER (EntityPlayer,
RenderOffset [Vector])
PlayerVariant* void

MC_PRE_PLAYER_COLLISION⚓︎

当实体首先与Collider碰撞时,Low值为true。如果Collider首先碰撞,则为false

返回true以忽略碰撞,返回false以进行碰撞但不执行内部代码,返回nil以继续执行内部代码(例如,接触时受到伤害)。 返回任何非nil值将跳过其余回调。

可选参数可用于指定玩家变体。0 = 玩家,1 = 合作宝宝。

DLC Value Name Function Args Optional Args Return Type
33 MC_PRE_PLAYER_COLLISION (EntityPlayer,
Collider [Entity],
Low [bool])
PlayerVariant* boolean

MC_POST_PICKUP_INIT⚓︎

返回任何值都不会影响后续回调的执行。

警告

在某些用例中,访问初始化的实体提供的数据是不完整的。在PostInit回调调用之前,只有PositionVelocitySpawnerTypeSpawnerVariantSpawnerEntity等一些属性被设置,因此可以访问。其他一些属性(例如效果属性或眼泪标志)将不会被设置。如果您想访问这些值,您需要挂钩到MC_POST_PICKUP_UPDATE并在第一帧检查这些属性。

DLC Value Name Function Args Optional Args Return Type
34 MC_POST_PICKUP_INIT (EntityPickup) PickupVariant void

MC_POST_PICKUP_UPDATE⚓︎

返回任何值都不会影响后续回调的执行。

执行信息

此回调将在实体存在的第1帧调用。只有当您进入一个已经包含生成的拾取物的房间时,才会在第0帧调用。

DLC Value Name Function Args Optional Args Return Type
35 MC_POST_PICKUP_UPDATE (EntityPickup) PickupVariant void

MC_POST_PICKUP_RENDER⚓︎

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
36 MC_POST_PICKUP_RENDER (EntityPickup,
RenderOffset [Vector])
PickupVariant void

MC_POST_PICKUP_SELECTION⚓︎

在从随机拾取物列表中选择一个拾取物进行生成后调用。返回nil以继续执行默认游戏代码。

返回一个表{ Variant, Subtype }以覆盖指定的值。这也会影响后续执行的回调。

Bug

返回非表或nil的值将导致游戏崩溃。

警告

最后一个返回有效返回值的回调将胜出并覆盖先前回调的返回值。

Bug

EntityPickup包含要生成的拾取物的类型/变体,但在其他方面是一个空类,值为空或为零。

当进入一个包含已经选择的拾取物的房间时,也会调用此回调。当玩家丢弃一张卡牌时,也会调用此回调。这些事实使得此回调对于处理拾取物池没有用处。

DLC Value Name Function Args Optional Args Return Type
37 MC_POST_PICKUP_SELECTION (EntityPickup,
Variant [int],
Subtype [int])
- table

MC_PRE_PICKUP_COLLISION⚓︎

当实体首先与Collider碰撞时,Low值为true。如果Collider首先碰撞,则为false

返回true以忽略碰撞,返回false以进行碰撞但不执行内部代码,返回nil以继续执行内部代码(例如,接触时受到伤害)。 返回任何非nil值将跳过其余回调。

DLC Value Name Function Args Optional Args Return Type
38 MC_PRE_PICKUP_COLLISION (EntityPickup,
Collider [Entity],
Low [bool])
PickupVariant boolean

MC_POST_TEAR_INIT⚓︎

返回任何值都不会影响后续回调的执行。

警告

在某些用例中,访问初始化的实体提供的数据是不完整的。在PostInit回调调用之前,只有PositionVelocitySpawnerTypeSpawnerVariantSpawnerEntity等一些属性被设置,因此可以访问。其他一些属性(例如效果属性或眼泪标志)将不会被设置。如果您想访问这些值,您需要挂钩到MC_POST_TEAR_UPDATE并在第一帧检查这些属性。

DLC Value Name Function Args Optional Args Return Type
39 MC_POST_TEAR_INIT (EntityTear) TearVariant void

MC_POST_TEAR_UPDATE⚓︎

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
40 MC_POST_TEAR_UPDATE (EntityTear) TearVariant void

MC_POST_TEAR_RENDER⚓︎

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
41 MC_POST_TEAR_RENDER (EntityTear,
RenderOffset [Vector])
TearVariant void

MC_PRE_TEAR_COLLISION⚓︎

当实体首先与Collider碰撞时,Low值为true。如果Collider首先碰撞,则为false

返回true以忽略碰撞,返回false以进行碰撞但不执行内部代码,返回nil以继续执行内部代码(例如,接触时受到伤害)。 返回任何非nil值将跳过其余回调。

DLC Value Name Function Args Optional Args Return Type
42 MC_PRE_TEAR_COLLISION (EntityTear,
Collider [Entity],
Low [bool])
TearVariant boolean

MC_POST_PROJECTILE_INIT⚓︎

返回任何值都不会影响后续回调的执行。

警告

在某些用例中,访问初始化的实体提供的数据是不完整的。在PostInit回调调用之前,只有PositionVelocitySpawnerTypeSpawnerVariantSpawnerEntity等一些属性被设置,因此可以访问。其他一些属性(例如效果属性或眼泪标志)将不会被设置。如果您想访问这些值,您需要挂钩到MC_POST_PROJECTILE_UPDATE并在第一帧检查这些属性。

DLC Value Name Function Args Optional Args Return Type
43 MC_POST_PROJECTILE_INIT (EntityProjectile) ProjectileVariant void

MC_POST_PROJECTILE_UPDATE⚓︎

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
44 MC_POST_PROJECTILE_UPDATE (EntityProjectile) ProjectileVariant void

MC_POST_PROJECTILE_RENDER⚓︎

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
45 MC_POST_PROJECTILE_RENDER (EntityProjectile,
RenderOffset [Vector])
ProjectileVariant void

MC_PRE_PROJECTILE_COLLISION⚓︎

当实体首先与Collider碰撞时,Low值为true。如果Collider首先碰撞,则为false

返回true以忽略碰撞,返回false以进行碰撞但不执行内部代码,返回nil以继续执行内部代码(例如,接触时受到伤害)。 返回任何非nil值将跳过其余回调。

DLC Value Name Function Args Optional Args Return Type
46 MC_PRE_PROJECTILE_COLLISION (EntityProjectile,
Collider [Entity],
Low [bool])
ProjectileVariant boolean

MC_POST_LASER_INIT⚓︎

返回任何值都不会影响后续回调的执行。

警告

在某些用例中,访问初始化的实体提供的数据是不完整的。在PostInit回调调用之前,只有PositionVelocitySpawnerTypeSpawnerVariantSpawnerEntity等一些属性被设置,因此可以访问。其他一些属性(例如效果属性或眼泪标志)将不会被设置。如果您想访问这些值,您需要挂钩到MC_POST_LASER_UPDATE并在第一帧检查这些属性。

DLC Value Name Function Args Optional Args Return Type
47 MC_POST_LASER_INIT (EntityLaser) LaserVariant void

MC_POST_LASER_UPDATE⚓︎

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
48 MC_POST_LASER_UPDATE (EntityLaser) LaserVariant void

MC_POST_LASER_RENDER⚓︎

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
49 MC_POST_LASER_RENDER (EntityLaser,
RenderOffset [Vector])
LaserVariant void

MC_POST_KNIFE_INIT⚓︎

返回任何值都不会影响后续回调的执行。

Note

可选参数是一个子类型,不是变体!

警告

在某些用例中,访问初始化的实体提供的数据是不完整的。在PostInit回调调用之前,只有PositionVelocitySpawnerTypeSpawnerVariantSpawnerEntity等一些属性被设置,因此可以访问。其他一些属性(例如效果属性或眼泪标志)将不会被设置。如果您想访问这些值,您需要挂钩到MC_POST_KNIFE_UPDATE并在第一帧检查这些属性。

DLC Value Name Function Args Optional Args Return Type
50 MC_POST_KNIFE_INIT (EntityKnife) KnifeSubType * void

MC_POST_KNIFE_UPDATE⚓︎

返回任何值都不会影响后续回调的执行。

Note

可选参数是一个子类型,不是变体!

DLC Value Name Function Args Optional Args Return Type
51 MC_POST_KNIFE_UPDATE (EntityKnife) KnifeSubType * void

MC_POST_KNIFE_RENDER⚓︎

返回任何值都不会影响后续回调的执行。

Note

可选参数是一个子类型,不是变体!

DLC Value Name Function Args Optional Args Return Type
52 MC_POST_KNIFE_RENDER (EntityKnife,
RenderOffset [Vector])
KnifeSubType * void

MC_PRE_KNIFE_COLLISION⚓︎

当实体首先与Collider碰撞时,Low值为true。如果Collider首先碰撞,则为false

返回true以忽略碰撞,返回false以进行碰撞但不执行内部代码,返回nil以继续执行内部代码(例如,接触时受到伤害)。 返回任何非nil值将跳过其余回调。

Note

可选参数是一个子类型,不是变体!

DLC Value Name Function Args Optional Args Return Type
53 MC_PRE_KNIFE_COLLISION (EntityKnife,
Collider [Entity],
Low [bool])
KnifeSubType * boolean

MC_POST_EFFECT_INIT⚓︎

返回任何值都不会影响后续回调的执行。

警告

在某些用例中,访问初始化的实体提供的数据是不完整的。在PostInit回调调用之前,只有PositionVelocitySpawnerTypeSpawnerVariantSpawnerEntity等一些属性被设置,因此可以访问。其他一些属性(例如效果属性或眼泪标志)将不会被设置。如果您想访问这些值,您需要挂钩到MC_POST_EFFECT_UPDATE并在第一帧检查这些属性。

DLC Value Name Function Args Optional Args Return Type
54 MC_POST_EFFECT_INIT (EntityEffect) EffectVariant void

MC_POST_EFFECT_UPDATE⚓︎

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
55 MC_POST_EFFECT_UPDATE (EntityEffect) EffectVariant void

MC_POST_EFFECT_RENDER⚓︎

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
56 MC_POST_EFFECT_RENDER (EntityEffect,
RenderOffset [Vector])
EffectVariant void

MC_POST_BOMB_INIT⚓︎

返回任何值都不会影响后续回调的执行。

警告

在某些用例中,访问初始化的实体提供的数据是不完整的。在PostInit回调调用之前,只有PositionVelocitySpawnerTypeSpawnerVariantSpawnerEntity等一些属性被设置,因此可以访问。其他一些属性(例如效果属性或眼泪标志)将不会被设置。如果您想访问这些值,您需要挂钩到MC_POST_BOMB_UPDATE并在第一帧检查这些属性。

DLC Value Name Function Args Optional Args Return Type
57 MC_POST_BOMB_INIT (EntityBomb) BombVariant void

MC_POST_BOMB_UPDATE⚓︎

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
58 MC_POST_BOMB_UPDATE (EntityBomb) BombVariant void

MC_POST_BOMB_RENDER⚓︎

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
59 MC_POST_BOMB_RENDER (EntityBomb,
Offset [Vector])
BombVariant void

MC_PRE_BOMB_COLLISION⚓︎

当实体首先与Collider碰撞时,Low值为true。如果Collider首先碰撞,则为false

返回true以忽略碰撞,返回false以进行碰撞但不执行内部代码,返回nil以继续执行内部代码(例如,接触时受到伤害)。 返回任何非nil值将跳过其余回调。

DLC Value Name Function Args Optional Args Return Type
60 MC_PRE_BOMB_COLLISION (EntityBomb,
Collider [Entity],
Low [bool])
BombVariant boolean

MC_POST_FIRE_TEAR⚓︎

当玩家发射眼泪时调用。

返回任何值都不会影响后续回调的执行。

对于重生+,对于其他武器或用孵化器发射的眼泪,此回调不会调用。在忏悔中,它适用于用孵化器发射的眼泪。

DLC Value Name Function Args Optional Args Return Type
61 MC_POST_FIRE_TEAR (EntityTear) - void

MC_PRE_GET_COLLECTIBLE⚓︎

当游戏需要从道具池中获取一个新的随机道具时调用此回调。

您可以从此回调中返回一个整数,以更改返回的道具ID。

它不会因“固定”掉落(如愤怒的炸弹先生)和手动生成的道具而被调用。

返回的值不会改变后续执行回调的参数。

返回任何非nil值将导致MC_POST_GET_COLLECTIBLE被跳过。

Bug

返回非表或nil的值将导致游戏崩溃。

警告

最后一个返回有效返回值的回调将胜出并覆盖先前回调的返回值。

注意事项

ItemPoolType始终指的是原始请求的道具池,无论混沌是否干扰了道具池。但是,您可以通过检查ItemPool::GetLastPool()返回的内容来了解实际将使用哪个道具池。

DLC Value Name Function Args Optional Args Return Type
62 MC_PRE_GET_COLLECTIBLE (ItemPoolType,
Decrease [bool],
Seed [int])
- int

MC_POST_GET_COLLECTIBLE⚓︎

此函数在MC_PRE_GET_COLLECTIBLE之后立即调用,并确定将从给定的ItemPoolType中生成的道具。

如果MC_PRE_GET_COLLECTIBLE返回了任何非nil值,则此回调将被跳过。

您可以从此回调中返回一个整数,以更改返回的道具ID。

返回的值不会更新后续执行回调的“SelectedCollectible”参数。

注意事项

ItemPoolType始终指的是原始请求的道具池,无论混沌是否干扰了道具池。但是,您可以通过检查ItemPool::GetLastPool()返回的内容来了解实际使用了哪个道具池。

Bug

返回非表或nil的值将导致游戏崩溃。

警告

最后一个返回有效返回值的回调将胜出并覆盖先前回调的返回值。

DLC Value Name Function Args Optional Args Return Type
63 MC_POST_GET_COLLECTIBLE (SelectedCollectible [CollectibleType],
ItemPoolType,
Decrease [bool],
Seed [int])
- table

MC_GET_PILL_COLOR⚓︎

当游戏生成药丸并需要确定其药丸颜色时调用此函数。

返回一个PillColor以指定需要选择的药丸颜色。不返回任何值则让游戏处理。

返回的值不会改变后续执行回调的参数。

Bug

返回非表或nil的值将导致游戏崩溃。

警告

最后一个返回有效返回值的回调将胜出并覆盖先前回调的返回值。

DLC Value Name Function Args Optional Args Return Type
64 MC_GET_PILL_COLOR (Seed [int]) - PillColor

MC_GET_PILL_EFFECT⚓︎

游戏获取药丸的PillEffect时每帧调用。可以通过返回所选的PillEffect来选择药丸的效果。

该效果将应用于相同药丸颜色的所有药丸,而不是单个药丸。

返回的值不会更新后续执行回调的“SelectedPillEffect”参数。

Bug

返回非表或nil的值将导致游戏崩溃。

警告

最后一个返回有效返回值的回调将胜出并覆盖先前回调的返回值。

示例代码

这段代码会将每个剧毒臭屁药丸变为钢铁双蛋药丸。

1
2
3
4
5
6
function mod:getPillEffect(pillEffect, pillColor)
    if pillEffect == PillEffect.PILLEFFECT_BAD_TRIP then
    return PillEffect.PILLEFFECT_BALLS_OF_STEEL
    end
end
mod:AddCallback(ModCallbacks.MC_GET_PILL_EFFECT, mod.getPillEffect)
DLC Value Name Function Args Optional Args Return Type
65 MC_GET_PILL_EFFECT (SelectedPillEffect [PillEffect],
PillColor)
- table

MC_GET_TRINKET⚓︎

当需要确定饰品的TrinketType时调用。

可以返回一个TrinketType以更改所选的饰品。

返回的值不会更新后续执行回调的SelectedTrinket参数。

Bug

返回非表或nil的值将导致游戏崩溃。

警告

最后一个返回有效返回值的回调将胜出并覆盖先前回调的返回值。

DLC Value Name Function Args Optional Args Return Type
66 MC_GET_TRINKET (SelectedTrinket [TrinketType],
RNG)
- table

MC_POST_ENTITY_REMOVE⚓︎

每当游戏移除一个Entity时调用。这包括死亡、击杀、移除,甚至在房间过渡时卸载实体或结束游戏。

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
67 MC_POST_ENTITY_REMOVE (Entity) EntityType void

MC_POST_ENTITY_KILL⚓︎

Entity的死亡动画触发之前立即调用。

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
68 MC_POST_ENTITY_KILL (Entity) EntityType void

MC_PRE_NPC_UPDATE⚓︎

如果应忽略NPC的内部AI,则返回true,否则返回nil/不返回任何值。返回任何非nil值将跳过其余回调。

DLC Value Name Function Args Optional Args Return Type
69 MC_PRE_NPC_UPDATE (EntityNPC) EntityType boolean

MC_PRE_SPAWN_CLEAN_AWARD⚓︎

此函数在每个可以清理的房间中触发,包括BOSS和天使房,甚至在通常不会生成奖励的情况下也会触发。

此回调还处理特殊生成,例如BOSS被击杀后的活板门、为当前角色授予完成标记,以及在某些情况下结束游戏(妈妈、超级撒旦和野兽)。因此,在此返回true也将取消这些事件。

如果应忽略生成例程,则返回true,否则返回nil/不返回任何值。返回任何非nil值将跳过其余回调。

Bug

返回true将导致房间的AwardSeed不前进,导致在同一房间中后续调用此回调时具有相同的随机数。要修复此问题,您可以使用以下代码片段手动更新AwardSeed。

1
2
3
4
5
6
7
function mod:preSpawnCleanAward(rng)
    local level = Game():GetLevel()
    local roomDesc = level:GetRoomDesc(level:GetCurrentRoomIndex())
    roomDesc.AwardSeed = rng:GetSeed()
    return true
end
mod:AddCallback(ModCallbacks.MC_PRE_SPAWN_CLEAN_AWARD, mod.preSpawnCleanAward)
DLC Value Name Function Args Optional Args Return Type
70 MC_PRE_SPAWN_CLEAN_AWARD (RNG,
SpawnPosition [Vector])
- boolean

MC_PRE_ROOM_ENTITY_SPAWN⚓︎

在进入新房间时,在生成作为房间布局一部分的实体之前调用。网格实体也会触发此回调,并且它们的类型将与gridspawn命令使用的类型相同。因此,在此回调中,效果被分配类型999而不是1000。

可选:返回一个包含新值{ Type, Variant, Subtype }的表。返回这样的表将覆盖可能自然发生的任何替换,例如敌人变体。

返回任何值都不会影响后续回调的执行。

DLC Value Name Function Args Optional Args Return Type
71 MC_PRE_ROOM_ENTITY_SPAWN (EntityType,
Variant [int],
SubType [int],
GridIndex [int],
Seed [int])
- table

MC_PRE_ENTITY_DEVOLVE⚓︎

当实体通过十面骰或类似物品退化时调用。

如果应忽略内部退化行为,则返回true - 当返回true时,此回调负责生成退化后的实体并移除原始实体。

DLC Value Name Function Args Optional Args Return Type
72 MC_PRE_ENTITY_DEVOLVE (Entity) - boolean

MC_PRE_MOD_UNLOAD⚓︎

在任何模组卸载之前(禁用模组或使用luamod重新加载模组时)调用,模组的表作为参数传递。

DLC Value Name Function Args Optional Args Return Type
73 MC_PRE_MOD_UNLOAD table Mod - void

Last update: July 17, 2025