BotZoneV3.2

I updated the code with BotZone V3.2 because I found a newer ver
This commit is contained in:
Pawel Orzech 2019-11-09 20:56:20 +00:00
parent 7b562bdb14
commit 720d435c05
34 changed files with 1637 additions and 8760 deletions

View file

@ -1,223 +0,0 @@
from colorama import init, Fore, Back, Style
import commands
import config
import sys
import os
import webbrowser
# Coloroma autoreset
init(autoreset=True)
if not os.path.isdir("Saves"):
try:
os.mkdir('Saves')
os.mkdir('Saves/ios')
os.mkdir('Saves/android')
os.mkdir('Saves/Jp')
os.mkdir('Saves/Jp/ios')
os.mkdir('Saves/Jp/android')
os.mkdir('Saves/fresh')
os.mkdir('Saves/fresh/ios')
os.mkdir('Saves/fresh/android')
except:
print(Fore.RED + Style.BRIGHT + 'Unable to create saves file')
while True:
# Decide which client to use.
print(' ')
print(" ___ __ ____ ")
print(" / _ )___ / //_ / ___ ___ ___ ")
print(" / _ / _ \/ __// /_/ _ \/ _ \/ -_)")
print("/____/\___/\__//___/\___/_//_/\__/")
print('Choose a version')
print('---------------------------------')
print(' ')
while True:
print('Which version? (' + 'Jp: 1 ' + 'or ' 'Global: 2' ')',end='')
client = input(" ")
if client.lower() == '1':
config.client = 'japan'
while True:
print(" ___ __ ____ ")
print(" / _ )___ / //_ / ___ ___ ___ ")
print(" / _ / _ \/ __// /_/ _ \/ _ \/ -_)")
print("/____/\___/\__//___/\___/_//_/\__/")
print("-----------------------------------")
print("Possible by SomeNi")
print(" ")
print("[ Status ] -> You're curently on JP")
print(" ")
print("[ 0 ] -> New Account")
print("[ 1 ] -> Transfer Account")
print("[ 2 ] -> Load From Save")
print("[ 3 ] -> Daily Logins")
print("[ 4 ] -> Update Both DataBase")
print("[ 5 ] -> BotZone Discord Link")
print("[ 6 ] -> Update Glb DataBase")
print("[ 7 ] -> Update JP DataBase")
print(" ")
command = input('Enter your choice: ')
if command == '0':
print(' ')
config.identifier = commands.signup()
commands.Jp_save_account()
config.access_token, config.secret = commands.signin(config.identifier)
commands.tutorial()
commands.daily_login()
break
elif command == '1':
print(' ')
commands.Jp_transfer_account()
commands.daily_login()
break
elif command == '2':
print(' ')
commands.Jp_load_account()
commands.daily_login()
commands.accept_gifts()
commands.accept_missions()
break
elif command == '3':
print('')
commands.Jp_bulk_daily_logins()
break
elif command == '4':
print('')
commands.db_download()
elif command == '6':
commands.glb_db_download()
#elif command == '7':
# commands.jp_db_download()
elif command == '5':
webbrowser.open(commands.discordurl, new=0, autoraise=True)
elif command == 'exit':
exit()
else:
print(Fore.RED + Style.BRIGHT + "Command not understood")
# User commands.
while True:
print('---------------------------------')
print(
Fore.CYAN + Style.BRIGHT + "Type" + Fore.YELLOW + Style.BRIGHT + " 'help'" + Fore.CYAN + Style.BRIGHT + " to view all commands.")
# Set up comma separated chain commands. Handled via stdin
try:
command = input()
except:
sys.stdin = sys.__stdin__
command = input()
if command == 'exit':
break
# Pass command to command executor and handle keyboard interrupts.
try:
commands.user_command_executor(command)
except KeyboardInterrupt:
print(Fore.CYAN + Style.BRIGHT + 'User interrupted process.')
except Exception as e:
print(Fore.RED + Style.BRIGHT + repr(e))
break
elif client.lower() == '2':
config.client = 'global'
print(' ')
while True:
print(" ___ __ ____ ")
print(" / _ )___ / //_ / ___ ___ ___ ")
print(" / _ / _ \/ __// /_/ _ \/ _ \/ -_)")
print("/____/\___/\__//___/\___/_//_/\__/")
print("-----------------------------------")
print(" ")
print("[ Status ] -> You're curently on Global")
print(" ")
print("[ 0 ] -> New Account")
print("[ 1 ] -> Transfer Account")
print("[ 2 ] -> Load From Save")
print("[ 3 ] -> Load Fresh Account")
print("[ 4 ] -> New Fresh Account")
print("[ 5 ] -> Update Both DataBase")
print("[ 6 ] -> BotZone Discord Link")
print("[ 7 ] -> Update Glb DataBase")
print("[ 8 ] -> Update JP DataBase")
print(" ")
command = input('Enter your choice: ')
if command == '0':
print(' ')
config.identifier = commands.signup()
commands.save_account()
config.access_token, config.secret = commands.signin(config.identifier)
commands.tutorial()
commands.daily_login()
break
elif command == '1':
print(' ')
commands.transfer_account()
commands.daily_login()
break
elif command == '2':
print(' ')
commands.load_account()
commands.daily_login()
commands.accept_gifts()
commands.accept_missions()
break
elif command == '4':
print(' ')
config.identifier = commands.signup()
commands.fresh_save_account()
config.access_token, config.secret = commands.signin(config.identifier)
commands.tutorial()
commands.daily_login()
break
elif command == '3':
print(' ')
commands.fresh_load_account()
commands.daily_login()
commands.accept_gifts()
commands.accept_missions()
break
elif command == '5':
print(' ')
commands.db_download()
elif command == '7':
commands.glb_db_download()
# elif command == '8':
# commands.jp_db_download()
elif command == '6':
webbrowser.open(commands.discordurl, new=0, autoraise=True)
elif command == 'exit':
exit()
else:
print(Fore.RED + Style.BRIGHT + "Command not understood")
# User commands.
while True:
print('---------------------------------')
print(
"Type" + " 'help'" + " to view all commands.")
# Set up comma separated chain commands. Handled via stdin
try:
command = input()
except:
sys.stdin = sys.__stdin__
command = input()
if command == 'exit':
break
# Pass command to command executor and handle keyboard interrupts.
try:
commands.user_command_executor(command)
except KeyboardInterrupt:
print(Fore.CYAN + Style.BRIGHT + 'User interrupted process.')
except Exception as e:
print(Fore.RED + Style.BRIGHT + repr(e))
break
else:
print(Fore.RED + Style.BRIGHT + "Command not understood")

976
JAMIRU_stage_id.txt Executable file
View file

@ -0,0 +1,976 @@
ID: 999999 Name: Tuning Quest Area: 999
ID: 946005 Name: PHY Hidden Potential Event Area: 946
ID: 946004 Name: STR Hidden Potential Event Area: 946
ID: 946003 Name: INT Hidden Potential Event Area: 946
ID: 946002 Name: TEQ Hidden Potential Event Area: 946
ID: 946001 Name: AGL Hidden Potential Event Area: 946
ID: 944001 Name: PHY Hidden Potential Event Area: 944
ID: 943001 Name: STR Hidden Potential Event Area: 943
ID: 942001 Name: INT Hidden Potential Event Area: 942
ID: 941001 Name: TEQ Hidden Potential Event Area: 941
ID: 940001 Name: AGL Hidden Potential Event Area: 940
ID: 711003 Name: Dragon Stone Stage Area: 711
ID: 711002 Name: Potential Orb Stage Area: 711
ID: 711001 Name: Zeni Stage Area: 711
ID: 710020 Name: "Potara" Only Area: 710
ID: 710019 Name: "Majin Buu Saga" Only Area: 710
ID: 710018 Name: "Realm of Gods" Only Area: 710
ID: 710017 Name: "Resurrected Warriors" Only Area: 710
ID: 710016 Name: "Hybrid Saiyans" Only Area: 710
ID: 710015 Name: "Peppy Gals" Only Area: 710
ID: 710014 Name: "Shadow Dragon Saga" Only Area: 710
ID: 710013 Name: "Fusion" Only Area: 710
ID: 710012 Name: Extreme Class Only Area: 710
ID: 710011 Name: Super Class Only Area: 710
ID: 710010 Name: [VS. Super PHY] Super Battle Road Area: 710
ID: 710009 Name: [VS. Extreme PHY] Super Battle Road Area: 710
ID: 710008 Name: [VS. Super STR] Super Battle Road Area: 710
ID: 710007 Name: [VS. Extreme STR] Super Battle Road Area: 710
ID: 710006 Name: [VS. Super INT] Super Battle Road Area: 710
ID: 710005 Name: [VS. Extreme INT] Super Battle Road Area: 710
ID: 710004 Name: [VS. Super TEQ] Super Battle Road Area: 710
ID: 710003 Name: [VS. Extreme TEQ] Super Battle Road Area: 710
ID: 710002 Name: [VS. Super AGL] Super Battle Road Area: 710
ID: 710001 Name: [VS. Extreme AGL] Super Battle Road Area: 710
ID: 704003 Name: ?????? Area: 704
ID: 704002 Name: ??????? Area: 704
ID: 704001 Name: ?????? Area: 704
ID: 703004 Name: Final Stage Area: 703
ID: 703003 Name: Semifinal Stage Area: 703
ID: 703002 Name: 2nd Preliminary Stage Area: 703
ID: 703001 Name: Preliminary Stage Area: 703
ID: 702003 Name: Final Stage Area: 702
ID: 702002 Name: Semifinal Stage Area: 702
ID: 702001 Name: Preliminary Stage Area: 702
ID: 701007 Name: Dokkan Event Boss Rush 7 Area: 701
ID: 701006 Name: Dokkan Event Boss Rush 6 Area: 701
ID: 701005 Name: Dokkan Event Boss Rush 5 Area: 701
ID: 701004 Name: Dokkan Event Boss Rush 4 Area: 701
ID: 701003 Name: Dokkan Event Boss Rush 3 Area: 701
ID: 701002 Name: Dokkan Event Boss Rush 2 Area: 701
ID: 701001 Name: Dokkan Event Boss Rush 1 Area: 701
ID: 604003 Name: Super Saiyan Awakens Area: 604
ID: 604002 Name: Vegeta's Confidence Area: 604
ID: 604001 Name: Prince's Pride Area: 604
ID: 603003 Name: Protector of Future Peace Area: 603
ID: 603002 Name: A Gift from Time Traveling Area: 603
ID: 603001 Name: "Hope" Returns Area: 603
ID: 602004 Name: [VS. Extreme AGL] Summit of the Universe Area: 602
ID: 602003 Name: [VS. Extreme STR] Summit of the Universe Area: 602
ID: 602002 Name: True Fear Area: 602
ID: 602001 Name: Defying the Emperor Area: 602
ID: 601004 Name: [VS. Super PHY] Transcended Warrior Area: 601
ID: 601003 Name: [VS. Super TEQ] Transcended Warrior Area: 601
ID: 601002 Name: The Real Battle Area: 601
ID: 601001 Name: Challenging the Legend Area: 601
ID: 552001 Name: Go! Warriors of the New Generation! Area: 552
ID: 551001 Name: Ever-Evolving Prince Area: 551
ID: 550001 Name: Full-Power Showdown! Area: 550
ID: 549001 Name: The Omnipotent Saiyan Warrior Area: 549
ID: 548001 Name: The Greatest Saiyan Adversary Area: 548
ID: 547001 Name: The Deadliest Assassin Area: 547
ID: 546001 Name: Infinite Mechanical Power Area: 546
ID: 545001 Name: Ever-Evolving Evil Area: 545
ID: 544001 Name: Ever-Evolving Power Area: 544
ID: 543001 Name: Superb Ranger Area: 543
ID: 542001 Name: Transcend Super Saiyan 4! Area: 542
ID: 541001 Name: A Heart Filled With Hope Area: 541
ID: 540002 Name: Confronting the Strongest of All Universes Area: 540
ID: 540001 Name: Jiren the Grey Area: 540
ID: 539001 Name: Arrival of the Universe-Crusher Area: 539
ID: 538001 Name: Kaboom! Ultra Instinct Area: 538
ID: 537001 Name: The Ultimate Pair of the Present World! Area: 537
ID: 536001 Name: The Ultimate Pair of the Otherworld! Area: 536
ID: 535002 Name: Phantom Majin Resurrected! Area: 535
ID: 535001 Name: Mysterious Hero Area: 535
ID: 534001 Name: The Unknown Battle Area: 534
ID: 533002 Name: The True Golden Frieza Area: 533
ID: 533001 Name: Evil Emperor: 24-Hour Revival Area: 533
ID: 532001 Name: The Ultimate Super Gogeta Area: 532
ID: 531001 Name: All-Time Nastiest Evolution Area: 531
ID: 530001 Name: Hell's Ultimate Weapon Area: 530
ID: 529001 Name: The Saiyan Veiled with Mysteries Area: 529
ID: 528001 Name: Mighty Warrior: 24-Hour Revival Area: 528
ID: 527001 Name: Battle of the Strongest Area: 527
ID: 526002 Name: The Unrivaled Super Saiyan 4! Area: 526
ID: 526001 Name: The Crimson Flash! Super Saiyan 4! Area: 526
ID: 525002 Name: The Supreme Super Saiyan 4! Area: 525
ID: 525001 Name: The Scarlet Hero! Super Saiyan 4! Area: 525
ID: 524002 Name: Battle for Honor and Pride Area: 524
ID: 524001 Name: The Epic Battle Begins!! Area: 524
ID: 523002 Name: Last Judgment...Or Last Hope Area: 523
ID: 523001 Name: The Ultimate Power of a God Area: 523
ID: 522001 Name: A New Hope Area: 522
ID: 521001 Name: Bespectacled Super Girl Area: 521
ID: 520002 Name: Searing Rose-Colored Fury Area: 520
ID: 520001 Name: Rose-Tinted Plot Area: 520
ID: 519002 Name: Sublime Blue! Area: 519
ID: 519001 Name: Fusion in Blue Area: 519
ID: 518003 Name: Black Harbinger of Destruction Area: 518
ID: 518002 Name: Dark Nightmare Area: 518
ID: 518001 Name: A Mysterious Dark Foe Area: 518
ID: 517003 Name: Countdown to the Crash Area: 517
ID: 517002 Name: The Strongest Shadow Dragon Area: 517
ID: 517001 Name: The Unprecedented Foe Area: 517
ID: 516001 Name: Emperor's Obsession Area: 516
ID: 515003 Name: The Strongest Majin is Born! Area: 515
ID: 515002 Name: Horrendous Majin's Onslaught Area: 515
ID: 515001 Name: Majin's Transformation Area: 515
ID: 514001 Name: Ceaseless Combat Area: 514
ID: 513003 Name: One Powerful Super Fusion! Area: 513
ID: 513002 Name: Super Gotenks! Area: 513
ID: 513001 Name: Fusion of Hope! Area: 513
ID: 512003 Name: Ultimate Splendor Area: 512
ID: 512002 Name: Meet Vegito Area: 512
ID: 512001 Name: Miraculous Fusion Area: 512
ID: 511002 Name: God of Destruction's Wrath Area: 511
ID: 511001 Name: God of Destruction's Whim Area: 511
ID: 510002 Name: The Most Powerful Blow Area: 510
ID: 510001 Name: Saiyan's Pride Area: 510
ID: 509002 Name: Yamcha's Premonition Area: 509
ID: 509001 Name: Yamcha is Beaten! Area: 509
ID: 508003 Name: The Ultimate Form Area: 508
ID: 508002 Name: The Extreme Force Area: 508
ID: 508001 Name: Unawakened Ability Area: 508
ID: 507002 Name: Full-Power Final Battle Area: 507
ID: 507001 Name: Fear Beyond Death Area: 507
ID: 506003 Name: Overwhelming Force of Evil! Area: 506
ID: 506002 Name: Demon of War Area: 506
ID: 506001 Name: Innocent Monstrosity Area: 506
ID: 505003 Name: Fusion Reborn! Area: 505
ID: 505002 Name: Peerless Warrior's Victory Area: 505
ID: 505001 Name: An Incredible Failure Area: 505
ID: 504002 Name: Ultimate Finishing Move Area: 504
ID: 504001 Name: Limit-Breaking Saiyan Area: 504
ID: 503003 Name: Regression to Evil Area: 503
ID: 503002 Name: Never-Ending Nightmare Area: 503
ID: 503001 Name: Strange Battle Area: 503
ID: 502003 Name: Waking Nightmare Area: 502
ID: 502002 Name: The Extreme Terror Area: 502
ID: 502001 Name: The Cell Games Area: 502
ID: 501003 Name: The Demon Returns Area: 501
ID: 501002 Name: Awakening Beyond Area: 501
ID: 501001 Name: Prologue to Ruin Area: 501
ID: 422002 Name: The Time Patrol Warrior Area: 422
ID: 422001 Name: The Space-Time Traveler Area: 422
ID: 421002 Name: Proof of Genius Area: 421
ID: 421001 Name: Prodigy Prince Area: 421
ID: 420002 Name: The Strongest Space Pirate Area: 420
ID: 420001 Name: The Ancient Space Pirate Area: 420
ID: 419001 Name: Guardian of the Sanctuary Area: 419
ID: 418003 Name: Heroes Get Exhausted!? Area: 418
ID: 418002 Name: A Pudgy Hero? Area: 418
ID: 418001 Name: A Fusion of Super Forces!? Area: 418
ID: 417002 Name: Proud Martial Artist Area: 417
ID: 417001 Name: Full-Hearted Fighter Area: 417
ID: 416002 Name: The Power of Piccolo Reborn Area: 416
ID: 416001 Name: Divine Demonic Namekian Warrior Area: 416
ID: 415002 Name: Earth-Shaking Power Area: 415
ID: 415001 Name: Gentle Destroyer Area: 415
ID: 414002 Name: Warrior of Hope Area: 414
ID: 414001 Name: The Time-Traveling Warrior Area: 414
ID: 413002 Name: Behind the Mask Area: 413
ID: 413001 Name: The Masked Martial Artist Area: 413
ID: 412002 Name: True Strength Area: 412
ID: 412001 Name: The Best Fighter of West Quadrant Area: 412
ID: 411002 Name: An Unexpectedly Powerful Man! Area: 411
ID: 411001 Name: The Mysterious Mask Area: 411
ID: 410001 Name: King Piccolo's Successor Area: 410
ID: 409002 Name: An Invasion Bet on Primacy Area: 409
ID: 409001 Name: Savage Sovereign Area: 409
ID: 408002 Name: Dignity of a Clan Area: 408
ID: 408001 Name: Cold-Blooded King Area: 408
ID: 406003 Name: Raging Counterstrike Area: 406
ID: 406002 Name: The Best Form of Persistence Area: 406
ID: 406001 Name: Vicious Mechanical Monarch Area: 406
ID: 405002 Name: The Determined Martial Artist Area: 405
ID: 405001 Name: Master of Masters Area: 405
ID: 404002 Name: The Assassin's Struggle Area: 404
ID: 404001 Name: Mercenary Tao Strikes Back Area: 404
ID: 403002 Name: Super Saiyan Goku Area: 403
ID: 403001 Name: An Epic Showdown Area: 403
ID: 401002 Name: The Final Showdown Area: 401
ID: 401001 Name: Fearsome Super Elite Area: 401
ID: 356001 Name: On the Desert Planet Area: 356
ID: 355011 Name: Clash Between the Strongest Area: 355
ID: 355010 Name: Nonstop Battles Area: 355
ID: 355009 Name: Resentful Saiyan Area: 355
ID: 355008 Name: Endless Evolution Area: 355
ID: 355007 Name: Wrath or Battle Instinct Area: 355
ID: 355006 Name: Low-Class Warrior and the Warrior in Exile Area: 355
ID: 355005 Name: Super Saiyan Area: 355
ID: 355004 Name: Broly Area: 355
ID: 355003 Name: Paragus Area: 355
ID: 355002 Name: Planet Vampa Area: 355
ID: 355001 Name: Goku and Vegeta Area: 355
ID: 354005 Name: Upa's Wish Area: 354
ID: 354004 Name: Tien's Distress Area: 354
ID: 354003 Name: Battle in Penguin Village! Area: 354
ID: 354002 Name: The Mifan Empire's Plot Area: 354
ID: 354001 Name: Reach for Victory! Martial Arts Tournament Area: 354
ID: 353005 Name: The Terrifying Plan to Destroy the Sun Area: 353
ID: 353004 Name: Goku Transforms?! Area: 353
ID: 353003 Name: Sleeping Princess Area: 353
ID: 353002 Name: Devil's Castle Area: 353
ID: 353001 Name: Goku and Krillin Area: 353
ID: 352006 Name: A Girl's Wish Area: 352
ID: 352005 Name: To the Land of Gurumes! Area: 352
ID: 352004 Name: Venerable Master Roshi Area: 352
ID: 352003 Name: Yamcha the Hyena Area: 352
ID: 352002 Name: In the Nighttime Forest... Area: 352
ID: 352001 Name: Encounters and Departures Area: 352
ID: 351003 Name: Videl Learns to Fly Area: 351
ID: 351002 Name: Intensive Training Begins! Area: 351
ID: 351001 Name: Hero of Hercule City Area: 351
ID: 349005 Name: Showdown with Coora Area: 349
ID: 349004 Name: The Nightmare Returns Area: 349
ID: 349003 Name: Super Saiyan Tag Team! Area: 349
ID: 349002 Name: Coora's Resurrection Area: 349
ID: 349001 Name: New Namek's Threat Area: 349
ID: 348004 Name: Aftermath of a Fierce Fight... Area: 348
ID: 348003 Name: Accelerating Rampage Area: 348
ID: 348002 Name: A Series of Tragedies Area: 348
ID: 348001 Name: Birth of a Majin Area: 348
ID: 347010 Name: Furious Transformation! Area: 347
ID: 347009 Name: Dastardly Space Pirate Area: 347
ID: 347008 Name: Mystery Planet Area: 347
ID: 347007 Name: A Lone Warrior's Last Battle Area: 347
ID: 347006 Name: Futile Struggle Area: 347
ID: 347005 Name: Prelude to Doom Area: 347
ID: 347004 Name: Frieza's Betrayal Area: 347
ID: 347003 Name: Vegeta, Prince of the Saiyans Area: 347
ID: 347002 Name: The Phantom Fist Area: 347
ID: 347001 Name: Saiyans from Planet Vegeta Area: 347
ID: 346008 Name: Body Change Area: 346
ID: 346007 Name: The Captain Cometh! Area: 346
ID: 346006 Name: Guru in Peril Area: 346
ID: 346005 Name: Showdown! Jeice and Burter Area: 346
ID: 346004 Name: Goku Finally Arrives! Area: 346
ID: 346003 Name: Imminent Showdown Area: 346
ID: 346002 Name: Relentless Recoome Area: 346
ID: 346001 Name: Behold the Ginyu Force! Area: 346
ID: 345007 Name: After the Tables Have Turned Area: 345
ID: 345006 Name: Clash! Super Saiyan 4 vs. Super #17 Area: 345
ID: 345005 Name: Fusion of Two Android #17s! Area: 345
ID: 345004 Name: Formidable Foes Resurrected from Hell Area: 345
ID: 345003 Name: Tragic Siblings Area: 345
ID: 345002 Name: Hell Demons Cell & Frieza Area: 345
ID: 345001 Name: Harbinger of Cataclysm Area: 345
ID: 344009 Name: Universe Survival Showdown Area: 344
ID: 344008 Name: Mastery of Ultra Instinct! Area: 344
ID: 344007 Name: Proud 'Til the Very End Area: 344
ID: 344006 Name: Toppo, God of Destruction, Cometh! Area: 344
ID: 344005 Name: Onslaught of Fire and Fury Area: 344
ID: 344004 Name: Bid for Supreme Dominance Area: 344
ID: 344003 Name: Total War! Universe 3 vs. Universe 7 Area: 344
ID: 344002 Name: Showdown! Namekians of Universe 6 Area: 344
ID: 344001 Name: The Climactic Battle for Love Area: 344
ID: 343006 Name: Super Namekian vs. The Power of Friendship Area: 343
ID: 343005 Name: An Evil Namekian?! Area: 343
ID: 343004 Name: Enter Goku! Area: 343
ID: 343003 Name: Demons From Outer Space! Area: 343
ID: 343002 Name: Planet in Darkness Area: 343
ID: 343001 Name: A Shadow Looming Over Earth Area: 343
ID: 341007 Name: Another Battle-Crazed Saiyan Clash! Area: 341
ID: 341006 Name: Saiyan Oath Area: 341
ID: 341005 Name: Goku vs. Jiren Area: 341
ID: 341004 Name: Magical Girl Fighters From Universe 2 Area: 341
ID: 341003 Name: The Warrior of Justice Draws Nigh! Area: 341
ID: 341002 Name: The Berserker Awakens! Area: 341
ID: 341001 Name: The Long-Awaited Tournament of Power Area: 341
ID: 340003 Name: Paikuhan's True Power Area: 340
ID: 340002 Name: Battle in Hell Area: 340
ID: 340001 Name: Champions of the Otherworld Area: 340
ID: 339008 Name: Great Conflict Ahead Area: 339
ID: 339007 Name: Vegeta's On a Roll! Area: 339
ID: 339006 Name: Vegeta and Zarbon Area: 339
ID: 339005 Name: Vegeta vs. Dodoria Area: 339
ID: 339004 Name: Assault on a Certain Village Area: 339
ID: 339003 Name: Vegeta the Traitor Area: 339
ID: 339002 Name: Dark Clouds Over Planet Namek Area: 339
ID: 339001 Name: To Planet Namek! Area: 339
ID: 338006 Name: Wrath of the Dragon! Area: 338
ID: 338005 Name: Sorrowful Fate Area: 338
ID: 338004 Name: Return of the Phantom Majin Area: 338
ID: 338003 Name: Budding Bonds Area: 338
ID: 338002 Name: Bewitching Monster Area: 338
ID: 338001 Name: Tapion the Hero Area: 338
ID: 337004 Name: To a New Realm Area: 337
ID: 337003 Name: Vegeta's Rage Area: 337
ID: 337002 Name: Birthday Party and the God of Destruction Area: 337
ID: 337001 Name: Vegeta's Family Day Area: 337
ID: 336004 Name: Raditz's Battle Area: 336
ID: 336003 Name: Raditz's Pride Area: 336
ID: 336002 Name: Father's Dream Area: 336
ID: 336001 Name: Raditz the Weakling Area: 336
ID: 335012 Name: Team Universe 7, Assemble! Area: 335
ID: 335011 Name: The Tenth Warrior Area: 335
ID: 335010 Name: The Emperor of Evil Returns Area: 335
ID: 335009 Name: See The Wall That Must Be Passed Area: 335
ID: 335008 Name: The Tenshin-Style Dojo's Mystery!? Area: 335
ID: 335007 Name: Trading Blows for the First Time Area: 335
ID: 335006 Name: High-Spirited Warriors Area: 335
ID: 335005 Name: Goku the Recruiter Area: 335
ID: 335004 Name: Make Way for Toppo, Warrior of Justice! Area: 335
ID: 335003 Name: Bergamo the Crusher Vs. Goku Area: 335
ID: 335002 Name: Awaken Your Sleeping Battle Spirit! Area: 335
ID: 335001 Name: Losers Erased in the Tournament of Power! Area: 335
ID: 334004 Name: Fusion Mayhem! Area: 334
ID: 334003 Name: Enter Abo and Kado! Area: 334
ID: 334002 Name: Vegeta's Little Brother?! Area: 334
ID: 334001 Name: Peaceful Days Area: 334
ID: 333005 Name: Broly, Tenacious Beast Area: 333
ID: 333004 Name: The Tag Team Challenge Area: 333
ID: 333003 Name: The Demon Returns! Area: 333
ID: 333002 Name: Showdown! Bio-Warrior Area: 333
ID: 333001 Name: Hercule's Secret?! Area: 333
ID: 332005 Name: Proof of Courage Area: 332
ID: 332004 Name: Lord Yao the Marauder Area: 332
ID: 332003 Name: Monster of Mount Paozu Area: 332
ID: 332002 Name: The Journey Begins Area: 332
ID: 332001 Name: Great Ancestor Area: 332
ID: 331006 Name: Stop the Reckless Majin! Area: 331
ID: 331005 Name: Defeat the King of Demon Realm! Area: 331
ID: 331004 Name: Young Hearts, Liberated! Area: 331
ID: 331003 Name: Intercept the Alien Warrior! Area: 331
ID: 331002 Name: Pure Heart, Evil Ambition Area: 331
ID: 331001 Name: Fight On! Hero of Justice! Area: 331
ID: 330006 Name: SS4 vs. Giant Ape Baby Area: 330
ID: 330005 Name: The Almighty Super Saiyan 4 Area: 330
ID: 330004 Name: Giant Ape Wreckin' Rampage Area: 330
ID: 330003 Name: Majin Power Combined Area: 330
ID: 330002 Name: The Trouble with Tuffles Area: 330
ID: 330001 Name: The Board Game Domain Area: 330
ID: 329002 Name: Boss Rabbit's Magic Touch Area: 329
ID: 329001 Name: The Rabbit Mob Hits the Scene Area: 329
ID: 328007 Name: Final Judgment Area: 328
ID: 328006 Name: The Zero Mortals Plan Area: 328
ID: 328005 Name: Rematch With Goku Black Area: 328
ID: 328004 Name: Trunks' Determination Area: 328
ID: 328003 Name: Universe 10 Zamasu Area: 328
ID: 328002 Name: Message From the Future Area: 328
ID: 328001 Name: A Dark New Enemy Appears Area: 328
ID: 327006 Name: Arale Saves the Day! Area: 327
ID: 327005 Name: The World's Greatest Assassin! Area: 327
ID: 327004 Name: Showdown at Penguin Village! Area: 327
ID: 327003 Name: An Ally of Justice Appears! Area: 327
ID: 327002 Name: An All-Out Battle for Love?! Area: 327
ID: 327001 Name: To Penguin Village! Area: 327
ID: 326006 Name: Blast! Family Kamehameha! Area: 326
ID: 326005 Name: Broly's Back! Area: 326
ID: 326004 Name: Let's Join Forces! Area: 326
ID: 326003 Name: Legendary Super Saiyan Area: 326
ID: 326002 Name: Fates Intertwined Area: 326
ID: 326001 Name: Mysterious New Planet Vegeta Area: 326
ID: 325008 Name: The Match Concludes! Area: 325
ID: 325007 Name: Meet the Assassin Hit! Area: 325
ID: 325006 Name: The Saiyan of Universe 6 Area: 325
ID: 325005 Name: Magetta vs. Vegeta Area: 325
ID: 325004 Name: The Furious Battle! Area: 325
ID: 325003 Name: Frost vs. Goku Area: 325
ID: 325002 Name: The Match Begins! Area: 325
ID: 325001 Name: Universe 6 vs. Universe 7 Area: 325
ID: 324010 Name: The Two-Top on Earth!? Area: 324
ID: 324009 Name: Saiyans' and Tuffles' Fate Area: 324
ID: 324008 Name: The Revenging Attack! Area: 324
ID: 324007 Name: Fight! Super Baby! Area: 324
ID: 324006 Name: Nightmarish Battle Area: 324
ID: 324005 Name: Return to Earth Area: 324
ID: 324004 Name: Ambition Achieved!? Area: 324
ID: 324003 Name: Baby vs. The Greatest Namekian Area: 324
ID: 324002 Name: The Worst Brotherly Spat!? Area: 324
ID: 324001 Name: Target the Saiyans! Area: 324
ID: 323010 Name: The Strongest Warrior Awakens! Area: 323
ID: 323009 Name: The Decisive Battle at Last! Area: 323
ID: 323008 Name: The Quiet Wrath of Goku Area: 323
ID: 323007 Name: Ferocity of the Saiyans Area: 323
ID: 323006 Name: Attack of the Saiyans Area: 323
ID: 323005 Name: The Fight in the Next World Area: 323
ID: 323004 Name: Deeds Done by the Full Moon Area: 323
ID: 323003 Name: Goodbye, Goku! Area: 323
ID: 323002 Name: An Enemy in Common Area: 323
ID: 323001 Name: The Mysterious Alien Warrior Area: 323
ID: 322010 Name: Baby the Wicked Life Form Area: 322
ID: 322009 Name: General Rilldo Area: 322
ID: 322008 Name: Release! The All-Out Goku Area: 322
ID: 322007 Name: Enigmatic Planet M-2 Area: 322
ID: 322006 Name: Luud Activated!! Area: 322
ID: 322005 Name: Planet Luud's Plot Area: 322
ID: 322004 Name: Hot Pursuit Brothers Area: 322
ID: 322003 Name: Planet Gelbo and Zoonama Area: 322
ID: 322002 Name: Merchants' Planet Imecka! Area: 322
ID: 322001 Name: The Mysterious New Dragon Balls Area: 322
ID: 321012 Name: Gohan and Trunks Area: 321
ID: 321011 Name: Peace for the Future Area: 321
ID: 321010 Name: Long-Cherished Wish Fulfilled Area: 321
ID: 321009 Name: Parental Bond Area: 321
ID: 321008 Name: The Fruits of Training Area: 321
ID: 321007 Name: Chance Meeting with Father Area: 321
ID: 321006 Name: Beginning of the Journey Area: 321
ID: 321005 Name: Last Hope Area: 321
ID: 321004 Name: The Last Fighters Area: 321
ID: 321003 Name: The End of Hope Area: 321
ID: 321002 Name: The Androids' Arrival Area: 321
ID: 321001 Name: Revenge of Frieza and King Cold Area: 321
ID: 320024 Name: Galactic Adventurer Area: 320
ID: 320023 Name: Explosive Parental Bond Area: 320
ID: 320022 Name: Proud Bloodline Area: 320
ID: 320021 Name: The Power of the Majin Area: 320
ID: 320020 Name: In Defiance of the Heaven Area: 320
ID: 320019 Name: God of All Saiyans Area: 320
ID: 320018 Name: Limit-Smashing Super Saiyan Area: 320
ID: 320017 Name: Fusion for Justice Area: 320
ID: 320016 Name: Strength of the Sanctuary Area: 320
ID: 320015 Name: Paragon of Justice Area: 320
ID: 320014 Name: Strongest Under the Heavens Area: 320
ID: 320013 Name: Devastating True Power Area: 320
ID: 320012 Name: Unstoppable Parent and Child Area: 320
ID: 320011 Name: One Who Wields True Power Area: 320
ID: 320010 Name: The Boy From the Future Area: 320
ID: 320009 Name: A Legendary Fighter Area: 320
ID: 320008 Name: Technique Beyond Limit Area: 320
ID: 320007 Name: Bond of Master and Disciple Area: 320
ID: 320006 Name: Venerable Master Roshi Area: 320
ID: 320005 Name: The Righteous Shen Style Area: 320
ID: 320004 Name: Seasoned Martial Artist Area: 320
ID: 320003 Name: Golden Combination Area: 320
ID: 320002 Name: Youth With a Future Area: 320
ID: 320001 Name: Transmogrified Monster Area: 320
ID: 319023 Name: The Variable Majin Area: 319
ID: 319022 Name: The Dark Prince Returns Area: 319
ID: 319021 Name: The Android Born from Hate Area: 319
ID: 319020 Name: Wild Hatred Area: 319
ID: 319019 Name: Magnified Malice Area: 319
ID: 319018 Name: Warrior of Hate Area: 319
ID: 319017 Name: Burning for Vengeance Area: 319
ID: 319016 Name: Depths of Despair Area: 319
ID: 319015 Name: Metallic Demon Area: 319
ID: 319014 Name: Wicked Bloodline Area: 319
ID: 319013 Name: An Unusual Villain Area: 319
ID: 319012 Name: Being of Hate and Ruin Area: 319
ID: 319011 Name: Superior Strength Area: 319
ID: 319010 Name: Heart Cold as Deep Space Area: 319
ID: 319009 Name: Destroyer of the Universe Area: 319
ID: 319008 Name: Walking Obliterator Area: 319
ID: 319007 Name: Space Pirate Area: 319
ID: 319006 Name: Frieza's Right Hand Area: 319
ID: 319005 Name: Royal Might Area: 319
ID: 319004 Name: Prince of the Saiyans Area: 319
ID: 319003 Name: Invincible Warrior Area: 319
ID: 319002 Name: Miniature Menace Area: 319
ID: 319001 Name: Clayborn Warrior Area: 319
ID: 318005 Name: Metal Cooras Crew Area: 318
ID: 318004 Name: The Nightmare Returns Area: 318
ID: 318003 Name: Super Saiyan Tag Team Area: 318
ID: 318002 Name: Cooras Resurrection Area: 318
ID: 318001 Name: New Nameks Threat Area: 318
ID: 317001 Name: Evil Charisma Area: 317
ID: 316001 Name: Joker Area: 316
ID: 315011 Name: Blood of the Saiyan Race Area: 315
ID: 315010 Name: Sworn Enemy Area: 315
ID: 315009 Name: Outclassed Area: 315
ID: 315008 Name: Peace Restored Area: 315
ID: 315007 Name: Spirit Bomb Miracle Area: 315
ID: 315006 Name: Furious Goku Area: 315
ID: 315005 Name: Ambitious Turles Area: 315
ID: 315004 Name: Crumbling Earth Area: 315
ID: 315003 Name: Mechanical Malice Area: 315
ID: 315002 Name: Retaliating with Skill Area: 315
ID: 315001 Name: Earths Greatest Threat Area: 315
ID: 314012 Name: Stronger than Ever! Area: 314
ID: 314011 Name: The Best Teacher in the Universe Area: 314
ID: 314010 Name: Challenging the Destruction God Area: 314
ID: 314009 Name: Battle of Gods Area: 314
ID: 314008 Name: Super Saiyan God is Born Area: 314
ID: 314007 Name: Vegeta's Pride Area: 314
ID: 314006 Name: Fusion Counterattack Area: 314
ID: 314005 Name: The Strongest Fighter: Gohan Area: 314
ID: 314004 Name: Countdown to Destruction Area: 314
ID: 314003 Name: Crème Caramel Fury Area: 314
ID: 314002 Name: In Search of the Super Saiyan God Area: 314
ID: 314001 Name: Destruction God Awakens Area: 314
ID: 313001 Name: Stop the Reckless Majin! Area: 313
ID: 312001 Name: Defeat the King of Demon Realm! Area: 312
ID: 311001 Name: Young Hearts, Liberated! Area: 311
ID: 310001 Name: Intercept the Alien Warrior! Area: 310
ID: 309001 Name: Pure Heart, Evil Ambition Area: 309
ID: 308001 Name: Fight On! Hero of Justice! Area: 308
ID: 307010 Name: Strongest Clan in the Universe Area: 307
ID: 307009 Name: History of Oppression Area: 307
ID: 307008 Name: Like Father, Like Son Area: 307
ID: 307007 Name: Strongest Vs. Strongest Area: 307
ID: 307006 Name: Goku Revived! Area: 307
ID: 307005 Name: Piccolo's Here! Area: 307
ID: 307004 Name: Senzu Bean of Hope Area: 307
ID: 307003 Name: To Korin's Tower Area: 307
ID: 307002 Name: Coora's Squad Strikes! Area: 307
ID: 307001 Name: Encroaching Evil Area: 307
ID: 306010 Name: The Greatest Challenge Area: 306
ID: 306009 Name: Seriously Serious Fight Area: 306
ID: 306008 Name: Extreme Peril Area: 306
ID: 306007 Name: Formidable Boujack! Area: 306
ID: 306006 Name: Vicious Galactic Warrior Area: 306
ID: 306005 Name: The Seal is Lifted Area: 306
ID: 306004 Name: Mysterious Galactic Warrior Area: 306
ID: 306003 Name: The Finals Commence! Area: 306
ID: 306002 Name: The Worst Match Ever?! Area: 306
ID: 306001 Name: World Tournament Time! Area: 306
ID: 305013 Name: Full-Power Whis?! Area: 305
ID: 305012 Name: The End of the Battle Beyond Gods Area: 305
ID: 305011 Name: A Trial Beyond Divinity Area: 305
ID: 305010 Name: Battle of Ultra Evolution Area: 305
ID: 305009 Name: Destiny Packs a Punch Area: 305
ID: 305008 Name: Chilling Bloodline Area: 305
ID: 305007 Name: Beginning of Karma Area: 305
ID: 305006 Name: 3rd Transformation Area: 305
ID: 305005 Name: Frieza's Transformation Area: 305
ID: 305004 Name: Frieza's Fury Area: 305
ID: 305003 Name: Ginyu Force Rules Area: 305
ID: 305002 Name: Namek Occupation Area: 305
ID: 305001 Name: Foreshadowing of Despair Area: 305
ID: 304012 Name: Battling the Unknown Area: 304
ID: 304011 Name: Indefectible Invasion Area: 304
ID: 304010 Name: Frieza's Army Reborn Area: 304
ID: 304009 Name: Malevolent Resurgence Area: 304
ID: 304008 Name: No Limits! Area: 304
ID: 304007 Name: Gotta Get Stronger! Area: 304
ID: 304006 Name: On the Shoulders of Gods Area: 304
ID: 304005 Name: Top-Level Training Area: 304
ID: 304004 Name: Pilaf's Back for More... Area: 304
ID: 304003 Name: Problem Solved! Area: 304
ID: 304002 Name: Fight for Peace! Area: 304
ID: 304001 Name: Prolific Patrolmen Area: 304
ID: 303009 Name: Furious Transformation! Area: 303
ID: 303008 Name: Dastardly Space Pirate Area: 303
ID: 303007 Name: Mystery Planet Area: 303
ID: 303006 Name: Last Battle Area: 303
ID: 303005 Name: Futile Struggle Area: 303
ID: 303004 Name: Prelude to Doom Area: 303
ID: 303003 Name: Friezas Betrayal Area: 303
ID: 303002 Name: Planet Vegetas Prince Area: 303
ID: 303001 Name: Go Team Bardock! Area: 303
ID: 302005 Name: Red-Hot Rumble Area: 302
ID: 302004 Name: The Prince Cometh Area: 302
ID: 302003 Name: Gokus Wrath Area: 302
ID: 302002 Name: Saiyan Rampage Area: 302
ID: 302001 Name: Here Come the Saiyans Area: 302
ID: 301005 Name: Last Chance Area: 301
ID: 301004 Name: Gohan Erupts! Area: 301
ID: 301003 Name: Dire Straits Area: 301
ID: 301002 Name: Saiyan Showdown Area: 301
ID: 301001 Name: Raditz the Saiyan Area: 301
ID: 179002 Name: Clash! Dokkan Butoden Part 2 Area: 179
ID: 179001 Name: Clash! Dokkan Butoden Part 1 Area: 179
ID: 178001 Name: Challenging the Super Champion! Area: 178
ID: 177001 Name: Even More Secret Adventures Area: 177
ID: 175003 Name: The Long-awaited Fight! Goku vs. Monaka Area: 175
ID: 175002 Name: Chaotic Victory Celebration Area: 175
ID: 175001 Name: Universe 6 vs. Universe 7 Area: 175
ID: 173007 Name: Final Showdown with Majin Buu Area: 173
ID: 173006 Name: The Prince of Destruction Returns Area: 173
ID: 173005 Name: Pair Left on a Disappearing Planet Area: 173
ID: 173004 Name: Saiyan Attack! Area: 173
ID: 173003 Name: The Demon King of Old... Restored! Area: 173
ID: 173002 Name: Showdown! Mercenary Tao Area: 173
ID: 173001 Name: Reich Pilaf's World Conquest Area: 173
ID: 171001 Name: Ghostly Prank Area: 171
ID: 169001 Name: Go, Launch, Go! Area: 169
ID: 168001 Name: Go, Launch, Go! Area: 168
ID: 167001 Name: Go, Launch, Go! Area: 167
ID: 166001 Name: Go, Launch, Go! Area: 166
ID: 165001 Name: Go, Launch, Go! Area: 165
ID: 164001 Name: Go, Launch, Go! Area: 164
ID: 163001 Name: Go, Launch, Go! Area: 163
ID: 162009 Name: Showdown with Android #21 Area: 162
ID: 162008 Name: The Final Battle Looms Area: 162
ID: 162007 Name: Reunion with Frieza Area: 162
ID: 162006 Name: The Mastermind Revealed Area: 162
ID: 162005 Name: SOS from Piccolo Area: 162
ID: 162004 Name: Red Ribbon Army's Plot Area: 162
ID: 162003 Name: Rescuing Krillin Area: 162
ID: 162002 Name: Clone Warrior Area: 162
ID: 162001 Name: A Mysterious Pulse and Earth in Peril Area: 162
ID: 161001 Name: Little Rangers' Task Area: 161
ID: 160004 Name: Return of the Magical Girl Fighters Area: 160
ID: 160003 Name: Love Lasts Forever! Area: 160
ID: 160002 Name: Believe in Love! Area: 160
ID: 160001 Name: Let's Spread Love! Area: 160
ID: 159001 Name: Goku Departs! Area: 159
ID: 158005 Name: [PHY] Special Training Area: 158
ID: 158004 Name: [STR] Special Training Area: 158
ID: 158003 Name: [INT] Special Training Area: 158
ID: 158002 Name: [TEQ] Special Training Area: 158
ID: 158001 Name: [AGL] Special Training Area: 158
ID: 157001 Name: [PHY] Special Training Area: 157
ID: 156001 Name: [STR] Special Training Area: 156
ID: 155001 Name: [INT] Special Training Area: 155
ID: 154001 Name: [TEQ] Special Training Area: 154
ID: 153001 Name: [AGL] Special Training Area: 153
ID: 152001 Name: Majin Buus Candy Mischief Area: 152
ID: 151001 Name: Forces of the Otherworld Area: 151
ID: 150001 Name: Adventure Of Her Own Area: 150
ID: 149005 Name: ????????? Area: 149
ID: 149004 Name: ????????? Area: 149
ID: 149003 Name: ????????? Area: 149
ID: 149002 Name: ????????? Area: 149
ID: 149001 Name: ????????? Area: 149
ID: 147036 Name: Miracle-Makers Never Surrender Area: 147
ID: 147035 Name: Rematch with Super Saiyan Rosé! Area: 147
ID: 147034 Name: The Truth Will Out Area: 147
ID: 147033 Name: A New Dark Enemy Appears! Area: 147
ID: 147032 Name: Universe 6's Strongest Warrior Area: 147
ID: 147031 Name: Saiyan Pride Area: 147
ID: 147030 Name: Vegeta's All-Out Battle Area: 147
ID: 147029 Name: The Vengeful Golden Frieza Area: 147
ID: 147028 Name: God of Destruction vs. SS God Area: 147
ID: 147027 Name: The Shadow Dragons' Master Area: 147
ID: 147026 Name: Warrior of the Sun: Nuova Shenron Area: 147
ID: 147025 Name: Baby vs. Goku Area: 147
ID: 147024 Name: Planet M-2 Area: 147
ID: 147023 Name: Finding a Strong Guy! Area: 147
ID: 147022 Name: The Journey Unfolds Area: 147
ID: 147021 Name: Stronger Than Ever! Area: 147
ID: 147020 Name: Battle for the Universe Area: 147
ID: 147019 Name: Meet Vegito Area: 147
ID: 147018 Name: Warrior's Resolve Area: 147
ID: 147017 Name: The Fated Battle! Area: 147
ID: 147016 Name: Best of the Boys Area: 147
ID: 147015 Name: I Am Saiyaman Area: 147
ID: 147014 Name: Successor of the Strongest Area: 147
ID: 147013 Name: The Android Cell Area: 147
ID: 147012 Name: Awaken as a Super Saiyan Area: 147
ID: 147011 Name: The Other Super Saiyan! Area: 147
ID: 147010 Name: Legendary Super Saiyan Area: 147
ID: 147009 Name: The Showdown Begins Area: 147
ID: 147008 Name: Behold the Ginyu Force! Area: 147
ID: 147007 Name: Goku vs. Vegeta Area: 147
ID: 147006 Name: Ferocity of the Saiyans Area: 147
ID: 147005 Name: The Mysterious Alien Warrior Area: 147
ID: 147004 Name: Battle for the Future Area: 147
ID: 147003 Name: The Demon King Piccolo! Area: 147
ID: 147002 Name: The Notorious Mercenary Area: 147
ID: 147001 Name: The Adventure Begins Area: 147
ID: 146005 Name: PHY Hidden Potential Event Area: 146
ID: 146004 Name: STR Hidden Potential Event Area: 146
ID: 146003 Name: INT Hidden Potential Event Area: 146
ID: 146002 Name: TEQ Hidden Potential Event Area: 146
ID: 146001 Name: AGL Hidden Potential Event Area: 146
ID: 144001 Name: PHY Hidden Potential Event Area: 144
ID: 143001 Name: STR Hidden Potential Event Area: 143
ID: 142001 Name: INT Hidden Potential Event Area: 142
ID: 141001 Name: TEQ Hidden Potential Event Area: 141
ID: 140001 Name: AGL Hidden Potential Event Area: 140
ID: 139001 Name: Captain Yamcha's Grand Slam! Area: 139
ID: 138001 Name: The Peculiar Penguin Village Area: 138
ID: 137001 Name: In the Fused World... Area: 137
ID: 136030 Name: ????????!! Area: 136
ID: 136029 Name: ?6??????? Area: 136
ID: 136028 Name: ??????? Area: 136
ID: 136027 Name: ??????????! Area: 136
ID: 136026 Name: ???????????? Area: 136
ID: 136025 Name: ????????????! Area: 136
ID: 136024 Name: ???????!! Area: 136
ID: 136023 Name: ???M2 Area: 136
ID: 136022 Name: ???????!! Area: 136
ID: 136021 Name: ?????… Area: 136
ID: 136020 Name: ?????!! Area: 136
ID: 136019 Name: ????????? Area: 136
ID: 136018 Name: ????? Area: 136
ID: 136017 Name: ??????!! Area: 136
ID: 136016 Name: ??????!! Area: 136
ID: 136015 Name: ?????????????? Area: 136
ID: 136014 Name: ?????? Area: 136
ID: 136013 Name: ?????? Area: 136
ID: 136012 Name: ??????????? Area: 136
ID: 136011 Name: ??????????? Area: 136
ID: 136010 Name: ???????? Area: 136
ID: 136009 Name: ??????? Area: 136
ID: 136008 Name: ?????????!! Area: 136
ID: 136007 Name: ??????? Area: 136
ID: 136006 Name: ???????! Area: 136
ID: 136005 Name: ??????? Area: 136
ID: 136004 Name: ??????????! Area: 136
ID: 136003 Name: ??????????!! Area: 136
ID: 136002 Name: ???????“???” Area: 136
ID: 136001 Name: ??????? Area: 136
ID: 135002 Name: Pan's Next Secret Adventure Area: 135
ID: 135001 Name: Pan's Secret Adventure Area: 135
ID: 134001 Name: The Genius Bulma's Battle Prep Area: 134
ID: 133002 Name: Endless Adventure Area: 133
ID: 133001 Name: Adventure of Gratitude Area: 133
ID: 132001 Name: Turtle School Training! Area: 132
ID: 131001 Name: Hercules World Tournament Area: 131
ID: 130001 Name: Training in the Clouds Area: 130
ID: 126001 Name: Snake Way Area: 126
ID: 125001 Name: Snake Way Area: 125
ID: 120002 Name: Even More Training Area: 120
ID: 120001 Name: Training at Korin's Tower Area: 120
ID: 116001 Name: Big Bucks Hercule Challenge Area: 116
ID: 115002 Name: Champions Real Power! Area: 115
ID: 115001 Name: Big Bucks Hercule Challenge Area: 115
ID: 111005 Name: [PHY] Awakening Medal Area: 111
ID: 111004 Name: [STR] Awakening Medal Area: 111
ID: 111003 Name: [INT] Awakening Medal Area: 111
ID: 111002 Name: [TEQ] Awakening Medal Area: 111
ID: 111001 Name: [AGL] Awakening Medal Area: 111
ID: 110001 Name: [PHY] Awakening Medal Area: 110
ID: 109001 Name: [STR] Awakening Medal Area: 109
ID: 108001 Name: [INT] Awakening Medal Area: 108
ID: 107001 Name: [TEQ] Awakening Medal Area: 107
ID: 106001 Name: [AGL] Awakening Medal Area: 106
ID: 105001 Name: [PHY] Awakening Medal Area: 105
ID: 104001 Name: [STR] Awakening Medal Area: 104
ID: 103001 Name: [INT] Awakening Medal Area: 103
ID: 102001 Name: [TEQ] Awakening Medal Area: 102
ID: 101001 Name: [AGL] Awakening Medal Area: 101
ID: 27003 Name: Training and Experience Area: 27
ID: 27002 Name: Training with Piccolo Area: 27
ID: 27001 Name: Resumption Area: 27
ID: 26008 Name: Reclaiming Identity Area: 26
ID: 26007 Name: An Ace in the Hole Area: 26
ID: 26006 Name: Demonic Scientist Area: 26
ID: 26005 Name: Dr. Gero's Smirk Area: 26
ID: 26004 Name: A Loyal Android Area: 26
ID: 26003 Name: Bio-Soldier Area: 26
ID: 26002 Name: A Staff Officer's Battle Area: 26
ID: 26001 Name: A Heart Lost Area: 26
ID: 25008 Name: A Bizarre Reunion Area: 25
ID: 25007 Name: A New Sworn Enemy...?! Area: 25
ID: 25006 Name: A New Sworn Enemy Area: 25
ID: 25005 Name: The Brother of Frieza Area: 25
ID: 25004 Name: Fierce Battle against Abo and Kado Area: 25
ID: 25003 Name: Abo-Kado Fusion! Area: 25
ID: 25002 Name: Alien Warrior Encounter 7 Area: 25
ID: 25001 Name: Alien Warrior Encounter 6 Area: 25
ID: 24008 Name: Androids #17 and #18 Area: 24
ID: 24007 Name: The Ultimate Android Area: 24
ID: 24006 Name: #17 x 2 Area: 24
ID: 24005 Name: Mysterious #17 Area: 24
ID: 24004 Name: Tenacious Scientist Area: 24
ID: 24003 Name: Promises Area: 24
ID: 24002 Name: One Big Chance Area: 24
ID: 24001 Name: A Bad Feeling About This Area: 24
ID: 23008 Name: Fighting Runs in the Family Area: 23
ID: 23007 Name: Cell's Predicament Area: 23
ID: 23006 Name: Have the Tables Turned?! Area: 23
ID: 23005 Name: Evolution Area: 23
ID: 23004 Name: Contact Area: 23
ID: 23003 Name: Cell and Vegeta Area: 23
ID: 23002 Name: Decisions Area: 23
ID: 23001 Name: A Cruel Twist of Fate Area: 23
ID: 22008 Name: Accelerating Danger Area: 22
ID: 22007 Name: Indomitable Human Spirit Area: 22
ID: 22006 Name: Destroyer of the Universe - 4 Area: 22
ID: 22005 Name: Destroyer of the Universe - 3 Area: 22
ID: 22004 Name: Destroyer of the Universe - 2 Area: 22
ID: 22003 Name: Destroyer of the Universe - 1 Area: 22
ID: 22002 Name: Turles Returns! Area: 22
ID: 22001 Name: The Nightmare Begins Area: 22
ID: 21003 Name: Probe Area: 21
ID: 21002 Name: A Mysterious Saiyan Area: 21
ID: 21001 Name: After Awakening Area: 21
ID: 20008 Name: The Angry Majin Area: 20
ID: 20007 Name: Resurrection Area: 20
ID: 20006 Name: Countdown Area: 20
ID: 20005 Name: Lord of the Demon Realm Area: 20
ID: 20004 Name: The Second Assassin Area: 20
ID: 20003 Name: The First Assassin Area: 20
ID: 20002 Name: Subjugated by Ambition Area: 20
ID: 20001 Name: Nothing Ventured... Area: 20
ID: 19008 Name: The Mysterious Duo Area: 19
ID: 19007 Name: An Unseen Enemy Part 5 Area: 19
ID: 19006 Name: An Unseen Enemy Part 4 Area: 19
ID: 19005 Name: An Unseen Enemy Part 3 Area: 19
ID: 19004 Name: An Unseen Enemy Part 2 Area: 19
ID: 19003 Name: An Unseen Enemy Part 1 Area: 19
ID: 19002 Name: The Recruited Warrior Area: 19
ID: 19001 Name: The Forgotten Champion Area: 19
ID: 18008 Name: Master of the Demon Realm, Part 3 Area: 18
ID: 18007 Name: Master of the Demon Realm, Part 2 Area: 18
ID: 18006 Name: Master of the Demon Realm, Part 1 Area: 18
ID: 18005 Name: A Surprising End Area: 18
ID: 18004 Name: Frieza's Final Transformation Area: 18
ID: 18003 Name: Sovereign of the Warrior Race Area: 18
ID: 18002 Name: Commander's Will Area: 18
ID: 18001 Name: Coora's Armored Squad Area: 18
ID: 17008 Name: Frieza's Second Transformation Area: 17
ID: 17007 Name: Frieza's Transformation Area: 17
ID: 17006 Name: Deepening Destiny Area: 17
ID: 17005 Name: Imperial Power Area: 17
ID: 17004 Name: The Elite Force's True Power Area: 17
ID: 17003 Name: Zarbon's Transformation Area: 17
ID: 17002 Name: Breaking the Siege Area: 17
ID: 17001 Name: Frieza's Army Attacks! Area: 17
ID: 16008 Name: Ending of the Body Exchange Area: 16
ID: 16007 Name: Showdown! New Ginyu Force?! Area: 16
ID: 16006 Name: Reunion with Goku? Area: 16
ID: 16005 Name: Ginyu's Trespass! Area: 16
ID: 16004 Name: Turles the New Saiyan Area: 16
ID: 16003 Name: Saiyan Tag Team Returns! Area: 16
ID: 16002 Name: Saiyan Trio Area: 16
ID: 16001 Name: Reunion with Krillin Area: 16
ID: 15003 Name: The Challengers Area: 15
ID: 15002 Name: Lost Warrior Area: 15
ID: 15001 Name: Extraordinary Evil Area: 15
ID: 14008 Name: Nightmarish Android Area: 14
ID: 14007 Name: All Guns Blazing Area: 14
ID: 14006 Name: Aggressive Circuitry Area: 14
ID: 14005 Name: Martial Warrior's Offense Area: 14
ID: 14004 Name: Intense Onslaught Area: 14
ID: 14003 Name: Ultimate Weapon Unleashed Area: 14
ID: 14002 Name: Destiny Repeated Area: 14
ID: 14001 Name: In Pursuit of Dr. Gero! Area: 14
ID: 13008 Name: Missing Target Area: 13
ID: 13007 Name: Bloodcurdling Message Area: 13
ID: 13006 Name: Plundered Energy Area: 13
ID: 13005 Name: Dr. Gero's Counterattack Area: 13
ID: 13004 Name: Ginyu's Big Mistake Area: 13
ID: 13003 Name: Unwanted Battle Area: 13
ID: 13002 Name: Uninvited Enemies Area: 13
ID: 13001 Name: A Peculiar Goku Area: 13
ID: 12008 Name: Enter the Savior?! Area: 12
ID: 12007 Name: Intellect and Speed Area: 12
ID: 12006 Name: Explosive Power Area: 12
ID: 12005 Name: Exquisite Team-Up Area: 12
ID: 12004 Name: Telekinetic Rampage Area: 12
ID: 12003 Name: Battle-Smart Brawler 5 Area: 12
ID: 12002 Name: Battle-Smart Brawler 4 Area: 12
ID: 12001 Name: Return of the Elites! Area: 12
ID: 11008 Name: Best Team There Is Area: 11
ID: 11007 Name: Battle-Smart Brawler 3 Area: 11
ID: 11006 Name: Battle-Smart Brawler 2 Area: 11
ID: 11005 Name: Battle-Smart Brawler 1 Area: 11
ID: 11004 Name: The Wayward Invader Area: 11
ID: 11003 Name: The Wayward Champion Area: 11
ID: 11002 Name: Find Goku! Part 6 Area: 11
ID: 11001 Name: Find Goku! Part 5 Area: 11
ID: 10008 Name: Conflicting Motives Area: 10
ID: 10007 Name: Unexpected Savior Area: 10
ID: 10006 Name: Ace in the Hole Area: 10
ID: 10005 Name: Dr. Gero's Ambition Area: 10
ID: 10004 Name: Red Ribbon's Return 3 Area: 10
ID: 10003 Name: Red Ribbon's Return 2 Area: 10
ID: 10002 Name: Red Ribbon's Return 1 Area: 10
ID: 10001 Name: To the Lab Area: 10
ID: 9003 Name: Resolution Area: 9
ID: 9002 Name: Super Saiyan Showdown! Area: 9
ID: 9001 Name: Ultimate Saiyan Area: 9
ID: 8010 Name: Galactic Overlord Frieza Area: 8
ID: 8009 Name: Raging Battle Area: 8
ID: 8008 Name: Captain Ginyu Arrives! Area: 8
ID: 8007 Name: Offense and Defense Part 7 Area: 8
ID: 8006 Name: Offense and Defense Part 6 Area: 8
ID: 8005 Name: Offense and Defense Part 5 Area: 8
ID: 8004 Name: Offense and Defense Part 4 Area: 8
ID: 8003 Name: Offense and Defense Part 3 Area: 8
ID: 8002 Name: Offense and Defense Part 2 Area: 8
ID: 8001 Name: Offense and Defense Part 1 Area: 8
ID: 7010 Name: Saiyan's Pride Area: 7
ID: 7009 Name: Saiyan Tagteam Area: 7
ID: 7008 Name: Elite Warrior Area: 7
ID: 7007 Name: Let the Games Begin Area: 7
ID: 7006 Name: Saiyan Attack Area: 7
ID: 7005 Name: Enter Goku! Area: 7
ID: 7004 Name: Find Goku! Part 4 Area: 7
ID: 7003 Name: Find Goku! Part 3 Area: 7
ID: 7002 Name: Find Goku! Part 2 Area: 7
ID: 7001 Name: Find Goku! Part 1 Area: 7
ID: 6010 Name: Cell's Ambition Area: 6
ID: 6009 Name: Cell Approaches Area: 6
ID: 6008 Name: Nightmare Team Assault Area: 6
ID: 6007 Name: Unending Energy of Terror Area: 6
ID: 6006 Name: Enter Android #17! Area: 6
ID: 6005 Name: Android #18's Super Power Area: 6
ID: 6004 Name: Android #18's Games Part 3 Area: 6
ID: 6003 Name: Android #18's Games Part 2 Area: 6
ID: 6002 Name: Android #18's Games Part 1 Area: 6
ID: 6001 Name: Android Appearance Area: 6
ID: 5010 Name: The Mighty Ginyu Force Area: 5
ID: 5009 Name: Purple Comet Area: 5
ID: 5008 Name: Red Magma Area: 5
ID: 5007 Name: Blue Hurricane Area: 5
ID: 5006 Name: Orange-Haired Hazard Area: 5
ID: 5005 Name: Psychokinesis Area: 5
ID: 5004 Name: Before the Storm Area: 5
ID: 5003 Name: Piccolo's Terms Area: 5
ID: 5002 Name: Intensive Training Area: 5
ID: 5001 Name: Pint-Sized Super Warrior Area: 5
ID: 4008 Name: Brutal Counterattack Area: 4
ID: 4007 Name: The Beautiful Warrior Zarbon Area: 4
ID: 4006 Name: Alien Warrior Encounter 5 Area: 4
ID: 4005 Name: Alien Warrior Encounter 4 Area: 4
ID: 4004 Name: Pursuer Who Summons Death Area: 4
ID: 4003 Name: Alien Warrior Encounter 3 Area: 4
ID: 4002 Name: Alien Warrior Encounter 2 Area: 4
ID: 4001 Name: Alien Warrior Encounter 1 Area: 4
ID: 3008 Name: Fierce Fight for Honor Area: 3
ID: 3007 Name: Crane School Pride Area: 3
ID: 3006 Name: Revenge of Crane School Area: 3
ID: 3005 Name: Turtle School Trial Lesson Area: 3
ID: 3004 Name: Clever Krillin Area: 3
ID: 3003 Name: Telekinetic Threat Area: 3
ID: 3002 Name: World's Greatest Teacher Area: 3
ID: 3001 Name: Squad Leader Area: 3
ID: 2005 Name: Malicious Android: Cell Area: 2
ID: 2004 Name: New Enemy Area: 2
ID: 2003 Name: Mysterious Ki Area: 2
ID: 2002 Name: Ghost Town Investigation Area: 2
ID: 2001 Name: Premonition of Doom Area: 2
ID: 1005 Name: Invasion of the Warrior Race Area: 1
ID: 1004 Name: Reinvestigation Area: 1
ID: 1003 Name: Unrivaled Assassin Area: 1
ID: 1002 Name: Pursuing Mercenary Tao Area: 1
ID: 1001 Name: After the Tournament... Area: 1
ID: 1 Name: To the Tournament! Area: 10001
The Horrific Cell Games
--------------------------------------------
The Cell Games 502001 Difficulties: [0, 1, 2] AreaID: 502
The Extreme Terror 502002 Difficulties: [2] AreaID: 502
Waking Nightmare 502003 Difficulties: [3] AreaID: 502
Tournament of Destiny 502004 Difficulties: [2, 4] AreaID: 502
Transcendent Awakening Surpassing the Strongest
--------------------------------------------
Let's Go, Gohan! 555001 Difficulties: [2, 4] AreaID: 555
Extreme Z-Area Androids/Cell Saga
-------------------------------------------
Invincible Battle Form (Goku) 714001 Difficulties [2,3] AreaID: 714
Answers Found in Training (Vegeta) 714002 Difficulties [2,3]
Infinite Dragon Ball History
--------------------------------------
Androids/Cell Saga (vs. Super Warriors) 713001 Difficulties: [5] AreaID: 713
Androids/Cell Saga (vs. Androids) Difficulties 713002 [5] AreaID: 713
Evolution of the Ultimate Life Form
--------------------------------------
The Android Cell 182001 Difficulties [1] AreaID: 182
The First Evolution 182002 Difficulties [1] AreaID: 182
Perfect Form Achieved 182003 Difficulties [1] AreaID: 182
Cell's Offspring 182004 Difficulties [1] AreaID: 182
Perfect Form at Full Power 182005 [1] AreaID: 182
Warrior of Fury! Super Saiyan
-----------------------------------
This Is It! Super Saiyan! 553001 Difficulties [2,4] AreaID: 553
Cataclysmic Clash! Final Showdown with Frieza
-----------------------------------
Come Forth, Porunga! 362001 Difficulties: [0, 2] AreaID: 362
Frieza's Fearsome Transformation! 362002 Difficulties: [0, 2] AreaID: 362
Fearless Piccolo 362003 Difficulties: [0, 2] AreaID: 362
Frieza's Second Transformation 362004 Difficulties: [0, 2] AreaID: 362
Frieza or Vegeta? 362005 Difficulties: [0, 2] AreaID: 362
The Ultimate Battle Begins! 362006 Difficulties: [0, 2] AreaID: 362
Kaioken... Times Twenty?! 362007 Difficulties: [0, 2] AreaID: 362
The Last Chance! Large Spirit Bomb 362008 Difficulties: [0, 2] AreaID: 362
The Legendary Super Saiyan 362009 Difficulties: [0, 2] AreaID: 362
Final Clash Between the Two Warriors 362010 Difficulties: [0, 2] AreaID: 362
Quiet Yet Fierce Battle 362011 Difficulties: [0, 2] AreaID: 362
End of Everything 362012 Difficulties: [0, 2] AreaID: 362
Fighting Legend: Goku.
-----------------------------------
Area id : 712. Stage id : 712001 difficulty [ 5 ]

