查看: 11306|回复: 19

[原创发布] 【原创脚本】天赋树/天赋系统/技能树

[复制链接]
梦石
0
星屑
4881
在线时间
425 小时
注册时间
2019-10-22
回帖
647
发表于 2020-1-17 12:20:47 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 坏数据 于 2020-2-10 14:43 编辑

自从入坑rm以来 随着自己的需求逐渐增多,慢慢地在论坛上外站上搜刮来的脚本已经不能满足我的需求了。
于是也就逐渐进入了学习脚本 - 魔改界面 - 修改功能 - 原创脚本的不归路
之前也写过几个自用的脚本 但是都没有好好整理 东一块西一块 别人拿了用不了
于是这次的天赋系统从最开始构思就考虑到了通用性 直接在空白工程里面开始写
现在分享出来

由于是算是第一个完完整整独立完成的原创脚本,里面很多包括代码结果 或者逻辑 或者方法的调用都非常的稚嫩
实例变量这个东西也是在这个脚本完成的末期才完全理解的  
所以这里面可能还有很多不完善的地方 也可能有未曾预想到的bug 请大家多多包涵
因为设置错误或者其他问题导致的报错没有考虑在内

卖家秀

卖家秀


买家秀

买家秀


基本功能都在代码描述里面了,没有范例,如果想要范例, 就新建空白工程然后丢进去, 地图上做一个可以给角色升级的事件,就可以完全测试这个脚本的功能了。
遇到什么bug或者有什么建议请回帖反馈 我会持续更新的(大概)

[fold=代码在此 【猛戳】][pre lang="ruby"]=begin
===============================================================================
  【Baddata】技能树/天赋系统/天赋树 - 技能学习扩展
===============================================================================

MIT协议

  【脚本使用说明书】
  
    版本 Verson
    v0.6
   
    作者 Baddata
   
  【说明】
    在默认的技能界面中加入了一个技能树窗口
    技能树有不同的层数 从上到下 为前置技能和高级技能
    角色升级的时候可以获得技能点, 消耗技能点可以升级选中的技能
    技能点不足无法学习技能
    灰色技能为未达到学习需求,每一层的技能学习需要至少学会一个上层的技能
   
    支持使用状态来制作被动技能,
    被动技能不会显示在技能列表中,但是可以在技能树里面查看
   
    状态本身没有描述文本
    在备注栏里面用以下格式写备注,就会像技能的说明一样在技能树里面显示
   
    <帮助 炙炎之力 - 提升使用者的炎属性伤害并维持五回合。> or <帮助 描述一下这个技能干蛤用的>
   
   
   *把脚本插入Main之前即可
=end

module Baddata end
module Baddata::SKILLTREE
  
  #根据角色设定技能树 true  根据职业设定技能树 false
  SKILLTREE_BY_ACTOR = true
  
  #角色每升 X 级获得 1技能点
  LEVELUP_REQUIRE_POINT = 5
  
  #技能树设置表 (此处仅仅作为范例,请自行设置)
  SkillTree_Setting = [
    #[#0层数, #1类型:1-技能 / 2-状态 ,#2技能/状态ID, #3角色/职业ID, #4消耗技能点]
    #可选参数# [#5 需求上层技能掌握数量] - "2"代表上一层至少要学会2个技能才能点亮此技能
      [1, 1, 100, 1, 1], #每一个数组代表一个技能
      [1, 1, 101, 1, 1],
      [2, 2,  21, 1, 1],
      [2, 1, 103, 1, 1],
      [2, 1, 104, 1, 1],
      [2, 2,  22, 1, 1],
      [3, 1, 106, 1, 1],
      [3, 2,  23, 1, 1, 2], #此技能需要至少两个上一层的前置技能
      [3, 1, 108, 1, 1],
      [4, 1, 109, 1, 1],
      [4, 1, 110, 1, 1],
      [4, 1, 111, 1, 1],
      [4, 1, 112, 1, 1],
      [5, 1, 113, 1, 1],
      [5, 1, 114, 1, 1],
      [5, 1, 115, 1, 1],
      [5, 1, 116, 1, 1],
      [6, 1, 117, 1, 1],
      
      [1, 1, 100, 2, 1],
      [1, 1, 101, 2, 1],
      [1, 2,  21, 2, 1],
      [2, 1, 103, 2, 1],
      [2, 1, 104, 2, 1],
      [2, 2,  22, 2, 1],
      [3, 1, 106, 2, 1],
      [3, 2,  23, 2, 1],
      [4, 1, 108, 2, 1],
    ]
end
#==============================================================================
# Log:
#     修复一层技能数量大于上层数量时图标位置错误
#     修复状态的备注描述文本无法输入空格
#     修复循环刷新导致的卡顿
#     修复光标"偷跑" 修复浮点数运算bug
#     修复切换角色时光标位置在不存在的技能上报错
#     加入第六参数(可选):需求上层技能掌握数量
#     状态作为被动不再在状态窗口中显示
#     修复因为死亡/完全回复导致的状态清除
#     修复更新状态回合数时报错
#
#==============================================================================

  #如果你不清楚自己在做什么,请勿修改以下代码

class Game_BattlerBase
  alias baddata011720_initialize initialize
  def initialize
    baddata011720_initialize
    @passive = []
  end
  #--------------------------------------------------------------------------
  # ● 获取当前状态的实例数组
  #--------------------------------------------------------------------------
  alias baddata011720_states states
  def states
    return baddata011720_states + @passive.collect {|id| $data_states[id] }
  end
  #--------------------------------------------------------------------------
  # ● 检査是否含有某状态
  #--------------------------------------------------------------------------
  def passive?(passive_id)
    @passive.include?(passive_id)
  end
  #--------------------------------------------------------------------------
  # ● 获取当前状态的图标编号数组
  #--------------------------------------------------------------------------
  def state_icons
    icons = states.collect {|state| @passive.include?(state.id)? 0 : state.icon_index}
    icons.delete(0)
    icons
  end
end

class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 附加状态(被动)
  #--------------------------------------------------------------------------
  def add_passive(state_id)
    @passive.push(state_id) if state_addable?(state_id)
    refresh
    reset_state_counts(state_id)
  end
