TheoAllen

Theo - Random Enemy Parameters

May 18th, 2013
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 7.63 KB | None | 0 0
  1. # =============================================================================
  2. # TheoAllen - Random Enemy Parameters
  3. # Version : 1.0
  4. # Contact : www.rpgmakerid.com (or) http://theolized.blogspot.com
  5. # (This script documentation is written in informal indonesian language)
  6. # =============================================================================
  7. ($imported ||= {})[:Theo_RandomEParam] = true
  8. # =============================================================================
  9. # CHANGE LOGS:
  10. # -----------------------------------------------------------------------------
  11. # 2013.05.18 - Started and Finished script
  12. # =============================================================================
  13. =begin
  14.  
  15.   Perkenalan :
  16.   Script ini ngebikin parameter musuh bisa berbeda-beda setiap kali battle.
  17.   Ada kalanya sebuah Slime mempunyai MHP 120. Tapi slime lain dengan nama
  18.   dan database yang sama, mempunyai MHP 80 dalam satu troop.
  19.  
  20.   Cara Penggunaan :
  21.   Pasang script ini dibawah material namun diatas main. Tulis tag seperti ini
  22.   pada note enemy jika kamu pengen spesifikasi variansi parameter tiap musuh
  23.   berbeda-beda.
  24.  
  25.   <mhp var: n>
  26.   <mmp var: n>
  27.   <atk var: n>
  28.   <def var: n>
  29.   <mat var: n>
  30.   <mdf var: n>
  31.   <agi var: n>
  32.   <luk var: n>
  33.  
  34.   Dimana n adalah angka variansinya. Semisal jika kamu memasukkan MHP 20, dan
  35.   dalam database enemy 100, maka MHP akan dirandom antara 80 - 120.
  36.  
  37.   <no var>
  38.   Tag yang satu ini untuk membikin enemy ngga punya variansi. Bisa digunakan
  39.   untuk database boss.
  40.  
  41.   <variance: n1,n2,n3,n4,n5,n6,n7,n8>
  42.   Tag yang satu ini untuk mengeset semua variansi secara bersamaan. urutannya
  43.   adalah mhp,mmp,atk,def,mat,mdf,agi,luk
  44.  
  45.   Terms of use :
  46.   Credit gw, TheoAllen. Kalo semisal u bisa ngedit2 script gw trus jadi lebih
  47.   keren, terserah. Ane bebasin. Asal ngga ngeklaim aja. Kalo semisal mau
  48.   dipake buat komersil, jangan lupa, gw dibagi gratisannya.
  49.  
  50. =end
  51. # =============================================================================
  52. # Konfigurasi :
  53. # =============================================================================
  54. module THEO
  55.   module ENEMY
  56.    
  57.     # =======================================================================
  58.       VARIANCE     = [  0,  0,  0,  0,  0,  0,  0,  0]
  59.     # VARIANCE     = [mhp,mmp,atk,def,mat,mdf,agi,luk]
  60.     # -----------------------------------------------------------------------
  61.     # Variansi default untuk semua enemy.
  62.     # =======================================================================
  63.    
  64.     # =======================================================================
  65.       DYNAMIC_EXP = true
  66.     # -----------------------------------------------------------------------
  67.     # Jika diset true, maka jumlah exp yang didapat dari enemy juga berubah
  68.     # tergantung perubahan parameter lainnya
  69.     #
  70.     # Rumus exp ratenya adalah rata-rata dari hasil randomisasi dari variansi
  71.     # =======================================================================
  72.    
  73.     # =======================================================================
  74.       INCLUDE_ZERO = true
  75.     # -----------------------------------------------------------------------
  76.     # Untuk perhitungan gain exp (jika dynamic exp = true). Jika pilihan ini
  77.     # kamu tulis true, maka variansi 0 akan dihitung dalam perhitungan exp.
  78.     #
  79.     # Contohnya jika kamu memilih false, dan kamu hanya mengisi variansi HP
  80.     # 20 (sisanya 0) dengan base MHP 100. Dan EXP bonus momon adalah 100.
  81.     # Saat dapet enemy dengan MHP 80, maka kamu akan dapet bonus 80 EXP.
  82.     #
  83.     # Perhitungannya adalah :
  84.     # 0.8 / 1 (karena cuman satu aja yang punya variansi lebih dari 0)
  85.     #
  86.     # Jika pilihan ini kamu tulis true. Maka jika dapet enemy dengan MHP 80
  87.     # perhitungannya adalah :
  88.     # (0.8+1+1+1+1+1+1+1) / 8 (termasuk yang pnya variansi 0)
  89.     # =======================================================================
  90.    
  91.   end
  92. end
  93. # =============================================================================
  94. # Batas dari konfigurasi. Jangan diedit kecuali ente ngerti :v
  95. # =============================================================================
  96. module THEO
  97.   module ENEMY
  98.   module REGEXP
  99.    
  100.     MHP_VAR   = /<(?:MHP_VAR|mhp var):[ ]*(\d+)>/i
  101.     MMP_VAR   = /<(?:MMP_VAR|mmp var):[ ]*(\d+)>/i
  102.     ATK_VAR   = /<(?:ATK_VAR|atk var):[ ]*(\d+)>/i
  103.     DEF_VAR   = /<(?:DEF_VAR|def var):[ ]*(\d+)>/i
  104.     MAT_VAR   = /<(?:MAT_VAR|mat var):[ ]*(\d+)>/i
  105.     MDF_VAR   = /<(?:MDF_VAR|mdf var):[ ]*(\d+)>/i
  106.     AGI_VAR   = /<(?:AGI_VAR|agi var):[ ]*(\d+)>/i
  107.     LUK_VAR   = /<(?:LUK_VAR|luk var):[ ]*(\d+)>/i
  108.     VARIANCE  = /<(?:VARIANCE|variance):[ ](.*)>/i
  109.    
  110.   end
  111.   end
  112. end
  113.  
  114. class RPG::Enemy < RPG::BaseItem
  115.   attr_accessor :params_var
  116.  
  117.   include THEO::ENEMY
  118.  
  119.   def load_params_variance
  120.     @params_var = VARIANCE.dup
  121.     self.note.split(/[\r\n]+/).each do |line|
  122.       case line
  123.       when REGEXP::MHP_VAR
  124.         @params_var[0] = $1.to_i
  125.       when REGEXP::MMP_VAR
  126.         @params_var[1] = $1.to_i
  127.       when REGEXP::ATK_VAR
  128.         @params_var[2] = $1.to_i
  129.       when REGEXP::DEF_VAR
  130.         @params_var[3] = $1.to_i
  131.       when REGEXP::MAT_VAR
  132.         @params_var[4] = $1.to_i
  133.       when REGEXP::MDF_VAR
  134.         @params_var[5] = $1.to_i
  135.       when REGEXP::AGI_VAR
  136.         @params_var[6] = $1.to_i
  137.       when REGEXP::LUK_VAR
  138.         @params_var[7] = $1.to_i
  139.       when REGEXP::VARIANCE
  140.         $1.to_s.split(",").each_with_index do |v,i|
  141.           break if i > 7
  142.           @params_var[i] = eval(x) rescue @params_var[i] = 0
  143.         end
  144.       end # case
  145.     end # note.split
  146.   end # def load_param
  147.  
  148.   def no_variance?
  149.     self.note.include?("<no var>")
  150.   end
  151.  
  152. end # class RPG::Enemy
  153.  
  154. module DataManager
  155.  
  156.   class << self
  157.     alias pre_random_e_param_db load_database
  158.   end
  159.  
  160.   def self.load_database
  161.     pre_random_e_param_db
  162.     load_e_param_variance
  163.   end
  164.  
  165.   def self.load_e_param_variance
  166.     $data_enemies.compact.each do |enemy|
  167.       enemy.load_params_variance
  168.     end
  169.   end
  170.  
  171. end
  172.  
  173. class Game_Enemy < Game_Battler
  174.  
  175.   alias pre_random_params_init initialize
  176.   def initialize(index, enemy_id)
  177.     @variances = Array.new(7) {1}
  178.     pre_random_params_init(index, enemy_id)
  179.     make_variances(enemy_id)
  180.   end
  181.  
  182.   alias base_mhp mhp
  183.   alias base_mmp mmp
  184.   alias base_atk atk
  185.   alias base_def def
  186.   alias base_mat mat
  187.   alias base_mdf mdf
  188.   alias base_agi agi
  189.   alias base_luk luk
  190.   alias base_exp exp
  191.  
  192.   def make_variances(id)
  193.     enemy = $data_enemies[id]
  194.     return if enemy.no_variance?
  195.     enemy.params_var.each_with_index do |var,i|
  196.       if var.nil? || (var == 0 && !THEO::ENEMY::INCLUDE_ZERO)
  197.         @variances[i] = nil
  198.         next
  199.       end
  200.       min = -var
  201.       max = var
  202.       @variances[i] = (min + (rand *(max-min)))*0.01 + 1
  203.     end
  204.     asign_hp_mp
  205.   end
  206.  
  207.   def asign_hp_mp
  208.     @hp = mhp
  209.     @mp = mmp
  210.   end
  211.  
  212.   def rata2_variansi
  213.     @variances.compact.inject(0){|r,i| r += i} / @variances.compact.size rescue 1
  214.   end
  215.  
  216.   def mhp; param_var(base_mhp,@variances[0]); end;
  217.   def mmp; param_var(base_mmp,@variances[1]); end;
  218.   def atk; param_var(base_atk,@variances[2]); end;
  219.   def def; param_var(base_def,@variances[3]); end;
  220.   def mat; param_var(base_mat,@variances[4]); end;
  221.   def mdf; param_var(base_mdf,@variances[5]); end;
  222.   def agi; param_var(base_agi,@variances[6]); end;
  223.   def luk; param_var(base_luk,@variances[7]); end;
  224.    
  225.   def exp
  226.     return base_exp unless THEO::ENEMY::DYNAMIC_EXP
  227.     param_var(base_exp,rata2_variansi)
  228.   end;
  229.  
  230.   def param_var(base,var)
  231.     return base unless var
  232.     return (base * var).round
  233.   end
  234.  
  235. end
Advertisement
Add Comment
Please, Sign In to add comment