设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 497|回复: 15
打印 上一主题 下一主题

[有事请教] 有会使用,当前地图有多少宝箱的插件的吗?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1015
在线时间
189 小时
注册时间
2020-9-28
帖子
58
跳转到指定楼层
1
发表于 2024-1-7 11:33:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
10星屑
我用了,发生了错误?有谁知道怎么使用的?
require c. 1 Window getpenis not a fur ction

[pre lang="javascript" file="当前地图宝箱信息"]//=============================================================================
// Mano_ChestList.js
// ----------------------------------------------------------------------------
// Copyright (c) 2017-2017 Sigureya
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// [Twitter]: https://twitter.com/Sigureya/
// [github]:https://github.com/Sigureya/RPGmakerMV
//=============================================================================

/*:
* @plugindesc 查一下当前地图,宝箱的信息
*
* @param balloonId
* @desc chestFlash()中使用的,引出序号的编号。
* @type select
* @option 惊吓
* @value 1
* @option 感動
* @value 2
* @option 音符
* @value 3
* @option 红心
* @value 4
* @option 怒り
* @value 5
* @option 汗
* @value 6
* @option 心情不舒畅
* @value 7
* @option 沈黙
* @value 8
* @option 電球
* @value 9
* @option Zzz
* @value 10
* @option ユーザー定義1
* @value 11
* @option ユーザー定義2
* @value 12
* @option ユーザー定義3
* @value 13
* @option ユーザー定義4
* @value 14
* @option ユーザー定義5
* @value 15
* @default 1
*
* @param flashSound
* @type file
* @dir audio/se
* @default Flash1
*
* @param flashWait
* @desc 插件命令「ChestFlash」在时,设置是否为开启
* @type boolean
* @default true
*
* @param CountChest
* @desc 决定是否使用,简易版盗贼的鼻子
*  面向写活动命令,很麻烦的人
* @type boolean
* @default false
*
* @param CountChestText
* @desc 这是简易版,盗贼鼻子的,已找到宝物信息。
* @default 这一带好像,还有%1个宝物。
* @parent CountChest
*
* @param CountChestEmptyText
* @desc 用简易版盗贼的鼻子
*  未找到宝物时的消息
* @default 这一带的宝物,好像都得到了。
* @parent CountChest
*
*
*
* @author しぐれん(魔のささやき)
* @help
* 在想当做宝箱的活动的,笔记栏里<宝箱>或者<chest>请写下来。
* 是否打开取决于事件页面,是否是最大的页面。
*  没有图形也可以做成宝箱。
*
* 通过在变量的操作(脚本)中,写入以下内容来获取数据。
*
* $gameMap.countChest()
* 所有宝箱的数量
* $gameMap.countOpendChest()
* 打开的宝箱数量
* $gameMap.countClosedChest()
* 未打开的宝箱数量
*
* 以下是可以通过,事件命令“脚本”执行的内容。
* $gameMap.chestFlash()
* 在画面内的宝箱中,让所有没有打开的东西发光。
* 虽然是发光方式,但是通过气球的再生来进行。
*
* 插件命令
*「ChestFlash」因此,没有打开的宝箱,会带有气球
*
*/
/*~struct~CommonDefine:
*  
* @param enableSwitch
* @desc 指定したスイッチがONの時だけ、呼びだしを行います。
* ゲームの進行で機能が追加される場合を想定しています。
* @type switch
*
* @param symbol
* @desc Input.isTriggered()の引数として使われます
*
* @param text
* @desc コマンド名称です
*
* @param mandatory
* @desc inputConfigの方で必須指定されたものとして扱います。
* @type boolean
* @default false
*
* @param keycode
* @desc キーボードの割り当てです
* キーコードは各自調べてください
* @type number
*
* @param padButton
* @desc ゲームパッドの割り当てです
* カッコ内はツクールのデフォルトでの割り当てです
* @type select
* @default -1
* @option non(割り当てなし)
* @value -1
* @type select
* @option button6
* @value 6
* @option button7
* @value 7
* @option button8
* @value 8
* @option button9
* @value 9
* @option button10
* @value 10
* @option button11
* @value 11
* @option button0(ok/決定)
* @value 0
* @option button1(cancel/キャンセル)
* @value 1
* @option button2(shift/ダッシュ)
* @value 2
* @option button3(menu/メニュー)
* @value 3
* @option button4(pageup)
* @value 4
* @option button5(pagedown)
* @value 5
*/