end
#==============================================================================
# ■ Window_SkillTree
#------------------------------------------------------------------------------
#  技能画面中,显示技能的窗口。
#==============================================================================
include Baddata::SKILLTREE
class Window_SkillTree < Window_Base
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_reader   :help_window              # 帮助窗口
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
    super
    @handler = {}
    @actor = nil
    @old_index
    @cursor_index = 0
    @skills4actor = []
    @item_sprite = []
    @viewportI = Viewport.new
    @viewportI.z = 9999
    deactivate
  end
  def index
    @cursor_index
  end
  def index=(index)
    @cursor_index = index
    update_cursor
  end
  def skills4actor
    @skills4actor
  end
  #--------------------------------------------------------------------------
  # ● 设置角色
  #--------------------------------------------------------------------------
  def actor=(actor)
    return if @actor == actor
    @actor = actor
    refresh
    self.oy = 0
  end
  #--------------------------------------------------------------------------
  # ● 绘制技能树
  #--------------------------------------------------------------------------
  def make_skill_tree
    @skills4actor = SKILLTREE_BY_ACTOR ? SkillTree_Setting.select{|a| a[3] == @actor.id} : SkillTree_Setting.select{|a| a[3] == @actor.class_id}
    @skills4actor.sort_by{|a| a[0]}
    @skills4actor.each_with_index do |skill,index|
      skilllevelcount = @skills4actor.count {|lv| lv[0] == skill[0]}
      preskillscount = @skills4actor.count {|lv| lv[0] < skill[0]}
      x = ((index-preskillscount) % skilllevelcount+1)* self.width / (skilllevelcount +1) - 24
      y = skill[0] * 38
      item = skill[1] == 1 ? $data_skills[skill[2]] : $data_states[skill[2]]
      
      @item_sprite[index].dispose if @item_sprite[index]
      @item_sprite[index] = Sprite.new(@viewportI)
      @item_sprite[index].x = x + 12 + self.x
      @item_sprite[index].y = y + 12 + self.y
      @item_sprite[index].bitmap = draw_item(item,0,0,skill[1] == 1 ? @actor.skill_learn?(item) : @actor.passive?(item.id))
      reach_level_required?(skill) ? @item_sprite[index].tone = Tone.new(0,0,0,0) : @item_sprite[index].tone = Tone.new(0,0,0,255)
      @item_sprite[index].visible = self.visible
    end
    draw_text(-20,0,contents.width,line_height,"剩余技能点:",2)
    draw_text(0,0,contents.width,line_height,($game_skill_points[@actor.name] /LEVELUP_REQUIRE_POINT).to_i,2)
  end
  #--------------------------------------------------------------------------
  # ● 绘制项目
  #--------------------------------------------------------------------------
  def draw_item(item, x, y, enabled = true)
    draw_icon_plus(item.icon_index, x, y, enabled)
  end
  #--------------------------------------------------------------------------
  # ● 绘制图标
  #     enabled : 有效的标志。false 的时候使用半透明效果绘制
  #--------------------------------------------------------------------------
  def draw_icon_plus(icon_index, x, y, enabled = true)
    output = Bitmap.new(36,36)
    bitmap = Cache.system("Iconset")
    rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
    output.blt(x, y, bitmap, rect, enabled ? 255 : 120)
    output
  end
  #--------------------------------------------------------------------------
  # ● 获取技能是否达到可以学习状态(彩色)
  #--------------------------------------------------------------------------
  def reach_level_required?(skill)
    if skill[0] >= 2
      skill_learned = false
      state_had = false
      counter = 0
      
      @skills4actor.each do |a|
        if @actor.skill_learn?($data_skills[a[2]]) && a[0] == skill[0]-1 && a[1] == 1
          skill_learned = true
          counter +=1
        end
      end
      
      @skills4actor.each do |a|
        if @actor.passive?(a[2]) && a[0] == skill[0]-1 && a[1] == 2
          state_had = true
          counter +=1
        end
      end
      
      return counter >= skill[5] if skill[5]
      return skill_learned || state_had
    else
      return true
    end
  end
  #--------------------------------------------------------------------------
  # ● 移动光标选择技能
  #--------------------------------------------------------------------------
  def set_cursor_index
    @old_index = @cursor_index
   
    last_skilllevelcount = @skills4actor.count {|lv| lv[0] == (cursor_at[0]-1)}
    skilllevelcount = @skills4actor.count {|lv| lv[0] == cursor_at[0]}
   
    @cursor_index -= 1 if Input.trigger?(:LEFT)
    @cursor_index += 1 if Input.trigger?(:RIGHT) unless cursor_at == @skills4actor[-1]
   
    @cursor_index -= last_skilllevelcount if Input.trigger?(:UP)
    @cursor_index += skilllevelcount if Input.trigger?(:DOWN)
    return @cursor_index = 0 if @cursor_index <= 0
    return @cursor_index = @skills4actor.size-1 if @cursor_index >= @skills4actor.size-1
  end
  def cursor_at
    @skills4actor[@cursor_index]
  end
  #--------------------------------------------------------------------------
  # ● 更新光标
  #--------------------------------------------------------------------------
  def cursor_x
    skilllevelcount = @skills4actor.count {|lv| lv[0] == cursor_at[0]}
    preskillscount = @skills4actor.count {|lv| lv[0] < cursor_at[0]}
    x = ((@cursor_index-preskillscount) % skilllevelcount+1)* self.width / (skilllevelcount +1) - 30
    return x
  end
  def cursor_y
    return cursor_at[0] * 38 - 6
  end
  def update_cursor
    return unless cursor_movable?
    set_cursor_index
    cursor_rect.set(cursor_x, cursor_y, 36, 36)
  end
  #--------------------------------------------------------------------------
  # ● 判定光标是否可以移动
  #--------------------------------------------------------------------------
  def cursor_movable?
    active
  end
  #--------------------------------------------------------------------------
  # ● 更改启用状态
  #--------------------------------------------------------------------------
  def active=(active)
    super
    update_cursor
    call_update_help
  end
  #--------------------------------------------------------------------------
  # ● 设置帮助
  #--------------------------------------------------------------------------
  def update_help_text
    ch = contents.height
    cw = contents.width
    skill_name = cursor_at[1] == 1 ? $data_skills[cursor_at[2]].name : $data_states[cursor_at[2]].name
    draw_text(0,ch-70,cw,line_height,"学习新技能")
    draw_text(0,ch-70,cw,line_height,skill_name,2)
    draw_text(0,ch-40,cw,line_height,"消耗技能点")
    draw_text(0,ch-40,cw,line_height,@skills4actor[@cursor_index][4],2)
  end
  #--------------------------------------------------------------------------
  # ● 设置帮助窗口
  #--------------------------------------------------------------------------
  def help_window=(help_window)
    @help_window = help_window
    call_update_help
  end
  #--------------------------------------------------------------------------
  # ● 设置动作对应的处理方法
  #     method : 设置的处理方法 (Method 实例)
  #--------------------------------------------------------------------------
  def set_handler(symbol, method)
    @handler[symbol] = method
  end
  #--------------------------------------------------------------------------
  # ● 确认处理方法是否存在
  #--------------------------------------------------------------------------
  def handle?(symbol)
    @handler.include?(symbol)
  end
  #--------------------------------------------------------------------------
  # ● 调用处理方法
  #--------------------------------------------------------------------------
  def call_handler(symbol)
    @handler[symbol].call if handle?(symbol)
  end
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  def update
    super
    update_cursor
    refresh if @old_index != @cursor_index
    process_handling
  end
  #--------------------------------------------------------------------------
  # ● “确定”和“取消”的处理
  #--------------------------------------------------------------------------
  def process_handling
    return unless open? && active
    return process_ok       if ok_enabled?        && Input.trigger?(:C)
    return process_cancel   if cancel_enabled?    && Input.trigger?(:B)
  end
  #--------------------------------------------------------------------------
  # ● 获取确定处理的有效状态
  #--------------------------------------------------------------------------
  def ok_enabled?
    handle?(:ok)
  end
  #--------------------------------------------------------------------------
  # ● 获取取消处理的有效状态
  #--------------------------------------------------------------------------
  def cancel_enabled?
    handle?(:cancel)
  end
  #--------------------------------------------------------------------------
  # ● 按下确定键时的处理
  #--------------------------------------------------------------------------
  def process_ok
    if reach_level_required?(cursor_at)#current_item_enabled?
      Input.update
      deactivate
      call_ok_handler
    else
      Sound.play_buzzer
    end
  end
  #--------------------------------------------------------------------------
  # ● 调用“确定”的处理方法
  #--------------------------------------------------------------------------
  def call_ok_handler
    call_handler(:ok)
  end
  #--------------------------------------------------------------------------
  # ● 按下取消键时的处理
  #--------------------------------------------------------------------------
  def process_cancel
    @cursor_index = 0
    Sound.play_cancel
    Input.update
    deactivate
    call_cancel_handler
  end
  #--------------------------------------------------------------------------
  # ● 调用“取消”的处理方法
  #--------------------------------------------------------------------------
  def call_cancel_handler
    call_handler(:cancel)
  end
  #--------------------------------------------------------------------------
  # ● 调用帮助窗口的更新方法
  #--------------------------------------------------------------------------
  def call_update_help
    update_help if active && @help_window
  end
  #--------------------------------------------------------------------------
  # ● 更新帮助内容
  #--------------------------------------------------------------------------
  def update_help
    @help_window.clear
    if cursor_at[1] == 1
      @help_window.set_item($data_skills[cursor_at[2]])
    else
      help_text = $data_states[cursor_at[2]].note.match(/<帮助 (.*)>/) ? $1.to_s : ""
      @help_window.set_text(help_text)
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    @item_sprite.each {|wtf| wtf.dispose}
    create_contents
    make_skill_tree
    call_update_help
    update_help_text
  end
