Rpg˛S Forum uses cookies. Read the Privacy Policy for more info. To remove this message, please click the button to the right:    I accept the use of cookies

Vai al contenuto

Rpg˛S Forum uses cookies. Read the Privacy Policy for more info. To remove this message, please click the button to the right:    I accept the use of cookies


  • Si prega di effettuare il log in prima di rispondere
Creare evento da script? - - - - -

    Mon
  • Nuovo Arrivato

  • Utenti
  • Rens: 0
  • 0
  • Stelletta
  • 11 messaggi
  • Sesso:Maschio
  • Abilitā:Esperto

#1 Inviato 10 January 2020 - 15:41 PM

class CreaEve
  def initialize(x, y)
    # event
    id = $game_map.events.size
    ev = RPG::Event.new(x, y)
    ev.id = id
    ev.name = "CreatoScript"
    ev.pages = [RPG::Event::Page.new]
    # pages
    ev.pages[0].condition = RPG::Event::Page::Condition.new
    ev.pages[0].graphic = RPG::Event::Page::Graphic.new
    ev.pages[0].move_type = 0
    ev.pages[0].move_speed = 3
    ev.pages[0].move_frequency = 3       
    ev.pages[0].move_route = RPG::MoveRoute.new
    ev.pages[0].walk_anime = true
    ev.pages[0].step_anime = false
    ev.pages[0].direction_fix = false
    ev.pages[0].through = false
    ev.pages[0].always_on_top = false
    ev.pages[0].trigger = 0
    ev.pages[0].list = [RPG::EventCommand.new]
    # condition
    ev.pages[0].condition.switch1_valid = false
    ev.pages[0].condition.switch2_valid = false
    ev.pages[0].condition.variable_valid = false
    ev.pages[0].condition.self_switch_valid = false
    # graphic
    ev.pages[0].graphic.tile_id = 0
    ev.pages[0].graphic.character_name = "Graphics/Characters/183-Rock02"
    ev.pages[0].graphic.character_hue = 0
    ev.pages[0].graphic.direction = 2
    ev.pages[0].graphic.pattern = 0
    ev.pages[0].graphic.opacity = 255
    ev.pages[0].graphic.blend_type = 0
    # game map
    $game_map.events[id] = ev
    #$game_map.refresh
  end
end

Salve, mi sarebbe molto comodo poter creare un evento da script, ho utilizzato il codice mostrato sopra ma... mi dice che il valore "starting" dell'evento non è valido, ho anche provato ad aggiungere "ev.strarting = " sia con false che con true ma niente, lo stesso con "ev.clear_starting"... ho momentaneamente disattivato "$game_map.refresh" per risolvere un problema alla volta.

 

Sapreste aiutarmi? Grazie.



    giver
  • Alex (Rm2k)

  • Utenti
  • Rens: 121
  • 0
  • StellettaStellettaStellettaStellettaStelletta
  • 1291 messaggi
  • Sesso:Maschio
  • Provenienza:The Creept - Room for Strangeness
  • Abilitā:Esperto

#2 Inviato 04 February 2020 - 13:21 PM

E' da parecchio che non posso usare RPG Maker XP, nè accedere all'help file (rpgxp.chm), quindi non posso analizzare quanto hai scritto.

 

Posso però dirti, ho appena ricontrollato in un vecchio script postato in questo forum, che la lista degli eventi sembra essere un hash, ossia un array associativo "chiave => valore", e perciò l'id che setti uguale a size potrebbe essere già tra le chiavi utilizzate.

un check di tipo

events.keys.include?(id)

dovrebbe assicurare di non sovrascrivere un evento già esistente.

Mi spiace di non poter fare di più.


Spoiler

    Mon
  • Nuovo Arrivato

  • Utenti
  • Rens: 0
  • 0
  • Stelletta
  • 11 messaggi
  • Sesso:Maschio
  • Abilitā:Esperto

#3 Inviato 04 February 2020 - 15:16 PM

