mirror of
https://github.com/demostf/demo.js
synced 2026-06-04 00:54:14 +02:00
improve sayText2
This commit is contained in:
parent
9cb24b9a74
commit
50fd4beb3f
1 changed files with 141 additions and 100 deletions
241
packet.js
241
packet.js
|
|
@ -2,7 +2,10 @@ var ParserGenerator = require('./parsergenerator');
|
||||||
var StringTable = require('./stringtable');
|
var StringTable = require('./stringtable');
|
||||||
var PacketStringTable = require('./packetstringtable');
|
var PacketStringTable = require('./packetstringtable');
|
||||||
|
|
||||||
function logBase2 (num) {
|
// https://code.google.com/p/coldemoplayer/source/browse/branches/2.0/compLexity+Demo+Player/CDP.Source/Messages/?r=219
|
||||||
|
// https://github.com/TimePath/hl2-toolkit/tree/master/src/main/java/com/timepath/hl2/io/demo
|
||||||
|
|
||||||
|
function logBase2(num) {
|
||||||
var result = 0;
|
var result = 0;
|
||||||
while ((num >>= 1) != 0) {
|
while ((num >>= 1) != 0) {
|
||||||
result++;
|
result++;
|
||||||
|
|
@ -51,8 +54,8 @@ Packet.parseGameEvent = function (eventId, stream) {
|
||||||
values[entry.name] = Packet.getGameEventValue(stream, entry);
|
values[entry.name] = Packet.getGameEventValue(stream, entry);
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
name: eventDescription.name,
|
name : eventDescription.name,
|
||||||
type: eventDescription.type,
|
type : eventDescription.type,
|
||||||
values: values
|
values: values
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
@ -79,12 +82,12 @@ Packet.getGameEventValue = function (stream, entry) {
|
||||||
};
|
};
|
||||||
|
|
||||||
Packet.parsers = {
|
Packet.parsers = {
|
||||||
0: function () {
|
0 : function () {
|
||||||
},
|
},
|
||||||
2: ParserGenerator.make('file', 'transferId{32}fileName{s}requested{b}'),
|
2 : ParserGenerator.make('file', 'transferId{32}fileName{s}requested{b}'),
|
||||||
3: ParserGenerator.make('netTick', 'tick{32}frameTime{16}stdDev{16}'),
|
3 : ParserGenerator.make('netTick', 'tick{32}frameTime{16}stdDev{16}'),
|
||||||
4: ParserGenerator.make('stringCmd', 'command{s}'),
|
4 : ParserGenerator.make('stringCmd', 'command{s}'),
|
||||||
5: function (stream) {
|
5 : function (stream) {
|
||||||
var count = stream.readBits(8);
|
var count = stream.readBits(8);
|
||||||
var vars = {};
|
var vars = {};
|
||||||
for (var i = 0; i < count; i++) {
|
for (var i = 0; i < count; i++) {
|
||||||
|
|
@ -92,12 +95,12 @@ Packet.parsers = {
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
packetType: 'setConVar',
|
packetType: 'setConVar',
|
||||||
vars: vars
|
vars : vars
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
6: ParserGenerator.make('sigOnState', 'state{8}count{32}'),
|
6 : ParserGenerator.make('sigOnState', 'state{8}count{32}'),
|
||||||
7: ParserGenerator.make('print', 'value{s}'),
|
7 : ParserGenerator.make('print', 'value{s}'),
|
||||||
8: ParserGenerator.make('serverInfo',
|
8 : ParserGenerator.make('serverInfo',
|
||||||
'version{16}serverCount{32}stv{b}dedicated{b}maxCrc{32}maxClasses{16}' +
|
'version{16}serverCount{32}stv{b}dedicated{b}maxCrc{32}maxClasses{16}' +
|
||||||
'mapHash{128}playerCount{8}maxPlayerCount{8}intervalPerTick{f32}platform{s1}' +
|
'mapHash{128}playerCount{8}maxPlayerCount{8}intervalPerTick{f32}platform{s1}' +
|
||||||
'game{s}map{s}skybox{s}serverName{s}replay{b}'),
|
'game{s}map{s}skybox{s}serverName{s}replay{b}'),
|
||||||
|
|
@ -109,8 +112,8 @@ Packet.parsers = {
|
||||||
var bits = logBase2(number) + 1;
|
var bits = logBase2(number) + 1;
|
||||||
for (var i = 0; i < number; i++) {
|
for (var i = 0; i < number; i++) {
|
||||||
var entry = {
|
var entry = {
|
||||||
'classId': stream.readBits(bits),
|
'classId' : stream.readBits(bits),
|
||||||
'className': stream.readASCIIString(),
|
'className' : stream.readASCIIString(),
|
||||||
'dataTableName': stream.readASCIIString()
|
'dataTableName': stream.readASCIIString()
|
||||||
};
|
};
|
||||||
entries.push(entry);
|
entries.push(entry);
|
||||||
|
|
@ -118,9 +121,9 @@ Packet.parsers = {
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
'packetType': 'classInfo',
|
'packetType': 'classInfo',
|
||||||
number: number,
|
number : number,
|
||||||
create: create,
|
create : create,
|
||||||
entries: entries
|
entries : entries
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
11: ParserGenerator.make('setPause', 'paused{b}'),
|
11: ParserGenerator.make('setPause', 'paused{b}'),
|
||||||
|
|
@ -171,7 +174,7 @@ Packet.parsers = {
|
||||||
stream._index = end;
|
stream._index = end;
|
||||||
return {
|
return {
|
||||||
packetType: 'createStringTable',
|
packetType: 'createStringTable',
|
||||||
table: stringTable
|
table : stringTable
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
13: function (stream) {
|
13: function (stream) {
|
||||||
|
|
@ -210,11 +213,11 @@ Packet.parsers = {
|
||||||
stream._index = end;
|
stream._index = end;
|
||||||
//throw false;
|
//throw false;
|
||||||
return {
|
return {
|
||||||
packetType: 'updateStringTables',
|
packetType : 'updateStringTables',
|
||||||
tableId: tableId,
|
tableId : tableId,
|
||||||
changedEntries: changeEntries,
|
changedEntries: changeEntries,
|
||||||
length: length,
|
length : length,
|
||||||
strings: strings
|
strings : strings
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
14: ParserGenerator.make('voiceInit', 'codec{s}quality{8}'),
|
14: ParserGenerator.make('voiceInit', 'codec{s}quality{8}'),
|
||||||
|
|
@ -226,9 +229,9 @@ Packet.parsers = {
|
||||||
stream._index += length;
|
stream._index += length;
|
||||||
return {
|
return {
|
||||||
packetType: 'parseSounds',
|
packetType: 'parseSounds',
|
||||||
reliable: reliable,
|
reliable : reliable,
|
||||||
num: num,
|
num : num,
|
||||||
length: length
|
length : length
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
18: ParserGenerator.make('setView', 'index{11}'),
|
18: ParserGenerator.make('setView', 'index{11}'),
|
||||||
|
|
@ -270,12 +273,12 @@ Packet.parsers = {
|
||||||
}
|
}
|
||||||
var lowPriority = !!stream.readBits(1);
|
var lowPriority = !!stream.readBits(1);
|
||||||
return {
|
return {
|
||||||
packetType: 'BSPDecal',
|
packetType : 'BSPDecal',
|
||||||
position: position,
|
position : position,
|
||||||
textureIndex: textureIndex,
|
textureIndex: textureIndex,
|
||||||
entIndex: entIndex,
|
entIndex : entIndex,
|
||||||
modelIndex: modelIndex,
|
modelIndex : modelIndex,
|
||||||
lowPriority: lowPriority
|
lowPriority : lowPriority
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
23: function (stream) {
|
23: function (stream) {
|
||||||
|
|
@ -288,7 +291,7 @@ Packet.parsers = {
|
||||||
} else {
|
} else {
|
||||||
result = {
|
result = {
|
||||||
packetType: 'unknownUserMessage',
|
packetType: 'unknownUserMessage',
|
||||||
type: type
|
type : type
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log(result);
|
console.log(result);
|
||||||
|
|
@ -305,7 +308,7 @@ Packet.parsers = {
|
||||||
stream._index = end;
|
stream._index = end;
|
||||||
return {
|
return {
|
||||||
packetType: 'gameEvent',
|
packetType: 'gameEvent',
|
||||||
event: event
|
event : event
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
26: function (stream) {
|
26: function (stream) {
|
||||||
|
|
@ -323,13 +326,13 @@ Packet.parsers = {
|
||||||
var updatedBaseLink = !!stream.readBits(1);
|
var updatedBaseLink = !!stream.readBits(1);
|
||||||
stream._index += length;
|
stream._index += length;
|
||||||
return {
|
return {
|
||||||
packetType: 'packetEntities',
|
packetType : 'packetEntities',
|
||||||
maxEntries: maxEntries,
|
maxEntries : maxEntries,
|
||||||
isDelta: isDelta,
|
isDelta : isDelta,
|
||||||
delta: delta,
|
delta : delta,
|
||||||
baseLink: baseLink,
|
baseLink : baseLink,
|
||||||
updatedEntries: updatedEntries,
|
updatedEntries : updatedEntries,
|
||||||
length: length,
|
length : length,
|
||||||
updatedBaseLink: updatedBaseLink
|
updatedBaseLink: updatedBaseLink
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -355,16 +358,16 @@ Packet.parsers = {
|
||||||
type = stream.readBits(3);
|
type = stream.readBits(3);
|
||||||
}
|
}
|
||||||
events[id] = {
|
events[id] = {
|
||||||
id: id,
|
id : id,
|
||||||
name: name,
|
name : name,
|
||||||
type: type,
|
type : type,
|
||||||
entries: entries
|
entries: entries
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
Packet.gameEventMap = events;
|
Packet.gameEventMap = events;
|
||||||
return {
|
return {
|
||||||
packetType: 'gameEventList',
|
packetType: 'gameEventList',
|
||||||
events: events
|
events : events
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
31: ParserGenerator.make('getCvarValue', 'cookie{32}value{s}'),
|
31: ParserGenerator.make('getCvarValue', 'cookie{32}value{s}'),
|
||||||
|
|
@ -372,69 +375,107 @@ Packet.parsers = {
|
||||||
};
|
};
|
||||||
|
|
||||||
Packet.userMessageParsers = {
|
Packet.userMessageParsers = {
|
||||||
4: ParserGenerator.make('sayText2', 'client{8}raw{8}kind{s}from{s}text{s}'),
|
4: function (stream) {
|
||||||
|
var client = stream.readBits(8);
|
||||||
|
var raw = stream.readBits(8);
|
||||||
|
var pos = stream._index;
|
||||||
|
var from, text, kind, arg1, arg2;
|
||||||
|
if (stream.readBits(8) === 1) {
|
||||||
|
var first = stream.readBits(8);
|
||||||
|
if (first === 7) {
|
||||||
|
var color = stream.readASCIIString(6);
|
||||||
|
} else {
|
||||||
|
stream._index = pos + 8;
|
||||||
|
}
|
||||||
|
text = stream.readASCIIString();
|
||||||
|
if (text.substr(0, 6) === '*DEAD*') {
|
||||||
|
// grave talk is in the format '*DEAD* \u0003$from\u0001: $text'
|
||||||
|
var start = text.indexOf('\u0003');
|
||||||
|
var end = text.indexOf('\u0001');
|
||||||
|
from = text.substr(start + 1, end - start - 1);
|
||||||
|
text = text.substr(end + 5);
|
||||||
|
kind = 'TF_Chat_AllDead';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
stream._index = pos;
|
||||||
|
kind = stream.readASCIIString();
|
||||||
|
from = stream.readASCIIString();
|
||||||
|
text = stream.readASCIIString();
|
||||||
|
stream.readASCIIString();
|
||||||
|
stream.readASCIIString();
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
packetType: 'sayText2',
|
||||||
|
client : client,
|
||||||
|
raw : raw,
|
||||||
|
kind : kind,
|
||||||
|
from : from,
|
||||||
|
text : text
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//4: ParserGenerator.make('sayText2', 'client{8}raw{8}kind{s}from{s}text{s}arg1{s}arg2{s}'),
|
||||||
5: ParserGenerator.make('textMsg', 'destType{8}text{s}')
|
5: ParserGenerator.make('textMsg', 'destType{8}text{s}')
|
||||||
};
|
};
|
||||||
|
|
||||||
var UserMessageType = {
|
var UserMessageType = {
|
||||||
Geiger: 0,
|
Geiger : 0,
|
||||||
Train: 1,
|
Train : 1,
|
||||||
HudText: 2,
|
HudText : 2,
|
||||||
SayText: 3,
|
SayText : 3,
|
||||||
SayText2: 4,
|
SayText2 : 4,
|
||||||
TextMsg: 5,
|
TextMsg : 5,
|
||||||
ResetHUD: 6,
|
ResetHUD : 6,
|
||||||
GameTitle: 7,
|
GameTitle : 7,
|
||||||
ItemPickup: 8,
|
ItemPickup : 8,
|
||||||
ShowMenu: 9,
|
ShowMenu : 9,
|
||||||
Shake: 10,
|
Shake : 10,
|
||||||
Fade: 11,
|
Fade : 11,
|
||||||
VGUIMenu: 12,
|
VGUIMenu : 12,
|
||||||
Rumble: 13,
|
Rumble : 13,
|
||||||
CloseCaption: 14,
|
CloseCaption : 14,
|
||||||
SendAudio: 15,
|
SendAudio : 15,
|
||||||
VoiceMask: 16,
|
VoiceMask : 16,
|
||||||
RequestState: 17,
|
RequestState : 17,
|
||||||
Damage: 18,
|
Damage : 18,
|
||||||
HintText: 19,
|
HintText : 19,
|
||||||
KeyHintText: 20,
|
KeyHintText : 20,
|
||||||
HudMsg: 21,
|
HudMsg : 21,
|
||||||
AmmoDenied: 22,
|
AmmoDenied : 22,
|
||||||
AchievementEvent: 23,
|
AchievementEvent : 23,
|
||||||
UpdateRadar: 24,
|
UpdateRadar : 24,
|
||||||
VoiceSubtitle: 25,
|
VoiceSubtitle : 25,
|
||||||
HudNotify: 26,
|
HudNotify : 26,
|
||||||
HudNotifyCustom: 27,
|
HudNotifyCustom : 27,
|
||||||
PlayerStatsUpdate: 28,
|
PlayerStatsUpdate : 28,
|
||||||
PlayerIgnited: 29,
|
PlayerIgnited : 29,
|
||||||
PlayerIgnitedInv: 30,
|
PlayerIgnitedInv : 30,
|
||||||
HudArenaNotify: 31,
|
HudArenaNotify : 31,
|
||||||
UpdateAchievement: 32,
|
UpdateAchievement : 32,
|
||||||
TrainingMsg: 33,
|
TrainingMsg : 33,
|
||||||
TrainingObjective: 34,
|
TrainingObjective : 34,
|
||||||
DamageDodged: 35,
|
DamageDodged : 35,
|
||||||
PlayerJarated: 36,
|
PlayerJarated : 36,
|
||||||
PlayerExtinguished: 37,
|
PlayerExtinguished : 37,
|
||||||
PlayerJaratedFade: 38,
|
PlayerJaratedFade : 38,
|
||||||
PlayerShieldBlocked: 39,
|
PlayerShieldBlocked: 39,
|
||||||
BreakModel: 40,
|
BreakModel : 40,
|
||||||
CheapBreakModel: 41,
|
CheapBreakModel : 41,
|
||||||
BreakModel_Pumpkin: 42,
|
BreakModel_Pumpkin : 42,
|
||||||
BreakModelRocketDud: 43,
|
BreakModelRocketDud: 43,
|
||||||
CallVoteFailed: 44,
|
CallVoteFailed : 44,
|
||||||
VoteStart: 45,
|
VoteStart : 45,
|
||||||
VotePass: 46,
|
VotePass : 46,
|
||||||
VoteFailed: 47,
|
VoteFailed : 47,
|
||||||
VoteSetup: 48,
|
VoteSetup : 48,
|
||||||
PlayerBonusPoints: 49,
|
PlayerBonusPoints : 49,
|
||||||
SpawnFlyingBird: 50,
|
SpawnFlyingBird : 50,
|
||||||
PlayerGodRayEffect: 51,
|
PlayerGodRayEffect : 51,
|
||||||
SPHapWeapEvent: 52,
|
SPHapWeapEvent : 52,
|
||||||
HapDmg: 53,
|
HapDmg : 53,
|
||||||
HapPunch: 54,
|
HapPunch : 54,
|
||||||
HapSetDrag: 55,
|
HapSetDrag : 55,
|
||||||
HapSet: 56,
|
HapSet : 56,
|
||||||
HapMeleeContact: 57
|
HapMeleeContact : 57
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = Packet;
|
module.exports = Packet;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue