Project1
标题: 有木有大佬知道选项选择的脚本代码是什么,不是只能看... [打印本页]
作者: 任小雪 时间: 2021-12-1 21:03
标题: 有木有大佬知道选项选择的脚本代码是什么,不是只能看...
有木有大佬知道选项选择的脚本代码是什么,不是只能看那种,要能触发的,论坛里貌似找不到呢(百度也没有),
指的对话选择里的那种
作者: 夏虫沉默 时间: 2021-12-1 21:03
本帖最后由 夏虫沉默 于 2021-12-2 09:23 编辑
function choiceTest(){
choices = []; params = [];
$gameMessage.setChoices(choices, 0,1)
choices.push("选项1");choices.push("选项2");
choices.push("选项3");choices.push("选项4");
params.push();
$gameMessage.setChoiceCallback((n)=>{//设置选择选项执行的回调方法
if(n==0){//第一个选项选中后执行
console.log('0123');
}
if(n==1){//第2个选项选中后执行
console.log(123);
}
if(n==2){//第3个选项选中后执行
console.log(23);
}
if(n==3){//第4个选项选中后执行
console.log(3);
}
}
);
}
function choiceTest(){
choices = []; params = [];
$gameMessage.setChoices(choices, 0,1)
choices.push("选项1");choices.push("选项2");
choices.push("选项3");choices.push("选项4");
params.push();
$gameMessage.setChoiceCallback((n)=>{//设置选择选项执行的回调方法
if(n==0){//第一个选项选中后执行
console.log('0123');
}
if(n==1){//第2个选项选中后执行
console.log(123);
}
if(n==2){//第3个选项选中后执行
console.log(23);
}
if(n==3){//第4个选项选中后执行
console.log(3);
}
}
);
}
作者: 夏虫沉默 时间: 2021-12-1 22:16
我在rpg_windows.js文件下3935行找到以下方法
Window_ChoiceList.prototype.callOkHandler = function() {//调用“确定”的处理方法
$gameMessage.onChoice(this.index());//当前行被选中时
this._messageWindow.terminateMessage();
this.close();
};
Window_ChoiceList.prototype.callOkHandler = function() {//调用“确定”的处理方法
$gameMessage.onChoice(this.index());//当前行被选中时
this._messageWindow.terminateMessage();
this.close();
};
在rpg_object.js文件下9116行找到以下方法// When [**]这个可能是选项被选中时
Game_Interpreter.prototype.command402 = function() {
if (this._branch[this._indent] !== this._params[0]) {
this.skipBranch();
}
return true;
};
// When [**]这个可能是选项被选中时
Game_Interpreter.prototype.command402 = function() {
if (this._branch[this._indent] !== this._params[0]) {
this.skipBranch();
}
return true;
};
作者: 入坑小萌新 时间: 2021-12-2 00:04
choices = []; params = [];
$gameMessage.setChoices(choices, 0)
choices.push("I love you1");choices.push("I love you2");
choices.push("I love you3");choices.push("I love you4");
choices.push("I love you5");choices.push("I love you6");
choices.push("I love you7");choices.push("I love you8");
params.push()
是不是这个?
作者: 仇九 时间: 2021-12-2 01:05
[line]2[/line]
SceneManager._scene._messageWindow._choiceWindow.processOk()
相当于玩家按下确认键。
[line]2[/line]
SceneManager._scene._messageWindow._choiceWindow.select(选项编号)
让选项框选择某个选项。
[line]2[/line]
已测试无误。
[line]2[/line]
SceneManager是管理场景变动的静态对象,它的_scene属性是指当前的场景(在地图上的时候就是指Scene_Map)。
_messageWindow是Scene_Map下的一个管理信息窗口的窗口对象,是Window_Message的实例。
_choiceWindow是_messageWindow下的选项选项的窗口对象,是Window_ChoiceList的实例。
那指令的意思就是执行选择选项的那个窗口实例(地址在SceneManager._scene._messageWindow._choiceWindow)的processOk函数或select函数。
[line]2[/line]
作者: 任小雪 时间: 2021-12-2 07:26
choices = []; params = [];
$gameMessage.setChoices(choices, "选项1")
choices.push("选项1");choices.push("选项2");
choices.push("选项3");choices.push("选项4");
choices.push("选项5");choices.push("选项6");
params.push()
if (SceneManager._scene._messageWindow._choiceWindow.select(0)&&SceneManager._scene._messageWindow._choiceWindow.processOk()){console.log("1");};
差那么一丢丢判定……现在貌似是在自动给我选择选项了
作者: 仇九 时间: 2021-12-2 09:52
本帖最后由 仇九 于 2021-12-2 10:15 编辑
任小雪 发表于 2021-12-2 07:26
choices = []; params = [];
$gameMessage.setChoices(choices, "选项1")
choices.push("选项1");choices ...
呃……我还以为你想知道的是“在选择选项的时候,如何在玩家不自己按下确认键的时候,系统帮助玩家按下确认键,也就是选择选项/选项选择”。
你这么做是想让选项框里的文字能动态变化吗?
[line]2[/line]
如果单纯显示的话,那这样就行:
this._params = [["测试1","测试2"],1,0,2,0];
this._indent = 0;
this.command102();
[line]2[/line]
其中this._params的详细格式是这样:
[选项数组,取消选项,默认选项,窗口位置类型,背景类型]
选项数组:选项的文字,比如["测试1","测试2"]
取消选项:写-2时代表分支,
写-1时代表不允许,
写0时代表选项1(选项1代表选项数的第一个元素,也就是上面的"测试1"),
写1时代表选项2(选项2代表选项数的第二个元素,也就是上面的"测试2"),
以此类推。
默认选项:写-1时代表无默认选项。
写0时代表选项1(选项1代表选项数的第一个元素,也就是上面的"测试1"),
写1时代表选项2(选项2代表选项数的第二个元素,也就是上面的"测试2"),
以此类推。
窗口位置类型:0代表左侧,1代表中间,2代表右侧。
背景类型:0代表窗口,1代表暗淡,2代表透明。
[line]2[/line]
但是这样还是只能看不能选(实际上所谓的不能选是说不能指定选择哪个选项后执行哪些指令吧?我还是不确定你到底问的是啥,如果能说得更清楚些就好了。)
如果要为每个选项添加对应的指令的话在下面再添加一个“事件指令中的选项”就好了。
看下面这个图中的例子:
一看会觉得系统会先显示一个有"测试1"和"测试2"两个选项的窗口,然后再显示一个有"1","2","3","4","5"五个选项的窗口,但实际上不是。
系统会显示一个有"测试1"和"测试2"两个选项的窗口,
如果你选择了"测试1",那么直接就会执行下方那个选项指令中第一个选项框的console.log("选择了选项1"),然后执行下方的console.log("选项完全结束");,
若是选择了"测试2",那么直接就会执行下方那个选项指令中第二个选项框的console.log("选择了选项2"),然后执行下方的console.log("选项完全结束");。
也就是说上方的那个脚本指令中的内容覆盖了下方选项框中的设定。永远不会显示那个有"1","2","3","4","5"五个选项的窗口。
而且在这种情况下下方的console.log("选择了选项3"),console.log("选择了选项4")和console.log("选择了选项5")都不可能执行,因为你上面只有["测试1","测试2"]两个选项。
如果再添加一个"测试3",也就是说变成["测试1","测试2","测试3"],那么玩家选择"测试3"的时候就会执行console.log("选择了选项3"),然后再执行console.log("选项完全结束");。
这应该能满足我理解的那个需求了。
[line]2[/line]
按照上方的那个要求,只执行脚本而不执行事件指令那很简单,这样就行:
this._params = [["测试1","测试2"],1,0,2,0];
this._indent = 0;
this.command102();
$gameMessage.setChoiceCallback((n)=>{
if(n==0){console.log('0123');}
if(n==1){console.log(123);}
if(n==2){console.log(23);}
if(n==3){console.log(3);}
}
这个和2楼的脚本等同。
作者: 任小雪 时间: 2021-12-2 10:20
不是不是,其实我所求的,不过是将原本的事件脚本化(自制的全员插件)而已,当然,暂时还有其他一些事件也是没攻关的,
这个选项事件,是我在玩家取消锻造时确定确实要取消锻造时会用到(暂时)
知识盲区有很多,暂时比较明显的变成游戏的全存档变量了(玩家用的窗口色调调整卡会用到,指,完全关掉游戏再点开时能用到)
作者: 笑谈风声 时间: 2021-12-27 11:44
好东西,收藏了
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |