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.
[Erledigt] Schatzsuche nochmal anders
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
![]() |
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 |
HideandSeek v2.1 by Jumping Coconut
![]() |
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 |
Positionsfinder byVoudisteppi2
![]() |
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 |
Execute Event by Revito
![]() |
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 |
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~
-
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:
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
-
Meine Fähigkeiten
Maker:XP
Pixeln:
Mappen:
Eventen:
Scripten:
Komponieren:
-
(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!:*
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 () in meiner Signatur! XD
-
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
Abstimmung
Siegerehrung
Das Wunder der Berge
Abstimmung
Siegerehrung -
Meine Contests
Ein Schreibcontest in Arbeit! : D
-
-
Joseys Spiele
-
Endless Ending
-
Scripted Desaster
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
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
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
Story: 60%
Charas: 20%
Maps: 01%
Zeichnungen: 05%
Grafiken: 30%
Scripte: 70%
Musik: 00%
...ist nicht viel, huh? ^^° -
Scripted Desaster
Story: 10%
Charas: 60%
Maps: 30%
Zeichnungen: 01%
Grafiken: 60%
Scripte: 70%
Musik: 00%
Gut Ding... -
Pokemon EV
Story: 60%
Charas: 10%
Maps: 00%
Zeichnungen: 00%
Grafiken: 80%
Scripte: 90%
Musik: 70%
Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht... -
Lost Island
Story: 100%
Charas: 10%
Maps: 90%
Zeichnungen: 00%
Grafiken: 60%
Scripte: 90%
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)
![]() |
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 |
- 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.
-
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:
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
-
Meine Fähigkeiten
Maker:XP
Pixeln:
Mappen:
Eventen:
Scripten:
Komponieren:
-
(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!:*
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 () in meiner Signatur! XD
-
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
Abstimmung
Siegerehrung
Das Wunder der Berge
Abstimmung
Siegerehrung -
Meine Contests
Ein Schreibcontest in Arbeit! : D
-
-
Joseys Spiele
-
Endless Ending
-
Scripted Desaster
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
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
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
Story: 60%
Charas: 20%
Maps: 01%
Zeichnungen: 05%
Grafiken: 30%
Scripte: 70%
Musik: 00%
...ist nicht viel, huh? ^^° -
Scripted Desaster
Story: 10%
Charas: 60%
Maps: 30%
Zeichnungen: 01%
Grafiken: 60%
Scripte: 70%
Musik: 00%
Gut Ding... -
Pokemon EV
Story: 60%
Charas: 10%
Maps: 00%
Zeichnungen: 00%
Grafiken: 80%
Scripte: 90%
Musik: 70%
Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht... -
Lost Island
Story: 100%
Charas: 10%
Maps: 90%
Zeichnungen: 00%
Grafiken: 60%
Scripte: 90%
Musik: 00%
Das macht richtig Spaß XD
-
-
Huiii
Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.
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:Wie ich schon schrieb, sind da folgende Punkte:
- Script soll nur laufen, wenn Switch 10 ON ist
- 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)
- 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
- setup -> Methode, die einmalig bei der Maperstellung aufgerufen wird
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.
Du setzt Schatzsucher ja so fest:
- 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)
![]() |
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 |
![]() |
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 |
- 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.
Dann guck dir mal die Änderungen an und versuch es zu verstehen, wer gut mit Events ist der kann auch scripten
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.

Du musst ja kein neues Script aus dem Boden stampfen, aber so kleinere Edits sind der erste Schritt.
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.
![]() |
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 |
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
-
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:
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
-
Meine Fähigkeiten
Maker:XP
Pixeln:
Mappen:
Eventen:
Scripten:
Komponieren:
-
(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!:*
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 () in meiner Signatur! XD
-
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
Abstimmung
Siegerehrung
Das Wunder der Berge
Abstimmung
Siegerehrung -
Meine Contests
Ein Schreibcontest in Arbeit! : D
-
-
Joseys Spiele
-
Endless Ending
-
Scripted Desaster
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
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
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
Story: 60%
Charas: 20%
Maps: 01%
Zeichnungen: 05%
Grafiken: 30%
Scripte: 70%
Musik: 00%
...ist nicht viel, huh? ^^° -
Scripted Desaster
Story: 10%
Charas: 60%
Maps: 30%
Zeichnungen: 01%
Grafiken: 60%
Scripte: 70%
Musik: 00%
Gut Ding... -
Pokemon EV
Story: 60%
Charas: 10%
Maps: 00%
Zeichnungen: 00%
Grafiken: 80%
Scripte: 90%
Musik: 70%
Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht... -
Lost Island
Story: 100%
Charas: 10%
Maps: 90%
Zeichnungen: 00%
Grafiken: 60%
Scripte: 90%
Musik: 00%
Das macht richtig Spaß XD
-
-
Huiii
Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.
Super, so soll es sein!Hallo!
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
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.
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?
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.
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?
![]() |
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 |
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.
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 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) .
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?
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

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:
![]() |
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 |
Danke :3
-
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:
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
-
Meine Fähigkeiten
Maker:XP
Pixeln:
Mappen:
Eventen:
Scripten:
Komponieren:
-
(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!:*
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 () in meiner Signatur! XD
-
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
Abstimmung
Siegerehrung
Das Wunder der Berge
Abstimmung
Siegerehrung -
Meine Contests
Ein Schreibcontest in Arbeit! : D
-
-
Joseys Spiele
-
Endless Ending
-
Scripted Desaster
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
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
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
Story: 60%
Charas: 20%
Maps: 01%
Zeichnungen: 05%
Grafiken: 30%
Scripte: 70%
Musik: 00%
...ist nicht viel, huh? ^^° -
Scripted Desaster
Story: 10%
Charas: 60%
Maps: 30%
Zeichnungen: 01%
Grafiken: 60%
Scripte: 70%
Musik: 00%
Gut Ding... -
Pokemon EV
Story: 60%
Charas: 10%
Maps: 00%
Zeichnungen: 00%
Grafiken: 80%
Scripte: 90%
Musik: 70%
Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht... -
Lost Island
Story: 100%
Charas: 10%
Maps: 90%
Zeichnungen: 00%
Grafiken: 60%
Scripte: 90%
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)
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
-
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:
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
-
Meine Fähigkeiten
Maker:XP
Pixeln:
Mappen:
Eventen:
Scripten:
Komponieren:
-
(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!:*
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 () in meiner Signatur! XD
-
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
Abstimmung
Siegerehrung
Das Wunder der Berge
Abstimmung
Siegerehrung -
Meine Contests
Ein Schreibcontest in Arbeit! : D
-
-
Joseys Spiele
-
Endless Ending
-
Scripted Desaster
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
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
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
Story: 60%
Charas: 20%
Maps: 01%
Zeichnungen: 05%
Grafiken: 30%
Scripte: 70%
Musik: 00%
...ist nicht viel, huh? ^^° -
Scripted Desaster
Story: 10%
Charas: 60%
Maps: 30%
Zeichnungen: 01%
Grafiken: 60%
Scripte: 70%
Musik: 00%
Gut Ding... -
Pokemon EV
Story: 60%
Charas: 10%
Maps: 00%
Zeichnungen: 00%
Grafiken: 80%
Scripte: 90%
Musik: 70%
Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht... -
Lost Island
Story: 100%
Charas: 10%
Maps: 90%
Zeichnungen: 00%
Grafiken: 60%
Scripte: 90%
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)
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.
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°
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
![]() |
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 |
-
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:
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
-
Meine Fähigkeiten
Maker:XP
Pixeln:
Mappen:
Eventen:
Scripten:
Komponieren:
-
(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!:*
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 () in meiner Signatur! XD
-
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
Abstimmung
Siegerehrung
Das Wunder der Berge
Abstimmung
Siegerehrung -
Meine Contests
Ein Schreibcontest in Arbeit! : D
-
-
Joseys Spiele
-
Endless Ending
-
Scripted Desaster
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
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
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
Story: 60%
Charas: 20%
Maps: 01%
Zeichnungen: 05%
Grafiken: 30%
Scripte: 70%
Musik: 00%
...ist nicht viel, huh? ^^° -
Scripted Desaster
Story: 10%
Charas: 60%
Maps: 30%
Zeichnungen: 01%
Grafiken: 60%
Scripte: 70%
Musik: 00%
Gut Ding... -
Pokemon EV
Story: 60%
Charas: 10%
Maps: 00%
Zeichnungen: 00%
Grafiken: 80%
Scripte: 90%
Musik: 70%
Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht... -
Lost Island
Story: 100%
Charas: 10%
Maps: 90%
Zeichnungen: 00%
Grafiken: 60%
Scripte: 90%
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)
Und wenn ein Schatz-Event ausgelöst wird, entfernst Du diesen Schatz dann mit schatz_aendern?

