Day.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV/MZ

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Tutos: Checklist de la composition (...) / Sorties: Dread Mac Farlane - episode 8 / Sorties: Dread Mac Farlane - episode 7 / Jeux: Ce qui vit Dessous / News: Quoi de neuf sur Oniromancie (...) / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

403 connectés actuellement

29378305 visiteurs
depuis l'ouverture

7672 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Zarok

RPG Maker - La Communauté

Eclipso

Tous nos partenaires

Devenir
partenaire



Tout déplacer (attendre fin des déplacements)

Pour exécuter la commande tout déplacer sans tenir compte des évènements qui se déplacent aléatoirement, ou suivant un déplacement personnalisé.

Script pour RPG Maker XP
Ecrit par Inconnu
Publié par yoshimitsuw (lui envoyer un message privé)
Signaler un script cassé

❤ 0

Auteur : Inconnu
Logiciel : RPG Maker XP
Nombre de scripts : 2

Si vous voulez déplacer un évènement fixe en démarrage automatique sans tenir compte de tous ceux qui bougent aléatoirement (par exemple des npc dans une ville) vous pouvez utiliser ce script.

Tout d'abord, créez un nouveau script au dessus de main avec le nom que vous voulez.
Puis collez ceci

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
class Game_Event
 
  def getEvent
  return @event  
    
  end
  
  
end
 
 
 
 
class Interpreter
  attr_reader :deplacer # Pour que update  prenne en compte
 
  alias initialize2 initialize
  
  def initialize(depth = 0, main = false)
    @depth = depth
    @main = main
    # 深さは 100 レベルまで
    if depth > 100
      print("The common event call exceeded the upper boundary.")
      exit
    end
    # インタプリタの内部状態をクリア
    clear
    @deplacer=false
    
    
  end
  
  
  
  def tout_deplacer #attendre le déplacement des events qui bougent pas par defaut
    @deplacer=true
    
    
  end
  
  
  
  
  def chercher_page_courante(event)
  
          # Check in order of large event pages
      for page in event.pages.reverse
        # Make possible referrence for event condition with c
        c = page.condition
        # Switch 1 condition confirmation
        if c.switch1_valid
          if $game_switches[c.switch1_id] == false
            next
          end
        end
        # Switch 2 condition confirmation
        if c.switch2_valid
          if $game_switches[c.switch2_id] == false
            next
          end
        end
        # Variable condition confirmation
        if c.variable_valid
          if $game_variables[c.variable_id] < c.variable_value
            next
          end
        end
        # Self switch condition confirmation
        if c.self_switch_valid
          key = [@map_id, @event.id, c.self_switch_ch]
          if $game_self_switches[key] != true
            next
          end
        end
        # Set local variable: new_page
        new_page = page
        # Remove loop
        break
      end
    
    # If event page is the same as last time
    if new_page == @page
      # End method
      return
    end
    # Set @page as current event page
    return new_page
    
    
    
  end
  
  end



Ensuite remplacez toute la classe Interpreter 1 par :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
#==============================================================================
# ■ Interpreter (分割定義 1)
#------------------------------------------------------------------------------
#  イベントコマンドを実行するインタプリタです。このクラスは Game_System クラ
# スや Game_Event クラスの内部で使用されます。
#==============================================================================
 
