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

Project1

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

仿·双星物语-经验值靠食物获得

 关闭 [复制链接]

Lv3.寻梦者

梦石
3
星屑
50
在线时间
177 小时
注册时间
2008-3-21
帖子
939
跳转到指定楼层
1
发表于 2008-6-5 02:23:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本人半夜死活睡不着逼出来的一个怨念产物。。。。。。{/zhem}{/zhem}

这个系统将游戏设定得与《双星物语》类似,角色的经验增长不是靠击败敌人获得,而是靠汲取食物中的营养获得。

设定方法:如“曲奇饼,1”则意义是:名称为“曲奇饼”的物品,吃下后获得1点经验。

冲突可能:窗口描画类、物品使用类等。

示例工程:
http://rpg.blue/upload_program/f ... ��成)_93032563.rar

核心脚本:


  1. # 食物增长经验 V1.00
  2. # 制作 SLICK

  3. module RPG
  4.   class Item #定义方法(格式像这样:曲奇饼,1)
  5.     attr_writer :i_iexp
  6.     def name
  7.       name = @name.split(/,/)[0]
  8.       return name != nil ? name : ''
  9.     end
  10.     def i_iexp
  11.       i_iexp = @name.split(/,/)[1]
  12.       return i_iexp != nil ? i_iexp.to_i : 0
  13.     end  
  14.   end  
  15. end

  16. class Game_Battler
  17.   #--------------------------------------------------------------------------
  18.   # ● 应用物品效果
  19.   #     item : 物品
  20.   #--------------------------------------------------------------------------
  21.   def item_effect(item)
  22.     # 清除会心一击标志
  23.     self.critical = false
  24.     # 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  25.     # 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  26.     if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
  27.        ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
  28.       # 过程结束
  29.       return false
  30.     end
  31.     # 清除有效标志
  32.     effective = false
  33.     # 公共事件 ID 是有效的情况下,设置为有效标志
  34.     effective |= item.common_event_id > 0
  35.     # 命中判定
  36.     hit_result = (rand(100) < item.hit)
  37.     # 不确定的特技的情况下设置为有效标志
  38.     effective |= item.hit < 100
  39.     # 命中的情况
  40.     if hit_result == true
  41.       # 计算回复量
  42.       recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
  43.       recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
  44.       if recover_hp < 0
  45.         recover_hp += self.pdef * item.pdef_f / 20
  46.         recover_hp += self.mdef * item.mdef_f / 20
  47.         recover_hp = [recover_hp, 0].min
  48.       end
  49.       # 属性修正
  50.       recover_hp *= elements_correct(item.element_set)
  51.       recover_hp /= 100
  52.       recover_sp *= elements_correct(item.element_set)
  53.       recover_sp /= 100
  54.       # 分散
  55.       if item.variance > 0 and recover_hp.abs > 0
  56.         amp = [recover_hp.abs * item.variance / 100, 1].max
  57.         recover_hp += rand(amp+1) + rand(amp+1) - amp
  58.       end
  59.       if item.variance > 0 and recover_sp.abs > 0
  60.         amp = [recover_sp.abs * item.variance / 100, 1].max
  61.         recover_sp += rand(amp+1) + rand(amp+1) - amp
  62.       end
  63.       # 回复量符号为负的情况下
  64.       if recover_hp < 0
  65.         # 防御修正
  66.         if self.guarding?
  67.           recover_hp /= 2
  68.         end
  69.       end
  70.       # HP 回复量符号的反转、设置伤害值
  71.       self.damage = -recover_hp
  72.       # HP 以及 SP 的回复
  73.       last_hp = self.hp
  74.       last_sp = self.sp
  75.       self.hp += recover_hp
  76.       self.sp += recover_sp
  77.       effective |= self.hp != last_hp
  78.       effective |= self.sp != last_sp
  79.       # 状态变化
  80.       @state_changed = false
  81.       effective |= states_plus(item.plus_state_set)
  82.       effective |= states_minus(item.minus_state_set)
  83.       
  84. # 经验值增长了=================================================================      
  85.       gain_exp = item.i_iexp
  86.       self.exp += gain_exp
  87.       effective=true
  88. # =============================================================================      
  89.       
  90.       # 能力上升值有效的情况下
  91.       if item.parameter_type > 0 and item.parameter_points != 0
  92.         # 能力值的分支
  93.         case item.parameter_type
  94.         when 1  # MaxHP
  95.           @maxhp_plus += item.parameter_points
  96.         when 2  # MaxSP
  97.           @maxsp_plus += item.parameter_points
  98.         when 3  # 力量
  99.           @str_plus += item.parameter_points
  100.         when 4  # 灵巧
  101.           @dex_plus += item.parameter_points
  102.         when 5  # 速度
  103.           @agi_plus += item.parameter_points
  104.         when 6  # 魔力
  105.           @int_plus += item.parameter_points
  106.         end
  107.         # 设置有效标志
  108.         effective = true
  109.       end
  110.       # HP 回复率与回复量为 0 的情况下
  111.       if item.recover_hp_rate == 0 and item.recover_hp == 0
  112.         # 设置伤害为空的字符串
  113.         self.damage = ""
  114.         # SP 回复率与回复量为 0、能力上升值无效的情况下
  115.         if item.recover_sp_rate == 0 and item.recover_sp == 0 and
  116.            (item.parameter_type == 0 or item.parameter_points == 0)
  117.           # 状态没有变化的情况下
  118.           unless @state_changed
  119.             # 伤害设置为 "Miss"
  120.             self.damage = "Miss"
  121.           end
  122.         end
  123.       end
  124.     # Miss 的情况下
  125.     else
  126.       # 伤害设置为 "Miss"
  127.       self.damage = "Miss"
  128.     end
  129.     # 不在战斗中的情况下
  130.     unless $game_temp.in_battle
  131.       # 伤害设置为 nil
  132.       self.damage = nil
  133.     end
  134.     # 过程结束
  135.     return effective
  136.   end
  137. end  

  138. #==============================================================================
  139. # ■ Window_Target
  140. #------------------------------------------------------------------------------
  141. #  物品画面与特技画面的、使用对像角色选择窗口。
  142. #==============================================================================

  143. class Window_Target < Window_Selectable
  144.   #--------------------------------------------------------------------------
  145.   # ● 刷新
  146.   #--------------------------------------------------------------------------
  147.   def refresh
  148.     self.contents.clear
  149.     for i in 0...$game_party.actors.size
  150.       x = 4
  151.       y = i * 116
  152.       actor = $game_party.actors[i]
  153.       draw_actor_name(actor, x, y)
  154.       draw_actor_class(actor, x + 144, y)
  155.       draw_actor_level(actor, x + 8, y + 24)
  156.       draw_actor_state(actor, x + 8, y + 48)
  157.       draw_actor_hp(actor, x + 152, y + 24)
  158.       draw_actor_sp(actor, x + 152, y + 48)
  159.       draw_actor_exp(actor, x + 152, y + 72)
  160.     end
  161.   end
  162.   
  163. end

