Guardian
Banned
- May 3, 2017
- 1,551
- 459
- 0

It is a fresh release among the released PI's in history. Believe me or not, this version of Project Insanity will help you create a server from scratch without requirements.
This package is perfect for beginner programmers as well as for advanced ones. RForge is an extremely stable design of files, classes and rules so you will not be disappointed with the performance of your individual configuration.
Enjoy

Well, why not?
Original Project Insanity has much things to offer. RForge has much more, they are well used from the predecessor and were developed it to final stage.
Check the features below.

- Amazing combat
- Fairly accurate accuracy formulas (tweaked a lot)
- Fully functional clan chat
- 3/4 godwar bosses
- Amazing npc drop system
- Fight Pits
- Pest Control
- Barrows
- Fight Caves (360 onwards, easy to add all ways, just build on the array)
- Quite a few skills (some half-assed)
- All 474 items (loaded through cache)
- Most pots work, very easy to add more
- Most food work, very east to add more
- 100% Potion dose mixing
- Base for skill menus
- Piety + chivalry
- Perfect prayer draining
- Custom infinity/mage book minigame
- Working obelisks
- Perfect prayer draining and protection prayer delay in pvp

- A lot of Dupe Fixed (ones released with Jacks source, there is like 3-4 more)
- Cycle-Based EventManager
- Boat Sailing
- Gnome Glider
- Crystal Chest
- Current Weapon Speeds
- Far Casting (Magic/Ranged)
- Cow Milking
- Flax Milking
- Mute/Banning + Timers
- Server-Sided Clipped Following
- ItemOnPlayer Packet Handling
- Single+ Double Door handler
- Greatly Improved Item Handler
- A Shit Load of Combat Improvements (Bug Wise)
- Current Weapon Speeds
- Correct Ranged Max-Hit Formulae
- Better Drop System (easier to add new drops)
- God Book Making + Preaching
- Fixed 15 Bugs
- Character Appearance Interface on Start-up (thought it was a decent edition
)
- Better Commands Handler
- 6 Player Rights (all configured)
- NPC Facing (Check NPC Spawn.cfg for more info)
- Removed all of the Pointless cfg files and renamed them better
- Cleaned-up All classes, Electronically and Manually
- Tweaked a lot of timers!
- Players Save on a individual basis (might want to re-add to config class)
- No Errors in eclipse
- Fixed as many Warnings as I could
- Re-Did packaging, classes can be found easily and it isn't a maze of BS now
- Home is in lumbridge



Make one yourself or try this one:
https://www.jetbrains.com/idea/

