Jump to content
Rpg²S Forum
  • 0

Sportello aiuti veloci VX-Ace


Guardian of Irael
 Share

Question

Date le nuove features presenti nel VX-Ace è stato deciso di aprire uno sportello aiuti veloci anche per questo tool! ^ ^

Le regole sono le stesse:

 

postate qui le vostre domande così da non aprire diecimila topic uguali e riceverete entro breve la vostra risposta.

 

ISTRUZIONI

 

Le domande devono essere scritte in grassetto e in un colore visibile (possibilmente ROSSO) precedute da una "D" maiuscola

 

La risposta deve essere preceduta da una "R" maiuscola e NON in grassetto.

 

Esempio:

 

D: Come posso cambiare il nome all'eroe tramite evento?

 

R: prima pagina dei "comandi eventi", colonna a destra, secondo bottone partendo dal basso.

 

^ ^

(\_/)
(^ ^) <----coniglietto rosso, me!
(> <)


Il mio Tumblr dove seguire i miei progetti, i progetti della Reverie : : Project ^ ^

http://i.imgur.com/KdUDtQt.png disponibile su Google Play, qui i dettagli! ^ ^

http://i.imgur.com/FwnGMI3.png completo! Giocabile online, qui i dettagli! ^ ^

REVERIE : : RENDEZVOUS (In allenamento per apprendere le buone arti prima di cominciarlo per bene ^ ^) Trovate i dettagli qui insieme alla mia intervista (non utilizzerò più rpgmaker) ^ ^

 

SUWOnzB.jpg 🖤
http://www.rpg2s.net/dax_games/r2s_regali2s.png E:3 http://www.rpg2s.net/dax_games/xmas/gifnatale123.gif
http://i.imgur.com/FfvHCGG.png by Testament (notare dettaglio in basso a destra)! E:3
http://i.imgur.com/MpaUphY.jpg by Idriu E:3

Membro Onorario, Ambasciatore dei Coniglietti (Membro n.44)

http://i.imgur.com/PgUqHPm.png
Ufficiale
"Ad opera della sua onestà e del suo completo appoggio alla causa dei Panda, Guardian Of Irael viene ufficialmente considerato un Membro portante del Partito, e Ambasciatore del suo Popolo presso di noi"


http://i.imgur.com/TbRr4iS.png<- Grazie Testament E:3
Ricorda...se rivolgi il tuo sguardo ^ ^ a Guardian anche Guardian volge il suo sguardo ^ ^ a te ^ ^
http://i.imgur.com/u8UJ4Vm.gifby Flame ^ ^
http://i.imgur.com/VbggEKS.gifhttp://i.imgur.com/2tJmjFJ.gifhttp://projectste.altervista.org/Our_Hero_adotta/ado2.png
Grazie Testament XD Fan n°1 ufficiale di PQ! :D

Viva
il Rhaxen! <- Folletto te lo avevo detto (fa pure rima) che non
avevo programmi di grafica per fare un banner su questo pc XD (ora ho di
nuovo il mio PC veramente :D)

Rosso Guardiano della
http://i.imgur.com/Os5rvhx.png

Rpg2s RPG BY FORUM:

Nome: Darth Reveal

 

PV totali 2
PA totali 16

Descrizione: ragazzo dai lunghi capelli rossi ed occhi dello stesso colore. Indossa una elegante giacca rossa sopra ad una maglietta nera. Porta pantaloni rossi larghi, una cintura nera e degli stivali dello stesso colore. E' solito trasportare lo spadone dietro la schiena in un fodero apposito. Ha un pendente al collo e tiene ben legato un pezzo di stoffa (che gli sta particolarmente a cuore) intorno al braccio sinistro sotto la giacca, copre una cicatrice.
Bozze vesti non definitive qui.

Equipaggiamento:
Indossa:
60$ e 59$ divisi in due tasche interne
Levaitan

Spada a due mani elsa lunga

Guanti del Defender (2PA)
Anello del linguaggio animale (diventato del Richiamo)

Scrinieri da lanciere (2 PA)

Elmo del Leone (5 PA)

Corazza del Leone in Ferro Corrazzato (7 PA)

ZAINO (20) contenente:
Portamonete in pelle di cinghiale contenente: 100$
Scatola Sanitaria Sigillata (può contenere e tenere al sicuro fino a 4 oggetti curativi) (contiene Benda di pronto soccorso x3, Pozione di cura)
Corda
Bottiglia di idromele
Forma di formaggio
Torcia (serve ad illuminare, dura tre settori)

Fiasca di ceramica con Giglio Amaro (Dona +1PN e Velocità all'utilizzatore)
Ampolla Bianca

Semi di Balissa

 

CAVALLO NORMALE + SELLA (30 +2 armi) contentente:
66$
Benda di pronto soccorso x3
Spada a due mani

Fagotto per Adara (fazzoletto ricamato)


 

Link to comment
Share on other sites

Recommended Posts

  • 0

No non ho capito, poi ho provato ad assegnare a base_bitmap, che appunto mi dava errore, un file ma mi dava comunque errore su equips di:

Esiste l'attributo base_bitmap di Game_Actor? Ti avevo proposto appunto di crearlo, è normale che se non lo definisci darà errore.

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

http://holyres.altervista.org/UserBoard/BannerOverdrive35.png
http://holyres.altervista.org/UserBoard/Cap3.png

http://www.indiexpo.net/signature/578.png

Miei script per RPG Maker VX Ace:


*NB Tutti i miei script sono protetti da licenza CC - BY http://i.creativecommons.org/l/by/3.0/88x31.png

Questa licenza permette a terzi di distribuire, modificare, ottimizzare ed utilizzare la tua opera come base, anche commercialmente, fino a che ti diano il credito per la creazione originale. Questa è la più accomodante delle licenze offerte. É raccomandata per la diffusione e l'uso massimo di materiali coperti da licenza.

 

 



I miei tutorial:


Come distribuire il gioco - e anche come creare un'installazione professionale!
RGSS in pillole - Guida completa e facile all'RGSS2 e RGSS3 per novizi ed esperti
Come mappare con VX (e VX Ace) - guida base all'uso degli strumenti del mapping
Loop delle musiche - come tagliarle in modo da far venire musiche continue senza interruzioni finali
Creare backup dei progetti - per evitare di uccidervi dopo un errore che ha fatto perdere tutto!

Link to comment
Share on other sites

  • 0
Nella guida c'è un esempio simile

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

http://holyres.altervista.org/UserBoard/BannerOverdrive35.png
http://holyres.altervista.org/UserBoard/Cap3.png

http://www.indiexpo.net/signature/578.png

Miei script per RPG Maker VX Ace:


*NB Tutti i miei script sono protetti da licenza CC - BY http://i.creativecommons.org/l/by/3.0/88x31.png

Questa licenza permette a terzi di distribuire, modificare, ottimizzare ed utilizzare la tua opera come base, anche commercialmente, fino a che ti diano il credito per la creazione originale. Questa è la più accomodante delle licenze offerte. É raccomandata per la diffusione e l'uso massimo di materiali coperti da licenza.

 

 



I miei tutorial:


Come distribuire il gioco - e anche come creare un'installazione professionale!
RGSS in pillole - Guida completa e facile all'RGSS2 e RGSS3 per novizi ed esperti
Come mappare con VX (e VX Ace) - guida base all'uso degli strumenti del mapping
Loop delle musiche - come tagliarle in modo da far venire musiche continue senza interruzioni finali
Creare backup dei progetti - per evitare di uccidervi dopo un errore che ha fatto perdere tutto!

Link to comment
Share on other sites

  • 0

Scusa ma non lo trovo, la tua guida o quella integrata nel gioco?

La mia guida, ma ho ricontrollato ed è un po' diverso…

Allora, seguendo lo stesso esempio degli equipaggiamenti, devi aggiungere l'attributo base_bitmap (o in qualsiasi modo tu lo voglia chiamare) in RPG::Actor.

Per quanto riguarda gli eroi, questi sono l'istanza di Game_Actor (perché non sono statici come gli equipaggiamenti, ma salgono di livello, cambiano HP ecc...)

quindi ci vuole un metodo in Game_Actor che richiami la propria controparte dell'attributo di RPG::Actor

 

class Game_Actor < Game_Battler
  def base_bitmap
    actor.base_bitmap
  end
end
Spero che ti sia chiaro.

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

http://holyres.altervista.org/UserBoard/BannerOverdrive35.png
http://holyres.altervista.org/UserBoard/Cap3.png

http://www.indiexpo.net/signature/578.png

Miei script per RPG Maker VX Ace:


*NB Tutti i miei script sono protetti da licenza CC - BY http://i.creativecommons.org/l/by/3.0/88x31.png

Questa licenza permette a terzi di distribuire, modificare, ottimizzare ed utilizzare la tua opera come base, anche commercialmente, fino a che ti diano il credito per la creazione originale. Questa è la più accomodante delle licenze offerte. É raccomandata per la diffusione e l'uso massimo di materiali coperti da licenza.

 

 



I miei tutorial:


Come distribuire il gioco - e anche come creare un'installazione professionale!
RGSS in pillole - Guida completa e facile all'RGSS2 e RGSS3 per novizi ed esperti
Come mappare con VX (e VX Ace) - guida base all'uso degli strumenti del mapping
Loop delle musiche - come tagliarle in modo da far venire musiche continue senza interruzioni finali
Creare backup dei progetti - per evitare di uccidervi dopo un errore che ha fatto perdere tutto!

Link to comment
Share on other sites

  • 0

No non ho capito, basta scrivere questo codice nello script degli animated battler e in game actor aggiungere un attributo tipo così:

@base_bitmap =' '

?

Non credo

Che usi uno script degli animated battlers lo hai detto ora. A questo punto, non puoi usare al posto di base_bitmap la grafica che imposti direttamente come battler? Cerca l'attributo nello script.

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

http://holyres.altervista.org/UserBoard/BannerOverdrive35.png
http://holyres.altervista.org/UserBoard/Cap3.png

http://www.indiexpo.net/signature/578.png

Miei script per RPG Maker VX Ace:


*NB Tutti i miei script sono protetti da licenza CC - BY http://i.creativecommons.org/l/by/3.0/88x31.png

Questa licenza permette a terzi di distribuire, modificare, ottimizzare ed utilizzare la tua opera come base, anche commercialmente, fino a che ti diano il credito per la creazione originale. Questa è la più accomodante delle licenze offerte. É raccomandata per la diffusione e l'uso massimo di materiali coperti da licenza.

 

 



I miei tutorial:


Come distribuire il gioco - e anche come creare un'installazione professionale!
RGSS in pillole - Guida completa e facile all'RGSS2 e RGSS3 per novizi ed esperti
Come mappare con VX (e VX Ace) - guida base all'uso degli strumenti del mapping
Loop delle musiche - come tagliarle in modo da far venire musiche continue senza interruzioni finali
Creare backup dei progetti - per evitare di uccidervi dopo un errore che ha fatto perdere tutto!

Link to comment
Share on other sites

  • 0

Ho trovato questo codice:

def setup_animated_battler @pose = 0    @move_speed = 0    char = actor? ? actor : enemy    @animated_battler = $1 if char.note =~ /<battler:[ ](.*)>/i  end
@animated_battler è quello che mi serve giusto?

Però come lo definisco?

Ho visto che lui lo utilizza così

new_bitmap=Cache.battler(@battler.animated_battler, 0)
Io dovrei scrivere la stessa cosa, ma con base_bitmap, al posto di new_bitmap? Edited by Killer Van
Link to comment
Share on other sites

  • 0

Ho trovato questo codice:

 

def setup_animated_battler @pose = 0    @move_speed = 0    char = actor? ? actor : enemy    @animated_battler = $1 if char.note =~ /<battler:[ ](.*)>/i  end
@animated_battler è quello che mi serve giusto?

Però come lo definisco?

Ho visto che lui lo utilizza così

new_bitmap=Cache.battler(@battler.animated_battler, 0)
Io dovrei scrivere la stessa cosa, ma con base_bitmap, al posto di new_bitmap?
No, non devi reinventare la ruota. È già definito...

Basta che fai actor.animated_battler

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

http://holyres.altervista.org/UserBoard/BannerOverdrive35.png
http://holyres.altervista.org/UserBoard/Cap3.png

http://www.indiexpo.net/signature/578.png

Miei script per RPG Maker VX Ace:


*NB Tutti i miei script sono protetti da licenza CC - BY http://i.creativecommons.org/l/by/3.0/88x31.png

Questa licenza permette a terzi di distribuire, modificare, ottimizzare ed utilizzare la tua opera come base, anche commercialmente, fino a che ti diano il credito per la creazione originale. Questa è la più accomodante delle licenze offerte. É raccomandata per la diffusione e l'uso massimo di materiali coperti da licenza.

 

 



I miei tutorial:


Come distribuire il gioco - e anche come creare un'installazione professionale!
RGSS in pillole - Guida completa e facile all'RGSS2 e RGSS3 per novizi ed esperti
Come mappare con VX (e VX Ace) - guida base all'uso degli strumenti del mapping
Loop delle musiche - come tagliarle in modo da far venire musiche continue senza interruzioni finali
Creare backup dei progetti - per evitare di uccidervi dopo un errore che ha fatto perdere tutto!

Link to comment
Share on other sites

  • 0

Mi da questo errore : undefined method 'animated_battler' for 1:Fixnum
Credo che il problema sia la classe giusto?

Io ho usato la funzione Trova negli script e non ho trovato nessun

def animated_battler
Edited by Killer Van
Link to comment
Share on other sites

  • 0

Mi da questo errore : undefined method 'animated_battler' for 1:Fixnum

Credo che il problema sia la classe giusto?

Io ho usato la funzione Trova negli script e non ho trovato nessun

def animated_battler
Non dev'essere per forza un metodo, ma anche un attributo pubblico.

Devi rendere la variabile @animated_battler pubblica inserendo

attr_reader :animated_battler

All'interno della classe Game_Actor

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

http://holyres.altervista.org/UserBoard/BannerOverdrive35.png
http://holyres.altervista.org/UserBoard/Cap3.png

http://www.indiexpo.net/signature/578.png

Miei script per RPG Maker VX Ace:


*NB Tutti i miei script sono protetti da licenza CC - BY http://i.creativecommons.org/l/by/3.0/88x31.png

Questa licenza permette a terzi di distribuire, modificare, ottimizzare ed utilizzare la tua opera come base, anche commercialmente, fino a che ti diano il credito per la creazione originale. Questa è la più accomodante delle licenze offerte. É raccomandata per la diffusione e l'uso massimo di materiali coperti da licenza.

 

 



I miei tutorial:


Come distribuire il gioco - e anche come creare un'installazione professionale!
RGSS in pillole - Guida completa e facile all'RGSS2 e RGSS3 per novizi ed esperti
Come mappare con VX (e VX Ace) - guida base all'uso degli strumenti del mapping
Loop delle musiche - come tagliarle in modo da far venire musiche continue senza interruzioni finali
Creare backup dei progetti - per evitare di uccidervi dopo un errore che ha fatto perdere tutto!

Link to comment
Share on other sites

  • 0

Ho provato ma mi da lo stesso errore.

Ma forse sto sbagliando io ad utilizzare generate _animated_battler

Nelle parentesi va scritto l'id o il nome del personaggio, l'id giusto?

Edited by Killer Van
Link to comment
Share on other sites

  • 0

Ho provato ma mi da lo stesso errore.

Ma forse sto sbagliando io ad utilizzare generate _animated_battler

Nelle parentesi va scritto l'id o il nome del personaggio, l'id giusto?

Né uno né l'altro. Devi passargli l'oggetto.

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

http://holyres.altervista.org/UserBoard/BannerOverdrive35.png
http://holyres.altervista.org/UserBoard/Cap3.png

http://www.indiexpo.net/signature/578.png

Miei script per RPG Maker VX Ace:


*NB Tutti i miei script sono protetti da licenza CC - BY http://i.creativecommons.org/l/by/3.0/88x31.png

Questa licenza permette a terzi di distribuire, modificare, ottimizzare ed utilizzare la tua opera come base, anche commercialmente, fino a che ti diano il credito per la creazione originale. Questa è la più accomodante delle licenze offerte. É raccomandata per la diffusione e l'uso massimo di materiali coperti da licenza.

 

 



I miei tutorial:


Come distribuire il gioco - e anche come creare un'installazione professionale!
RGSS in pillole - Guida completa e facile all'RGSS2 e RGSS3 per novizi ed esperti
Come mappare con VX (e VX Ace) - guida base all'uso degli strumenti del mapping
Loop delle musiche - come tagliarle in modo da far venire musiche continue senza interruzioni finali
Creare backup dei progetti - per evitare di uccidervi dopo un errore che ha fatto perdere tutto!

Link to comment
Share on other sites

  • 0

Mi dici dove stai chiamando quel metodo?

È mi dici, per cortesia, il messaggio di errore completo (o fai uno screen)?

Leggere il messaggio di errore è la prima cosa che si deve fare per capire dove sia il problema.

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

http://holyres.altervista.org/UserBoard/BannerOverdrive35.png
http://holyres.altervista.org/UserBoard/Cap3.png

http://www.indiexpo.net/signature/578.png

Miei script per RPG Maker VX Ace:


*NB Tutti i miei script sono protetti da licenza CC - BY http://i.creativecommons.org/l/by/3.0/88x31.png

Questa licenza permette a terzi di distribuire, modificare, ottimizzare ed utilizzare la tua opera come base, anche commercialmente, fino a che ti diano il credito per la creazione originale. Questa è la più accomodante delle licenze offerte. É raccomandata per la diffusione e l'uso massimo di materiali coperti da licenza.

 

 



I miei tutorial:


Come distribuire il gioco - e anche come creare un'installazione professionale!
RGSS in pillole - Guida completa e facile all'RGSS2 e RGSS3 per novizi ed esperti
Come mappare con VX (e VX Ace) - guida base all'uso degli strumenti del mapping
Loop delle musiche - come tagliarle in modo da far venire musiche continue senza interruzioni finali
Creare backup dei progetti - per evitare di uccidervi dopo un errore che ha fatto perdere tutto!

Link to comment
Share on other sites

  • 0

Errore: Script 'Galv's animated battler' line 726 NoMethodError occurred

undefined method 'animated_battler' for 1:Fixnum

 

animated_battler, ho visto che nello script viene utilizzato più volte, ho usato la funzione cerca per vedere dove lo definiva, ma non ho trovato niente.

Ti posto lo script:

##------------------------------------------------------------------------------#
#  Galv's Animated Battlers
#------------------------------------------------------------------------------#
#  For: RPGMAKER VX ACE
#  Version 1.2
#------------------------------------------------------------------------------#
#  2014-01-17 - Version 1.2 - compatibility fix when using with Actor Duel Game
#  2013-05-06 - Version 1.1 - added move speed for melee attacks
#  2013-05-04 - Version 1.0 - release
#------------------------------------------------------------------------------#
#  Holder's animated battler spritesheets can be found here:
#  http://animatedbattlers.wordpress.com/
#------------------------------------------------------------------------------#
#  This is just another animated battler script that uses holder-style animated
#  battler sheets. There are better ones out there, this one is just my basic
#  implementation in an attempt to continue improving my scripting.
#
#  This script works in the default battle system but is optimised for use with
#  Yanfly's battle script. Not tested with other battle scripts. Put this script
#  below any battle scripts you try it with.
#------------------------------------------------------------------------------#
 
#------------------------------------------------------------------------------#
#  Note tag for ENEMIES and ACTORS
#------------------------------------------------------------------------------#
#
#  <battler: filename>    # filename is the animated spritesheet located in
#                         # /Graphics/Battlers/
#                         # Required for actors, optional for enemies.
#
#  <stationary_sub>       # will not re-position themselves in front of an ally
#                         # they are covering/substituting for.
#
#------------------------------------------------------------------------------#
 
#------------------------------------------------------------------------------#
#  Note tags for SKILLS, ITEMS and STATES
#------------------------------------------------------------------------------#
#
#  <pose: x>    # The skill, item or state will use x pose row.
#               # If a skill does not have this tag, it will use row 6.
#               # If an item does not have this tag, it will use row 5.
#               # If a state does not have this tag, it will use row 2. If a
#               # battler has multiple states, it uses the highest priority.
#
#------------------------------------------------------------------------------#
 
#------------------------------------------------------------------------------#
#  Note tag for SKILLS, ITEMS and ACTORS
#------------------------------------------------------------------------------#
#
#  <melee: x>  # Normal attacks for Actors, items being used or skills being
#              # used that have this tag will make the actor dash into close
#              # range before doing the action. x is the dash speed.
#              # 0 = instant.  1 is slow, higher numbers is faster
#
#------------------------------------------------------------------------------#
 
#------------------------------------------------------------------------------#
#  SCRIPT CALLS
#------------------------------------------------------------------------------#
#
#
#------------------------------------------------------------------------------#
#------------------------------------------------------------------------------#
   
  
    
 
 #------------------------------------------------------------------------------#
 
($imported ||= {})["Galv_Animated_Battlers"] = true
module GALV_BAT
  
#-------------------------------------------------------------------------------
#
#  * SETTINGS
#
#-------------------------------------------------------------------------------
  
  COLS = 4             # How many columns your animated spritesheet uses
  ROWS = 14            # How many rows your animated spritesheet uses
  
  ENEMY_FLIP = true    # true = flip enemy battler image horizontally
  ACTOR_FLIP = false   # true = flip actor battler image horizonatally
  
  HP_CRISIS = 0.25     # Remaining hp before poor status pose (0.25 = 25%)
  
  ONE_ANIM = [3,4,5,6,7,11,12]  # Poses that will NOT keep repeating their frames
 
 
  XOFFSET = 80    # horizonatal distance from opponent when using <melee: x>
  YOFFSET = 0     # vertical distance from opponent when using <melee: x>
  
  SXOFFSET = 40   # horizontal distance from ally when substituting
  SYOFFSET = 0    # vertical distance from ally when substituting
  
#------------------------------------------------------------------------------#
  ACTOR_POSITIONS = [ # don't touch
#------------------------------------------------------------------------------#
#  Set x,y locations of your actors on the battle screen
#------------------------------------------------------------------------------#
 
    [400,280],   # Party member 1 [x,y]
    [425,260],   # Party member 2 [x,y]
    [450,290],   # Party member 3 [x,y]
    [475,265],   # Party member 4 [x,y]
   
#------------------------------------------------------------------------------#
  ] #don't touch
#------------------------------------------------------------------------------#
 
#-------------------------------------------------------------------------------
#  POSES USED FOR SPECIAL ACTIONS:
#-------------------------------------------------------------------------------
 
   COUNTER_ATTACK = 4       # Pose when counter attacking
   MAGIC_REFLECT  = 7       # Pose when reflecting magic 
   EVASION        = [9,8]   # Move back then move forward poses to evade.
 
#-------------------------------------------------------------------------------
#  POSE INFORMATION:
#------------------------------------------------------------------------------#
#  DEFAULT SPRITESHEET POSES (HOLDER SETUP)
#------------------------------------------------------------------------------#
#  ROW     POSE              
#
#   0      Idle
#   1      Guard
#   2      Poor Status
#   3      Get hit
#   4      Normal Attack
#   5      Use Item
#   6      Use Skill
#   7      Use Magic
#   8      Move toward
#   9      Move back
#   10     Victory
#   11     Battle Start
#   12     Dead
#   13     Spritesheet Info
#------------------------------------------------------------------------------#
 
#-------------------------------------------------------------------------------
#
#  * END SETTINGS
#
#-------------------------------------------------------------------------------
 
end
 
 
#------------------------------------------------------------------------------#
#  OVERWRITTEN METHODS
#------------------------------------------------------------------------------#
#  class Spriteset_Battle
#    - create_enemies
#    - create_actors
#    - update_actors
#------------------------------------------------------------------------------#
 
 
    #----------------------#
#---|   GAME_INTERPRETER   |----------------------------------------------------
    #----------------------#
 
class Game_Interpreter
  def change_battler(id,name )
    $game_actors[id].animated_battler = name
  end
end # Game_Interpreter
 
 
    #-------------------#
#---|   RPG::BASEITEM   |-------------------------------------------------------
    #-------------------#
 
class RPG::BaseItem
  def pose
    if @pose.nil?
      if @note =~ /<pose: (.*)>/i
        @pose = $1.to_i
      else
        @pose = nil
      end
    end
    @pose
  end
end # RPG::BaseItem
 
 
    #----------------------#
#---|   GAME_BATTLERBASE   |----------------------------------------------------
    #----------------------#
 
class Game_BattlerBase
  alias galv_animb_gbb_appear appear
  def appear
    return if SceneManager.scene_is?(Scene_Map)
    galv_animb_gbb_appear
  end
end # Game_BattlerBase
 
 
    #------------------#
#---|   GAME_BATTLER   |--------------------------------------------------------
    #------------------#
 
class Game_Battler < Game_BattlerBase
  attr_accessor :animated_battler
  attr_accessor :pose
  attr_accessor :freeze_pose
  attr_accessor :bactivated
  attr_accessor :move_target
  attr_accessor :orx
  attr_accessor :ory
  attr_accessor :reset_pose
  attr_accessor :move_speed
  
  def setup_animated_battler
    @pose = 0
    @move_speed = 0
    char = actor? ? actor : enemy
    @animated_battler = $1 if char.note =~ /<battler:[ ](.*)>/i
  end
  
  def do_pose(col)
    @reset_pose = true
    @pose = col
    @freeze_pose = true if GALV_BAT::ONE_ANIM.include?(@pose)
  end
  
  alias galv_animb_gbgbb_on_turn_end on_turn_end
  def on_turn_end
    galv_animb_gbgbb_on_turn_end
    set_idle_pose
  end
  
  alias galv_animb_gbgbb_on_action_end on_action_end
  def on_action_end
    galv_animb_gbgbb_on_action_end
    set_idle_pose
  end
  
  def set_idle_pose
    return if !@bactivated
    if death_state?
      do_pose(12)
    elsif guard?
      do_pose(1)
    elsif !@states.empty?
      do_pose(state_pose)
    elsif low_life?
      do_pose(2)
    else
      do_pose(0)
    end
    @freeze_pose = false unless GALV_BAT::ONE_ANIM.include?(@pose)
  end
  
  def low_life?
    @hp < (mhp * GALV_BAT::HP_CRISIS)
  end
  
  def state_pose
    prio = 0
    prio_state = 0
    @states.each { |sid|
      if $data_states[sid].priority > prio
        prio_state = sid
        prio = $data_states[sid].priority
      end
    }
    if prio_state <= 0 || !$data_states[prio_state].pose
      return 2
    else
      $data_states[prio_state].pose
    end
  end
 
  alias galv_animb_gbgbb_add_state add_state
  def add_state(state_id)
    galv_animb_gbgbb_add_state(state_id)
    set_idle_pose
  end
  
  alias galv_animb_gbgbb_remove_state remove_state
  def remove_state(state_id)
    dead = dead?
    galv_animb_gbgbb_remove_state(state_id)
    set_idle_pose if state_id != 1 && !dead? || dead
  end
  
  alias galv_animb_gbgbb_execute_damage execute_damage
  def execute_damage(user)
    perform_get_hit if @result.hp_damage > 0
    galv_animb_gbgbb_execute_damage(user)
    if !$imported["YEA-BattleEngine"]
      SceneManager.scene.wait(15)
      set_idle_pose
    end
  end
  
  def perform_get_hit
    if !dead? && !guard? && $game_party.in_battle && @animated_battler
      do_pose(3)
      @sprite_effect_type = :get_hit
    end
  end
  
  def perform_counter_attack
    if !dead? && $game_party.in_battle && @animated_battler
      do_pose(GALV_BAT::COUNTER_ATTACK)
      @sprite_effect_type = :counter_attack
    end
  end
  
  def perform_magic_reflect
    if !dead? && $game_party.in_battle && @animated_battler
      do_pose(GALV_BAT::MAGIC_REFLECT)
      @sprite_effect_type = :counter_attack
    end
  end
 
  def perform_victory
    if !dead? && @animated_battler
      do_pose(10)
    end
  end
 
  def perform_enter_battle
    @bactivated = true
    if !dead? && @animated_battler
      @pose = 11
      @sprite_effect_type = :enter_battle
    end
  end
  
  def perform_dash(dash_type,target)
    if !dead? && @animated_battler
      @move_target = target
      pose = dash_type == :dash_forward ? 8 : 9
      do_pose(pose)
      @sprite_effect_type = dash_type
    end
  end
  
  def perform_travel(dash_type,target,speed)
    @move_target = target
    @move_speed = speed
    do_pose(8)
    @sprite_effect_type = dash_type
  end
  
  def moving?
    @move_speed > 0
  end
  
  def perform_dodge
    if !dead? && @animated_battler
      do_pose(GALV_BAT::EVASION[0])
      @sprite_effect_type = :dodge
    end
  end
 
  alias galv_animb_gbgbb_on_battle_start on_battle_start
  def on_battle_start
    perform_enter_battle
    galv_animb_gbgbb_on_battle_start
  end
 
  def init_animated_battler(i)
    @sprite_effect_type = :appear
    @bactivated = false
    @pose = alive? ? 11 : 12
    if actor?
      @screen_x = GALV_BAT::ACTOR_POSITIONS[i][0]
      @orx = GALV_BAT::ACTOR_POSITIONS[i][0]
      @screen_y = GALV_BAT::ACTOR_POSITIONS[i][1]
      @ory = GALV_BAT::ACTOR_POSITIONS[i][1]
    else
      @orx = @screen_x
      @ory = @screen_y
    end
  end
  
  def reinit_battler(i)
    if actor?
      @screen_x = GALV_BAT::ACTOR_POSITIONS[i][0]
      @orx = GALV_BAT::ACTOR_POSITIONS[i][0]
      @screen_y = GALV_BAT::ACTOR_POSITIONS[i][1]
      @ory = GALV_BAT::ACTOR_POSITIONS[i][1]
    else
      @orx = @screen_x
      @ory = @screen_y
    end
    @bactivated = true
  end
  
  alias galv_animb_gbgbb_item_apply item_apply
  def item_apply(user, item)
    galv_animb_gbgbb_item_apply(user, item)
    if @result.evaded
      perform_dodge
    end
  end
end # Game_Battler < Game_BattlerBase
 
 
    #----------------#
#---|   GAME_ACTOR   |----------------------------------------------------------
    #----------------#
 
class Game_Actor < Game_Battler
  attr_accessor :screen_x
  attr_accessor :screen_y
  
  def screen_x; screen_x = @screen_x; end
  def screen_y; screen_y = @screen_y; end
  def screen_z; 100; end
  
  alias galv_animb_gagb_initialize initialize
  def initialize(actor_id)
    galv_animb_gagb_initialize(actor_id)
    setup_animated_battler
    @screen_x = 0
    @screen_y = 0
  end
  
  def sub_pose(target)
    if !dead? && @animated_battler
      return if $data_actors[@actor_id].note =~ /<stationary_sub>/i
      @screen_x = target.screen_x - GALV_BAT::SXOFFSET
      @screen_y = target.screen_y - GALV_BAT::SYOFFSET
      @sprite_effect_type = :substitute
    end
  end
  
  def return_to_position
    if !dead? && @animated_battler
      @screen_x = @orx
      @screen_y = @ory
    end
  end
end # Game_Actor < Game_Battler
 
 
    #----------------#
#---|   GAME_ENEMY   |----------------------------------------------------------
    #----------------#
 
class Game_Enemy < Game_Battler
  alias galv_animb_gegb_initialize initialize
  def initialize(index, enemy_id)
    galv_animb_gegb_initialize(index, enemy_id)
    setup_animated_battler
  end
  
  def sub_pose(target)
    if !dead? && @animated_battler
      return if $data_enemies[@enemy_id].note =~ /<stationary_sub>/i
      @screen_x = target.screen_x + GALV_BAT::SXOFFSET
      @screen_y = target.screen_y + GALV_BAT::SYOFFSET
      @sprite_effect_type = :substitute
    end
  end
  
  def return_to_position
    if !dead? && @animated_battler
      @screen_x = @orx
      @screen_y = @ory
    end
  end
end # Game_Enemy < Game_Battler
 
 
    #-------------------#
#---|   BATTLEMANAGER   |-------------------------------------------------------
    #-------------------#
 
module BattleManager
  class << self
    alias galv_animb_bm_process_victory process_victory
  end
  
  def self.process_victory
    $game_party.battle_members.each { |actor| actor.perform_victory }
    galv_animb_bm_process_victory
  end
end # BattleManager
 
 
    #------------------#
#---|   SCENE_BATTLE   |--------------------------------------------------------
    #------------------#
 
class Scene_Battle < Scene_Base
  alias galv_animb_sbsb_start start
  def start
    position_battlers
    galv_animb_sbsb_start
  end
 
  def position_actors
    $game_party.battle_members.each_with_index { |battler,i|
      battler.reinit_battler(i)
    }
    @spriteset.refresh_actors
  end
  
  def position_battlers
    galv_all_battle_members.each_with_index { |battler,i|
      battler.init_animated_battler(i)
    }
  end
  
  def galv_all_battle_members
    $game_party.battle_members + $game_troop.members
  end
  
  alias galv_animb_sbsb_show_animation show_animation
  def show_animation(targets, animation_id)
    @move_target = targets[0]
    check_dash
    set_pose
    galv_animb_sbsb_show_animation(targets, animation_id)
  end
  
  def check_dash
    move = move_to_target
    if move > 0
      @subject.perform_travel(:move_forward,@move_target,move)
      update_for_wait while @subject.moving?
    elsif move == 0
      @subject.perform_dash(:dash_forward,@move_target)
      wait(30)
    end
  end
  
  def move_to_target
    return -1 if no_action && !@moveitem
    @moveitem ||= @subject.current_action.item
    return $1.to_i if @moveitem.note =~ /<melee: (.*)>/i
    if @moveitem.is_a?(RPG::Skill) && @moveitem.id == 1
      char = @subject.actor? ? $data_actors[@subject.id] : 
        $data_enemies[@subject.enemy_id]
      return $1.to_i if char.note =~ /<melee: (.*)>/i
    end
    return -1
  end
  
  def no_action
    !@subject || !@subject.current_action || !@subject.current_action.item
  end
  
  alias galv_animb_sbsb_process_action_end process_action_end
  def process_action_end
    if @subject.screen_x != @subject.orx
      @subject.perform_dash(:dash_back,@subject)
      wait(25)
    end
    galv_animb_sbsb_process_action_end
    @moveitem = nil
  end
  
  alias galv_animb_sbsb_invoke_counter_attack invoke_counter_attack
  def invoke_counter_attack(target,item)
    target.perform_counter_attack
    galv_animb_sbsb_invoke_counter_attack(target,item)
  end
  
  alias galv_animb_sbsb_invoke_magic_reflection invoke_magic_reflection
  def invoke_magic_reflection(target, item)
    target.perform_magic_reflect
    galv_animb_sbsb_invoke_magic_reflection(target, item)
  end
    
  def set_pose
    return if no_action
    item = @subject.current_action.item
    if item.is_a?(RPG::Skill)
      case item.id
      when 2  # guard
        @subject.do_pose(1)
      when 1  # attack
        @subject.do_pose(4)
        wait(20) if $imported["YEA-BattleEngine"]
      else
        unique = item.pose ? item.pose : 6
        @subject.do_pose(unique)
      end
    elsif item.is_a?(RPG::Item)
      unique = item.pose ? item.pose : 5
      @subject.do_pose(unique)
      wait(30) if $imported["YEA-BattleEngine"]
    end
  end
end # Scene_Battle < Scene_Base
 
 
    #----------------------#
#---|   WINDOW_BATTLELOG   |----------------------------------------------------
    #----------------------#
 
class Window_BattleLog < Window_Selectable
  alias galv_animb_wblws_display_substitute display_substitute
  def display_substitute(substitute, target)
    substitute.sub_pose(target)
    galv_animb_wblws_display_substitute(substitute, target)
  end
end
 
 
    #----------------------#
#---|   SPRITESET_BATTLE   |----------------------------------------------------
    #----------------------#
 
class Spriteset_Battle
  #OVERWRITE
  def create_enemies
    @enemy_sprites = $game_troop.members.reverse.collect do |enemy|
      if enemy.animated_battler
        Sprite_AnimBattler.new(@viewport1, enemy)
      else
        Sprite_Battler.new(@viewport1, enemy)
      end
    end
  end
  
  # OVERWRITE
  def create_actors
    @actor_sprites = $game_party.battle_members.reverse.collect do |actor|
      Sprite_ActorBattler.new(@viewport1, actor)
    end
  end
  
  # OVERWRITE
  def update_actors
    need_update = false
    @actor_sprites.each_with_index do |sprite, i|
      sprite.battler = $game_party.battle_members[i]
      if sprite.battler
        sprite.update
      else
        need_update = true
      end
    end
    need_update = true if @actor_sprites.count < $game_party.battle_members.count
    if need_update
      SceneManager.scene.position_actors
    end
  end
  
  def refresh_actors
    dispose_actors
    create_actors
  end
end # Spriteset_Battle
 
 
    #--------------------#
#---|   SPRITE_BATTLER   |------------------------------------------------------
    #--------------------#
 
class Sprite_Battler < Sprite_Base
  alias galv_animb_spritebsb_update update
  def update
    if @battler && @battler.animated_battler && @galv_animb
      super
    else
      galv_animb_spritebsb_update
    end
  end
end # Sprite_Battler < Sprite_Base
 
 
    #------------------------#
#---|   SPRITE_ANIMBATTLER   |--------------------------------------------------
    #------------------------#
 
class Sprite_AnimBattler < Sprite_Battler
  def initialize(viewport, battler = nil)
    init_variables
    super(viewport,battler)
  end
 
  def init_variables
    @pattern = 0
    @speed_timer = 0
    @pose = 0
    @galv_animb = true
  end
 
  def update
    if @battler && @battler.animated_battler
      update_bitmap
      update_pose
      update_src_rect
      update_anim
      update_position
      setup_new_effect
      setup_new_animation
      update_effect
    end
    super
  end
  
 class RPG::EquipItem # vedi la guida di RPG Maker
  # restituisce la grafica di battaglia
  def battler_graphic(actor_id)
    @battler_graphic ||= get_battler_graphic
    @battler_graphic[actor_id] ||= ''
  end
 
  # ottiene il nome della grafica dalle note
  def get_battler_graphic
    @battler_graphic = {}
    self.note.split(/[\r\n]+/).each {|line|
      @battler_graphic[$1.to_i] = $2 if line =~ /<grafica eroe (\d+):[ ]*(.+)>/
    }
    '' # restituisce una stringa vuota se non c'è
  end
end
 
def generate_battler_bitmap(actor)
  base_bitmap = Cache.battler(actor.animated_battler, 0) # è un esempio, base_bitmap dovrebbe avere la grafica dell'eroe nudo
  base_bitmap = base_bitmap.clone # ne faccio un clone per non sporcare la bitmap nella cache
  rect = Rect.new(0, 0, base_bitmap.width, base_bitmap.height)
  actor.equips.each {|equip| # per ogni equipaggiamento
    next if equip.nil? # passo al prossimo se l'equip non esiste
      if !equip.battler_graphic(actor.id).empty? # se la stringa non è vuota
        base_bitmap.blt(0, 0, Cache.battler(equip.battler_graphic(actor.id), 0), rect)
      end
    }
  base_bitmap # restituisco la bitmap elaborata
end
  
  def update_bitmap
    generate_battler_bitmap(1)
    #new_bitmap = Cache.battler(@battler.animated_battler,
     # @battler.battler_hue)
    if bitmap != base_bitmap
      self.bitmap = base_bitmap
      spritesheet_normal
      init_visibility
    end
  end
 
  def spritesheet_normal
    @cw = 384 / GALV_BAT::COLS
    @ch = 1344 / GALV_BAT::ROWS
    self.ox = @cw / 2
    self.oy = @ch
    set_mirror
  end
 
  def set_mirror
    self.mirror = GALV_BAT::ENEMY_FLIP
  end
 
  def update_pose
    if @pose != @battler.pose
      @pattern = 0
      @pose = @battler.pose
    end
    if @battler.reset_pose
      @pose = 0
      @battler.reset_pose = false
    end
  end
 
  def update_src_rect
    if @pattern >= GALV_BAT::COLS
      @pattern = 0 unless freeze_pose?
    end
    sx = @pattern * @cw
    sy = @battler.pose * @ch
    self.src_rect.set(sx, sy, @cw, @ch)
  end
 
  def freeze_pose?
    @battler.freeze_pose && @pattern == GALV_BAT::COLS - 1
  end
 
  def update_anim
    return if !@battler.bactivated
    @speed_timer += 1
    if @speed_timer > 8
      @pattern += 1 unless freeze_pose?
      @speed_timer = 0
    end
  end
 
  def update_position
    self.x = @battler.screen_x
    self.y = @battler.screen_y
    self.z = @battler.screen_z
  end
 
  def start_effect(effect_type)
    @effect_type = effect_type
    case @effect_type
    when :counter_attack,:magic_reflect,:get_hit
      @effect_duration = 40
      @battler_visible = true
    when :enter_battle
      @effect_duration = 35
      @battler_visible = true
    when :dash_forward,:dash_back
      @effect_duration = 15
      @battler_visible = true
    when :move_forward
      @effect_duration = 500
      @move_duration = @effect_duration
      @battler_visible = true
    when :dodge
      @effect_duration = 20
      @battler_visible = true
    when :substitute
      @effect_duration = 20
      @battler_visible = true
    end
    super
  end
 
  def update_effect
    if @effect_duration > 0
      case @effect_type
      when :get_hit, :substitute
        update_generic_pose
      when :counter_attack,:magic_reflect
        update_counter
      when :enter_battle
        update_enter_battle
      when :dash_forward
        update_dash_forward
      when :move_forward
        update_move_forward
      when :dash_back
        update_dash_back
      when :dodge
        update_dodge
      end
    end
    super
  end
 
  def revert_to_normal
    return if do_revert?
    super
    spritesheet_normal
  end
  
  def do_revert?
    @effect_type == :whiten || @battler.dead?
  end
 
  def update_generic_pose
    if @effect_duration == 1
      @battler.return_to_position
      @battler.set_idle_pose
    end
  end
  
  def xoff; @battler.actor? ? GALV_BAT::XOFFSET : -GALV_BAT::XOFFSET; end
  def yoff; @battler.actor? ? GALV_BAT::YOFFSET : -GALV_BAT::YOFFSET; end
 
  def update_dash_forward
    if @battler.actor? && @battler.screen_x > Graphics.width / 2
      @battler.screen_x -= 3
    elsif @battler.enemy? && @battler.screen_x < Graphics.width / 2
      @battler.screen_x += 3
    end
    update_disappear
    if @effect_duration == 1
      @battler.screen_x = @battler.move_target.screen_x + xoff
      @battler.screen_y = @battler.move_target.screen_y + yoff
      start_effect(:appear)
    end
  end
  
  def update_dash_back
    if @battler.actor? && @battler.screen_x < Graphics.width / 2
      @battler.screen_x += 3
    elsif @battler.enemy? && @battler.screen_x > Graphics.width / 2
      @battler.screen_x -= 3
    end
    update_disappear
    if @effect_duration == 1
      @battler.screen_x = @battler.move_target.orx
      @battler.screen_y = @battler.move_target.ory
      start_effect(:appear)
    end
  end
  
  def update_move_forward
    if @battler.actor?
      @battler.screen_x -= x_difference(@battler,@battler.move_target)
    elsif @battler.enemy?
      @battler.screen_x += x_difference(@battler,@battler.move_target)
    end
    @battler.screen_y += y_difference(@battler,@battler.move_target)
  end
 
  def y_difference(bat,tar)
    yof = bat.actor? ? yoff : -yoff
    y_diff = bat.ory - (tar.screen_y + yof)
    x_diff = bat.orx - (tar.screen_x + xoff)
    y_move = y_diff.to_f / (x_diff.to_f / [@battler.move_speed,1].max).to_f
    return bat.actor? ? -y_move : y_move
  end
  
  def x_difference(bat,tar)
    if bat.actor? && bat.screen_x <= (tar.screen_x + xoff) ||
        bat.enemy? && bat.screen_x >= (tar.screen_x + xoff)
      @battler.move_speed = 0
      @effect_duration = 1
      return 0
    end
    return @battler.move_speed
  end
  
  def update_dodge
    if @effect_duration == 1
      @battler.screen_x = @battler.orx
      @battler.screen_y = @battler.ory
      @battler.set_idle_pose
    elsif @effect_duration >= 10
      @battler.actor? ? @battler.screen_x += 3 : @battler.screen_x -= 3
    else
      @battler.pose = GALV_BAT::EVASION[1]
      @battler.actor? ? @battler.screen_x -= 3 : @battler.screen_x += 3
    end
  end
 
  def update_enter_battle
    if @effect_duration == 1
      @battler.bactivated = true
      @battler.set_idle_pose
    end
  end
 
  def update_counter
    self.color.set(255, 255, 255, 0)
    self.color.alpha = 128 - (26 - @effect_duration) * 10
    @battler.set_idle_pose if @effect_duration == 1
  end
 
  def update_collapse; end
end # Sprite_AnimBattler < Sprite_Base
 
 
    #-------------------------#
#---|   SPRITE_ACTORBATTLER   |-------------------------------------------------
    #-------------------------#
 
class Sprite_ActorBattler < Sprite_AnimBattler
  def initialize(viewport, battler = nil)
    super(viewport,battler)
  end
  
  def dispose; super; end
  def update; super; end
 
  def set_mirror
    self.mirror = GALV_BAT::ACTOR_FLIP
  end
 
  def update_position
    self.x = @battler.screen_x
    self.y = @battler.screen_y
    self.z = @battler.screen_z
  end
  
  def init_visibility
    self.opacity = 255
  end
end # Sprite_ActorBattler < Sprite_AnimBattler
 
 
    #------------------------#
#---|   WINDOW_BATTLEENEMY   |--------------------------------------------------
    #------------------------#
 
class Window_BattleEnemy < Window_Selectable
  if $imported["YEA-BattleEngine"]
    def create_flags
      set_select_flag(:any)
      select(-1)
      return if $game_temp.battle_aid.nil?
      if $game_temp.battle_aid.need_selection?
        select(-1)
      elsif $game_temp.battle_aid.for_all?
        select(-1)
        set_select_flag(:all)
      elsif $game_temp.battle_aid.for_random?
        select(-1)
        set_select_flag(:random)
      end
    end
  end
end # Window_BattleEnemy < Window_Selectable 

 

 

Edited by Killer Van
Link to comment
Share on other sites

  • 0

undefined method 'animated_battler' for 1:Fixnum

ti sta dicendo che non esiste il metodo 'animated_battler' di un semplice numero. E mi pare anche giusto, perché da un numero dovrebbe ricavare l'eroe?

Primo problema: gli passi un numero e non l'eroe.

Secondo problema: hai messo la generazione della bitmap nell'update. Il metodo blt è time-consuming, cioè influisce nelle prestazioni. Farlo n volte per ogni frame rallenterà non poco il gioco.

La bitmap deve essere elaborata SOLO all'inizio, non ad ogni frame.

Vedo che all'inizio della classe, viene inizializzata anche con il parametro battler. Questo sarà sicuramente un Game_Battler, quindi un eroe o un nemico.

Il secondo problema quindi è che non fa differenza sul se sia un eroe o un mostro, e quindi quando cercherà di trovare le armi equipaggiate di un nemico ti andrà in crash.

 

Sempre per battler, è probabile che l'oggetto che cerchi è @battler. È questo che devi passargli, ricordandoti che la bitmap la devi generare solo se è un eroe (if @battler.actor?)

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

http://holyres.altervista.org/UserBoard/BannerOverdrive35.png
http://holyres.altervista.org/UserBoard/Cap3.png

http://www.indiexpo.net/signature/578.png

Miei script per RPG Maker VX Ace:


*NB Tutti i miei script sono protetti da licenza CC - BY http://i.creativecommons.org/l/by/3.0/88x31.png

Questa licenza permette a terzi di distribuire, modificare, ottimizzare ed utilizzare la tua opera come base, anche commercialmente, fino a che ti diano il credito per la creazione originale. Questa è la più accomodante delle licenze offerte. É raccomandata per la diffusione e l'uso massimo di materiali coperti da licenza.

 

 



I miei tutorial:


Come distribuire il gioco - e anche come creare un'installazione professionale!
RGSS in pillole - Guida completa e facile all'RGSS2 e RGSS3 per novizi ed esperti
Come mappare con VX (e VX Ace) - guida base all'uso degli strumenti del mapping
Loop delle musiche - come tagliarle in modo da far venire musiche continue senza interruzioni finali
Creare backup dei progetti - per evitare di uccidervi dopo un errore che ha fatto perdere tutto!

Link to comment
Share on other sites

  • 0

1 - Quindi nelle parentesi dovrei scrivere qualcosa come ($data_actors[1]) ?

2 - Lo so, infatti nello script che avevo scritto all'inizio avevo messo body.blt fuori dall'update, mentre i materiali per fare la sovrapposizione dentro l'update; e, a dir la verità, non so neanche perchè tutto funzionava (il gioco non laggava e lo sprite dell'battler era quello giusto).

 

 

body = Cache.zeck('corpo',0)
copricapo_capelli = Cache.zeck_copricapo('copricapo_capelli', 0)
body.blt(0, 0,  copricapo_capelli, Rect.new(0, 0, 384, 1344))

def update_bitmap
     body = Cache.zeck('corpo',0)
     copricapo_capelli = Cache.zeck_copricapo('copricapo_capelli', 0)
    if bitmap != body
      self.bitmap = body
      spritesheet_normal
      init_visibility
    end
  end

 

In questo caso come posso fare?

Perchè da quello che ho capito lui non genera una bitmap e la utilizza, ma continua a caricarla dal file

script di Galv :

 

def update_bitmap

    new_bitmap = Cache.battler(@battler.animated_battler,
      @battler.battler_hue)
    if bitmap != base_bitmap
      self.bitmap = base_bitmap
      spritesheet_normal
      init_visibility
    end
  end 

 

 

3 - Quindi lo script finale dovrebbe essere così

 

def generate_battler_bitmap(actor)
  if @battler.actor?
  base_bitmap = Cache.battler(actor.animated_battler, 0) # è un esempio, base_bitmap dovrebbe avere la grafica dell'eroe nudo
  base_bitmap = base_bitmap.clone # ne faccio un clone per non sporcare la bitmap nella cache
  rect = Rect.new(0, 0, base_bitmap.width, base_bitmap.height)
  actor.equips.each {|equip| # per ogni equipaggiamento
    next if equip.nil? # passo al prossimo se l'equip non esiste
      if !equip.battler_graphic(actor.id).empty? # se la stringa non è vuota
        base_bitmap.blt(0, 0, Cache.battler(equip.battler_graphic(actor.id), 0), rect)
      end
      end
    }
  base_bitmap # restituisco la bitmap elaborata
