package client;
import server.MapleInventoryManipulator;
import server.Randomizer;
import tools.packet.CField;
public class RockPaperScissors {
private int round = 0;
private boolean ableAnswer = true;
private boolean win = false;
public RockPaperScissors(final MapleClient c, final byte mode) {
c.getSession().write(CField.getRPSMode((byte) (0x09 + mode), -1, -1, -1));
if (mode == 0) {
c.getPlayer().gainMeso(-1000, true, true);
}
}
public final boolean answer(final MapleClient c, final int answer) {
if (ableAnswer && !win && answer >= 0 && answer <= 2) {
final int response = Randomizer.nextInt(3);
if (response == answer) {
c.getSession().write(CField.getRPSMode((byte) 0x0B, -1, (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.getSession().write(CField.getRPSMode((byte) 0x0B, -1, (byte) response, (byte) (round + 1)));
ableAnswer = false;
win = true;
} else { //they lose
c.getSession().write(CField.getRPSMode((byte) 0x0B, -1, (byte) response, (byte) -1));
ableAnswer = false;
}
return true;
}
reward(c);
return false;
}
public final boolean timeOut(final MapleClient c) {
if (ableAnswer && !win) {
ableAnswer = false;
c.getSession().write(CField.getRPSMode((byte) 0x0A, -1, -1, -1));
return true;
}
reward(c);
return false;
}
public final boolean nextRound(final MapleClient c) {
if (win) {
round++;
if (round < 10) {
win = false;
ableAnswer = true;
c.getSession().write(CField.getRPSMode((byte) 0x0C, -1, -1, -1));
return true;
}
}
reward(c);
return false;
}
public final void reward(final MapleClient c) {
if (win) {
MapleInventoryManipulator.addById(c, 4031332 + round, (short) 1, "", null, 0, false, "Obtained from rock, paper, scissors");
} else if (round == 0) {
c.getPlayer().gainMeso(500, true, true);
}
c.getPlayer().setRPS(null);
}
public final void dispose(final MapleClient c) {
reward(c);
c.getSession().write(CField.getRPSMode((byte) 0x0D, -1, -1, -1));
}
}