Dragonfly89

Ankömmling

  • »Dragonfly89« ist der Autor dieses Themas

Motto: Wieso einfach, wenn es auch kompliziert geht?

  • Nachricht senden

1

Mittwoch, 20. Dezember 2017, 13:57

Switch-Manager gesucht

Hallo ihr Lieben =)
Nach langer Zeit habe ich nun mein bestehendes Projekt wieder aufgenommen und festgestellt, dass ich einiges ändern muss.
Leider geht damit einher, dass ich mich kaum noch daran erinnern kann, welche Variablen und Switches welche Events beeinflussen. Ich weiß nicht, ob man eine Art Switch-Manager skripten kann, der im Spiel anzeigt, welche Events quasi durch welche Switches/Variablen beeinflusst werden und welche Events diese Veränderungen auslösen.
Hoffentlich hab ich mein Problem verständlich erklärt. Ich finde leider nichts über die Suchfunktion und habe auch schon diverse Foren durchforstet. Leider finde ich nichts, was mir helfen könnte und mein Projekt bereits so groß, dass ich bestimmt weit über 100 Switches belegt habe. Alle Events zu überprüfen würde sicherlich ewig dauern. =(
Hoffentlich kann mir jemand helfen...

LG
Dragonfly89

2

Freitag, 22. Dezember 2017, 22:12

Ja, das wäre machbar.
Was würde dir denn helfen? Würde dir eine Auflistung: Switch X wird in Event A, B und C als Condition und in Event D und E als Eventbefehl verwendet?
Oder willst Du im Testspiel, das irgendwie für die aktuelle Map angezeigt bekommen? Wenn Du eine Vorstellung hast, was dir am Meisten helfen würde, kann man sicher eine Lösung dafür finden.

Dragonfly89

Ankömmling

  • »Dragonfly89« ist der Autor dieses Themas

Motto: Wieso einfach, wenn es auch kompliziert geht?

  • Nachricht senden

3

Samstag, 23. Dezember 2017, 12:42

Das wäre super =)
Uff, ich finde beide Varianten sinnvoll, aber welche mir wohl mehr helfen würde, weiß ich ehrlich gesagt gar nicht.
Ich denke, wenn man eine globale Auflistung hat, ist es nicht ganz so übersichtlich, aber dafür hat man alles zusammen und kann auch Switches und Variablen nachvollziehen, die Map-übergreifend verwendet werden.
Ein Beispiel, wie ich es mir vorstellen würde, wäre per Tastenbefehl (wie z.B. auch der F9-Befehl funktioniert) ein Fenster im Testspiel zu öffnen, welches dann nach Switch-Nummern sortiert ist. Wenn man den Cursor darauf bewegt, wird rechts anzeigt, welche Events den Switch an- und ausschalten und welche Events dadurch beeinflusst werden und dasselbe mit Variablen:

Switches | "Set"-Event (Map-ID, Event-ID, setzt: true/false) - Condition-Event (Map-ID, Event-ID, reagiert bei: true/false)

Switch 1 | Event (1,5,true) - Event (2,3,true)
---------- | Event (1,9,false) - Event (5,2,false)
---------- | Event (119,2,true) - Event (10,1,false)

Switch 2 | etc.
________________________________________________________________________________________________________
Variablen | "Set"-Event (Map-ID, Event-ID, setzt, erhöht, verringert: Variablen-Wert) - Condition-Event (Map-ID, Event-ID, reagiert bei: Variablen-Wert)

Varaible 1 | Event (1,5,=10) - Event (2,3,11)
------------ | Event (1,9,+1) - Event (5,2,9)
------------ | Event (119,2,-2)

Variable 2 | etc.
______________________________________________________________________________________________________

Ich hoffe, dass ich das jetzt gut dargestellt habe.
Leider werden dadurch aber nicht die allgemeinen Events beachtet oder solche Switches/Variablen, die im Kampf genutzt werden.
Ich weiß nicht, ob das alles vielleicht etwas zuviel verlangt wäre, aber wenn du dafür Zeit finden könntest, wäre ich überglücklich =)