Was ist das RGSS ? RGSS-Dokumentation auf Sc
Kyoshiros Makerkurs

Musik von Shabraxxx für euch

Guide zu den Audioformaten

Skripte von mir (Auswahl):
Atmungssystem






Random : Marktsystem für Kardor








_@>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
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 :/
-
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:
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
-
Meine Fähigkeiten
Maker:XP
Pixeln:
Mappen:
Eventen:
Scripten:
Komponieren:
-
(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!:*
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 () in meiner Signatur! XD
-
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
Abstimmung
Siegerehrung
Das Wunder der Berge
Abstimmung
Siegerehrung -
Meine Contests
Ein Schreibcontest in Arbeit! : D
-
-
Joseys Spiele
-
Endless Ending
-
Scripted Desaster
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
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
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
Story: 60%
Charas: 20%
Maps: 01%
Zeichnungen: 05%
Grafiken: 30%
Scripte: 70%
Musik: 00%
...ist nicht viel, huh? ^^° -
Scripted Desaster
Story: 10%
Charas: 60%
Maps: 30%
Zeichnungen: 01%
Grafiken: 60%
Scripte: 70%
Musik: 00%
Gut Ding... -
Pokemon EV
Story: 60%
Charas: 10%
Maps: 00%
Zeichnungen: 00%
Grafiken: 80%
Scripte: 90%
Musik: 70%
Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht... -
Lost Island
Story: 100%
Charas: 10%
Maps: 90%
Zeichnungen: 00%
Grafiken: 60%
Scripte: 90%
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)
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.

Was ist das RGSS ? RGSS-Dokumentation auf Sc
Kyoshiros Makerkurs

Musik von Shabraxxx für euch

Guide zu den Audioformaten

Skripte von mir (Auswahl):
Atmungssystem






Random : Marktsystem für Kardor








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:
![]() |
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 |
Der Schatzsucher ist immer der mit den Switches 132 und 257 (oben in den Einstellungen)
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 |
-
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:
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
-
Meine Fähigkeiten
Maker:XP
Pixeln:
Mappen:
Eventen:
Scripten:
Komponieren:
-
(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!:*
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 () in meiner Signatur! XD
-
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
Abstimmung
Siegerehrung
Das Wunder der Berge
Abstimmung
Siegerehrung -
Meine Contests
Ein Schreibcontest in Arbeit! : D
-
-
Joseys Spiele
-
Endless Ending
-
Scripted Desaster
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
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
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
Story: 60%
Charas: 20%
Maps: 01%
Zeichnungen: 05%
Grafiken: 30%
Scripte: 70%
Musik: 00%
...ist nicht viel, huh? ^^° -
Scripted Desaster
Story: 10%
Charas: 60%
Maps: 30%
Zeichnungen: 01%
Grafiken: 60%
Scripte: 70%
Musik: 00%
Gut Ding... -
Pokemon EV
Story: 60%
Charas: 10%
Maps: 00%
Zeichnungen: 00%
Grafiken: 80%
Scripte: 90%
Musik: 70%
Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht... -
Lost Island
Story: 100%
Charas: 10%
Maps: 90%
Zeichnungen: 00%
Grafiken: 60%
Scripte: 90%
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)
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.

Was ist das RGSS ? RGSS-Dokumentation auf Sc
Kyoshiros Makerkurs

