Example #1
0
func main() {
	parser := yasha.ParserFromFile("/home/manveru/Dropbox/Public/d2rp_test_replays/813230338.dem")
	parser.OnFileInfo = func(fileinfo *dota.CDemoFileInfo) { spew.Dump(fileinfo) }
	parser.OnSayText2 = func(tick int, obj *dota.CUserMsg_SayText2) { spew.Dump(tick, obj) }
	parser.OnChatEvent = func(tick int, obj *dota.CDOTAUserMsg_ChatEvent) { spew.Dump(tick, obj) }
	parser.Parse()
}
Example #2
0
File: chat.go Project: mzuber/yasha
func main() {
	if len(os.Args) < 2 {
		fmt.Println("Expected a .dem file as argument")
	}

	for _, path := range os.Args[1:] {
		parser := yasha.ParserFromFile(path)
		parser.OnSayText2 = func(tick int, obj *dota.CUserMsg_SayText2) {
			fmt.Printf("%s - %07d | %s: %s\n", filepath.Base(path), tick, obj.GetPrefix(), obj.GetText())
		}
		parser.Parse()
	}
}
Example #3
0
func main() {
	if len(os.Args) < 2 {
		spew.Println("Expected a .dem file as argument")
	}

	for _, path := range os.Args[1:] {
		parser := yasha.ParserFromFile(path)
		parser.OnFileInfo = func(fileinfo *dota.CDemoFileInfo) {
			data, err := json.MarshalIndent(fileinfo, "", "  ")
			if err != nil {
				panic(err)
			}
			spew.Println(string(data))
		}
		parser.Parse()
	}
}
Example #4
0
func main() {
	if len(os.Args) < 2 {
		fmt.Println("Expected a .dem file as argument")
	}

	for _, path := range os.Args[1:] {
		parser := yasha.ParserFromFile(path)
		parser.OnEntityPreserved = func(pe *yasha.PacketEntity) {
			if strings.HasPrefix(pe.Name, "DT_DOTA_Unit_Hero_") {
				if _, ok := pe.Delta["DT_DOTA_BaseNPC.m_vecOrigin"]; ok {
					coord := coordFromCell(pe)
					fmt.Printf("%30s | X: %5.0f Y: %5.0f\n", pe.Name[18:len(pe.Name)], coord.X, coord.Y)
				}
			}
		}
		parser.Parse()
	}
}
Example #5
0
func Parse(ids []string) {
	fmt.Printf("Match ids are: %v\n", ids)

	for _, id := range ids {

		path := DEMO_PATH + "/" + id + ".dem"
		fmt.Printf("parsing file %v\n", path)
		parser := yasha.ParserFromFile(DEMO_PATH + "/1458895412.dem")

		var now time.Duration
		var gameTime, preGameStarttime float64
		var killsTotal int = 0

		parser.OnEntityPreserved = func(pe *yasha.PacketEntity) {
			if pe.Name == "DT_DOTAGamerulesProxy" {
				gameTime = pe.Values["DT_DOTAGamerules.m_fGameTime"].(float64)
				preGameStarttime = pe.Values["DT_DOTAGamerules.m_flPreGameStartTime"].(float64)
				now = time.Duration(gameTime-preGameStarttime) * time.Second
			}
		}

		parser.OnCombatLog = func(entry yasha.CombatLogEntry) {
			switch log := entry.(type) {
			case *yasha.CombatLogDeath:
				if log.TargetIsHero {
					killsTotal++
				}
				if bothAreHeroes(log) {
					fmt.Printf("%7s | %s just killed %s!\n", now, log.Source, log.Target)
				}
			}
		}

		parser.Parse()
		fmt.Printf("Looks like %d kills total!\n", killsTotal)
	}

}
Example #6
0
File: main.go Project: mzuber/yasha
func main() {
	if len(os.Args) < 2 {
		fmt.Println("Expected a .dem file as argument")
	}

	for _, path := range os.Args[1:] {
		parser := yasha.ParserFromFile(path)

		var now time.Duration
		var gameTime, preGameStarttime float64

		parser.OnEntityPreserved = func(pe *yasha.PacketEntity) {
			if pe.Name == "DT_DOTAGamerulesProxy" {
				gameTime = pe.Values["DT_DOTAGamerules.m_fGameTime"].(float64)
				preGameStarttime = pe.Values["DT_DOTAGamerules.m_flPreGameStartTime"].(float64)
				now = time.Duration(gameTime-preGameStarttime) * time.Second
			}
		}

		parser.OnCombatLog = func(entry yasha.CombatLogEntry) {
			switch log := entry.(type) {
			case *yasha.CombatLogPurchase:
				fmt.Printf("%7s | %s bought a %s\n", now, log.Buyer, log.Item)
			case *yasha.CombatLogAbility:
				if log.Target == "dota_unknown" {
					fmt.Printf("%7s | %s casted %s\n", now, log.Attacker, log.Ability)
				} else {
					fmt.Printf("%7s | %s casted %s on %s\n", now, log.Attacker, log.Ability, log.Target)
				}
			case *yasha.CombatLogHeal:
				fmt.Printf("%7s | %s heals %s for %dHP\n", now, log.Source, log.Target, log.Value)
			}
		}
		parser.Parse()
	}
}