RPG Creator : créez votre MMORPG ou RPG sans aucune connaissance en programmation


Disponible le 4 Juin !




- Jouez à votre jeu sur tablettes tactiles, Smartphones et navigateurs Web
- Personnalisez vos menus
- Dessinez facilement et rapidement vos cartes
- Créez des actions pour le combat A-RPG


www.rpgcreator.net


Heures au format UTC + 1 heure [ Heure d’été ]


Règles du forum


Consultez la liste des Scripts : cliquez ici



Publier un nouveau sujet Répondre au sujet  [ 17 messages ]  Aller à la page 1, 2  Suivant
Auteur Message
 Sujet du message: Script A-RPG très complet (Requiem ABS 4)
MessagePublié: 31 Déc 2009, 13:22 
Villageois (Nv 4)

Inscrit le: 06 Déc 2009, 15:47
Messages: 66
Logiciel(s) préféré(s): Rpg maker vx/xp
Sexe: Masculin
Points d'aide: 0/60

Créations :

- Script pour plus d'équipement améliorer de DerVVulfman


Voir ses créations

Permet de faire des combats A-RPG genre Zelda. Ce script est très simple d'utilisation et très complet.
Premier script, à placer au-dessus de main:
D'abord, la démo:http://www.megaupload.com/?d=4FFE6KNM
#==============================================================================
# High Priority
#==============================================================================
module AntiLag

SPC = Win32API.new("kernel32", "SetPriorityClass", "pi", "i")

@@high_priority = false

def self.high_priority
@@high_priority
end

def self.high_priority=(valor)
return if @@high_priority == valor
@@high_priority = valor
if @@high_priority
SPC.call(-1, 0x80)
return
end
SPC.call(-1, 0x20)
end

end

AntiLag.high_priority = true


Le nommé High Priority
Je mettrai les autres sur d'autres postes. Il y a 5 script en tout.


Dernière édition par dark-overlord le 12 Jan 2010, 21:44, édité 2 fois au total.

Haut
 Profil  
 
 Sujet du message: Re: Script A-RPG très complet (Requiem ABS 4)
MessagePublié: 01 Jan 2010, 18:54 
Villageois (Nv 4)

Inscrit le: 06 Déc 2009, 15:47
Messages: 66
Logiciel(s) préféré(s): Rpg maker vx/xp
Sexe: Masculin
Points d'aide: 0/60

Créations :

- Script pour plus d'équipement améliorer de DerVVulfman


Voir ses créations

2éme script à placer au dessus de Main et le nommé Imput

Code: Tout sélectionner
#==============================================================================
# Input Module
#==============================================================================
module Input
 
  Mouse_Left = 1
  Mouse_Right = 2
  Mouse_Middle = 4
 
  Back = 8
  Tab = 9
  Enter = 13
  Shift = 16
  Ctrl = 17
  Alt = 18
  CapsLock = 20
  Esc = 27
  Space = 32
  PGUP = 33
  PGDN = 34
  End = 35
  Home = 36
  Left = 37
  Up = 38
  Right = 39
  Down = 40
  PrintScreen = 44
  Insert = 45
  Delete = 46
 
  Numberkeys = {}
  Numberkeys[0] = 48
  Numberkeys[1] = 49
  Numberkeys[2] = 50
  Numberkeys[3] = 51
  Numberkeys[4] = 52
  Numberkeys[5] = 53
  Numberkeys[6] = 54
  Numberkeys[7] = 55
  Numberkeys[8] = 56
  Numberkeys[9] = 57
 
  Letters = {}
  Letters["A"] = 65
  Letters["B"] = 66
  Letters["C"] = 67
  Letters["D"] = 68
  Letters["E"] = 69
  Letters["F"] = 70
  Letters["G"] = 71
  Letters["H"] = 72
  Letters["I"] = 73
  Letters["J"] = 74
  Letters["K"] = 75
  Letters["L"] = 76
  Letters["M"] = 77
  Letters["N"] = 78
  Letters["O"] = 79
  Letters["P"] = 80
  Letters["Q"] = 81
  Letters["R"] = 82
  Letters["S"] = 83
  Letters["T"] = 84
  Letters["U"] = 85
  Letters["V"] = 86
  Letters["W"] = 87
  Letters["X"] = 88
  Letters["Y"] = 89
  Letters["Z"] = 90
 
  LWin = 91
  RWin = 92
  Apps = 93
 
  Numberpad = {}
  Numberpad[0] = 96
  Numberpad[1] = 97
  Numberpad[2] = 98
  Numberpad[3] = 99
  Numberpad[4] = 100
  Numberpad[5] = 101
  Numberpad[6] = 102
  Numberpad[7] = 103
  Numberpad[8] = 104
  Numberpad[9] = 105
  Multiply = 106
  Add = 107
  Subtract = 109
  Decimal = 110
  Divide = 111
 
  Fkeys = {}
  Fkeys[1] = 112
  Fkeys[2] = 113
  Fkeys[3] = 114
  Fkeys[4] = 115
  Fkeys[5] = 116
  Fkeys[6] = 117
  Fkeys[7] = 118
  Fkeys[8] = 119
  Fkeys[9] = 120
  Fkeys[10] = 121
  Fkeys[11] = 122
  Fkeys[12] = 123
 
  NumLock = 144
  ScrollLock = 145
  LShift = 160
  RShift = 161
  LControl = 162
  RControl = 163
  LAlt = 164
  RAlt = 165
 
  Collon = 186
  Equal = 187
  Comma = 188
  Underscore = 189
  Dot = 190
  Backslash = 191
  Uncle = 192
  LB = 219
  Bar = 220
  RB = 221
  Quote = 222
 
  @time = Array.new(256, 0)
  @press = Array.new(256, false)
  @trigger = Array.new(256, false)
  @repeat = Array.new(256, false)
  @release = Array.new(256, false)
  @dirs = [0, 0]
 
  InputInitialize = Win32API.new("Input", 'InputInitialize', 'LLLLLL', '')
  InputUpdate = Win32API.new("Input", 'InputUpdate', '', '')
 
  REG_KVALUES = {0=>32,1=>13,2=>27,3=>96,4=>16,5=>90,6=>88,7=>67,8=>86,9=>66,
                 10=>65,11=>83,12=>68,13=>81,14=>87}
                 
  DEFAULT_KEYS = {11=>[16,90],12=>[27,88,96],13=>[13,32],14=>[65],15=>[83],
                  16=>[68],17=>[81],18=>[87]}
 
  def convert_keys(key)
    begin
      keys = []
      rkey = 'HKEY_CURRENT_USER\\Software\\Enterbrain\\RGSS'
      data = Registry.read_entry(rkey, 'ButtonAssign')[10, 25].scan(/./)
      15.times {|i| keys.push(REG_KVALUES[i]) if key == data[i].unpack('C')[0]}
      keys
    rescue
      DEFAULT_KEYS[key] rescue []
    end
  end   
 
  module_function :convert_keys
 
  LEFT = 37
  UP = 38
  RIGHT = 39
  DOWN = 40
  A = convert_keys(11)
  B = [45] + convert_keys(12)
  C = convert_keys(13)
  X = convert_keys(14)
  Y = convert_keys(15)
  Z = convert_keys(16)
  L = [33] + convert_keys(17)
  R = [34] + convert_keys(18)
  SHIFT = 16
  CTRL = 17
  ALT = 18
  F5 = 116
  F6 = 117
  F7 = 118
  F8 = 119
  F9 = 120
 
  InputInitialize.call(@time.object_id, @press.object_id, @trigger.object_id,
  @repeat.object_id,  @release.object_id, @dirs.object_id)
 
  def self.update
    InputUpdate.call
  end
 
  def self.trigger?(id)
    @trigger.indexes(*id.to_a).include?(true)
  end
 
  def self.press?(id)
    @press.indexes(*id.to_a).include?(true)
  end
 
  def self.triggerd?(what)
    if triggered.include?(what)
      return true
    end
  end
 
  def self.triggered
    array = Array.new
    @trigger.each_index {|i| array.push(i) if @trigger[i]}
    array
  end
 
  def self.pressed?(what)
    if pressed.include?(what)
      return true
    end
  end
 
  def self.pressed
    array = Array.new
    @press.each_index {|i| array.push(i) if @press[i]}
    array
  end
 
  def self.repeat?(id)
    @repeat.indexes(*id.to_a).include?(true)
  end
 
  def self.repeated
    array = Array.new
    @repeat.each_index {|i| array.push(i) if @repeat[i]}
    array
  end
 
  def self.release?(id)
    @release.indexes(*id.to_a).include?(true)
  end
 
  def self.released
    array = Array.new
    @release.each_index {|i| array.push(i) if @release[i]}
    array
  end
 
  def self.dir4
    @dirs[0]
  end
 
  def self.dir8
    @dirs[1]
  end

  KEYS_NAMES = {1=>'Mouse Left',2=>'Mouse Right',3=>'Cancel',
  4=>'Mouse Middle',5=>'Mouse 4th',6=>'Mouse 5th',8=>'Backspace',9=>'Tab',
  12=>'Clear',13=>'Enter',16=>'Shift',17=>'Control',18=>'Alt',19=>'Pause',
  20=>'Capitals Lock',21=>'Kana',23=>'Junja',24=>'Final',25=>'Kanji',
  27=>'Escape',28=>'Convert',29=>'Non Convert',30=>'Accept',31=>'Mode Change',
  32=>'Space',33=>'Page Up',34=>'Page Down',35=>'End',36=>'Home',37=>'Left',
  38=>'Up',39=>'Right',40=>'Down',41=>'Select',42=>'Print',43=>'Execute',
  44=>'PrintScreen',45=>'Insert',46=>'Delete',47=>'Help',48=>'0',49=>'1',50=>'2',
  51=>'3',52=>'4',53=>'5',54=>'6',55=>'7',56=>'8',57=>'9',65=>'A',66=>'B',
  67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',
  76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',
  85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'Left Windows',
  92=>'Right Windows',93=>'Application',95=>'Sleep',96=>'PAD 0',97=>'PAD 1',
  98=>'PAD 2',99=>'PAD 3',100=>'PAD 4',101=>'PAD 5',102=>'PAD 6',103=>'PAD 7',
  104=>'PAD 8',105=>'PAD 9',106=>'*',107=>'+',108=>'Separator',109=>'-',110=>'.',
  111=>'/',112=>'F1',113=>'F2',114=>'F3',115=>'F4',116=>'F5',117=>'F6',118=>'F7',
  119=>'F8',120=>'F9',121=>'F10',122=>'F11',123=>'F12',124=>'F13',125=>'F14',
  126=>'F15',127=>'F16',128=>'F17',129=>'F18',130=>'F19',131=>'F20',132=>'F21',
  133=>'F22',134=>'F23',135=>'F24',144=>'Number Lock',145=>'Scroll Lock',
  146=>'OEM 15',147=>'OEM 16',148=>'OEM 17',149=>'OEM 18',150=>'OEM 19',
  160=>'Left Shift',161=>'Right Shift',162=>' Left Control',163=>'Right Control',
  164=>' Left Alt',165=>'Right Alt',166=>'Browser Back',167=>'Browser Forward',
  168=>'Browser Refresh',169=>'Browser Stop',170=>'Browser Search',
  171=>'Browser Favorites',172=>'Browser Home',173=>'Volume Mute',
  174=>'Volume Down',175=>'Volume Up',176=>'Media Next Track',
  177=>'Media Previous Track',178=>'Media Stop',179=>'Media Play Pause',
  180=>'Launch Mail',181=>'Launch Media Select',182=>'Launch Application',
  183=>'Launch Application',186=>'OEM 1',187=>'OEM 2',188=>'OEM 3',189=>'OEM 4',
  190=>'OEM 5',191=>'OEM 6',192=>'OEM 7',219=>'OEM 8',220=>'OEM 9',221=>'OEM 10',
  222=>'OEM 11',223=>'OEM 13',225=>'OEM 20',226=>'OEM 14',227=>'OEM 21',
  228=>'OEM 22',229=>'Proccess',230=>'OEM 23',232=>'OEM 24',240=>'OEM 25',
  241=>'OEM 26',242=>'OEM 27',243=>'OEM 28',244=>'OEM 29',245=>'OEM 30',
  246=>'ATTN',247=>'CRSEL',248=>'EXSEL',249=>'EREOF',250=>'Play',251=>'Zoom',
  253=>'PA1',254=>'OEM Clear'}
 
  def self.name?(id)
    return (KEYS_NAMES[id].nil? ? '???' : KEYS_NAMES[id])
  end
 
end

#-----------------------------------------------------------------------------
module Registry
 
  module_function
 
  RegCloseKey = Win32API.new('advapi32', 'RegCloseKey', 'L', 'L')
  RegOpenKeyExA = Win32API.new('advapi32', 'RegOpenKeyExA', 'LPLLP', 'L')
  RegQueryValueExA = Win32API.new('advapi32', 'RegQueryValueExA','LPLPPP','L')
  HKEYS = {'HKEY_CLASSES_ROOT' => 0x80000000,'HKEY_CURRENT_USER' =>0x80000001,
  'HKEY_LOCAL_MACHINE' => 0x80000002, 'HKEY_USERS' => 0x80000003,
  'HKEY_CURRENT_CONFIG' => 0x80000005}
 
  def read_entry(key, entry)
    key.sub!(/(.*?)\\/, '')
    if HKEYS[$1] != nil
      hkey = HKEYS[$1]
    else
      return nil
    end
    opened, type, size = [0].pack('V'), [0].pack('V'), [0].pack('V')
    RegOpenKeyExA.call(hkey, key, 0, 131097, opened)
    opened = (opened + [0].pack('V')).unpack('V')[0]
    RegQueryValueExA.call(opened, entry, 0, type, 0, size)
    data = ' ' * (size + [0].pack('V')).unpack('V')[0]
    RegQueryValueExA.call(opened, entry, 0, type, data, size)
    RegCloseKey.call(opened)
    data = data[0, (size + [0].pack('V')).unpack('V')[0]]
    type = (type += [0].pack('V')).unpack('V')[0]
    case type
    when 1
      data.chop
    when 2
      data.chop.gsub(/%([^%]+)%/) { ENV[$1] || $& }
    when 3
      data
    when 4
      (data += [0].pack('V')).unpack('V')[0]
    when 5
      data.unpack('N')[0]
    when 7
      data.split(/\0/)
    when 11
      (data.unpack('VV')[1] << 32) | data[0]
    else
      nil
    end
  end
 
