那位高手有魔兽争霸地图3中w3g文件,最好...

搜索关键说明:
对阵对阵双方地图时间
TerenasStand
TwistedMeadows
TurtleRock
SouthernTown 1.1
HiddenHope 1.02
Neo WiseGirl 1.0
BrightAndDark 1.04
SouthernTown 1.1
HiddenHope 1.02
TurtleRock
CentaurGrove
TerenasStand
TurtleRock
TurtleRock
TidewaterGlades
AncientIsles
SecretValley
AncientIsles
NomadIsles1.2
SecretValley
AncientIsles
AncientIsles
TwistedMeadows
TwistedMeadows
TurtleRock
TwistedMeadows
TurtleRock
TwistedMeadows
TwistedMeadows
TurtleRock
TwistedMeadows
TurtleRock
TerenasStand
TwistedMeadows
LastRefuge1.3
NomadIsles1.2
TerenasStand
LastRefuge1.3
近期最强大录像w3g文件看不了?_百度知道
w3g文件看不了?
这是为什么啊?只有地图是creg的才能观看。提示该录像是在另一个魔兽争霸3中录制的,看不了我电脑上自己在vs上玩的真三,其他的都是这样灰色的,在魔兽观看录像时看不了。但我电脑上就这一个魔兽啊
提问者采纳
这个应该是平台关系,有时候在平台房间上玩的魔兽版本与自己单机玩魔兽的版本是不同的,所以楼主可以试试去你平时玩真三的房间,在平台上启动魔兽观看录像
提问者评价
谢谢啊,从vs上启动游戏可以观看了
其他类似问题
按默认排序
其他2条回答
在保存录像的那个文件里用魔兽争霸游戏打开才能看。
用游戏打开还是一样的啊。都是显示在另一个魔兽版本录制的啊?
我不能发图片没办法了
你先进单机游戏
在进观看录像
在打开你保存的录像
记住是你自己保存的才能看。。。。。。。。。。。。。
录像文件,和你下载的。放在了魔兽争霸里的replay文件夹里,你一打开,里面的文件全是w3g格式,即录像文件,你可以试试看··
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁请问要看高手打魔兽争霸的录像要怎么做,我电脑上没有装魔兽,也没有录像的文件,只看录像,不想自己打_百度知道
请问要看高手打魔兽争霸的录像要怎么做,我电脑上没有装魔兽,也没有录像的文件,只看录像,不想自己打
要下什么版本的,录像又是到哪里找,因为没有录像可自由选择视角我不想看视频,如果要下魔兽的话,到哪里下比较好
提问者采纳
给你这个网址。魔兽争霸3的游戏哪里都可以下载.net/" target="_blank">http.24)都准备一份。而魔兽争霸录像文件只能使用魔兽争霸的游戏来观看回放.20版本(也可以是最新的1。建议你先下载魔兽争霸3的1,然后把各个官方发布的版本升级包(1。由于录像文件需要使用魔兽争霸的游戏引擎和地图文件,所以必须使用和当时对战双方同样的游戏版本和地图才行.replays.24版本)://war3,悠久,未解压缩的文件不可辨认)完全手打.20
1。录像文件的话,到时候根据录像需要进行升级或是反升级(只需要使用对应版本的升级包就可以无脑安装):<a href="http,新浪.replays。因为视频录制的视角是解说的视角.w3g文件://war3.net/专门提供各种录像文件下载的哦,到时候只需要将录像文件放在魔兽争霸3游戏安装文件下的replay文件夹就可以了(需要*,有很多你想看的东西可能会看不到!建议你还是装一个魔兽争霸的游戏,建议采纳,各个软件站都有提供
提问者评价
按默认排序
其他3条回答
录像游戏自带的冰封王座war3。打完一局后,再退回主界面点,先保存
可以去网络电视上面的游戏竞技频道看,或者直接到网上下载视频看,对于魔兽争霸保存的视频,如果没有装魔兽游戏的话,是不能够观看的,因为他要调用魔兽文件的一些内容。
WAR3。REPLAYS.NET可以满足你所有要求
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Java解析魔兽争霸3录像W3G文件(四):解析游戏进行时的信息
在上一篇博文中,通过解析压缩数据块解压缩后的数据的前一部分,可以获取到游戏开始前的一些信息,紧接着游戏开始前的信息之后,就是游戏进行时的信息了,其中包括玩家游戏中的操作,例如造建筑,出兵,攻击,移动等,还包括玩家游戏中的聊天信息,玩家退出游戏等。
游戏进行时的信息由很多个数据块组成。这些数据块有几种类型,每个数据块的第一个字节就是数据块ID,用于标识数据块的类型。
下面列出各种数据块类型及其对应的数据块ID、数据块字节数和数据块结构:
1、0x17 - 玩家离开游戏的数据块
数据块ID:0x17
数据块字节数:14字节
1字节:数据块ID,0x17;
2~5字节:原因;
6字节:玩家ID;
7~10字节:结果;
11~14字节:未知。
2、0x20 - 玩家聊天信息的数据块
数据块ID:0x20
数据块字节数:n &#43; 4字节
1字节:数据块ID,0x20;
2字节:玩家ID;
3~4字节:数据块剩余的数据的字节数n;
5字节:flag;
6~9字节:聊天模式,0x00:对所有玩家,0x01:对队友,0x02:对裁判或观看者,0x03或大于0x03:对指定玩家,玩家的slotNumber是该&#20540;减去3的结果,注意这里是slotNumber而不是玩家ID;
10~n&#43;4字节:聊天内容,字符串,最后一个字节是0x00。
3、0x1E/0x1F C 游戏时间段(TimeSlot)数据块
数据块ID:0x1E或0x1F
数据块字节数:n&#43;3字节
1字节:数据块ID,0x1E或0x1F;
2~3字节:数据块剩余的数据的字节数n,最小&#20540;可能是2;
4~5字节:时间段的时间长度(毫秒,&#20540;一般是100毫秒左右);
6~n&#43;3字节:玩家在这个时间段内的操作信息,当n为2时这部分不存在。这部分内容在下面一篇博文中再进行解析。
以上三种类型的数据块是需要解析的数据块,下面还有几种类型的数据块就不用去解析:
4、0x1A/0x1B/0x1C,5字节;
5、0x22,6字节;
6、0x23,11字节;
7、0x2F,9字节。
其中,游戏时间段(TimeSlot)数据块是游戏时间进度的标识,每个时间段100毫秒左右,其中包含玩家在这段时间内的操作信息。而游戏时间段数据块中的毫秒数累加后,就是游戏进行到的时间。比如玩家的操作、聊天、离开游戏的时间,就可以用其对应数据块之前的所有TimeSlot数据块中的时间累加来计算。
解析游戏进行时的信息:
添加ReplayData.java用来解析游戏进行时的信息。
ReplayData.java
package com.xxg.w3
import java.io.UnsupportedEncodingE
import java.util.ArrayL
import java.util.L
public class ReplayData {
* 解压缩的字节数组
private byte[] uncompressedDataB
* 解析的字节位置
* 玩家列表
private List playerL
* 游戏进行时的时间(毫秒)
* 聊天信息集合
private List chatList = new ArrayList();
public ReplayData(byte[] uncompressedDataBytes, int offset, List playerList) throws W3GException, UnsupportedEncodingException {
this.uncompressedDataBytes = uncompressedDataB
this.offset =
this.playerList = playerL
analysis();
private void analysis() throws UnsupportedEncodingException, W3GException
byte blockId = 0;
while ((blockId = uncompressedDataBytes[offset]) != 0) {
switch (blockId) {
// 聊天信息
case 0x20:
analysisChatMessage();
// 时间段(一般是100毫秒左右一段)
case 0x1E:
case 0x1F:
analysisTimeSlot();
// 玩家离开游戏
case 0x17:
analysisLeaveGame();
// 未知的BlockId
case 0x1A:
case 0x1B:
case 0x1C:
offset += 5;
case 0x22:
offset += 6;
case 0x23:
offset += 11;
case 0x2F:
offset += 9;
// 无效的Block
throw new W3GException("无效Block,ID:" + blockId);
解析聊天信息
private void analysisChatMessage() throws UnsupportedEncodingException {
ChatMessage chatMessage = new ChatMessage();
byte playerId = uncompressedDataBytes[offset];
chatMessage.setFrom(getPlayById(playerId));
int bytes = LittleEndianTool.getUnsignedInt16(uncompressedDataBytes, offset);
offset += 2;
long mode = LittleEndianTool.getUnsignedInt32(uncompressedDataBytes, offset);
if(mode >= 3) {
int receiverPlayerId = (int) (mode - 3);
chatMessage.setTo(getPlayBySlotNumber(receiverPlayerId));
chatMessage.setMode(mode);
offset += 4;
String message = new String(uncompressedDataBytes, offset, bytes - 6, "UTF-8");
chatMessage.setMessage(message);
offset += bytes - 5;
chatMessage.setTime(time);
chatList.add(chatMessage);
解析一个时间块
private void analysisTimeSlot() {
int bytes = LittleEndianTool.getUnsignedInt16(uncompressedDataBytes, offset);
offset += 2;
int timeIncrement = LittleEndianTool.getUnsignedInt16(uncompressedDataBytes, offset);
time += timeI
offset += 2;
offset += bytes - 2;
* 玩家离开游戏Block解析
private void analysisLeaveGame() {
offset += 5;
// 玩家离开游戏就不再计算游戏时间
byte playerId = uncompressedDataBytes[offset];
Player player = getPlayById(playerId);
player.setPlayTime(time);
offset += 9;
通过玩家ID获取Player对象
@param playerId 玩家ID
@return 对应的Player对象
private Player getPlayById(byte playerId) {
Player p =
for(Player player : playerList) {
if(playerId == player.getPlayerId()) {
通过玩家SlotNumber获取Player对象
@param slotNumber 玩家SlotNumber
@return 对应的Player对象
private Player getPlayBySlotNumber(int slotNumber) {
Player p =
for(Player player : playerList) {
if(slotNumber == player.getSlotNumber()) {
public List getChatList() {
return chatL
ChatMessage.java是玩家游戏过程中的聊天信息对应的Java对象,通过解析玩家聊天信息的数据块获取。
ChatMessage.java
package com.xxg.w3
public class ChatMessage {
* 发送方式
* 0:发送给所有玩家
* 1:发送给队友
* 2:发送给裁判或观看者
* 3+N:发送给指定玩家
* 接收者(mode为3+N时有效)
* 消息发送时间
* 消息内容
public Player getFrom() {
public void setFrom(Player from) {
this.from =
public long getMode() {
public void setMode(long mode) {
this.mode =
public Player getTo() {
public void setTo(Player to) {
public long getTime() {
public void setTime(long time) {
this.time =
public String getMessage() {
public void setMessage(String message) {
this.message =
由于玩家可能在游戏过程中离开游戏,要想知道玩家的实际游戏时间,就要排除玩家离开游戏之后的时间,而不能直接使用录像的时长。如果要计算APM的话,就必须使用玩家的实际游戏时间来计算。所以在Player.java中加入playTime表示实际游戏时间,通过解析玩家离开游戏的数据块来设置。
Player.java
* 游戏时间
private long playT
public long getPlayTime() {
return playT
public void setPlayTime(long playTime) {
this.playTime = playT
在UncompressedData类中加入对游戏进行时的信息的解析。
UncompressedData.java
* 游戏进行时的信息
private ReplayData replayD
public UncompressedData(byte[] uncompressedDataBytes) throws UnsupportedEncodingException, W3GException {
this.uncompressedDataBytes = uncompressedDataB
// 跳过前4个未知字节
offset += 4;
// 解析第一个玩家
analysisPlayerRecode();
// 游戏名称(UTF-8编码)
int begin =
while(uncompressedDataBytes[offset] != 0) {
gameName = new String(uncompressedDataBytes, begin, offset - begin, "UTF-8");
// 跳过一个空字节
// 解析一段特殊编码的字节串,其中包含游戏设置、地图和创建者
analysisEncodedBytes();
// 跳过PlayerCount、GameType、LanguageID
offset += 12;
// 解析玩家列表
while(uncompressedDataBytes[offset] == 0x16) {
analysisPlayerRecode();
// 跳过4个未知的字节0x
offset += 4;
// GameStartRecord - RecordID、number of data bytes following
offset += 3;
// 解析每个Slot
byte slotCount = uncompressedDataBytes[offset];
for(int i = 0; i < slotC i++) {
analysisSlotRecode(i);
// RandomSeed、RandomSeed、StartSpotCount
offset += 6;
// 游戏进行时的信息解析
replayData = new ReplayData(uncompressedDataBytes, offset, playerList);
public ReplayData getReplayData() {
return replayD
修改Test.java类中main方法进行测试。
package com.xxg.w3
import java.io.F
import java.io.IOE
import java.util.L
import java.util.zip.DataFormatE
public class Test {
public static void main(String[] args) throws IOException, W3GException, DataFormatException {
Replay replay = new Replay(new File("C:/Documents and Settings/Administrator/桌面/131229_[ORC]Sickofpast_VS_[NE]_AncientIsles_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());
System.out.println("游戏时长:" + convertMillisecondToString(player.getPlayTime()));
if(player.isHost()) {
System.out.println("是否主机:主机");
System.out.println("是否主机:否");
if(player.getTeamNumber() != 12) {
System.out.println("玩家队伍:" + (player.getTeamNumber() + 1));
switch(player.getRace()) {
case 0x01:
case 0x41:
System.out.println("玩家种族:人族");
case 0x02:
case 0x42:
System.out.println("玩家种族:兽族");
case 0x04:
case 0x44:
System.out.println("玩家种族:暗夜精灵");
case 0x08:
case 0x48:
System.out.println("玩家种族:不死族");
case 0x20:
case 0x60:
System.out.println("玩家种族:随机");
switch(player.getColor()) {
System.out.println("玩家颜色:红");
System.out.println("玩家颜色:蓝");
System.out.println("玩家颜色:青");
System.out.println("玩家颜色:紫");
System.out.println("玩家颜色:黄");
System.out.println("玩家颜色:橘");
System.out.println("玩家颜色:绿");
System.out.println("玩家颜色:粉");
System.out.println("玩家颜色:灰");
System.out.println("玩家颜色:浅蓝");
System.out.println("玩家颜色:深绿");
System.out.println("玩家颜色:棕");
System.out.println("障碍(血量):" + player.getHandicap() + "%");
if(player.isComputer()) {
System.out.println("是否电脑玩家:电脑玩家");
switch (player.getAiStrength()) {
System.out.println("电脑难度:简单的");
System.out.println("电脑难度:中等难度的");
System.out.println("电脑难度:令人发狂的");
System.out.println("是否电脑玩家:否");
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()) {
chatString += "所有人";
chatString += "队伍";
chatString += "裁判或观看者";
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" +
return minite + ":" +
运行程序,输出结果:
版本:1.26.6059
时长:14:43
游戏名称:当地局域网内的游戏 (Si
游戏创建者:Sickofpast
游戏地图:Maps\WAR3\(2)AncientIsles-2.w3x
---玩家1---
玩家名称:Sickofpast
游戏时长:14:43
是否主机:主机
玩家队伍:1
玩家种族:兽族
玩家颜色:红
障碍(血量):100%
是否电脑玩家:否
---玩家2---
玩家名称:&#23612;德霍&#26684;
游戏时长:14:42
是否主机:否
玩家队伍:2
玩家种族:暗夜精灵
玩家颜色:蓝
障碍(血量):100%
是否电脑玩家:否
[0:10]&#23612;德霍&#26684; 对 所有人 说:All rights reserved by Blizzard
[0:10]&#23612;德霍&#26684; 对 所有人 说:w3g files released by www.Replays.Net.
[0:15]Sickofpast 对 所有人 说:yy上都是菜鸟啊
[0:28]&#23612;德霍&#26684; 对 所有人 说:diyi orc!
[0:37]&#23612;德霍&#26684; 对 所有人 说:就yy有人玩了
[0:39]Sickofpast 对 所有人 说:打ne没赢过
[0:40]&#23612;德霍&#26684; 对 所有人 说:中国第一ORC
[14:33]&#23612;德霍&#26684; 对 所有人 说:For more replays, plz visit www.Replays.Net
[14:42]&#23612;德霍&#26684; 对 所有人 说:g
参考文档:http://w3g.deepnode.de/files/w3g_format.txt
作者:叉叉哥
转载请注明出处:http://blog.csdn.net/xiao__gui/article/details/
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。}

我要回帖

更多关于 魔兽争霸地图 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信