Advertisement
Jhynjhiruu

Phoenotopia save system

Mar 18th, 2018
1,062
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package
  2. {
  3.    import actor.Player;
  4.    import flash.desktop.Clipboard;
  5.    import flash.desktop.ClipboardFormats;
  6.    import flash.events.NetStatusEvent;
  7.    import flash.net.SharedObject;
  8.    import flash.net.SharedObjectFlushStatus;
  9.    import mx.utils.StringUtil;
  10.    import net.flashpunk.FP;
  11.    import net.flashpunk.utils.Key;
  12.    
  13.    public class Saver
  14.    {
  15.      
  16.       private static var MIN_DISK_SPACE:int = 2000;
  17.        
  18.      
  19.       public var cookie:SharedObject;
  20.      
  21.       public var found_save_data:Boolean;
  22.      
  23.       private var _pass_code:String;
  24.      
  25.       public function Saver()
  26.       {
  27.          super();
  28.          this.cookie = SharedObject.getLocal("qhtsp122/phoenotopia/save","/");
  29.          if(this.cookie.data.game_data == undefined)
  30.          {
  31.             this.found_save_data = false;
  32.             this.cookie.data.game_data = new Array(this._BlankSave(),this._BlankSave(),this._BlankSave());
  33.             this.cookie.flush(MIN_DISK_SPACE);
  34.          }
  35.          else
  36.          {
  37.             this.found_save_data = true;
  38.             this._GrowSaveDataFilesIfNecessary(this.cookie);
  39.          }
  40.       }
  41.      
  42.       private function _GrowSaveDataFilesIfNecessary(param1:SharedObject) : void
  43.       {
  44.          var _loc2_:Array = null;
  45.          if(param1.data.game_data[0].length != 19)
  46.          {
  47.             return;
  48.          }
  49.          var _loc3_:int = 0;
  50.          while(_loc3_ < 3)
  51.          {
  52.             _loc2_ = param1.data.game_data[_loc3_];
  53.             _loc2_[19] = 90;
  54.             _loc2_[20] = 88;
  55.             _loc2_[21] = 67;
  56.             _loc2_[22] = 83;
  57.             _loc2_[23] = 0;
  58.             _loc2_[24] = 0;
  59.             _loc2_[25] = 0;
  60.             _loc2_[26] = 0;
  61.             _loc2_[27] = 0;
  62.             _loc2_[28] = 0;
  63.             _loc2_[29] = 0;
  64.             _loc2_[30] = 0;
  65.             _loc2_[31] = 0;
  66.             _loc2_[32] = 0;
  67.             _loc2_[33] = 0;
  68.             _loc2_[34] = 0;
  69.             _loc3_++;
  70.          }
  71.          param1.flush(MIN_DISK_SPACE);
  72.       }
  73.      
  74.       public function QuitSave() : void
  75.       {
  76.          var _loc1_:int = FP.game_world.save_index_being_used;
  77.          var _loc2_:SaveFileX = FP.game_world.local_save;
  78.          var _loc3_:int = _loc2_.accumulated_time_played + 0.001 * (FP.game_world.GetTime() - _loc2_.time_started_playing);
  79.          this.cookie.data.game_data[_loc1_][11] = _loc2_.times_died + 1;
  80.          this.cookie.data.game_data[_loc1_][12] = _loc3_;
  81.          this.cookie.flush(MIN_DISK_SPACE);
  82.       }
  83.      
  84.       public function SaveGame(param1:Boolean = false) : void
  85.       {
  86.          var _loc2_:int = FP.game_world.save_index_being_used;
  87.          var _loc3_:SaveFileX = FP.game_world.local_save;
  88.          var _loc4_:Player = FP.game_world.player;
  89.          if(param1)
  90.          {
  91.             this.cookie.data.game_data[_loc2_][9][351] = true;
  92.             this.cookie.flush(MIN_DISK_SPACE);
  93.             return;
  94.          }
  95.          this.CopyArray(_loc3_.inventory[0],this.cookie.data.game_data[_loc2_][8][0]);
  96.          this.CopyArray(_loc3_.inventory[1],this.cookie.data.game_data[_loc2_][8][1]);
  97.          this.CopyArray(_loc3_.inventory[2],this.cookie.data.game_data[_loc2_][8][2]);
  98.          this.CopyArray(_loc3_.keys,this.cookie.data.game_data[_loc2_][10]);
  99.          this.CopyArray(_loc3_.general,this.cookie.data.game_data[_loc2_][9]);
  100.          var _loc5_:int = _loc3_.accumulated_time_played + 0.001 * (FP.game_world.GetTime() - _loc3_.time_started_playing);
  101.          this.cookie.data.game_data[_loc2_] = new Array(_loc3_.game_room,_loc3_.game_time,_loc4_.max_hp,_loc4_.hp,_loc4_.x,_loc4_.y,_loc3_.coins,_loc4_.weapon_equipped,this.cookie.data.game_data[_loc2_][8],this.cookie.data.game_data[_loc2_][9],this.cookie.data.game_data[_loc2_][10],_loc3_.times_died,_loc5_,_loc3_.space_rocks,_loc3_.tool_equipped,_loc3_.coins_collected_total,_loc3_.boxes_broken_count,_loc3_.good_food_consumed,_loc3_.bad_food_consumed,Key.JUMP,Key.ACTION,Key.TOOL,Key.MENU,0,0,0,0,0,0,0,0,0,0,0,0);
  102.          this.SuperFlush();
  103.          this.UpdatePassCode();
  104.       }
  105.      
  106.       public function SuperFlush() : void
  107.       {
  108.          var _loc1_:String = this.cookie.flush(MIN_DISK_SPACE);
  109.          if(_loc1_ == SharedObjectFlushStatus.FLUSHED)
  110.          {
  111.             FP.game_world.texter.DisplayItemGet("O >> Game Saved!<< _____");
  112.             FP.game_world.sound_g.savegame.play();
  113.          }
  114.          else
  115.          {
  116.             FP.game_world.sound_g.gale_bump.play();
  117.             FP.game_world.texter.DisplayItemGet("O >> Failed to Save!<< _____");
  118.             this.cookie.addEventListener(NetStatusEvent.NET_STATUS,this._OnFlushStatus);
  119.          }
  120.       }
  121.      
  122.       private function _OnFlushStatus(param1:NetStatusEvent) : void
  123.       {
  124.          switch(param1.info.code)
  125.          {
  126.             case "SharedObject.Flush.Success":
  127.                break;
  128.             case "SharedObject.Flush.Failed":
  129.          }
  130.          this.cookie.removeEventListener(NetStatusEvent.NET_STATUS,this._OnFlushStatus);
  131.       }
  132.      
  133.       public function EraseGame(param1:int) : void
  134.       {
  135.          this.cookie.data.game_data[param1] = this._BlankSave();
  136.          this.cookie.flush(MIN_DISK_SPACE);
  137.       }
  138.      
  139.       public function CopyGame(param1:int, param2:int) : void
  140.       {
  141.          var _loc3_:Array = this.cookie.data.game_data[param1];
  142.          var _loc4_:Array = this.cookie.data.game_data[param2];
  143.          _loc4_[0] = new String(_loc3_[0]);
  144.          _loc4_[1] = _loc3_[1];
  145.          _loc4_[2] = _loc3_[2];
  146.          _loc4_[3] = _loc3_[3];
  147.          _loc4_[4] = _loc3_[4];
  148.          _loc4_[5] = _loc3_[5];
  149.          _loc4_[6] = _loc3_[6];
  150.          _loc4_[7] = _loc3_[7];
  151.          this.CopyArray(_loc3_[8][0],_loc4_[8][0]);
  152.          this.CopyArray(_loc3_[8][1],_loc4_[8][1]);
  153.          this.CopyArray(_loc3_[8][2],_loc4_[8][2]);
  154.          this.CopyArray(_loc3_[9],_loc4_[9]);
  155.          this.CopyArray(_loc3_[10],_loc4_[10]);
  156.          _loc4_[11] = _loc3_[11];
  157.          _loc4_[12] = _loc3_[12];
  158.          _loc4_[13] = _loc3_[13];
  159.          _loc4_[14] = _loc3_[14];
  160.          _loc4_[15] = _loc3_[15];
  161.          _loc4_[16] = _loc3_[16];
  162.          _loc4_[17] = _loc3_[17];
  163.          _loc4_[18] = _loc3_[18];
  164.          _loc4_[19] = _loc3_[19];
  165.          _loc4_[20] = _loc3_[20];
  166.          _loc4_[21] = _loc3_[21];
  167.          _loc4_[22] = _loc3_[22];
  168.          _loc4_[23] = _loc3_[23];
  169.          _loc4_[24] = _loc3_[24];
  170.          _loc4_[25] = _loc3_[25];
  171.          _loc4_[26] = _loc3_[26];
  172.          _loc4_[27] = _loc3_[27];
  173.          _loc4_[28] = _loc3_[28];
  174.          _loc4_[29] = _loc3_[29];
  175.          _loc4_[30] = _loc3_[30];
  176.          _loc4_[31] = _loc3_[31];
  177.          _loc4_[32] = _loc3_[32];
  178.          _loc4_[33] = _loc3_[33];
  179.          _loc4_[34] = _loc3_[34];
  180.          this.cookie.flush(MIN_DISK_SPACE);
  181.       }
  182.      
  183.       private function _BlankSave() : Array
  184.       {
  185.          return new Array("room_05",0,20,20,1724,402,0,0,[[0,0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,1,1],[0,0,0,0,53,0,0,0,0]],this.CreateBooleanArray(FP.NUM_SAVE_INDEXES),this.CreateBooleanArray(20),0,0,0,0,0,0,0,0,90,88,67,83,0,0,0,0,0,0,0,0,0,0,0,0);
  186.       }
  187.      
  188.       public function MarkGeneralArray(param1:int, param2:Boolean = true) : Boolean
  189.       {
  190.          FP.sponsor_api.SaveIndexCheckMedals(param1);
  191.          var _loc3_:Boolean = FP.game_world.local_save.general[param1];
  192.          FP.game_world.local_save.general[param1] = param2;
  193.          return _loc3_ != param2;
  194.       }
  195.      
  196.       public function CheckGeneralArray(param1:int) : Boolean
  197.       {
  198.          return FP.game_world.local_save.general[param1];
  199.       }
  200.      
  201.       public function GetSaveFile(param1:SaveFileX = null) : SaveFileX
  202.       {
  203.          var _loc2_:Array = this.cookie.data.game_data[FP.game_world.save_index_being_used];
  204.          if(param1 == null)
  205.          {
  206.             param1 = new SaveFileX();
  207.          }
  208.          param1.game_room = _loc2_[0];
  209.          param1.game_time = _loc2_[1];
  210.          param1.player_maxhp = _loc2_[2];
  211.          param1.player_hp = _loc2_[3];
  212.          param1.player_x = _loc2_[4];
  213.          param1.player_y = _loc2_[5];
  214.          param1.coins = _loc2_[6];
  215.          param1.equipped_club = _loc2_[7];
  216.          var _loc3_:Array = this.CreateBooleanArray(8);
  217.          var _loc4_:Array = this.CreateBooleanArray(8);
  218.          var _loc5_:Array = this.CreateBooleanArray(8);
  219.          this.CopyArray(_loc2_[8][0],_loc3_);
  220.          this.CopyArray(_loc2_[8][1],_loc4_);
  221.          this.CopyArray(_loc2_[8][2],_loc5_);
  222.          param1.inventory = [_loc3_,_loc4_,_loc5_];
  223.          var _loc6_:Array = this.CreateBooleanArray(FP.NUM_SAVE_INDEXES);
  224.          this.CopyArray(_loc2_[9],_loc6_);
  225.          param1.general = _loc6_;
  226.          var _loc7_:Array = this.CreateBooleanArray(10);
  227.          this.CopyArray(_loc2_[10],_loc7_);
  228.          param1.keys = _loc7_;
  229.          param1.times_died = _loc2_[11];
  230.          param1.accumulated_time_played = _loc2_[12];
  231.          param1.space_rocks = _loc2_[13];
  232.          param1.tool_equipped = _loc2_[14];
  233.          param1.coins_collected_total = _loc2_[15];
  234.          param1.boxes_broken_count = _loc2_[16];
  235.          param1.good_food_consumed = _loc2_[17];
  236.          param1.bad_food_consumed = _loc2_[18];
  237.          Key.JUMP = _loc2_[19];
  238.          Key.ACTION = _loc2_[20];
  239.          Key.TOOL = _loc2_[21];
  240.          Key.MENU = _loc2_[22];
  241.          return param1;
  242.       }
  243.      
  244.       private function CreateBooleanArray(param1:int) : Array
  245.       {
  246.          var _loc2_:Array = new Array();
  247.          var _loc3_:int = 0;
  248.          while(_loc3_ < param1)
  249.          {
  250.             _loc2_.push(false);
  251.             _loc3_++;
  252.          }
  253.          return _loc2_;
  254.       }
  255.      
  256.       public function CopyArray(param1:Array, param2:Array) : void
  257.       {
  258.          var _loc3_:int = 0;
  259.          while(_loc3_ < param1.length)
  260.          {
  261.             param2[_loc3_] = param1[_loc3_];
  262.             _loc3_++;
  263.          }
  264.       }
  265.      
  266.       public function UpdatePassCode() : void
  267.       {
  268.          var _loc1_:Array = this.cookie.data.game_data[FP.game_world.save_index_being_used];
  269.          var _loc2_:Date = new Date();
  270.          var _loc3_:String = String(_loc2_.fullYear) + "-" + (_loc2_.month < 10?"0" + String(_loc2_.month):String(_loc2_.month)) + "-" + (_loc2_.day < 10?"0" + String(_loc2_.day):String(_loc2_.day)) + "-" + String(_loc2_.hours) + ":" + String(_loc2_.minutes);
  271.          this._pass_code = "PHOENOTOPIA-" + _loc3_ + "-___" + Base64.encode(this._GameDataArrayToString(_loc1_)) + "___";
  272.       }
  273.      
  274.       public function WritePasswordToClipboard() : void
  275.       {
  276.          Clipboard.generalClipboard.clear();
  277.          Clipboard.generalClipboard.setData(ClipboardFormats.TEXT_FORMAT,this._pass_code,false);
  278.       }
  279.      
  280.       public function UsedPassCode(param1:String) : String
  281.       {
  282.          var decoded_passcode:String = null;
  283.          var new_game_data:Array = null;
  284.          var pass_code:String = param1;
  285.          if(this.cookie.data.game_data[FP.game_world.save_index_being_used][1] != 0)
  286.          {
  287.             return "Pass code can only be used on blank files!";
  288.          }
  289.          var stripped_pass_code:String = this._StripPassCode(pass_code);
  290.          try
  291.          {
  292.             decoded_passcode = Base64.decode(stripped_pass_code);
  293.             new_game_data = this._StringToGameDataArray(decoded_passcode);
  294.          }
  295.          catch(error:Error)
  296.          {
  297.             return "Incorrect Password. Cannot create file!";
  298.          }
  299.          this.cookie.data.game_data[FP.game_world.save_index_being_used] = new_game_data;
  300.          this.cookie.flush(MIN_DISK_SPACE);
  301.          return "SUCCESS!";
  302.       }
  303.      
  304.       private function _StripPassCode(param1:String) : String
  305.       {
  306.          var _loc2_:Array = param1.split("_");
  307.          var _loc3_:int = 0;
  308.          while(_loc3_ < _loc2_.length)
  309.          {
  310.             if((_loc2_[_loc3_] as String).length > 200)
  311.             {
  312.                return _loc2_[_loc3_] as String;
  313.             }
  314.             _loc3_ = _loc3_ + 1;
  315.          }
  316.          return "Bad Password!";
  317.       }
  318.      
  319.       public function _GameDataArrayToString(param1:Array) : String
  320.       {
  321.          var _loc3_:String = StringUtil.substitute("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15},{16},{17},{18},{19},{20},{21},{22},{23},{24},{25},{26},{27},{28},{29},{30},{31},{32},{33},{34}",param1[0],param1[1],param1[2],param1[3],param1[4],param1[5],param1[6],param1[7],this._StringifyNumArray(param1[8][0]) + this._StringifyNumArray(param1[8][1]) + this._StringifyNumArray(param1[8][2]),this._StringifyBooleanArray(param1[9]),this._StringifyKeyArray(param1[10]),param1[11],param1[12],param1[13],param1[14],param1[15],param1[16],param1[17],param1[18],param1[19],param1[20],param1[21],param1[22],param1[23],param1[24],param1[25],param1[26],param1[27],param1[28],param1[29],param1[30],param1[31],param1[32],param1[33],param1[34]);
  322.          return _loc3_;
  323.       }
  324.      
  325.       private function _StringToGameDataArray(param1:String) : Array
  326.       {
  327.          var _loc2_:Array = new Array();
  328.          var _loc3_:Array = param1.split(",");
  329.          _loc2_.push(_loc3_[0]);
  330.          _loc2_.push(int(_loc3_[1]));
  331.          _loc2_.push(int(_loc3_[2]));
  332.          _loc2_.push(int(_loc3_[3]));
  333.          _loc2_.push(int(_loc3_[4]));
  334.          _loc2_.push(int(_loc3_[5]));
  335.          _loc2_.push(int(_loc3_[6]));
  336.          _loc2_.push(int(_loc3_[7]));
  337.          _loc2_.push(this._ParseItemString(_loc3_[8]));
  338.          _loc2_.push(this._ParseSaveIndexString(_loc3_[9]));
  339.          _loc2_.push(this._ParseKeyString(_loc3_[10]));
  340.          _loc2_.push(int(_loc3_[11]));
  341.          var _loc4_:int = int(_loc3_[12]);
  342.          if(_loc4_ < 3840)
  343.          {
  344.             _loc4_ = 3840;
  345.          }
  346.          _loc2_.push(_loc4_);
  347.          _loc2_.push(int(_loc3_[13]));
  348.          _loc2_.push(int(_loc3_[14]));
  349.          _loc2_.push(int(_loc3_[15]));
  350.          _loc2_.push(int(_loc3_[16]));
  351.          _loc2_.push(int(_loc3_[17]));
  352.          _loc2_.push(int(_loc3_[18]));
  353.          _loc2_.push(int(_loc3_[19]));
  354.          _loc2_.push(int(_loc3_[20]));
  355.          _loc2_.push(int(_loc3_[21]));
  356.          _loc2_.push(int(_loc3_[22]));
  357.          _loc2_.push(int(_loc3_[23]));
  358.          _loc2_.push(int(_loc3_[24]));
  359.          _loc2_.push(int(_loc3_[25]));
  360.          _loc2_.push(int(_loc3_[26]));
  361.          _loc2_.push(int(_loc3_[27]));
  362.          _loc2_.push(int(_loc3_[28]));
  363.          _loc2_.push(int(_loc3_[29]));
  364.          _loc2_.push(int(_loc3_[30]));
  365.          _loc2_.push(int(_loc3_[31]));
  366.          _loc2_.push(int(_loc3_[32]));
  367.          _loc2_.push(int(_loc3_[33]));
  368.          _loc2_.push(int(_loc3_[34]));
  369.          return _loc2_;
  370.       }
  371.      
  372.       private function _ParseKeyString(param1:String) : Array
  373.       {
  374.          var _loc2_:Array = param1.split("_");
  375.          var _loc3_:Array = new Array();
  376.          var _loc7_:int = 0;
  377.          while(_loc7_ < _loc2_.length)
  378.          {
  379.             if(_loc2_[_loc7_] == "-1")
  380.             {
  381.                _loc3_.push(false);
  382.             }
  383.             else if(_loc2_[_loc7_] != "")
  384.             {
  385.                _loc3_.push(int(_loc2_[_loc7_]));
  386.             }
  387.             _loc7_ = _loc7_ + 1;
  388.          }
  389.          return _loc3_;
  390.       }
  391.      
  392.       private function _ParseSaveIndexString(param1:String) : Array
  393.       {
  394.          var _loc2_:Array = new Array();
  395.          var _loc5_:int = 0;
  396.          var _loc6_:int = 0;
  397.          var _loc7_:int = 0;
  398.          while(_loc7_ < param1.length)
  399.          {
  400.             if(param1.charAt(_loc7_) == "ABCDEFGHIJKLM01234".charAt(_loc5_))
  401.             {
  402.                _loc2_.push(true);
  403.                _loc5_ = (_loc5_ + 1) % "ABCDEFGHIJKLM01234".length;
  404.             }
  405.             else if(param1.charAt(_loc7_) == "NOPQRSTUVWXYZ56789".charAt(_loc6_))
  406.             {
  407.                _loc2_.push(false);
  408.                _loc6_ = (_loc6_ + 1) % "NOPQRSTUVWXYZ56789".length;
  409.             }
  410.             else
  411.             {
  412.                throw new Error("Bad Password");
  413.             }
  414.             _loc7_ = _loc7_ + 1;
  415.          }
  416.          return _loc2_;
  417.       }
  418.      
  419.       private function _ParseItemString(param1:String) : Array
  420.       {
  421.          var _loc2_:Array = param1.split("_");
  422.          var _loc3_:Array = new Array();
  423.          var _loc4_:Array = new Array();
  424.          var _loc5_:Array = new Array();
  425.          var _loc6_:int = 0;
  426.          while(_loc6_ < _loc2_.length)
  427.          {
  428.             if(_loc6_ < 9)
  429.             {
  430.                _loc3_.push(int(_loc2_[_loc6_]));
  431.             }
  432.             else if(_loc6_ < 18)
  433.             {
  434.                _loc4_.push(int(_loc2_[_loc6_]));
  435.             }
  436.             else if(_loc6_ < 27)
  437.             {
  438.                _loc5_.push(int(_loc2_[_loc6_]));
  439.             }
  440.             _loc6_ = _loc6_ + 1;
  441.          }
  442.          return new Array(_loc3_,_loc4_,_loc5_);
  443.       }
  444.      
  445.       private function _StringifyNumArray(param1:Array) : String
  446.       {
  447.          var _loc2_:String = "";
  448.          var _loc3_:int = 0;
  449.          while(_loc3_ < param1.length)
  450.          {
  451.             _loc2_ = _loc2_ + (param1[_loc3_] + "_");
  452.             _loc3_ = _loc3_ + 1;
  453.          }
  454.          return _loc2_;
  455.       }
  456.      
  457.       private function _StringifyKeyArray(param1:Array) : String
  458.       {
  459.          var _loc2_:* = "";
  460.          var _loc3_:int = 0;
  461.          while(_loc3_ < param1.length)
  462.          {
  463.             if(param1[_loc3_] == false)
  464.             {
  465.                _loc2_ = _loc2_ + "-1_";
  466.             }
  467.             else
  468.             {
  469.                _loc2_ = _loc2_ + (param1[_loc3_] + "_");
  470.             }
  471.             _loc3_ = _loc3_ + 1;
  472.          }
  473.          return _loc2_;
  474.       }
  475.      
  476.       private function _StringifyBooleanArray(param1:Array) : String
  477.       {
  478.          var _loc2_:String = "";
  479.          var _loc3_:int = 0;
  480.          var _loc4_:int = 0;
  481.          var _loc7_:int = 0;
  482.          while(_loc7_ < param1.length)
  483.          {
  484.             if(param1[_loc7_])
  485.             {
  486.                _loc2_ = _loc2_ + "ABCDEFGHIJKLM01234".charAt(_loc3_);
  487.                _loc3_ = (_loc3_ + 1) % "ABCDEFGHIJKLM01234".length;
  488.             }
  489.             else
  490.             {
  491.                _loc2_ = _loc2_ + "NOPQRSTUVWXYZ56789".charAt(_loc4_);
  492.                _loc4_ = (_loc4_ + 1) % "NOPQRSTUVWXYZ56789".length;
  493.             }
  494.             _loc7_ = _loc7_ + 1;
  495.          }
  496.          return _loc2_;
  497.       }
  498.    }
  499. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement