Im new to rune-server, this is my first post and my first tutorial enjoy.
Purpose: To gain a pk point when you kill a player.
Difficulty:2/10 (easy)
Classes Modified: player.java, PlayerVsPlayer.java, NpcPacketHandler.java, and ActionButtonPacketHandler.java.
first go into player.java and add this to all of the other public ints
Code:
/*
*Pk Delay
*/
public int PkDelay;
Then again in player.java find the tick event, it will probably look like "public void tick()" and under the try { add
Code:
if (PkDelay > 0) {
PkDelay--;
}
Your done in player.java now, save it and find PlayerVsPlayer.java in \src\com\rs2hd\content\skills\combat
Find "public void Attack(Player p2) {" and add this anywhere in the void
Code:
if(p.isDead() && !p2.inClanWars() && !p2.AtSoulWars()) {
if (p.PkDelay == 0) {
p2.PkPoints ++;
p.sm("You were killed by "+ p2.getUsername() +".");
p2.sm("You killed "+ p.getUsername() +" and Gained a Pk Point.");
p2.sm("You now have "+ p2.PkPoints +" Pk Points.");
p.resetAttack();
p2.resetAttack();
p.PkDelay = 8;
} else {
p2.sm("You cannot attack this player.");
}
return;
}
if (p2.isDead() && !p.inClanWars() && !p.AtSoulWars()) {
if (p.PkDelay == 0) {
p.PkPoints ++;
p2.sm("You were killed by "+ p.getUsername() +".");
p.sm("You killed "+ p2.getUsername() +" and Gained a Pk Point.");
p.sm("You now have "+ p.PkPoints +" Pk Points.");
p.resetAttack();
p2.resetAttack();
p.potDelay = 8;
} else {
p.sm("You cannot attack this player.");
}
return;
}
Now you have a pk point system but you still need to add a shop, find NpcPacketHandler.java and search for "private void option1" then under the ints add
Code:
if(npc.getId() == 8443) {
p.turnTemporarilyTo(npc);
npc.turnTemporarilyTo(p);
p.getActionSender().sendInterface(583);
p.getActionSender().sendString("<col=01DFD7>You have "+ p.PkPoints +" Pk Points.", 583, 14);
p.getActionSender().sendString("<col=01DFD7>Armadyl Godsword - 30 pk points", 583, 50);
p.getActionSender().sendString("<col=01DFD7>Saradomin Godsword - 25 pk points", 583, 51);
p.getActionSender().sendString("<col=01DFD7>Zamorak Godsword - 25 pk points", 583, 52);
p.getActionSender().sendString("<col=01DFD7>Bandos Godsword - 20 pk points", 583, 53);
p.getActionSender().sendString("<col=01DFD7>Fighter Torso - 45 pk points", 583, 54);
p.getActionSender().sendString("<col=01DFD7>Rune Defender - 35 pk points", 583, 55);
p.getActionSender().sendString("<col=01DFD7>Ava's Accumulator - 30 pk points", 583, 56);
p.getActionSender().sendString("<col=01DFD7>Divine spirit shield - 60 pk points", 583, 57);
p.getActionSender().sendString("<col=01DFD7>Elysian spirit shield - 60 pk points", 583, 58);
p.getActionSender().sendString("<col=01DFD7>Arcane spirit shield - 55 pk points", 583, 59);
p.getActionSender().sendString("<col=01DFD7>Spectral spirit shield - 50 pk points", 583, 71);
p.getActionSender().sendString("<col=01DFD7>Blessed spirit shield - 45 pk points", 583, 60);
p.getActionSender().sendString("<col=01DFD7>Statius's armor set - 75 pk points", 583, 61);
p.getActionSender().sendString("<col=01DFD7>Vesta's armor set - 65 pk points", 583, 62);
p.getActionSender().sendString("<col=01DFD7>Morrigan's armor set - 60 pk points", 583, 64);
p.getActionSender().sendString("<col=01DFD7>Zuriel's armor set - 60 pk points", 583, 63);
p.getActionSender().sendString("<col=01DFD7>PVP weapon set - 80 pk points", 583, 65);
p.getActionSender().sendString("", 583, 70);
p.getActionSender().sendString("", 583, 66);
p.getActionSender().sendString("", 583, 67);
p.getActionSender().sendString("", 583, 68);
p.getActionSender().sendString("", 583, 69);
p.getActionSender().sendString("", 583, 70);
p.getActionSender().sendString("", 583, 73);
p.getActionSender().sendString("", 583, 72);
p.getActionSender().sendString("", 583, 74);
p.getActionSender().sendString("", 583, 75);
p.getActionSender().sendString("", 583, 76);
p.getActionSender().sendString("", 583, 77);
p.getActionSender().sendString("", 583, 78);
p.getActionSender().sendString("", 583, 79);
p.getActionSender().sendString("", 583, 80);
p.getActionSender().sendString("", 583, 81);
}
8443 is lucien he is pretty badass but you can change that to any npc you want.
Now find and open ActionButtonPacketHandler.java and add this
Code:
case 583://pk shop
if (buttonId == 50) {
if (player.PkPoints >= 30) {
player.PkPoints -= 30;
player.getInventory().addItem(11694, 1);
} else {
player.getActionSender().sendMessage("You need 30 Pk points to buy a Armadyl godsword.");
}
}
if (buttonId == 51) {
if (player.PkPoints >= 25) {
player.PkPoints -= 25;
player.getInventory().addItem(11698, 1);
} else {
player.getActionSender().sendMessage("You need 25 Pk points to buy a Saradomin godsword.");
}
}
if (buttonId == 52) {
if (player.PkPoints >= 25) {
player.PkPoints -= 25;
player.getInventory().addItem(11700, 1);
} else {
player.getActionSender().sendMessage("You need 25 Pk points to buy a Zamorak godsword.");
}
}
if (buttonId == 53) {
if (player.PkPoints >= 20) {
player.PkPoints -= 20;
player.getInventory().addItem(11696, 1);
} else {
player.getActionSender().sendMessage("You need 20 Pk points to buy a Bandos godsword.");
}
}
if (buttonId == 54) {
if (player.PkPoints >= 45) {
player.PkPoints -= 45;
player.getInventory().addItem(10551, 1);
} else {
player.getActionSender().sendMessage("You need 45 Pk points to buy a Fighter torso.");
}
}
if (buttonId == 55) {
if (player.PkPoints >= 35) {
player.PkPoints -= 35;
player.getInventory().addItem(8850, 1);
} else {
player.getActionSender().sendMessage("You need 35 Pk points to buy a Rune defender.");
}
}
if (buttonId == 56) {
if (player.PkPoints >= 30) {
player.PkPoints -= 30;
player.getInventory().addItem(10499, 1);
} else {
player.getActionSender().sendMessage("You need 30 Pk points to buy a Ava's accumulator.");
}
}
if (buttonId == 57) {
if (player.PkPoints >= 60) {
player.PkPoints -= 60;
player.getInventory().addItem(13740, 1);
} else {
player.getActionSender().sendMessage("You need 60 Pk points to buy a Divine spirit shield.");
}
}
if (buttonId == 58) {
if (player.PkPoints >= 60) {
player.PkPoints -= 60;
player.getInventory().addItem(13742, 1);
} else {
player.getActionSender().sendMessage("You need 60 Pk points to buy a Elysian spirit shield.");
}
}
if (buttonId == 59) {
if (player.PkPoints >= 55) {
player.PkPoints -= 55;
player.getInventory().addItem(13740, 1);
} else {
player.getActionSender().sendMessage("You need 55 Pk points to buy a Acrane spirit shield.");
}
}
if (buttonId == 71) {
if (player.PkPoints >= 50) {
player.PkPoints -= 50;
player.getInventory().addItem(13744, 1);
} else {
player.getActionSender().sendMessage("You need 50 Pk points to buy a Spectral spirit shield.");
}
}
if (buttonId == 60) {
if (player.PkPoints >= 45) {
player.PkPoints -= 45;
player.getInventory().addItem(13736, 1);
} else {
player.getActionSender().sendMessage("You need 45 Pk points to buy a Blessed spirit shield.");
}
}
if (buttonId == 61) {
if (player.PkPoints >= 75) {
player.PkPoints -= 75;
player.getInventory().addItem(13884, 1);
player.getInventory().addItem(13890, 1);
player.getInventory().addItem(13896, 1);
} else {
player.getActionSender().sendMessage("You need 75 Pk points to buy a Statius armor set.");
}
}
if (buttonId == 62) {
if (player.PkPoints >= 65) {
player.PkPoints -= 65;
player.getInventory().addItem(13887, 1);
player.getInventory().addItem(13893, 1);
} else {
player.getActionSender().sendMessage("You need 65 Pk points to buy vesta's armor set.");
}
}
if (buttonId == 64) {
if (player.PkPoints >= 60) {
player.PkPoints -= 60;
player.getInventory().addItem(13870, 1);
player.getInventory().addItem(13873, 1);
player.getInventory().addItem(13876, 1);
} else {
player.getActionSender().sendMessage("You need 60 Pk points to buy a morrigan's armor set.");
}
}
if (buttonId == 63) {
if (player.PkPoints >= 60) {
player.PkPoints -= 60;
player.getInventory().addItem(13858, 1);
player.getInventory().addItem(13861, 1);
player.getInventory().addItem(13864, 1);
} else {
player.getActionSender().sendMessage("You need 60 Pk points to buy a zuriel's armor set.");
}
}
if (buttonId == 65) {
if (player.PkPoints >= 80) {
player.PkPoints -= 80;
player.getInventory().addItem(13899, 1);
player.getInventory().addItem(13905, 1);
player.getInventory().addItem(13902, 1);
player.getInventory().addItem(13879, 1);
player.getInventory().addItem(13883, 1);
player.getInventory().addItem(13867, 1);
} else {
player.getActionSender().sendMessage("You need 80 Pk points to buy a PVP weapon set.");
}
}
if (buttonId == 70) {
}
if (buttonId == 66) {
}
if (buttonId == 67) {
}
if (buttonId == 68) {
}
if (buttonId == 69) {
}
if (buttonId == 70) {
}
if (buttonId == 73) {
}
if (buttonId == 72) {
}
The blank buttons are just there so you know the order the buttons go in.
Once you have done this save and compile.
You should be done
If you get errors its probably because you don't have a variable defined
Here are some that you might need to add to player.java
Code:
public boolean AtSoulWars() {
if(getLocation().getX() >= 1790 && getLocation().getY() >= 3200 && getLocation().getX() <= 1985 && getLocation().getY() <= 3265) {
return true;
} else {
return false;
}
}
Code:
public boolean inClanWars() {
if(getLocation().getX() >= 2754 && getLocation().getX() <= 2880 && getLocation().getY() >= 5508 && getLocation().getY() <= 5629 || getLocation().getX() >= 2885 && getLocation().getX() <= 2733 && getLocation().getY() >= 5465 && getLocation().getY() <= 5511 || getLocation().getX() >= 3038 && getLocation().getX() <= 3044 && getLocation().getY() >= 3959 && getLocation().getY() <= 3949) {
actionSender.sendPlayerOption("Attack", 1, false);
return true;
} else {
return false;
}
}
or if you have a pkbox that you dont want people gaining pk points in just add a public boolean with the other in player.java and it to what you have in PlayerVsPlayer.java example
Code:
if(p.isDead() && !p2.inClanWars() && !p2.AtSoulWars() && !p2.InPkBox()) {
If you get any other errors i can help you fix it or if you want to add anything to this im happy to help.