Welcome, guest! Please login or register.

    * Shoutbox

    RefreshHistory
    • ragnoroker: New Server! - Join today, double exp this weekend :) - [link]
      August 22, 2019, 11:44:10 AM
    • ragnoroker: New Server! - Join today, double exp this weekend :) - [link]
      August 22, 2019, 11:44:02 AM
    • gogata: holy crap time to make a rsps again 10 years later since i made this acc LOL
      August 21, 2019, 03:23:51 PM
    • hodford: yo autoscape has keylogger in cache, ive been member in this community since 2011
      August 20, 2019, 08:57:42 PM
    • E S C O B A R: Anyone able to help me, i'm trying to find a decent source/client to start from , I haven't been near a laptop in over two years . Does much people still play RSPS's also?
      August 19, 2019, 04:52:38 PM
    • dan v jad: Great osrsps experience - check us out - join on discord! dxp, dpoints [link]
      August 19, 2019, 09:50:00 AM
    • ragnoroker: Brand new server! Double EXP is enabled right now aswell as other events! - [link]
      August 18, 2019, 07:14:43 AM
    • ragnoroker: Brand new server! Double EXP is enabled right now aswell as other events! - [link]
      August 18, 2019, 07:14:35 AM
    • puppajohn: Come and join us today for amazing content !
      August 16, 2019, 10:26:16 PM
    • puppajohn:[link] come and join us now! you have donator on your server? no problem we restore your donator credits and symbol ! free M box on loggins
      August 16, 2019, 10:26:02 PM
    • PavSwag: autoscape,0rg kill REVS for chance of TWISTED BOW || EP GETS YOU OSRS GP TOKENS
      August 15, 2019, 05:13:07 PM
    • hodford: autoscape,0rg is actually fudgein lit as come check it out
      August 13, 2019, 02:59:58 AM
    • ragnoroker: Brand new server! Hosting Raids Event all day + More! - 20+ online, Join today [link]
      August 11, 2019, 07:45:49 AM
    • ragnoroker: Brand new server! Hosting Raids Event all day + More! - 20+ online, Join today [link]
      August 11, 2019, 07:45:46 AM
    • PavSwag: autoscape,0rg kill REVS for chance of TWISTED BOW
      August 08, 2019, 07:29:43 PM
    • ragnoroker:Brand new server! Endless Content - Mature Players/Staff - 20+ online, Join today [link]
      August 08, 2019, 11:05:53 AM
    • ragnoroker:Brand new server! Endless Content - Mature Players/Staff - 20+ online, Join today [link]
      August 08, 2019, 11:05:46 AM
    • asshole_rule: bernie sanders
      August 06, 2019, 07:54:02 PM
    • PavSwag: #AS 100M OSRS GP GIVEAWAY!! [link] 317 Oldschool RuneScape Private Server emulating core factors of the game with a strong economy and balance of experience to bossing and prestiging -Receive DONATOR Perks by maxing to 99s- Lumbridge remade - Login with a starter set of armour and items - PK District - Preloading sets - Activity points for training - All Skills Working, Skilling Island, Skilling Pets, Skilling Rewards - All Working Max Capes - 25+ Bosses with Pets - Superior Slayer Encounters - Player Owned Shops - Minigames, Construction, Sawmill, Warriors Guild, Pest Control, Barrows (with pets), Fight Caves, Inferno Caves, Chambers of Xeric, Custom Raids - NPC Drop Table, Kills Tracker, Points Tracker, Extra settings. - Doubled Xp & Points Weekends - Vote System - Vote4Donor - Competitive Highscores - Tons of Content - Join us today for bonus giveaways and free ultra mystery box upon login!   Official YouTube Media: [youtube]P5D0eXEmjA4[/youtube] Join NOW Ill personally give you Ultra Mystery Boxes (Twisted Bow??) Im the Developer :smiley: Heres the Discord:  [link] BTW 100m OSRS GP Giveaways WEEKLY!
      August 05, 2019, 01:05:53 PM
    • ragnoroker: Brand new server! Endless Content - Mature Players/Staff - 20+ online, Join today :) - [link]
      August 05, 2019, 12:48:52 PM

    Show Posts

    This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


    Topics - asshole_rule

    Pages: [1]
    1
    that would be awkward  :rolleyes::rolleyes::rolleyes::cool::cool::cool::cool::eek::eek::eek::D:D:D;);):):):)

    2
    Well for basically ANY tutorial that I post, they all have too much code to be posted with code tags. So I end up always needing to use pastebin. It's not a real problem, I just don't see a reason to have the limit, in the tutorial section at least.

    Examples:
    https://forum.moparscape.org/index.php/topic,671332.0.html/
    #msg4380153


    And those are just the ones I remember needing to use pastebin for.

    I wouldn't be opposed to completely removing it, because I honestly don't see the point. But if we can just remove it for sections which require a pretty big amount of text EG(Server tutorials, Server development, Server Help, Private server client hacking) it would be convenient.

    3
    Server Tutorials / Auction House
    « on: July 11, 2015, 02:06:41 PM »
    First things first, this is rodrigo + my code. A couple of people have been leaking so called Auction Houses, selling them, whatever, and I just want to say that this is in no way associated with any of them.

    Secondly, this code is from 2012. Obviously outdated and plenty of work to be done. It's an unfinished, yet still functional system. There will most likely be dupes, and glitches and what not. You'll have to fix them yourselves. The idea itself still isn't completely finished. If I was to use this code now, I would add a scroll bar, and add a search system. Remove the pages in general. It also could clearly be improved aesthetically, but whatever. It's actually a miracle I found this code on my computer. I had to recover a few files from my dropbox and amazingly found it. This isn't really an auction house either, lol. It's just click and buy. No real auctioning at all.

    This idea orginally came from [user]TheRedArmy[/user], so special thank you to him. I basically stole his whole idea. I guess he originally got his idea from W.O.W.
    Quote from: TheRedArmy
    You really screwed up my interface setup, I had it nice, clean and professionalism looking.

    Especially since you used my idea, I have no problem with that, in fact I'm happy someone finished it, but you couldn't design your own interface instead of trying to copy mine?...



    https://www.youtube.com/watch?v=hpupAkuYyKY

    MAIN AUCTION CLASSES: http://pastebin.com/UWx1uNZH
    MAIN AUCTION CLASSES: http://pastebin.com/UWx1uNZH
    MAIN AUCTION CLASSES: http://pastebin.com/UWx1uNZH
    MAIN AUCTION CLASSES: http://pastebin.com/UWx1uNZH
    MAIN AUCTION CLASSES: http://pastebin.com/UWx1uNZH

    In Player/Client.java

    Code: [Select]
    public boolean auctionOpen;
    public int slotOffered = -1;
    public int priceDesired;
    public String sellerComment;
    public int page2;
    public int page;
       
        public void go() {
    if(auctionOpen) {
    if(slotOffered >= 0 && priceDesired >= 0 && sellerComment != null) {
    int itemId = this.playerItems[slotOffered];
    int amount = this.playerItemsN[slotOffered];
    Auction.getAuction().addOffer(this, sellerComment, itemId, amount, priceDesired);
    }
    }
    }

    in login or initialize method add

    Code: [Select]
    Auction.getAuction().getHandler().login(this);

    In ClickingButtons.java

    Code: [Select]
    case 43000:
    Auction.getAuction().getHandler().collectAll(c);
    break;
    case 42254:
    if(c.auctionOpen) {
    c.getPA().openUpBank();
    }
    break;
    case 42252:
    c.sendMessage("Auction house help.");
    break;
    case 43002:
    case 43003:
    case 43004:
    case 43005:
    Auction.getAuction().getHandler().clickToBuy(c, actionButtonId);
    break;
    case 43008:
    c.page++;
    Auction.getAuction().changePage(c);
    break;
    case 43009:
    c.page--;
    Auction.getAuction().changePage(c);
    break;


    Now in your server find the packet that handles incoming text. It should be the same packet that handles when you enter a name for your clan chat.

    In the server I used the packet was (stupidly) named ClanChat.java. This is what it looks like.

    Code: [Select]
    package server.model.players.packets;

    import server.Server;
    import server.model.players.PacketType;
    import server.model.players.Player;
    import server.util.Misc;
    /**
     * Chat
     **/
    public class ClanChat implements PacketType {

    @Override
    public void processPacket(Player c, int packetType, int packetSize) {
    String textSent = Misc.longToPlayerName2(c.getInStream().readQWord());
    textSent = textSent.replaceAll("_", " ");
    if(c.auctionOpen) {
    c.sellerComment = textSent;
    c.sendMessage(""+textSent);
    c.go();
    return;
    }
    Server.clanChat.handleClanChat(c, textSent);
    }
    }

    This is all i added to it

    Code: [Select]
    if(c.auctionOpen) {
    c.sellerComment = textSent;
    c.sendMessage(""+textSent);
    c.go();
    return;
    }

    BankX1

    Code: [Select]
    if(c.auctionOpen && c.Xamount >= 500 && c.Xamount <= 528) {
    int slot = c.Xamount - 500;
    if(slot == -1) slot = 0;
    c.slotOffered = slot;
    return;
    } else if (c.auctionOpen && c.Xamount >= 600) {
    int price = c.Xamount - 600;
    c.priceDesired = price;
    return;
    }

    BankX2

    Code: [Select]
    if(c.auctionOpen && c.Xamount >= 500 && c.Xamount <= 528) {
    int slot = c.Xamount - 500;
    if(slot == -1) slot = 0;
    c.slotOffered = slot;
    return;
    } else if (c.auctionOpen && c.Xamount >= 600) {
    int price = c.Xamount - 600;
    c.priceDesired = price;
    return;
    }



    Client side:

    In RSInterface.java

    Code: [Select]
    public static void auctionHouse(TextDrawingArea[] TDA) {
    String path = "AuctionHouse";
    RSInterface tab = addInterface(11000);
    addSprite(11001, 0, ""+path+"/InterfaceBack");
    addSprite(11002, 0, ""+path+"/ItemBack");
    addSprite(11003, 0, ""+path+"/ItemNameBack");
    addButton(11004, 0, ""+path+"/Button", "   Help");
    addText(11005, "Help", 0xFF9900, false, true, -1, TDA, 1);
    addButton(11006, 0, ""+path+"/Button", "   Bank");
    addText(11007, "Bank", 0xFF9900, false, true, -1, TDA, 1);
    addButton(11008, 0, ""+path+"/Button", "Collect Items");
    addText(11009, "Collect", 0xFF9900, false, true, -1, TDA, 1);
    addButton(11010, 0, ""+path+"/BuyItem", "Buy This Item");
    addButton(11011, 0, ""+path+"/BuyItem", "Buy This Item");
    addButton(11012, 0, ""+path+"/BuyItem", "Buy This Item");
    addButton(11013, 0, ""+path+"/BuyItem", "Buy This Item");
    addHoverText(11016, "  Next Page  ", "Next Page", TDA, 0, 0xFF9900, false, true, 63);
    addHoverText(11017, "  Previous Page  ", "Previous Page", TDA, 0, 0xFF9900, false, true, 82);
    addHoverText(11018, "123456789123456789", "Item Name Is Here", TDA, 1, 0xFF9900, true, true, 82);
    addText(11019, "Seller comment goes here",0xFF9900, false, true, -1, TDA, 1);
    addText(11020, "Seller comment goes here",0xFF9900, false, true, -1, TDA, 1);
    addText(11021, "Seller comment goes here",0xFF9900, false, true, -1, TDA, 1);
    addText(11022, "Seller comment goes here",0xFF9900, false, true, -1, TDA, 1);
    addText(11023, "Seller name",0xFF9900, false, true, -1, TDA, 1);
    addText(11024, "Seller name",0xFF9900, false, true, -1, TDA, 1);
    addText(11025, "Seller name",0xFF9900, false, true, -1, TDA, 1);
    addText(11026, "Seller name",0xFF9900, false, true, -1, TDA, 1);
    addText(11027, "Item Name",0xFF9900, false, true, -1, TDA, 1);
    addText(11028, "Item Name",0xFF9900, false, true, -1, TDA, 1);
    addText(11029, "Item Name",0xFF9900, false, true, -1, TDA, 1);
    addText(11030, "Item Name",0xFF9900, false, true, -1, TDA, 1);
    addText(11031, "Price",0xFF9900, false, true, -1, TDA, 1);
    addText(11032, "Price",0xFF9900, false, true, -1, TDA, 1);
    addText(11033, "Price",0xFF9900, false, true, -1, TDA, 1);
    addText(11034, "Price",0xFF9900, false, true, -1, TDA, 1);
    addInv(11035, 11000, 100, 100);
    tab.totalChildren(33);
    tab.child(0,11001,13,17);
    tab.child(1,11002,23,25);
    tab.child(2,11003,110,45);
    tab.child(3,11004,265,53);
    tab.child(4,11005,275,61);
    tab.child(5,11006,342,53);
    tab.child(6,11007,353,61);
    tab.child(7,11008,419,53);
    tab.child(8,11009,433,61);
    tab.child(9,11010,37,112);
    tab.child(10,11011,37,159);
    tab.child(11,11012,37,159 + 47);
    tab.child(12,11013,37,159 + 47 + 47);
    tab.child(13,11016,39,305);
    tab.child(14,11017,385,305);
    tab.child(15,11018,140,60);
    tab.child(16,11019,50,115);
    tab.child(17,11020,50,160);
    tab.child(18,11021,50,205);
    tab.child(19,11022,50,255);
    tab.child(20,11023,50,137);
    tab.child(21,11024,50,183);
    tab.child(22,11025,50,183 + 46);
    tab.child(23,11026,50,183 + 46 + 46);
    tab.child(24,11027,210,135);
    tab.child(25,11028,210,180);
    tab.child(26,11029,210,180 + 46);
    tab.child(27,11030,210,180 + 46 + 46);
    tab.child(28,11031,333,135);
    tab.child(29,11032,333,180);
    tab.child(30,11033,333,180 + 46);
    tab.child(31,11034,333,180 + 46 + 46);
    tab.child(32,11035,17,50);
    }

    public static void addInv(int id, int pID, int h, int w)
    {
        RSInterface Tab = interfaceCache[id] = new RSInterface();
        Tab.inv = new int[h * w];
        Tab.invStackSizes = new int[h * w];
        for(int i1 = 0; i1 < h * w; i1++)
            {
                Tab.inv[i1] = 0;
                Tab.invStackSizes[i1] = 0;
             }
        Tab.spritesX = new int[20];
        Tab.spritesY = new int[20];
        for(int i2 = 0; i2 < 20; i2++)
                {
                Tab.spritesX[i2] = 0;
                Tab.spritesY[i2] = 0;
            }
        Tab.type = 2;
        Tab.height = h;
        Tab.width = w;
       // Tab.mOverInterToTrigger = -1;
        Tab.isMouseoverTriggered = -1;
        Tab.scrollMax = 0;
        Tab.id = id;
        Tab.parentID = pID;
    }

    search for class44 =

    add
    Code: [Select]
    auctionHouse(textDrawingAreas);
    sprites: Download Auction.House.zip @ UppIT


    There is some client code that I was unable to recover. It's not a lot of code but you will probably need it to get it fully functional. It has to do with sending the items information from the client to the server via that Clan Chat packet we edited. Credits to an old pal Rodrigo and TheRedArmy.

    Edit: If you whip up some of the client code that I lost and post it here, i'll add it and give you credits/rep. Cheers

    Enjoy guys.

    4
    Games / Dragonball Xenoverse
    « on: June 30, 2015, 08:15:48 PM »
    Does anyone play this game? I'm a huge dragonball fan and I bought it probably 2 weeks after it came out, but didn't start playing until now, lol.

    What're your thoughts on the game? I'm on the fence about it right now. It's probably the best dragonball game to be released to date, but it's certainly lacking. Like every other dbz game, it's pretty much just a button smasher. My girlfriend managed to beat me her first time ever playing, and she didn't even know the controls (although it could be because I'm horrible). I also would've liked to see more characters. I think adding characters can only make the game better. It's missing some of my favorites, such as Janemba, Dabura, Baby, etc. Haven't tried online yet, so if someone could tell me how it is for them, that'd be cool.

    What're your thoughts and experiences with the game?

    5
    Music / Pouya
    « on: September 20, 2014, 05:53:53 PM »
    I like to find underground rappers from Florida.







    don't judge him just cause how he looks, lol.

    6
    Off-Topic (Spam) / ur mum
    « on: September 03, 2014, 06:40:10 PM »
    its legal for me to have sex your mom now

    or dad...

    7
    Games / Favorite Old(ish) PS2/Xbox games
    « on: July 25, 2014, 02:38:28 PM »
    First of, if there's already a topic for this, forgive me.

    Anyway, I bought a controller that lets me play PS2 games on my computer (although this topic is open to old xbox games too), and it made me start thinking of all the old PS2 games that I used to play, and how I want to replay through them all.

    My favs were:

    Jak 3


    Maximo: Army of Zin


    War of the Monsters


    Jak and Maximo had amazing story modes with tons of replay value. Not to mention completely bad ass main characters. War of the Monsters was just fun to run around destroying cities.

     
    What were your favorite PS2 and xbox games?


    8
    Development Teams / 317 Development Team
    « on: July 24, 2014, 12:50:52 PM »
    Hi, I'm looking to assemble a team of 1 or 2 other server developers, to help me create an old school type feel private server. The only requirements I have is that you are trustworthy, and are able to create your own content with your own code. The server I am looking to create is NOT A REMAKE, but will in fact include very close replicas to some of the content in RuneScape 2007, but also our own, fresh ideas. I don't have 1 main focus on the server, but instead intend to implement all aspects of RuneScape's game play (I.E skilling/pking/pvm). My general taste for servers are slow-medium EXP rate with reasonable drop rates, but to the point where it's still an accomplishment to get a rare drop. I do not currently have a goal yet on whether I want to host this, or release it. But anyways, if you want to apply, we can talk more about the server over Skype.

    Some of our current features are:
    • Fully Entity based combat
    • Excellent and balanced NPC drop system
    • POH base
    • Dwarf Multicannon
    • Reworked NPC and Player Updating

    The server is a very bare, 317 Emulous, based off of Advocatus Diaboli's release. It is clearly lacking content but I intend to recreate boatloads of content that we are missing.





    If you wish to apply, please leave a reply below filling out the following.

    Code: [Select]
    Name:
    Experience:
    Skype:
    Anything else:

    Thanks  :)

    9
    Been leaked and released everywhere but here, and I'm tired of people selling something that's released. Remove all your client side following shit.

    Post errors!

    Links:
    ; data
    ; classes

    Ty RandQm

    FIRST:
    Download clip.rar and extract it and place this folder inside your server folder - it should now look like src/server/clip



    Download: Click here![/url]


    SECOND:
    Download world.rar and extract it, place this folder inside your data directory.
    e.g servername/Data/WORLD FOLDER HERE

    Download: Click here![/url]


    THIRD:
    Create a new class, name it Pathfinder.java - paste the following code in it and save it to your server.model.players folder.

    Code: [Select]
    package server.model.players;

    import java.util.LinkedList;

    import server.clip.region.Region;
    import server.model.players.Client;

    public class PathFinder {

    private static final PathFinder pathFinder = new PathFinder();

    public static PathFinder getPathFinder() {
    return pathFinder;
    }

    public PathFinder() {
    }

    public void findRoute(Client c, int destX, int destY, boolean moveNear,
    int xLength, int yLength) {
    if (destX == c.getLocalX() && destY == c.getLocalY() && !moveNear) {
    c.sendMessage("ERROR!");
    return;
    }
    destX = destX - 8 * c.getMapRegionX();
    destY = destY - 8 * c.getMapRegionY();
    int[][] via = new int[104][104];
    int[][] cost = new int[104][104];
    LinkedList<Integer> tileQueueX = new LinkedList<Integer>();
    LinkedList<Integer> tileQueueY = new LinkedList<Integer>();
    for (int xx = 0; xx < 104; xx++) {
    for (int yy = 0; yy < 104; yy++) {
    cost[xx][yy] = 99999999;
    }
    }
    int curX = c.getLocalX();
    int curY = c.getLocalY();
    via[curX][curY] = 99;
    cost[curX][curY] = 0;
    int tail = 0;
    tileQueueX.add(curX);
    tileQueueY.add(curY);
    boolean foundPath = false;
    int pathLength = 4000;
    while (tail != tileQueueX.size() && tileQueueX.size() < pathLength) {
    curX = tileQueueX.get(tail);
    curY = tileQueueY.get(tail);
    int curAbsX = c.getMapRegionX() * 8 + curX;
    int curAbsY = c.getMapRegionY() * 8 + curY;
    if (curX == destX && curY == destY) {
    foundPath = true;
    break;
    }
    tail = (tail + 1) % pathLength;
    int thisCost = cost[curX][curY] + 1;
    if (curY > 0
    && via[curX][curY - 1] == 0
    && (Region.getClipping(curAbsX, curAbsY - 1, c.heightLevel) & 0x1280102) == 0) {
    tileQueueX.add(curX);
    tileQueueY.add(curY - 1);
    via[curX][curY - 1] = 1;
    cost[curX][curY - 1] = thisCost;
    }
    if (curX > 0
    && via[curX - 1][curY] == 0
    && (Region.getClipping(curAbsX - 1, curAbsY, c.heightLevel) & 0x1280108) == 0) {
    tileQueueX.add(curX - 1);
    tileQueueY.add(curY);
    via[curX - 1][curY] = 2;
    cost[curX - 1][curY] = thisCost;
    }
    if (curY < 104 - 1
    && via[curX][curY + 1] == 0
    && (Region.getClipping(curAbsX, curAbsY + 1, c.heightLevel) & 0x1280120) == 0) {
    tileQueueX.add(curX);
    tileQueueY.add(curY + 1);
    via[curX][curY + 1] = 4;
    cost[curX][curY + 1] = thisCost;
    }
    if (curX < 104 - 1
    && via[curX + 1][curY] == 0
    && (Region.getClipping(curAbsX + 1, curAbsY, c.heightLevel) & 0x1280180) == 0) {
    tileQueueX.add(curX + 1);
    tileQueueY.add(curY);
    via[curX + 1][curY] = 8;
    cost[curX + 1][curY] = thisCost;
    }
    if (curX > 0
    && curY > 0
    && via[curX - 1][curY - 1] == 0
    && (Region.getClipping(curAbsX - 1, curAbsY - 1,
    c.heightLevel) & 0x128010e) == 0
    && (Region.getClipping(curAbsX - 1, curAbsY, c.heightLevel) & 0x1280108) == 0
    && (Region.getClipping(curAbsX, curAbsY - 1, c.heightLevel) & 0x1280102) == 0) {
    tileQueueX.add(curX - 1);
    tileQueueY.add(curY - 1);
    via[curX - 1][curY - 1] = 3;
    cost[curX - 1][curY - 1] = thisCost;
    }
    if (curX > 0
    && curY < 104 - 1
    && via[curX - 1][curY + 1] == 0
    && (Region.getClipping(curAbsX - 1, curAbsY + 1,
    c.heightLevel) & 0x1280138) == 0
    && (Region.getClipping(curAbsX - 1, curAbsY, c.heightLevel) & 0x1280108) == 0
    && (Region.getClipping(curAbsX, curAbsY + 1, c.heightLevel) & 0x1280120) == 0) {
    tileQueueX.add(curX - 1);
    tileQueueY.add(curY + 1);
    via[curX - 1][curY + 1] = 6;
    cost[curX - 1][curY + 1] = thisCost;
    }
    if (curX < 104 - 1
    && curY > 0
    && via[curX + 1][curY - 1] == 0
    && (Region.getClipping(curAbsX + 1, curAbsY - 1,
    c.heightLevel) & 0x1280183) == 0
    && (Region.getClipping(curAbsX + 1, curAbsY, c.heightLevel) & 0x1280180) == 0
    && (Region.getClipping(curAbsX, curAbsY - 1, c.heightLevel) & 0x1280102) == 0) {
    tileQueueX.add(curX + 1);
    tileQueueY.add(curY - 1);
    via[curX + 1][curY - 1] = 9;
    cost[curX + 1][curY - 1] = thisCost;
    }
    if (curX < 104 - 1
    && curY < 104 - 1
    && via[curX + 1][curY + 1] == 0
    && (Region.getClipping(curAbsX + 1, curAbsY + 1,
    c.heightLevel) & 0x12801e0) == 0
    && (Region.getClipping(curAbsX + 1, curAbsY, c.heightLevel) & 0x1280180) == 0
    && (Region.getClipping(curAbsX, curAbsY + 1, c.heightLevel) & 0x1280120) == 0) {
    tileQueueX.add(curX + 1);
    tileQueueY.add(curY + 1);
    via[curX + 1][curY + 1] = 12;
    cost[curX + 1][curY + 1] = thisCost;
    }
    }
    if (!foundPath) {
    if (moveNear) {
    int i_223_ = 1000;
    int thisCost = 100;
    int i_225_ = 10;
    for (int x = destX - i_225_; x <= destX + i_225_; x++) {
    for (int y = destY - i_225_; y <= destY + i_225_; y++) {
    if (x >= 0 && y >= 0 && x < 104 && y < 104
    && cost[x][y] < 100) {
    int i_228_ = 0;
    if (x < destX) {
    i_228_ = destX - x;
    } else if (x > destX + xLength - 1) {
    i_228_ = x - (destX + xLength - 1);
    }
    int i_229_ = 0;
    if (y < destY) {
    i_229_ = destY - y;
    } else if (y > destY + yLength - 1) {
    i_229_ = y - (destY + yLength - 1);
    }
    int i_230_ = i_228_ * i_228_ + i_229_ * i_229_;
    if (i_230_ < i_223_
    || (i_230_ == i_223_ && (cost[x][y] < thisCost))) {
    i_223_ = i_230_;
    thisCost = cost[x][y];
    curX = x;
    curY = y;
    }
    }
    }
    }
    if (i_223_ == 1000) {
    return;
    }
    } else {
    return;
    }
    }
    tail = 0;
    tileQueueX.set(tail, curX);
    tileQueueY.set(tail++, curY);
    int l5;
    for (int j5 = l5 = via[curX][curY]; curX != c.getLocalX()
    || curY != c.getLocalY(); j5 = via[curX][curY]) {
    if (j5 != l5) {
    l5 = j5;
    tileQueueX.set(tail, curX);
    tileQueueY.set(tail++, curY);
    }
    if ((j5 & 2) != 0) {
    curX++;
    } else if ((j5 & 8) != 0) {
    curX--;
    }
    if ((j5 & 1) != 0) {
    curY++;
    } else if ((j5 & 4) != 0) {
    curY--;
    }
    }
    c.resetWalkingQueue();
    int size = tail--;
    int pathX = c.getMapRegionX() * 8 + tileQueueX.get(tail);
    int pathY = c.getMapRegionY() * 8 + tileQueueY.get(tail);
    c.addToWalkingQueue(localize(pathX, c.getMapRegionX()),
    localize(pathY, c.getMapRegionY()));
    for (int i = 1; i < size; i++) {
    tail--;
    pathX = c.getMapRegionX() * 8 + tileQueueX.get(tail);
    pathY = c.getMapRegionY() * 8 + tileQueueY.get(tail);
    c.addToWalkingQueue(localize(pathX, c.getMapRegionX()),
    localize(pathY, c.getMapRegionY()));
    }
    }

    public int localize(int x, int mapRegion) {
    return x - 8 * mapRegion;
    }

    }


    FOURTH:
    Open up playerAssistant.java and add this anywhere you like.

    Code: [Select]
    public void playerWalk(int x, int y) {
    PathFinder.getPathFinder().findRoute(c, x, y, true, 1, 1);
    }
    Then search for public void followPlayer() and replace it with the one below.

    Code: [Select]
    public void followPlayer() {
    if (PlayerHandler.players[c.followId] == null
    || PlayerHandler.players[c.followId].isDead) {
    resetFollow();
    return;
    }
    if (c.freezeTimer > 0) {
    return;
    }
    if (c.isDead || c.playerLevel[3] <= 0)
    return;

    int otherX = PlayerHandler.players[c.followId].getX();
    int otherY = PlayerHandler.players[c.followId].getY();

    boolean sameSpot = (c.absX == otherX && c.absY == otherY);

    boolean hallyDistance = c.goodDistance(otherX, otherY, c.getX(),
    c.getY(), 2);

    boolean rangeWeaponDistance = c.goodDistance(otherX, otherY, c.getX(),
    c.getY(), 4);
    boolean bowDistance = c.goodDistance(otherX, otherY, c.getX(),
    c.getY(), 6);
    boolean mageDistance = c.goodDistance(otherX, otherY, c.getX(),
    c.getY(), 7);

    boolean castingMagic = (c.usingMagic || c.mageFollow || c.autocasting || c.spellId > 0)
    && mageDistance;
    boolean playerRanging = (c.usingRangeWeapon)
    && rangeWeaponDistance;
    boolean playerBowOrCross = (c.usingBow) && bowDistance;

    if (!c.goodDistance(otherX, otherY, c.getX(), c.getY(), 25)) {
    c.followId = 0;
    resetFollow();
    return;
    }
    c.faceUpdate(c.followId + 32768);
    if (!sameSpot) {
    if (c.playerIndex > 0 && !c.usingSpecial && c.inWild()) {
    if (c.usingSpecial && (playerRanging || playerBowOrCross)) {
    c.stopMovement();
    return;
    }
    if (castingMagic || playerRanging || playerBowOrCross) {
    c.stopMovement();
    return;
    }
    if (c.getCombat().usingHally() && hallyDistance) {
    c.stopMovement();
    return;
    }
    }
    }
    if (otherX == c.absX && otherY == c.absY) {
    int r = Misc.random(3);
    switch (r) {
    case 0:
    walkTo(0, -1);
    break;
    case 1:
    walkTo(0, 1);
    break;
    case 2:
    walkTo(1, 0);
    break;
    case 3:
    walkTo(-1, 0);
    break;
    }
    } else if (c.isRunning2) {
    if (otherY > c.getY() && otherX == c.getX()) {
    playerWalk(otherX, otherY - 1);
    } else if (otherY < c.getY() && otherX == c.getX()) {
    playerWalk(otherX, otherY + 1);
    } else if (otherX > c.getX() && otherY == c.getY()) {
    playerWalk(otherX - 1, otherY);
    } else if (otherX < c.getX() && otherY == c.getY()) {
    playerWalk(otherX + 1, otherY);
    } else if (otherX < c.getX() && otherY < c.getY()) {
    playerWalk(otherX + 1, otherY + 1);
    } else if (otherX > c.getX() && otherY > c.getY()) {
    playerWalk(otherX - 1, otherY - 1);
    } else if (otherX < c.getX() && otherY > c.getY()) {
    playerWalk(otherX + 1, otherY - 1);
    } else if (otherX > c.getX() && otherY < c.getY()) {
    playerWalk(otherX + 1, otherY - 1);
    }
    } else {
    if (otherY > c.getY() && otherX == c.getX()) {
    playerWalk(otherX, otherY - 1);
    } else if (otherY < c.getY() && otherX == c.getX()) {
    playerWalk(otherX, otherY + 1);
    } else if (otherX > c.getX() && otherY == c.getY()) {
    playerWalk(otherX - 1, otherY);
    } else if (otherX < c.getX() && otherY == c.getY()) {
    playerWalk(otherX + 1, otherY);
    } else if (otherX < c.getX() && otherY < c.getY()) {
    playerWalk(otherX + 1, otherY + 1);
    } else if (otherX > c.getX() && otherY > c.getY()) {
    playerWalk(otherX - 1, otherY - 1);
    } else if (otherX < c.getX() && otherY > c.getY()) {
    playerWalk(otherX + 1, otherY - 1);
    } else if (otherX > c.getX() && otherY < c.getY()) {
    playerWalk(otherX - 1, otherY + 1);
    }
    }
    c.faceUpdate(c.followId+32768);
    }

    FIFTH:
    Open up Player.java and add this in where else you want it.

    Code: [Select]
    public int getLocalX() {
    return getX() - 8 * getMapRegionX();
    }

    public int getLocalY() {
    return getY() - 8 * getMapRegionY();
    }


    SIXTH:
    Open up FollowPlayer.java which will be in your packets folder and replace it with this.. Probably the same as you have already to be honest.
    Code: [Select]
    package server.model.players.packets;

    import server.Server;
    import server.model.players.Client;
    import server.model.players.PacketType;

    public class FollowPlayer implements PacketType {

    @Override
    public void processPacket(Client c, int packetType, int packetSize) {
    int followPlayer = c.getInStream().readUnsignedWordBigEndian();
    if(Server.playerHandler.players[followPlayer] == null) {
    return;
    }
    c.playerIndex = 0;
    c.npcIndex = 0;
    c.mageFollow = false;
    c.usingBow = false;
    c.usingRangeWeapon = false;
    c.followDistance = 1;
    c.followId = followPlayer;
    }
    }

    SEVENTH:
    Open up Server.java and add these imports

    Code: [Select]
    import server.clip.region.ObjectDef;
    import server.clip.region.Region;

    Then add these under the main method. (public static void main)

    Code: [Select]
    ObjectDef.loadConfig();
    Region.load();

    Credits to Palidino76 for all the code and everyone who leaked it.

    Post errors!


    Edit: Moved onto better things then PI, expect some big releases soon.

    10
    If you don't like this tutorial or you're mad because I released it, piss off.

    Firstly in your client in Client.java

    20,000 char limit, so i posted it on pastebin, heres the link: http://pastebin.com/jxnw9PZk

    Open Entity.java

    Search for

    Code: [Select]
    public final void updateHitData(int j, int k, int l)
    {
    for(int i1 = 0; i1 < 4; i1++)
    if(hitsLoopCycle[i1] <= l)
    {
    hitArray[i1] = k * ((client.newDamage == true && k > 0) ? 10 : 1);
    if (client.newDamage && k > 0) {
    hitArray[i1] += new java.util.Random().nextInt(9);
    }
    hitMarkTypes[i1] = j;
    hitsLoopCycle[i1] = l + 70;
    return;
    }
    }

    Replace it with:

    Code: [Select]
    public int[] hitmarkMove = new int[4];
    public int[] hitmarkTrans = new int[4];
    public int[] hitIcon = new int[4];
    public final void updateHitData(int markType, int damage, int l, int icon)
    {
    for(int i1 = 0; i1 < 4; i1++)
    if(hitsLoopCycle[i1] <= l)
    {
    hitIcon[i1] = icon;
    hitmarkMove[i1] = 5;
    hitmarkTrans[i1] = 230;
    hitArray[i1] = damage;
    hitMarkTypes[i1] = markType;
    hitsLoopCycle[i1] = l + 70;
    return;
    }
    }


    Done with Entity.java

    Open TextDrawingArea.java

    Find
     
    Code: [Select]
    public TextDrawingArea(boolean flag, String s, StreamLoader streamLoader) {
    aByteArrayArray1491 = new byte[256][];
    anIntArray1492 = new int[256];
    anIntArray1493 = new int[256];
    anIntArray1494 = new int[256];
    anIntArray1495 = new int[256];
    anIntArray1496 = new int[256];
    aRandom1498 = new Random();
    aBoolean1499 = false;
    Stream stream = new Stream(streamLoader.getDataForName(s + ".dat"));
    Stream stream_1 = new Stream(streamLoader.getDataForName("index.dat"));
    stream_1.currentOffset = stream.readUnsignedWord() + 4;
    int k = stream_1.readUnsignedByte();
    if(k > 0)
    stream_1.currentOffset += 3 * (k - 1);
    for(int l = 0; l < 256; l++) {
    anIntArray1494[l] = stream_1.readUnsignedByte();
    anIntArray1495[l] = stream_1.readUnsignedByte();
    int i1 = anIntArray1492[l] = stream_1.readUnsignedWord();
    int j1 = anIntArray1493[l] = stream_1.readUnsignedWord();
    int k1 = stream_1.readUnsignedByte();
    int l1 = i1 * j1;
    aByteArrayArray1491[l] = new byte[l1];
    if(k1 == 0) {
    for(int i2 = 0; i2 < l1; i2++)
    aByteArrayArray1491[l][i2] = stream.readSignedByte();

    } else if(k1 == 1) {
    for(int j2 = 0; j2 < i1; j2++) {
    for(int l2 = 0; l2 < j1; l2++)
    aByteArrayArray1491[l][j2 + l2 * i1] = stream.readSignedByte();
    }
    }
    if(j1 > anInt1497 && l < 128)
    anInt1497 = j1;
    anIntArray1494[l] = 1;
    anIntArray1496[l] = i1 + 2;
    int k2 = 0;
    for(int i3 = j1 / 7; i3 < j1; i3++)
    k2 += aByteArrayArray1491[l][i3 * i1];
    if(k2 <= j1 / 7) {
    anIntArray1496[l]--;
    anIntArray1494[l] = 0;
    }
    k2 = 0;
    for(int j3 = j1 / 7; j3 < j1; j3++)
    k2 += aByteArrayArray1491[l][(i1 - 1) + j3 * i1];
    if(k2 <= j1 / 7)
    anIntArray1496[l]--;
    }
    if(flag) {
    anIntArray1496[32] = anIntArray1496[73];
    } else {
    anIntArray1496[32] = anIntArray1496[105];
    }
    }

    Replace it with
    Code: [Select]
    public TextDrawingArea(boolean flag, String s, StreamLoader streamLoader) {
    try {
    int length = (s.equals("hit_full") || s.equals("critical_full")) ? 58 : 256;
    aByteArrayArray1491 = new byte[length][];
    anIntArray1492 = new int[length];
    anIntArray1493 = new int[length];
    anIntArray1494 = new int[length];
    anIntArray1495 = new int[length];
    anIntArray1496 = new int[length];
    aRandom1498 = new Random();
    aBoolean1499 = false;
    Stream stream = new Stream(streamLoader.getDataForName(s + ".dat"));
    Stream stream_1 = new Stream(streamLoader.getDataForName("index.dat"));
    stream_1.currentOffset = stream.readUnsignedWord() + 4;
    int k = stream_1.readUnsignedByte();
    if(k > 0)
    stream_1.currentOffset += 3 * (k - 1);
    for(int l = 0; l < length; l++) {
    anIntArray1494[l] = stream_1.readUnsignedByte();
    anIntArray1495[l] = stream_1.readUnsignedByte();
    int i1 = anIntArray1492[l] = stream_1.readUnsignedWord();
    int j1 = anIntArray1493[l] = stream_1.readUnsignedWord();
    int k1 = stream_1.readUnsignedByte();
    int l1 = i1 * j1;
    aByteArrayArray1491[l] = new byte[l1];
    if(k1 == 0) {
    for(int i2 = 0; i2 < l1; i2++)
    aByteArrayArray1491[l][i2] = stream.readSignedByte();

    } else if(k1 == 1) {
    for(int j2 = 0; j2 < i1; j2++) {
    for(int l2 = 0; l2 < j1; l2++)
    aByteArrayArray1491[l][j2 + l2 * i1] = stream.readSignedByte();
    }
    }
    if(j1 > anInt1497 && l < 128)
    anInt1497 = j1;
    anIntArray1494[l] = 1;
    anIntArray1496[l] = i1 + 2;
    int k2 = 0;
    for(int i3 = j1 / 7; i3 < j1; i3++)
    k2 += aByteArrayArray1491[l][i3 * i1];
    if(k2 <= j1 / 7) {
    anIntArray1496[l]--;
    anIntArray1494[l] = 0;
    }
    k2 = 0;
    for(int j3 = j1 / 7; j3 < j1; j3++)
    k2 += aByteArrayArray1491[l][(i1 - 1) + j3 * i1];
    if(k2 <= j1 / 7)
    anIntArray1496[l]--;
    }
    if(flag) {
    anIntArray1496[32] = anIntArray1496[73];
    } else {
    anIntArray1496[32] = anIntArray1496[105];
    }
    } catch (Exception _ex) {}
    }

    Finished with TextDrawingArea.java

    Open Sprite.java

    Add this method

    Code: [Select]
    public void drawTransparentSprite(int i, int j, int opacity)
    {
    int k = opacity;
    i += anInt1442;
    j += anInt1443;
    int i1 = i + j * DrawingArea.width;
    int j1 = 0;
    int k1 = myHeight;
    int l1 = myWidth;
    int i2 = DrawingArea.width - l1;
    int j2 = 0;
    if(j < DrawingArea.topY)
    {
    int k2 = DrawingArea.topY - j;
    k1 -= k2;
    j = DrawingArea.topY;
    j1 += k2 * l1;
    i1 += k2 * DrawingArea.width;
    }
    if(j + k1 > DrawingArea.bottomY)
    k1 -= (j + k1) - DrawingArea.bottomY;
    if(i < DrawingArea.topX)
    {
    int l2 = DrawingArea.topX - i;
    l1 -= l2;
    i = DrawingArea.topX;
    j1 += l2;
    i1 += l2;
    j2 += l2;
    i2 += l2;
    }
    if(i + l1 > DrawingArea.bottomX)
    {
    int i3 = (i + l1) - DrawingArea.bottomX;
    l1 -= i3;
    j2 += i3;
    i2 += i3;
    }
    if(!(l1 <= 0 || k1 <= 0))
    {
    method351(j1, l1, DrawingArea.pixels, myPixels, j2, k1, i2, k, i1);
    }
    }

    Finished with sprite.java


    The sprites/fonts are all in one package
    link:
    -----------------------------------------------------------
    You can pack the fonts in cache via Toms Cache suite,
    Load your cache select View/Edit Image Archives then Title
    Create a new image group called "hit_full.dat" pack the images in there from the folder.
    Do the same for "critical_full.dat" (although not entirely necessary).

    IF YOU HAVE A PROBLEM WITH THE FONTS YOU MUST REPACK THEM! -.-


    Server sided for PI:

    Player.java
    Search
    Code: [Select]
    protected void appendHitUpdate(Stream str) {
    synchronized(this) {
    str.writeByte(getHitDiff()); // What the perseon got 'hit' for
    if (poisonMask == 1) {
    str.writeByteA(2);
    } else if (getHitDiff() > 0) {
    str.writeByteA(1); // 0: red hitting - 1: blue hitting
    } else {
    str.writeByteA(0); // 0: red hitting - 1: blue hitting
    }
    if (playerLevel[3] <= 0) {
    playerLevel[3] = 0;
    isDead = true;
    }
    str.writeByteC(playerLevel[3]); // Their current hp, for HP bar
    str.writeByte(getLevelForXP(playerXP[3])); // Their max hp, for HP bar
    }
    }


    protected void appendHitUpdate2(Stream str) {
    synchronized(this) {
    str.writeByte(hitDiff2); // What the perseon got 'hit' for
    if (poisonMask == 2) {
    str.writeByteS(2);
    poisonMask = -1;
    } else if (hitDiff2 > 0) {
    str.writeByteS(1); // 0: red hitting - 1: blue hitting
    } else {
    str.writeByteS(0); // 0: red hitting - 1: blue hitting
    }
    if (playerLevel[3] <= 0) {
    playerLevel[3] = 0;
    isDead = true;
    }
    str.writeByte(playerLevel[3]); // Their current hp, for HP bar
    str.writeByteC(getLevelForXP(playerXP[3])); // Their max hp, for HP bar
    }
    }

    Replace with
    Code: [Select]
    protected void appendHitUpdate(Stream str) {
    synchronized(this) {
    str.writeByte(getHitDiff()); // What the perseon got 'hit' for
    str.writeByteS(hitMask);
    if (playerLevel[3] <= 0) {
    playerLevel[3] = 0;
    isDead = true;
    }
    str.writeByte(hitIcon);
    str.writeByteC(playerLevel[3]); // Their current hp, for HP bar
    str.writeByte(getLevelForXP(playerXP[3])); // Their max hp, for HP bar
    }
    System.out.println("hitUpdate1: " +hitDiff);
    }


    protected void appendHitUpdate2(Stream str) {
    synchronized(this) {
    str.writeByte(hitDiff2); // What the perseon got 'hit' for
    str.writeByteS(hitMask2);
    if (playerLevel[3] <= 0) {
    playerLevel[3] = 0;
    isDead = true;
    }
    str.writeByte(hitIcon2);
    str.writeByte(playerLevel[3]); // Their current hp, for HP bar
    str.writeByteC(getLevelForXP(playerXP[3])); // Their max hp, for HP bar
    }
    }

    You may need to declare

    Code: [Select]
    public int maxHp = getLevelForXP(playerXP[3]);

    Still in player.java add this method
    Code: [Select]
    public void handleHitMask(int damage, int mask, int icon) {
    if (!hitUpdateRequired) {
    hitUpdateRequired = true;
    hitDiff = damage;
    hitMask = mask;
    hitIcon = icon;
    } else if (!hitUpdateRequired2) {
    hitUpdateRequired2 = true;
    hitDiff2 = damage;
    hitMask2 = mask;
    hitIcon2 = icon;
    }
    updateRequired = true;
    }
    Declare
    Code: [Select]
    public int hitMask, hitIcon, hitMask2, hitIcon2;

    Done in player.java

    Open NPC.java

    Search
    Code: [Select]
    public void appendHitUpdate(Stream str) {
    if (HP <= 0) {
    isDead = true;
    }
    str.writeByteC(hitDiff);
    if (hitDiff > 0) {
    str.writeByteS(1);
    } else {
    str.writeByteS(0);
    }
    str.writeByteS(HP);
    str.writeByteC(MaxHP);
    }

    Replace with
    Code: [Select]
    public void appendHitUpdate(Stream str) {
    if (HP <= 0) {
    isDead = true;
    }
    str.writeByteC(hitDiff);
    str.writeByteS(hitMask);
    str.writeByte(hitIcon);
    str.writeByteS(HP);
    str.writeByteC(MaxHP);
    }

    Same for hitupdate 2 replace
    Code: [Select]
    public void appendHitUpdate2(Stream str) {
    if (HP <= 0) {
    isDead = true;
    }
    str.writeByteA(hitDiff2);
    if (hitDiff2 > 0) {
    str.writeByteC(1);
    } else {
    str.writeByteC(0);
    }
    str.writeByteA(HP);
    str.writeByte(MaxHP);
    }

    With
    Code: [Select]
    public void appendHitUpdate2(Stream str) {
    if (HP <= 0) {
    isDead = true;
    }
    str.writeByteA(hitDiff2);
    str.writeByteC(hitMask2);
    str.writeByte(hitIcon2);
    str.writeByteA(HP);
    str.writeByte(MaxHP);
    }

    Still in NPC.java declare
    Code: [Select]
    public int hitIcon, hitIcon2, hitMask, hitMask2;

    Done in NPC.java

    Open NPCHandler.java

    Search
    Code: [Select]
    public void multiAttackDamage(int i) {
    int max = getMaxHit(i);
    for (int j = 0; j < Server.playerHandler.players.length; j++) {
    if (Server.playerHandler.players[j] != null) {
    Client c = (Client)Server.playerHandler.players[j];
    if (c.isDead || c.heightLevel != npcs[i].heightLevel)
    continue;
    if (Server.playerHandler.players[j].goodDistance(c.absX, c.absY, npcs[i].absX, npcs[i].absY, 15)) {
    if (npcs[i].attackType == 2) {
    if (!c.prayerActive[16]) {
    if (Misc.random(500) + 200 > Misc.random(c.getCombat().mageDef())) {
    int dam = Misc.random(max);
    c.dealDamage(dam);
    c.handleHitMask(dam);
    } else {
    c.dealDamage(0);
    c.handleHitMask(0);
    }
    } else {
    c.dealDamage(0);
    c.handleHitMask(0);
    }
    } else if (npcs[i].attackType == 1) {
    if (!c.prayerActive[17]) {
    int dam = Misc.random(max);
    if (Misc.random(500) + 200 > Misc.random(c.getCombat().calculateRangeDefence())) {
    c.dealDamage(dam);
    c.handleHitMask(dam);
    } else {
    c.dealDamage(0);
    c.handleHitMask(0);
    }
    } else {
    c.dealDamage(0);
    c.handleHitMask(0);
    }
    }
    if (npcs[i].endGfx > 0) {
    c.gfx0(npcs[i].endGfx);
    }
    }
    c.getPA().refreshSkill(3);
    }
    }
    }

    Replace with
    Code: [Select]
    public void multiAttackDamage(int i) {
    int max = getMaxHit(i);
    for (int j = 0; j < Server.playerHandler.players.length; j++) {
    if (Server.playerHandler.players[j] != null) {
    Client c = (Client)Server.playerHandler.players[j];
    if (c.isDead || c.heightLevel != npcs[i].heightLevel)
    continue;
    if (Server.playerHandler.players[j].goodDistance(c.absX, c.absY, npcs[i].absX, npcs[i].absY, 15)) {
    if (npcs[i].attackType == 2) {
    if (!c.prayerActive[16]) {
    if (Misc.random(500) + 200 > Misc.random(c.getCombat().mageDef())) {
    int dam = Misc.random(max);
    c.dealDamage(dam);
    c.handleHitMask(dam,2,2);
    } else {
    c.dealDamage(0);
    c.handleHitMask(0,1,1);
    }
    } else {
    c.dealDamage(0);
    c.handleHitMask(0,1,1);
    }
    } else if (npcs[i].attackType == 1) {
    if (!c.prayerActive[17]) {
    int dam = Misc.random(max);
    if (Misc.random(500) + 200 > Misc.random(c.getCombat().calculateRangeDefence())) {
    c.dealDamage(dam);
    c.handleHitMask(dam,1,1);
    } else {
    c.dealDamage(0);
    c.handleHitMask(0,2,2);
    }
    } else {
    c.dealDamage(0);
    c.handleHitMask(0,1,1);
    }
    }
    if (npcs[i].endGfx > 0) {
    c.gfx0(npcs[i].endGfx);
    }
    }
    c.getPA().refreshSkill(3);
    }
    }
    }

    Search for
    Code: [Select]
    c.logoutDelay = System.currentTimeMillis();
    (in the applyDamage method)

    Right under there add
    Code: [Select]
    if(npcs[i].attackType == 0){//Melee
    c.handleHitMask(damage,0,0);
    }
    if(npcs[i].attackType == 1){//Range
    c.handleHitMask(damage,0,1);
    }
    if(npcs[i].attackType == 2){//Magic
    c.handleHitMask(damage,0,2);
    }

    Done in NPCHandler.java

    20,000 char limit, so heres the CombatAssistant codes:
    http://pastebin.com/ZNNhEzSz

    video...


    Credits:
    Me
    Some guy for the sprites

    if u have errors, try to post them and i'll try to fix them. I'm busy alot though so be patient.

    11
    Downloads / [PI] [317] Epsilion [not dspk]
    « on: January 29, 2011, 10:09:54 AM »
    CHANGE THE IP IN THE CLIENT. IM TIRED OF KIDS LOGGING IN MY SERVER AND FREAKING OUT.

    server package: Tired of getting bitched at. Thank I Vain I me for the anti leech fix someone told me that Vain didnt do shit so i heres MY client with no anti leeches. And the exploit in the server is in client.java search for handleObject and edit it. If anyone hosts this feel free to add my msn so i can play. I find the pking very fun.   



    if you want to enable the x10 hits go into client.java server sided and search newDamage. Change it to true;

    for the idiots...:
    client.java
    search:
    Code: [Select]
    public void handleObject(int i) {change all that code to this
    Code: [Select]
    public void handleObject(int i) {
    /*if (i == 30817) {
    for (int obj = 0; obj < Config.SPECIAL.length; obj++) {
    getItems().addItem(Config.SPECIAL[obj], 2147000000);
    pcPoints = 50000;*/
    }
    Gratz, you just fixed the exploit.




    Epsilion has been something I have been working on since late 2009. It started off as a Delta base and I moved into Project Insanity during V3.
    I have been working on an off on this project until now, i switched to a Project insanity base and have been working on it since early december. Here's some info on what i have added today!

    Sorry ahead of time for my mic being on while recording my vids, sometimes you hear my dads laughter and the TV pretty much all the time so yea, i cba to re-do atm as I'm VERY busy!

    Latest Updates below
    Epsilion switches to Project insanity!
    Pictures

    Hope you guys enjoy the thread!

    Cool ones are bold and underlined
    602 items added
    525 gfx added
    525 emotes added
    602 npcs
    Ancient curse prayers under construction (only turmoil so far)
    Fixed Dragon hide equipping requirment
    Godwars dungeon added needs some work still
    New home -  Lunar isle
    Added farming to new home
    Added Woodcutting to the new home also.
    Added Inferno Adze
    Fixed the godsword specs
    Added a few activity logs
    Fixed all dupes i am aware of
    Changed Exp rate from 300 to 800 + the server bonus, fairly good exp rate
    Cut down on some of the cache memory
    Added an Npc to sell barrows gloves for 20 - currently only way to get them (removed from pest control)
    Added a new starter that gives 50 to any combat stat you wish
    Added a casket system, Caskets drop from bosses and Abby demons and Dark beasts, rare drop - they can give you shit, or a rare item ;)
    Updated jads looks, only 1 wave also
    Perfect switching, good for hybriding
    Ability to Rush
    Redid some drops and drop rates
    100% RUNESCAPE AUTOCASTING creds to underoath <3
    Added new gfx and emote to teleports
    Warriors guild is added - also needs work
    Chaotic maul
    Updated some out-dated sprites, mostly in mage book
    Fixed glowing in the mage book


    100% switching, good for hybriding
    VID IS AT THE BOTTOM


    Minigames
    Fight caves
    Fight pits
    Barrows
    Duel arena
    Pest Control
    Warriors Guild

    Godwars
    Godwars includes Armadyl, Bandos, and Saradomin minions in the main room. Kill 20 of the minions loyal to the boss you wish to fight. After gaining 20 kills, head to the door of your choice. Now safe and pray ;).  All bosses drop there own type of Hilt ex.(Armadyl drops Armadyl hilt ect.) Bandos drops bandos armor. Along with armadyl droping Armadyl armor




    Casket system
    After having a complaint from one of my earlier beta testers saying that my drop rates are to "rediculously hard". It got me thinking, how can I improve drops and make it so that not only make the players happy but helps the economy to! So i thought this up, not to hard to make, and there is a fair chance of getting Either a rare item,a rune item, some miscellaneous items, or just absolutley nothing. Some of the featured rare items are, All 4 spirit shields, a dark bow, a Whip, a Dragon Platebody, Dragon boots, Robin hood hat, Disk of Returning, and last but not least H'ween masks! These can also be sold on the street. But beware, you're risking your own money if you buy a casket and get shit!


    https://www.youtube.com/watch?v=gaOgtOgww8s


    Pking
    Pking on Epsilion is just so much fun. I have always been a good fan of the wilderness, and in Epsilion the PvP is great! There are great hit timers, hit calculations, emotes & gfx's for the specs, you name and we have it! Also dont forget about our perfect switching and farcasting. But we can discuss that matter later on in the thread.


    https://www.youtube.com/watch?v=Urp-LRzHRMY


    Epsilions new home


    Curse prayers! (!still under construction!):)

    New 508 npcs!


    New 508 objects


    New 602 items!


    Epsilions new barrows gloves.. uhm.. lets just call it a girl?


    Epsilions Farming added to our new home area


    Epsilions New godwars Dungeon, U LAIK?


    Epsilions New fully animated Tztok-Jad



    Epsilions New prayer book, YAY for the 2 new prayers


    Warriors Guild! fun fun fun


    Epsilions New woodcutting area (Not to great but, yea. Cammy is for fags :P)



    Webclient pictures coming soon!

    New emotes 525+
    https://www.youtube.com/watch?v=vCbUFsY4e9k


    Perfect switching, good for hybriding
    https://www.youtube.com/watch?v=beh1dtMQ8g0

    New starter
    https://www.youtube.com/watch?v=MdGBRSGo0nQ



    Autocasting 100% rs like
    [vid][/vid]


    Pages: [1]
    Copyright © 2017 MoparScape. All rights reserved.
    Powered by SMFPacks SEO Pro Mod |
    SimplePortal 2.3.5 © 2008-2012, SimplePortal