-
Posts
26 -
Joined
-
Last visited
Content Type
Profiles
Forums
Calendar
Posts posted by Riccardo
-
-
Nessuno sa aiutarmi?
-
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: -
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
-
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.
-
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.
-
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.
-
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.
-
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 -
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
-
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...
-
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.
-
Ho studiato parecchio bene lo script AMS e non ho trovato nulla a riguardo, lo linko comunque:
http://z13.invisionfree.com/eiales/ar/t8.htm
Ci sono scritte tutte le opzioni di questo script anche. -
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
-
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à :-)
-
Beh ora è risolto. Non so proprio come ringraziarti. Mi hai evitato uno spreco di tempo e un sacco di bestemmie(sono ancore neofita dell'RGSS).
-
Ho editato il messaggio precedente. Scusa XD
-
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? -
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?
-
Ti farò sapere se funziona :-)
-
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.
-
Il problema è anche con che tipo di query cercare sul web. E' davvero una richiesta non da poco. Se puoi aiutarmi in qualche modo per la ricerca te ne sarei grato.
-
-
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!
-
Grazie Noah è stupenda!!!

Aiuto RGSS3 su Simple Row Script
in Richieste scripts RGSS3 (VX-Ace)
Posted
UP!