Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- # ■ Pokemon_Battle_Trainer // IA
- # Pokemon Script Project - Krosk
- # 30/10/07
- #-----------------------------------------------------------------------------
- # Corrigé par RhenaudTheLukark
- #-----------------------------------------------------------------------------
- # Scène à ne pas modifier de préférence
- #-----------------------------------------------------------------------------
- # Système de Combat - Pokémon Dresseur et Sauvage
- #-----------------------------------------------------------------------------
- # Gestion de l'IA
- #-----------------------------------------------------------------------------
- module POKEMON_S
- class Pokemon_Battle_Core
- def ia_rate_calculation(skill, user, target)
- rate = 0.5
- type1 = target.type1
- type2 = target.type2
- # Rate damage
- if skill.power > 0
- # Efficacité
- rate = damage_calculation(skill, user, target, 0, true) + 0.5
- case skill.effect
- # Multi-hit ?
- when 0x1D
- rate *= 1.8
- # Multi-hit 2
- when 0x2C, 0x4D
- rate *= 1.8
- # Multi-hit 3
- when 0x68
- rate *= 2.6
- # Auto-destruction
- when 0x07
- rate /= 4
- # 2 tours strict
- when 0x27, 0x1B, 0x4B, 0x50, 0x91, 0x97, 0x9B1, 0x9B2, 0x9B3, 0x9B0, 0x108
- rate /= 1.1
- # Effet de statut sur l'adversaire
- when 0x02, 0x04, 0x05, 0x06, 0x1F, 0x24, 0x5C, 0x7D, 0x92, 0x96, 0x98, 0x9E, 0xC8, 0xCA, 0xD1
- rate *= 1.1
- # Effet de stat sur l'adversaire
- when 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4B, 0x4C, 0x4D
- rate *= 1.1
- # Effet de stat sur l'utilisateur
- when 0x8A, 0x8B, 0x107
- rate *= 1.1
- when 0x8C, 0xCC
- rate *= 1.5
- # Recoil hp ou stat
- when 0x30, 0xC6, 0x8E, 0xB6, 0xE5, 0xFD
- rate /= 1.1
- # Critical
- when 0x2B, 0x4B, 0xC8, 0xD1
- rate *= 1.2
- # Leech
- when 0x08, 0x03
- rate *= 1.1
- end
- return rate
- else
- # Statut adverse
- rate = 30
- case skill.effect
- # Sans immunité (sommeil, amoureux)
- when 0x01, 0x78
- rate *= 1.5
- # Avec immunité par type de l'attaque (paralysie)
- when 0x43
- if element_rate(type1, type2, skill.type, skill.effect, target.effect_list) == 0
- rate = 0.5
- else
- rate *= 1.5
- end
- # Immunitées spéciales (type de la défense)
- # Poison
- when 0x42, 0x21
- rate *= 1.5
- if target.type_steel? or target.type_poison?
- rate = 0.5
- end
- # Brule
- when 0xA7
- rate *= 1.5
- if target.type_fire?
- rate = 0.5
- end
- end
- # Annulation si le statut n'est pas "normal", et que le
- # pokémon va etre soumis à un autre effet de statut
- # => variation de rate
- if target.status != 0 and rate != 30
- rate = 0.5
- end
- case skill.effect
- when 0x6F, 0x7C # Protections
- rate *= 2.5
- when 0x74 # Tenacité
- if user.hp <= user.max_hp * 10 / 100
- rate *= 5
- end
- when 0x20, 0x25, 0x84, 0x85, 0x86, 0x9D, 0xD6 # Soin
- if user.hp <= user.max_hp * 20 / 100 and not user.effect_list.include?(0xEC)
- rate *= 15
- end
- when 0x88, 0x89, 0xA4 # Weather
- if $battle_var.weather == 0
- rate *= 4
- end
- when 0x0A # Statut amélioration
- if user.atk_stage == 6
- rate = 0.5
- end
- rate *= 1.5*((6-user.atk_stage)/6.0)
- when 0xD4
- if user.atk_stage == 6
- rate = 0.5
- end
- rate *= 3*((6-user.atk_stage)/6.0)
- when 0x0B
- if user.dfe_stage == 6
- rate = 0.5
- end
- rate *= 1.5*((6-user.dfe_stage)/6.0)
- when 0x9C
- if user.dfe_stage == 6
- rate = 0.5
- end
- rate *= 3*((6-user.dfe_stage)/6.0)
- when 0x0D
- if user.ats_stage == 6
- rate = 0.5
- end
- rate *= 1.5*((6-user.ats_stage)/6.0)
- when 0xD3
- if user.ats_stage == 6
- rate = 0.5
- end
- rate *= 3*((6-user.ats_stage)/6.0)
- when 0x10
- if user.eva_stage == 6
- rate = 0.5
- end
- rate *= 2*((6-user.eva_stage)/6.0)
- when 0x12 # Statut decrease
- if target.atk_stage == -6
- rate = 0.5
- end
- rate *= 1.5*((6+target.atk_stage)/6.0)
- when 0x3A
- if target.atk_stage == -6
- rate = 0.5
- end
- rate *= 3*((6+target.atk_stage)/6.0)
- when 0x13
- if target.dfe_stage == -6
- rate = 0.5
- end
- rate *= 1.5*((6+target.dfe_stage)/6.0)
- when 0x3B
- if target.dfe_stage == -6
- rate = 0.5
- end
- rate *= 3*((6+target.dfe_stage)/6.0)
- when 0x14
- if target.spd_stage == -6
- rate = 0.5
- end
- rate *= 1.5*((6+target.spd_stage)/6.0)
- when 0x3C
- if target.spd_stage == -6
- rate = 0.5
- end
- rate *= 3*((6+target.spd_stage)/6.0)
- when 0x3E
- if target.dfs_stage == -6
- rate = 0.5
- end
- rate *= 1.5*((6+target.dfs_stage)/6.0)
- when 0x17
- if target.acc_stage == -6
- rate = 0.5
- end
- rate *= 3.5*((6+target.acc_stage)/6.0)
- when 0x18, 0x101
- if target.eva_stage == -6
- rate = 0.5
- end
- rate *= 3.5*((6+target.eva_stage)/6.0)
- when 0x103 # Seduction
- if target.gender + user.gender != 3 or target.ats_stage == -6
- rate = 0.5
- end
- rate *= 3.5*((6+target.ats_stage)/6.0)
- when 0xA8
- rate /= 2
- when 0xAE, 0xD2 # Aide aux attaques/défense de type
- rate *= 2
- when 0x55 # Trempette
- rate = 1
- when 0xD7 # Gravité
- if target.type_vol? or target.ability_name == "LEVITATION"
- rate *= 3.5
- else
- rate = 0.5
- end
- when 0xD8 # Oeil Miracle
- if target.type_spectre? or target.eva_stage > 0
- rate *= 3.5*((6+target.eva_stage)/6.0)
- else
- rate = 0.5
- end
- when 0xDC # Auto-destruction pour heal (Voeu Soin)
- rate = 0.5
- when 0xE1 # Vent Arrière
- if user.effect_list.include?(0xE1)
- rate = 0.5
- else
- rate *= 3
- end
- when 0xE9 # Dégommage
- if user.item_hold == [0..12, 193..204, 253..329, 331..350]
- rate = 0.5
- else
- rate *= 5
- end
- when 0xEA # Echange Psy
- if user.status != 0
- rate *= 3.5
- else
- rate = 0.5
- end
- when 0xF2 # Photocopie
- if $battle_var.round == 0
- rate = 0.5
- end
- when 0xF3 # Permuforce
- rate *= (1 + target.atk_stage + target.ats_stage - user.atk_stage - user.ats_stage)
- if rate < 0.5
- rate = 0.5
- end
- when 0xF4 # Permugarde
- rate *= (1 + target.dfe_stage + target.dfs_stage - user.dfe_stage - user.dfs_stage)
- if rate < 0.5
- rate = 0.5
- end
- when 0xF6 # Dernierecour
- for skill in user.skills_set
- if skill.pp == skill.maxpp and skill.name != "DERNIERECOUR"
- rate = 0.5
- break
- end
- end
- when 0xFA # Permucoeur
- rate *= 1 + target.atk_stage - user.atk_stage + target.ats_stage - user.ats_stage +
- target.dfe_stage - user.dfe_stage + target.dfs_stage - user.dfs_stage +
- target.acc_stage - user.acc_stage + target.eva_stage - user.eva_stage +
- target.spd_stage - user.spd_stage
- if rate < 0.5
- rate = 0.5
- end
- when 0xFC # Vol Magnétik
- if user.effect_list.include?(0xFC)
- rate = 0.5
- else
- if target.type_ground?
- rate *= 10
- end
- end
- when 0x70 # Picots
- if target.effect_list.include?(0x70)
- index = target.effect_list.index(0x70)
- if target.effect[index][2] == 3
- rate = 0.5
- else
- rate *= 2
- end
- else
- rate *= 3
- end
- when 0xF9 # Pics Toxic
- if target.effect_list.include?(0xF9)
- index = target.effect_list.index(0xF9)
- if target.effect[index][2] == 2
- rate = 0.5
- else
- rate *= 2
- end
- else
- rate *= 3
- end
- when 0x104 # Piège de Roc
- if target.effect_list.include?(0x104)
- rate = 0.5
- else
- rate *= 3
- end
- end
- # Effet général d'accumulation d'effets
- if target.effect_list.include?(skill.effect)
- rate = 0.5
- end
- if user.effect_list.include?(skill.effect)
- rate = 0.5
- end
- return rate
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement