Skip to content

全局类 "Isaac"⚓︎

提示

你可以通过全局表Isaac来获取该类。

访问Isaac类的方法时,需要使用.(句点)而不是:(冒号)!

示例代码
1
local player = Isaac.GetPlayer()

函数⚓︎

Add·Callback ()⚓︎

void AddCallback ( table modRef, ModCallback|string callbackId, table callbackFn, int entityId )⚓︎

添加一个MOD回调。

推荐使用Mod ReferenceAddCallback函数而非该函数。


Add·Pill·Effect·To·Pool ()⚓︎

int AddPillEffectToPool ( int pillEffect )⚓︎

将一个胶囊效果pillEffect加入到胶囊池中。

返回加入的胶囊的胶囊颜色


Add·Priority·Callback ()⚓︎

void AddPriorityCallback ( table modRef, ModCallback|string callbackId, CallbackPriority priority, table callbackFn, int entityId )⚓︎

添加一个MOD回调。该回调具有优先级,并根据优先级决定执行顺序。

推荐使用Mod ReferenceAddPriorityCallback函数而非该函数。


Console·Output ()⚓︎

void ConsoleOutput ( string text )⚓︎

向控制台打印一行文本。

示例代码

你可以使用该示例作为替代。

1
2
3
4
5
6
Isaac.ConsoleOutput("This is a Test.")
-- 输出: This is a Test.

-- 替代以下代码:
print("This is a Test.")
-- 输出: This is a Test.


Count·Bosses ()⚓︎

int CountBosses ( )⚓︎

返回本房间内的头目数量。


Count·Enemies ()⚓︎

int CountEnemies ( )⚓︎

返回本房间内的敌人数量。


Count·Entities ()⚓︎

int CountEntities ( Entity Spawner, EntityType Type = EntityType.ENTITY_NULL, int Variant = -1, int SubType = -1 )⚓︎