end


Dernière édition par dark-overlord le 01 Jan 2010, 19:00, édité 1 fois au total.

Haut
 Profil  
 
 Sujet du message: Re: Script A-RPG très complet (Requiem ABS 4)
MessagePublié: 01 Jan 2010, 18:58 
Villageois (Nv 4)

Inscrit le: 06 Déc 2009, 15:47
Messages: 66
Logiciel(s) préféré(s): Rpg maker vx/xp
Sexe: Masculin
Points d'aide: 0/60

Créations :

- Script pour plus d'équipement améliorer de DerVVulfman


Voir ses créations

Le 3mée script toujours au dessus de main et le nommé Requiem ABS 4. Le plus long script.
Code: Tout sélectionner
#==============================================================================
# Requiem ABS Version 4.0
#==============================================================================
#------------------------------------------------------------------------------
# Credits: Vlad | Email: demon_of_lust@live.com
#------------------------------------------------------------------------------

# To create an enemy, put the following comments in a event on map:

# Enemy ID - Changer l'ID pour l'ID du monstre de la base de donné. Exemple= Enemy1 sera le monstre numéro 1 de la base de donné
# Die Erase - Efface définitivement le monstre à sa mort
# Die Self Switch A - Active l'interrupteur local A à sa mort
# Die Self Switch B - Active l'interrupteur local  B à sa mort
# Die Self Switch C - Active l'interrupteur local C à sa mort
# Die Self Switch D - Active l'interrupteur local D à sa mort
# Die Switch X - Changer X par l'ID d'un interrupteur
# Die Variable X - Augmente de 1 la variable X
# Follow X - Changer X par un nombre. X sera le nombre de case que l'enemi vera le héro pour l'attaquer
# Kill With Weapon X - The enemy will die only if be attacked with weapon X
# Kill With Skill X - The enemy will die only if be attacked with skill X
# Kill With Item X - The enemy will die only if be attacked with item X
# Object - Makes the enemy be an object, and impossible to kill
# Puzzle - Makes the enemy be an puzzle, it can be killed but allies don't follow it, the damage and hp bar is not showed
# Respawn X - Fait revivre l'enemi par un temps X, en frames
# Boss - Montre la barre du Boss

#------------------------------------------------------------------------------
# GENERAL CONFIGURATIONS
#------------------------------------------------------------------------------
module Requiem_ABS
#------------------------------------------------------------------------------
# Right hand attack key:
Right_Attack_Button = Input::Letters["A"]

# Left hand attack and Shield key:
Left_Attack_and_Shield_Button = Input::Letters["S"]

# Skills keys:
Skill_Buttons = [Input::Numberkeys[1], Input::Numberkeys[2], Input::Numberkeys[3]]

# Items keys:
Item_Buttons = [Input::Numberkeys[4], Input::Numberkeys[5], Input::Numberkeys[6]]

# Text dysplayed when memorize skill or item in a hotkey
Memorize_Text = "Memoriser"

# Attack delay for player (in frames)
Hero_Attack_Time = 35

# Attack delay for enemies (in frames)
Enemy_Attack_Time = 45

# Divide the size of Animation by:
Animations_Divide_By = 3

# Use animations of the weapons? (true = yes / false = no)
Allow_Weapons_Graphics = true

# Use shields? (trus = sim / false = não)
Allow_Shields_Graphics = true

# Use combo damage? (true = yes / false = no)
Combo_Damage = true

# Change 40 for animation ID
LevelUp_Animation = 40

# Recovery HP and MP when level-up? (true = yes / false = no)
Restaure_When_UpLevel = true

# Index of the Gold icon:
Gold_Drop_Graphic = 147

# Gold drop rate (in %)
Gold_Drop_Rate = 75

# Time to dropped item auto-erase (in frames):
Drop_Duration_Time = 450

# Show Reward items names? (true = yes / false = no)
Show_Reward = true

# Sound when gold is dropped:
Drop_Money_SE = "DropMoney"

# Sound when item is dropped:
Drop_Item_SE = "DropItem"

# Sound when get item or gold:
Get_Reward_SE = "Getitem"

# Damage texts configurations:
Damage_Properties = []
Damage_Properties[1] = "Georgia" # Damage font
Damage_Properties[2] = 22 # Damage font size
Damage_Properties[3] = false # Ecriture en gras? (true = oui / false = non)
Damage_Properties[4] = true # Ecriture en italique? (true = oui / false = non)
Damage_Properties[5] = "Critique" # Text du coup critique
Damage_Properties[6] = "Rater" # Text de coup rater

Damage_Properties[7] = "Hits" # Text hits
Damage_Properties[8] = "Times New Roman" # Style de la police pour "Hits"
Damage_Properties[9] = 26 # Taille du texte
Damage_Properties[10] = true # Ecriture en gras? (true = oui / false = non)
Damage_Properties[11] = true # Ecriture en italique? (true = oui / false = non)
Damage_Properties[12] = "Combo" # Text de 'combo'

Damage_Properties[13] = Color.new(255,255,255) # Couleur du texte de dommage
Damage_Properties[14] = Color.new(125,200,115) # Couleur du texte de guerison
Damage_Properties[15] = Color.new(255,255,128) # Couleur du texte de critique
Damage_Properties[16] = Color.new(245,150,120) # Couleur du texte de combo
Damage_Properties[17] = Color.new(210,160,210) # Couleur du texte de hits

Damage_Properties[18] = "Garde" # Texte de défense

Damage_Properties[19] = "Niv. +" # Texte de level up
#------------------------------------------------------------------------------
end
#==============================================================================

#------------------------------------------------------------------------------
# Module RPG
#------------------------------------------------------------------------------
module RPG
 
  class State
   
    def animation_id
      self.note.each_line { |line|
      return line.gsub('Animation = ', '').to_i if line.include?('Animation = ')
      }
      return 0
    end
   
    def walk_slower?
      self.note.each_line { |line| return true if line.include?("Walk Slower") }
      return false
    end
   
    def walk_faster?
      self.note.each_line { |line| return true if line.include?("Walk Faster") }
      return false
    end
   
    def dont_walk?
      self.note.each_line { |line| return true if line.include?("Don't Walk") }
      return false
    end
   
    def duration
      self.note.each_line { |line|
      return line.gsub('Duration = ', '').to_i if line.include?('Duration = ')
      }
      return 300
    end
   
  end
 
  class BaseItem
   
    def ranged?
      self.note.each_line { |line| return true if line.include?("Ranged") }
      return false
    end
   
    def explosive?
      self.note.each_line { |line| return true if line.include?("Explosive") }
      return false
    end
   
    def bomb?
      self.note.each_line { |line| return true if line.include?("Bomb") }
      return false
    end
     
    def graphic
      self.note.each_line { |line|
      if line.include?('Graphic = ')
        graphic = line.gsub!('Graphic = ', '')
        return graphic.chop
      end
      }
      return ""
    end
   
    def index
      self.note.each_line { |line|
      return line.gsub('Index = ', '').to_i if line.include?('Index = ')
      }
      return 0
    end
   
    def move_speed
      self.note.each_line { |line|
      return line.gsub('Speed = ', '').to_i if line.include?('Speed = ')
      }
      return 4
    end
   
    def range
      self.note.each_line { |line|
      return line.gsub('Range = ', '').to_i if line.include?('Range = ')
      }
      return 5
    end
   
    def delay
      self.note.each_line { |line|
      return line.gsub('Delay = ', '').to_i if line.include?('Delay = ')
      }
      return 60
    end
   
    def area
      self.note.each_line { |line|
      return line.gsub('Area = ', '').to_i if line.include?('Area = ')
      }
      return 3
    end
   
    def shot_se
      self.note.each_line { |line|
      return line.gsub('Shot SE = ', '').to_s if line.include?('Shot SE = ')
      }
      return nil
    end
   
    def combo_hits
      self.note.each_line { |line|
      return line.gsub('Combo Hits = ', '').to_i if line.include?('Combo Hits = ')
      }
      return 5
    end
   
    def combo_rate
      self.note.each_line { |line|
      return line.gsub('Combo Rate = ', '').to_i if line.include?('Combo Rate = ')
      }
      return 75
    end
   
    def ammo1
      self.note.each_line { |line|
      return $data_items[line.gsub('Ammo1 = ', '').to_i] if line.include?('Ammo1 = ')
      }
      return nil
    end
   
    def ammo2
      self.note.each_line { |line|
      return $data_items[line.gsub('Ammo2 = ', '').to_i] if line.include?('Ammo2 = ')
      }
      return nil
    end
   
    def defense_rate
      self.note.each_line { |line|
      return line.gsub('Defense Rate = ', '').to_i if line.include?('Defense Rate = ')
      }
      return 75
    end
   
  end
 
end

#------------------------------------------------------------------------------
# Game Battler
#------------------------------------------------------------------------------
class Game_Battler
 
  attr_accessor (:combo, :state_turns)
 
  alias requiem_abs_gbattler_execute_damage execute_damage

  def make_attack_damage_value(attacker)
    damage = attacker.atk * 4 - self.def * 2
    damage = 0 if damage < 0
    damage *= elements_max_rate(attacker.element_set)
    damage /= 100
    if damage == 0
      damage = rand(2)
    elsif damage > 0
      @critical = (rand(100) < attacker.cri)
      @critical = false if prevent_critical
      damage *= 2 if @critical
      if attacker.is_a?(Game_Actor) and Requiem_ABS::Combo_Damage
        if $game_player.right_attack_on and attacker.weapons[0] != nil
          hits = attacker.weapons[0].combo_hits
          rate = attacker.weapons[0].combo_rate
        elsif $game_player.left_attack_on and attacker.weapons[1] != nil
          hits = attacker.weapons[1].combo_hits
          rate = attacker.weapons[1].combo_rate
        elsif $game_player.right_attack_on and attacker.weapons[0].nil?
          hits = 5
          rate = 75
        elsif $game_player.left_attack_on and attacker.weapons[1].nil?
          hits = 5
          rate = 75
        else
          hits = rate = 0
        end
        @combo = ($game_player.hits >= hits and rand(100) <= rate)
      else
        @combo = false
      end
      damage *= 3 if @combo
      damage = apply_variance(damage, 20)
      damage = apply_guard(damage)
      @hp_damage = damage
    end
  end
 
  def remove_state(state_id)
    return unless state?(state_id)
    @states.delete(state_id)
    @state_turns.delete(state_id)
  end
 
end

#------------------------------------------------------------------------------
# Game Actor
#------------------------------------------------------------------------------
class Game_Actor
 
  attr_accessor (:skill_hotkeys, :item_hotkeys)
 
  alias requiem_abs_gactor_initialize initialize
 
  def initialize(actor_id)
    requiem_abs_gactor_initialize(actor_id)
    reset_keys
  end
 
  def display_level_up(new_skills)
    $game_system.battle_end_me.play
    $game_player.animation_id = Requiem_ABS::LevelUp_Animation
    if Requiem_ABS::Restaure_When_UpLevel
      $game_player.actor.hp = $game_player.actor.maxhp
      $game_player.actor.mp = $game_player.actor.maxmp
    end
  end
 
  def atk_animation_id2
    if two_swords_style
      return weapons[1].nil? ? 1 : weapons[1].animation_id
    else
      return 1
    end
  end
 
  def reset_keys
    skil_key = {}
    key_skil = []
    for s in Requiem_ABS::Skill_Buttons
      key_skil.push(s)
      skil_key[s] = 0
    end
    @skill_hotkeys = skil_key
    conjure_key = {}
    item_key = {}
    key_item = []
    for i in Requiem_ABS::Item_Buttons
      key_item.push(i)
      item_key[i] = 0
    end
    @item_hotkeys = item_key
  end
 
end

#------------------------------------------------------------------------------
# Game Enemy
#------------------------------------------------------------------------------
class Game_Enemy < Game_Battler
 
  def attack_animation_id
    enemy.note.each_line { |line|
    return line.gsub('Attack Animation = ', '').to_i if line.include?('Attack Animation = ')
    }
    return 1
  end
 
  def die_animation_id
    enemy.note.each_line { |line|
    return line.gsub('Die Animation = ', '').to_i if line.include?('Die Animation = ')
    }
    return nil
  end
 
  def die_se
    enemy.note.each_line { |line|
    return line.gsub('Die SE = ', '').to_s if line.include?('Die SE = ')
    }
    return nil
  end
 
end

#------------------------------------------------------------------------------
# Game Map
#------------------------------------------------------------------------------
class Game_Map
 
  def passable?(x, y, flag = 0x01)
    all_passable?(x, y, flag)
  end
 
  def hero_passable?(x, y, flag = 0x01)
    all_passable?(x, y, flag)
  end
 
  def range_passable?(x, y, flag = 0x01)
    return true if @passages[@map.data[x,y,0]] == 9
    all_passable?(x, y, flag)
  end
 
  def all_passable?(x, y, flag = 0x01)
    for drop in $game_drop
      next if drop.nil?
      return false if drop.x == x and drop.y == y
    end
    for event in events_xy(x, y)
      next if event.tile_id == 0
      next if event.priority_type > 0
      next if event.through
      pass = @passages[event.tile_id]
      next if pass & 0x10 == 0x10
      return true if pass & flag == 0x00
      return false if pass & flag == flag
    end
    for i in [2, 1, 0]
      tile_id = @map.data[x, y, i]
      return false if tile_id.nil?
      pass = @passages[tile_id]
      next if pass & 0x10 == 0x10
      return true if pass & flag == 0x00
      return false if pass & flag == flag
    end
    return false
  end
 
  def update_events
    for event in @events.values
      if in_range?(event) or event.trigger == 3 or event.trigger == 4
        event.update
      end
    end
    for common_event in @common_events.values
      common_event.update
    end
  end
 
  def in_range?(object)
    return false if object.real_x < (@display_x-256)
    return false if object.real_x > (@display_x+(Graphics.width*8)+64)
    return false if object.real_y < (@display_y-256)
    return false if object.real_y > (@display_y+(Graphics.height*8)+64)
    return true
  end
 
end

#------------------------------------------------------------------------------
# Game Character
#------------------------------------------------------------------------------
class Game_Character
 
  alias requiem_abs_gchar_initialize initialize
  alias requiem_abs_gchar_update update
 
  attr_accessor (:actor, :damage, :critical, :combo, :hit, :state_id, :ani_time,
                 :state_time, :weapon1_attack_time, :weapon2_attack_time, :skill_attack_time,
                 :item_attack_time, :recovery_time, :assigned_skill, :deffending,
                 :target, :character_name, :character_index, :show_bar, :graphic_name,
                 :graphic_index, :freeze, :original_move_speed, :anime_attack,
                 :right_attack_on, :left_attack_on, :priority_type)
 
  def initialize
    requiem_abs_gchar_initialize
    @state_id = 0
    @ani_time = 0
    @state_time = 0
    @weapon1_attack_time = 0
    @weapon2_attack_time = 0
    @skill_attack_time = 0
    @item_attack_time = 0
    @recovery_time = 0
    @assigned_skill = 0
    @original_move_speed = 0
    @anime_attack = 0
    @actor = nil
    @damage = nil
    @hit = nil
    @target = nil
    @critical = false
    @combo = false
    @deffending = false
    @show_bar = false
    @freeze = false
    @right_attack_on = false
    @left_attack_on = false
  end
 
  def update
    requiem_abs_gchar_update
    return if $game_party.members.size <= 0
    decrease_counters
    states_properties
    $game_temp.next_scene = "gameover" if $game_party.members[0].dead?
  end
 
  def decrease_counters
    @ani_time -= 1 if @ani_time > 0
    @weapon1_attack_time -= 1 if @weapon1_attack_time > 0
    @weapon2_attack_time -= 1 if @weapon2_attack_time > 0
    @skill_attack_time -= 1 if @skill_attack_time > 0
    @item_attack_time -= 1 if @item_attack_time > 0
    @recovery_time -= 1 if @recovery_time > 0
    @anime_attack -= 1 if @anime_attack > 0
    if @anime_attack <= 0
      @right_attack_on = false
      @left_attack_on = false
    end
  end
 
  def states_properties
    if self.is_a?(Game_Event) and self.in_battle or self.is_a?(Game_Player)
      anime_states
      remove_state
      states_effects
    end
  end
 
  def anime_states
    @state_id = 0
    for state in @actor.states
      return if state.nil? or state == 0
      @state_id = state.id   
    end
  end
 
  def remove_state
    return if @state_id.nil? or @state_id == 0
    if @state_time < @actor.state_turns[@state_id] * 60
      @state_time += 1
    elsif @state_time >= @actor.state_turns[@state_id] * 60
     for state in @actor.states
       @freeze = false if state.dont_walk?
       @move_speed = @original_move_speed if state.walk_slower?
       @move_speed = @original_move_speed if state.walk_faster?
     end
      @actor.remove_state(@state_id)
      @state_time = 0
    end
  end
 
  def states_effects
    for state in @actor.states
      @freeze = true if state.dont_walk?
      @move_speed = 2 if state.walk_slower?
      @move_speed = 5 if state.walk_faster?
      if self.is_a?(Game_Event) and @actor.slip_damage? and Graphics.frame_count % 60 <= 0
        @actor.hp -= (@actor.maxhp*10/100)
      end
    end
  end
 
  def in_range?(parent, target, range)
    x = (parent.x - target.x) * (parent.x - target.x)
    y = (parent.y - target.y) * (parent.y - target.y)
    r = x + y
    return true if r <= (range * range)
    return false
  end
 
  def in_direction?(parent, target)
    return true if parent.direction == 2 and target.y >= parent.y and target.x == parent.x
    return true if parent.direction == 4 and target.x <= parent.x and target.y == parent.y
    return true if parent.direction == 6 and target.x >= parent.x and target.y == parent.y
    return true if parent.direction == 8 and target.y <= parent.y and target.x == parent.x
    return false
  end
 
  def in_front?(parent,target)
    return true if parent.direction == 2 and parent.x == target.x and (parent.y+1) == target.y
    return true if parent.direction == 4 and (parent.x-1) == target.x and parent.y == target.y
    return true if parent.direction == 6 and (parent.x+1) == target.x and parent.y == target.y
    return true if parent.direction == 8 and parent.x == target.x and (parent.y-1) == target.y
    return false
  end
 
  def guard?(parent,target)
    return true if parent.direction == 2 and target.direction == 8
    return true if parent.direction == 4 and target.direction == 6
    return true if parent.direction == 6 and target.direction == 4
    return true if parent.direction == 8 and target.direction == 2
    return false
  end
 
  def movable?
    return false if moving?
    return false if @move_route_forcing
    return true
  end
 
  def move_toward(target)
    sx = distance_x_from(target)
    sy = distance_y_from(target)
    if sx != 0 or sy != 0
      if sx.abs > sy.abs
        sx > 0 ? move_left : move_right
        if @move_failed and sy != 0
          sy > 0 ? move_up : move_down
        end
      else
        sy > 0 ? move_up : move_down
        if @move_failed and sx != 0
          sx > 0 ? move_left : move_right
        end
      end
    end
  end
 
  def turn_toward(target)
    sx = distance_x_from(target)
    sy = distance_y_from(target)
    if sx.abs > sy.abs
      sx > 0 ? turn_left : turn_right
    elsif sx.abs < sy.abs
      sy > 0 ? turn_up : turn_down
    end
  end
 
  def distance_x_from(target)
    sx = @x - target.x
    if $game_map.loop_horizontal?
      if sx.abs > $game_map.width / 2
        sx -= $game_map.width
      end
    end
    return sx
  end
 
  def distance_y_from(target)
    sy = @y - target.y
    if $game_map.loop_vertical?
      if sy.abs > $game_map.height / 2
        sy -= $game_map.height
      end
    end
    return sy
  end
 
end

#------------------------------------------------------------------------------
# Game Event
#------------------------------------------------------------------------------
class Game_Event < Game_Character
 
  attr_reader (:in_battle, :kill_with_weapon, :kill_with_skill, :kill_with_item,
               :respawn, :boss, :object, :puzzle)
               
  alias requiem_abs_gevent_initialize initialize
  alias requiem_abs_gevent_setup setup
  alias requiem_abs_gevent_update update
  alias requiem_abs_gevent_refresh refresh
 
  def initialize(map_id, event)
    @enemy_id = 0
    @respawn = nil
    @in_battle = false
    @boss = false
    @object = false
    @puzzle = false
    requiem_abs_gevent_initialize(map_id, event)
    self.target = $game_player
  end
 
  def setup(new_page)
    requiem_abs_gevent_setup(new_page)
    self.original_move_speed = @move_speed
  end
 
  def update
    requiem_abs_gevent_update
    @respawn -= 1 if !@in_battle and self.actor.nil? and @respawn != nil and @respawn > 0
    if @in_battle and !self.actor.dead?
      make_attack($data_enemies[@enemy_id])
    elsif @in_battle and self.actor.dead?
      kill_enemy
      erasing
    elsif !@in_battle and self.actor.nil? and @respawn != nil and @respawn <= 0
      @erased = false
      @starting = false
      refresh
    end
  end
 
  def refresh
    requiem_abs_gevent_refresh
    @enemy_id = check_comment("Enemy")
    @follow_distance = check_comment("Follow")
    @erase = check_com("Die Erase")
    @switch_local_a = check_com("Die Self Switch A")
    @switch_local_b = check_com("Die Self Switch B")
    @switch_local_c = check_com("Die Self Switch C")
    @switch_local_d = check_com("Die Self Switch D")
    @switch = check_comment("Die Switch")
    @variable = check_comment("Die Variable")
    @kill_with_weapon = check_comment("Kill With Weapon")
    @kill_with_skill = check_comment("Kill With Skill")
    @kill_with_item = check_comment("Kill With Item")
    @boss = check_com("Boss")
    @object = check_com("Object")
    @puzzle = check_com("Puzzle")
    if @enemy_id > 0 and !@in_battle
      @respawn = check_comment("Respawn")
      @respawn = nil if @respawn <= 0
      self.actor = Game_Enemy.new(0, @enemy_id)
      self.actor.recover_all
      @in_battle = true
      @killed = false
    elsif @enemy_id <= 0
      @in_battle = false
    end
    @opacity = 255
    @blend_type = 0
  end
 
  def make_attack(enemy)
    return if $game_map.interpreter.running?
    return if $game_player.in_vehicle? or $game_player.in_airship?
    for action in enemy.actions
      next unless self.actor.conditions_met?(action) or rand(11) < action.rating
      case action.kind
      when 0
        case action.basic
      when 0
        attack_normal
      when 1
        self.deffending = true
      end
      when 1
        return if self.weapon1_attack_time > 0
        self.assigned_skill = $data_skills[action.skill_id]
        return if self.assigned_skill.nil?
        case self.assigned_skill.scope
        when 1..6
          if self.assigned_skill.ranged?
            if in_direction?(self, $game_player) and in_range?(self, $game_player, self.assigned_skill.range)
              skill_range
            elsif action.rating == 10
              skill_range
            end
          else
             skill_normal
           end
        when 7..11
          skill_recover
        end
      end
    end
  end
 
  def attack_normal
    if in_front?(self,$game_player) and self.weapon1_attack_time <= 0
      return if $game_player.actor.nil?
      $game_player.animation_id = self.actor.attack_animation_id
      if $game_player.deffending and $game_player.guard?(self, $game_player) and (rand(100)) <= $game_player.actor.equips[1].defense_rate
        $game_player.damage = Requiem_ABS::Damage_Properties[18]
      else
        $game_player.actor.attack_effect(self.actor)
        if $game_player.actor.hp_damage > 0
          $game_player.damage = $game_player.actor.hp_damage
          $game_player.critical = true if $game_player.actor.critical
        else
          $game_player.damage = Requiem_ABS::Damage_Properties[6]
        end
        $game_player.jump(0,0)
      end
      self.weapon1_attack_time = Requiem_ABS::Enemy_Attack_Time
    end
  end
 
  def skill_normal
    if self.actor.mp >= self.assigned_skill.mp_cost and in_front?(self, $game_player) and self.weapon1_attack_time <= 0
      return if $game_player.actor.nil?
      self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
      $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
      $game_player.animation_id = self.assigned_skill.animation_id
      if $game_player.deffending and $game_player.guard?(self, $game_player) and !self.assigned_skill.ignore_defense and (rand(100)) <= $game_player.actor.equips[1].defense_rate
        $game_player.damage = Requiem_ABS::Damage_Properties[18]
      else
        $game_player.actor.skill_effect(self.actor, self.assigned_skill)
        if $game_player.actor.hp_damage > 0
          $game_player.damage = $game_player.actor.hp_damage
        else
          $game_player.damage = Requiem_ABS::Damage_Properties[6]
        end
        $game_player.jump(0,0)
      end
      self.weapon1_attack_time = Requiem_ABS::Enemy_Attack_Time
    end
  end
 
  def skill_range
    if self.actor.mp >= self.assigned_skill.mp_cost and self.weapon1_attack_time <= 0
      self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
      $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
      $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 3))
      self.weapon1_attack_time = self.assigned_skill.delay
      RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
    end
  end
 
  def skill_recover
    if self.actor.mp >= self.assigned_skill.mp_cost and self.actor.hp <= (self.actor.maxhp*25/100) and self.weapon1_attack_time <= 0
      self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
      $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
      @animation_id = self.assigned_skill.animation_id
      self.actor.skill_effect(self.actor, self.assigned_skill)
      if self.actor.hp_damage < 0
        self.damage = self.actor.hp_damage
      elsif self.actor.mp_damage < 0
        self.damage = self.actor.mp_damage
      end
      self.weapon1_attack_time = Requiem_ABS::Enemy_Attack_Time
    end
    for event in $game_map.events.values
      if event.in_battle and in_range?(self, event, 5)
        if self.actor.mp >= self.assigned_skill.mp_cost and event.actor.hp <= (event.actor.maxhp*25/100) and self.weapon1_attack_time <= 0
          self.actor.mp -= self.assigned_skill.mp_cost
          $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
          event.animation_id = self.assigned_skill.animation_id
          event.actor.skill_effect(self.actor, self.assigned_skill)
          if event.actor.hp_damage < 0
            event.damage = event.actor.hp_damage
          elsif self.actor.mp_damage < 0
            event.damage = event.actor.mp_damage
          end
          self.weapon1_attack_time = Requiem_ABS::Enemy_Attack_Time
        end
      end
    end
  end
 
  def erasing
    return if @puzzle
    @blend_type = 2
    @opacity -= 5
  end
 
  def kill_enemy
    dying unless @killed
    if @opacity <= 0 or @puzzle
      self.actor = nil
      desactive_enemy
      @in_battle = false
      self.show_bar = false
      $game_player.hits = 0
    end
  end
 
  def dying
    $game_player.actor.gain_exp(self.actor.exp, 1)
    make_drop
    unless @puzzle
      if self.actor.die_animation_id != nil
        @animation_id = self.actor.die_animation_id
      end
      if self.actor.die_se != nil
        RPG::SE.new(self.actor.die_se).play
      else
        Sound.play_enemy_collapse
      end
    end
    @killed = true
  end
 
  def desactive_enemy
    if @erase
      erase
    elsif @switch_local_a
      key = [$game_map.map_id, self.id, "A"]
      $game_self_switches[key] = !$game_self_switches[key]
    elsif @switch_local_b
      key = [$game_map.map_id, self.id, "B"]
      $game_self_switches[key] = !$game_self_switches[key]
    elsif @switch_local_c
      key = [$game_map.map_id, self.id, "C"]
      $game_self_switches[key] = !$game_self_switches[key]
    elsif @switch_local_d
      key = [$game_map.map_id, self.id, "D"]
      $game_self_switches[key] = !$game_self_switches[key]
    elsif @switch > 0
      $game_switches[@switch] = !$game_switches[@switch]
    elsif @variable > 0
      $game_variables[@variable] += 1
    end
    $game_map.need_refresh = true
  end
 
  def make_drop
    for item in make_item1
      next if item.nil?
      $game_drop.push(Game_Drop.new(self, item.icon_index, [item] ,0))
    end
    for item in make_item2
      next if item.nil?
      $game_drop.push(Game_Drop.new(self, item.icon_index, [item] ,0))
    end
    if self.actor.gold > 0 and (rand(100)) <= Requiem_ABS::Gold_Drop_Rate
      $game_drop.push(Game_Drop.new(self, Requiem_ABS::Gold_Drop_Graphic, [], self.actor.gold))
    end
  end
 
  def make_item1
    drop_items = []
    for i in [self.actor.drop_item1]
      next if i.kind <= 0
      next if rand(i.denominator) != 0
      if i.kind == 1
        drop_items.push($data_items[i.item_id])
      elsif i.kind == 2
        drop_items.push($data_weapons[i.weapon_id])
      elsif i.kind == 3
        drop_items.push($data_armors[i.armor_id])
      end
    end
    return drop_items
  end

  def make_item2
    drop_items = []
    for i in [self.actor.drop_item2]
      next if i.kind <= 0
      next if rand(i.denominator) != 0
      if i.kind == 1
        drop_items.push($data_items[i.item_id])
      elsif i.kind == 2
        drop_items.push($data_weapons[i.weapon_id])
      elsif i.kind == 3
        drop_items.push($data_armors[i.armor_id])
      end
    end
    return drop_items
  end
 
  def update_self_movement
    return if self.freeze
    if @in_battle and in_range?(self, self.target, @follow_distance) and @stop_count > 30 * (5 - @move_frequency)
      return unless movable?
      move_toward(self.target)
    elsif @stop_count > 30 * (5 - @move_frequency)
      case @move_type
      when 1
        move_type_random
      when 2
        move_type_toward_player
      when 3
        move_type_custom
      end
    end
  end
 
  def check_comment(comentario)
    com = comentario.downcase
    return 0 if @list.nil? or @list.size <= 0
    for item in @list
      if item.code == 108 or item.code == 408
        if item.parameters[0].downcase =~ /#{com}[ ]?(\d+)?/
          return $1.to_i
        end
      end
    end
    return 0
  end
 
  def check_com(comentario)
    return false if @list.nil? or @list.size <= 0
    for item in @list
      if item.code == 108 or item.code == 408
        if item.parameters[0].downcase.include?(comentario.downcase)
          return true
        end
      end
    end
    return false
  end
 
