• Login

Dear visitor, welcome to RPG Studio - Make your World real. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

Josey

Storyteller

  • "Josey" started this thread

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Send private message

1

Thursday, April 30th 2015, 4:37pm

[Erledigt] Schatzsuche nochmal anders

Hallo! :D

Ich hab noch was Neues :P

Ich bin eben durch die Verlinkung von Jumping Coconut über das Script gestolpert:

Schatzsucher-Script (Mini-Contest)


Ich hätte gerne etwas Ähnliches, aber nicht ganz das.

Wie vielleicht einige von euch schon wissen verwende ich das Moonpearl-Script, ein Stück weit umgebaut, um mein Haustier (und alle anderen Partymember) mir folgen zu lassen.
Im Moment habe ich das so gebaut, dass es Random ausgewürfelt wird, ob das Haustier ein Item findet oder nicht (oder einfach nur rumrennt, stehen bleibt, was auch immer). Mit zunehmendem Level findet es immer öfter und bessere Items. Also alles funktioniert.
Das mit dem Schatzsuchen war aber ursprünglich mein Ziel- dass es versteckte Items finden kann (die auch der Player mit "Hellsehen" durch Playms Sparkle-Script finden kann- aber das Haustier arbeitet dann eben schneller und der Player muss nicht jedes Mal stehen bleiben :P).

Ich habe jetzt folgendes vor:
Zuerst einmal, soll das Script nur laufen, wenn ein bestimmer Switch ON ist (so gewährleiste ich, dass das Haustier die Fähigkeit "Schatzsuche" erhalten hat, bzw kann ich ihn ausstellen, wenn eine Szene läuft).
Die Möglichkeit mit der Event-ID ist nicht sinnvoll für mich, da das Haustier auf jeder Map eine andere Event-ID hat.
Dementsprechend müsste das Script mit dem Eventnamen arbeiten, um herauszufiltern, welches Event der Sucher ist.

Das Haustier rennt dem Spieler von alleine nach- das hat nix mit dem Script hier zu tun.
- Das Haustier passiert auf Level 1 einen versteckten Schatz (unter der Erde zB) im Umkreis von 1 Tile. Es schlägt an, findet den Schatz und bringt ihn dem Spieler.
bzw
- Das Haustier passiert auf Level 2 einen versteckten Schatz (unter der Erde zB) im Umkreis von 3 Tiles. Es schlägt an, findet den Schatz und bringt ihn dem Spieler.
Das Haustier rennt dem Spieler wieder von alleine nach, das Script macht nix mehr.

Dazu müsste das Script bei mir folgendes abfragen und auslösen:

Textform:
Hat es gerade eine Aufgabe (sind bestimmte Switche ON)? = Nicht Schatzsuchen
Welches Level hat das Haustier? (Variable) = Tileumkreis in welchem gesucht wird
Haustier passiert einen Schatz in einem Umkreis, den es dem Level nach finden kann? = Schatzsuche los, Script "an"; bestimmte Switche OFF und bestimmte Switche ON (damit das Haustier aufhört Random-Sachen zu machen, und es die Schatzsuche ordnungsgemäß ausführt)
Haustier hat den Schatz gefunden? = Bestimmte Switche OFF und bestimmte Switche ON, Script "aus"

Hoffentlich verständliche Eventcode-Form:
Script:

Ruby Source code

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
Wenn Switch 10 ON:
  Definiere Event mit Event-Name "Haustier". Ist es da? 
    Wenn nein: Mache nichts, starte von vorn
    Wenn ja:
       Überprüfe, ob folgende Switche ON sind: 1,2,3,4
       Wenn ja: Tue nichts, beginne von vorn #[Das Haustier hat gerade eine andere Aufgabe)
       Wenn nein:
          Überprüfe das Level des Haustieres (Variable 1)
             Variable 1 = 1
             Suche in 1 Tile Umkreis
               Variable 1 = 2
               Suche in 3 Tiles Umkreis
                 Variable 1 = 3
                 Suche in 5 Tiles Umkreis
                     [usw, vom Script-User frei einzustellen]
                          Ist ein Event mit dem Event-Namen "[SPARKLE]" im jeweiligen Tileumkreis?
                          Wenn ja:
                          Überprüfe, ob das Event mit Pathfinding von Event "Haustier" erreichbar ist. #[Haustier 
                          #geht zu Fuß]
                             Wenn nein: Mache nichts
                             Wenn ja:
                                  Switch 5,6,7,8 werden OFF gestellt, Switch 9, 11, 12 auf ON #[Damit das Haustier  
                                  #keine Random-Sachen macht, während es die Aufgabe ausführt]
                                       Ein vom Scriptnutzer definiertes Wait [bsp: 40] #[Für eine kleine 
                                       #Charset-Animation, ein Ausrufezeichen oder was sonst auch (kann auf 0 
                                       #gestellt werden, dann kein Wait); kann z.B. auf der Eventseite mit dem Trigger 
                                       #Switch 12 abgespielt werden, ist dann Eventcode, stellt sich automatisch wieder OFF]
                                            Event "Haustier" geht mit Pathfinding zu Event "[SPARKLE]" und löst es aus (Action Button)  
                                            #[Hier wird geregelt, ob der Player selber geklickt hat, oder das Haustier   
                                            #indem geprüft wird, ob Switch 11 ON ist- je nachdem anderer Text]
                                                 Sicher stellen, dass es die Aktion wirklich bis zu Ende führt
                                                      Switch 5,6,7,8 werden ON gestellt, Switch 9, 11 auf OFF #[Damit  
                                                      #das Haustier wieder dem Player folgt und seine Random-Sachen macht]
                          Wenn nein: Tue nichts, beginne von vorn



Scripts, die ich verwende, die eventuell hier direkt einbezogen werden könnten:

Pathfinder by Blizzard
Dieses Script ist eng mit meinem Moonpearl verbunden worden, damit die Partymember den Player finden
Spoiler

Ruby Source code

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
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# Lagless Path Finder by Blizzard
# Version: 1.01
# Type: Pathfinding System
# Date: 9.2.2013
# Date v1.01: 11.4.2013
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#   
#  This work is protected by the following license:
# #----------------------------------------------------------------------------
# #  
# #  Creative Commons - Attribution-NonCommercial-ShareAlike 3.0 Unported
# #  ( http://creativecommons.org/licenses/by-nc-sa/3.0/ )
# #  
# #  You are free:
# #  
# #  to Share - to copy, distribute and transmit the work
# #  to Remix - to adapt the work
# #  
# #  Under the following conditions:
# #  
# #  Attribution. You must attribute the work in the manner specified by the
# #  author or licensor (but not in any way that suggests that they endorse you
# #  or your use of the work).
# #  
# #  Noncommercial. You may not use this work for commercial purposes.
# #  
# #  Share alike. If you alter, transform, or build upon this work, you may
# #  distribute the resulting work only under the same or similar license to
# #  this one.
# #  
# #  - For any reuse or distribution, you must make clear to others the license
# #    terms of this work. The best way to do this is with a link to this web
# #    page.
# #  
# #  - Any of the above conditions can be waived if you get permission from the
# #    copyright holder.
# #  
# #  - Nothing in this license impairs or restricts the author's moral rights.
# #  
# #----------------------------------------------------------------------------
# 
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# 
# IMPORTANT NOTE:
# 
#   This Path Finder is a derived version of Blizz-ABS's original Path Finder.
#   If you are using Blizz-ABS, please remove this script. Blizz-ABS has a
#   Path Finder already built-in.
# 
# 
# Compatibility:
# 
#   99% compatible with SDK v1.x. 90% compatible with SDK v2.x. May cause
#   incompatibility issues with exotic map systems.
# 
# 
# Features:
# 
#   - calculates path from point A to point B on the map
#   - allows immediate calculation as well as path calculation requests that
#     are done over the course of a few frames in order to reduce lag
#   - supports dynamic calculation that is done every step to ensure the
#     character reaches its targets
#   - can assign other characters as targets so dynamic calculation with a
#     moving will cause the character to find the target regardless of his
#     changed position
# 
# new in v1.01:
#   - fixed attempted optimizations to work properly
# 
# 
# Instructions:
#   
# - Explanation:
#   
#   This script will allow your characters to walk from point A to point B,
#   navigating by themselves, finding the shortest path and all that without
#   you having to manually specify their moving route. They can also navigate
#   through dynamically changing environments or track a dynamically moving
#   target.
# 
# - Configuration:
# 
#   MAX_NODES_PER_FRAME - maximum number of node calculation per frame when
#                         using path requests instead of immediate calculations
#   DIRECTIONS_8_WAY    - if set to true, it will smooth out corner movement
#                         and use a diagonal movement step wherever possible
#                         (this does NOT mean that the path finder will do
#                         8-directional path finding!)
# 
# - Script calls:
# 
#   This path finder offers you several script calls in order to designate path
#   finding to characters on the map. Following script calls are at your
#   disposal:
#   
#     PathFinder.find(C_ID, X, Y)
#     PathFinder.find(C_ID, X, Y, RANGE)
#     PathFinder.find(C_ID, TARGET)
#     PathFinder.find(C_ID, TARGET, RANGE)
#     PathFinder.request(C_ID, X, Y)
#     PathFinder.request(C_ID, X, Y, RANGE)
#     PathFinder.request(C_ID, TARGET)
#     PathFinder.request(C_ID, TARGET, RANGE)
#     PathFinder.dyn_find(C_ID, X, Y)
#     PathFinder.dyn_find(C_ID, X, Y, RANGE)
#     PathFinder.dyn_find(C_ID, TARGET)
#     PathFinder.dyn_find(C_ID, TARGET, RANGE)
#     PathFinder.dyn_request(C_ID, X, Y)
#     PathFinder.dyn_request(C_ID, X, Y, RANGE)
#     PathFinder.dyn_request(C_ID, TARGET)
#     PathFinder.dyn_request(C_ID, TARGET, RANGE)
# 
#   C_ID   - either an event ID, 0 for the player character or an actual
#            character (e.g. $game_map.events[ID])
#   X      - X target coordinate
#   Y      - Y target coordinate
#   RANGE  - range within which the target should be located (greater than 0)
#   TARGET - an actual target character
#   
#   This is how the 4 different script calls behave:
#   
#   - The "find" variants always calculate the path immediately.
#   - The "request" variants always request a path calculation to be done over
#     the course of several frames in order to avoid lag. Requesting paths for
#     multiple characters will cause the calculation to take longer as each
#     frame only a certain number of nodes is calculated (can be configured).
#     So if there are more characters requesting a path, naturally each one
#     will consume a part of the allowed node calculations every frame.
#   - The "dyn" variants (dynamic) will recalculate/request a calculation every
#     step in order to keep a path up to date with an ever-changing
#     environment. You won't need to use these calls if there are no moving
#     events on the map or if there are no environmental passability changes.
#   - When using a "dyn" variant, if actual coordinates (X, Y) are used, the
#     character will find its path to these fixed coordinates. If an actual
#     target character is being used, the path finder will track the character
#     instead of fixed coordinates. If the character changes its position, the
#     path calculation will attempt to find a path to the new position of the
#     target.
#   - Using "dyn_find" a lot, with many characters at the same time and/or for
#     long paths may cause performance issue and lag. Use it wisely.
#   - Using "dyn_request" is much more performance-friendly, but it will also
#     cause characters to "stop and think". This can also cause problems in a
#     constantly changing environment as the environment may change during the
#     few frames while the calculation is being done. Use it wisely.
#   
#   In order to cancel dynamic path calculation for a character, use following
#   script call:
#   
#     character.clear_path_target
#   
#   Example:
#     
#     $game_map.events[23].clear_path_target
#   
#   In order to check if a character has a dynamic path calculation for a
#   target, use following script call:
#   
#     character.has_path_target?
#   
#   Example:
#     
#     if $game_map.events[23].has_path_target?
#   
# 
# Notes:
# 
#   - This path finder is an implementation fo the A* Search Algorithm.
#   - The PathFinder module is being updated during the call of $game_system.update.
#     Keep this in mind if you are using specific exotic scripts.
# 
# 
# If you find any bugs, please report them here:
# http://forum.chaos-project.com
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
 
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# START Configuration
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
module BlizzCFG
 
  MAX_NODES_PER_FRAME = 100
  DIRECTIONS_8_WAY = false
 
end
 
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# END Configuration
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
$lagless_path_finder = 1.01
 
#==============================================================================
# module PathFinder
#==============================================================================
 
module Math
 
  def self.hypot_squared(x, y)
    return (x * x + y * y)
  end
 
end
 
#==============================================================================
# module PathFinder
#==============================================================================
 
module PathFinder
 
  PATH_DIRS = [[0, 1, 2], [-1, 0, 4], [1, 0, 6], [0, -1, 8]]
  DIR_DOWN_LEFT = [2, 4]
  DIR_LEFT_DOWN = [4, 2]
  DIR_DOWN_RIGHT = [2, 6]
  DIR_RIGHT_DOWN = [6, 2]
  DIR_LEFT_UP = [4, 8]
  DIR_UP_LEFT = [8, 4]
  DIR_RIGHT_UP = [6, 8]
  DIR_UP_RIGHT = [8, 6]
  DIR_OFFSETS = [[0, 0], [-1, 1], [0, 1], [1, 1], [-1, 0], [0, 0], [1, 0],
                [-1, -1], [0, -1], [1, -1]]
 
  @requests = {}
 
  def self.clear
    @requests = {}
  end
 
  def self.find(char, x, y = nil, range = 0)
    char, x, y, range = self.check_args(char, x, y, range)
    self._find(char, x, y, range, false)
    return true
  end
 
  def self.dyn_find(char, x, y = nil, range = 0)
    tx, ty = x, y
    char, x, y, range = self.check_args(char, x, y, range)
    self._find(char, x, y, range, true)
    char.set_path_target(tx, ty, range, true)
    return true
  end
 
  def self.request(char, x, y = nil, range = 0)
    char, x, y, range = self.check_args(char, x, y, range)
    self._request(char, x, y, range, false)
    return true
  end
 
  def self.dyn_request(char, x, y = nil, range = 0)
    tx, ty = x, y
    char, x, y, range = self.check_args(char, x, y, range)
    self._request(char, x, y, range, true)
    char.set_path_target(tx, ty, range, false)
    return true
  end
 
  def self.check_args(char, x, y, range)
    if x.is_a?(Game_Character)
      range = (y != nil ? y : 0)
      y = x.y
      x = x.x
    end
    range = 0 if range < 0
    if char.is_a?(Numeric)
      char = (char > 0 ? $game_map.events[char] : $game_player)
    end
    p "Warning! Character to move does not exist!" if $DEBUG && char == nil
    return [char, x, y, range]
  end
 
  def self._find(char, x, y, range, dynamic)
    @requests[char] = PathRequest.new(char.x, char.y, x, y, range, dynamic)
    result = nil
    result = self.calc_node(char) while result == nil
    @requests.delete(char)
    if $DEBUG && result == []
      p "Warning! Path Finder could not find path for character at (#{x},#{y})!"
    end
    char.set_found_path(result)
  end
 
  def self._request(char, x, y, range, dynamic)
    if @requests[char] == nil
      @requests[char] = PathRequest.new(char.x, char.y, x, y, range, dynamic)
    end
  end
 
  def self.update
    @requests = {} if @requests == nil
    characters = @requests.keys
    count = BlizzCFG::MAX_NODES_PER_FRAME
    while characters.size > 0 && count > 0
      char = characters.shift
      result = self.calc_node(char)
      result != nil ? char.set_found_path(result) : characters.push(char)
      count -= 1
    end
  end
 
  def self.calc_node(char)
    request = @requests[char]
    if request.open.size == 0
      @requests.delete(char)
      return []
    end
    found = false
    key = request.open.keys.min {|a, b|
        a[2] > b[2] ? 1 : (a[2] < b[2] ? -1 :
        (Math.hypot_squared(a[0] - request.tx, a[1] - request.ty) <=>
        Math.hypot_squared(b[0] - request.tx, b[1] - request.ty)))}
    request.closed[key[0], key[1]] = request.open[key]
    request.open.delete(key)
    kx, ky = 0, 0
    passable = false
    passable_checked = false
    PATH_DIRS.each {|dir|
        kx, ky = key[0] + dir[0], key[1] + dir[1]
        passable = false
        passable_checked = false
        if (kx - request.tx).abs + (ky - request.ty).abs <= request.range
          passable = char.passable?(key[0], key[1], dir[2])
          passable_checked = true
          if passable
            request.closed[kx, ky] = dir[2]
            found = true
            break
          end
        end
        if request.closed[kx, ky] == 0
          passable = char.passable?(key[0], key[1], dir[2]) if !passable_checked
          if passable
            request.open[[kx, ky, key[2] + 1]] = dir[2]
          end
        end}
    return nil if !found
    result = request.backtrack(kx, ky)
    @requests.delete(char)
    return result
  end
 
end
 
#==============================================================================
# PathRequest
#==============================================================================
 
class PathRequest
 
  attr_reader :open
  attr_reader :closed
  attr_reader :sx
  attr_reader :sy
  attr_reader :tx
  attr_reader :ty
  attr_reader :range
  attr_reader :dynamic
 
  def initialize(ox, oy, tx, ty, range, dynamic = false)
    @sx, @sy, @tx, @ty, @range, @dynamic = ox, oy, tx, ty, range, dynamic
    @open = {[@sx, @sy, 0] => -1}
    @closed = Table.new($game_map.width, $game_map.height)
  end
 
  def backtrack(tx, ty)
    cx, cy, x, y, result = tx, ty, 0, 0, []
    loop do
      cx, cy = cx - x, cy - y
      break if cx == @sx && cy == @sy
      result.unshift(@closed[cx, cy])
      x, y = PathFinder::DIR_OFFSETS[@closed[cx, cy]]
    end
    return self.modify_8_way(result)
  end
 
  def modify_8_way(result)
    if BlizzCFG::DIRECTIONS_8_WAY
      result.each_index {|i|
          if result[i] != nil && result[i + 1] != nil
            case [result[i], result[i + 1]]
            when PathFinder::DIR_DOWN_LEFT, PathFinder::DIR_LEFT_DOWN
              result[i], result[i + 1] = 1, nil
            when PathFinder::DIR_DOWN_RIGHT, PathFinder::DIR_RIGHT_DOWN
              result[i], result[i + 1] = 3, nil
            when PathFinder::DIR_LEFT_UP, PathFinder::DIR_UP_LEFT
              result[i], result[i + 1] = 7, nil
            when PathFinder::DIR_RIGHT_UP, PathFinder::DIR_UP_RIGHT
              result[i], result[i + 1] = 9, nil
            end
          end}
      result.compact!
    end
    return result
  end
 
end
 
#==============================================================================
# Game_System
#==============================================================================
 
class Game_System
 
  alias update_lagless_path_finder_later update
  def update
    PathFinder.update
    update_lagless_path_finder_later
  end
 
end
 
#==============================================================================
# Game_Map
#==============================================================================
 
class Game_Map
 
  alias setup_lagless_path_finder_later setup
  def setup(map_id)
    PathFinder.clear
    setup_lagless_path_finder_later(map_id)
  end
 
end
 
#==============================================================================
# Game_Character
#==============================================================================
 
class Game_Character
 
  def set_path_target(x, y, range, immediate)
    @path_x, @path_y, @path_range, @path_immediate = x, y, range, immediate
  end
 
  def clear_path_target
    @path_x, @path_y, @path_range, @path_immediate = nil, nil, nil, nil
  end
 
  def has_path_target?
    return (@path_x != nil)
  end
 
  def set_found_path(path)
    return if path.size == 0
    route = RPG::MoveRoute.new
    route.repeat = false
    # each move command code equals direction / 2
    path.reverse.each {|dir| route.list.unshift(RPG::MoveCommand.new(dir / 2))}
    self.force_move_route(route)
  end
 
  alias update_move_lagless_path_finder_later update_move
  def update_move
    update_move_lagless_path_finder_later
    return if self.moving? || !self.has_path_target?
    x, y = @path_x, @path_y
    x, y = @path_x.x, @path_x.y if @path_x.is_a?(Game_Character)
    if @x == x && @y == y
      #p @x, x, @y, y
      #p @path_x
      self.clear_path_target
    elsif @path_immediate
      PathFinder.dyn_find(self, @path_x, @path_y, @path_range)
    else
      PathFinder.dyn_request(self, @path_x, @path_y, @path_range)
    end
  end
 
end
highlight to read



HideandSeek v2.1 by Jumping Coconut
Spoiler

Ruby Source code

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
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
#==============================================================================
# Sichtweite plus Sichtblockevents Script
# "Hide and Seek" - Script
#------------------------------------------------------------------------------
# By Hüpfende Kokosnuss || Jumping Coconut 
# 8. June 2009,  Version 2.1
#==============================================================================
=begin
 
                            Deutsche Erkärung
                            =================
 
Dieses Skript sorgt dafür, dass ihr eine Art Versteckspiel
ganz einfach basteln könnt. Wie z.B. bei Zelda Ocarina of Time oder in 
etlichen anderen Spielen. Das Prinzip hierbei ist immer:
Der Spieler darf von den Events nicht gesehen werden, kann sich aber
hinter gewissen Gegenständen verstecken.
Es gibt hier 2 Arten von Events, die neuerdings sogar Kombiniert werden
können:
 
Seek-Events ("Suchende Events"): Diese Events "suchen" den Spieler.
                                 Wenn sie den Spieler sehen, starten sie sich.
                                 Man kann bei Seekern viele Dinge einstellen, 
                                 zum Beispiel die Sichtweite.
Hide-Events ("Versteck-Events"): Steht ein Hide-Event zwischen dem Spieler 
                                 und einem Seek-Event, so wird das Seek-Event
                                 den Spieler nicht "sehen" und kann sich somit
                                 nicht starten.
 
Außerem kann man Terrain-Tags einstellen, welche die selben Fähigkeiten wie
ein Hide-Event haben (etwa ein Baum).
 
 
Allgemeines zur Definition von Hide- und Seek-Events
----------------------------------------------------
 
Hide- und Seek-Events definiert man durch den Eventnamen (gilt dann für alle
Eventseiten) oder durch Kommentare auf einer Eventseite (gilt dann nur für 
die entsprechende Eventseite). Hier nimmt man auch alle Einstellungen, wie
zum Beispiel Sichtweite und Sichtwinkel, vor.
Der Eventname muss immer angepasst werden. Entweder man nimmt die Einstellungen
direkt im Eventnamen vor, oder der Eventname muss ein Schlüsselwort für 
Kommentare enthalten. Nur Events, deren Namen dieses Kommentar-Schlüsselwort
enthält, werden auf ihre Kommentare hin untersucht.
Beispiele von Eventnamen für Hide- and Seekevents:
 
 
Eventname:  Hide Seek 5 90 7
             |     |   \ | /
             |     |  Reaktionszeit 5 Sek., Sichtwinkel 90°, Sichtweite 7 Tiles
             |   Event ist ein Seeker (löst sich aus, wenn es den Spieler sieht)
            Event ist undurchsichtig für andere Seeker
 
 
Eventname:  Bla bla Event bla Comment:5 bla bla
                   |             |
             Sinnloser Kram      |
                      Hide- and Seekanweisungen befinden sich in Kommentaren
                      auf den jeweiligen Eventseiten, die 2 gibt an, dass der
                      jeweilige Kommentar sich innerhalb der ersten 5 
                      Eventbefehle befindet
 
 
Die selben Befehle wie für Eventnamen können auch für Kommentare verwendet 
werden. Zu beachten hierbei ist, dass bei Kommentaren alle Befehle in EINER
Kommentarzeile stehen müssen!
Die Reihenfolge ist egal, außer bei Reaktionszeit, Sichtwinkel und Sichtweite.
Diese müssen, wenn sie überhaupt angegeben werden, IMMER die letzten 3 Werte
bilden. Zuerst wird die Reaktionszeit angegeben (ist 0 wenn sie fehlt), dann
der Sichtwinkel, dann die Sichtweite. Siehe hierzu auch das erste Beispiel.
Folgende Schlüsselworte können angegeben werden:
  - Hide     = Event ist ein Hide-Event, also blockiert es die Sicht der Seeker.
  - Seek     = Event ist ein Seeker, löst also aus, wenn Spieler in Sichtweite.
  - Circle   = Event sieht in Sichtkreisen (nicht in Sichtdreiecken). Besonders
               nützlich wenn dabei ein Sichtwinkel von 0 angegeben wurde, 
               das ermöglicht dem Seeker nämlich, Kreisförmig in alle Richtungen
               zu schauen (gut für Sensoren, Fallen, etc).
  - Reverse  = Wenn das Seekerevent eigentlich auslösen sollte, löst es nicht
               aus, und wenn es nicht auslösen sollte, löst es aus. Gut für 
               Events, nur agieren sollen, wenn Spieler außer Sichtweite ist.
  - Comment:X= Comment beziehungsweise Comment:X gibt an, dass neben den
               Befehlen im Eventnamen auch die ersten X Befehle des Events
               nach Kommentaren gescannt werden sollen, die Hide-and Seek
               Befehle beeinhalten. Die Angabe von X ist optional, aber
               gut für die Performance!
 
