Jump to content
Rpg²S Forum

makgyver

Utenti
  • Posts

    175
  • Joined

  • Last visited

Posts posted by makgyver

  1. Ecco la Scene_Item modificata e tutto ciò ke ti serve:

    sostituisci la classe Window_Item con questa nuova (che si chiama con lo stesso nome come tutte):

     

    class Window_Item < Window_Selectable
     attr_accessor :kind
     #--------------------------------------------------------------------------
     # ● Inizializzazione dell'oggetto
     #--------------------------------------------------------------------------
     def initialize(kind = 0)
    super(0, 128, 640, 352)
    @column_max = 2
    refresh
    self.index = 0
    # Durante una finestra si muove al centro dello schermo e diventa
    # translucente
    if $game_temp.in_battle
      self.y = 64
      self.height = 256
      self.back_opacity = 160
    end
    @kind = kind
     end
     #--------------------------------------------------------------------------
     # ● Acquisizione di un oggetto
     #--------------------------------------------------------------------------
     def item
    return @data[self.index]
     end
     #--------------------------------------------------------------------------
     # ● Aggiornamento
     #--------------------------------------------------------------------------
     def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    # Aggiunta di un oggetto
    case @kind 
    when 0
      for i in 1...$data_items.size
    	if $game_party.item_number(i) > 0
    	  @data.push($data_items[i]) if (not Filter_Items::SPECIAL_ITEMS.include?(i))
    	end
      end
    # Vengono anche aggiunti un'arma e uno scudo se è possibile,
    # eccetto durante una battaglia
    when 1
      unless $game_temp.in_battle
    	for i in 1...$data_weapons.size
    	  if $game_party.weapon_number(i) > 0
    		@data.push($data_weapons[i]) if (not Filter_Items::SPECIAL_WEAPONS.include?(i))
    	  end
    	end
    	for i in 1...$data_armors.size
    	  if $game_party.armor_number(i) > 0
    		@data.push($data_armors[i]) if (not Filter_Items::SPECIAL_ARMORS.include?(i))
    	  end
    	end
      end
    
    when 2
      for i in 1...$data_items.size
    	if $game_party.item_number(i) > 0
    	  @data.push($data_items[i]) if (Filter_Items::SPECIAL_ITEMS.include?(i))
    	end
      end
    # Vengono anche aggiunti un'arma e uno scudo se è possibile,
    # eccetto durante una battaglia
      unless $game_temp.in_battle
    	for i in 1...$data_weapons.size
    	  if $game_party.weapon_number(i) > 0
    		@data.push($data_weapons[i]) if (Filter_Items::SPECIAL_WEAPONS.include?(i))
    	  end
    	end
    	for i in 1...$data_armors.size
    	  if $game_party.armor_number(i) > 0
    		@data.push($data_armors[i]) if (Filter_Items::SPECIAL_ARMORS.include?(i))
    	  end
    	end
      end
    end
    # Se il numero degli oggetti è 0, verrà creato un bitmap e tutti
    # gli oggetti verranno disegnati
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
    	draw_item(i)
      end
    end
     end
     #--------------------------------------------------------------------------
     # ● Disegna un oggetto
     #	 index : Numero dell'oggetto
     #--------------------------------------------------------------------------
     def draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    if item.is_a?(RPG::Item) and
       $game_party.item_can_use?(item.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    self.contents.font.name = "Arial"
    self.contents.font.size = 24
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
     end
     #--------------------------------------------------------------------------
     # ● Aggiornamento del testo di aiuto
     #--------------------------------------------------------------------------
     def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
     end
    end

     

     

    Poi sostituisci Scene_Item con questa nuova:

     

    class Scene_Item
     #--------------------------------------------------------------------------
     # ● メイン処理
     #--------------------------------------------------------------------------
     def main
    # ヘルプウィンドウ、アイテムウィンドウを作成
    @choise_window = Window_Choise.new
    @help_window = Window_Help.new
    @item_window = Window_Item.new
    @choise_window.active = true
    # ヘルプウィンドウを関連付け
    @item_window.help_window = @help_window
    # ターゲットウィンドウを作成 (不可視・非アクティブに設定)
    @target_window = Window_Target.new
    @target_window.visible = false
    @target_window.active = false
    # トランジション実行
    Graphics.transition
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレーム更新
      update
      # 画面が切り替わったらループを中断
      if $scene != self
    	break
      end
    end
    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @help_window.dispose
    @item_window.dispose
    @target_window.dispose
    @choise_window.dispose
     end
     #--------------------------------------------------------------------------
     # ● フレーム更新
     #--------------------------------------------------------------------------
     def update
    # ウィンドウを更新
    if @choise_window.active == false
      @help_window.update
      @item_window.update
      @target_window.update
    # ターゲットウィンドウがアクティブの場合: update_target を呼ぶ
    if @item_window.active
    	update_item
      return
    end
    if @target_window.active
      update_target
      return
    end
    else
      @choise_window.update
      update_choise
      update_help
    end
    # アイテムウィンドウがアクティブの場合: update_item を呼ぶ
     end
     
     def update_choise
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Menu.new(0)
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      @choise_window.active = false
      @item_window.active = true
    end
    @item_window.kind = @choise_window.index
    @item_window.refresh
     end
     #--------------------------------------------------------------------------
     # ● フレーム更新 (アイテムウィンドウがアクティブの場合)
     #--------------------------------------------------------------------------
     def update_item
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # メニュー画面に切り替え
      @choise_window.active = true
      @item_window.active = false
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # アイテムウィンドウで現在選択されているデータを取得
      @item = @item_window.item
      # 使用アイテムではない場合
      unless @item.is_a?(RPG::Item)
    	# ブザー SE を演奏
    	$game_system.se_play($data_system.buzzer_se)
    	return
      end
      # 使用できない場合
      unless $game_party.item_can_use?(@item.id)
    	# ブザー SE を演奏
    	$game_system.se_play($data_system.buzzer_se)
    	return
      end
      # 決定 SE を演奏
      $game_system.se_play($data_system.decision_se)
      # 効果範囲が味方の場合
      if @item.scope >= 3
    	# ターゲットウィンドウをアクティブ化
    	@item_window.active = false
    	@target_window.x = (@item_window.index + 1) % 2 * 304
    	@target_window.visible = true
    	@target_window.active = true
    	# 効果範囲 (単体/全体) に応じてカーソル位置を設定
    	if @item.scope == 4 || @item.scope == 6
    	  @target_window.index = -1
    	else
    	  @target_window.index = 0
    	end
      # 効果範囲が味方以外の場合
      else
    	# コモンイベント ID が有効の場合
    	if @item.common_event_id > 0
    	  # コモンイベント呼び出し予約
    	  $game_temp.common_event_id = @item.common_event_id
    	  # アイテムの使用時 SE を演奏
    	  $game_system.se_play(@item.menu_se)
    	  # 消耗品の場合
    	  if @item.consumable
    		# 使用したアイテムを 1 減らす
    		$game_party.lose_item(@item.id, 1)
    		# アイテムウィンドウの項目を再描画
    		@item_window.draw_item(@item_window.index)
    	  end
    	  # マップ画面に切り替え
    	  $scene = Scene_Map.new
    	  return
    	end
      end
      return
    end
     end
     #--------------------------------------------------------------------------
     # ● フレーム更新 (ターゲットウィンドウがアクティブの場合)
     #--------------------------------------------------------------------------
     def update_target
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # アイテム切れなどで使用できなくなった場合
      unless $game_party.item_can_use?(@item.id)
    	# アイテムウィンドウの内容を再作成
    	@item_window.refresh
      end
      # ターゲットウィンドウを消去
      @item_window.active = true
      @target_window.visible = false
      @target_window.active = false
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # アイテムを使い切った場合
      if $game_party.item_number(@item.id) == 0
    	# ブザー SE を演奏
    	$game_system.se_play($data_system.buzzer_se)
    	return
      end
      # ターゲットが全体の場合
      if @target_window.index == -1
    	# パーティ全体にアイテムの使用効果を適用
    	used = false
    	for i in $game_party.actors
    	  used |= i.item_effect(@item)
    	end
      end
      # ターゲットが単体の場合
      if @target_window.index >= 0
    	# ターゲットのアクターにアイテムの使用効果を適用
    	target = $game_party.actors[@target_window.index]
    	used = target.item_effect(@item)
      end
      # アイテムを使った場合
      if used
    	# アイテムの使用時 SE を演奏
    	$game_system.se_play(@item.menu_se)
    	# 消耗品の場合
    	if @item.consumable
    	  # 使用したアイテムを 1 減らす
    	  $game_party.lose_item(@item.id, 1)
    	  # アイテムウィンドウの項目を再描画
    	  @item_window.draw_item(@item_window.index)
    	end
    	# ターゲットウィンドウの内容を再作成
    	@target_window.refresh
    	# 全滅の場合
    	if $game_party.all_dead?
    	  # ゲームオーバー画面に切り替え
    	  $scene = Scene_Gameover.new
    	  return
    	end
    	# コモンイベント ID が有効の場合
    	if @item.common_event_id > 0
    	  # コモンイベント呼び出し予約
    	  $game_temp.common_event_id = @item.common_event_id
    	  # マップ画面に切り替え
    	  $scene = Scene_Map.new
    	  return
    	end
      end
      # アイテムを使わなかった場合
      unless used
    	# ブザー SE を演奏
    	$game_system.se_play($data_system.buzzer_se)
      end
      return
    end
     end
     
     def update_help
    text = ""
    case @choise_window.index
    when 0
      text = "Visualizze gli oggetti comuni."
    when 1
      text = "Visualizza le armi e gli scudi."
    when 2
      text = "Visualizza gli oggetti rari."
    end
    @help_window.set_text(text)
     end
    end

     

     

    Infine aggiungi prima di main questa classe e chiamala come vuoi:

     

    module Filter_Items
     #SPECIAL_ITEM = [id1, id2...] id degli oggetti rari
     SPECIAL_ITEMS = [1]
     SPECIAL_WEAPONS = []
     SPECIAL_ARMORS = []
    end
    class Window_Choise < Window_Selectable
     def initialize
    super(0, 64, 640, 64)
    commands = ["Oggetti", "Armi", "Rarita'"]
    @item_max = commands.size
    @commands = commands
    @column_max = 3
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
    self.index = 0
     end
     #--------------------------------------------------------------------------
     # ● Aggiornamento
     #--------------------------------------------------------------------------
     def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i, normal_color)
    end
     end
     #--------------------------------------------------------------------------
     # ● Disegna un oggetto
     #	 index : Numero dell'oggetto
     #	 color : Colore del personaggio
     #--------------------------------------------------------------------------
     def draw_item(index, color)
    self.contents.font.color = color
    self.contents.font.name = "Arial"
    self.contents.font.size = 24
    rect = Rect.new(4 + index*220, 0, self.contents.width - 8, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index])
     end
     #--------------------------------------------------------------------------
     # ● Cancellazione di un oggetto
     #	 index : Numero dell'oggetto
     #--------------------------------------------------------------------------
     def disable_item(index)
    draw_item(index, disabled_color)
     end
    end

     

     

    Istruzioni:

    Semplicemente troverai nell'ultima classe ke hai inserito all'inizio 3 array all'interno del modulo Filter_Items li inserisci gli id degli oggetti, armi o armature kefanno parte degli oggetti speciali e il gioco è fatto.

     

    Per qualsiasi problema o domanda sai dove trovarmi.

  2. In un menù che ho postato tempo fa c'era proprio la suddivisione degli oggetti in ogg-rarità non so se esista uno script ma per farlo non è difficile. Per esempio puoi crearti o un vettore o un Hashtable con gli id degli oggetti rari cosicchè in fase di visualizzazione nel menu puoi filtrarli escludendo o includendo solamente tali id. Non è molto difficile se hai problemi posso provare ad aiutarti.
  3. mmm ok provo a fare qualche cosa a casa speriamo bene ^^ Grazie :biggrin:

    una variabile che in Scene_Title indica già se ci sono o meno salvataggi è @continue_enabled che viene impostata a true o false in base al risultato del ciclo for appena successivo alla sua dichiarazione (questo almeno nell' XP) e li puoi fare un:

    if @continue_enabled
    #fai fare la scelta magari creandoti una piccola window_Command con le 2 scelte
    else
    #fai partire l'intro
    end

     

    non so essere più preciso xke non scripto in VX ma spero di esserti stato d'aiuto.

  4. Descrizione:

    Questo "Progetto" consiste nella creazione degli script, e correlata grafica, che simulano in tutto e per tutto i giochi dei Casinò cosicchè se volete creare un casinò o più semplicemente permettere ai personaggi dei vostri RPG di giocare "d'azzardo"(così magari i pg guadagnano soldi divertendosi) con giochi che esistono e sono belli da giocare.

    Il topic cmq avrà in se la lista di tutti gli script creati che saranno postati in topic a se stanti.

     

    Autore:

    IO (makgyver)

     

    Lista script realizzati:

    - BlackJack V1.1 (Carte grandi - Funzionalità minime)

    - BlackJack V2.1 (Carte piccole - Ricco di funzioni)

     

    Lista script in lavorazione:

    - Texas Hold'em V1.0 Beta (Grafica simile a BlackJack V2.1)

  5. @losco:

     

     

     

    lo [0] e il [2] sono gli indici degli array cui si riferiscono... arr1[0] indica prendi il primo valore all'interno dell'array, arr1[2][0] significa prendi il terzo valore dell'array arr1 che a sua volta tale valore è un array allora di questo array (arr1[2] e come se fosse astrattamente un nuovo array) prendimi il primo elemento quindi [0] e in definitiva arr1[2][0]... Spero di essere stato chiaro...

     

     

     

  6. Allora in mancanza di Mikb ti dico io:

     

     

    la prima riga è ok, la seconda non è sbagliata ma credo ke l'esercizio intendesse di riferirsi ai 2 numeri del primo array e non di riscrivere "a mano" i 2 numeri. Cioè scrivere

    arr2 = [arr1[...]+arr1[...], ...]

    la terza riga è ok, e l'ultima invece è sbagliata(sempre se non ho inteso male io il significato dell'es.) xke dovevi inserire nella terza posizione riferendoti a essa e non riscrivendo completamente l'array e mettendo nella terza posizione il valore.

     

     

     

    @Mikb: scusami per l'intrusione ma è per risp più velocemente a ki scrive in caso dica qualcosa di errato dimmi pure!!

     

    EDIT: cavolo mi hai bruciato sul tempo!! sorry Mikb x la doppia risposta!!

  7. Si sono scripter... la tua idea non sarebbe male xò si dovrebbero trovare tempi uguali tra maestri e allievi e ki come me ha la maggior parte della giornata occupata (da domani) farebbe fatica a fare qualcosa... Un'altra cosa ke si potrebbe fare è creare una mini-guida ke ha in se tutte le lezioni già scritte (stile libro scolastico) e ki è al passo con le lezioni e non vuole aspettare intanto può esercitarsi con le lezioni successive oppure, mettendo altri esercizi fare quelli... Però bisogna sentire Mikb xke è il suo corso io sono solo un supervisore ke quando posso lo aiuto...
  8. Si credo tu abbia ragione... Io direi magari di mettere a ogni lezione la "durata" ovvero dal momento in cui parte fino al momento in cui si aspettano le risposte, e la lezione seguente parte subito dopo così chi vuole seguire passo passo deve rispettare quei tempi altrimenti dovrà mettersi in pari, una sorta di "fuori corso" anke se è brutto da dire... Vediamo ke ne pensa Mikb...
  9. Eh l'ieda è proprio texas hold'em anke xke almeno li c'è bisogno di abilità oltre ke della fortuna... Solo ke da programmare è un po difficile anke xke qui entrano nel gioco altri giocatori... xò cercherò di fare del mio meglio... :wink:
  10. Premetto che sono uno scripter del XP cmq il fatto ke il danno lo vedi prima dell'animazione è o meglio può essere dovuto da 2 fattori(insieme o singolarmente qst non saprei):

    1) Gli script sono più veloci degli eventi;

    2) Il momento in cui fai partire l'evento è troppo dopo il momento in cui viene visualizzato il danno

    Il modo per risolvere questo può essere quello di anticipare l'evento e ritardare (tramite script) la visualizzazione del danno...

  11. Mitico! Adoro il minigame del BlackJack! Lo userò nei miei progetti ;)

     

    Tra un pò posto la versione 2.1 con alcune nuove cose, tipo che la frase di vittoria e sconfitta esce a random e non è fissa... Cmq grazie mille!!

     

    EDIT: L'aggiornamento è disponibile, lo script V. 2.1 è stato uppato... Buon divertimento!!

  12. Mi scuso per il doppio post ma l'aggiornamento apportato allo script è notevole.

    E' disponibile la versione 2.0 del gioco del blackjack le differenze con la 1.1 sono:

    - Le puntate vengono effettuate tramite fiches ke vengono visualizzate a video;

    - E' visualizzata una barra dei soldi ke indica se state perdendo (vedendo anke indicativamente quanto) o guadagnando (la barra diventa verde);

    - La grafica delle carte è cambiata(migliorata oso dire e ringrazio i grafici di Windows Vista);

    - E' stato aggiunto un puntatore "alla mano" ovvero quando si sdoppia si vede a quale mano sono riferite le azioni ke state compiendo;

    - Minor pesantezza della grafica (da 3.1 a 1.7 MB di grafica);

    - Infine sono cambiate la disposizione di alcune finestre.

     

    Per commenti, consigli, critiche o altro io sono qui. Grazie, a presto con un nuovo script o con aggiornamenti!!

  13. Le carte si possono sempre contare, e in un gioco è pure più facile visto che puoi segnarti tutte le carte che escono su un foglio...

    Basta che il tuo script non bari (ovvero non venga generato un mazzo nuovo per ogni singola partita ma le carte finiscano in fondo al mazzo) e il gioco è pronto per essere contato...

    Eh no a ogni mano il mazzo è nuovo e mischiato quindi contare è impossibile...

  14. io l'help di rpg maker ce l'ho in giapponese e non lo capisco, quindi posso guardare solo gli esempi.

     

    sicuramente parlerò di p e print, ma finora non ce n'è stato bisogno. A proposito, ci sono differenze sostanziali fra i due?

     

    la prossima lezione credo tratterà gli array, dopodichè o funzioni, classi e moduli, o cominciamo con condizioni e cicli

     

    Ti consiglio di fare prima le condizioni e i cicli delle funzioni e delle classi xkè così hanno materiale per poter far fare qualcosa di abbastanza "complesso" in una funzione e/o metodi di una classe, e anke xke i cicli sono direttamente collegati al concetto di array (vettore)... Cmq sta andando molto bene il corso grande mikb89!!

  15. allora premetto che sei un mostro in ruby, lo script funge che è una bellezza solo una cosa, quando rende le cose rende solo le armi e non gli scudi,perche se metto un mithril shield lui me lo cambia come un lether whip e sono entrambi numerati come 005 quindi credo che se noi in give_armors modifichiamo questa riga

    $game_party.gain_item($data_weapons, @armor)

    cosi:

    $game_party.gain_item($data_armors, @armor)

    dovrebbe... SIIIIII funge evviva che bello, sono quasi commosso, sei un asso makguyver!!! davvero

    ti chiederei di insegnarmi qualcosa ma è già molto quello che hai fatto, davvero grazie voglio troppo sdebitarmi con te :D

    Si si era giusto mettere armors mi ero dimenticato di modificare la riga :blink: ... Beh grazie mille dei complimenti valoroso guerriero (adoro guru guru) sono contento ti "funga" tutto... Per qualsiasi cosa sai dove trovarmi...

  16. Bello script complimenti e poi il BlackJack mi piace molto^^

     

    Grazie mille!! Piace anke a me come gioco specialmente dopo aver visto il film 21!! In effetti mi era venuta la tentazione di creare lo script come se giocasse come in un vero casinò con la possibilità di contare le carte....

     

    EDIT: Aggiustato piccolo bug nel girare della carta del banco!!

  17. Si credo si possa fare, inoltre xò devo dire ke c'è un piccolo bug k xò fa andare in crash il gioco. L'errore è dovuto ad alcune variabili ke in alcuni istanti posso essere nulle credo cmq non ci voglia molto a sistemarlo.. Si l'idea principale in effetti era di collegarlo all'effeto giorno-notte basta cambiare le variabili @hour e @min (e ovviamente risolvere il problema ke ho detto prima)...
  18. grazie grandissimo, purtroppo da ancora errore non riconosce il metodo equip.

    immaginavo era un dubbione ke avevo.. xò è un passo avanti ke sia un errore così... apetta un attimo ke guardo cosa devi mettere appena lo trovo edito questo messaggio e ti dico...

     

    EDIT:

    cambia le 2 righe actor.equip(0,0) e (1,0) con

    actor.change_equip(0,nil)
    actor.change_equip(1,nil)

  19. bene... vuol dire che devo lasciar perdere l'idea, conviene segnalare che lo script è incompatibile con il vx

    Beh nell'altro topic ke hai aperto ho provato a convertire a mano il codice, premetto e di rgss2 non ho mai scritto una riga ma in teoria le modifiche che ho fatto non sono sbagliate...

  20. Ok testato,lo script sembra girare bene,premetto che non so le regole del giocoxD

    Comunque riguardo al tuo progetto casinò graficamente forse posso aiutarti

     

    Beh le regole sono semplici ki si avvicina più a 21 senza andare oltre vince. Sdoppiare vuol dire ke se le prime 2 carte sono uguali giochi 2 mani contemporaneamente. Raddoppiare vuol dire ke punti il doppio e giri una sola carta in più.

     

    Per il progetto ti so dire xke devo ancora decidere ke giocki inserire in questo "set" vorrei anke il poker ma da programmare è un casino...

×
×
  • Create New...