Results 1 to 13 of 13
  1. #1
    gorgor's Avatar
    Join Date
    Aug 2012
    Gender
    male
    Location
    Toxic Sewer
    Posts
    583
    Reputation
    15
    Thanks
    161

    [request] revival Joryx 3D OPENGL Rotmg client

    all is in the title.
    its done from the proxy we all know and would be a great achievement

    I tryed myself but i must be messing somewhere as i get a black screen

  2. #2
    UltraN00b's Avatar
    Join Date
    May 2012
    Gender
    male
    Location
    Protected v0id
    Posts
    514
    Reputation
    68
    Thanks
    401
    My Mood
    Amazed
    Yup, supporting this motion!

  3. #3
    JustAnoobROTMG's Avatar
    Join Date
    Aug 2012
    Gender
    male
    Posts
    1,916
    Reputation
    185
    Thanks
    18,230
    I have made some progress on it. I am able to connect into realms, fight.. I sometimes had random D/c thought
    Problem is : if i am able to understand java, and code some stuff, i don't know how to code games (2D or 3D stuff)

    We need to implement new items, new dyes, new bosses, new dungeons. joryx was never finished

    i do not forget WS asked joryx developper to stop....
    Attached Thumbnails Attached Thumbnails
    Sans titre.png  

    Last edited by JustAnoobROTMG; 10-02-2012 at 11:57 AM.

  4. #4
    JustAnoobROTMG's Avatar
    Join Date
    Aug 2012
    Gender
    male
    Posts
    1,916
    Reputation
    185
    Thanks
    18,230
    To get the source into eclipse, just Right click on project list, select import and choose in the list "Git", "project from git"
    Choose URI, and type this as URI : https://******.com/Mxous/jOryx.git

    Let Eclipse download files....

    Now you need to make usual modifications to the code (same modifications than when updating marine/get older proxy source to work)
    * Change build in WorldState.java

    Code:
    	public void connected(Client client) {
    		HelloPacket hp = new HelloPacket();
    		hp.buildVersion = "123.5.1";
    * Update Packet.Java with new headers (and modify code )
    Code:
    	public static final int FAILURE = 0;
    	  public static final int CANCELTRADE = 1;
    	  public static final int USEPORTAL = 3;
    	  public static final int INVRESULT = 4;
    	  public static final int JOINGUILD = 5;
    	  public static final int PING = 6;
    	  public static final int MOVE = 7;
    	  public static final int GUILDINVITE = 8;
    	  public static final int GLOBAL_NOTIFICATION = 9;
    	  public static final int SETCONDITION = 10;
    	  public static final int UPDATEACK = 11;
    	  public static final int TRADEDONE = 12;
    	  public static final int SHOOT = 13;
    	  public static final int GOTOACK = 14;
    	  public static final int CREATEGUILD = 15;
    	  public static final int PONG = 16;
    	  public static final int HELLO = 17;
    	  public static final int TRADEACCEPTED = 18;
    	  public static final int ENEMYSHOOT = 19;
    	  
    	  public static final int NAMERESULT = 20;
    	  public static final int REQUESTTRADE = 21;
    	  public static final int SHOOTACK = 22;
    	  public static final int TRADECHANGED = 23;
    	  public static final int PLAYERHIT = 24;
    	  public static final int TEXT = 25;
    	  public static final int UPDATE = 26;
    	  public static final int BUYRESULT = 27;
    	  public static final int PIC = 28;
    	  public static final int USEITEM = 30;
    	  public static final int CREATE_SUCCESS = 31;
    	  public static final int CHOOSENAME = 33;
    	  public static final int QUESTOBJID = 34;
    	  public static final int INVDROP = 35;
    	  public static final int CREATE = 36;
    	  public static final int CHANGETRADE = 37;
    	  public static final int PLAYERSHOOT = 38;
    	  public static final int RECONNECT = 39;
    	  public static final int CHANGEGUILDRANK = 40;
    	  public static final int DEATH = 41;
    	  public static final int ESCAPE = 42;
    	  public static final int PLAYSOUND = 44;
    	  public static final int LOAD = 45;
    	  public static final int ACCOUNTLIST = 46;
    	  public static final int DAMAGE = 47;
    	  public static final int CHECKCREDITS = 48;
    	  public static final int TELEPORT = 49;
    	  public static final int BUY = 50;
    	  public static final int SQUAREHIT = 51;
    	  public static final int GOTO = 52;
    	  public static final int EDITACCOUNTLIST = 53;
    	  public static final int CLIENTSTAT_FILE = 55;
    	  public static final int SHOW_EFFECT = 56;
    	  public static final int ACCEPTTRADE = 57;
    	  public static final int CREATEGUILDRESULT = 58;
    	  public static final int AOEACK = 59;
    	  public static final int MAPINFO = 60;
    	  public static final int TRADEREQUESTED = 61;
    	  public static final int NEW_TICK = 62;
    	  public static final int NOTIFICATION = 63;
    	  public static final int GROUNDDAMAGE = 64;
    	  public static final int INVSWAP = 65;
    	  public static final int OTHERHIT = 66;
    	  public static final int TRADESTART = 67;
    	  public static final int AOE = 68;
    	  public static final int PLAYERTEXT = 69;
    	  public static final int ALLYSHOOT = 74;
    	  public static final int CLIENTSTAT = 75;
    	  public static final int ENEMYHIT = 76;
    	  public static final int INVITEDTOGUILD = 77;
    	  public static final int GUILDREMOVE = 78;
    * Modify the UseItem/HelloPacket Packet as stated in the other "proxy" threads
    Code:
    /* oryx-hates-java
     * Copyright (C) 2011-2012 Furyhunter <furyhunter600@gmail.com>
     *
     * This program is free software: you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation, either version 3 of the License, or
     * (at your option) any later version.
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License
     * along with this program.  If not, see <https://www.gnu.org/licenses/>.
     */
    
    package com.oryxhatesjava.net;
    
    import java****.DataInput;
    import java****.DataOutput;
    import java********Exception;
    import java.nio.charset.Charset;
    import java.util.Arrays;
    
    import com.oryxhatesjava.net.data.Parsable;
    
    /**
     * <p>
     * Sent by client to ensure it is up to date.
     * </p>
     * <p>
     * Started Mar 2, 2011
     * </p>
     * 
     * @Author Furyhunter
     */
    public class HelloPacket extends Packet implements Parsable {
        
        public String buildVersion;
        public int gameId; //int
        public String guid;
        public String password;
        public String secret;
        public int keyTime; //int
        public byte[] key;
        public String unkStr;
        
        public String pk = "";
        public String Tq = "";
        public String H = "";
        public String playPlatform = "";      
        
        public HelloPacket(DataInput read) {
            try {
                parseFromDataInput(read);
                type = Packet.HELLO;
            } catch (IOException e) {
                
            }
        }
        
        public HelloPacket() {
        	type = Packet.HELLO;
    	}
    
     @override
        public void parseFromDataInput(DataInput read) throws IOException {
            this.buildVersion = read.readUTF();
            this.gameId = read.readInt();
            this.guid = read.readUTF();
            this.password = read.readUTF();
            secret = read.readUTF();
            keyTime = read.readInt();
            int size = read.readUnsignedShort();
            if (size > 0) {
            	key = new byte[size];
            	read.readFully(key);
            }
            
            size = read.readInt();
            if (size > 0) {
            	byte[] buf = new byte[size];
            	read.readFully(buf);
            	unkStr = new String(buf, Charset.forName("UTF-8"));
            }
            
    	    pk = read.readUTF();
    	    Tq = read.readUTF();
    	    H = read.readUTF();
    	    playPlatform = read.readUTF();        
            
            
        }
        
        @override
        public String toString() {
            return "HELLO " + buildVersion + " " + gameId + " guid=" + guid + " pw="
                    + password + " secret=" + secret + " " + keyTime + " " + Arrays.toString(key) + " " + unkStr;
        }
        
        @override
        public void writeToDataOutput(DataOutput write) throws IOException {
            write.writeUTF(buildVersion);
            write.writeInt(gameId);
            write.writeUTF(guid);
            write.writeUTF(password);
            write.writeUTF(secret);
            write.writeInt(keyTime);
            
            if (key != null) {
                write.writeShort(key.length);
                write.write(key);
            } else {
            	write.writeShort(0);
            }
            
            if (unkStr != null) {
            	byte[] buf = unkStr.getBytes("UTF-8");
            	write.writeInt(buf.length);
            	write.write(buf);
            } else {
            	write.writeInt(0);
            }
    
            write.writeUTF(pk);
            write.writeUTF(Tq);
            write.writeUTF(H);
            write.writeUTF(playPlatform);        
            
            
            
        }
    }
    Code:
    /*
     * Copyright (C) 2011 Furyhunter <furyhunter600@gmail.com>
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions are met:
     * 
     * * Redistributions of source code must retain the above copyright notice,
     *   this list of conditions and the following disclaimer.
     *
     * * Redistributions in binary form must reproduce the above copyright notice,
     *   this list of conditions and the following disclaimer in the documentation
     *   and/or other materials provided with the distribution.
     *
     * * Neither the name of the creator nor the names of its
     *   contributors may be used to endorse or promote products derived from this
     *   software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
     * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     * POSSIBILITY OF SUCH DAMAGE.
     */
    
    package com.oryxhatesjava.net;
    
    import java****.DataInput;
    import java****.DataOutput;
    import java********Exception;
    
    import com.oryxhatesjava.net.data.Item;
    import com.oryxhatesjava.net.data.Location;
    import com.oryxhatesjava.net.data.Parsable;
    
    public class UseItemPacket extends Packet implements Parsable {
    
    	public int time; //int
    	public Item MyItem ; //unsigned byte
    	public Location usePos;
    	
    	public UseItemPacket(DataInput in) {
    		try {
    			type = Packet.USEITEM;
    			parseFromDataInput(in);
    		} catch (IOException e) {
    			
    		}
    	}
    	
    	public UseItemPacket() {
    		type = Packet.USEITEM;
    	}
    	
     @override
    	public void parseFromDataInput(DataInput in) throws IOException {
    		time = in.readInt();
    		MyItem  = new Item(in);
    		usePos = new Location(in);		
    		
    	}
    	
     @override
    	public void writeToDataOutput(DataOutput out) throws IOException {
    		out.writeInt(time);
    		MyItem.writeToDataOutput(out);
    		usePos.writeToDataOutput(out);	
    
    	}
    	
     @override
    	public String toString() {
    		return "USEITEM " + time + " " + MyItem.toString() + " " + usePos;
    	}
    }
    * Change Server and Client Encryption key in Proxy.Java

    Code:
     
        public static byte[] CLIENTKEY = fromHexString("311F80691451C71B09A13A2A6E");
    	public static byte[] SERVERKEY = fromHexString("72C5583CAFB6818995CBD74B80");
    
    	private static byte[] fromHexString(final String encoded) {
    		if ((encoded.length() % 2) != 0)
    			throw new IllegalArgumentException("Input string must contain an even number of characters");
    
    		final byte result[] = new byte[encoded.length() / 2];
    		final char enc[] = encoded.toCharArray();
    		for (int i = 0; i < enc.length; i += 2) {
    			StringBuilder curr = new StringBuilder(2);
    			curr.append(enc[i]).append(enc[i + 1]);
    			int ix = Integer.parseInt(curr.toString(), 16);
    			result[i / 2] = (byte) ix;
    		}
    		return result;
    	}
    Your joryx should be able to connect to nexus/realm/dungeon...
    Last edited by JustAnoobROTMG; 10-02-2012 at 01:56 PM.

  5. The Following 4 Users Say Thank You to JustAnoobROTMG For This Useful Post:

    75dragon (03-16-2013),Alde. (07-18-2014),nilly (10-02-2012),UltraN00b (10-03-2012)

  6. #5
    nilly's Avatar
    Join Date
    Aug 2012
    Gender
    male
    Posts
    2,652
    Reputation
    155
    Thanks
    13,983
    My Mood
    Angelic
    Wow... thanks for this. I'll have to check it out later.

  7. #6
    UltraN00b's Avatar
    Join Date
    May 2012
    Gender
    male
    Location
    Protected v0id
    Posts
    514
    Reputation
    68
    Thanks
    401
    My Mood
    Amazed
    Meh... Updated, but got booted to Log In.

    ---------- Post added at 12:55 PM ---------- Previous post was at 12:37 PM ----------

    UPDATE: Changed Client Version At: com.joryx.appstate:WorldState to 123.5.1, and it worked!
    Sprites are coming out all mangled...
    Last edited by UltraN00b; 10-03-2012 at 12:57 PM.

  8. #7
    Dragonlord3344's Avatar
    Join Date
    Jun 2012
    Gender
    male
    Posts
    211
    Reputation
    10
    Thanks
    29
    i guess this is no longer up to date eh?, would love the new code to update it as id love to try this myself

  9. #8
    UltraN00b's Avatar
    Join Date
    May 2012
    Gender
    male
    Location
    Protected v0id
    Posts
    514
    Reputation
    68
    Thanks
    401
    My Mood
    Amazed
    @Dragonlord3344 Nope, Just update a few packet definitions and change the client version...

  10. #9
    gorgor's Avatar
    Join Date
    Aug 2012
    Gender
    male
    Location
    Toxic Sewer
    Posts
    583
    Reputation
    15
    Thanks
    161
    thank you VERY much!
    this is an awesome job : I really really thank you, i ll give you an ammy for it (pm me)

    from skyrocket, there is only 2 new parameters to add in the connection to have it compatible to v124.0
    please if you find it , i would really enjoy you could share it.

    ---------- Post added at 11:07 PM ---------- Previous post was at 10:46 PM ----------

    Quote Originally Posted by JustAnoobROTMG View Post
    i do not forget WS asked joryx developper to stop....
    you aren't posting full sources, you are posting ... partial parts.
    Last edited by gorgor; 10-13-2012 at 03:05 PM.

  11. #10
    Dragonlord3344's Avatar
    Join Date
    Jun 2012
    Gender
    male
    Posts
    211
    Reputation
    10
    Thanks
    29
    Again, i hate to bring up the old but instead of making a new thread, id love to see some work done on this for the upcoming new pets update, would be nice to play the game like this for realzies

  12. The Following User Says Thank You to Dragonlord3344 For This Useful Post:

    JJhackz (03-14-2013)

  13. #11
    eth0nic's Avatar
    Join Date
    Mar 2013
    Gender
    male
    Posts
    507
    Reputation
    10
    Thanks
    80
    It is a pain in the ass. Updating the client version does SHIT. I am so tired of reading the bullshit from retards on this forum.

    You need to update the gameVersion.
    PLUS:
    You need to update the RC4 keys.
    You need to update packetId<->packetName mappings.
    You need to update some packet parsers as some packets have changed.
    You need to extract all the XML from the game client.
    You need to extract all the textures from the game client.
    You need to add new routines for the projectile projection of new weapons.
    You need to fix various other things as antiCheat thresholds have tightened.
    You would have to do all this every other month ...

    Wildshadow/Kabam would not allow making this public ... so it is rather pointless to spend many weeks on fixing the code until the game becomes open source or abandonware ...

    ---------- Post added at 04:44 PM ---------- Previous post was at 04:42 PM ----------

    Plus people would ruin the game once they have a working game client that does projectile projection and correct reports of PLAYER_HIT/ENEMY_HIT (this is the reason why you don't see bots fighting today) ... and this is also the reason for why i don't release my proxy/bot/game client replacement code.

    ---------- Post added at 04:59 PM ---------- Previous post was at 04:44 PM ----------

    Quote Originally Posted by JustAnoobROTMG View Post
    I have made some progress on it. I am able to connect into realms, fight.. I sometimes had random D/c thought
    Problem is : if i am able to understand java, and code some stuff, i don't know how to code games (2D or 3D stuff)
    jOryx uses the jMonkey engine for creating a 2.5D game ... everything you need is already there ... you would just need to add textures, XML definitions, and some new projection routines based on the projectile definitions in the XML ...

    also consider putting the packet definition into a config file and write a packetFactory class ... having millions of imports is just ugly ... you can do that with 10 lines of code ... here is my PacketFactory.pm Perl module as an example ...

    Code:
    #!/usr/bin/perl -w
    package Rotmg::PacketFactory;
    use Moose;
    with 'Rotmg::PacketFactory::Packet';
    use Carp;
    use Data::Dumper;
    use Module::Load::Conditional qw(check_install can_load);
    sub newPacket {
    	my $self=shift;  
    	my $packetHandler=undef;
    	if(defined $self->packetName){
    	 	$packetHandler='Rotmg::PacketFactory::' . ucfirst(lc($self->packetName));
    	 	if(can_load(modules=>{$packetHandler=>undef})){
    			my $p=$packetHandler->meta->rebless_instance($self); # rebless into subclass so we don't need to copy all the packet data ...
    			print 'Reblessing into [' . ref($p) . '] ...' . "\n";
    			return $p;
    		}else{
    			carp 'PacketHandler ' . $packetHandler . ' not found or erroneous for packetType ' . $self->packetName . '!' . "\n";
    		}  	 
    	}else{
    		 carp 'PacketName not defined!' . "\n";
    	}
    	return $self;
    }
    __PACKAGE__->meta->make_immutable;
    1;
    Packet.pm

    Code:
    #!/usr/bin/perl -w
    package Rotmg::PacketFactory::Packet;
    use Moose::Role;
    use Carp;
    use Rotmg::PacketConfig;
    
    has 'length' => 	(isa => 'Int', is => 'rw', required => 0);
    has 'packetId' => 	(isa => 'Int', is => 'rw', required => 0, trigger => \&_packetId_changed);
    has 'packetName' => (isa => 'Str', is => 'rw', required => 0, trigger => \&_packetName_changed);
    has 'encrypted' => 	(isa => 'Str', is => 'rw', required => 0);
    has 'data' => 		(isa => 'Str', is => 'rw', required => 0);
    has 'packetConfig' => (isa => 'Rotmg::PacketConfig', is => 'ro', required => 1, sub { return Rotmg::PacketConfig->new({'configFile'=>'../packetConfig.txt'}) });
    
    sub _packetId_changed {
    	my $self=shift;
    	my $packetId=shift;
    	if(defined $packetId && !defined $self->packetName){
    		$self->packetName($self->packetConfig->packetId2packetName($packetId));
    	}
    };
    
    sub _packetName_changed {
    	my $self=shift;
    	my $packetName=shift;
    	if(defined $packetName && !defined $self->packetId){
    		$self->packetId($self->packetConfig->packetName2packetId($packetName));
    	}
    };
    __PACKAGE__->meta->make_immutable;
    1;
    Last edited by eth0nic; 03-19-2013 at 05:03 PM.

  14. #12
    iwantyourkandy's Avatar
    Join Date
    Aug 2012
    Gender
    male
    Location
    CaliBay
    Posts
    308
    Reputation
    10
    Thanks
    155
    My Mood
    Devilish
    Hmm exactly what is going on here?

  15. #13
    eth0nic's Avatar
    Join Date
    Mar 2013
    Gender
    male
    Posts
    507
    Reputation
    10
    Thanks
    80
    I tried to point out that it is not that easy to update the j0ryx client and how to improve the software design of said project by implementing a packetFactory class ...

Similar Threads

  1. [Request] ROTMG Client in .EXE
    By KyleWTF in forum Realm of the Mad God Hacks & Cheats
    Replies: 8
    Last Post: 08-16-2012, 05:50 PM
  2. [Patched] DanZ Modded ROTMG Client [Detailed Instructions]
    By MrDanZ in forum Realm of the Mad God Hacks & Cheats
    Replies: 10
    Last Post: 08-13-2012, 06:22 PM
  3. [Request] OpenGL menu?
    By treeham in forum C++/C Programming
    Replies: 10
    Last Post: 03-08-2010, 10:25 PM
  4. [Request]Multi Client for CA
    By dudubobo in forum Combat Arms Hacks & Cheats
    Replies: 1
    Last Post: 08-22-2008, 04:23 PM
  5. [Request] Client editors...
    By SATANICAT in forum Suggestions, Requests & General Help
    Replies: 0
    Last Post: 10-24-2006, 06:38 PM

Tags for this Thread