Jump to content
Rpg²S Forum

Sleeping Leonhart

Utenti
  • Posts

    569
  • Joined

  • Last visited

Posts posted by Sleeping Leonhart

  1. @Hash'ak'Gik

    Per quanto riguarda l'audio non ce un comando che indichi la durata, devi gestirtelo tu.

     

    @Squall_Leonheart

    Per cambiare il limite alla quantità del singolo tipo di oggetto devi agire sul metodo gain_item della classe Game_Party(stiamo parlando di rpg maker Xp no? anche se nel Vx è simile).

    Come puoi osservare il metdo limita gli oggetti a 99

    def gain_item(item_id, n)	if item_id > 0	  @items[item_id] = [[item_number(item_id) + n, 0].max, 99].min #controlla che il minimo sia 0 ed il massimo 99	end  end

    Quindi ti converrebbe crearti un Hash contenente i valori massimi di ciascun oggetto ed usarlo al posto del 99 come limite superiore.

    L'hash deve essere una cosa del tipo

    Max_Item = {1 => 10}Max_Item.default = 99

    dove 1 è l'id dell'oggetto, 10 è il limite massimo, e Max_Item.default = 99 è il limite massimo per gli oggetti che non hai definito nell'hash.

    Ora non ti resta che modificare il metodo in modo che imposti il massimo seguendo l'hash e cioè

      def gain_item(item_id, n)	if item_id > 0	  @items[item_id] = [[item_number(item_id) + n, 0].max, Max_Item[item_id]].min	end  end

    Ti ho spiegato tutto in modo che tu possa capire tutti i passaggi da fare, inoltre magari può tornare utile ad altri senza appoggiarsi per forza a script esterni.

     

    Un ultima cosa, con questo modo non limiti la capicità di acquistare 99 oggetti nello Shop ma puoi usare l'hash per limitarlo nell Scene_Shop, ti posso spiegare anche come modificare quella se serve ;)

  2. Comunque per gli script come regola generale vanno messi sotto tutti gli altri ma sopra il main, quello che ti ho postato io non fa eccezione e credo neanche quelli di heisenman. Per il resto consiglio anche io come suggerisce Guardian di portarlo su mappa e poi fargli fare tutto quello che vuoi via eventi, hai così molte possibilità di personalizzazione e non devi stare a smanettare ulteriormente con gli script :smile:
  3. E invece sono tile, ho dato per scontato che gli servissero quelli, comunque per le coordinate a schermo(in pixel relativo a dove è il pg sullo schermo, non sulla mappa) si può usare $game_player.screen_x, $game_player.screen_y.

     

    Comunque non ho mica capito cosa ti serve sai Squall, spiegati meglio xD

    Tu salvi le coordinate, che ne so in $coord = [$game_player.x, $game_player.y, $game_map.map_id]

    prima di cambiare mappa, e poi le riusi quando ti servono (ho messo pure l'id della mappa perché in teoria per il trasporto serve anche quello)

  4. Usando il comando draw_text(x, y, width, height, str [, align]) delle bitmap puoi passare come ultimo argomento opzionale l'allineamento del testo che può essere 1 centrato e 2 allineato a destra, questo relativo comunque a quanto spazio gli dai con la width (fai qualche esperimento se non capisci quest'ultima frase perchè non so spiegarlo xP)

     

    Dannazione scrivete tutti mentre rispondo?!?! :smile:

    Per ottenere le coordinate dell'eroe su mappa puoi usare

    $game_player.x e $game_player.y

  5. Aaaallora, vediamo se ho capito bene, ti serve un pezzo di codice che quando si viene sconfitti in battaglia ti riporti in una determinata mappa giusto?

    Ora, questo è il codice presupponendo che il BS sia standard:

    class Scene_Battle  def call_gameover	$game_temp.next_scene = nil	$game_map.setup(1)	#Cambia l'1 con l'ID della mappa desiderata, serve ad impostare la mappa su cui verrai portato	$game_player.moveto(8, 6) #Cambia 8 con la coordinata X e 6 con la coordinata Y, ti imposta la posizione del player sulla mappa		$game_player.set_direction(2) #Imposta la direzione dell'eroe, 2 è Giu, 8 è su, 4 è sinistra e 6 è destra	$game_player.refresh	$scene = Scene_Map.new #Ti porta dalla battaglia alla mappa	$game_map.autoplay #fa partire BGM e BGS se ci sono	#Cura tutti, cancella fino a	for actor in $game_party.members #scorre i membri del party	  actor.recover_all	   #e li cura uno ad uno	end	#qui se non ti serve	@message_window.clear #Pulisce la finestra dei messaggi di battaglia  endend

    Ti ho commentato tutto il codice, vedi se ti servono delle modifiche, se lo vuoi disattivabile ecc... ;)

  6. Hai commentato via il metodo update nel ciclo lopp che sta nel main

     

    Graphics.transition	loop do	  Graphics.update	  Input.update	 #update  <=DECOMMENTA QUESTO	  if $scene != self		break	  end	end 	Graphics.freeze@finestrevarie.dispose

    quindi non viene richiamato, quindi non succede nulla xD

  7. l'update di una scena viene normalmente chiamata una volta a frame, quindi puoi sfruttarlo come un ciclo. Non ho idea del perchè non ti funzioni, forse sbagli a fare qualcosa, non so.

     

    Per quello che vuoi fare io mi sono immaginato una cosa del genere

    	#Ciclo che scorre i tasti standard di Rpg Maker	for tasto in ["DOWN", "LEFT", "RIGHT", "UP", "A", "B", "C", "X", "Y", "Z", "L", "R", 				"SHIFT", "CTRL", "ALT", "F5", "F6", "F7", "F8", "F9"]	if Input::trigger?(eval("Input::#{tasto}")) #Controlla se il tasto è premuto trasformando la stringa nella costante definita nel modulo Input	  @tasti.push(tasto) #Se il tasto è premuto viene aggiunto all'array che tiene memoria dell'input	  @tasti.shift if @tasti.size > 5 #Se l'array eccede i 5 input memorizzati cancella l'input più vecchio	end	#Questa parte converte l'input digitato in una stringa unica	text = ""	for t in @tasti	  text += "#{t};"	end	#Se l'input corrisponde a una sequenza faccio succedere qualcosa	if text.include?("UP;UP;DOWN;") 	  p "ciao"	  #Cancello l'input memorizzato altrimenti l'operazione di confronto qui sopra si ripete sempre	  @tasti = []	end	#ovviamente puoi aggiungere altre sequenze sotto

    vedi se ti ci ritrovi.

     

    Per dividere un immagine, beh puoi usare il comando blt delle bitmap per prendere una porzione rettangolare di immagine. Direttamente preso dalla guida di rpg maker (tradotto un bel po alla buona)

    blt(x, y, src_bitmap, src_rect[, opacity])

    Effettua il trasferimento di un blocco src_rect (Rect) della src_bitmap alle coordinate specificate (x, y).

    Non ho capito che intendi con "non linearmente"

  8. Beh l'ordine in cui metti le funzioni non conta, l'ho messo dopop perchè, bo, mi piaceva di più li sotto. Per il sistema che vuoi adottare non ho giocato a Zelda però se ho capito bene vuoi controllare se l'input dell'utente corrisponde a una sequenza già conosciuta, giusto? In quel caso probabilemente trasformare in stringa e confrontare può essere si una bella pensata, fammi/facci sapere come va che magari può tornare utile a qualcuno :sisi:

     

    Hai editato mentre scrivevo, meno male che ho fatto anteprima, la funzione è sempre include?

    puoi fare quindi una cosa del genere

    s1 = 'abc'

    s2 = 'skasbczqw'

    s2.include?(s1) che ti ritorna true ;)

     

    Edit: hai ri-editato mentre scrivevo xD

  9. No se passassi un array ad include? ti cercherebbe un array nell'array, roba del tipo:

    a1 = ['a', 'b', 'c']

    a2 = ['z', 'a', 'b', 'c']

    a3 = ['a', 'z', ['a', 'b', 'c']]

    a2.include?(a1) ritorna false

    a3.include?(a1) ritorna true per il motivo che ti ho anche evidenziato in grassetto :P

     

    Per controllare invece se il contenuto di un array è presente in un altro devi usare una funzione ricorsiva, un cosa tipo

    class Array  def includes?(val)	for i in 0...self.size	  if ctrl_seq(val, i, 0) == true		return true 	  end	end	return false  end   def ctrl_seq(seq, i, iseq)	if self[i] == seq[iseq]	  if iseq < seq.size - 1 		if i < self.size - 1		  ctrl_seq(seq, i + 1, iseq + 1) 		else		  return false		end	  else		return true	  end	else	  return false	end    endend

    aggiungi questo pezzo di codice e usa la nuova funzione per array chiamata includes? (ti conviene rinominarla che così magari si confonde :P ) passandogli l'array da confrontare, ad esempio

    a1 = ['a', 'b', 'c']

    a2 = ['s', 'k', 'a', 'b', 'c', 'z', 'q', 'w']

    a2.includes?(a1) ritorna a questo punto true :D

     

    E' una funzione scritta così su due piedi sicuramente c'è un metodo migliore di questo ( e pensandoci me ne e venuto in mente un'altro un po contorto xD).

    Fammi sapere se ti è utile quello che ho scritto ;)

  10. Non so se ce un qualche metodo ufficiale, però puoi usare le api di windows, tieni questa funzioncina

    def tempPath(bfflnght = 80)  path = " " * bfflnght  Win32API.new("kernel32","GetTempPath",['N','P'],'N').call(bfflnght, path)  return path.gsub(/\0.*$/) {}end

    la richiami con

    tempPath(NumeroMassimoCaratteri)

    e ti ritorna la stringa con il percorso

    dimmi se ti funzica ;)

  11. Per The Witcher il fattore difficoltà incide di più sulla dipendenza dall'alchimia che altro ma sicuramente a difficile è molto più godibile. Comunque mi sembra che una mod per la difficoltà ed il bilanciamento nella platinum (se è quella che hai comprato, questa per capirci) ci sia (flash mod credo) se proprio la difficoltà ti fa storcere il naso.
  12. Premetto che non mi sono messo a leggere tutto ma così su due piedi mi viene da chiederti se hai controllato che la finestra sia abbastanza grande da poter contenere quello che vuoi disegnare.

    Comunque posta tutto il codice della finestra magari con allegato uno screen che non guasta mai ;)

  13. Cioè vuoi che gli eventi continuino a muoversi?

    Puoi usare

    $game_map.update

    oltre ad aggiornare anche lo Spriteset_Map, non aggiornando l'Intepreter (quello che gestisce le azioni degli eventi)

    non dovrebbero crearsi problemi.

    Se invece vuoi solo un immagine animata di sfondo allora ti conviene fare con un altro metodo che se vuoi ti posso spiegare.

  14. Aggiungi questo in un nuovo script e dimmi se va

    class Scene_Menu   alias abs_scene_cpctmn_main main  alias abs_scene_cpctmn_update update  alias abs_scene_cpctmn_update_skill update_skill   def main	@shk_window = Window_Command.new(250, ["Abilità assegniata al Tasto"])	@shk_window.visible = false	@shk_window.active = false	@shk_window.x = 200	@shk_window.y = 250	@shk_window.z = 1500	abs_scene_cpctmn_main	@shk_window.dispose  end   def update	@shk_window.update	abs_scene_cpctmn_update	if @shk_window.active	  update_shk	  return	end  end   def update_skill	abs_scene_cpctmn_update_skill	if Input.trigger?(Input::X)	  $game_system.se_play($data_system.decision_se)	  @skill_window.active = false	  @shk_window.active = true	  @shk_window.visible = true	  $ABS.skill_key[1] = @skill_window.skill.id	end	if Input.trigger?(Input::Y)	  $game_system.se_play($data_system.decision_se)	  @skill_window.active = false	  @shk_window.active = true	  @shk_window.visible = true	  $ABS.skill_key[2] = @skill_window.skill.id	end	if Input.trigger? (Input::Z)	  $game_system.se_play($data_system.decision_se)	  @skill_window.active = false	  @shk_window.active = true	  @shk_window.visible = true	  $ABS.skill_key[3] = @skill_window.skill.id	end  end   def update_shk	if Input.trigger?(Input::C)	  $game_system.se_play($data_system.decision_se)	  @shk_window.active = false	  @shk_window.visible = false	  @skill_window.active = true	  return	end  endend

    :sisi:

  15. Molto interessanti tutti e 2 i contest anche se a me attira solo il gameplay contest per il quale ho votato.

    Per la questione diversità dei tileset in teoria le differenze sono:

    2k, 2k3:

    18 Autotile di differente tipologia

    288 Tile

    XP:

    7 Autotile che possono essere animati o non

    Infiniti Tile

    VX

    104 Autotile di differente tipologia(simile al 2k) divisi in TileA1,A2,A3,A4

    1152 Tile divisi in TileA5(16*32), TileB,C,D,E (32*32)

     

    Il più limitati sono il 2k sul fattore Tile e l'XP sul fattore Autotile, quindi volendo si può fare un allineamento verso il basso a 288 Tile e 7 Autotile per poter mettere il tutto alla pari anche se non so se può essere una cosa adatta per il contest

  16. Si, volendo si può usare un fattore tempo, facendo una cosa del tipo

    ((rand(valore) + (Time.now.sec * valore / 60.0)) / 2).ceil

    cioè prendo i secondi dell'orologio di sistema e li metto in rapporto al valore random che voglio ottenere, poi faccio la media con un valore random ottenuto nel modo classico del ruby. Purtroppo però l'unità più piccola a disposizione è il secondo anche se dovrebbe bastare a rendere le cose un po più random.

  17. Se ho capito bene fai così, aggiungi questo scriptino e rimetti MAX_MEMBERS = 4

    class Game_Party  def add_actor(actor_id)	#cambia il 50 con il numero della switch che desideri	max_members = $game_switches[50] == true ? 1 : MAX_MEMBERS	if @actors.size < max_members and not @actors.include?(actor_id)	  @actors.push(actor_id)	  $game_player.refresh	end  endend

    Poi quando vuoi impostare 1 solo membro attivi la switch 50, altrimenti la disattivi, puoi cambiare numero di switch modificando il 50 di

    $game_switches[50]

×
×
  • Create New...