end

 

???

Edited by Killer Van
Link to comment
Share on other sites

  • 0

Ma diamine, ma se scrivi $data_actors[1] non significa che gli darai SOLO il primo eroe?

Vuoi che tutti i mostri e gli eroi abbiano la stessa grafica?

if @battler.actor?
e dov'è l'end?

Te lo devo fare tutto io lo script, oppure vuoi imparare e quindi solo qualche aiuto? Non ho capito.

A questo punto dovresti capire come fare una condizione, ti ho anche dato una guida

La condizione deve stare all'esterno: se è un eroe, usa questo metodo. Altrimenti no.

Dovevi chiamare il metodo con generate_battler_bitmap(@battler.base_bitmap)

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

http://holyres.altervista.org/UserBoard/BannerOverdrive35.png
http://holyres.altervista.org/UserBoard/Cap3.png

http://www.indiexpo.net/signature/578.png

Miei script per RPG Maker VX Ace:


*NB Tutti i miei script sono protetti da licenza CC - BY http://i.creativecommons.org/l/by/3.0/88x31.png

Questa licenza permette a terzi di distribuire, modificare, ottimizzare ed utilizzare la tua opera come base, anche commercialmente, fino a che ti diano il credito per la creazione originale. Questa è la più accomodante delle licenze offerte. É raccomandata per la diffusione e l'uso massimo di materiali coperti da licenza.

 

 



