Advertisement
Guest User

Trainer_IA

a guest
Jan 8th, 2016
17
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 9.70 KB | None | 0 0
  1. #==============================================================================
  2. # ■ Pokemon_Battle_Trainer // IA
  3. # Pokemon Script Project - Krosk
  4. # 30/10/07
  5. #-----------------------------------------------------------------------------
  6. # Corrigé par RhenaudTheLukark
  7. #-----------------------------------------------------------------------------
  8. # Scène à ne pas modifier de préférence
  9. #-----------------------------------------------------------------------------
  10. # Système de Combat - Pokémon Dresseur et Sauvage
  11. #-----------------------------------------------------------------------------
  12. # Gestion de l'IA
  13. #-----------------------------------------------------------------------------
  14.  
  15. module POKEMON_S
  16.   class Pokemon_Battle_Core
  17.     def ia_rate_calculation(skill, user, target)
  18.       rate = 0.5
  19.       type1 = target.type1
  20.       type2 = target.type2
  21.       # Rate damage
  22.       if skill.power > 0
  23.         # Efficacité
  24.         rate = damage_calculation(skill, user, target, 0, true) + 0.5
  25.        
  26.         case skill.effect
  27.         # Multi-hit ?
  28.         when 0x1D
  29.           rate *= 1.8
  30.         # Multi-hit 2
  31.         when 0x2C, 0x4D
  32.           rate *= 1.8
  33.         # Multi-hit 3
  34.         when 0x68
  35.           rate *= 2.6
  36.         # Auto-destruction
  37.         when 0x07
  38.           rate /= 4
  39.         # 2 tours strict
  40.         when 0x27, 0x1B, 0x4B, 0x50, 0x91, 0x97, 0x9B1, 0x9B2, 0x9B3, 0x9B0, 0x108
  41.           rate /= 1.1
  42.         # Effet de statut sur l'adversaire
  43.         when 0x02, 0x04, 0x05, 0x06, 0x1F, 0x24, 0x5C, 0x7D, 0x92, 0x96, 0x98, 0x9E, 0xC8, 0xCA, 0xD1
  44.           rate *= 1.1
  45.         # Effet de stat sur l'adversaire
  46.         when 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4B, 0x4C, 0x4D
  47.           rate *= 1.1
  48.         # Effet de stat sur l'utilisateur
  49.         when 0x8A, 0x8B, 0x107
  50.           rate *= 1.1
  51.         when 0x8C, 0xCC
  52.           rate *= 1.5
  53.         # Recoil hp ou stat
  54.         when 0x30, 0xC6, 0x8E, 0xB6, 0xE5, 0xFD
  55.           rate /= 1.1
  56.         # Critical
  57.         when 0x2B, 0x4B, 0xC8, 0xD1
  58.           rate *= 1.2
  59.         # Leech
  60.         when 0x08, 0x03
  61.           rate *= 1.1
  62.         end
  63.        
  64.         return rate
  65.        
  66.       else
  67.         # Statut adverse
  68.         rate = 30
  69.        
  70.         case skill.effect
  71.         # Sans immunité (sommeil, amoureux)
  72.         when 0x01, 0x78
  73.           rate *= 1.5
  74.         # Avec immunité par type de l'attaque (paralysie)
  75.         when 0x43
  76.           if element_rate(type1, type2, skill.type, skill.effect, target.effect_list) == 0
  77.             rate = 0.5
  78.           else
  79.             rate *= 1.5
  80.           end
  81.         # Immunitées spéciales (type de la défense)
  82.         # Poison
  83.         when 0x42, 0x21
  84.           rate *= 1.5
  85.           if target.type_steel? or target.type_poison?
  86.             rate = 0.5
  87.           end
  88.         # Brule
  89.         when 0xA7
  90.           rate *= 1.5
  91.           if target.type_fire?
  92.             rate = 0.5
  93.           end
  94.         end
  95.        
  96.         # Annulation si le statut n'est pas "normal", et que le
  97.         #    pokémon va etre soumis à un autre effet de statut
  98.         #    => variation de rate
  99.         if target.status != 0 and rate != 30
  100.           rate = 0.5
  101.         end
  102.        
  103.         case skill.effect
  104.      
  105.         when 0x6F, 0x7C  # Protections
  106.           rate *= 2.5
  107.         when 0x74 # Tenacité
  108.           if user.hp <= user.max_hp * 10 / 100
  109.             rate *= 5
  110.           end
  111.         when 0x20, 0x25, 0x84, 0x85, 0x86, 0x9D, 0xD6  # Soin
  112.           if user.hp <= user.max_hp * 20 / 100 and not user.effect_list.include?(0xEC)
  113.             rate *= 15
  114.           end
  115.         when 0x88, 0x89, 0xA4  # Weather
  116.           if $battle_var.weather == 0
  117.             rate *= 4
  118.           end
  119.         when 0x0A  # Statut amélioration
  120.           if user.atk_stage == 6
  121.             rate = 0.5
  122.           end
  123.           rate *= 1.5*((6-user.atk_stage)/6.0)
  124.         when 0xD4
  125.           if user.atk_stage == 6
  126.             rate = 0.5
  127.           end
  128.           rate *= 3*((6-user.atk_stage)/6.0)
  129.         when 0x0B
  130.           if user.dfe_stage == 6
  131.             rate = 0.5
  132.           end
  133.           rate *= 1.5*((6-user.dfe_stage)/6.0)
  134.         when 0x9C
  135.           if user.dfe_stage == 6
  136.             rate = 0.5
  137.           end
  138.           rate *= 3*((6-user.dfe_stage)/6.0)
  139.         when 0x0D
  140.           if user.ats_stage == 6
  141.             rate = 0.5
  142.           end
  143.           rate *= 1.5*((6-user.ats_stage)/6.0)
  144.         when 0xD3
  145.           if user.ats_stage == 6
  146.             rate = 0.5
  147.           end
  148.           rate *= 3*((6-user.ats_stage)/6.0)
  149.         when 0x10
  150.           if user.eva_stage == 6
  151.             rate = 0.5
  152.           end
  153.           rate *= 2*((6-user.eva_stage)/6.0)
  154.         when 0x12  # Statut decrease
  155.           if target.atk_stage == -6
  156.             rate = 0.5
  157.           end
  158.           rate *= 1.5*((6+target.atk_stage)/6.0)
  159.         when 0x3A
  160.           if target.atk_stage == -6
  161.             rate = 0.5
  162.           end
  163.           rate *= 3*((6+target.atk_stage)/6.0)
  164.         when 0x13
  165.           if target.dfe_stage == -6
  166.             rate = 0.5
  167.           end
  168.           rate *= 1.5*((6+target.dfe_stage)/6.0)
  169.         when 0x3B
  170.           if target.dfe_stage == -6
  171.             rate = 0.5
  172.           end
  173.           rate *= 3*((6+target.dfe_stage)/6.0)
  174.         when 0x14
  175.           if target.spd_stage == -6
  176.             rate = 0.5
  177.           end
  178.           rate *= 1.5*((6+target.spd_stage)/6.0)
  179.         when 0x3C
  180.           if target.spd_stage == -6
  181.             rate = 0.5
  182.           end
  183.           rate *= 3*((6+target.spd_stage)/6.0)
  184.         when 0x3E
  185.           if target.dfs_stage == -6
  186.             rate = 0.5
  187.           end
  188.           rate *= 1.5*((6+target.dfs_stage)/6.0)
  189.         when 0x17
  190.           if target.acc_stage == -6
  191.             rate = 0.5
  192.           end
  193.           rate *= 3.5*((6+target.acc_stage)/6.0)
  194.         when 0x18, 0x101
  195.           if target.eva_stage == -6
  196.             rate = 0.5
  197.           end
  198.           rate *= 3.5*((6+target.eva_stage)/6.0)
  199.         when 0x103 # Seduction
  200.           if target.gender + user.gender != 3 or target.ats_stage == -6
  201.             rate = 0.5
  202.           end
  203.           rate *= 3.5*((6+target.ats_stage)/6.0)
  204.         when 0xA8
  205.           rate /= 2
  206.         when 0xAE, 0xD2  # Aide aux attaques/défense de type
  207.           rate *= 2
  208.         when 0x55  # Trempette
  209.           rate = 1
  210.         when 0xD7  # Gravité
  211.           if target.type_vol? or target.ability_name == "LEVITATION"
  212.             rate *= 3.5
  213.           else
  214.             rate = 0.5
  215.           end
  216.         when 0xD8  # Oeil Miracle
  217.           if target.type_spectre? or target.eva_stage > 0
  218.             rate *= 3.5*((6+target.eva_stage)/6.0)
  219.           else
  220.             rate = 0.5
  221.           end
  222.         when 0xDC  # Auto-destruction pour heal (Voeu Soin)
  223.           rate = 0.5
  224.         when 0xE1  # Vent Arrière
  225.           if user.effect_list.include?(0xE1)
  226.             rate = 0.5
  227.           else
  228.             rate *= 3
  229.           end
  230.         when 0xE9  # Dégommage
  231.           if user.item_hold == [0..12, 193..204, 253..329, 331..350]
  232.             rate = 0.5
  233.           else
  234.             rate *= 5
  235.           end
  236.         when 0xEA  # Echange Psy
  237.           if user.status != 0
  238.             rate *= 3.5
  239.           else
  240.             rate = 0.5
  241.           end
  242.         when 0xF2  # Photocopie
  243.           if $battle_var.round == 0
  244.             rate = 0.5
  245.           end
  246.         when 0xF3  # Permuforce
  247.           rate *= (1 + target.atk_stage + target.ats_stage - user.atk_stage - user.ats_stage)
  248.           if rate < 0.5
  249.             rate = 0.5
  250.           end
  251.         when 0xF4  # Permugarde
  252.           rate *= (1 + target.dfe_stage + target.dfs_stage - user.dfe_stage - user.dfs_stage)
  253.           if rate < 0.5
  254.             rate = 0.5
  255.           end
  256.         when 0xF6 # Dernierecour
  257.           for skill in user.skills_set
  258.             if skill.pp == skill.maxpp and skill.name != "DERNIERECOUR"
  259.               rate = 0.5
  260.               break
  261.             end
  262.           end
  263.         when 0xFA # Permucoeur
  264.           rate *=  1 + target.atk_stage - user.atk_stage + target.ats_stage - user.ats_stage +
  265.                    target.dfe_stage - user.dfe_stage + target.dfs_stage - user.dfs_stage +
  266.                    target.acc_stage - user.acc_stage + target.eva_stage - user.eva_stage +
  267.                    target.spd_stage - user.spd_stage
  268.           if rate < 0.5
  269.             rate = 0.5
  270.           end
  271.         when 0xFC # Vol Magnétik
  272.           if user.effect_list.include?(0xFC)
  273.             rate = 0.5
  274.           else
  275.             if target.type_ground?
  276.               rate *= 10
  277.             end
  278.           end
  279.         when 0x70 # Picots
  280.           if target.effect_list.include?(0x70)
  281.             index = target.effect_list.index(0x70)
  282.             if target.effect[index][2] == 3
  283.               rate = 0.5
  284.             else
  285.               rate *= 2
  286.             end
  287.           else
  288.             rate *= 3
  289.           end
  290.         when 0xF9 # Pics Toxic
  291.           if target.effect_list.include?(0xF9)
  292.             index = target.effect_list.index(0xF9)
  293.             if target.effect[index][2] == 2
  294.               rate = 0.5
  295.             else
  296.               rate *= 2
  297.             end
  298.           else
  299.             rate *= 3
  300.           end
  301.         when 0x104 # Piège de Roc
  302.           if target.effect_list.include?(0x104)
  303.             rate = 0.5
  304.           else
  305.             rate *= 3
  306.           end
  307.         end
  308.        
  309.         # Effet général d'accumulation d'effets
  310.         if target.effect_list.include?(skill.effect)
  311.           rate = 0.5
  312.         end
  313.         if user.effect_list.include?(skill.effect)
  314.           rate = 0.5
  315.         end
  316.      
  317.         return rate
  318.       end
  319.      
  320.     end
  321.    
  322.   end
  323. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement