|
Hello everyone. Today I'm proud to announce one of my side projects I'll be working on. This revision has never been done before and for that reason and various others I feel so proud to take up this challenge. I know there'll be a lot of things to learn like Networking and how Packets work; but hopefully with the support from the rsps scene I can learn accordingly. I personally love this very specific revision myself might I add although it's not too far off of more commonly known revisions.
Anyways; if you're curious about my open source #727 project it's still alive; however I feel more focused on creating a new & open sourced revision for beginners and others to check out and try for themselves; I'll still work on the 727 project from time to time but it's no longer my main focus.Would also be nice to create a 633 prefix tag!
There's a lot of work needed to be done such as code re-writing and identifying and reading packets accordingly since this was a 718 originally, the packets now need to be converted as such.
Today just managed to do the Object clicking, Chat packet, etc.. so that's a nice confidence boost for myself haha.
Any advice is greatly appreciated, and as always thanks for those who help & support!
So, with that being said lets get to the main parts.
SETUP
Lambok
This is an essential for setting up the environment in your IDE. You'll need to install using their installer and add the latest dependency to your project build.
If you don't you'll have a mountain of errors before you can do anything else. In advance please check out the documentation and use accordingly!
Gradle
You'll need to ad Gradle to your project. Refer to your specified IDE for setup & documentation.
I've added some basic documentation so newcomers can understand more easily what the current functions are doing. click here to preview
You will now be required to set your Gradle version to the latest available. Click here for example I used
GitHub Repository - Click here - Commits
Discord - DM me for Discord invite
Official 633 cache - Click here
Official 633 Client - Click here
Feel free to contribute anything, preferably Packets and more core related contents as that's the primary focus till a more structured server base can be established (in general).
Latest News - click here
Media
Combat (basic shit mx)
Chat Packet (example packet fixed)
Fullscreen interfaces
Fixing Map keys (what a nice transitional gif lol)
Equipment Interface (nostalgia)
Target Levels & XP
Runecrafting & Skills progressions
Skill Menu & Fillable Items
World Map management
Custom script language (already added open bank function)
Clan Chat (Chat packet is WIP, Loot Sharing, value splitting)
Login Lobby
Abyss
Incubator
Balloon traveling
Finished Stronghold of Security (Emote configs, such..)
Multiple Thieving stealing success factor
Potter firing & Crafting (Soft clay creation added too)
Smelting
Item Forging (SQ, Dragonfire, Spirit shields)
PVP World demo
Agility
Simple plugin systems added (overtime)
Code:package com.rs.plugin.impl.interfaces; import com.rs.game.player.Player; import com.rs.plugin.listener.RSInterface; import com.rs.plugin.wrapper.RSInterfaceSignature; @RSInterfaceSignature(interfaceId = {182}) public class LogoutInterfacePlugin implements RSInterface { @Override public void execute(Player player, int interfaceId, int componentId, int packetId, byte slotId, int slotId2) throws Exception { player.getSession().logout(player); } }Code:package com.rs.net.packets.logic.impl; import com.rs.game.item.FloorItem; import com.rs.game.map.World; import com.rs.game.map.WorldTile; import com.rs.game.player.Player; import com.rs.game.player.controller.ControllerHandler; import com.rs.game.route.RouteEvent; import com.rs.io.InputStream; import com.rs.net.packets.logic.LogicPacket; import com.rs.net.packets.logic.LogicPacketSignature; import com.rs.utilities.Logger; @LogicPacketSignature(packetId = 30, packetSize = 7, description = "Takes an Item from the Ground tile") public class ItemTakePacket implements LogicPacket { @Override public void execute(Player player, InputStream stream) { if (!player.isStarted() || !player.isClientLoadedMapRegion() || player.isDead()) return; if (player.getMovement().isLocked()) return; int x = stream.readUnsignedShort128(); final int id = stream.readUnsignedShort(); int y = stream.readUnsignedShortLE128(); boolean forceRun = stream.readByte() == 1; final WorldTile tile = new WorldTile(x, y, player.getPlane()); final int regionId = tile.getRegionId(); if (!player.getMapRegionsIds().contains(regionId)) return; final FloorItem item = World.getRegion(regionId).getGroundItem(id, tile, player); if (item == null) return; if (!ControllerHandler.execute(player, controller -> controller.canTakeItem(player, item))) { return; } if (forceRun) player.setRun(forceRun); player.getMovement().stopAll(); player.setRouteEvent(new RouteEvent(item, () -> { if (FloorItem.removeGroundItem(player, item)) Logger.globalLog(player.getUsername(), player.getSession().getIP(), new String(" has picked up item [ id: " + item.getId() + ", amount: " + item.getAmount() + " ] originally owned to " + (item.getOwner() == null ? "no owner" : item.getOwner()) + ".")); })); } }Player class ~674 lines (Regular Matrix has 4,000+ lines by default)Code:package com.rs.game.dialogue.impl; import com.rs.game.dialogue.DialogueEventListener; import com.rs.game.npc.NPC; import com.rs.game.player.Player; public class TestD extends DialogueEventListener { public TestD(Player player, NPC npc) { super(player, npc); } @Override public void start() { mes("yo sup i'm a regular message"); player(happy, "lol okay"); option("Yes", () -> { System.out.println("hi"); }, "No", () -> { System.out.println("bye"); }, "maybe", () -> { System.out.println("bye"); }, "idk", () -> { System.out.println("byess"); }); npc(sad, "I'm sad man.."); item(1050, "I'm a santa hat mate."); } }
credits:
Artem & lads
Sushi - for Original release
Kris
Last edited by .css; 08-26-2023 at 03:04 AM.
Goodluck!
Good luck with the project! Def. a nice revision!
Goodluck!
Made some not bad progress. Been quite busy IRL. Still so much to do. If you'd like to help and get involved join the official discord!
Switching branches overall to Developers and Development (Development now being the final output branch; developers being the one a user would commit on).
https://github.com/openrsx/open633/commits/Developers
Combat improvements & effects
Decoder & Encoder packets support
Json mob spawns
Current Plugin supports
Players Details (Demo class with Lambok example)
Code:package com.rs.game.player; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Optional; import com.rs.game.player.type.impl.AntifireDetails; import com.rs.utils.MutableNumber; import com.rs.utils.Stopwatch; import com.rs.utils.Utils; import lombok.Data; /** * All personal variables of the Player shall be stored here for easier access. * * @author Dennis * */ @Data public final class PlayerDetails { /** * Constructs a new Player's details */ public PlayerDetails() { pouches = new byte[4]; creationDate = Utils.currentTimeMillis(); runEnergy = 100; allowChatEffects = true; mouseButtons = true; profanityFilter = true; if (charges == null) charges = new ChargesManager(); ownedObjectsManagerKeys = new LinkedList<String>(); passwordList = new ArrayList<String>(); ipList = new ArrayList<String>(); if (watchMap == null) watchMap = new HashMap<>(); } /** * Represents a Players password for login */ private String password; /** * The amount of authority this player has over others. */ public Rights rights = Rights.PLAYER; /** * An array of Runecrafting pouches that possibly contain values. */ private byte[] pouches; private long displayTime; /** * The length of a Player being Muted (Unable to chat) */ private long muted; /** * Length of the Player being Jailed (stuck in a remote area) */ private long jailed; /** * Adds Players display time * * @Param i */ public void addDisplayTime(long i) { this.displayTime = i + Utils.currentTimeMillis(); } /** * Represents the last known IP from the Player */ private String lastIP; /** * Represents if a Player is filtering out their chatbox messages */ private boolean filterGame; /** * Represents if the Player has their experience locked */ private boolean xpLocked; /** * An array of possible changes to the Max Cape customization */ private int[] maxedCapeCustomized; /** * An array of possible changes to the Completionist Cape customization */ private int[] completionistCapeCustomized; /** * Represents if the Player should be using older item models to display */ public boolean oldItemsLook; /** * Represents the default Yell color for a Player */ public String yellColor = "ff0000"; /** * The creation date */ private long creationDate; /** * The Run Engery amount a Player has */ private byte runEnergy; /** * A collection of Stopwatches */ public HashMap<String, Stopwatch> watchMap = new HashMap<>(); /** * TODO: Add documentation to rest of these imports. Documentation is super * important so take your time to explain their functions so others can learn! */ /** * Should the player be allowed to see Chat effects */ private boolean allowChatEffects; /** * Should the Player accept aid from other players? */ private boolean acceptAid; /** * Should the Player use 1-click mode, or be allowed to use both * mouse buttons for general gameplay */ private boolean mouseButtons; /** * Should the Player see profanity? */ private boolean profanityFilter; /** * The Players Private Chat options */ private byte privateChatSetup; /** * The Players Clan Chat options */ private byte clanChatSetup; private boolean forceNextMapLoadRefresh; /** * The length of the players Ban */ private long banned; /** * Is the Player permanently banned? */ private boolean permBanned; /** * Does the Player have their Yell off? */ private boolean yellOff; // game bar status private byte publicStatus; private byte clanStatus; private byte tradeStatus; private byte assistStatus; // Used for storing recent ips and password /** * A list of the Players known Passwords to exist */ private ArrayList<String> passwordList = new ArrayList<String>(); /** * A list of the Players known IP's */ private ArrayList<String> ipList = new ArrayList<String>(); /** * The Players Items that contain Charges */ private ChargesManager charges; /** * The Players current friends chat */ private String currentFriendChatOwner; /** * The Players specified quick right click action option * from the Summoning orb */ private byte summoningLeftClickOption; /** * A list of possible Objects the Player may have existing */ private List<String> ownedObjectsManagerKeys; /** * A Player's Poison & Skull Timer */ private final MutableNumber poisonImmunity = new MutableNumber(), skullTimer = new MutableNumber(); /** * Holds an optional wrapped inside the Antifire details. */ private Optional<AntifireDetails> antifireDetails = Optional.empty(); /** * Sets the new anti-fire instance for this class directly. * @Param details the anti-fire instance to set. */ public void setAntifireDetail(AntifireDetails details) { setAntifireDetail(details == null ? Optional.empty() : Optional.of(details)); } /** * Sets a new anti-fire instance for this class. * @Param details the anti-fire instance to set. */ public void setAntifireDetail(Optional<AntifireDetails> details) { this.antifireDetails = details; } /** * Populates the {@link #watchMap} */ { watchMap.put("FOOD", new Stopwatch()); watchMap.put("DRINKS", new Stopwatch()); watchMap.put("TOLERANCE", new Stopwatch()); } } }
Some more nice progress; work has been picking up quite a bit and will most likely have less time to work on this once covid stages update.
A bit of everything in terms of updating. Mainly focused on workflow layout & cleaning.
Some more JVM improvements overall as well. Coming along quite nicely.
Implemented & fixed a few bits of the new Dialogue system. Here's a demo class.
Code:package com.rs.game.dialogue.impl; import com.rs.game.dialogue.DialogueEventListener; import com.rs.game.npc.NPC; import com.rs.game.player.Player; public class TestD extends DialogueEventListener { public TestD(Player player, NPC npc) { super(player, npc); } @Override public void start() { mes("yo sup i'm a regular message"); player(happy, "lol okay"); option("Yes", () -> { System.out.println("hi"); }, "No", () -> { System.out.println("bye"); }, "maybe", () -> { System.out.println("bye"); }, "idk", () -> { System.out.println("byess"); }); npc(sad, "I'm sad man.."); item(1050, "I'm a santa hat mate."); } }
I wrote down some Chatbox related interfaces that may be useful. They're quite scattered in the cache so your welcome.
Code:dialogue interfaces 26 - npc seems 64-71 - player 90-93 npc - no continue option 131 - possible Item dialogue 173 - unknown - probably player (?) 210-219 - blank statements (no entity involved) 227-238 - select options (with swords) 240-248 - Dialogue to far left side with npc/item on right side 372 - Information dialogue (blue title dialogue) 421 - A list of information lines (more than 7 with a scroll bar feature) 451, 458 - a 3 option dialogue 519 - npc or item model dialogue 554 - 557 - more option 668 - pick a puppy 718 - 2 options dialogue 737 - cat picking 740 - chatbox flashing icon chat message dialogue 757 - npc/item dialogue 835, 846, 1020 - weird click to continue dialogue..hm 905, 916 - looks like slidable options box 944 - how many to make (dungeoneering) 1018 - weirdly placed single message dialogue
Last edited by .css; 06-10-2021 at 10:36 PM.
I've reworked this thread with more information, setup information, media, code.
Thanks for support & help in the discord chat whenever I needed it guys! I've been super busy IRL now that indoor restaurants are coming very soon. I'll have time to work on this still no worries. I've pretty much stopped working on the 727 as the code is redundant to use since I could just easily convert the server to work with the 727 protocol (so just save myself the hassle of porting code), but more interested in focusing on this as my main and only.
Much love to fellow developers & hope we can keep the rsps scene floating around much longer.
Thanks for reviving my favorite revision (due to the login screen design). I will be branching off this at some point and doing some work.
« Previous Thread | Next Thread » |
Thread Information |
Users Browsing this ThreadThere are currently 1 users browsing this thread. (0 members and 1 guests) |