复制代码
我的个人空间:
http://434986751.qzone.qq.com

Lv3.寻梦者

酱油的

梦石
0
星屑
1020
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

2
发表于 2008-6-5 08:28:24 | 只看该作者
你火星了...
http://rpg.blue/viewthread.php?tid=86752
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3299
在线时间
3619 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

3
发表于 2008-6-6 21:13:58 | 只看该作者
这个用一个公共事件不就好了……{/gg}
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
3
星屑
50
在线时间
177 小时
注册时间
2008-3-21
帖子
939
4
 楼主| 发表于 2008-6-9 02:12:08 | 只看该作者
以下引用越前リョーマ于2008-6-6 13:13:58的发言:

这个用一个公共事件不就好了……


不一定。要是队伍中有两人以上并且是谁吃东西就加谁的经验,那么公共事件就不方便了。
我的个人空间:
http://434986751.qzone.qq.com
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3299
在线时间
3619 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

5
发表于 2008-6-10 20:37:34 | 只看该作者
以下引用slick于2008-6-8 18:12:08的发言:


以下引用越前リョーマ于2008-6-6 13:13:58的发言:

这个用一个公共事件不就好了……



不一定。要是队伍中有两人以上并且是谁吃东西就加谁的经验,那么公共事件就不方便了。

这到是……

不过用状态法就好了……
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1020
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

6
发表于 2008-6-10 21:59:48 | 只看该作者
可以的...看禾西給你的那個連接
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 14:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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