end

#------------------------------------------------------------------------------
# Game Player
#------------------------------------------------------------------------------
class Game_Player < Game_Character
 
  attr_accessor (:hits, :hit_time, :assigned_item, :bomb_already, :reward)
 
  alias requiem_abs_gplayer_initialize initialize
  alias requiem_abs_gplayer_update update
  alias requiem_abs_gplayer_perform_transfer perform_transfer
  alias requiem_abs_gplayer_move_by_input move_by_input
 
  def initialize
    requiem_abs_gplayer_initialize
    @hits = 0
    @hit_time = 0
    @assigned_item = 0
    @bomb_already = false
    @reward = nil
    self.original_move_speed = 4
  end
 
  def update
    self.actor = $game_party.members[0]
    requiem_abs_gplayer_update
    return if $game_map.interpreter.running?
    return if self.actor.nil?
    attack_with_weapon
    attack_with_skill
    attack_with_item
    auto_recovery
    if self.right_attack_on and @attack_weapon != nil
      @hits = 0 if @hit_time <= 0 or @hits >= @attack_weapon.combo_hits
    elsif self.left_attack_on and @attack_weapon_and_Shield != nil
      @hits = 0 if @hit_time <= 0 or @hits >= @attack_weapon_and_Shield.combo_hits
    elsif self.right_attack_on and @attack_weapon.nil?
      @hits = 0 if @hit_time <= 0 or @hits >= 5
    elsif self.left_attack_on and @attack_weapon_and_Shield.nil?
      @hits = 0 if @hit_time <= 0 or @hits >= 5
    end
    @hit_time -= 1 if @hit_time > 0
  end
 
  def hit_count
    return unless Requiem_ABS::Combo_Damage
    @hits += 1
    @hit = "#{@hits}"
  end
 
  def attack_with_weapon
    if Input.trigger?(Requiem_ABS::Right_Attack_Button) and self.weapon1_attack_time <= 0 and !self.deffending
      @attack_weapon = self.actor.equips[0]
      RPG::SE.new(@attack_weapon.shot_se).play if @attack_weapon != nil and @attack_weapon.shot_se != nil
      self.anime_attack = 20
      self.right_attack_on = true
      self.left_attack_on = false
      if @attack_weapon != nil and @attack_weapon.ranged?
        range_attack_right
        self.weapon1_attack_time = @attack_weapon.delay
      else
        normal_attack_right
        self.weapon1_attack_time = Requiem_ABS::Hero_Attack_Time
        @hit_time = self.weapon1_attack_time + 15
      end
    end
    if Input.press?(Requiem_ABS::Left_Attack_and_Shield_Button)
      self.deffending = (self.actor.equips[1].is_a?(RPG::Armor) and Requiem_ABS::Allow_Shields_Graphics)
    else
      self.deffending = false
    end
    if Input.trigger?(Requiem_ABS::Left_Attack_and_Shield_Button) and self.weapon2_attack_time <= 0 and !self.deffending
      @attack_weapon_and_Shield = (self.actor.two_swords_style ? self.actor.equips[1] : self.actor.equips[0])
      RPG::SE.new(@attack_weapon_and_Shield.shot_se).play if @attack_weapon_and_Shield != nil and @attack_weapon_and_Shield.shot_se != nil
      self.anime_attack = 20
      self.right_attack_on = false
      self.left_attack_on = true
      if @attack_weapon_and_Shield != nil and @attack_weapon_and_Shield.ranged?
        range_attack_left
        self.weapon2_attack_time = @attack_weapon_and_Shield.delay
      elsif self.actor.two_swords_style
        normal_attack_left
        self.weapon2_attack_time = Requiem_ABS::Hero_Attack_Time
        @hit_time = self.weapon1_attack_time + 15
      end
    end
  end
 
  def attack_with_skill
    for button in self.actor.skill_hotkeys.keys
      if Input.trigger?(button) and self.actor.skill_hotkeys[button] != nil and self.actor.skill_hotkeys[button] != 0
        self.assigned_skill = $data_skills[self.actor.skill_hotkeys[button]]
        if self.assigned_skill.scope == 2
          skill_attack_all
        elsif self.assigned_skill.ranged?
          skill_attack_range
        elsif self.assigned_skill.explosive?
          skill_exlpode_range
        elsif self.assigned_skill.scope >= 7
          skill_recover
        else
          skill_attack_normal
        end
      end
    end
  end
 
  def attack_with_item
    for button in self.actor.item_hotkeys.keys
      if Input.trigger?(button) and self.actor.item_hotkeys[button] != nil and self.actor.item_hotkeys[button] != 0
        @assigned_item = $data_items[self.actor.item_hotkeys[button]]
        if @assigned_item.ranged?
          item_attack_range
        elsif @assigned_item.explosive?
          item_attack_explode
        elsif  @assigned_item.bomb?
          item_attack_bomb
        else
          case @assigned_item.scope
          when 1
            item_normal_attack
          when 2
            item_attack_all
          when 3...6
            item_normal_attack
          when 7..11
            item_recover
          end
        end
      end
    end
  end
 


Dernière édition par dark-overlord le 01 Jan 2010, 19:02, édité 1 fois au total.

Haut
 Profil  
 
 Sujet du message: Re: Script A-RPG très complet (Requiem ABS 4)
MessagePublié: 01 Jan 2010, 18:59 
Villageois (Nv 4)

Inscrit le: 06 Déc 2009, 15:47
Messages: 66
Logiciel(s) préféré(s): Rpg maker vx/xp
Sexe: Masculin
Points d'aide: 0/60

Créations :

- Script pour plus d'équipement améliorer de DerVVulfman


Voir ses créations

2éme partie de 3éme script:
Code: Tout sélectionner
  def normal_attack_right
    for event in $game_map.events.values
      if event.in_battle
        if in_front?(self,event)
          return if event.actor.dead? or event.object
          event.animation_id = self.actor.atk_animation_id
          hit_count
          if event.deffending and guard?(self,event) or           
            event.kill_with_weapon > 0 and @attack_weapon != event.kill_with_weapon or
            event.kill_with_skill > 0 or event.kill_with_item > 0
            event.damage = Requiem_ABS::Damage_Properties[18]
          else
            event.actor.attack_effect(self.actor)
            if event.actor.hp_damage > 0
              event.damage = event.actor.hp_damage
              event.critical = true if event.actor.critical
              event.combo = true if event.actor.combo
            else
              event.damage = Requiem_ABS::Damage_Properties[6]
            end
            event.jump(0,0) unless event.puzzle
          end
          event.target = self
        end
      end
    end
  end
 
  def range_attack_right
    if $game_party.has_item?(@attack_weapon.ammo1)
      $game_party.consume_item(@attack_weapon.ammo1)
      $game_range.push(Game_Range.new(self, @attack_weapon.graphic, @attack_weapon.index, @attack_weapon.move_speed, @attack_weapon.range, 1))
    end
  end
 
  def normal_attack_left
    for event in $game_map.events.values
      if event.in_battle
        if in_front?(self,event)
          return if event.actor.dead? or event.object
          event.animation_id = self.actor.atk_animation_id2
          hit_count
          if event.deffending and guard?(self,event) or
            event.kill_with_weapon > 0 and @attack_weapon_and_Shield != event.kill_with_weapon or
            event.kill_with_skill > 0 or event.kill_with_item > 0
            event.damage = Requiem_ABS::Damage_Properties[18]
          else
            event.actor.attack_effect(self.actor)
            if event.actor.hp_damage > 0
              event.damage = event.actor.hp_damage
              event.critical = true if event.actor.critical
              event.combo = true if event.actor.combo
            else
              event.damage = Requiem_ABS::Damage_Properties[6]
            end
            event.jump(0,0) unless event.puzzle
          end
          event.target = self
        end
      end
    end
  end
 
  def range_attack_left
    if $game_party.has_item?(@attack_weapon_and_Shield.ammo2)
      $game_party.consume_item(@attack_weapon_and_Shield.ammo2)
      $game_range.push(Game_Range.new(self, @attack_weapon_and_Shield.graphic, @attack_weapon_and_Shield.index, @attack_weapon_and_Shield.move_speed, @attack_weapon_and_Shield.range, 2))
    end
  end
 
  def skill_attack_normal
    for event in $game_map.events.values
      if event.in_battle
        if in_front?(self,event) and self.skill_attack_time <= 0
          return if event.actor.dead? or event.object
          if self.actor.mp >= self.assigned_skill.mp_cost and self.skill_attack_time <= 0
            self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
            $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
            event.animation_id = self.assigned_skill.animation_id
            if event.deffending and guard?(self,event) and !self.assigned_skill.ignore_defense or
              event.kill_with_weapon > 0 or event.kill_with_item > 0 or
              event.kill_with_skill > 0 and event.kill_with_skill != self.assigned_skill.id
              event.damage = Requiem_ABS::Damage_Properties[18]
            else
              event.actor.skill_effect(self.actor, self.assigned_skill)
              if event.actor.hp_damage > 0
                event.damage = event.actor.hp_damage
              else
                event.damage = Requiem_ABS::Damage_Properties[6]
              end
              event.jump(0,0) unless event.puzzle
            end
            event.target = self
            self.skill_attack_time = Requiem_ABS::Hero_Attack_Time
          end
        end
      end
    end
  end
 
  def skill_attack_range
    if self.actor.mp >= self.assigned_skill.mp_cost and self.skill_attack_time <= 0
      self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
      $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
      $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 3))
      self.skill_attack_time = self.assigned_skill.delay
      RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
    end
  end
 
  def skill_attack_all
    if self.actor.mp >= self.assigned_skill.mp_cost and self.skill_attack_time <= 0
      self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
      $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
      for event in $game_map.events.values
        if event.in_battle
          return if event.actor.dead? or event.object
          event.animation_id = self.assigned_skill.animation_id
          if event.kill_with_weapon > 0 or event.kill_with_item > 0 or
            event.kill_with_skill > 0 and event.kill_with_skill != self.assigned_skill.id
            event.damage = Requiem_ABS::Damage_Properties[18]
          else
            event.actor.skill_effect(self.actor, self.assigned_skill)
            if event.actor.hp_damage > 0
              event.damage = event.actor.hp_damage
            else
              event.damage = Requiem_ABS::Damage_Properties[6]
            end
            event.jump(0,0) unless event.puzzle
          end
          event.target = self
          self.skill_attack_time = Requiem_ABS::Hero_Attack_Time
        end
      end
    end
  end
 
  def skill_exlpode_range
    if self.actor.mp >= self.assigned_skill.mp_cost and self.skill_attack_time <= 0
      self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
      $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
      $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 4))
      self.skill_attack_time = self.assigned_skill.delay
      RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
    end
  end
 
  def skill_recover
    if self.actor.mp >= self.assigned_skill.mp_cost and self.skill_attack_time <= 0
      self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
      $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
      self.actor.skill_effect(self.actor, self.assigned_skill)
      if self.actor.hp_damage < 0
        self.damage = self.actor.hp_damage
      elsif self.actor.mp_damage < 0
        self.damage = self.actor.mp_damage
      end
      @animation_id = self.assigned_skill.animation_id
      self.skill_attack_time = Requiem_ABS::Hero_Attack_Time
    end
  end
 
  def item_normal_attack
    for event in $game_map.events.values
      if event.in_battle
        if in_front?(self,event) and self.item_attack_time <= 0
          return if event.actor.dead? or event.object
          if $game_party.has_item?(@assigned_item) and self.item_attack_time <= 0
            $game_party.consume_item(@assigned_item)
            $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
            event.animation_id = @assigned_item.animation_id
            if event.deffending and guard?(self,event) and !@assigned_item.ignore_defense or
              event.kill_with_weapon > 0 or event.kill_with_skill > 0 or
              event.kill_with_item > 0 and event.kill_with_item != self.assigned_item.id
              event.damage = Requiem_ABS::Damage_Properties[18]
            else
              event.actor.item_effect(self.actor, @assigned_item)
              if event.actor.hp_damage > 0
                event.damage = event.actor.hp_damage
              else
                event.damage = Requiem_ABS::Damage_Properties[6]
              end
              event.jump(0,0) unless event.puzzle
            end
            event.target = self
            self.item_attack_time = Requiem_ABS::Hero_Attack_Time
          end
        end
      end
    end
  end
 
  def item_attack_range
    if $game_party.has_item?(@assigned_item) and self.item_attack_time <= 0
      $game_party.consume_item(@assigned_item)
      $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
      $game_range.push(Game_Range.new(self, @assigned_item.graphic, @assigned_item.index, @assigned_item.move_speed, @assigned_item.range, 5))
      self.item_attack_time = @assigned_item.delay
      RPG::SE.new(@assigned_item.shot_se).play if @assigned_item.shot_se != nil
    end
  end
 
  def item_attack_explode
    if $game_party.has_item?(@assigned_item) and self.item_attack_time <= 0
      $game_party.consume_item(@assigned_item)
      $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
      $game_range.push(Game_Range.new(self, @assigned_item..graphic, @assigned_item.index, @assigned_item.move_speed, @assigned_item.range, 6))
      self.item_attack_time = @assigned_item.delay
      RPG::SE.new(@assigned_item.shot_se).play if @assigned_item..shot_se != nil
    end
  end
 
  def item_recover
    if $game_party.has_item?(@assigned_item) and self.item_attack_time <= 0
      $game_party.consume_item(@assigned_item)
      $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
      self.actor.item_effect(self.actor, @assigned_item)
      if self.actor.mp_damage < 0
        self.damage = self.actor.mp_damage
      elsif self.actor.hp_damage < 0
        self.damage = self.actor.hp_damage
      end
      @animation_id = @assigned_item.animation_id
      self.item_attack_time = Requiem_ABS::Hero_Attack_Time
    end
  end
 
  def item_attack_all
   if $game_party.has_item?(@assigned_item) and self.item_attack_time <= 0
      $game_party.consume_item(@assigned_item)
      $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
      for event in $game_map.events.values
        if event.in_battle
          return if event.actor.dead? or event.object
          event.animation_id = @assigned_item.animation_id
          if event.kill_with_weapon > 0 or event.kill_with_skill > 0 or
            event.kill_with_item > 0 and event.kill_with_item != self.assigned_item.id
            event.damage = Requiem_ABS::Damage_Properties[18]
          else
            event.actor.item_effect(self.actor, @assigned_item)
            if event.actor.hp_damage > 0
              event.damage = event.actor.hp_damage
            else
              event.damage = Requiem_ABS::Damage_Properties[6]
            end
            event.jump(0,0) unless event.puzzle
          end
          event.target = self
          self.item_attack_time = Requiem_ABS::Hero_Attack_Time
        end
      end
    end
  end
 
  def item_attack_bomb
    if $game_party.has_item?(@assigned_item) and !@bomb_already
      $game_party.consume_item(@assigned_item)
      $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
      $game_bomb.push(Game_Bomb.new(self, @assigned_item, @assigned_item.icon_index, @assigned_item.area, @assigned_item.delay))
    end
  end
 
  def auto_recovery
    if self.actor.auto_hp_recover and self.recovery_time <= 0
      self.actor.hp += (self.actor.maxhp*10/100)
      self.recovery_time = 1800
    end
  end
 
  def perform_transfer
    requiem_abs_gplayer_perform_transfer
    for range in $game_range
      next if range.nil?
      range.destroy = true
    end
    for drop in $game_drop
      next if drop.nil?
      drop.destroy = true
    end
    $game_map.need_refresh = true
  end
 
  def map_passable?(x, y)
    case @vehicle_type
    when 0
      return $game_map.boat_passable?(x, y)
    when 1
      return $game_map.ship_passable?(x, y)
    when 2
      return true
    else
      return $game_map.hero_passable?(x, y)
    end
  end
 
  def move_by_input
    return if self.freeze or (self.anime_attack/3) > 0
    requiem_abs_gplayer_move_by_input
  end
 