Folgende Werte bilden den Schluss des Eventnamens:
  - Drittletzte Stelle = Reaktionszeit in Sekunden, Seeker-Event löst erst
                         aus, nach dem der Spieler sich bereits X Sekunden
                         im Sichtfeld befindet.
  - Zweitletzte Stelle = Sichtwinkel in Grad. Gültige Werte sind 1-179 Grad.
  - Letzte Stelle      = Sichtweite in Tiles.
 
Alle Schlüsselworte und die Positionen der Werte können unter 
"Hide and Seek SETTINGS" verändert werden.
 
 
Erstellen von "Verstecken" für den Spieler
------------------------------------------
 
Verstecke sind leicht einzurichten. Hide-Events fungieren als Sichtblocker 
(wie diese eingerichtet werden ist ja oben beschrieben).
Um Events zu sparen kann man allerdings auch bestimmte Terrain-Tags vergeben,
welche dann automatisch wie Hide-Events gehandhabt werden.
Man kann sowohl eins als auch mehrere Terrains angeben.
Einstellbar bei den SETTINGS unter: $has_hideterrain
 
 
Neue Eventbefehle (Callscripts)
-------------------------------
 
Für TRUE/FALSE Abfrage in Conditional Branch:
  has_seek(Sichtweite, Sichtwinkel, Circle, Reaktionszeit, Event-ID)
   Manuelle Seek-Abfrage für spezielles Event. Die Bedingung ist dann 
   entweder wahr, wenn der das Event den Spieler unter den entsprechenden
   Bedingungen sieht, oder falsch, wenn dies nicht der Fall ist.
   Reaktionszeit und Event-ID müssen nicht immer angegeben werden, 
   sind dann standardmäßig 0 und die ID des aktuellen Events. Beispiel hierfür:
  has_seek(5, 90, false) 
   => Sichtweite 5, Sichtwinkel 90, gilt für aktuelles Event.
 
  has_seconds_player_seen(Event-ID)
   Gibt als Zahl zurück, wie viele Sekunden der Spieler schon im Sichtfeld des
   entsprechenden Seek-Events ist. Wird die Event-ID nicht angegeben, so 
   wird das aktuelle Event genommen. Beispiel:
  has_seconds_player_seen == 10
   => Conditional Branch ist wahr, wenn der Spieler GENAU 10 Sekunden im 
      Sichtfeld des aktuellen Events ist. Ansonsten kommt der ELSE-Zweig zum 
      tragen. Funtkioniert nur bei Seekern, ist der Spieler nicht im Sichtfeld,
      wird 0 zurückgegeben.
 
Normale Eventbefehle:
  has_set_seconds_player_seen(Sekunden, Event-ID) 
   Setzt die Sekunden, die das Event mit der entsprechenden ID den Spieler schon
   gesehen hat, auf übergebenen Wert.
   Wird nichts übergeben, so setzt es die Sekunden des aktuellen Events auf 0.
  has_set_seconds_player_seen(5, 10)
   => Event mit der ID 10 sieht den Spieler jetzt seit 5 Sekunden. Kann dann
      Beispielsweise mit "has_seconds_player_seen" abgefragt werden.
 
 
Performance
-----------
 
Das Skript verbraucht nicht viel Performance, für das was es leistet. 
Generel gilt, dass Events, die über Eventnamen deklariert sind, weniger
Performance fressen.
Sind Kommentare doch unausweichlich, so sollte auf jedenfall die Funktion 
genutzt werden, den Bereich, in dem Sich der Kommentar befindet, anzugeben
(also mit Comment:X)!
Des weiteren kann man das Skript über Mapnamen an- und ausstellen.
Dann ist das Skript nur auf den Maps aktiv, die das entsprechende
Schlüsselwort beeinhalten (oder nur auf denen, die das Schlüsselwort NICHT
beeinhalten, ist Einstellbar ;D).
Hierfür muss bei den SETTINGS $has_mpkey und $has_mpcon angepasst werden.
Soll das Skript auf allen Maps aktiv sein, empfielt sich, bei $has_mpkey
einfach "" einzutragen und $has_mpcon auf true zu stellen.
 
 
Zur Kompatibilität
------------------
 
Eigentlich funktioniert dieses Skript sogar mit Pixelmovement.
Ich habe es mit f0tz!baerchens Pixelmovement 1.5 getestet, wichtig ist nur,
dass Hide and Seek unter das Pixelmovement- und über das Main- Skript 
gestellt wird.
Es ist sogar zu fast allen vorherigen Hide- and Seek Versionen 
abwärtskompatibel, so dass man alte Hide- and Seek Events nicht noch mal 
umbennen braucht. Es empfiehlt sich aber, die alten Maps trotzdem noch 
zu testen, wenn man von einer alten Hide- and Seek Version auf die aktuelle
umspringt.
 
 
Sonstiges
---------
 
Wenn ein Seek-Event weder einen Kreis noch ein Sichtdreieck bekommt (weil man
einen Winkel größer als 179 oder kleiner als 1 gewählt hat), löst es nur aus,
sobald der Spieler auf das Event drauftritt. Das würde nämlich sogar ein Blinder
merken ^_~
 
Umgekehrt: Wenn der Spieler auf einem Hide-Event steht ist er für
die Seek-Events unsichtbar. Das ist gut für "geschützte Bereiche".
 
Bei allen Schlüsselwörtern wird Groß- und Kleinschreibung nicht beachtet.
 
 
Das ganze System hört sich vielleicht kompliziert an, aber in der Demo gibts 
genug Beispiele, und wenn man sich die Erklärungen hier mal 5 Minuten
durchliest, versteht mans auch! Es ist alles sehr logisch aufgebaut.
Ich wünsche euch allen viel Spaß mit euren jeweiligen Projekten ^^
 
=end
#==============================================================================
# Erwähnt bitte "Hüpfende Kokosnuss" in den Credits.
# Please remember "Jumping Coconut || Hüpfende Kokosnuss" for your credits!
#==============================================================================
 
# ------ Hide and Seek SETTINGS ------
 
 
# - Keywords for Events -
 
# Keyword for Hide-Events
  $has_hdkey = "Hide"
# Keyword for Seek-Events
  $has_skkey = "Seek"
# Keyword for Seighting-Circle (Seek-Event only)
  $has_sckey = "Circle"
# Keyword for Revers-Function (Seek-Event only)
  $has_rvkey = "Reverse"  
# Keyword if event contains Hide-and-Seek specific comments
  $has_cmkey = "Comment"
 
# - Values for Events - 
 
# Follwoing Settings should only be changed if you're sure what you're doing.
# Position where Range is declared (1 for last, 2 for forelast, 3 for ...)
  $has_swpos = 1 
# Position where Angle is declared (1 for last, 2 for forelast, 3 for ...)
  $has_sapos = 2
# Position where Reaction Time is declared (1 for last, 2 for forelast, 3 for ...)
  $has_rtpos = 3
 
# - Other -
 
# Keyword for map ("" for no Keyword)
  $has_mpkey = ""
# TRUE if Keyword has to appear in Map-Name for making Hide and Seek active,
# FALSE if Keyword has to appear in Map-Name for turning Hide and Seek off
  $has_mpcon = true
 
# Hideterrains (these terrains will act like a Hide-Event)
# for example you can write $has_hideterrain = 1 or $has_hideterrain = [4,6,7]
  $has_hideterrain = 
 
# ------ Hide and Seek SETTINGS ------
 
 
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
#  Reading Event-Names for Hide and Seek - Declaration, Checking Seekers
#==============================================================================
class Game_Map
  #--------------------------------------------------------------------------
  # * Adding Public instance Variable, aliasing setup and update method
  #--------------------------------------------------------------------------
  attr_accessor :map
  alias_method(:hk_has_setup , :setup)
  alias_method(:hk_has_update, :update)
  #--------------------------------------------------------------------------
  # * After Setup, checking Event Names
  #--------------------------------------------------------------------------
  def setup(*args)
    hk_has_setup(*args)
    $hide_and_seek = nil
    if map_name.downcase.include?($has_mpkey.downcase) == $has_mpcon
      $hide_and_seek = Hide_and_Seek.new
    end
    unless $hide_and_seek == nil
      @events.each {|id, event|
        unless @map.events[id].name.downcase.include?($has_cmkey.downcase)    
          # Die Namen überprüfen, wenn keine Kommentare geprüft werden sollen
          name = @map.events[id].name.downcase
          seeker = name.include?($has_skkey.downcase)
          hideev = name.include?($has_hdkey.downcase)
          $hide_and_seek.change_unit(id, seeker, hideev)
        end
      }
      # Undurchsichtige Terrains überprüfen
      $hide_and_seek.get_terrains
      # Die Events müssen refreshed werden damit die Kommentare gelesen werden
      for event in @events.values
        event.refresh
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Map_Name  This method returns the map's name
  #--------------------------------------------------------------------------
  def map_name
    return load_data("Data/MapInfos.rxdata")[@map_id].name if @map_id != nil
  end
  #--------------------------------------------------------------------------
  # * Check Seekers each update
  #--------------------------------------------------------------------------
  def update(*args)
    hk_has_update(*args)
    if $hide_and_seek != nil
      $hide_and_seek.check_seekers 
    end
  end
end
 
#==============================================================================
# ** Game_Event
#------------------------------------------------------------------------------
#  Reading Comments for Hide and Seek - Declaration
#==============================================================================
class Game_Event
  #--------------------------------------------------------------------------
  # * Adding Public instance Variable, aliasing refresh and initialize method
  #--------------------------------------------------------------------------
  attr_accessor :hk_has_seen_player_since
  alias_method(:hk_has_refresh, :refresh)
  alias_method(:hk_has_initialize, :initialize)
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     hk_has_seen_player_since : Framecount, starting at the moment when 
  #                                event could see the player          
  #--------------------------------------------------------------------------
  def initialize(*args)
    @hk_has_seen_player_since = 0
    hk_has_initialize(*args)
  end
  #--------------------------------------------------------------------------
  # * If Event hasn't got a Hide and Seek - declared Name, check if it has
  #     a Hide and Seek - declared comment (each new Page)
  #--------------------------------------------------------------------------
  def refresh
    hk_has_refresh
    if $hide_and_seek != nil
      # Gelöschte Events aus den Listen entfernen
      $hide_and_seek.change_unit(@id, false, false) if @erased
      # Kommentare prüfen wenn gewünscht
      if event_name.downcase.include?($has_cmkey.downcase) and list != nil
        # checklistsize aus dem Eventnamen lesen (Schlüsselwort:checklistsize)
        checklistsize = 0
        event_name.split.each do |namepart|
          checklistsize = namepart.split(":")[1].to_i if namepart.include?($has_cmkey)
        end
        # Im Zweifelsfall listsize als checklistsize nehmen nehmen
        if checklistsize <= 0 or (list.size-1) < checklistsize
          checklistsize = (list.size-1)
        end
        seeker = false
        hideev = false
        for i in 0..checklistsize
          if list[i].code == 108 || list[i].code == 408
            unless seeker
              seeker = list[i].parameters[0].downcase.include?($has_skkey.downcase)
            end
            unless hideev
              hideev = list[i].parameters[0].downcase.include?($has_hdkey.downcase)
            end
          end
        $hide_and_seek.change_unit(@id, seeker, hideev)
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Event_Name  This method returns the events's name
  #--------------------------------------------------------------------------
  def event_name
    if $game_map != nil
      return $game_map.map.events[@id].name if @id != nil
    end
  end
end
 
#==============================================================================
# ** Hide_and_Seek
#------------------------------------------------------------------------------
#  This Class handles interaction between User and pure Mathematics
#==============================================================================
class Hide_and_Seek
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     seekers : Array of EventIDs from Seeker-Events
  #     hideevs : Array of EventIDs from Hide-Events
  #     Starting HaS_Geometrie
  #--------------------------------------------------------------------------
  def initialize
    @seekers = []
    @hideevs = []
    $has_geometrie = HaS_Geometrie.new
  end
  #--------------------------------------------------------------------------
  # * Change Unit  Adds or Removes Hide- and Seekevent-IDs
  #     id   : Eventid
  #     seek : True for adding a Seeker, False for removing a Seeker
  #     hide : True for adding a Hideevent, False for removing a Hideevent
  #--------------------------------------------------------------------------
  def change_unit(id, seek, hide)
    @seekers.delete(id) unless seek == nil
    @hideevs.delete(id) unless hide == nil
    @seekers << id if seek
    @hideevs << id if hide
  end
  #--------------------------------------------------------------------------
  # *  Get Terrains  Scanning Map for Hideterrains
  #--------------------------------------------------------------------------
  def get_terrains
    @terrains = []
    terraintags = $has_hideterrain.to_a
    for x in 0..$game_map.map.width
      for y in 0..$game_map.map.height
        if terraintags.include?($game_map.terrain_tag(x,y))
          @terrains << {"x" => x, "y" => y}
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # *  Check Seekers  Reading Seek-Events over ID, filtering their 
  #                   Hide and Seek - Parameters (like seighting-distance)
  #--------------------------------------------------------------------------
  def check_seekers
    if @seekers != nil
      @seekers.each do |i|
        if $game_map.events[i] != nil
          # Je nach Sclüsselwort Eventname oder Kommentare prüfen
          unless $game_map.events[i].event_name.downcase.include?($has_cmkey.downcase)
            seekerstring = $game_map.events[i].event_name.downcase
          else
            # Herausbekommen, wie weit in die Commandlist reingeschaut werden muss
            checklistsize = $game_map.events[i].list.size-1
            $game_map.events[i].event_name.downcase.split.each do |namepart|
              checklistsize = namepart.split(":")[1].to_i if namepart.include?($has_cmkey)
            end
            # Die Commandlist durchgehen und nach entsprechendem Kommentar suchen
            for j in 0..checklistsize
              code = $game_map.events[i].list[j].code
              comment = $game_map.events[i].list[j].parameters[0]
              if (code == 108 || code == 408) and comment.downcase.include?($has_skkey.downcase)
                seekerstring = comment.downcase
                break
              end
            end
          end
          # Jetzt relevante Informationen aus Seekerstring filtern
          # Seek Befehl umkehren?
          reverse = seekerstring.include?($has_rvkey.downcase)
          # Kreisförmige Sicht aktivieren?
          circle = seekerstring.include?($has_sckey.downcase)
          seekerstring = seekerstring.split
          # Range auslesen (positionsbedingt)
          ra = seekerstring[seekerstring.size-$has_swpos].to_i
          # Sichtwinkel auslesen (positionsbedingt)
          sw = seekerstring[seekerstring.size-$has_sapos].to_i
          # Reaction Time auslesen (positionsbedingt)
          rt = seekerstring[seekerstring.size-$has_rtpos].to_i
          # Reaction Time ist in Sekunden, in Frames umrechnen
          rt *= Graphics.frame_rate
          # Abwärtskompatibilitiät v1.2 : nur über Eventnamen
          if comment == nil
            if ra == 0
              # Wert wurde von Kennzeichen mit ":" getrennt
              ra = seekerstring[seekerstring.size-$has_swpos].split(":")[1].to_i
            end
            if sw == 0
              # Sichtwinkel gabs nicht, Seeker sahen nur geradeaus (SW 1 Grad)
              sw = 1
            end
          end
          # Seek-Befehl absetzen und ins Gegenteil verkehren wenn Reverse-Schlüsselwort
          if seek2(ra, sw, i, circle) != reverse
            # Wenn in Sichtweite, den Framecount setzen falls noch nicht geschehen
            if $game_map.events[i].hk_has_seen_player_since == 0
              $game_map.events[i].hk_has_seen_player_since = Graphics.frame_count
            end
          else
             # Wenn nicht in Sichtweite, den Framecount auf 0 setzen
             $game_map.events[i].hk_has_seen_player_since = 0
          end
          # Wenn Player schon lang genug in Sichtweite ist
          if ( ( ( $game_map.events[i].hk_has_seen_player_since + rt ) <
            Graphics.frame_count ) and $game_map.events[i].hk_has_seen_player_since != 0 )
            # Starten nur wenn Event nicht läuft und nicht gelöscht ist
            unless $game_system.map_interpreter.running? or 
                   $game_map.events[i].list == nil or
                   $game_map.events[i].moving?
              $game_map.events[i].start
            end
          end
        end
      end
    end
  return true
  end
  #--------------------------------------------------------------------------
  # *  Seek2  New Seek-Method since v2.0, acts with HaS_Geometrie
  #     range  : How far the Seeker can look (Tiles)
  #     siwi   : Seighting-Triangle-Angle
  #              1-179 degrees, other values will skip Triangle-Check
  #     seeker : Seeker's Event-ID
  #     circle : Seighting-Circle with Radius range around Seeker?
  #              If Triangle and Circle are aktive, Player has to be in both
  #--------------------------------------------------------------------------
  def seek2(range, siwi, seeker, circle)
    ax = $game_map.events[seeker].real_x
    ay = $game_map.events[seeker].real_y
    px = $game_player.real_x
    py = $game_player.real_y
    blx = 0.0
    bly = 0.0
    alpha = siwi
    strecke_h = range * 128
    richtung = $game_map.events[seeker].direction
    sichtkreis = circle
    if $has_geometrie.variablen_uebergeben(ax, ay, px, py, blx, bly, alpha, strecke_h, richtung, sichtkreis)
      if $has_geometrie.spieler_in_sichtfeld #spieler ist in sichtfeld
        @hideevs.each do |id| #überprüfe ob hide event auf strecke
          blx = $game_map.events[id].real_x
          bly = $game_map.events[id].real_y
          $has_geometrie.blockpunkte_aendern(blx, bly)
          return false if $has_geometrie.hide_auf_strecke
        end
        @terrains.each do |terrain| #überprüfe ob terrain event auf strecke
          blx = terrain["x"] * 128
          bly = terrain["y"] * 128
          $has_geometrie.blockpunkte_aendern(blx, bly)
          return false if $has_geometrie.hide_auf_strecke
        end
        return true
      end
    end
    return false
  end
end
 
#==============================================================================
# ** Interpreter
#------------------------------------------------------------------------------
#  For direct Commands to Hide and Seek and old methods (compatibility)
#==============================================================================
class Interpreter
  #--------------------------------------------------------------------------
  # *  HaS Seek  Manual seek for Conditional Branch. 
  #     siwi   : Angle
  #     sw     : Seighting-Distance      
  #     circle : Circle on or off
  #     rt     : Reaction Time
  #     seek_id: Id of the seeking Event                            
  #--------------------------------------------------------------------------
  def has_seek(siwi, sw, circle = false, rt = 0, seek_id = @event_id )
    if $hide_and_seek != nil
      if $hide_and_seek.seek2(sw,siwi,seek_id,circle)
        if $game_map.events[@event_id].hk_has_seen_player_since == 0
          $game_map.events[@event_id].hk_has_seen_player_since = Graphics.frame_count
        end
        if ( ( ( $game_map.events[@event_id].hk_has_seen_player_since + rt ) <
          Graphics.frame_count ) and $game_map.events[@event_id].hk_has_seen_player_since != 0 )
          return true
        end
      else
        $game_map.events[@event_id].hk_has_seen_player_since = 0
      end
    end
    return false
  end
  #--------------------------------------------------------------------------
  # *  HaS Seconds Player Seen  Returns how many seconds the Player is seen
  #                             by the Event with the ID.
  #     eventid: ID of the Seeker (optional)
  #--------------------------------------------------------------------------
  def has_seconds_player_seen(eventid = @event_id)
    if $game_map.events[eventid].hk_has_seen_player_since == 0
      spt = 0
    else
      spt = Graphics.frame_count - $game_map.events[eventid].hk_has_seen_player_since
      spt = (spt / Graphics.frame_rate).round
    end
    return spt
  end
  #--------------------------------------------------------------------------
  # *  HaS Set Seconds Player Seen  Sets the Player-Seen-Seconds to a value.
  #     seconds: Seconds (optional)
  #     eventid: ID of the Seeker (optional)
  #--------------------------------------------------------------------------
  def has_set_seconds_player_seen(seconds = 0, eventid = @event_id)
    $game_map.events[eventid].hk_has_seen_player_since = seconds * Graphics.frame_rate
    return true
  end
  #--------------------------------------------------------------------------
  # *  Set Hide and Seek Event  Name of old Method (v1.3), 
  # *                           use is not recommed.
  #--------------------------------------------------------------------------
  def set_hideandseek_event(eventid, seek, hide)
    if $hide_and_seek != nil 
      $hide_and_seek.change_unit(eventid, seek, hide)
    end
    return true
  end
  #--------------------------------------------------------------------------
  # *  Seek  Name of the old Seek-Method which was declared at Interpreter Class
  #     sw      : Range
  #     sb      : no use anymore (was event id of the first hideevent)
  #     ab      : no use anymore (was event id of the last hideevent)
  #     seek_id : Seeker's Event-ID
  #--------------------------------------------------------------------------
  def seek(sw, sb = 0, ab = 0, seek_id = @event_id)
    if $hide_and_seek != nil
      return $hide_and_seek.seek2(sw, 1, seek_id, false)
    end
    return false
  end
end
 