end


class Window_SkillCommand < Window_Command
  #--------------------------------------------------------------------------
  # ● 生成指令列表
  #--------------------------------------------------------------------------
  alias baddata011120_make_command_list make_command_list
  def make_command_list
    baddata011120_make_command_list
    add_command("技能树", :skill_tree)
  end
end

#==============================================================================
# ■ Scene_Skill
#------------------------------------------------------------------------------
#  技能画面
#==============================================================================

class Scene_Skill < Scene_ItemBase
include Baddata::SKILLTREE
  #--------------------------------------------------------------------------
  # ● 开始处理
  #--------------------------------------------------------------------------
  alias baddata01120_start start
  def start
    baddata01120_start
    @skills4actor = []
    create_skilltree_window
  end
  #--------------------------------------------------------------------------
  # ● 生成指令窗口
  #--------------------------------------------------------------------------
  alias baddata011120_create_command_window create_command_window
  def create_command_window
    baddata011120_create_command_window
    @command_window.set_handler(:skill_tree,    method(:command_skill_tree))
  end
  #--------------------------------------------------------------------------
  # ● 创建技能树窗口
  #--------------------------------------------------------------------------
  def create_skilltree_window
    wy = @help_window.height
    ww = @status_window.width#104*3
    wx = Graphics.width - ww
    wh = Graphics.height - @help_window.height
    @skilltree_window = Window_SkillTree.new(wx,wy,ww,wh)
    @skilltree_window.actor = @actor
    @skilltree_window.help_window = @help_window
    @skilltree_window.hide.deactivate
    @skilltree_window.refresh
    @skilltree_window.set_handler(:ok,     method(:on_skill_ok))
    @skilltree_window.set_handler(:cancel, method(:on_skill_cancel))
  end
  #--------------------------------------------------------------------------
  # ● 指令“技能”
  #--------------------------------------------------------------------------
  def command_skill
    @item_window.activate
    @item_window.select_last
    @skilltree_window.hide.deactivate if @skilltree_window
  end
  def command_skill_tree
    @status_window.hide
    @item_window.hide.deactivate
    @skilltree_window.index = 0
    @skilltree_window.show.activate
    @skilltree_window.refresh
  end
  #--------------------------------------------------------------------------
  # ● 读取光标位置
  #--------------------------------------------------------------------------
  def index
    @skilltree_window.index
  end
  #--------------------------------------------------------------------------
  # ● 读取Actor拥有的全部技能数组
  #--------------------------------------------------------------------------
  def Skills4actor
    @skills4actor = SKILLTREE_BY_ACTOR ? SkillTree_Setting.select{|a| a[3] == @actor.id} : SkillTree_Setting.select{|a| a[3] == @actor.class_id}
  end
  #--------------------------------------------------------------------------
  # ● 按下“确定”
  #--------------------------------------------------------------------------
  def on_skill_ok
    determine_skill
    @skilltree_window.refresh
    @skilltree_window.activate
  end
  #--------------------------------------------------------------------------
  # ● 按下“取消”
  #--------------------------------------------------------------------------
  def on_skill_cancel
    @skilltree_window.hide.deactivate
    @skilltree_window.refresh
    @item_window.show
    @status_window.show
    @command_window.activate
  end
  #--------------------------------------------------------------------------
  # ● 开始处理
  #--------------------------------------------------------------------------
  def determine_skill
    selected_skill = @skilltree_window.skills4actor[index] #当前index指向技能
    if selected_skill[1] == 1
      unless @actor.skill_learn?($data_skills[selected_skill[2]])
        if $game_skill_points[@actor.name] >= selected_skill[4] * LEVELUP_REQUIRE_POINT  
          @actor.learn_skill(selected_skill[2])
          $game_skill_points[@actor.name] -= selected_skill[4] * LEVELUP_REQUIRE_POINT
          Sound.play_ok
        else
          Sound.play_buzzer
        end
        print $game_skill_points[@actor.name]
        print"\n"
      end
    else
      unless @actor.passive?(selected_skill[2])
        if $game_skill_points[@actor.name] >= selected_skill[4] * LEVELUP_REQUIRE_POINT  
          @actor.add_passive(selected_skill[2])
          $game_skill_points[@actor.name] -= selected_skill[4] * LEVELUP_REQUIRE_POINT
          Sound.play_ok
        else
          Sound.play_buzzer
        end
        print $game_skill_points[@actor.name]
        print"\n"
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 切换角色
  #--------------------------------------------------------------------------
  alias baddata011120on_actor_change on_actor_change
  def on_actor_change
    @skilltree_window.actor = @actor
    baddata011120on_actor_change
  end