Danke schonmal für deine Hilfe und schöne Weihnachten =)

4

Samstag, 30. Dezember 2017, 23:56

So, bin aus der Weihnachtspause zurück. Ich persönlich denke, eine globale Auflistung wäre praktischer - aber ich schau mal.
Was möchtest Du denn alles erfassen? Klar, wenn es eine Condition einer Eventseite, eines AllgemeinenEvents (Switches) oder einer Bedingten Abfrage ist, bzw. bei den Eventbefehlen, die Switch und Variable setzen. Aber möchtest Du auch erfassen, wenn es in einer Textbox via \v[###] angezeigt wird, wenn es die Anzahl bestimmt, wieviele Items man bekommt und sowas? Also immer wenn irgendwo die Variable verwendet wird, oder nur die wichtigsten Eventbefehle erfassen?

Dragonfly89

Ankömmling

  • »Dragonfly89« ist der Autor dieses Themas

Motto: Wieso einfach, wenn es auch kompliziert geht?

  • Nachricht senden

5

Mittwoch, 10. Januar 2018, 19:42

Dann willkommen zurück ;)
Ich hoffe, du hast dich gut erholt und bist reichlich beschenkt worden.
Ich weiß nicht, wie ich mir das genau vorstellen soll mit der globalen Auflistung. Ich möchte schon direkt alle Switches und Variablen auf einen Blick haben. Mir würde tatsächlich reichen zu sehen, welches Event den Switch bzw. die Variable setzt oder verändert (inkl. Werte) und welches Event diese Variable oder den Switch als Condition hat.
Einfach damit ich nachvollziehen kann, was ich alles ändern muss, wenn ich zum Beispiel nen Endgegner rausnehme, von dessen Vernichtung einige Dinge im bisherigen Spiel abhängig waren.
Soweit ich mich erinnern kann, habe ich diesbezüglich noch keine Textboxen mit variablen Werten ins Spiel eingebaut, wenn das aber nicht zuviel Aufwand macht und du meinst, dass es vielleicht sinnvoll wäre, wovon ich im übrigen ausgehe, wäre es dennoch super, wenn du das ebenfalls einbauen könntest.

Ich hoffe, ich mach dir damit nicht zuviel Arbeit. =/
Danke nochmal für deinen Aufwand =)

6

Samstag, 13. Januar 2018, 00:45

Okay. Mal als Beispiel wie sowas aussehen könnte.
Das ist kein fertiges Scriptsystem und so, aber damit Du mal einen Eindruck gewinnst, was ich mit so einer "globalen Auflistung" meine. Wenn dir das prinzipiell gefällt, kann man das ausbauen und um Features erweitern, wie sie halt gebraucht werden.

Spoiler: Code

Ruby Quellcode

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
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
#******************************************************************************
#  
#  Projektauswertung von Playm (Version 0.0.1)
#  
#  Keine Weitergabe, oder Reposts gestattet.
#  Darf nicht außerhalb von www.RPG-Studio.org zugänglich gemacht werden.
#  
#******************************************************************************
# 
#==============================================================================
# ** HTML_Report
#------------------------------------------------------------------------------
#    Namespace for methods which creates html output by string concatination.
#==============================================================================
module HTML_Report
  #--------------------------------------------------------------------------
  # * Create <ul>...</ul> with all needed childs
  #--------------------------------------------------------------------------
  def self.create_html_ul( lines, css_class='', indent='' )
    str = "#{indent}<ul class=\"#{css_class}\">\n"
    lines.each do |line|
      str += "#{indent}  <li>#{line.to_s}</li>\n"
    end
    str += "#{indent}</ul>\n"
    str
  end
  #--------------------------------------------------------------------------
  # * Create <table>...</table> with all needed childs
  #--------------------------------------------------------------------------
  def self.create_html_table( header, lines, offset='' )
    str = "#{offset}<table border=\"1\" cellspacing=\"0\" cellpadding=\"4\">\n"
    str += "#{offset}  <tr>\n"
    header.each do |cell|
      str += "#{offset}    <th>%s</th>\n" % [cell.to_s]
    end
    str += "#{offset}  </tr>\n"
    lines.each do |line|
      str += "#{offset}  <tr>\n"
      line.each do |cell|
        str += "#{offset}    <td>%s</td>\n" % [cell.to_s]
      end
      str += "#{offset}  </tr>\n"
    end
    str+= "#{offset}</table>\n"
    str
  end
  #--------------------------------------------------------------------------
  # * Create <table>...</table> with all needed childs
  #--------------------------------------------------------------------------
  def self.create_complex_html_table( header, lines, offset='' )
    str = "#{offset}<table border=\"1\" cellspacing=\"0\" cellpadding=\"4\">\n"
    str += "#{offset}  <tr>\n"
    header.each do |cell|
      str += "#{offset}    <th>%s</th>\n" % [cell.to_s]
    end
    str += "#{offset}  </tr>\n"
    lines.each do |line|
      str += "#{offset}  <tr>\n"
      line.each do |cell|
        next if cell.nil?
        if cell.is_a? Hash
          content = cell[:content].to_s
          attributes = ''
          attributes += " rowspan=\"%d\"" % cell[:rowspan] if cell[:rowspan]
          str += "#{offset}    <td%s>%s</td>\n" % [ attributes, content ]
        else
          str += "#{offset}    <td>%s</td>\n" % [cell.to_s]
        end
      end
      str += "#{offset}  </tr>\n"
    end
    str+= "#{offset}</table>\n"
    str
  end
  #--------------------------------------------------------------------------
  # * Create Report CSS
  #--------------------------------------------------------------------------
  def self.create_css_rules( indent )
    str = "#{indent}table{ width:100%; }\n"
    str+= "#{indent}table,td,th {\n"
    str+= "#{indent}  border-style: solid;\n"
    str+= "#{indent}  border-color: #4488CC;\n"
    str+= "#{indent}  border-collapse: separate;\n"
    str+= "#{indent}}\n"
    str+= "#{indent}body {\n"
    str+= "#{indent}  background: linear-gradient(to right, rgba(251,243,135,1) 0%,rgba(251,243,135,0) 40px);\n"
    str+= "#{indent}  color: #000000;\n"
    str+= "#{indent}  margin-left: 1.8em;\n"
    str+= "#{indent}  overflow-x: hidden;\n"
    str+= "#{indent}}\n"
    str+= "#{indent}h1 {\n"
    str+= "#{indent}  font-family: \"Times New Roman\", serif;\n"
    str+= "#{indent}  font-size:200%;\n"
    str+= "#{indent}  line-height: 120%;\n"
    str+= "#{indent}  margin:0.5em 0 1em;\n"
    str+= "#{indent}  border-bottom: 0.1em solid;\n"
    str+= "#{indent}  border-color: #E04000;\n"
    str+= "#{indent}}\n"
    str+= "#{indent}h2 {\n"
    str+= "#{indent}  font-family: Verdana, sans-serif;\n"
    str+= "#{indent}  font-size:180%;\n"
    str+= "#{indent}  line-height: 110%;\n"
    str+= "#{indent}  margin:1em 0 0.8em;\n"
    str+= "#{indent}  padding:0.3em 0.2em 0;\n"
    str+= "#{indent}  border: 0.1em dashed;\n"
    str+= "#{indent}  border-color: #E04000;\n"
    str+= "#{indent}  color: #000000;\n"
    str+= "#{indent}  background-color: #E0C060;\n"
    str+= "#{indent}}\n"
    str+= "#{indent}h3{\n"
    str+= "#{indent}  font-family: \"Times New Roman\", serif;\n"
    str+= "#{indent}  font-size: 160%;\n"
    str+= "#{indent}  line-height: 150%;\n"
    str+= "#{indent}  margin-bottom: 0.5em;\n"
    str+= "#{indent}}\n"
    str+= "#{indent}footer {\n"
    str+= "#{indent}  font-family: Verdana, sans-serif;\n"
    str+= "#{indent}  margin:0.5em 0 0;\n"
    str+= "#{indent}  padding:0.5em 0 0;\n"
    str+= "#{indent}  border-top: 0.1em solid;\n"
    str+= "#{indent}  border-color: #E04000;\n"
    str+= "#{indent}  font-size: 85%;\n"
    str+= "#{indent}}\n"
    str+= "#{indent}.yellow_back {\n"
    str+= "#{indent}  padding:0.2em 0.3em;\n"
    str+= "#{indent}  color: #000000;\n"
    str+= "#{indent}  background-color: #B5DAFF;\n"# #FBF387;\n"
    str+= "#{indent}}\n"
    str+= "#{indent}.brown_back {\n"
    str+= "#{indent}  padding:0.2em 0.3em;\n"
    str+= "#{indent}  color: #000000;\n"
    str+= "#{indent}  background-color: #4488CC;\n"# #E0C060;\n"
    str+= "#{indent}  text-align:center;\n"
    str+= "#{indent}}\n"
    str+= "#{indent}.big_number {\n"
    str+= "#{indent}  text-align:center;\n"
    str+= "#{indent}  font-size:400%;\n"
    str+= "#{indent}  font-weight:bold;\n"
    str+= "#{indent}  font-family: Verdana, sans-serif;\n"
    str+= "#{indent}  color: #333333;\n"
    str+= "#{indent}}\n"
    str+= "#{indent}.big_number_list {\n"
    str+= "#{indent}  display:flex;\n"
    str+= "#{indent}  list-style:none;\n"
    str+= "#{indent}  padding:0;\n"
    str+= "#{indent}  margin:0 -1em;\n"
    str+= "#{indent}}\n"
    str+= "#{indent}.big_number_list li {\n"
    str+= "#{indent}  flex-grow:1;\n"
    str+= "#{indent}  margin:0 1em;\n"
    str+= "#{indent}  font-weight:bold;\n"
    str+= "#{indent}  border: 2px solid #4488CC;\n"
    str+= "#{indent}}\n"
    str+= "#{indent}.big_number_list li div {\n"
    str+= "#{indent}  padding:0.2em 0.3em;\n"
    str+= "#{indent}  text-align:center;\n"
    str+= "#{indent}}\n"
    str
  end
  #--------------------------------------------------------------------------
  # * Create Report Footer
  #--------------------------------------------------------------------------
  def self.create_footer
    str = "<footer>\n"
    str+= "  &copy;2017 Auswertungsscript / Playm\n"
    str+= "</footer>\n"
    str
  end
  #--------------------------------------------------------------------------
  # * Create HTML Page Framework for given body html
  #--------------------------------------------------------------------------
  def self.create_html_framework( game_title, body )
    str  = "<!DOCTYPE html>\n"
    str += "<meta charset=\"UTF-8\">\n"
    str += "<title>#{game_title}</title>\n"
    str += "<style>\n"
    str += self.create_css_rules("\s\s")
    str += "</style>\n"
    str += body
    str += self.create_footer
    str
  end