class Interpreter
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     depth : ネストの深さ
  #     main  : メインフラグ
  #--------------------------------------------------------------------------
  
  attr_accessor :wait_count
  def initialize(depth = 0, main = false)
    @depth = depth
    @main = main
    # 深さは 100 レベルまで
    if depth > 100
      print("The common event call exceeded the upper boundary.")
      exit
    end
    # インタプリタの内部状態をクリア
    clear
  end
  #--------------------------------------------------------------------------
  # ● クリア
  #--------------------------------------------------------------------------
  def clear
    @map_id = 0                       # 起動時のマップ ID
    @event_id = 0                     # イベント ID
    @message_waiting = false          # メッセージ終了待機中
    @move_route_waiting = false       # 移動完了待機中
    @button_input_variable_id = 0     # ボタン入力 変数 ID
    @wait_count = 0                   # ウェイトカウント
    @child_interpreter = nil          # 子インタプリタ
    @branch = {}                      # 分岐データ
  end
  #--------------------------------------------------------------------------
  # ● イベントのセットアップ
  #     list     : 実行内容
  #     event_id : イベント ID
  #--------------------------------------------------------------------------
  def setup(list, event_id)
    # インタプリタの内部状態をクリア
    clear
    # マップ ID を記憶
    @map_id = $game_map.map_id
    # イベント ID を記憶
    @event_id = event_id
    # 実行内容を記憶
    @list = list
    # インデックスを初期化
    @index = 0
    # 分岐データ用のハッシュをクリア
    @branch.clear
  end
  #--------------------------------------------------------------------------
  # ● 実行中判定
  #--------------------------------------------------------------------------
  def running?
    return @list != nil
  end
  #--------------------------------------------------------------------------
  # ● 起動中イベントのセットアップ
  #--------------------------------------------------------------------------
  def setup_starting_event
    # 必要ならマップをリフレッシュ
    if $game_map.need_refresh
      $game_map.refresh
    end
    # コモンイベントの呼び出しが予約されている場合
    if $game_temp.common_event_id > 0
      # イベントをセットアップ
      setup($data_common_events[$game_temp.common_event_id].list, 0)
      # 予約を解除
      $game_temp.common_event_id = 0
      return
    end
    # ループ (マップイベント)
    for event in $game_map.events.values
      # 起動中のイベントが見つかった場合
      if event.starting
        # 自動実行でなければ
        if event.trigger < 3
          # 起動中フラグをクリア
          event.clear_starting
          # ロック
          event.lock
        end
        # イベントをセットアップ
        setup(event.list, event.id)
        return
      end
    end
    # ループ (コモンイベント)
    for common_event in $data_common_events.compact
      # トリガーが自動実行かつ条件スイッチが ON の場合
      if common_event.trigger == 1 and
         $game_switches[common_event.switch_id] == true
        # イベントをセットアップ
        setup(common_event.list, 0)
        return
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    # ループカウントを初期化
    @loop_count = 0
    # ループ
    loop do
      # ループカウントに 1 加算
      @loop_count += 1
      # イベントコマンド 100 個を実行した場合
      if @loop_count > 100
        # フリーズ防止のため、Graphics.update を呼ぶ
        Graphics.update
        @loop_count = 0
      end
      # マップがイベント起動時と異なる場合
      if $game_map.map_id != @map_id
        # イベント ID を 0 にする
        @event_id = 0
      end
      # 子インタプリタが存在する場合
      if @child_interpreter != nil
        # 子インタプリタを更新
        @child_interpreter.update
        # 子インタプリタの実行が終わった場合
        unless @child_interpreter.running?
          # 子インタプリタを消去
          @child_interpreter = nil
        end
        # 子インタプリタがまだ存在する場合
        if @child_interpreter != nil
          return
        end
      end
      # メッセージ終了待機中の場合
      if @message_waiting
        return
      end
      # 移動完了待機中の場合
      if @move_route_waiting
        # プレイヤーが移動ルート強制中の場合
        if $game_player.move_route_forcing
          return
        end
        # ループ (マップイベント)
        for event in $game_map.events.values
          # このイベントが移動ルート強制中の場合
          if event.move_route_forcing
            return
          end
        end
        # 移動完了待機中フラグをクリア
        @move_route_waiting = false
      end
      
      
      
      #Chmit méthode
      
      
      if @deplacer
        # プレイヤーが移動ルート強制中の場合
        if $game_player.move_route_forcing
          return
        end
        # ループ (マップイベント)
        for event in $game_map.events.values
          # このイベントが移動ルート強制中の場合
          
          page=chercher_page_courante(event.getEvent)
          if event.move_route_forcing and (page.move_type!=1 or page.move_type!=2 or page.move_type!=3)
            return
          end
        end
        # 移動完了待機中フラグをクリア
        @deplacer = false
      end
      
      
      
      
      #Fin Chmit méthode
      
      
      
      
      
      
      
      # ボタン入力待機中の場合
      if @button_input_variable_id > 0
        # ボタン入力の処理を実行
        input_button
        return
      end
      # ウェイト中の場合
      if @wait_count > 0
        # ウェイトカウントを減らす
        @wait_count -= 1
        return
      end
      # アクションを強制されているバトラーが存在する場合
      if $game_temp.forcing_battler != nil
        return
      end
      # 各種画面の呼び出しフラグがセットされている場合
      if $game_temp.battle_calling or
         $game_temp.shop_calling or
         $game_temp.name_calling or
         $game_temp.menu_calling or
         $game_temp.save_calling or
         $game_temp.gameover
        return
      end
      # 実行内容リストが空の場合
      if @list == nil
        # メインのマップイベントの場合
        if @main
          # 起動中のイベントをセットアップ
          setup_starting_event
        end
        # 何もセットアップされなかった場合
        if @list == nil
          return
        end
      end
      # イベントコマンドの実行を試み、戻り値が false の場合
      if execute_command == false
        return
      end
      # インデックスを進める
      @index += 1
    end
  end
  #--------------------------------------------------------------------------
  # ● ボタン入力
  #--------------------------------------------------------------------------
  def input_button
    # 押されたボタンを判定
    n = 0
    for i in 1..18
      if Input.trigger?(i)
        n = i
      end
    end
    # ボタンが押された場合
    if n > 0
      # 変数の値を変更
      $game_variables[@button_input_variable_id] = n
      $game_map.need_refresh = true
      # ボタン入力を終了
      @button_input_variable_id = 0
    end
  end
  #--------------------------------------------------------------------------
  # ● 選択肢のセットアップ
  #--------------------------------------------------------------------------
  def setup_choices(parameters)
    # choice_max に選択肢の項目数を設定
    $game_temp.choice_max = parameters[0].size
    # message_text に選択肢を設定
    for text in parameters[0]
      $game_temp.message_text += text + "\n"
    end
    # キャンセルの場合の処理を設定
    $game_temp.choice_cancel_type = parameters[1]
    # コールバックを設定
    current_indent = @list[@index].indent
    $game_temp.choice_proc = Proc.new { |n| @branch[current_indent] = n }
  end
  #--------------------------------------------------------------------------
  # ● アクター用イテレータ (パーティ全体を考慮)
  #     parameter : 1 以上なら ID、0 なら全体
  #--------------------------------------------------------------------------
  def iterate_actor(parameter)
    # パーティ全体の場合
    if parameter == 0
      # パーティ全体分ループ
      for actor in $game_party.actors
        # ブロックを評価
        yield actor
      end
    # アクター単体の場合
    else
      # アクターを取得
      actor = $game_actors[parameter]
      # ブロックを評価
      yield actor if actor != nil
    end
  end
  #--------------------------------------------------------------------------
  # ● エネミー用イテレータ (トループ全体を考慮)
  #     parameter : 0 以上ならインデックス、-1 なら全体
  #--------------------------------------------------------------------------
  def iterate_enemy(parameter)
    # トループ全体の場合
    if parameter == -1
      # トループ全体分ループ
      for enemy in $game_troop.enemies
        # ブロックを評価
        yield enemy
      end
    # エネミー単体の場合
    else
      # エネミーを取得
      enemy = $game_troop.enemies[parameter]
      # ブロックを評価
      yield enemy if enemy != nil
    end
  end
  #--------------------------------------------------------------------------
  # ● バトラー用イテレータ (トループ全体、パーティ全体を考慮)
  #     parameter1 : 0 ならエネミー、1 ならアクター
  #     parameter2 : 0 以上ならインデックス、-1 なら全体
  #--------------------------------------------------------------------------
  def iterate_battler(parameter1, parameter2)
    # エネミーの場合
    if parameter1 == 0
      # エネミーのイテレータを呼び出す
      iterate_enemy(parameter2) do |enemy|
        yield enemy
      end
    # アクターの場合
    else
      # パーティ全体の場合
      if parameter2 == -1
        # パーティ全体分ループ
        for actor in $game_party.actors
          # ブロックを評価
          yield actor
        end
      # アクター単体 (N 人目) の場合
      else
        # アクターを取得
        actor = $game_party.actors[parameter2]
        # ブロックを評価
        yield actor if actor != nil
      end
    end
  end
