When a player enters a/the region, he'll be assigned a player (which he must then kill, like Bounty Hunter). If the player doesn't kill the other player within 40 seconds, the player is then teleported back to the default coordinates.
It's pretty much a basic skeleton: a lot of work needs to be done, and I haven't even tested it. You'll also need to add the integers etcetera yourself (hence it's a snippet).
Code:
package server.model.content.minigames;
import java.util.ArrayList;
import java.util.List;
import server.Server;
import server.core.World;
import server.core.tick.Tick;
import server.model.players.Client;
import server.util.Misc;
/**
* According to Deadly Uzi, over-documentation creates bigger java files, delete the documenation if you wish.
* Thread: http://www.rune-server.ee/runescape-development/rs2-server/informative-threads/396345-note-documentation.html
*
* @author Rhubarb
*
*/
public class PlayerDown {
/**
* Create our arraylist for the minigame.
*/
public static List<Integer> enter = new ArrayList<Integer> ();
/**
* Enter the minigame (enterRegion).
* @param c
* @param cave
*/
public void enterRegion(Client c, int cave) {
if(!playerRequirements(c)) {
return;
}
switch (cave) {
case 0:
if(c.combatLevel < 40) {
c.sendMessage("You need a combat level of 40 to enter Player Down.");
break;
}
/**
* Adds the player to the minigame.
*/
gameAccepted(c);
timer(c);
PlayerDown.enter.add(c.playerId);
break;
}
}
/**
* Gets the players requirements to start the minigame.
* @param c
* @return
*/
private boolean playerRequirements(Client c) {
if(!c.getItems().playerHasItem(995, 1000000)) {
c.sendMessage("You need 1,000000 coins to start this minigame.");
return false;
}
return true;
}
/**
* Accepts the game and teleports them to the following LOCATION {X, Y};
* @param c
*/
public void gameAccepted(final Client c) {
final int[][] LOCATION = {
{0, 0},
};
int coord = Misc.random(LOCATION.length);
final int x = coord;
/**
* Execution method for the array LOCATION.
*/
World.getWorld().submit(new Tick(4) {
@Override
public void execute() {
c.teleportToX = LOCATION[x][0];
c.teleportToY = LOCATION[x][1];
c.heightLevel = 0;
c.getPA().requestUpdates();
this.stop();
}
/**
* Stop submitted tasks here.
*/
@Override
public void stop() {
}
});
//save here
}
/**
* Changes opponent and moves player if they didn't kill them.
* @param c
*/
public void chooseOpponent(Client c) {
if(Server.region.enter.contains(c.playerId)) {
if(Server.region.enter.size() <= 1) {
c.sendMessage("There's no one here, target selected soon.");
return;
}
}
if(c.opponentTarget > 0) {
Client target = (Client) Server.playerHandler.players[c.opponentTarget];
String targetUser = Misc.formatPlayerName(target.playerName);
c.sendMessage("Kill player "+ targetUser +".");
c.getPA().createPlayerHints(10, c.opponentTarget);
}
if(Server.region.enter.contains(c.playerId)) {
c.region = Server.region.enter.get(Misc.random(Server.region.enter.size()));
}
}
/**
* 40 second timer delay. Wouldn't use currentTimeMillis, maybe a new execution.
* @param c
* @return
*/
public boolean timer(Client c) {
if (System.currentTimeMillis() - c.timerDelay >= 40000 && c.playerDead == true) {
c.timerDelay = System.currentTimeMillis();
c.getPA().movePlayer(0, 0, 0);
System.out.println("You didn't kill your target, therefore you've been teleported away.");
return true;
}
return false;
}
}
Also I've taken the liberty to retrieve accurate range special(s):
Code:
/**
* Lucky lightning range special.
*/
case 9236:
createCombatGFX(c, i, 749, false);
c.crossbowDamage = 1.25;
break;
/**
* Earth's fury range special.
*/
case 9237:
createCombatGFX(c, i, 755, false);
break;
/**
* Sea curse range special.
*/
case 9238:
createCombatGFX(c, i, 750, false);
c.crossbowDamage = 1.10;
break;
/**
* Down to earth range special.
*/
case 9239:
createCombatGFX(c, i, 757, false);
if(c.playerIndex > 0) {
p.playerLevel[6] -= 2;
p.getPA().refreshSkill(6);
p.sendMessage("Your magic has been lowered!");
}
break;
/**
* Clear mind range special.
*/
case 9240:
createCombatGFX(c, i, 751, false);
if(c.playerIndex > 0) {
p.playerLevel[5] -= 2;
p.getPA().refreshSkill(5);
p.sendMessage("Your prayer has been lowered!");
c.playerLevel[5] += 2;
if(c.playerLevel[5] >= c.getPA().getLevelForXP(c.playerXP[5])) {
c.playerLevel[5] = c.getPA().getLevelForXP(c.playerXP[5]);
}
c.getPA().refreshSkill(5);
}
break;
/**
* Magical posion range special.
*/
case 9241:
createCombatGFX(c, i, 752, false);
if(c.playerIndex > 0) {
p.getPA().appendPoison(6);
}
break;
/**
* Blood forfit range special.
*/
case 9242:
createCombatGFX(c, i, 754, false);
if(c.playerLevel[3] - c.playerLevel[3]/20 < 1) {
break;
}
c.handleHitMask(c.playerLevel[3]/20);
c.dealDamage(c.playerLevel[3]/20);
if(c.npcIndex > 0) {
n.handleHitMask(n.HP/10);
n.dealDamage(n.HP/10);
} else if(c.playerIndex > 0) {
p.handleHitMask(c.playerLevel[3]/10);
p.dealDamage(c.playerLevel[3]/10);
}
break;
/**
* Armour piercing range special.
*/
case 9243:
createCombatGFX(c, i, 758, true);
c.crossbowDamage = 1.15;
c.ignoreDefence = true;
break;
/**
* Dragon's breah range special.
*/
case 9244:
createCombatGFX(c, i, 756, false);
if(c.playerEquipment[c.playerShield] != 1540 || c.playerEquipment[c.playerShield] != 11283
|| c.playerEquipment[c.playerShield] != 11284) {
c.crossbowDamage = 1.45;
}
break;
/**
* Life leech range special.
*/
case 9245:
createCombatGFX(c, i, 753, false);
c.crossbowDamage = 1.15;
c.playerLevel[3] += c.boltDamage/25;
if(c.playerLevel[3] >= 112) {
c.playerLevel[3] = 112;
}
c.getPA().refreshSkill(3);
break;
Best to add in a switch-statement, like I did.
Over documentation thread: [Only registered and activated users can see links. ]
[Only registered and activated users can see links. ] [Only registered and activated users can see links. ] [Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
Originally Posted by UberNation
Did you update the quantum network sockets to match the polarity of the wilderness counter levels in the Boolean that divides the wilderness level by zero?