Project1
标题: 请问可以用脚本调用插件指令吗? [打印本页]
作者: pandeng421 时间: 2023-2-6 00:24
标题: 请问可以用脚本调用插件指令吗?
比如插件定义了一个命令:
插件指令:>多线程 : 串行执行 : 公共事件[1]
我不想用系统的“插件指令栏”来输入这个指令,想要在脚本里输入这个指令,可行不?
作者: 天一教主 时间: 2023-2-6 00:24
本帖最后由 天一教主 于 2023-2-6 22:17 编辑
看了下,它这个重要的参数是1,3,5 其中0,2,4是没用的。。
$gameMap._interpreter.pluginCommand('>地图永久漂浮文字',[':','漂浮文字[120]',':','修改内容文本',':','文本[12122121]'])
$gameMap._interpreter.pluginCommand('>地图永久漂浮文字',[':','漂浮文字[120]',':','修改内容文本',':','文本[12122121]'])
如果是文本的话 还可以加空格,试了下
$gameMap._interpreter.pluginCommand('>地图永久漂浮文字',[':','漂浮文字[120]',':','修改内容文本',':','文本[12122121',']'])
$gameMap._interpreter.pluginCommand('>地图永久漂浮文字',[':','漂浮文字[120]',':','修改内容文本',':','文本[12122121',']'])
这个的结果是 12122121空格 多一个空格,再多一个空格,就在'[文本12',']'中加' '就行了
直接执行的脚本应该是这个
$gameSystem._drill_GFPT_dataTank[120]['context'] = '12122121';
$gameTemp._drill_GFPT_windowTank[120].drill_refreshMessageFromData();
$gameSystem._drill_GFPT_dataTank[120]['context'] = '12122121';
$gameTemp._drill_GFPT_windowTank[120].drill_refreshMessageFromData();
作者: 天一教主 时间: 2023-2-6 08:20
本帖最后由 天一教主 于 2023-2-6 08:23 编辑
$gameMap._interpreter.pluginCommand('命令',['参数组(要一个数组)'])
$gameMap._interpreter.pluginCommand('>多线程',['串行执行','公共事件[1]'])
作者: Fan723 时间: 2023-2-6 08:59
插件指令本来就是调用脚本的,只要进插件文件去找插件指令字符串,你就能找到所对应的调用的脚本。
作者: pandeng421 时间: 2023-2-6 19:49
天一教主 发表于 2023-2-6 08:20
$gameMap._interpreter.pluginCommand('命令',['参数组(要一个数组)'])
$gameMap._interpreter.pluginCo ...
这个貌似不行啊,我试了个可以看到结果的命令:
>地图永久漂浮文字 : 漂浮文字[1] : 修改内容文本 : 文本[这是一段文字]
改成:
$gameMap._interpreter.pluginCommand('>地图永久漂浮文字',['漂浮文字[120]','修改内容文本','文本[12122121]']) 是不行的。
我看了下插件源码,改了下:
$gameMap._interpreter.pluginCommand(">地图永久漂浮文字",["漂浮文字[",120,"]","修改内容文本","文本[","asdasd","]"])
貌似">地图永久漂浮文字"和["漂浮文字[",120,"]"都能识别出来了,但后面的指令没有识别,没有效果。
大神再帮我看看问题出在哪里?
相关源码如下:
var _drill_GFPT_pluginCommand = Game_Interpreter.prototype.pluginCommand
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_drill_GFPT_pluginCommand.call(this, command, args);
if(command === ">地图永久漂浮文字"){
/*-----------------对象获取------------------*/
var text_id = null;
if(args.length >= 2){
text_id = String(args[1]);
text_id = text_id.replace("漂浮文字[","");
text_id = text_id.replace("]","");
text_id = Number(text_id);
if( text_id != null && args.length >= 6 ){
var type = String(args[3]);
var temp1 = String(args[5]);
if( type == "修改内容文本" ){
var data = $gameSystem._drill_GFPT_dataTank[ text_id ];
if( this.drill_GFPT_isDataExist( text_id ) == false ){ return; }
if( temp1.indexOf("字符串[") != -1 ){
if( Imported.Drill_CoreOfString ){
temp1 = temp1.replace("字符串[","");
temp1 = temp1.replace("]","");
temp1 = $gameStrings.value( Number(temp1) );
data['context'] = temp1;
if( $gameTemp._drill_GFPT_windowTank[ text_id ] != null ){
$gameTemp._drill_GFPT_windowTank[ text_id ].drill_refreshMessageFromData();
}
}else{
alert( "【Drill_GaugeFloatingPermanentText.js 地图UI - 永久漂浮文字】\n" +
"缺少 字符串核心 插件,插件指令执行失败。");
}
}else{
var data_str = ""; //(支持空格的多行结构)
for(var m = 5; m < args.length ; m++ ){
data_str += String(args[ m ]);
if( m < args.length-1 ){ data_str += " "; }
}
data_str = data_str.replace("文本[","");
data_str = data_str.replace(/\]$/,""); //(去掉末尾的])
data['context'] = data_str;
if( $gameTemp._drill_GFPT_windowTank[ text_id ] != null ){
$gameTemp._drill_GFPT_windowTank[ text_id ].drill_refreshMessageFromData();
}
}
}
}
作者: pandeng421 时间: 2023-2-6 20:59
大神可以看看我下面回帖里贴的插件源码,这个怎么用脚本调用?谢谢
作者: soulsaga 时间: 2023-2-6 21:48
$gameMap._interpreter.pluginCommand(">地图永久漂浮文字,[漂浮文字[120],修改内容文本,文本[12122121]]")
$gameMap._interpreter.pluginCommand(">地图永久漂浮文字,[漂浮文字[120],修改内容文本,文本[12122121]]")
作者: pandeng421 时间: 2023-2-6 22:31
我用你之前的命令也搞定了,数组数对了放上对应参数:
$gameMap._interpreter.pluginCommand(">地图永久漂浮文字",[,120,,"修改内容文本",,"jkjklj"])
这样就OK了。
你后面的更好,直接可以变更内容,十分感谢!!
作者: pandeng421 时间: 2023-2-6 23:09
大神好!!再额外问个问题:
/*-----------------移动方式------------------*/
if( text_id != null && args.length >= 6 ){
var type = String(args[3]);
var temp1 = String(args[5]);
var temp2 = String(args[7] || "1");
if( type == "瞬间移动" || type == "匀速移动" || type == "增减速移动" || type == "弹性移动" || type == "抛物线移动" ){
temp2 = temp2.replace("时间[","");
temp2 = temp2.replace("]","");
temp2 = Number(temp2);
else if( temp1.indexOf("位置[") != -1 ){
temp1 = temp1.replace("位置[","");
temp1 = temp1.replace("]","");
temp1 = temp1.split(/[,,]/);
pos = [ Number(temp1[0]),
Number(temp1[1]) ];
var m_data = {
"x":Number(pos[0]),
"y":Number(pos[1]),
"time":temp2,
"type":type,
}
$gameSystem.drill_GFPT_moveTo( text_id, m_data );
这个是“>地图永久漂浮文字 : 漂浮文字[1] : 瞬间移动 : 位置[100,200]” 里的位置坐标,这个X,Y在数组里怎么写呢?应该都在数组5里,咋写两个数字……
作者: pandeng421 时间: 2023-2-6 23:18
$gameSystem._drill_GFPT_dataTank[120]['x'] = 255;
$gameSystem._drill_GFPT_dataTank[120]['y'] = 600;
我已经知道可以这样写,但是我还是想了解下,如果用写进数组的方法,该咋写? 谢谢大神……
作者: 天一教主 时间: 2023-2-7 08:40
>地图永久漂浮文字 : 漂浮文字[1] : typeP : 位置[xP,yP] : timeP
这个是把四个参数封装在一个对象里,传的是对象,用数组是没用的,time要填不需要也要填1
- $gameSystem.drill_GFPT_moveTo( text_id, {'x':xP,'y':yP,'time':timeP,'type':typeP} );
复制代码- $gameSystem.drill_GFPT_moveTo( text_id, {'x':100,'y':200,'time':1,'type':'瞬间移动'} );
复制代码
作者: pandeng421 时间: 2023-2-7 13:40
好的,十分感谢!!
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |