@@ -21,11 +21,10 @@ def load_context(self, replay):
21
21
@loggable
22
22
class GameEvent (Event ):
23
23
"""Abstract Event Type, should not be directly instanciated"""
24
- def __init__ (self , frame , pid , event_type , event_code ):
24
+ def __init__ (self , frame , pid , event_type ):
25
25
super (GameEvent , self ).__init__ (frame , pid )
26
26
27
27
self .type = event_type
28
- self .code = event_code
29
28
self .is_local = (pid != 16 )
30
29
31
30
self .is_init = (event_type == 0x00 )
@@ -52,35 +51,25 @@ def __init__(self, frame, pid, flags):
52
51
53
52
@loggable
54
53
class ChatEvent (MessageEvent ):
55
- def __init__ (self , frame , pid , flags , buffer ):
54
+ def __init__ (self , frame , pid , flags , target , text ):
56
55
super (ChatEvent , self ).__init__ (frame , pid , flags )
57
-
58
- # A flag set without the 0x80 bit set is a player message. Messages
59
- # store a target (allies or all) as well as the message text.
60
- extension = (flags & 0x18 ) << 3
61
- self .target = flags & 0x03
62
- self .text = buffer .read_chars (buffer .read_byte () + extension )
56
+ self .target = target
57
+ self .text = text
63
58
self .to_all = (self .target == 0 )
64
59
self .to_allies = (self .target == 2 )
60
+ self .to_observers = (self .target == 4 )
65
61
66
62
@loggable
67
63
class PacketEvent (MessageEvent ):
68
- def __init__ (self , frame , pid , flags , buffer ):
64
+ def __init__ (self , frame , pid , flags , info ):
69
65
super (PacketEvent , self ).__init__ (frame , pid , flags )
70
-
71
- # The 0x80 flag marks a network packet. I believe these mark packets
72
- # send over the network to establish latency or connectivity.
73
- self .data = buffer .read_chars (4 )
66
+ self .info = info
74
67
75
68
@loggable
76
69
class PingEvent (MessageEvent ):
77
- def __init__ (self , frame , pid , flags , buffer ):
70
+ def __init__ (self , frame , pid , flags , x , y ):
78
71
super (PingEvent , self ).__init__ (frame , pid , flags )
79
-
80
- # The 0x83 flag indicates a minimap ping and contains the x and
81
- # y coordinates of that ping as the payload.
82
- self .x = buffer .read_int (LITTLE_ENDIAN )
83
- self .y = buffer .read_int (LITTLE_ENDIAN )
72
+ self .x , self .y = x , y
84
73
85
74
86
75
#############################################3
@@ -91,46 +80,73 @@ class UnknownEvent(GameEvent):
91
80
pass
92
81
93
82
class PlayerJoinEvent (GameEvent ):
94
- pass
83
+ def __init__ (self , frames , pid , event_type , flags ):
84
+ super (PlayerJoinEvent , self ).__init__ (frames , pid , event_type )
85
+ self .flags = flags
95
86
96
87
class GameStartEvent (GameEvent ):
97
88
pass
98
89
99
90
class PlayerLeaveEvent (GameEvent ):
100
91
pass
101
92
102
- class CameraMovementEvent (GameEvent ):
103
- pass
93
+ class CameraEvent (GameEvent ):
94
+ def __init__ (self , frames , pid , event_type , x , y , distance , pitch , yaw , height_offset ):
95
+ super (CameraEvent , self ).__init__ (frames , pid , event_type )
96
+ self .x , self .y = x , y
97
+ self .distance = distance
98
+ self .pitch = pitch
99
+ self .yaw = yaw
100
+ self .height_offset = height_offset
101
+
102
+ def __str__ (self ):
103
+ return self ._str_prefix () + " camera at ({}, {})" .format (x ,y )
104
104
105
105
class PlayerActionEvent (GameEvent ):
106
106
pass
107
107
108
108
@loggable
109
- class ResourceTransferEvent (PlayerActionEvent ):
110
- def __init__ (self , frames , pid , type , code , target , minerals , vespene ):
111
- super (ResourceTransferEvent , self ).__init__ (frames , pid , type , code )
109
+ class SendResourceEvent (PlayerActionEvent ):
110
+ def __init__ (self , frames , pid , event_type , target , minerals , vespene , terrazine , custom ):
111
+ super (SendResourceEvent , self ).__init__ (frames , pid , event_type )
112
112
self .sender = pid
113
113
self .reciever = target
114
114
self .minerals = minerals
115
115
self .vespene = vespene
116
+ self .terrazine = terrazine
117
+ self .custom = custom
116
118
117
119
def __str__ (self ):
118
- return self ._str_prefix () + "%s transfer %d minerals and %d gas to %s " % (self .sender , self .minerals , self .vespene , self .reciever )
120
+ return self ._str_prefix () + " transfer {} minerals, {} gas, {} terrazine, and {} custom to {} " % (self .minerals , self .vespene , self .terrazine , self . custom , self .reciever )
119
121
120
122
def load_context (self , replay ):
121
- super (ResourceTransferEvent , self ).load_context (replay )
123
+ super (SendResourceEvent , self ).load_context (replay )
122
124
self .sender = replay .player [self .sender ]
123
125
self .reciever = replay .player [self .reciever ]
124
126
127
+ @loggable
128
+ class RequestResourceEvent (PlayerActionEvent ):
129
+ def __init__ (self , frames , pid , event_type , minerals , vespene , terrazine , custom ):
130
+ super (RequestResourceEvent , self ).__init__ (frames , pid , event_type )
131
+ self .minerals = minerals
132
+ self .vespene = vespene
133
+ self .terrazine = terrazine
134
+ self .custom = custom
135
+
136
+ def __str__ (self ):
137
+ return self ._str_prefix () + " requests {} minerals, {} gas, {} terrazine, and {} custom" % (self .minerals , self .vespene , self .terrazine , self .custom )
138
+
125
139
@loggable
126
140
class AbilityEvent (PlayerActionEvent ):
127
- def __init__ (self , framestamp , player , type , code , ability ):
128
- super (AbilityEvent , self ).__init__ (framestamp , player , type , code )
141
+ def __init__ (self , frame , pid , event_type , ability ):
142
+ super (AbilityEvent , self ).__init__ (frame , pid , event_type )
129
143
self .ability_code = ability
130
144
self .ability_name = 'Uknown'
131
145
132
146
def load_context (self , replay ):
133
147
super (AbilityEvent , self ).load_context (replay )
148
+ if not replay .datapack :
149
+ return
134
150
135
151
if self .ability_code not in replay .datapack .abilities :
136
152
if not getattr (replay , 'marked_error' , None ):
@@ -153,18 +169,34 @@ def __str__(self):
153
169
154
170
@loggable
155
171
class TargetAbilityEvent (AbilityEvent ):
156
- def __init__ (self , framestamp , player , type , code , ability , target ):
157
- super (TargetAbilityEvent , self ).__init__ (framestamp , player , type , code , ability )
172
+ def __init__ (self , frame , pid , event_type , ability , target , player , team , location ):
173
+ super (TargetAbilityEvent , self ).__init__ (frame , pid , event_type , ability )
158
174
self .target = None
159
175
self .target_id , self .target_type = target
160
- #Forgot why we have to munge this
161
- self .target_type = self .target_type << 8 | 0x01
176
+ self .target_owner = None
177
+ self .target_owner_id = player
178
+ self .target_team = None
179
+ self .target_team_id = team
180
+ self .location = location
181
+ #Forgot why we have to munge this so lets not for now
182
+ #self.target_type = self.target_type << 8 | 0x01
162
183
163
184
164
185
def load_context (self , replay ):
165
186
super (TargetAbilityEvent , self ).load_context (replay )
166
- uid = (self .target_id , self .target_type )
167
187
188
+ if self .target_owner_id :
189
+ self .target_owner = replay .player [self .target_owner_id ]
190
+
191
+ """ Disabled since team seems to always be the same player
192
+ if self.target_team_id:
193
+ self.target_team = replay.team[self.target_team_id]
194
+ """
195
+
196
+ if not replay .datapack :
197
+ return
198
+
199
+ uid = (self .target_id , self .target_type )
168
200
if uid in replay .objects :
169
201
self .target = replay .objects [uid ]
170
202
@@ -189,20 +221,23 @@ def __str__(self):
189
221
190
222
@loggable
191
223
class LocationAbilityEvent (AbilityEvent ):
192
- def __init__ (self , framestamp , player , type , code , ability , location ):
193
- super (LocationAbilityEvent , self ).__init__ (framestamp , player , type , code , ability )
224
+ def __init__ (self , frame , pid , event_type , ability , location ):
225
+ super (LocationAbilityEvent , self ).__init__ (frame , pid , event_type , ability )
194
226
self .location = location
195
227
196
228
def __str__ (self ):
197
229
return AbilityEvent .__str__ (self ) + "; Location: %s" % str (self .location )
198
230
231
+ @loggable
199
232
class SelfAbilityEvent (AbilityEvent ):
200
- pass
233
+ def __init__ (self , frame , pid , event_type , ability , info ):
234
+ super (SelfAbilityEvent , self ).__init__ (frame , pid , event_type , ability )
235
+ self .info = info
201
236
202
237
@loggable
203
238
class HotkeyEvent (PlayerActionEvent ):
204
- def __init__ (self , framestamp , player , type , code , hotkey , deselect ):
205
- super (HotkeyEvent , self ).__init__ (framestamp , player , type , code )
239
+ def __init__ (self , frame , pid , event_type , hotkey , deselect ):
240
+ super (HotkeyEvent , self ).__init__ (frame , pid , event_type )
206
241
self .hotkey = hotkey
207
242
self .deselect = deselect
208
243
@@ -217,8 +252,8 @@ class GetFromHotkeyEvent(HotkeyEvent):
217
252
218
253
@loggable
219
254
class SelectionEvent (PlayerActionEvent ):
220
- def __init__ (self , framestamp , player , type , code , bank , objects , deselect ):
221
- super (SelectionEvent , self ).__init__ (framestamp , player , type , code )
255
+ def __init__ (self , frame , pid , event_type , bank , objects , deselect ):
256
+ super (SelectionEvent , self ).__init__ (frame , pid , event_type )
222
257
self .bank = bank
223
258
self .objects = objects
224
259
self .deselect = deselect
0 commit comments