end

#------------------------------------------------------------------------------
# Game Range
#------------------------------------------------------------------------------
class Game_Range < Game_Character
 
  attr_accessor (:draw, :destroy, :character_name)
 
  def initialize(parent, chara_name="", chara_index=0, speed=4, range=0, type=0)
    super()
    @parent = parent
    @character_name = chara_name
    @character_index = chara_index
    @move_speed = speed
    @range = range
    @type = type
    @step = 0
    @destroy = false
    @draw = false
    moveto(@parent.x, @parent.y)
    @direction = @parent.direction
  end
 
  def update
    super
    return @destroy = true if @step > @range
    move_route
  end
 
  def move_route
    return unless movable?
    move_forward
    @step += 1
  end
 
  def check_event_trigger_touch(x,y)
    return if @destroy
    for event in $game_map.events.values
      if event.in_battle
        hurt_hero if $game_player.pos?(x,y) and @parent.is_a?(Game_Event)
        hurt_enemy_weapon_right(event) if event.pos?(x,y) and @type == 1 and @parent.is_a?(Game_Player)
        hurt_enemy_weapon_left(event) if event.pos?(x,y) and @type == 2 and @parent.is_a?(Game_Player)
        hurt_enemy_skill(event) if event.pos?(x,y) and @type == 3 and @parent.is_a?(Game_Player)
        hurt_enemy_skill_explode if event.pos?(x,y) and @type == 4 and @parent.is_a?(Game_Player)
        hurt_enemy_item(event) if event.pos?(x,y) and @type == 5 and @parent.is_a?(Game_Player)
        hurt_enemy_item_explode if event.pos?(x,y) and @type == 6 and @parent.is_a?(Game_Player)
      end
    end
  end
 
  def hurt_hero
    @destroy = true
    $game_player.animation_id = @parent.assigned_skill.animation_id
    probability = rand(100)
    if $game_player.deffending and guard?($game_player,@parent) and !@parent.assigned_skill.ignore_defense and probability <= $game_player.actor.equips[1].defense_rate
      $game_player.damage = Requiem_ABS::Damage_Properties[18]
    else
      $game_party.members[0].skill_effect(@parent.actor, @parent.assigned_skill)
      if $game_party.members[0].hp_damage > 0
        $game_player.damage = $game_party.members[0].hp_damage
      else
        $game_player.damage = Requiem_ABS::Damage_Properties[6]
      end
      $game_player.jump(0,0)
    end
  end
 
  def hurt_enemy_weapon_right(enemy)
    @destroy = true
    return if enemy.actor.dead? or enemy.object
    enemy.target = @parent
    enemy.animation_id = @parent.actor.equips[0].ammo1.animation_id if @parent.actor.equips[0].ammo1 != nil
    if enemy.deffending and guard?(self, enemy) or
      enemy.kill_with_weapon > 0 and @parent.actor.weapon_id != enemy.kill_with_weapon or
      enemy.kill_with_skill > 0 or enemy.kill_with_item > 0
      enemy.damage = Requiem_ABS::Damage_Properties[18]
    else
      enemy.actor.attack_effect(@parent.actor)
      if enemy.actor.hp_damage > 0
        enemy.damage = enemy.actor.hp_damage
      else
        enemy.damage = Requiem_ABS::Damage_Properties[6]
      end
      enemy.jump(0,0) unless enemy.puzzle
    end
  end
 
  def hurt_enemy_weapon_left(enemy)
    @destroy = true
    return if enemy.actor.dead? or enemy.object
    enemy.target = @parent
    if @parent.actor.two_swords_style
      @weapon = @parent.actor.equips[1]
    else
      @weapon = @parent.actor.equips[0]
    end
    enemy.animation_id = @weapon.ammo2.animation_id if @weapon.ammo2 != nil
    if enemy.deffending and guard?(self, enemy) or
      enemy.kill_with_weapon > 0 and @weapon.id != enemy.kill_with_weapon or
      enemy.kill_with_skill > 0 or enemy.kill_with_item > 0
      enemy.damage = Requiem_ABS::Damage_Properties[18]
    else
      enemy.actor.attack_effect(@parent.actor)
      if enemy.actor.hp_damage > 0
        enemy.damage = enemy.actor.hp_damage
      else
        enemy.damage = Requiem_ABS::Damage_Properties[6]
      end
      enemy.jump(0,0) unless enemy.puzzle
    end
  end
 
  def hurt_enemy_skill(enemy)
    @destroy = true
    return if enemy.actor.dead? or enemy.object
    enemy.target = @parent
    enemy.animation_id = @parent.assigned_skill.animation_id
    if enemy.deffending and guard?(self, enemy) or
      enemy.kill_with_weapon > 0 or enemy.kill_with_item > 0 or enemy.kill_with_skill > 0 and @parent.assigned_skill.id != enemy.kill_with_skill
      enemy.damage = Requiem_ABS::Damage_Properties[18]
    else
      enemy.actor.skill_effect(@parent.actor, @parent.assigned_skill)
      if enemy.actor.hp_damage > 0
        enemy.damage = enemy.actor.hp_damage
      else
        enemy.damage = Requiem_ABS::Damage_Properties[6]
      end
      enemy.jump(0,0) unless enemy.puzzle
    end
  end
 
  def hurt_enemy_item(enemy)
    @destroy = true
    return if enemy.actor.dead? or enemy.object
    enemy.animation_id = @parent.assigned_item.animation_id
    if enemy.deffending and guard?(self, enemy) or
      enemy.kill_with_weapon > 0 or enemy.kill_with_skill > 0 or
      enemy.kill_with_item > 0 and @parent.assigned_item != enemy.kill_with_item
      enemy.damage = Requiem_ABS::Damage_Properties[18]
    else
      enemy.actor.item_effect(@parent.actor, @parent.assigned_item)
      if enemy.actor.hp_damage > 0
        enemy.damage = enemy.actor.hp_damage
      else
        enemy.damage = Requiem_ABS::Damage_Properties[6]
      end
      enemy.jump(0,0) unless enemy.puzzle
    end
  end
 
  def hurt_enemy_skill_explode
    @destroy = true
    for event in $game_map.events.values
      if event.in_battle
        event.target = @parent
        if in_range?(self, event, @parent.assigned_skill.area)
          return if event.actor.dead? or event.object
          event.animation_id = @parent.assigned_skill.animation_id
          if event.deffending and guard?(self,event) or
            event.kill_with_weapon > 0 or event.kill_with_item > 0 or
            event.kill_with_skill > 0 and @parent.assigned_skill != event.kill_with_skill
            event.damage = Requiem_ABS::Damage_Properties[18]
          else
            event.actor.skill_effect(@parent.actor, @parent.assigned_skill)
            if event.actor.hp_damage > 0
              event.damage = event.actor.hp_damage
            else
              event.damage = Requiem_ABS::Damage_Properties[6]
            end
            event.jump(0,0) unless event.puzzle
          end
        end
      end
    end
  end
 
  def hurt_enemy_item_explode
    @destroy = true
    for event in $game_map.events.values
      if event.in_battle and in_range?(self, event, @parent.assigned_item.area)
        return if event.actor.dead? or event.object
        event.animation_id = @parent.assigned_item.animation_id
        if event.deffending and guard?(self, event) or
          event.kill_with_weapon > 0 or event.kill_with_item > 0 or
          event.kill_with_skill > 0 and @parent.assigned_item != event.kill_with_skill
          event.damage = Requiem_ABS::Damage_Properties[18]
        else
          event.actor.item_effect(@parent.actor, @parent.assigned_item)
          if event.actor.hp_damage > 0
            event.damage = event.actor.hp_damage
          else
            event.damage = Requiem_ABS::Damage_Properties[6]
          end
        end
        event.jump(0,0) unless event.puzzle
      end
    end
  end
 
  def map_passable?(x, y)
    return $game_map.range_passable?(x, y)
  end
 
end

#------------------------------------------------------------------------------
# Game Bomb
#------------------------------------------------------------------------------
class Game_Bomb < Game_Character
 
  attr_accessor (:draw, :destroy, :graphic_name)
 
  def initialize(parent, item, graph_index=0, area=0, time=0)
    super()
    @destroy = false
    @draw = false
    @parent = parent
    @item = item
    @graphic_name = "IconSet"
    @graphic_index = graph_index
    @area = area
    @time = time
    self.priority_type = 2
    case @parent.direction
    when 2
      moveto(@parent.x, @parent.y+1)
    when 4
      moveto(@parent.x-1, @parent.y)
    when 6
      moveto(@parent.x+1, @parent.y)
    when 8
      moveto(@parent.x, @parent.y-1)
    end
    RPG::SE.new(Requiem_ABS::Drop_Item_SE).play if Requiem_ABS::Drop_Item_SE != ""
    move_random if !moving? and !$game_map.passable?(@x, @y) or !moving? and $game_map.events_xy(@x, @y)
    $game_player.bomb_already = true
    jump(0,0)
  end
 
  def update
    super
    return if @destroy
    if @item.shot_se != nil and Graphics.frame_count % 60 <= 0
      RPG::SE.new(@item.shot_se).play
    end
    @time -= 1 if @time > 0
    explode if @time <= 0
  end
 
  def explode
    self.animation_id = @item.animation_id
    if in_range?(self, $game_player, @area)
      $game_player.actor.item_effect(@parent.actor, @item)
      if $game_player.actor.hp_damage > 0
        $game_player.damage = $game_player.actor.hp_damage
      else
        $game_player.damage = Requiem_SBABS::Damage_Properties[6]
      end
      $game_player.jump(0, 0)
    end
    for event in $game_map.events.values
      if event.in_battle and in_range?(self, event, @area)
        event.actor.item_effect(@parent.actor, @item)
        if event.actor.hp_damage > 0
          event.damage = event.actor.hp_damage
        else
          event.damage = Requiem_SBABS::Damage_Properties[6]
        end
        event.jump(0, 0) unless event.puzzle
      end
    end
    $game_player.bomb_already = false
    @destroy = true
  end
 
  def check_event_trigger_touch(x, y)
  end
 