Musik von Shabraxxx für euch

Guide zu den Audioformaten

Skripte von mir (Auswahl):
Atmungssystem






Random : Marktsystem für Kardor








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.
-
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:
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
-
Meine Fähigkeiten
Maker:XP
Pixeln:
Mappen:
Eventen:
Scripten:
Komponieren:
-
(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!:*
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 () in meiner Signatur! XD
-
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
Abstimmung
Siegerehrung
Das Wunder der Berge
Abstimmung
Siegerehrung -
Meine Contests
Ein Schreibcontest in Arbeit! : D
-
-
Joseys Spiele
-
Endless Ending
-
Scripted Desaster
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
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
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
Story: 60%
Charas: 20%
Maps: 01%
Zeichnungen: 05%
Grafiken: 30%
Scripte: 70%
Musik: 00%
...ist nicht viel, huh? ^^° -
Scripted Desaster
Story: 10%
Charas: 60%
Maps: 30%
Zeichnungen: 01%
Grafiken: 60%
Scripte: 70%
Musik: 00%
Gut Ding... -
Pokemon EV
Story: 60%
Charas: 10%
Maps: 00%
Zeichnungen: 00%
Grafiken: 80%
Scripte: 90%
Musik: 70%
Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht... -
Lost Island
Story: 100%
Charas: 10%
Maps: 90%
Zeichnungen: 00%
Grafiken: 60%
Scripte: 90%
Musik: 00%
Das macht richtig Spaß XD
-
-
Huiii
Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.
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:
![]() |
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 |
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:
![]() |
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 |
-
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:
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
-
Meine Fähigkeiten
Maker:XP
Pixeln:
Mappen:
Eventen:
Scripten:
Komponieren:
-
(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!:*
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 () in meiner Signatur! XD
-
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
Abstimmung
Siegerehrung
Das Wunder der Berge
Abstimmung
Siegerehrung -
Meine Contests
Ein Schreibcontest in Arbeit! : D
-
-
Joseys Spiele
-
Endless Ending
-
Scripted Desaster
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
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
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
Story: 60%
Charas: 20%
Maps: 01%
Zeichnungen: 05%
Grafiken: 30%
Scripte: 70%
Musik: 00%
...ist nicht viel, huh? ^^° -
Scripted Desaster
Story: 10%
Charas: 60%
Maps: 30%
Zeichnungen: 01%
Grafiken: 60%
Scripte: 70%
Musik: 00%
Gut Ding... -
Pokemon EV
Story: 60%
Charas: 10%
Maps: 00%
Zeichnungen: 00%
Grafiken: 80%
Scripte: 90%
Musik: 70%
Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht... -
Lost Island
Story: 100%
Charas: 10%
Maps: 90%
Zeichnungen: 00%
Grafiken: 60%
Scripte: 90%
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)
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
-
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:
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
-
Meine Fähigkeiten
Maker:XP
Pixeln:
Mappen:
Eventen:
Scripten:
Komponieren:
-
(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!:*
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 () in meiner Signatur! XD
-
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
Abstimmung
Siegerehrung
Das Wunder der Berge
Abstimmung
Siegerehrung -
Meine Contests
Ein Schreibcontest in Arbeit! : D
-
-
Joseys Spiele
-
Endless Ending
-
Scripted Desaster
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
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
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
Story: 60%
Charas: 20%
Maps: 01%
Zeichnungen: 05%
Grafiken: 30%
Scripte: 70%
Musik: 00%
...ist nicht viel, huh? ^^° -
Scripted Desaster
Story: 10%
Charas: 60%
Maps: 30%
Zeichnungen: 01%
Grafiken: 60%
Scripte: 70%
Musik: 00%
Gut Ding... -
Pokemon EV
Story: 60%
Charas: 10%
Maps: 00%
Zeichnungen: 00%
Grafiken: 80%
Scripte: 90%
Musik: 70%
Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht... -
Lost Island
Story: 100%
Charas: 10%
Maps: 90%
Zeichnungen: 00%
Grafiken: 60%
Scripte: 90%
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)