#==============================================================================
# ** HaS_Geometrie
#------------------------------------------------------------------------------
#  This Class does the geometrics for Hide and Seek
#  If you extract anything from this class (even if you just get
#  "inspiration"), I want to be credited! Sorry but this was pretty much work.
#==============================================================================
class HaS_Geometrie
  #--------------------------------------------------------------------------
  # * Variablen Übergeben  Setting instance Variables for the calculations
  #     ax, ay     : Event X and Event Y Coordinates
  #     px, py     : Player X and Player Y Coordinates
  #     blx, bly   : Hideevent X and Hideevent Y Coordinates
  #     alpha      : Seighting-Triangle Angle
  #     sichtweite : Seighting-Distance
  #     kreis      : True if a Seighting-Circle shout be calculated
  #--------------------------------------------------------------------------
  def variablen_uebergeben(ax, ay, px, py, blx, bly, alpha, sichtweite, richtung, kreis)
    @punkt_a = { "x" => ax, "y" => ay}
    @punkt_b = { "x" => 0.0, "y" => 0.0}
    @punkt_c = { "x" => 0.0, "y" => 0.0}
    @punkt_p = { "x" => px, "y" => py}
    @punkt_bl = { "x" => blx, "y" => bly}
    @richtung = richtung
    @sichtweite = sichtweite
    @sichtwinkel = alpha
    @circle = kreis
    return true if eckpunkte_bestimmen
  end
  #--------------------------------------------------------------------------
  # * Blockpunkte Ändern  Method to change Hideevent-Coordinates
  #     blx, bly   : Hideevent X and Hideevent Y Coordinates
  #--------------------------------------------------------------------------
  def blockpunkte_aendern(blx, bly)
    @punkt_bl = { "x" => blx, "y" => bly}
  end
  #--------------------------------------------------------------------------
  # * Bogenmass  Thanks to =Kai= and Monsta from rpg-studio for this Method
  #     n : Angle
  #--------------------------------------------------------------------------
  def bogenmass(n)
     n * 2.0 * Math::PI / 360.0
  end
  #--------------------------------------------------------------------------
  # * Eckpunkte Bestimmen  Figures out Verticles of the Seighting-Triangle
  #     Thanks to =Kai= for eliminating some syntax errors with Math.sin
  #--------------------------------------------------------------------------
  def eckpunkte_bestimmen
    alpha = @sichtwinkel
    strecke_h = @sichtweite
    gamma = (180.0 - alpha) / 2.0
    gamma_b = bogenmass(gamma)
    alpha_b = bogenmass(alpha)
    a = ((strecke_h/Math.sin(gamma_b)) * (Math.sin(alpha_b/2.0))) * 2.0
    case @richtung
    when 2
      @punkt_b["y"] = @punkt_a["y"]+strecke_h
      @punkt_c["y"] = @punkt_a["y"]+strecke_h
      @punkt_b["x"] = @punkt_a["x"]+(a/2.0)
      @punkt_c["x"] = @punkt_a["x"]-(a/2.0)  
    when 4
      @punkt_b["x"] = @punkt_a["x"]-strecke_h
      @punkt_c["x"] = @punkt_a["x"]-strecke_h
      @punkt_b["y"] = @punkt_a["y"]-(a/2.0)
      @punkt_c["y"] = @punkt_a["y"]+(a/2.0)
    when 6
      @punkt_b["x"] = @punkt_a["x"]+strecke_h
      @punkt_c["x"] = @punkt_a["x"]+strecke_h
      @punkt_b["y"] = @punkt_a["y"]+(a/2.0)
      @punkt_c["y"] = @punkt_a["y"]-(a/2.0)
    when 8
      @punkt_b["y"] = @punkt_a["y"]-strecke_h
      @punkt_c["y"] = @punkt_a["y"]-strecke_h
      @punkt_b["x"] = @punkt_a["x"]-(a/2.0)
      @punkt_c["x"] = @punkt_a["x"]+(a/2.0)  
    end
    return true
  end
  #--------------------------------------------------------------------------
  # * Spieler in Sichtfeld  Returns True if Player is within 
  #     Seighting-Triangle (if it is activated) and Seighting-Circle 
  #     (if it is activated), or if Player is on Seek-Event
  #--------------------------------------------------------------------------
  def spieler_in_sichtfeld
 
    # Punkte zur Berechnung setzen (P ist Spieler, A Seeker)
    px = @punkt_p["x"]
    py = @punkt_p["y"]
    ax = @punkt_a["x"]
    ay = @punkt_a["y"]
    bx = @punkt_b["x"]
    by = @punkt_b["y"]
    cx = @punkt_c["x"]
    cy = @punkt_c["y"]
 
    # Wenn Spieler auf selber Position wie Seeker steht: True
    return true if px == ax && py == ay
 
    # Wenn weder Sichtkreis noch Sichtdreieck aktiviert sind, hier abbrechen
    if not @circle and not @sichtwinkel.between?(1,179)
      return false
    end
 
    # Sichtkreis:
    # Prüfung ob Spieler innerhalb eines Kreises mit Radius Sichtweite ist
    if @circle
      # Muss nur geprüft werden wenn es eingestellt wurde
      return false if (((px - ax).abs + (py - ay).abs) > @sichtweite )
    end
 
    # Sichtdreieck:
    # Prüfung ob Spieler außerhalb der Sichtweite oder hinter dem Seeker ist
    unless @sichtwinkel.between?(1,179)
      # Wenn ein Sichtwinkel von 0 oder 360 eingestellt wurde: Prüfung überspringen
      # Dann wird nur die Auswertung vom Sichtkreis genommen
      return true
    end
    case @richtung
    when 2
      return false if py > by || py < ay  # by == cy
    when 4
      return false if px > ax || px < bx  # bx == cx
    when 6
      return false if px < ax || px > bx  # bx == cx
    when 8
      return false if py < by || py > ay  # by == cy
    end
    ab_m = 1.0
    ab_b = 1.0
    ac_m = 1.0
    ac_b = 1.0
    #gerade AB
    ab_m = (by - ay) / (bx - ax)
    ab_b = ay - (ab_m * ax)
    #gerade AC
    ac_m = (cy - ay) / (cx - ax)
    ac_b = ay - (ac_m * ax)
    #aufgelöst nach x und y :
    #py == (m*px) + b
    #px == (py - b) / m
    #Eingesetzte für X-Wert der Strecke AB, 
    ab_x = (py - ab_b) / ab_m
    ab_y = (ab_m*px) + ab_b
    ac_x = (py - ac_b) / ac_m
    ac_y = (ac_m*px) + ac_b
    case @richtung
    when 2
      return false if px <= ac_x || px >= ab_x
    when 4
      return false if py >= ac_y || py <= ab_y
    when 6
      return false if py <= ac_y || py >= ab_y
    when 8
      return false if px >= ac_x || px <= ab_x
    end
 
    return true
  end
  #--------------------------------------------------------------------------
  # * Hide auf Strecke  Returns True if Hideevent is between Player and Seeker
  #     Thanks to uni-protokolle.de for some inspiration, they could not
  #     explain what I wanted to know, but somehow I figuerd it out by myself
  #--------------------------------------------------------------------------
  def hide_auf_strecke
 
    # Punkte zur Berechnung übernehmen (P ist Spieler, A Seeker und BL Hide)
    px = @punkt_p["x"]
    py = @punkt_p["y"]
    ax = @punkt_a["x"]
    ay = @punkt_a["y"]
    blx = @punkt_bl["x"]
    bly = @punkt_bl["y"]
 
    # Wenn Seeker selbst Hideevent, nicht prüfen  
    return false if @punkt_bl == @punkt_a 
 
    case @richtung # ist Hide-Event irgendwo zwischen Spieler und Seeker
    when 2
      return false if bly > py || bly < ay
    when 4
      return false if blx > ax || blx < px
    when 6
      return false if blx < ax || blx > px
    when 8
      return false if bly < py || bly > ay
    end
    # Temporäre Variablen deklarieren, vorhandene zu Dezimalzahlen umwandeln
    px *= 1.0
    py *= 1.0
    ax *= 1.0
    ay *= 1.0
    blx *= 1.0
    bly *= 1.0
    m = -1.0
    b = -1.0
    tempx = -1.0
    tempy = -1.0
    qx = []
    qy = []
    # Das Blockevent wird zu einem Quadrat gemacht; die 4 Punkte berechnen:
    qx[1] = blx - 64.0
    qy[1] = bly - 64.0
    qx[2] = blx + 64.0
    qy[2] = bly - 64.0
    qx[3] = blx - 64.0
    qy[3] = bly + 64.0
    qx[4] = blx + 64.0
    qy[4] = bly + 64.0
    # Funktionsgleichung für eine Gerade zwischen Seeker und Spieler aufstellen
    # Steigung M berechnen
    if ((px - ax) == 0) # Steigung endlos
      m = 9999999.99
    else
      m = (py - ay) / (px - ax)
    end 
    # Y-Achsenabschnittszahl B berechnen
    b = ay - (m * ax)
    # Jetzt nur noch prüfen, ob die Gerade eine der Kanten des Quadrates schneidet
    tempx = funktionsgleichung_auswerten(qy[1], 0, m, b)
    return true if tempx >= qx[1] && tempx <= qx[2]
    tempx = funktionsgleichung_auswerten(qy[3], 0, m, b)
    return true if tempx >= qx[3] && tempx <= qx[4]
    tempy = funktionsgleichung_auswerten(0, qx[1], m, b)
    return true if tempy >= qy[1] && tempy <= qy[3]  
    tempy = funktionsgleichung_auswerten(0, qx[2], m, b)
    return true if tempy >= qy[2] && tempy <= qy[4]   
    # Wenn Gerade nicht das Quadrat schneitet, false
    return false
  end
  #--------------------------------------------------------------------------
  # * Funktionsgleichung Auswerten  Returns X or Y ( y = m * x + b )
  #--------------------------------------------------------------------------
  def funktionsgleichung_auswerten(y, x, m, b)
    if y == 0
      # nach y auflösen
      return (m * x + b)
    elsif x == 0
      # nach x auflösen
      return ((y -  b) / m)
    else
      return 0
    end
  end
end
highlight to read



Positionsfinder byVoudisteppi2
Spoiler

Ruby Source code

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
#Dieses Skript ist für jeden garantiert frei verwendbar bzw veränderbar, daher Autor unbekannt.
#Ermittelt, welche Position ein Event zum anderen haben muss.
#Folgende Werte sollten je nach belieben verändert werden, falls Variable X in deinem Spiel schon für was anderes belegt wurde.
Event1XVariablenNummer = 19
Event1YVariablenNummer = 20
Event2XVariablenNummer = 21
Event2YVariablenNummer = 22
RichtungsrückgabewertNummer = 23
#Mögliche Rückgabewerte dieser Funktion sind:
#2=unten
#4=links
#6=rechts
#8=oben
 
#Im Grunde genommen ist der folgende Befehl eine Umsetzung des Bildes (im Forum).
def ermittlePosition()
  $Px = $game_variables[Event1XVariablenNummer]
  $Py = $game_variables[Event1YVariablenNummer]
  $Ex = $game_variables[Event2XVariablenNummer]
  $Ey = $game_variables[Event2YVariablenNummer]
  if $Px-$Ex<0
    if $Py-$Ey<0
      if ($Px-$Ex).abs < ($Py-$Ey).abs
        $game_variables[RichtungsrückgabewertNummer] = 8
      elsif ($Px-$Ex).abs >= ($Py-$Ey).abs
        $game_variables[RichtungsrückgabewertNummer] = 4
      end
    elsif $Py-$Ey>0
      if ($Px-$Ex).abs < ($Py-$Ey).abs
        $game_variables[RichtungsrückgabewertNummer] = 2
      elsif ($Px-$Ex).abs >= ($Py-$Ey).abs
        $game_variables[RichtungsrückgabewertNummer] = 4
      end
    else
      $game_variables[RichtungsrückgabewertNummer] = 4
    end
  elsif $Px-$Ex > 0
    if $Py-$Ey<0
      if ($Px-$Ex).abs < ($Py-$Ey).abs
        $game_variables[RichtungsrückgabewertNummer] = 8
      elsif ($Px-$Ex).abs >= ($Py-$Ey).abs
        $game_variables[RichtungsrückgabewertNummer] = 6
      end
    elsif $Py-$Ey>0
      if ($Px-$Ex).abs < ($Py-$Ey).abs
        $game_variables[RichtungsrückgabewertNummer] = 2
      elsif ($Px-$Ex).abs >= ($Py-$Ey).abs
        $game_variables[RichtungsrückgabewertNummer] = 6
      end
    else
      $game_variables[RichtungsrückgabewertNummer] = 6
    end
  else
    if $Py-$Ey < 0
      $game_variables[RichtungsrückgabewertNummer] = 8
    elsif $Py-$Ey > 0
      $game_variables[RichtungsrückgabewertNummer] = 2
    else
      $game_variables[RichtungsrückgabewertNummer] = 2
    end
  end
end
highlight to read



Execute Event by Revito
Spoiler

Ruby Source code

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
#-------------------------------------------------------------------------------
# Execute Event | By Revito
#-------------------------------------------------------------------------------
# Dieses Skript führt das Event vor dem Spieler aus.
# Als Extra kann eine Bedingung angegeben werden,
# wodurch ein Event nur dann ausgeführt wird, wenn es einen bestimmten Kommentar
# enthält.
# 
# Beispiel für einen Kommentar:
#   <conditions: mind_reading, watering>
#
# Beispiel für ein Callskript:
#   execute_event("mind_reading") # Ruft das Event vor einem auf, 
#                               # wenn die Bedingung stimmt.
# oder
#   execute_event(nil, 5, 7)    # Ruft das Event an den angegebenen 
#                               # Koordinaten auf.
#
# Durch den Rückgabewert der Methode kann sie gut in einem Conditional Branch 
# genutzt werden. Würde man also einen Skill per Common Event auf ein normales
# Event anwenden wollen, so könnte man den Rückgabewert nutzen um zu überprüfen,
# ob der Skill angewendet werden konnte.
#
#
#  execute_event("mind_reading", $game_variables[25], $game_variables[26])
#-------------------------------------------------------------------------------
 
class Interpreter
  def execute_event(condition = nil, x = nil, y = nil)
    unless x and y
      case $game_player.direction
        when 2 then x = $game_player.x; y = $game_player.y + 1
        when 4 then x = $game_player.x - 1; y = $game_player.y
        when 6 then x = $game_player.x + 1; y = $game_player.y
        when 8 then x = $game_player.x; y = $game_player.y - 1
      end
    end
    for event in $game_map.events.values
      if event.x == x and event.y == y
        next unless event.list # Event überspringen, wenn es leer ist
        if condition == nil  
          event.start
          return true
        end
        event.list.each do |l|
          return false unless l.code == 108 || l.code == 408
          match = /^<\s*conditions:(\s*[[:alnum:]]*(,\s*[[:alnum:]]+)*\s*)>/.match(l.parameters[0])
          if match != nil
            match[1].split(",").each do |m|
              if m.strip == condition
                event.start
                return true
              end
            end
          end
        end
      end
    end
    return false
  end
end
highlight to read




Hat jemand Lust, soetwas zu schreiben?
Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt und nichts vergessen, was man beachten müsste ._.


Josey~
Notfalldiscord: Hier klicken


  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-half: :star-empty: :star-empty: :star-empty: :star-empty:
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

This post has been edited 2 times, last edit by "Josey" (May 17th 2020, 12:56pm)


2

Friday, May 1st 2015, 6:05pm

Hmh ich verstehe nicht ganz, warum du nicht direkt das Schatzsucher-Script verwendest und als Reichweite halt deinen Haustier-Level einbaust... welche Features fehlen dir da?
Spoiler

Ruby Source code

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
#==============================================================================
# ** Schatzsucher Skript
#------------------------------------------------------------------------------
#    by Hüpfende Kokosnuss || Jumping Coconut
#    v 1.1
#    10. Januar 2009
#    Erstellt für den Schatzsucher-Minicontest auf http://www.rpg-studio.de
#    This Script does not have an english explanation, sorry.
#------------------------------------------------------------------------------
#
#                                BENUTZUNG:
#                                ==========
#
#  Das Skript ermöglicht es, bestimmte Events zu Schatzsuchern und andere zu
#  Schätzen zu machen.
#  Schatzsucher werden dem Spieler innerhalb eines Radius (einstellbar) folgen, 
#  doch wenn sie einen Schatz (Event) sehen, dann werden Sie dort hin laufen, 
#  und das Event auszulösen (wenn sie es berühren).
#
#  Um ein Event zu einem Schatz zu machen, reicht es, wenn das Event folgenden,
#  jetzt festlegbaren Wert im Namen hat:
#
  $hk_schatzsucher_eventname = "Schatz"
#  
#  Der Standard ist "Schatz". Das Wort ist frei definierbar.
#
#  Außerdem kann man auch im nachhinein noch ein Event zum Schatz-Event machen,
#  oder ein Schatz-Event wieder zu einem normalen Event machen:
#  
#  hk_schatz_aendern(Event-ID, Aktiv)
#
#  Dieser Befehl muss im Callscript abgesetzt werden. Für "Event-ID" die ID des
#  Events einsetzen, um das es sich handelt. Für "Aktiv" entweder true oder false
#  angeben. True wird das Event zum Schatz-Event machen, False wird es wieder 
#  zum normalen Event machen.
#  
#  Um ein Event zu einem Schatzsucher zu machen, folgendes Callscript verwenden:
#
#  hk_schatzsucher_aendern(Event-ID, Radius)
#
#  Für "Event-ID" wieder die ID des Events eingeben, um das es sich handelt. 
#  Für "Radius" eine Zahl eingeben. So viele Tiles wird das Event nach allen
#  Richtungen suchen, ob es den Spieler oder einen Schatz findet.
#  Wird als Radius 0 eingegeben, so wird das Schatzsucher-Event wieder zu einem
#  normalen Event gemacht.
#
#  Die Callscripts müssen natürlich NICHT parrallel ausgeführt werdne, einmal 
#  reicht!
#
#  Seit Version 1.1 kann man genauer einstellen, wie / ob die Schatzsucher dem 
#  Spieler folgen. 
#  Ist die folgende Variable true, so folgt der Schatzsucher dem Spieler immer.
#  Ist sie false, so folgt er dem Spieler nur, wenn sich der Spieler im Radius
#  des Schatzsuchers befindet.
#
  $hk_schatzsucher_immerfolgen = true
#
#  Viel Spaß wünscht euch euer Hüpfende Kokosnuss ^^
#  Das Skript ist für Mustamakkara bzw seinen Mini-Contest gemacht.
#------------------------------------------------------------------------------
 
#==============================================================================
# ** HK_Schatzsucher
#------------------------------------------------------------------------------
#  Neue Class für Schatzsucher-Bewegungen und Berechnungen
#==============================================================================
 
class HK_Schatzsucher
  #--------------------------------------------------------------------------
  # * initialize(schaetze) => Array mit Eventids, wird von Game Map übergeben
  #--------------------------------------------------------------------------
  def initialize(schaetze)
    @schaetze = []
    @schatzsucher = []
    @schaetze = schaetze
  end
  #--------------------------------------------------------------------------
  # * Schatzsucher Ändern (id, radius) => Ändert die Schatzsucher-Liste 
  #--------------------------------------------------------------------------
  def schatzsucher_aendern(id, radius)
    @schatzsucher.each do |i|
      @schatzsucher.delete(i) if i[0] == id
    end
    @schatzsucher << [id, radius] if radius > 0
  end
  #--------------------------------------------------------------------------
  # * Schatz Ändern (id, aktiv) => Macht ein Event zum Schatz bzw inaktiv
  #--------------------------------------------------------------------------
  def schatz_aendern(id, aktiv)
    @schaetze.delete(id)
    @schaetze << id if aktiv
  end
  #--------------------------------------------------------------------------
  # * Schatzsucher hat Schatz(Schatzsucher, Schatz)
  # => Könnte der Schatzsucher das Schatzevent antriggern?
  #--------------------------------------------------------------------------
  def schatzsucher_hat_schatz?(schatzsucher, schatz)
    if schatzsucher.through or schatz.through
      # Wenn Through, erst auslösen wenn sie auf selben Tile sind
      return true if schatzsucher.x == schatz.x and schatzsucher.y == schatz.y
    else
      # Ansonsten muss der Schatzsucher den Schatz anschauen und vor ihm stehen
      new_x = schatzsucher.x + (schatzsucher.direction == 6 ? 1 : schatzsucher.direction == 4 ? -1 : 0)
      new_y = schatzsucher.y + (schatzsucher.direction == 2 ? 1 : schatzsucher.direction == 8 ? -1 : 0)
      return true if schatz.x == new_x and schatz.y == new_y
    end
  return false
  end
  #--------------------------------------------------------------------------
  # * update => Hier wird geprüft, ob die Schatzsucher was gefunden haben
  #--------------------------------------------------------------------------
  def update
    # Kennzeichen, um einen Schatzsucher pro Durchlauf nur einmal zu bewegen
    schatzsucher_bereits_bewegt = false
    # Schleife, für jeden Schatzsucher einzeln ausführen...
    @schatzsucher.each do |i|
      # i hat an der Stelle 0 die ID des Schatzsuchers, an Stelle 1 den Radius
      schatzsucher = $game_map.events[i[0]]
      radius = i[1]
      # Schleife, für jeden Schatz einzeln ausführen...
      @schaetze.each do |schatz|
        schatz = $game_map.events[schatz]
        # Wenn Schatzsucher einen Schatz erspäht hat
        if ((schatzsucher.x - schatz.x).abs <= radius and
           (schatzsucher.y - schatz.y).abs <= radius)
           # Wenn der Schatzsucher auch noch direkt vor / auf dem Schatz steht
          if schatzsucher_hat_schatz?(schatzsucher, schatz)
            # Schatzevent ausführen
            unless ($game_system.map_interpreter.running? or
                  schatzsucher.moving?)
              schatz.start
            end
          else
            # Ansonsten muss Schatzsucher auf den Schatz in Reichweite zulaufen
            unless (schatzsucher.moving? or schatzsucher.move_route_forcing or
                  schatzsucher_bereits_bewegt)
              schatzsucher.move_toward_event(schatz.id)
              # Kennzeichen setzen, damit er sich nicht noch einmal bewegt
              schatzsucher_bereits_bewegt = true
            end
          end
        end
      end    
      # Wenn der Schatzsucher den Spieler erspäht hat oder so eingestellt ist,
      # dass er dem Spieler sowieso folgen muss
      if ((schatzsucher.x - $game_player.x).abs <= radius and
           (schatzsucher.y - $game_player.y).abs <= radius) or 
           $hk_schatzsucher_immerfolgen
        # Und der Schatzsucher in diesem Update noch nicht bewegt wurde
        unless (schatzsucher.moving? or schatzsucher.move_route_forcing or
               schatzsucher_bereits_bewegt)
          # Dann zum Spieler laufen
          schatzsucher.move_toward_player
        end
      end
      # Jetzt kommt der nächste Schatzsucher (Schleife), Kennzeichen auf false
      schatzsucher_bereits_bewegt = false
    end
  end
end
 
 
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
#  Mapnamen verfügbar machen, beim Map Setup die Events mit entsprechenden
#  Namen der Schatzliste hinzufügen, indem die Class gerufen wird.
#==============================================================================
 
class Game_Map
  attr_accessor :map # Für Zugriff auf Eventnamen
  alias hk_schatzsucher_setup setup
  alias hk_schatzsucher_update update
  #--------------------------------------------------------------------------
  # * Setup (map_id) => Hier wird u.a. die Class HK_Schatzsucher aufgerufen
  #--------------------------------------------------------------------------
  def setup(map_id)
    hk_schatzsucher_setup(map_id)
    # Temporärer Array, nur für Übergabe wichtig
    schaetze = []
    # Eventnamen scannen, enstprechende Events in den zu überweisenden Array geben
    $game_map.events.each {|id, event|
      a = $game_map.map.events[id].name.downcase
      schaetze << id if a.include?($hk_schatzsucher_eventname.downcase)
    }
    # HK_Schatzsucher aufrufen (Schatzevent-IDs übergeben)
    $hk_schatzsucher = HK_Schatzsucher.new(schaetze)
  end
  #--------------------------------------------------------------------------
  # * Frame update => Die Class HK_Schatzsucher mit updaten
  #--------------------------------------------------------------------------
  def update
    hk_schatzsucher_update
    $hk_schatzsucher.update if $hk_schatzsucher != nil
  end
end
 
 
#==============================================================================
# ** Game_Character
#------------------------------------------------------------------------------
#  Die neue Methode move_toward_event einbinden.
#==============================================================================
 
class Game_Character
  #--------------------------------------------------------------------------
  # * Move Toward Event (Event ID) => Schritt Richtung enstprechendes Event
  #--------------------------------------------------------------------------
  def move_toward_event(id)
    # Abstand zwischen Character und Event
    sx = @x - $game_map.events[id].x
    sy = @y - $game_map.events[id].y
    if sx == 0 and sy == 0
      return
    end
    abs_sx = sx.abs
    abs_sy = sy.abs
    # Wenn Event sowohl auf X- als auch auf Y-Achse gleich weit entfernt => Zufall
    if abs_sx == abs_sy
      rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
    end
    # In jeweilige Richtung bewegen
    if abs_sx > abs_sy
      sx > 0 ? move_left : move_right
      if not moving? and sy != 0
        sy > 0 ? move_up : move_down
      end
    else
      sy > 0 ? move_up : move_down
      if not moving? and sx != 0
        sx > 0 ? move_left : move_right
      end
    end
  end
end
 
 
#==============================================================================
# ** Interpreter
#------------------------------------------------------------------------------
#  Die 2 Methoden per Callscript und mit hk-Zusatz verfügbar machen.
#==============================================================================
 
class Interpreter
  #--------------------------------------------------------------------------
  # * Schatzsucher Ändern(id, radius) => Ruft entsprechende Methode
  #--------------------------------------------------------------------------
  def hk_schatzsucher_aendern(id, radius)
    return true if $hk_schatzsucher == nil
    $hk_schatzsucher.schatzsucher_aendern(id, radius)
    return true
  end
  #--------------------------------------------------------------------------
  # * Schatz Ändern(id, aktiv) => Ruft entsprechende Methode
  #--------------------------------------------------------------------------
  def hk_schatz_aendern(id, aktiv)
    return true if $hk_schatzsucher == nil
    $hk_schatzsucher.schatz_aendern(id, aktiv)
    return true
  end
end
highlight to read

Josey

Storyteller

  • "Josey" started this thread

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Send private message

3

Friday, May 1st 2015, 8:47pm

Wie ich schon schrieb, sind da folgende Punkte:

- Script soll nur laufen, wenn Switch 10 ON ist
- Das Script soll als Sucher nicht auf eine Event-ID zugreifen, sondern auf den Eventnamen (weil das Haustier auf jeder Map eine andere ID hat)
- Das Script müsste mehrere Tileumkreise anbieten können- dabei ist aber das Level nicht zwangsläufig gleich dem Tileumkreis (zB Level 10 = 5 Tileumkreis)
- In deinem Script wird nicht überprüft, ob bestimmte Switche ON sind (das Haustier führt gerade eine Aufgabe aus)
- Das Script OFFt nicht bestimmte Switche, während einer Schatzsuche (damit das Haustier nicht die Schatzsuche abbricht und Random etwas tut) und ONt sie wieder, nach getaner Arbeit
- Das Script hat keinen Wait, bei dem ich dann eine kleine Charakter-Ani einbauen könnte, bevor das Haustier losrennt

:)
Ich dachte für einen erfahrenen Scripter dürfte das alles nicht zu kompliziert einzubauen sein? :3
Ich bin leider im Scripten ein absoluter Looser.
Notfalldiscord: Hier klicken


  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-half: :star-empty: :star-empty: :star-empty: :star-empty:
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

4

Saturday, May 2nd 2015, 12:44pm

Ok, ich hab den Maker jetzt nicht installiert aber ich bin zuversichtlich, dass wir die Probleme zusammen lösen können. Du sollst auch was dabei lernen. Vielleicht ist hier der ein oder andere Tippfehler, aber den kannst du dann selbst beheben.

Wie ich schon schrieb, sind da folgende Punkte:

- Script soll nur laufen, wenn Switch 10 ON ist
Ok, gucken wir uns das Script mal zusammen an und versuchen es anzupassen. Wenn du ein Script manchmal willst und manchmal nicht willst, solltest du dir erstmal überlegen, von wo es aufgerufen wird. Neue Scripts sind meistens so aufgebaut, dass sie im eigentlichen RGSS Code so wenig wie möglich arbeiten, sondern immer ihre eigenen Funktionen aufrufen. Gucken wir uns mal die Klassen an, die das Schatzsucherscript verwendet:
  • HK_Schatzsucher -> Die Klasse enthält den wichtigen Teil des neuen Codes
  • Game_Map -> Das wird einmal pro aktiver Map ausgeführt. Alles was sich auf der Map bewegt wird von hier angetriggert, in der update-methode.
  • Game_Character -> Hier sind Methoden für einen "Character" drin, das können Events sein, aber auch der Spieler. Alles was auf der Map bewegt wird.
  • Interpreter -> Alles was hier gemacht wird, ist für Callscripts. Wenn man Befehle über Callscript verfügbar machen will, müssen die in diese Klasse rein.

Ok. HK_Schatzsucher können wir erstmal ignorieren, da das ja eine neu hinzugekommen Klasse ist, kann der Code zum aufrufen des Scripts nicht hierdrin stehen. Interpreter können wir auch ignorieren, die Klasse ist ja nur für callscripts. Da du in deinem Spiel ja sowieso selber entscheidest, wann du callscripts absetzt, wäre das auch die falsche Stelle, um das Feature auszuschalten. Bleiben Game_Character und Game_Map.
Gucken wir mal, welche Methoden da drin sind:
  • Game_Character
    • move_toward_event -> Neue Methode, um ein Character in Richtung eines bestimmten Events zu bewegen (Ähnlich wie das existierende Move_Toward_Player)

  • Game_Map
    • setup -> Methode, die einmalig bei der Maperstellung aufgerufen wird
    • update -> Methode, die regelmäßig aufgerufen wird und die Änderungen auf der Map triggert, zum Beispiel wenn sich etwas bewegen soll


Da die move_toward_event Methode ebenfalls neu ist, können wir uns also auf die Game_Map begrenzen. Mal reinschauen.

Ruby Source code

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
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
#  Mapnamen verfügbar machen, beim Map Setup die Events mit entsprechenden
#  Namen der Schatzliste hinzufügen, indem die Class gerufen wird.
#==============================================================================
 
class Game_Map
  attr_accessor :map # Für Zugriff auf Eventnamen
  alias hk_schatzsucher_setup setup
  alias hk_schatzsucher_update update
  #--------------------------------------------------------------------------
  # * Setup (map_id) => Hier wird u.a. die Class HK_Schatzsucher aufgerufen
  #--------------------------------------------------------------------------
  def setup(map_id)
    hk_schatzsucher_setup(map_id)
    # Temporärer Array, nur für Übergabe wichtig
    schaetze = []
    # Eventnamen scannen, enstprechende Events in den zu überweisenden Array geben
    $game_map.events.each {|id, event|
      a = $game_map.map.events[id].name.downcase
      schaetze << id if a.include?($hk_schatzsucher_eventname.downcase)
    }
    # HK_Schatzsucher aufrufen (Schatzevent-IDs übergeben)
    $hk_schatzsucher = HK_Schatzsucher.new(schaetze)
  end
  #--------------------------------------------------------------------------
  # * Frame update => Die Class HK_Schatzsucher mit updaten
  #--------------------------------------------------------------------------
  def update
    hk_schatzsucher_update
    $hk_schatzsucher.update if $hk_schatzsucher != nil
  end
end

Die Methode setup scheint also komplizierter geworden zu sein, während update wirklich sehr übersichtlich ist. Kurzgefasst: Beim Setup wird die ganze Map nach "Schätzen" durchsucht, und diese Liste an Schätzen wird der neuen Klasse HK_Schatzsucher übergeben (Zeile HK_Schatzsucher.new). Dann wird im update nur noch gesagt: "Wenn es eine HK_Schatzsucher Klasse gibt, sag der bitte mal bescheid dass die Map geupdatet werden muss."
Jetzt hast du also zwei Möglichkeiten. Entweder du sorgst dafür, dass die Klasse manchmal gar nicht erst erstellt wird. Oder du lässt das erstellen der Klasse so wie es ist, aber sorgst dafür, dass sie manchmal gar nicht erst bescheid gesagt kriegt, dass sie was tun muss. Natürlich hört sich die erste Methode erstmal besser an, warum etwas erstellen was du nicht brauchst? Jedoch wird die Game_Map Klasse in der Setup Methode ja leider nur dann aufgerufen, wenn man die Map wechselt. Wenn du also per Schalter den Aufruf an- oder ausschalten könntest, würde das bedeuten, dass eine Änderung an diesem Schalter nur in Kraft treten würde, wenn man danach die Map wechselt. Deswegen hänge dich in die Update-Methode:

Ruby Source code

1
2
3
4
5
6
7
8
9
10
11
  #--------------------------------------------------------------------------
  # * Frame update => Die Class HK_Schatzsucher mit updaten
  #--------------------------------------------------------------------------
  def update
    hk_schatzsucher_update
    # Schalter nummero eins abfragen
    if $game_switches[1] == true
      $hk_schatzsucher.update if $hk_schatzsucher != nil
    end
  end
end

Das müsste es auch schon gewesen sein.


- Das Script soll als Sucher nicht auf eine Event-ID zugreifen, sondern auf den Eventnamen (weil das Haustier auf jeder Map eine andere ID hat)
- Das Script müsste mehrere Tileumkreise anbieten können- dabei ist aber das Level nicht zwangsläufig gleich dem Tileumkreis (zB Level 10 = 5 Tileumkreis)
Du setzt Schatzsucher ja so fest:

Ruby Source code

1
hk_schatzsucher_aendern(id, radius)

Wusstest du, dass du mit @event_id immer die ID vom aktuellen Event bekommst? Ich weiß ja nicht, welches Event bei dir das Callscript aufruft, aber wenn du das eh auf jeder Map in dein Haustier-Event einbaust, dann mach doch so:

Ruby Source code

1
hk_schatzsucher_aendern(@event_id, $game_variables[36])

Das hier würde die Range aus der Variable 36 nehmen, und immer die aktuelle EventID.

Wenn das mit der aktuellen EventID nicht genug ist, bau diese Methode in die Class Interpreter ein, die gibt immer die ID für ein Event mit bestimmten Namen zurück:

Ruby Source code

1
2
3
4
5
6
def josey_get_eventid(name)
      $game_map.events.each {|id, event|
        a = $game_map.map.events[id].name.downcase
        return id if a.include?(name.downcase)
      }
      return @event_id

Verwendung:

Ruby Source code

1
hk_schatzsucher_aendern(josey_get_eventid("Haustier"), $game_variables[36])



- In deinem Script wird nicht überprüft, ob bestimmte Switche ON sind (das Haustier führt gerade eine Aufgabe aus)

Mach das doch lieber über den zentralen Switch den wir oben eingebaut haben. Oder pass den Code oben selbst an deine Wünsche an.


- Das Script OFFt nicht bestimmte Switche, während einer Schatzsuche (damit das Haustier nicht die Schatzsuche abbricht und Random etwas tut) und ONt sie wieder, nach getaner Arbeit

Ok, gucken wir mal nochmal in das Script rein. Diesmal willst du nicht komplett was ausbauen, sondern an der eigentlichen Funktionalität was ändern. Also in der HK_Schatzsucher Class. Von der analyse weiter oben wissen wir, dass die HK_Schatzsucher Class eine Update-Methode hat, die regelmäßig aufgerufen wird. In dieser Methode wird dann warscheinlich auch entschieden, ob sich dein Schatzsucher in Richtung Schatz oder eher in Richtung Spieler bewegen wird.

Ruby Source code

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
#==============================================================================
# ** HK_Schatzsucher
#------------------------------------------------------------------------------
#  Neue Class für Schatzsucher-Bewegungen und Berechnungen
#==============================================================================
 
class HK_Schatzsucher
  #--------------------------------------------------------------------------
  # * initialize(schaetze) => Array mit Eventids, wird von Game Map übergeben
  #--------------------------------------------------------------------------
  def initialize(schaetze)
    @schaetze = []
    @schatzsucher = []
    @schaetze = schaetze
  end
  #--------------------------------------------------------------------------
  # * Schatzsucher Ändern (id, radius) => Ändert die Schatzsucher-Liste 
  #--------------------------------------------------------------------------
  def schatzsucher_aendern(id, radius)
    @schatzsucher.each do |i|
      @schatzsucher.delete(i) if i[0] == id
    end
    @schatzsucher << [id, radius] if radius > 0
  end
  #--------------------------------------------------------------------------
  # * Schatz Ändern (id, aktiv) => Macht ein Event zum Schatz bzw inaktiv
  #--------------------------------------------------------------------------
  def schatz_aendern(id, aktiv)
    @schaetze.delete(id)
    @schaetze << id if aktiv
  end
  #--------------------------------------------------------------------------
  # * Schatzsucher hat Schatz(Schatzsucher, Schatz)
  # => Könnte der Schatzsucher das Schatzevent antriggern?
  #--------------------------------------------------------------------------
  def schatzsucher_hat_schatz?(schatzsucher, schatz)
    if schatzsucher.through or schatz.through
      # Wenn Through, erst auslösen wenn sie auf selben Tile sind
      return true if schatzsucher.x == schatz.x and schatzsucher.y == schatz.y
    else
      # Ansonsten muss der Schatzsucher den Schatz anschauen und vor ihm stehen
      new_x = schatzsucher.x + (schatzsucher.direction == 6 ? 1 : schatzsucher.direction == 4 ? -1 : 0)
      new_y = schatzsucher.y + (schatzsucher.direction == 2 ? 1 : schatzsucher.direction == 8 ? -1 : 0)
      return true if schatz.x == new_x and schatz.y == new_y
    end
  return false
  end
  #--------------------------------------------------------------------------
  # * update => Hier wird geprüft, ob die Schatzsucher was gefunden haben
  #--------------------------------------------------------------------------
  def update
    # Kennzeichen, um einen Schatzsucher pro Durchlauf nur einmal zu bewegen
    schatzsucher_bereits_bewegt = false
    # Schleife, für jeden Schatzsucher einzeln ausführen...
    @schatzsucher.each do |i|
      # i hat an der Stelle 0 die ID des Schatzsuchers, an Stelle 1 den Radius
      schatzsucher = $game_map.events[i[0]]
      radius = i[1]
      # Schleife, für jeden Schatz einzeln ausführen...
      @schaetze.each do |schatz|
        schatz = $game_map.events[schatz]
        # Wenn Schatzsucher einen Schatz erspäht hat
        if ((schatzsucher.x - schatz.x).abs <= radius and
           (schatzsucher.y - schatz.y).abs <= radius)
           # Wenn der Schatzsucher auch noch direkt vor / auf dem Schatz steht
          if schatzsucher_hat_schatz?(schatzsucher, schatz)
            # Schatzevent ausführen
            unless ($game_system.map_interpreter.running? or
                  schatzsucher.moving?)
              schatz.start
            end
          else
            # Ansonsten muss Schatzsucher auf den Schatz in Reichweite zulaufen
            unless (schatzsucher.moving? or schatzsucher.move_route_forcing or
                  schatzsucher_bereits_bewegt)
              schatzsucher.move_toward_event(schatz.id)
              # Kennzeichen setzen, damit er sich nicht noch einmal bewegt
              schatzsucher_bereits_bewegt = true
            end
          end
        end
      end    
      # Wenn der Schatzsucher den Spieler erspäht hat oder so eingestellt ist,
      # dass er dem Spieler sowieso folgen muss
      if ((schatzsucher.x - $game_player.x).abs <= radius and
           (schatzsucher.y - $game_player.y).abs <= radius) or 
           $hk_schatzsucher_immerfolgen
        # Und der Schatzsucher in diesem Update noch nicht bewegt wurde
        unless (schatzsucher.moving? or schatzsucher.move_route_forcing or
               schatzsucher_bereits_bewegt)
          # Dann zum Spieler laufen
          schatzsucher.move_toward_player
        end
      end
      # Jetzt kommt der nächste Schatzsucher (Schleife), Kennzeichen auf false
      schatzsucher_bereits_bewegt = false
    end
  end
end

Als wir vorhin die Klassen analysiert haben, ist uns bei Game_Character die neue Methode move_towards_event aufgefallen. Das bewegt ein Event in Richtung eines anderen Events. Wahrscheinlich wird dieser Befehl also dann aufgerufen, wenn der Schatzsucher einen Schatz erspäht hat. Gucken wir mal in die Update methode genau rein. Da ist es:

Ruby Source code

1
2
3
4
5
6
7
            # Ansonsten muss Schatzsucher auf den Schatz in Reichweite zulaufen
            unless (schatzsucher.moving? or schatzsucher.move_route_forcing or
                  schatzsucher_bereits_bewegt)
              schatzsucher.move_toward_event(schatz.id)
              # Kennzeichen setzen, damit er sich nicht noch einmal bewegt
              schatzsucher_bereits_bewegt = true
            end
Aha, das ist also die Abfrage die aufgerufen wird, wenn der Schatzsucher sich bewegen soll. Hier kannst du einbauen was du willst, also auch alle möglichen anderen Schalter ausschalten. Beispiel:

Ruby Source code

1
2
3
4
5
6
7
8
            # Ansonsten muss Schatzsucher auf den Schatz in Reichweite zulaufen
            unless (schatzsucher.moving? or schatzsucher.move_route_forcing or
                  schatzsucher_bereits_bewegt)
              schatzsucher.move_toward_event(schatz.id)
              $game_switches[28] = false
              # Kennzeichen setzen, damit er sich nicht noch einmal bewegt
              schatzsucher_bereits_bewegt = true
            end
Schalter 28 ist jetzt aus. Um ihn später wieder anzumachen, würde ich dir ein Common Event empfehlen, was du bei jedem gefundenen Schatz einbaust. Das brauchst du nämlich sowieso, für den nächsten Punkt.


- Das Script hat keinen Wait, bei dem ich dann eine kleine Charakter-Ani einbauen könnte, bevor das Haustier losrennt

Mach in deine Schatz-Events einfach einen Aufruf eines Common Events rein. Das Common Event macht deine Animation. Solange dein Haustier in einem forced Movement von deinem Eventcode steckt, macht das Schatzsuchserscript nix.


:)
Ich dachte für einen erfahrenen Scripter dürfte das alles nicht zu kompliziert einzubauen sein? :3
Ich bin leider im Scripten ein absoluter Looser.
Dann guck dir mal die Änderungen an und versuch es zu verstehen, wer gut mit Events ist der kann auch scripten :-P
Du musst ja kein neues Script aus dem Boden stampfen, aber so kleinere Edits sind der erste Schritt.

Josey

Storyteller

  • "Josey" started this thread

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Send private message

5

Saturday, May 2nd 2015, 5:06pm

Hallo! :D

Zuerst einmal: Danke! :3
Du hast mir sehr viel und ausführlich erklärt und ich habe einigermaßen verstanden, was ich da jetzt gemacht habe :3
Das Script sieht bis jetzt so aus, ich hoffe ich hab alles richtig eingebaut (ein end fehlte) und verstanden. Jedenfalls startet jetzt schonmal das Spiel.
Spoiler

Ruby Source code

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
#==============================================================================
# ** Schatzsucher Skript
#------------------------------------------------------------------------------
#    by Hüpfende Kokosnuss || Jumping Coconut
#    v 1.1
#    10. Januar 2009
#    Erstellt für den Schatzsucher-Minicontest auf http://www.rpg-studio.de
#    This Script does not have an english explanation, sorry.
#------------------------------------------------------------------------------
#
#                                BENUTZUNG:
#                                ==========
#
#  Das Skript ermöglicht es, bestimmte Events zu Schatzsuchern und andere zu
#  Schätzen zu machen.
#  Schatzsucher werden dem Spieler innerhalb eines Radius (einstellbar) folgen, 
#  doch wenn sie einen Schatz (Event) sehen, dann werden Sie dort hin laufen, 
#  und das Event auszulösen (wenn sie es berühren).
#
#  Um ein Event zu einem Schatz zu machen, reicht es, wenn das Event folgenden,
#  jetzt festlegbaren Wert im Namen hat:
#
  $hk_schatzsucher_eventname = "[Sparkle]"
#  
#  Der Standard ist "Schatz". Das Wort ist frei definierbar.
#
#  Außerdem kann man auch im nachhinein noch ein Event zum Schatz-Event machen,
#  oder ein Schatz-Event wieder zu einem normalen Event machen:
#  
#  hk_schatz_aendern(Event-ID, Aktiv)
#
#  Dieser Befehl muss im Callscript abgesetzt werden. Für "Event-ID" die ID des
#  Events einsetzen, um das es sich handelt. Für "Aktiv" entweder true oder false
#  angeben. True wird das Event zum Schatz-Event machen, False wird es wieder 
#  zum normalen Event machen.
#  
#  Um ein Event zu einem Schatzsucher zu machen, folgendes Callscript verwenden:
#
#  hk_schatzsucher_aendern(Event-ID, Radius)
#
#  Für "Event-ID" wieder die ID des Events eingeben, um das es sich handelt. 
#  Für "Radius" eine Zahl eingeben. So viele Tiles wird das Event nach allen
#  Richtungen suchen, ob es den Spieler oder einen Schatz findet.
#  Wird als Radius 0 eingegeben, so wird das Schatzsucher-Event wieder zu einem
#  normalen Event gemacht.
#
#  Die Callscripts müssen natürlich NICHT parrallel ausgeführt werdne, einmal 
#  reicht!
#
#  Seit Version 1.1 kann man genauer einstellen, wie / ob die Schatzsucher dem 
#  Spieler folgen. 
#  Ist die folgende Variable true, so folgt der Schatzsucher dem Spieler immer.
#  Ist sie false, so folgt er dem Spieler nur, wenn sich der Spieler im Radius
#  des Schatzsuchers befindet.
#
  $hk_schatzsucher_immerfolgen = true
#
#  Viel Spaß wünscht euch euer Hüpfende Kokosnuss ^^
#  Das Skript ist für Mustamakkara bzw seinen Mini-Contest gemacht.
#------------------------------------------------------------------------------
 
#==============================================================================
# ** HK_Schatzsucher
#------------------------------------------------------------------------------
#  Neue Class für Schatzsucher-Bewegungen und Berechnungen
#==============================================================================
 
class HK_Schatzsucher
  #--------------------------------------------------------------------------
  # * initialize(schaetze) => Array mit Eventids, wird von Game Map übergeben
  #--------------------------------------------------------------------------
  def initialize(schaetze)
    @schaetze = []
    @schatzsucher = []
    @schaetze = schaetze
  end
  #--------------------------------------------------------------------------
  # * Schatzsucher Ändern (id, radius) => Ändert die Schatzsucher-Liste 
  #--------------------------------------------------------------------------
  def schatzsucher_aendern(id, radius)
    @schatzsucher.each do |i|
      @schatzsucher.delete(i) if i[0] == id
    end
    @schatzsucher << [id, radius] if radius > 0
  end
  #--------------------------------------------------------------------------
  # * Schatz Ändern (id, aktiv) => Macht ein Event zum Schatz bzw inaktiv
  #--------------------------------------------------------------------------
  def schatz_aendern(id, aktiv)
    @schaetze.delete(id)
    @schaetze << id if aktiv
  end
  #--------------------------------------------------------------------------
  # * Schatzsucher hat Schatz(Schatzsucher, Schatz)
  # => Könnte der Schatzsucher das Schatzevent antriggern?
  #--------------------------------------------------------------------------
  def schatzsucher_hat_schatz?(schatzsucher, schatz)
    if schatzsucher.through or schatz.through
      # Wenn Through, erst auslösen wenn sie auf selben Tile sind
      return true if schatzsucher.x == schatz.x and schatzsucher.y == schatz.y
    else
      # Ansonsten muss der Schatzsucher den Schatz anschauen und vor ihm stehen
      new_x = schatzsucher.x + (schatzsucher.direction == 6 ? 1 : schatzsucher.direction == 4 ? -1 : 0)
      new_y = schatzsucher.y + (schatzsucher.direction == 2 ? 1 : schatzsucher.direction == 8 ? -1 : 0)
      return true if schatz.x == new_x and schatz.y == new_y
    end
  return false
  end
  #--------------------------------------------------------------------------
  # * update => Hier wird geprüft, ob die Schatzsucher was gefunden haben
  #--------------------------------------------------------------------------
  def update
    # Kennzeichen, um einen Schatzsucher pro Durchlauf nur einmal zu bewegen
    schatzsucher_bereits_bewegt = false
    # Schleife, für jeden Schatzsucher einzeln ausführen...
    @schatzsucher.each do |i|
      # i hat an der Stelle 0 die ID des Schatzsuchers, an Stelle 1 den Radius
      schatzsucher = $game_map.events[i[0]]
      radius = i[1]
      # Schleife, für jeden Schatz einzeln ausführen...
      @schaetze.each do |schatz|
        schatz = $game_map.events[schatz]
        # Wenn Schatzsucher einen Schatz erspäht hat
        if ((schatzsucher.x - schatz.x).abs <= radius and
           (schatzsucher.y - schatz.y).abs <= radius)
           # Wenn der Schatzsucher auch noch direkt vor / auf dem Schatz steht
          if schatzsucher_hat_schatz?(schatzsucher, schatz)
            # Schatzevent ausführen
            unless ($game_system.map_interpreter.running? or
                  schatzsucher.moving?)
              schatz.start
            end
          else
            # Ansonsten muss Schatzsucher auf den Schatz in Reichweite zulaufen
            unless (schatzsucher.moving? or schatzsucher.move_route_forcing or
                  schatzsucher_bereits_bewegt)
              schatzsucher.move_toward_event(schatz.id)
              #Switche aus
              $game_switches[157] = false
              $game_switches[257] = false
              $game_switches[398] = false
              $game_switches[400] = false
              # Kennzeichen setzen, damit er sich nicht noch einmal bewegt
              schatzsucher_bereits_bewegt = true
            end
          end
        end
      end    
      # Wenn der Schatzsucher den Spieler erspäht hat oder so eingestellt ist,
      # dass er dem Spieler sowieso folgen muss
      if ((schatzsucher.x - $game_player.x).abs <= radius and
           (schatzsucher.y - $game_player.y).abs <= radius) or 
           $hk_schatzsucher_immerfolgen
        # Und der Schatzsucher in diesem Update noch nicht bewegt wurde
        unless (schatzsucher.moving? or schatzsucher.move_route_forcing or
               schatzsucher_bereits_bewegt)
          # Dann zum Spieler laufen
          schatzsucher.move_toward_player
        end
      end
      # Jetzt kommt der nächste Schatzsucher (Schleife), Kennzeichen auf false
      schatzsucher_bereits_bewegt = false
    end
  end
end
 
 
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
#  Mapnamen verfügbar machen, beim Map Setup die Events mit entsprechenden
#  Namen der Schatzliste hinzufügen, indem die Class gerufen wird.
#==============================================================================
 