end
 
#==============================================================================
# ** Collect Report Data
#==============================================================================
 
data_mapinfos = load_data("Data/MapInfos.rvdata2")
data_system   = load_data("Data/System.rvdata2")
 
SwitchUse = Struct.new( :switch_id, :map_id, :event_id, :usecase )
VariableUse = Struct.new( :variable_id, :map_id, :event_id, :usecase )
 
ProjectFacts = {
  :total_map_count => 0,
  :total_event_count => 0,
  :common_event_count => 0
}
 
$switches = []
$variables = []
 
def process_page_conditon( map_id, ev_id, page_condition )
  if page_condition.switch1_valid
    $switches << SwitchUse.new( page_condition.switch1_id, map_id, ev_id, :page_con)
  end
  if page_condition.switch2_valid
    $switches << SwitchUse.new( page_condition.switch2_id, map_id, ev_id, :page_con)
  end
  if page_condition.variable_valid
    $variables << VariableUse.new( page_condition.variable_id, map_id, ev_id, :page_con)
  end
  page_condition
end
 
def process_page_list( map_id, ev_id, page_list )
  page_list.each do |command|
    case command.code
    when 111 # [Conditional Branch]
      case command.parameters[0]
      when 0  # Switch
        $switches << SwitchUse.new( command.parameters[1], map_id, ev_id, :list_con)
      when 1  # Variable
        $variables << VariableUse.new( command.parameters[1], map_id, ev_id, :list_con)
        if command.parameters[2] != 0
          $variables << VariableUse.new( command.parameters[3], map_id, ev_id, :list_con)
        end
      end
    when 121 # [Control Switches]
      (command.parameters[0]..command.parameters[1]).each do |switch_id|
        $switches << SwitchUse.new( switch_id, map_id, ev_id, :list_eff)
      end
    when 122 # [Control Variables]
      (command.parameters[0]..command.parameters[1]).each do |variable_id|
        $variables << VariableUse.new( variable_id, map_id, ev_id, :list_eff)
      end
      if command.parameters[3] == 1
        $variables << VariableUse.new( command.parameters[4], map_id, ev_id, :list_ask)
      end
    end
  end