Each project has its drawbacks, which are noticeable only in the post-production.
However, I noticed that I have some time so I will help you now.
Spoiler for 0.03 fixes:
----------------------------------------
objectHandler:
under public boolean loadDoorConfig
find
and simply remove the return false
under loadGlobalObjects find
and remove the return false
----------------------------------------
ItemHandler:
under loadItemList
find
and remove return false
----------------------------------------
NpcHandler:
under loadAutoSpawn
find
and remove the return false
under loadNpcList
find
and remove the return false
----------------------------------------
ShopHandler
under loadShops
find
and remove the return false
----------------------------------------
Class I
under containsKey
find
and remove return
----------------------------------------
objectHandler:
under public boolean loadDoorConfig
find
Code:
try {
line = objectFile.readLine();
} catch(final IOException ioexception) {
Misc.println(fileName+": error loading file.");
return false;
}
and simply remove the return false
under loadGlobalObjects find
Code:
try {
line = objectFile.readLine();
} catch(final IOException ioexception) {
Misc.println(fileName+": error loading file.");
return false;
}
and remove the return false
----------------------------------------
ItemHandler:
under loadItemList
find
Code:
try {
line = characterfile.readLine();
} catch(final IOException ioexception) {
Misc.println(FileName+": error loading file.");
return false;
}
----------------------------------------
NpcHandler:
under loadAutoSpawn
find
Code:
try {
line = characterfile.readLine();
} catch(final IOException ioexception) {
Misc.println(FileName+": error loading file.");
return false;
}
under loadNpcList
find
Code:
try {
line = characterfile.readLine();
} catch(final IOException ioexception) {
Misc.println(FileName+": error loading file.");
return false;
}
----------------------------------------
ShopHandler
under loadShops
find
Code:
try {
line = characterfile.readLine();
} catch(final IOException ioexception) {
Misc.println(FileName+": error loading file.");
return false;
}
----------------------------------------
Class I
under containsKey
find
Code:
try {
s = bufferedreader.readLine();
} catch(final IOException ioexception){
ioexception.printStackTrace();
return;
}
----------------------------------------
Spoiler for 0.03 fixes 2:
----------------------------------------
PlayerHandler.java
Replace your updatePlayer method with this code
Then in player.java replace your withinDistance method (the player one) with this:
PlayerHandler.java
Replace your updatePlayer method with this code
Code:
public void updatePlayer(final Player plr, final Stream str) {
updateBlock.currentOffset = 0;
if (PlayerHandler.updateRunning && !PlayerHandler.updateAnnounced) {
str.createFrame(114);
str.writeWordBigEndian(PlayerHandler.updateSeconds * 50 / 30);
}
plr.updateThisPlayerMovement(str);
final boolean saveChatTextUpdate = plr.isChatTextUpdateRequired();
plr.setChatTextUpdateRequired(false);
plr.appendPlayerUpdateBlock(updateBlock);
plr.setChatTextUpdateRequired(saveChatTextUpdate);
str.writeBits(8, plr.playerListSize);
final int size = plr.playerListSize;
plr.playerListSize = 0;
for (int i = 0; i < size; i++) {
if (!plr.didTeleport && !plr.playerList[i].didTeleport
&& plr.withinDistance(plr.playerList[i])) {
plr.playerList[i].updatePlayerMovement(str);
plr.playerList[i].appendPlayerUpdateBlock(updateBlock);
plr.playerList[plr.playerListSize++] = plr.playerList[i];
} else {
final int id = plr.playerList[i].playerId;
plr.playerInListBitmap[id >> 3] &= ~(1 << (id & 7));
str.writeBits(1, 1);
str.writeBits(2, 3);
}
}
int j = 0;
for (int i = 0; i < Config.MAX_PLAYERS; i++) {
if (plr.playerListSize >= 254) {
break;
}
if (updateBlock.currentOffset + str.currentOffset >= 4900) {
break;
}
if (PlayerHandler.players[i] == null
|| !PlayerHandler.players[i].isActive
|| PlayerHandler.players[i] == plr) {
continue;
}
final int id = PlayerHandler.players[i].playerId;
if ((plr.playerInListBitmap[id >> 3] & 1 << (id & 7)) != 0) {
continue;
}
if (j >= 10) {
break;
}
if (!plr.withinDistance(PlayerHandler.players[i])) {
continue;
}
plr.addNewPlayer(PlayerHandler.players[i], str, updateBlock);
j++;
}
if (updateBlock.currentOffset > 0) {
str.writeBits(11, 2047);
str.finishBitAccess();
str.writeBytes(updateBlock.buffer, updateBlock.currentOffset, 0);
} else {
str.finishBitAccess();
}
str.endFrameVarSizeWord();
}
Then in player.java replace your withinDistance method (the player one) with this:
Code:
public boolean withinDistance(Player otherPlr) {
if(heightLevel != otherPlr.heightLevel) return false;
int deltaX = otherPlr.absX-absX, deltaY = otherPlr.absY-absY;
return deltaX <= 15 && deltaX >= -16 && deltaY <= 15 && deltaY >= -16;
}
Spoiler for 0.03 firstClickObject fix:
----------------------------------------
This fixes firstClickObject for the actionHandler class
Navigate to the ClickObject class
find:
and add this right under it:
This fixes firstClickObject for the actionHandler class
Navigate to the ClickObject class
find:
Code:
if (client.goodDistance(client.objectX + client.objectXOffset, client.objectY + client.objectYOffset, client.getX(), client.getY(), client.objectDistance)) {
Code:
client.getActions().firstClickObject(client.objectId, client.objectX, client.objectY);
Spoiler for 0.03 fixes combat/total:
----------------------------------------
Total level fix
Navigate to the PlayerAssistant class and under
public void setSkillLevel
this method ^, add this method:
Navigate to the Client class and in the
method, add this:
----------------------------------------
Combat level fix
Navigate to the Client class and add this method towards the very top but under:
add this
now add this:
in the
method.
Total level fix
Navigate to the PlayerAssistant class and under
public void setSkillLevel
this method ^, add this method:
Code:
public void totallevelsupdate() {
int totalLevel = (getLevelForXP(c.playerXP[0]) + getLevelForXP(c.playerXP[1]) + getLevelForXP(c.playerXP[2]) + getLevelForXP(c.playerXP[3]) + getLevelForXP(c.playerXP[4]) + getLevelForXP(c.playerXP[5]) + getLevelForXP(c.playerXP[6]) + getLevelForXP(c.playerXP[7]) + getLevelForXP(c.playerXP[8]) + getLevelForXP(c.playerXP[9]) + getLevelForXP(c.playerXP[10]) + getLevelForXP(c.playerXP[11]) + getLevelForXP(c.playerXP[12]) + getLevelForXP(c.playerXP[13]) + getLevelForXP(c.playerXP[14]) + getLevelForXP(c.playerXP[15]) + getLevelForXP(c.playerXP[16]) + getLevelForXP(c.playerXP[17]) + getLevelForXP(c.playerXP[18]) + getLevelForXP(c.playerXP[19]) + getLevelForXP(c.playerXP[20]));
sendFrame126("Levels: "+totalLevel, 13983);
}
Code:
public void initialize() {
Code:
getPA().totallevelsupdate();
Combat level fix
Navigate to the Client class and add this method towards the very top but under:
Code:
public client (blah blah blah crap blah) {
add this
Code:
public int getCombatLevel() {
int mag = (int) ((getLevelForXP(playerXP[6])) * 1.5);
int ran = (int) ((getLevelForXP(playerXP[4])) * 1.5);
int attstr = (int) ((double) (getLevelForXP(playerXP[0])) + (double) (getLevelForXP(playerXP[2])));
if (ran > attstr) {
combatLevel = (int) (((getLevelForXP(playerXP[1])) * 0.25)
+ ((getLevelForXP(playerXP[3])) * 0.25)
+ ((getLevelForXP(playerXP[5])) * 0.125) + ((getLevelForXP(playerXP[4])) * 0.4875));
} else if (mag > attstr) {
combatLevel = (int) (((getLevelForXP(playerXP[1])) * 0.25)
+ ((getLevelForXP(playerXP[3])) * 0.25)
+ ((getLevelForXP(playerXP[5])) * 0.125) + ((getLevelForXP(playerXP[6])) * 0.4875));
} else {
combatLevel = (int) (((getLevelForXP(playerXP[1])) * 0.25)
+ ((getLevelForXP(playerXP[3])) * 0.25)
+ ((getLevelForXP(playerXP[5])) * 0.125)
+ ((getLevelForXP(playerXP[0])) * 0.325) + ((getLevelForXP(playerXP[2])) * 0.325));
}
return combatLevel;
}
now add this:
Code:
getPA().sendFrame126("Combat Level: "+getCombatLevel(), 3983);
in the
Code:
public void initialize() {
Spoiler for 0.03 fixes chat:
----------------------------------------
Cannot see text in chat? Here we go:
Navigate to the Chat class and change this:
to this:
Cannot see text in chat? Here we go:
Navigate to the Chat class and change this:
Code:
if (System.currentTimeMillis() < c.muteEnd) {
c.sendMessage("You are muted, know one can hear you.");
return;
} else {
c.muteEnd = 0;
}
}
}
to this:
Code:
if (System.currentTimeMillis() < c.muteEnd) {
c.sendMessage("You are muted, know one can hear you.");
return;
} else {
c.setChatTextUpdateRequired(true);
c.muteEnd = 0;
}
}
}
Spoiler for 0.03 fix idle logout packet:
----------------------------------------
IDLE LOG-OUT FIX
IDLE LOG-OUT FIX
Code:
package engine.packet;
import game.*;
/*
* RForge - Instanced PI @Caelum
* IdleLogout.java
*/
public class IdleLogout implements PacketType {
@Override
public void processPacket(final Client c, final int packetType, final int packetSize) {
if (Config.IDLE_LOGOUT == true) {
switch (packetType) {
case 202:
if ((c.underAttackBy > 0) || (c.underAttackBy2 > 0)) {
return;
} else {
c.logout();
}
break;
}
}
}
}
Spoiler for 0.03 run fix:
----------------------------------------
Run fix
This is the protectionist fix for running when you first log-in (should be walking?)
Player classchange this:
to this:
Run fix
This is the protectionist fix for running when you first log-in (should be walking?)
Player classchange this:
Code:
public boolean isRunning2 = true;
to this:
Code:
public boolean isRunning2 = false;
Spoiler for 0.03 itemreplace fix:
----------------------------------------
ItemReplace Fix
Under
Find and Remove
ItemReplace Fix
Under
Code:
public void handleCharacter(final File f) {
Find and Remove
Code:
s = new Scanner(f);


RForge0.03a-RELEASE.zip (19,3MB)
Code:
https://github.com/uxuii/rfreleases/raw/master/RForge0.03a-RELEASE.zip
y not? pi is the best base out there m8!
-
pics for those that are interested lol:
![]()
![]()