· 8 years ago · May 20, 2018, 08:34 AM
1################################################################################
2#
3# GTS System Version 3.0.0 RELEASE
4# By Hansiec and Manoel Afonso
5#
6# CHANGE LOG FOR THIS VERSION:
7# - Adaptation of the original script to work on v17.x of Pokémon Essentials
8# - Set to work with GTS Online Panel by Hills Tech
9# - Performance improvement
10# - Some minor bugs fixed
11#
12# Special Thanks to Saving Raven for providing graphics and testing
13# CREDITS REQUIRED
14#
15################################################################################
16#
17# NOTICE: If a bug occurs, please state the message of the bug.
18#
19# Installation:
20# * Create a new code session above Main and paste this script there;
21# * Go to http://gts.hillstech.co and create a user account;
22# * Go to the "new game" tab on the site and create a new game;
23# * Get the game ID that was generated on the site and paste it
24# into the GAMEID variable in this script;
25# * Done.
26#
27# How To Use:
28# * Install
29# * Call "GTS.open"
30# * Report if any bugs uccor
31#
32# Settings:
33# * URL - The url link of the online panel, don't change this.
34# * SPECIES_SHOWN - Set to "All", "Owned", or "Seen" - this sets the available
35# species you can search for.
36# * SORT_MODE - Set to "Alphabetical" or "Regional" - How species are arranged
37# during species finding.
38# * GAME_CODE - A special Game Code, if you happen to trade with a game with
39# a different game code, the found map would be "Faraway Place".
40#
41################################################################################
42
43module GTSSettings
44
45 GAMEID = 53 # paste the ID of your game here
46
47 URL = "http://gts.hillstech.co/api.php?i=" # don't change this
48
49 SPECIES_SHOWN = "All" # All/Seen/Owned Species you can search for
50 SORT_MODE = "Alphabetical" # Alphabetical/Regional How species are arranged
51 BLACK_LIST = [] # Pokemon Species of which cannot be selected to search for
52
53 GAME_CODE = "PBBR" # Please use a custom Game Code
54 # It IS case Sensitive and can be any length, this is to define
55 # Games as different from each other.
56
57 KEEP_OLD_IDS = true # If this is set to false, instead of keeping your old
58 # online ID it creates you a new one, this means that
59 # it can cause a table in the MySQL server to be flooded
60 # with someone who constantly does new game and uploads a
61 # pokemon to the server. This should only be done for
62 # testing purposes
63
64end
65
66# Temporary boolean, DO NOT REMOVE
67$TempBool = false
68
69module GTS
70 ##### Main Method
71 def self.open
72 pbBGMPlay("Trade Resort - Brick Bronze OST")
73 scene = Scene_GTS.new
74 scene.main
75 end
76
77 #### Brings up a summary of your uploaded pokemon (also allows you to delete it)
78 def self.summary
79 if GTSCore.isTaken
80 newpoke = GTSCore.downloadPokemon($PokemonGlobal.onlineID).to_pokemon
81 if finishTrade($PokemonGlobal.onlinePokemon, newpoke, false)
82 pbAddPokemonSilent(newpoke)
83 $PokemonGlobal.onlinePokemon = nil
84 pbSave
85 end
86 return
87 end
88 pbFadeOutIn(99999){
89 scene=PokemonSummaryScene.new
90 screen=PokemonSummaryScreen.new(scene)
91 screen.pbStartScreen([$PokemonGlobal.onlinePokemon],0)
92 }
93 if Kernel.pbConfirmMessageSerious(_INTL("Do you want to withdraw your "+
94 "Pokémon from GTS?"))
95 if Kernel.pbConfirmMessageSerious(_INTL("Are you sure you want to "+
96 "withdraw your Pokémon?"))
97 if GTSCore.deletePokemon
98 pbAddPokemonSilent($PokemonGlobal.onlinePokemon)
99 $PokemonGlobal.onlinePokemon = nil
100 $TempBool = true
101 pbSave
102 # Long story short, we save before we show the message to help prevent
103 # pokemon from being deleted by restarting, but if the game is restarted,
104 # we don't want this message
105 if $TempBool
106 Kernel.pbMessage(_INTL("Pokémon withdrawn, please be aware that "+
107 "your Pokémon may have had been taken by now."))
108 end
109 end
110 end
111 end
112 end
113
114 ##### Finishes the GTS trade
115 def self.finishTrade(myPokemon, newpoke, searching, id=nil)
116 $Trainer.seen[newpoke.species]=true
117 $Trainer.owned[newpoke.species]=true
118 pbSeenForm(newpoke)
119 pbFadeOutInWithMusic(99999){
120 evo=PokemonTradeScene.new
121 evo.pbStartScreen(myPokemon,newpoke,$Trainer.name,newpoke.ot)
122 evo.pbTrade
123 evo.pbEndScreen
124 }
125 if !newpoke.game_code || newpoke.game_code != GTSSettings::GAME_CODE
126 newpoke.obtainText = "Faraway Place"
127 end
128 newpoke.obtainMode = 2 # Traded
129 if searching
130 if GTSCore.setTaken(id) && GTSCore.uploadNewPokemon(id, myPokemon)
131 pbAddPokemonSilent(newpoke)
132 pbSave
133 return true
134 end
135 return false
136 else
137 pbSave
138 return GTSCore.deletePokemon(false)
139 end
140 end
141
142 ##### Brings up all species of pokemon of the given index of the given sort mode
143 def self.orderSpecies(index)
144 speciesList = []
145 commands = ["Cancel"]
146 if GTSSettings::SORT_MODE == "Alphabetical"
147 l = "A"
148 l[0] += index if !index.is_a?(String)
149 letter = index.is_a?(String) ? index : l
150 for i in 1..PBSpecies.maxValue
151 show = true
152 show = false if !$Trainer.seen[i] && GTSSettings::SPECIES_SHOWN == "Seen"
153 show = false if !$Trainer.owned[i] && GTSSettings::SPECIES_SHOWN == "Owned"
154 for j in GTSSettings::BLACK_LIST
155 show = false if i == j
156 break if !show
157 end
158 speciesList.push(i) if PBSpecies.getName(i)[0] == letter[0] && show
159 end
160 elsif GTSSettings::SORT_MODE == "Regional"
161 realIndex = -1
162 regions = pbDexNames
163 for i in 0...regions.length
164 if regions[i].is_a?(Array)
165 if regions[i][0] == index
166 realIndex = regions[i][1]
167 end
168 end
169 end
170 if realIndex != -1
171 sl = pbAllRegionalSpecies(realIndex)
172 for i in sl
173 show = true
174 show = false if !$Trainer.seen[i] &&
175 GTSSettings::SPECIES_SHOWN == "Seen"
176 show = false if !$Trainer.owned[i] &&
177 GTSSettings::SPECIES_SHOWN == "Owned"
178 for j in GTSSettings::BLACK_LIST
179 show = false if i == j
180 break if !show
181 end
182 speciesList.push(i) if show
183 end
184 else
185 for i in 1..PBSpecies.maxValue
186 show = true
187 show = false if !$Trainer.seen[i] &&
188 GTSSettings::SPECIES_SHOWN == "Seen"
189 show = false if !$Trainer.owned[i] &&
190 GTSSettings::SPECIES_SHOWN == "Owned"
191 for j in GTSSettings::BLACK_LIST
192 show = false if i == j
193 break if !show
194 end
195 speciesList.push(i) if show
196 end
197 end
198 end
199 for i in speciesList
200 commands.push("#{i}: #{PBSpecies.getName(i)}") if i > 0
201 end
202 if commands.length == 1
203 Kernel.pbMessage(_INTL("No species found"))
204 return [0, 0]
205 end
206 c = Kernel.pbMessage("Select a Species", commands, 0, nil, 1)
207
208 x = speciesList[c - 1]
209 if x.is_a?(Array)
210 x = x[0]
211 end
212 return [c == 0 ? -1 : x, c]
213 end
214
215end
216################################################################################
217# GTS Scenes
218# By A Dork of Pork
219# Scenes For GTS
220################################################################################
221
222######## GTS Button, A Basic options button for our GTS System
223class GTS_Button < SpriteWrapper
224 def initialize(x,y,name="",index=0,viewport=nil)
225 super(viewport)
226 @index=index
227 @name=name
228 @selected=false
229 self.x=x
230 self.y=y
231 update
232 end
233
234 def dispose
235 super
236 end
237
238 def refresh
239 self.bitmap.dispose if self.bitmap
240 self.bitmap = Bitmap.new("Graphics/Pictures/GTS/Options_bar")
241 pbSetSystemFont(self.bitmap)
242 textpos=[
243 [@name,self.bitmap.width/2,1,2,Color.new(248,248,248),Color.new(40,40,40)],
244 ]
245 pbDrawTextPositions(self.bitmap,textpos)
246 end
247
248 def update
249 refresh
250 super
251 end
252end
253
254########## GTS Search Method Selection
255class GTSSearchMethod
256 def initialize
257 @exit = false
258 @index = 0
259 end
260
261 def create_spriteset
262 pbDisposeSpriteHash(@sprites) if @sprites
263 @sprites = {}
264 @sprites["background"] = IconSprite.new
265 @sprites["background"].setBitmap("Graphics/Pictures/GTS/Background")
266
267 pbSetSystemFont(@sprites["background"].bitmap)
268 textpos=[
269 ["Select Search Method",50,6,0,Color.new(248,248,248),Color.new(40,40,40)],
270 [" Online ID: #{$PokemonGlobal.onlineID}",350,6,2,Color.new(248,248,248),
271 Color.new(40,40,40)],
272 ]
273 pbDrawTextPositions(@sprites["background"].bitmap,textpos)
274
275 @sprites["0"] = GTS_Button.new(Graphics.width/2, 50, "By Wanted")
276 @sprites["0"].x -= @sprites["0"].bitmap.width / 2
277
278 @sprites["1"] = GTS_Button.new(Graphics.width/2, 110, "By Pokémon")
279 @sprites["1"].x -= @sprites["1"].bitmap.width / 2
280
281 @sprites["2"] = GTS_Button.new(Graphics.width/2, 170, "By ID")
282 @sprites["2"].x -= @sprites["2"].bitmap.width / 2
283
284 @sprites["3"] = GTS_Button.new(Graphics.width/2, 230, "Exit")
285 @sprites["3"].x -= @sprites["3"].bitmap.width / 2
286
287 bit = Bitmap.new("Graphics/Pictures/GTS/Select")
288 @sprites["selection_l"] = IconSprite.new
289 @sprites["selection_l"].bitmap = Bitmap.new(16, 46)
290 @sprites["selection_l"].bitmap.blt(0, 0, bit, Rect.new(0, 0, 16, 16))
291 @sprites["selection_l"].bitmap.blt(0, 23, bit, Rect.new(0, 16, 16, 32))
292
293 @sprites["selection_r"] = IconSprite.new
294 @sprites["selection_r"].bitmap = Bitmap.new(16, 46)
295 @sprites["selection_r"].bitmap.blt(0, 0, bit, Rect.new(16, 0, 32, 16))
296 @sprites["selection_r"].bitmap.blt(0, 23, bit, Rect.new(16, 16, 32, 32))
297
298 @sprites["selection_l"].x = @sprites["#{@index}"].x-2
299 @sprites["selection_l"].y = @sprites["#{@index}"].y-2
300 @sprites["selection_r"].x = @sprites["#{@index}"].x+
301 @sprites["#{@index}"].bitmap.width-18
302 @sprites["selection_r"].y = @sprites["#{@index}"].y-2
303
304 end
305
306 def main
307 Graphics.freeze
308 create_spriteset
309 Graphics.transition
310 loop do
311 Graphics.update
312 Input.update
313 update
314 break if @exit
315 end
316 Graphics.freeze
317 pbDisposeSpriteHash(@sprites)
318 end
319
320 def update
321 pbUpdateSpriteHash(@sprites)
322 @sprites["selection_l"].x = @sprites["#{@index}"].x-2
323 @sprites["selection_l"].y = @sprites["#{@index}"].y-2
324 @sprites["selection_r"].x = @sprites["#{@index}"].x+
325 @sprites["#{@index}"].bitmap.width-18
326 @sprites["selection_r"].y = @sprites["#{@index}"].y-2
327 if Input.trigger?(Input::UP)
328 @index -= 1
329 if @index < 0
330 @index = 3
331 end
332 elsif Input.trigger?(Input::DOWN)
333 @index += 1
334 if @index > 3
335 @index = 0
336 end
337 end
338 if (Input.trigger?(Input::B))
339 pbPlayCancelSE
340 @exit = true
341 elsif (Input.trigger?(Input::C))
342 pbPlayDecisionSE
343 do_command
344 end
345 end
346
347 def do_command
348 if @index == 0
349 Graphics.freeze
350 scene = GTSWantedData.new
351 @sprites["background"].dispose
352 data=scene.main
353 create_spriteset
354 Graphics.transition
355 return if !data.is_a?(Array)
356 list = GTSCore.getPokemonList(data)
357 if list[0] == "nothing"
358 Kernel.pbMessage(_INTL("No Pokmon was found."))
359 else
360 pokemonList = []
361 for i in list
362 pokemonList.push(GTSCore.downloadPokemon(i).to_pokemon)
363 end
364 loop do
365 scene=PokemonSummaryScene.new
366 screen=PokemonSummary.new(scene)
367 index = screen.pbStartGTSScreen(pokemonList,0)
368 if index == false
369 break
370 else
371 wantedData = GTSCore.downloadWantedData(list[index])
372 for i in 0...wantedData.length
373 wantedData[i] = wantedData[i].to_i
374 end
375 scene=PokemonSummaryScene.new
376 screen=PokemonSummary.new(scene)
377 takes = screen.pbStartGTSWantedScreen(wantedData,0)
378 if takes
379 pbFadeOutIn(99999){
380 scene=PokemonStorageScene.new
381 screen=PokemonStorageScreen.new(scene,$PokemonStorage)
382 $choice = choice = screen.pbChoosePokemon
383 }
384 choice = $choice
385 if choice == nil
386 break
387 else
388 party = choice[0] == -1
389 pkmn = $Trainer.party[choice[1]].clone if party
390 pkmn = $PokemonStorage[choice[0]][choice[1]].clone if !party
391
392 if pkmn.species != wantedData[0] || pkmn.level < wantedData[1] ||
393 pkmn.level > wantedData[2] ||
394 (wantedData[3] != -1 && pkmn.gender != wantedData[3])
395 Kernel.pbMessage(_INTL("The selected Pokémon does not match the"+
396 " wanted requirments."))
397 else
398 if GTS.finishTrade(pkmn, pokemonList[index], true, list[index])
399 if party
400 pbRemovePokemonAt(choice[1])
401 else
402 $PokemonStorage[choice[0]][choice[1]] = nil
403 end
404 pbSave
405 return true
406 end
407 end
408 end
409 end
410 end
411 end
412 end
413 elsif @index == 1
414 Kernel.pbMessage(_INTL("To Continue, please select a Pokémon of yours,"+
415 " we will look for any possible matches and allow you to choose a"+
416 " Pokémon."))
417 pbFadeOutIn(99999){
418 scene=PokemonStorageScene.new
419 screen=PokemonStorageScreen.new(scene,$PokemonStorage)
420 $choice = choice = screen.pbChoosePokemon
421 }
422 choice = $choice
423 if choice == nil
424 return
425 else
426 party = choice[0] == -1
427 pkmn = $Trainer.party[choice[1]].clone
428 pkmn = $PokemonStorage[choice[0]][choice[1]].clone if !party
429 if pkmn
430 list = GTSCore.getPokemonListFromWanted(pkmn)
431 if list[0] == "nothing"
432 Kernel.pbMessage(_INTL("No Pokémon was found."))
433 else
434 pokemonList = []
435 for i in list
436 pokemonList.push(GTSCore.downloadPokemon(i).to_pokemon)
437 end
438 loop do
439 scene=PokemonSummaryScene.new
440 screen=PokemonSummary.new(scene)
441 index = screen.pbStartGTSScreen(pokemonList,0)
442 if index == false
443 break
444 else
445 wantedData = GTSCore.downloadWantedData(list[index])
446 for i in 0...wantedData.length
447 wantedData[i] = wantedData[i].to_i
448 end
449 Kernel.pbMessage(_INTL("To confirm, this is your Pokémon that they want."))
450 scene=PokemonSummaryScene.new
451 screen=PokemonSummary.new(scene)
452 takes = screen.pbStartGTSWantedScreen(wantedData,0)
453 if takes
454 if GTS.finishTrade(pkmn, pokemonList[index], true, list[index])
455 if party
456 pbRemovePokemonAt(choice[1])
457 else
458 $PokemonStorage[choice[0]][choice[1]] = nil
459 end
460 pbSave
461 return true
462 end
463 else
464 break
465 end
466 end
467 end
468 end
469 end
470 end
471 elsif @index == 2
472 loop do
473 params=ChooseNumberParams.new
474 params.setRange(1,99999999)
475 params.setInitialValue(1)
476 params.setCancelValue(-1)
477 id=Kernel.pbMessageChooseNumber(
478 _INTL("Select the online ID."),params)
479 return if id < 1
480 if id == $PokemonGlobal.onlineID
481 Kernel.pbMessage(_INTL("You cannot search by your own online ID!"))
482 else
483 break
484 end
485 end
486 if !GTSCore.hasPokemonUploaded?(id)
487 Kernel.pbMessage(_INTL("No Pokémon with this online ID exists!"))
488 return
489 end
490 gpkmn = GTSCore.downloadPokemon(id).to_pokemon
491 wantedData = GTSCore.downloadWantedData(id)
492 for i in 0...wantedData.length
493 wantedData[i] = wantedData[i].to_i
494 end
495 scene=PokemonSummaryScene.new
496 screen=PokemonSummary.new(scene)
497 index = screen.pbStartGTSScreen([gpkmn],0)
498 if index
499 scene=PokemonSummaryScene.new
500 screen=PokemonSummary.new(scene)
501 takes = screen.pbStartGTSWantedScreen(wantedData,0)
502 if takes
503 pbFadeOutIn(99999){
504 scene=PokemonStorageScene.new
505 screen=PokemonStorageScreen.new(scene,$PokemonStorage)
506 $choice = choice = screen.pbChoosePokemon
507 }
508 choice = $choice
509 if choice == nil
510 return
511 else
512 party = choice[0] == -1
513 pkmn = $Trainer.party[choice[1]].clone
514 pkmn = $PokemonStorage[choice[0]][choice[1]].clone if !party
515
516 if pkmn.species != wantedData[0] || pkmn.level < wantedData[1] ||
517 pkmn.level > wantedData[2] ||
518 (wantedData[3] != -1 && pkmn.gender != wantedData[3])
519 Kernel.pbMessage(_INTL("The selected Pokémon does not match the"+
520 " wanted requirments."))
521 else
522 if GTS.finishTrade(pkmn, gpkmn, true, id)
523 if party
524 pbRemovePokemonAt(choice[1])
525 else
526 $PokemonStorage[choice[0]][choice[1]] = nil
527 end
528 pbSave
529 return true
530 end
531 end
532 end
533 end
534 end
535 else
536 @exit = true
537 end
538 end
539end
540
541########## GTS Wanted Data, shows a screen on which you can create wanted data
542class GTSWantedData
543 def initialize
544 @exit = false
545 @wanted_data = [-1, 1, 100, -1]
546 @index = 0
547 end
548
549 def create_spriteset
550 pbDisposeSpriteHash(@sprites) if @sprites
551 @sprites = {}
552
553 @sprites["background"] = IconSprite.new
554 @sprites["background"].setBitmap("Graphics/Pictures/GTS/Background")
555
556 pbSetSystemFont(@sprites["background"].bitmap)
557 textpos=[
558 ["Pokémon Wanted Data",50,6,0,Color.new(248,248,248),Color.new(40,40,40)],
559 [" Online ID: #{$PokemonGlobal.onlineID}",350,6,2,Color.new(248,248,248),
560 Color.new(40,40,40)],
561 ]
562 pbDrawTextPositions(@sprites["background"].bitmap,textpos)
563
564 @sprites["0"] = IconSprite.new
565 @sprites["0"].setBitmap("Graphics/Pictures/GTS/Pokemon_bar")
566 @sprites["0"].x = Graphics.width / 2
567 @sprites["0"].x -= @sprites["0"].bitmap.width / 2
568 @sprites["0"].y = 50
569
570 @sprites["0t"] = IconSprite.new
571 @sprites["0t"].bitmap = Bitmap.new(@sprites["0"].bitmap.width,
572 @sprites["0"].bitmap.height)
573 @sprites["0t"].x = @sprites["0"].x
574 @sprites["0t"].y = @sprites["0"].y
575
576 @sprites["1"] = IconSprite.new
577 @sprites["1"].setBitmap("Graphics/Pictures/GTS/Gender_bar")
578 @sprites["1"].x = Graphics.width / 2
579 @sprites["1"].x -= @sprites["1"].bitmap.width / 2
580 @sprites["1"].y = 110
581
582 @sprites["1t"] = IconSprite.new
583 @sprites["1t"].bitmap = Bitmap.new(@sprites["1"].bitmap.width,
584 @sprites["1"].bitmap.height)
585 @sprites["1t"].x = @sprites["1"].x
586 @sprites["1t"].y = @sprites["1"].y
587
588 @sprites["2"] = IconSprite.new
589 @sprites["2"].setBitmap("Graphics/Pictures/GTS/Level_bar")
590 @sprites["2"].x = Graphics.width / 2
591 @sprites["2"].x -= @sprites["2"].bitmap.width / 2
592 @sprites["2"].y = 170
593
594 @sprites["2t"] = IconSprite.new
595 @sprites["2t"].bitmap = Bitmap.new(@sprites["2"].bitmap.width,
596 @sprites["2"].bitmap.height)
597 @sprites["2t"].x = @sprites["2"].x
598 @sprites["2t"].y = @sprites["2"].y
599
600 @sprites["3"] = IconSprite.new
601 @sprites["3"].setBitmap("Graphics/Pictures/GTS/Search_bar")
602 @sprites["3"].x = Graphics.width / 2
603 @sprites["3"].x -= @sprites["3"].bitmap.width / 2
604 @sprites["3"].y = 230
605
606 @sprites["3t"] = IconSprite.new
607 @sprites["3t"].bitmap = Bitmap.new(@sprites["3"].bitmap.width,
608 @sprites["3"].bitmap.height)
609 @sprites["3t"].x = @sprites["3"].x
610 @sprites["3t"].y = @sprites["3"].y
611
612 @sprites["4"] = GTS_Button.new(Graphics.width/2, 290, "Back")
613 @sprites["4"].x -= @sprites["4"].bitmap.width / 2
614
615 pbSetSystemFont(@sprites["0"].bitmap)
616 textpos=[
617 ["Pokémon You Want",50,0,0,Color.new(248,248,248),Color.new(40,40,40)],
618 ]
619 pbDrawTextPositions(@sprites["0"].bitmap,textpos)
620
621 pbSetSystemFont(@sprites["1"].bitmap)
622 textpos=[
623 ["Gender",75,0,0,Color.new(248,248,248),Color.new(40,40,40)],
624 ]
625 pbDrawTextPositions(@sprites["1"].bitmap,textpos)
626
627 pbSetSystemFont(@sprites["2"].bitmap)
628 textpos=[
629 ["Level Range",50,0,0,Color.new(248,248,248),Color.new(40,40,40)],
630 ]
631 pbDrawTextPositions(@sprites["2"].bitmap,textpos)
632
633 pbSetSystemFont(@sprites["3"].bitmap)
634 textpos=[
635 ["Search with these Conditions!",
636 @sprites["3"].bitmap.width / 2, 2,2,Color.new(248,248,248),
637 Color.new(40,40,40)],
638 ]
639 pbDrawTextPositions(@sprites["3"].bitmap,textpos)
640
641 bit = Bitmap.new("Graphics/Pictures/GTS/Select")
642 @sprites["selection_l"] = IconSprite.new
643 @sprites["selection_l"].bitmap = Bitmap.new(16, 46)
644 @sprites["selection_l"].bitmap.blt(0, 0, bit, Rect.new(0, 0, 16, 16))
645 @sprites["selection_l"].bitmap.blt(0, 23, bit, Rect.new(0, 16, 16, 32))
646
647 @sprites["selection_r"] = IconSprite.new
648 @sprites["selection_r"].bitmap = Bitmap.new(16, 46)
649 @sprites["selection_r"].bitmap.blt(0, 0, bit, Rect.new(16, 0, 32, 16))
650 @sprites["selection_r"].bitmap.blt(0, 23, bit, Rect.new(16, 16, 32, 32))
651
652 @sprites["selection_l"].x = @sprites["#{@index}"].x-2
653 @sprites["selection_l"].y = @sprites["#{@index}"].y-2
654 @sprites["selection_r"].x = @sprites["#{@index}"].x+
655 @sprites["#{@index}"].bitmap.width-18
656 @sprites["selection_r"].y = @sprites["#{@index}"].y-2
657
658 drawWantedData
659 end
660
661 def drawWantedData
662 @sprites["0t"].bitmap.clear
663 s = "????"
664 s = PBSpecies.getName(@wanted_data[0]) if @wanted_data[0] > 0
665 pbSetSystemFont(@sprites["0t"].bitmap)
666 textpos=[
667 [s,350,4,2,Color.new(248,248,248),Color.new(40,40,40)],
668 ]
669 pbDrawTextPositions(@sprites["0t"].bitmap,textpos)
670
671 @sprites["1t"].bitmap.clear
672 g = "Either"
673 g = "Male" if @wanted_data[3] == 0
674 g = "Female" if @wanted_data[3] == 1
675 pbSetSystemFont(@sprites["1t"].bitmap)
676 textpos=[
677 [g,325,2,2,Color.new(248,248,248),Color.new(40,40,40)],
678 ]
679 pbDrawTextPositions(@sprites["1t"].bitmap,textpos)
680
681 @sprites["2t"].bitmap.clear
682 lr = "#{@wanted_data[1]} To #{@wanted_data[2]}"
683 pbSetSystemFont(@sprites["2t"].bitmap)
684 textpos=[
685 [lr,325,4,2,Color.new(248,248,248),Color.new(40,40,40)],
686 ]
687 pbDrawTextPositions(@sprites["2t"].bitmap,textpos)
688 end
689
690 def main
691 Graphics.freeze
692 create_spriteset
693 Graphics.transition
694 loop do
695 Graphics.update
696 Input.update
697 update
698 break if @exit
699 end
700 Graphics.freeze
701 pbDisposeSpriteHash(@sprites)
702 return @wanted_data
703 end
704
705 def update
706 pbUpdateSpriteHash(@sprites)
707
708 @sprites["selection_l"].x = @sprites["#{@index}"].x-2
709 @sprites["selection_l"].y = @sprites["#{@index}"].y-2
710 @sprites["selection_r"].x = @sprites["#{@index}"].x+
711 @sprites["#{@index}"].bitmap.width-18
712 @sprites["selection_r"].y = @sprites["#{@index}"].y-2
713
714 if Input.trigger?(Input::B)
715 pbPlayCancelSE
716 @wanted_data = -1
717 @exit = true
718 end
719
720 if Input.trigger?(Input::C)
721 pbPlayDecisionSE
722 do_command
723 end
724
725 if Input.trigger?(Input::UP)
726 @index -= 1
727 if @index < 0
728 @index = 4
729 end
730 end
731 if Input.trigger?(Input::DOWN)
732 @index += 1
733 if @index > 4
734 @index = 0
735 end
736 end
737 end
738
739 def do_command
740 if @index == 0
741 msg = ""
742 commands2 = ["Cancel"]
743 if GTSSettings::SORT_MODE == "Alphabetical"
744 sL = "A"
745 for i in 0...26
746 s = sL.clone
747 s[0] += i
748 commands2.push(s)
749 end
750 msg = "Choose a Letter."
751 elsif GTSSettings::SORT_MODE == "Regional"
752 dexNames = pbDexNames
753 for i in dexNames
754 if i.is_a?(String)
755 name = i
756 else
757 name = i[0]
758 end
759 commands2.push(name)
760 end
761 msg = "Choose a Pokedex."
762 end
763 c2 = Kernel.pbMessage(msg, commands2, 0, nil, 1)
764 if c2 > 0
765 s = GTS.orderSpecies(commands2[c2])
766 @wanted_data[0] = s[0] if s[0] > 0
767 end
768 elsif @index == 1
769 cmds = ["Either", "Male", "Female"]
770 @wanted_data[3] = Kernel.pbMessage("Which gender do you want", cmds,
771 @wanted_data[3] + 1, nil, @wanted_data[3]+1) - 1
772 elsif @index == 2
773 params=ChooseNumberParams.new
774 params.setRange(1,PBExperience::MAXLEVEL)
775 params.setInitialValue(@wanted_data[1])
776 params.setCancelValue(@wanted_data[1])
777 @wanted_data[1]=Kernel.pbMessageChooseNumber(
778 _INTL("Set the Minimum wanted level."),params)
779 params=ChooseNumberParams.new
780 params.setRange(1,PBExperience::MAXLEVEL)
781 params.setInitialValue(@wanted_data[2])
782 params.setCancelValue(@wanted_data[2])
783 @wanted_data[2]=Kernel.pbMessageChooseNumber(
784 _INTL("Set the Maximum wanted level."),params)
785 elsif @index == 3
786 if @wanted_data[0] > 0
787 @exit = true
788 else
789 pbPlayCancelSE
790 end
791 elsif @index == 4
792 @wanted_data = -1
793 @exit = true
794 end
795 drawWantedData
796 end
797end
798
799########## Scene GTS Main GTS Functionality here.
800class Scene_GTS
801 def initialize
802 @index = 0
803 @exit = false
804 @uploaded = GTSCore.hasPokemonUploaded?
805 end
806
807 def create_spriteset
808 pbDisposeSpriteHash(@sprites) if @sprites
809 @sprites = {}
810 @sprites["background"] = IconSprite.new
811 @sprites["background"].setBitmap("Graphics/Pictures/GTS/Background")
812
813 pbSetSystemFont(@sprites["background"].bitmap)
814 textpos=[
815 ["GTS",50,6,2,Color.new(248,248,248),Color.new(40,40,40)],
816 [" Online ID: #{$PokemonGlobal.onlineID}",350,6,2,Color.new(248,248,248),
817 Color.new(40,40,40)],
818 ]
819 pbDrawTextPositions(@sprites["background"].bitmap,textpos)
820
821 @sprites["0"] = GTS_Button.new(Graphics.width/2, 100, "Seek Pokémon")
822 @sprites["0"].x -= @sprites["0"].bitmap.width / 2
823
824
825 t = "Deposit"
826 t = "Summary" if @uploaded
827
828 @sprites["1"] = GTS_Button.new(Graphics.width/2, 200, t)
829 @sprites["1"].x -= @sprites["1"].bitmap.width / 2
830
831 @sprites["2"] = GTS_Button.new(Graphics.width/2, 300, "Quit")
832 @sprites["2"].x -= @sprites["2"].bitmap.width / 2
833
834 bit = Bitmap.new("Graphics/Pictures/GTS/Select")
835 @sprites["selection_l"] = IconSprite.new
836 @sprites["selection_l"].bitmap = Bitmap.new(16, 46)
837 @sprites["selection_l"].bitmap.blt(0, 0, bit, Rect.new(0, 0, 16, 16))
838 @sprites["selection_l"].bitmap.blt(0, 23, bit, Rect.new(0, 16, 16, 32))
839
840 @sprites["selection_r"] = IconSprite.new
841 @sprites["selection_r"].bitmap = Bitmap.new(16, 46)
842 @sprites["selection_r"].bitmap.blt(0, 0, bit, Rect.new(16, 0, 32, 16))
843 @sprites["selection_r"].bitmap.blt(0, 23, bit, Rect.new(16, 16, 32, 32))
844
845 @sprites["selection_l"].x = @sprites["#{@index}"].x-2
846 @sprites["selection_l"].y = @sprites["#{@index}"].y-2
847 @sprites["selection_r"].x = @sprites["#{@index}"].x+
848 @sprites["0"].bitmap.width-18
849 @sprites["selection_r"].y = @sprites["#{@index}"].y-2
850
851 end
852
853 def main
854 Graphics.freeze
855 create_spriteset
856 Graphics.transition
857 loop do
858 break if @exit
859 Graphics.update
860 Input.update
861 update
862 end
863 Graphics.freeze
864 pbDisposeSpriteHash(@sprites)
865 Graphics.transition
866 end
867
868 def update
869 pbUpdateSpriteHash(@sprites)
870 @sprites["selection_l"].x = @sprites["#{@index}"].x-2
871 @sprites["selection_l"].y = @sprites["#{@index}"].y-2
872 @sprites["selection_r"].x = @sprites["#{@index}"].x+
873 @sprites["0"].bitmap.width-18
874 @sprites["selection_r"].y = @sprites["#{@index}"].y-2
875
876 if Input.trigger?(Input::UP)
877 @index -= 1
878 if @index < 0
879 @index = 2
880 end
881 end
882
883 if Input.trigger?(Input::DOWN)
884 @index += 1
885 if @index > 2
886 @index = 0
887 end
888 end
889
890 if Input.trigger?(Input::B)
891 choices = []
892 choices.push(_INTL("Yes"))
893 choices.push(_INTL("No"))
894 command=Kernel.pbMessage("Are you sure you want the quit GTS?",choices,choices.length)
895 if command == 0
896 pbBGMFade(0.8)
897 @exit = true
898 pbWait(32)
899 $game_map.autoplay
900 end
901 end
902
903 if Input.trigger?(Input::C)
904 pbPlayDecisionSE
905 do_command
906 end
907
908 end
909
910 def do_command
911 if @index == 0
912 Graphics.freeze
913 scene = GTSSearchMethod.new
914 @sprites["background"].dispose
915 data = scene.main
916 create_spriteset
917 Graphics.transition
918 elsif @index == 1
919 if @uploaded
920 GTS.summary
921 @uploaded = GTSCore.hasPokemonUploaded?
922 create_spriteset
923 else
924 pbFadeOutIn(99999){
925 scene=PokemonStorageScene.new
926 screen=PokemonStorageScreen.new(scene,$PokemonStorage)
927 $choice = screen.pbChoosePokemon
928 }
929 choice = $choice
930 return false if choice == nil
931 pkmn = $Trainer.party[choice[1]]
932 pkmn = $PokemonStorage[choice[0]][choice[1]] if choice[0] >= 0
933 if choice[0] == -1
934 if $Trainer.party.length == 1
935 Kernel.pbMessage(_INTL("You cannot deposit your last Pokémon in "+
936 "your party!"))
937 return
938 end
939 end
940 Graphics.freeze
941 scene = GTSWantedData.new
942 @sprites["background"].dispose
943 data = scene.main
944 create_spriteset
945 Graphics.transition
946 if GTSCore.uploadPokemon(pkmn, data)
947 $PokemonGlobal.onlinePokemon = pkmn.clone
948 if choice[0] >= 0
949 $PokemonStorage[choice[0]][choice[1]] = nil
950 else
951 pbRemovePokemonAt(choice[1])
952 end
953 pbSave
954 @uploaded = true
955 create_spriteset
956 end
957 end
958 else
959 choices = []
960 choices.push(_INTL("Yes"))
961 choices.push(_INTL("No"))
962 command=Kernel.pbMessage("Are you sure you want the quit GTS?",choices,choices.length)
963 if command == 0
964 pbBGMFade(0.8)
965 @exit = true
966 pbWait(32)
967 $game_map.autoplay
968 end
969 end
970 end
971end
972
973################################################################################
974# GTS Summary Scenes
975# By A Dork of Pork
976# Summary Modifications for GTS
977################################################################################
978
979class PokemonSummary
980
981 def pbStartGTSScreen(party,partyindex)
982 @scene.pbStartScene(party,partyindex)
983 ret=@scene.pbGTSScene
984 @scene.pbEndScene
985 return ret
986 end
987
988 def pbStartGTSWantedScreen(party,partyindex)
989 @scene.pbStartGTSWantedScene(party)
990 ret=@scene.pbGTSWantedScene(party)
991 @scene.pbEndScene
992 return ret
993 end
994
995end
996
997class PokemonSummaryScene
998
999 def pbStartGTSWantedScene(wantedData)
1000 @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
1001 @viewport.z=99999
1002 @party=nil
1003 @partyindex=0
1004 @pokemon=nil
1005 @sprites={}
1006 pk = PokeBattle_Pokemon.new(wantedData[0], 1)
1007 @typebitmap=AnimatedBitmap.new(_INTL("Graphics/Pictures/types"))
1008 @sprites["background"]=IconSprite.new(0,0,@viewport)
1009 @sprites["overlay"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
1010 @sprites["pokemon"]=PokemonSprite.new(@viewport)
1011 @sprites["pokemon"].setPokemonBitmap(pk)
1012 @sprites["pokemon"].mirror=false
1013 @sprites["pokemon"].color=Color.new(0,0,0,0)
1014 pbPositionPokemonSprite(@sprites["pokemon"],104,206)
1015 @sprites["pokeicon"]=PokemonBoxIcon.new(pk,@viewport)
1016 @sprites["pokeicon"].x=14
1017 @sprites["pokeicon"].y=52
1018 @sprites["pokeicon"].mirror=false
1019 @sprites["pokeicon"].visible=false
1020 @sprites["movepresel"]=MoveSelectionSprite.new(@viewport)
1021 @sprites["movepresel"].visible=false
1022 @sprites["movepresel"].preselected=true
1023 @sprites["movesel"]=MoveSelectionSprite.new(@viewport)
1024 @sprites["movesel"].visible=false
1025 @page=0
1026 drawPageOneGTSWanted(wantedData)
1027 pbFadeInAndShow(@sprites) { pbUpdate }
1028 end
1029
1030 def pbGTSScene
1031 pbPlayCry(@pokemon)
1032 loop do
1033 Graphics.update
1034 Input.update
1035 pbUpdate
1036 if Input.trigger?(Input::B)
1037 if Kernel.pbConfirmMessage(_INTL("Stop looking for a Pokémon?"))
1038 return false
1039 end
1040 end
1041 dorefresh=false
1042 if Input.trigger?(Input::C)
1043 if Kernel.pbConfirmMessage(_INTL("Is this the Pokémon you want?"))
1044 break
1045 end
1046 end
1047 if Input.trigger?(Input::UP) && @partyindex>0
1048 pbGoToPrevious
1049 @pokemon=@party[@partyindex]
1050 @sprites["pokemon"].setPokemonBitmap(@pokemon)
1051 @sprites["pokemon"].color=Color.new(0,0,0,0)
1052 pbPositionPokemonSprite(@sprites["pokemon"],104,206)
1053 dorefresh=true
1054 pbPlayCry(@pokemon)
1055 end
1056 if Input.trigger?(Input::DOWN) && @partyindex<@party.length-1
1057 pbGoToNext
1058 @pokemon=@party[@partyindex]
1059 @sprites["pokemon"].setPokemonBitmap(@pokemon)
1060 @sprites["pokemon"].color=Color.new(0,0,0,0)
1061 pbPositionPokemonSprite(@sprites["pokemon"],104,206)
1062 dorefresh=true
1063 pbPlayCry(@pokemon)
1064 end
1065 if Input.trigger?(Input::LEFT) && !@pokemon.egg?
1066 oldpage=@page
1067 @page-=1
1068 @page=0 if @page<0
1069 @page=5 if @page>5
1070 dorefresh=true
1071 if @page!=oldpage # Move to next page
1072 pbPlayCursorSE()
1073 dorefresh=true
1074 end
1075 end
1076 if Input.trigger?(Input::RIGHT) && !@pokemon.egg?
1077 oldpage=@page
1078 @page+=1
1079 @page=0 if @page<0
1080 @page=5 if @page>5
1081 if @page!=oldpage # Move to next page
1082 pbPlayCursorSE()
1083 dorefresh=true
1084 end
1085 end
1086 if dorefresh
1087 case @page
1088 when 0
1089 drawPageOne(@pokemon)
1090 when 1
1091 drawPageTwo(@pokemon)
1092 when 2
1093 drawPageThree(@pokemon)
1094 when 3
1095 drawPageFour(@pokemon)
1096 when 4
1097 drawPageFive(@pokemon)
1098 when 5
1099 drawPageSix(@pokemon)
1100 end
1101 end
1102 end
1103 return @partyindex
1104 end
1105
1106 def pbGTSWantedScene(wantedData)
1107 pbPlayCry(wantedData[0])
1108 loop do
1109 Graphics.update
1110 Input.update
1111 pbUpdate
1112 if Input.trigger?(Input::B)
1113 if Kernel.pbConfirmMessage(_INTL("Decline this trade?"))
1114 return false
1115 end
1116 end
1117 dorefresh=false
1118 if Input.trigger?(Input::C)
1119 if Kernel.pbConfirmMessage(_INTL("Accept this trade?"))
1120 return true
1121 end
1122 end
1123 if dorefresh
1124 drawPageOneGTSWanted(wantedData)
1125 end
1126 end
1127 end
1128
1129 def drawPageOneGTSWanted(wantedData)
1130 pokemon = PokeBattle_Pokemon.new(wantedData[0], 1)
1131 overlay=@sprites["overlay"].bitmap
1132 overlay.clear
1133 bit = "Graphics/Pictures/summaryGTS"
1134 bit = "Graphics/Pictures/summary1" if !pbResolveBitmap(bit)
1135 g = "Either"
1136 g = "Male" if wantedData[3] == 0
1137 g = "Female" if wantedData[3] == 1
1138 @sprites["background"].setBitmap(bit)
1139 base=Color.new(248,248,248)
1140 shadow=Color.new(104,104,104)
1141 numberbase=Color.new(64,64,64)
1142 numbershadow=Color.new(176,176,176)
1143 pbSetSystemFont(overlay)
1144 pokename = PBSpecies.getName(wantedData[0])
1145 imagepos=[]
1146 textpos=[
1147 [_INTL("Wanted Pokémon"),26,16,0,base,shadow],
1148 [_ISPRINTF("Dex No."),238,80,0,base,shadow],
1149 [_ISPRINTF("{1:03d}",wantedData[0]),435,80,2,numberbase,numbershadow],
1150 [_INTL("Species"),238,112,0,base,shadow],
1151 [_INTL("{1}",pokename),435,112,2,Color.new(64,64,64),Color.new(176,176,176)],
1152 [_INTL("Type"),238,144,0,base,shadow],
1153 [_INTL("Level"),238,176,0,base,shadow],
1154 [_INTL("{1} to {2}",wantedData[1], wantedData[2]),390,176,0,
1155 Color.new(64,64,64),Color.new(176,176,176)],
1156 [_INTL("Gender"),238,208,0,base,shadow],
1157 [_INTL("{1}",g),435,208,2,Color.new(64,64,64),Color.new(176,176,176)],
1158 ]
1159 pbDrawTextPositions(overlay,textpos)
1160 type1rect=Rect.new(0,pokemon.type1*28,64,28)
1161 type2rect=Rect.new(0,pokemon.type2*28,64,28)
1162 if pokemon.type1==pokemon.type2
1163 overlay.blt(402,146,@typebitmap.bitmap,type1rect)
1164 else
1165 overlay.blt(370,146,@typebitmap.bitmap,type1rect)
1166 overlay.blt(436,146,@typebitmap.bitmap,type2rect)
1167 end
1168 end
1169end
1170
1171################################################################################
1172# GTS Core
1173# By A Dork of Pork
1174# Core GTS functions (Basically this is what you need to make a complete GTS
1175# system)
1176################################################################################
1177
1178module GTSCore
1179
1180 # Tests connection to the server (not used anymore but kept for possible use)
1181 def self.testConnection
1182 x = execute("test")
1183 return x != ""
1184 rescue
1185 return false
1186 end
1187
1188 # Our main execution method, since I'm too lazy to write GTSSettings::URL a lot
1189 def self.execute(action, data={})
1190 data["action"]=action
1191 return pbPostData(GTSSettings::URL+GTSSettings::GAMEID.to_s, data)
1192 end
1193
1194 # gets a new online ID from the server
1195 def self.getOnlineID
1196 r = execute("getOnlineID")
1197 return r.to_i
1198 end
1199
1200 # registers our new online ID to the server
1201 def self.setOnlineID(id)
1202 r = execute("setOnlineID", {"id" => id})
1203 ret = r == "success"
1204 print "GTS Error: #{r}" if !ret && $DEBUG
1205 return ret
1206 end
1207
1208 # checks whether you have a pokemon uploaded in the server
1209 def self.hasPokemonUploaded?(id=$PokemonGlobal.onlineID)
1210 r = execute("hasPokemonUploaded", {"id" => id})
1211 e = !(r == "yes" || r == "no")
1212 print "GTS Error: #{r}" if e && $DEBUG
1213 return r == "yes"
1214 end
1215
1216 # sets the pokemon with the given online ID to taken
1217 def self.setTaken(id)
1218 r = execute("setTaken", {"id" => id})
1219 e = !r == "success"
1220 print "GTS Error: #{r}" if e && $DEBUG
1221 return r == "success"
1222 end
1223
1224 # checks wether the pokemon with the give online ID is taken
1225 def self.isTaken(id=$PokemonGlobal.onlineID)
1226 r = execute("isTaken", {"id" => id})
1227 e = !(r == "yes" || r == "no")
1228 print "GTS Error: #{r}" if e && $DEBUG
1229 return r == "yes"
1230 end
1231
1232 # uploads a pokemon to the server
1233 def self.uploadPokemon(pokemon, *wantedData)
1234 if wantedData[0].is_a?(Array)
1235 wantedData = wantedData[0]
1236 end
1237 pokemon.game_code = GTSSettings::GAME_CODE
1238 r = execute("uploadPokemon", {"id" => $PokemonGlobal.onlineID,
1239 "pokemon" => pokemon, "species" => pokemon.species,"level" => pokemon.level,
1240 "gender" => pokemon.gender, "Wspecies" => wantedData[0],
1241 "WlevelMin" => wantedData[1], "WlevelMax" => wantedData[2],
1242 "Wgender" => wantedData[3]})
1243 ret = r == "success"
1244 print "GTS Error: #{r}" if !ret && $DEBUG
1245 return ret
1246 end
1247
1248 # uploads the newly traded pokemon to the given online ID to the server
1249 def self.uploadNewPokemon(id, pokemon)
1250 pokemon.game_code = GTSSettings::GAME_CODE
1251 r = execute("uploadNewPokemon", {"id" => id, "pokemon" => pokemon})
1252 ret = r == "success"
1253 print "GTS Error: #{r}" if !ret && $DEBUG
1254 return ret
1255 end
1256
1257 # downloads a pokemon string with the given online ID
1258 def self.downloadPokemon(id)
1259 r = execute("downloadPokemon", {"id" => id})
1260 ret = r != ""
1261 print "GTS Error: #{r}" if !ret && $DEBUG
1262 return ret ? r : false
1263 end
1264
1265 # downloads the wanted data with the given online ID
1266 def self.downloadWantedData(id)
1267 r = execute("downloadWantedData", {"id" => id})
1268 ret = r != ""
1269 print "GTS Error: #{r}" if !ret && $DEBUG
1270 return ret ? r.split(",") : false
1271 end
1272
1273 # deletes your current pokemon from the server
1274 def self.deletePokemon(withdraw = true)
1275 r = execute("deletePokemon", {"id" => $PokemonGlobal.onlineID,
1276 "withdraw" => withdraw ? "y" : "n"})
1277 ret = r == "success"
1278 print "GTS Error: #{r}" if !ret && $DEBUG
1279 return ret
1280 end
1281
1282 # gets a list of online IDs where the wanted data match up
1283 def self.getPokemonList(*wantedData)
1284 if wantedData[0].is_a?(Array)
1285 wantedData = wantedData[0]
1286 end
1287 r = execute("getPokemonList", {"id" => $PokemonGlobal.onlineID,
1288 "species" => wantedData[0], "levelMin" => wantedData[1],
1289 "levelMax" => wantedData[2], "gender" => wantedData[3]})
1290 return [r] if r == "nothing"
1291 if (r.include?("/,,,/"))
1292 return r.split("/,,,/")
1293 else
1294 return r.split(",")
1295 end
1296 end
1297
1298 # Reverse Lookup pokemon
1299 def self.getPokemonListFromWanted(pokemon)
1300 r = execute("getPokemonListFromWanted", {"id" => $PokemonGlobal.onlineID,
1301 "species" => pokemon.species, "level" => pokemon.level,
1302 "gender" => pokemon.gender})
1303 return [r] if r == "nothing"
1304 if (r.include?("/,,,/"))
1305 return r.split("/,,,/")
1306 else
1307 return r.split(",")
1308 end
1309 end
1310
1311 # installs the MYSQL tables in the server
1312 def self.install
1313 return execute("createTables")
1314 end
1315end
1316
1317################################################################################
1318# Addons
1319# By A Dork of Pork (pokemon to string and string to pokemon based from Maruno's
1320# MysteryGift packer/unpacker)
1321# Addons to other scripts
1322################################################################################
1323class PokemonGlobalMetadata
1324 attr_accessor :onlineID
1325 attr_accessor :onlinePokemon
1326 attr_accessor :keepGTS
1327
1328 alias gts_initialize initialize
1329 # Keep your old online ID when doing newgame to prevent "spamming" the server
1330 def initialize
1331 gts_initialize
1332
1333 return if !GTSSettings::KEEP_OLD_IDS # return before we get your old ID back
1334
1335 save = RTP.getSaveFileName("Game.rxdata")
1336 if FileTest.exist?(save)
1337 file = File.open(save, "rb")
1338 Marshal.load(file)
1339 Marshal.load(file)
1340 Marshal.load(file)
1341 Marshal.load(file)
1342 Marshal.load(file)
1343 Marshal.load(file)
1344 Marshal.load(file)
1345 Marshal.load(file)
1346 Marshal.load(file)
1347 Marshal.load(file)
1348 Marshal.load(file)
1349 pg = Marshal.load(file)
1350 file.close
1351 @onlineID = pg.rawOnlineID
1352 end
1353 @keepGTS = false
1354 end
1355
1356 def onlineID
1357 if @onlineID == nil
1358 id = GTSCore.getOnlineID
1359 if id == 0
1360 raise("GTS Error: Cannot get Online ID for GTS!")
1361 end
1362 if !GTSCore.setOnlineID(id)
1363 raise("GTS Error: Cannot set Online ID for GTS!")
1364 end
1365 @onlineID = id
1366 end
1367 return @onlineID
1368 end
1369
1370 # The rawOnlineID doesn't have the checksum to get a new ID, this is used for
1371 # when you do new game.
1372 def rawOnlineID
1373 if @onlineID
1374 return @onlineID
1375 else
1376 return nil
1377 end
1378 end
1379end
1380
1381# Add a game_code field and to_s method to the pokemon class
1382class PokeBattle_Pokemon
1383 attr_accessor :game_code
1384 def to_s
1385 ret=[Zlib::Deflate.deflate(Marshal.dump(self))].pack("m")
1386 return ret
1387 end
1388end
1389
1390# Add a to_pokemon method to the string class
1391class String
1392 def to_pokemon
1393 ret=Marshal.restore(Zlib::Inflate.inflate(unpack("m")[0]))
1394 return ret
1395 end
1396end
1397
1398# Delete Pokemon if we began a newgame
1399alias pbSaveGTS pbSave
1400def pbSave(safesave=false)
1401 if GTSCore.testConnection
1402 if !$PokemonGlobal.keepGTS
1403 if GTSCore.deletePokemon
1404 $PokemonGlobal.keepGTS=true
1405 end
1406 end
1407 end
1408 pbSaveGTS(safesave)
1409end