Skip to content

Commit

Permalink
regular drafting for season 2 implemented and added some prelim playo…
Browse files Browse the repository at this point in the history
…ff support
  • Loading branch information
LtHummus committed Mar 29, 2016
1 parent c6392dd commit c94024e
Show file tree
Hide file tree
Showing 8 changed files with 88 additions and 71 deletions.
6 changes: 3 additions & 3 deletions SpyPartyDraft.py
Expand Up @@ -367,13 +367,13 @@ def draft_map(message):
chosen_map = [x for x in room.draft.map_pool if x.slug == message['choice']][0]
chosen_map_name = chosen_map.name
if room.draft.state.startswith('PICK') and not chosen_map.slug.endswith('k2'):
chosen_map_name = chosen_map.map_mode_name(message['is_pick'])
chosen_map_name = chosen_map.map_mode_name()

if room.draft.state.startswith('BAN'):
if room.draft.state.endswith('BANNING'):
room.post_event("{} has banned {}".format(room.draft.current_player, chosen_map_name))
else:
room.post_event("{} has picked {}".format(room.draft.current_player, chosen_map_name))
room.draft.mark_map(chosen_map, message['is_pick'])
room.draft.mark_map(chosen_map)
dump_draft(room)


Expand Down
11 changes: 7 additions & 4 deletions config/draft_types.json
Expand Up @@ -6,23 +6,26 @@
"name": "Regular Season Match",
"nr_bans": 2,
"nr_picks": 2,
"map_pool": "scl_season_1"
"map_pool": "scl_season_2",
"multi_phase": false
},
{
"id": "DIVISION_CHAMP",
"name": "Division Championship and Hazard Match",
"nr_bans": 3,
"nr_picks": 3,
"map_pool": "scl_season_1"
"map_pool": "scl_season_2",
"multi_phase": true
},
{
"id": "LEAGUE_CHAMP",
"name": "League Championship Match",
"nr_bans": 3,
"nr_picks": 4,
"map_pool": "scl_season_1"
"map_pool": "scl_season_2",
"multi_phase": true
}
],
"default_draft" : "DIVISION_CHAMP"
"default_draft" : "REGULAR"

}
62 changes: 26 additions & 36 deletions config/map_pools.json
@@ -1,123 +1,113 @@
{
"scl_season_1":
"scl_season_2":
[
{
"name": "Balcony 2/3",
"name": "ANY Balcony 2/3",
"slug": "balcony23",
"family": "balcony"
},
{
"name": "Balcony 3/5",
"slug": "balcony35",
"name": "PICK Balcony 2/3",
"slug": "balconyp23",
"family": "balcony"
},
{
"name": "New Art Ballroom 4/8",
"name": "ANY New Art Ballroom 4/8",
"slug": "nab48",
"family": "new art ballroom"
},
{
"name": "New Art Ballroom 4/7",
"name": "ANY New Art Ballroom 4/7",
"slug": "nab47",
"family": "new art ballroom"
},
{
"name": "Courtyard 4/6",
"name": "ANY Courtyard 4/6",
"slug": "cy146",
"family": "courtyard"
},
{
"name": "Courtyard 4/7",
"name": "ANY Courtyard 4/7",
"slug": "cy147",
"family": "courtyard"
},
{
"name": "Courtyard 2 4/6",
"name": "ANY Courtyard 2 4/6",
"slug": "cy246",
"family": "courtyard2"
},
{
"name": "Courtyard 2 4/7",
"name": "ANY Courtyard 2 4/7",
"slug": "cy247",
"family": "courtyard2"
},
{
"name": "Double Modern 3/5",
"slug": "2xm35",
"name": "PICK Double Modern 2/3",
"slug": "2xp23",
"family": "double modern"
},
{
"name": "Double Modern Known 2",
"name": "ANY Double Modern Known 2",
"slug": "2xmk2",
"family": "double modern"
},
{
"name": "Gallery 4/7",
"name": "ANY Gallery 4/7",
"slug": "gallery47",
"family": "gallery"
},
{
"name": "Gallery 4/8",
"name": "ANY Gallery 4/8",
"slug": "gallery48",
"family": "gallery"
},
{
"name": "High-rise 3/5",
"name": "ANY High-rise 3/5",
"slug": "highrise35",
"family": "highrise"
},
{
"name": "High-rise 4/7",
"name": "ANY High-rise 4/7",
"slug": "highrise47",
"family": "highrise"
},
{
"name": "Modern 2/3",
"name": "ANY Modern 2/3",
"slug": "modern23",
"family": "modern"
},
{
"name": "Modern 3/5",
"name": "ANY Modern 3/5",
"slug": "modern35",
"family": "modern"
},
{
"name": "Panopticon 5/7",
"name": "ANY Panopticon 5/7",
"slug": "panop57",
"family": "panopticon"
},
{
"name": "Panopticon 5/8",
"name": "ANY Panopticon 5/8",
"slug": "panop58",
"family": "panopticon"
},
{
"name": "Pub 3/5",
"name": "ANY Pub 3/5",
"slug": "pub35",
"family": "pub"
},
{
"name": "Pub 4/7",
"slug": "pub47",
"family": "pub"
},
{
"name": "Crowded Pub 4/7",
"name": "ANY Crowded Pub 4/7",
"slug": "cpub47",
"family": "cpub"
},
{
"name": "Crowded Pub 3/4",
"slug": "cpub34",
"family": "cpub"
"family": "pub"
},
{
"name": "Veranda 5/7",
"name": "ANY Veranda 5/7",
"slug": "veranda57",
"family": "veranda"
},
{
"name": "Veranda 5/8",
"name": "ANY Veranda 5/8",
"slug": "veranda58",
"family": "veranda"
}
Expand Down
47 changes: 39 additions & 8 deletions draft/draft.py
Expand Up @@ -3,19 +3,34 @@
STATE_DRAFT_COMPLETE = "COMPLETE"
STATE_BANNING = "BANNING"
STATE_PICKING = "PICKING"
STATE_FIRST_ROUND_BANNING = "FIRST_ROUND_BANNING"
STATE_FIRST_ROUND_PICKING = "FIRST_ROUND_PICKING"
STATE_SECOND_ROUND_BANNING = "SECOND_ROUND_BANNING"
STATE_SECOND_ROUND_PICKING = "SECOND_ROUND_PICKING"

USER_READABLE_STATE_MAP = {
STATE_NOT_STARTED: "Not started",
STATE_BANNING: "{} Ban",
STATE_PICKING: "{} Pick",
STATE_DRAFT_COMPLETE: "Draft complete"
STATE_DRAFT_COMPLETE: "Draft complete",
STATE_FIRST_ROUND_BANNING: "{} First Round Ban",
STATE_FIRST_ROUND_PICKING: "{} First Round Pick",
STATE_SECOND_ROUND_BANNING: "{} Second Round Ban",
STATE_SECOND_ROUND_PICKING: "{} Second Round Pick"
}

NEXT_STATE = {
STATE_BANNING: STATE_PICKING,
STATE_PICKING: STATE_DRAFT_COMPLETE
}

MULTI_PHASE_NEXT_STATE = {
STATE_FIRST_ROUND_BANNING: STATE_FIRST_ROUND_PICKING,
STATE_FIRST_ROUND_PICKING: STATE_SECOND_ROUND_BANNING,
STATE_SECOND_ROUND_BANNING: STATE_SECOND_ROUND_PICKING,
STATE_SECOND_ROUND_PICKING: STATE_DRAFT_COMPLETE
}


class Draft:
def __init__(self, room_id, player_one, player_two, map_pool, draft_type):
Expand Down Expand Up @@ -59,33 +74,49 @@ def _banning_complete(self):
def _picking_complete(self):
return len(self.picked_maps) < self.draft_type.nr_picks * 2

def _multi_phase_advance_state(self):
print "Picks %d Bans %d" % (len(self.picked_maps), len(self.banned_maps))
if len(self.banned_maps) == 4 and self.state == STATE_FIRST_ROUND_BANNING \
or (len(self.picked_maps) == 2 and self.state == STATE_FIRST_ROUND_PICKING) \
or (len(self.banned_maps) == 8 and self.state == STATE_SECOND_ROUND_BANNING) \
or (len(self.picked_maps) >= self.draft_type.nr_picks * 2 and self.state == STATE_SECOND_ROUND_PICKING):
self.state = MULTI_PHASE_NEXT_STATE[self.state]

def _advance_state(self):
if not(self.state == STATE_BANNING and self._banning_complete()
or self.state == STATE_PICKING and self._picking_complete()):
self.state = NEXT_STATE[self.state]

def mark_map(self, map, is_pick):
def mark_map(self, map):
if map is None:
self.banned_maps.append("Nothing")
elif self.state.startswith("BAN"):
elif self.state.endswith("BANNING"):
self.banned_maps.append(map.name)
self.map_pool.remove(map)
else:
map_name = map.map_mode_name(is_pick)
map_name = map.map_mode_name()
if self.draft_type.multi_phase and len(self.picked_maps) < 2:
map_name = "*DOUBLED* " + map_name
self.picked_maps.append(map_name)
for x in [x for x in self.map_pool if x.family == map.family]:
self.map_pool.remove(x)
self._advance_state()
if self.draft_type.multi_phase:
self._multi_phase_advance_state()
else:
self._advance_state()
self._swap_player()

def start_draft(self):
self.current_player = self.start_player
self.state = STATE_BANNING
if self.draft_type.multi_phase:
self.state = STATE_FIRST_ROUND_BANNING
else:
self.state = STATE_BANNING

def user_readable_state(self):
if self.state == STATE_BANNING:
if self.state.endswith("BANNING"):
return USER_READABLE_STATE_MAP[self.state].format(self.ordinal((len(self.banned_maps)+1)))
elif self.state == STATE_PICKING:
elif self.state.endswith("PICKING"):
return USER_READABLE_STATE_MAP[self.state].format(self.ordinal((len(self.picked_maps)+1)))
else:
return USER_READABLE_STATE_MAP[self.state]
Expand Down
5 changes: 3 additions & 2 deletions draft/draft_type.py
Expand Up @@ -4,11 +4,12 @@


class Draft_type:
def __init__(self, name, nr_bans, nr_picks, map_pool_key):
def __init__(self, name, nr_bans, nr_picks, map_pool_key, multi_phase):
self.name = name
self.nr_bans = nr_bans
self.nr_picks = nr_picks
self.is_default_draft = 0
self.multi_phase = multi_phase
self.map_pool = Map.generate_map_pool('config/map_pools.json', map_pool_key)

@staticmethod
Expand All @@ -17,7 +18,7 @@ def get_draft_type(file_name):
with open(file_name) as f:
data = json.load(f)
for dt in data["draft_types"]:
draft_types[dt['id']] = Draft_type(dt['name'], dt['nr_bans'], dt['nr_picks'], dt['map_pool'])
draft_types[dt['id']] = Draft_type(dt['name'], dt['nr_bans'], dt['nr_picks'], dt['map_pool'], dt['multi_phase'])
draft_types[data["default_draft"]].is_default_draft = 1
return draft_types

Expand Down
11 changes: 2 additions & 9 deletions draft/map.py
Expand Up @@ -10,11 +10,8 @@ def __init__(self, name, slug, family):
def __repr__(self):
return self.name

def map_mode_name(self, is_pick):
if self.slug.endswith('k2'):
return self.name
parts = self.name.rsplit(' ', 1)
return parts[0] + (' PICK ' if is_pick else ' ANY ') + parts[1]
def map_mode_name(self):
return self.name

def as_map(self):
return {
Expand All @@ -30,8 +27,4 @@ def generate_map_pool(file_name, tourney):
tourney_json = data[tourney]
return [Map(x['name'], x['slug'], x['family']) for x in tourney_json]

if __name__ == '__main__':
m = Map("Balcony 2/3", "balcony23", "balcony")
print m.map_mode_name(False)
print m.map_mode_name(True)

10 changes: 2 additions & 8 deletions static/js/spypartydraft.js
Expand Up @@ -194,11 +194,6 @@ $(document).ready(function(){
$('#draft_form_options').html('');

if (message['current_player'] == username) {
if (message['state'].startsWith('PICK')) {
var pickBox = $('<input type="checkbox" name="pick_check" id="pick_check" /><label for="pick_check">Pick instead of Any</label><br />')
$('#draft_form_options').append(pickBox);
}

message['map_pool'].forEach(function (value, key, list) {
//console.log(value['name'] + " -> " + value['slug']);
var radioButton = $('<input type="radio" name="map_choice" value="' + value['slug'] + '" id="map_choice_' + value['slug'] + '" /><label for="map_choice_' + value['slug'] + '">' + value['name'] + '</label><br />');
Expand Down Expand Up @@ -377,13 +372,12 @@ $(document).ready(function(){
return false;
console.log("got value " + choice);

var isPick = $('#pick_check').is(':checked')
//var isPick = $('#pick_check').is(':checked')

var data = {
username: username,
room_id: draft_id,
choice: choice,
is_pick: isPick
choice: choice
};
socket.emit('draft_map', data);
return false;
Expand Down
7 changes: 6 additions & 1 deletion templates/index.html
Expand Up @@ -17,7 +17,7 @@
<a href="https://github.com/LtHummus/SpyPartyDraft"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/a6677b08c955af8400f44c6298f40e7d19cc5b2d/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f677261795f3664366436642e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_gray_6d6d6d.png"></a>
<div class="container">
<div class="col-md-8">
<h1>SpyParty Draft Tool <small>BETA version 0.0.9</small></h1>
<h1>SpyParty Draft Tool <small>BETA version 0.0.10</small></h1>
<div id="room_wrapper">
<div id="create_form_wrapper">
<h3>Create a new Draft Room</h3>
Expand Down Expand Up @@ -139,6 +139,11 @@ <h2>Help</h2>
to make this work (it has to support web sockets).</p>

<h2>What's New</h2>
<p>Version 0.0.10</p>
<ul>
<li>Changed things around for SCL Season 2</li>
<li>Things are not 100% with playoff/league championship drafting</li>
</ul>
<p>Version 0.0.9</p>
<ul>
<li>Fixed bugs with non-regular match being default</li>
Expand Down

0 comments on commit c94024e

Please sign in to comment.