end

#------------------------------------------------------------------------------
# Game Drop
#------------------------------------------------------------------------------
class Game_Drop < Game_Character
 
  attr_accessor (:draw, :destroy, :graphic_name)
 
  def initialize(parent, graph_index=0, items=[], gold=0)
    super()
    @graphic_name = "IconSet"
    @graphic_index = graph_index
    @items = items
    @gold = gold
    @drop_time = Requiem_ABS::Drop_Duration_Time
    moveto(parent.x,parent.y)
    move_random unless moving?
    RPG::SE.new(Requiem_ABS::Drop_Item_SE).play if Requiem_ABS::Drop_Item_SE != "" and @items != nil
    RPG::SE.new(Requiem_ABS::Drop_Money_SE).play if Requiem_ABS::Drop_Money_SE != "" and @gold > 0
    @destroy = false
    @draw = false
    jump(0,0)
  end
 
  def update
    super
    return if @destroy
    if Input.trigger?(Input::C)
      if in_range?($game_player,self,1) and in_direction?($game_player,self)
        get_reward
      end
    end
    @drop_time -= 1 if @drop_time > 0
    @destroy = true if @drop_time <= 0
  end
 
  def get_reward
    RPG::SE.new(Requiem_ABS::Get_Reward_SE).play if Requiem_ABS::Get_Reward_SE != ""
    if @gold > 0
      $game_party.gain_gold(@gold)
      $game_player.reward = "$ #{@gold}" if Requiem_ABS::Show_Reward
    end
    for item in @items
      case item
      when RPG::Item
        $game_party.gain_item($data_items[item.id],1)
        $game_player.reward = $data_items[item.id].name if Requiem_ABS::Show_Reward
      when RPG::Weapon
        $game_party.gain_item($data_weapons[item.id],1)
        $game_player.reward = $data_weapons[item.id].name if Requiem_ABS::Show_Reward
      when RPG::Armor
        $game_party.gain_item($data_armors[item.id],1)
        $game_player.reward = $data_armors[item.id].name if Requiem_ABS::Show_Reward
      end
    end
    @destroy = true
  end
 
  def check_event_trigger_touch(x, y)
  end
 
end

#------------------------------------------------------------------------------
# Sprite Base
#------------------------------------------------------------------------------
class Sprite_Base
 
  alias animation animation_set_sprites
 
  def animation_set_sprites(frame)
    cell_data = frame.cell_data
    for i in 0..15
      sprite = @animation_sprites[i]
      next if sprite.nil?
      pattern = cell_data[i, 0]
      if pattern.nil? or pattern == -1
        sprite.visible = false
        next
      end
      if pattern < 100
        sprite.bitmap = @animation_bitmap1
      else
        sprite.bitmap = @animation_bitmap2
      end
      sprite.visible = true
      sprite.src_rect.set(pattern % 5 * 192,
        pattern % 100 / 5 * 192, 192, 192)
      if @animation_mirror
        sprite.x = @animation_ox - cell_data[i, 1] / Requiem_ABS::Animations_Divide_By
        sprite.y = @animation_oy - cell_data[i, 2] / Requiem_ABS::Animations_Divide_By
        sprite.angle = (360 - cell_data[i, 4])
        sprite.mirror = (cell_data[i, 5] == 0)
      else
        sprite.x = @animation_ox + cell_data[i, 1] / Requiem_ABS::Animations_Divide_By
        sprite.y = @animation_oy + cell_data[i, 2] / Requiem_ABS::Animations_Divide_By
        sprite.angle = cell_data[i, 4]
        sprite.mirror = (cell_data[i, 5] == 1)
      end
      sprite.z = self.z + 300
      sprite.ox = 96
      sprite.oy = 96
      sprite.zoom_x = cell_data[i, 3] / (100.0 * Requiem_ABS::Animations_Divide_By)
      sprite.zoom_y = cell_data[i, 3] / (100.0 * Requiem_ABS::Animations_Divide_By)
      sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
      sprite.blend_type = cell_data[i, 7]
    end
  end
 
end

#------------------------------------------------------------------------------
# Sprite Character
#------------------------------------------------------------------------------
class Sprite_Character < Sprite_Base
 
  alias requiem_abs_spchar_initialize initialize
  alias requiem_abs_spchar_update update
  alias requiem_abs_spchar_dispose dispose
 
  def initialize(viewport, character=nil)
    @character = character
    @_damage_duration = 0
    @_hit_duration = 0
    @_reward_duration = 0
    requiem_abs_spchar_initialize(viewport,@character)
  end
 
  def update
    requiem_abs_spchar_update
    update_show_dmg
    update_show_hit
    update_show_reward
    update_show_state_ani
  end
 
  def dispose
    requiem_abs_spchar_dispose
    dispose_damage
    dispose_hit
    dispose_reward
  end
 
  def update_show_dmg
    if @_damage_duration > 0
      @_damage_duration -=1
      @_damage_sprite.y -= 1
      @_damage_sprite.opacity -= 5 if @_damage_duration <= 30
      @_damage_sprite.x = self.x
      if @_damage_duration <= 0
        dispose_damage
      end
    end
    if @character != nil and @character.damage != nil
      return if @character.is_a?(Game_Event) and @character.puzzle
      damage(@character.damage, @character.critical, @character.combo)
      @character.damage = nil
      @character.critical = false
      @character.combo = false
    end
  end
 
  def update_show_hit
    if @_hit_duration > 0
      @_hit_duration -=1
      @_hit_sprite.opacity -= 5 if @_hit_duration <= 40
    elsif @_hit_duration <= 0
      dispose_hit
    end
    if @character != nil and @character.hit != nil
      hit(@character.hit)
      @character.hit = nil
    end
  end
 
  def update_show_reward
    if @_reward_duration > 0
      @_reward_duration -= 1
      @_reward_sprite.opacity -= 5 if @_reward_duration <= 1000
      if @_reward_duration <= 0
        dispose_reward
      end
    end
    if @character.is_a?(Game_Player) and @character.reward != nil
      show_reward(@character.reward)
      @character.reward = nil
    end
  end
 
  def update_show_state_ani
    return if @character.actor.nil?
    for state in @character.actor.states
      next if state.nil? or state.animation_id <= 0
      if @character.ani_time <= 0
        @character.animation_id = state.animation_id
        @character.ani_time = $data_animations[@character.animation_id].frame_max * 4 + 1
      end
    end
  end
 
  def damage(value, critical, combo)
    dispose_damage
    if value.is_a?(Numeric)
      damage_string = value.abs.to_s
    else
      damage_string = value.to_s
    end
    bitmap = Bitmap.new(160,100)
    bitmap.font.name = Requiem_ABS::Damage_Properties[1]
    bitmap.font.size = Requiem_ABS::Damage_Properties[2]
    bitmap.font.bold = Requiem_ABS::Damage_Properties[3]
    bitmap.font.italic = Requiem_ABS::Damage_Properties[4]
    bitmap.font.color.set(0,0,0)
    bitmap.draw_text(1,(Requiem_ABS::Damage_Properties[2]*2)+5,160,Requiem_ABS::Damage_Properties[2]+2,damage_string,1)
    if value.is_a?(Numeric) and value <= 0
      bitmap.font.color = Requiem_ABS::Damage_Properties[14]
    else
      bitmap.font.color = Requiem_ABS::Damage_Properties[13]
    end
    bitmap.draw_text(0,(Requiem_ABS::Damage_Properties[2]*2)+4,160,Requiem_ABS::Damage_Properties[2]+2,damage_string,1)
    if critical
      bitmap.font.color.set(0,0,0)
      bitmap.draw_text(1,Requiem_ABS::Damage_Properties[2]+5,160,Requiem_ABS::Damage_Properties[2]+2,Requiem_ABS::Damage_Properties[5],1)
      bitmap.font.color = Requiem_ABS::Damage_Properties[15]
      bitmap.draw_text(0,Requiem_ABS::Damage_Properties[2]+4,160,Requiem_ABS::Damage_Properties[2]+2,Requiem_ABS::Damage_Properties[5],1)
    end
    if combo
      bitmap.font.color.set(0,0,0)
      bitmap.draw_text(1,1,160,Requiem_ABS::Damage_Properties[2]+2,Requiem_ABS::Damage_Properties[12],1)
      bitmap.font.color = Requiem_ABS::Damage_Properties[16]
      bitmap.draw_text(0,0,160,Requiem_ABS::Damage_Properties[2]+2,Requiem_ABS::Damage_Properties[12],1)
    end
    @_damage_sprite = ::Sprite.new(self.viewport)
    @_damage_sprite.bitmap = bitmap
    @_damage_sprite.ox = 80
    @_damage_sprite.oy = 20
    @_damage_sprite.x = self.x
    @_damage_sprite.y = self.y-self.oy/2-60
    @_damage_sprite.z += 99999
    @_damage_duration = 60
  end
 
  def hit(value)
    dispose_hit
    if value.is_a?(Numeric)
      hit_string = value.abs.to_s
    else
      hit_string = value.to_s
    end
    bitmap = Bitmap.new(160, Requiem_ABS::Damage_Properties[9])
    bitmap.font.name = Requiem_ABS::Damage_Properties[8]
    bitmap.font.size = Requiem_ABS::Damage_Properties[9]
    bitmap.font.bold = Requiem_ABS::Damage_Properties[10]
    bitmap.font.italic = Requiem_ABS::Damage_Properties[11]
    bitmap.font.color.set(255,255,255)
    @_hit_sprite = ::Sprite.new(self.viewport)
    @_hit_sprite.bitmap = bitmap
    @_hit_sprite.x = 374
    @_hit_sprite.y = 208 - Requiem_ABS::Damage_Properties[9]
    @_hit_sprite.z += 99999
    @_hit_duration = 80
    bitmap.font.color.set(0,0,0)
    bitmap.draw_text(1,1,160,36,"#{hit_string}"+" "+"#{Requiem_ABS::Damage_Properties[7]}",2)
    bitmap.font.color = Requiem_ABS::Damage_Properties[17]
    bitmap.draw_text(0,0,160,36,"#{hit_string}"+" "+"#{Requiem_ABS::Damage_Properties[7]}",2)
  end
 
  def show_reward(reward)
    dispose_reward
    bitmap = Bitmap.new(200, 24)
    bitmap.font.size = 16
    bitmap.font.color = Color.new(0,0,0)
    bitmap.draw_text(1, 1, bitmap.width, 24, reward)
    bitmap.font.color = Color.new(255,255,255)
    bitmap.draw_text(0, 0, bitmap.width, 24, reward)
    @_reward_sprite = ::Sprite.new(self.viewport)
    @_reward_sprite.bitmap = bitmap
    @_reward_sprite.x = 10
    @_reward_sprite.y = 196
    @_reward_sprite.z = 99999
    @_reward_duration = 1100
  end
 
  def dispose_damage
    if @_damage_sprite != nil
      @_damage_sprite.dispose
      @_damage_sprite = nil
    end
  end
 
  def dispose_hit
    if @_hit_sprite != nil
      @_hit_sprite.dispose
      @_hit_sprite = nil
    end
  end
 
  def dispose_reward
    if @_reward_sprite != nil
      @_reward_sprite.dispose
      @_reward_sprite = nil
    end
  end
 
end

#------------------------------------------------------------------------------
# Sprite Drop
#------------------------------------------------------------------------------
class Sprite_Drop < Sprite_Base
 
  attr_accessor :character
 
  def initialize(viewport, character=nil)
    super(viewport)
    @character = character
    update
  end
 
  def update
    super
    update_bitmap
    self.visible = (not @character.transparent)
    update_src_rect
    self.x = @character.screen_x
    self.y = @character.screen_y
    self.z = @character.screen_z
    self.opacity = @character.opacity
    self.blend_type = @character.blend_type
    self.bush_depth = @character.bush_depth
    if @character.animation_id != 0
      animation = $data_animations[@character.animation_id]
      start_animation(animation)
      @character.animation_id = 0
    end
    if @character.balloon_id != 0
      @balloon_id = @character.balloon_id
      start_balloon
      @character.balloon_id = 0
    end
  end
 
  def update_bitmap
    if @tile_id != @character.tile_id or
      @graphic_name != @character.graphic_name or
      @graphic_index != @character.graphic_index
      @tile_id = @character.tile_id
      @graphic_name = @character.graphic_name
      @graphic_index = @character.graphic_index
      if @tile_id > 0
        self.bitmap = tileset_bitmap(@tile_id)
        self.src_rect.set(0, 0, 24, 24)
      else
        self.bitmap = Cache.system(@graphic_name)
        @cw = 24
        @ch = 24
      end
      self.ox = @cw / 2
      self.oy = @ch
    end
  end
 
  def update_src_rect
    if @tile_id == 0
      index = @character.graphic_index
      sx = index % 16 * 24
      sy = index / 16 * 24
      self.src_rect.set(sx, sy, @cw, @ch)
    end
  end
 