返回本房间内的满足指定需求的实体数量。

  • Spawner为该实体的创建者。(可以为nil
  • Type为该实体的类型。(可以为EntityType.ENTITY_NULL
  • VariantSubtype为该实体的变体和子类型。(可以为-1

Debug·String ()⚓︎

void DebugString ( string str )⚓︎

向日志文件打印一行文本。你可以在这里找到文件:%systemdrive%\Users\%username%\Documents\My Games\Binding of Isaac Repentance\log.txt

示例代码

这行代码会向log.txt打印"This is a Test."

1
2
Isaac.DebugString("This is a Test.")
-- Output: [INFO] - Lua Debug: This is a Test.


Execute·Command ()⚓︎

string ExecuteCommand ( string command )⚓︎

执行一个控制台指令。

关于如何使用指令,见控制台教程


Explode ()⚓︎

void Explode ( Vector pos, Entity source, float damage )⚓︎

在pos位置生成一次爆炸。其伤害源实体为source,伤害为damage。


Find·By·Type ()⚓︎

table FindByType ( EntityType Type, int Variant = -1, int SubType = -1, boolean Cache = false, boolean IgnoreFriendly = false )⚓︎

返回符合Type,Variant和SubType的所有实体。如果Variant/SubType为-1,表示包括任意Variant/SubType的实体。Cache为true时会缓存结果,一帧执行多次时可以使用。

如果一个实体拥有EntityFlag.FLAG_NO_QUERY实体标志,它不会出现在查询结果中。如果需要获取拥有该实体标志的实体,应该改为使用GetRoomEntities函数。


Find·In·Radius ()⚓︎

table FindInRadius ( Vector Position, float Radius, int Partitions = 0xFFFFFFFF )⚓︎

返回中心为Position,半径为Radius范围内的所有由Partitions筛选的实体(另见EntityPartition enum)(包括所有 = 0xffffffff)

该函数不根据实体距离中心的距离,而是根据他们加载的顺序排序。


Get·Built·In·Callback·State ()⚓︎

boolean GetBuiltInCallbackState ( function callbackId )⚓︎

获取内置回调状态。

如果ID为callbackId的回调会被游戏执行,返回true。如果不存在ID为callbackId的回调,会返回false


Get·Callbacks ()⚓︎

table GetCallbacks ( function callbackId, boolean createIfMissing )⚓︎

获取所有ID为callbackId的MOD回调。这些回调会表示为一个表,更多信息请查阅自定义回调教程

游戏会将所有ID为callbackId的回调加进一个表里,callbackId是其索引,而值则是一个包含所有ID为callbackId的回调的表。

如果createIfMissingtrue,并且不存在ID为callbackId的回调,游戏会自动创建一个包含ID为callbackId的回调的空表,用于增加新的回调。这个空表包含一个具有默认元函数__matchParams的元表,而这个元函数会在添加回调,并且检查指定的额外参数是否匹配时被调用。每当一个回调被添加时,这个元函数也会被使用,其参数createIfMissingtrue

如果createIfMissingfalse或者nil,并且不存在ID为callbackId的回调,该函数返回一个空表。


Get·Card·Id·By·Name ()⚓︎

int GetCardIdByName ( string cardHudName )⚓︎

基于“pocketitems.xml”文件中定义的“hud”属性返回卡牌ID 。如果找不到具有该“hud”属性值的卡,则返回-1

警告

该函数的名称具有误导性,该函数只能使用卡片的“hud”属性值,而不能使用卡牌的名称。

漏洞

此函数不适用于原版卡片/符文,因为它们在pocketitems.xml文件中的条目中没有定义“hud”属性。您需要使用Card枚举来获取原版的ID。

示例代码

以下代码获取一张MOD卡牌的卡牌ID。

1
2
3
<pocketitems>
    <card type="tarot" pickup="1" description="some description"  name="My new card" hud="my_modded_card" />
</pocketitems>
1
Isaac.GetCardIdByName("my_modded_card")


Get·Challenge ()⚓︎

int GetChallenge ( )⚓︎

返回玩家当前正在进行的挑战的ID。如果玩家没有进行任何挑战,则返回0。


Get·Challenge·Id·By·Name ()⚓︎

int GetChallengeIdByName ( string challengeName )⚓︎

根据挑战的名称返回挑战的ID。(文件:challenges.xml)如果找不到具有该名称的挑战,则返回-1(区分大小写)。

示例代码

以下代码获取挑战“愚人节”的挑战ID。

1
2
Isaac.GetChallengeIdByName("Aprils fool")
--返回:32


Get·Costume·Id·By·Path ()⚓︎

int GetCostumeIdByPath ( string path )⚓︎

根据外观的文件路径返回外观的ID。(文件:costumes2.xml)如果找不到具有该路径的外观,则返回-1

示例代码

以下代码获取套装“拉了!”的外观ID。

1
2
Isaac.GetCostumeIdByPath("gfx/characters/n027_Transformation_Poop.anm2")
--返回:27


Get·Curse·Id·By·Name ()⚓︎

int GetCurseIdByName ( string curseName )⚓︎

根据诅咒的名称返回诅咒的ID。(文件:curses.xml)如果找不到具有该名称的诅咒,则返回-1

示例代码

以下代码获取未知诅咒的诅咒ID。

1
2
Isaac.GetCurseIdByName("Curse of the Unknown")
--返回:4


Get·Entity·Type·By·Name ()⚓︎

int GetEntityTypeByName ( string entityName )⚓︎

根据实体的名称返回实体的EntityType。(文件:entities2.xml)如果找不到具有该名称的实体,则返回0

注意

没有该函数的SubType版本。

示例代码

以下代码获取燃烧裂口尸的EntityType。

1
2
Isaac.GetEntityTypeByName("Flaming Gaper")
--返回:10


Get·Entity·Variant·By·Name ()⚓︎

int GetEntityVariantByName ( string entityName )⚓︎

根据实体的名称返回实体的Variant。(文件:entities2.xml)如果找不到具有该名称的实体,则返回-1

注意

没有该函数的SubType版本。

示例代码

以下代码获取燃烧裂口尸的Variant。

1
2
Isaac.GetEntityVariantByName("Flaming Gaper")
--返回:2

Get·Frame·Count ()⚓︎

int GetFrameCount ( )⚓︎

返回整个游戏正在运行的帧数。即使游戏暂停或在主菜单中,计数器也会增加!

1秒大致等于60帧。

因此,此函数的工作方式与Game():GetFrameCount()截然不同。


Get·Free·Near·Position ()⚓︎

Vector GetFreeNearPosition ( Vector pos, float step )⚓︎

返回距离位置pos最近的空区域。


Get·Item·Config ()⚓︎

ItemConfig GetItemConfig ( )⚓︎

获取ItemConfig对象。

这是唯一可以访问ItemConfig对象的方法。


Get·Item·Id·By·Name ()⚓︎

int GetItemIdByName ( string itemName )⚓︎

根据道具名称返回道具的ID。(文件:items.xml)如果找不到具有该名称的道具,则返回-1

示例代码

以下代码获取一个MOD道具的ID。

1
<passive id="1" name="My Mod Item" description="some description" gfx="my_modded_item.png"/>
1
Isaac.GetItemIdByName("My Mod Item")


Get·Music·Id·By·Name ()⚓︎

int GetMusicIdByName ( string musicName )⚓︎

返回一个音乐的ID。(文件:music.xml)如果找不到具有该名称的音乐,则返回-1

示例代码

以下代码获取标题界面的音乐ID。

1
2
Isaac.GetMusicIdByName("Title Screen")
--返回:61

Get·Pill·Effect·By·Name ()⚓︎

int GetPillEffectByName ( string pillEffect )⚓︎

根据胶囊效果的名称返回胶囊效果ID。(文件:pocketitems.xml)如果找不到具有该名称的胶囊效果,则返回-1

示例代码

以下代码获取“我能永远看清!”的胶囊效果ID。

1
2
Isaac.GetPillEffectByName("I can see forever!")
--返回:23

Get·Player ()⚓︎

EntityPlayer GetPlayer ( int playerID = 0 )⚓︎

返回与提供的玩家ID匹配的EntityPlayer。玩家ID从0开始并向上递增。例如,当扮演雅各布和以扫时,雅各布的玩家ID将为0,以扫的玩家ID为1。

如果传递了无效的玩家ID(例如-20或20),则函数将假定玩家索引为0。

如果在任何玩家初始化之前调用此函数(即在主菜单中调用它),则此函数会返回nil

此函数与Game():GetPlayer()相同。

示例代码
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
local function getPlayers()
  local game = Game()
  local numPlayers = game:GetNumPlayers()

  local players = {}
  for i = 0, numPlayers - 1 do
    local player = Isaac.GetPlayer(i)
    table.insert(players, player)
  end

  return players
end

Get·Player·Type·By·Name ()⚓︎

PlayerType GetPlayerTypeByName ( string playerName , boolean Tainted = false )⚓︎

根据角色的名称返回角色类型(ID)。(文件:players.xml)如果找不到具有该名称的角色,则返回-1

警告

在《忏悔》中,角色名字被设置为可翻译文本,并且会使用翻译占位符作为他们的“基本名称”。例如,要获取该隐的角色类型,你需要使用名称#CAIN_NAME而非Cain。 建议对MOD角色使用该函数,而对原版角色直接使用PlayerType枚举。

示例代码

以下代码获取阿撒泻勒的角色类型。

1
2
3
4
5
-- 忏悔:
Isaac.GetPlayerTypeByName("#AZAZEL_NAME") --返回: 7

-- 胎衣+:
Isaac.GetPlayerTypeByName("Azazel") --Returns: 7

Get·Random·Position ()⚓︎

Vector GetRandomPosition ( )⚓︎

返回当前房间内的随机位置。

返回值是一个向量,表示世界坐标中的位置。


Get·Room·Entities ()⚓︎

Entity[] GetRoomEntities ( )⚓︎

返回一个可遍历的表,该表包含调用函数时房间中的所有实体。

此行为不同于Room::GetEntities(),后者返回一个原始指针,指向在任何给定时间存储房间所有实体的数组。

对于大多数用例,建议使用Isaac.GetRoomEntities()

示例代码

以下代码打印房间中每个实体的Type、Variant和SubType。

1
2
3
for i, entity in ipairs(Isaac.GetRoomEntities()) do
    print(entity.Type, entity.Variant, entity.SubType)
end

Get·Screen·Height ()⚓︎

float GetScreenHeight ( )⚓︎

获取游戏屏幕的高度(以像素为单位)。


Get·Screen·Point·Scale ()⚓︎

float GetScreenPointScale ( )⚓︎

返回一个表示屏幕“缩放”程度的数字。

根据游戏窗口的分辨率,可以是1.02.0等。

视频演示

演示游戏窗口的大小如何改变此函数返回的值。


Get·Screen·Width ()⚓︎

float GetScreenWidth ( )⚓︎

获取游戏屏幕的宽度(以像素为单位)。


Get·Sound·Id·By·Name ()⚓︎

int GetSoundIdByName ( string soundName )⚓︎

根据音效的名称返回音效的ID。(文件:sounds.xml)如果找不到具有该名称的音效,则返回-1

示例代码

以下代码获取名为"Custom Sound Effect"的音效ID。

1
Isaac.GetSoundIdByName("Custom Sound Effect")

Get·Text·Width ()⚓︎

int GetTextWidth ( string str )⚓︎

基于“terminus8”字体(与Isaac.RenderText()中使用的字体相同),返回给定字符串的宽度(以像素为单位)。


Get·Time ()⚓︎

int GetTime ( )⚓︎

返回自计算机操作系统启动以来的当前时间(以毫秒为单位)。

这与经过了多少帧无关,对于测量经过了多少实时时间非常有用。(帧并不是一个很好的时间指标,因为游戏会在每层过渡动画和房间过渡动画时加载新数据,然后锁定。)

例如,您可以使用它来实现基于实时的屏幕速度运行计时器,或者将一个函数的性能影响与另一个函数进行比较。


Get·Trinket·Id·By·Name ()⚓︎

int GetTrinketIdByName ( string trinketName )⚓︎

根据饰品的名称返回其饰品ID。(文件:items.xml)如果找不到具有该名称的饰品,则返回-1

示例代码

以下代码获取一个MOD饰品的ID。

1
<trinket id="1" name="My Mod Trinket" description="some description" gfx="my_modded_trinket.png"/>
1
Isaac.GetTrinketIdByName("My Mod Trinket")


Grid·Spawn ()⚓︎

GridEntity GridSpawn ( GridEntityType gridEntityType, int variant, Vector position, boolean forced )⚓︎

在给定位置(世界坐标)生成一个网格实体

Bugs

“forced”参数可以用于在某些特定情况下覆盖给定位置的网格实体。例如:不能覆盖一块岩石,但可以覆盖已经被炸毁的岩石。你可以通过Isaac.GetFreeNearPosition查询一个位置是否被认为是空地。通过检查返回的网格实体的类型,可以确保正确进行了替换。否则,你可能需要删除给定位置的网格实体,然后在其位置生成其他内容。

例如,要在房间中央生成一块超级标记石头:

1
2
3
4
local game = Game()
local room = game:GetRoom()
local centerPos = room:GetCenterPos()
Isaac.GridSpawn(GridEntityType.GRID_ROCK_SS, 0, centerPos, true)

Has·Mod·Data ()⚓︎

boolean HasModData ( table modRef )⚓︎

如果您的mod使用“SaveModData()”函数存储了数据——换句话说,如果你的mod的数据文件夹中有一个“saveX.dat”文件,则返回true

有3个“saveX.dat”文件,每个存档一个。数字表示它对应的存档,由游戏自动确定。

对于AB+,它们存储在“main.lua”文件旁边的mod文件夹中。

对于忏悔,它们存储在游戏文件中“mods”文件夹旁边的“data”文件夹中。

建议使用Mod ReferenceHasData函数而非该函数。


Load·Mod·Data ()⚓︎

string LoadModData ( table modRef )⚓︎

返回使用“SaveModData()”函数存储在“saveX.dat”文件中的字符串。如果您的mod的数据中没有“saveX.dat”文件,此函数将返回一个空字符串。

有3个“saveX.dat”文件,每个存档一个。数字表示它对应的存档,由游戏自动确定。

如果在主菜单中调用此函数,默认情况下,它将返回存档1的保存数据。

对于AB+,它们存储在“main.lua”文件旁边的mod文件夹中。

对于忏悔,它们存储在游戏文件中“mods”文件夹旁边的“data”文件夹中。

建议使用Mod ReferenceLoadData函数而非该函数。


Register·Mod ()⚓︎

void RegisterMod ( table modRef, string modName, int apiVersion )⚓︎

在游戏中注册一个表以使用Mod Reference

建议改用全局的RegisterMod函数。


Remove·Callback ()⚓︎

void RemoveCallback ( table modRef, ModCallback|string callbackId, table callbackFn )⚓︎

移除一个MOD回调。

推荐使用Mod ReferenceRemoveCallback函数而非该函数。


Remove·Mod·Data ()⚓︎

void RemoveModData ( table modRef )⚓︎

如果存在储存的“saveX.dat”文件,将其删除。

有3个“saveX.dat”文件,每个存档一个。数字表示它对应的存档,由游戏自动确定。

建议使用Mod ReferenceRemoveData函数而非该函数。


Render·Scaled·Text ()⚓︎

void RenderScaledText ( string str, float X, float Y, float ScaleX, float ScaleY, float R, float G, float B, float A )⚓︎

在屏幕上渲染缩放后的文本。X和Y坐标需要在屏幕坐标(X[0,~500) Y[0,~350) )中。ScaleX、ScaleY、R、G、B和A需要在[0,1]之间。

某些比例值可能会导致字体显示变形和像素化。

示例代码

以下代码在屏幕上显示玩家的位置。

1
2
3
local player = Isaac.GetPlayer()
local text = "X: " .. player.Position.X .. ", Y: " .. player.Position.Y
Isaac.RenderScaledText(text, 50, 50, 0.5, 0.5, 1, 1, 1, 1)

Render·Text ()⚓︎

void RenderText ( string str, float X, float Y, float R, float G, float B, float A )⚓︎

在屏幕上渲染默认大小的文本。X和Y坐标需要在屏幕坐标(X[0,~500) Y[0,~350) )中。ScaleX、ScaleY、R、G、B和A需要在[0,1]之间。

示例代码

以下代码在屏幕上显示玩家的位置。

1
2
3
local player = Isaac.GetPlayer()
local pos = player.Position
Isaac.RenderText("X: "..pos.X.." Y: "..pos.Y, 50, 50, 1 ,1 ,1 ,1 )

Run·Callback ()⚓︎

void RunCallback ( ModCallback|string callbackId, ...)⚓︎

执行所有ID为callbackId的MOD回调,会在第一个返回值出现时中断,并使该函数返回该值。


Run·Callback·With·Param ()⚓︎

void RunCallbackWithParam ( ModCallback|string callbackId, object param, ...)⚓︎

Runs all callbacks added under callbackId, breaking on the first return and returning that value.

执行所有可选参数为paramcallbackId的MOD回调,会在第一个返回值出现时中断,并使该函数返回该值。


Save·Mod·Data ()⚓︎

void SaveModData ( table modRef, string data )⚓︎

向“saveX.dat”存储一串字符串。存储的数据在重开一局和游戏重启之后也会存在,因此非常适合存储持久数据。

有3个“saveX.dat”文件,每个存档一个。数字表示它对应的存档,由游戏自动确定。

对于AB+,它们存储在“main.lua”文件旁边的mod文件夹中。

对于忏悔,它们存储在游戏文件中“mods”文件夹旁边的“data”文件夹中。

建议使用Mod ReferenceSaveData函数而非该函数。


Screen·To·World ()⚓︎

Vector ScreenToWorld ( Vector pos )⚓︎

将屏幕坐标(也称为窗口坐标)转换为世界坐标。这可以用于根据屏幕上的某一点获取房间中的特定位置。

世界坐标为x[0,inf) y[0,inf)。


Screen·To·World·Distance ()⚓︎

Vector ScreenToWorldDistance ( Vector pos )⚓︎


Set·Built·In·Callback·State ()⚓︎

void SetBuiltInCallbackState ( ModCallbacks callbackId, boolean state )⚓︎

Sets whether callbacks under callbackId will be ran by the game. The game uses this to activate a ModCallbacks once a callback is added under one, or deactivate them when those callbacks have been removed.

设置内置回调状态。

作用未知。


Spawn ()⚓︎

Entity Spawn ( int entityType, int entityVariant, int entitySubtype, Vector position, Vector velocity, Entity Spawner )⚓︎

在给定位置生成一个实体。如果位置不是空的,会在最近的空位置生成。

存在两个生成实体的函数。一个是Isaac.Spawn()(该函数),用于以随机种子生成一个实体;另一个是Game():Spawn(),用于以特定种子生成一个实体。但由于一个BUG,Isaac.Spawn()有概率生成种子为0的实体,会导致游戏崩溃。如果需要生成一个拥有随机种子的实体,应该总是使用一个自定义的辅助函数,其使用Random()获取种子,在种子为0时将其改为1,并且使用Game():Spawn()来生成实体。(IsaacScript用户使用spawn辅助函数就可以了,它自己就会使用Game.Spawn。)

示例代码

以下代码在本房间的中央生成一个随机道具。

1
Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_COLLECTIBLE, 0, Vector(320,280), Vector(0,0), nil)

Bug

由于随机种子使用的是Random()函数,会导致生成的实体的InitSeed可能为0。如果这个实体要用到随机数生成器,游戏会崩溃。


World·To·Render·Position ()⚓︎

Vector WorldToRenderPosition ( Vector pos )⚓︎

将世界坐标(又名游戏坐标)转换为渲染坐标。这可以用于在房间中的固定位置渲染事物。渲染坐标系为x[0,inf) y[0,inf)。它定义当前房间中渲染平面上的位置。

示例代码

以下代码在鼠标光标的位置渲染“Test”,与游戏是否处于全屏无关。

1
2
3
local mousePos = Input.GetMousePosition(true)
local renderpos = Isaac.WorldToRenderPosition(mousePos) * 2
Isaac.RenderText("test", renderpos.X, renderpos.Y, 1 ,1 ,1 ,1 )


World·To·Screen ()⚓︎

Vector WorldToScreen ( Vector pos )⚓︎

将世界坐标(又名游戏坐标)转换为屏幕(又名窗口)坐标。这可以用来渲染实体旁边的东西。屏幕坐标系为x[0,inf) y[0,inf)。通常情况下,它一直到~500x ~300y。

返回值向量包含整数值或以.5结尾的数字。

示例代码

以下代码在角色的位置渲染“Test”,会跟随角色移动。

1
2
3
local player = Isaac.GetPlayer()
local screenpos = Isaac.WorldToScreen(player.Position)
Isaac.RenderText("test", screenpos.X, screenpos.Y, 1 ,1 ,1 ,1 )


World·To·Screen·Distance ()⚓︎

Vector WorldToScreenDistance ( Vector pos )⚓︎



Last update: August 12, 2024