/**
* TODO
* isChestで、宝箱であるかどうかをチェック
* レミラーマは、該当するイベントに対してのアニメーション再生で
*
* 指定要素をカウントする関数で、盗賊の鼻
* タグを切り替えることで、話しかけた重要人物リスト
*
* ■countSelfSwitch(マップID)について
* 他のマップを調べられるレミラーマです。
* マップに親子関係がある場合、このマップを再起的に調べます。
* この関数を使う場合、全てのマップで宝箱に使うセルフスイッチが同じ番号である必要があります。
* 宝箱以外で指定したセルフスイッチを使うと、正常に動作しません。
* イベントの簡単作成で宝箱を作成すると、Aが割り当てられるため、Aにすることをお勧めします。
* 第2引数に'B','C','D'など任意のセルフスイッチに割り当てられるキーを指定することで、
* 他のセルフスイッチも調べられます。
*
* @param oneButtonCountChestCall
* @desc キーボードやゲームパッドから1ボタンで盗賊の鼻を起動します。
* @type boolean
* @on 機能を使う
* @off 機能を使わない
* @default false
*
*/
(function(){
'use strict'

function createCommonDefine(param){
    const obj =JSON.parse(param);
    return{
        mandatory:Boolean(obj.mandatory),
        text:String(obj.text),
        symbol:String(obj.symbol),
        enableSwitch:Number(obj.enableSwitch),
        keycode:String(obj.keycode),
        padButton:String(obj.padButton),
    };
}

function createCountChestSetting(params){
    if(params.CountChest!=='true'){
        return null;
    }
    return {
        countChestEmptyText:String(params.CountChestEmptyText),
        inputDefine :createCommonDefine(params.CountChestinputSetting),
    };
}


const setting=(function(){
    const params = PluginManager.parameters('Mano_ChestList');

    const result ={
        chestTag:'chest',
        chestTagJP:'宝箱',
        balloonId:Number(params.balloonId),
        flashSound:{
            name:String(params.flashSound),
            pan:0,
            pitch:100,
            volume:90,
        },
        flashWait:(params.flashWait==='true'),
        countChestText:String(params.CountChestText),
        countChestEmptyText:String(params.CountChestEmptyText),
        countChest:createCountChestSetting(params),
    };
    return result;
})();



//const setting =createSetting();


const KEYSYMBOL_CHESTCOUNT ='ChestCount';

/**
* @param {[]} array
* @param {Function } func
*/
function countIf(array,func){
    var count =0;
    const len =array.length;
    for (var index = 0; index < len; index++) {
        var elem =array[index];

        if(elem&& func( elem )){
            ++count;
        }
    }
    return count;
}

Game_Event.prototype.isChest=function(){
    const meta =this.event().meta;
    return meta.hasOwnProperty(setting.chestTag) || meta.hasOwnProperty(setting.chestTagJP);
};
Game_Event.prototype.chestFlash =function(){
    const flash =this.isClosedChest();
    if(flash){
        this.requestBalloon(setting.balloonId);
    }
    return flash;
};

/**
* @param {Game_Event} event
*/
function _finalPage(event){
   return event._pageIndex ===event.event().pages.length-1
}
Game_Event.prototype.isOpendChest=function(){
    return  _finalPage(this) &&this.isChest();
};
Game_Event.prototype.isClosedChest =function(){
    return !_finalPage(this) &&this.isChest();
};

Game_Map.prototype.countOpendChest =function(){
    return countIf(this._events,function(event){
        return event.isOpendChest();
    });
};
Game_Map.prototype.countClosedChest =function(){
    return countIf(this._events,function(event){
        return event.isClosedChest();
    });
};
Game_Map.prototype.countChest =function(){
    return countIf(this._events,function(event){
        return event.isChest();
    });
};
/**
* @return {Game_Event} 最後にバルーンを出したイベント
*/
Game_Map.prototype.chestFlash =function(){
    const events = this.events();
    var lastEvent=null;
    events.forEach(function(event){
        if(event){
            if(event.chestFlash()){
                lastEvent =event;
            }
        }
    });
    if(lastEvent){
        AudioManager.playSe(setting.flashSound);
    }
    return lastEvent;
};

Game_Map.prototype.showChestCountMessage =function(){
    const count = this.countClosedChest();
    if( count >0  ){
        $gameMessage.add(setting.countChestText.format(count));
    }else{
        $gameMessage.add(setting.countChestEmptyText);
    }
};

Game_Interpreter.prototype.chestFlash=function(){
    const event = $gameMap.chestFlash();
    if(setting.flashWait && !!event ){
        this._character =event;
        this.setWaitMode('balloon');
    }
};

const Game_Interpreter_pluginCommand =Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand =function(command, args){
    if(command ==='ChestFlash'){
        this.chestFlash();
        return;
    }
    if(command ==='CountChest'){
        $gameMap.showChestCountMessage()
        return;
    }
    Game_Interpreter_pluginCommand.apply(this,arguments);
};

})();
[/pre]

最佳答案

查看完整内容

额,你试试脚本直接填$gameMap.showChestCountMessage() 不是变量赋值填脚本,而是事件指令-脚本填$gameMap.showChestCountMessage() 就像填写插件指令一样

Lv3.寻梦者

梦石
0
星屑
3790
在线时间
983 小时
注册时间
2016-12-6
帖子
367
2
发表于 2024-1-7 11:33:16 | 只看该作者
云端城主 发表于 2024-1-8 16:22
原来是我代码大小写出错了。
但是为什么使用 简易版盗贼的鼻子,功能代码又出错了? ...