end

#--------------------------------------------------------------------------
# ● 升级添加技能点
#--------------------------------------------------------------------------
class Game_Actor < Game_Battler
  alias baddata011120_level_up level_up
  def level_up
    baddata011120_level_up
    $game_skill_points[@name] = 1 unless $game_skill_points[@name]
    $game_skill_points[@name] += 1
  end
end
  

#--------------------------------------------------------------------------
# ● 存档保存技能点
#--------------------------------------------------------------------------

module DataManager
  # 开始新游戏时增加$game_skill_points变量
  DataManager.singleton_class.send(:alias_method, :badd_create_game_objects, :create_game_objects)
  def self.create_game_objects
    badd_create_game_objects
    $game_skill_points = Hash.new
    $game_skill_points.default = 1
  end
  
  # 存档时保存$game_skill_points变量
  DataManager.singleton_class.send(:alias_method, :badd_make_save_contents, :make_save_contents)
  def self.make_save_contents
    contents = badd_make_save_contents
    contents[:skill_points] = $game_skill_points
    contents
  end
  
  # 读档时读取$game_skill_points变量
  DataManager.singleton_class.send(:alias_method, :badd_extract_save_contents, :extract_save_contents)
  def self.extract_save_contents(contents)
    badd_extract_save_contents(contents)
    $game_skill_points = contents[:skill_points]
  end
end[/pre]
[/fold]

#===============================
#更新 1/17/20 2:00AM
#===============================
注意到了状态清除的问题,采用老鹰的建议进行修改
同时移除在状态窗口中显示技能树中的以状态设置被动产生的状态图标(绕口令)

评分

参与人数 12赞 +12 收起 理由
TQX小风 + 1 精品文章
船走听雨眠 + 1 精品文章
SR-262D3E7X + 1 感想分享!
阵颜 + 1 感谢热心分享
刈飒的风 + 1 精品文章
natsukodopa + 1 精品文章
冷俊逸 + 1 精品文章
静默的深秋君 + 1 我很赞同
涅炎 + 1 我很喜欢
Cupidk爱呗茶 + 1

查看全部评分

















老鹰

梦石
40
星屑
37812
在线时间
7091 小时
注册时间
2012-5-26
回帖
3297

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

发表于 2020-1-17 12:51:10 | 显示全部楼层
本帖最后由 百里_飞柳 于 2020-1-17 12:54 编辑

厉害了,除了这个设置感觉完全抛弃了队友的技能树外,还是很实用的!

尤其是用状态来做被动技能,感觉和状态的其他联动也有非常大的扩展空间。
不过似乎没有考虑到 完全恢复/死亡 ,可能会把状态清空?
推荐用新的数组来存储这些被动状态,然后battler读取状态时在旧的基础上加上这个新的数组。

以及技能树不画连线的吗?
我之前糊的一个简单的画线API:https://github.com/OneEyedEagle/ ... 7%BB%98%E5%88%B6.rb
在上下层之间画上连线(如果激活就画白色,未激活画灰色),会显得更加明确吧。

点评