class Game_Map
  attr_accessor :map # Für Zugriff auf Eventnamen
  alias hk_schatzsucher_setup setup
  alias hk_schatzsucher_update update
  #--------------------------------------------------------------------------
  # * Setup (map_id) => Hier wird u.a. die Class HK_Schatzsucher aufgerufen
  #--------------------------------------------------------------------------
  def setup(map_id)
    hk_schatzsucher_setup(map_id)
    # Temporärer Array, nur für Übergabe wichtig
    schaetze = []
    # Eventnamen scannen, enstprechende Events in den zu überweisenden Array geben
    $game_map.events.each {|id, event|
      a = $game_map.map.events[id].name.downcase
      schaetze << id if a.include?($hk_schatzsucher_eventname.downcase)
    }
    # HK_Schatzsucher aufrufen (Schatzevent-IDs übergeben)
    $hk_schatzsucher = HK_Schatzsucher.new(schaetze)
  end
  #--------------------------------------------------------------------------
  # * Frame update => Die Class HK_Schatzsucher mit updaten
  #--------------------------------------------------------------------------
  def update
    hk_schatzsucher_update
        # Schalter nummero eins abfragen, Schatzsuche aktiv?
    if $game_switches[415] == true
      # Bereits in Arbeit?
      if $game_switches[402] == false
        if $game_switches[406] == false
          if $game_switches[408] == false
            if $game_switches[409] == false
              if $game_switches[410] == false
                if $game_switches[411] == false
                  if $game_switches[412] == false
                    if $game_switches[413] == false
    $hk_schatzsucher.update if $hk_schatzsucher != nil
                    end
                  end
                end
              end
            end
          end
        end
      end
    end
  end
end
 
 
#==============================================================================
# ** Game_Character
#------------------------------------------------------------------------------
#  Die neue Methode move_toward_event einbinden.
#==============================================================================
 
class Game_Character
  #--------------------------------------------------------------------------
  # * Move Toward Event (Event ID) => Schritt Richtung enstprechendes Event
  #--------------------------------------------------------------------------
  def move_toward_event(id)
    # Abstand zwischen Character und Event
    sx = @x - $game_map.events[id].x
    sy = @y - $game_map.events[id].y
    if sx == 0 and sy == 0
      return
    end
    abs_sx = sx.abs
    abs_sy = sy.abs
    # Wenn Event sowohl auf X- als auch auf Y-Achse gleich weit entfernt => Zufall
    if abs_sx == abs_sy
      rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
    end
    # In jeweilige Richtung bewegen
    if abs_sx > abs_sy
      sx > 0 ? move_left : move_right
      if not moving? and sy != 0
        sy > 0 ? move_up : move_down
      end
    else
      sy > 0 ? move_up : move_down
      if not moving? and sx != 0
        sx > 0 ? move_left : move_right
      end
    end
  end
end
 
 
#==============================================================================
# ** Interpreter
#------------------------------------------------------------------------------
#  Die 2 Methoden per Callscript und mit hk-Zusatz verfügbar machen.
#==============================================================================
 
class Interpreter
  #--------------------------------------------------------------------------
  # * Schatzsucher Ändern(id, radius) => Ruft entsprechende Methode
  #--------------------------------------------------------------------------
  def hk_schatzsucher_aendern(id, radius)
    return true if $hk_schatzsucher == nil
    $hk_schatzsucher.schatzsucher_aendern(id, radius)
    return true
  end
  #--------------------------------------------------------------------------
  # * Schatz Ändern(id, aktiv) => Ruft entsprechende Methode
  #--------------------------------------------------------------------------
  def hk_schatz_aendern(id, aktiv)
    return true if $hk_schatzsucher == nil
    $hk_schatzsucher.schatz_aendern(id, aktiv)
    return true
  end
 #--------------------------------------------------------------------------
  # * Suchevent anhand des Namens finden
  #--------------------------------------------------------------------------
def josey_get_eventid(name)
      $game_map.events.each {|id, event|
        a = $game_map.map.events[id].name.downcase
        return id if a.include?(name.downcase)
      }
      return @event_id
    end
end
highlight to read


Hier habe ich folgende Punkte versucht einzubauen:

- Script soll nur laufen, wenn Switch 10 ON ist
- Das Script soll als Sucher nicht auf eine Event-ID zugreifen, sondern auf den Eventnamen (weil das Haustier auf jeder Map eine andere ID hat)
- Das Script müsste mehrere Tileumkreise anbieten können- dabei ist aber das Level nicht zwangsläufig gleich dem Tileumkreis (zB Level 10 = 5 Tileumkreis)
- In deinem Script wird nicht überprüft, ob bestimmte Switche ON sind (das Haustier führt gerade eine Aufgabe aus)


Quoted

Ich weiß ja nicht, welches Event bei dir das Callscript aufruft

Jedenfalls nciht das Haustierevent. Das Haustierevent läuft auf einem Action-Button. Es kann also nichts aufrufen. Ich hatte vor, alles weiterhin über Common-Events zu regeln.
Zum Beispiel sieht mein Haustier-Run-Event so aus:
@>Conditional Branch: The [A] button is beeing pressed
_@>Script: id = $game_map.\
_: ______: get_pm_event_id_by_name("Haustier")
_: ______:
_: ______: if id != 0
_: ______: $game_map.events[id].move_speed = 5
_: ______: $game_map.events[id].\
_: ______: move_frequency = 6
_: ______: end
_@>
: Else
_@>Script: id = $game_map.\
_: ______: get_pm_event_id_by_name("Haustier")
_: ______:
_: ______: if id != 0
_: ______: $game_map.events[id].move_speed = 4
_: ______: $game_map.events[id].\
_: ______: move_frequency = 6
_: ______: end
_@>Wait 1 frame
_@>
: Branch End

1.)
Das Haustier läuft ja über Moonpearls-Partymember-Script hinter dem Player her. Und mit diesem CE regele ich, dass es rennt, wenn ich den Rennen-Button drücke.
Und dort wollte ich das Callscript mit einbauen- so kann das CE immer wieder das Haustier als den Sucher updaten. Oder ist das eher ungünstig? Soll ich lieber ein PP-Event auf jede Map setzen, dass einmal durchläuft und dann mit Erase-Event gelöscht wird, so dass es immer nur dann startet, wenn man die Map betritt?

Deswegen habe ich auch das def josey_get_eventid(name) eingebaut. Wenn ich aber den Callscript aufrufen will, bekomme ich eine Fehlermeldung.

So habe ich den Callscript eingebaut:

hk_schatzsucher_aendern\
(josey_get_eventid("Haustier"),\
$game_variables[36])

Und die unten angehangene Fehlermeldung kommt. :<
Es könnte etwas mit meinem RGSS3-Modul zu tun haben das lässt sich nicht überprüfen, weil das Haustier nur mit dem Modul funktioniert.
Vielleicht habe ich auch nur etwas falsch eingebaut?


2.)
Jetzt ist noch das Problem da, dass du in deinem Script dafür sorgst, dass der Schatzsucher dem Player folgt. Diese Funktion brauche ich nicht, das wird von einem anderen Script geregelt.
Kann ich die Zeile

# Dann zum Spieler laufen
schatzsucher.move_toward_player

einfach herauslöschen?


Das mit dem Common-Event das aufgerufen wird, damit alle Schalter wieder aktiv sind, werde ich machen.


Quoted

- Das Script hat keinen Wait, bei dem ich dann eine kleine Charakter-Ani einbauen könnte, bevor das Haustier losrennt

Mach in deine Schatz-Events einfach einen Aufruf eines Common Events rein. Das Common Event macht deine Animation. Solange dein Haustier in einem forced Movement von deinem Eventcode steckt, macht das Schatzsuchserscript nix.

3.)
Ich möchte gerne, dass das Haustier seine Bewegungen macht, bevor es den Schatz findet. Sich freuen zum Beispiel. Und nicht erst, wenn es beim Schatz ist. Der Player geht mit dem Haustier also da lang, der Schatz ist in Reichweite- Stopp, alles [Haustiermäßige, nicht der Player oder so] hält an. Ein Event regelt ein paar Sachen (das Haustier bleibt stehen, hat ein Ausrufezeichen oder so) und dann erst rennt es zum Schatz hin und löst ihn aus.
Wie krieg ich das hin? Oder kann ich auch über den Switch, den ich oben auf ON stelle, das Haustier erstmal steuern [Eventseite im Haustier], dann läuft es per Script zum Schatz und dort wird der CE-call ausgelöst? :3 Hält das Script an, wenn ich das Haustier etwas auf einer seiner Eventseiten tun lasse?


4.)
Zudem läuft dein Script ohne das Pathfinding, oder? Also kann das Haustier, dass ja nicht through ist, gar nicht über Pathfinding um Hindernisse herumlaufen oder erkennen, dass es nicht an ein Item herankommt? Wenn da ein Item zB in eigentlicher Reichweite ist, aber HInternisse sind darum herum (zB Wasser), kann das Haustier dieses Item ja eigentlich nicht erreichen und läuft sich dumm und dämlich an dem Hindernis, oder?


Vielen Dank :D
Josey has attached the following image:
  • Error.png
Notfalldiscord: Hier klicken


  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-half: :star-empty: :star-empty: :star-empty: :star-empty:
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

6

Saturday, May 2nd 2015, 6:18pm

Hallo! :D

Zuerst einmal: Danke! :3
Du hast mir sehr viel und ausführlich erklärt und ich habe einigermaßen verstanden, was ich da jetzt gemacht habe :3
Super, so soll es sein!


1.)
Das Haustier läuft ja über Moonpearls-Partymember-Script hinter dem Player her. Und mit diesem CE regele ich, dass es rennt, wenn ich den Rennen-Button drücke.
Und dort wollte ich das Callscript mit einbauen- so kann das CE immer wieder das Haustier als den Sucher updaten. Oder ist das eher ungünstig? Soll ich lieber ein PP-Event auf jede Map setzen, dass einmal durchläuft und dann mit Erase-Event gelöscht wird, so dass es immer nur dann startet, wenn man die Map betritt?
So wie es sich anhört, läuft das CE nicht einmalig, daher wäre die Abfrage darein schlecht für die Performance. Autoevent auf jeder Map wäre ok, aber nervig. Mach das doch in die Game_Map setup methode rein... direkt unter der Stelle, wo HK_Schatzsucher.new steht, rufst du die $hk_schatzsucher.schatzsucher_aendern auf, mit den entsprechenden Parametern. Um an die EventId zu kommen, kannst du den Code von josey_get_eventid einfach reinkopieren. Dann kannst du dir die Arbeit im Callscript auch sparen, kein Interpreter Class gedöns mehr. Damit umgehen wir die Fehlermeldung weiter unten, weiß jetzt nämlich nicht woher das kommt.


2.)
Jetzt ist noch das Problem da, dass du in deinem Script dafür sorgst, dass der Schatzsucher dem Player folgt. Diese Funktion brauche ich nicht, das wird von einem anderen Script geregelt.
Kann ich die Zeile

# Dann zum Spieler laufen
schatzsucher.move_toward_player

einfach herauslöschen?
Ja, das würde funktionieren. Da ist ja noch so ein großes IF drüber, kommtentier am besten alles aus statt es zu löschen.

Ruby Source code

1
2
3
4
5
6
7
8
9
10
11
12
#      # Wenn der Schatzsucher den Spieler erspäht hat oder so eingestellt ist,
#      # dass er dem Spieler sowieso folgen muss
#      if ((schatzsucher.x - $game_player.x).abs <= radius and
#           (schatzsucher.y - $game_player.y).abs <= radius) or 
#           $hk_schatzsucher_immerfolgen
#        # Und der Schatzsucher in diesem Update noch nicht bewegt wurde
#        unless (schatzsucher.moving? or schatzsucher.move_route_forcing or
#               schatzsucher_bereits_bewegt)
#          # Dann zum Spieler laufen
#          schatzsucher.move_toward_player
#        end
#      end



3.)
Ich möchte gerne, dass das Haustier seine Bewegungen macht, bevor es den Schatz findet. Sich freuen zum Beispiel. Und nicht erst, wenn es beim Schatz ist. Der Player geht mit dem Haustier also da lang, der Schatz ist in Reichweite- Stopp, alles [Haustiermäßige, nicht der Player oder so] hält an. Ein Event regelt ein paar Sachen (das Haustier bleibt stehen, hat ein Ausrufezeichen oder so) und dann erst rennt es zum Schatz hin und löst ihn aus.
Wie krieg ich das hin? Oder kann ich auch über den Switch, den ich oben auf ON stelle, das Haustier erstmal steuern [Eventseite im Haustier], dann läuft es per Script zum Schatz und dort wird der CE-call ausgelöst? :3 Hält das Script an, wenn ich das Haustier etwas auf einer seiner Eventseiten tun lasse?
Ja, das Script hält an solange dein Haustier von anderen Events bewegt wird. Daher kannst du das über den Switch oben steuern. Beachte, dass der die ganze Zeit ansteht, solange sich das Haustier auf deinen Schatz zubewegt. Bau dir am besten eine Logik mit 2 Switches, der eine ist an solange sich dein Haustier auf den Schatz zubewegt, das löst deine Animationsseite aus, diese Animationsseite setzt am Ende noch einen Switch an und solange beide Switches an sind, läuft das Event einfach auf den Schatz zu. Und über das CE was beim Schatz-Gefunden aufgerufen wird, musst du dann beide Schalter ausmachen.


4.)
Zudem läuft dein Script ohne das Pathfinding, oder? Also kann das Haustier, dass ja nicht through ist, gar nicht über Pathfinding um Hindernisse herumlaufen oder erkennen, dass es nicht an ein Item herankommt? Wenn da ein Item zB in eigentlicher Reichweite ist, aber HInternisse sind darum herum (zB Wasser), kann das Haustier dieses Item ja eigentlich nicht erreichen und läuft sich dumm und dämlich an dem Hindernis, oder?
Ja, das läuft ohne Pathfinding. Du müsstest die methode move_towards_event durch die Pathfinding-Methode dafür ersetzen, je nach script eine andere. Z.B. $pathfindingscript.pathfind_to_event(schatz.id) .

Ich find's gut dass du es selbst versuchst und nicht alles fix und fertig erwartest, dann bist du in Zukunft auch weniger aufgeschmissen wenn die eigentlichen ersteller der Scripte nicht mehr aktiv sind :-P

Josey

Storyteller

  • "Josey" started this thread

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Send private message

7

Saturday, May 2nd 2015, 7:03pm

Quoted

Mach das doch in die Game_Map setup methode rein... direkt unter der Stelle, wo HK_Schatzsucher.new steht, rufst du die $hk_schatzsucher.schatzsucher_aendern auf, mit den entsprechenden Parametern. Um an die EventId zu kommen, kannst du den Code von josey_get_eventid einfach reinkopieren. Dann kannst du dir die Arbeit im Callscript auch sparen, kein Interpreter Class gedöns mehr. Damit umgehen wir die Fehlermeldung weiter unten, weiß jetzt nämlich nicht woher das kommt.


Wäre die stelle so richtig?

Ruby Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Game_Map
  attr_accessor :map # Für Zugriff auf Eventnamen
  alias hk_schatzsucher_setup setup
  alias hk_schatzsucher_update update
  #--------------------------------------------------------------------------
  # * Setup (map_id) => Hier wird u.a. die Class HK_Schatzsucher aufgerufen
  #--------------------------------------------------------------------------
  def setup(map_id)
    hk_schatzsucher_setup(map_id)
    # Temporärer Array, nur für Übergabe wichtig
    schaetze = []
    # Eventnamen scannen, enstprechende Events in den zu überweisenden Array geben
    $game_map.events.each {|id, event|
      a = $game_map.map.events[id].name.downcase
      schaetze << id if a.include?($hk_schatzsucher_eventname.downcase)
    }
    # HK_Schatzsucher aufrufen (Schatzevent-IDs übergeben)
    $hk_schatzsucher = HK_Schatzsucher.new(schaetze)
    hk_schatzsucher_aendern(josey_get_eventid("Haustier"), $game_variables[36])
  end


Ich bekomme nämlich eine Fehlermeldung :/
(unten angehangen)
Ich mach jetzt mal ein ganz neues, einfaches Projekt ohne andere Scripte auf und schau mal.
...
Nein- Fehler kommt trotzdem. ._. Also liegts wohl daran, wie ich die Sachen eingebaut habe.
Hab ich was vergessen? Müsste das bei "Interpreter" dann wieder raus?


Ich mach trotzdem erstmal weiter:

Quoted

Ja, das würde funktionieren. Da ist ja noch so ein großes IF drüber, kommtentier am besten alles aus statt es zu löschen.

Okay, danke :3

Quoted

Bau dir am besten eine Logik mit 2 Switches, der eine ist an solange sich dein Haustier auf den Schatz zubewegt, das löst deine Animationsseite aus, diese Animationsseite setzt am Ende noch einen Switch an und solange beide Switches an sind, läuft das Event einfach auf den Schatz zu. Und über das CE was beim Schatz-Gefunden aufgerufen wird, musst du dann beide Schalter ausmachen.

Um das in meinen Worten nochmal auszudrücken, damit ich sicher gehen kann, dass ich dich verstehe:
Im Script mache ich Switch 11 ON
Switch 11 löst beim Haustierevent eine Seite aus. Dort wird das Haustier bewegt. Die Moveroute ist fertig, ich mache Switch 12 im Eventcode an, das Haustier schaltet auf eine zweite Seite, die leer ist. Jetzt läuft das Haustier mit dem Script zum Schatz. Dort mache ich den Call und stelle beide auf OFF.
So funktionierts dann, richtig? Ich probiers sofort aus, sobald das Script läuft.

Quoted

Ja, das läuft ohne Pathfinding. Du müsstest die methode move_towards_event durch die Pathfinding-Methode dafür ersetzen, je nach script eine andere. Z.B. $pathfindingscript.pathfind_to_event(schatz.id) .

Ich verwende den oben eingefügten "Lagless Path Finder by Blizzard".
Dort steht:

# This path finder offers you several script calls in order to designate path
# finding to characters on the map. Following script calls are at your
# disposal:
#
# PathFinder.find(C_ID, X, Y)
# PathFinder.find(C_ID, X, Y, RANGE)
# PathFinder.find(C_ID, TARGET)
# PathFinder.find(C_ID, TARGET, RANGE)
# PathFinder.request(C_ID, X, Y)
# PathFinder.request(C_ID, X, Y, RANGE)
# PathFinder.request(C_ID, TARGET)
# PathFinder.request(C_ID, TARGET, RANGE)
# PathFinder.dyn_find(C_ID, X, Y)
# PathFinder.dyn_find(C_ID, X, Y, RANGE)
# PathFinder.dyn_find(C_ID, TARGET)
# PathFinder.dyn_find(C_ID, TARGET, RANGE)
# PathFinder.dyn_request(C_ID, X, Y)
# PathFinder.dyn_request(C_ID, X, Y, RANGE)
# PathFinder.dyn_request(C_ID, TARGET)
# PathFinder.dyn_request(C_ID, TARGET, RANGE)
#
# C_ID - either an event ID, 0 for the player character or an actual
# character (e.g. $game_map.events[ID])
# X - X target coordinate
# Y - Y target coordinate
# RANGE - range within which the target should be located (greater than 0)
# TARGET - an actual target character

Was müsste ich denn jetzt an der Stelle schreiben?

$PathFinder.PathFinder.find(schatz.id)?
Ich habe gesehen, "schatz.id" wird von deinem Script schon festgelegt. :D

$pathfindingscript.pathfind_to_event(schatz.id)
Name des Scripts? . scriptcall? (schatz.id)

Muss dann der ganze Bereich ersetzt werden?

Ruby Source code

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
#==============================================================================
# ** Game_Character
#------------------------------------------------------------------------------
#  Die neue Methode move_toward_event einbinden.
#==============================================================================
 
class Game_Character
  #--------------------------------------------------------------------------
  # * Move Toward Event (Event ID) => Schritt Richtung enstprechendes Event
  #--------------------------------------------------------------------------
  def move_toward_event(id)
    # Abstand zwischen Character und Event
    sx = @x - $game_map.events[id].x
    sy = @y - $game_map.events[id].y
    if sx == 0 and sy == 0
      return
    end
    abs_sx = sx.abs
    abs_sy = sy.abs
    # Wenn Event sowohl auf X- als auch auf Y-Achse gleich weit entfernt => Zufall
    if abs_sx == abs_sy
      rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
    end
    # In jeweilige Richtung bewegen
    if abs_sx > abs_sy
      sx > 0 ? move_left : move_right
      if not moving? and sy != 0
        sy > 0 ? move_up : move_down
      end
    else
      sy > 0 ? move_up : move_down
      if not moving? and sx != 0
        sx > 0 ? move_left : move_right
      end
    end
  end
end



Und wie erkläre ich dem Script, dass es an manche Schätze nicht rankommt und es das erst gar nicht versuchen soll? Blizzard hat einen Abbruch in sein Script eingebaut, falls ein Path mal nicht zugänglich ist
(

Ruby Source code

1
2
3
4
5
6
7
8
9
10
  def self._find(char, x, y, range, dynamic)
    @requests[char] = PathRequest.new(char.x, char.y, x, y, range, dynamic)
    result = nil
    result = self.calc_node(char) while result == nil
    @requests.delete(char)
    if $DEBUG && result == []
      p "Warning! Path Finder could not find path for character at (#{x},#{y})!"
    end
    char.set_found_path(result)
  end

).
Und was geschieht dann mit dem Haustier? Wird es einfach stehen bleiben? Wird es in einer Schleife gefangen sein? Kehrt es zum Player zurück (der vielleicht schon weiterläuft)?


Quoted

Ich find's gut dass du es selbst versuchst und nicht alles fix und fertig erwartest, dann bist du in Zukunft auch weniger aufgeschmissen wenn die eigentlichen ersteller der Scripte nicht mehr aktiv sind :-P

Ich gebe mein Bestes, wirklich. Aber für mich ist das wie eine Fremdsprache und ich hab in Englisch, Russisch udn Französisch ne 5 auf dem Zeugnis gehabt ;D
Ich möchte es auf jeden Fall hinbekommen :3


Aktuelle Version:
Spoiler

Ruby Source code

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
#==============================================================================
# ** Schatzsucher Skript
#------------------------------------------------------------------------------
#    by Hüpfende Kokosnuss || Jumping Coconut
#    v 1.1
#    10. Januar 2009
#    Erstellt für den Schatzsucher-Minicontest auf http://www.rpg-studio.de
#    This Script does not have an english explanation, sorry.
#------------------------------------------------------------------------------
#
#                                BENUTZUNG:
#                                ==========
#
#  Das Skript ermöglicht es, bestimmte Events zu Schatzsuchern und andere zu
#  Schätzen zu machen.
#  Schatzsucher werden dem Spieler innerhalb eines Radius (einstellbar) folgen, 
#  doch wenn sie einen Schatz (Event) sehen, dann werden Sie dort hin laufen, 
#  und das Event auszulösen (wenn sie es berühren).
#
#  Um ein Event zu einem Schatz zu machen, reicht es, wenn das Event folgenden,
#  jetzt festlegbaren Wert im Namen hat:
#
  $hk_schatzsucher_eventname = "[Sparkle]"
#  
#  Der Standard ist "Schatz". Das Wort ist frei definierbar.
#
#  Außerdem kann man auch im nachhinein noch ein Event zum Schatz-Event machen,
#  oder ein Schatz-Event wieder zu einem normalen Event machen:
#  
#  hk_schatz_aendern(Event-ID, Aktiv)
#
#  Dieser Befehl muss im Callscript abgesetzt werden. Für "Event-ID" die ID des
#  Events einsetzen, um das es sich handelt. Für "Aktiv" entweder true oder false
#  angeben. True wird das Event zum Schatz-Event machen, False wird es wieder 
#  zum normalen Event machen.
#  
#  Um ein Event zu einem Schatzsucher zu machen, folgendes Callscript verwenden:
#
#  hk_schatzsucher_aendern(Event-ID, Radius)
#
#  Für "Event-ID" wieder die ID des Events eingeben, um das es sich handelt. 
#  Für "Radius" eine Zahl eingeben. So viele Tiles wird das Event nach allen
#  Richtungen suchen, ob es den Spieler oder einen Schatz findet.
#  Wird als Radius 0 eingegeben, so wird das Schatzsucher-Event wieder zu einem
#  normalen Event gemacht.
#
#  Die Callscripts müssen natürlich NICHT parrallel ausgeführt werdne, einmal 
#  reicht!
#
#  Seit Version 1.1 kann man genauer einstellen, wie / ob die Schatzsucher dem 
#  Spieler folgen. 
#  Ist die folgende Variable true, so folgt der Schatzsucher dem Spieler immer.
#  Ist sie false, so folgt er dem Spieler nur, wenn sich der Spieler im Radius
#  des Schatzsuchers befindet.
#
  $hk_schatzsucher_immerfolgen = true
#
#  Viel Spaß wünscht euch euer Hüpfende Kokosnuss ^^
#  Das Skript ist für Mustamakkara bzw seinen Mini-Contest gemacht.
#------------------------------------------------------------------------------
 
#==============================================================================
# ** HK_Schatzsucher
#------------------------------------------------------------------------------
#  Neue Class für Schatzsucher-Bewegungen und Berechnungen
#==============================================================================
 
class HK_Schatzsucher
  #--------------------------------------------------------------------------
  # * initialize(schaetze) => Array mit Eventids, wird von Game Map übergeben
  #--------------------------------------------------------------------------
  def initialize(schaetze)
    @schaetze = []
    @schatzsucher = []
    @schaetze = schaetze
  end
  #--------------------------------------------------------------------------
  # * Schatzsucher Ändern (id, radius) => Ändert die Schatzsucher-Liste 
  #--------------------------------------------------------------------------
  def schatzsucher_aendern(id, radius)
    @schatzsucher.each do |i|
      @schatzsucher.delete(i) if i[0] == id
    end
    @schatzsucher << [id, radius] if radius > 0
  end
  #--------------------------------------------------------------------------
  # * Schatz Ändern (id, aktiv) => Macht ein Event zum Schatz bzw inaktiv
  #--------------------------------------------------------------------------
  def schatz_aendern(id, aktiv)
    @schaetze.delete(id)
    @schaetze << id if aktiv
  end
  #--------------------------------------------------------------------------
  # * Schatzsucher hat Schatz(Schatzsucher, Schatz)
  # => Könnte der Schatzsucher das Schatzevent antriggern?
  #--------------------------------------------------------------------------
  def schatzsucher_hat_schatz?(schatzsucher, schatz)
    if schatzsucher.through or schatz.through
      # Wenn Through, erst auslösen wenn sie auf selben Tile sind
      return true if schatzsucher.x == schatz.x and schatzsucher.y == schatz.y
    else
      # Ansonsten muss der Schatzsucher den Schatz anschauen und vor ihm stehen
      new_x = schatzsucher.x + (schatzsucher.direction == 6 ? 1 : schatzsucher.direction == 4 ? -1 : 0)
      new_y = schatzsucher.y + (schatzsucher.direction == 2 ? 1 : schatzsucher.direction == 8 ? -1 : 0)
      return true if schatz.x == new_x and schatz.y == new_y
    end
  return false
  end
  #--------------------------------------------------------------------------
  # * update => Hier wird geprüft, ob die Schatzsucher was gefunden haben
  #--------------------------------------------------------------------------
  def update
    # Kennzeichen, um einen Schatzsucher pro Durchlauf nur einmal zu bewegen
    schatzsucher_bereits_bewegt = false
    # Schleife, für jeden Schatzsucher einzeln ausführen...
    @schatzsucher.each do |i|
      # i hat an der Stelle 0 die ID des Schatzsuchers, an Stelle 1 den Radius
      schatzsucher = $game_map.events[i[0]]
      radius = i[1]
      # Schleife, für jeden Schatz einzeln ausführen...
      @schaetze.each do |schatz|
        schatz = $game_map.events[schatz]
        # Wenn Schatzsucher einen Schatz erspäht hat
        if ((schatzsucher.x - schatz.x).abs <= radius and
           (schatzsucher.y - schatz.y).abs <= radius)
           # Wenn der Schatzsucher auch noch direkt vor / auf dem Schatz steht
          if schatzsucher_hat_schatz?(schatzsucher, schatz)
            # Schatzevent ausführen
            unless ($game_system.map_interpreter.running? or
                  schatzsucher.moving?)
              schatz.start
            end
          else
            # Ansonsten muss Schatzsucher auf den Schatz in Reichweite zulaufen
            unless (schatzsucher.moving? or schatzsucher.move_route_forcing or
                  schatzsucher_bereits_bewegt)
              schatzsucher.move_toward_event(schatz.id)
              #Switche aus
              $game_switches[157] = false
              $game_switches[257] = false
              $game_switches[398] = false
              $game_switches[400] = false
              # Kennzeichen setzen, damit er sich nicht noch einmal bewegt
              schatzsucher_bereits_bewegt = true
            end
          end
        end
      end    
=begin      # Wenn der Schatzsucher den Spieler erspäht hat oder so eingestellt ist,
      # dass er dem Spieler sowieso folgen muss
      if ((schatzsucher.x - $game_player.x).abs <= radius and
           (schatzsucher.y - $game_player.y).abs <= radius) or 
           $hk_schatzsucher_immerfolgen
        # Und der Schatzsucher in diesem Update noch nicht bewegt wurde
        unless (schatzsucher.moving? or schatzsucher.move_route_forcing or
               schatzsucher_bereits_bewegt)
          # Dann zum Spieler laufen
          schatzsucher.move_toward_player
        end
      end
=end
# Jetzt kommt der nächste Schatzsucher (Schleife), Kennzeichen auf false
      schatzsucher_bereits_bewegt = false
    end
  end
end
 
 
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
#  Mapnamen verfügbar machen, beim Map Setup die Events mit entsprechenden
#  Namen der Schatzliste hinzufügen, indem die Class gerufen wird.
#==============================================================================
 
class Game_Map
  attr_accessor :map # Für Zugriff auf Eventnamen
  alias hk_schatzsucher_setup setup
  alias hk_schatzsucher_update update
  #--------------------------------------------------------------------------
  # * Setup (map_id) => Hier wird u.a. die Class HK_Schatzsucher aufgerufen
  #--------------------------------------------------------------------------
  def setup(map_id)
    hk_schatzsucher_setup(map_id)
    # Temporärer Array, nur für Übergabe wichtig
    schaetze = []
    # Eventnamen scannen, enstprechende Events in den zu überweisenden Array geben
    $game_map.events.each {|id, event|
      a = $game_map.map.events[id].name.downcase
      schaetze << id if a.include?($hk_schatzsucher_eventname.downcase)
    }
    # HK_Schatzsucher aufrufen (Schatzevent-IDs übergeben)
    $hk_schatzsucher = HK_Schatzsucher.new(schaetze)
    $hk_schatzsucher.hk_schatzsucher_aendern(josey_get_eventid("Haustier"), $game_variables[36])
  end
  #--------------------------------------------------------------------------
  # * Frame update => Die Class HK_Schatzsucher mit updaten
  #--------------------------------------------------------------------------
  def update
    hk_schatzsucher_update
        # Schalter nummero eins abfragen, Schatzsuche aktiv?
    if $game_switches[415] == true
      # Bereits in Arbeit?
      if $game_switches[402] == false
        if $game_switches[406] == false
          if $game_switches[408] == false
            if $game_switches[409] == false
              if $game_switches[410] == false
                if $game_switches[411] == false
                  if $game_switches[412] == false
                    if $game_switches[413] == false
    $hk_schatzsucher.update if $hk_schatzsucher != nil
                    end
                  end
                end
              end
            end
          end
        end
      end
    end
  end
end
 
 
#==============================================================================
# ** Game_Character
#------------------------------------------------------------------------------
#  Die neue Methode move_toward_event einbinden.
#==============================================================================
 
class Game_Character
  #--------------------------------------------------------------------------
  # * Move Toward Event (Event ID) => Schritt Richtung enstprechendes Event
  #--------------------------------------------------------------------------
  def move_toward_event(id)
    # Abstand zwischen Character und Event
    sx = @x - $game_map.events[id].x
    sy = @y - $game_map.events[id].y
    if sx == 0 and sy == 0
      return
    end
    abs_sx = sx.abs
    abs_sy = sy.abs
    # Wenn Event sowohl auf X- als auch auf Y-Achse gleich weit entfernt => Zufall
    if abs_sx == abs_sy
      rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
    end
    # In jeweilige Richtung bewegen
    if abs_sx > abs_sy
      sx > 0 ? move_left : move_right
      if not moving? and sy != 0
        sy > 0 ? move_up : move_down
      end
    else
      sy > 0 ? move_up : move_down
      if not moving? and sx != 0
        sx > 0 ? move_left : move_right
      end
    end
  end
end
 
 
#==============================================================================
# ** Interpreter
#------------------------------------------------------------------------------
#  Die 2 Methoden per Callscript und mit hk-Zusatz verfügbar machen.
#==============================================================================
 
class Interpreter
  #--------------------------------------------------------------------------
  # * Schatzsucher Ändern(id, radius) => Ruft entsprechende Methode
  #--------------------------------------------------------------------------
  def hk_schatzsucher_aendern(id, radius)
    return true if $hk_schatzsucher == nil
    $hk_schatzsucher.schatzsucher_aendern(id, radius)
    return true
  end
  #--------------------------------------------------------------------------
  # * Schatz Ändern(id, aktiv) => Ruft entsprechende Methode
  #--------------------------------------------------------------------------
  def hk_schatz_aendern(id, aktiv)
    return true if $hk_schatzsucher == nil
    $hk_schatzsucher.schatz_aendern(id, aktiv)
    return true
  end
 #--------------------------------------------------------------------------
 # * Suchevent anhand des Namens finden
 #--------------------------------------------------------------------------
  def josey_get_eventid(name)
      $game_map.events.each {|id, event|
        a = $game_map.map.events[id].name.downcase
        return id if a.include?(name.downcase)
      }
      return @event_id
    end
end
highlight to read


Danke :3
Josey has attached the following image:
  • Error.png
Notfalldiscord: Hier klicken


  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-half: :star-empty: :star-empty: :star-empty: :star-empty:
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

This post has been edited 1 times, last edit by "Josey" (May 18th 2015, 6:58am)


Josey

Storyteller

  • "Josey" started this thread

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Send private message

8

Tuesday, January 3rd 2017, 12:02pm

Mittwoch, 3. Juni 2015, 13:47
Coconut? o.ò
Sind wir... fertig? ._. *wenn ja, hab ichs nicht mitbekommen*


*schiebschieb* Ein Monat ist rum :D / Und wieder XD
...? o.ò Ich halte den mal oben, falls Coconut wiederkommt.

*push*

Um zu zeigen, dass ich noch Interesse habe :3
push

Nach wie vor aktuell! :3
Notfalldiscord: Hier klicken


  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-half: :star-empty: :star-empty: :star-empty: :star-empty:
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

This post has been edited 6 times, last edit by "Josey" (Jan 3rd 2017, 12:02pm)


Josey

Storyteller

  • "Josey" started this thread

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Send private message

9

Sunday, June 4th 2017, 10:14pm

Woah XD
Mit meinen neuen Skills, hab ich hingekriegt, dass das Script wenigstens nicht mehr abstürzt XD
Es ist aktiv, wenn Switch 10 ON ist- aber es funktioniert noch nicht ganz, wie es soll.
Spoiler
Der Schatzsucher läuft aktuell nur auf das Event drauf, triggert es aber nicht. Kann mir einer sagen, wieso?

Dann ist mir aufgefallen, dass der Schatzsucher natürlich weiterhin zu einem Schatz laufen würde, auch, wenn der getriggert ist. Kann ich das irgendwie verhindern? Zum Beispiel abfragen, ob das Event SelfSwitch A ON ist, dann darf es das Schatzevent nicht mehr beachten?
So in etwa?

Ruby Source code

1
if $game_self_switches[[$game_map.map_id,id,'A']] == false

Wo genau müsste das hin? Um "schatzsucher.move_toward_event(schatz.id)"? :3

Funktioniert tatsächlich XD°
highlight to read


Ich mach jetzt eins nach dem anderen- wenn ich das mit dem Triggern hinbekommen habe, kommt das Pathfinding dran >_>

Das Event löst durch den Schatzsucher aus, wenn ich es auf Through stelle!
Allerdings habe ich jetzt noch folgendes Problem: Wenn zwei Schätze nebeneinander liegen, lößt er eins aus und beginnt dann panisch hin und her zu rennen, während er es auslößt. Dann findet er den zweiten danach nicht mehr. Selbst, wenn ich alle Switches wieder ON stelle (was ich innerhalb eines Schatz-Events beim Auslösen tue), müsste er doch gleich danach das zweite Schatz-Event finden und dort auch hinlaufen?
Wenn ich mit dem Schatzsucher weggehe und nochmal hingehe, stackt er manchmal auch einfach. :<

Weitere Bugs:
- Wenn ich am Schatz vorbeilaufe, statt kurz anzuhalten, findet der Schatzsucher den Schatz nicht- liegt das am Partyfollow? Müsste ich das irgendwo anders ausstellen?
- Während der Schatzsucher vor Freude hüpft (mit Set move route) kann ich den Player nicht mehr bewegen (obwohl dieses Hüpf-Event auf PP steht)

Wer Bock hat und das Testspiel braucht- bescheidsagen, ich schicke meine Scriptsammlung per PN (ist etwas größer weil RGSS3 und alles ineinander verschachtelt ist- auf 31MB runtergebrochen XD). Ansonsten freue ich mich auch über Hilfe und Erklärungen :3

*überfordert* Q______Q


Spoiler

Ruby Source code

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
=begin
 
Editiert: Hüpfende Kokusnus hat mit mir in meinem Threadt daran ein paar Edits 
gemacht (siehe dort)
 
Problem: Da fehlt noch einiges D:
Es läuft nicht.
=end
 
#==============================================================================
# ** Schatzsucher Skript
#------------------------------------------------------------------------------
#    by Hüpfende Kokosnuss || Jumping Coconut
#    v 1.1
#    10. Januar 2009
#    Erstellt für den Schatzsucher-Minicontest auf http://www.rpg-studio.de
#    This Script does not have an english explanation, sorry.
#------------------------------------------------------------------------------
#
#                                BENUTZUNG:
#                                ==========
#
#  Das Skript ermöglicht es, bestimmte Events zu Schatzsuchern und andere zu
#  Schätzen zu machen.
#  Schatzsucher werden dem Spieler innerhalb eines Radius (einstellbar) folgen, 
#  doch wenn sie einen Schatz (Event) sehen, dann werden Sie dort hin laufen, 
#  und das Event auszulösen (wenn sie es berühren).
#
#  Um ein Event zu einem Schatz zu machen, reicht es, wenn das Event folgenden,
#  jetzt festlegbaren Wert im Namen hat:
#
  $hk_schatzsucher_eventname = "[SPARKLE]"
#  
#  Der Standard ist "Schatz". Das Wort ist frei definierbar.
#
#  Außerdem kann man auch im nachhinein noch ein Event zum Schatz-Event machen,
#  oder ein Schatz-Event wieder zu einem normalen Event machen:
#  
#  hk_schatz_aendern(Event-ID, Aktiv)
#
#  Dieser Befehl muss im Callscript abgesetzt werden. Für "Event-ID" die ID des
#  Events einsetzen, um das es sich handelt. Für "Aktiv" entweder true oder false
#  angeben. True wird das Event zum Schatz-Event machen, False wird es wieder 
#  zum normalen Event machen.
#  
#  Um ein Event zu einem Schatzsucher zu machen, folgendes Callscript verwenden:
#
#  hk_schatzsucher_aendern(Event-ID, Radius)
#
#  Für "Event-ID" wieder die ID des Events eingeben, um das es sich handelt. 
#  Für "Radius" eine Zahl eingeben. So viele Tiles wird das Event nach allen
#  Richtungen suchen, ob es den Spieler oder einen Schatz findet.
#  Wird als Radius 0 eingegeben, so wird das Schatzsucher-Event wieder zu einem
#  normalen Event gemacht.
#
#  Die Callscripts müssen natürlich NICHT parrallel ausgeführt werdne, einmal 
#  reicht!
#
#  Seit Version 1.1 kann man genauer einstellen, wie / ob die Schatzsucher dem 
#  Spieler folgen. 
#  Ist die folgende Variable true, so folgt der Schatzsucher dem Spieler immer.
#  Ist sie false, so folgt er dem Spieler nur, wenn sich der Spieler im Radius
#  des Schatzsuchers befindet.
#
  $hk_schatzsucher_immerfolgen = true
#
#  Viel Spaß wünscht euch euer Hüpfende Kokosnuss ^^
#  Das Skript ist für Mustamakkara bzw seinen Mini-Contest gemacht.
#------------------------------------------------------------------------------
 
#==============================================================================
# ** HK_Schatzsucher
#------------------------------------------------------------------------------
#  Neue Class für Schatzsucher-Bewegungen und Berechnungen
#==============================================================================
 
class HK_Schatzsucher
  #--------------------------------------------------------------------------
  # * initialize(schaetze) => Array mit Eventids, wird von Game Map übergeben
  #--------------------------------------------------------------------------
  def initialize(schaetze)
    @schaetze = []
    @schatzsucher = []
    @schaetze = schaetze
  end
  #--------------------------------------------------------------------------
  # * Schatzsucher Ändern (id, radius) => Ändert die Schatzsucher-Liste 
  #--------------------------------------------------------------------------
  def schatzsucher_aendern(id, radius)
    @schatzsucher.each do |i|
      @schatzsucher.delete(i) if i[0] == id
    end
    @schatzsucher << [id, radius] if radius > 0
  end
  #--------------------------------------------------------------------------
  # * Schatz Ändern (id, aktiv) => Macht ein Event zum Schatz bzw inaktiv
  #--------------------------------------------------------------------------
  def schatz_aendern(id, aktiv)
    @schaetze.delete(id)
    @schaetze << id if aktiv
  end
  #--------------------------------------------------------------------------
  # * Schatzsucher hat Schatz(Schatzsucher, Schatz)
  # => Könnte der Schatzsucher das Schatzevent antriggern?
  #--------------------------------------------------------------------------
  def schatzsucher_hat_schatz?(schatzsucher, schatz)
    if schatzsucher.through or schatz.through
      # Wenn Through, erst auslösen wenn sie auf selben Tile sind
      return true if schatzsucher.x == schatz.x and schatzsucher.y == schatz.y
    else
      # Ansonsten muss der Schatzsucher den Schatz anschauen und vor ihm stehen
      new_x = schatzsucher.x + (schatzsucher.direction == 6 ? 1 : schatzsucher.direction == 4 ? -1 : 0)
      new_y = schatzsucher.y + (schatzsucher.direction == 2 ? 1 : schatzsucher.direction == 8 ? -1 : 0)
      return true if schatz.x == new_x and schatz.y == new_y
    end
  return false
  end
  #--------------------------------------------------------------------------
  # * update => Hier wird geprüft, ob die Schatzsucher was gefunden haben
  #--------------------------------------------------------------------------
  def update
    # Kennzeichen, um einen Schatzsucher pro Durchlauf nur einmal zu bewegen
    schatzsucher_bereits_bewegt = false
    # Schleife, für jeden Schatzsucher einzeln ausführen...
    @schatzsucher.each do |i|
      # i hat an der Stelle 0 die ID des Schatzsuchers, an Stelle 1 den Radius
      schatzsucher = $game_map.events[i[0]]
      radius = i[1]
      # Schleife, für jeden Schatz einzeln ausführen...
      @schaetze.each do |schatz|
        schatz = $game_map.events[schatz]
        # Wenn Schatzsucher einen Schatz erspäht hat
        if ((schatzsucher.x - schatz.x).abs <= radius and
           (schatzsucher.y - schatz.y).abs <= radius)
           # Wenn der Schatzsucher auch noch direkt vor / auf dem Schatz steht
          if schatzsucher_hat_schatz?(schatzsucher, schatz)
            # Schatzevent ausführen
            unless ($game_system.map_interpreter.running? or
                  schatzsucher.moving?)
              schatz.start
            end
          else
            # Ansonsten muss Schatzsucher auf den Schatz in Reichweite zulaufen
            unless (schatzsucher.moving? or schatzsucher.move_route_forcing or
                  schatzsucher_bereits_bewegt)
              if $game_self_switches[[$game_map.map_id,schatz.id,'A']] == false && $game_self_switches[[$game_map.map_id,schatz.id,'B']] == false    
              schatzsucher.move_toward_event(schatz.id)
              #Switche aus
              $game_switches[416] = true # Haustier hat Schatz gefunden
              $game_switches[157] = false # run
              $game_switches[257] = false # follow
              $game_switches[398] = false # random
              $game_switches[400] = false # frei
              	p "Tierrasse = #{$game_switches[416]}"
              end
#              $game_switches[417] = true # zwischenswitch, damit Animation startet
              # Kennzeichen setzen, damit er sich nicht noch einmal bewegt
              schatzsucher_bereits_bewegt = true
            end#unless
          end#if hat schatz?
        end#if .x
      end#do    
#      # Wenn der Schatzsucher den Spieler erspäht hat oder so eingestellt ist,
#      # dass er dem Spieler sowieso folgen muss
#      if ((schatzsucher.x - $game_player.x).abs <= radius and
#           (schatzsucher.y - $game_player.y).abs <= radius) or 
#           $hk_schatzsucher_immerfolgen
#        # Und der Schatzsucher in diesem Update noch nicht bewegt wurde
#        unless (schatzsucher.moving? or schatzsucher.move_route_forcing or
#               schatzsucher_bereits_bewegt)
#          # Dann zum Spieler laufen
#          schatzsucher.move_toward_player
#        end
#      end
      # Jetzt kommt der nächste Schatzsucher (Schleife), Kennzeichen auf false
      schatzsucher_bereits_bewegt = false
    end #do
  end#def update
end#class
 
 
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
#  Mapnamen verfügbar machen, beim Map Setup die Events mit entsprechenden
#  Namen der Schatzliste hinzufügen, indem die Class gerufen wird.
#==============================================================================
 
class Game_Map
  attr_accessor :map # Für Zugriff auf Eventnamen
  alias hk_schatzsucher_setup setup
  alias hk_schatzsucher_update update
 
  #--------------------------------------------------------------------------
  # * Setup (map_id) => Hier wird u.a. die Class HK_Schatzsucher aufgerufen
  #--------------------------------------------------------------------------
  def setup(map_id)
    hk_schatzsucher_setup(map_id)
    # Temporärer Array, nur für Übergabe wichtig
    schaetze = []
    # Eventnamen scannen, enstprechende Events in den zu überweisenden Array geben
    $game_map.events.each {|id, event|
      a = $game_map.map.events[id].name.downcase
      schaetze << id if a.include?($hk_schatzsucher_eventname.downcase)
    }
    # HK_Schatzsucher aufrufen (Schatzevent-IDs übergeben)
    $hk_schatzsucher = HK_Schatzsucher.new(schaetze)
  end
  #--------------------------------------------------------------------------
  # * Frame update => Die Class HK_Schatzsucher mit updaten
  #--------------------------------------------------------------------------
  def update
    hk_schatzsucher_update
        # Schalter nummero eins abfragen, Schatzsuche aktiv?
    if $game_switches[415] == true # kann das Haustier Schatzsuche?
      # tut es bereits etwas anderes?
      if $game_switches[402] == false # Sitz
        if $game_switches[406] == false # flieg
          if $game_switches[408] == false # fliegsteh
            if $game_switches[409] == false # such
              if $game_switches[410] == false # spaß
                if $game_switches[411] == false # fun
                  if $game_switches[412] == false # gefunden
                    if $game_switches[413] == false # freiwillig suche
    $hk_schatzsucher.update if $hk_schatzsucher != nil
                    end
                  end
                end
              end
            end
          end
        end
      end
    end
  end#def
 
end #class 
 
#==============================================================================
# ** Game_Character
#------------------------------------------------------------------------------
#  Die neue Methode move_toward_event einbinden.
#==============================================================================
 
class Game_Character
  #--------------------------------------------------------------------------
  # * Move Toward Event (Event ID) => Schritt Richtung enstprechendes Event
  #--------------------------------------------------------------------------
  def move_toward_event(id)
    # Abstand zwischen Character und Event
    sx = @x - $game_map.events[id].x
    sy = @y - $game_map.events[id].y
    if sx == 0 and sy == 0
      return
    end
    abs_sx = sx.abs
    abs_sy = sy.abs
    # Wenn Event sowohl auf X- als auch auf Y-Achse gleich weit entfernt => Zufall
    if abs_sx == abs_sy
      rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
    end
    # In jeweilige Richtung bewegen
    if abs_sx > abs_sy
      sx > 0 ? move_left : move_right
      if not moving? and sy != 0
        sy > 0 ? move_up : move_down
      end
    else
      sy > 0 ? move_up : move_down
      if not moving? and sx != 0
        sx > 0 ? move_left : move_right
      end
    end
  end #def