end

#------------------------------------------------------------------------------
# Sprite Weapon
#------------------------------------------------------------------------------
class Sprite_Weapon < Sprite_Base
 
  attr_accessor (:character, :graphic_name)
 
  def initialize(viewport, character=nil)
    super(viewport)
    @character = character
    update
  end
 
  def update
    super
    return unless Requiem_ABS::Allow_Weapons_Graphics
    if @character.anime_attack > 0
      self.visible = true
    else
      self.visible = false
    end
    update_bitmap
    update_src_rect
    change_direction
  end
 
  def update_bitmap
    if @tile_id != @character.tile_id or @graphic_name != "Iconset" or @graphic_index != weapon_index
      @tile_id = @character.tile_id
      @graphic_name = "Iconset"
      @graphic_index = weapon_index
      if @tile_id > 0
        self.bitmap = tileset_bitmap(@tile_id)
        self.src_rect.set(0, 0, 24, 24)
      else
        self.bitmap = Cache.system(@graphic_name)
        @cw = 24
        @ch = 24
      end
      self.ox = @cw / 2
      self.oy = @ch
      self.zoom_x = 0.80
      self.zoom_y = 0.80
    end
  end
 
  def update_src_rect
    if @tile_id == 0
      sx = weapon_index % 16 * 24
      sy = weapon_index / 16 * 24
      self.src_rect.set(sx, sy, @cw, @ch)
    end
  end
 
  def change_direction
    case @character.direction
    when 2
      self.x = @character.screen_x+10
      self.z = @character.screen_z+1
      self.mirror = false
      change_angle(45,90,135)
    when 4
      self.x = @character.screen_x-10
      self.z = @character.screen_z+1
      self.mirror = false
      change_angle(-45,0,45)
    when 6
      self.x = @character.screen_x+10
      self.z = @character.screen_z-1
      self.mirror = true
      change_angle(45,0,-45)
    when 8
      self.x = @character.screen_x+10
      self.z = @character.screen_z-1
      self.mirror = true
      change_angle(45,0,-45)
    end
    self.y = @character.screen_y-4
    self.opacity = @character.opacity
    self.blend_type = @character.blend_type
    self.bush_depth = @character.bush_depth
  end
 
  def change_angle(a,b,c)
    if @character.anime_attack >= 20
      self.angle = a
    elsif @character.anime_attack >= 15
      self.angle = b
    elsif @character.anime_attack >= 10
      self.angle = c
    end
  end
 
  def weapon_index
    return 0 if @character.actor.nil?
    if @character.actor.is_a?(Game_Actor) and @character.right_attack_on and @character.actor.weapon_id > 0
      return @character.actor.equips[0].icon_index
    elsif @character.actor.is_a?(Game_Actor) and @character.left_attack_on
      if @character.actor.two_swords_style and @character.actor.armor1_id > 0
        return @character.actor.equips[1].icon_index
      elsif @character.actor.two_hands_legal? and @character.actor.weapon_id > 0 and @character.actor.equips[0].ranged?
        return @character.actor.equips[0].icon_index
      else
        return 0
      end
    end
    return 0
  end
 
end

#------------------------------------------------------------------------------
# Sprite Shield
#------------------------------------------------------------------------------
class Sprite_Shield < Sprite_Base
 
  attr_accessor (:character, :graphic_name)
 
  def initialize(viewport, character = nil)
    super(viewport)
    @character = character
    update
  end
 
  def update
    super
    return unless Requiem_ABS::Allow_Shields_Graphics
    update_bitmap
    self.visible = (@character.deffending)
    update_src_rect
    case @character.direction
    when 2
      self.mirror = true
      self.x = @character.screen_x+6
      self.z = @character.screen_z+1
    when 4
      self.mirror = false
      self.x = @character.screen_x-6
      self.z = @character.screen_z+1
    when 6
      self.mirror = true
      self.x = @character.screen_x+6
      self.z = @character.screen_z-1
    when 8
      self.mirror = false
      self.x = @character.screen_x-6
      self.z = @character.screen_z-1
    end
    self.y = @character.screen_y
    self.opacity = @character.opacity
    self.blend_type = @character.blend_type
    self.bush_depth = @character.bush_depth
    if @character.moving?
      self.wave_amp = 1
      self.wave_length = 1
      self.wave_speed = 6
    else
      self.wave_amp = 0
    end
  end
 
  def update_bitmap
    if @tile_id != @character.tile_id or @graphic_name != "Iconset" or @graphic_index != shield_index
      @tile_id = @character.tile_id
      @graphic_name = "Iconset"
      @graphic_index = shield_index
      if @tile_id > 0
        self.bitmap = tileset_bitmap(@tile_id)
        self.src_rect.set(0, 0, 24, 24)
      else
        self.bitmap = Cache.system(@graphic_name)
        @cw = 24
        @ch = 24
      end
      self.ox = @cw / 2
      self.oy = @ch
      self.zoom_x = 0.80
      self.zoom_y = 0.80
    end
  end
 
  def update_src_rect
    if @tile_id == 0
      sx = shield_index % 16 * 24
      sy = shield_index / 16 * 24
      self.src_rect.set(sx, sy, @cw, @ch)
    end
  end
 
  def shield_index
    return 0 if @character.actor.nil?
    if @character.actor.is_a?(Game_Actor) and !@character.actor.two_swords_style and @character.actor.armor1_id > 0
      return $data_armors[@character.actor.armor1_id].icon_index
    else
      return 0
    end
  end
 
end

#------------------------------------------------------------------------------
# Spriteset Map
#------------------------------------------------------------------------------
class Spriteset_Map
 
  attr_accessor :viewport3
 
  alias requiem_abs_sp_map_create_characters create_characters
  alias requiem_abs_sp_map_dispose_characters dispose_characters
 
  def create_characters
    @range_sprites = []
    for range in $game_range
      next if range.nil?
      @range_sprites.push(Sprite_Character.new(@viewport1, range))
    end
    @drop_sprites = []
    for drop in $game_drop
      next if drop.nil?
      @drop_sprites.push(Sprite_Drop.new(@viewport1, drop))
    end
    for bomb in $game_bomb
      next if bomb.nil?
      @drop_sprites.push(Sprite_Drop.new(@viewport1, bomb))
    end
    @weapon_sprites = []
    @weapon_sprites.push(Sprite_Weapon.new(@viewport1, $game_player))
    @shield_sprites = []
    @shield_sprites.push(Sprite_Shield.new(@viewport1, $game_player))
    requiem_abs_sp_map_create_characters
  end
 
  def update_characters
    for sprite in @character_sprites
      if sprite.character.is_a?(Game_Event)
        if $game_map.in_range?(sprite.character) or sprite.character.trigger == 3 or sprite.character.trigger == 4       
          sprite.update
        end
      else
        sprite.update
      end
    end
    for range in @range_sprites
      next if range.nil?  or !$game_map.in_range?(range.character)
      range.update
    end
    for drop in @drop_sprites
      next if drop.nil?  or !$game_map.in_range?(drop.character)
      drop.update
    end
    for weapon in @weapon_sprites
      next if weapon.nil?  or !$game_map.in_range?(weapon.character)
      weapon.update
    end
    for shield in @shield_sprites
      next if shield.nil?  or !$game_map.in_range?(shield.character)
      shield.update
    end
    for range in $game_range
      next if range.nil?
      unless range.draw
        @range_sprites.push(Sprite_Character.new(@viewport1,range))
        range.draw = true
      end
      if range.destroy
        $game_range.delete(range)
        range.character_name = ""
      end
    end
    for drop in $game_drop
      next if drop.nil?
      unless drop.draw
        @drop_sprites.push(Sprite_Drop.new(@viewport1,drop))
        drop.draw = true
      end
      if drop.destroy
        $game_drop.delete(drop)
        drop.graphic_name = ""
      end
    end
    for bomb in $game_bomb
      next if bomb.nil?
      unless bomb.draw
        @drop_sprites.push(Sprite_Drop.new(@viewport1, bomb))
        bomb.draw = true
      end
      if bomb.destroy
        $game_bomb.delete(bomb)
        bomb.graphic_name = ""
      end
    end
  end
 
  def dispose_characters
    requiem_abs_sp_map_dispose_characters
    for range in @range_sprites
      next if range.nil?
      range.dispose
    end
    for drop in @drop_sprites
      next if drop.nil?
      drop.dispose
    end
    for weapon in @weapon_sprites
      next if weapon.nil?
      weapon.dispose
    end
    for shield in @shield_sprites
      next if shield.nil?
      shield.dispose
    end
  end
 
end

#------------------------------------------------------------------------------
# Window Base
#------------------------------------------------------------------------------
class Window_Base < Window
 
  def draw_actor_head(actor, x, y, enabled=true)
    char_name = actor.character_name
    char_index = actor.character_index
    bitmap = Cache.character(char_name)
    sign = char_name[/^[\!\$]./]
    if sign != nil and sign.include?('$')
      cw = bitmap.width / 3
      ch = bitmap.height / 4
    else
      cw = bitmap.width / 12
      ch = bitmap.height / 8
    end
    enbl = (enabled ? 255 : 128)
    src_rect = Rect.new((char_index%4*3+1)*cw, (char_index/4*4)*ch, cw, ch/3*2)
    self.contents.blt(x,y,bitmap,src_rect,enbl)
  end
 
end

#------------------------------------------------------------------------------
# Scene Title
#------------------------------------------------------------------------------
class Scene_Title < Scene_Base
 
  alias requiem_abs_scenetitle_create_game_objects create_game_objects
 
  def create_game_objects
    requiem_abs_scenetitle_create_game_objects
    $game_range = []
    $game_drop = []
    $game_bomb = []
  end
 
end

#------------------------------------------------------------------------------
# Scene Map
#------------------------------------------------------------------------------
class Scene_Map < Scene_Base
 
  alias requiem_abs_smap_update update
  alias requiem_abs_smap_terminate terminate
 
  def update
    requiem_abs_smap_update
    for range in $game_range
      next if range.nil? or !$game_map.in_range?(range)
      range.update
    end
    for drop in $game_drop
      next if drop.nil? or !$game_map.in_range?(drop)
      drop.update
    end
    for bomb in $game_bomb
      next if bomb.nil? or !$game_map.in_range?(bomb)
      bomb.update
    end
  end
 
  def update_encounter
  end
 
end

#------------------------------------------------------------------------------
# Scene Item
#------------------------------------------------------------------------------
class Window_Item < Window_Selectable
 
  def update_help
    if $scene.is_a?(Scene_Item) and $scene.message != nil
      @help_window.set_text($scene.message)
    else
      @help_window.set_text(item == nil ? "" : item.description)
    end
  end
 
end

#------------------------------------------------------------------------------
class Scene_Item < Scene_Base
 
  attr_accessor :message
  attr_accessor :delay
 
  alias requiem_abs_sitem_start start
  alias requiem_abs_sitem_update update
  alias requiem_abs_sitem_update_item_selection update_item_selection
 
  def start
    requiem_abs_sitem_start
    @actor = $game_party.members[0]
    @message = nil
    @delay = 0
  end
 
  def update
    requiem_abs_sitem_update
    if @delay <= 0
      @message = nil
    else
      @delay -= 1
    end
  end
 
  def update_item_selection
    requiem_abs_sitem_update_item_selection
    for button in @actor.item_hotkeys.keys
      if Input.trigger?(button) and @item_window.item.is_a?(RPG::Item)
        Sound.play_decision
        @actor.item_hotkeys[button] = @item_window.item.id
        @message = Requiem_ABS::Memorize_Text
        @delay = 120
      end
    end
  end
 
end

#------------------------------------------------------------------------------
# Scene Skill
#------------------------------------------------------------------------------
class Window_Skill < Window_Selectable
 
  def update_help
    if $scene.is_a?(Scene_Skill) and $scene.message != nil
      @help_window.set_text($scene.message)
    else
      @help_window.set_text(skill == nil ? "" : skill.description)
    end
  end
 
end

#------------------------------------------------------------------------------
class Scene_Skill < Scene_Base
 
  attr_accessor :message
  attr_accessor :delay
 
  alias requiem_abs_sskill_start start
  alias requiem_abs_sskill_update update
  alias requiem_abs_sskill_update_skill_selection update_skill_selection
 
  def start
    requiem_abs_sskill_start
    @message = nil
    @delay = 0
  end
 
  def update
    requiem_abs_sskill_update
    if @delay <= 0
      @message = nil
    else
      @delay -= 1
    end
  end
 
  def update_skill_selection
    requiem_abs_sskill_update_skill_selection
    for button in @actor.skill_hotkeys.keys
      if Input.trigger?(button)
        Sound.play_decision
        @actor.skill_hotkeys[button] = @skill_window.skill.id
        @message = "Memoriser!"
        @delay = 120
      end
    end
  end
 
end

#------------------------------------------------------------------------------
# Scene File
#------------------------------------------------------------------------------
class Scene_File < Scene_Base

  alias requiem_abs_sfile_write_save_data write_save_data
  alias requiem_abs_sfile_read_save_data read_save_data
 
  def write_save_data(file)
    requiem_abs_sfile_write_save_data(file)
    Marshal.dump($game_range,          file)
    Marshal.dump($game_drop,           file)
    Marshal.dump($game_bomb,           file)
  end
 
  def read_save_data(file)
    requiem_abs_sfile_read_save_data(file)
    $game_range         = Marshal.load(file)
    $game_drop          = Marshal.load(file)
    $game_bomb          = Marshal.load(file)
  end

end

#------------------------------------------------------------------------------
# End of ABS
#------------------------------------------------------------------------------


Haut
 Profil  
 
 Sujet du message: Re: Script A-RPG très complet (Requiem ABS 4)
MessagePublié: 01 Jan 2010, 19:03 
Villageois (Nv 4)

Inscrit le: 06 Déc 2009, 15:47
Messages: 66
Logiciel(s) préféré(s): Rpg maker vx/xp
Sexe: Masculin
Points d'aide: 0/60

