mirror of
https://github.com/magefree/mage.git
synced 2025-12-26 13:32:06 -08:00
* Draft improves:
* added additional and improved timing options for pick timeouts (x1.0, x1.5, x2.0, see #8033); * added pick timing info in tables list (info column); * fixed that booster draft starts with wrong pick timeout (#8036);
This commit is contained in:
parent
214b688fdb
commit
400acae0c1
9 changed files with 71 additions and 37 deletions
|
|
@ -17,8 +17,10 @@ public class BoosterDraft extends DraftImpl {
|
|||
|
||||
@Override
|
||||
public void start() {
|
||||
cardNum = 0;
|
||||
while (!isAbort() && boosterNum < numberBoosters) {
|
||||
openBooster();
|
||||
cardNum = 0;
|
||||
while (!isAbort() && pickCards()) {
|
||||
if (boosterNum % 2 == 1) {
|
||||
passLeft();
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.draft;
|
||||
|
||||
import java.util.*;
|
||||
|
|
@ -24,9 +23,8 @@ public abstract class DraftImpl implements Draft {
|
|||
protected List<ExpansionSet> sets;
|
||||
protected List<String> setCodes;
|
||||
protected int boosterNum = 0;
|
||||
protected int cardNum = 0;
|
||||
protected int cardNum = 0; // increases +1 on first picking (so draft get 1 as first card number)
|
||||
protected TimingOption timing;
|
||||
protected int[] times = {75, 70, 65, 60, 55, 50, 45, 40, 35, 30, 25, 20, 15, 10, 5};
|
||||
|
||||
protected boolean abort = false;
|
||||
protected boolean started = false;
|
||||
|
|
@ -204,7 +202,6 @@ public abstract class DraftImpl implements Draft {
|
|||
}
|
||||
}
|
||||
boosterNum++;
|
||||
cardNum = 1;
|
||||
fireUpdatePlayersEvent();
|
||||
}
|
||||
|
||||
|
|
@ -270,7 +267,7 @@ public abstract class DraftImpl implements Draft {
|
|||
if (cardNum > 15) {
|
||||
cardNum = 15;
|
||||
}
|
||||
int time = times[cardNum - 1] * timing.getFactor();
|
||||
int time = timing.getPickTimeout(cardNum);
|
||||
playerQueryEventSource.pickCard(playerId, "Pick card", player.getBooster(), time);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,41 +1,69 @@
|
|||
|
||||
|
||||
package mage.game.draft;
|
||||
|
||||
import java.io.Serializable;
|
||||
import mage.game.tournament.LimitedOptions;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
* @author BetaSteward_at_googlemail.com, JayDi85
|
||||
*/
|
||||
public class DraftOptions extends LimitedOptions implements Serializable {
|
||||
|
||||
protected String draftType;
|
||||
protected TimingOption timing;
|
||||
|
||||
|
||||
public enum TimingOption {
|
||||
REGULAR (1),
|
||||
BEGINNER (2),
|
||||
NONE (0);
|
||||
|
||||
private int factor;
|
||||
// seconds per card's pick
|
||||
BEGINNER("x2.0", "Beginner (x2.0)", 2.0,
|
||||
Arrays.asList(150, 140, 130, 120, 110, 100, 90, 80, 45, 35, 30, 25, 20, 15, 10)
|
||||
),
|
||||
REGULAR("x1.5", "Regular (x1.5)", 1.5,
|
||||
Arrays.asList(113, 105, 98, 90, 83, 75, 68, 60, 35, 30, 25, 20, 15, 10, 8)
|
||||
),
|
||||
PROFI("x1.0", "Profi (x1.0)", 1.0,
|
||||
Arrays.asList(75, 70, 65, 60, 55, 50, 45, 40, 30, 25, 20, 15, 12, 10, 7)
|
||||
),
|
||||
NONE("ERROR", "", 0,
|
||||
Arrays.asList(0)
|
||||
);
|
||||
|
||||
TimingOption(int factor) {
|
||||
this.factor = factor;
|
||||
private final String shortName;
|
||||
private final String name;
|
||||
private final double customTimeoutFactor; // profi as x1.0, other modes increases by factor from x1.5 to x2.0
|
||||
private final List<Integer> times;
|
||||
|
||||
TimingOption(String shortName, String name, double customTimeoutFactor, List<Integer> times) {
|
||||
this.shortName = shortName;
|
||||
this.name = name;
|
||||
this.customTimeoutFactor = customTimeoutFactor;
|
||||
this.times = times;
|
||||
}
|
||||
|
||||
public int getFactor() {
|
||||
return this.factor;
|
||||
public String getShortName() {
|
||||
return shortName;
|
||||
}
|
||||
}
|
||||
|
||||
public String getDraftType() {
|
||||
return draftType;
|
||||
}
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setDraftType(String draftType) {
|
||||
this.draftType = draftType;
|
||||
public double getCustomTimeoutFactor() {
|
||||
return customTimeoutFactor;
|
||||
}
|
||||
|
||||
public int getPickTimeout(int cardNum) {
|
||||
if (cardNum > 15) {
|
||||
cardNum = 15;
|
||||
}
|
||||
return times.get(cardNum - 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
||||
public TimingOption getTiming() {
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ public class RandomBoosterDraft extends BoosterDraft {
|
|||
}
|
||||
}
|
||||
boosterNum++;
|
||||
cardNum = 1;
|
||||
fireUpdatePlayersEvent();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,8 +16,8 @@ public class RichManBoosterDraft extends DraftImpl {
|
|||
|
||||
private static final Logger logger = Logger.getLogger(RichManBoosterDraft.class);
|
||||
|
||||
//protected int[] richManTimes = {75, 70, 65, 60, 55, 50, 45, 40, 35, 35, 35, 35, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25};
|
||||
protected int[] richManTimes = {70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40};
|
||||
// custom timeouts per pick on profi timing
|
||||
protected int[] customProfiTimes = {70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40};
|
||||
|
||||
public RichManBoosterDraft(DraftOptions options, List<ExpansionSet> sets) {
|
||||
super(options, sets);
|
||||
|
|
@ -87,7 +87,9 @@ public class RichManBoosterDraft extends DraftImpl {
|
|||
if (cardNum <= 0) {
|
||||
cardNum = 1;
|
||||
}
|
||||
int time = richManTimes[cardNum - 1] * timing.getFactor();
|
||||
|
||||
// richman uses custom times
|
||||
int time = (int) Math.ceil(customProfiTimes[cardNum - 1] * timing.getCustomTimeoutFactor());
|
||||
playerQueryEventSource.pickCard(playerId, "Pick card", player.getBooster(), time);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.game.draft;
|
||||
|
||||
import java.util.*;
|
||||
|
|
@ -13,8 +12,9 @@ import mage.game.draft.DraftCube.CardIdentity;
|
|||
*/
|
||||
public class RichManCubeBoosterDraft extends DraftImpl {
|
||||
|
||||
//protected int[] richManTimes = {75, 70, 65, 60, 55, 50, 45, 40, 35, 35, 35, 35, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25};
|
||||
protected int[] richManTimes = {70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40};
|
||||
// custom timeouts per pick on profi timing
|
||||
protected int[] customProfiTimes = {70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40};
|
||||
|
||||
protected final Map<String, CardIdentity> cardsInCube = new LinkedHashMap<>();
|
||||
|
||||
public RichManCubeBoosterDraft(DraftOptions options, List<ExpansionSet> sets) {
|
||||
|
|
@ -102,7 +102,9 @@ public class RichManCubeBoosterDraft extends DraftImpl {
|
|||
if (cardNum <= 0) {
|
||||
cardNum = 1;
|
||||
}
|
||||
int time = richManTimes[cardNum - 1] * timing.getFactor();
|
||||
|
||||
// richman uses custom times
|
||||
int time = (int) Math.ceil(customProfiTimes[cardNum - 1] * timing.getCustomTimeoutFactor());
|
||||
playerQueryEventSource.pickCard(playerId, "Pick card", player.getBooster(), time);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue