3838import opendota .combatlogvisitors .TrackVisitor ;
3939import opendota .combatlogvisitors .GreevilsGreedVisitor ;
4040import opendota .combatlogvisitors .TrackVisitor .TrackStatus ;
41- import opendota .processors .warding .OnWardExpired ;
42- import opendota .processors .warding .OnWardKilled ;
43- import opendota .processors .warding .OnWardPlaced ;
4441
4542public class Parse {
4643
@@ -404,6 +401,7 @@ else if (cle.getType() == DOTA_COMBATLOG_TYPES.DOTA_COMBATLOG_XP) {
404401
405402 @ OnEntityEntered
406403 public void onEntityEntered (Context ctx , Entity e ) {
404+ processEntity (ctx , e , false );
407405 if (e .getDtClass ().getDtName ().equals ("CDOTAWearableItem" )) {
408406 Integer accountId = getEntityProperty (e , "m_iAccountID" , null );
409407 Integer itemDefinitionIndex = getEntityProperty (e , "m_iItemDefinitionIndex" , null );
@@ -420,6 +418,11 @@ public void onEntityEntered(Context ctx, Entity e) {
420418 }
421419 }
422420 }
421+
422+ @ OnEntityLeft
423+ public void onEntityLeft (Context ctx , Entity e ) {
424+ processEntity (ctx , e , true );
425+ }
423426
424427 @ UsesStringTable ("EntityNames" )
425428 @ UsesEntities
@@ -724,43 +727,45 @@ public <T> T getEntityProperty(Entity e, String property, Integer idx) {
724727 }
725728 }
726729
727- @ OnWardKilled
728- public void onWardKilled (Context ctx , Entity e , String killerHeroName ) {
729- Entry wardEntry = buildWardEntry (ctx , e );
730- wardEntry .attackername = killerHeroName ;
731- output (wardEntry );
732- }
733-
734- @ OnWardExpired
735- @ OnWardPlaced
736- public void onWardExistenceChanged (Context ctx , Entity e ) {
737- output (buildWardEntry (ctx , e ));
738- }
739-
740- private Entry buildWardEntry (Context ctx , Entity e ) {
741- Entry entry = new Entry (time );
742- boolean isObserver = !e .getDtClass ().getDtName ().contains ("TrueSight" );
743- Integer x = getEntityProperty (e , "CBodyComponent.m_cellX" , null );
744- Integer y = getEntityProperty (e , "CBodyComponent.m_cellY" , null );
745- Integer z = getEntityProperty (e , "CBodyComponent.m_cellZ" , null );
746- Integer life_state = getEntityProperty (e , "m_lifeState" , null );
747- Integer [] pos = {x , y };
748- entry .x = x ;
749- entry .y = y ;
750- entry .z = z ;
751- entry .type = isObserver ? "obs" : "sen" ;
752- entry .entityleft = life_state == 1 ;
753- entry .key = Arrays .toString (pos );
754- entry .ehandle = e .getHandle ();
755-
756- if (entry .entityleft ) {
757- entry .type += "_left" ;
730+ public void processEntity (Context ctx , Entity e , boolean entityLeft )
731+ {
732+ //CDOTA_NPC_Observer_Ward
733+ //CDOTA_NPC_Observer_Ward_TrueSight
734+ //s1 "DT_DOTA_NPC_Observer_Ward"
735+ //s1 "DT_DOTA_NPC_Observer_Ward_TrueSight"
736+ boolean isObserver = e .getDtClass ().getDtName ().equals ("CDOTA_NPC_Observer_Ward" );
737+ boolean isSentry = e .getDtClass ().getDtName ().equals ("CDOTA_NPC_Observer_Ward_TrueSight" );
738+ if (isObserver || isSentry ) {
739+ //System.err.println(e);
740+ Entry entry = new Entry (time );
741+ Integer x = getEntityProperty (e , "CBodyComponent.m_cellX" , null );
742+ Integer y = getEntityProperty (e , "CBodyComponent.m_cellY" , null );
743+ Integer z = getEntityProperty (e , "CBodyComponent.m_cellZ" , null );
744+ Integer [] pos = {x , y };
745+ entry .x = x ;
746+ entry .y = y ;
747+ entry .z = z ;
748+ if (entityLeft )
749+ {
750+ entry .type = isObserver ? "obs_left" : "sen_left" ;
751+ }
752+ else
753+ {
754+ entry .type = isObserver ? "obs" : "sen" ;
755+ }
756+ entry .key = Arrays .toString (pos );
757+ entry .entityleft = entityLeft ;
758+ entry .ehandle = e .getHandle ();
759+ //System.err.println(entry.key);
760+ Integer owner = getEntityProperty (e , "m_hOwnerEntity" , null );
761+ Entity ownerEntity = ctx .getProcessor (Entities .class ).getByHandle (owner );
762+ entry .slot = ownerEntity != null ? (Integer ) getEntityProperty (ownerEntity , "m_iPlayerID" , null ) : ward_ehandle_to_slot .get (entry .ehandle );
763+ if (entry .slot != null && !ward_ehandle_to_slot .containsKey (entry .ehandle )) {
764+ ward_ehandle_to_slot .put (entry .ehandle , entry .slot );
765+ }
766+ //2/3 radiant/dire
767+ //entry.team = e.getProperty("m_iTeamNum");
768+ output (entry );
758769 }
759-
760- Integer owner = getEntityProperty (e , "m_hOwnerEntity" , null );
761- Entity ownerEntity = ctx .getProcessor (Entities .class ).getByHandle (owner );
762- entry .slot = ownerEntity != null ? (Integer ) getEntityProperty (ownerEntity , "m_iPlayerID" , null ) : null ;
763-
764- return entry ;
765770 }
766771}
0 commit comments