Project1

标题: 多货币系统【坐等汉化】 [打印本页]

作者: j296196585    时间: 2020-11-15 00:40
标题: 多货币系统【坐等汉化】
本帖最后由 j296196585 于 2020-11-15 00:47 编辑

理论支持无限货币

可以使用物品购买 或者变量进行购买


RUBY 代码复制
  1. //=============================================================================
  2. // Mano_CurrencyUnit.js
  3. // ----------------------------------------------------------------------------
  4. // Copyright (c) 2019-2019 Sigureya
  5. // This software is released under the MIT License.
  6. // [url]http://opensource.org/licenses/mit-license.php[/url]
  7. // ----------------------------------------------------------------------------
  8. // Version
  9. // 0.9.0 2020/08/31 初版
  10. // ----------------------------------------------------------------------------
  11. // [Twitter]: [url]https://twitter.com/Sigureya/[/url]
  12. //=============================================================================
  13. /*:
  14. * @plugindesc 変数やアイテムを消費して購入できるショップが作れます。
  15. * 競合率・中ぐらい
  16. * @author しぐれん([url]https://github.com/Sigureya/RPGmakerMV[/url])
  17. * @url [url]https://raw.githubusercontent.com/Sigureya/RPGmakerMZ/master/Mano_CurrencyUnit.js[/url]
  18. *
  19. * @target MZ
  20. *
  21. * @help
  22. * お金の代わりに変数やアイテムを消費して購入できるショップを作成できます。
  23. * 応用することで円・$(ドル)・€(ユーロ)などのような複数の通貨があるシステムもできます。
  24. *
  25. * 内部的には専用の財布を作って、そこに処理を流します。
  26. * 既存処理を再定義しているため、競合の可能性があります。
  27. * (ポイントカードのようなプラグインを使っている場合、これより後ろにおいてください)
  28. *
  29. * プラグインコマンドで通貨単位を切り替えます。
  30. *
  31. * 以下MV用のプラグインコマンドの設定です。
  32. *
  33. * ShopModeReset
  34. * 通常のお金を使うモードに戻します
  35. *
  36. * ShopModeVariable 8
  37. * お金の代わりに変数8番の数値を見ます。
  38. * 単位として「枚」を使うようになります。
  39. *
  40. * ShopModeItem 3
  41. * お金の代わりにitemID[3]のアイテムの所持数を見ます
  42. * 単位として「個」を使うようになります。
  43. *
  44. * 2020/08/31 公開
  45. *
  46. *
  47. * @command setWalletVariable
  48. * @text 通貨変数の切り替え
  49. * @desc ショップの処理で使う通貨単位を変数で設定します。
  50. *
  51. * @arg variableId
  52. * @text 使用する変数
  53. * @desc 指定した変数の値を消費して買い物を行います。
  54. * 変数が設定されていないとエラーになります。
  55. * @type variable
  56. * @default 0
  57. *
  58. * @arg unit
  59. * @text 通貨単位
  60. * @desc 画面に表示される通貨の単位です。
  61. * @type string
  62. * @default
  63. *
  64. * @command setWalletItem
  65. * @text 通貨アイテムの切り替え
  66. * @desc ショップの処理で使う通貨単位をアイテムで設定します。
  67. *
  68. * @arg itemId
  69. * @text 使用するアイテム
  70. * @desc 指定した変数の値を消費して買い物を行います。
  71. * 変数が設定されていないとエラーになります。
  72. * @type item
  73. * @default 0
  74. *
  75. * @arg unit
  76. * @text 通貨単位
  77. * @desc 画面に表示される通貨の単位です。
  78. * @type string
  79. * @default
  80. *
  81. * @command resetWallet
  82. * @text 通貨切り替えの解除
  83. * @desc 通貨を通常のお金に戻します
  84. *
  85. *
  86. */
  87.  
  88.  
  89.  
  90. (function(){
  91.     'use strict';
  92.     const PLUGIN_NAME='Mano_CurrencyUnit';
  93.  
  94. class WalletBase{
  95.  
  96.     /**
  97.      * @param {String} unit
  98.      */
  99.     constructor(unit){
  100.         this.setUnit(unit ||TextManager.currencyUnit);
  101.     }
  102.     /**
  103.      * @param {String} unit
  104.      */
  105.     setUnit(unit){
  106.         this._unit = unit;
  107.     }
  108.  
  109.     value(){
  110.         return 0;
  111.     }
  112.     pay(value){
  113.     }
  114.  
  115.     loseValue(value){
  116.         this.pay(value);
  117.     }
  118.  
  119.     gainValue(value){
  120.         this.pay(-value);
  121.     }
  122.     unit(){
  123.         return this._unit;
  124.     }
  125.  
  126.     canSeil(){
  127.         return false;
  128.     }
  129.  
  130.     isGold(){
  131.         return false;
  132.     }
  133. }
  134.  
  135. class WalletGold extends WalletBase{
  136.     constructor(){
  137.         super(TextManager.currencyUnit);
  138.     }
  139.     value(){
  140.         return $gameParty.gold();
  141.     }
  142.     pay(value){
  143.         $gameParty.loseGold(value);
  144.     }
  145.     canSeil(){
  146.         return true;
  147.     }
  148.     isGold(){
  149.         return true;
  150.     }
  151. }
  152.  
  153. class WalletItem extends WalletBase{
  154.     /**
  155.      * @param {Number} itemId
  156.      */
  157.     constructor(itemId){
  158.         super();
  159.         this._itemId=itemId;
  160.     }
  161.  
  162.     item(){
  163.         return $dataItems[this._itemId];
  164.     }
  165.  
  166.     value(){
  167.         return $gameParty.numItems(this.item());
  168.     }
  169.  
  170.     pay(value){
  171.         $gameParty.loseItem( this.item(), value);
  172.     }
  173.  
  174. }
  175. window[WalletItem.name] =WalletItem;
  176.  
  177. class WalletVariable extends WalletBase{
  178.     /**
  179.      * @param {Number} id
  180.      */
  181.     constructor(id){
  182.         super();
  183.         this._variableId=id;
  184.     }
  185.     value(){
  186.         return $gameVariables.value(this._variableId);
  187.     }
  188.  
  189.     pay(value){
  190.         const lastValue = this.value();
  191.         $gameVariables.setValue(this._variableId, lastValue-value );
  192.     }
  193. }
  194.  
  195. /**
  196. * @param {WalletBase} wallet
  197. */
  198. function setupWallet(wallet){
  199.     g_wallet = wallet;
  200. }
  201.  
  202.  
  203. /**
  204. * アイテムと引き換えに交換を行うショップの設定
  205. * @param {Number} itemId
  206. * @param {string} unit
  207. */
  208. function setupItemWallet(itemId,unit){
  209.     const wallet = new WalletItem(itemId);
  210.     wallet.setUnit(unit);
  211.     setupWallet(wallet);   
  212. }
  213.  
  214. /**
  215. * @description  変数と引き換えに交換を行うショップの設定
  216. * @param {Number} variableId
  217. * @param {string} unit
  218. */
  219. function setupVariableWallet(variableId,unit){
  220.     const wallet = new WalletVariable(variableId);
  221.     wallet.setUnit(unit);
  222.     setupWallet(wallet);
  223. }
  224.  
  225. function resetWallet(){
  226.     setupWallet(null);
  227. }
  228.  
  229. let g_wallet =null;
  230. const Game_Interpreter_pluginCommand=Game_Interpreter.prototype.pluginCommand;
  231. Game_Interpreter.prototype.pluginCommand =function(cmd,args){
  232.     if(cmd ==="ShopModeItem"){
  233.         setupItemWallet( Number(args[0],args[1]));
  234.         return;
  235.     }
  236.     if(cmd ==="ShopModeVariable"){
  237.         setupVariableWallet( Number(args[0],args[1]));
  238.     }
  239.     Game_Interpreter_pluginCommand.call(this,cmd,args);
  240. };
  241.  
  242.  
  243. PluginManager.registerCommand(PLUGIN_NAME,"setWalletVariable",
  244.     (arg)=>{setupVariableWallet(Number(arg.variableId),arg.unit);}
  245. );
  246. PluginManager.registerCommand(PLUGIN_NAME,"setWalletItem",
  247.     (arg)=>{setupItemWallet( Number(arg.itemId),arg.unit)}
  248. );
  249. PluginManager.registerCommand(PLUGIN_NAME,"resetWallet",
  250.     resetWallet
  251. );
  252.  
  253.  
  254. const Scene_Load_onLoadSuccess=Scene_Load.prototype.onLoadSuccess
  255. Scene_Load.prototype.onLoadSuccess =function(){
  256.     resetWallet();
  257.     g_wallet=null;
  258.     Scene_Load_onLoadSuccess.call(this);
  259. };
  260.  
  261. Window_Gold.prototype.setupWallet =function(){
  262.     const w = g_wallet || new WalletGold();
  263.     this._wallet =w;
  264.     g_wallet =null;
  265. };
  266. Window_Gold.prototype.value = function() {
  267.     return this._wallet.value();
  268. };
  269.  
  270. Window_Gold.prototype.currencyUnit = function() {
  271.     return this._wallet.unit();
  272. };
  273. Window_Gold.prototype.wallet =function(){
  274.     return this._wallet;
  275. };
  276.  
  277. const Window_Gold_initialize =Window_Gold.prototype.initialize;
  278. Window_Gold.prototype.initialize =function(){
  279.     this.setupWallet();
  280.     Window_Gold_initialize.apply(this,arguments);
  281. };
  282. const Scene_Shop_createGoldWindow =Scene_Shop.prototype.createGoldWindow;
  283. Scene_Shop.prototype.createGoldWindow =function(){
  284.     Scene_Shop_createGoldWindow.call(this);
  285.     this._purchaseOnly =this._purchaseOnly || !this._goldWindow.wallet().canSeil();
  286. };
  287.  
  288. Scene_Shop.prototype.doBuy = function(number) {
  289.     this._goldWindow.wallet().loseValue(number * this.buyingPrice());
  290.     $gameParty.gainItem(this._item, number);
  291. };
  292.  
  293. Scene_Shop.prototype.doSell = function(number) {
  294.     const p =number * this.sellingPrice();
  295.     this._goldWindow.wallet().gainValue(p);
  296.     $gameParty.loseItem(this._item, number);
  297. };
  298.  
  299.  
  300.  
  301. })();

