Jordinateur Blob
Nombre de messages : 260 Localisation : Devant mon ordinateur !(enfin sa dépend, peut-être avec ma copine aussi ^^) Humeur/Caractère : Aller a l'école T_T Date d'inscription : 12/05/2006
| Sujet: Systeme de gestion des quêtes Dim 21 Mai - 0:13 | |
| Gestion des quêtesBy Sunmat Copiez le code, ouvrez l'éditeur de script ( F11 ) et créez en un nouveau au dessus de 'Main'. Nommez ce script " Scene_Mission " et collez ce code: - Code:
-
#============================================================================== # ■ Scene_Mission #------------------------------------------------------------------------------ # Script créé par Sunmat #==============================================================================
class Scene_Mission #-------------------------------------------------------------------------- # ● メイン処理 #-------------------------------------------------------------------------- def main # ヘルプウィンドウ、アイテムウィンドウを作成 @help_window = Window_Help.new @item_window = Window_Mission.new # ヘルプウィンドウを関連付け @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 end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # ウィンドウを更新 @help_window.update @item_window.update @target_window.update # アイテムウィンドウがアクティブの場合: update_item を呼ぶ if @item_window.active update_item return end # ターゲットウィンドウがアクティブの場合: update_target を呼ぶ if @target_window.active update_target return end end #-------------------------------------------------------------------------- # ● フレーム更新 (アイテムウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_item # B ボタンが押された場合 if Input.trigger?(Input::B) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) # メニュー画面に切り替え $scene = Scene_Menu.new(0) 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 end #================================================
Ensuite entrez dans le script Window_Item, a la ligne 39 vous avez
for i in 1...$data_items.size
remplacez par
for i in 1...499
Créez un nouveau script nommé " Window_Mission " au dessus de " Main " et mettez ceci :
#============================================================================== # ■ Window_Mission #------------------------------------------------------------------------------ # Créé par Sunmat #==============================================================================
class Window_Mission < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 64, 640, 416) @column_max = 2 refresh self.index = 0 # 戦闘中の場合はウィンドウを画面中央へ移動し、半透明にする if $game_temp.in_battle self.y = 64 self.height = 256 self.back_opacity = 160 end end #-------------------------------------------------------------------------- # ● アイテムの取得 #-------------------------------------------------------------------------- def item return @data[self.index] end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh if self.contents != nil self.contents.dispose self.contents = nil end @data = []
# アイテムを追加
for i in 500...$data_items.size if $game_party.item_number(i) > 0 @data.push($data_items[i]) end end # 戦闘中以外なら武器と防具も追加
# 項目数が 0 でなければビットマップを作成し、全項目を描画 @item_max = @data.size if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize for i in 0...@item_max draw_item(i) end end end
#-------------------------------------------------------------------------- # ● 項目の描画 # index : 項目番号 #-------------------------------------------------------------------------- def draw_item(index) item = @data[index] case item when RPG::Item number = $game_party.item_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 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, "x", 1) self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2) end #-------------------------------------------------------------------------- # ● ヘルプテキスト更新 #-------------------------------------------------------------------------- def update_help @help_window.set_text(self.item == nil ? "" : self.item.description) end end
Utilisation Dans la gestions des objets, mettez un nombre d'objet supérieur à 500. Tous les objets après le 500e seront des missions. Nommez-les comme vous le voulez, mettez-y aussi le descriptif, et placez-les en "non-consomables". ATTENTION : l'objet N°500 n'est ni un objet ni une mission. Laissez le vide ! Exemple : vous avez 100 missions dans votre jeu, donc vous créez 600 objets et placez les missions du 501e au 600e. Ensuite vous créez 100 switchs. Pour les switchs : 0 la mission n'est pas effectuée. 1 la mission est accomplie. Pour entrer dans le menu des missions depuis un évènement (exemple : évènement commun appuie d'une touche) vous faites "insérer un script " et vous mettez : - Code:
-
$scene = Scene_Mission.new
| |
|
Dargon25 Blob-oeuf
Nombre de messages : 5 Date d'inscription : 27/01/2010
| Sujet: Re: Systeme de gestion des quêtes Mer 27 Jan - 20:49 | |
| Désoler mais j'ai pas tout piger avec les switch tu peut m'explique par mp grce à un screen d'event si tu a le temps ?
C'est important j'ai rien piger.^^ | |
|
GTK Painteur GTK
Nombre de messages : 3595 Age : 34 Humeur/Caractère : Fatigué Date d'inscription : 29/04/2006
Statut Expérience: (100/100) Pixel Point: ---
| Sujet: Re: Systeme de gestion des quêtes Lun 15 Fév - 11:54 | |
| Regarde la date du post avant de répondre s'il te plait.
Le forum est mort depuis presque un an, et Jordinateur n'est pas repassé sur le forum depuis plus de 4 ans. Je ne crois pas que tu auras une réponse. | |
|
Contenu sponsorisé
| Sujet: Re: Systeme de gestion des quêtes | |
| |
|