class CreaEve
  def initialize(x, y)
    # event
    me = $game_map.events
    for i in 1...me.size
      if not me.keys.include?(i)
        id = i
        break
      end
    end
    print("#{id}\n#{$game_map.events.keys.include?(id)}")
    ev = RPG::Event.new(x, y)
    ev.id = id
    ev.name = "CreatoScript"
    ev.pages = [RPG::Event::Page.new]
    # pages
    ev.pages[0].condition = RPG::Event::Page::Condition.new
    ev.pages[0].graphic = RPG::Event::Page::Graphic.new
    ev.pages[0].move_type = 0
    ev.pages[0].move_speed = 3
    ev.pages[0].move_frequency = 3       
    ev.pages[0].move_route = RPG::MoveRoute.new
    ev.pages[0].walk_anime = true
    ev.pages[0].step_anime = false
    ev.pages[0].direction_fix = false
    ev.pages[0].through = false
    ev.pages[0].always_on_top = false
    ev.pages[0].trigger = 3
    ev.pages[0].list = [RPG::EventCommand.new]
    # condition
    ev.pages[0].condition.switch1_valid = false
    ev.pages[0].condition.switch2_valid = false
    ev.pages[0].condition.variable_valid = false
    ev.pages[0].condition.self_switch_valid = false
    # graphic
    ev.pages[0].graphic.tile_id = 0
    ev.pages[0].graphic.character_name = "Graphics/Characters/183-Rock02"
    ev.pages[0].graphic.character_hue = 0
    ev.pages[0].graphic.direction = 2
    ev.pages[0].graphic.pattern = 0
    ev.pages[0].graphic.opacity = 255
    ev.pages[0].graphic.blend_type = 0
    # game map
    me[id] = ev
    print("#{id}\n#{me.keys.include?(id)}")
    #$game_map.refresh
  end
end

Uhm... tranquillo, grazie comunque per avermi fatto capire di più il funzionamento, infatti non avevo preso in cosiderazione che eliminando alcuni eventi l'ID massimo disponibile non è pari al numero di eventi presenti (o magari +1), ecco perchè quel for all'inizio.

 

Effettivamente nel primo print, il codice suggerito da te, prima mi da false poi true, segno che l'evento non c'era poi c'è... eppure non cambia, mi da comunque l'errore dello starting, provando lo stesso vale con update e refresh, ma se risulta che esiste, perchè accade ciò? Mah.



    giver
  • Alex (Rm2k)

  • Utenti
  • Rens: 121
  • 0
  • StellettaStellettaStellettaStellettaStelletta
  • 1291 messaggi
  • Sesso:Maschio
  • Provenienza:The Creept - Room for Strangeness
  • Abilitā:Esperto

#4 Inviato 06 February 2020 - 11:17 AM

Prima di tutto, ti consiglio di cambiare l'estremo superiore del range usato per scegliere quale id usare.

Per due motivi: i tre punti lo escludono dal conteggio e dovrebbe essere meglio impostarlo all quantità massima di eventi mappa inseribili od anche più.

Poi, mi sembra che anche pages sia un Hash, che ha molte cose in comune con gli array tradizionali, ma che in realtà è composto da due array paralleli, keys e values.

L'istanziazione di un Hash si può fare in diversi modi.

h = {}

h = Hash[]

h = Hash.new

 

Le keys possono essere qualunque cosa, basta che non siano doppioni, ovvero devono essere uniche.

Attenzione, quindi, che h[0] = "ok1"

equivale a h.keys[i] = 0 e h.values[i] = "ok!", con valore di i che è uguale a h.keys.size o h.size prima dell'inserimento di tale coppia, se non era già presente nell'Hash, naturalmente.

hasharlecchinato = {nil => 78,

false => "vero!",

"OMG!" => true,

Game_Character => "oggetto personaggi su mappa",

6 => true,

[5, "no", true] => Game_SelfSwitches

}

 

Se vuoi tenerti uniformato a come l'editor aggiunge pagine all'evento, la prima pagina deve essere 1 e quindi dovresti scrivere qualcosa di simile a

event.pages = {1 => RPG::Event::Page.new}

 

Infine, mi sembra che prima di aggiungerlo alla lista degli eventi della mappa, tali dati vadano associati ad un'istanza di Game_Event.

Più di così non posso dire.

Buon Making!!


Spoiler




  • Feed RSS