360截图20201115004543779.jpg (99.62 KB, 下载次数: 9)

360截图20201115004543779.jpg

作者: 13666582612    时间: 2020-11-30 11:49
怎么没有呀
作者: j296196585    时间: 2020-11-30 15:29
13666582612 发表于 2020-11-30 11:49
怎么没有呀

smys什么意思 有什么不懂的吗?
作者: 13666582612    时间: 2020-11-30 19:00
j296196585 发表于 2020-11-30 15:29
smys什么意思 有什么不懂的吗?

额。。我的意思是,没有需要下载的压缩包吗
作者: j296196585    时间: 2020-11-30 20:19
13666582612 发表于 2020-11-30 19:00
额。。我的意思是,没有需要下载的压缩包吗

https://bbs.jhmeng.cn/bbs/forum. ... &extra=page%3D1
这里有我上传的压缩包  你可以去拿  
我以后只会在这里发布新插件了
作者: 13666582612    时间: 2020-12-1 21:03
标题: RE: 多货币系统【坐等汉化】
谢谢大佬!,话说这个插件可以显示货币图标吗
作者: j296196585    时间: 2020-12-2 02:37
13666582612 发表于 2020-12-1 21:03
谢谢大佬!,话说这个插件可以显示货币图标吗

不好意思 不知道 我使用了 yep系统
你得自行测试哟
作者: 3508074122    时间: 2021-7-7 15:28
怎么没有?




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1