end#class
 
 
#==============================================================================
# ** Interpreter
#------------------------------------------------------------------------------
#  Die 2 Methoden per Callscript und mit hk-Zusatz verfügbar machen.
#==============================================================================
 
class Interpreter
  #--------------------------------------------------------------------------
  # * Schatzsucher Ändern(id, radius) => Ruft entsprechende Methode
  #--------------------------------------------------------------------------
  def hk_schatzsucher_aendern(id, radius)
    return true if $hk_schatzsucher == nil
    $hk_schatzsucher.schatzsucher_aendern(id, radius)
    return true
  end
  #--------------------------------------------------------------------------
  # * Schatz Ändern(id, aktiv) => Ruft entsprechende Methode
  #--------------------------------------------------------------------------
  def hk_schatz_aendern(id, aktiv)
    return true if $hk_schatzsucher == nil
    $hk_schatzsucher.schatz_aendern(id, aktiv)
    return true
  end
 
 #--------------------------------------------------------------------------
 # * Suchevent anhand des Namens finden
 #--------------------------------------------------------------------------
  def josey_get_eventid(name)
      $game_map.events.each {|id, event|
        a = $game_map.map.events[id].name.downcase
        return id if a.include?(name.downcase)
      }
      return @event_id
  end
 
 
end  #class
highlight to read



Edit Fast einen Monat nach meinem Durchbruch, bin ich noch nicht weitergekommen XD
Deswegen schupps ich das mal und guck mal, ob wer weiterhelfen kann :D
Mich würde es übrigens auch nicht stören, wenn der Schatzsucher erst zu einem Event geht und dann zum Player und dann erst hzu einem anderen, von mir aus muss er nicht erst alle abklappern :3

Coconut, ich wünschte, du kämst online XD *ein Monat ist vorbei*
Notfalldiscord: Hier klicken


  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-half: :star-empty: :star-empty: :star-empty: :star-empty:
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

This post has been edited 5 times, last edit by "Josey" (Jun 4th 2017, 10:14pm)


Playm

RPG Studio Webmaster

  • Send private message

10

Saturday, June 10th 2017, 4:04pm

Triggert er zufällig immer den Schatz mit der kleineren EventID?
Und wenn ein Schatz-Event ausgelöst wird, entfernst Du diesen Schatz dann mit schatz_aendern?

Josey

Storyteller

  • "Josey" started this thread

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Send private message

11

Saturday, June 10th 2017, 9:55pm

Schatzevent:

Spoiler: Seite 1- kein Trigger- Action-Button- steht auf Through
@>Comment: [SPARKLE]
@>Control Self Switch: A = ON
highlight to read

Spoiler: Seite 2- SelfSwitchA- Parallel Process
_@>Show Animation: EV017, [Animation 098]
_@>Wait 10 frames
_@>Set Move Route: EV017
_: ______________: $>Wait: 4 frame(s)
_: ______________: $>Jump: 0, 0
_: ______________: $>Wait: 10 frame(s)
_: ______________: $>Jump: 0, 0
_@>Wait 20 frames
_@>Script: $game_switches[157] = true
_: ______: $game_switches[257] = true
_: ______: $game_switches[398] = true
_: ______: $game_switches[400] = true
_: ______: $game_switches[416] = false
_@>
@>Control Self Switch: B = ON
highlight to read

Und dann eine leere Seite mit SSB. :/

SSA wird auch definitiv aktiviert und wenn ich ein Schatzevent habe, dass weiter weg ist, wird das danach auch wieder erkannt. Aber zwei nebeneinander erkennt es nicht :/
Und ja, immer den mit der kleineren Event-ID.




Alles klar, mit Schatzsuche ändern klappt es, er findet jetzt auch zwei Schätze nebeneinander :D
Danke Playm! :D


->Ist noch das Problem, dass er den Schatz nicht findet, wenn man nicht stehen bleibt und der Player kann sich nicht bewegen, obwohl das Hüpfen auf PP steht (siehe oben Inhalt des Events)

Edit: Vielleicht würd es helfen, die Switche vom Partyfollow irgendwie früher auszuschalten?

$game_switches[157] = false # run
$game_switches[257] = false # follow

Solange ich eine Richtungstaste drücke, hat es das Haustier schwer, Richtugn Event zu laufen und folgt irgendwie weiter dem Player :/
Notfalldiscord: Hier klicken


  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-half: :star-empty: :star-empty: :star-empty: :star-empty:
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

This post has been edited 2 times, last edit by "Josey" (Jun 10th 2017, 9:55pm)


Playm

RPG Studio Webmaster

  • Send private message

12

Sunday, June 11th 2017, 4:49pm

Wie funktioniert das "dem Player folgen"? Mit welchem Skript?
Ich vermute das Event kriegt durchgehend neue MoveRoutes übermittelt und dann sagt das Schatzsucherskript: "Oh, das Event bewegt sich gerade. Dann gebe ich ihm jetzt keine Schatzsucher-Moveroute". Das Event lässt sich einfach nicht ablenken, von so einem kleinen Schatz und hat die höhere Priorität dem Spieler zu folgen. Dass ist das Problem.
Die ganzen Switch-Deaktivierungen ab Zeile 148 passieren ja nur, wenn in Zeile 144 bemerkt wurde, dass das Event gerade stillsteht.

Josey

Storyteller

  • "Josey" started this thread

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Send private message

13

Sunday, June 11th 2017, 7:24pm

Das Player-Folgen läuft über das Moon-Pearl Partyfollow, das aber hier und dort noch modifiziert wurde. Da sind etliche Zusatzfeatures drin, inklusive einem Pathfinding bei erhöhter Distanz, usw.

Dieses Script hier funktioniert vermutlich für sich allein nicht, da gehören ein paar andere dazu, allerdings dürfte das hier der Kern des Systems sein:
Spoiler

Ruby Source code

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
# For each actor #, maximal distance it will keep from player
# (if low, they will always keep very close)
DISTANCE_TOLERANCES = [2, 2, 5, 5, 3, 7, 6, 3, 3]
# ID of variable holding the ID of actor being controlled (change to appoint another actor)
VAR_PARTY_LEADER = 51
# For each actor, ID of switch holding whether he/she is in the party
SW_ACTOR_IN_PARTY = [126, 127, 129, 130, 131, 132, 128, 133, 134]
# For each actor, ID of switch holding whether he/she follows or stays in place
SW_ACTOR_DO_FOLLOWING = [251, 252, 253, 254, 255, 257, 256, 258, 259]
# ID of switch holding whether to auto place party members whenever changing map
SW_AUTOPLACE = 136
# switch ID to switch following on or off (for example, switch it 
# off during cutscenes)
SWITCH_ID_ENABLE_FOLLOWING = 137
# Animation to be played when taking control of a party member (0 for none)
ANIMATION_TAKE_CONTROL = 0
# Distance that is considered big enough for a stuck and starting pathfinder
STUCK_MIN_DISTANCE = 9
CATCHUP_BOOST = 1 #Beispiel
 
class Game_Character
  alias mp_autofollow_catchup_initialize initialize
  def initialize
    mp_autofollow_catchup_initialize
    @catching_up = false
    @before_catchup_move_speed = @move_speed
  end
end
 
class Game_Map
  def get_pm_event_id_by_name(name)
    party_names = []
    for actor in $game_party.actors[0...$game_party.actors.size]
      party_names << actor.name
    end
 
    @party_member_event_ids = []
    # Pass through all events
    for event in @events.values
    # If event name matches a party member
      if party_names.include?(event.name)
        @party_member_event_ids << event.id
      end
    end
 
    for id in @party_member_event_ids
      if @events[id].name == name
        return id
      end
    end
    return 0
  end
end
 
class Game_Character
  attr_accessor :move_speed
  attr_accessor :move_frequency
end
class Game_Character
  attr_accessor :through
end
class Game_Character
  attr_reader :move_route
  attr_accessor :direction
  def distance_from(character)
    return (@x - character.x).abs + (@y - character.y).abs
  end
end
class Game_Event
  alias mp_autofollow_update update
  def update
    mp_autofollow_update
    for i in 0...$data_actors.size - 1
      # If event is an actor
      if $game_switches[SWITCH_ID_ENABLE_FOLLOWING] == true
        if $data_actors[i + 1].name == self.name
          # Überprüfe ob der individuelle Switch On ist
          actor_do_following = SW_ACTOR_DO_FOLLOWING[i]
          if $game_switches[actor_do_following] == true
          # Do nothing if already moving or actor isn't in party
          return if moving? or not $game_switches[SW_ACTOR_IN_PARTY[i]]
          move_route = RPG::MoveRoute.new
          move_route.repeat = false
          move_route.skippable = true
          # If too far from player
          if distance_from($game_player) > DISTANCE_TOLERANCES[i] and distance_from($game_player) < STUCK_MIN_DISTANCE
            # Take a step towards player
            if @catching_up
              @move_speed = @before_catchup_move_speed
              @catching_up = false
            end
            @through = false
            move_route.list[0].code = 10
          elsif distance_from($game_player) < DISTANCE_TOLERANCES[i]
            # Face player
            if @catching_up
              @move_speed = @before_catchup_move_speed
              @catching_up = false
            end
            @through = true
            move_route.list[0].code = 25
          elsif distance_from($game_player) >= STUCK_MIN_DISTANCE
            if not @catching_up
              @before_catchup_move_speed = @move_speed
              @move_speed += CATCHUP_BOOST
              @catching_up = true
            end
            PathFinder.request(self, $game_player, DISTANCE_TOLERANCES[i])
          end
          force_move_route(move_route)
          @move_route_forcing = false
          end
        end
      end 
    end
  end
  def name
    return @event.name
  end
  def restore
    @erased = false
    refresh
  end
end
class Game_Map
  attr_reader :party_events
  attr_reader :event_leader
  attr_reader :event_id_leader
  attr_reader :spriteset_map
  attr_accessor :party_member_event_ids
  alias mp_autofollow_setup setup
  def setup(map_id)
    mp_autofollow_setup(map_id)
    @event_leader = nil
    # Set refresh flag
    @need_refresh = true
    # Build party names array
    party_names = []
    for actor in $game_party.actors[0...$game_party.actors.size]
      party_names << actor.name
    end
    to_place = []
    @party_member_event_ids = []
    # Pass through all events
    for event in @events.values
    # If event name matches a party member
      if party_names.include?(event.name)
        if event.name == $game_party.actors[0].name
          self.event_leader = event
        else
          to_place << event
          @party_member_event_ids << event.id
        end
      end
    end
    #print @party_member_event_ids
    # If auto placement of party members allowed
    if $game_switches[SW_AUTOPLACE]
      return if to_place.empty?
      # Place events
      for a in [0, -1, -2, 1, 2]
        for b in [-1, 1, -2, 2, 0]
          next if a == 0 and b == 0
          x = $game_temp.player_new_x
          y = $game_temp.player_new_y
          case $game_player.direction
            # Down
            when 2
              x += b
              y += a
            # Left
            when 4
              y += b
              x -= a
            # Right
            when 6
              y += b
              x += a
            # Up
            when 8
              x += b
              y -= a
          end
          if (0...self.width).include?(x) and (0...self.height).include?(y)
            if self.passable?(x, y, 0)
              event = to_place.shift
              event.moveto($game_temp.player_new_x, $game_temp.player_new_y)
              event.refresh
              return if to_place.empty?
            end
          end
        end
      end
    end
  end
  def event_leader=(event)
    # If a leader event was previously erased
    if @event_leader
    # Restore event
      @event_leader.restore
    end
    # Store event in memory to restore it later
    @event_leader = event
    # Remove event from the map
    event.erase
  end
  def set_event_leader()
    # event_leader is always the first actor in the party.
 
    party_names = []
    for actor in $game_party.actors[0...$game_party.actors.size]
      party_names << actor.name
    end
    for event in @events.values
    # If event name matches a party member
      if party_names.include?(event.name)
        if event.name == $game_party.actors[0].name
          self.event_leader = event
        end
      end
    end
  end
  alias mp_autofollow_refresh refresh
  def refresh
    # Update party members game switches
    actors = $game_party.actors[1...$game_party.actors.size] || []
    for i in 0...$data_actors.size - 1
      if actors.include?($game_actors[i + 1])
        $game_switches[SW_ACTOR_IN_PARTY[i]] = true
      else
        $game_switches[SW_ACTOR_IN_PARTY[i]] = false
      end
    end
    mp_autofollow_refresh
  end
  def actor_event(actor_id)
    for event in @events.values
      return event if event.name == $data_actors[actor_id].name
    end
    return nil
  end
end
class Spriteset_Map
  def sprite_player
    return @character_sprites.last
  end
end
class Game_Actor
  attr_reader :actor_id
end
class Interpreter
  alias mp_autofollow_command_129 command_129
  # command_129 is Change Party Member
  def command_129
    result = mp_autofollow_command_129
    # Update new leader
    actor_id = $game_party.actors[0].actor_id
    $game_variables[VAR_PARTY_LEADER] = actor_id
    $game_map.set_event_leader()
    appoint_leader(actor_id)
    $game_map.need_refresh = true
    return result
  end
end
def appoint_leader(actor_id)
  #print [$game_party.actors[0].actor_id, actor_id].inspect
  actor = $game_actors[actor_id]
  # Return if actor is already the leader
  if actor == $game_party.actors[0]
    return
  end
  # If actor not present in party, force them inside
  unless $game_party.actors.include?(actor)
    $game_party.actors.unshift(actor)
    $game_party.actors.delete_at($game_party.actors.size - 1)
  end
  # Put event matching the previous leader in place of the player
  #event = $game_map.actor_event($game_party.actors[0].id)
  event = $game_map.event_leader
  event.moveto($game_player.x, $game_player.y)
  event.direction = $game_player.direction
  # Put player in place of the event matching the new leader
  event = $game_map.actor_event(actor_id)
  $game_player.moveto(event.x, event.y)
  $game_player.direction = event.direction
  $game_player.animation_id = ANIMATION_TAKE_CONTROL
  $game_map.event_leader = event
  # Put desired actor at party's first position
  $game_party.add_actor(actor_id)
  $game_party.actors.unshift($game_party.actors.delete(actor))
  $game_player.refresh
  $game_switches[SW_ACTOR_IN_PARTY[actor_id - 1]] = false
  $game_map.need_refresh = true
end
 
$variables_command[VAR_PARTY_LEADER] = Proc.new { |n, o|
  appoint_leader(n)
}
#$variables_init[VAR_PARTY_LEADER] = 1
highlight to read

Der Schatzsucher ist immer der mit den Switches 132 und 257 (oben in den Einstellungen)
Edit 132: Haustier existiert in der Party, 257: Folgen-Switch


Meine Hoffnung ist jetzt, dass ich dort irgendwo reingrätschen kann, damit dort irgendwo geupdatet wird, dass ein Schatz von einem Schatzsucher entdeckt wurde?
Oder kann man dem Schatzsucherscript eine höhere Priorität verschaffen, dass das das Party-Follown schon früher ausgestellt wird? Das Problem ist ja, dass das Schatzsucher-Script nicht greift, wenn die Figur bewegt wurde, wie du schon schreibst >< Könnte man dann in Zeile 144 eine andere Condition verwenden, statt "unless (schatzsucher.moving? or schatzsucher.move_route_forcing or schatzsucher_bereits_bewegt)" oder eine zusätzliche?
Ich glaube, das wird gemacht, damit der Schatzsucher, wenn er einen Schatz findet, konstant erstmal zu diesem geht und erst danach nochmal sucht.
Wie wärs mit sowas? XD

Ruby Source code

1
unless (schatzsucher.moving? or schatzsucher.move_route_forcing or schatzsucher_bereits_bewegt) && $game_switches[x]== true
und der wird true gestellt, sobald ein Schatz gefunden wird? Also, das funktioniert wahrscheinlich so nicht, aber versteht man, was ich meine? :<
Notfalldiscord: Hier klicken


  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-half: :star-empty: :star-empty: :star-empty: :star-empty:
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

This post has been edited 1 times, last edit by "Josey" (Jun 11th 2017, 9:04pm)


Playm

RPG Studio Webmaster

  • Send private message

14

Sunday, June 11th 2017, 8:40pm

Wofür ist $game_switches[257] gut?

Warum hast Du dich denn für das Moon-Pearl Partyfollow entschieden, um den Schatzsucher dir folgen zu lassen und nicht das im Schatzsucherskript enthaltene Folgen benutzt? Der Teil ist im Schatzsucherskript auskommentiert aktuell.

Josey

Storyteller

  • "Josey" started this thread

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Send private message

15

Sunday, June 11th 2017, 9:02pm

Die 257 ist "Haustier follow"- jeder Partyfollower hat einen eigenen Switch, damit ich jedes Partymitglied unabhängig von allen anderen stehen lassen kann. Ist er OFF, bleibt das Haustier stehen. (Oben hab ich Blödsinn geschrieben, ich editiere eben die Switche, welche fürs Haustier sind).

Das Haustier/der Schatzsucher ist ein Partymitglied. Das gute am modifizierten MP-Partyfollow ist, dass die Member bei zu großer Entfernung (sie stecken irgendwo doof fest) in den Pathfinding gehen und den Leader wieder einholen. Da das Haustier/der Schatzsucher nicht fliegt, braucht er das genauso, wie die anderen Partymember :<
Würde ich ihn über das Folgen des Schatzsucherscripts machen, hätte ich das Pathfinding im Notfall nicht :/ Zudem macht das MP-FOllow ja noch die anderen Zusatzsachen- rennen, schleichen, an und ausstellen einzelner Member, usw. Und erschwerend kommt hinzu, dass das Haustier die Schatzsuchereigenschaft erst mit der Zeit erlernt, das Script kann es bis dahin also nicht folgen lassen und der Spieler soll es auch ausschalten können, wenn er nicht will, dass das Haustier ständig herumkriecht.
Notfalldiscord: Hier klicken


  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-half: :star-empty: :star-empty: :star-empty: :star-empty:
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

Josey

Storyteller

  • "Josey" started this thread

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Send private message

16

Friday, September 8th 2017, 11:15am

Probleme hier waren noch:
1.) Wenn ich am Schatz vorbeilaufe, statt kurz anzuhalten, findet der Schatzsucher den Schatz nicht
Scheinbar ist das Partyfollow "stärker" als das Schatzsucher-Event. Dabei müsste es eigentlich gehen, dass das Schatzsucherevent die Switches OFFt (die dafür sorgen, dass der Schatzsucher aktuell dem Player folgt, wenn sie OFF sind, müsste das Event sofort stehen bleiben), sobald der Schatzsucher in die Nähe eines Schatzes kommt. Ich verstehe nicht, wieso das Ausstellen der Switche ignoriert wird :<
Edit: Hab ich selbst gelößt, indem ich meine Switches woanders hab updaten lassen :D (Zeile 136)

2.) Während der Schatzsucher EINEN SCHATZ AKTIVIERT kann ich den Player nicht mehr bewegen
Kapier ich gar nicht, da ist kein "Wait for Moves Comp", sondern normale Waits, die dürften in einem PP-Event kein Stück stören ><
Edit: Das Stocken kommt (glaube ich), wenn der Schatzsucher das Action-Button-Event aktiviert (es hat nix mit dem Jump an sich zu tun). Je weniger in diesem Event drin ist, desto kürzer ist das Stocken, deswegen hab ich alles in ein CE ausgelagert (außer dem hk_schatzsuche_aendern) :/ Aber es ist immer da. Kann man da was gegen das (kurze) Stocken machen?

3.) Ich würd gern noch hinkriegen, dass das Schatzsucherevent nicht mit move towards auf den Schatz zu rennt, sondern mit dem Pathfinding-Befehl dieses Pathfinding-Scripts:
Spoiler

Ruby Source code

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
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# Lagless Path Finder by Blizzard
# Version: 1.01
# Type: Pathfinding System
# Date: 9.2.2013
# Date v1.01: 11.4.2013
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#   
#  This work is protected by the following license:
# #----------------------------------------------------------------------------
# #  
# #  Creative Commons - Attribution-NonCommercial-ShareAlike 3.0 Unported
# #  ( http://creativecommons.org/licenses/by-nc-sa/3.0/ )
# #  
# #  You are free:
# #  
# #  to Share - to copy, distribute and transmit the work
# #  to Remix - to adapt the work
# #  
# #  Under the following conditions:
# #  
# #  Attribution. You must attribute the work in the manner specified by the
# #  author or licensor (but not in any way that suggests that they endorse you
# #  or your use of the work).
# #  
# #  Noncommercial. You may not use this work for commercial purposes.
# #  
# #  Share alike. If you alter, transform, or build upon this work, you may
# #  distribute the resulting work only under the same or similar license to
# #  this one.
# #  
# #  - For any reuse or distribution, you must make clear to others the license
# #    terms of this work. The best way to do this is with a link to this web
# #    page.
# #  
# #  - Any of the above conditions can be waived if you get permission from the
# #    copyright holder.
# #  
# #  - Nothing in this license impairs or restricts the author's moral rights.
# #  
# #----------------------------------------------------------------------------
# 
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# 
# IMPORTANT NOTE:
# 
#   This Path Finder is a derived version of Blizz-ABS's original Path Finder.
#   If you are using Blizz-ABS, please remove this script. Blizz-ABS has a
#   Path Finder already built-in.
# 
# 
# Compatibility:
# 
#   99% compatible with SDK v1.x. 90% compatible with SDK v2.x. May cause
#   incompatibility issues with exotic map systems.
# 
# 
# Features:
# 
#   - calculates path from point A to point B on the map
#   - allows immediate calculation as well as path calculation requests that
#     are done over the course of a few frames in order to reduce lag
#   - supports dynamic calculation that is done every step to ensure the
#     character reaches its targets
#   - can assign other characters as targets so dynamic calculation with a
#     moving will cause the character to find the target regardless of his
#     changed position
# 
# new in v1.01:
#   - fixed attempted optimizations to work properly
# 
# 
# Instructions:
#   
# - Explanation:
#   
#   This script will allow your characters to walk from point A to point B,
#   navigating by themselves, finding the shortest path and all that without
#   you having to manually specify their moving route. They can also navigate
#   through dynamically changing environments or track a dynamically moving
#   target.
# 
# - Configuration:
# 
#   MAX_NODES_PER_FRAME - maximum number of node calculation per frame when
#                         using path requests instead of immediate calculations
#   DIRECTIONS_8_WAY    - if set to true, it will smooth out corner movement
#                         and use a diagonal movement step wherever possible
#                         (this does NOT mean that the path finder will do
#                         8-directional path finding!)
# 
# - Script calls:
# 
#   This path finder offers you several script calls in order to designate path
#   finding to characters on the map. Following script calls are at your
#   disposal:
#   
#     PathFinder.find(C_ID, X, Y)
#     PathFinder.find(C_ID, X, Y, RANGE)
#     PathFinder.find(C_ID, TARGET)
#     PathFinder.find(C_ID, TARGET, RANGE)
#     PathFinder.request(C_ID, X, Y)
#     PathFinder.request(C_ID, X, Y, RANGE)
#     PathFinder.request(C_ID, TARGET)
#     PathFinder.request(C_ID, TARGET, RANGE)
#     PathFinder.dyn_find(C_ID, X, Y)
#     PathFinder.dyn_find(C_ID, X, Y, RANGE)
#     PathFinder.dyn_find(C_ID, TARGET)
#     PathFinder.dyn_find(C_ID, TARGET, RANGE)
#     PathFinder.dyn_request(C_ID, X, Y)
#     PathFinder.dyn_request(C_ID, X, Y, RANGE)
#     PathFinder.dyn_request(C_ID, TARGET)
#     PathFinder.dyn_request(C_ID, TARGET, RANGE)
# 
#   C_ID   - either an event ID, 0 for the player character or an actual
#            character (e.g. $game_map.events[ID])
#   X      - X target coordinate
#   Y      - Y target coordinate
#   RANGE  - range within which the target should be located (greater than 0)
#   TARGET - an actual target character
#   
#   This is how the 4 different script calls behave:
#   
#   - The "find" variants always calculate the path immediately.
#   - The "request" variants always request a path calculation to be done over
#     the course of several frames in order to avoid lag. Requesting paths for
#     multiple characters will cause the calculation to take longer as each
#     frame only a certain number of nodes is calculated (can be configured).
#     So if there are more characters requesting a path, naturally each one
#     will consume a part of the allowed node calculations every frame.
#   - The "dyn" variants (dynamic) will recalculate/request a calculation every
#     step in order to keep a path up to date with an ever-changing
#     environment. You won't need to use these calls if there are no moving
#     events on the map or if there are no environmental passability changes.
#   - When using a "dyn" variant, if actual coordinates (X, Y) are used, the
#     character will find its path to these fixed coordinates. If an actual
#     target character is being used, the path finder will track the character
#     instead of fixed coordinates. If the character changes its position, the
#     path calculation will attempt to find a path to the new position of the
#     target.
#   - Using "dyn_find" a lot, with many characters at the same time and/or for
#     long paths may cause performance issue and lag. Use it wisely.
#   - Using "dyn_request" is much more performance-friendly, but it will also
#     cause characters to "stop and think". This can also cause problems in a
#     constantly changing environment as the environment may change during the
#     few frames while the calculation is being done. Use it wisely.
#   
#   In order to cancel dynamic path calculation for a character, use following
#   script call:
#   
#     character.clear_path_target
#   
#   Example:
#     
#     $game_map.events[23].clear_path_target
#   
#   In order to check if a character has a dynamic path calculation for a
#   target, use following script call:
#   
#     character.has_path_target?
#   
#   Example:
#     
#     if $game_map.events[23].has_path_target?
#   
# 
# Notes:
# 
#   - This path finder is an implementation fo the A* Search Algorithm.
#   - The PathFinder module is being updated during the call of $game_system.update.
#     Keep this in mind if you are using specific exotic scripts.
# 
# 
# If you find any bugs, please report them here:
# http://forum.chaos-project.com
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
 
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# START Configuration
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
module BlizzCFG
 
  MAX_NODES_PER_FRAME = 100
  DIRECTIONS_8_WAY = false
 
