@@ -21,11 +21,10 @@ def load_context(self, replay):
2121@loggable
2222class GameEvent (Event ):
2323 """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 ):
2525 super (GameEvent , self ).__init__ (frame , pid )
2626
2727 self .type = event_type
28- self .code = event_code
2928 self .is_local = (pid != 16 )
3029
3130 self .is_init = (event_type == 0x00 )
@@ -52,35 +51,25 @@ def __init__(self, frame, pid, flags):
5251
5352@loggable
5453class ChatEvent (MessageEvent ):
55- def __init__ (self , frame , pid , flags , buffer ):
54+ def __init__ (self , frame , pid , flags , target , text ):
5655 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
6358 self .to_all = (self .target == 0 )
6459 self .to_allies = (self .target == 2 )
60+ self .to_observers = (self .target == 4 )
6561
6662@loggable
6763class PacketEvent (MessageEvent ):
68- def __init__ (self , frame , pid , flags , buffer ):
64+ def __init__ (self , frame , pid , flags , info ):
6965 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
7467
7568@loggable
7669class PingEvent (MessageEvent ):
77- def __init__ (self , frame , pid , flags , buffer ):
70+ def __init__ (self , frame , pid , flags , x , y ):
7871 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
8473
8574
8675#############################################3
@@ -91,46 +80,73 @@ class UnknownEvent(GameEvent):
9180 pass
9281
9382class 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
9586
9687class GameStartEvent (GameEvent ):
9788 pass
9889
9990class PlayerLeaveEvent (GameEvent ):
10091 pass
10192
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 )
104104
105105class PlayerActionEvent (GameEvent ):
106106 pass
107107
108108@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 )
112112 self .sender = pid
113113 self .reciever = target
114114 self .minerals = minerals
115115 self .vespene = vespene
116+ self .terrazine = terrazine
117+ self .custom = custom
116118
117119 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 )
119121
120122 def load_context (self , replay ):
121- super (ResourceTransferEvent , self ).load_context (replay )
123+ super (SendResourceEvent , self ).load_context (replay )
122124 self .sender = replay .player [self .sender ]
123125 self .reciever = replay .player [self .reciever ]
124126
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+
125139@loggable
126140class 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 )
129143 self .ability_code = ability
130144 self .ability_name = 'Uknown'
131145
132146 def load_context (self , replay ):
133147 super (AbilityEvent , self ).load_context (replay )
148+ if not replay .datapack :
149+ return
134150
135151 if self .ability_code not in replay .datapack .abilities :
136152 if not getattr (replay , 'marked_error' , None ):
@@ -153,18 +169,34 @@ def __str__(self):
153169
154170@loggable
155171class 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 )
158174 self .target = None
159175 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
162183
163184
164185 def load_context (self , replay ):
165186 super (TargetAbilityEvent , self ).load_context (replay )
166- uid = (self .target_id , self .target_type )
167187
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 )
168200 if uid in replay .objects :
169201 self .target = replay .objects [uid ]
170202
@@ -189,20 +221,23 @@ def __str__(self):
189221
190222@loggable
191223class 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 )
194226 self .location = location
195227
196228 def __str__ (self ):
197229 return AbilityEvent .__str__ (self ) + "; Location: %s" % str (self .location )
198230
231+ @loggable
199232class 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
201236
202237@loggable
203238class 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 )
206241 self .hotkey = hotkey
207242 self .deselect = deselect
208243
@@ -217,8 +252,8 @@ class GetFromHotkeyEvent(HotkeyEvent):
217252
218253@loggable
219254class 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 )
222257 self .bank = bank
223258 self .objects = objects
224259 self .deselect = deselect
0 commit comments