Project1

标题: 有没有办法让物品买得越多越贵 [打印本页]

作者: 合湾芷樱    时间: 2020-7-31 15:14
标题: 有没有办法让物品买得越多越贵
比如一个力量药水第一次买50,第二次买100,第三次买200……以此类推,有办法实现吗?要不然这种强化物品太贵的话不划算,太便宜的话靠这个堆属性会破坏游戏性。
作者: UTO    时间: 2020-7-31 15:55
建一个变量,每买一次+1,然后价格根据变量计算
作者: Fan723    时间: 2020-7-31 16:36
这个想法好,应该修改一下商店计算方法就可以了,晚上看看,说不定我的游戏也能用。
作者: 芯☆淡茹水    时间: 2020-7-31 18:59
以前 pia 过一个差不多的功能,构思很简单,以为没人会用这样的。

这个插件估计有 大改过商店界面 的不适用,可能无法记录到购买的个数或无法设置物品当前价格。

JAVASCRIPT 代码复制
  1. //=================================================================================================
  2. // ItemPrice.js
  3. //=================================================================================================
  4. /*:
  5. * @plugindesc 物品价格自定义计算。
  6. * @author 芯☆淡茹水
  7. * @help
  8. *
  9. * 1, 插件命令: 清除所有记录的物品购买个数 => ClearPurchasedNum
  10. *
  11. * 2, 算式变量简写: item => 当前物品。
  12. *                  p => 该物品数据库设置的价格。
  13. *                  n => 该物品总计购买的个数。
  14. *                  v => 游戏变量。(写法为 v[n] 的方式)
  15. *
  16. * 3,可在物品备注里单独给这个物品写算式计算其价格,格式为:
  17. *    <PriceFormula>
  18. *    算式 ...
  19. *    .
  20. *    .
  21. *    .
  22. *    </PriceFormula>
  23. *
  24. *
  25. * @param formula0
  26. * @text 道具价格算式。
  27. * @desc 道具价格算式。(p :数据库设置的初始价格; n :购买次数; v :游戏变量)
  28. * @default p + n * 50
  29. *
  30. * @param formula1
  31. * @text 武器价格算式。
  32. * @desc 武器价格算式。(p :数据库设置的初始价格; n :购买次数; v :游戏变量)
  33. * @default
  34. *
  35. * @param formula2
  36. * @text 防具价格算式。
  37. * @desc 防具价格算式。(p :数据库设置的初始价格; n :购买次数; v :游戏变量)
  38. * @default
  39. */
  40. //=================================================================================================
  41. ;var XdRsData = XdRsData || {};
  42. XdRsData.ip = XdRsData.ip || {};
  43. XdRsData.ip.param = PluginManager.parameters('XdRs_ItemPrice');
  44. //=================================================================================================
  45. XdRsData.ip.setupItemPrice = function(item) {
  46.     if (!this.isGameItem(item)) return;
  47.     var type = this.getItemType(item);
  48.     var formula = this.getItemNoteFormula(item) || this.param['formula'+type];
  49.     if (formula) {
  50.         if (!item.basePrice) item.basePrice = item.price;
  51.         var p = item.basePrice;
  52.         var n = $gameSystem.purchasedNum(item);
  53.         var v = $gameVariables._data;
  54.         try {item.price = eval(formula);}
  55.         catch(e) {
  56.             item.price = p;
  57.             var typeName = ['道具','武器','防具'][type];
  58.             var msg = typeName+'价格算式书写错误! ' + typeName + 'id: '+item.id;
  59.             console.error(msg);
  60.         }
  61.     }
  62. };
  63. XdRsData.ip.isGameItem = function(item) {
  64.     return DataManager.isItem(item) ||
  65.     DataManager.isWeapon(item) ||
  66.     DataManager.isArmor(item);
  67. };
  68. XdRsData.ip.getItemType = function(item) {
  69.     if (DataManager.isItem(item))   return 0;
  70.     if (DataManager.isWeapon(item)) return 1;
  71.     if (DataManager.isArmor(item))  return 2;
  72.     return null;
  73. };
  74. XdRsData.ip.getItemNoteFormula = function(item) {
  75.     if (!this.isGameItem(item) || !(/<PriceFormula>/.test(item.note))) return null;
  76.     return item.note.match(/<PriceFormula>([\S\s]*)<\/PriceFormula>/) ? RegExp.$1 : null;
  77. };
  78. //=================================================================================================
  79. XdRsData.ip.Game_System_initialize = Game_System.prototype.initialize;
  80. Game_System.prototype.initialize = function() {
  81.     XdRsData.ip.Game_System_initialize.call(this);
  82.     this.clearPurchasedNum();
  83. };
  84. Game_System.prototype.clearPurchasedNum = function() {
  85.     this._purchasedNumData = [[],[],[]];
  86. };
  87. Game_System.prototype.purchasedNum = function(item) {
  88.     var type = XdRsData.ip.getItemType(item);
  89.     return type !== null ? this._purchasedNumData[type][item.id] || 0 : 0;
  90. };
  91. Game_System.prototype.addPurchasedNum = function(item, num) {
  92.     var type = XdRsData.ip.getItemType(item);
  93.     if (type !== null) {
  94.         this._purchasedNumData[type][item.id] = this.purchasedNum(item) + num;
  95.         XdRsData.ip.setupItemPrice(item);
  96.     }
  97. };
  98. //=================================================================================================
  99. XdRsData.ip.Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
  100. Game_Interpreter.prototype.pluginCommand = function(command, args) {
  101.     XdRsData.ip.Game_Interpreter_pluginCommand.call(this, command, args);
  102.     command === 'ClearPurchasedNum' && $gameSystem.clearPurchasedNum();
  103. };
  104. //=================================================================================================
  105. XdRsData.ip.Scene_Shop_prepare = Scene_Shop.prototype.prepare;
  106. Scene_Shop.prototype.prepare = function(goods, purchaseOnly) {
  107.     XdRsData.ip.Scene_Shop_prepare.call(this, goods, purchaseOnly);
  108.     for (var i=0;i<goods.length;++i) {
  109.         if (goods[i][0] === 0) XdRsData.ip.setupItemPrice($dataItems[goods[i][1]]);
  110.         if (goods[i][0] === 1) XdRsData.ip.setupItemPrice($dataWeapons[goods[i][1]]);
  111.         if (goods[i][0] === 2) XdRsData.ip.setupItemPrice($dataArmors[goods[i][1]]);
  112.     }
  113. };
  114. XdRsData.ip.Scene_Shop_doBuy = Scene_Shop.prototype.doBuy;
  115. Scene_Shop.prototype.doBuy = function(number) {
  116.     XdRsData.ip.Scene_Shop_doBuy.call(this, number);
  117.     $gameSystem.addPurchasedNum(this._item, number);
  118. };
  119. //=================================================================================================
  120. // end
  121. //=================================================================================================


物品价格自定义计算.rar (1.52 KB, 下载次数: 41)
作者: 合湾芷樱    时间: 2020-7-31 20:23
芯☆淡茹水 发表于 2020-7-31 18:59
以前 pia 过一个差不多的功能,构思很简单,以为没人会用这样的。

这个插件估计有 大改过商店界面 的不适 ...

谢谢,我试一下




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