end
 
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# END Configuration
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
$lagless_path_finder = 1.01
 
#==============================================================================
# module PathFinder
#==============================================================================
 
module Math
 
  def self.hypot_squared(x, y)
    return (x * x + y * y)
  end
 
end
 
#==============================================================================
# module PathFinder
#==============================================================================
 
module PathFinder
 
  PATH_DIRS = [[0, 1, 2], [-1, 0, 4], [1, 0, 6], [0, -1, 8]]
  DIR_DOWN_LEFT = [2, 4]
  DIR_LEFT_DOWN = [4, 2]
  DIR_DOWN_RIGHT = [2, 6]
  DIR_RIGHT_DOWN = [6, 2]
  DIR_LEFT_UP = [4, 8]
  DIR_UP_LEFT = [8, 4]
  DIR_RIGHT_UP = [6, 8]
  DIR_UP_RIGHT = [8, 6]
  DIR_OFFSETS = [[0, 0], [-1, 1], [0, 1], [1, 1], [-1, 0], [0, 0], [1, 0],
                [-1, -1], [0, -1], [1, -1]]
 
  @requests = {}
 
  def self.clear
    @requests = {}
  end
 
  def self.find(char, x, y = nil, range = 0)
    char, x, y, range = self.check_args(char, x, y, range)
    self._find(char, x, y, range, false)
    return true
  end
 
  def self.dyn_find(char, x, y = nil, range = 0)
    tx, ty = x, y
    char, x, y, range = self.check_args(char, x, y, range)
    self._find(char, x, y, range, true)
    char.set_path_target(tx, ty, range, true)
    return true
  end
 
  def self.request(char, x, y = nil, range = 0)
    char, x, y, range = self.check_args(char, x, y, range)
    self._request(char, x, y, range, false)
    return true
  end
 
  def self.dyn_request(char, x, y = nil, range = 0)
    tx, ty = x, y
    char, x, y, range = self.check_args(char, x, y, range)
    self._request(char, x, y, range, true)
    char.set_path_target(tx, ty, range, false)
    return true
  end
 
  def self.check_args(char, x, y, range)
    if x.is_a?(Game_Character)
      range = (y != nil ? y : 0)
      y = x.y
      x = x.x
    end
    range = 0 if range < 0
    if char.is_a?(Numeric)
      char = (char > 0 ? $game_map.events[char] : $game_player)
    end
    p "Warning! Character to move does not exist!" if $DEBUG && char == nil
    return [char, x, y, range]
  end
 
  def self._find(char, x, y, range, dynamic)
    @requests[char] = PathRequest.new(char.x, char.y, x, y, range, dynamic)
    result = nil
    result = self.calc_node(char) while result == nil
    @requests.delete(char)
    if $DEBUG && result == []
      p "Warning! Path Finder could not find path for character at (#{x},#{y})!"
    end
    char.set_found_path(result)
  end
 
  def self._request(char, x, y, range, dynamic)
    if @requests[char] == nil
      @requests[char] = PathRequest.new(char.x, char.y, x, y, range, dynamic)
    end
  end
 
  def self.update
    @requests = {} if @requests == nil
    characters = @requests.keys
    count = BlizzCFG::MAX_NODES_PER_FRAME
    while characters.size > 0 && count > 0
      char = characters.shift
      result = self.calc_node(char)
      result != nil ? char.set_found_path(result) : characters.push(char)
      count -= 1
    end
  end
 
  def self.calc_node(char)
    request = @requests[char]
    if request.open.size == 0
      @requests.delete(char)
      return []
    end
    found = false
    key = request.open.keys.min {|a, b|
        a[2] > b[2] ? 1 : (a[2] < b[2] ? -1 :
        (Math.hypot_squared(a[0] - request.tx, a[1] - request.ty) <=>
        Math.hypot_squared(b[0] - request.tx, b[1] - request.ty)))}
    request.closed[key[0], key[1]] = request.open[key]
    request.open.delete(key)
    kx, ky = 0, 0
    passable = false
    passable_checked = false
    PATH_DIRS.each {|dir|
        kx, ky = key[0] + dir[0], key[1] + dir[1]
        passable = false
        passable_checked = false
        if (kx - request.tx).abs + (ky - request.ty).abs <= request.range
          passable = char.passable?(key[0], key[1], dir[2])
          passable_checked = true
          if passable
            request.closed[kx, ky] = dir[2]
            found = true
            break
          end
        end
        if request.closed[kx, ky] == 0
          passable = char.passable?(key[0], key[1], dir[2]) if !passable_checked
          if passable
            request.open[[kx, ky, key[2] + 1]] = dir[2]
          end
        end}
    return nil if !found
    result = request.backtrack(kx, ky)
    @requests.delete(char)
    return result
  end
 
end
 
#==============================================================================
# PathRequest
#==============================================================================
 
class PathRequest
 
  attr_reader :open
  attr_reader :closed
  attr_reader :sx
  attr_reader :sy
  attr_reader :tx
  attr_reader :ty
  attr_reader :range
  attr_reader :dynamic
 
  def initialize(ox, oy, tx, ty, range, dynamic = false)
    @sx, @sy, @tx, @ty, @range, @dynamic = ox, oy, tx, ty, range, dynamic
    @open = {[@sx, @sy, 0] => -1}
    @closed = Table.new($game_map.width, $game_map.height)
  end
 
  def backtrack(tx, ty)
    cx, cy, x, y, result = tx, ty, 0, 0, []
    loop do
      cx, cy = cx - x, cy - y
      break if cx == @sx && cy == @sy
      result.unshift(@closed[cx, cy])
      x, y = PathFinder::DIR_OFFSETS[@closed[cx, cy]]
    end
    return self.modify_8_way(result)
  end
 
  def modify_8_way(result)
    if BlizzCFG::DIRECTIONS_8_WAY
      result.each_index {|i|
          if result[i] != nil && result[i + 1] != nil
            case [result[i], result[i + 1]]
            when PathFinder::DIR_DOWN_LEFT, PathFinder::DIR_LEFT_DOWN
              result[i], result[i + 1] = 1, nil
            when PathFinder::DIR_DOWN_RIGHT, PathFinder::DIR_RIGHT_DOWN
              result[i], result[i + 1] = 3, nil
            when PathFinder::DIR_LEFT_UP, PathFinder::DIR_UP_LEFT
              result[i], result[i + 1] = 7, nil
            when PathFinder::DIR_RIGHT_UP, PathFinder::DIR_UP_RIGHT
              result[i], result[i + 1] = 9, nil
            end
          end}
      result.compact!
    end
    return result
  end
 
end
 
#==============================================================================
# Game_System
#==============================================================================
 
class Game_System
 
  alias update_lagless_path_finder_later update
  def update
    PathFinder.update
    update_lagless_path_finder_later
  end
 
end
 
#==============================================================================
# Game_Map
#==============================================================================
 
class Game_Map
 
  alias setup_lagless_path_finder_later setup
  def setup(map_id)
    PathFinder.clear
    setup_lagless_path_finder_later(map_id)
  end
 
end
 
#==============================================================================
# Game_Character
#==============================================================================
 
class Game_Character
 
  def set_path_target(x, y, range, immediate)
    @path_x, @path_y, @path_range, @path_immediate = x, y, range, immediate
  end
 
  def clear_path_target
    @path_x, @path_y, @path_range, @path_immediate = nil, nil, nil, nil
  end
 
  def has_path_target?
    return (@path_x != nil)
  end
 
  def set_found_path(path)
    return if path.size == 0
    route = RPG::MoveRoute.new
    route.repeat = false
    # each move command code equals direction / 2
    path.reverse.each {|dir| route.list.unshift(RPG::MoveCommand.new(dir / 2))}
    self.force_move_route(route)
  end
 
  alias update_move_lagless_path_finder_later update_move
  def update_move
    update_move_lagless_path_finder_later
    return if self.moving? || !self.has_path_target?
    x, y = @path_x, @path_y
    x, y = @path_x.x, @path_x.y if @path_x.is_a?(Game_Character)
    if @x == x && @y == y
      #p @x, x, @y, y
      #p @path_x
      self.clear_path_target
    elsif @path_immediate
      PathFinder.dyn_find(self, @path_x, @path_y, @path_range)
    else
      PathFinder.dyn_request(self, @path_x, @path_y, @path_range)
    end
  end
 
end
highlight to read

Aus irgendeinem Grund krieg ichs nicht gebacken -_-
Edit: Welchen Scriptbefehl müsste ich eintragen und wo? Das müsste doch eigentlich ganz leicht austauschbar sein :/

Eine Demo liegt bereit, wird aber nur per PN versendet, weil da ein Haufen Scripte bei sind, die noch nicht öffentlich werden sollen :<
Allerdings ist hier das Script, wie ich es gerade verwende:
Spoiler

Ruby Source code

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
#==============================================================================
# ** Schatzsucher Skript
#------------------------------------------------------------------------------
#    by Hüpfende Kokosnuss || Jumping Coconut
#    v 1.1
#    10. Januar 2009
#    Erstellt für den Schatzsucher-Minicontest auf http://www.rpg-studio.de
#    This Script does not have an english explanation, sorry.
#------------------------------------------------------------------------------
#
#                                BENUTZUNG:
#                                ==========
#
#  Das Skript ermöglicht es, bestimmte Events zu Schatzsuchern und andere zu
#  Schätzen zu machen.
#  Schatzsucher werden dem Spieler innerhalb eines Radius (einstellbar) folgen, 
#  doch wenn sie einen Schatz (Event) sehen, dann werden Sie dort hin laufen, 
#  und das Event auszulösen (wenn sie es berühren).
#
#  Um ein Event zu einem Schatz zu machen, reicht es, wenn das Event folgenden,
#  jetzt festlegbaren Wert im Namen hat:
#
  $hk_schatzsucher_eventname = "[SPARKLE]"
#  
#  Der Standard ist "Schatz". Das Wort ist frei definierbar.
#
#  Außerdem kann man auch im nachhinein noch ein Event zum Schatz-Event machen,
#  oder ein Schatz-Event wieder zu einem normalen Event machen:
#  
#  hk_schatz_aendern(Event-ID, Aktiv)
#
#  Dieser Befehl muss im Callscript abgesetzt werden. Für "Event-ID" die ID des
#  Events einsetzen, um das es sich handelt. Für "Aktiv" entweder true oder false
#  angeben. True wird das Event zum Schatz-Event machen, False wird es wieder 
#  zum normalen Event machen.
#  
#  Um ein Event zu einem Schatzsucher zu machen, folgendes Callscript verwenden:
#
#  hk_schatzsucher_aendern(Event-ID, Radius)
#
#  Für "Event-ID" wieder die ID des Events eingeben, um das es sich handelt. 
#  Für "Radius" eine Zahl eingeben. So viele Tiles wird das Event nach allen
#  Richtungen suchen, ob es den Spieler oder einen Schatz findet.
#  Wird als Radius 0 eingegeben, so wird das Schatzsucher-Event wieder zu einem
#  normalen Event gemacht.
#
#  Die Callscripts müssen natürlich NICHT parrallel ausgeführt werdne, einmal 
#  reicht!
#
#  Seit Version 1.1 kann man genauer einstellen, wie / ob die Schatzsucher dem 
#  Spieler folgen. 
#  Ist die folgende Variable true, so folgt der Schatzsucher dem Spieler immer.
#  Ist sie false, so folgt er dem Spieler nur, wenn sich der Spieler im Radius
#  des Schatzsuchers befindet.
#
#  $hk_schatzsucher_immerfolgen = true
#
#  Viel Spaß wünscht euch euer Hüpfende Kokosnuss ^^
#  Das Skript ist für Mustamakkara bzw seinen Mini-Contest gemacht.
#------------------------------------------------------------------------------
 
#==============================================================================
# ** HK_Schatzsucher
#------------------------------------------------------------------------------
#  Neue Class für Schatzsucher-Bewegungen und Berechnungen
#==============================================================================
 
class HK_Schatzsucher
  #--------------------------------------------------------------------------
  # * initialize(schaetze) => Array mit Eventids, wird von Game Map übergeben
  #--------------------------------------------------------------------------
  def initialize(schaetze)
    @schaetze = []
    @schatzsucher = []
    @schaetze = schaetze
  end
  #--------------------------------------------------------------------------
  # * Schatzsucher Ändern (id, radius) => Ändert die Schatzsucher-Liste 
  #--------------------------------------------------------------------------
  def schatzsucher_aendern(id, radius)
    @schatzsucher.each do |i|
      @schatzsucher.delete(i) if i[0] == id
    end
    @schatzsucher << [id, radius] if radius > 0
  end
  #--------------------------------------------------------------------------
  # * Schatz Ändern (id, aktiv) => Macht ein Event zum Schatz bzw inaktiv
  #--------------------------------------------------------------------------
  def schatz_aendern(id, aktiv)
    @schaetze.delete(id)
    @schaetze << id if aktiv
  end
  #--------------------------------------------------------------------------
  # * Schatzsucher hat Schatz(Schatzsucher, Schatz)
  # => Könnte der Schatzsucher das Schatzevent antriggern?
  #--------------------------------------------------------------------------
  def schatzsucher_hat_schatz?(schatzsucher, schatz)
    if schatzsucher.through or schatz.through
      # Wenn Through, erst auslösen wenn sie auf selben Tile sind
      return true if schatzsucher.x == schatz.x and schatzsucher.y == schatz.y
    else
      # Ansonsten muss der Schatzsucher den Schatz anschauen und vor ihm stehen
      new_x = schatzsucher.x + (schatzsucher.direction == 6 ? 1 : schatzsucher.direction == 4 ? -1 : 0)
      new_y = schatzsucher.y + (schatzsucher.direction == 2 ? 1 : schatzsucher.direction == 8 ? -1 : 0)
      return true if schatz.x == new_x and schatz.y == new_y
    end
  return false
  end
  #--------------------------------------------------------------------------
  # * update => Hier wird geprüft, ob die Schatzsucher was gefunden haben
  #--------------------------------------------------------------------------
  def update
    # Kennzeichen, um einen Schatzsucher pro Durchlauf nur einmal zu bewegen
    schatzsucher_bereits_bewegt = false
    # Schleife, für jeden Schatzsucher einzeln ausführen...
    @schatzsucher.each do |i|
      # i hat an der Stelle 0 die ID des Schatzsuchers, an Stelle 1 den Radius
      schatzsucher = $game_map.events[i[0]]
      radius = i[1]
      # Schleife, für jeden Schatz einzeln ausführen...
      @schaetze.each do |schatz|
        schatz = $game_map.events[schatz]
        # Wenn Schatzsucher einen Schatz erspäht hat
        if ((schatzsucher.x - schatz.x).abs <= radius and
           (schatzsucher.y - schatz.y).abs <= radius)
           # Wenn der Schatzsucher auch noch direkt vor / auf dem Schatz steht
              $game_switches[157] = false # run
              $game_switches[257] = false # follow
              $game_switches[398] = false # random
              $game_switches[400] = false # frei
 
if $game_switches[416] == false
#id= $game_map.get_pm_event_id_by_name('Haustier')
#inp=$game_system.map_interpreter
#inp.show_ani(id,97)
$game_switches[416] = true
end
            if schatzsucher_hat_schatz?(schatzsucher, schatz)
            # Schatzevent ausführen
            unless ($game_system.map_interpreter.running? or
                  schatzsucher.moving?)
              schatz.start
            end
          else
            # Ansonsten muss Schatzsucher auf den Schatz in Reichweite zulaufen
            unless (schatzsucher.moving? or schatzsucher.move_route_forcing or
                  schatzsucher_bereits_bewegt)
              if $game_self_switches[[$game_map.map_id,schatz.id,'A']] == false && $game_self_switches[[$game_map.map_id,schatz.id,'B']] == false    
              schatzsucher.move_toward_event(schatz.id)
              #Switche aus
              $game_switches[157] = false # run
              $game_switches[257] = false # follow
              $game_switches[398] = false # random
              $game_switches[400] = false # frei
if $game_switches[416] == false
#id= $game_map.get_pm_event_id_by_name('Haustier')
#inp=$game_system.map_interpreter
#inp.show_ani(id,97)
$game_switches[416] = true
end
              end
#              $game_switches[417] = true # zwischenswitch, damit Animation startet
              # Kennzeichen setzen, damit er sich nicht noch einmal bewegt
              schatzsucher_bereits_bewegt = true
            end#unless
          end#if hat schatz?
        end#if .x
      end#do    
#      # Wenn der Schatzsucher den Spieler erspäht hat oder so eingestellt ist,
#      # dass er dem Spieler sowieso folgen muss
#      if ((schatzsucher.x - $game_player.x).abs <= radius and
#           (schatzsucher.y - $game_player.y).abs <= radius) or 
#           $hk_schatzsucher_immerfolgen
#        # Und der Schatzsucher in diesem Update noch nicht bewegt wurde
#        unless (schatzsucher.moving? or schatzsucher.move_route_forcing or
#               schatzsucher_bereits_bewegt)
#          # Dann zum Spieler laufen
#          schatzsucher.move_toward_player
#        end
#      end
      # Jetzt kommt der nächste Schatzsucher (Schleife), Kennzeichen auf false
      schatzsucher_bereits_bewegt = false
    end #do
  end#def update
end#class
 
 
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
#  Mapnamen verfügbar machen, beim Map Setup die Events mit entsprechenden
#  Namen der Schatzliste hinzufügen, indem die Class gerufen wird.
#==============================================================================
 
class Game_Map
  attr_accessor :map # Für Zugriff auf Eventnamen
  alias hk_schatzsucher_setup setup
  alias hk_schatzsucher_update update
 
  #--------------------------------------------------------------------------
  # * Setup (map_id) => Hier wird u.a. die Class HK_Schatzsucher aufgerufen
  #--------------------------------------------------------------------------
  def setup(map_id)
    hk_schatzsucher_setup(map_id)
    # Temporärer Array, nur für Übergabe wichtig
    schaetze = []
    # Eventnamen scannen, enstprechende Events in den zu überweisenden Array geben
    $game_map.events.each {|id, event|
      a = $game_map.map.events[id].name.downcase
      schaetze << id if a.include?($hk_schatzsucher_eventname.downcase)
    }
    # HK_Schatzsucher aufrufen (Schatzevent-IDs übergeben)
    $hk_schatzsucher = HK_Schatzsucher.new(schaetze)
  end
  #--------------------------------------------------------------------------
  # * Frame update => Die Class HK_Schatzsucher mit updaten
  #--------------------------------------------------------------------------
  def update
    hk_schatzsucher_update
        # Schalter nummero eins abfragen, Schatzsuche aktiv?
    if $game_switches[415] == true # kann das Haustier Schatzsuche?
      # tut es bereits etwas anderes?
      if $game_switches[402] == false # Sitz
        if $game_switches[406] == false # flieg
          if $game_switches[408] == false # fliegsteh
            if $game_switches[409] == false # such
              if $game_switches[410] == false # spaß
                if $game_switches[411] == false # fun
                  if $game_switches[412] == false # gefunden
                    if $game_switches[413] == false # freiwillig suche
    $hk_schatzsucher.update if $hk_schatzsucher != nil
                    end
                  end
                end
              end
            end
          end
        end
      end
    end
  end#def
 
end #class 
 
#==============================================================================
# ** Game_Character
#------------------------------------------------------------------------------
#  Die neue Methode move_toward_event einbinden.
#==============================================================================
 
class Game_Character
  #--------------------------------------------------------------------------
  # * Move Toward Event (Event ID) => Schritt Richtung enstprechendes Event
  #--------------------------------------------------------------------------
  def move_toward_event(id)
    # Abstand zwischen Character und Event
    sx = @x - $game_map.events[id].x
    sy = @y - $game_map.events[id].y
    if sx == 0 and sy == 0
      return
    end
    abs_sx = sx.abs
    abs_sy = sy.abs
    # Wenn Event sowohl auf X- als auch auf Y-Achse gleich weit entfernt => Zufall
    if abs_sx == abs_sy
      rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
    end
    # In jeweilige Richtung bewegen
    if abs_sx > abs_sy
      sx > 0 ? move_left : move_right
      if not moving? and sy != 0
        sy > 0 ? move_up : move_down
      end
    else
      sy > 0 ? move_up : move_down
      if not moving? and sx != 0
        sx > 0 ? move_left : move_right
      end
    end
  end #def
end#class
 
 
#==============================================================================
# ** Interpreter
#------------------------------------------------------------------------------
#  Die 2 Methoden per Callscript und mit hk-Zusatz verfügbar machen.
#==============================================================================
 
class Interpreter
  #--------------------------------------------------------------------------
  # * Schatzsucher Ändern(id, radius) => Ruft entsprechende Methode
  #--------------------------------------------------------------------------
  def hk_schatzsucher_aendern(id, radius)
    return true if $hk_schatzsucher == nil
    $hk_schatzsucher.schatzsucher_aendern(id, radius)
    return true
  end
  #--------------------------------------------------------------------------
  # * Schatz Ändern(id, aktiv) => Ruft entsprechende Methode
  #--------------------------------------------------------------------------
  def hk_schatz_aendern(id, aktiv)
    return true if $hk_schatzsucher == nil
    $hk_schatzsucher.schatz_aendern(id, aktiv)
    return true
  end
 
 #--------------------------------------------------------------------------
 # * Suchevent anhand des Namens finden
 #--------------------------------------------------------------------------
  def josey_get_eventid(name)
      $game_map.events.each {|id, event|
        a = $game_map.map.events[id].name.downcase
        return id if a.include?(name.downcase)
      }
      return @event_id
  end
 
 
end  #class
highlight to read
Notfalldiscord: Hier klicken


  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-half: :star-empty: :star-empty: :star-empty: :star-empty:
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

This post has been edited 3 times, last edit by "Josey" (Jan 10th 2018, 4:15pm)


Josey

Storyteller

  • "Josey" started this thread

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Send private message

17

Saturday, May 5th 2018, 11:11pm

So, ich habe aktuell nur fünf drei EINE offene Anfragen (was für mich echt genial gut ist XD) und schuppse jetzt alle fünf drei EINE mal nach oben, weil ich jetzt übermütig bin. XD
Hier in meinem Profil könnt ihr alle fünf drei EINE offenen Anfragen sehen ;D
Und hier habt ihr den Post dieses Threadts, in dem beschrieben steht, was ich in diesem Fall noch brauche :P
Notfalldiscord: Hier klicken


  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-half: :star-empty: :star-empty: :star-empty: :star-empty:
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

This post has been edited 3 times, last edit by "Josey" (May 5th 2018, 11:11pm)