I miei tutorial:


Come distribuire il gioco - e anche come creare un'installazione professionale!
RGSS in pillole - Guida completa e facile all'RGSS2 e RGSS3 per novizi ed esperti
Come mappare con VX (e VX Ace) - guida base all'uso degli strumenti del mapping
Loop delle musiche - come tagliarle in modo da far venire musiche continue senza interruzioni finali
Creare backup dei progetti - per evitare di uccidervi dopo un errore che ha fatto perdere tutto!

Link to comment
Share on other sites

  • 0

Voglio capire come funziona, non voglio che tu mi scriva lo script, ho scritto $data_actors[1] riferendomi a quando utilizzo il comando (ovviamente riferendomi a quello che ho scritto nel messaggio precedente)

L'end l'ho messo, nello script che avevi scritto tu, c'erano 2 end, adesso ce ne sono 3.

 

poi, per ottenere la bitmap(non so dove tu voglia metterla)

 

  • def generate_battler_bitmap(actor)
  • base_bitmap = Cache.battler(actor.base_bitmap, 0) # è un esempio, base_bitmap dovrebbe avere la grafica dell'eroe nudo
  • base_bitmap = base_bitmap.clone # ne faccio un clone per non sporcare la bitmap nella cache
  • rect = Rect.new(0, 0, base_bitmap.width, base_bitmap.height)
  • actor.equips.each {|equip| # per ogni equipaggiamento
  • next if equip.nil? # passo al prossimo se l'equip non esiste
  • if !equip.battler_graphic.empty? # se la stringa non è vuota
  • base_bitmap.blt(0, 0, Cache.battler(equip.battler_graphic, 0), rect)
  • end
  • }
  • base_bitmap # restituisco la bitmap elaborata
  • end
