85 lines
2.1 KiB
Java
85 lines
2.1 KiB
Java
package server.minigame;
|
|
|
|
import client.Client;
|
|
import client.inventory.Item;
|
|
import client.inventory.manipulator.InventoryManipulator;
|
|
import tools.PacketCreator;
|
|
import tools.Randomizer;
|
|
|
|
/**
|
|
* @Author Arnah
|
|
* @Website http://Vertisy.ca/
|
|
* @since Aug 15, 2016
|
|
*/
|
|
public class MapleRockPaperScissor{
|
|
|
|
private int round = 0;
|
|
private boolean ableAnswer = true;
|
|
private boolean win = false;
|
|
|
|
public MapleRockPaperScissor(final Client c, final byte mode){
|
|
c.sendPacket(PacketCreator.rpsMode((byte) (9 + mode)));
|
|
if(mode == 0){
|
|
c.getPlayer().gainMeso(-1000, true, true, true);
|
|
}
|
|
}
|
|
|
|
public final boolean answer(final Client c, final int answer){
|
|
if(ableAnswer && !win && answer >= 0 && answer <= 2){
|
|
final int response = Randomizer.nextInt(3);
|
|
if(response == answer){
|
|
c.sendPacket(PacketCreator.rpsSelection((byte) response, (byte) round));
|
|
// dont do anything. they can still answer once a draw
|
|
}else if((answer == 0 && response == 2) || (answer == 1 && response == 0) || (answer == 2 && response == 1)){ // they win
|
|
c.sendPacket(PacketCreator.rpsSelection((byte) response, (byte) (round + 1)));
|
|
ableAnswer = false;
|
|
win = true;
|
|
}else{ // they lose
|
|
c.sendPacket(PacketCreator.rpsSelection((byte) response, (byte) -1));
|
|
ableAnswer = false;
|
|
}
|
|
return true;
|
|
}
|
|
reward(c);
|
|
return false;
|
|
}
|
|
|
|
public final boolean timeOut(final Client c){
|
|
if(ableAnswer && !win){
|
|
ableAnswer = false;
|
|
c.sendPacket(PacketCreator.rpsMode((byte) 0x0A));
|
|
return true;
|
|
}
|
|
reward(c);
|
|
return false;
|
|
}
|
|
|
|
public final boolean nextRound(final Client c){
|
|
if(win){
|
|
round++;
|
|
if(round < 10){
|
|
win = false;
|
|
ableAnswer = true;
|
|
c.sendPacket(PacketCreator.rpsMode((byte) 0x0C));
|
|
return true;
|
|
} else {
|
|
round = 10;
|
|
}
|
|
}
|
|
reward(c);
|
|
return false;
|
|
}
|
|
|
|
public final void reward(final Client c){
|
|
if(win){
|
|
InventoryManipulator.addFromDrop(c, new Item(4031332 + round, (short) 0, (short) 1), true);
|
|
}
|
|
c.getPlayer().setRPS(null);
|
|
}
|
|
|
|
public final void dispose(final Client c){
|
|
reward(c);
|
|
c.sendPacket(PacketCreator.rpsMode((byte) 0x0D));
|
|
}
|
|
}
|