SHOW:
|
|
- or go back to the newest paste.
1 | """ | |
2 | Tug of War game mode, where you must progressively capture the enemy CPs in a | |
3 | straight line to win. | |
4 | ||
5 | Maintainer: mat^2 | |
6 | """ | |
7 | ||
8 | from pyspades.constants import * | |
9 | from pyspades.server import Territory | |
10 | import random | |
11 | import math | |
12 | from math import pi | |
13 | ||
14 | HELP = [ | |
15 | "In Tug of War, you capture your opponents' front CP to advance." | |
16 | ] | |
17 | ||
18 | class TugTerritory(Territory): | |
19 | disabled = True | |
20 | ||
21 | def add_player(self, player): | |
22 | if self.disabled: | |
23 | return | |
24 | Territory.add_player(self, player) | |
25 | ||
26 | def enable(self): | |
27 | self.disabled = False | |
28 | ||
29 | def disable(self): | |
30 | for player in self.players.copy(): | |
31 | self.remove_player(player) | |
32 | self.disabled = True | |
33 | self.progress = float(self.team.id) | |
34 | ||
35 | def get_index(value): | |
36 | if value < 0: | |
37 | raise IndexError() | |
38 | return value | |
39 | ||
40 | def apply_script(protocol, connection, config): | |
41 | class TugConnection(connection): | |
42 | def get_spawn_location(self): | |
43 | if self.team.spawn_cp is None: | |
44 | base = self.team.last_spawn | |
45 | else: | |
46 | base = self.team.spawn_cp | |
47 | return base.get_spawn_location() | |
48 | ||
49 | def on_spawn(self, pos): | |
50 | for line in HELP: | |
51 | self.send_chat(line) | |
52 | return connection.on_spawn(self, pos) | |
53 | ||
54 | class TugProtocol(protocol): | |
55 | game_mode = TC_MODE | |
56 | ||
57 | def get_cp_entities(self): | |
58 | # generate positions | |
59 | ||
60 | map = self.map | |
61 | blue_cp = [] | |
62 | green_cp = [] | |
63 | ||
64 | - | points = self.protocol.map_info.tow_locations |
64 | + | points = self.map_info.extensions |
65 | ||
66 | - | for i, point in enumerate(points): |
66 | + | for i, point in enumerate(points['tow_locations']): |
67 | - | if i < len(points) / 2: |
67 | + | if i < len(points['tow_locations']) / 2: |
68 | blue_cp.append(point) | |
69 | else: | |
70 | green_cp.append(point) | |
71 | ||
72 | # make entities | |
73 | ||
74 | index = 0 | |
75 | entities = [] | |
76 | ||
77 | for i, (x, y) in enumerate(blue_cp): | |
78 | entity = TugTerritory(index, self, *(x, y, map.get_z(x, y))) | |
79 | entity.team = self.blue_team | |
80 | if i == 0: | |
81 | self.blue_team.last_spawn = entity | |
82 | entity.id = -1 | |
83 | else: | |
84 | entities.append(entity) | |
85 | index += 1 | |
86 | ||
87 | self.blue_team.cp = entities[-1] | |
88 | self.blue_team.cp.disabled = False | |
89 | self.blue_team.spawn_cp = entities[-2] | |
90 | ||
91 | for i, (x, y) in enumerate(green_cp): | |
92 | entity = TugTerritory(index, self, *(x, y, map.get_z(x, y))) | |
93 | entity.team = self.green_team | |
94 | if i == len(green_cp) - 1: | |
95 | self.green_team.last_spawn = entity | |
96 | entity.id = index | |
97 | else: | |
98 | entities.append(entity) | |
99 | index += 1 | |
100 | ||
101 | self.green_team.cp = entities[-(len(points)-2)/2] | |
102 | self.green_team.cp.disabled = False | |
103 | self.green_team.spawn_cp = entities[-(len(points)-2)/2 + 1] | |
104 | ||
105 | return entities | |
106 | ||
107 | def on_cp_capture(self, territory): | |
108 | team = territory.team | |
109 | if team.id: | |
110 | move = -1 | |
111 | else: | |
112 | move = 1 | |
113 | for team in [self.blue_team, self.green_team]: | |
114 | try: | |
115 | team.cp = self.entities[get_index(team.cp.id + move)] | |
116 | team.cp.enable() | |
117 | except IndexError: | |
118 | pass | |
119 | try: | |
120 | team.spawn_cp = self.entities[get_index( | |
121 | team.spawn_cp.id + move)] | |
122 | except IndexError: | |
123 | team.spawn_cp = team.last_spawn | |
124 | cp = (self.blue_team.cp, self.green_team.cp) | |
125 | for entity in self.entities: | |
126 | if not entity.disabled and entity not in cp: | |
127 | entity.disable() | |
128 | ||
129 | return TugProtocol, TugConnection |