class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # ● 使用効果[ステート付加]:通常攻撃 #-------------------------------------------------------------------------- def item_effect_add_state_attack(user, item, effect) user.atk_states.each do |state_id| chance = effect.value1 data_state_add = $data_state_add_normal item_state_add = data_state_add chance = set_chance1(user, item_state_add,chance) if data_state_add[:point]== 0 chance *= state_rate(state_id) chance *= user.atk_states_rate(state_id) #~ chance *= luk_effect_rate(user) chance = set_chance1(user, item_state_add, chance) if data_state_add[:point]== 1 if rand < chance add_state(state_id) @result.success = true end p chance end end #-------------------------------------------------------------------------- # ● 使用効果[ステート付加]:通常 #-------------------------------------------------------------------------- def item_effect_add_state_normal(user, item, effect) chance = effect.value1 data_state_add = item.is_a?(RPG::Skill) ? $data_state_add_skill : $data_state_add_item item_state_add = data_state_add[item.id] chance = set_chance1(user, item_state_add,chance) if check_add_state_condition(item,0,data_state_add) chance *= state_rate(effect.data_id) if opposite?(user) #~ chance *= luk_effect_rate(user) if opposite?(user) chance = set_chance1(user, item_state_add, chance) if check_add_state_condition(item,1,data_state_add) if rand < chance add_state(effect.data_id) @result.success = true end end def paramater_chance(user, paras_id_user,paras_id_target) value_user = 0 value_target = 0 paras_id_user.each do |id| value_user += user.param(id) end paras_id_target.each do |id| value_target += self.param(id) end return [value_user,value_target] end def check_add_state_condition(item,type,data_state_add) return true if data_state_add[item.id] && data_state_add[item.id][:point]== type return false end def set_chance1(user, item_state_add,chance) return 0 if chance == 0 return chance if chance >= 1 return chance unless item_state_add[:type] paras_user = item_state_add[:depend_user] paras_target = item_state_add[:depend_target] paraarray = paramater_chance(user, paras_user,paras_target) scbarray = item_state_add[:bound] dp = (paraarray[0]-paraarray[1]) deg = item_state_add[:degree] if item_state_add[:type] == 1 a = (dp >= 0) ? (scbarray[1] - chance) : (chance - scbarray[0]) pi = Math::PI chance = 2 * a * (Math.atan(dp * deg)) / pi + chance elsif item_state_add[:type] == 2 if dp >= 0 a = (scbarray[1] - chance) chance = a * sigmoid_ex(deg,dp) + chance else a = (chance - scbarray[0]) chance = a * sigmoid_ex(deg,dp) + chance end else chance = deg * dp + chance end return chance end def sigmoid_ex(deg,x) return 2.0 / (1 + Math.exp(-x * deg)) - 1.0 end end