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

Screen Contest #88

ReturnOfHylian
Ecco i risultati dell'Halloween Contest #3: Boss Fight! Commenta e studia i boss!



  • Si prega di effettuare il log in prima di rispondere
Script per condizioni utilizzo skill

    Lerry
  • Nuovo Arrivato

  • Utenti
  • Rens: 6
  • 2
  • Stelletta
  • 75 messaggi
  • Sesso:Maschio
  • Abilitā:Iniziato

#1 Inviato 11 August 2016 - 16:36 PM

Ciao a tutti, sto cercando di creare delle skill che si possano attivare sotto determinate condizioni, per rendere l'idea vi espongo cosa vorrei creare

La prima skill, vorrei che si attivasse solo quando il nemico sia sotto il 35% di vita(single target), e che in caso non rispetti i parametri, vorrei non fosse possibile utilizzarla.

La seconda invece vorrei che si attivasse solo quando il nemico fosse afflitto da un determinato stato (sorpreso) oppure quando il personaggio attaccante fosse sotto un'altro stato (furtività).

Sto cercando infatti uno script che mi riesca a bloccare queste skill, rendendole inutilizzabili (senza che il pg perda il turno) quando non rispettino queste condizioni. 

Grazie in anticipo.

 



    Guardian of Irael
  • Coniglietto Rosso

  • Rpg˛S Admin
  • Rens: 177
  • 12
  • StellettaStellettaStellettaStellettaStellettaStelletta
  • 56080 messaggi
  • Sesso:Maschio
  • Provenienza:Bagnaia (Viterbo)
  • Abilitā:Apprendista


#2 Inviato 11 August 2016 - 17:34 PM

Alcune di quelle cose potresti ricrearle ad eventi tramite eventi di battaglia.

Per esempio potresti scambiare una skill usabile in battaglia con una non usabile quando, tramite condizioni di battaglia, un nemico ha meno del 35% di vita. Puoi fare la condizione su tutti i nemici ed attivarla solo quando almeno un nemico ha così pochi hp.

La stessa cosa per lo status sorpreso. Puoi usare le condizioni.

Per quanto riguarda furtività è più semplice, basta la sola condizione sull'eroe che può avere quello status.

^ ^


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

 
Il mio Tumblr dove seguire i miei progetti, i progetti della Reverie : : Project ^ ^
 
KdUDtQt.png disponibile su Google Play, qui i dettagli! ^ ^
 
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) ^ ^

Spoiler

    Exim Gealbhonn
  • Utente avanzato

  • Utenti
  • Rens: 49
  • 2
  • StellettaStellettaStelletta
  • 355 messaggi
  • Sesso:Maschio
  • Abilitā:Esperto

#3 Inviato 11 August 2016 - 18:12 PM

Dovresti specificare quando dovrebbe avvenire il controllo (dal menù di selezione delle skill c'è un primo controllo? Oppure direttamente da quello di selezione del nemico?), comunque difficilmente troverai uno script che faccia cose così specifiche. In ogni caso ho fatto un piccolo scriptino che riproduce le 2 abilità che mi hai detto sopra, ossia che se il nemico (o il giocatore come nella seconda abilità) non rispetta determinati requisiti, quando si dovrà scegliere il nemico da attaccare ci sarà impedito e verrà riprodotto un suono di errore.

class Scene_Battle < Scene_Base
  alias sk_on_enemy_ok on_enemy_ok
  def on_enemy_ok
    if @skill!=nil
     if (@skill.id==80 && (@enemy_window.enemy.hp>@enemy_window.enemy.mhp/100*35))#  or (@skill.id==3 && (@enemy_window.enemy.state?(1)==false or BattleManager.actor.state?(2)==false))
       Sound.play_buzzer
       @enemy_window.activate
     else
       sk_on_enemy_ok
     end
   else
     sk_on_enemy_ok
   end
  end
end
      

Naturalmente saranno da modificare i vari ID delle abilità e degli status con gli ID che effettivamente ti servono.

Se ti serve una mano a comprendere la logica dello script chiedi pure!

 

P.s. In ogni caso, come ti ha detto Guardian, non sono così difficili da creare ad eventi come abilità, se non sei molto avvezzo con gli script ti sconsiglierei di usare il codice che ho scritto, impareresti ben poco



    Lerry
  • Nuovo Arrivato

  • Utenti
  • Rens: 6
  • 2
  • Stelletta
  • 75 messaggi
  • Sesso:Maschio
  • Abilitā:Iniziato

#4 Inviato 12 August 2016 - 11:36 AM

Grazie inanzitutto ad entrambi, mi avete dato delle soluzioni utilissime, però quello che cercavo in particolare era uno script come quello di Sora, mi ha semplificato decisamente il lavoro, visto che stavo pensando a molte skill con effetti simili.

Avevo provato anche lo script di yanfly (skill restriction) ma non conoscendo il linguaggio, avevo difficoltà a inserire la formula con il target.

Però mi è sorta un'altra domanda spontanea riguardo la soluzione proposta da guardian che mi piacerebbe approfondire:

Riguardo agli eventi battaglia ( da quello che ho capito gli eventi attivabili dal menù truppe nel database) dovrei però copiarli e incollarli in ogni singolo incontro in questo caso, o no?

E un altro dubbio riguardo allo script, potrei aggiungere quante skill voglio seguendo lo schema proposto dalle precedenti due?

Grazie veramente a tutti per questo aiuto :biggrin:


Modificato da Lerry, 12 August 2016 - 11:41 AM.


    Exim Gealbhonn
  • Utente avanzato

  • Utenti
  • Rens: 49
  • 2
  • StellettaStellettaStelletta
  • 355 messaggi
  • Sesso:Maschio
  • Abilitā:Esperto

#5 Inviato 12 August 2016 - 13:44 PM

Se ne vuoi aggiungere altre basta che metti un "or" alla fine e la programmi in modo non dissimile da quelle che ho scritto prima, in ogni caso dovresti avere un po' di praticità con gli operatori logici. Se hai bisogno di una mano chiedi pure!



    Lerry
  • Nuovo Arrivato

  • Utenti
  • Rens: 6
  • 2
  • Stelletta
  • 75 messaggi
  • Sesso:Maschio
  • Abilitā:Iniziato

#6 Inviato 12 August 2016 - 14:01 PM

Ho provato ad aggiungere una skill che richiede un determinato tipo di oggetto per essere attivata, e va bene quella skill funziona, ma la skill con gli stati si blocca, e ogni tanto anche il comando di attacco.

Devo aver sbagliato qualcosa

class Scene_Battle < Scene_Base
  alias sk_on_enemy_ok on_enemy_ok
  def on_enemy_ok
    if @skill!=nil
     if (@skill.id==148 && (@enemy_window.enemy.hp>@enemy_window.enemy.mhp/100*35))  or (@skill.id==145 && (@enemy_window.enemy.state?(29)==false or BattleManager.actor.state?(30)==false)) or (@skill.id==151 && ($game_party.item_number($data_items[21])<1))
       Sound.play_buzzer
       @enemy_window.activate
     else
       if (@skill.id==151 && ($game_party.item_number($data_items[21])>=1))
         $game_party.lose_item(($data_items[21]),1)
         sk_on_enemy_ok
       else
         sk_on_enemy_ok
       end
     end
   else
     sk_on_enemy_ok
   end
  end
end

EDIT

Il comando attacco si blocca subito dopo che mi blocca l'utilizzo di una skill (es. uso la skill con id 145, ma non rispetta le condizioni, quindi decido di utilizzare il comando attacco, ma anche questo risulta bloccato)


Modificato da Lerry, 12 August 2016 - 14:36 PM.


    Exim Gealbhonn
  • Utente avanzato

  • Utenti
  • Rens: 49
  • 2
  • StellettaStellettaStelletta
  • 355 messaggi
  • Sesso:Maschio
  • Abilitā:Esperto

#7 Inviato 12 August 2016 - 14:57 PM

Ops, non l'avevo testato prima di postarlo e mi sono dimenticato una cosa.

Sotto

Sound.play_buzzer

metti

@skill=nil

Modificato da Sora Keyblade, 12 August 2016 - 14:58 PM.


    Lerry
  • Nuovo Arrivato

  • Utenti
  • Rens: 6
  • 2
  • Stelletta
  • 75 messaggi
  • Sesso:Maschio
  • Abilitā:Iniziato

#8 Inviato 12 August 2016 - 15:02 PM

Ok ho risolto cosi', dovrebbe filare liscio

EDIT

adesso funziona ma c'è il problema che se seleziono due volte la skill parte in maniera automatica (es sempre la fantomatica skill 145 appena premuta quando non soddisfa le condizioni, rilascia il suono e il conseguente arresto, mentre se la premo una seconda volta parte la skill in automatico.

class Scene_Battle < Scene_Base
  alias sk_on_enemy_ok on_enemy_ok
  def on_enemy_ok
    if @skill!=nil
     if (@skill.id==148 && (@enemy_window.enemy.hp>@enemy_window.enemy.mhp/100*35))  or (@skill.id==145 && (@enemy_window.enemy.state?(29)==false or BattleManager.actor.state?(30)==false)) or (@skill.id==151 && ($game_party.item_number($data_items[21])<1))
       if (@skill.id==145 &&  (@enemy_window.enemy.state?(29)==true && BattleManager.actor.state?(30)==false))
         sk_on_enemy_ok
       else
         if (@skill.id==145 &&  (@enemy_window.enemy.state?(29)==false && BattleManager.actor.state?(30)==true))
           sk_on enemy_ok
           else
          Sound.play_buzzer
          @skill=nil
          @enemy_window.activate
          
        end
      end
     else
       if (@skill.id==151 && ($game_party.item_number($data_items[21])>=1))
         $game_party.lose_item(($data_items[21]),1)
         sk_on_enemy_ok
       else
         sk_on_enemy_ok
       end
     end
   else
     sk_on_enemy_ok
   end
  end
end

Modificato da Lerry, 12 August 2016 - 15:14 PM.


    Exim Gealbhonn
  • Utente avanzato

  • Utenti
  • Rens: 49
  • 2
  • StellettaStellettaStelletta
  • 355 messaggi
  • Sesso:Maschio
  • Abilitā:Esperto

#9 Inviato 12 August 2016 - 15:27 PM

Ma sei sicuro che ti funziona? Sinceramente non comprendo tutte queste funzioni di controllo xD

 

Mettiamo caso che la skill ha id 148 (la prima skill che hai messo lì) e che il nemico selezionato ha meno del 35% di vita, in questo caso la prima struttura di controllo ritorna "true", quindi passa alla seconda struttura di controllo, ma in questo caso visto che l'id della skill è 148 e non 145, ritornerebbe "false", passando quindi all'else e visto che, di nuovo, l'id della skill è 148 e non 145 ritorna false e quindi riprodurrebbe il suono di errore e non permetterebbe che la skill di avviarsi, nonostate le condizioni iniziali siano rispettate!

 

Comunque ho risistemato la cosa, ora lo script dovrebbe funzionare in tutti i casi

class Scene_Battle < Scene_Base
  alias sk_on_enemy_ok on_enemy_ok
  def on_enemy_ok
    if @skill!=nil
     if (@skill.id==80 && (@enemy_window.enemy.hp>@enemy_window.enemy.mhp/100*35))#  or (@skill.id==3 && (@enemy_window.enemy.state?(1)==false or BattleManager.actor.state?(2)==false))
       Sound.play_buzzer
       @enemy_window.activate
     else
       sk_on_enemy_ok
     end
   else
     sk_on_enemy_ok
   end
 end
 
  alias sk_on_enemy_cancel on_enemy_cancel
  def on_enemy_cancel
    @skill=nil
    sk_on_enemy_cancel
  end
   
end

P.s. Se vuoi mettere un "else" con una struttura di controllo puoi usare "elsif"


Modificato da Sora Keyblade, 12 August 2016 - 15:29 PM.


    Guardian of Irael
  • Coniglietto Rosso

  • Rpg˛S Admin
  • Rens: 177
  • 12
  • StellettaStellettaStellettaStellettaStellettaStelletta
  • 56080 messaggi
  • Sesso:Maschio
  • Provenienza:Bagnaia (Viterbo)
  • Abilitā:Apprendista


#10 Inviato 12 August 2016 - 15:45 PM

(Sì, per quanto riguarda gli eventi di battaglia vanno ripetuti in tutte le truppe nemiche. Lavoro noioso e lungo, ma piano piano ci si arriva. Se non si è sicuri di qualcosa conviene anche richiamare da lì degli eventi comuni, così se si è sbagliato si modifica una volta per tutte l'evento comune e via! ^ ^)

 

Se son tante skill e tante truppe con lo script è sicuramente più comodo, soprattutto se fatto a semplici righe come questo! ^ ^


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

 
Il mio Tumblr dove seguire i miei progetti, i progetti della Reverie : : Project ^ ^
 
KdUDtQt.png disponibile su Google Play, qui i dettagli! ^ ^
 
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) ^ ^

Spoiler

    Lerry
  • Nuovo Arrivato

  • Utenti
  • Rens: 6
  • 2
  • Stelletta
  • 75 messaggi
  • Sesso:Maschio
  • Abilitā:Iniziato

#11 Inviato 12 August 2016 - 15:47 PM

Inanzitutto grazie, mi hai aiutato tantissimo, e sei stato sopratutto disponibilissimo.

Mi sono impappinato un po' (un po' tanto) con il linguaggio di Ruby, non avendo punta esperienza con quest'ultimo :fear: (anche se mi avevi praticamente fatto tutto)

Le condizioni è perchè non mi sono accorto di poter risolvere semplicemente impostando un "&&" invece di un "or" nella fantomatica skill 145 :uhmm:  :fiufiu: (che scemo XD)

Invece una condizione era per rimuovere l'oggetto 21 se utilizzata la skill 151.

Quindi, grazie, funziona tutto alla grande.




  • Feed RSS