流星As脚本引擎1.2.0

流星As脚本引擎1.2.0

  • 语言:简体中文
    作者:滴风
    大小:2.67 MB
    环境:/Meteor ALL
  • 热度:
    类型:.rar
    日期:2022-09-12
  • 评分:


    喜欢就打个分吧!

图片

详情

# 流星.net As脚本引擎  


## 版本 1.2.0


## 介绍


As脚本引擎可以运行AngelScript脚本,旨在替换游戏内置的Pst脚本引擎,具有更高的性能和开发效率。


***


## 版本变动


1.2.0

  + 修复APIUpdateAIAttrib(charId)无效的问题

  + 示例“图片测试”增加层叠功能

  + 修复娱乐菜单的瞬移


+ 1.1.0

  + 新增API Command(...),可以用来执行隐藏命令,例如瞬移moveto,更换皮肤loadmych, 更换武器weapon

  + 新增API GetPosition(int targetIndex), 可以用来获取目标位置,配合SetTarget(...)使用

  + 新增API GetWeapon2 GetWeaponType2,分别是获取副武器的ID和类型

  + 修复API GameOver

  + 修复API GetChar GetAnyChar,这两个API最多支持输入2个参数

  + 支持 Scene_OnCharacterEvent 事件

  + 从游戏版本1.07到9.08都可以使用 GetAnger GetWeapon GetWeaponType

  + 控制台支持输入中文

  + 修复 载入Reshade后 会崩溃的问题

  + 修复 字体缩放

  + 进入游戏主菜单后才调用脚本的OnUpdate方法,避免图形界面显示在开场动画之上

  + 娱乐菜单添加瞬移、换皮肤、换武器功能


***


## 截图



f097b500f507e45b11d3d557c1920543.png

***


## 特点  


+ 无需运行游戏即可检查语法错误


+ 仅需极少量的修改,即可从Pst脚本迁移到As脚本


+ 可在关卡(任务)脚本里调用场景API


+ 可在关卡(任务)脚本里接收场景事件


+ 支持自启动脚本,进入游戏后自动运行,适用于全局执行,支持接收所有游戏事件和调用所有游戏API


+ 更全面的脚本API,包括字符串操作、动态数组操作、字段操作、图形界面操作、文件操作


+ 自动热重载,在游戏运行时,如果检测到脚本文件被修改,就会自动重新加载到游戏,并尽可能还原所有变量值


+ 可以在游戏内实时调用脚本API


+ 可加载由第三方制作的脚本DLL,可用来增加额外的脚本API


+ 解除关卡人数和阵营人数限制,所有NPC都能动


***


## 目录结构  


``` tree

游戏目录

├─AsScripts                       # 存放 脚本

│  ├─.vscode                      # vscode 的配置目录

│  ├─Level                        # 存放 关卡和NPC脚本

│  ├─PScriptLib                   # 存放 共享的脚本

│  ├─sn01                         # 存放 钟乳洞的场景脚本

│  └─Startup                      # 存放 自启动脚本

└─UserData                        # 存放 用户数据,可以是图片,文本txt,表格csv

    ├─Engine                      # 存放 引擎文件

    ├─Saves                       # 存放 存档

    └─ScriptDlls                  # 存放 第三方脚本DLL

```


***


## 支持的游戏版本


+ 1.07.16

+ 9.07.16

+ 1.08.1

+ 9.08.1

+ 1.08.3


***


## As脚本引擎安装方法


+ 将压缩包里的主文件里面的所有文件和文件夹,拖到游戏文件夹内并覆盖

+ 运行其他工具文件夹里的Hxd.exe

+ 把游戏执行文件Meteor.exe 拖进去

+ CTRL+R 打开替换窗口

+ 在搜索框填入 ADVAPI32.dll

+ 在替换框填入 AsEngine.dll

+ 选举类型选 字符串

+ 搜索方向选 全部

