java读取war3模型_GitHub - wucao/jw3gparser: Java Warcraft Ⅲ Replay Parser(Java解析《魔兽争霸3》游戏录像工具)...
jw3gparser
Java解析《魔兽争霸3》游戏录像工具,可解析w3g、nwg(网易对战平台录像)格式录像。
使用方法
public class Test {
public static void main(String[] args) throws IOException, W3GException, DataFormatException {
Replay replay = new Replay(new File("d:/wucao/Desktop/151020_[UD]LuciferLNMS_VS_[NE]checkuncle_Amazonia_RN.w3g"));
Header header = replay.getHeader();
System.out.println("版本:1." + header.getVersionNumber() + "." + header.getBuildNumber());
long duration = header.getDuration();
System.out.println("时长:" + convertMillisecondToString(duration));
UncompressedData uncompressedData = replay.getUncompressedData();
System.out.println("游戏名称:" + uncompressedData.getGameName());
System.out.println("游戏创建者:" + uncompressedData.getCreaterName());
System.out.println("游戏地图:" + uncompressedData.getMap());
List list = uncompressedData.getPlayerList();
for(Player player : list) {
System.out.println("---玩家" + player.getPlayerId() + "---");
System.out.println("玩家名称:" + player.getPlayerName());
if(player.isHost()) {
System.out.println("是否主机:主机");
} else {
System.out.println("是否主机:否");
}
System.out.println("游戏时间:" + convertMillisecondToString(player.getPlayTime()));
System.out.println("操作次数:" + player.getAction());
System.out.println("APM:" + player.getAction() * 60000 / player.getPlayTime());
if(!player.isObserverOrReferee()) {
System.out.println("玩家队伍:" + (player.getTeamNumber() + 1));
switch(player.getRace()) {
case HUMAN:
System.out.println("玩家种族:人族");
break;
case ORC:
System.out.println("玩家种族:兽族");
break;
case NIGHT_ELF:
System.out.println("玩家种族:暗夜精灵");
break;
case UNDEAD:
System.out.println("玩家种族:不死族");
break;
case RANDOM:
System.out.println("玩家种族:随机");
break;
}
switch(player.getColor()) {
case RED:
System.out.println("玩家颜色:红");
break;
case BLUE:
System.out.println("玩家颜色:蓝");
break;
case CYAN:
System.out.println("玩家颜色:青");
break;
case PURPLE:
System.out.println("玩家颜色:紫");
break;
case YELLOW:
System.out.println("玩家颜色:黄");
break;
case ORANGE:
System.out.println("玩家颜色:橘");
break;
case GREEN:
System.out.println("玩家颜色:绿");
break;
case PINK:
System.out.println("玩家颜色:粉");
break;
case GRAY:
System.out.println("玩家颜色:灰");
break;
case LIGHT_BLUE:
System.out.println("玩家颜色:浅蓝");
break;
case DARK_GREEN:
System.out.println("玩家颜色:深绿");
break;
case BROWN:
System.out.println("玩家颜色:棕");
break;
}
System.out.println("障碍(血量):" + player.getHandicap() + "%");
if(player.isComputer()) {
System.out.println("是否电脑玩家:电脑玩家");
switch (player.getAiStrength())
{
case EASY:
System.out.println("电脑难度:简单的");
break;
case NORMAL:
System.out.println("电脑难度:中等难度的");
break;
case INSANE:
System.out.println("电脑难度:令人发狂的");
break;
}
} else {
System.out.println("是否电脑玩家:否");
}
} else {
System.out.println("玩家队伍:裁判或观看者");
}
}
List chatList = uncompressedData.getReplayData().getChatList();
for(ChatMessage chatMessage : chatList) {
String chatString = "[" + convertMillisecondToString(chatMessage.getTime()) + "]";
chatString += chatMessage.getFrom().getPlayerName() + " 对 ";
switch ((int)chatMessage.getMode()) {
case 0:
chatString += "所有人";
break;
case 1:
chatString += "队伍";
break;
case 2:
chatString += "裁判或观看者";
break;
default:
chatString += chatMessage.getTo().getPlayerName();
}
chatString += " 说:" + chatMessage.getMessage();
System.out.println(chatString);
}
}
private static String convertMillisecondToString(long millisecond) {
long second = (millisecond / 1000) % 60;
long minite = (millisecond / 1000) / 60;
if (second < 10) {
return minite + ":0" + second;
} else {
return minite + ":" + second;
}
}
}
输出DEMO:
版本:1.26.6059
时长:24:53
游戏名称:WCA01
游戏创建者:A.1st_LawLiet
游戏地图:Maps\Download\(2)Amazonia.w3x
---玩家1---
玩家名称:A.1st_LawLiet
是否主机:主机
游戏时间:24:32
操作次数:0
APM:0
玩家队伍:裁判或观看者
---玩家2---
玩家名称:checkuncle
是否主机:否
游戏时间:24:31
操作次数:5831
APM:237
玩家队伍:2
玩家种族:暗夜精灵
玩家颜色:红
障碍(血量):100%
是否电脑玩家:否
---玩家3---
玩家名称:LuciferLNMS
是否主机:否
游戏时间:24:31
操作次数:7816
APM:318
玩家队伍:1
玩家种族:不死族
玩家颜色:灰
障碍(血量):100%
是否电脑玩家:否
---玩家4---
玩家名称:WCA_SEA_OB2
是否主机:否
游戏时间:24:53
操作次数:0
APM:0
玩家队伍:裁判或观看者
---玩家5---
玩家名称:wca_sea_ob1
是否主机:否
游戏时间:24:32
操作次数:0
APM:0
玩家队伍:裁判或观看者
[0:09]checkuncle 对 所有人 说:All rights reserved by Blizzard
[0:10]checkuncle 对 所有人 说:w3g files released by www.Replays.Net.
[0:36]LuciferLNMS 对 所有人 说:gl
[0:38]checkuncle 对 所有人 说:gl
[24:30]checkuncle 对 所有人 说:gg
[24:43]checkuncle 对 所有人 说:For more replays, plz visit www.Replays.Net
参考文档
Change Log
V1.1.0
支持网易对战平台录像格式nwg解析;
V1.1.1
修复部分录像没有玩家离开游戏标记的导致玩家游戏时间是0的BUG;
V1.2.0
去除FileType, 程序自动识别录像类型, 修复网易对战平台部分新录像报"录像格式不正确"错误的BUG;
java读取war3模型_GitHub - wucao/jw3gparser: Java Warcraft Ⅲ Replay Parser(Java解析《魔兽争霸3》游戏录像工具)...相关推荐
- Java读取Obj模型
Java写OpenGL项目时总要去加载一个Obj模型,或者导出导入操作,没必要用一大堆第三方包,一个类完事,兼容Window和Android 测试可以打开3DMax导出的Obj格式 导出的Obj也可以 ...
- java的jmm模型_【深入理解JVM】:Java内存模型JMM
多任务和高并发的内存交互 多任务和高并发是衡量一台计算机处理器的能力重要指标之一.一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标 ...
- java 读取图片给 matlab_如何将MATLAB图像处理程序转换为java?
将Matlab代码转换为Java代码有几个一般的缺陷.我将Matlab转换成C代码,所以我的建议来自于这些经验. >如果你在Matlab中使用for循环,一般来说,你做错了.添加矩阵(图像等)是 ...
- java虚拟机内存模型种类_深入理解volatile类型——从Java虚拟机内存模型角度
一.前言 在java多线程编程中,volatile可以用来定义轻量级的共享变量,它比synchronized的使用成本更低,因为它不会引起线程上下文的切换和调度.所谓知己知彼.百战不殆.本文从JVM内 ...
- java日历记事本界面_GitHub - wusongxue/DuangCalender: 简易日历记事本(java+android端)...
在设计日历记事本时,需要编写4个Java类:CalendarPad.class.Year.class.NotePad.class.month.class. 日历记事本除了需要编写的上述3个Java所给 ...
- java读取微信消息_微信公众平台开发中使用Java如何实现获取用户的信息
微信公众平台开发中使用Java如何实现获取用户的信息 发布时间:2020-11-18 15:09:28 来源:亿速云 阅读:93 作者:Leah 本篇文章为大家展示了微信公众平台开发中使用Java如何 ...
- JAVA读取jtl文件不完整,Jmeter压测之jtl文件解析
一.背景 最近在做性能压测方面的工作,用的压测工具是Jmeter.Jmeter中有一个插件叫 jp@gc Throughput Shaping Timer.翻译过来就是吞吐量整形定时器.如下图: Th ...
- java读取本地文件_java 读取本地文件实例详解
java 读取本地文件实例详解 用javax.xml.w3c解析 实例代码: package cn.com.xinli.monitor.utils; import org.w3c.dom.Docume ...
- java 读取本地文件_java 读取本地文件实例详解
java 读取本地文件实例详解 用javax.xml.w3c解析 实例代码: package cn.com.xinli.monitor.utils; import org.w3c.dom.Docume ...
最新文章
- Ubuntu下安装配置Open×××
- 检查一棵二叉树是否为二叉查找树
- 树莓派安装python模块_树莓派引脚编号、pypi说明和安装
- 基础理论:集合的Hausdorff距离
- c malloc 头文件_干货笔记 | C/C++笔试面试详细总结(二)
- Linux学习之01_基础命令介绍
- html 生成唯一码,生成唯一32位ID编码代码,以满足对ID编号的唯一性加资源性解决问题...
- widow下svn上传项目时的文件可执行权限问题
- Java 性能测试的四项原则
- java 中使用_java中运算符的使用方法
- 【Python56--爬取妹子图】
- 系统安装 使用VMware14安装XP系统
- 计算机二级vb基础教程,2017计算机二级考试内容VB
- 2023软件测试最难求职季,哪些测试技能更容易拿到offer?
- 云祺与南非最大移动支付公司iVeri携手合作
- VueUse 中文文档:Components 组件
- JVM 直接内存的使用与回收
- MySQL高可用安装
- 微信公众平台如何配置业务域名
- 让命令不尽然history历史纪录的一种方法