赞 | 0 |
VIP | 208 |
好人卡 | 0 |
积分 | 31 |
经验 | 35012 |
最后登录 | 2016-3-14 |
在线时间 | 177 小时 |
Lv3.寻梦者
- 梦石
- 3
- 星屑
- 50
- 在线时间
- 177 小时
- 注册时间
- 2008-3-21
- 帖子
- 939
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本人在半夜睡不着状态下的又一个怨念产物。。。。。。事件、战斗状态等可以由角色的心情来决定。。。。。。
这个示例工程可以让大家了解角色的不同心情是如何影响战斗状态以及事件触发的。
角色在不同心情下触发的同一个事件也会有不一样的结果
在这里可以查看角色心情
一、物品改变角色心情值的定义方法:
在物品的“说明”一栏中写入:“难吃的药,己方单体 HP 回复,-1”,因为文字后面附带了一个参数"-1",故角色使用该物品后心情变差1点。
在物品的“说明”一栏中写入:“美味食物,己方单体 HP 少量回复,1”,因为文字后面附带了一个参数"1",故角色使用该物品后心情变好1点。
数字越大,心情的改变量就越大。
二、地图界面调用脚本改变角色心情:
举一例——
$game_party.actors[0].mstep=0
$game_party.actors[0].mood=0
其中mstep是该角色的心情程度,mood是心情种类(0平静 1高兴 2愤怒 3忧郁 4恐惧)。当mood为0时,mstep值无意义。
菜单栏中选择“状态”时,可以看到角色的心情脸谱,很有趣哦。
(说句老实话= =|||其实我个人感觉用一个小萝莉来表现角色的心情最容易,与男性角色相比,娇小可爱的女孩子更容易表现撒娇、发脾气等情感,
这也是我为什么总喜欢让西露达作示例工程的主角,而不是阿尔西斯的原因)
冲突可能:战斗类(主要是伤害计算方面)、状态菜单显示类等。
示例工程:
http://rpg.blue/upload_program/f ... 状态_93032765.rar
最后给大家出个小谜题:
在本示例的状态窗口中,反映角色心情的表情一共有九种。不看工程中的参数设置,也不要先看脚本,你能把它们全找出来吗?
核心脚本:
- # 角色心情变化 BY SLICK V1.00
- # 心情对战斗的影响:
- # 高兴-增加角色的灵巧和速度(目前版本暂不支持)
- # 愤怒-攻击力提高,防御力降低
- # 忧郁-降低角色的灵巧和速度(目前版本暂不支持)
- # 恐惧-攻击力降低,防御力提高
- module RPG
- class Item
- attr_accessor :emood
- def description
- description = @description.split(/,/)[0]
- return description != nil ? description.to_s : ''
- end
- def emood
- emood = @description.split(/,/)[1]
- return emood != nil ? emood.to_i : 0
- end
- end
- class Skill
- attr_accessor :emood
- def description
- description = @description.split(/,/)[0]
- return description != nil ? description.to_s : ''
- end
- def emood
- emood = @description.split(/,/)[1]
- return emood != nil ? emood.to_i : 0
- end
- end
- end
- class Game_Actor < Game_Battler
-
- attr_accessor :mood # 心情类别(0平静 1高兴 2生气 3忧郁 4恐惧)
- attr_accessor :mstep # 心情程度
- #--------------------------------------------------------------------------
- # ● セットアップ
- # actor_id : アクター ID
- #--------------------------------------------------------------------------
- alias ooo_setup setup
- def setup(actor_id)
- #这里做修改==================================
- @mood=0 #初登场时心情默认为“平静”
- @mstep=0
- #=======================================
- ooo_setup(actor_id)
- end
- end
- class Game_Battler
-
- #--------------------------------------------------------------------------
- # ● 应用通常攻击效果
- # attacker : 攻击者 (battler)
- #--------------------------------------------------------------------------
- def attack_effect(attacker)
- # 清除会心一击标志
- self.critical = false
- # 第一命中判定
- hit_result = (rand(100) < attacker.hit)
- # 命中的情况下
- if hit_result == true
- # 计算基本伤害
- #加入心情修正==================================================================
- if attacker.is_a?(Game_Actor)
- if attacker.mood==2
- mpfix=attacker.mstep*5
- elsif attacker.mood==4
- mpfix=attacker.mstep*(-5)
- else
- mpfix=0
- end
- else
- mpfix=0
- end
- if self.is_a?(Game_Actor)
- if self.mood==4
- mdfix=self.mstep*5
- elsif self.mood==2
- mdfix=self.mstep*(-5)
- else
- mdfix=0
- end
- else
- mdfix=0
- end
-
- atk = [attacker.atk+mpfix - self.pdef / 2-mdfix, 0].max
- self.damage = atk * (20 + attacker.str) / 20
- #==============================================================================
-
-
- # 属性修正
- self.damage *= elements_correct(attacker.element_set)
- self.damage /= 100
- # 伤害符号正确的情况下
- if self.damage > 0
- # 会心一击修正
- if rand(100) < 4 * attacker.dex / self.agi
- self.damage *= 2
- self.critical = true
- end
- # 防御修正
- if self.guarding?
- self.damage /= 2
- end
- end
- # 分散
- if self.damage.abs > 0
- amp = [self.damage.abs * 15 / 100, 1].max
- self.damage += rand(amp+1) + rand(amp+1) - amp
- end
- # 第二命中判定
- eva = 8 * self.agi / attacker.dex + self.eva
- hit = self.damage < 0 ? 100 : 100 - eva
- hit = self.cant_evade? ? 100 : hit
- hit_result = (rand(100) < hit)
- end
- # 命中的情况下
- if hit_result == true
- # 状态冲击解除
- remove_states_shock
- # HP 的伤害计算
- self.hp -= self.damage
- # 状态变化
- @state_changed = false
- states_plus(attacker.plus_state_set)
- states_minus(attacker.minus_state_set)
- # Miss 的情况下
- else
- # 伤害设置为 "Miss"
- self.damage = "Miss"
- # 清除会心一击标志
- self.critical = false
- end
- # 过程结束
- return true
- end
- #--------------------------------------------------------------------------
- # ● 应用特技效果
- # user : 特技的使用者 (battler)
- # skill : 特技
- #--------------------------------------------------------------------------
- def skill_effect(user, skill)
- # 清除会心一击标志
- self.critical = false
- # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
- # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
- if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
- ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
- # 过程结束
- return false
- end
- # 清除有效标志
- effective = false
- # 公共事件 ID 是有效的情况下,设置为有效标志
- effective |= skill.common_event_id > 0
- # 第一命中判定
- hit = skill.hit
- if skill.atk_f > 0
- hit *= user.hit / 100
- end
- hit_result = (rand(100) < hit)
- # 不确定的特技的情况下设置为有效标志
- effective |= hit < 100
- # 命中的情况下
- if hit_result == true
- # 计算威力
-
- #加入心情修正==================================================================
- if user.is_a?(Game_Actor)
- if user.mood==2
- mpfix=user.mstep*5
- elsif user.mood==4
- mpfix=user.mstep*(-5)
- else
- mpfix=0
- end
- else
- mpfix=0
- end
- if self.is_a?(Game_Actor)
- if self.mood==4
- mdfix=self.mstep*5
- elsif self.mood==2
- mdfix=self.mstep*(-5)
- else
- mdfix=0
- end
- else
- mdfix=0
- end
- power = skill.power + mpfix + user.atk * skill.atk_f / 100
- if power > 0
- power -= (self.pdef + mdfix) * skill.pdef_f / 200
- power -= (self.mdef + mdfix) * skill.mdef_f / 200
- power = [power, 0].max
- end
- #==============================================================================
-
-
- # 计算倍率
- rate = 20
- rate += (user.str * skill.str_f / 100)
- rate += (user.dex * skill.dex_f / 100)
- rate += (user.agi * skill.agi_f / 100)
- rate += (user.int * skill.int_f / 100)
- # 计算基本伤害
- self.damage = power * rate / 20
- # 属性修正
- self.damage *= elements_correct(skill.element_set)
- self.damage /= 100
- # 伤害符号正确的情况下
- if self.damage > 0
- # 防御修正
- if self.guarding?
- self.damage /= 2
- end
- end
- # 分散
- if skill.variance > 0 and self.damage.abs > 0
- amp = [self.damage.abs * skill.variance / 100, 1].max
- self.damage += rand(amp+1) + rand(amp+1) - amp
- end
- # 第二命中判定
- eva = 8 * self.agi / user.dex + self.eva
- hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
- hit = self.cant_evade? ? 100 : hit
- hit_result = (rand(100) < hit)
- # 不确定的特技的情况下设置为有效标志
- effective |= hit < 100
- end
- # 命中的情况下
- if hit_result == true
- # 威力 0 以外的物理攻击的情况下
- if skill.power != 0 and skill.atk_f > 0
- # 状态冲击解除
- remove_states_shock
- # 设置有效标志
- effective = true
- end
- # HP 的伤害减法运算
- last_hp = self.hp
- self.hp -= self.damage
- effective |= self.hp != last_hp
- # 状态变化
- @state_changed = false
- effective |= states_plus(skill.plus_state_set)
- effective |= states_minus(skill.minus_state_set)
- # 威力为 0 的场合
- if skill.power == 0
- # 伤害设置为空的字串
- self.damage = ""
- # 状态没有变化的情况下
- unless @state_changed
- # 伤害设置为 "Miss"
- self.damage = "Miss"
- end
- end
- # Miss 的情况下
- else
- # 伤害设置为 "Miss"
- self.damage = "Miss"
- end
- # 不在战斗中的情况下
- unless $game_temp.in_battle
- # 伤害设置为 nil
- self.damage = nil
- end
- # 过程结束
- return effective
- end
- #--------------------------------------------------------------------------
- # ● 应用物品效果
- # item : 物品
- #--------------------------------------------------------------------------
- def item_effect(item)
- # 清除会心一击标志
- self.critical = false
- # 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
- # 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
- if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
- ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
- # 过程结束
- return false
- end
- # 清除有效标志
- effective = false
- # 公共事件 ID 是有效的情况下,设置为有效标志
- effective |= item.common_event_id > 0
- # 命中判定
- hit_result = (rand(100) < item.hit)
- # 不确定的特技的情况下设置为有效标志
- effective |= item.hit < 100
- # 命中的情况
- if hit_result == true
- # 计算回复量
- recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
- recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
- if recover_hp < 0
- recover_hp += self.pdef * item.pdef_f / 20
- recover_hp += self.mdef * item.mdef_f / 20
- recover_hp = [recover_hp, 0].min
- end
- # 属性修正
- recover_hp *= elements_correct(item.element_set)
- recover_hp /= 100
- recover_sp *= elements_correct(item.element_set)
- recover_sp /= 100
- # 分散
- if item.variance > 0 and recover_hp.abs > 0
- amp = [recover_hp.abs * item.variance / 100, 1].max
- recover_hp += rand(amp+1) + rand(amp+1) - amp
- end
- if item.variance > 0 and recover_sp.abs > 0
- amp = [recover_sp.abs * item.variance / 100, 1].max
- recover_sp += rand(amp+1) + rand(amp+1) - amp
- end
- # 回复量符号为负的情况下
- if recover_hp < 0
- # 防御修正
- if self.guarding?
- recover_hp /= 2
- end
- end
- # HP 回复量符号的反转、设置伤害值
- self.damage = -recover_hp
- # HP 以及 SP 的回复
- last_hp = self.hp
- last_sp = self.sp
- self.hp += recover_hp
- self.sp += recover_sp
- #effective |= self.hp != last_hp
- #effective |= self.sp != last_sp
- effective=true
-
-
- #食用物品后心情产生变化========================================================
- if self.is_a?(Game_Actor)
- if item.emood>0
- case self.mood
- when 0
- self.mood=1
- self.mstep+=item.emood
- when 1
- self.mstep+=item.emood
- when 2
- self.mstep-=item.emood
- when 3
- self.mstep-=item.emood
- when 4
- self.mstep-=item.emood
- end
- else
- case self.mood
- when 0
- self.mood=3
- self.mstep-=item.emood
- when 1
- self.mstep+=item.emood
- when 2
- self.mood=3
- self.mstep-=item.emood
- when 3
- self.mstep-=item.emood
- when 4
- self.mood=3
- self.mstep-=item.emood
- end
- end
- if self.mstep>10
- self.mstep=10
- end
- if self.mstep<0
- self.mstep=0
- self.mood=0
- end
-
- end
- #==============================================================================
-
-
- # 状态变化
- @state_changed = false
- effective |= states_plus(item.plus_state_set)
- effective |= states_minus(item.minus_state_set)
- # 能力上升值有效的情况下
- if item.parameter_type > 0 and item.parameter_points != 0
- # 能力值的分支
- case item.parameter_type
- when 1 # MaxHP
- @maxhp_plus += item.parameter_points
- when 2 # MaxSP
- @maxsp_plus += item.parameter_points
- when 3 # 力量
- @str_plus += item.parameter_points
- when 4 # 灵巧
- @dex_plus += item.parameter_points
- when 5 # 速度
- @agi_plus += item.parameter_points
- when 6 # 魔力
- @int_plus += item.parameter_points
- end
- # 设置有效标志
- effective = true
- end
- # HP 回复率与回复量为 0 的情况下
- if item.recover_hp_rate == 0 and item.recover_hp == 0
- # 设置伤害为空的字符串
- self.damage = ""
- # SP 回复率与回复量为 0、能力上升值无效的情况下
- if item.recover_sp_rate == 0 and item.recover_sp == 0 and
- (item.parameter_type == 0 or item.parameter_points == 0)
- # 状态没有变化的情况下
- unless @state_changed
- # 伤害设置为 "Miss"
- self.damage = "Miss"
- end
- end
- end
- # Miss 的情况下
- else
- # 伤害设置为 "Miss"
- self.damage = "Miss"
- end
- # 不在战斗中的情况下
- unless $game_temp.in_battle
- # 伤害设置为 nil
- self.damage = nil
- end
- # 过程结束
- return effective
- end
- #--------------------------------------------------------------------------
- # ● 应用连续伤害效果
- #--------------------------------------------------------------------------
- def slip_damage_effect
- # 设置伤害
- self.damage = self.maxhp / 10
- # 分散
- if self.damage.abs > 0
- amp = [self.damage.abs * 15 / 100, 1].max
- self.damage += rand(amp+1) + rand(amp+1) - amp
- end
- # HP 的伤害减法运算
- self.hp -= self.damage
- # 过程结束
- return true
- end
- #--------------------------------------------------------------------------
- # ● 属性修正计算
- # element_set : 属性
- #--------------------------------------------------------------------------
- def elements_correct(element_set)
- # 無属性的情况
- if element_set == []
- # 返回 100
- return 100
- end
- # 在被赋予的属性中返回最弱的
- # ※过程 element_rate 是、本类以及继承的 Game_Actor
- # 和 Game_Enemy 类的定义
- weakest = -100
- for i in element_set
- weakest = [weakest, self.element_rate(i)].max
- end
- return weakest
- end
- end
- class Window_Status < Window_Base
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- draw_actor_graphic(@actor, 40, 112)
- draw_actor_name(@actor, 4, 0)
- draw_actor_class(@actor, 4 + 144, 0)
- draw_actor_level(@actor, 96, 32)
- draw_actor_state(@actor, 96, 64)
- draw_actor_hp(@actor, 48, 112, 172)
- draw_actor_sp(@actor, 48, 144, 172)
- draw_actor_parameter(@actor, 48, 192, 0)
- draw_actor_parameter(@actor, 48, 224, 1)
- draw_actor_parameter(@actor, 48, 256, 2)
- draw_actor_parameter(@actor, 48, 304, 3)
- draw_actor_parameter(@actor, 48, 336, 4)
- draw_actor_parameter(@actor, 48, 368, 5)
- draw_actor_parameter(@actor, 48, 400, 6)
- self.contents.font.color = system_color
- self.contents.draw_text(320, 48, 80, 32, "EXP")
- self.contents.draw_text(320, 80, 80, 32, "NEXT")
- self.contents.font.color = normal_color
- self.contents.draw_text(320 + 80, 48, 84, 32, @actor.exp_s, 2)
- self.contents.draw_text(320 + 80, 80, 84, 32, @actor.next_rest_exp_s, 2)
- self.contents.font.color = system_color
- self.contents.draw_text(256, 112, 96, 32, "装备")
- draw_item_name($data_weapons[@actor.weapon_id], 256, 144)
- draw_item_name($data_armors[@actor.armor1_id], 256, 176)
- draw_item_name($data_armors[@actor.armor2_id], 256, 208)
- draw_item_name($data_armors[@actor.armor3_id], 256, 240)
- draw_item_name($data_armors[@actor.armor4_id], 256, 272)
- #self.contents = Bitmap.new(width, height)
- case @actor.mood
- when 0
- bitmap = Bitmap.new("Graphics/Pictures/Mood00.png")
- when 1
- if @actor.mstep<7 then
- bitmap = Bitmap.new("Graphics/Pictures/Mood11.png")
- else
- bitmap = Bitmap.new("Graphics/Pictures/Mood12.png")
- end
- when 2
- if @actor.mstep<7 then
- bitmap = Bitmap.new("Graphics/Pictures/Mood21.png")
- else
- bitmap = Bitmap.new("Graphics/Pictures/Mood22.png")
- end
- when 3
- if @actor.mstep<7 then
- bitmap = Bitmap.new("Graphics/Pictures/Mood31.png")
- else
- bitmap = Bitmap.new("Graphics/Pictures/Mood32.png")
- end
- when 4
- if @actor.mstep<7 then
- bitmap = Bitmap.new("Graphics/Pictures/Mood41.png")
- else
- bitmap = Bitmap.new("Graphics/Pictures/Mood42.png")
- end
- end
- self.contents.stretch_blt(Rect.new(376, 192, 288, 240), bitmap, Rect.new(0, 0, 576, 480))
- end
- end
复制代码 |
|