+ 点击全部替换, 会显示替换了1次

+ 保存


***


## 脚本安装方法


+ 对于关卡脚本,把 snxx_.as 放到 AsScripts\\Level 内

+ 对于场景脚本,把 snxx.as 放到 AsScripts\\snxx 内

+ 对于NPC脚本,把 npcxxxx.as 放到 AsScripts\\Level 内

+ 对于自启动脚本,把 xxxx.as 放到 AsScripts\\Startup 内


载入关卡、场景、NPC时,如果 AsScripts 内有对应的As脚本,会加载As脚本,否则会加载游戏自带的Pst脚本


***


## 常见问题


+ 为什么调用 OpenFile ReadFile WriteFile CloseFile 时,老提示错误?

  + 这几个游戏API是游戏1.08版本或以上才有的,要用刚才提到的exe才可以使用  

+ 为什么不能显示图形界面?

  + 需要安装图像增强补丁才能显示图形界面

+ 为什么调用 Command(...) 无效?

  + 需要使用其他工具打开游戏的隐藏命令功能,比如这个工具[流星隐藏命令开启器v2.0(通用版)](https://www.lxres.com/BuDingGongJu/ShiYongGongJu/9.html)



***


## 脚本模板  


位于脚本模板文件夹内,可通过复制一份之后,删减里面的内容来制作属于自己的As脚本


+ 自启动脚本模板.as

+ 关卡脚本模板.as

+ 场景脚本模板.as

+ NPC脚本模板.as


***


## 示例脚本


将以下脚本放到 自启动目录 即可查看效果


+ 控制台.as 和 Console文件夹

    可实时输入并调用API,输出调试信息,对于开发脚本非常有用,按CTRL+F1切换显示窗口

+ 娱乐菜单.as  

    实现菜单功能,支持多级菜单和翻页功能,在场景内按J键切换显示  

    内含动态数组操作、字典操作、回调函数操作、图形界面操作、跨脚本调用操作

+ 图片测试.as  

    演示在图形界面里显示图片的功能

+ 存档功能.as  

    演示如何读写存档, 在场景内按F5保存, 按F6读取


***


## 自带脚本


+ Level\sn01_.as  

    一个从Pst转换到As的关卡脚本

+ sn01\sn01.as  

    一个从Pst转换到As的场景脚本

+ Level\npc01_*.as  

    多个从Pst转换到As的NPC脚本

+ PScriptLib\\*.as  

    多个从Pst转换到As的共享脚本文件


***


## 访问权限控制


由于考虑到安全性问题,因此作出以下限制:


+ 可读取 游戏目录内的所有文件

+ 可写入 游戏目录\UserData\Saves\

+ 对于单个脚本模块,最大可写入1 MB的文件,这对于存档来说足够用了


***


## 脚本事件


### 启动游戏时


+ 载入AsScripts\\Startup文件夹内的所有脚本

+ 自启动脚本  

  + OnStart()


### 进入场景时,战局开始前


+ 检查是否有AsScripts\snXX\snXX.as场景脚本文件

+ 如果有,则载入As脚本,否则,载入Pst脚本

+ 场景脚本  

  + Scene_OnLoad()  

  + Item_OnLoad(int id)  


### 进入关卡时,战局开始前


+ 检查是否有AsScripts\Level\snXX_.as场景脚本文件

+ 如果有,则载入As脚本,否则,载入Pst脚本

+ 关卡脚本  

  + OnInit();


### 开始战局时


+ 场景脚本  

  + Scene_OnInit()  

  + Item_OnInit(int id)  

+ 关卡脚本  

  + OnStart()  

  + Item_OnInit(int id)  

+ 自启动脚本  

  + Level_OnStart()

  + Scene_OnInit()

  + Item_OnInit(int id)  


### 道具被接触时


+ 场景脚本  

  + Item_OnTouch(int id, int characterId);  

+ 关卡脚本  

  + Item_OnTouch(int id, int characterId);  

+ 自启动脚本  

  + Item_OnTouch(int id, int characterId);  


### 道具被攻击时


+ 场景脚本  

  + Item_OnAttack(int id, int characterId);  

+ 关卡脚本  

  + Item_OnAttack(int id, int characterId);  

+ 自启动脚本  

  + Item_OnAttack(int id, int characterId);  


### 道具被捡起时


+ 场景脚本  

  + Item_OnPickUp(int id, int characterId);  

+ 关卡脚本  

  + Item_OnPickUp(int id, int characterId);  

+ 自启动脚本  

  + Item_OnPickUp(int id, int characterId);  


### NPC进入场景时


+ NPC脚本

  + OnInit(int This);

  + OnStart();

+ 自启动脚本

  + NPC_OnStart(int npcId);


### 游戏更新时


+ 场景脚本  

  + Scene_OnIdle()  

  + Item_OnIdle(int id)  

+ 关卡脚本  

  + OnUpdate()

  + Item_OnIdle(int id)  

+ NPC脚本  

  + OnUpdate()  

+ 自启动脚本  

  + OnUpdate()  

  + Item_OnIdle(int id)  


### 场景结束时


+ 场景脚本  

  + Scene_OnStop()  

+ 自启动脚本  

  + Scene_OnStop()  


### 场景内角色死亡或重生时


+ 场景脚本

  + Scene_OnCharacterEvent(int characterId, int event)

+ 关卡脚本

  + Scene_OnCharacterEvent(int characterId, int event)

+ 自启动脚本

  + Scene_OnCharacterEvent(int characterId, int event)


### 关卡结束时


+ 关卡脚本  

  + OnStop()  

+ 自启动脚本  

  + Level_OnStop()  


### 退出游戏时  


+ 自启动脚本  

  + OnStop()  


### 脚本文件被修改后且成功热重载时


+ 自启动脚本

  + OnStop()

  + OnStart()


***


## 脚本API


### 所有API声明都在  AsScripts/Api.h 里,可以用VSCode打开查看


### 分类


+ 游戏API  

  + 游戏内置的API  

  功能跟游戏内置的一模一样,这里不作介绍  

  <https://www.lxres.com/LiuXingBiJi/1563.html>

+ 实用API

  + string 字符串  

  <https://urho3d.io/documentation/HEAD/class_urho3_d_1_1_string.html>

  + array 动态数组  

  <https://www.angelcode.com/angelscript/sdk/docs/manual/doc_datatypes_arrays.html>  

  实际上跟文档里的有点区别,方法首字母全部改成大写

  + dictionary 字典  

  <https://www.angelcode.com/angelscript/sdk/docs/manual/doc_datatypes_dictionary.html>

  + ImGui 图形界面

  <>

  + File 文件  

  <https://urho3d.io/documentation/HEAD/class_urho3_d_1_1_file.html>

  <https://urho3d.io/documentation/HEAD/class_urho3_d_1_1_deserializer.html>

  <https://urho3d.io/documentation/HEAD/class_urho3_d_1_1_serializer.html>

  + Color 颜色  

  <https://urho3d.io/documentation/HEAD/class_urho3_d_1_1_color.html>

  + Image 图像  

  <https://urho3d.io/documentation/HEAD/class_urho3_d_1_1_image.html>

  + Vector2 IntVector2 二维向量  

  <https://urho3d.io/documentation/HEAD/class_urho3_d_1_1_vector2.html>

  <https://urho3d.io/documentation/HEAD/class_urho3_d_1_1_int_vector2.html>

  + Vector3 IntVector3 三维向量  

  <https://urho3d.io/documentation/HEAD/class_urho3_d_1_1_vector3.html>

  <https://urho3d.io/documentation/HEAD/class_urho3_d_1_1_int_vector3.html>

  + Vector4 IntVector4 四维向量  

    <https://urho3d.io/documentation/HEAD/class_urho3_d_1_1_vector4.html>

 

+ 新增API


```c

// 返回场景道具名称

string GetSceneItemName(int itemId);

// 执行单行脚本

bool ExecuteLine(const string & cmd);

// 载入图片,并返回图片句柄

Image@ LoadImageFile(const string &);

// 显示鼠标

void ShowMouse();

// 跨脚本执行函数

bool ExecuteFunction(int scriptId, const string& functionName, arg1, arg2, ...);

// 跨脚本执行函数

bool ExecuteFunction(const string& scriptName, const string& functionName, arg1, arg2, ...);

// 返回关卡脚本Id

int GetLevelScriptId();

// 返回关卡脚本的文件名

string GetLevelScriptName();

// 返回Npc脚本的Id

int GetNpcScriptId(int npcId);

// 返回Npc脚本的文件名

string GetNpcScriptName(int scriptId);

// 返回场景脚本Id

int GetSceneScriptId();

// 返回场景脚本文件名

string GetSceneScriptName();

// 禁止执行单行脚本,禁止之后,直到游戏重新启动才解除禁止

void DisableExecuteLine();

// 执行游戏指令,就是按\键输入的那些命令, 参考 https://www.lxres.com/LiuXingBiJi/1551.html

void Command(const string&in cmd, const string&in arg1, ...);

// 获取目标位置, 配合 SetTarget(targetIndex, ...) 使用

Vector3 GetPosition(int targetIndex);

// 获取副武器的ID

int GetWeapon2(int characterId);

// 获取副武器的类型

int GetWeaponType2(int characterId);

```


***


## 从 Pst脚本 迁移(转换)到 As脚本


+ 数组


    ```c

    // Pst写法

    int g_shuzu[100];  

    // As写法

    array<int> g_shuzhu(100);

    // 或

    int[] g_shuzhu(100) ;

    ```


+ 函数体


    ```c

    // Pst写法

    OnStart()

    {

        int a = 0

        if (a == 0)

        {

            return 0;

        }

    }

    // As写法, 函数声明前面需要加上返回值类型

    int OnStart()

    {

        int a = 0

        if (a == 0)

        {

            return 0;

        }

        return 1;

    }

    ```


+ 特殊游戏API


    ```c

    // Pst写法

    rand(1);

    // As写法

    Rand(1);

    ```


+ 字符串内的文件路径


    ```c

    // Pst 写法

    "UserData\Saves\npctest.sav"

    // As 写法

    "UserData/Saves/npctest.sav"

    ```


***


## 脚本开发环境


安装 [VSCode](https://code.visualstudio.com/) 之后,再从扩展商店里安装以下扩展


+ AngelScript 作者 René Sackers  

提供As代码高亮显示的功能  

+ Output Colorizer 作者 IBM  

提供输出窗口文本的高亮显示功能

+ Run on Save 作者 emeraldwalk  

提供按保存键时执行特定任务的功能


具体操作


+ 打开 VSCode ,并打开文件夹 “游戏目录\AsScripts”

+ 编辑该文件夹内的任意一个文件,按Ctrl+S或者保存键

+ 此时会自动调用游戏目录下的ScriptCompiler进行编译,编译结果会输出到Run On Save窗口里,可以 CTRL+单击 窗口里的行信息来定位出错位置

1656167141174340.png


***


## 脚本DLL开发


可自行查阅 ScriptDllSample  


+ 需要 Visual Studio 2017 或以上版本(平台工具集 v141、v142、v143...)

+ 如果调试期间意外崩溃,请尝试切换到Release模式下并关闭优化来编译调试



展开全文…
收起全文…

下载

评论

友情链接

取消

感谢您对我们的支持!

扫码支持
扫码打赏,所有打赏资金将用于网站建设!

打开支付宝扫一扫,即可进行扫码打赏哦