end




Mis à jour le 22 novembre 2020.






yoshimitsuw - posté le 23/11/2010 à 21:45:28 (10 messages postés)

❤ 0

J'ai oublié de préciser d'insérer en script dans l'évènement : "tout_deplacer"


Heavy Rain - posté le 24/11/2010 à 14:12:26 (1053 messages postés)

❤ 0

A ouais, ca a l'air bien !
Je vais tester.


tampaxor - posté le 25/11/2010 à 13:26:20 (10274 messages postés)

❤ 0

Y avait pas déjà une option pour ça nativement dans les RM ?


Mack - posté le 27/11/2010 à 15:50:35 (2288 messages postés) - staff

❤ 0

Si, mais ça affecte tout les évents de la map.
Là c'est juste l'évent dans lequel sera mis le script.

D'ailleurs, tu pourrais donner juste la modif' que tu as faite dans l'Interpreter 1 ?

( Je prend note de tout les commentaires, même si je n'y répond pas )


yoshimitsuw - posté le 28/11/2010 à 00:33:45 (10 messages postés)

❤ 0

alors j'ai rajouté une condition dans la fonction update de l'interpreter1

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
 if @deplacer
        # プレイヤーが移動ルート強制中の場合
        if $game_player.move_route_forcing
          return
        end
        # ループ (マップイベント)
        for event in $game_map.events.values
          # このイベントが移動ルート強制中の場合
          
          page=chercher_page_courante(event.getEvent)
          if event.move_route_forcing and (page.move_type!=1 or page.move_type!=2 or page.move_type!=3)
            return
          end
        end
        # 移動完了待機中フラグをクリア
        @deplacer = false
      end
 
 



et c'est pas juste l'event dans lequel est mis le script, on va dire que ça va attendre les event que l'on fait bouger par le script, mais pour celà, il faut que ces events ne soient pas déja en mode déplacement aléatoire ou suit le héro ou déplacement prédéfini.

Par exemple si dans ton script tu mets déplacer event 1 et event 2 ça va attendre que ces 2 events aient fini leur déplacement sans tenir compte de ceux qui se déplacent aléatoirement en continu dans la ville (pour l'animation).

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers