Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # =============================================================================
- # TheoAllen - Random Enemy Parameters
- # Version : 1.0
- # Contact : www.rpgmakerid.com (or) http://theolized.blogspot.com
- # (This script documentation is written in informal indonesian language)
- # =============================================================================
- ($imported ||= {})[:Theo_RandomEParam] = true
- # =============================================================================
- # CHANGE LOGS:
- # -----------------------------------------------------------------------------
- # 2013.05.18 - Started and Finished script
- # =============================================================================
- =begin
- Perkenalan :
- Script ini ngebikin parameter musuh bisa berbeda-beda setiap kali battle.
- Ada kalanya sebuah Slime mempunyai MHP 120. Tapi slime lain dengan nama
- dan database yang sama, mempunyai MHP 80 dalam satu troop.
- Cara Penggunaan :
- Pasang script ini dibawah material namun diatas main. Tulis tag seperti ini
- pada note enemy jika kamu pengen spesifikasi variansi parameter tiap musuh
- berbeda-beda.
- <mhp var: n>
- <mmp var: n>
- <atk var: n>
- <def var: n>
- <mat var: n>
- <mdf var: n>
- <agi var: n>
- <luk var: n>
- Dimana n adalah angka variansinya. Semisal jika kamu memasukkan MHP 20, dan
- dalam database enemy 100, maka MHP akan dirandom antara 80 - 120.
- <no var>
- Tag yang satu ini untuk membikin enemy ngga punya variansi. Bisa digunakan
- untuk database boss.
- <variance: n1,n2,n3,n4,n5,n6,n7,n8>
- Tag yang satu ini untuk mengeset semua variansi secara bersamaan. urutannya
- adalah mhp,mmp,atk,def,mat,mdf,agi,luk
- Terms of use :
- Credit gw, TheoAllen. Kalo semisal u bisa ngedit2 script gw trus jadi lebih
- keren, terserah. Ane bebasin. Asal ngga ngeklaim aja. Kalo semisal mau
- dipake buat komersil, jangan lupa, gw dibagi gratisannya.
- =end
- # =============================================================================
- # Konfigurasi :
- # =============================================================================
- module THEO
- module ENEMY
- # =======================================================================
- VARIANCE = [ 0, 0, 0, 0, 0, 0, 0, 0]
- # VARIANCE = [mhp,mmp,atk,def,mat,mdf,agi,luk]
- # -----------------------------------------------------------------------
- # Variansi default untuk semua enemy.
- # =======================================================================
- # =======================================================================
- DYNAMIC_EXP = true
- # -----------------------------------------------------------------------
- # Jika diset true, maka jumlah exp yang didapat dari enemy juga berubah
- # tergantung perubahan parameter lainnya
- #
- # Rumus exp ratenya adalah rata-rata dari hasil randomisasi dari variansi
- # =======================================================================
- # =======================================================================
- INCLUDE_ZERO = true
- # -----------------------------------------------------------------------
- # Untuk perhitungan gain exp (jika dynamic exp = true). Jika pilihan ini
- # kamu tulis true, maka variansi 0 akan dihitung dalam perhitungan exp.
- #
- # Contohnya jika kamu memilih false, dan kamu hanya mengisi variansi HP
- # 20 (sisanya 0) dengan base MHP 100. Dan EXP bonus momon adalah 100.
- # Saat dapet enemy dengan MHP 80, maka kamu akan dapet bonus 80 EXP.
- #
- # Perhitungannya adalah :
- # 0.8 / 1 (karena cuman satu aja yang punya variansi lebih dari 0)
- #
- # Jika pilihan ini kamu tulis true. Maka jika dapet enemy dengan MHP 80
- # perhitungannya adalah :
- # (0.8+1+1+1+1+1+1+1) / 8 (termasuk yang pnya variansi 0)
- # =======================================================================
- end
- end
- # =============================================================================
- # Batas dari konfigurasi. Jangan diedit kecuali ente ngerti :v
- # =============================================================================
- module THEO
- module ENEMY
- module REGEXP
- MHP_VAR = /<(?:MHP_VAR|mhp var):[ ]*(\d+)>/i
- MMP_VAR = /<(?:MMP_VAR|mmp var):[ ]*(\d+)>/i
- ATK_VAR = /<(?:ATK_VAR|atk var):[ ]*(\d+)>/i
- DEF_VAR = /<(?:DEF_VAR|def var):[ ]*(\d+)>/i
- MAT_VAR = /<(?:MAT_VAR|mat var):[ ]*(\d+)>/i
- MDF_VAR = /<(?:MDF_VAR|mdf var):[ ]*(\d+)>/i
- AGI_VAR = /<(?:AGI_VAR|agi var):[ ]*(\d+)>/i
- LUK_VAR = /<(?:LUK_VAR|luk var):[ ]*(\d+)>/i
- VARIANCE = /<(?:VARIANCE|variance):[ ](.*)>/i
- end
- end
- end
- class RPG::Enemy < RPG::BaseItem
- attr_accessor :params_var
- include THEO::ENEMY
- def load_params_variance
- @params_var = VARIANCE.dup
- self.note.split(/[\r\n]+/).each do |line|
- case line
- when REGEXP::MHP_VAR
- @params_var[0] = $1.to_i
- when REGEXP::MMP_VAR
- @params_var[1] = $1.to_i
- when REGEXP::ATK_VAR
- @params_var[2] = $1.to_i
- when REGEXP::DEF_VAR
- @params_var[3] = $1.to_i
- when REGEXP::MAT_VAR
- @params_var[4] = $1.to_i
- when REGEXP::MDF_VAR
- @params_var[5] = $1.to_i
- when REGEXP::AGI_VAR
- @params_var[6] = $1.to_i
- when REGEXP::LUK_VAR
- @params_var[7] = $1.to_i
- when REGEXP::VARIANCE
- $1.to_s.split(",").each_with_index do |v,i|
- break if i > 7
- @params_var[i] = eval(x) rescue @params_var[i] = 0
- end
- end # case
- end # note.split
- end # def load_param
- def no_variance?
- self.note.include?("<no var>")
- end
- end # class RPG::Enemy
- module DataManager
- class << self
- alias pre_random_e_param_db load_database
- end
- def self.load_database
- pre_random_e_param_db
- load_e_param_variance
- end
- def self.load_e_param_variance
- $data_enemies.compact.each do |enemy|
- enemy.load_params_variance
- end
- end
- end
- class Game_Enemy < Game_Battler
- alias pre_random_params_init initialize
- def initialize(index, enemy_id)
- @variances = Array.new(7) {1}
- pre_random_params_init(index, enemy_id)
- make_variances(enemy_id)
- end
- alias base_mhp mhp
- alias base_mmp mmp
- alias base_atk atk
- alias base_def def
- alias base_mat mat
- alias base_mdf mdf
- alias base_agi agi
- alias base_luk luk
- alias base_exp exp
- def make_variances(id)
- enemy = $data_enemies[id]
- return if enemy.no_variance?
- enemy.params_var.each_with_index do |var,i|
- if var.nil? || (var == 0 && !THEO::ENEMY::INCLUDE_ZERO)
- @variances[i] = nil
- next
- end
- min = -var
- max = var
- @variances[i] = (min + (rand *(max-min)))*0.01 + 1
- end
- asign_hp_mp
- end
- def asign_hp_mp
- @hp = mhp
- @mp = mmp
- end
- def rata2_variansi
- @variances.compact.inject(0){|r,i| r += i} / @variances.compact.size rescue 1
- end
- def mhp; param_var(base_mhp,@variances[0]); end;
- def mmp; param_var(base_mmp,@variances[1]); end;
- def atk; param_var(base_atk,@variances[2]); end;
- def def; param_var(base_def,@variances[3]); end;
- def mat; param_var(base_mat,@variances[4]); end;
- def mdf; param_var(base_mdf,@variances[5]); end;
- def agi; param_var(base_agi,@variances[6]); end;
- def luk; param_var(base_luk,@variances[7]); end;
- def exp
- return base_exp unless THEO::ENEMY::DYNAMIC_EXP
- param_var(base_exp,rata2_variansi)
- end;
- def param_var(base,var)
- return base unless var
- return (base * var).round
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment