Jump to content
Rpg²S Forum

Riccardo

Utenti
  • Posts

    26
  • Joined

  • Last visited

Posts posted by Riccardo

  1. Salve ragazzi,

    sono tornato con altri dubbi esistenziali sull'uso dell'RGSS3.
    Premetto, non so se questo vada più in Supporto o Richieste scripts, immagino che lo lascerò decidere a voi e poi un moderatore potrebbe eventualmente spostare di conseguenza.
    I miei dubbi/problemi sono questi.

    Ho questo script realizzato da Mr. Trivel:

     

     

    # )----------------------------------------------------------------------------(
    # )--     AUTHOR:     Mr Trivel                                              --(
    # )--     NAME:       Simple Battle Rows                                     --(
    # )--     CREATED:    2014-06-15 (2014-07-10)                                --(
    # )--     VERSION:    1.2                                                    --(
    # )----------------------------------------------------------------------------(
    # )--                         VERSION HISTORY                                --(
    # )--  1.2  - Some skills can ignore battle row positions and deal full dmg. --(
    # )--  1.1b - Displayed damage is fixed.                                     --(
    # )--  1.1a - Enemies have rows, too.                                        --(
    # )--  1.1  - Attacks while attacking from back row will deal less  damage   --(
    # )--  than from front row. User can set up exceptions like ranged weapons   --(
    # )--  or long reaching melee weapons.                                       --(
    # )--  1.0  - Initial Script                                                 --(
    # )----------------------------------------------------------------------------(
    # )--                          DESCRIPTION                                   --(
    # )--  This scripts adds basic Battle Row functionality. You can switch rows --(
    # )--  in menu Formation command by selecting same Actor twice.              --(
    # )--  Battlers in backrow will receive less damage than the ones in the front.(
    # )--  Battlers in backrow will receive same damage if front row is wiped.   --(
    # )--  Battlers attacking from back row will have damage penalty, unless     --(
    # )--  stated in exceptions.                                                 --(
    # )----------------------------------------------------------------------------(
    # )--                          INSTRUCTIONS                                  --(
    # )--   Use <backrow> note tag for enemies to set them in Back Row.          --(
    # )--                     Plug, Custmomize, Play.                            --(
    # )----------------------------------------------------------------------------(
    # )--                          LICENSE INFO                                  --(
    # )--  [url]http://mrtrivelvx.wordpress.com/terms-of-use/[/url]                         --(
    # )----------------------------------------------------------------------------(
    
    module MrTS
      module Formation
        # )------------------------------------------------------------------------(
        # )--  0.6 - means backrow takes 60% of the damage                       --(
        # )--  0.7 - 70%, 0.3 - only 30%, etc...                                 --(
        # )------------------------------------------------------------------------(
        DAMAGE_BACKROW_TAKEN = 0.5
        
        # )------------------------------------------------------------------------(
        # )--  0.4 - means Backrow only deals 40% of the damage, unless the      --(
        # )--  weapon type is in no_penalty_backrow_weapon_ids list.             --(
        # )------------------------------------------------------------------------(
        DAMAGE_BACKROW_DEALT = 0.4
        
        # )------------------------------------------------------------------------(
        # )--  Weapon settings. Back row: You can only attack with them in       --(
        # )--  backrow.( Front row: You can only attack with them in front row.  --(
        # )------------------------------------------------------------------------(
        BACKROW_WEAPON_IDS = [3]
        FRONTROW_WEAPON_IDS = []
        
        # )------------------------------------------------------------------------(
        # )--  Weapon type with these IDs won't receive a damage penalty while   --(
        # )--  attacking with them in the backrow. (For ranged weapons/polearms) --(
        # )------------------------------------------------------------------------(
        NO_PENALTY_BACKROW_WEAPON_IDS = [3, 4]
        
        # )------------------------------------------------------------------------(
        # )--  Skills with IDs listed in the array won't have it's damage        --(
        # )--  penalized when using from back row or on a back row battler.      --(
        # )------------------------------------------------------------------------(
        NO_PENALTY_SKILL_IDS = [12]
      end
    end
    
    $imported ||= {} ; $imported["MrTS_Simple_Battle_Rows"] = true
    
    # )---------------------------(
    # )--  Class: Game_Battler  --(
    # )---------------------------(
    class Game_Battler < Game_BattlerBase  
      # )---------------------------------(
      # )--  Public Instance Variables  --(
      # )---------------------------------(
      attr_reader :battle_row
      
      # )--------------------------(
      # )--  Method: initialize  --(
      # )--------------------------(
      alias mrts_initialize_b initialize
      def initialize
        mrts_initialize_b
        @battle_row = 0
      end
      
      # )------------------------------(
      # )--  New Method: switch_row  --(
      # )------------------------------(
      def switch_row
        if @battle_row == 0
          @battle_row = 1
        else
          @battle_row = 0
        end
      end
      
      # )-------------------------------------------(
      # )--  Overwrite Method: make_damage_value  --(
      # )-------------------------------------------(
      def make_damage_value(user, item)
        value = item.damage.eval(user, self, $game_variables)
        value *= item_element_rate(user, item)
        value *= pdr if item.physical?
        value *= mdr if item.magical?
        value *= rec if item.damage.recover?
        value = apply_critical(value) if @result.critical
        value = apply_variance(value, item.damage.variance)
        if item.is_a?(RPG::Skill) && !MrTS::Formation::NO_PENALTY_SKILL_IDS.include?(item.id)
          value *= MrTS::Formation::DAMAGE_BACKROW_TAKEN if self.battle_row == 1 && self.is_front_row?
          if user.is_a?(Game_Actor)
            value *= MrTS::Formation::DAMAGE_BACKROW_DEALT if user.penalty_damage?
          end
        end
        value = apply_guard(value)
        @result.make_damage(value.to_i, item)
      end
      
      # )---------------------------------(
      # )--  New Method: is_front_row?  --(
      # )---------------------------------(
      def is_front_row?
        return $game_party.get_frontrow_size > 0 if self.is_a?(Game_Actor)
        return $game_troop.get_frontrow_size > 0 if self.is_a?(Game_Enemy)
      end
    end
    
    # )--------------------------------(
    # )--  Class: Window_MenuStatus  --(
    # )--------------------------------(
    class Window_MenuStatus < Window_Selectable
      # )-----------------------------------(
      # )--  Overwrite Method: draw_item  --(
      # )-----------------------------------(
      def draw_item(index)
        actor = $game_party.members[index]
        enabled = $game_party.battle_members.include?(actor)
        rect = item_rect(index)
        draw_item_background(index)
        draw_actor_face(actor, rect.x + 1 + 10*actor.battle_row, rect.y + 1, enabled)
        draw_actor_simple_status(actor, rect.x + 108, rect.y + line_height / 2)
      end
    end
    
    # )-------------------------(
    # )--  Class: Scene_Menu  --(
    # )-------------------------(
    class Scene_Menu < Scene_MenuBase
      # )-------------------------------=---------(
      # )--  Overwrite Method: on_formation_ok  --(
      # )----------------------------------=------(
      def on_formation_ok
        if @status_window.pending_index >= 0
          $game_party.swap_order(@status_window.index,
                                 @status_window.pending_index)
          if @status_window.pending_index == @status_window.index
            $game_party.members[@status_window.index].switch_row
            @status_window.redraw_item(@status_window.index)
          end
          @status_window.pending_index = -1
          @status_window.redraw_item(@status_window.index)
        else
          @status_window.pending_index = @status_window.index
        end
        
        @status_window.activate
      end
    end
    
    # )-------------------------(
    # )--  Class: Game_Party  --(
    # )-------------------------(
    class Game_Unit
      # )------------------------------------(
      # )--  New Method: get_backrow_size  --(
      # )------------------------------------(
      def get_backrow_size
        size = 0
        battle_members.each do |memb|
          size += 1 if memb.alive? && memb.battle_row == 1
        end
        
        return size
      end
      
      # )-------------------------------------(
      # )--  New Method: get_frontrow_size  --(
      # )-------------------------------------(
      def get_frontrow_size
        size = 0
        alive_members.each do |memb|
          size += 1 if memb.battle_row == 0
        end
        
        return size
      end
    end
    
    # )-------------------------(
    # )--  Class: Game_Actor  --(
    # )----------------0--------(
    class Game_Actor < Game_Battler
      # )----------------------------------------(
      # )--  New Method: get_weapon_row        --(
      # )----------------------------------------(
      def get_weapon_row
        weapons.each do |w| 
          if MrTS::Formation::BACKROW_WEAPON_IDS.include?(w.wtype_id)
            return 1
          elsif MrTS::Formation::FRONTROW_WEAPON_IDS.include?(w.wtype_id)
            return 0
          end
        end
        return 2 # both rows
      end
      
      # )----------------------------------------(
      # )--  New Method: penalty_damage?       --(
      # )----------------------------------------(
      def penalty_damage?
        weapons.each do |w| 
          if (MrTS::Formation::NO_PENALTY_BACKROW_WEAPON_IDS.include?(w.wtype_id) && @battle_row == 1) || @battle_row == 0
            return false
          end
        end
        return true
      end
    end
    
    # )-------------------------(
    # )--  Class: Game_Enemy  --(
    # )-------------------------(
    class Game_Enemy < Game_Battler
      
      # )---------------------------------(
      # )--  Alias To: initialize       --(
      # )---------------------------------(
      alias mrts_initialize initialize
      def initialize(*args)
        mrts_initialize(*args)
        @battle_row = enemy.note =~ /<backrow>/i ? 1 : 0
      end
    end
    
    # )----------------------------------(
    # )--  Class: Window_ActorCommand  --(
    # )----------------------------------(
    class Window_ActorCommand < Window_Command
      #--------------------------------------------------------------------------
      # * Add Attack Command to List
      #--------------------------------------------------------------------------
      def add_attack_command
        add_command(Vocab::attack, :attack, @actor.attack_usable? && [@actor.battle_row, 2].include?(@actor.get_weapon_row))
      end
    end 

     



    E' un semplice ed essenziale script che inserisce le Linee nel party stile final fantasy. Insomma se sei in Prima Linea prendi e infliggi la normale quantità di danno, se sei in seconda linea il danno inflitto e ricevuto viene opportunamente ridimensionato, funzionalità tra l'altro già presente in RMXP tant'è vero che mi chiedo cosa li abbia spinti a rimuoverla.

    Tornano on topic.
    Quello che mi serve è che all'inizializzazione e ad eventuali cambi, vengano assegnati a quel personaggio degli stati, rispettivamente Prima e Seconda Linea che hanno valenza puramente visiva. Non fanno nient'altro che quello che fa già lo script, ma dato che non è presente in battaglia una qualche dimostrazione della linea effettivamente usata, almeno con questa indicazione sarebbe più facile comprendersi.
    Ora so che dovrebbero essere utilizzati i comandi add_state e remove_state il problema è che non ho affatto compreso su che classe invocare i due metodi o comunque anche se l'ho compreso non riesco ad invocarli senza errori. Quindi avrei bisogno di qualche aiuto a riguardo.

    L'altro quesito è se fosse possibile, apportando giusto qualche minima modifica al codice(su vostro consiglio magari), fare in modo che all'inizializzazione anziché essere tutti i personaggi inizializzati sulla Prima Linea si possa, attraverso opportune indicazioni, settare la posizione di partenza.

    Ad es. Settando tra le note del personaggio <row: 1> vorrei che il personaggio venisse inizializzato in Seconda Linea.

    Terza ed ultima nota. Dispongo dello script di Yanfly "Battle Command" che permette di aggiungere nuovi comandi nella schermata di combattimento.
    Nulla di strano con questo, infatti, tra le opzioni dello script c'è quello di poter settare un comando che attivi un determinato evento comune, nell'evento comune poi c'è la chiamata o l'operazione che necessito di fare.
    Bene, ho creato il comando "Cambia Linea", ho creato l'evento comune e la chiamata si attiva effettivamente, ma non capisco qual è la giusta invocazione del metodo switch.row
    Ho provato "Game_Battler.switch_row" visto che la funzione sembra invocata nella classe Game_Battler, ma non funziona. Ne ho provati in realtà molti altri, che non sto neanche qui ad elencarvi.
    Quindi niente avrei bisogno che qualcuno mi desse una dritta anche su questa chiamata che probabilmente è di una banalità assurda.

    Eccoci qui ragazzi fine del post!
    Vi ringrazio intanto per essere arrivati fin qui!
    Spero di essere stato abbastanza chiaro, ovviamente non fatevi problemi a chiedermi eventuali altre spiegazioni. Farò in modo di essere più chiaro.
    Sono abbastanza convinto che agli occhi di un esperto programmatore RGSS3 questi quesiti saranno delle vere inezie, ma io mi sto da poco affacciando al lato script di RPG Maker e ho ancora molte cose da comprendere.

    Ringrazio anticipatamente tutti coloro che avranno la gentilezza di rispondere e aiutarmi!
    Saluti :smile:

  2. Salve ragazzi rieccomi con un'altra richiesta che potrebbe essere eccessiva. Ho già cercato nell'apposito strumento di ricerca, ma non ho trovato granché, specie perché non so neanch'io cosa sto cercando esattamente.
    Partiamo dal presupposto che non ho idea se quel che cerco è uno script o una qualche impostazione nascosta qua e là. Vi illustro il quesito:

    Ho voluto rimodernare tutto il gameplay(lasciando comunque battle system standard a turni e a scontri casuali). Ciò che ho voluto modificare sono stati gli attributi e le caratteristiche dei nemici. Per inciso ho rimosso gli attributi anti-umano, anti-volante etc. che secondo il mio punto di vista non avevano alcun riscontro verosimile. Voglio dire, una cosa potrebbe essere un'attributo sacro che ha giustamente più efficacia sui non-morti o un attributo "insetticida" che ha più efficacia sugli insetti appunto, ma un attributo anti-bestia, non dovrebbe voler dire nulla. Quindi ho rimosso tutti questi attributi e ho invece aggiunto gli attributi delle armi: "perforante", "tagliente" e "contundente". In sostanza affrontando un nemico di pietra(un gargoyle ad esempio) ha senso che tagliente e perforante dovrebbero essere pressoché inutili mentre contundente dovrebbe infliggere moltissimi danni. Il problema è che la gestione degli attributi di RMXP non prevede un calcolo ulteriore sul danno inflitto da attributi multipli. Vi spiego la situazione:
    Devo affrontare un Angelo che ha come danno da Luce "F", quindi esso assorbe gli attacchi di tipo luce. Nel mio gioco, Luce e Sacro sono la stessa cosa, quindi il colpo della croce del mio guerriero infligge danni di tipo Luce, ma è pur sempre un attacco fisico quindi dispone anche dell'attributo "tagliente" come l'attacco base con le spade. Il mio Angelo ha come danno da tagliente "C" quindi normale.

    Ora quello che mi aspetto è che un colpo della croce su un nemico con F a Luce e C a tagliente abbiano come output un qualcosa intorno al quarto di danno o nullo, invece no, non so quale calcolo effettui sugli attributi multipli, ma l'output sembra il danno base fornito dal tagliente escludendo completamente il danno Luce.

    Ho capito che per ovviare al problema, basterebbe inserire nel database un attributo per il nemico del doppio tipo "tagliente/Luce", ma questo significherebbe andar a creare "N" attributi per "N" abilità, cosa che seppur fattibile, non mi sembra né efficiente, né elegante.
    Un altro esempio forse più comprensibile è la battaglia con un kraken. Nel mio gioco esso ha resistenza D al contundente e debolezza B al tagliente(nel mio immaginario, prevedo che un grosso tentacolo sia più facile da "tagliare" che da "sfondare"). Le asce che sono, sempre secondo me, un incrocio "Tagliente/Contundente" dovrebbero infine infliggere qualcosa intorno al danno base "C". Ovvero, se il mio attacco infligge 500 danni, dall'attributo B dovrei infliggerne 750, mentre dall'attributo D, 250 sommandoli e poi dividento per 2(numero di attributi posseduti da abilità/arma) dovrei ottenere proprio 500 che è il danno base.

    Ora, dopo questa lunga introduzione, che spero sia comunque comprensibile(aperto in ogni caso per qualsiasi ulteriore chiarimento), ciò che volevo chiedere è se vi è un modo, tramite script, tramite opzioni del database etc, che permetta di ovviare a questo problema, ovvero, un controllo successivo sulle combinazioni di attributi che mi calcoli il danno che mi aspetto.
    Come al solito, grazie anticipatamente a tutti coloro che avranno il coraggio di leggere questo papiro e rispondere :biggrin:

  3. Salve ragazzi sono tornato con un'altra richiesta, non so se sono nella sezione giusta, in ogni caso suppongo che la via script per realizzare questa feature sia la più comoda. Peccato che io ancora non ci capisca nulla di scripting. La questione è la seguente. Ho introdotto nel mio gioco lo status congelato. Nello status congelato il PG non può muoversi, non può guadagnare EXP etc. etc. Volevo inoltre dare il malus che se si viene colpiti da un attacco fisico mentre si è congelati,il pg possa essere frantumato. Ho già raggiunto il mio scopo semplicemente mettendo la percentuale di difesa fisica a 0 e le altre classiche impostazioni degli status, però non mi convince esteticamente. In particolare vorrei che apparisse il messaggio "frantumato!" e parta un SE tipo "distruzione di ghiaccio". Sono facili da impostare come condizioni, ma non mi capacito di comprendere dove impostarle. Per il SE ovviamente provvederò io, vorrei solo delucidazioni riguardo alla più efficiente soluzione per il problema. Sarebbe grandioso anche impostare uno switch che funzioni in base alla skill o al nemico, mi spiego meglio: un personaggio che attacca un bersaglio congelato con una piuma (esempio stupido) è chiaro che non debba frantumarlo e anzi, magari, il suo colpo vada semplicemente a vuoto(come colpire una grossa pietra e non scalfirla in sostanza)mentre un altro personaggio che usa un martello più grande della sua testa dovrebbe essere più efficace in questa circostanza. Non dovrebbe essere un'impresa ardua per voi scripter esperti, però io non ne capisco quindi spero di non crearvi disagi o quant'altro.

  4. Ma non è un problema, è solo un difetto grafico suppongo dovuto alla versione. Non so quale fosse onestamente suppongo la 1.04 visto che dovrebbe essere l'ultima scaricabile dal sito e niente l'unico inconveniente era che ogni sfondo era blu, quindi per esempio le picture dei battler o dei charset, ma così anche i tileset, insomma dovunque vi era lo sfondo bianco nella mia versione. Ma comunque la trasparenza era settata regolarmente. In ogni caso non è la versione a dare problemi, infatti aprendo un nuovo progetto era normalmente bianca, suppongo sia un problema dovuto all'usare un progetto fatto con la 1.01 sulla 1.04. Comunque l'ho detto solo perché magari l'amico con il problema delle trasparenze dei tileset etc. del rtp standard potrebbe essere passato ad un'altra versione senza modificare difatti la versione del progetto.

  5. Sisi con la versione 1.01 che uso da sempre non ho problemi(che poi è solo un errore di tipo grafico, non da neanche problemi mentre giochi). Io volevo provarla la versione per capire se c'erano vantaggi di qualche tipo a passare ad una nuova versione.

  6. Hai per caso cambiato versione di rmxp? A me la stessa cosa è successa dopo che ho provato la versione di prova dell'ultimissima versione disponibile sul sito enterbrain. Suppongo si risolvi ritornando alla versione precedente o aprendo il file .rxproj con file di testo e modificando con la versione attuale.

  7. Sotto Spoiler c'è lo script di un tale gerkrt/gerrtunk. Suppongo principalmente serva per stampare a video alcune scritte con font e colori particolari utili ad esempio per la schermata iniziale del gioco. Comunque vi farò sapere come mi trovo con questo script per realizzare quello che voglio io.

     

     

    # http://www.hbgames.org/forums/viewtopic.php?f=11&t=72241
    
    #==============================================================================
    # Picture Text Command
    # By gerkrt/gerrtunk
    # Version: 2.2
    # License: GPL, credits
    #==============================================================================
    
    =begin
    
    NOTE: Requested by Heretic and edited by ThallionDarkshine on chaos-prject.com
    to remove MACL requirements for all features. This edit of the script
    does NOT requre MACL to access all features due to MACL having similar
    problems to the SDK where a lot of stuff does not work as a result.
    
    Version 2.1 by gerkrt/gerrtunk
    Version 2.2 by ThallionDarkshine
    
    ----------------------------------
    Instalation and compatiility
    ----------------------------------
    -Put this script before main.
    -To use advance effects install MACL. Here: http://etheon.net/public/dl/macl_complete.txt
    Here the forum thread: viewtopic.php?f=11&t=9417
    -To install read the instructions. Anyway, you have to put before main but after
    this script.
    
    ----------------------------------
    Instructions
    ----------------------------------
    
    This script can show pictures based on a text line. The image will be treated like
    a normal picture loaded with the show picture event command. It have the same
    rules and can be moved, changue tone, erased, etc...
    
    A call script example:
    
    @m = Message.new
    @m.bold = false
    @m.size = 22
    @m.font = "Arial"
    @m.italic = false
    @m.color = Color.new(255,255,255,255)
    @m.t"Text to show"
    
    Then you need to put a command show picture with any image(its not used) and the
    values that you will put in a normal event command show picture. The script then creates
    creates a bitmap based on your text and options and loading a event picture with it.
    
    You have to use this structure of call script+show picture to use this new command.
    
    ----------------------------------
    Options and meanings
    ----------------------------------
    
    Basic options. Description before #:
    
    @m = Message.new # Dont changue or remove this. Always the first thing.
    
    @m.bold = false # Bold letter
    @m.size = 22 # Size of the font
    @m.font = "Arial" # Fontname
    @m.italic = false # Cursive italic
    @m.color = Color.new(255,255,255,255) # Text basic color.
    @m.t"Wep" # Text to write in the brackets "".
    
    Advanced options. Only with MACL.
    
    @m.shadow = true # Shadowed font
    @m.s_color = Color.new(134,176,188,154) # Shadow color
    @m.outline = true # Shows a outline
    @m.o_color = Color.new(134,176,188,154) # Outline color
    @m.horiz_grad = true # Horizontal gradient with two colors
    @m.vert_grad = true # Vertical gradient with two colors
    @m.g1_color = Color.new(134,176,188,154) # Gradiet Starting color
    @m.g2_color = Color.new(1,255,188,154) # Gradiet Endig color
    
    -The only fixed option is @m = Message.new. If you only put this will chargue
    a picture based only in your predefenided values.
    
    -Then you have to compose your call scripts adding a option in a new line every time
    This a example:
    
    Show message "Noooooo", size 16 and horizontal gradient with defined colors:
    
    @m = Message.new
    @m.t"Nooooooooooooooooo"
    @m.size = 16
    @m.horiz_grad = true
    @m.g1_color = Color.new(134,176,188,154)
    @m.g2_color = Color.new(1,255,188,154)
    
    -The order dont care. The only rule is to put the @m = Message.new first.
    
    -The two gradients use the same colors values.
    
    -Incompatible effects: the two gradients, shadow/outline.
    
    -Remember to quit the #'s.
    
    -You can make a large call script in two call scripts, simply continue writting
    in the next. The other option is:
    
    @m.size = 16 ; @m.horiz_grad = true
    
    The ; is a ruby line internal separator. Its like they are in different lines.
    
    -Some advice about the values:
    
    Color.new(134,176,188,154) Red,Green,Blue+alpha Only changue the numbers. 0-255.
    "Texts": You must use the "" and the text inside of them.
    true/false: It means Active or Inactive. For example to write bold: @m.bold = true
    
    If the sucker call script gives you strange errors this is what you can try:
    
    -Recolocate the larger scripts lines: spaces,intros,etc
    -Add a new option at the end, event if its inactive one.
    
    --------------------------------------------
    Advices to write the text
    --------------------------------------------
    
    -To only write a event variable value :
    @m.t$game_variables[variable_id].to_s
    
    -Complex phrases:
    @m.t"HP:"+$game_variables[variable_id].to_s+" "+"Z"
    
    It writes HP:var Z.
    
    -In ruby the + concatenate words to make larger ones.
    -Use " " if you need some spaces or aligns
    -Respect the "" word delimitators.
    -The $game_variables[variable_id].to_s dont use "", but internslly its treated like a word
    -variable_id: The number ID of a event variable
    
    ----------------------------------
    Long lines
    ----------------------------------
    
    Call script command suck for these. This a example of what you have to do:
    
    @m.t"HP:"+$game_variables[variable_id].to_s
    
    @m.t" MP:"+$game_variables[variable_id2].to_s
    
    @m.t" Limit: "+$game_variables[variable_id3].to_s
    
    The script automatically concatenates all. Just write it in order.
    
    ------------------------
    Default values
    ------------------------
    
    If you need this, you can make your predefenided values for all the options.
    With this, the command can be shorter, removing the lines you dont need.
    
    The constants names are Def_font_+ the option of the @ that you alreadyknow.
    
    =end
    module Wep
    Def_font_name = "Arial"
    Def_font_text = "Wep"
    Def_font_size = 24
    Def_font_bold = false
    Def_font_italic = false
    Def_font_color = Color.new(255, 255, 255, 255) # The normal color
    Def_font_outline = false
    Def_font_shadow = false
    Def_font_s_color = Color.new(0, 0, 0, 100)
    Def_font_o_color = Color.new(0, 0, 0)
    Def_font_o_size = 1
    Def_font_s_ox = 4
    Def_font_s_oy = 4
    #Def_font_g1_color = Color.new(255, 45, 255)
    #Def_font_g2_color = Color.new(12, 128, 128)
    end
    
    
    #==============================================================================
    class Message
    attr_accessor :text
    attr_accessor :font
    attr_accessor :size
    attr_accessor :bold
    attr_accessor :italic
    attr_accessor :color
    attr_accessor :horiz_grad
    attr_accessor :vert_grad
    attr_accessor :shadow
    attr_accessor :outline
    attr_accessor :s_color
    attr_accessor :o_color
    attr_accessor :o_size
    attr_accessor :s_ox
    attr_accessor :s_oy
    def initialize(text=Wep::Def_font_text,font=Wep::Def_font_name,size=Wep::Def_font_size,bold=Wep::Def_font_bold,italic=Wep::Def_font_italic, color=Wep::Def_font_color, outline=Wep::Def_font_outline,shadow=Wep::Def_font_shadow, s_color=Wep::Def_font_s_color, o_color=Wep::Def_font_o_color, o_size = Wep::Def_font_o_size, s_ox = Wep::Def_font_s_ox, s_oy = Wep::Def_font_s_oy) @text = text
    @font = font
    @size = size
    @bold = bold
    @italic = italic
    @color = color
    @s_color = s_color
    @o_color = o_color
    @shadow = shadow
    @o_size = o_size
    @s_ox = s_ox
    @s_oy = s_oy
    @text = ""
    @text = text
    @outline = outline
    @first_concat = true
    end
    
    #--------------------------------------------------------------------------
    # *t This metod concatenates the text string.
    # Optimitzed to be very short.
    #--------------------------------------------------------------------------
    
    def t(text)
    # Check if the text is the predefined and its the first time to add
    # and clears it
    if Wep::Def_font_text == @text and @first_concat
    @text = ""
    end
    @first_concat = false
    @text += text
    end
    end
    
    class Sprite_Picture
    #--------------------------------------------------------------------------
    # * Frame Update
    #--------------------------------------------------------------------------
    def update
    super
    # If picture file name is different from current one and have a message
    if @picture_name != @picture.name and @picture.message
    # Remember file name to instance variables
    @picture_name = @picture.name
    #if @picture_name != ""
    # Get picture graphic
    
    #end
    # Use the testing bitmap to know text size
    testing_bitmap = Bitmap.new(1,1)
    testing_bitmap.font.name = @picture.message.font
    testing_bitmap.font.size = @picture.message.size
    testing_bitmap.font.bold = @picture.message.bold
    testing_bitmap.font.italic = @picture.message.italic
    line = @picture.message.text
    needed_rect = testing_bitmap.text_size(line)
    
    # Changue basic font options
    self.bitmap = Bitmap.new(needed_rect.width, needed_rect.height)
    self.bitmap.font.name = @picture.message.font
    self.bitmap.font.size = @picture.message.size
    self.bitmap.font.bold = @picture.message.bold
    self.bitmap.font.italic = @picture.message.italic
    self.bitmap.font.color = @picture.message.color
    self.bitmap.font.outline_color = @picture.message.o_color
    self.bitmap.font.outline = @picture.message.outline
    self.bitmap.font.outline_distance = @picture.message.o_size
    self.bitmap.font.shadow = @picture.message.shadow
    self.bitmap.font.shadow_color = @picture.message.s_color
    self.bitmap.font.shadow_ox = @picture.message.s_ox
    self.bitmap.font.shadow_oy = @picture.message.s_oy
    self.bitmap.draw_text(0, 0, needed_rect.width, needed_rect.height, line)
    
    end
    # If picture file name is different from current one
    if @picture_name != @picture.name and @picture.message == nil
    # Remember file name to instance variables
    @picture_name = @picture.name
    # If file name is not empty
    if @picture_name != ""
    # Get picture graphic
    self.bitmap = RPG::Cache.picture(@picture_name)
    end
    end
    # If file name is empty
    if @picture_name == ""
    # Set sprite to invisible
    self.visible = false
    return
    end
    # Set sprite to visible
    self.visible = true
    # Set transfer starting point
    if @picture.origin == 0
    self.ox = 0
    self.oy = 0
    else
    self.ox = self.bitmap.width / 2
    self.oy = self.bitmap.height / 2
    end
    # Set sprite coordinates
    self.x = @picture.x
    self.y = @picture.y
    self.z = @picture.number
    # Set zoom rate, opacity level, and blend method
    self.zoom_x = @picture.zoom_x / 100.0
    self.zoom_y = @picture.zoom_y / 100.0
    self.opacity = @picture.opacity
    self.blend_type = @picture.blend_type
    # Set rotation angle and color tone
    self.angle = @picture.angle
    self.tone = @picture.tone
    end
    end
    
    
    class Game_Picture
    #--------------------------------------------------------------------------
    # * Public Instance Variables
    #--------------------------------------------------------------------------
    attr_reader :message # text
    #--------------------------------------------------------------------------
    # * Object Initialization
    # number : picture number
    #--------------------------------------------------------------------------
    alias gp_init initialize
    def initialize(number)
    gp_init(number)
    @message = nil
    end
    
    alias gp_show show
    def show(name, origin, x, y, zoom_x, zoom_y, opacity, blend_type, message=nil)
    gp_show(name, origin, x, y, zoom_x, zoom_y, opacity, blend_type)
    @message = message
    end
    alias gp_erase erase
    def erase
    gp_erase
    @message = nil
    end
    end
    
    
    class Interpreter
    #--------------------------------------------------------------------------
    # * Show Picture
    #--------------------------------------------------------------------------
    def command_231
    # Get picture number
    number = @parameters[0] + ($game_temp.in_battle ? 50 : 0)
    # If appointment method is [direct appointment]
    if @parameters[3] == 0
    x = @parameters[4]
    y = @parameters[5]
    # If appointment method is [appoint with variables]
    else
    x = $game_variables[@parameters[4]]
    y = $game_variables[@parameters[5]]
    end
    # Show picture
    # If message is written
    if @m != nil
    $game_screen.pictures[number].show(@parameters[1], @parameters[2],
    x, y, @parameters[6], @parameters[7], @parameters[8], @parameters[9], @m)
    # Format m for other calls
    @m = nil
    else
    $game_screen.pictures[number].show(@parameters[1], @parameters[2],
    x, y, @parameters[6], @parameters[7], @parameters[8], @parameters[9])
    
    end
    # Continue
    return true
    end
    end
    
    =begin
    addons to remove macl dependency by ThallionDarkshine
    =end
    class Font
    attr_accessor :underline, :overline, :strikethrough
    attr_accessor :outline, :outline_color, :outline_distance
    attr_accessor :shadow, :shadow_color, :shadow_ox, :shadow_oy
    # F12 No Crash Fix for already defined
    unless $text_picture_version
    alias tdks_message_init initialize
    def initialize(*args)
    tdks_message_init(*args)
    @underline = false
    @overline = false
    @strikethrough = false
    @outline, @outline_color, @outline_distance = false, Color.new(0, 0, 0), 0
    @shadow, @shadow_color, @shadow_ox, @shadow_oy = false, Color.new(127, 127, 127, 170), 2, 2
    end
    end
    end
    
    class Bitmap
    # F12 No Crash Fix for already defined
    unless $text_picture_version
    alias tdks_txt2pic_draw_text draw_text
    def draw_text(*args)
    unless args[0].is_a?(Rect)
    args[0..3] = Rect.new(*args[0..3])
    end
    args[2] = 0 if args[2].nil?
    args[3] = 1 if args[3].nil?
    case args[3]
    when 0
    args[0].height = text_size(args[1]).height
    when 1
    h = text_size(args[1]).height
    args[0].y += (args[0].height - h) / 2
    args[0].height = h
    when 2
    h = text_size(args[1]).height
    args[0].y += args[0].height
    args[0].height = h
    end
    text = args[1].clone
    text = text.split(/[\n\r]/)
    rect = args[0].clone
    case args[3]
    when 1
    amnt = (text.length / 2.0).floor
    text[0...amnt].each { |ln| rect.y -= text_size(ln).height } if amnt > 0
    rect.y += text_size(text[0]).height / 2 if amnt % 2 == 1
    when 2
    text.each { |ln| rect.y -= text_size(ln).height }
    end
    text.each { |ln|
    orig_x = rect.x
    size = text_size(ln)
    case args[2]
    when 1
    rect.x += (rect.width - size.width) / 2
    when 2
    rect.x += rect.width - size.width
    end
    if font.shadow
    prev_color = font.color.clone
    font.color = font.shadow_color
    tdks_txt2pic_draw_text(rect.x + font.shadow_ox, rect.y + font.shadow_oy, rect.width, rect.height, ln)
    font.color = prev_color
    end
    if font.outline
    prev_color = font.color.clone
    font.color = font.outline_color
    (-font.outline_distance..font.outline_distance).each { |ox|
    (-font.outline_distance..font.outline_distance).each { |oy|
    next if ox == 0 and oy == 0
    tdks_txt2pic_draw_text(rect.x + ox, rect.y + oy, rect.width, rect.height, ln)
    }
    }
    font.color = prev_color
    end
    tdks_txt2pic_draw_text(rect, ln)
    if font.overline
    fill_rect(rect.x, rect.y + (size.height / 15.0).ceil, size.width, (size.height / 15.0).ceil, font.color)
    end
    if font.strikethrough
    fill_rect(rect.x, rect.y + size.height / 2, size.width, (size.height / 15.0).ceil, font.color)
    end
    rect.y += size.height
    if font.underline
    fill_rect(rect.x, rect.y - (2 * size.height / 15.0).ceil, size.width, (size.height / 15.0).ceil, font.color)
    end
    rect.x = orig_x
    }
    end
    
    def draw_gradient_text(c1, c2, *args)
    unless args[0].is_a?(Rect)
    args[0..3] = Rect.new(*args[0..3])
    end
    rect = args[0]
    tmp = Bitmap.new(rect.width, rect.height)
    tmp.draw_text(tmp.rect, *args[1...args.length])
    overlay_grad = Win32API.new('overlay_grad.dll', 'overlay_grad', 'liiiiiiiiii', 'b')
    overlay_grad.call(tmp.__id__, args[0].x, args[0].y, args[0].width, args[0].height, c1.red, c1.green, c1.blue, c2.red, c2.green, c2.blue)
    blt(rect.x, rect.y, tmp, tmp.rect)
    end
    end
    end
    
    $text_picture_version = 2.2
    
    

     

     

  8. Per ora a pictures mi sembra il più fattibile, ho trovato uno script che fondamentalmente traduce un testo in immagine istantaneamente il che vuol dire che fondamentalmente ho bisogno solo dell'immagine di un messaggio completamente vuoto e l'eventuale picture per le facce, però resta comunque piuttosto complicato dover settare di volta in volta 3 pictures per messaggio nella posizione corretta. Ad eventi ho già provato qualche soluzione, ma inutilmente, se qualcuno di voi saprebbe consigliarmi o trovarmi un eventuale punto di partenza sarebbe il massimo ragazzi

  9. Già visto quello, tuttavia sarebbe necessario riscrivere da capo ogni dialogo e cambiare message system. Volevo evitare questa situazione, ecco perché il primo che hai fornito era perfetto, dal momento che modifica solo alcune condizioni della classe Window_Base...

  10. Grazie Noah, stavo davvero iniziando a sperimentare la soluzione tramite picture. Ad ogni modo il link che hai fornito non rimanda ad alcuno script, i link forniti dall'autore rimandano a file di dropbox inesistenti ed è piuttosto vecchia come conversazione, chiedere lì all'autore se carica nuovamente i link potrebbe portare via ulteriore tempo. Se mi aiutate a trovare un link funzionante dovremmo essere a cavallo. Ad ogni modo ci terrei a precisare che ho effettivamente controllato su google anche eventuali risultati in inglese ma nessuno apparentemente era fruttuoso, probabilmente ho sbagliato le query di ricerca.

  11. E' possibile far sì che un messaggio non blocchi i movimenti del player? So che è possibile chiuderlo in automatico, ma ciò che mi preme è proprio che il personaggio non venga fermato anche per quell'istante. Posseggo inoltre l'Advanced Messagging by Slipknot and Dubealex e qualora questa soluzione sia fattibile con questo script allora mi va più che bene. Qualora debba installare altri script per messaggi dovrei pensarci perché avrei da modificare nuovamente tutti i dialoghi del gioco.

    Grazie anticipatamente per le risposte

  12. In verità la funzionalità per l'arma mi tornerà utile solo in un unico caso, è quella dei nemici che ha suscitato la mia curiosità. Ho sempre desiderato poter fare allenamenti liberi tra alcuni componenti del gruppo, specie se tra essi nasce una specie di rivalità :-)

  13. Ecco io ho fatto così e non funziona. Sicuro sia uno script per RGSS1? Mi sembra differente dalle altre classi

    EDIT:Scusami sono un'idiota! E' perfetto! Anziché mettere il numero dell'eroe mettevo il suo id. Suppongo funzioni comunque per numeri a 2 cifre giusto? Comunque non dovrebbe servirmi in ogni caso è già fantastico così. Posso ringraziarti in qualche modo?

  14. Scusami lo stavo testando ma non ho ben capito dove inserire il modulo e le classi. Per il modulo immagino debba creare una nuova classe sopra main. Ma per le 2 classi? Devo modificare delle due classi preesistenti o crearne altre?

  15. Si ma in teoria così il nome dell'oggetto sarebbe esattamente il nome del personaggio. Io invece ho bisogno che nel suo nome o nella sua descrizione venga fuori il nome del personaggio in un dato momento. Non so se mi sono spiegato bene.

  16. Salve ragazzi, premetto che ho ampiamente utilizzato il tasto di ricerca per una soluzione, ma essendo piuttosto tedioso anche solo formulare la richiesta non ho ottenuto alcun risultato. Dunque la mia domanda parte da questa constatazione. Quando noi andiamo a rinominare un eroe, il nome registrato viene inserito in una variabile della quale possiamo richiamarne il contenuto nei messaggi usando \n[idpersonaggio]. Ora, nel mio gioco ci sono due differenti team che spesso si incontrano e giustamente la squadra attualmente in uso risulta con i nomi opportunamente modificati, mentre la squadra nemica risulta con i nomi presenti nel database nella sezione mostri. Il problema è che se provo a mettere \n[idpersonaggio2] al posto del suo nome nel database, nella battaglia vien fuori proprio "\n[idpersonaggio2]". Lo stesso problema si verifica se voglio che un mio personaggio possegga un oggetto particolare che riporti il suo nome. Ad esempio il personaggio3 viene chiamato dall'utente "Ciccio". Esso possiede un'arma speciale chiamata "Spada magica di *personaggio3*". L'obiettivo sarebbe ottenere "Spada magica di Ciccio". Ovviamente anche qui inserire \n[idpersonaggio3] non sembra funzionare. Quindi arrivando alla domanda, vorrei sapere se è possibile realizzare questo tipo di situazioni per default o se è necessario ricorrere a qualche script. Mi sembra comunque strano possedere una variabile per eroe e non poterla usare in qualsiasi box di testo(che alla fine di questo stiamo parlando). Spero di essere stato chiaro, ovviamente sono disposto a spiegarmi meglio qualora sia necessario. Grazie per l'attenzione!

×
×
  • Create New...