shockys
July 10th, 2010, 20:50
IM STILL ADDING MORE.
Since more and more people are starting to use PI there isn't much PI tuts to help.
I'll be covering most dupes, useful commands, glitches, and bugs.
If theres anything I've missed, feel free to post it and i'll think about adding it in.:)
---------------------------------DUPES---------------------------------
I.trade/bank/duel X dupes
In tradeandduel class -
public boolean tradeItem(int itemID, int fromSlot, int amount) {
Client o = (Client) Server.playerHandler.players[c.tradeWith];
if(o == null) {
return false;
}
for (int i : Config.ITEM_TRADEABLE) {
if(i == itemID) {
c.sendMessage("You can't trade this item.");
return false;
}
}
c.tradeConfirmed = false;
o.tradeConfirmed = false;
if(!Item.itemStackable[itemID] && !Item.itemIsNote[itemID]) {
for(int a = 0; a < amount; a++) {
if(c.getItems().playerHasItem(itemID, 1)) {
offeredItems.add(new GameItem(itemID, 1));
c.getItems().deleteItem(itemID, c.getItems().getItemSlot(itemID), 1);
o.getPA().sendFrame126("Trading with: " + c.playerName+" who has @gre@"+c.getItems().freeSlots()+" free slots" ,3417);
}
}
o.getPA().sendFrame126("Trading with: " + c.playerName+" who has @gre@"+c.getItems().freeSlots()+" free slots" ,3417);
c.getItems().resetItems(3322);
resetTItems(3415);
o.getTradeAndDuel().resetOTItems(3416);
c.getPA().sendFrame126("", 3431);
o.getPA().sendFrame126("", 3431);
}
if (c.getItems().getItemCount(itemID) < amount) {
amount = c.getItems().getItemCount(itemID);
if (amount == 0)
return false;
}
if (!c.inTrade || !c.canOffer) {
declineTrade();
return false;
}
if(Item.itemStackable[itemID] || Item.itemIsNote[itemID]) {
boolean inTrade = false;
for(GameItem item : offeredItems) {
if(item.id == itemID) {
inTrade = true;
item.amount += amount;
c.getItems().deleteItem(itemID, c.getItems().getItemSlot(itemID), amount);
o.getPA().sendFrame126("Trading with: " + c.playerName+" who has @gre@"+c.getItems().freeSlots()+" free slots" ,3417);
break;
}
}
if(!inTrade) {
offeredItems.add(new GameItem(itemID, amount));
c.getItems().deleteItem(itemID, fromSlot, amount);
o.getPA().sendFrame126("Trading with: " + c.playerName+" who has @gre@"+c.getItems().freeSlots()+" free slots" ,3417);
}
}
o.getPA().sendFrame126("Trading with: " + c.playerName+" who has @gre@"+c.getItems().freeSlots()+" free slots" ,3417);
c.getItems().resetItems(3322);
resetTItems(3415);
o.getTradeAndDuel().resetOTItems(3416);
c.getPA().sendFrame126("", 3431);
o.getPA().sendFrame126("", 3431);
return true;
}
II. Fake item dropping
in packets folder
DropItem.java
add:
if(c.playerItemsN[slot] != 0 && itemId != -1 && c.playerItems[slot] == itemId + 1) {
if(!c.getItems().playerHasItem(itemId,1,slot)) {
//c.sendMessage("Stop cheating!");
return;
}
---------------------------------FIXED\BUGS---------------------------------
I. Fixing ::update rollback
In playersaving.java
private static final int SAVE_TIMER = ####;
#### = 25000 (It was 500000 before, I changed to 25000 and now it works great)
In Server.java
Search for
if (System.currentTimeMillis() - lastMassSave >
Replace with
if (System.currentTimeMillis() - lastMassSave > 25000) {
II. Fixing doors
In ObjectHandler.Java find
public static final int MAX_DOORS = 30;
change 30 to like 100. or something... so like:
public static final int MAX_DOORS = 100;
III. SplitChat PrivateMessaging FIX
go to packets folder and replace PrivateMessaging.java with this:
package server.model.players.packets;
import server.Config;
import server.Server;
import server.Connection;
import server.model.players.Client;
import server.model.players.PacketType;
import server.model.players.PlayerHandler;
import server.util.Misc;
/**
* Private messaging, friends etc
**/
public class PrivateMessaging implements PacketType {
public final int ADD_FRIEND = 188, SEND_PM = 126, REMOVE_FRIEND = 215, CHANGE_PM_STATUS = 95, REMOVE_IGNORE = 59, ADD_IGNORE = 133;
@Override
public void processPacket(Client c, int packetType, int packetSize) {
switch(packetType) {
case ADD_FRIEND:
c.friendUpdate = true;
long friendToAdd = c.getInStream().readQWord();
boolean canAdd = true;
for (int i1 = 0; i1 < c.friends.length; i1++) {
if (c.friends[i1] != 0 && c.friends[i1] == friendToAdd) {
canAdd = false;
c.sendMessage(friendToAdd + " is already on your friends list.");
}
}
if (canAdd == true) {
for (int i1 = 0; i1 < c.friends.length; i1++) {
if (c.friends[i1] == 0) {
c.friends[i1] = friendToAdd;
for (int i2 = 1; i2 < Config.MAX_PLAYERS; i2++) {
if (Server.playerHandler.players[i2] != null && Server.playerHandler.players[i2].isActive && Misc.playerNameToInt64(Server.playerHandler.player s[i2].playerName)== friendToAdd) {
Client o = (Client)Server.playerHandler.players[i2];
if(o != null) {
if (Server.playerHandler.players[i2].privateChat == 0 || (Server.playerHandler.players[i2].privateChat == 1 && o.getPA().isInPM(Misc.playerNameToInt64(c.playerNa me)))) {
c.getPA().loadPM(friendToAdd, 1);
break;
}
}
}
}
break;
}
}
}
break;
case SEND_PM:
long sendMessageToFriendId = c.getInStream().readQWord();
byte pmchatText[] = new byte[100];
int pmchatTextSize = (byte) (packetSize - 8);
c.getInStream().readBytes(pmchatText, pmchatTextSize, 0);
if(Connection.isMuted(c)) {
return;
}
long myName = Misc.playerNameToInt64(c.playerName);
for (long element : c.friends) {
if (element == sendMessageToFriendId) {
boolean pmSent = false;
for (int i2 = 1; i2 < Config.MAX_PLAYERS; i2++) {
if (PlayerHandler.players[i2] != null && PlayerHandler.players[i2].isActive && (Misc.playerNameToInt64(PlayerHandler.players[i2].playerName)== sendMessageToFriendId)) {
Client o = (Client)PlayerHandler.players[i2];
if(o != null) {
if (c.playerRights >= 2 || PlayerHandler.players[i2].privateChat == 0 || (PlayerHandler.players[i2].privateChat == 1 && o.getPA().isInPM(myName))) {
o.getPA().sendPM(myName, c.playerRights, pmchatText, pmchatTextSize);
pmSent = true;
}
}
break;
}
}
if (!pmSent) {
c.sendMessage("That player is currently offline.");
break;
}
}
}
break;
case REMOVE_FRIEND:
c.friendUpdate = true;
long friendToRemove = c.getInStream().readQWord();
for (int i1 = 0; i1 < c.friends.length; i1++) {
if (c.friends[i1] == friendToRemove) {
for (int i2 = 1; i2 < Config.MAX_PLAYERS; i2++) {
Client o = (Client)Server.playerHandler.players[i2];
if(o != null) {
if(c.friends[i1] == Misc.playerNameToInt64(Server.playerHandler.player s[i2].playerName)){
o.getPA().updatePM(c.playerId, 0);
break;
}
}
}
c.friends[i1] = 0;
break;
}
}
break;
case REMOVE_IGNORE:
int ii = c.getInStream().readDWord();
int i2i = c.getInStream().readDWord();
int i3i = c.getInStream().readDWord();
//for other status changing
c.getPA().handleStatus(ii,i2i,i3i);
c.friendUpdate = true;
long ignore = c.getInStream().readQWord();
for(int i = 0; i < c.ignores.length; i++) {
if(c.ignores[i] == ignore) {
c.ignores[i] = 0;
break;
}
}
break;
case CHANGE_PM_STATUS:
int tradeAndCompete = c.getInStream().readUnsignedByte();
c.privateChat = c.getInStream().readUnsignedByte();
int publicChat = c.getInStream().readUnsignedByte();
for (int i1 = 1; i1 < Config.MAX_PLAYERS; i1++) {
if (Server.playerHandler.players[i1] != null && Server.playerHandler.players[i1].isActive == true) {
Client o = (Client)Server.playerHandler.players[i1];
if(o != null) {
o.getPA().updatePM(c.playerId, 1);
}
}
}
break;
case ADD_IGNORE:
int a = c.getInStream().readDWord();
int a2 = c.getInStream().readDWord();
int j3 = 18;
//for other status changing
c.getPA().handleStatus(a,a2,j3);
c.friendUpdate = true;
long ignoreAdd = c.getInStream().readQWord();
for(int i = 0; i < c.ignores.length; i++) {
if(c.ignores[i] == 0) {
c.ignores[i] = ignoreAdd;
break;
}
}
break;
}
}
}
in player.java declare:
public long ignores[] = new long[200];
IV. Duel Bug Fix
Go to client class, now find
public void destruct()
Client o = (Client) Server.playerHandler.players[duelingWith];
if(inDuelArena() && o.disconnected == true) {
getTradeAndDuel().duelVictory();
}
---------------------------------INTERFACES---------------------------------
I. Pest Control interfaces
Only the registered members can see the link.
Only the registered members can see the link.
Pestcontrol.java
public void setInterface() {
for (int j = 0; j < Server.playerHandler.players.length; j++) {
if (Server.playerHandler.players[j] != null) {
if (Server.playerHandler.players[j].inPcBoat()) {
Client c = (Client)Server.playerHandler.players[j];
c.getPA().sendFrame126("Next Departure: "+waitTimer+"", 21120);
c.getPA().sendFrame126("Players Ready: "+playersInBoat()+"", 21121);
c.getPA().sendFrame126("(Need 3 to 25 players)", 21122);
c.getPA().sendFrame126("Points: "+c.pcPoints+"", 21123);
}
if (Server.playerHandler.players[j].inPcGame()) {
Client c = (Client)Server.playerHandler.players[j];
for (j = 0; j < Server.npcHandler.npcs.length; j++) {
if (Server.npcHandler.npcs[j] != null) {
if (Server.npcHandler.npcs[j].npcType == 3777)
c.getPA().sendFrame126("" + Server.npcHandler.npcs[j].HP + "", 21111);
if (Server.npcHandler.npcs[j].npcType == 3778)
c.getPA().sendFrame126("" + Server.npcHandler.npcs[j].HP + "", 21112);
if (Server.npcHandler.npcs[j].npcType == 3779)
c.getPA().sendFrame126("" + Server.npcHandler.npcs[j].HP + "", 21113);
if (Server.npcHandler.npcs[j].npcType == 3780)
c.getPA().sendFrame126("" + Server.npcHandler.npcs[j].HP + "", 21113);
}
}
c.getPA().sendFrame126("0", 21115);
c.getPA().sendFrame126("0", 21116);
}
}
}
}
In the process() add setInterface(); at the top...
Now got to Client.java find getPA().showOption(3, 0, "Attack", 1);
under it add
} else if(inPcBoat()) {
getPA().walkableInterface(21119);
} else if(inPcGame()) {
getPA().walkableInterface(21100);
}
II. Skill Guides
Only the registered members can see the link.
SkillGuides class:
package server.model.players.content;
import server.model.players.*;
/**
* Skill Guides class. Handles the ingame skill menus.
* @author Fire cape
*/
public class SkillGuides {
public static void sendSkillInterface(Client client, int id[]) {
client.getOutStream().createFrameVarSizeWord(53);
client.getOutStream().writeWord(8847);
client.getOutStream().writeWord(id.length);
for (int i = 0; i < id.length; i++) {
client.getOutStream().writeByte(1);
if(id[i] > 0) {
client.getOutStream().writeWordBigEndianA(id[i]+1);
} else {
client.getOutStream().writeWordBigEndianA(0);
}
}
client.getOutStream().endFrameVarSizeWord();
client.flushOutStream();
}
private static int item[] = new int[31];
public static void skillsInterface(Client client, String skill,
int item1ItemId, int item1lvl, String item1lvldef,
int item2ItemId, int item2lvl, String item2lvldef,
int item3ItemId, int item3lvl, String item3lvldef,
int item4ItemId, int item4lvl, String item4lvldef,
int item5ItemId, int item5lvl, String item5lvldef,
int item6ItemId, int item6lvl, String item6lvldef,
int item7ItemId, int item7lvl, String item7lvldef,
int item8ItemId, int item8lvl, String item8lvldef) {
client.getPA().sendFrame126("@dre@"+skill, 8716);
for(int i = 0;i<31;i++) {
item[i] = 0;
}
item[0] = item1ItemId;
item[1] = item2ItemId;
item[2] = item3ItemId;
item[3] = item4ItemId;
item[4] = item5ItemId;
item[5] = item6ItemId;
item[6] = item7ItemId;
item[7] = item8ItemId;
if(item1lvl > 0)
client.getPA().sendFrame126(""+item1lvl,8720);
client.getPA().sendFrame126(""+item1lvldef,8760);
if(item2lvl > 0)
client.getPA().sendFrame126(""+item2lvl,8721);
client.getPA().sendFrame126(""+item2lvldef, 8761);
if(item3lvl > 0)
client.getPA().sendFrame126(""+item3lvl,8722);
client.getPA().sendFrame126(""+item3lvldef,8762);
if(item4lvl > 0)
client.getPA().sendFrame126(""+item4lvl,8723);
client.getPA().sendFrame126(""+item4lvldef, 8763);
if(item5lvl > 0)
client.getPA().sendFrame126(""+item5lvl,8724);
client.getPA().sendFrame126(""+item5lvldef, 8764);
if(item6lvl > 0)
client.getPA().sendFrame126(""+item6lvl,8725);
client.getPA().sendFrame126(""+item6lvldef,8765);
if(item7lvl > 0)
client.getPA().sendFrame126(""+item7lvl,8726);
client.getPA().sendFrame126(""+item7lvldef, 8766);
if(item8lvl > 0)
client.getPA().sendFrame126(""+item8lvl,8727);
client.getPA().sendFrame126(""+item8lvldef, 8767);
client.getPA().sendFrame126("",8849);
client.getPA().sendFrame126("Attack",8846);
client.getPA().sendFrame126("Strength",8823);
client.getPA().sendFrame126("Defence",8824);
client.getPA().sendFrame126("Hitpoints",8827);
client.getPA().sendFrame126("Ranged",8837);
client.getPA().sendFrame126("Magic",8840);
client.getPA().sendFrame126("Prayer",8843);
client.getPA().sendFrame126("RuneCraf",8859);
client.getPA().sendFrame126("Agility",8862);
client.getPA().sendFrame126("Herblore",8865);
client.getPA().sendFrame126("Thieving",15303);
client.getPA().sendFrame126("Crafting",15306);
client.getPA().sendFrame126("Slayer",15309);
sendSkillInterface(client, item);
client.getPA().showInterface(8714);
}
public static void atkInterface(Client client) {
skillsInterface(client, "Attack",
1291, 1, "Bronze",
1293, 1, "Iron",
1295, 5, "Steel",
1297, 10, "Black",
1299, 20, "Mithril",
1301, 30, "Adamant",
1303, 40, "Rune",
1305, 60, "Dragon");
}
public static void strInterface(Client client) {
skillsInterface(client, "Strength",
3196, 5, "Black halberd",
3198, 10, "Mithril halberd",
3200, 15, "Adamant halberd",
3202, 20, "Rune halberd",
3204, 30, "Dragon halberd",
4153, 50, "Granite maul",
6528, 60, "Tzhaar-Ket-Om",
4718, 70, "Dharok's greataxe");
}
public static void defInterface(Client client) {
skillsInterface(client, "Defence",
1139, 1, "Bronze",
1137, 1, "Iron",
1141, 5, "Steel",
1151, 10, "Black",
1143, 20, "Mithril",
1145, 30, "Adamant",
1147, 40, "Rune",
1149, 60, "Dragon");
}
public static void rangeInterface(Client client) {
skillsInterface(client, "Ranged",
1129, 1, "Plain Leather",
1131, 1, "Hard leather",
1133, 20, "Studded leather",
1135, 40, "Green d'hide leather",
2499, 50, "Blue d'hide leather",
2501, 60, "Red d'hide leather",
2503, 70, "Black d'hide leather",
4736, 70, "Karils");
}
public static void prayInterface(Client client) {
skillsInterface(client, "Prayer",
526, 1, "Bones",
532, 1, "Big bones",
534, 1, "Baby dragon bones",
536, 1, "Dragon bones",
6729, 1, "Dagannoth bones",
4812, 1, "Zogre bones",
4830, 1, "Fayrg bones",
4832, 1, "Raurg bones");
}
public static void hpInterface(Client client) {
skillsInterface(client, "Hitpoints",
0, 0, "",
0, 0, "",
0, 0, "",
0, 0, "",
0, 0, "",
0, 0, "",
0, 0, "",
0, 0, "");
}
public static void mageInterface(Client client) {
skillsInterface(client, "Magic",
579, 1, "Wizard",
4089, 40, "Mystic",
7400, 40, "Enchant",
3385, 40, "Splitbark",
6918, 50, "Infinity",
2412, 60, "God capes and staffs",
6914, 70, "Mage's book and Master Wand",
4708, 70, "Ahrims");
}
public static void rcInterface(Client client) {
skillsInterface(client, "Runecrafting",
6422, 1, "Air runes",
6436, 2, "Mind runes",
6438, 20, "Body runes",
6430, 35, "Chaos runes",
561, 44, "Nature runes",
6434, 54, "Law runes",
6432, 65, "Death runes",
565, 77, "Blood runes");
}
public static void agilityInterface(Client client) {
skillsInterface(client, "Agility",
2150, 1, "Gnome stronghold agility course",
2996, 1, "Low-level agility arena",
2996, 20, "Medium-level agility arena",
2996, 40, "High-level agility arena",
1365, 35, "Barberian outpost agility course",
4024, 48, "Ape attol agility course",
964, 52, "Wilderness agility course",
4170, 60, "Werewolf agility course");
}
public static void herbloreInterface(Client client) {
skillsInterface(client, "Agility",
221, 3, "Attack Potion",
235, 5, "Anti-poison Potion",
225, 12, "Strength Potion",
223, 22, "Restore Potion",
1975, 22, "Energy Potion",
239, 30, "Defence Potion",
1526, 38, "Prayer Potion",
221, 45, "Super Attack Potion");
}
public static void thievingInterface(Client client) {
skillsInterface(client, "Thieving",
3241, 1, "Man",
3243, 10, "Farmer",
3245, 25, "Warrior",
3249, 40, "Guard",
3251, 53, "Knights of ardogne",
3255, 70, "Paladin",
3257, 75, "Gnome",
3259, 80, "Hero");
}
public static void craftingInterface(Client client) {
skillsInterface(client, "Crafting",
1059, 1, "Leather",
1777, 10, "Flax into bow string",
1097, 20, "Hard leather",
1065, 57, "Green dragonhide leather",
2487, 66, "Blue dragonhide leather",
2489, 73, "Red dragonhide leather",
2491, 79, "Black dragonhide leather",
6585, 90, "Onyx amulet");
}
public static void slayerInterface(Client client) {
skillsInterface(client, "Slayer",
4133, 1, "Crawling hand",
4134, 10, "Cave crawler",
4140, 45, "Infernal Mage",
4144, 60, "Aberrant Spectre",
4145, 65, "Dust devil",
4147, 75, "Gargoyle",
4148, 80, "Nechryael",
4149, 85, "Abyssal demon");
}
public static void fletchingInterface(Client client) {
skillsInterface(client, "Fletching",
50, 5, "Normal bows",
54, 20, "Oak bows",
60, 35, "Willow bows",
64, 50, "Maple bows",
68, 65, "Yew bows",
892, 75, "Rune arrow",
72, 80, "Magic shortbow",
70, 85, "Magic longbow");
}
public static void miningInterface(Client client) {
skillsInterface(client, "Mining",
436, 1, "Tin & Cooper",
440, 15, "Iron",
442, 30, "Silver",
453, 30, "Coal",
444, 40, "Gold",
447, 55, "Mithril",
449, 70, "Adamant",
451, 85, "Rune");
}
public static void smithingInterface(Client client) {
skillsInterface(client, "Smithing",
2349, 1, "Bronze",
2351, 15, "Iron",
2355, 20, "Silver",
2353, 30, "Steel",
2357, 40, "Gold",
2359, 50, "Mithril",
2361, 70, "Adamant",
2363, 85, "Rune");
}
public static void fishingInterface(Client client) {
skillsInterface(client, "Fishing",
317, 1, "Shrimps",
335, 20, "Trouts",
359, 35, "Tunas",
377, 40, "Lobsters",
371, 50, "Swordfishes",
383, 76, "Sharks",
395, 79, "Sea Turtles",
389, 81, "Manta rays");
}
public static void cookingInterface(Client client) {
skillsInterface(client, "Cooking",
315, 1, "Shrimps",
333, 20, "Trouts",
361, 30, "Tunas",
379, 40, "Lobsters",
373, 50, "Swordfishes",
385, 76, "Sharks",
397, 79, "Sea Turtles",
391, 81, "Manta rays");
}
public static void woodcuttingInterface(Client client) {
skillsInterface(client, "Woodcutting",
1511, 1, "Normal tree",
1521, 15, "Oak tree",
1519, 30, "Willow tree",
6333, 35, "Teak tree",
1517, 45, "Maple tree",
6332, 50, "Mahogany tree",
1515, 60, "Yews tree",
6739, 61, "Dragon axe");
}
public static void firemakingInterface(Client client) {
skillsInterface(client, "Firemaking",
1511, 1, "Tree logs",
1521, 15, "Oak logs",
1519, 30, "Willow logs",
6333, 35, "Teak logs",
1517, 45, "Maple logs",
4544, 49, "Bullseye lantern",
6332, 50, "Mahogany logs",
1515, 60, "Yew logs");
}
public static void farmingInterface(Client client) {
skillsInterface(client, "Farming",
5291, 1, "Guam seed",
5292, 15, "Marrentill seed",
5293, 20, "Tarromin seed",
5295, 30, "Ranarr seed",
5298, 40, "Avanote seed",
5300, 60, "Snapdragon seed",
5302, 72, "Lantadyme seed",
5304, 90, "Torsol seed");
}
}
In clickingbuttons.java:
case 33206:// Attack button
case 34142:
SkillGuides.atkInterface(c);
break;
case 33209:// str button
case 34119:
SkillGuides.strInterface(c);
break;
case 33212: //Defence
case 34120:
SkillGuides.defInterface(c);
break;
case 34133:
case 33215: //Range
SkillGuides.rangeInterface(c);
break;
case 34123:
case 33207: //Hitpoints
//SkillGuides.hpInterface(c);
break;
case 34139:
case 33218: //Prayer
SkillGuides.prayInterface(c);
break;
case 34136:
case 33221: //Magic
SkillGuides.mageInterface(c);
break;
case 34155:
case 33224: //Runecrafting
SkillGuides.rcInterface(c);
break;
case 34158:
case 33210: //Agility
SkillGuides.agilityInterface(c);
break;
case 34161:
case 33213: //Herblore
SkillGuides.herbloreInterface(c);
break;
case 59199:
case 33216: //Theiving
SkillGuides.thievingInterface(c);
break;
case 59202:
case 33219: //craft
SkillGuides.craftingInterface(c);
break;
case 33222: //Fletching
SkillGuides.fletchingInterface(c);
break;
case 59205:
case 47130: //Slayer
SkillGuides.slayerInterface(c);
break;
case 33208: //Mining
SkillGuides.miningInterface(c);
break;
case 33211: //Smithing
SkillGuides.smithingInterface(c);
break;
case 33214: //Fishing
SkillGuides.fishingInterface(c);
break;
case 33217: //Cooking
SkillGuides.cookingInterface(c);
break;
case 33220: //Firemaking
SkillGuides.firemakingInterface(c);
break;
case 33223: //Woodcutting
SkillGuides.woodcuttingInterface(c);
break;
case 54104: //Farming
SkillGuides.farmingInterface(c);
break;
At the top of clickingbuttons with all of your other imports.
Add:
import server.model.players.content.*;
III. Lunar interface
RSInterface.java
Find
interfaceCache = new RSInterface[j + 10000];
Make It
interfaceCache = new RSInterface[j + 30000];
Interface itself
public static void configureLunar(TextDrawingArea[] TDA){
homeTeleport();
drawRune(30003,1, "Fire");
drawRune(30004,2, "Water");
drawRune(30005,3, "Air");
drawRune(30006,4, "Earth");
drawRune(30007,5, "Mind");
drawRune(30008,6, "Body");
drawRune(30009,7, "Death");
drawRune(30010,8, "Nature");
drawRune(30011,9, "Chaos");
drawRune(30012,10, "Law");
drawRune(30013,11, "Cosmic");
drawRune(30014,12, "Blood");
drawRune(30015,13, "Soul");
drawRune(30016,14, "Astral");
addLunar3RunesSmallBox(30017, 553, 554, 555, 0, 4, 3, 30003, 30004, 64, "Bake Pie","Bake pies without a stove",TDA,0, 16,2);
addLunar2RunesSmallBox(30025, 553, 557, 0, 7, 30006, 65,"Cure Plant", "Cure disease on farming patch",TDA,1, 4,2);
addLunar3RunesBigBox(30032, 553, 564, 558, 0,0, 0, 30013, 30007, 65,"Monster Examine", "Detect the combat statistics of a\\nmonster",TDA, 2,2,2);
addLunar3RunesSmallBox(30040, 553, 564, 556, 0, 0, 1, 30013, 30005, 66, "NPC Contact","Speak with varied NPCs",TDA,3,0,2);
addLunar3RunesSmallBox(30048, 553, 563, 557, 0, 0, 9, 30012, 30006, 67, "Cure Other","Cure poisoned players",TDA,4,8,2);
addLunar3RunesSmallBox(30056, 553, 555, 554, 0, 2, 0, 30004, 30003, 67, "Humidify","fills certain vessels with water",TDA,5,0,5);
addLunar3RunesSmallBox(30064, 553, 563, 557, 1, 0, 1, 30012, 30006, 68, "Town Teleport","Teleports you to Various Towns",TDA,6,0,5);
addLunar3RunesBigBox(30075, 553, 563, 557, 1, 0, 3, 30012, 30006, 69,"Mini Teleports 1", "Teleport to various Mini's.",TDA, 7,0,5);
addLunar3RunesSmallBox(30083, 553, 563, 557, 1, 0, 5, 30012, 30006, 70, "RuneCrafting Teleport","Teleports You To Runecrafting Spots",TDA,8,0,5);
addLunar3RunesSmallBox(30091, 553, 564, 563, 1, 1, 0, 30013, 30012, 70, "Cure Me","Cures Poison",TDA,9,0,5);
addLunar2RunesSmallBox(30099, 553, 557, 1, 1, 30006, 70,"Hunter Kit", "Get a kit of hunting gear",TDA,10,0,5);
addLunar3RunesSmallBox(30106, 553, 563, 555, 1, 0,0, 30012, 30004, 71,"Monster Teleport 1", "Teleport to various Monster's.",TDA,11,0,5);
addLunar3RunesBigBox(30114, 553, 563, 555, 1, 0, 4, 30012, 30004, 72,"Monster Teleport 2", "Teleport to various Monster's.",TDA, 12,0,5);
addLunar3RunesSmallBox(30122, 553, 564, 563, 1, 1, 1, 30013, 30012, 73, "Cure Group","Cures Poison on players",TDA,13,0,5);
addLunar3RunesBigBox(30130, 553, 564, 559, 1, 1, 4, 30013, 30008, 74,"Stat Spy", "Cast on another player to see their\\nskill levels",TDA, 14,8,2);
addLunar3RunesBigBox(30138, 553, 563, 554, 1, 1, 2, 30012, 30003, 74,"Wilderness Teleport", "Teleport to various Wildy spots.",TDA, 15,0,5);
addLunar3RunesBigBox(30146, 553, 563, 554, 1, 1, 5, 30012, 30003, 75,"Tele Group Barbarian", "Teleports players to the Barbarian\\noutpost",TDA, 16,0,5);
addLunar3RunesSmallBox(30154, 553, 554, 556, 1, 5, 9, 30003, 30005, 76, "Superglass Make","Make glass without a furnace",TDA,17, 16,2);
addLunar3RunesSmallBox(30162, 553, 563, 555, 1, 1, 3, 30012, 30004, 77, "Khazard Teleport","Teleports you to Port khazard",TDA,18,0,5);
addLunar3RunesSmallBox(30170, 553, 563, 555, 1, 1, 7, 30012, 30004, 78, "Tele Group Khazard","Teleports players to Port khazard",TDA,19,0,5);
addLunar3RunesBigBox(30178, 553, 564, 559, 1, 0, 4, 30013, 30008, 78,"Dream", "Take a rest and restore hitpoints 3\\n times faster",TDA, 20,0,5);
addLunar3RunesSmallBox(30186, 553, 557, 555, 1, 9, 4, 30006, 30004, 79, "String Jewellery","String amulets without wool",TDA,21,0,5);
addLunar3RunesLargeBox(30194, 553, 557, 555, 1, 9, 9, 30006, 30004, 80,"Stat Restore Pot\\nShare", "Share a potion with up to 4 nearby\\nplayers",TDA, 22,0,5);
addLunar3RunesSmallBox(30202, 553, 554, 555, 1, 6, 6, 30003, 30004, 81, "Magic Imbue","Combine runes without a talisman",TDA,23,0,5);
addLunar3RunesBigBox(30210, 553, 561, 557, 2, 1, 14, 30010, 30006, 82,"Fertile Soil", "Fertilise a farming patch with super\\ncompost",TDA, 24, 4,2);
addLunar3RunesBigBox(30218, 553, 557, 555, 2, 11, 9, 30006, 30004, 83,"Boost Potion Share", "Shares a potion with up to 4 nearby\\nplayers",TDA, 25, 0,5);
addLunar3RunesSmallBox(30226, 553, 563, 555, 2, 2, 9, 30012, 30004, 84, "Fishing Guild Teleport","Teleports you to the fishing guild",TDA,26,0,5);
addLunar3RunesLargeBox(30234, 553, 563, 555, 1, 2, 13, 30012, 30004, 85, "Tele Group Fishing\\nGuild", "Teleports players to the Fishing\\nGuild",TDA, 27,0,5);
addLunar3RunesSmallBox(30242, 553, 557, 561, 2, 14, 0, 30006, 30010, 85, "Plank Make","Turn Logs into planks",TDA,28,16,5);
addLunar3RunesSmallBox(30250, 553, 563, 555, 2, 2, 9, 30012, 30004, 86, "Catherby Teleport","Teleports you to Catherby",TDA,29,0,5);//END
addLunar3RunesSmallBox(30258, 553, 563, 555, 2, 2, 14, 30012, 30004, 87, "Tele Group Catherby","Teleports players to Catherby",TDA,30,0,5);
addLunar3RunesSmallBox(30266, 553, 563, 555, 2, 2, 7, 30012, 30004, 88, "Ice Plateau Teleport","Teleports you to Ice Plateau",TDA,31,0,5);
addLunar3RunesBigBox(30274, 553, 563, 555, 2, 2, 15, 30012, 30004, 89, "Tele Group Ice\\n Plateau","Teleports players to Ice Plateau",TDA,32,0,5);
addLunar3RunesBigBox(30282, 553, 563, 561, 2, 1, 0, 30012, 30010, 90, "Energy Transfer","Spend hitpoints and SA Energy to\\n give another player hitpoints and run energy",TDA,33,8,2);
addLunar3RunesBigBox(30290, 553, 563, 565, 2, 2, 0, 30012, 30014, 91, "Heal Other","Transfer up to 75% of hitpoints\\n to another player",TDA,34,8,2);
addLunar3RunesBigBox(30298, 553, 560, 557, 2, 1, 9, 30009, 30006, 92, "Vengeance Other","Allows another player to rebound\\ndamage to an opponent",TDA,35,8,2);
addLunar3RunesSmallBox(30306, 553, 560, 557, 3, 1, 9,30009, 30006, 93, "Vengeance","Rebound damage to an opponent",TDA,36,0,5);
addLunar3RunesBigBox(30314, 553, 565, 563, 3, 2, 5, 30014, 30012, 94, "Heal Group","Transfer up to 75% of hitpoints to a group",TDA,37,0,5);
addLunar3RunesBigBox(30322, 553, 564, 563, 2, 1, 0, 30013, 30012, 95, "Spellbook Swap","Change to another spellbook for 1\\nspell cast",TDA,38,0,5);
}
public static void constructLunar(){
RSInterface Interface = addInterface(29999);
setChildren(71, Interface);
setBounds(30000, 11, 10, 0, Interface);
setBounds(30017, 40, 9, 1, Interface);
setBounds(30025, 71, 12, 2, Interface);
setBounds(30032, 103, 10, 3, Interface);
setBounds(30040, 135, 12, 4, Interface);
setBounds(30048, 165, 10, 5, Interface);
setBounds(30056, 8, 38, 6, Interface);
setBounds(30064, 39, 39, 7, Interface);
setBounds(30075, 71, 39, 8, Interface);
setBounds(30083, 103, 39, 9, Interface);
setBounds(30091, 135, 39, 10, Interface);
setBounds(30099, 165, 37, 11, Interface);
setBounds(30106, 12, 68, 12, Interface);
setBounds(30114, 42, 68, 13, Interface);
setBounds(30122, 71, 68, 14, Interface);
setBounds(30130, 103, 68, 15, Interface);
setBounds(30138, 135, 68, 16, Interface);
setBounds(30146, 165, 68, 17, Interface);
setBounds(30154, 14, 97, 18, Interface);
setBounds(30162, 42, 97, 19, Interface);
setBounds(30170, 71, 97, 20, Interface);
setBounds(30178, 101, 97, 21, Interface);
setBounds(30186, 135, 98, 22, Interface);
setBounds(30194, 168, 98, 23, Interface);
setBounds(30202, 11, 125, 24, Interface);
setBounds(30210, 42, 124, 25, Interface);
setBounds(30218, 74, 125, 26, Interface);
setBounds(30226, 103, 125, 27, Interface);
setBounds(30234, 135, 125, 28, Interface);
setBounds(30242, 164, 126, 29, Interface);
setBounds(30250, 10, 155, 30, Interface);
setBounds(30258, 42, 155, 31, Interface);
setBounds(30266, 71, 155, 32, Interface);
setBounds(30274, 103, 155, 33, Interface);
setBounds(30282, 136, 155, 34, Interface);
setBounds(30290, 165, 155, 35, Interface);
setBounds(30298, 13, 185, 36, Interface);
setBounds(30306, 42, 185, 37, Interface);
setBounds(30314, 71, 184, 38, Interface);
setBounds(30322, 104, 184, 39, Interface);
setBounds(30001, 6, 184, 40, Interface);//hover
setBounds(30018, 5, 176, 41, Interface);//hover
setBounds(30026, 5, 176, 42, Interface);//hover
setBounds(30033, 5, 163, 43, Interface);//hover
setBounds(30041, 5, 176, 44, Interface);//hover
setBounds(30049, 5, 176, 45, Interface);//hover
setBounds(30057, 5, 176, 46, Interface);//hover
setBounds(30065, 5, 176, 47, Interface);//hover
setBounds(30076, 5, 163, 48, Interface);//hover
setBounds(30084, 5, 176, 49, Interface);//hover
setBounds(30092, 5, 176, 50, Interface);//hover
setBounds(30100, 5, 176, 51, Interface);//hover
setBounds(30107, 5, 176, 52, Interface);//hover
setBounds(30115, 5, 163, 53, Interface);//hover
setBounds(30123, 5, 176, 54, Interface);//hover
setBounds(30131, 5, 163, 55, Interface);//hover
setBounds(30139, 5, 163, 56, Interface);//hover
setBounds(30147, 5, 163, 57, Interface);//hover
setBounds(30155, 5, 176, 58, Interface);//hover
setBounds(30163, 5, 176, 59, Interface);//hover
setBounds(30171, 5, 176, 60, Interface);//hover
setBounds(30179, 5, 163, 61, Interface);//hover
setBounds(30187, 5, 176, 62, Interface);//hover
setBounds(30195, 5, 149, 63, Interface);//hover
setBounds(30203, 5, 176, 64, Interface);//hover
setBounds(30211, 5, 163, 65, Interface);//hover
setBounds(30219, 5, 163, 66, Interface);//hover
setBounds(30227, 5, 176, 67, Interface);//hover
setBounds(30235, 5, 149, 68, Interface);//hover
setBounds(30243, 5, 176, 69, Interface);//hover
setBounds(30251, 5, 176, 70, Interface);//hover
}
Methods Needed
private static Sprite LoadSprite(int i, String s) {
long l = (TextClass.method585(s) << 8) + (long) i;
Sprite sprite = (Sprite) aMRUNodes_238.insertFromCache(l);
if (sprite != null) {
return sprite;
}
try {
sprite = new Sprite("./Sprites/"+s+" "+i+".PNG");
aMRUNodes_238.removeFromCache(sprite, l);
} catch (Exception exception) {
System.out.println(exception);
return null;
}
return sprite;
}
public static void addLunarSprite(int i, int j, String name) {
RSInterface RSInterface = addInterface(i);
RSInterface.id = i;
RSInterface.parentID = i;
RSInterface.type = 5;
RSInterface.atActionType = 0;
RSInterface.drawsTransparent = true;
RSInterface.transAmount = 230;
RSInterface.contentType = 0;
RSInterface.aByte254 = 0;
RSInterface.mOverInterToTrigger = 52;
RSInterface.sprite1 = imageLoader(j, name);
RSInterface.width = 500;
RSInterface.height = 500;
RSInterface.tooltip = "";
}
public static void drawRune(int i,int id, String runeName) {
RSInterface RSInterface = addInterface(i);
RSInterface.type = 5;
RSInterface.atActionType = 0;
RSInterface.contentType = 0;
RSInterface.aByte254 = 0;
RSInterface.mOverInterToTrigger = 52;
RSInterface.sprite1 = imageLoader(id, "Lunar/RUNE");
RSInterface.width = 500;
RSInterface.height = 500;
}
public static void addRuneText(int ID, int runeAmount, int RuneID, TextDrawingArea[] font){
RSInterface rsInterface = addInterface(ID);
rsInterface.id = ID;
rsInterface.parentID = 1151;
rsInterface.type = 4;
rsInterface.atActionType = 0;
rsInterface.contentType = 0;
rsInterface.width = 0;
rsInterface.height = 14;
rsInterface.aByte254 = 0;
rsInterface.mOverInterToTrigger= -1;
rsInterface.anIntArray245 = new int[1];
rsInterface.anIntArray212 = new int[1];
rsInterface.anIntArray245[0] = 3;
rsInterface.anIntArray212[0] = runeAmount;
rsInterface.valueIndexArray = new int[1][4];
rsInterface.valueIndexArray[0][0] = 4;
rsInterface.valueIndexArray[0][1] = 3214;
rsInterface.valueIndexArray[0][2] = RuneID;
rsInterface.valueIndexArray[0][3] = 0;
rsInterface.centerText = true;
rsInterface.textDrawingAreas = font[0];
rsInterface.textShadow = true;
rsInterface.message = "%1/"+runeAmount+"";
rsInterface.aString228 = "";
rsInterface.textColor = 12582912;
rsInterface.anInt219 = 49152;
}
public static void homeTeleport(){
RSInterface RSInterface = addInterface(30000);
RSInterface.tooltip = "Cast @gre@Lunar Home Teleport";
RSInterface.id = 30000;
RSInterface.parentID = 30000;
RSInterface.type = 5;
RSInterface.atActionType = 5;
RSInterface.contentType = 0;
RSInterface.aByte254 = 0;
RSInterface.mOverInterToTrigger = 30001;
RSInterface.sprite1 = imageLoader(1, "Lunar/SPRITE");
RSInterface.width = 20;
RSInterface.height = 20;
RSInterface Int = addInterface(30001);
Int.isMouseoverTriggered = true;
setChildren(1, Int);
addLunarSprite(30002, 0, "SPRITE");
setBounds(30002, 0, 0,0, Int);
}
public static void addLunar2RunesSmallBox(int ID, int r1, int r2, int ra1, int ra2,int rune1, int lvl,String name, String descr,TextDrawingArea[] TDA,int sid,int suo,int type){
RSInterface rsInterface = addInterface(ID);
rsInterface.id = ID;
rsInterface.parentID = 1151;
rsInterface.type = 5;
rsInterface.atActionType = type;
rsInterface.contentType = 0;
rsInterface.mOverInterToTrigger = ID+1;
rsInterface.spellUsableOn = suo;
rsInterface.selectedActionName = "Cast On";
rsInterface.width = 20;
rsInterface.height = 20;
rsInterface.tooltip = "Cast @gre@"+name;
rsInterface.spellName = name;
rsInterface.anIntArray245 = new int[3];
rsInterface.anIntArray212 = new int[3];
rsInterface.anIntArray245[0] = 3;
rsInterface.anIntArray212[0] = ra1;
rsInterface.anIntArray245[1] = 3;
rsInterface.anIntArray212[1] = ra2;
rsInterface.anIntArray245[2] = 3;
rsInterface.anIntArray212[2] = lvl;
rsInterface.valueIndexArray = new int[3][];
rsInterface.valueIndexArray[0] = new int[4];
rsInterface.valueIndexArray[0][0] = 4;
rsInterface.valueIndexArray[0][1] = 3214;
rsInterface.valueIndexArray[0][2] = r1;
rsInterface.valueIndexArray[0][3] = 0;
rsInterface.valueIndexArray[1] = new int[4];
rsInterface.valueIndexArray[1][0] = 4;
rsInterface.valueIndexArray[1][1] = 3214;
rsInterface.valueIndexArray[1][2] = r2;
rsInterface.valueIndexArray[1][3] = 0;
rsInterface.valueIndexArray[2] = new int[3];
rsInterface.valueIndexArray[2][0] = 1;
rsInterface.valueIndexArray[2][1] = 6;
rsInterface.valueIndexArray[2][2] = 0;
rsInterface.sprite2 = imageLoader(sid, "Lunar/LUNARON");
rsInterface.sprite1 = imageLoader(sid, "Lunar/LUNAROFF");
RSInterface INT = addInterface(ID+1);
INT.isMouseoverTriggered = true;
setChildren(7, INT);
addLunarSprite(ID+2, 0, "Lunar/BOX");
setBounds(ID+2, 0, 0, 0, INT);
addText(ID+3, "Level "+(lvl+1)+": "+name, 0xFF981F, true, true, 52, TDA, 1);
setBounds(ID+3, 90, 4, 1, INT);
addText(ID+4, descr, 0xAF6A1A, true, true, 52, TDA, 0);
setBounds(ID+4, 90, 19, 2, INT);
setBounds(30016, 37, 35, 3, INT);//Rune
setBounds(rune1, 112, 35, 4, INT);//Rune
addRuneText(ID+5, ra1+1, r1, TDA);
setBounds(ID+5, 50, 66, 5, INT);
addRuneText(ID+6, ra2+1, r2, TDA);
setBounds(ID+6, 123, 66, 6, INT);
}
public static void addLunar3RunesSmallBox(int ID, int r1, int r2, int r3, int ra1, int ra2, int ra3,int rune1, int rune2, int lvl,String name, String descr,TextDrawingArea[] TDA, int sid,int suo,int type){
RSInterface rsInterface = addInterface(ID);
rsInterface.id = ID;
rsInterface.parentID = 1151;
rsInterface.type = 5;
rsInterface.atActionType = type;
rsInterface.contentType = 0;
rsInterface.mOverInterToTrigger = ID+1;
rsInterface.spellUsableOn = suo;
rsInterface.selectedActionName = "Cast on";
rsInterface.width = 20;
rsInterface.height = 20;
rsInterface.tooltip = "Cast @gre@"+name;
rsInterface.spellName = name;
rsInterface.anIntArray245 = new int[4];
rsInterface.anIntArray212 = new int[4];
rsInterface.anIntArray245[0] = 3;
rsInterface.anIntArray212[0] = ra1;
rsInterface.anIntArray245[1] = 3;
rsInterface.anIntArray212[1] = ra2;
rsInterface.anIntArray245[2] = 3;
rsInterface.anIntArray212[2] = ra3;
rsInterface.anIntArray245[3] = 3;
rsInterface.anIntArray212[3] = lvl;
rsInterface.valueIndexArray = new int[4][];
rsInterface.valueIndexArray[0] = new int[4];
rsInterface.valueIndexArray[0][0] = 4;
rsInterface.valueIndexArray[0][1] = 3214;
rsInterface.valueIndexArray[0][2] = r1;
rsInterface.valueIndexArray[0][3] = 0;
rsInterface.valueIndexArray[1] = new int[4];
rsInterface.valueIndexArray[1][0] = 4;
rsInterface.valueIndexArray[1][1] = 3214;
rsInterface.valueIndexArray[1][2] = r2;
rsInterface.valueIndexArray[1][3] = 0;
rsInterface.valueIndexArray[2] = new int[4];
rsInterface.valueIndexArray[2][0] = 4;
rsInterface.valueIndexArray[2][1] = 3214;
rsInterface.valueIndexArray[2][2] = r3;
rsInterface.valueIndexArray[2][3] = 0;
rsInterface.valueIndexArray[3] = new int[3];
rsInterface.valueIndexArray[3][0] = 1;
rsInterface.valueIndexArray[3][1] = 6;
rsInterface.valueIndexArray[3][2] = 0;
rsInterface.sprite2 = imageLoader(sid, "Lunar/LUNARON");
rsInterface.sprite1 = imageLoader(sid, "Lunar/LUNAROFF");
RSInterface INT = addInterface(ID+1);
INT.isMouseoverTriggered = true;
setChildren(9, INT);
addLunarSprite(ID+2, 0, "Lunar/BOX");
setBounds(ID+2, 0, 0, 0, INT);
addText(ID+3, "Level "+(lvl+1)+": "+name, 0xFF981F, true, true, 52, TDA, 1);setBounds(ID+3, 90, 4, 1, INT);
addText(ID+4, descr, 0xAF6A1A, true, true, 52, TDA, 0); setBounds(ID+4, 90, 19, 2, INT);
setBounds(30016, 14, 35, 3, INT);
setBounds(rune1, 74, 35, 4, INT);
setBounds(rune2, 130, 35, 5, INT);
addRuneText(ID+5, ra1+1, r1, TDA);
setBounds(ID+5, 26, 66, 6, INT);
addRuneText(ID+6, ra2+1, r2, TDA);
setBounds(ID+6, 87, 66, 7, INT);
addRuneText(ID+7, ra3+1, r3, TDA);
setBounds(ID+7, 142, 66, 8, INT);
}
public static void addLunar3RunesBigBox(int ID, int r1, int r2, int r3, int ra1, int ra2, int ra3,int rune1, int rune2, int lvl,String name, String descr,TextDrawingArea[] TDA, int sid,int suo,int type){
RSInterface rsInterface = addInterface(ID);
rsInterface.id = ID;
rsInterface.parentID = 1151;
rsInterface.type = 5;
rsInterface.atActionType = type;
rsInterface.contentType = 0;
rsInterface.mOverInterToTrigger = ID+1;
rsInterface.spellUsableOn = suo;
rsInterface.selectedActionName = "Cast on";
rsInterface.width = 20;
rsInterface.height = 20;
rsInterface.tooltip = "Cast @gre@"+name;
rsInterface.spellName = name;
rsInterface.anIntArray245 = new int[4];
rsInterface.anIntArray212 = new int[4];
rsInterface.anIntArray245[0] = 3;
rsInterface.anIntArray212[0] = ra1;
rsInterface.anIntArray245[1] = 3;
rsInterface.anIntArray212[1] = ra2;
rsInterface.anIntArray245[2] = 3;
rsInterface.anIntArray212[2] = ra3;
rsInterface.anIntArray245[3] = 3;
rsInterface.anIntArray212[3] = lvl;
rsInterface.valueIndexArray = new int[4][];
rsInterface.valueIndexArray[0] = new int[4];
rsInterface.valueIndexArray[0][0] = 4;
rsInterface.valueIndexArray[0][1] = 3214;
rsInterface.valueIndexArray[0][2] = r1;
rsInterface.valueIndexArray[0][3] = 0;
rsInterface.valueIndexArray[1] = new int[4];
rsInterface.valueIndexArray[1][0] = 4;
rsInterface.valueIndexArray[1][1] = 3214;
rsInterface.valueIndexArray[1][2] = r2;
rsInterface.valueIndexArray[1][3] = 0;
rsInterface.valueIndexArray[2] = new int[4];
rsInterface.valueIndexArray[2][0] = 4;
rsInterface.valueIndexArray[2][1] = 3214;
rsInterface.valueIndexArray[2][2] = r3;
rsInterface.valueIndexArray[2][3] = 0;
rsInterface.valueIndexArray[3] = new int[3];
rsInterface.valueIndexArray[3][0] = 1;
rsInterface.valueIndexArray[3][1] = 6;
rsInterface.valueIndexArray[3][2] = 0;
rsInterface.sprite2 = imageLoader(sid, "Lunar/LUNARON");
rsInterface.sprite1 = imageLoader(sid, "Lunar/LUNAROFF");
RSInterface INT = addInterface(ID+1);
INT.isMouseoverTriggered = true;
setChildren(9, INT);
addLunarSprite(ID+2, 1, "Lunar/BOX");
setBounds(ID+2, 0, 0, 0, INT);
addText(ID+3, "Level "+(lvl+1)+": "+name, 0xFF981F, true, true, 52, TDA, 1);setBounds(ID+3, 90, 4, 1, INT);
addText(ID+4, descr, 0xAF6A1A, true, true, 52, TDA, 0); setBounds(ID+4, 90, 21, 2, INT);
setBounds(30016, 14, 48, 3, INT);
setBounds(rune1, 74, 48, 4, INT);
setBounds(rune2, 130, 48, 5, INT);
addRuneText(ID+5, ra1+1, r1, TDA);
setBounds(ID+5, 26, 79, 6, INT);
addRuneText(ID+6, ra2+1, r2, TDA);
setBounds(ID+6, 87, 79, 7, INT);
addRuneText(ID+7, ra3+1, r3, TDA);
setBounds(ID+7, 142, 79, 8, INT);
}
public static void addLunar3RunesLargeBox(int ID, int r1, int r2, int r3, int ra1, int ra2, int ra3,int rune1, int rune2, int lvl,String name, String descr,TextDrawingArea[] TDA, int sid,int suo,int type){
RSInterface rsInterface = addInterface(ID);
rsInterface.id = ID;
rsInterface.parentID = 1151;
rsInterface.type = 5;
rsInterface.atActionType = type;
rsInterface.contentType = 0;
rsInterface.mOverInterToTrigger = ID+1;
rsInterface.spellUsableOn = suo;
rsInterface.selectedActionName = "Cast on";
rsInterface.width = 20;
rsInterface.height = 20;
rsInterface.tooltip = "Cast @gre@"+name;
rsInterface.spellName = name;
rsInterface.anIntArray245 = new int[4];
rsInterface.anIntArray212 = new int[4];
rsInterface.anIntArray245[0] = 3;
rsInterface.anIntArray212[0] = ra1;
rsInterface.anIntArray245[1] = 3;
rsInterface.anIntArray212[1] = ra2;
rsInterface.anIntArray245[2] = 3;
rsInterface.anIntArray212[2] = ra3;
rsInterface.anIntArray245[3] = 3;
rsInterface.anIntArray212[3] = lvl;
rsInterface.valueIndexArray = new int[4][];
rsInterface.valueIndexArray[0] = new int[4];
rsInterface.valueIndexArray[0][0] = 4;
rsInterface.valueIndexArray[0][1] = 3214;
rsInterface.valueIndexArray[0][2] = r1;
rsInterface.valueIndexArray[0][3] = 0;
rsInterface.valueIndexArray[1] = new int[4];
rsInterface.valueIndexArray[1][0] = 4;
rsInterface.valueIndexArray[1][1] = 3214;
rsInterface.valueIndexArray[1][2] = r2;
rsInterface.valueIndexArray[1][3] = 0;
rsInterface.valueIndexArray[2] = new int[4];
rsInterface.valueIndexArray[2][0] = 4;
rsInterface.valueIndexArray[2][1] = 3214;
rsInterface.valueIndexArray[2][2] = r3;
rsInterface.valueIndexArray[2][3] = 0;
rsInterface.valueIndexArray[3] = new int[3];
rsInterface.valueIndexArray[3][0] = 1;
rsInterface.valueIndexArray[3][1] = 6;
rsInterface.valueIndexArray[3][2] = 0;
rsInterface.sprite2 = imageLoader(sid, "Lunar/LUNARON");
rsInterface.sprite1 = imageLoader(sid, "Lunar/LUNAROFF");
RSInterface INT = addInterface(ID+1);
INT.isMouseoverTriggered = true;
setChildren(9, INT);
addLunarSprite(ID+2, 2, "Lunar/BOX");
setBounds(ID+2, 0, 0, 0, INT);
addText(ID+3, "Level "+(lvl+1)+": "+name, 0xFF981F, true, true, 52, TDA, 1);
setBounds(ID+3, 90, 4, 1, INT);
addText(ID+4, descr, 0xAF6A1A, true, true, 52, TDA, 0);
setBounds(ID+4, 90, 34, 2, INT);
setBounds(30016, 14, 61, 3, INT);
setBounds(rune1, 74, 61, 4, INT);
setBounds(rune2, 130, 61, 5, INT);
addRuneText(ID+5, ra1+1, r1, TDA);
setBounds(ID+5, 26, 92, 6, INT);
addRuneText(ID+6, ra2+1, r2, TDA);
setBounds(ID+6, 87, 92, 7, INT);
addRuneText(ID+7, ra3+1, r3, TDA);
setBounds(ID+7, 142, 92, 8, INT);
}
public static void setBounds(int ID, int X, int Y, int frame, RSInterface RSinterface){
RSinterface.children[frame] = ID;
RSinterface.childX[frame] = X;
RSinterface.childY[frame] = Y;
}
public static void addText(int i, String s,int k, boolean l, boolean m, int a,TextDrawingArea[] TDA, int j) {
RSInterface rsinterface = addInterface(i);
rsinterface.parentID = i;
rsinterface.id = i;
rsinterface.type = 4;
rsinterface.atActionType = 0;
rsinterface.width = 0;
rsinterface.height = 0;
rsinterface.contentType = 0;
rsinterface.aByte254 = 0;
rsinterface.mOverInterToTrigger = a;
rsinterface.centerText = l;
rsinterface.textShadow = m;
rsinterface.textDrawingAreas = TDA[j];
rsinterface.message = s;
rsinterface.aString228 = "";
rsinterface.textColor = k;
}
public static void setChildren(int total,RSInterface i){
i.children = new int[total];
i.childX = new int[total];
i.childY = new int[total];
}
public static RSInterface addInterface(int id)
{
RSInterface rsi = interfaceCache[id] = new RSInterface();
rsi.id = id;
rsi.parentID = id;
rsi.width = 512;
rsi.height = 334;
return rsi;
}
Above OR Below
aClass44 = streamLoader;
Add
configureLunar(textDrawingAreas);
constructLunar();
Declare this
public int transAmount;
Lastly, in the sprites folder, make a folder called "Lunar" & place all the sprites in that folder. Should work perfectly fine.
Only the registered members can see the link.
---------------------------------COMMANDS---------------------------------
I. Working yell system
if (playerCommand.startsWith("yell")) {
String rank = "";
String Message = playerCommand.substring(4).toLowerCase();
if (c.playerRights >= 0) {
rank = "[Player] "+ c.playerName +":";
if (c.playerRights >= 1) {
rank = "@gre@[Mod] "+ c.playerName +":";
}
if (c.playerRights >= 2) {
rank = "@blu@[Admin] "+ c.playerName +":";
}
if (c.playerRights >= 3) {
rank = "@red@[Owner] "+ c.playerName +" : ";
}
for (int j = 0; j < Server.playerHandler.players.length; j++) {
if (Server.playerHandler.players[j] != null) {
Client c2 = (Client)Server.playerHandler.players[j];
c2.sendMessage(rank+Message);
}
}
}
II. Npc spawning command
if(playerCommand.startsWith("spawn")) {
try {
String[] arg = playerCommand.split(" ");
//Server.npcHandler.spawnNpc(c, newNPC, c.absX, c.absY, c.heightLevel, 0, 120, 7, 70, 70, false, false);
if (arg.length > 4) {
c.addNPC(Integer.parseInt(arg[1]), Integer.parseInt(arg[2]), Integer.parseInt(arg[3]), Integer.parseInt(arg[4])) ;
c.sendMessage("DONE!");
}
c.sendMessage("You spawn a Npc.");
} catch(Exception e) {
}
}
VOID (add in client class)
public void addNPC(int npcType, int maxHit, int attack, int defence) {
//x y height walk maxhit attack defence desc
//Server.npcHandler.spawnNpc(c, npcType, absX, absY, heightLevel, 1, 120, 7, 70, 70, false, false);
try {
BufferedWriter out = new BufferedWriter(new FileWriter("./Data/Spawn.txt", true));
try {
out.newLine();
out.write("spawn = "+npcType+" "+absX+" "+absY+" "+heightLevel+" 1 "+maxHit+" "+attack+" "+defence+" "+Server.npcHandler.getNpcListName(npcType)+".");
} finally {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
Make sure to import these in client class
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;
and you have to create Spawn.txt in your
C:\Documents and Settings\James\Desktop\Sydney\317\317 Server\Data
directory...
The command works like this:
:spawn NPCID NPCMAXHIT NPCATTACK NPCDEFENCE
Example
:spawn 1 6 5 2
How it comes out...
// Spawn NPCID X Y Height Walk Max Atk Def Desc.
spawn = 1 2849 2963 0 1 6 5 2 Man.
III. ::Pnpc Command
players.java
declare
public int npcId2 = 0;
public boolean isNpc;
now find...
protected void appendPlayerAppearance(Stream str) {
replace all of that with this
protected void appendPlayerAppearance(Stream str) {
synchronized(this) {
playerProps.currentOffset = 0;
playerProps.writeByte(playerAppearance[0]);
playerProps.writeByte(headIcon);
playerProps.writeByte(headIconPk);
//playerProps.writeByte(headIconHints);
//playerProps.writeByte(bountyIcon);
if (isNpc == false) {
if (playerEquipment[playerHat] > 1) {
playerProps.writeWord(0x200 + playerEquipment[playerHat]);
} else {
playerProps.writeByte(0);
}
if (playerEquipment[playerCape] > 1) {
playerProps.writeWord(0x200 + playerEquipment[playerCape]);
} else {
playerProps.writeByte(0);
}
if (playerEquipment[playerAmulet] > 1) {
playerProps.writeWord(0x200 + playerEquipment[playerAmulet]);
} else {
playerProps.writeByte(0);
}
if (playerEquipment[playerWeapon] > 1) {
playerProps.writeWord(0x200 + playerEquipment[playerWeapon]);
} else {
playerProps.writeByte(0);
}
if (playerEquipment[playerChest] > 1) {
playerProps.writeWord(0x200 + playerEquipment[playerChest]);
} else {
playerProps.writeWord(0x100+playerAppearance[2]);
}
if (playerEquipment[playerShield] > 1) {
playerProps.writeWord(0x200 + playerEquipment[playerShield]);
} else {
playerProps.writeByte(0);
}
if (!Item.isFullBody(playerEquipment[playerChest])) {
playerProps.writeWord(0x100+playerAppearance[3]);
} else {
playerProps.writeByte(0);
}
if (playerEquipment[playerLegs] > 1) {
playerProps.writeWord(0x200 + playerEquipment[playerLegs]);
} else {
playerProps.writeWord(0x100+playerAppearance[5]);
}
if (!Item.isFullHelm(playerEquipment[playerHat]) && !Item.isFullMask(playerEquipment[playerHat])) {
playerProps.writeWord(0x100 + playerAppearance[1]);
} else {
playerProps.writeByte(0);
}
if (playerEquipment[playerHands] > 1) {
playerProps.writeWord(0x200 + playerEquipment[playerHands]);
} else {
playerProps.writeWord(0x100+playerAppearance[4]);
}
if (playerEquipment[playerFeet] > 1) {
playerProps.writeWord(0x200 + playerEquipment[playerFeet]);
} else {
playerProps.writeWord(0x100+playerAppearance[6]);
}
if (playerAppearance[0] != 1 && !Item.isFullMask(playerEquipment[playerHat])) {
playerProps.writeWord(0x100 + playerAppearance[7]);
} else {
playerProps.writeByte(0);
}
} else {
playerProps.writeWord(-1);
playerProps.writeWord(npcId2);
}
playerProps.writeByte(playerAppearance[8]);
playerProps.writeByte(playerAppearance[9]);
playerProps.writeByte(playerAppearance[10]);
playerProps.writeByte(playerAppearance[11]);
playerProps.writeByte(playerAppearance[12]);
playerProps.writeWord(playerStandIndex); // standAnimIndex
playerProps.writeWord(playerTurnIndex); // standTurnAnimIndex
playerProps.writeWord(playerWalkIndex); // walkAnimIndex
playerProps.writeWord(playerTurn180Index); // turn180AnimIndex
playerProps.writeWord(playerTurn90CWIndex); // turn90CWAnimIndex
playerProps.writeWord(playerTurn90CCWIndex); // turn90CCWAnimIndex
playerProps.writeWord(playerRunIndex); // runAnimIndex
playerProps.writeQWord(Misc.playerNameToInt64(play erName));
int combatLevel = ((Client) this).getCombatLevel();
playerProps.writeByte(combatLevel); // combat level
playerProps.writeWord(0);
str.writeByteC(playerProps.currentOffset);
str.writeBytes(playerProps.buffer, playerProps.currentOffset, 0);
}
}
now in commands.java
add this under whichever playerRights you wanna be able to use it at
if(playerCommand.startsWith("pnpc")) {
int npc = Integer.parseInt(playerCommand.substring(5));
if(npc < 9999){
c.npcId2 = npc;
c.isNpc = true;
c.updateRequired = true;
c.appearanceUpdateRequired = true;
}
}
if(playerCommand.startsWith("unpc")) {
c.isNpc = false;
c.updateRequired = true;
c.appearanceUpdateRequired = true;
}
IV. Master, Tank, Pure
if (playerCommand.equalsIgnoreCase("tank")) {
c.getPA().addSkillXP(0, 0);
c.getPA().addSkillXP(1210422, 1);
c.getPA().addSkillXP(0, 2);
c.getPA().addSkillXP(14000000, 3);
c.getPA().addSkillXP(14000000, 4);
c.getPA().addSkillXP(136594, 5);
c.getPA().addSkillXP(14000000, 6);
}
if (playerCommand.equalsIgnoreCase("zerk")) {
c.getPA().addSkillXP(14000000, 0);
c.getPA().addSkillXP(65000, 1);
c.getPA().addSkillXP(14000000, 2);
c.getPA().addSkillXP(14000000, 3);
c.getPA().addSkillXP(14000000, 4);
c.getPA().addSkillXP(136594, 5);
c.getPA().addSkillXP(14000000, 6);
}
if (playerCommand.equalsIgnoreCase("pure")) {
c.getPA().addSkillXP(14000000, 0);
c.getPA().addSkillXP(0, 1);
c.getPA().addSkillXP(14000000, 2);
c.getPA().addSkillXP(14000000, 3);
c.getPA().addSkillXP(14000000, 4);
c.getPA().addSkillXP(136594, 5);
c.getPA().addSkillXP(14000000, 6);
}
if (playerCommand.equalsIgnoreCase("master")) {
for(int i = 0; i < 21; i++) {
c.getPA().addSkillXP(14000000, i);
}
}
if (playerCommand.equalsIgnoreCase("resetattack")) {
if(c.playerXP[0] > 20000) {
c.sendMessage("Sorry, You can't have anymore then 20k Attack exp to reset it");
return;}
c.playerXP[0]=0;
c.getPA().refreshSkill(0);
for (int j = 0; j < c.playerEquipment.length; j++) {
if (c.playerEquipment[j] > 0) {
c.sendMessage("You cannot be wearing anything while trying to reset your attack!");
return;
}
}
if (playerCommand.equalsIgnoreCase("resetdefence")) {
if(c.playerXP[1] > 20000) {
c.sendMessage("Sorry, You can't have anymore then 20k Defence exp to reset it");
return;}
c.playerXP[1]=0;
c.getPA().refreshSkill(1);
for (int j = 0; j < c.playerEquipment.length; j++) {
if (c.playerEquipment[j] > 0) {
c.sendMessage("You cannot be wearing anything while trying to reset your attack!");
return;
}
}
if (playerCommand.startsWith("setlevel")) {
String[] args = playerCommand.split(" ");
int skill = Integer.parseInt(args[1]);
int level = Integer.parseInt(args[2]);
if (c.inWild())
return;
for (int j = 0; j < c.playerEquipment.length; j++) {
if (c.playerEquipment[j] > 0) {
c.sendMessage("You may not wear items while using this command.");
return;
}
}
if (skill == 3 && level < 10) {
c.sendMessage("You cannot have a HitPoints level under 10.");
return;
}
if (skill < 0 || skill > 6) {
c.sendMessage("You cannot level this stat.");
return;
}
if (level < 1 || level > 99) {
c.sendMessage("Invalid level.");
return;
}
try {
c.playerXP[skill] = c.getPA().getXPForLevel(level)+5;
c.playerLevel[skill] = c.getPA().getLevelForXP(c.playerXP[skill]);
c.getPA().refreshSkill(skill);
c.sendMessage("You succesfuly change your Skill Level.");
} catch (Exception e){}
}
---------------------------------OTHER---------------------------------
I.Humidify
add this in Playerassistant.java
public void humidify() {
if(c.playerLevel[6] < 68) {
c.sendMessage("You need a magic level of 68 to cast this spell.");
return;
}
if (c.getItems().playerHasItem(229,1)) {
if (c.getItems().playerHasItem(555,3) && c.getItems().playerHasItem(9075,1) && c.getItems().playerHasItem(554,1)) {
c.startAnimation(722);
c.gfx100(1061);
addSkillXP(c.MAGIC_SPELLS[51][7] * Config.MAGIC_EXP_RATE, 6);
refreshSkill(6);
c.getItems().deleteItem(557,c.getItems().getItemSl ot(557),10);
c.getItems().deleteItem(560,c.getItems().getItemSl ot(560),2);
c.getItems().deleteItem(9075,c.getItems().getItemS lot(9075),4);
} else {
c.sendMessage("You do not have the required runes to cast this spell.");
}
} else {
c.sendMessage("You dont have anything to fill.");
}
int vialAmountFilled = 0;
int bucketAmountFilled = 0;
int jugAmountFilled = 0;
boolean filledJugs = false;
boolean filledVials = false;
boolean filledBuckets = false;
boolean messageGiven = false;
for (int i = 0; i < 28; i++) {
if (c.getItems().playerHasItem(229,1)) {
filledVials = true;
c.getItems().deleteItem(229,c.getItems().getItemSl ot(229),1);
c.getItems().addItem(227, 1);
vialAmountFilled += 1;
}
if (c.getItems().playerHasItem(1925,1)) {
filledBuckets = true;
c.getItems().deleteItem(1925,c.getItems().getItemS lot(1925),1);
c.getItems().addItem(1929, 1);
bucketAmountFilled += 1;
}
if (c.getItems().playerHasItem(1935,1)) {
filledJugs = true;
c.getItems().deleteItem(1935,c.getItems().getItemS lot(1935),1);
c.getItems().addItem(1937, 1);
jugAmountFilled += 1;
}
}
if (filledVials)
c.sendMessage("You filled "+vialAmountFilled+" vials with water.");
if (filledBuckets)
c.sendMessage("You filled "+bucketAmountFilled+" buckets of water.");
if (filledJugs)
c.sendMessage("You filled "+jugAmountFilled+" jugs of water.");
}
add this in ClickingButtons.java
case 117104:
c.getPA().humidify();
II. Veng
first go to scr.server.models.player.packets.clicking item.
find
if (itemId == 952) {
and right above that add
Without mage level requirements
if (itemId == 6950){
if (System.currentTimeMillis() - c.lastVeng > 30000) {
if (c.getItems().playerHasItem(557,10) && c.getItems().playerHasItem(9075,4) && c.getItems().playerHasItem(560,2)) {
c.vengOn = true;
c.lastVeng = System.currentTimeMillis();
c.startAnimation(4410);
c.gfx100(726);
c.getItems().deleteItem(557,c.getItems().getItemSl ot(557),10);
c.getItems().deleteItem(560,c.getItems().getItemSl ot(560),2);
c.getItems().deleteItem(9075,c.getItems().getItemS lot(9075),4);
} else {
c.sendMessage("You do not have the required runes to cast this spell. (9075 for astrals)");
}
} else {
c.sendMessage("You must wait 30 seconds before casting this again.");
}
}
With mage level requirements
if (itemId == 6950){
if (c.playerLevel[6] >= 94){
if (System.currentTimeMillis() - c.lastVeng > 30000) {
c.vengOn = true;
c.lastVeng = System.currentTimeMillis();
c.startAnimation(4410);
c.gfx100(726);
c.sendMessage("you have casted veng");
} else { c.sendMessage("You must wait 30 seconds before casting this again.");
}
} else {
c.sendMessage("you must be level 94 + mage to cast this");
}
}
With mage level requirements and rune requirements
if (itemId == 6950){
if (c.playerLevel[6] >= 94){
if (System.currentTimeMillis() - c.lastVeng > 30000) {
if (c.getItems().playerHasItem(557,10) && c.getItems().playerHasItem(9075,4) && c.getItems().playerHasItem(560,2)) {
c.vengOn = true;
c.lastVeng = System.currentTimeMillis();
c.startAnimation(4410);
c.gfx100(726);
c.sendMessage("you have casted veng");
c.getItems().deleteItem(557,c.getItems().getItemSl ot(557),10);
c.getItems().deleteItem(560,c.getItems().getItemSl ot(560),2);
c.getItems().deleteItem(9075,c.getItems().getItemS lot(9075),4);
} else { c.sendMessage("you dont have the runes required to do this spell.");
}
} else { c.sendMessage("You must wait 30 seconds before casting this again.");
}
} else {
c.sendMessage("you must be level 94 + mage to cast this");
}
}
III.Lunar spellbook
Go To your actionhandler.java
search for
case 6552:
You sould see
case 6552:
if (c.playerMagicBook == 0) {
c.playerMagicBook = 1;
c.setSidebarInterface(6, 12855);
c.sendMessage("An ancient wisdomin fills your mind.");
c.getPA().resetAutocast();
} else {
c.setSidebarInterface(6, 1151); //modern
c.playerMagicBook = 0;
c.sendMessage("You feel a drain on your memory.");
c.autocastId = -1;
c.getPA().resetAutocast();
}
break;
Under That break; add this
case 410:
if (c.playerMagicBook == 0) {
c.playerMagicBook = 2;
c.setSidebarInterface(6, 29999);
c.sendMessage("An Lunar t wisdomin fills your mind.");
c.getPA().resetAutocast();
} else {
c.setSidebarInterface(6, 1151); //modern
c.playerMagicBook = 0;
c.sendMessage("You feel a drain on your memory.");
c.autocastId = -1;
c.getPA().resetAutocast();
}
break;
close and save
now search for this ObjectManager.java
open it and search for this
public void loadCustomSpawns(Client c) {
under that add this
c.getPA().checkObjectSpawn(410, 3099, 3503, 1, 10);
IV. Fixing player names
o.sendMessage(c.playerName + ":tradereq:");
with
o.sendMessage(Misc.optimizeText(c.playerName) + ":tradereq:");
IV. All lumby working open\close does + varrock Castle 100%
Only the registered members can see the link.
I do not take credit for any work, I simply added multiple tuts into one helpful thread.
Since more and more people are starting to use PI there isn't much PI tuts to help.
I'll be covering most dupes, useful commands, glitches, and bugs.
If theres anything I've missed, feel free to post it and i'll think about adding it in.:)
---------------------------------DUPES---------------------------------
I.trade/bank/duel X dupes
In tradeandduel class -
public boolean tradeItem(int itemID, int fromSlot, int amount) {
Client o = (Client) Server.playerHandler.players[c.tradeWith];
if(o == null) {
return false;
}
for (int i : Config.ITEM_TRADEABLE) {
if(i == itemID) {
c.sendMessage("You can't trade this item.");
return false;
}
}
c.tradeConfirmed = false;
o.tradeConfirmed = false;
if(!Item.itemStackable[itemID] && !Item.itemIsNote[itemID]) {
for(int a = 0; a < amount; a++) {
if(c.getItems().playerHasItem(itemID, 1)) {
offeredItems.add(new GameItem(itemID, 1));
c.getItems().deleteItem(itemID, c.getItems().getItemSlot(itemID), 1);
o.getPA().sendFrame126("Trading with: " + c.playerName+" who has @gre@"+c.getItems().freeSlots()+" free slots" ,3417);
}
}
o.getPA().sendFrame126("Trading with: " + c.playerName+" who has @gre@"+c.getItems().freeSlots()+" free slots" ,3417);
c.getItems().resetItems(3322);
resetTItems(3415);
o.getTradeAndDuel().resetOTItems(3416);
c.getPA().sendFrame126("", 3431);
o.getPA().sendFrame126("", 3431);
}
if (c.getItems().getItemCount(itemID) < amount) {
amount = c.getItems().getItemCount(itemID);
if (amount == 0)
return false;
}
if (!c.inTrade || !c.canOffer) {
declineTrade();
return false;
}
if(Item.itemStackable[itemID] || Item.itemIsNote[itemID]) {
boolean inTrade = false;
for(GameItem item : offeredItems) {
if(item.id == itemID) {
inTrade = true;
item.amount += amount;
c.getItems().deleteItem(itemID, c.getItems().getItemSlot(itemID), amount);
o.getPA().sendFrame126("Trading with: " + c.playerName+" who has @gre@"+c.getItems().freeSlots()+" free slots" ,3417);
break;
}
}
if(!inTrade) {
offeredItems.add(new GameItem(itemID, amount));
c.getItems().deleteItem(itemID, fromSlot, amount);
o.getPA().sendFrame126("Trading with: " + c.playerName+" who has @gre@"+c.getItems().freeSlots()+" free slots" ,3417);
}
}
o.getPA().sendFrame126("Trading with: " + c.playerName+" who has @gre@"+c.getItems().freeSlots()+" free slots" ,3417);
c.getItems().resetItems(3322);
resetTItems(3415);
o.getTradeAndDuel().resetOTItems(3416);
c.getPA().sendFrame126("", 3431);
o.getPA().sendFrame126("", 3431);
return true;
}
II. Fake item dropping
in packets folder
DropItem.java
add:
if(c.playerItemsN[slot] != 0 && itemId != -1 && c.playerItems[slot] == itemId + 1) {
if(!c.getItems().playerHasItem(itemId,1,slot)) {
//c.sendMessage("Stop cheating!");
return;
}
---------------------------------FIXED\BUGS---------------------------------
I. Fixing ::update rollback
In playersaving.java
private static final int SAVE_TIMER = ####;
#### = 25000 (It was 500000 before, I changed to 25000 and now it works great)
In Server.java
Search for
if (System.currentTimeMillis() - lastMassSave >
Replace with
if (System.currentTimeMillis() - lastMassSave > 25000) {
II. Fixing doors
In ObjectHandler.Java find
public static final int MAX_DOORS = 30;
change 30 to like 100. or something... so like:
public static final int MAX_DOORS = 100;
III. SplitChat PrivateMessaging FIX
go to packets folder and replace PrivateMessaging.java with this:
package server.model.players.packets;
import server.Config;
import server.Server;
import server.Connection;
import server.model.players.Client;
import server.model.players.PacketType;
import server.model.players.PlayerHandler;
import server.util.Misc;
/**
* Private messaging, friends etc
**/
public class PrivateMessaging implements PacketType {
public final int ADD_FRIEND = 188, SEND_PM = 126, REMOVE_FRIEND = 215, CHANGE_PM_STATUS = 95, REMOVE_IGNORE = 59, ADD_IGNORE = 133;
@Override
public void processPacket(Client c, int packetType, int packetSize) {
switch(packetType) {
case ADD_FRIEND:
c.friendUpdate = true;
long friendToAdd = c.getInStream().readQWord();
boolean canAdd = true;
for (int i1 = 0; i1 < c.friends.length; i1++) {
if (c.friends[i1] != 0 && c.friends[i1] == friendToAdd) {
canAdd = false;
c.sendMessage(friendToAdd + " is already on your friends list.");
}
}
if (canAdd == true) {
for (int i1 = 0; i1 < c.friends.length; i1++) {
if (c.friends[i1] == 0) {
c.friends[i1] = friendToAdd;
for (int i2 = 1; i2 < Config.MAX_PLAYERS; i2++) {
if (Server.playerHandler.players[i2] != null && Server.playerHandler.players[i2].isActive && Misc.playerNameToInt64(Server.playerHandler.player s[i2].playerName)== friendToAdd) {
Client o = (Client)Server.playerHandler.players[i2];
if(o != null) {
if (Server.playerHandler.players[i2].privateChat == 0 || (Server.playerHandler.players[i2].privateChat == 1 && o.getPA().isInPM(Misc.playerNameToInt64(c.playerNa me)))) {
c.getPA().loadPM(friendToAdd, 1);
break;
}
}
}
}
break;
}
}
}
break;
case SEND_PM:
long sendMessageToFriendId = c.getInStream().readQWord();
byte pmchatText[] = new byte[100];
int pmchatTextSize = (byte) (packetSize - 8);
c.getInStream().readBytes(pmchatText, pmchatTextSize, 0);
if(Connection.isMuted(c)) {
return;
}
long myName = Misc.playerNameToInt64(c.playerName);
for (long element : c.friends) {
if (element == sendMessageToFriendId) {
boolean pmSent = false;
for (int i2 = 1; i2 < Config.MAX_PLAYERS; i2++) {
if (PlayerHandler.players[i2] != null && PlayerHandler.players[i2].isActive && (Misc.playerNameToInt64(PlayerHandler.players[i2].playerName)== sendMessageToFriendId)) {
Client o = (Client)PlayerHandler.players[i2];
if(o != null) {
if (c.playerRights >= 2 || PlayerHandler.players[i2].privateChat == 0 || (PlayerHandler.players[i2].privateChat == 1 && o.getPA().isInPM(myName))) {
o.getPA().sendPM(myName, c.playerRights, pmchatText, pmchatTextSize);
pmSent = true;
}
}
break;
}
}
if (!pmSent) {
c.sendMessage("That player is currently offline.");
break;
}
}
}
break;
case REMOVE_FRIEND:
c.friendUpdate = true;
long friendToRemove = c.getInStream().readQWord();
for (int i1 = 0; i1 < c.friends.length; i1++) {
if (c.friends[i1] == friendToRemove) {
for (int i2 = 1; i2 < Config.MAX_PLAYERS; i2++) {
Client o = (Client)Server.playerHandler.players[i2];
if(o != null) {
if(c.friends[i1] == Misc.playerNameToInt64(Server.playerHandler.player s[i2].playerName)){
o.getPA().updatePM(c.playerId, 0);
break;
}
}
}
c.friends[i1] = 0;
break;
}
}
break;
case REMOVE_IGNORE:
int ii = c.getInStream().readDWord();
int i2i = c.getInStream().readDWord();
int i3i = c.getInStream().readDWord();
//for other status changing
c.getPA().handleStatus(ii,i2i,i3i);
c.friendUpdate = true;
long ignore = c.getInStream().readQWord();
for(int i = 0; i < c.ignores.length; i++) {
if(c.ignores[i] == ignore) {
c.ignores[i] = 0;
break;
}
}
break;
case CHANGE_PM_STATUS:
int tradeAndCompete = c.getInStream().readUnsignedByte();
c.privateChat = c.getInStream().readUnsignedByte();
int publicChat = c.getInStream().readUnsignedByte();
for (int i1 = 1; i1 < Config.MAX_PLAYERS; i1++) {
if (Server.playerHandler.players[i1] != null && Server.playerHandler.players[i1].isActive == true) {
Client o = (Client)Server.playerHandler.players[i1];
if(o != null) {
o.getPA().updatePM(c.playerId, 1);
}
}
}
break;
case ADD_IGNORE:
int a = c.getInStream().readDWord();
int a2 = c.getInStream().readDWord();
int j3 = 18;
//for other status changing
c.getPA().handleStatus(a,a2,j3);
c.friendUpdate = true;
long ignoreAdd = c.getInStream().readQWord();
for(int i = 0; i < c.ignores.length; i++) {
if(c.ignores[i] == 0) {
c.ignores[i] = ignoreAdd;
break;
}
}
break;
}
}
}
in player.java declare:
public long ignores[] = new long[200];
IV. Duel Bug Fix
Go to client class, now find
public void destruct()
Client o = (Client) Server.playerHandler.players[duelingWith];
if(inDuelArena() && o.disconnected == true) {
getTradeAndDuel().duelVictory();
}
---------------------------------INTERFACES---------------------------------
I. Pest Control interfaces
Only the registered members can see the link.
Only the registered members can see the link.
Pestcontrol.java
public void setInterface() {
for (int j = 0; j < Server.playerHandler.players.length; j++) {
if (Server.playerHandler.players[j] != null) {
if (Server.playerHandler.players[j].inPcBoat()) {
Client c = (Client)Server.playerHandler.players[j];
c.getPA().sendFrame126("Next Departure: "+waitTimer+"", 21120);
c.getPA().sendFrame126("Players Ready: "+playersInBoat()+"", 21121);
c.getPA().sendFrame126("(Need 3 to 25 players)", 21122);
c.getPA().sendFrame126("Points: "+c.pcPoints+"", 21123);
}
if (Server.playerHandler.players[j].inPcGame()) {
Client c = (Client)Server.playerHandler.players[j];
for (j = 0; j < Server.npcHandler.npcs.length; j++) {
if (Server.npcHandler.npcs[j] != null) {
if (Server.npcHandler.npcs[j].npcType == 3777)
c.getPA().sendFrame126("" + Server.npcHandler.npcs[j].HP + "", 21111);
if (Server.npcHandler.npcs[j].npcType == 3778)
c.getPA().sendFrame126("" + Server.npcHandler.npcs[j].HP + "", 21112);
if (Server.npcHandler.npcs[j].npcType == 3779)
c.getPA().sendFrame126("" + Server.npcHandler.npcs[j].HP + "", 21113);
if (Server.npcHandler.npcs[j].npcType == 3780)
c.getPA().sendFrame126("" + Server.npcHandler.npcs[j].HP + "", 21113);
}
}
c.getPA().sendFrame126("0", 21115);
c.getPA().sendFrame126("0", 21116);
}
}
}
}
In the process() add setInterface(); at the top...
Now got to Client.java find getPA().showOption(3, 0, "Attack", 1);
under it add
} else if(inPcBoat()) {
getPA().walkableInterface(21119);
} else if(inPcGame()) {
getPA().walkableInterface(21100);
}
II. Skill Guides
Only the registered members can see the link.
SkillGuides class:
package server.model.players.content;
import server.model.players.*;
/**
* Skill Guides class. Handles the ingame skill menus.
* @author Fire cape
*/
public class SkillGuides {
public static void sendSkillInterface(Client client, int id[]) {
client.getOutStream().createFrameVarSizeWord(53);
client.getOutStream().writeWord(8847);
client.getOutStream().writeWord(id.length);
for (int i = 0; i < id.length; i++) {
client.getOutStream().writeByte(1);
if(id[i] > 0) {
client.getOutStream().writeWordBigEndianA(id[i]+1);
} else {
client.getOutStream().writeWordBigEndianA(0);
}
}
client.getOutStream().endFrameVarSizeWord();
client.flushOutStream();
}
private static int item[] = new int[31];
public static void skillsInterface(Client client, String skill,
int item1ItemId, int item1lvl, String item1lvldef,
int item2ItemId, int item2lvl, String item2lvldef,
int item3ItemId, int item3lvl, String item3lvldef,
int item4ItemId, int item4lvl, String item4lvldef,
int item5ItemId, int item5lvl, String item5lvldef,
int item6ItemId, int item6lvl, String item6lvldef,
int item7ItemId, int item7lvl, String item7lvldef,
int item8ItemId, int item8lvl, String item8lvldef) {
client.getPA().sendFrame126("@dre@"+skill, 8716);
for(int i = 0;i<31;i++) {
item[i] = 0;
}
item[0] = item1ItemId;
item[1] = item2ItemId;
item[2] = item3ItemId;
item[3] = item4ItemId;
item[4] = item5ItemId;
item[5] = item6ItemId;
item[6] = item7ItemId;
item[7] = item8ItemId;
if(item1lvl > 0)
client.getPA().sendFrame126(""+item1lvl,8720);
client.getPA().sendFrame126(""+item1lvldef,8760);
if(item2lvl > 0)
client.getPA().sendFrame126(""+item2lvl,8721);
client.getPA().sendFrame126(""+item2lvldef, 8761);
if(item3lvl > 0)
client.getPA().sendFrame126(""+item3lvl,8722);
client.getPA().sendFrame126(""+item3lvldef,8762);
if(item4lvl > 0)
client.getPA().sendFrame126(""+item4lvl,8723);
client.getPA().sendFrame126(""+item4lvldef, 8763);
if(item5lvl > 0)
client.getPA().sendFrame126(""+item5lvl,8724);
client.getPA().sendFrame126(""+item5lvldef, 8764);
if(item6lvl > 0)
client.getPA().sendFrame126(""+item6lvl,8725);
client.getPA().sendFrame126(""+item6lvldef,8765);
if(item7lvl > 0)
client.getPA().sendFrame126(""+item7lvl,8726);
client.getPA().sendFrame126(""+item7lvldef, 8766);
if(item8lvl > 0)
client.getPA().sendFrame126(""+item8lvl,8727);
client.getPA().sendFrame126(""+item8lvldef, 8767);
client.getPA().sendFrame126("",8849);
client.getPA().sendFrame126("Attack",8846);
client.getPA().sendFrame126("Strength",8823);
client.getPA().sendFrame126("Defence",8824);
client.getPA().sendFrame126("Hitpoints",8827);
client.getPA().sendFrame126("Ranged",8837);
client.getPA().sendFrame126("Magic",8840);
client.getPA().sendFrame126("Prayer",8843);
client.getPA().sendFrame126("RuneCraf",8859);
client.getPA().sendFrame126("Agility",8862);
client.getPA().sendFrame126("Herblore",8865);
client.getPA().sendFrame126("Thieving",15303);
client.getPA().sendFrame126("Crafting",15306);
client.getPA().sendFrame126("Slayer",15309);
sendSkillInterface(client, item);
client.getPA().showInterface(8714);
}
public static void atkInterface(Client client) {
skillsInterface(client, "Attack",
1291, 1, "Bronze",
1293, 1, "Iron",
1295, 5, "Steel",
1297, 10, "Black",
1299, 20, "Mithril",
1301, 30, "Adamant",
1303, 40, "Rune",
1305, 60, "Dragon");
}
public static void strInterface(Client client) {
skillsInterface(client, "Strength",
3196, 5, "Black halberd",
3198, 10, "Mithril halberd",
3200, 15, "Adamant halberd",
3202, 20, "Rune halberd",
3204, 30, "Dragon halberd",
4153, 50, "Granite maul",
6528, 60, "Tzhaar-Ket-Om",
4718, 70, "Dharok's greataxe");
}
public static void defInterface(Client client) {
skillsInterface(client, "Defence",
1139, 1, "Bronze",
1137, 1, "Iron",
1141, 5, "Steel",
1151, 10, "Black",
1143, 20, "Mithril",
1145, 30, "Adamant",
1147, 40, "Rune",
1149, 60, "Dragon");
}
public static void rangeInterface(Client client) {
skillsInterface(client, "Ranged",
1129, 1, "Plain Leather",
1131, 1, "Hard leather",
1133, 20, "Studded leather",
1135, 40, "Green d'hide leather",
2499, 50, "Blue d'hide leather",
2501, 60, "Red d'hide leather",
2503, 70, "Black d'hide leather",
4736, 70, "Karils");
}
public static void prayInterface(Client client) {
skillsInterface(client, "Prayer",
526, 1, "Bones",
532, 1, "Big bones",
534, 1, "Baby dragon bones",
536, 1, "Dragon bones",
6729, 1, "Dagannoth bones",
4812, 1, "Zogre bones",
4830, 1, "Fayrg bones",
4832, 1, "Raurg bones");
}
public static void hpInterface(Client client) {
skillsInterface(client, "Hitpoints",
0, 0, "",
0, 0, "",
0, 0, "",
0, 0, "",
0, 0, "",
0, 0, "",
0, 0, "",
0, 0, "");
}
public static void mageInterface(Client client) {
skillsInterface(client, "Magic",
579, 1, "Wizard",
4089, 40, "Mystic",
7400, 40, "Enchant",
3385, 40, "Splitbark",
6918, 50, "Infinity",
2412, 60, "God capes and staffs",
6914, 70, "Mage's book and Master Wand",
4708, 70, "Ahrims");
}
public static void rcInterface(Client client) {
skillsInterface(client, "Runecrafting",
6422, 1, "Air runes",
6436, 2, "Mind runes",
6438, 20, "Body runes",
6430, 35, "Chaos runes",
561, 44, "Nature runes",
6434, 54, "Law runes",
6432, 65, "Death runes",
565, 77, "Blood runes");
}
public static void agilityInterface(Client client) {
skillsInterface(client, "Agility",
2150, 1, "Gnome stronghold agility course",
2996, 1, "Low-level agility arena",
2996, 20, "Medium-level agility arena",
2996, 40, "High-level agility arena",
1365, 35, "Barberian outpost agility course",
4024, 48, "Ape attol agility course",
964, 52, "Wilderness agility course",
4170, 60, "Werewolf agility course");
}
public static void herbloreInterface(Client client) {
skillsInterface(client, "Agility",
221, 3, "Attack Potion",
235, 5, "Anti-poison Potion",
225, 12, "Strength Potion",
223, 22, "Restore Potion",
1975, 22, "Energy Potion",
239, 30, "Defence Potion",
1526, 38, "Prayer Potion",
221, 45, "Super Attack Potion");
}
public static void thievingInterface(Client client) {
skillsInterface(client, "Thieving",
3241, 1, "Man",
3243, 10, "Farmer",
3245, 25, "Warrior",
3249, 40, "Guard",
3251, 53, "Knights of ardogne",
3255, 70, "Paladin",
3257, 75, "Gnome",
3259, 80, "Hero");
}
public static void craftingInterface(Client client) {
skillsInterface(client, "Crafting",
1059, 1, "Leather",
1777, 10, "Flax into bow string",
1097, 20, "Hard leather",
1065, 57, "Green dragonhide leather",
2487, 66, "Blue dragonhide leather",
2489, 73, "Red dragonhide leather",
2491, 79, "Black dragonhide leather",
6585, 90, "Onyx amulet");
}
public static void slayerInterface(Client client) {
skillsInterface(client, "Slayer",
4133, 1, "Crawling hand",
4134, 10, "Cave crawler",
4140, 45, "Infernal Mage",
4144, 60, "Aberrant Spectre",
4145, 65, "Dust devil",
4147, 75, "Gargoyle",
4148, 80, "Nechryael",
4149, 85, "Abyssal demon");
}
public static void fletchingInterface(Client client) {
skillsInterface(client, "Fletching",
50, 5, "Normal bows",
54, 20, "Oak bows",
60, 35, "Willow bows",
64, 50, "Maple bows",
68, 65, "Yew bows",
892, 75, "Rune arrow",
72, 80, "Magic shortbow",
70, 85, "Magic longbow");
}
public static void miningInterface(Client client) {
skillsInterface(client, "Mining",
436, 1, "Tin & Cooper",
440, 15, "Iron",
442, 30, "Silver",
453, 30, "Coal",
444, 40, "Gold",
447, 55, "Mithril",
449, 70, "Adamant",
451, 85, "Rune");
}
public static void smithingInterface(Client client) {
skillsInterface(client, "Smithing",
2349, 1, "Bronze",
2351, 15, "Iron",
2355, 20, "Silver",
2353, 30, "Steel",
2357, 40, "Gold",
2359, 50, "Mithril",
2361, 70, "Adamant",
2363, 85, "Rune");
}
public static void fishingInterface(Client client) {
skillsInterface(client, "Fishing",
317, 1, "Shrimps",
335, 20, "Trouts",
359, 35, "Tunas",
377, 40, "Lobsters",
371, 50, "Swordfishes",
383, 76, "Sharks",
395, 79, "Sea Turtles",
389, 81, "Manta rays");
}
public static void cookingInterface(Client client) {
skillsInterface(client, "Cooking",
315, 1, "Shrimps",
333, 20, "Trouts",
361, 30, "Tunas",
379, 40, "Lobsters",
373, 50, "Swordfishes",
385, 76, "Sharks",
397, 79, "Sea Turtles",
391, 81, "Manta rays");
}
public static void woodcuttingInterface(Client client) {
skillsInterface(client, "Woodcutting",
1511, 1, "Normal tree",
1521, 15, "Oak tree",
1519, 30, "Willow tree",
6333, 35, "Teak tree",
1517, 45, "Maple tree",
6332, 50, "Mahogany tree",
1515, 60, "Yews tree",
6739, 61, "Dragon axe");
}
public static void firemakingInterface(Client client) {
skillsInterface(client, "Firemaking",
1511, 1, "Tree logs",
1521, 15, "Oak logs",
1519, 30, "Willow logs",
6333, 35, "Teak logs",
1517, 45, "Maple logs",
4544, 49, "Bullseye lantern",
6332, 50, "Mahogany logs",
1515, 60, "Yew logs");
}
public static void farmingInterface(Client client) {
skillsInterface(client, "Farming",
5291, 1, "Guam seed",
5292, 15, "Marrentill seed",
5293, 20, "Tarromin seed",
5295, 30, "Ranarr seed",
5298, 40, "Avanote seed",
5300, 60, "Snapdragon seed",
5302, 72, "Lantadyme seed",
5304, 90, "Torsol seed");
}
}
In clickingbuttons.java:
case 33206:// Attack button
case 34142:
SkillGuides.atkInterface(c);
break;
case 33209:// str button
case 34119:
SkillGuides.strInterface(c);
break;
case 33212: //Defence
case 34120:
SkillGuides.defInterface(c);
break;
case 34133:
case 33215: //Range
SkillGuides.rangeInterface(c);
break;
case 34123:
case 33207: //Hitpoints
//SkillGuides.hpInterface(c);
break;
case 34139:
case 33218: //Prayer
SkillGuides.prayInterface(c);
break;
case 34136:
case 33221: //Magic
SkillGuides.mageInterface(c);
break;
case 34155:
case 33224: //Runecrafting
SkillGuides.rcInterface(c);
break;
case 34158:
case 33210: //Agility
SkillGuides.agilityInterface(c);
break;
case 34161:
case 33213: //Herblore
SkillGuides.herbloreInterface(c);
break;
case 59199:
case 33216: //Theiving
SkillGuides.thievingInterface(c);
break;
case 59202:
case 33219: //craft
SkillGuides.craftingInterface(c);
break;
case 33222: //Fletching
SkillGuides.fletchingInterface(c);
break;
case 59205:
case 47130: //Slayer
SkillGuides.slayerInterface(c);
break;
case 33208: //Mining
SkillGuides.miningInterface(c);
break;
case 33211: //Smithing
SkillGuides.smithingInterface(c);
break;
case 33214: //Fishing
SkillGuides.fishingInterface(c);
break;
case 33217: //Cooking
SkillGuides.cookingInterface(c);
break;
case 33220: //Firemaking
SkillGuides.firemakingInterface(c);
break;
case 33223: //Woodcutting
SkillGuides.woodcuttingInterface(c);
break;
case 54104: //Farming
SkillGuides.farmingInterface(c);
break;
At the top of clickingbuttons with all of your other imports.
Add:
import server.model.players.content.*;
III. Lunar interface
RSInterface.java
Find
interfaceCache = new RSInterface[j + 10000];
Make It
interfaceCache = new RSInterface[j + 30000];
Interface itself
public static void configureLunar(TextDrawingArea[] TDA){
homeTeleport();
drawRune(30003,1, "Fire");
drawRune(30004,2, "Water");
drawRune(30005,3, "Air");
drawRune(30006,4, "Earth");
drawRune(30007,5, "Mind");
drawRune(30008,6, "Body");
drawRune(30009,7, "Death");
drawRune(30010,8, "Nature");
drawRune(30011,9, "Chaos");
drawRune(30012,10, "Law");
drawRune(30013,11, "Cosmic");
drawRune(30014,12, "Blood");
drawRune(30015,13, "Soul");
drawRune(30016,14, "Astral");
addLunar3RunesSmallBox(30017, 553, 554, 555, 0, 4, 3, 30003, 30004, 64, "Bake Pie","Bake pies without a stove",TDA,0, 16,2);
addLunar2RunesSmallBox(30025, 553, 557, 0, 7, 30006, 65,"Cure Plant", "Cure disease on farming patch",TDA,1, 4,2);
addLunar3RunesBigBox(30032, 553, 564, 558, 0,0, 0, 30013, 30007, 65,"Monster Examine", "Detect the combat statistics of a\\nmonster",TDA, 2,2,2);
addLunar3RunesSmallBox(30040, 553, 564, 556, 0, 0, 1, 30013, 30005, 66, "NPC Contact","Speak with varied NPCs",TDA,3,0,2);
addLunar3RunesSmallBox(30048, 553, 563, 557, 0, 0, 9, 30012, 30006, 67, "Cure Other","Cure poisoned players",TDA,4,8,2);
addLunar3RunesSmallBox(30056, 553, 555, 554, 0, 2, 0, 30004, 30003, 67, "Humidify","fills certain vessels with water",TDA,5,0,5);
addLunar3RunesSmallBox(30064, 553, 563, 557, 1, 0, 1, 30012, 30006, 68, "Town Teleport","Teleports you to Various Towns",TDA,6,0,5);
addLunar3RunesBigBox(30075, 553, 563, 557, 1, 0, 3, 30012, 30006, 69,"Mini Teleports 1", "Teleport to various Mini's.",TDA, 7,0,5);
addLunar3RunesSmallBox(30083, 553, 563, 557, 1, 0, 5, 30012, 30006, 70, "RuneCrafting Teleport","Teleports You To Runecrafting Spots",TDA,8,0,5);
addLunar3RunesSmallBox(30091, 553, 564, 563, 1, 1, 0, 30013, 30012, 70, "Cure Me","Cures Poison",TDA,9,0,5);
addLunar2RunesSmallBox(30099, 553, 557, 1, 1, 30006, 70,"Hunter Kit", "Get a kit of hunting gear",TDA,10,0,5);
addLunar3RunesSmallBox(30106, 553, 563, 555, 1, 0,0, 30012, 30004, 71,"Monster Teleport 1", "Teleport to various Monster's.",TDA,11,0,5);
addLunar3RunesBigBox(30114, 553, 563, 555, 1, 0, 4, 30012, 30004, 72,"Monster Teleport 2", "Teleport to various Monster's.",TDA, 12,0,5);
addLunar3RunesSmallBox(30122, 553, 564, 563, 1, 1, 1, 30013, 30012, 73, "Cure Group","Cures Poison on players",TDA,13,0,5);
addLunar3RunesBigBox(30130, 553, 564, 559, 1, 1, 4, 30013, 30008, 74,"Stat Spy", "Cast on another player to see their\\nskill levels",TDA, 14,8,2);
addLunar3RunesBigBox(30138, 553, 563, 554, 1, 1, 2, 30012, 30003, 74,"Wilderness Teleport", "Teleport to various Wildy spots.",TDA, 15,0,5);
addLunar3RunesBigBox(30146, 553, 563, 554, 1, 1, 5, 30012, 30003, 75,"Tele Group Barbarian", "Teleports players to the Barbarian\\noutpost",TDA, 16,0,5);
addLunar3RunesSmallBox(30154, 553, 554, 556, 1, 5, 9, 30003, 30005, 76, "Superglass Make","Make glass without a furnace",TDA,17, 16,2);
addLunar3RunesSmallBox(30162, 553, 563, 555, 1, 1, 3, 30012, 30004, 77, "Khazard Teleport","Teleports you to Port khazard",TDA,18,0,5);
addLunar3RunesSmallBox(30170, 553, 563, 555, 1, 1, 7, 30012, 30004, 78, "Tele Group Khazard","Teleports players to Port khazard",TDA,19,0,5);
addLunar3RunesBigBox(30178, 553, 564, 559, 1, 0, 4, 30013, 30008, 78,"Dream", "Take a rest and restore hitpoints 3\\n times faster",TDA, 20,0,5);
addLunar3RunesSmallBox(30186, 553, 557, 555, 1, 9, 4, 30006, 30004, 79, "String Jewellery","String amulets without wool",TDA,21,0,5);
addLunar3RunesLargeBox(30194, 553, 557, 555, 1, 9, 9, 30006, 30004, 80,"Stat Restore Pot\\nShare", "Share a potion with up to 4 nearby\\nplayers",TDA, 22,0,5);
addLunar3RunesSmallBox(30202, 553, 554, 555, 1, 6, 6, 30003, 30004, 81, "Magic Imbue","Combine runes without a talisman",TDA,23,0,5);
addLunar3RunesBigBox(30210, 553, 561, 557, 2, 1, 14, 30010, 30006, 82,"Fertile Soil", "Fertilise a farming patch with super\\ncompost",TDA, 24, 4,2);
addLunar3RunesBigBox(30218, 553, 557, 555, 2, 11, 9, 30006, 30004, 83,"Boost Potion Share", "Shares a potion with up to 4 nearby\\nplayers",TDA, 25, 0,5);
addLunar3RunesSmallBox(30226, 553, 563, 555, 2, 2, 9, 30012, 30004, 84, "Fishing Guild Teleport","Teleports you to the fishing guild",TDA,26,0,5);
addLunar3RunesLargeBox(30234, 553, 563, 555, 1, 2, 13, 30012, 30004, 85, "Tele Group Fishing\\nGuild", "Teleports players to the Fishing\\nGuild",TDA, 27,0,5);
addLunar3RunesSmallBox(30242, 553, 557, 561, 2, 14, 0, 30006, 30010, 85, "Plank Make","Turn Logs into planks",TDA,28,16,5);
addLunar3RunesSmallBox(30250, 553, 563, 555, 2, 2, 9, 30012, 30004, 86, "Catherby Teleport","Teleports you to Catherby",TDA,29,0,5);//END
addLunar3RunesSmallBox(30258, 553, 563, 555, 2, 2, 14, 30012, 30004, 87, "Tele Group Catherby","Teleports players to Catherby",TDA,30,0,5);
addLunar3RunesSmallBox(30266, 553, 563, 555, 2, 2, 7, 30012, 30004, 88, "Ice Plateau Teleport","Teleports you to Ice Plateau",TDA,31,0,5);
addLunar3RunesBigBox(30274, 553, 563, 555, 2, 2, 15, 30012, 30004, 89, "Tele Group Ice\\n Plateau","Teleports players to Ice Plateau",TDA,32,0,5);
addLunar3RunesBigBox(30282, 553, 563, 561, 2, 1, 0, 30012, 30010, 90, "Energy Transfer","Spend hitpoints and SA Energy to\\n give another player hitpoints and run energy",TDA,33,8,2);
addLunar3RunesBigBox(30290, 553, 563, 565, 2, 2, 0, 30012, 30014, 91, "Heal Other","Transfer up to 75% of hitpoints\\n to another player",TDA,34,8,2);
addLunar3RunesBigBox(30298, 553, 560, 557, 2, 1, 9, 30009, 30006, 92, "Vengeance Other","Allows another player to rebound\\ndamage to an opponent",TDA,35,8,2);
addLunar3RunesSmallBox(30306, 553, 560, 557, 3, 1, 9,30009, 30006, 93, "Vengeance","Rebound damage to an opponent",TDA,36,0,5);
addLunar3RunesBigBox(30314, 553, 565, 563, 3, 2, 5, 30014, 30012, 94, "Heal Group","Transfer up to 75% of hitpoints to a group",TDA,37,0,5);
addLunar3RunesBigBox(30322, 553, 564, 563, 2, 1, 0, 30013, 30012, 95, "Spellbook Swap","Change to another spellbook for 1\\nspell cast",TDA,38,0,5);
}
public static void constructLunar(){
RSInterface Interface = addInterface(29999);
setChildren(71, Interface);
setBounds(30000, 11, 10, 0, Interface);
setBounds(30017, 40, 9, 1, Interface);
setBounds(30025, 71, 12, 2, Interface);
setBounds(30032, 103, 10, 3, Interface);
setBounds(30040, 135, 12, 4, Interface);
setBounds(30048, 165, 10, 5, Interface);
setBounds(30056, 8, 38, 6, Interface);
setBounds(30064, 39, 39, 7, Interface);
setBounds(30075, 71, 39, 8, Interface);
setBounds(30083, 103, 39, 9, Interface);
setBounds(30091, 135, 39, 10, Interface);
setBounds(30099, 165, 37, 11, Interface);
setBounds(30106, 12, 68, 12, Interface);
setBounds(30114, 42, 68, 13, Interface);
setBounds(30122, 71, 68, 14, Interface);
setBounds(30130, 103, 68, 15, Interface);
setBounds(30138, 135, 68, 16, Interface);
setBounds(30146, 165, 68, 17, Interface);
setBounds(30154, 14, 97, 18, Interface);
setBounds(30162, 42, 97, 19, Interface);
setBounds(30170, 71, 97, 20, Interface);
setBounds(30178, 101, 97, 21, Interface);
setBounds(30186, 135, 98, 22, Interface);
setBounds(30194, 168, 98, 23, Interface);
setBounds(30202, 11, 125, 24, Interface);
setBounds(30210, 42, 124, 25, Interface);
setBounds(30218, 74, 125, 26, Interface);
setBounds(30226, 103, 125, 27, Interface);
setBounds(30234, 135, 125, 28, Interface);
setBounds(30242, 164, 126, 29, Interface);
setBounds(30250, 10, 155, 30, Interface);
setBounds(30258, 42, 155, 31, Interface);
setBounds(30266, 71, 155, 32, Interface);
setBounds(30274, 103, 155, 33, Interface);
setBounds(30282, 136, 155, 34, Interface);
setBounds(30290, 165, 155, 35, Interface);
setBounds(30298, 13, 185, 36, Interface);
setBounds(30306, 42, 185, 37, Interface);
setBounds(30314, 71, 184, 38, Interface);
setBounds(30322, 104, 184, 39, Interface);
setBounds(30001, 6, 184, 40, Interface);//hover
setBounds(30018, 5, 176, 41, Interface);//hover
setBounds(30026, 5, 176, 42, Interface);//hover
setBounds(30033, 5, 163, 43, Interface);//hover
setBounds(30041, 5, 176, 44, Interface);//hover
setBounds(30049, 5, 176, 45, Interface);//hover
setBounds(30057, 5, 176, 46, Interface);//hover
setBounds(30065, 5, 176, 47, Interface);//hover
setBounds(30076, 5, 163, 48, Interface);//hover
setBounds(30084, 5, 176, 49, Interface);//hover
setBounds(30092, 5, 176, 50, Interface);//hover
setBounds(30100, 5, 176, 51, Interface);//hover
setBounds(30107, 5, 176, 52, Interface);//hover
setBounds(30115, 5, 163, 53, Interface);//hover
setBounds(30123, 5, 176, 54, Interface);//hover
setBounds(30131, 5, 163, 55, Interface);//hover
setBounds(30139, 5, 163, 56, Interface);//hover
setBounds(30147, 5, 163, 57, Interface);//hover
setBounds(30155, 5, 176, 58, Interface);//hover
setBounds(30163, 5, 176, 59, Interface);//hover
setBounds(30171, 5, 176, 60, Interface);//hover
setBounds(30179, 5, 163, 61, Interface);//hover
setBounds(30187, 5, 176, 62, Interface);//hover
setBounds(30195, 5, 149, 63, Interface);//hover
setBounds(30203, 5, 176, 64, Interface);//hover
setBounds(30211, 5, 163, 65, Interface);//hover
setBounds(30219, 5, 163, 66, Interface);//hover
setBounds(30227, 5, 176, 67, Interface);//hover
setBounds(30235, 5, 149, 68, Interface);//hover
setBounds(30243, 5, 176, 69, Interface);//hover
setBounds(30251, 5, 176, 70, Interface);//hover
}
Methods Needed
private static Sprite LoadSprite(int i, String s) {
long l = (TextClass.method585(s) << 8) + (long) i;
Sprite sprite = (Sprite) aMRUNodes_238.insertFromCache(l);
if (sprite != null) {
return sprite;
}
try {
sprite = new Sprite("./Sprites/"+s+" "+i+".PNG");
aMRUNodes_238.removeFromCache(sprite, l);
} catch (Exception exception) {
System.out.println(exception);
return null;
}
return sprite;
}
public static void addLunarSprite(int i, int j, String name) {
RSInterface RSInterface = addInterface(i);
RSInterface.id = i;
RSInterface.parentID = i;
RSInterface.type = 5;
RSInterface.atActionType = 0;
RSInterface.drawsTransparent = true;
RSInterface.transAmount = 230;
RSInterface.contentType = 0;
RSInterface.aByte254 = 0;
RSInterface.mOverInterToTrigger = 52;
RSInterface.sprite1 = imageLoader(j, name);
RSInterface.width = 500;
RSInterface.height = 500;
RSInterface.tooltip = "";
}
public static void drawRune(int i,int id, String runeName) {
RSInterface RSInterface = addInterface(i);
RSInterface.type = 5;
RSInterface.atActionType = 0;
RSInterface.contentType = 0;
RSInterface.aByte254 = 0;
RSInterface.mOverInterToTrigger = 52;
RSInterface.sprite1 = imageLoader(id, "Lunar/RUNE");
RSInterface.width = 500;
RSInterface.height = 500;
}
public static void addRuneText(int ID, int runeAmount, int RuneID, TextDrawingArea[] font){
RSInterface rsInterface = addInterface(ID);
rsInterface.id = ID;
rsInterface.parentID = 1151;
rsInterface.type = 4;
rsInterface.atActionType = 0;
rsInterface.contentType = 0;
rsInterface.width = 0;
rsInterface.height = 14;
rsInterface.aByte254 = 0;
rsInterface.mOverInterToTrigger= -1;
rsInterface.anIntArray245 = new int[1];
rsInterface.anIntArray212 = new int[1];
rsInterface.anIntArray245[0] = 3;
rsInterface.anIntArray212[0] = runeAmount;
rsInterface.valueIndexArray = new int[1][4];
rsInterface.valueIndexArray[0][0] = 4;
rsInterface.valueIndexArray[0][1] = 3214;
rsInterface.valueIndexArray[0][2] = RuneID;
rsInterface.valueIndexArray[0][3] = 0;
rsInterface.centerText = true;
rsInterface.textDrawingAreas = font[0];
rsInterface.textShadow = true;
rsInterface.message = "%1/"+runeAmount+"";
rsInterface.aString228 = "";
rsInterface.textColor = 12582912;
rsInterface.anInt219 = 49152;
}
public static void homeTeleport(){
RSInterface RSInterface = addInterface(30000);
RSInterface.tooltip = "Cast @gre@Lunar Home Teleport";
RSInterface.id = 30000;
RSInterface.parentID = 30000;
RSInterface.type = 5;
RSInterface.atActionType = 5;
RSInterface.contentType = 0;
RSInterface.aByte254 = 0;
RSInterface.mOverInterToTrigger = 30001;
RSInterface.sprite1 = imageLoader(1, "Lunar/SPRITE");
RSInterface.width = 20;
RSInterface.height = 20;
RSInterface Int = addInterface(30001);
Int.isMouseoverTriggered = true;
setChildren(1, Int);
addLunarSprite(30002, 0, "SPRITE");
setBounds(30002, 0, 0,0, Int);
}
public static void addLunar2RunesSmallBox(int ID, int r1, int r2, int ra1, int ra2,int rune1, int lvl,String name, String descr,TextDrawingArea[] TDA,int sid,int suo,int type){
RSInterface rsInterface = addInterface(ID);
rsInterface.id = ID;
rsInterface.parentID = 1151;
rsInterface.type = 5;
rsInterface.atActionType = type;
rsInterface.contentType = 0;
rsInterface.mOverInterToTrigger = ID+1;
rsInterface.spellUsableOn = suo;
rsInterface.selectedActionName = "Cast On";
rsInterface.width = 20;
rsInterface.height = 20;
rsInterface.tooltip = "Cast @gre@"+name;
rsInterface.spellName = name;
rsInterface.anIntArray245 = new int[3];
rsInterface.anIntArray212 = new int[3];
rsInterface.anIntArray245[0] = 3;
rsInterface.anIntArray212[0] = ra1;
rsInterface.anIntArray245[1] = 3;
rsInterface.anIntArray212[1] = ra2;
rsInterface.anIntArray245[2] = 3;
rsInterface.anIntArray212[2] = lvl;
rsInterface.valueIndexArray = new int[3][];
rsInterface.valueIndexArray[0] = new int[4];
rsInterface.valueIndexArray[0][0] = 4;
rsInterface.valueIndexArray[0][1] = 3214;
rsInterface.valueIndexArray[0][2] = r1;
rsInterface.valueIndexArray[0][3] = 0;
rsInterface.valueIndexArray[1] = new int[4];
rsInterface.valueIndexArray[1][0] = 4;
rsInterface.valueIndexArray[1][1] = 3214;
rsInterface.valueIndexArray[1][2] = r2;
rsInterface.valueIndexArray[1][3] = 0;
rsInterface.valueIndexArray[2] = new int[3];
rsInterface.valueIndexArray[2][0] = 1;
rsInterface.valueIndexArray[2][1] = 6;
rsInterface.valueIndexArray[2][2] = 0;
rsInterface.sprite2 = imageLoader(sid, "Lunar/LUNARON");
rsInterface.sprite1 = imageLoader(sid, "Lunar/LUNAROFF");
RSInterface INT = addInterface(ID+1);
INT.isMouseoverTriggered = true;
setChildren(7, INT);
addLunarSprite(ID+2, 0, "Lunar/BOX");
setBounds(ID+2, 0, 0, 0, INT);
addText(ID+3, "Level "+(lvl+1)+": "+name, 0xFF981F, true, true, 52, TDA, 1);
setBounds(ID+3, 90, 4, 1, INT);
addText(ID+4, descr, 0xAF6A1A, true, true, 52, TDA, 0);
setBounds(ID+4, 90, 19, 2, INT);
setBounds(30016, 37, 35, 3, INT);//Rune
setBounds(rune1, 112, 35, 4, INT);//Rune
addRuneText(ID+5, ra1+1, r1, TDA);
setBounds(ID+5, 50, 66, 5, INT);
addRuneText(ID+6, ra2+1, r2, TDA);
setBounds(ID+6, 123, 66, 6, INT);
}
public static void addLunar3RunesSmallBox(int ID, int r1, int r2, int r3, int ra1, int ra2, int ra3,int rune1, int rune2, int lvl,String name, String descr,TextDrawingArea[] TDA, int sid,int suo,int type){
RSInterface rsInterface = addInterface(ID);
rsInterface.id = ID;
rsInterface.parentID = 1151;
rsInterface.type = 5;
rsInterface.atActionType = type;
rsInterface.contentType = 0;
rsInterface.mOverInterToTrigger = ID+1;
rsInterface.spellUsableOn = suo;
rsInterface.selectedActionName = "Cast on";
rsInterface.width = 20;
rsInterface.height = 20;
rsInterface.tooltip = "Cast @gre@"+name;
rsInterface.spellName = name;
rsInterface.anIntArray245 = new int[4];
rsInterface.anIntArray212 = new int[4];
rsInterface.anIntArray245[0] = 3;
rsInterface.anIntArray212[0] = ra1;
rsInterface.anIntArray245[1] = 3;
rsInterface.anIntArray212[1] = ra2;
rsInterface.anIntArray245[2] = 3;
rsInterface.anIntArray212[2] = ra3;
rsInterface.anIntArray245[3] = 3;
rsInterface.anIntArray212[3] = lvl;
rsInterface.valueIndexArray = new int[4][];
rsInterface.valueIndexArray[0] = new int[4];
rsInterface.valueIndexArray[0][0] = 4;
rsInterface.valueIndexArray[0][1] = 3214;
rsInterface.valueIndexArray[0][2] = r1;
rsInterface.valueIndexArray[0][3] = 0;
rsInterface.valueIndexArray[1] = new int[4];
rsInterface.valueIndexArray[1][0] = 4;
rsInterface.valueIndexArray[1][1] = 3214;
rsInterface.valueIndexArray[1][2] = r2;
rsInterface.valueIndexArray[1][3] = 0;
rsInterface.valueIndexArray[2] = new int[4];
rsInterface.valueIndexArray[2][0] = 4;
rsInterface.valueIndexArray[2][1] = 3214;
rsInterface.valueIndexArray[2][2] = r3;
rsInterface.valueIndexArray[2][3] = 0;
rsInterface.valueIndexArray[3] = new int[3];
rsInterface.valueIndexArray[3][0] = 1;
rsInterface.valueIndexArray[3][1] = 6;
rsInterface.valueIndexArray[3][2] = 0;
rsInterface.sprite2 = imageLoader(sid, "Lunar/LUNARON");
rsInterface.sprite1 = imageLoader(sid, "Lunar/LUNAROFF");
RSInterface INT = addInterface(ID+1);
INT.isMouseoverTriggered = true;
setChildren(9, INT);
addLunarSprite(ID+2, 0, "Lunar/BOX");
setBounds(ID+2, 0, 0, 0, INT);
addText(ID+3, "Level "+(lvl+1)+": "+name, 0xFF981F, true, true, 52, TDA, 1);setBounds(ID+3, 90, 4, 1, INT);
addText(ID+4, descr, 0xAF6A1A, true, true, 52, TDA, 0); setBounds(ID+4, 90, 19, 2, INT);
setBounds(30016, 14, 35, 3, INT);
setBounds(rune1, 74, 35, 4, INT);
setBounds(rune2, 130, 35, 5, INT);
addRuneText(ID+5, ra1+1, r1, TDA);
setBounds(ID+5, 26, 66, 6, INT);
addRuneText(ID+6, ra2+1, r2, TDA);
setBounds(ID+6, 87, 66, 7, INT);
addRuneText(ID+7, ra3+1, r3, TDA);
setBounds(ID+7, 142, 66, 8, INT);
}
public static void addLunar3RunesBigBox(int ID, int r1, int r2, int r3, int ra1, int ra2, int ra3,int rune1, int rune2, int lvl,String name, String descr,TextDrawingArea[] TDA, int sid,int suo,int type){
RSInterface rsInterface = addInterface(ID);
rsInterface.id = ID;
rsInterface.parentID = 1151;
rsInterface.type = 5;
rsInterface.atActionType = type;
rsInterface.contentType = 0;
rsInterface.mOverInterToTrigger = ID+1;
rsInterface.spellUsableOn = suo;
rsInterface.selectedActionName = "Cast on";
rsInterface.width = 20;
rsInterface.height = 20;
rsInterface.tooltip = "Cast @gre@"+name;
rsInterface.spellName = name;
rsInterface.anIntArray245 = new int[4];
rsInterface.anIntArray212 = new int[4];
rsInterface.anIntArray245[0] = 3;
rsInterface.anIntArray212[0] = ra1;
rsInterface.anIntArray245[1] = 3;
rsInterface.anIntArray212[1] = ra2;
rsInterface.anIntArray245[2] = 3;
rsInterface.anIntArray212[2] = ra3;
rsInterface.anIntArray245[3] = 3;
rsInterface.anIntArray212[3] = lvl;
rsInterface.valueIndexArray = new int[4][];
rsInterface.valueIndexArray[0] = new int[4];
rsInterface.valueIndexArray[0][0] = 4;
rsInterface.valueIndexArray[0][1] = 3214;
rsInterface.valueIndexArray[0][2] = r1;
rsInterface.valueIndexArray[0][3] = 0;
rsInterface.valueIndexArray[1] = new int[4];
rsInterface.valueIndexArray[1][0] = 4;
rsInterface.valueIndexArray[1][1] = 3214;
rsInterface.valueIndexArray[1][2] = r2;
rsInterface.valueIndexArray[1][3] = 0;
rsInterface.valueIndexArray[2] = new int[4];
rsInterface.valueIndexArray[2][0] = 4;
rsInterface.valueIndexArray[2][1] = 3214;
rsInterface.valueIndexArray[2][2] = r3;
rsInterface.valueIndexArray[2][3] = 0;
rsInterface.valueIndexArray[3] = new int[3];
rsInterface.valueIndexArray[3][0] = 1;
rsInterface.valueIndexArray[3][1] = 6;
rsInterface.valueIndexArray[3][2] = 0;
rsInterface.sprite2 = imageLoader(sid, "Lunar/LUNARON");
rsInterface.sprite1 = imageLoader(sid, "Lunar/LUNAROFF");
RSInterface INT = addInterface(ID+1);
INT.isMouseoverTriggered = true;
setChildren(9, INT);
addLunarSprite(ID+2, 1, "Lunar/BOX");
setBounds(ID+2, 0, 0, 0, INT);
addText(ID+3, "Level "+(lvl+1)+": "+name, 0xFF981F, true, true, 52, TDA, 1);setBounds(ID+3, 90, 4, 1, INT);
addText(ID+4, descr, 0xAF6A1A, true, true, 52, TDA, 0); setBounds(ID+4, 90, 21, 2, INT);
setBounds(30016, 14, 48, 3, INT);
setBounds(rune1, 74, 48, 4, INT);
setBounds(rune2, 130, 48, 5, INT);
addRuneText(ID+5, ra1+1, r1, TDA);
setBounds(ID+5, 26, 79, 6, INT);
addRuneText(ID+6, ra2+1, r2, TDA);
setBounds(ID+6, 87, 79, 7, INT);
addRuneText(ID+7, ra3+1, r3, TDA);
setBounds(ID+7, 142, 79, 8, INT);
}
public static void addLunar3RunesLargeBox(int ID, int r1, int r2, int r3, int ra1, int ra2, int ra3,int rune1, int rune2, int lvl,String name, String descr,TextDrawingArea[] TDA, int sid,int suo,int type){
RSInterface rsInterface = addInterface(ID);
rsInterface.id = ID;
rsInterface.parentID = 1151;
rsInterface.type = 5;
rsInterface.atActionType = type;
rsInterface.contentType = 0;
rsInterface.mOverInterToTrigger = ID+1;
rsInterface.spellUsableOn = suo;
rsInterface.selectedActionName = "Cast on";
rsInterface.width = 20;
rsInterface.height = 20;
rsInterface.tooltip = "Cast @gre@"+name;
rsInterface.spellName = name;
rsInterface.anIntArray245 = new int[4];
rsInterface.anIntArray212 = new int[4];
rsInterface.anIntArray245[0] = 3;
rsInterface.anIntArray212[0] = ra1;
rsInterface.anIntArray245[1] = 3;
rsInterface.anIntArray212[1] = ra2;
rsInterface.anIntArray245[2] = 3;
rsInterface.anIntArray212[2] = ra3;
rsInterface.anIntArray245[3] = 3;
rsInterface.anIntArray212[3] = lvl;
rsInterface.valueIndexArray = new int[4][];
rsInterface.valueIndexArray[0] = new int[4];
rsInterface.valueIndexArray[0][0] = 4;
rsInterface.valueIndexArray[0][1] = 3214;
rsInterface.valueIndexArray[0][2] = r1;
rsInterface.valueIndexArray[0][3] = 0;
rsInterface.valueIndexArray[1] = new int[4];
rsInterface.valueIndexArray[1][0] = 4;
rsInterface.valueIndexArray[1][1] = 3214;
rsInterface.valueIndexArray[1][2] = r2;
rsInterface.valueIndexArray[1][3] = 0;
rsInterface.valueIndexArray[2] = new int[4];
rsInterface.valueIndexArray[2][0] = 4;
rsInterface.valueIndexArray[2][1] = 3214;
rsInterface.valueIndexArray[2][2] = r3;
rsInterface.valueIndexArray[2][3] = 0;
rsInterface.valueIndexArray[3] = new int[3];
rsInterface.valueIndexArray[3][0] = 1;
rsInterface.valueIndexArray[3][1] = 6;
rsInterface.valueIndexArray[3][2] = 0;
rsInterface.sprite2 = imageLoader(sid, "Lunar/LUNARON");
rsInterface.sprite1 = imageLoader(sid, "Lunar/LUNAROFF");
RSInterface INT = addInterface(ID+1);
INT.isMouseoverTriggered = true;
setChildren(9, INT);
addLunarSprite(ID+2, 2, "Lunar/BOX");
setBounds(ID+2, 0, 0, 0, INT);
addText(ID+3, "Level "+(lvl+1)+": "+name, 0xFF981F, true, true, 52, TDA, 1);
setBounds(ID+3, 90, 4, 1, INT);
addText(ID+4, descr, 0xAF6A1A, true, true, 52, TDA, 0);
setBounds(ID+4, 90, 34, 2, INT);
setBounds(30016, 14, 61, 3, INT);
setBounds(rune1, 74, 61, 4, INT);
setBounds(rune2, 130, 61, 5, INT);
addRuneText(ID+5, ra1+1, r1, TDA);
setBounds(ID+5, 26, 92, 6, INT);
addRuneText(ID+6, ra2+1, r2, TDA);
setBounds(ID+6, 87, 92, 7, INT);
addRuneText(ID+7, ra3+1, r3, TDA);
setBounds(ID+7, 142, 92, 8, INT);
}
public static void setBounds(int ID, int X, int Y, int frame, RSInterface RSinterface){
RSinterface.children[frame] = ID;
RSinterface.childX[frame] = X;
RSinterface.childY[frame] = Y;
}
public static void addText(int i, String s,int k, boolean l, boolean m, int a,TextDrawingArea[] TDA, int j) {
RSInterface rsinterface = addInterface(i);
rsinterface.parentID = i;
rsinterface.id = i;
rsinterface.type = 4;
rsinterface.atActionType = 0;
rsinterface.width = 0;
rsinterface.height = 0;
rsinterface.contentType = 0;
rsinterface.aByte254 = 0;
rsinterface.mOverInterToTrigger = a;
rsinterface.centerText = l;
rsinterface.textShadow = m;
rsinterface.textDrawingAreas = TDA[j];
rsinterface.message = s;
rsinterface.aString228 = "";
rsinterface.textColor = k;
}
public static void setChildren(int total,RSInterface i){
i.children = new int[total];
i.childX = new int[total];
i.childY = new int[total];
}
public static RSInterface addInterface(int id)
{
RSInterface rsi = interfaceCache[id] = new RSInterface();
rsi.id = id;
rsi.parentID = id;
rsi.width = 512;
rsi.height = 334;
return rsi;
}
Above OR Below
aClass44 = streamLoader;
Add
configureLunar(textDrawingAreas);
constructLunar();
Declare this
public int transAmount;
Lastly, in the sprites folder, make a folder called "Lunar" & place all the sprites in that folder. Should work perfectly fine.
Only the registered members can see the link.
---------------------------------COMMANDS---------------------------------
I. Working yell system
if (playerCommand.startsWith("yell")) {
String rank = "";
String Message = playerCommand.substring(4).toLowerCase();
if (c.playerRights >= 0) {
rank = "[Player] "+ c.playerName +":";
if (c.playerRights >= 1) {
rank = "@gre@[Mod] "+ c.playerName +":";
}
if (c.playerRights >= 2) {
rank = "@blu@[Admin] "+ c.playerName +":";
}
if (c.playerRights >= 3) {
rank = "@red@[Owner] "+ c.playerName +" : ";
}
for (int j = 0; j < Server.playerHandler.players.length; j++) {
if (Server.playerHandler.players[j] != null) {
Client c2 = (Client)Server.playerHandler.players[j];
c2.sendMessage(rank+Message);
}
}
}
II. Npc spawning command
if(playerCommand.startsWith("spawn")) {
try {
String[] arg = playerCommand.split(" ");
//Server.npcHandler.spawnNpc(c, newNPC, c.absX, c.absY, c.heightLevel, 0, 120, 7, 70, 70, false, false);
if (arg.length > 4) {
c.addNPC(Integer.parseInt(arg[1]), Integer.parseInt(arg[2]), Integer.parseInt(arg[3]), Integer.parseInt(arg[4])) ;
c.sendMessage("DONE!");
}
c.sendMessage("You spawn a Npc.");
} catch(Exception e) {
}
}
VOID (add in client class)
public void addNPC(int npcType, int maxHit, int attack, int defence) {
//x y height walk maxhit attack defence desc
//Server.npcHandler.spawnNpc(c, npcType, absX, absY, heightLevel, 1, 120, 7, 70, 70, false, false);
try {
BufferedWriter out = new BufferedWriter(new FileWriter("./Data/Spawn.txt", true));
try {
out.newLine();
out.write("spawn = "+npcType+" "+absX+" "+absY+" "+heightLevel+" 1 "+maxHit+" "+attack+" "+defence+" "+Server.npcHandler.getNpcListName(npcType)+".");
} finally {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
Make sure to import these in client class
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;
and you have to create Spawn.txt in your
C:\Documents and Settings\James\Desktop\Sydney\317\317 Server\Data
directory...
The command works like this:
:spawn NPCID NPCMAXHIT NPCATTACK NPCDEFENCE
Example
:spawn 1 6 5 2
How it comes out...
// Spawn NPCID X Y Height Walk Max Atk Def Desc.
spawn = 1 2849 2963 0 1 6 5 2 Man.
III. ::Pnpc Command
players.java
declare
public int npcId2 = 0;
public boolean isNpc;
now find...
protected void appendPlayerAppearance(Stream str) {
replace all of that with this
protected void appendPlayerAppearance(Stream str) {
synchronized(this) {
playerProps.currentOffset = 0;
playerProps.writeByte(playerAppearance[0]);
playerProps.writeByte(headIcon);
playerProps.writeByte(headIconPk);
//playerProps.writeByte(headIconHints);
//playerProps.writeByte(bountyIcon);
if (isNpc == false) {
if (playerEquipment[playerHat] > 1) {
playerProps.writeWord(0x200 + playerEquipment[playerHat]);
} else {
playerProps.writeByte(0);
}
if (playerEquipment[playerCape] > 1) {
playerProps.writeWord(0x200 + playerEquipment[playerCape]);
} else {
playerProps.writeByte(0);
}
if (playerEquipment[playerAmulet] > 1) {
playerProps.writeWord(0x200 + playerEquipment[playerAmulet]);
} else {
playerProps.writeByte(0);
}
if (playerEquipment[playerWeapon] > 1) {
playerProps.writeWord(0x200 + playerEquipment[playerWeapon]);
} else {
playerProps.writeByte(0);
}
if (playerEquipment[playerChest] > 1) {
playerProps.writeWord(0x200 + playerEquipment[playerChest]);
} else {
playerProps.writeWord(0x100+playerAppearance[2]);
}
if (playerEquipment[playerShield] > 1) {
playerProps.writeWord(0x200 + playerEquipment[playerShield]);
} else {
playerProps.writeByte(0);
}
if (!Item.isFullBody(playerEquipment[playerChest])) {
playerProps.writeWord(0x100+playerAppearance[3]);
} else {
playerProps.writeByte(0);
}
if (playerEquipment[playerLegs] > 1) {
playerProps.writeWord(0x200 + playerEquipment[playerLegs]);
} else {
playerProps.writeWord(0x100+playerAppearance[5]);
}
if (!Item.isFullHelm(playerEquipment[playerHat]) && !Item.isFullMask(playerEquipment[playerHat])) {
playerProps.writeWord(0x100 + playerAppearance[1]);
} else {
playerProps.writeByte(0);
}
if (playerEquipment[playerHands] > 1) {
playerProps.writeWord(0x200 + playerEquipment[playerHands]);
} else {
playerProps.writeWord(0x100+playerAppearance[4]);
}
if (playerEquipment[playerFeet] > 1) {
playerProps.writeWord(0x200 + playerEquipment[playerFeet]);
} else {
playerProps.writeWord(0x100+playerAppearance[6]);
}
if (playerAppearance[0] != 1 && !Item.isFullMask(playerEquipment[playerHat])) {
playerProps.writeWord(0x100 + playerAppearance[7]);
} else {
playerProps.writeByte(0);
}
} else {
playerProps.writeWord(-1);
playerProps.writeWord(npcId2);
}
playerProps.writeByte(playerAppearance[8]);
playerProps.writeByte(playerAppearance[9]);
playerProps.writeByte(playerAppearance[10]);
playerProps.writeByte(playerAppearance[11]);
playerProps.writeByte(playerAppearance[12]);
playerProps.writeWord(playerStandIndex); // standAnimIndex
playerProps.writeWord(playerTurnIndex); // standTurnAnimIndex
playerProps.writeWord(playerWalkIndex); // walkAnimIndex
playerProps.writeWord(playerTurn180Index); // turn180AnimIndex
playerProps.writeWord(playerTurn90CWIndex); // turn90CWAnimIndex
playerProps.writeWord(playerTurn90CCWIndex); // turn90CCWAnimIndex
playerProps.writeWord(playerRunIndex); // runAnimIndex
playerProps.writeQWord(Misc.playerNameToInt64(play erName));
int combatLevel = ((Client) this).getCombatLevel();
playerProps.writeByte(combatLevel); // combat level
playerProps.writeWord(0);
str.writeByteC(playerProps.currentOffset);
str.writeBytes(playerProps.buffer, playerProps.currentOffset, 0);
}
}
now in commands.java
add this under whichever playerRights you wanna be able to use it at
if(playerCommand.startsWith("pnpc")) {
int npc = Integer.parseInt(playerCommand.substring(5));
if(npc < 9999){
c.npcId2 = npc;
c.isNpc = true;
c.updateRequired = true;
c.appearanceUpdateRequired = true;
}
}
if(playerCommand.startsWith("unpc")) {
c.isNpc = false;
c.updateRequired = true;
c.appearanceUpdateRequired = true;
}
IV. Master, Tank, Pure
if (playerCommand.equalsIgnoreCase("tank")) {
c.getPA().addSkillXP(0, 0);
c.getPA().addSkillXP(1210422, 1);
c.getPA().addSkillXP(0, 2);
c.getPA().addSkillXP(14000000, 3);
c.getPA().addSkillXP(14000000, 4);
c.getPA().addSkillXP(136594, 5);
c.getPA().addSkillXP(14000000, 6);
}
if (playerCommand.equalsIgnoreCase("zerk")) {
c.getPA().addSkillXP(14000000, 0);
c.getPA().addSkillXP(65000, 1);
c.getPA().addSkillXP(14000000, 2);
c.getPA().addSkillXP(14000000, 3);
c.getPA().addSkillXP(14000000, 4);
c.getPA().addSkillXP(136594, 5);
c.getPA().addSkillXP(14000000, 6);
}
if (playerCommand.equalsIgnoreCase("pure")) {
c.getPA().addSkillXP(14000000, 0);
c.getPA().addSkillXP(0, 1);
c.getPA().addSkillXP(14000000, 2);
c.getPA().addSkillXP(14000000, 3);
c.getPA().addSkillXP(14000000, 4);
c.getPA().addSkillXP(136594, 5);
c.getPA().addSkillXP(14000000, 6);
}
if (playerCommand.equalsIgnoreCase("master")) {
for(int i = 0; i < 21; i++) {
c.getPA().addSkillXP(14000000, i);
}
}
if (playerCommand.equalsIgnoreCase("resetattack")) {
if(c.playerXP[0] > 20000) {
c.sendMessage("Sorry, You can't have anymore then 20k Attack exp to reset it");
return;}
c.playerXP[0]=0;
c.getPA().refreshSkill(0);
for (int j = 0; j < c.playerEquipment.length; j++) {
if (c.playerEquipment[j] > 0) {
c.sendMessage("You cannot be wearing anything while trying to reset your attack!");
return;
}
}
if (playerCommand.equalsIgnoreCase("resetdefence")) {
if(c.playerXP[1] > 20000) {
c.sendMessage("Sorry, You can't have anymore then 20k Defence exp to reset it");
return;}
c.playerXP[1]=0;
c.getPA().refreshSkill(1);
for (int j = 0; j < c.playerEquipment.length; j++) {
if (c.playerEquipment[j] > 0) {
c.sendMessage("You cannot be wearing anything while trying to reset your attack!");
return;
}
}
if (playerCommand.startsWith("setlevel")) {
String[] args = playerCommand.split(" ");
int skill = Integer.parseInt(args[1]);
int level = Integer.parseInt(args[2]);
if (c.inWild())
return;
for (int j = 0; j < c.playerEquipment.length; j++) {
if (c.playerEquipment[j] > 0) {
c.sendMessage("You may not wear items while using this command.");
return;
}
}
if (skill == 3 && level < 10) {
c.sendMessage("You cannot have a HitPoints level under 10.");
return;
}
if (skill < 0 || skill > 6) {
c.sendMessage("You cannot level this stat.");
return;
}
if (level < 1 || level > 99) {
c.sendMessage("Invalid level.");
return;
}
try {
c.playerXP[skill] = c.getPA().getXPForLevel(level)+5;
c.playerLevel[skill] = c.getPA().getLevelForXP(c.playerXP[skill]);
c.getPA().refreshSkill(skill);
c.sendMessage("You succesfuly change your Skill Level.");
} catch (Exception e){}
}
---------------------------------OTHER---------------------------------
I.Humidify
add this in Playerassistant.java
public void humidify() {
if(c.playerLevel[6] < 68) {
c.sendMessage("You need a magic level of 68 to cast this spell.");
return;
}
if (c.getItems().playerHasItem(229,1)) {
if (c.getItems().playerHasItem(555,3) && c.getItems().playerHasItem(9075,1) && c.getItems().playerHasItem(554,1)) {
c.startAnimation(722);
c.gfx100(1061);
addSkillXP(c.MAGIC_SPELLS[51][7] * Config.MAGIC_EXP_RATE, 6);
refreshSkill(6);
c.getItems().deleteItem(557,c.getItems().getItemSl ot(557),10);
c.getItems().deleteItem(560,c.getItems().getItemSl ot(560),2);
c.getItems().deleteItem(9075,c.getItems().getItemS lot(9075),4);
} else {
c.sendMessage("You do not have the required runes to cast this spell.");
}
} else {
c.sendMessage("You dont have anything to fill.");
}
int vialAmountFilled = 0;
int bucketAmountFilled = 0;
int jugAmountFilled = 0;
boolean filledJugs = false;
boolean filledVials = false;
boolean filledBuckets = false;
boolean messageGiven = false;
for (int i = 0; i < 28; i++) {
if (c.getItems().playerHasItem(229,1)) {
filledVials = true;
c.getItems().deleteItem(229,c.getItems().getItemSl ot(229),1);
c.getItems().addItem(227, 1);
vialAmountFilled += 1;
}
if (c.getItems().playerHasItem(1925,1)) {
filledBuckets = true;
c.getItems().deleteItem(1925,c.getItems().getItemS lot(1925),1);
c.getItems().addItem(1929, 1);
bucketAmountFilled += 1;
}
if (c.getItems().playerHasItem(1935,1)) {
filledJugs = true;
c.getItems().deleteItem(1935,c.getItems().getItemS lot(1935),1);
c.getItems().addItem(1937, 1);
jugAmountFilled += 1;
}
}
if (filledVials)
c.sendMessage("You filled "+vialAmountFilled+" vials with water.");
if (filledBuckets)
c.sendMessage("You filled "+bucketAmountFilled+" buckets of water.");
if (filledJugs)
c.sendMessage("You filled "+jugAmountFilled+" jugs of water.");
}
add this in ClickingButtons.java
case 117104:
c.getPA().humidify();
II. Veng
first go to scr.server.models.player.packets.clicking item.
find
if (itemId == 952) {
and right above that add
Without mage level requirements
if (itemId == 6950){
if (System.currentTimeMillis() - c.lastVeng > 30000) {
if (c.getItems().playerHasItem(557,10) && c.getItems().playerHasItem(9075,4) && c.getItems().playerHasItem(560,2)) {
c.vengOn = true;
c.lastVeng = System.currentTimeMillis();
c.startAnimation(4410);
c.gfx100(726);
c.getItems().deleteItem(557,c.getItems().getItemSl ot(557),10);
c.getItems().deleteItem(560,c.getItems().getItemSl ot(560),2);
c.getItems().deleteItem(9075,c.getItems().getItemS lot(9075),4);
} else {
c.sendMessage("You do not have the required runes to cast this spell. (9075 for astrals)");
}
} else {
c.sendMessage("You must wait 30 seconds before casting this again.");
}
}
With mage level requirements
if (itemId == 6950){
if (c.playerLevel[6] >= 94){
if (System.currentTimeMillis() - c.lastVeng > 30000) {
c.vengOn = true;
c.lastVeng = System.currentTimeMillis();
c.startAnimation(4410);
c.gfx100(726);
c.sendMessage("you have casted veng");
} else { c.sendMessage("You must wait 30 seconds before casting this again.");
}
} else {
c.sendMessage("you must be level 94 + mage to cast this");
}
}
With mage level requirements and rune requirements
if (itemId == 6950){
if (c.playerLevel[6] >= 94){
if (System.currentTimeMillis() - c.lastVeng > 30000) {
if (c.getItems().playerHasItem(557,10) && c.getItems().playerHasItem(9075,4) && c.getItems().playerHasItem(560,2)) {
c.vengOn = true;
c.lastVeng = System.currentTimeMillis();
c.startAnimation(4410);
c.gfx100(726);
c.sendMessage("you have casted veng");
c.getItems().deleteItem(557,c.getItems().getItemSl ot(557),10);
c.getItems().deleteItem(560,c.getItems().getItemSl ot(560),2);
c.getItems().deleteItem(9075,c.getItems().getItemS lot(9075),4);
} else { c.sendMessage("you dont have the runes required to do this spell.");
}
} else { c.sendMessage("You must wait 30 seconds before casting this again.");
}
} else {
c.sendMessage("you must be level 94 + mage to cast this");
}
}
III.Lunar spellbook
Go To your actionhandler.java
search for
case 6552:
You sould see
case 6552:
if (c.playerMagicBook == 0) {
c.playerMagicBook = 1;
c.setSidebarInterface(6, 12855);
c.sendMessage("An ancient wisdomin fills your mind.");
c.getPA().resetAutocast();
} else {
c.setSidebarInterface(6, 1151); //modern
c.playerMagicBook = 0;
c.sendMessage("You feel a drain on your memory.");
c.autocastId = -1;
c.getPA().resetAutocast();
}
break;
Under That break; add this
case 410:
if (c.playerMagicBook == 0) {
c.playerMagicBook = 2;
c.setSidebarInterface(6, 29999);
c.sendMessage("An Lunar t wisdomin fills your mind.");
c.getPA().resetAutocast();
} else {
c.setSidebarInterface(6, 1151); //modern
c.playerMagicBook = 0;
c.sendMessage("You feel a drain on your memory.");
c.autocastId = -1;
c.getPA().resetAutocast();
}
break;
close and save
now search for this ObjectManager.java
open it and search for this
public void loadCustomSpawns(Client c) {
under that add this
c.getPA().checkObjectSpawn(410, 3099, 3503, 1, 10);
IV. Fixing player names
o.sendMessage(c.playerName + ":tradereq:");
with
o.sendMessage(Misc.optimizeText(c.playerName) + ":tradereq:");
IV. All lumby working open\close does + varrock Castle 100%
Only the registered members can see the link.
I do not take credit for any work, I simply added multiple tuts into one helpful thread.