额,你试试脚本直接填$gameMap.showChestCountMessage()
不是变量赋值填脚本,而是事件指令-脚本填$gameMap.showChestCountMessage()
就像填写插件指令一样
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3790
在线时间
983 小时
注册时间
2016-12-6
帖子
367
3
发表于 2024-1-7 12:26:29 | 只看该作者
贴个完整的报错页面,按F8打开控制台截图
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1015
在线时间
189 小时
注册时间
2020-9-28
帖子
58
4
 楼主| 发表于 2024-1-7 17:07:19 | 只看该作者
shiroin 发表于 2024-1-7 12:26
贴个完整的报错页面,按F8打开控制台截图




回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3790
在线时间
983 小时
注册时间
2016-12-6
帖子
367
5
发表于 2024-1-7 17:17:29 | 只看该作者
这个$gameMap. countClosedChest(1)是你自己输入的脚本?
如果你是想获知地图上未开锁宝箱的数量,直接输入$gameMap.countClosedChest()就行了,这个函数不接受额外的参数
如果还会报错,你应该注意下事件的注释是不是没正确书写
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1015
在线时间
189 小时
注册时间
2020-9-28
帖子
58
6
 楼主| 发表于 2024-1-7 20:44:04 | 只看该作者
shiroin 发表于 2024-1-7 17:17
这个$gameMap. countClosedChest(1)是你自己输入的脚本?
如果你是想获知地图上未开锁宝箱的数量,直接输入 ...

那要怎么输入代码?试过很久都发生错误,不知道是不是脚本就有问题?
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3790
在线时间
983 小时
注册时间
2016-12-6
帖子
367
7
发表于 2024-1-7 20:57:54 | 只看该作者
本帖最后由 shiroin 于 2024-1-7 21:27 编辑


这个插件我刚也下来玩了一下,也遇到一样的报错原因,排查了下发现是因为这个插件识别宝箱有两个条件,一是宝箱事件需要有<宝箱>或<chest>的"备注",是"备注"而不是"注释",这个我一开始也搞混了……
二是宝箱事件的事件页数要有2页以上,只有一页会始终判定为"被打开的宝箱",$gameMap.countClosedChest()会无法搜索到这一类的宝箱
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1015
在线时间
189 小时
注册时间
2020-9-28
帖子
58
8
 楼主| 发表于 2024-1-7 21:28:12 | 只看该作者
本帖最后由 云端城主 于 2024-1-7 23:40 编辑
shiroin 发表于 2024-1-7 20:57
这个插件我刚也下来玩了一下,也遇到一样的报错原因,排查了下发现是因为这个插件识别宝箱有两个条件,一 ...


通过在变量的操作(脚本)中,写入以下内容来获取数据。
*
* $gameMap.countChest()
* 所有宝箱的数量
* $gameMap.countOpendChest()
* 打开的宝箱数量
* $gameMap.countClosedChest()
* 未打开的宝箱数量
*
* 以下是可以通过,事件命令“脚本”执行的内容。
* $gameMap.chestFlash()
* 在画面内的宝箱中,让所有没有打开的东西发光。
* 虽然是发光方式,但是通过气球的再生来进行。
*
* 插件命令
*「ChestFlash」因此,没有打开的宝箱,会带有气球

我的设置跟脚本没什么,关系了。这个脚本插件太奇怪了?




回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3790
在线时间
983 小时
注册时间
2016-12-6
帖子
367
9
发表于 2024-1-7 21:33:39 | 只看该作者
云端城主 发表于 2024-1-7 21:28
通过在变量的操作(脚本)中,写入以下内容来获取数据。
*
* $gameMap.countChest()

你重新看下我的回复,刚编辑过了,如果还没搞好,就发下你作为宝箱的事件页截图给我看看
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1015
在线时间
189 小时
注册时间
2020-9-28
帖子
58
10
 楼主| 发表于 2024-1-7 23:04:38 | 只看该作者
本帖最后由 云端城主 于 2024-1-8 14:05 编辑
shiroin 发表于 2024-1-7 20:57
这个插件我刚也下来玩了一下,也遇到一样的报错原因,排查了下发现是因为这个插件识别宝箱有两个条件,一 ...


通过在变量的操作(脚本)中,写入以下内容来获取数据。
*
* $gameMap.countChest()
* 所有宝箱的数量
* $gameMap.countOpendChest()
* 打开的宝箱数量
* $gameMap.countClosedChest()
* 未打开的宝箱数量
*
* 以下是可以通过,事件命令“脚本”执行的内容。
* $gameMap.chestFlash()
* 在画面内的宝箱中,让所有没有打开的东西发光。
* 虽然是发光方式,但是通过气球的再生来进行。
*
* 插件命令
*「ChestFlash」因此,没有打开的宝箱,会带有气球

就是上面的代码调用功能,就会出错?没效果啊。不知道是不是脚本就有问题?还是调用的问题?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-28 20:54

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表