@urabaxwbk Okay so I've had a little look. Despite the file weirdly ending in .png, the game actually loads perfectly for me - unless I'm missing something/being stupid.
I decompiled the Game's loader code itself located at /gamefiles/Loaderv2.swf and this is how they load the game themselves:
Code:
package Loader_fla
{
import flash.display.Loader;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events****ErrorEvent;
import flash.events.ProgressEvent;
import flash.net.URLLoader;
import flash.net.URLVariables;
import flash.system.ApplicationDomain;
public dynamic class MainTimeline extends MovieClip
{
public var mcLoading:MovieClip;
public var sFile;
public var sTitle;
public var sBG:String;
public var sURL:String;
public var versionURL:String;
public var loader:URLLoader;
public var titleDomain:ApplicationDomain;
public function MainTimeline()
{
super();
addFrameScript(0,frame1);
}
public function getBrowserQueryVar(param1:String) : String
{
var _loc2_:String = null;
var _loc4_:RegExp = null;
var _loc5_:Array = null;
var _loc6_:String = null;
var _loc3_:* = undefined;
if(ExternalInterface.available)
{
_loc2_ = ExternalInterface.call("window.location.search.toString");
_loc3_ = param1;
_loc4_ = new RegExp("[?&]" + _loc3_ + "(?:=([^&]*))?","i");
_loc5_ = _loc4_.exec(_loc2_);
_loc6_ = null;
if(_loc5_ && _loc5_.length)
{
_loc6_ = _loc5_[1];
}
return _loc6_;
}
return null;
}
public function onDataComplete(param1:Event) : void
{
trace("onDataComplete:" + param1.target.data);
var _loc2_:URLVariables = new URLVariables(param1.target.data);
if(_loc2_.status == "success")
{
sFile = _loc2_.sFile;
sTitle = _loc2_.sTitle;
sBG = _loc2_.sBG;
loadTitle();
loadGame();
}
else
{
trace(_loc2_.strReason);
}
}
public function loadTitle() : void
{
var _loc1_:Loader = new Loader();
_loc1_.contentLoaderInfo.addEventListener(Even*****MPLETE,onTitleComplete);
_loc1_.contentLoaderInfo.addEventListener(IOErrorEvent****_ERROR,onError);
_loc1_.load(new URLRequest("gamefiles/title/" + sBG),new LoaderContext(false,titleDomain));
}
public function onTitleComplete(param1:Event) : void
{
trace("Title Loaded");
}
public function loadGame() : void
{
var _loc1_:Loader = new Loader();
_loc1_.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress);
_loc1_.contentLoaderInfo.addEventListener(Even*****MPLETE,onComplete);
_loc1_.contentLoaderInfo.addEventListener(IOErrorEvent****_ERROR,onError);
_loc1_.load(new URLRequest("gamefiles/" + sFile));
mcLoading.strLoad.text = "";
}
public function onProgress(param1:ProgressEvent) : void
{
var _loc2_:int = param1.currentTarget.bytesLoaded / param1.currentTarget.bytesTotal * 100;
mcLoading.strLoad.text = "Loading " + _loc2_ + "%";
}
public function onComplete(param1:Event) : void
{
var _loc2_:* = undefined;
var _loc3_:* = stage;
_loc3_.removeChildAt(0);
var _loc4_:* = _loc3_.addChild(MovieClip(Loader(param1.target.loader).content));
for(_loc2_ in root.loaderInfo.parameters)
{
trace(_loc2_ + ": " + root.loaderInfo.parameters[_loc2_]);
_loc4_.params[_loc2_] = root.loaderInfo.parameters[_loc2_];
}
_loc4_.params.sURL = sURL;
_loc4_.params.sTitle = sTitle;
_loc4_.titleDomain = titleDomain;
}
public function onError(param1:IOErrorEvent) : void
{
trace("Preloader IOError: " + param1);
}
function frame1() : *
{
Security.allowDomain("*");
sURL = this.loaderInfo.url.substring(0,this.loaderInfo.url.lastIndexOf("gamefiles/"));
trace("sURL: " + sURL);
versionURL = "gameversion.php";
trace("versionURL: " + versionURL);
loader = new URLLoader();
loader.addEventListener(Even*****MPLETE,onDataComplete);
loader.load(new URLRequest(versionURL));
titleDomain = new ApplicationDomain();
}
}
}
From what I can see the game is loaded in the same way as we do in our Loader code. Ignore all the 'loc' things - just treat them as normal variables, it's just the ugly way it's decompiled. If you see something you reckon is different let me know - if you couldn't already tell I make mistakes
I used the following (rough) loader code and it appeared to work for me, sorry if I'm still missing what the problem is:
Code:
import flash.events.Event;
//Comments by Oliboli8769
Security.allowDomain("*");
//URLs as Strings used for easiness
var sURL1 = "https://aqworldscdn.aq.com/game/";
var sURL2 = "https://cdn.aqworlds.com/game/";
var sFile; //used to store game version string
var versionLoader: URLLoader;
var Game: Object;
var swfContext: LoaderContext;
var swfLoader: Loader;
var swfRequest: URLRequest;
GetVersion(); //starts game load
function GetVersion() {
//checks for most recent game version from ASP file
versionLoader = new URLLoader();
versionLoader.addEventListener(Even*****MPLETE, onVersionComplete); //adds event listener for when the ASP is loaded
versionLoader.load(new URLRequest("https://zentry.redseason.net/gameversion.php")); //same as https://aqworldscdn.aq.com/game/gameversion.asp
}
function onVersionComplete(param1: Event) {
//ASP file has now been fully loaded
var vars: URLVariables;
vars = new URLVariables(param1.target.data); //reads variables held on loaded ASP
if (vars.status == "success") //checks the 'status' var on ASP
{
//after confirmation
sFile = vars.sFile; //reads game version linkage and saves as the variable sFile
LoadGame(); //now the version is found, we can load the game
}
}
function LoadGame() {
swfContext = new LoaderContext(false, ApplicationDomain.currentDomain, null);
swfLoader = new Loader();
swfRequest = new URLRequest("https://zentry.redseason.net/gamefiles/" + sFile); //using sFile from before as updated game linkage
swfLoader.contentLoaderInfo.addEventListener(Even*****MPLETE, onGameComplete); //adds event listener for the game load
swfLoader.contentLoaderInfo.addEventListener(flash.events.ProgressEvent.PROGRESS, onGameProgress); //adds event listener for how much the game has loaded
swfLoader.load(swfRequest, swfContext);
stage.quality = StageQuality.LOW; //sets stage quality to low, possibly reducing lag (optional)
}
function onGameComplete(loadEvent: Event) {
stage.addChildAt(loadEvent.currentTarge*****ntent, 0); //adds the loaded game content to the stage
loadEvent.currentTarge*****ntent.y = 0.0;
loadEvent.currentTarge*****ntent.x = 0.0;
Game = Object(loadEvent.currentTarge*****ntent); //stores loaded content onto the Object Game
Game.params.sURL2 = sURL2;
Game.params.sTitle = "Trainer Tutorial By OB";
}
function onGameProgress(arg1: flash.events.ProgressEvent): void {
//this can be used for progress bars/loaders before trainers
var percentage: *= arg1.bytesLoaded / arg1.bytesTotal;
trace(percentage * 100); //traces how much the game has loaded as a percentage
return;
}
function SendPacket(packet: String) {
var args: Array = new Array;
var tempArg: String = "";
var var1: String = "";
var done1: Boolean = false;
var var2: String = "";
var done2: Boolean = false;
var done3: Boolean = false;
var done4: Boolean = false;
var i: Number = 1;
while (i < packet.length) {
if (packet.charAt(i) != "%") {
if (done1 && !done2) {
var1 += packet.charAt(i);
} else if (done1 && done2 && !done3) {
var2 += packet.charAt(i);
} else if (done1 && done2 && done3 && done4) {
tempArg += packet.charAt(i);
}
} else {
if (!done1) {
done1 = true;
} else if (done1 && !done2) {
done2 = true;
} else if (done1 && done2 && !done3) {
done3 = true;
} else if (done1 && done2 && done3 && !done4) {
done4 = true;
} else if (done1 && done2 && done3 && done4) {
args.push(tempArg);
tempArg = "";
}
}
i++;
}
var room: String = Game.world.curRoom;
switch (var2) {
case "afk":
room = "1";
break;
case "hi":
room = "1";
break;
case "gar":
room = "1";
break;
case "cmd":
room = "1";
break;
}
trace("Zone Master: " + var1);
trace("Packet Type: " + var2);
trace("Arguements: " + args);
Game.sfc.sendXtMessage(var1, var2, args, "str", room);
}
stop();