Créations :

- Script pour plus d'équipement améliorer de DerVVulfman


Voir ses créations

4éme script toujours au dessus de main et le nommé Requiem HUD
Code: Tout sélectionner
==============================================================================
# Crissaegrim HUD
#==============================================================================

OnOff_Switch = 0 # Switch that show or hide the HUD

#------------------------------------------------------------------------------
class Requiem_HUD1 < Window_Base
 
  def initialize
    super(-32, -32, 224, 140)
    self.opacity = 0
    update
  end
 
  def update
    return if $game_party.members.size <= 0
    @actor = $game_party.members[0]
    self.contents.clear
    draw_actor_head(@actor,24,24)
    draw_hpbar(@actor, 64, 20)
    draw_mpbar(@actor, 64, 42)
  end
 
  def draw_hpbar(actor, x, y)
    self.contents.fill_rect(x, y, 128, 14, Color.new(0,0,0))
    self.contents.fill_rect(x+1, y+1, 126*actor.hp/actor.maxhp, 6, Color.new(205,255,205))
    self.contents.fill_rect(x+1, y+7, 126*actor.hp/actor.maxhp, 6, Color.new(10,220,45))
  end 
 
  def draw_mpbar(actor, x, y)
    self.contents.fill_rect(x, y, 128, 14, Color.new(0,0,0))
    self.contents.fill_rect(x+1, y+1, 126*actor.mp/actor.maxmp, 6, Color.new(180,225,245))
    self.contents.fill_rect(x+1, y+7, 126*actor.mp/actor.maxmp, 6, Color.new(20,160,225))
  end
 
end

#------------------------------------------------------------------------------
class Requiem_HUD2 < Window_Base
 
  def initialize
    super(-32,-32,608,480)
    self.opacity = 0
    @actor = $game_party.members[0]
    refresh
  end
 
  def update
    return if $game_party.members.size <= 0
    if @actor != $game_party.members[0]
      @actor = $game_party.members[0]
      refresh
    end
  end
 
  def refresh
    return if $game_party.members.size <= 0
    self.contents.clear
    bitmap = Cache.system("HUD")
    rect = Rect.new(0, 0, 544, 416)
    self.contents.blt(16,16,bitmap,rect)
    draw_skills(463, 32)
    draw_items(460, 388)
    draw_ammo(36,390)
  end
 
  def draw_skills(x,y)
    skill_count = 0
    if @actor.skill_hotkeys != nil
      for skl in @actor.skill_hotkeys.keys
        next if skl == nil
        skill = $data_skills[@actor.skill_hotkeys[skl]]
        next if skill == nil
        draw_icon(skill.icon_index,(32*skill_count)+x,y)
        skill_count += 1
      end
    end
  end
 
  def draw_items(x,y)
    item_count = 0
    for btn in @actor.item_hotkeys.keys
      next if btn == nil
      item = $data_items[@actor.item_hotkeys[btn]]
      next if item == nil
      draw_icon(item.icon_index,(32*item_count)+x,y)
      item_count += 1
    end
  end
 
  def draw_ammo(x,y)
    return if  @actor.weapon_id <= 0
    if @actor.equips[0].ranged?
      if @actor.equips[0].ammo1 != nil
        draw_icon(@actor.equips[0].ammo1.icon_index, x, y)
      end
      if @actor.equips[0].ammo2 != nil
        draw_icon(@actor.equips[0].ammo2.icon_index, x+32, y)
      end
    end
  end
 
end

#------------------------------------------------------------------------------
class Scene_Map < Scene_Base
 
  alias crissaegrim_hud_start start
  alias crissaegrim_hud_update update
  alias crissaegrim_hud_terminate terminate
 
  def start
    crissaegrim_hud_start
    @hud_window1 = Requiem_HUD1.new
    @hud_window2 = Requiem_HUD2.new
    @hud_window1.visible = false
    @hud_window2.visible = false
    showing_hud
  end
 
  def update
    crissaegrim_hud_update
    @hud_window1.update
    @hud_window2.update
    showing_hud
  end
 
  def terminate
    crissaegrim_hud_terminate
    @hud_window1.dispose
    @hud_window2.dispose
  end
 
  def showing_hud
    if OnOff_Switch <= 0 or $game_switches[OnOff_Switch]
      @hud_window1.visible = true
      @hud_window2.visible = true
    else
      @hud_window1.visible = false
      @hud_window2.visible = false
    end
  end

end


Haut
 Profil  
 
 Sujet du message: Re: Script A-RPG très complet (Requiem ABS 4)
MessagePublié: 01 Jan 2010, 19:11 
Villageois (Nv 4)

Inscrit le: 06 Déc 2009, 15:47
Messages: 66
Logiciel(s) préféré(s): Rpg maker vx/xp
Sexe: Masculin
Points d'aide: 0/60

Créations :

- Script pour plus d'équipement améliorer de DerVVulfman


Voir ses créations

Le dernier script à mettre au dessus de main et le nommé Requiem Ennemies Barres
Code: Tout sélectionner
#==============================================================================
# Requiem Enemies Bars
#==============================================================================
class Requiem_EnemyHPBars < Sprite
 
  attr_reader :enemy
 
  def initialize(enemy, viewport)
    super(viewport)
    @enemy = enemy
    @old_x = 0
    @old_y = 0
    self.bitmap = Bitmap.new(45,7)
    update
  end
 
  def update
    refresh if change? and !self.disposed?
  end
 
  def refresh
    @old_x = @enemy.screen_x-(self.bitmap.width/2)
    @old_y = @enemy.screen_y
    self.x = @old_x
    self.y = @old_y
    self.bitmap.clear
    draw_hp_gauge(@enemy.actor)
  end
 
  def dispsoe
    self.bitmap.dispose
    self.dispose
  end
 
  def change?
    if @enemy.actor.dead? or !@enemy.in_battle
      dispose
      return false
    end
    return true if @old_x != @enemy.screen_x-(self.bitmap.width/2)
    return true if @old_y != @enemy.screen_y
  end
 
  def draw_hp_gauge(object)
    gw = ((self.bitmap.width-2) * object.hp) / object.maxhp
    self.bitmap.fill_rect(0, 0, self.bitmap.width, self.bitmap. height, Color.new(0,0,0))
    self.bitmap.gradient_fill_rect(1, 2, gw, self.bitmap.height-4, Color.new(245,110,80), Color.new(120,0,0))
  end
 
end

#------------------------------------------------------------------------------
class Requiem_BossBar < Sprite
 
  def initialize(id,viewport)
    super(viewport)
    @enemy = $game_map.events[id]
    @hp = @enemy.actor.hp
    self.bitmap = Bitmap.new(416, 16)
    self.x = 64
    self.y = 330
    refresh
  end
 
  def update
    if @hp != @enemy.actor.hp
      @hp = @enemy.actor.hp
      refresh
    end
  end
 
  def refresh
    self.bitmap.clear
    self.bitmap.fill_rect(0,0,self.bitmap.width,self.bitmap.height,Color.new(50,50,50))
    cw = (self.bitmap.width-4)*@enemy.actor.hp/@enemy.actor.maxhp
    ch = (self.bitmap.height-4)
    self.bitmap.gradient_fill_rect(2,2,cw,ch/2,Color.new(255,255,240),Color.new(255,255,100))
    self.bitmap.gradient_fill_rect(2,2+(ch/2),cw,ch/2,Color.new(255,247,153),Color.new(255,200,0))
  end
 
  def dispsoe
    self.bitmap.dispose
    self.dispose
  end
 
end

#------------------------------------------------------------------------------
class Scene_Map < Scene_Base
 
  alias requiem_sbabs_enemyhp_smap_start start
  alias requiem_sbabs_enemyhp_smap_update update
  alias requiem_sbabs_enemyhp_smap_terminate terminate
 
  def start
    requiem_sbabs_enemyhp_smap_start
    @enemys_hp = {}
  end
 
  def update
    requiem_sbabs_enemyhp_smap_update
    for event in $game_map.events.values
      next unless $game_map.in_range?(event)
      if event.in_battle
        if event.boss
          @boss_hud = Requiem_BossBar.new(event.id,@spriteset.viewport3) if @boss_hud == nil and !event.actor.dead?
          @boss_hud.update if @boss_hud != nil and !event.actor.dead?
          @boss_hud.dispose if @boss_hud != nil and event.actor.dead?
          @boss_hud = nil if @boss_hud != nil and event.actor.dead?
        else
          if $game_player.in_range?($game_player,event,5)
            next if event.show_bar or event.object or event.puzzle
            @enemys_hp[event.id] = Requiem_EnemyHPBars.new(event,@spriteset.viewport3)
            event.show_bar = true
          elsif event.show_bar and @enemys_hp[event.id] != nil
            @enemys_hp[event.id].dispose unless @enemys_hp[event.id].disposed?
            @enemys_hp[event.id] = nil
            event.show_bar = false
          end
        end
      end
    end
    for bar in @enemys_hp.values
      next if bar.nil? or bar.disposed? or !$game_map.in_range?(bar.enemy)
      bar.update
    end
  end
 
  def terminate
    requiem_sbabs_enemyhp_smap_terminate
    @boss_hud.dispose if @boss_hud != nil
    @boss_hud = nil
    for bar in @enemys_hp.values
      next if bar.nil? or bar.disposed?
      bar.dispose
    end
    for event in $game_map.events.values
      if event.in_battle
        event.show_bar = false
      end
    end
  end
 
end


Haut
 Profil  
 
 Sujet du message: Re: Script A-RPG très complet (Requiem ABS 4)
MessagePublié: 02 Jan 2010, 19:26 
Villageois (Nv 4)

Inscrit le: 06 Déc 2009, 15:47
Messages: 66
Logiciel(s) préféré(s): Rpg maker vx/xp
Sexe: Masculin
Points d'aide: 0/60

Créations :

- Script pour plus d'équipement améliorer de DerVVulfman


Voir ses créations

Et ne pas oublié de mettre une image dans le dossier système et la nommé HUD


Pièces jointes:
HUD.png
HUD.png [ 26.35 Kio | Consulté 10077 fois ]
Haut
 Profil  
 
 Sujet du message: Re: Script A-RPG très complet (Requiem ABS 4)
MessagePublié: 07 Jan 2010, 16:41 
Villageois (Nv 4)

Inscrit le: 06 Déc 2009, 15:47
Messages: 66
Logiciel(s) préféré(s): Rpg maker vx/xp
Sexe: Masculin
Points d'aide: 0/60

Créations :

- Script pour plus d'équipement améliorer de DerVVulfman


Voir ses créations

Explication pour faire des monstres, mettre en commentaire :
EnemyID ID et dans la base de donnés
FollowX changer X par un nombre. Par exemple si c'est 3, alors le monstre ne poursuivra que si le héros est à 3 case ou moins du monstre.
Die Erase sert à éliminer le monstre pendant tous le jeu.
RespanwX changer X par un nombre. Par exemple si c'est 300, le monstre réapparaîtra au bout de 300 frames.
Les plus:
Die Switch X: Active l'interrupteur X à la mort du monstre.
Die Self Switch X: Active soit l'interrupteur local A, ou B, ou C, ou D.
Die Variable X: Rajoute de 1 la variable X
Object : Impossible de le tuer sauf avec une bombe.
Boss: Active la barre du boss

Explication pour faire une arme à distance :
Mettre en commentaire
Ranged
Graphic = Nom du graphique
Index X: changer X par un nombre pour la case du characters, exemple dans Actor1: 0 est Ralph, 1 c'est celui qui est à côté.
Speed = X changer X par un nombre, le nombre sera la vitesse du projectile
Range = X changer X par un nombre, le nombre sera la distance du projectile
Delay = X changer X par un nombre, le nombre le temps d'attente entre chaque attaque en frames
Ammo1 = X changer X par l'ID d'un objet dans la base de donné. L'objet est la munitions de l'arme
Ammo2 = Idem pour Ammo1, mais permet d'avoir deux type de munitions pour une seule arme
Shot SE = Nom du SE quand l'arme tire

Explications pour faire une bombe :
Bomb
Delay = X expliquer plus haut
Shot SE = Nom du SE pour la temps d'attente


Dernière édition par dark-overlord le 10 Mar 2010, 22:37, édité 1 fois au total.

Haut
 Profil  
 
 Sujet du message: Re: Script A-RPG très complet (Requiem ABS 4)
MessagePublié: 07 Jan 2010, 17:50 
Villageois (Nv 4)

Inscrit le: 06 Déc 2009, 15:47
Messages: 66
Logiciel(s) préféré(s): Rpg maker vx/xp
Sexe: Masculin
Points d'aide: 0/60

Créations :

- Script pour plus d'équipement améliorer de DerVVulfman


Voir ses créations

Screenshot


Pièces jointes:
Description du fichier: Screenshot
Sans titre 1.jpg
Sans titre 1.jpg [ 68.8 Kio | Consulté 10009 fois ]
Haut
 Profil  
 
 Sujet du message: Re: Script A-RPG très complet (Requiem ABS 4)
MessagePublié: 07 Jan 2010, 17:53 
Villageois (Nv 4)

Inscrit le: 06 Déc 2009, 15:47
Messages: 66
Logiciel(s) préféré(s): Rpg maker vx/xp
Sexe: Masculin
Points d'aide: 0/60

Créations :

- Script pour plus d'équipement améliorer de DerVVulfman


Voir ses créations

Screenshots de boss


Pièces jointes:
Description du fichier: Second screenshot de boss
Sans titre é.jpg
Sans titre é.jpg [ 68.45 Kio | Consulté 10011 fois ]
Haut
 Profil  
 
Afficher les messages depuis:  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 17 messages ]  Aller à la page 1, 2  Suivant

Heures au format UTC + 1 heure [ Heure d’été ]


Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Rechercher pour:
Sauter vers:  
cron
RPG Creative Forum version 5 ; Tous droits réservés
phpBB Group (Traduit par Xaphos)
Optimisé pour une résolution 1024*728