甚至全点评还行;毕竟脚本不用多华丽,只要能完成一个有趣的功能,就是很实用的啦hhh  发表于 2020-1-17 13:23
感谢大神看得起这个只有雏形的脚本 顺便在大神的github里找到很多有用的东西 <3  发表于 2020-1-17 13:14
状态清空的情况 好像是我没不知道完全恢复/死亡会导致状态情况 以为只要制作者不要做人为清状态的事件就没事了 会作相关修改的  发表于 2020-1-17 13:12
状态做被动这个 第一个问题是图标会显示在各个状态窗口中 这个后面会加入修改 state_icons 的功能 可以自定义哪些图标不显示  发表于 2020-1-17 13:11
因为一开始的想法是做成lol s6版本的天赋系统那种的(不算抄袭lol吧 反正不是lol原创的 上世纪欧美rpg就有了) 所以没有连线 上下层本身也没有树状关系  发表于 2020-1-17 12:55
回复

使用道具 举报

梦石
3
星屑
7336
在线时间
608 小时
注册时间
2019-9-15
回帖
112

R考场第七期金奖

发表于 2020-1-17 22:23:38 | 显示全部楼层
看起来好漂亮的系统啊 可惜我在用的是XP
********
回复

使用道具 举报

梦石
0
星屑
375
在线时间
81 小时
注册时间
2009-5-19
回帖
11
发表于 2020-5-8 01:46:10 | 显示全部楼层
在技能树界面选择天赋后,没有弹出天赋帮助窗口= 3 =不知道要咋办~
回复

使用道具 举报

梦石
0
星屑
1877
在线时间
220 小时
注册时间
2018-8-5
回帖
75
发表于 2020-5-8 06:57:55 | 显示全部楼层
那个人物是莱特吗?

点评

什么鬼 这是我还在制作中的游戏主角  发表于 2020-5-9 01:10
一点一点加油
回复

使用道具 举报

梦石
0
星屑
1877
在线时间
220 小时
注册时间
2018-8-5
回帖
75
发表于 2020-5-10 12:48:58 | 显示全部楼层
刈飒的风 发表于 2020-5-8 06:57
那个人物是莱特吗?

没什么,你的就是我的,(•̀⌄•́)
一点一点加油
回复

使用道具 举报

梦石
0
星屑
4881
在线时间
425 小时
注册时间
2019-10-22
回帖
647
 楼主| 发表于 2020-5-11 07:50:20 | 显示全部楼层
ouye8686 发表于 2020-5-8 01:46
在技能树界面选择天赋后,没有弹出天赋帮助窗口= 3 =不知道要咋办~

天赋帮助窗口? 技能树界面 选择后就直接升级那一项了  除非你没有剩余技能点。
帮助窗口不是最上面那个么 你看看是不是你其他脚本给覆盖了
















回复

使用道具 举报

梦石
0
星屑
1507
在线时间
115 小时
注册时间
2020-5-10
回帖
78
发表于 2020-5-11 09:47:44 | 显示全部楼层
哇,好好看啊!给力!
"明るい夜"のために
回复

使用道具 举报

梦石
0
星屑
4970
在线时间
489 小时
注册时间
2017-5-30
回帖
27
发表于 2020-8-1 18:26:23 | 显示全部楼层
本帖最后由 船走听雨眠 于 2020-8-1 18:27 编辑

大佬厉害!!!
但是我发现这个可以做到把一层的天赋全部点完…………有没有办法做成现在LOL那样的一层只能点一个技能的那种,然后按取消键可以重置洗点再重新点的那样子。
回复

使用道具 举报

梦石
0
星屑
4881
在线时间
425 小时
注册时间
2019-10-22
回帖
647
 楼主| 发表于 2020-8-6 08:39:11 | 显示全部楼层
船走听雨眠 发表于 2020-8-1 18:26
大佬厉害!!!
但是我发现这个可以做到把一层的天赋全部点完…………有没有办法做成现在LOL那样 ...

过奖过奖
其实现在是通过等级和层数配合连限制的 也就是 玩家可以选择多点前面的技能 但是这样就点不出后面的终极技能  有点像老版的lol天赋

如果要改可以改成限制每一层一个 我有空想想怎么弄
















回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部