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

Project1

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

[已经过期] 【求助】如何在小树的加点脚本中用事件增加可分配点数

[复制链接]

Lv4.逐梦者

梦石
2
星屑
3024
在线时间
398 小时
注册时间
2016-8-16
帖子
123

开拓者

跳转到指定楼层
1
发表于 2016-11-11 20:15:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 RaidenInfinity 于 2016-11-11 20:46 编辑

如题,我用的是无需变量的版本,现在我要设置达成成就的话就可以获取自由分配的点数,那么该怎么办?求助。另外,附上脚本。

RUBY 代码复制
  1. #encoding:utf-8
  2. #=============================================================================
  3. #-----------RMVA加点系统正常向-v1.03---By:救世小树--------转载请注明出处-------
  4. #=============================================================================
  5.  
  6. module Point_Tree
  7.  
  8.   POINT_KIND     = 5       #设定加点种类
  9.   LEVEL_UP_POINT = 5       #每升一级自由属性点增加数
  10.   RESET_ITEM     = 20      #洗点水编号
  11.  
  12.   STR_POINT        = ["增加体质","增加力量","增加魔力","增加灵巧","增加敏捷","     "]
  13.  
  14.   #分别对应增加       [MHP,MMP,物攻,物防,魔攻,魔防,敏捷,幸运]
  15.   POINT_ADD_PARAM = [[25 ,  20,   0,  0,   0,   0,   0,   0],     #体力
  16.                      [0  ,  0,   10,  0,   0,   0,   0,   0],     #力量
  17.                      [2  ,  15,   0,  0,   3,   1,   0,   0],     #魔力
  18.                      [2  ,  2,   0,  0,   0,   0,   0,   3],     #灵巧
  19.                      [0  ,  0,   0,  0,   0,   0,   2,   0],     #敏捷
  20.  
  21.                      [0,0,0,0,0,0,0,0]]
  22.                      #可以按上面的格式添加下去,不过要改POINT_KIND,STR_ALL,不然加了也白加
  23.  
  24.   #分别对应增加       [物理命中,物理闪避,必杀,必杀闪避,魔法闪避,魔法反射,物理反击,HP再生,Mp再生,Tp再生]
  25.   POINT_ADD_XPARAM = [[0 , 0, 0, 0, 0, 0, 0, 5, 5, 0],
  26.                       [0 , 0, 0, 0, 0, 0, 0, 0, 0, 0],
  27.                       [0 , 0, 0, 0, 0, 0, 0, 0, 0, 0],
  28.                       [5 , 0, 5, 0, 0, 0, 5, 0, 0, 0],
  29.                       [0 , 5, 0, 5, 5, 0, 0, 0, 0, 0],
  30.  
  31.                       [0,0,0,0,0,0,0,0,0,0]]
  32.                      #这里的单位是万分之一数值也就是0.01%,我随便填了下【别嫌小,够大了,有心情你可以算算看平衡性】
  33.  
  34.   #各种名称
  35.  
  36.   ADDPOINT       = "加点"     #菜单中选项
  37.   POINT_NAME     = "属性点"   #未分配点数
  38.  
  39.   XARAM_NAME     = ["物理命中","物理闪避","暴击","暴击闪避","魔术闪避","魔术反射","物理反击","体力再生","魔力再生","怒气再生"]
  40.  
  41.  
  42.   def temp_all
  43.     r = 0
  44.     for i in 0 .. POINT_KIND-1
  45.       r+=$temp_point[i]
  46.     end
  47.     return r
  48.   end
  49.  
  50.   def reset(actor_id)
  51.     for i in 1..6
  52.       $game_actors[actor_id].point[0] += $game_actors[actor_id].point[i]
  53.       $game_actors[actor_id].point[i] =0
  54.     end
  55.   end
  56.  
  57. end
  58.  
  59. $temp_point = []
  60. for i in 0 .. Point_Tree::POINT_KIND-1
  61.   $temp_point.push(0)
  62. end
  63.  
  64. class Game_Actor < Game_Battler
  65.   include Point_Tree
  66.   attr_accessor :point
  67.  
  68.   alias setup_tre setup
  69.   def setup(actor_id)
  70.     @point = []
  71.     for i in 0 .. POINT_KIND
  72.       @point.push(0)
  73.     end
  74.     setup_tre(actor_id)
  75.   end
  76.  
  77.  
  78.  
  79.  
  80.   alias level_up_tre level_up
  81.   def level_up
  82.     level_up_tre
  83.     @hp += mhp
  84.     @mp += mmp
  85.     @point[0] += LEVEL_UP_POINT
  86.   end
  87.  
  88.  
  89.  
  90.   def point_plus(param_id)
  91.     r=0
  92.     for i in 1 .. POINT_KIND
  93.       r+=@point[i]*POINT_ADD_PARAM[i-1][param_id]
  94.     end
  95.     return r
  96.   end
  97.  
  98.   alias point_base_param param
  99.  
  100.   def param(param_id)
  101.     value = param_base(param_id) + param_plus(param_id) + point_plus(param_id)
  102.     value *= param_rate(param_id) * param_buff_rate(param_id)
  103.     [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
  104.   end
  105.   def xparam(xparam_id,extra_add = 0)
  106.     xp = super(xparam_id)
  107.     for i in 0 .. POINT_KIND-1
  108.       xp+=(@point[i+1]*POINT_ADD_XPARAM[i][xparam_id]/10000.0)
  109.     end
  110.     return xp
  111.   end
  112.  
  113.   def item_apply(user, item)
  114.     super(user, item)
  115.     if item.id == RESET_ITEM and item.is_a?(RPG::Item)
  116.       reset(@actor_id)
  117.       self.hp = [self.hp,self.mhp].min
  118.       self.mp = [self.mp,self.mmp].min
  119.     end
  120.   end
  121.  
  122. end
  123.  
  124. class Window_Point_Command < Window_Command
  125.  
  126.   include Point_Tree
  127.   #--------------------------------------------------------------------------
  128.   # ● 初始化指令选择位置(类方法)
  129.   #--------------------------------------------------------------------------
  130.   def self.init_command_position
  131.     @@last_command_symbol = nil
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● 初始化对象
  135.   #--------------------------------------------------------------------------
  136.   def initialize(actor)
  137.     @status_window = nil
  138.     @actor = actor
  139.     super(0,0)
  140.     select_last
  141.   end
  142.   def actor=(actor)
  143.     return if @actor == actor
  144.     @actor = actor
  145.     refresh
  146.   end
  147.   def status_window=(status_window)
  148.     return if @status_window == status_window
  149.     @status_window = status_window
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # ● 获取窗口的宽度
  153.   #--------------------------------------------------------------------------
  154.   def window_width
  155.     return 160
  156.   end
  157.   #--------------------------------------------------------------------------
  158.   # ● 获取显示行数
  159.   #--------------------------------------------------------------------------
  160.   def visible_line_number
  161.     item_max
  162.   end
  163.   def get_actor_point(index)
  164.     s = @actor.point[index+1].to_s
  165.     return "("+s+")+"+$temp_point[index].to_s
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ● 生成指令列表
  169.   #--------------------------------------------------------------------------
  170.   def make_command_list
  171.     for i in 0 .. POINT_KIND-1
  172.       add_command(STR_POINT[i]   + get_actor_point(i)  , :point_add  ,add_enabled)
  173.     end
  174.     add_command("确认加点",  :point_ok)
  175.     add_command("取消加点",  :point_cancle)
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● 按下确定键时的处理
  179.   #--------------------------------------------------------------------------
  180.   def process_ok
  181.     @@last_command_symbol = current_symbol
  182.     super
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● 返回最后一个选项的位置
  186.   #--------------------------------------------------------------------------
  187.   def select_last
  188.     select_symbol(@@last_command_symbol)
  189.   end
  190.  
  191.   def add_enabled
  192.     temp_all < @actor.point[0]
  193.   end
  194.  
  195.   def update_help
  196.     @help_window.set_text(self.index+1) if @help_window
  197.     @status_window.index = self.index if @status_window
  198.   end
  199. end
  200.  
  201. #帮助窗口
  202. class Window_Point_Help < Window_Base
  203.   include Point_Tree
  204.   def initialize(x,y,w,h)
  205.     super(x, y, w, h)
  206.  
  207.  
  208.   end
  209.   def set_text(id)
  210.     contents.clear
  211.     if id <= POINT_KIND
  212.       text = "\\}提升一点该属性,每增加一次
  213. 此项点数,可以提升能力值。"
  214.     elsif id == POINT_KIND+1
  215.       text = "\\}确认此次加点分配"
  216.     elsif  id == POINT_KIND+2
  217.       text = "\\}取消此次加点分配"
  218.     end
  219.     draw_text_ex(8, 8, text)
  220.   end
  221. end
  222.  
  223.  
  224. #角色状态窗口
  225. class Window_Point_Actor < Window_Base
  226.   include Point_Tree
  227.  
  228.  
  229.   def initialize(actor)
  230.     super(160, 0, Graphics.width - 160, Graphics.height)
  231.     @actor = actor
  232.     @index = 0
  233.     refresh
  234.   end
  235.   def actor=(actor)
  236.     return if @actor == actor
  237.     @actor = actor
  238.     refresh
  239.   end
  240.   def index=(index)
  241.     return if @index == index
  242.     @index = index
  243.     refresh
  244.   end
  245.   def line_height
  246.     return 24
  247.   end
  248.   def refresh
  249.     contents.clear
  250.     contents.font.size = 24
  251.     draw_actor_name(@actor, 100, 0)
  252.     draw_actor_class(@actor, 240, 0)
  253.     draw_actor_face(@actor, 2, 0)
  254.     contents.font.size = 20
  255.     draw_actor_level(@actor, 102,  24)
  256.     draw_actor_point(100,48)
  257.     contents.font.size = 16
  258.     draw_actor_param_point(8,16 * 6)
  259.     draw_actor_xparam_point(8,16 * 14)
  260.   end
  261.   def draw_actor_point(x,y)
  262.     draw_text(x,y,200,line_height,"  剩余点数"+POINT_NAME + ":" + @actor.point[0].to_s)
  263.     draw_text(x,y+line_height,200,line_height,"此次分配"+POINT_NAME + ":" + temp_all.to_s)
  264.   end
  265.   def draw_actor_param_point(x,y)
  266.     8.times {|i| draw_actor_param_to_s(x,y,i)}
  267.   end
  268.   def draw_actor_xparam_point(x,y)
  269.     10.times {|i| draw_actor_xparam_to_s(x,y,i)}
  270.   end
  271.  
  272.   def draw_actor_param_to_s(x,y,param_id)
  273.     a=0
  274.     for i in 0 .. POINT_KIND-1
  275.       a+=$temp_point[i]*POINT_ADD_PARAM[i][param_id]
  276.     end
  277.     s1 = Vocab::param(param_id)
  278.     s2 = @actor.param(param_id).to_s
  279.     s3 = (@actor.param(param_id)+a).to_s
  280.     if @index < POINT_KIND
  281.       if POINT_ADD_PARAM[@index][param_id]==0
  282.         s4 = ""
  283.       else
  284.         s4 = "+" + POINT_ADD_PARAM[@index][param_id].to_s
  285.       end
  286.     else
  287.       s4 = ""
  288.     end
  289.  
  290.     change_color(system_color)
  291.     draw_text(x,y+16*param_id,100,line_height,s1)
  292.     change_color(normal_color)
  293.     s2+= " →"
  294.     draw_text(x+82,y+16*param_id,120,line_height,s2,2)
  295.     change_color(system_color)
  296.     draw_text(x+150,y+16*param_id,100,line_height,s3,2)
  297.     change_color(normal_color)
  298.     contents.font.size = 14
  299.     draw_text(x+266,y+16*param_id,100,line_height,s4)
  300.     contents.font.size = 16
  301.   end
  302.   def draw_actor_xparam_to_s(x,y,xparam_id)
  303.     a=0.00
  304.     for i in 0 .. POINT_KIND-1
  305.       a+=($temp_point[i]*POINT_ADD_XPARAM[i][xparam_id]/10000.0)
  306.     end
  307.     s1 = XARAM_NAME[xparam_id]
  308.     s2 = sprintf("%02.2f%%",@actor.xparam(xparam_id)*100)
  309.     s3 = sprintf("%02.2f%%",(@actor.xparam(xparam_id) + a)*100)
  310.  
  311.     if @index < POINT_KIND
  312.       if POINT_ADD_XPARAM[@index][xparam_id]==0
  313.         s4=""
  314.       else
  315.         s4 = sprintf("+%02.2f%%",POINT_ADD_XPARAM[@index][xparam_id]/100.0)
  316.       end
  317.     else
  318.       s4 = ""
  319.     end
  320.  
  321.     change_color(system_color)
  322.     draw_text(x,y+16*xparam_id,100,line_height,s1)
  323.     change_color(normal_color)
  324.     s2+= " →"
  325.     draw_text(x+82,y+16*xparam_id,120,line_height,s2,2)
  326.     change_color(system_color)
  327.     draw_text(x+150,y+16*xparam_id,100,line_height,s3,2)
  328.     change_color(normal_color)
  329.     contents.font.size = 14
  330.     draw_text(x+266,y+16*xparam_id,100,line_height,s4)
  331.     contents.font.size = 16
  332.  
  333.  
  334.   end
  335. end
  336.  
  337. class Scene_Point < Scene_Base
  338.   include Point_Tree
  339.   def start
  340.     super
  341.     create_background
  342.     @actor = $game_party.menu_actor
  343.     create_command_window
  344.     create_status_window
  345.     create_help_window
  346.     @command_window.activate
  347.   end
  348.   def terminate
  349.     super
  350.     dispose_background
  351.   end
  352.   def create_background
  353.     @background_sprite = Sprite.new
  354.     @background_sprite.bitmap = SceneManager.background_bitmap
  355.     @background_sprite.color.set(16, 16, 16, 128)
  356.   end
  357.   def dispose_background
  358.     @background_sprite.dispose
  359.   end
  360.  
  361.   def create_command_window
  362.     @command_window = Window_Point_Command.new(@actor)
  363.     @command_window.set_handler(:cancel,      method(:return_scene))
  364.     @command_window.set_handler(:pagedown,    method(:next_actor))
  365.     @command_window.set_handler(:pageup,      method(:prev_actor))
  366.     @command_window.set_handler(:point_add,   method(:add_point))
  367.     @command_window.set_handler(:point_ok,    method(:add_ok))
  368.     @command_window.set_handler(:point_cancle,method(:add_cancle))
  369.  
  370.   end
  371.   def return_scene
  372.     add_cancle
  373.     SceneManager.return
  374.   end
  375.   def create_status_window
  376.     @status_window = Window_Point_Actor.new(@actor)
  377.     @command_window.status_window = @status_window
  378.   end
  379.   def create_help_window
  380.     @help_window = Window_Point_Help.new(0,@command_window.height,160,[email]Graphics.height-@command_window.height[/email])
  381.     #(0, 216, 160, 200)
  382.     @help_window.viewport = @viewport
  383.     @command_window.help_window = @help_window
  384.   end
  385.  
  386.   def add_point
  387.     if temp_all >= @actor.point[0]
  388.       @command_window.activate
  389.       return
  390.     end
  391.     $temp_point[@command_window.index] += 1
  392.     @status_window.refresh
  393.     @command_window.refresh
  394.     @command_window.activate
  395.   end
  396.  
  397.  
  398.   def add_ok
  399.     for i in 0 .. POINT_KIND-1
  400.       @actor.point[i+1] += $temp_point[i]
  401.     end
  402.     @actor.point[0]-= temp_all
  403.     add_cancle
  404.   end
  405.  
  406.   def add_cancle
  407.     for i in 0 .. POINT_KIND-1
  408.       $temp_point[i]=0
  409.     end
  410.     @status_window.refresh
  411.     @command_window.refresh
  412.     @command_window.activate
  413.   end
  414.  
  415.  
  416.   def next_actor
  417.     @actor = $game_party.menu_actor_next
  418.     on_actor_change
  419.   end
  420.   #--------------------------------------------------------------------------
  421.   # ● 切换到上一个角色
  422.   #--------------------------------------------------------------------------
  423.   def prev_actor
  424.     @actor = $game_party.menu_actor_prev
  425.     on_actor_change
  426.   end
  427.   #--------------------------------------------------------------------------
  428.   # ● 切换角色
  429.   #--------------------------------------------------------------------------
  430.   def on_actor_change
  431.     add_cancle
  432.     @status_window.actor = @actor
  433.     @command_window.actor = @actor
  434.     @command_window.activate
  435.   end
  436.  
  437. end
  438.  
  439.  
  440. class Scene_Menu < Scene_MenuBase
  441.   alias create_command_window_old create_command_window
  442.   def create_command_window
  443.     create_command_window_old
  444.     @command_window.set_handler(:addpoint,method(:add_point))
  445.   end
  446.   def add_point
  447.     @status_window.select_last
  448.     @status_window.activate
  449.     @status_window.set_handler(:ok,     method(:on_ok))
  450.     @status_window.set_handler(:cancel, method(:on_personal_cancel))
  451.   end
  452.   def on_ok
  453.     SceneManager.call(Scene_Point)
  454.     Window_Point_Command::init_command_position
  455.   end
  456. end
  457.  
  458.  
  459.  
  460. class Scene_ItemBase < Scene_MenuBase
  461.   def item_usable?
  462.     if item.id == Point_Tree::RESET_ITEM and item.is_a?(RPG::Item)
  463.       return true
  464.     end
  465.     user.usable?(item) && item_effects_valid?
  466.   end
  467. end
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474. class Window_Status < Window_Selectable
  475.   include Point_Tree
  476.   alias draw_parameters_old draw_parameters
  477.   def draw_parameters(x, y)
  478.     draw_parameters_old(x,y)
  479.     draw_point(x,y)
  480.   end
  481.   def draw_point(x,y)
  482.     for i in 0..5
  483.       change_color(system_color)
  484.       draw_text(x+300, y+ line_height * i, 80, line_height, STR_POINT[i])
  485.       change_color(normal_color)
  486.       draw_text(x+380, y+ line_height * i, 36, line_height,@actor.point[i+1].to_s, 2)
  487.     end
  488.   end
  489.  
  490. end
  491.  
  492. class Window_Base < Window
  493.   def draw_actor_param(actor, x, y, param_id)
  494.     change_color(system_color)
  495.     draw_text(x-30, y, 80, line_height, Vocab::param(param_id))
  496.     change_color(normal_color)
  497.     draw_text(x+ 50, y, 36, line_height, actor.param(param_id), 2)
  498.   end
  499. end


附上自己做的图标

4.PNG (490 Bytes, 下载次数: 18)

4.PNG

1.PNG (469 Bytes, 下载次数: 19)

1.PNG

3.PNG (356 Bytes, 下载次数: 19)

3.PNG

点评

93行报错...  发表于 2016-11-11 20:34

Lv4.逐梦者

梦石
2
星屑
3024
在线时间
398 小时
注册时间
2016-8-16
帖子
123

开拓者

2
 楼主| 发表于 2016-11-11 20:38:59 | 只看该作者
这个脚本我自己改了很多的!!
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

漾夕☽星化残月☾

梦石
0
星屑
8596
在线时间
3857 小时
注册时间
2015-5-12
帖子
2077

剧作品鉴家

3
发表于 2016-11-11 20:45:19 | 只看该作者
本帖最后由 御曹司 于 2016-11-11 21:08 编辑

$game_actors[actor_id].point[0]
就是你要的变量的写法、把actor_id写上然后用脚本里面改变量写法改就行了。
我想吐槽为什么不用代码框?
另外注意转载声明

还有就是我用那个帖子里面的代码实验的...
l

点评

喝杯溫水冷靜一下  发表于 2016-11-11 20:59
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
6901
在线时间
7028 小时
注册时间
2013-11-2
帖子
1344

开拓者剧作品鉴家

4
发表于 2016-11-11 20:59:44 | 只看该作者
本帖最后由 RaidenInfinity 于 2016-11-11 21:02 编辑

在第88行加入:

RUBY 代码复制
  1. def add_points(i)
  2.   @points[0] += i
  3. end


然后在事件脚本指令里面调用:

RUBY 代码复制
  1. $game_actors[角色ID].add_points(可分配点数)
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
2
星屑
3024
在线时间
398 小时
注册时间
2016-8-16
帖子
123

开拓者

5
 楼主| 发表于 2016-11-11 21:13:03 | 只看该作者
本帖最后由 卫宫白 于 2016-11-11 21:21 编辑

谢谢了,但是为什么我的游戏总是报错?

点评

这非常难解决,因为我们完全不知道你报的是什么类型的错,还有报错的讯息。  发表于 2016-11-11 21:59
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
2
星屑
3024
在线时间
398 小时
注册时间
2016-8-16
帖子
123

开拓者

6
 楼主| 发表于 2016-11-11 23:37:39 | 只看该作者

不是拉,就是脚本有冲突。每次调用脚本事件时总会跳错。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 12:24

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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