165
LICENSE
View file

@ -1,165 +0,0 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.

483
Lrfarm.py
View file

@ -1,483 +0,0 @@
import commands
from colorama import init, Fore, Back, Style
# Coloroma autoreset
init(autoreset=True)
def t():
print(" Lr Trunks")
stage = input('What stage would you like to complete(Proud Bloodline 320022) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(Raging Counterstrike 406003) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(5): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(Dignity of a Clan 408002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(5): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(The Strongest Space Pirate 420002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(5): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(Warrior of Hope 414002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(5): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(The Time Patrol Warrior 422002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(5): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def mv():
print("Majin Vegeta")
stage = input('What stage would you like to complete(The Dark Prince Returns 319022) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(15): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(The Strongest Shadow Dragon 517002) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(3): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(Dark Nightmare 518002) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(3): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(Fusion in Blue 519001) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(3): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(Rose-Tinted Plot 520001) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(3): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(A New Hope 522001) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(3): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def gv():
print(" Lr Super Saiyan Goku & Super Saiyan Vegeta")
stage = input('What stage would you like to complete(The Ultimate Pair of the Present World 537001) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(Ultimate Splendor 512003) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(7): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def b():
print("Lr Full Power Boujack (Galactic Warrior)")
stage = input('What stage would you like to complete( Extreme Peril 306008) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(25): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def c():
print("Lr Cell (Perfect Form) & Cell Jr")
stage = input('What stage would you like to complete(Waking Nightmare 502003) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(7): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def tm():
print("Lr Trunks (Teen) (Future) & Mai (Future)")
stage = input('What stage would you like to complete( The Zero Mortals Plan 328006) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(20): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
"BREAK"
stage = input('What stage would you like to complete(Dark Nightmare 518002) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(1): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete( Rose-Tinted Plot 520001) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(1): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
"BREAK"
stage = input('What stage would you like to complete(Fusion in Blue 519001) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(1): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete( The Epic Battle Begins 524001) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(1): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
"BREAK"
stage = input('What stage would you like to complete(A New Hope 522001) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(2): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete( Last Judgment...Or Last Hope 523002) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(2): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
"BREAK"
stage = input('What stage would you like to complete(Searing Rose-Colored Fury 520002) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(2): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete( Sublime Blue! 519002) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(2): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def bw():
print("Lr Beerus & Whis")
stage = input('What stage would you like to complete(God of Destruction Wrath 511002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(7): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(Destruction God Awakens 314001) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(4): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
"BREAK"
stage = input('What stage would you like to complete(In Search of the Super Saiyan God 314002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(7): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(Vegeta Pride 314007) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(4): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def gg():
print("Lr Super Saiyan Gohan (Teen) & Super Saiyan Goten (Kid)")
stage = input('What stage would you like to complete(Go! Warriors of the New Generation 552001) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(10): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(Blast! Family Kamehameha! 326006) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(20): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def vg():
print("Lr Super Saiyan Goku (Angel) & Super Saiyan Vegeta (Angel)")
stage = input('What stage would you like to complete(The Ultimate Pair of the Otherworld 536001) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(10): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(Fusion Reborn! 326006) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(7): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def tg():
print("Lr Trunks (Kid) & Goten (Kid)")
stage = input('What stage would you like to complete(An Unexpectedly Powerful Man! 411002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(5): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(Super Gotenks! 513002) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(3): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
"BREAK"
stage = input('What stage would you like to complete(One Powerful Super Fusion! 513003) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(3): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def gh():
print(" Lr Super Saiyan 2 Gohan")
stage = input('What stage would you like to complete(Waking Nightmare 502003) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def ggg():
print(" Lr Super Saiyan 3 Goku")
stage = input('What stage would you like to complete(Super Saiyan Goku 403002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(5): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(Phantom Majin Resurrected! 535002) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(3): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
"BREAK"
stage = input('What stage would you like to complete(Mighty Warrior: 24-Hour Revival 528001) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(3): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(Ultimate Finishing Move 504002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(4): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def bd():
print("Lr Bardock")
stage = input('What stage would you like to complete(Saiyans from Planet Vegeta 347001) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(10): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete( 534001 The Unknown Battle) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(3): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
"BREAK"
stage = input('What stage would you like to complete(347007 A Lone Warriors Last Battle) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(3): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete( 602002 True Fear) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(3): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
"BREAK"
stage = input('What stage would you like to complete(602003 Summit of the Universe) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(5): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def gb():
print("Lr Goku Black (Super Saiyan Rosé) & Zamasu")
stage = input('What stage would you like to complete( 518002 Dark Nightmare) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
"BREAK"
stage = input('What stage would you like to complete(519001 Fusion in Blue) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(3): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete( 520001 Rose-Tinted Plot) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(3): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
"BREAK"
stage = input('What stage would you like to complete(522001 A New Hope) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(3): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete( 523002 Last Judgment...Or Last Hope) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(3): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
"BREAK"
stage = input('What stage would you like to complete(524001 The Epic Battle Begins) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(3): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def gf():
print("Lr Goku & Frieza (Final Form) (Angel)")
stage = input('What stage would you like to complete( 544001 Ever-Evolving Power) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(5): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
"BREAK"
stage = input('What stage would you like to complete(Ever-Evolving Evil) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(5): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(538001 Kaboom! Ultra Instinct) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(5): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
"BREAK"
stage = input('What stage would you like to complete(533002 The True Golden Frieza) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(5): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def by():
print("Lr Legendary Super Saiyan Broly")
stage = input('What stage would you like to complete(501003 The Demon Returns) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def android():
print("Lr Android 17&18")
stage = input('What stage would you like to complete(501002 awakening beyond) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(502002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(503002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(504002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(505002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(506002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(507002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(508002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(510002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(511002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(512002) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(513002) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(514001) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(515002) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(516001) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def Androids():
print("Lr Android 17&18/android#17")
stage = input('What stage would you like to complete(543001) : ')
difficulty = input('Enter the difficulty|(4:Super 2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(366008) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(503002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(366008) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
stage = input('What stage would you like to complete(415002) : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

400
aa.py
View file

@ -1,400 +0,0 @@
import commands
from colorama import init, Fore, Back, Style
# Coloroma autoreset
init(autoreset=True)
def ss():
print("TEQ Super Saiyan God SS Vegito")
stage = input('What stage would you like to complete(519002 Sublime Blue!) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def sss():
print("PHY Super Saiyan Broly")
stage = input('What stage would you like to complete(548001 The Greatest Saiyan Adversary) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def ssss():
print("STR Super Gogeta")
stage = input('What stage would you like to complete(505003 Fusion Reborn!) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(2): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def s():
print("AGL Super Saiyan Gogeta")
stage = input('What stage would you like to complete(549001 The Omnipotent Saiyan Warrior) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def a():
print("INT SSJ3 Bardock")
stage = input('What stage would you like to complete(534001 The Unknown Battle : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def aa():
print("STR SSJ4 Goku")
stage = input('What stage would you like to complete(525001 The Scarlet Hero! Super Saiyan 4! : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def aaa():
print("INT UI Goku")
stage = input('What stage would you like to complete(538001 Kaboom! Ultra Instinct : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def aaaa():
print("AGL SSJ4 Vegeta")
stage = input('What stage would you like to complete(526001 The Crimson Flash! Super Saiyan 4 : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def b():
print("PHY FP Frieza")
stage = input('What stage would you like to complete(507002 Full-Power Final Battle : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def bb():
print("TEQ Golden Frieza")
stage = input('What stage would you like to complete(516001 Emperors Obsession Area : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def bbb():
print("AGL SSJ3 Goku")
stage = input('What stage would you like to complete(504002 Ultimate Finishing Move Area : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(10): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def bbbb():
print("TEQ SSJ4 Gogeta")
stage = input('What stage would you like to complete(532001 The Ultimate Super Gogeta : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def c():
print("INT Super Gogeta")
stage = input('What stage would you like to complete(505003 Fusion Reborn!) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def cc():
print("SSJ3 Gotenks")
stage = input('What stage would you like to complete(513002 Super Gotenks) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
def ccc():
print("TEQ FP SSJ4 Goku")
stage = input('What stage would you like to complete(542001 Transcend Super Saiyan 4) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def cccc():
print("STR Jiren")
stage = input('What stage would you like to complete(540002 Confronting the Strongest of All Universes) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def d():
print("INT Golden Frieza")
stage = input('What stage would you like to complete(533002 The True Golden Frieza) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def dd():
print("PHY Android 17")
stage = input('What stage would you like to complete(543001 Superb Ranger) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def ddd():
print("TEQ Hit")
stage = input('What stage would you like to complete(547001 The Deadliest Assassin) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def dddd():
print("AGL SSBE Vegeta")
stage = input('What stage would you like to complete(524002 Battle for Honor and Pride) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def e():
print("PHY Kid Buu")
stage = input('What stage would you like to complete(524003 Regression to Evil) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def ee():
print("INT Kid Buu")
stage = input('What stage would you like to complete(524003 Regression to Evil) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def eee():
print("TEQ SSJ3 Goku (Angel)")
stage = input('What stage would you like to complete(528001 Mighty Warrior: 24-Hour Revival) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def eeee():
print("PHY Goku Black")
stage = input('What stage would you like to complete(518002 Dark Nightmare) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def f():
print("INT Goku Black")
stage = input('What stage would you like to complete(518003 Black Harbinger of Destruction) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def ff():
print("TEQ SSG Goku")
stage = input('What stage would you like to complete(549001 The Omnipotent Saiyan Warrior) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def ffx():
print("STR SSG Vegeta")
stage = input('What stage would you like to complete(549001 The Omnipotent Saiyan Warrior) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def fff():
print("AGL SSGSS Goku")
stage = input('What stage would you like to complete(514001 Ceaseless Combat) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(5): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def ffff():
print("STR Toppo")
stage = input('What stage would you like to complete(524002 Battle for Honor and Pride) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(5): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def g():
print("STR Rose Goku Black")
stage = input('What stage would you like to complete(520002 Searing Rose-Colored Fury) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def gg():
print("PHY SSGSS Vegito")
stage = input('What stage would you like to complete(519001 Fusion in Blue) : ')
difficulty = input('Enter the difficulty|(3:Super): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def ggg():
print("STR SSJ3 Goku")
stage = input('What stage would you like to complete(504002 Ultimate Finishing Move Area : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(10): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def gggx():
print("TEQ SSJ3 Broly")
stage = input('What stage would you like to complete(531001 All-Time Nastiest Evolution : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def gggg():
print("AGL Transgoku")
stage = input('What stage would you like to complete(544001 Ever-Evolving Power : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def h():
print("STR SSJ3 Vegeta")
stage = input('What stage would you like to complete(510002 The Most Powerful Blow : ')
difficulty = input('Enter the difficulty|(2:Z-Hard): ')
loop = input('Enter how many times to execute(10): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def hh():
print("PHY SSJ3 Gotenks")
stage = input('What stage would you like to complete(513003 One Powerful Super Fusion! : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def hhh():
print("AGL Turles")
stage = input('What stage would you like to complete(539001 Arrival of the Universe-Crusher! : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def hhhh():
print("STR Janemba")
stage = input('What stage would you like to complete(506003 Overwhelming Force of Evil! : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def j():
print("INT Janemba")
stage = input('What stage would you like to complete(506003 Overwhelming Force of Evil! : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(2): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def jj():
print("TEQ TransFrieza")
stage = input('What stage would you like to complete(545001 Ever-Evolving Evil : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(11): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)
#####################################################################################################################
def jjj():
print("AGL Broly")
stage = input('What stage would you like to complete(548001 The Greatest Saiyan Adversary) : ')
difficulty = input('Enter the difficulty|(4:Super2): ')
loop = input('Enter how many times to execute(5): ')
for i in range(int(loop)):
commands.complete_stage(stage, difficulty)

File diff suppressed because it is too large Load diff

121
config.py
View file

@ -1,121 +0,0 @@
from orator import DatabaseManager, Model
AdId = None
UniqueId = None
identifier = None
access_token = None
secret = None
client = 'japan'
platform = 'android'
deck = 1
allow_stamina_refill = True
### Database Config
jp_config = {'mysql': {'driver': 'sqlite', 'database': 'jp.db'}}
glb_config = {'mysql': {'driver': 'sqlite', 'database': 'glb.db'}}
db_glb = DatabaseManager(glb_config)
db_jp = DatabaseManager(jp_config)
Model.set_connection_resolver(db_glb)
class LeaderSkills(Model):
__table__ = 'leader_skills'
class LinkSkills(Model):
__table__ = 'link_skills'
class AreaTabs(Model):
__table__ = 'area_tabs'
class CardSpecials(Model):
__table__ = 'card_specials'
class Passives(Model):
__table__ = 'passive_skill_sets'
class Supers(Model):
__table__ = 'specials'
class ZBattles(Model):
__table__ = 'z_battle_stage_views'
class CardCategories(Model):
__table__ = 'card_categories'
class CardCardCategories(Model):
__table__ = 'card_card_categories'
class TreasureItems(Model):
__table__ = 'treasure_items'
class AwakeningItems(Model):
__table__ = 'awakening_items'
class SupportItems(Model):
__table__ = 'support_items'
class PotentialItems(Model):
__table__ = 'potential_items'
class SpecialItems(Model):
__table__ = 'special_items'
class TrainingItems(Model):
__table__ = 'training_items'
class Cards(Model):
__table__ = 'cards'
class Quests(Model):
__table__ = 'quests'
class Ranks(Model):
__table__ = 'rank_statuses'
class TrainingFields(Model):
__table__ = 'training_fields'
class Sugoroku(Model):
__table__ = 'sugoroku_maps'
class Area(Model):
__table__ = 'areas'
class Medal(Model):
__table__ = 'awakening_items'

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,33 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Module : decrypt.py
# Author : bssthu
# Project : pysqlsimplecipher
# Creation date : 2016-06-03
# Description :
#
import sys
from pysqlsimplecipher import decryptor
def usage():
print('Usage: python decrypt.py encrypted.db password output.db')
def main():
# arguments
argv = sys.argv
if len(argv) != 4:
usage()
return
filename_in = argv[1]
password = bytearray(argv[2].encode('utf8'))
filename_out = argv[3]
decryptor.decrypt_file(filename_in, password, filename_out)
if __name__ == '__main__':
main()

View file

@ -1,32 +0,0 @@
# -*- coding: utf-8 -*-
# Module : decrypt.py
# Author : bssthu
# Project : pysqlsimplecipher
# Creation date : 2016-06-03
# Description :
#
import sys
from pysqlsimplecipher import decryptor
def usage():
print('Usage: python decrypt.py encrypted.db password output.db')
def main(p = '9bf9c6ed9d537c399a6c4513e92ab24717e1a488381e3338593abd923fc8a13b'):
password = bytearray(p.encode('utf8'))
if p == '9bf9c6ed9d537c399a6c4513e92ab24717e1a488381e3338593abd923fc8a13b':
filename_in = 'dataenc_glb.db'
filename_out = 'glb.db'
else:
filename_in = 'dataenc_jp.db'
filename_out = 'jp.db'
decryptor.decrypt_file(filename_in, password, filename_out)
if __name__ == '__main__':
main()

122
dokkan.py
View file

@ -1,122 +0,0 @@
from colorama import init, Fore, Back, Style
import commands
import config
import sys
# Coloroma autoreset
init(autoreset=True)
while True:
print(' ')
print(Fore.CYAN + Style.BRIGHT + 'Select one of the following')
print('---------------------------------')
print(' ')
# Database Check.
while True:
print('Check for updated database? (' + Fore.YELLOW + Style.BRIGHT + 'Yes: 1 ' + Style.RESET_ALL + 'or ' + Fore.YELLOW + Style.BRIGHT + 'No: 2' + Style.RESET_ALL + ')',end='')
print()
db = input(' ')
if db.lower() == '1':
commands.db_download()
break
elif db.lower() == '2':
break
else:
print('')
continue
# Daily Logins?
print(' ')
print(Fore.CYAN + Style.BRIGHT + 'Choose an option')
print('---------------------------------')
print(' ')
while True:
print('Perform daily logins on all accounts? (' + Fore.YELLOW + Style.BRIGHT + 'Yes: 1 ' + Style.RESET_ALL + 'or ' + Fore.YELLOW + Style.BRIGHT + 'No: 2' + Style.RESET_ALL + ')',end='')
print()
db = input(' ')
if db.lower() == '1':
commands.bulk_daily_logins()
break
elif db.lower() == '2':
break
else:
continue
# Decide which client to use.
print(' ')
print(Fore.CYAN + Style.BRIGHT + 'Choose a version')
print('---------------------------------')
print(' ')
while True:
print('Which version? (' + Fore.YELLOW + Style.BRIGHT + 'Jp: 1 ' + Style.RESET_ALL + 'or ' + Fore.YELLOW + Style.BRIGHT + 'Global: 2' + Style.RESET_ALL + ')',end='')
print()
client = input(" ")
if client.lower() == '1':
config.client = 'japan'
break
elif client.lower() == '2':
config.client = 'global'
break
else:
continue
# User Options
print(' ')
while True:
print('---------------------------------')
print(Fore.CYAN + Style.BRIGHT + 'New Account :' + Fore.YELLOW + Style.BRIGHT + ' 0')
print(Fore.CYAN + Style.BRIGHT + 'Transfer Account :' + Fore.YELLOW + Style.BRIGHT + ' 1')
print(Fore.CYAN + Style.BRIGHT + 'Load From Save :' + Fore.YELLOW + Style.BRIGHT + ' 2')
print('---------------------------------')
print(' ')
command = input('Enter your choice: ')
if command == '0':
print(' ')
config.identifier = commands.signup()
commands.save_account()
config.access_token,config.secret = commands.signin(config.identifier)
commands.tutorial()
commands.daily_login()
break
elif command == '1':
print(' ')
commands.transfer_account()
commands.daily_login()
break
elif command == '2':
print(' ')
commands.load_account()
commands.daily_login()
commands.accept_gifts()
commands.accept_missions()
break
else:
print(Fore.RED + Style.BRIGHT + "Command not understood")
# User commands.
while True:
print('---------------------------------')
print(Fore.CYAN + Style.BRIGHT + "Type" + Fore.YELLOW + Style.BRIGHT + " 'help'" + Fore.CYAN + Style.BRIGHT + " to view all commands.")
# Set up comma separated chain commands. Handled via stdin
try:
command = input()
except:
sys.stdin = sys.__stdin__
command = input()
if command == 'exit':
break
# Pass command to command executor and handle keyboard interrupts.
try:
commands.user_command_executor(command)
except KeyboardInterrupt:
print(Fore.CYAN + Style.BRIGHT + 'User interrupted process.')
except Exception as e:
print(Fore.RED + Style.BRIGHT + repr(e))

View file

@ -1,33 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Module : encrypt.py
# Author : bssthu
# Project : pysqlsimplecipher
# Creation date : 2016-06-03
# Description :
#
import sys
from pysqlsimplecipher import encryptor
def usage():
print('Usage: python encrypt.py plain.db password output.db')
def main():
# arguments
argv = sys.argv
if len(argv) != 4:
usage()
return
filename_in = argv[1]
password = bytearray(argv[2].encode('utf8'))
filename_out = argv[3]
encryptor.encrypt_file(filename_in, password, filename_out)
if __name__ == '__main__':
main()

188
extra.py
View file

@ -1,188 +0,0 @@
import commands
from colorama import init, Fore, Back, Style
# Coloroma autoreset
init(autoreset=True)
def sbr_new():
print('---------------------------------')
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Universe Survival Sagaa Category Team')
commands.change_team()
commands.complete_stage('710021', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Super Saiyan 3" Category Team')
commands.change_team()
commands.complete_stage('710022', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Giant Form Category Team')
commands.change_team()
commands.complete_stage('710023', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Transformation Boost Category Team')
commands.change_team()
commands.complete_stage('710024', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Ginyu Force Category Team')
commands.change_team()
commands.complete_stage('710025', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Movie Bosses Category Team')
commands.change_team()
commands.complete_stage('710026', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Pure Saiyans Category Team')
commands.change_team()
commands.complete_stage('710027', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Future Saga Category Team')
commands.change_team()
commands.complete_stage('710028', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Full Power Category Team')
commands.change_team()
commands.complete_stage('710029', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Androids Category Team')
commands.change_team()
commands.complete_stage('710030', 5)
def sbr_next():
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Super Class Team')
commands.change_team()
commands.complete_stage('710011', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Extreme Class Team')
commands.change_team()
commands.complete_stage('710012', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Fusion Category Team')
commands.change_team()
commands.complete_stage('710013', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Shadow Dragons Category Team')
commands.change_team()
commands.complete_stage('710014', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Peppy Gals Category Team')
commands.change_team()
commands.complete_stage('710015', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Hybrid Saiyans Category Team')
commands.change_team()
commands.complete_stage('710016', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Resurrected Warriors Category Team')
commands.change_team()
commands.complete_stage('710017', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Realm of Gods Category Team')
commands.change_team()
commands.complete_stage('710018', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Majin Buu Saga Category Team')
commands.change_team()
commands.complete_stage('710019', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Potara Category Team')
commands.change_team()
commands.complete_stage('710020', 5)
print('---------------------------------')
def complete_sbr():
print('------------------------------------')
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Super TEQ Team')
commands.change_team()
commands.complete_stage('710001', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Extreme TEQ Team')
commands.change_team()
commands.complete_stage('710002', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Super INT Team')
commands.change_team()
commands.complete_stage('710003', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Extreme INT Team')
commands.change_team()
commands.complete_stage('710004', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Super PHY Team')
commands.complete_stage('710005', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Extreme PHY Team')
commands.change_team()
commands.complete_stage('710006', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Super AGL Team')
commands.change_team()
commands.complete_stage('710007', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Extreme AGL Team')
commands.change_team()
commands.complete_stage('710008', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Super STR Team')
commands.change_team()
commands.complete_stage('710009', 5)
print(Fore.YELLOW + Style.BRIGHT + 'Clear with Extreme STR Team')
commands.change_team()
commands.complete_stage('710010', 5)
print('---------------------------------')

BIN
glb.db

Binary file not shown.

View file

@ -1,2 +0,0 @@
1572486763
1569982484

BIN
jp.db

Binary file not shown.

139
packet.py
View file

@ -1,139 +0,0 @@
### packet.py contains functions critical to sending requests to the server
import base64
import binascii
import config
from Crypto.Cipher import AES
import hashlib
import hmac
import json
import os
import time
import uuid
# Padding for the input string --not
# related to encryption itself.
BLOCK_SIZE = 16 # Bytes
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * chr(BLOCK_SIZE
- len(s) % BLOCK_SIZE)
unpad = lambda s: s[:-ord(s[len(s) - 1:])]
####################################################################
def guid():
# Generates UniqueID & AdIDcompatible with Bandais servers
# Returns dict
UUID = str(uuid.uuid4())
UniqueId = str(uuid.uuid4()) + ':' + UUID[0:8]
return dict(AdId=str(uuid.uuid4()), UniqueId=UniqueId)
####################################################################
def mac(method,action):
# Creates Mac Authentication header string used when sending requests
# returns string
ts = str(int(round(time.time(), 0)))
nonce = ts + ':' + config.AdId
if config.client == 'global':
value = ts + '\n' + nonce + '\n' + method + '\n' + action + '\n' \
+ 'ishin-global.aktsk.com' + '\n' + '3001' + '''
'''
else:
value = ts + '\n' + nonce + '\n' + method + '\n' + action + '\n' \
+ 'ishin-production.aktsk.jp' + '\n' + '3001' + '''
'''
hmac_hex_bin = hmac.new(config.secret.encode('utf-8'), value.encode('utf-8'
), hashlib.sha256).digest()
mac = base64.b64encode(hmac_hex_bin).decode()
final = 'MAC ' + 'id=' + '"' + config.access_token + '"' + ' nonce=' + '"' \
+ nonce + '"' + ' ts=' + '"' + ts + '"' + ' mac=' + '"' + mac \
+ '"'
return final
####################################################################
# ================================================================
# get_key_and_iv
# ================================================================
def get_key_and_iv(
password,
salt,
klen=32,
ilen=16,
msgdgst='md5',
):
'''
Derive the key and the IV from the given password and salt.
This is a niftier implementation than my direct transliteration of
the C++ code although I modified to support different digests.
CITATION: http://stackoverflow.com/questions/13907841/implement-openssl-aes-encryption-in-python
@param password The password to use as the seed.
@param salt The salt.
@param klen The key length.
@param ilen The initialization vector length.
@param msgdgst The message digest algorithm to use.
'''
# equivalent to:
# from hashlib import <mdi> as mdf
# from hashlib import md5 as mdf
# from hashlib import sha512 as mdf
mdf = getattr(__import__('hashlib', fromlist=[msgdgst]), msgdgst)
password = password.encode('ascii', 'ignore') # convert to ASCII
try:
maxlen = klen + ilen
keyiv = mdf(password + salt).digest()
tmp = [keyiv]
while len(tmp) < maxlen:
tmp.append(mdf(tmp[-1] + password + salt).digest())
keyiv += tmp[-1] # append the last byte
key = keyiv[:klen]
iv = keyiv[klen:klen + ilen]
return (key, iv)
except UnicodeDecodeError:
return (None, None)
####################################################################
def encrypt_sign(data):
data = pad(data)
key1 = str.encode(data)
password = \
'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzJ9JaHioVi6rr0TAfr6j'
salt = os.urandom(8)
(key, iv) = get_key_and_iv(password, salt, klen=32, ilen=16,
msgdgst='md5')
cipher = AES.new(key, AES.MODE_CBC, iv)
a = cipher.encrypt(key1)
a = salt + a
return base64.b64encode(a).decode()
####################################################################
def decrypt_sign(sign):
buffer = base64.b64decode(sign)
buffer_encoded = base64.b64encode(buffer)
password = \
'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzJ9JaHioVi6rr0TAfr6j'
salt = buffer[0:8]
(key, iv) = get_key_and_iv(password, salt, klen=32, ilen=16,
msgdgst='md5')
data = buffer[8:len(buffer)]
cipher = AES.new(key, AES.MODE_CBC, iv)
a = unpad(cipher.decrypt(data)).decode('utf8')
return json.loads(a)
####################################################################

View file

@ -1,19 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Module : config.py
# Author : bssthu
# Project : pysqlsimplecipher
# Creation date : 2016-06-03
# Description :
#
salt_mask = 0x3a
key_sz = 32
key_iter = 64000
hmac_key_sz = 32
hmac_key_iter = 2
page_sz = 1024
iv_sz = 16
reserve_sz = 48
hmac_sz = 20

View file

@ -1,143 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Module : decryptor.py
# Author : bssthu
# Project : pysqlsimplecipher
# Creation date : 2016-06-03
# Description :
#
from pysqlsimplecipher import config
from pysqlsimplecipher import util
def decrypt_file(filename_in, password, filename_out):
if not isinstance(filename_in, str):
raise RuntimeError('filename_in must be a str.')
if not isinstance(password, bytearray):
raise RuntimeError('password must be a bytearray.')
if not isinstance(filename_out, str):
raise RuntimeError('filename_out must be a str.')
# read
with open(filename_in, 'rb') as fp:
raw = fp.read()
# decrypt
dec = decrypt_default(raw, password)
# write
with open(filename_out, 'wb') as fp:
fp.write(dec)
def decrypt_default(raw, password):
# configs
salt_mask = config.salt_mask
key_sz = config.key_sz
key_iter = config.key_iter
hmac_key_sz = config.hmac_key_sz
hmac_key_iter = config.hmac_key_iter
page_sz = config.page_sz
iv_sz = config.iv_sz
reserve_sz = config.reserve_sz
hmac_sz = config.hmac_sz
return decrypt(raw, password, salt_mask, key_sz, key_iter, hmac_key_sz, hmac_key_iter, page_sz, iv_sz, reserve_sz, hmac_sz)
def decrypt(raw, password, salt_mask, key_sz, key_iter, hmac_key_sz, hmac_key_iter, page_sz, iv_sz, reserve_sz, hmac_sz):
dec = b'SQLite format 3\0'
# derive key
salt_sz = 16
salt = raw[:salt_sz]
key, hmac_key = util.key_derive(salt, password, salt_mask, key_sz, key_iter, hmac_key_sz, hmac_key_iter)
# decrypt file header, try with default page size
page_sz, reserve_sz = decrypt_page_header(raw, key, salt_sz, page_sz, iv_sz, reserve_sz)
if page_sz < 0 or reserve_sz < 0:
raise RuntimeError('failed to decide page size or reserve size.')
# decrypt pages
for i in range(0, int(len(raw) / 1024)):
page = util.get_page(raw, page_sz, i + 1)
if i == 0:
# skip salt
page = page[salt_sz:]
page_content = page[:-reserve_sz]
reserve = page[-reserve_sz:]
iv = reserve[:iv_sz]
# check hmac
hmac_old = reserve[iv_sz:iv_sz+hmac_sz]
hmac_new = util.generate_hmac(hmac_key, page_content + iv, i + 1)
if not hmac_old == hmac_new:
raise RuntimeError('hmac check failed in page %d.' % (i+1))
# decrypt content
page_dec = util.decrypt(page_content, key, iv)
dec += page_dec + util.random_bytes(reserve_sz)
return dec
def decrypt_page_header(raw, key, salt_sz, page_sz, iv_sz, reserve_sz):
"""Try to decrypt first page with default config.
If default page size fail, change page size.
When succeed, return page_sz, reserve_sz.
If fail, return -1, -1.
"""
if not util.is_valid_page_size(page_sz):
page_sz = 512
new_reserve_sz = try_get_reserve_size_for_specified_page_size(raw, key, salt_sz, page_sz, iv_sz, reserve_sz)
if new_reserve_sz > 0: # default page_sz is ok
return page_sz, new_reserve_sz
page_sz = 512
while page_sz <= 65536:
new_reserve_sz = try_get_reserve_size_for_specified_page_size(raw, key, salt_sz, page_sz, iv_sz, reserve_sz)
if new_reserve_sz > 0:
return page_sz, new_reserve_sz
page_sz <<= 1
return -1, -1 # fail
def try_get_reserve_size_for_specified_page_size(raw, key, salt_sz, page_sz, iv_sz, reserve_sz):
"""Try to decrypt first page with specified page size.
If default reserve size fail, change reserve size.
When succeed, return reserve size.
If always fail, return -1.
"""
first_page_content = util.get_page(raw, page_sz, 1)[salt_sz:]
if reserve_sz >= iv_sz:
first_page_dec = decrypt_by_reserve_size(first_page_content, key, iv_sz, reserve_sz)
# default reserve_sz is ok
if util.is_valid_decrypted_header(first_page_dec) \
and page_sz == util.get_page_size_from_database_header(raw[:salt_sz] + first_page_dec) \
and reserve_sz == util.get_reserved_size_from_database_header(raw[:salt_sz] + first_page_dec):
return reserve_sz
# try every possible reserve size.
# the usable size of a page is at least 480.
for reserve_sz in range(iv_sz, page_sz - 480):
first_page_dec = decrypt_by_reserve_size(first_page_content, key, iv_sz, reserve_sz)
if util.is_valid_decrypted_header(first_page_dec) \
and page_sz == util.get_page_size_from_database_header(raw[:salt_sz] + first_page_dec) \
and reserve_sz == util.get_reserved_size_from_database_header(raw[:salt_sz] + first_page_dec):
return reserve_sz
return -1 # fail
def decrypt_by_reserve_size(first_page_without_salt, key, iv_sz, reserve_sz):
"""Decrypt page content using specified reserve size"""
reserve = first_page_without_salt[-reserve_sz:]
iv = reserve[:iv_sz]
return util.decrypt(first_page_without_salt, key, iv)

View file

@ -1,95 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Module : encryptor.py
# Author : bssthu
# Project : pysqlsimplecipher
# Creation date : 2016-06-03
# Description :
#
import hashlib
import hmac
from pysqlsimplecipher import config
from pysqlsimplecipher import util
def check_database_header(header):
if not util.is_valid_database_header(header):
raise RuntimeError('invalid database header.')
page_sz = util.get_page_size_from_database_header(header)
if not util.is_valid_page_size(page_sz):
raise RuntimeError('invalid page size %d.' % page_sz)
reserve_sz = util.get_reserved_size_from_database_header(header)
if reserve_sz == 0:
raise RuntimeError('needs reserved space at the end of each page.')
return page_sz, reserve_sz
def encrypt_file(filename_in, password, filename_out):
if not isinstance(filename_in, str):
raise RuntimeError('filename_in must be a str.')
if not isinstance(password, bytearray):
raise RuntimeError('password must be a bytearray.')
if not isinstance(filename_out, str):
raise RuntimeError('filename_out must be a str.')
# read
with open(filename_in, 'rb') as fp:
raw = fp.read()
# check header
page_sz, reserve_sz = check_database_header(raw[:100])
# encrypt
dec = encrypt_default(raw, password, page_sz, reserve_sz)
# write
with open(filename_out, 'wb') as fp:
fp.write(dec)
def encrypt_default(raw, password, page_sz, reserve_sz):
# configs
salt_mask = config.salt_mask
key_sz = config.key_sz
key_iter = config.key_iter
hmac_key_sz = config.hmac_key_sz
hmac_key_iter = config.hmac_key_iter
iv_sz = config.iv_sz
hmac_sz = config.hmac_sz
if reserve_sz < iv_sz + hmac_sz:
raise RuntimeError('reserved space at the end of each page is %d, needs %d.' % (reserve_sz, iv_sz + hmac_sz))
return encrypt(raw, password, salt_mask, key_sz, key_iter, hmac_key_sz, hmac_key_iter, page_sz, iv_sz, reserve_sz, hmac_sz)
def encrypt(raw, password, salt_mask, key_sz, key_iter, hmac_key_sz, hmac_key_iter, page_sz, iv_sz, reserve_sz, hmac_sz):
salt_sz = 16
salt = util.random_bytes(salt_sz)
enc = salt
# derive key
key, hmac_key = util.key_derive(salt, password, salt_mask, key_sz, key_iter, hmac_key_sz, hmac_key_iter)
# encrypt pages
for i in range(0, int(len(raw) / 1024)):
page = util.get_page(raw, page_sz, i + 1)
if i == 0:
# skip header string
page = page[salt_sz:]
page_content = page[:-reserve_sz]
iv = util.random_bytes(iv_sz)
# encrypt content
page_enc = util.encrypt(page_content, key, iv)
# generate hmac
hmac_new = util.generate_hmac(hmac_key, page_enc + iv, i + 1)
enc += page_enc + iv + hmac_new
if reserve_sz > iv_sz + hmac_sz:
enc += util.random_bytes(reserve_sz - iv_sz - hmac_sz)
return enc

View file

@ -1,88 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Module : util.py
# Author : bssthu
# Project : pysqlsimplecipher
# Creation date : 2016-06-03
# Description :
#
import os
import math
import hashlib
import hmac
import struct
from Crypto.Cipher import AES
def encrypt(raw, key, iv):
cipher = AES.new(key, AES.MODE_CBC, iv)
return cipher.encrypt(raw)
def decrypt(raw, key, iv):
cipher = AES.new(key, AES.MODE_CBC, iv)
return cipher.decrypt(raw)
def is_valid_database_header(header):
return header[:16] == b'SQLite format 3\0' and is_valid_decrypted_header(header[16:])
def is_valid_decrypted_header(header):
# skip first 16 bytes
if type(header) is str: # python2
header = [ord(x) for x in header]
return header[21-16] == 64 and header[22-16] == 32 and header[23-16] == 32
def get_page_size_from_database_header(header):
if type(header) is str: # python2
page_sz = 256 * ord(header[16]) + ord(header[17])
else:
page_sz = int.from_bytes(header[16:18], 'big')
if page_sz == 1: # since SQLite version 3.7.1
page_sz = 65536
return page_sz
def get_reserved_size_from_database_header(header):
if type(header) is str: # python2
return ord(header[20])
else:
return int(header[20])
def is_valid_page_size(page_sz):
# page_sz must be power of 2, and greater than 512
return page_sz >= 512 and page_sz == 2 ** int(math.log(page_sz, 2))
def get_page(raw, page_sz, page_no):
return raw[page_sz*(page_no-1):page_sz*page_no]
def random_bytes(n):
return os.urandom(n)
def key_derive(salt, password, salt_mask, key_sz, key_iter, hmac_key_sz, hmac_key_iter):
"""Derive an encryption key for page encryption/decryption, an key for hmac generation"""
key = hashlib.pbkdf2_hmac('sha1', password, salt, key_iter, key_sz)
try:
hmac_salt = bytearray([x ^ salt_mask for x in salt])
hmac_key = hashlib.pbkdf2_hmac('sha1', key, hmac_salt, hmac_key_iter, hmac_key_sz)
except TypeError: # python2
hmac_salt = b''
for x in salt:
hmac_salt += chr(ord(x) ^ salt_mask)
hmac_key = hashlib.pbkdf2_hmac('sha1', str(key), hmac_salt, hmac_key_iter, hmac_key_sz)
return key, hmac_key
def generate_hmac(hmac_key, content, page_no):
hmac_obj = hmac.new(hmac_key, content, hashlib.sha1)
hmac_obj.update(struct.pack('<i', page_no))
return hmac_obj.digest()

49
setup.py Normal file → Executable file
View file

@ -1,22 +1,37 @@
#!/usr/bin/env python3 from distutils.core import setup
# -*- coding: utf-8 -*-
# Module : setup.py
# Author : bssthu
# Project : pysqlsimplecipher
# Creation date : 2016-06-05
# Description :
#
from setuptools import setup def get_version(relpath):
"""read version info from file without importing it"""
from os.path import dirname, join
for line in open(join(dirname(__file__), relpath)):
if '__version__' in line:
if '"' in line:
# __version__ = "0.9"
return line.split('"')[1]
elif "'" in line:
return line.split("'")[1]
setup(
name='wget',
version=get_version('wget.py'),
author='anatoly techtonik <techtonik@gmail.com>',
url='http://bitbucket.org/techtonik/python-wget/',
setup(name='pysqlsimplecipher', description="pure python download utility",
version='0.2', license="Public Domain",
url='https://github.com/bssthu/pysqlsimplecipher', classifiers=[
license='GNU Lesser General Public License Version 3', 'Environment :: Console',
author='bssthu', 'License :: Public Domain',
description='A tool for sqlite database encryption or decryption like sqlcipher without install sqlcipher', 'Operating System :: OS Independent',
install_requires=['pycrypto'], 'Programming Language :: Python :: 2',
packages=['pysqlsimplecipher'] 'Programming Language :: Python :: 3',
'Topic :: Software Development :: Libraries :: Python Modules',
'Topic :: System :: Networking',
'Topic :: Utilities',
],
py_modules=['wget'],
long_description=open('README.txt').read(),
) )

628
wget.py Executable file
View file

@ -0,0 +1,628 @@
#!/usr/bin/env python
"""
Download utility as an easy way to get file from the net
python -m wget <URL>
python wget.py <URL>
Downloads: http://pypi.python.org/pypi/wget/
Development: http://bitbucket.org/techtonik/python-wget/
wget.py is not option compatible with Unix wget utility,
to make command line interface intuitive for new people.
Public domain by anatoly techtonik <techtonik@gmail.com>
Also available under the terms of MIT license
Copyright (c) 2010-2015 anatoly techtonik
"""
__version__ = "3.2"
import sys, shutil, os
import tempfile
import math
PY3K = sys.version_info >= (3, 0)
if PY3K:
import urllib.request as ulib
import urllib.parse as urlparse
else:
import urllib as ulib
import urlparse
# --- workarounds for Python misbehavior ---
# enable passing unicode arguments from command line in Python 2.x
# https://stackoverflow.com/questions/846850/read-unicode-characters
def win32_utf8_argv():
"""Uses shell32.GetCommandLineArgvW to get sys.argv as a list of Unicode
strings.
Versions 2.x of Python don't support Unicode in sys.argv on
Windows, with the underlying Windows API instead replacing multi-byte
characters with '?'.
"""
from ctypes import POINTER, byref, cdll, c_int, windll
from ctypes.wintypes import LPCWSTR, LPWSTR
GetCommandLineW = cdll.kernel32.GetCommandLineW
GetCommandLineW.argtypes = []
GetCommandLineW.restype = LPCWSTR
CommandLineToArgvW = windll.shell32.CommandLineToArgvW
CommandLineToArgvW.argtypes = [LPCWSTR, POINTER(c_int)]
CommandLineToArgvW.restype = POINTER(LPWSTR)
cmd = GetCommandLineW()
argc = c_int(0)
argv = CommandLineToArgvW(cmd, byref(argc))
argnum = argc.value
sysnum = len(sys.argv)
result = []
if argnum > 0:
# Remove Python executable and commands if present
start = argnum - sysnum
for i in range(start, argnum):
result.append(argv[i].encode('utf-8'))
return result
# enable unicode output to windows console
# https://stackoverflow.com/questions/878972/windows-cmd-encoding-change-causes-python-crash
def win32_unicode_console():
import codecs
from ctypes import WINFUNCTYPE, windll, POINTER, byref, c_int
from ctypes.wintypes import BOOL, HANDLE, DWORD, LPWSTR, LPCWSTR, LPVOID
original_stderr = sys.stderr
# Output exceptions in this code to original_stderr, so that we can at least see them
def _complain(message):
original_stderr.write(message if isinstance(message, str) else repr(message))
original_stderr.write('\n')
codecs.register(lambda name: codecs.lookup('utf-8') if name == 'cp65001' else None)
try:
GetStdHandle = WINFUNCTYPE(HANDLE, DWORD)(("GetStdHandle", windll.kernel32))
STD_OUTPUT_HANDLE = DWORD(-11)
STD_ERROR_HANDLE = DWORD(-12)
GetFileType = WINFUNCTYPE(DWORD, DWORD)(("GetFileType", windll.kernel32))
FILE_TYPE_CHAR = 0x0002
FILE_TYPE_REMOTE = 0x8000
GetConsoleMode = WINFUNCTYPE(BOOL, HANDLE, POINTER(DWORD))(("GetConsoleMode", windll.kernel32))
INVALID_HANDLE_VALUE = DWORD(-1).value
def not_a_console(handle):
if handle == INVALID_HANDLE_VALUE or handle is None:
return True
return ((GetFileType(handle) & ~FILE_TYPE_REMOTE) != FILE_TYPE_CHAR
or GetConsoleMode(handle, byref(DWORD())) == 0)
old_stdout_fileno = None
old_stderr_fileno = None
if hasattr(sys.stdout, 'fileno'):
old_stdout_fileno = sys.stdout.fileno()
if hasattr(sys.stderr, 'fileno'):
old_stderr_fileno = sys.stderr.fileno()
STDOUT_FILENO = 1
STDERR_FILENO = 2
real_stdout = (old_stdout_fileno == STDOUT_FILENO)
real_stderr = (old_stderr_fileno == STDERR_FILENO)
if real_stdout:
hStdout = GetStdHandle(STD_OUTPUT_HANDLE)
if not_a_console(hStdout):
real_stdout = False
if real_stderr:
hStderr = GetStdHandle(STD_ERROR_HANDLE)
if not_a_console(hStderr):
real_stderr = False
if real_stdout or real_stderr:
WriteConsoleW = WINFUNCTYPE(BOOL, HANDLE, LPWSTR, DWORD, POINTER(DWORD), LPVOID)(("WriteConsoleW", windll.kernel32))
class UnicodeOutput:
def __init__(self, hConsole, stream, fileno, name):
self._hConsole = hConsole
self._stream = stream
self._fileno = fileno
self.closed = False
self.softspace = False
self.mode = 'w'
self.encoding = 'utf-8'
self.name = name
self.flush()
def isatty(self):
return False
def close(self):
# don't really close the handle, that would only cause problems
self.closed = True
def fileno(self):
return self._fileno
def flush(self):
if self._hConsole is None:
try:
self._stream.flush()
except Exception as e:
_complain("%s.flush: %r from %r" % (self.name, e, self._stream))
raise
def write(self, text):
try:
if self._hConsole is None:
if not PY3K and isinstance(text, unicode):
text = text.encode('utf-8')
elif PY3K and isinstance(text, str):
text = text.encode('utf-8')
self._stream.write(text)
else:
if not PY3K and not isinstance(text, unicode):
text = str(text).decode('utf-8')
elif PY3K and not isinstance(text, str):
text = text.decode('utf-8')
remaining = len(text)
while remaining:
n = DWORD(0)
# There is a shorter-than-documented limitation on the
# length of the string passed to WriteConsoleW (see
# <http://tahoe-lafs.org/trac/tahoe-lafs/ticket/1232>.
retval = WriteConsoleW(self._hConsole, text, min(remaining, 10000), byref(n), None)
if retval == 0 or n.value == 0:
raise IOError("WriteConsoleW returned %r, n.value = %r" % (retval, n.value))
remaining -= n.value
if not remaining:
break
text = text[n.value:]
except Exception as e:
_complain("%s.write: %r" % (self.name, e))
raise
def writelines(self, lines):
try:
for line in lines:
self.write(line)
except Exception as e:
_complain("%s.writelines: %r" % (self.name, e))
raise
if real_stdout:
sys.stdout = UnicodeOutput(hStdout, None, STDOUT_FILENO, '<Unicode console stdout>')
else:
sys.stdout = UnicodeOutput(None, sys.stdout, old_stdout_fileno, '<Unicode redirected stdout>')
if real_stderr:
sys.stderr = UnicodeOutput(hStderr, None, STDERR_FILENO, '<Unicode console stderr>')
else:
sys.stderr = UnicodeOutput(None, sys.stderr, old_stderr_fileno, '<Unicode redirected stderr>')
except Exception as e:
_complain("exception %r while fixing up sys.stdout and sys.stderr" % (e,))
# --- helpers ---
def to_unicode(filename):
""":return: filename decoded from utf-8 to unicode"""
#
if PY3K:
# [ ] test this on Python 3 + (Windows, Linux)
# [ ] port filename_from_headers once this works
# [ ] add test to repository / Travis
return filename
else:
if isinstance(filename, unicode):
return filename
else:
return unicode(filename, 'utf-8')
def filename_from_url(url):
""":return: detected filename as unicode or None"""
# [ ] test urlparse behavior with unicode url
fname = os.path.basename(urlparse.urlparse(url).path)
if len(fname.strip(" \n\t.")) == 0:
return None
return to_unicode(fname)
def filename_from_headers(headers):
"""Detect filename from Content-Disposition headers if present.
http://greenbytes.de/tech/tc2231/
:param: headers as dict, list or string
:return: filename from content-disposition header or None
"""
if type(headers) == str:
headers = headers.splitlines()
if type(headers) == list:
headers = dict([x.split(':', 1) for x in headers])
cdisp = headers.get("Content-Disposition")
if not cdisp:
return None
cdtype = cdisp.split(';')
if len(cdtype) == 1:
return None
if cdtype[0].strip().lower() not in ('inline', 'attachment'):
return None
# several filename params is illegal, but just in case
fnames = [x for x in cdtype[1:] if x.strip().startswith('filename=')]
if len(fnames) > 1:
return None
name = fnames[0].split('=')[1].strip(' \t"')
name = os.path.basename(name)
if not name:
return None
return name
def filename_fix_existing(filename):
"""Expands name portion of filename with numeric ' (x)' suffix to
return filename that doesn't exist already.
"""
dirname = u'.'
name, ext = filename.rsplit('.', 1)
names = [x for x in os.listdir(dirname) if x.startswith(name)]
names = [x.rsplit('.', 1)[0] for x in names]
suffixes = [x.replace(name, '') for x in names]
# filter suffixes that match ' (x)' pattern
suffixes = [x[2:-1] for x in suffixes
if x.startswith(' (') and x.endswith(')')]
indexes = [int(x) for x in suffixes
if set(x) <= set('0123456789')]
idx = 1
if indexes:
idx += sorted(indexes)[-1]
return '%s (%d).%s' % (name, idx, ext)
# --- terminal/console output helpers ---
def get_console_width():
"""Return width of available window area. Autodetection works for
Windows and POSIX platforms. Returns 80 for others
Code from http://bitbucket.org/techtonik/python-pager
"""
if os.name == 'nt':
STD_INPUT_HANDLE = -10
STD_OUTPUT_HANDLE = -11
STD_ERROR_HANDLE = -12
# get console handle
from ctypes import windll, Structure, byref
try:
from ctypes.wintypes import SHORT, WORD, DWORD
except ImportError:
# workaround for missing types in Python 2.5
from ctypes import (
c_short as SHORT, c_ushort as WORD, c_ulong as DWORD)
console_handle = windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
# CONSOLE_SCREEN_BUFFER_INFO Structure
class COORD(Structure):
_fields_ = [("X", SHORT), ("Y", SHORT)]
class SMALL_RECT(Structure):
_fields_ = [("Left", SHORT), ("Top", SHORT),
("Right", SHORT), ("Bottom", SHORT)]
class CONSOLE_SCREEN_BUFFER_INFO(Structure):
_fields_ = [("dwSize", COORD),
("dwCursorPosition", COORD),
("wAttributes", WORD),
("srWindow", SMALL_RECT),
("dwMaximumWindowSize", DWORD)]
sbi = CONSOLE_SCREEN_BUFFER_INFO()
ret = windll.kernel32.GetConsoleScreenBufferInfo(
console_handle, byref(sbi))
if ret == 0:
return 0
return sbi.srWindow.Right+1
elif os.name == 'posix':
from fcntl import ioctl
from termios import TIOCGWINSZ
from array import array
winsize = array("H", [0] * 4)
try:
ioctl(sys.stdout.fileno(), TIOCGWINSZ, winsize)
except IOError:
pass
return (winsize[1], winsize[0])[0]
return 80
def bar_thermometer(current, total, width=80):
"""Return thermometer style progress bar string. `total` argument
can not be zero. The minimum size of bar returned is 3. Example:
[.......... ]
Control and trailing symbols (\r and spaces) are not included.
See `bar_adaptive` for more information.
"""
# number of dots on thermometer scale
avail_dots = width-2
shaded_dots = int(math.floor(float(current) / total * avail_dots))
return '[' + '.'*shaded_dots + ' '*(avail_dots-shaded_dots) + ']'
def bar_adaptive(current, total, width=80):
"""Return progress bar string for given values in one of three
styles depending on available width:
[.. ] downloaded / total
downloaded / total
[.. ]
if total value is unknown or <= 0, show bytes counter using two
adaptive styles:
%s / unknown
%s
if there is not enough space on the screen, do not display anything
returned string doesn't include control characters like \r used to
place cursor at the beginning of the line to erase previous content.
this function leaves one free character at the end of string to
avoid automatic linefeed on Windows.
"""
# process special case when total size is unknown and return immediately
if not total or total < 0:
msg = "%s / unknown" % current
if len(msg) < width: # leaves one character to avoid linefeed
return msg
if len("%s" % current) < width:
return "%s" % current
# --- adaptive layout algorithm ---
#
# [x] describe the format of the progress bar
# [x] describe min width for each data field
# [x] set priorities for each element
# [x] select elements to be shown
# [x] choose top priority element min_width < avail_width
# [x] lessen avail_width by value if min_width
# [x] exclude element from priority list and repeat
# 10% [.. ] 10/100
# pppp bbbbb sssssss
min_width = {
'percent': 4, # 100%
'bar': 3, # [.]
'size': len("%s" % total)*2 + 3, # 'xxxx / yyyy'
}
priority = ['percent', 'bar', 'size']
# select elements to show
selected = []
avail = width
for field in priority:
if min_width[field] < avail:
selected.append(field)
avail -= min_width[field]+1 # +1 is for separator or for reserved space at
# the end of line to avoid linefeed on Windows
# render
output = ''
for field in selected:
if field == 'percent':
# fixed size width for percentage
output += ('%s%%' % (100 * current // total)).rjust(min_width['percent'])
elif field == 'bar': # [. ]
# bar takes its min width + all available space
output += bar_thermometer(current, total, min_width['bar']+avail)
elif field == 'size':
# size field has a constant width (min == max)
output += ("%s / %s" % (current, total)).rjust(min_width['size'])
selected = selected[1:]
if selected:
output += ' ' # add field separator
return output
# --/ console helpers
__current_size = 0 # global state variable, which exists solely as a
# workaround against Python 3.3.0 regression
# http://bugs.python.org/issue16409
# fixed in Python 3.3.1
def callback_progress(blocks, block_size, total_size, bar_function):
"""callback function for urlretrieve that is called when connection is
created and when once for each block
draws adaptive progress bar in terminal/console
use sys.stdout.write() instead of "print,", because it allows one more
symbol at the line end without linefeed on Windows
:param blocks: number of blocks transferred so far
:param block_size: in bytes
:param total_size: in bytes, can be -1 if server doesn't return it
:param bar_function: another callback function to visualize progress
"""
global __current_size
width = min(100, get_console_width())
if sys.version_info[:3] == (3, 3, 0): # regression workaround
if blocks == 0: # first call
__current_size = 0
else:
__current_size += block_size
current_size = __current_size
else:
current_size = min(blocks*block_size, total_size)
progress = bar_function(current_size, total_size, width)
if progress:
sys.stdout.write("\r" + progress)
def detect_filename(url=None, out=None, headers=None, default="download.wget"):
"""Return filename for saving file. If no filename is detected from output
argument, url or headers, return default (download.wget)
"""
names = dict(out='', url='', headers='')
if out:
names["out"] = out or ''
if url:
names["url"] = filename_from_url(url) or ''
if headers:
names["headers"] = filename_from_headers(headers) or ''
return names["out"] or names["headers"] or names["url"] or default
def download(url, out=None, bar=bar_adaptive):
"""High level function, which downloads URL into tmp file in current
directory and then renames it to filename autodetected from either URL
or HTTP headers.
:param bar: function to track download progress (visualize etc.)
:param out: output filename or directory
:return: filename where URL is downloaded to
"""
# detect of out is a directory
outdir = None
if out and os.path.isdir(out):
outdir = out
out = None
# get filename for temp file in current directory
prefix = detect_filename(url, out)
(fd, tmpfile) = tempfile.mkstemp(".tmp", prefix=prefix, dir=".")
os.close(fd)
os.unlink(tmpfile)
# set progress monitoring callback
def callback_charged(blocks, block_size, total_size):
# 'closure' to set bar drawing function in callback
callback_progress(blocks, block_size, total_size, bar_function=bar)
if bar:
callback = callback_charged
else:
callback = None
if PY3K:
# Python 3 can not quote URL as needed
binurl = list(urlparse.urlsplit(url))
binurl[2] = urlparse.quote(binurl[2])
binurl = urlparse.urlunsplit(binurl)
else:
binurl = url
(tmpfile, headers) = ulib.urlretrieve(binurl, tmpfile, callback)
filename = detect_filename(url, out, headers)
if outdir:
filename = outdir + "/" + filename
# add numeric ' (x)' suffix if filename already exists
if os.path.exists(filename):
filename = filename_fix_existing(filename)
shutil.move(tmpfile, filename)
#print headers
return filename
usage = """\
usage: wget.py [options] URL
options:
-o --output FILE|DIR output filename or directory
-h --help
--version
"""
if __name__ == "__main__":
if len(sys.argv) < 2 or "-h" in sys.argv or "--help" in sys.argv:
sys.exit(usage)
if "--version" in sys.argv:
sys.exit("wget.py " + __version__)
# patch Python 2.x to read unicode from command line
if not PY3K and sys.platform == "win32":
sys.argv = win32_utf8_argv()
# patch Python to write unicode characters to console
if sys.platform == "win32":
win32_unicode_console()
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-o", "--output", dest="output")
(options, args) = parser.parse_args()
url = sys.argv[1]
filename = download(args[0], out=options.output)
print("")
print("Saved under %s" % filename)
r"""
features that require more tuits for urlretrieve API
http://www.python.org/doc/2.6/library/urllib.html#urllib.urlretrieve
[x] autodetect filename from URL
[x] autodetect filename from headers - Content-Disposition
http://greenbytes.de/tech/tc2231/
[ ] make HEAD request to detect temp filename from Content-Disposition
[ ] process HTTP status codes (i.e. 404 error)
http://ftp.de.debian.org/debian/pool/iso-codes_3.24.2.orig.tar.bz2
[ ] catch KeyboardInterrupt
[ ] optionally preserve incomplete file
[x] create temp file in current directory
[ ] resume download (broken connection)
[ ] resume download (incomplete file)
[x] show progress indicator
http://mail.python.org/pipermail/tutor/2005-May/038797.html
[x] do not overwrite downloaded file
[x] rename file automatically if exists
[x] optionally specify path for downloaded file
[ ] options plan
[x] -h, --help, --version (CHAOS speccy)
[ ] clpbar progress bar style
_ 30.0Mb at 3.0 Mbps eta: 0:00:20 30% [===== ]
[ ] test "bar \r" print with \r at the end of line on Windows
[ ] process Python 2.x urllib.ContentTooShortError exception gracefully
(ideally retry and continue download)
(tmpfile, headers) = urllib.urlretrieve(url, tmpfile, callback_progress)
File "C:\Python27\lib\urllib.py", line 93, in urlretrieve
return _urlopener.retrieve(url, filename, reporthook, data)
File "C:\Python27\lib\urllib.py", line 283, in retrieve
"of %i bytes" % (read, size), result)
urllib.ContentTooShortError: retrieval incomplete: got only 15239952 out of 24807571 bytes
[ ] find out if urlretrieve may return unicode headers
[ ] write files with unicode characters
https://bitbucket.org/techtonik/python-wget/issues/7/filename-issue
[x] Python 2, Windows
[x] Python 3, Windows
[ ] Linux
[ ] add automatic tests
[ ] specify unicode URL from command line
[ ] specify unicode output file from command line
[ ] test suite for unsafe filenames from url and from headers
[ ] security checks
[ ] filename_from_url
[ ] filename_from_headers
[ ] MITM redirect from https URL
[ ] https certificate check
[ ] size+hash check helpers
[ ] fail if size is known and mismatch
[ ] fail if hash mismatch
"""