Comunque

ho provato a mettere l'if fuori e mi dice che actor? non è definito in Nil Class

 

Consigli?

Edited by Killer Van
Link to comment
Share on other sites

  • 0

Allora, da quello che ho capito dovrei scrivere

 

 

def generate_battler_bitmap(@battler.base_bitmap)

base_bitmap = Cache.battler(actor.base_bitmap, 0) # è un esempio, base_bitmap dovrebbe avere la grafica dell'eroe nudo
base_bitmap = base_bitmap.clone # ne faccio un clone per non sporcare la bitmap nella cache
rect = Rect.new(0, 0, base_bitmap.width, base_bitmap.height)
actor.equips.each {|equip| # per ogni equipaggiamento
next if equip.nil? # passo al prossimo se l'equip non esiste
if !equip.battler_graphic(actor.id).empty? # se la stringa non è vuota
base_bitmap.blt(0, 0, Cache.battler(equip.battler_graphic(actor.id), 0), rect)
end
}
base_bitmap # restituisco la bitmap elaborata
end

 

 

poi quando utilizzo questo metodo devo mettere l'if prima e l'end dopo

Ma nelle parentesi quando utilizzo il metodo cosa devo scrivere, o meglio come posso definire base_bitmap in Game Battler?

e poi dove devo generare la bitmap? Forse in Scene Battle?

Link to comment
Share on other sites

  • 0

Ok, ok, ricominciamo dalle basi, perché sono quelle che mancano.

Prima di tutto, devi capire il concetto di programmazione orientata ad oggetti, delle classi e delle istanze.

Invece di spiegarlo per l'ennesima volta qui, ti consiglio di leggere la mia guida dalla pagina 33.

 

Letto? Bene.

 

Ora, sono andato a scaricare il codice originale dello script, ed ho trovato subito questo

immagine.png

Come vedi, c'è già un attributo pubblico che è animated_battler.

Dove viene usato? Cerchiamo nel codice…

Screenshot_2.png

Più o meno avevi azzeccato, ma fatto sta che caricare l'immagine dalla Cache è una cosa, riprodurla ad ogni frame è un'altra.

Devi fare in modo che se l'immagine dell'eroe è già elaborata, la salvi nella Cache, altrimenti la elabori. Così solo la prima volta verrà elaborata, mentre le altre volte sarà semplicemente caricata.

A questo punto, è la Cache che dovrebbe creare l'immagine (e salvarla), del come spero che ci arriverai da solo.

Ovviamente, dovrai fare anche in modo che al cambiamento dell'equipaggiamento, quell'immagine venga reimpostata.

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

http://holyres.altervista.org/UserBoard/BannerOverdrive35.png
http://holyres.altervista.org/UserBoard/Cap3.png

http://www.indiexpo.net/signature/578.png

Miei script per RPG Maker VX Ace:


*NB Tutti i miei script sono protetti da licenza CC - BY http://i.creativecommons.org/l/by/3.0/88x31.png

Questa licenza permette a terzi di distribuire, modificare, ottimizzare ed utilizzare la tua opera come base, anche commercialmente, fino a che ti diano il credito per la creazione originale. Questa è la più accomodante delle licenze offerte. É raccomandata per la diffusione e l'uso massimo di materiali coperti da licenza.

 

 



I miei tutorial:


Come distribuire il gioco - e anche come creare un'installazione professionale!
RGSS in pillole - Guida completa e facile all'RGSS2 e RGSS3 per novizi ed esperti
Come mappare con VX (e VX Ace) - guida base all'uso degli strumenti del mapping
Loop delle musiche - come tagliarle in modo da far venire musiche continue senza interruzioni finali
Creare backup dei progetti - per evitare di uccidervi dopo un errore che ha fatto perdere tutto!

Link to comment
Share on other sites

  • 0

Da quello che ho capito per crearla bisogna utilizzare generate_battler_bitmap, mentre per caricarla dalla Cache ad ogni frame bisogna scrivere una cosa così?

 

 

def update_bitmap
    new_bitmap = Cache.battler(base_bitmap, 0)
    if bitmap != new_bitmap
      self.bitmap = new_bitmap
      spritesheet_normal
      init_visibility
    end
  end 

 

 

dove base_bitmap appunto è la grafica con armatura dell'eroe.

Ma non ho ancora capito come creare questa bitmap, non so come utilizzare o meglio adattare al mio progetto questa parte di script che mi hai dato:

 

 

def generate_battler_bitmap(actor)
  base_bitmap = Cache.battler(actor.base_bitmap, 0) # è un esempio, base_bitmap dovrebbe avere la grafica dell'eroe nudo
  base_bitmap = base_bitmap.clone # ne faccio un clone per non sporcare la bitmap nella cache
  rect = Rect.new(0, 0, base_bitmap.width, base_bitmap.height)
  actor.equips.each {|equip| # per ogni equipaggiamento
    next if equip.nil? # passo al prossimo se l'equip non esiste
      if !equip.battler_graphic(actor.id).empty? # se la stringa non è vuota
        base_bitmap.blt(0, 0, Cache.battler(equip.battler_graphic(actor.id), 0), rect)
      end
    }
  base_bitmap # restituisco la bitmap elaborata
end 

 

 

Consigli?
Link to comment
Share on other sites

  • 0

E dalle… Dimentica base_bitmap, non esiste, è un esempio (come descritto appunto nel commento), non è che dando nomi a caso funziona!

Ti ho appena fatto uno Screenshot dell'attributo da utilizzare, quello è il nome dell'immagine del battler dell'eroe, bastava cercare l'attributo vero come avevo detto!

Ti ho anche detto che il metodo per generare la bitmap è meglio piazzarlo nella Cache!

Sembra che il mio ultimo post non sia proprio stato letto!

Allora, quello che dovevi fare era

module Cache
  def self.actor_battler(filename, actor)
    if include?('battler_' + filename)
      load_bitmap('battler_', filename)
    else
      generate_battler_bitmap(filename, actor)
    end
  end

  def self.generate_battler_bitmap(filename, actor)
    base_bitmap = Cache.battler(filename, 0) # è un esempio, base_bitmap dovrebbe avere la grafica dell'eroe nudo
    base_bitmap = base_bitmap.clone # ne faccio un clone per non sporcare la bitmap nella cache
    rect = Rect.new(0, 0, base_bitmap.width, base_bitmap.height)
    actor.equips.each {|equip| # per ogni equipaggiamento
      next if equip.nil? # passo al prossimo se l'equip non esiste
      if !equip.battler_graphic(actor.id).empty? # se la stringa non è vuota
        base_bitmap.blt(0, 0, Cache.battler(equip.battler_graphic(actor.id), 0), rect)
      end
    }
    base_bitmap # restituisco la bitmap elaborata
  end

  # cancella l'immagine dell'eroe dalla cache
  def self.reset_actor_bitmap(filename)
    if include?('battler_' + filename)
      @cache['battler_' + filename] = nil
    end
  end
end
questo è ciò che dovrebbe essere aggiunto in Cache.

 

Per quanto riguarda lo script di Galv, questo era il metodo da modificare

class Sprite_AnimBattler < Sprite_AnimBattler
  def update_bitmap
    if @battler.actor?
      new_bitmap = Cache.actor_battler(@battler.animated_battler,
                                       @battler)
    else
      new_bitmap = Cache.battler(@battler.animated_battler,
                                 @battler.battler_hue)
    end
    if bitmap != new_bitmap
      self.bitmap = new_bitmap
      spritesheet_normal
      init_visibility
    end
  end
end
come vedi basta una condizione che se è l'eroe, carica il battler creato con l'equipaggiamento

 

infine, la cancellazione della bitmap nella Cache quando l'eroe cambia equipaggiamento, così da aggiornare l'immagine al prossimo caricamento

class Game_Actor < Game_Battler
  alias equip_change_graphic refresh unless $@ # alias del metodo refresh

  # viene chiamato quando si cambia equip
  def refresh
    equip_change_graphic # richiamo il metodo copiato
    Cache.reset_actor_bitmap(self.animated_battler)
  end
end
per la spiegazione sugli alias, come sempre leggi la guida.

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

http://holyres.altervista.org/UserBoard/BannerOverdrive35.png
http://holyres.altervista.org/UserBoard/Cap3.png

http://www.indiexpo.net/signature/578.png

Miei script per RPG Maker VX Ace:


*NB Tutti i miei script sono protetti da licenza CC - BY http://i.creativecommons.org/l/by/3.0/88x31.png

Questa licenza permette a terzi di distribuire, modificare, ottimizzare ed utilizzare la tua opera come base, anche commercialmente, fino a che ti diano il credito per la creazione originale. Questa è la più accomodante delle licenze offerte. É raccomandata per la diffusione e l'uso massimo di materiali coperti da licenza.

 

 



I miei tutorial:


Come distribuire il gioco - e anche come creare un'installazione professionale!
RGSS in pillole - Guida completa e facile all'RGSS2 e RGSS3 per novizi ed esperti
Come mappare con VX (e VX Ace) - guida base all'uso degli strumenti del mapping
Loop delle musiche - come tagliarle in modo da far venire musiche continue senza interruzioni finali
Creare backup dei progetti - per evitare di uccidervi dopo un errore che ha fatto perdere tutto!

Link to comment
Share on other sites

  • 0

Mi da questo errore:

Script 'battaglia' line 712 IndexError occurred.

index 1 out of string

riguarda l'assegnazione del file alle armature

class RPG::EquipItem # vedi la guida di RPG Maker
  # restituisce la grafica di battaglia
  def battler_graphic(actor_id)
    @battler_graphic ||= get_battler_graphic
    @battler_graphic[actor_id] ||= ''
  end
 
  # ottiene il nome della grafica dalle note
  def get_battler_graphic
    @battler_graphic = {}
    self.note.split(/[\r\n]+/).each {|line|
      @battler_graphic[$1.to_i] = $2 if line =~ /<grafica eroe (\d+):[ ]*(.+)>/
    }
    '' # restituisce una stringa vuota se non c'è
  end
end
 
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...