end
 
Dir.glob('Data/Map[0-9][0-9][0-9].rvdata2').each do |filename|
  map = load_data(filename)
  map_id = filename[/\d\d\d/].to_i
  map.events.each do |id, event|
    event.pages.each do |page|
      process_page_conditon( map_id, id, page.condition )
      process_page_list( map_id, id, page.list )
    end
    ProjectFacts[:total_event_count] += 1
  end
  ProjectFacts[:total_map_count] += 1
end
 
load_data("Data/CommonEvents.rvdata2").each do |ce|
  next if ce.nil?
  process_page_list( 0, ce.id, ce.list )
  if ce.trigger != 0
    $switches << SwitchUse.new( ce.switch_id, 0, ce.id, :page_con)
  end
  ProjectFacts[:common_event_count] += 1
end
 
$switches.sort!{ |a,b| a.usecase <=> b.usecase }
$switches.sort!{ |a,b| a.event_id <=> b.event_id }
$switches.sort!{ |a,b| a.map_id <=> b.map_id }
$switches.sort!{ |a,b| a.switch_id <=> b.switch_id }
 
$variables.sort!{ |a,b| a.usecase <=> b.usecase }
$variables.sort!{ |a,b| a.event_id <=> b.event_id }
$variables.sort!{ |a,b| a.map_id <=> b.map_id }
$variables.sort!{ |a,b| a.variable_id <=> b.variable_id }
 
sw_lines = []
last_switch_id = nil
row_span_count = 0
$switches.each do |use|
  if use.map_id.zero?
    map_origin = 'CommonEvent'
  else
    map_origin = "%03d | %s" % [use.map_id, data_mapinfos[use.map_id].name]
  end
  if use.switch_id == last_switch_id and not use == $switches.last
    sw_id = nil
    row_span_count += 1
  else
    if row_span_count > 0
      row_span_count += 1
      original_content = sw_lines[-row_span_count].first
      sw_lines[-row_span_count][0] = { :rowspan=>row_span_count,
                                      :content=>original_content }
      row_span_count = 0
    end
    sw_id = "%04d" % use.switch_id
    last_switch_id = use.switch_id
  end
  sw_lines << [ sw_id,
                map_origin,
                "%03d" % use.event_id,
                case use.usecase
                when :page_con
                  'Bedingung für Eventseite'
                when :list_con
                  'Bedingte Abfrage'
                when :list_eff
                  'Wird neu gesetzt'
                end
              ]
end
 
vr_lines = []
last_variable_id = nil
row_span_count = 0
$variables.each do |use|
  if use.map_id.zero?
    #map_origin = "%03d" % use.map_id
    map_origin = 'CommonEvent'
  else
    map_origin = "%03d | %s" % [use.map_id, data_mapinfos[use.map_id].name]
  end
  if use.variable_id == last_variable_id and not use == $variables.last
    vr_id = nil
    row_span_count += 1
  else
    if row_span_count > 0
      row_span_count += 1
      original_content = vr_lines[-row_span_count].first
      vr_lines[-row_span_count][0] = { :rowspan=>row_span_count,
                                      :content=>original_content }
      row_span_count = 0
    end
    vr_id = "%04d" % use.variable_id
    last_variable_id = use.variable_id
  end
  vr_lines << [ vr_id,
                map_origin,
                "%03d" % use.event_id,
                case use.usecase
                when :page_con
                  'Bedingung für Eventseite'
                when :list_con
                  'Bedingte Abfrage'
                when :list_eff
                  'Wird neu gesetzt'
                when :list_ask
                  'Wird als Wert verwendet'
                end
              ]
end
 
#==============================================================================
# ** Make Output
#==============================================================================
 
facts = [
  "<div class=\"big_number\">#{ProjectFacts[:total_map_count]}</div>"+
  "<div class=\"\">Maps im Projekt</div>",
  "<div class=\"big_number\">#{ProjectFacts[:total_event_count]}</div>"+
  "<div class=\"\">Events im Projekt</div>",
  "<div class=\"big_number\">#{ProjectFacts[:common_event_count]}</div>"+
  "<div class=\"\">CommonEvents im Projekt</div>"
]
 
game_title = data_system.game_title
 
str  = "<h1>Auswertung zu #{game_title}</h1>"
str += "<p>Diese Auswertung beschreibt die verschiedenen Features von "
str += game_title
str += ".</p>\n"
str += HTML_Report.create_html_ul( ["<a href=\"#switches\">Switches</a>",
                                    "<a href=\"#variables\">Variables</a>"] )
str += "<h2>Übersicht</h2>\n"
str += "<p></p>\n"
str += HTML_Report.create_html_ul( facts, 'big_number_list' )
str += "<h2>System</h2>\n"
str += "<h3 id=\"switches\">Switches</h3>\n"
header = ['Switch ID', 'Origin', 'Event ID', 'Benutzung']
#str += HTML_Report.create_html_table(header,sw_lines)
str += HTML_Report.create_complex_html_table(header,sw_lines)
str += "<h3 id=\"variables\">Variables</h3>\n"
header = ['Variable ID', 'Origin', 'Event ID', 'Benutzung']
str += HTML_Report.create_complex_html_table(header,vr_lines)
 
html = HTML_Report.create_html_framework( game_title, str )
 
File.open("auswertung.html", "w") { |f| f.write html }
 
msgbox "Alle Daten erfasst. Auswertung.html wurde im Projektordner angelegt."
exit
zum Lesen den Text mit der Maus markieren

Füg das Script einfach bei dir unter Materials ein. Starte das Spiel. (Spiel beendet sich automatisch direkt wieder.) Nimm das Script wieder aus dem ScriptEditor raus.
Im Spielordner sollte sich jetzt eine Auswertungs-Datei befinden, die Du mit dem Browser öffnen kannst. Design ist an der Hilfedatei des Makers orientiert.

Anmerkung: Es kann sein, dass das Script nicht ordentlich durchläuft und keine Auswertungs-Datei erstellt. Habe das Script noch nicht mit einem großen Projekt testen können, da ich einfach kein Ace-Spiel habe was mehr als 100 Switches und Variablen benutzt.

Social Bookmarks