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

Project1

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

[有事请教] MV水面行走(不改图块)

[复制链接]

Lv2.观梦者

梦石
0
星屑
694
在线时间
95 小时
注册时间
2020-7-20
帖子
28
跳转到指定楼层
1
发表于 2020-8-17 12:54:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本人用MV做了一个RPG游戏,想做一个类似宝可梦冲浪技能一样让玩家在水面上行走的效果。请问各位大佬,MV怎么在不改图块的情况下让玩家可以利用某个物品或技能在水面上行走?

Lv4.逐梦者

梦石
0
星屑
5654
在线时间
959 小时
注册时间
2015-2-6
帖子
161

开拓者

2
发表于 2020-8-17 14:31:06 | 只看该作者
本帖最后由 戏蹑群星斗 于 2020-8-17 14:36 编辑

游泳&潜水插件,改一改插件设置就能像在水上行走了
JAVASCRIPT 代码复制
  1. //=============================================================================
  2. // Swimming&Diving.js
  3. // by Tsukimi
  4. // Last Updated: 2017.11.21
  5. //=============================================================================
  6.  
  7.  
  8. /*:en
  9.  * @plugindesc Swimming and diving System
  10.  * @author Tsukimi
  11.  *
  12.  * @param diving/surface Region 1
  13.  * @desc diving/surface Region 1 (0 = don't use)
  14.  * @type number
  15.  * @min 0
  16.  * @max 255
  17.  * @default 21
  18.  *
  19.  * @param diving/surface Region 2
  20.  * @desc diving/surface Region 2 (0 = don't use)
  21.  * @type number
  22.  * @min 0
  23.  * @max 255
  24.  * @default 22
  25.  *
  26.  * @param diving/surface Region 3
  27.  * @desc diving/surface Region 3 (0 = don't use)
  28.  * @type number
  29.  * @min 0
  30.  * @max 255
  31.  * @default 23
  32.  *
  33.  * @param diving/surface Region 4
  34.  * @desc diving/surface Region 4 (0 = don't use)
  35.  * @type number
  36.  * @min 0
  37.  * @max 255
  38.  * @default 0
  39.  *
  40.  * @param diving/surface Region 5
  41.  * @desc diving/surface Region 5 (0 = don't use)
  42.  * @type number
  43.  * @min 0
  44.  * @max 255
  45.  * @default 0
  46.  * @param diving/surface Region 6
  47.  * @desc diving/surface Region 6 (0 = don't use)
  48.  * @type number
  49.  * @min 0
  50.  * @max 255
  51.  * @default 0
  52.  *
  53.  * @param diving/surface Region 7
  54.  * @desc diving/surface Region 7 (0 = don't use)
  55.  * @type number
  56.  * @min 0
  57.  * @max 255
  58.  * @default 0
  59.  * @param diving/surface Region 8
  60.  * @desc diving/surface Region 8 (0 = don't use)
  61.  * @type number
  62.  * @min 0
  63.  * @max 255
  64.  * @default 0
  65.  *
  66.  * @param diving/surface Region 9
  67.  * @desc diving/surface Region 9 (0 = don't use)
  68.  * @type number
  69.  * @min 0
  70.  * @max 255
  71.  * @default 0
  72.  *
  73.  * @help
  74.  *
  75.  * Plugin Command:
  76.  */
  77.  
  78.  
  79. /*:
  80.  * @plugindesc 遊泳&ダイビング システム
  81.  * @author ツキミ
  82.  *
  83.  * @param 選択肢自動表示
  84.  * @desc 条件が満たされると選択肢を自動表示するかどうか。
  85.  * スイッチによる制御も可能。 記入例:true / false / 12
  86.  * @default true
  87.  *
  88.  * @param 水中減速
  89.  * @desc 水の抵抗力による減速(デフォルト移動速度は4)
  90.  * @type number
  91.  * @min 0
  92.  * @max 2
  93.  * @decimals 1
  94.  * @default 0.3
  95.  *
  96.  * @param 水面歩行画像変更
  97.  * @desc 水面にいる時に自動で 「元ファイル名_swim」の画像に変更
  98.  * 例:actor.png→ actor_swim.png ※フォロワーにも有効
  99.  * @type boolean
  100.  * @default false
  101.  *
  102.  * @param 水中歩行画像変更
  103.  * @desc 水中にいる時に自動で 「元ファイル名_swim」の画像に変更
  104.  * 例:actor.png→ actor_swim.png ※フォロワーにも有効
  105.  * @type boolean
  106.  * @default false
  107.  *
  108.  * @param ------- 選択肢の文字列 設定
  109.  * @desc
  110.  *
  111.  * @param 「水の中に入る」選択肢の文字列
  112.  * @desc 「水の中に入る」選択肢の文字列
  113.  * @default  水の中に入る 
  114.  *
  115.  * @param 「水の中から出る」選択肢の文字列
  116.  * @desc 「水の中から出る」選択肢の文字列
  117.  * @default  水の中から出る 
  118.  *
  119.  * @param 「潜る」選択肢の文字列
  120.  * @desc 「潜る」選択肢の文字列
  121.  * @default  潜る 
  122.  *
  123.  * @param 「浮上する」選択肢の文字列
  124.  * @desc 「浮上する」選択肢の文字列
  125.  * @default  浮上する 
  126.  *
  127.  * @param 「何もしない」選択肢の文字列
  128.  * @desc 「何もしない」選択肢の文字列
  129.  * @default  何もしない 
  130.  *
  131.  * @param ------- SE 設定
  132.  * @desc
  133.  *
  134.  * @param 水面に入るSE
  135.  * @desc 水の中に入るSE (.ogg, .m4a ←不要)
  136.  * 「,」で区切ってピッチも指定可能
  137.  * @default Dive
  138.  *
  139.  * @param 水面から出るSE
  140.  * @desc 水面から出る入るSE (.ogg, .m4a ←不要)
  141.  * 「,」で区切ってピッチも指定可能
  142.  * @default Water1
  143.  *
  144.  * @param 潜る/浮上するSE
  145.  * @desc 潜る/浮上するSE (.ogg, .m4a ←不要)
  146.  * 「,」で区切ってピッチも指定可能
  147.  * @default Water2,75
  148.  *
  149.  * @param ------- リージョンID 設定
  150.  * @desc
  151.  *
  152.  * @param 潜る/浮上するリージョンID 1
  153.  * @desc 潜る/浮上することを触発するリージョンID 1 (0 = 不使用)
  154.  * @type number
  155.  * @min 0
  156.  * @max 255
  157.  * @default 21
  158.  *
  159.  * @param 潜る/浮上するリージョンID 2
  160.  * @desc 潜る/浮上することを触発するリージョンID 2 (0 = 不使用)
  161.  * @type number
  162.  * @min 0
  163.  * @max 255
  164.  * @default 22
  165.  *
  166.  * @param 潜る/浮上するリージョンID 3
  167.  * @desc 潜る/浮上することを触発するリージョンID 3 (0 = 不使用)
  168.  * @type number
  169.  * @min 0
  170.  * @max 255
  171.  * @default 23
  172.  *
  173.  * @param 潜る/浮上するリージョンID 4
  174.  * @desc 潜る/浮上することを触発するリージョンID 4 (0 = 不使用)
  175.  * @type number
  176.  * @min 0
  177.  * @max 255
  178.  * @default 0
  179.  *
  180.  * @param 潜る/浮上するリージョンID 5
  181.  * @desc 潜る/浮上することを触発するリージョンID 5 (0 = 不使用)
  182.  * @type number
  183.  * @min 0
  184.  * @max 255
  185.  * @default 0
  186.  *
  187.  * @param 潜る/浮上するリージョンID 6
  188.  * @desc 潜る/浮上することを触発するリージョンID 6 (0 = 不使用)
  189.  * @type number
  190.  * @min 0
  191.  * @max 255
  192.  * @default 0
  193.  *
  194.  * @param 潜る/浮上するリージョンID 7
  195.  * @desc 潜る/浮上することを触発するリージョンID 7 (0 = 不使用)
  196.  * @type number
  197.  * @min 0
  198.  * @max 255
  199.  * @default 0
  200.  *
  201.  * @param 潜る/浮上するリージョンID 8
  202.  * @desc 潜る/浮上することを触発するリージョンID 8 (0 = 不使用)
  203.  * @type number
  204.  * @min 0
  205.  * @max 255
  206.  * @default 0
  207.  *
  208.  * @param 潜る/浮上するリージョンID 9
  209.  * @desc 潜る/浮上することを触発するリージョンID 9 (0 = 不使用)
  210.  * @type number
  211.  * @min 0
  212.  * @max 255
  213.  * @default 0
  214.  *
  215.  * @param ------- 詳細設定
  216.  * @desc
  217.  *
  218.  * @param 水面強制通行リージョンID
  219.  * @desc カスタマイズ用、強制通行リージョンID (0 = 不使用)
  220.  * 「,」区切りで複数入力可能
  221.  * @default 0
  222.  *
  223.  * @param 水面下部分の透明度
  224.  * @desc 水上にいる時、下半身の透明度
  225.  * @type number
  226.  * @min 0
  227.  * @max 255
  228.  * @default 96
  229.  *
  230.  * @param 水面下部分の高さ
  231.  * @desc 水面にいる時、半透明になる部分の高さ
  232.  * @type number
  233.  * @min 0
  234.  * @default 20
  235.  *
  236.  *
  237.  * @help
  238.  *
  239.  * Swimming&Diving.js 遊泳&ダイビング システム
  240.  *
  241.  * 遊泳の通行可タイルは基本的に乗り物の船と同じですが、
  242.  * マップ設計の自由度を増やすために、強制通行リージョンを敷くと
  243.  * 無理矢理通れます。
  244.  * ただし、イベントの衝突判定は行われています。
  245.  *
  246.  *
  247.  * 潜る/浮上の転送先の指定方法:
  248.  *  マップのメモに
  249.  *  <Dive"リージョンID":"マップID","マップX","マップY"(,"向き")>
  250.  *  <Surface"リージョンID":"マップID","マップX","マップY"(,"向き")>
  251.  *  お置く。
  252.  *    例:
  253.  *    <Dive23:16,34,25>
  254.  *         - リージョン23で決定キーを押すと、ダイビングで マップ16の(34,25)に転送する
  255.  *    <Surface21:5,15,23,2>
  256.  *         - リージョン21で決定キーを押すと、浮上で マップ5の(15,23)に転送する、向きは下
  257.  *
  258.  *
  259.  * 水上イベント
  260.  *  イベントの移動範囲を水上に制限する(陸上に上がれない)
  261.  *  イベントのメモに<Swimming>を置く
  262.  *    例:
  263.  *     <Swimming>
  264.  *
  265.  *
  266.  *
  267.  * プラグインコマンド:
  268.  *  testSwim
  269.  *   このコマンドを実行すると、水の中に入れるか/水から出れるかの判定を行い、
  270.  *   できる場合はその行動を実行します。
  271.  *    例:testSwim
  272.  *    
  273.  *  testDive
  274.  *   このコマンドを実行すると、この位置で潜れるか/浮上できるかの判定を行い、
  275.  *   できる場合はその行動を実行します。
  276.  *    例:testDive
  277.  *    
  278.  *  testSwimDive
  279.  *   上述の両者を同時に判定し、実行可能の行動が片方だけの場合、その片方
  280.  *   の行動を実行します。
  281.  *   両方実行可能の場合は選択肢を出します。
  282.  *    例:testSwimDive
  283.  *    
  284.  *  askSwimDive
  285.  *   上のコマンドとほぼ同じですが、行動する前に必ず選択肢を出します。
  286.  *    例:askSwimDive
  287.  *
  288.  *  forceWaterLayer [数字]
  289.  *   水の深度を強制設定します。
  290.  *   water Layer:地面は0,水面は1、潜る度に1増えます
  291.  *   テレポートなどの時に使用してください。
  292.  *    例:forceWaterLayer 0
  293.  *
  294.  * -----------------
  295.  * オススメ併用プラグイン:KMS_WaterMapEffect (水中のエフェクト)
  296.  *
  297.  */
  298.  
  299. var Imported = Imported || {};
  300. Imported.TKM_Swimming = true;
  301. var $TKMvar = $TKMvar || {};
  302. $TKMvar.swimming = {};
  303.  
  304. (function() {
  305.  
  306.     var pluginName = 'Swimming&Diving';
  307.     var getParam = function(paramNames) {
  308.         if (!Array.isArray(paramNames)) paramNames = [paramNames];
  309.         for (var i = 0; i < paramNames.length; i++) {
  310.             var name = PluginManager.parameters(pluginName)[paramNames[i]];
  311.             if (name) return name;
  312.         }
  313.         return null;
  314.     };
  315.  
  316.     $TKMvar.swimming.diveRegionID = [];
  317.     // PARAMETER
  318.     var parameters = PluginManager.parameters(pluginName);
  319.     var temp = 0;
  320.     for(var i = 1; i <= 9; i++) {
  321.         temp = Number( getParam(['diving/surface Region '+i, '潜る/浮上するリージョンID '+i]) ) || 0;
  322.         if(temp !== 0) $TKMvar.swimming.diveRegionID.push(temp);
  323.     }
  324.  
  325.     temp = getParam(['水面に入るSE']); temp = temp.split(',');
  326.     $TKMvar.swimming.inPoolSE = {};
  327.     $TKMvar.swimming.inPoolSE.pitch = ( temp.length === 1 ? 100 : Number(temp.pop()) ).clamp(50, 150);
  328.     $TKMvar.swimming.inPoolSE.se = temp.join('');
  329.  
  330.     temp = getParam(['水面から出るSE']); temp = temp.split(',');
  331.     $TKMvar.swimming.outPoolSE = {};
  332.     $TKMvar.swimming.outPoolSE.pitch = temp.length === 1 ? 100 : Number(temp.pop());
  333.     $TKMvar.swimming.outPoolSE.se = temp.join('');
  334.  
  335.     temp = getParam(['潜る/浮上するSE']); temp = temp.split(',');
  336.     $TKMvar.swimming.diveSE = {};
  337.     $TKMvar.swimming.diveSE.pitch = temp.length === 1 ? 100 : Number(temp.pop());
  338.     $TKMvar.swimming.diveSE.se = temp.join('');
  339.  
  340.     $TKMvar.swimming.charString = {};
  341.     $TKMvar.swimming.charString.inWater  = getParam(['「水の中に入る」選択肢の文字列']);
  342.     $TKMvar.swimming.charString.outWater = getParam(['「水の中から出る」選択肢の文字列']);
  343.     $TKMvar.swimming.charString.dive     = getParam(['「潜る」選択肢の文字列']);
  344.     $TKMvar.swimming.charString.surface  = getParam(['「浮上する」選択肢の文字列']);
  345.     $TKMvar.swimming.charString.nothing  = getParam(['「何もしない」選択肢の文字列']);
  346.  
  347.     $TKMvar.swimming.forceThroughID = new Set();
  348.     var temp = getParam(['水面強制通行リージョンID']) .split(',');
  349.     for(var i = 0; i < temp.length; i++) {
  350.         var num = Number( temp[i] );
  351.         if(num) $TKMvar.swimming.forceThroughID.add(num);
  352.     }
  353.  
  354.     $TKMvar.swimming.autoAsk = getParam(['選択肢自動表示']);
  355.  
  356.     var doAutoAsk = function (ask) {
  357.         if(ask === "true") return true;
  358.         if(ask === "false") return false;
  359.         return $gameSwitches.value(Number(ask) || 1);
  360.     };
  361.  
  362.     $TKMvar.swimming.slowMove = Number( getParam(['水中減速']) ) || 0;
  363.  
  364.     $TKMvar.swimming.autoImgOnWater = getParam(['水面歩行画像変更']) === "true" ? true : false;
  365.     $TKMvar.swimming.autoImgInWater = getParam(['水中歩行画像変更']) === "true" ? true : false;
  366.  
  367.     temp = Number( getParam(['水面下部分の透明度']) );
  368.     $TKMvar.swimming.lowerBodyOpacity = isNaN(temp) ? 32 : temp;
  369.  
  370.     temp = Number( getParam(['水面下部分の高さ']) );
  371.     $TKMvar.swimming.lowerBodyHeight = isNaN(temp) ? 20 : temp;
  372.  
  373.  
  374.     // PLUGIN COMMAND
  375.     var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
  376.     Game_Interpreter.prototype.pluginCommand = function(command, args) {
  377.         _Game_Interpreter_pluginCommand.call(this, command, args);
  378.  
  379.         if (command.toUpperCase() === 'TESTSWIM') {
  380.             $gamePlayer.testSwim();
  381.         }
  382.         else if (command.toUpperCase() === 'TESTDIVE') {
  383.             $gamePlayer.testDive();
  384.         }
  385.         else if (command.toUpperCase() === 'TESTSWIMDIVE') {
  386.  
  387.             var pool = false, dive = false;
  388.  
  389.             if(!$gamePlayer.isSwimming() || $gamePlayer._waterLayer === 0) { // 水の中に入る?
  390.                 if( !!$gamePlayer.isJumpIntoWaterOk() ) {
  391.                     pool = true;
  392.                 }
  393.             }
  394.             else if($gamePlayer._waterLayer === 1) {
  395.                 if( !!$gamePlayer.isGetupFromWaterOk() ) { // 水の中から出る?
  396.                     pool = true;
  397.                 }
  398.             }
  399.  
  400.             var divingInfo = $gamePlayer.isGetDivingInfoOk();
  401.             if(!!divingInfo) { // 潜る/浮上する?
  402.                 dive = true;
  403.             }
  404.  
  405.             if(pool && dive) $gameMap.askSwimDive();
  406.             else if(pool) $gamePlayer.testSwim();
  407.             else if(dive) $gamePlayer.justDiveTo(divingInfo);
  408.  
  409.         }
  410.         else if(command.toUpperCase() === 'ASKSWIMDIVE') {
  411.             $gameMap.askSwimDive();
  412.         }
  413.         else if(command.toUpperCase() === 'FORCEWATERLAYER') {
  414.             var waterLayer = Number(args[0]);
  415.             if(!isNaN(waterLayer) && waterLayer >= 0) {
  416.                 $gamePlayer._waterLayer = waterLayer;
  417.                 if(waterLayer === 0) $gamePlayer._isSwimming = false;
  418.                 else $gamePlayer._isSwimming = true;
  419.                 $gamePlayer.refreshBushDepth();
  420.             }
  421.         }
  422.     };
  423.  
  424.     // 便利な機能
  425.     var _Game_CharacterBase_initMembers = Game_CharacterBase.prototype.initMembers;
  426.     Game_CharacterBase.prototype.initMembers = function() {
  427.         _Game_CharacterBase_initMembers.apply(this, arguments);
  428.         this._fadingAdd = 0;
  429.     };
  430.  
  431.     Game_CharacterBase.prototype.fadeOut = function(fadeSpeed) {
  432.         this._fadingAdd = -fadeSpeed;
  433.     };
  434.  
  435.     Game_CharacterBase.prototype.fadeIn = function(fadeSpeed) {
  436.         this._fadingAdd = fadeSpeed;
  437.     };
  438.  
  439.     var _Game_CharacterBase_update = Game_CharacterBase.prototype.update;
  440.     Game_CharacterBase.prototype.update = function() {
  441.         _Game_CharacterBase_update.apply(this, arguments);
  442.         this.updateFade();
  443.     };
  444.  
  445.     Game_CharacterBase.prototype.updateFade = function() {
  446.         this._opacity = (this._opacity + this._fadingAdd).clamp(0, 255);
  447.         if(this._opacity === 0 || this._opacity === 255) this._fadingAdd = 0;
  448.     };
  449.  
  450.     Game_CharacterBase.prototype.isFading = function() {
  451.         return (this._fadingAdd === 0);
  452.     };
  453.  
  454.     // キャラが水中にいるときの表現設定
  455.  
  456.     var _Game_Character_initMembers = Game_Character.prototype.initMembers;
  457.     Game_Character.prototype.initMembers = function() {
  458.         _Game_Character_initMembers.apply(this, arguments);
  459.         this._isSwimming = false;
  460.         this._waterLayer = 0;
  461.     };
  462.  
  463.     Game_Character.prototype.isSwimming = function() {
  464.         return this._isSwimming;
  465.     };
  466.  
  467.     Game_Character.prototype.refreshBushDepth = function() {
  468.         Game_CharacterBase.prototype.refreshBushDepth.apply(this, arguments);
  469.         if(!!this.isSwimming() && this._waterLayer === 1) {
  470.             this._bushDepth = $TKMvar.swimming.lowerBodyHeight;
  471.         }
  472.     };
  473.  
  474.     Game_Character.prototype.isMapPassable = function(x, y, d) {
  475.         var result = Game_CharacterBase.prototype.isMapPassable.apply(this, arguments);
  476.         if(!!this.isSwimming() && this._waterLayer === 1) {
  477.             var x2 = $gameMap.roundXWithDirection(x, d);
  478.             var y2 = $gameMap.roundYWithDirection(y, d);
  479.             var forceThroughOK = $TKMvar.swimming.forceThroughID.has($gameMap.regionId(x2, y2)) && (!this.isCollidedWithCharacters(x2, y2));
  480.             return $gameMap.isBoatPassable(x2, y2) ||  forceThroughOK;
  481.         }
  482.         return result;
  483.     };
  484.  
  485.     var _Game_Event_initialize = Game_Event.prototype.initialize;
  486.     Game_Event.prototype.initialize = function() {
  487.         _Game_Event_initialize.apply(this, arguments);
  488.         if(this._mapId === $gameMap.mapId()) {
  489.             if(!!$dataMap.events[this._eventId].meta["Swimming"]) {
  490.                 this._isSwimming = true;
  491.                 this._waterLayer = 1;
  492.                 this.refreshBushDepth();
  493.             }
  494.         }
  495.     }
  496.  
  497.     // 水の抵抗力
  498.     Game_Character.prototype.realMoveSpeed = function() {
  499.         var result = Game_CharacterBase.prototype.realMoveSpeed.apply(this, arguments);
  500.         return result - (!!this.isSwimming() ? $TKMvar.swimming.slowMove : 0);
  501.     };
  502.  
  503.     var _Sprite_Character_createHalfBodySprites = Sprite_Character.prototype.createHalfBodySprites;
  504.     Sprite_Character.prototype.createHalfBodySprites = function() {
  505.         _Sprite_Character_createHalfBodySprites.apply(this, arguments);
  506.         if(this._character._waterLayer === 1 && !!this._lowerBody) this._lowerBody.opacity = $TKMvar.swimming.lowerBodyOpacity;
  507.     };
  508.  
  509.     // 自動メッセージ
  510.     var _Game_Player_triggerButtonAction = Game_Player.prototype.triggerButtonAction;
  511.     Game_Player.prototype.triggerButtonAction = function() {
  512.         if( _Game_Player_triggerButtonAction.apply(this, arguments) ) return true;
  513.         if( Input.isTriggered('ok') && doAutoAsk($TKMvar.swimming.autoAsk) ) {
  514.             if( $gameMap.askSwimDive() ) {
  515.                 return true;
  516.             }
  517.         }
  518.         return false;
  519.     };
  520.  
  521.     var _Game_Player_triggerTouchActionD1 = Game_Player.prototype.triggerTouchActionD1;
  522.     Game_Player.prototype.triggerTouchActionD1 = function() {
  523.         if( _Game_Player_triggerTouchActionD1.apply(this, arguments) ) return true;
  524.         if ( TouchInput.isTriggered() && doAutoAsk($TKMvar.swimming.autoAsk) ) {
  525.             if( $gameMap.askSwimDive() ) {
  526.                 return true;
  527.             }
  528.         }
  529.         return false;
  530.     };
  531.  
  532.     var _Game_Player_triggerTouchActionD2 = Game_Player.prototype.triggerTouchActionD2;
  533.     Game_Player.prototype.triggerTouchActionD2 = function() {
  534.         if( _Game_Player_triggerTouchActionD2.apply(this, arguments) ) return true;
  535.         if ( TouchInput.isTriggered() && doAutoAsk($TKMvar.swimming.autoAsk) ) {
  536.             if( $gameMap.askSwimDive() ) {
  537.                 return true;
  538.             }
  539.         }
  540.         return false;
  541.     };
  542.  
  543.     // プレイヤー、フォロワー画像変更
  544.  
  545.     Game_Player.prototype.characterName = function() {
  546.         var result = Game_CharacterBase.prototype.characterName.apply(this, arguments);
  547.         var needChange = this.isSwimming() && ( ($TKMvar.swimming.autoImgOnWater && this._waterLayer === 1) || ($TKMvar.swimming.autoImgInWater && this._waterLayer > 1) );
  548.         if(needChange && result !== "") result = result + "_swim";
  549.         return result;
  550.     };
  551.  
  552.     Game_Follower.prototype.characterName = function() {
  553.         var result = Game_CharacterBase.prototype.characterName.apply(this, arguments);
  554.         var needChange = this.isSwimming() && ( ($TKMvar.swimming.autoImgOnWater && this._waterLayer === 1) || ($TKMvar.swimming.autoImgInWater && this._waterLayer > 1) );
  555.         if(needChange && result !== "") result = result + "_swim";
  556.         return result;
  557.     };
  558.  
  559.     Game_Follower.prototype.isSwimming = function() {
  560.         return $gamePlayer.isSwimming();
  561.     };
  562.  
  563.     var _Game_Follower_update = Game_Follower.prototype.update;
  564.     Game_Follower.prototype.update = function() {
  565.         _Game_Follower_update.apply(this, arguments);
  566.         if(this._waterLayer !== $gamePlayer._waterLayer) {
  567.             this._isSwimming = $gamePlayer.isSwimming();
  568.             this._waterLayer = $gamePlayer._waterLayer;
  569.             this.refreshBushDepth();
  570.         }
  571.     }
  572.     // フォロワーのrealMoveSpeed は $gamPlayer.realMoveSpeed() - 0.3 - 0.3 と二重減速しちゃったので、
  573.     // 修正
  574.     Game_Follower.prototype.realMoveSpeed = function() {
  575.         return this._moveSpeed;
  576.     }
  577.  
  578.     //プレイヤーが水に飛び込む、水中に潜る、浮上する など
  579.  
  580.     Game_Player.prototype.testSwim = function() {
  581.         var d = this.direction();
  582.         var jumpX = d === 6 ? 1 : d === 4 ? -1 : 0;
  583.         var jumpY = d === 2 ? 1 : d === 8 ? -1 : 0;
  584.  
  585.         if(!this.isSwimming() || this._waterLayer === 0) {
  586.             if( !this.isJumpIntoWaterOk() ) {
  587.                 return false;
  588.             }
  589.             var se = $TKMvar.swimming.inPoolSE.se;
  590.             var pitch = $TKMvar.swimming.inPoolSE.pitch;
  591.             var list = [{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":14,"parameters":[jumpX,jumpY],"indent":null},{"code":44,"parameters":[{"name":se,"volume":90,"pitch":pitch,"pan":0}],"indent":null},{"code":45,"parameters":["this._isSwimming = true; this._waterLayer = 1; this.refreshBushDepth();"],"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]}];
  592.  
  593.             if(!!$gameMap._interpreter.isRunning()) {
  594.                 var int = $gameMap._interpreter;
  595.                 while(!!int._childInterpreter) int = int._childInterpreter;
  596.                 int.setupChild(list, 0);
  597.             }
  598.             else {
  599.                 $gameMap._interpreter.setup(list, 0);
  600.             }
  601.             return true;
  602.         }
  603.         else if(this._waterLayer === 1) {
  604.             if( !this.isGetupFromWaterOk() ) {
  605.                 return false;
  606.             }
  607.  
  608.             var se = $TKMvar.swimming.outPoolSE.se;
  609.             var pitch = $TKMvar.swimming.outPoolSE.pitch;
  610.             var list = [{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":44,"parameters":[{"name":se,"volume":90,"pitch":pitch,"pan":0}],"indent":null},{"code":45,"parameters":["this._isSwimming = false; this._waterLayer = 0; this.refreshBushDepth();"],"indent":null},{"code":14,"parameters":[jumpX,jumpY],"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]}];
  611.  
  612.             if(!!$gameMap._interpreter.isRunning()) {
  613.                 var int = $gameMap._interpreter;
  614.                 while(!!int._childInterpreter) int = int._childInterpreter;
  615.                 int.setupChild(list, 0);
  616.             }
  617.             else {
  618.                 $gameMap._interpreter.setup(list, 0);
  619.             }
  620.             return true;
  621.         }
  622.  
  623.     };
  624.  
  625.     Game_Player.prototype.testDive = function() {
  626.         var info = this.isGetDivingInfoOk();
  627.         if(!!info) this.justDiveTo(info);
  628.     };
  629.  
  630.     Game_Player.prototype.justDiveTo = function(info) {
  631.  
  632.         var isSurfacing = info.isSurfacing;
  633.         var dest = info.dest;
  634.         if(dest.length <=3) dest.push(0);
  635.  
  636.         var se = $TKMvar.swimming.diveSE.se;
  637.         var pitch = $TKMvar.swimming.diveSE.pitch;
  638.  
  639.         var list = []; // diving event page
  640.         this.diveHideFollowers(list);
  641.         //play SE
  642.         list.push( {"code":250,"indent":0,"parameters":[{"name":se,"volume":90,"pitch":pitch,"pan":0}]} );
  643.         list.push( {"code":355,"indent":0,"parameters":["$gamePlayer._stopScroll = true;"]} );
  644.         // diving Effect
  645.         if(!isSurfacing && this._waterLayer !== 1) list.push( {"code":355,"indent":0,"parameters":["$gamePlayer._y += 2.5; $gamePlayer.resetStopCount(); $gamePlayer.fadeOut(10);"]} );
  646.         else if(isSurfacing) list.push( {"code":355,"indent":0,"parameters":["$gamePlayer._y -= 2.5; $gamePlayer.resetStopCount(); $gamePlayer.fadeOut(10);"]} );
  647.  
  648.         list.push( {"code":221,"indent":0,"parameters":[]} ); // Screen fade Out
  649.         list.push( {"code":355,"indent":0,"parameters":["$gamePlayer._opacity = 0;"]} );
  650.         list.push( {"code":201,"indent":0,"parameters":[0,dest[0],dest[1],dest[2],dest[3],0]} ); // trasfer
  651.         list.push( {"code":230,"indent":0,"parameters":[15]} ); // wait
  652.         if(isSurfacing && this._waterLayer === 2) {
  653.             var sePlayed2 = true;
  654.             list.push( {"code":355,"indent":0,"parameters":["$gamePlayer._opacity = 255; $gamePlayer._waterLayer -= 1; $gamePlayer.refreshBushDepth(); $gamePlayer._stopScroll = false;"]} ); // special up to water Surface
  655.             list.push( {"code":250,"indent":0,"parameters":[{"name":se,"volume":90,"pitch":pitch,"pan":0}]} ); // play SE again
  656.             this.diveShowFollowers(list);
  657.         }
  658.         list.push( {"code":222,"indent":0,"parameters":[]} ); // Screen fade In
  659.  
  660.  
  661.         if(!sePlayed2) list.push( {"code":250,"indent":0,"parameters":[{"name":se,"volume":90,"pitch":pitch,"pan":0}]} ); // play SE again
  662.  
  663.         if(!isSurfacing) {
  664.  
  665.             list.push( {"code":205,"indent":0,"parameters":[-1,{"list":[{"code":45,"parameters":["this.fadeIn(6); this._realY -= 2; this.resetStopCount(); this._waterLayer += 1; this.refreshBushDepth();"],"indent":null},{"code":45,"parameters":["this._stopScroll = false"]},{"code":0}],"repeat":false,"skippable":false,"wait":true}]} );
  666.         }
  667.         else if(isSurfacing && this._waterLayer !== 2) {
  668.             list.push( {"code":205,"indent":0,"parameters":[-1,{"list":[{"code":45,"parameters":["this.fadeIn(6); this._realY += 2; this.resetStopCount(); this._waterLayer -= 1; this.refreshBushDepth();"],"indent":null},{"code":45,"parameters":["this._stopScroll = false"]},{"code":0}],"repeat":false,"skippable":false,"wait":true}]} );
  669.         }
  670.         this.diveShowFollowers(list);
  671.  
  672.         // run
  673.         if(!!$gameMap._interpreter.isRunning()) {
  674.                 var int = $gameMap._interpreter;
  675.                 while(!!int._childInterpreter) int = int._childInterpreter;
  676.                 int.setupChild(list, 0);
  677.         }
  678.         else {
  679.             $gameMap._interpreter.setup(list, 0);
  680.         }
  681.     };
  682.  
  683.     Game_Player.prototype.isGetDivingInfoOk = function() {
  684.         // check if is swimming
  685.         if(!this.isSwimming() || this._waterLayer <= 0) return false;
  686.  
  687.         // check if region setted
  688.         var x = this.x;
  689.         var y = this.y;
  690.         var Rid = $gameMap.regionId(x, y);
  691.  
  692.         var match = 0;
  693.         for(var i = 0; i < $TKMvar.swimming.diveRegionID.length; i++) {
  694.             if(Rid === $TKMvar.swimming.diveRegionID[i]) { match = Rid; break; }
  695.         }
  696.         if(!match) return false;
  697.  
  698.         // check if tag set
  699.         if(!!$dataMap && (!!$dataMap.meta["Dive"+match] || !!$dataMap.meta["Surface"+match]) ) {
  700.             var isSurfacing = false;
  701.             var dest;
  702.             if(!!$dataMap.meta["Surface"+match]) {
  703.                 isSurfacing = true;
  704.                 dest = $dataMap.meta["Surface"+match];
  705.             }
  706.             else dest = $dataMap.meta["Dive"+match];
  707.  
  708.             if(typeof(dest) === "boolean") return false;
  709.  
  710.             // can't surface at the surface of water
  711.             if(isSurfacing && this._waterLayer === 1) return false;
  712.  
  713.             dest = dest.split(',');
  714.             for(var i = 0; i < dest.length; i++) dest[i] = Number(dest[i]) || 0;
  715.  
  716.             var returnObject = {"isSurfacing": isSurfacing, "dest": dest};
  717.  
  718.             return returnObject;
  719.  
  720.         }
  721.         else return false;
  722.     };
  723.  
  724.     Game_Player.prototype.isJumpIntoWaterOk = function() {
  725.         var x = this.x;
  726.         var y = this.y;
  727.         var d = this.direction();
  728.  
  729.         var x2 = $gameMap.roundXWithDirection(x, d);
  730.         var y2 = $gameMap.roundYWithDirection(y, d);
  731.         var forceThroughOK = $TKMvar.swimming.forceThroughID.has($gameMap.regionId(x2, y2));
  732.  
  733.         if (!$gameMap.isValid(x2, y2)) {
  734.             return false;
  735.         }
  736.         if (!$gameMap.isBoatPassable(x2, y2) && !forceThroughOK) {
  737.             return false;
  738.         }
  739.         if (this.isCollidedWithCharacters(x2, y2)) {
  740.             return false;
  741.         }
  742.         return true;
  743.     };
  744.  
  745.     Game_Player.prototype.isGetupFromWaterOk = function() {
  746.         var x = this.x;
  747.         var y = this.y;
  748.         var d = this.direction();
  749.  
  750.         var x2 = $gameMap.roundXWithDirection(x, d);
  751.         var y2 = $gameMap.roundYWithDirection(y, d);
  752.         var forceThroughOK = $TKMvar.swimming.forceThroughID.has($gameMap.regionId(x2, y2));
  753.  
  754.         if (!$gameMap.isValid(x2, y2)) {
  755.             return false;
  756.         }
  757.         if (!$gameMap.isPassable(x2, y2, this.reverseDir(d)) || forceThroughOK) {
  758.             return false;
  759.         }
  760.         if (this.isCollidedWithCharacters(x2, y2)) {
  761.             return false;
  762.         }
  763.  
  764.         return true;
  765.     };
  766.  
  767.  
  768.     Game_Map.prototype.askSwimDive = function() {
  769.  
  770.         var commandArray = [];
  771.         var pool = false;
  772.         var dive = false;
  773.  
  774.         if(!$gamePlayer.isSwimming() || $gamePlayer._waterLayer === 0) { // 水の中に入る?
  775.             if( !!$gamePlayer.isJumpIntoWaterOk() ) {
  776.                 commandArray.push($TKMvar.swimming.charString.inWater);
  777.                 pool = true;
  778.             }
  779.         }
  780.         else if($gamePlayer._waterLayer === 1) {
  781.             if( !!$gamePlayer.isGetupFromWaterOk() ) { // 水の中から出る?
  782.                 commandArray.push($TKMvar.swimming.charString.outWater);
  783.                 pool = true;
  784.             }
  785.         }
  786.  
  787.         var divingInfo = $gamePlayer.isGetDivingInfoOk();
  788.         if(!!divingInfo) { // 潜る/浮上するする?
  789.             dive = true;
  790.             if(divingInfo.isSurfacing) commandArray.push($TKMvar.swimming.charString.surface);
  791.             else commandArray.push($TKMvar.swimming.charString.dive);
  792.         }
  793.         if(commandArray.length === 0) return false;
  794.  
  795.         commandArray.push($TKMvar.swimming.charString.nothing);
  796.         var length = commandArray.length;
  797.         var list = [];
  798.         list.push( {"code":102,"indent":0,"parameters":[commandArray,length-1,0,1,0]} );
  799.  
  800.         list.push( {"code":402,"indent":0,"parameters":[0,commandArray[0]]});
  801.         list.push( {"code":230,"indent":1,"parameters":[15]} );
  802.  
  803.         if(pool) list.push( {"code":355,"indent":1,"parameters":["$gamePlayer.testSwim();"]} );
  804.         else list.push( {"code":355,"indent":1,"parameters":["$gamePlayer.justDiveTo(" + JSON.stringify(divingInfo) + ");"]} );
  805.  
  806.         list.push( {"code":0,"indent":1,"parameters":[]} );
  807.         list.push( {"code":402,"indent":0,"parameters":[1,commandArray[1]]});
  808.         if(length === 3) {
  809.             list.push( {"code":230,"indent":1,"parameters":[15]} );
  810.             list.push( {"code":355,"indent":1,"parameters":["$gamePlayer.justDiveTo(" + JSON.stringify(divingInfo) + ");"]} );
  811.             list.push( {"code":0,"indent":1,"parameters":[]} );
  812.             list.push( {"code":402,"indent":0,"parameters":[2,commandArray[2]]});
  813.         }
  814.         list.push( {"code":0,"indent":1,"parameters":[]} );
  815.         list.push( {"code":404,"indent":0,"parameters":[]} );
  816.  
  817.         // run
  818.         if(!!this._interpreter.isRunning()) {
  819.             var int = this._interpreter;
  820.             while(!!int._childInterpreter) int = int._childInterpreter;
  821.             int.setupChild(list, 0);
  822.         }
  823.         else {
  824.             this._interpreter.setup(list, 0);
  825.         }
  826.         return true;
  827.     };
  828.  
  829.     Game_Player.prototype.diveHideFollowers = function(list) {
  830.         if(this._followers._visible === true) {
  831.             var curIndent = 0;
  832.             if(list.length > 0) curIndent = list[list.length-1].indent;
  833.             list.push( {"code":217,"indent":curIndent,"parameters":[]} );
  834.             list.push( {"code":216,"indent":curIndent,"parameters":[1]} );
  835.             $gameTemp._divingHidedFollowers = true;
  836.         }
  837.     }
  838.  
  839.     Game_Player.prototype.diveShowFollowers = function(list) {
  840.         if(!!$gameTemp._divingHidedFollowers) {
  841.             var curIndent = list[list.length-1].indent;
  842.             list.push( {"code":216,"indent":curIndent,"parameters":[0]} );
  843.             $gameTemp._divingHidedFollowers = undefined;
  844.         }
  845.     }
  846.  
  847.     var _Game_Player_updateScroll = Game_Player.prototype.updateScroll;
  848.     Game_Player.prototype.updateScroll = function(lastScrolledX, lastScrolledY) {
  849.         if( !!this._stopScroll ) return;
  850.         _Game_Player_updateScroll.apply(this, arguments);
  851.     };
  852.  
  853. })();
此书生之言,可言而不可用也 ↑-_-||

仓管610早晚班,没多余精力做别的了 →_→
回复 支持 1 反对 0

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7880
在线时间
666 小时
注册时间
2012-7-29
帖子
174
3
发表于 2020-8-17 14:46:56 | 只看该作者
本帖最后由 开关关 于 2020-8-17 22:02 编辑

用法:用文本编辑器保存到一个js文件里并在插件管理器中加载它。

亲测可用。

准备发回复的时候发现楼上有现成的插件,建议先用楼上的方法,因为现成的插件更可靠。

代码
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
694
在线时间
95 小时
注册时间
2020-7-20
帖子
28
4
 楼主| 发表于 2020-8-17 15:27:15 | 只看该作者
本帖最后由 永远的小萌新 于 2020-8-17 18:16 编辑
戏蹑群星斗 发表于 2020-8-17 14:31
游泳&潜水插件,改一改插件设置就能像在水上行走了
//================================================== ...


虽然我日文看不懂,但是谢谢大佬
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
23073
在线时间
8648 小时
注册时间
2011-12-31
帖子
3367
5
发表于 2020-8-18 08:38:14 | 只看该作者
链接:https://pan.baidu.com/s/1c7ZkjeBWyUHoOuDwZJv1BQ
提取码:hski
StepEffectSample
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
11461
在线时间
615 小时
注册时间
2016-8-25
帖子
1402

R考场第七期纪念奖

6
发表于 2020-8-18 12:32:10 | 只看该作者
用一排事件把水围起来
触碰到事件就开启穿透
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-13 02:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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