|
|
@ -22,19 +22,27 @@ class MapTool extends AcediaObject; |
|
|
|
var private NativeActorRef votingHandlerReference; |
|
|
|
var private NativeActorRef votingHandlerReference; |
|
|
|
// Maps map pseudonims we've used in voting handler to real map names |
|
|
|
// Maps map pseudonims we've used in voting handler to real map names |
|
|
|
var private HashTable pseudonimToMap; |
|
|
|
var private HashTable pseudonimToMap; |
|
|
|
var private array<VotingHandler.MapVoteMapList> outputMapList; |
|
|
|
var private array<VotingHandler.MapVoteMapList> pseudonimMapList; |
|
|
|
|
|
|
|
var private array<VotingHandler.MapVoteMapList> realMapList; |
|
|
|
var private int gameModesSeen; |
|
|
|
var private int gameModesSeen; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var private string backupMessageMapWon; |
|
|
|
|
|
|
|
var private string backupMessageAdminMapChange; |
|
|
|
|
|
|
|
var private const string ACEDIA_MAP_FORCED_COMMAND; |
|
|
|
|
|
|
|
var private const string ACEDIA_MAP_WON_COMMAND; |
|
|
|
|
|
|
|
|
|
|
|
protected function Constructor() { |
|
|
|
protected function Constructor() { |
|
|
|
pseudonimToMap = _.collections.EmptyHashTable(); |
|
|
|
pseudonimToMap = _.collections.EmptyHashTable(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
protected function Finalizer() { |
|
|
|
protected function Finalizer() { |
|
|
|
|
|
|
|
_server.unreal.broadcasts.OnHandleText(self).Disconnect(); |
|
|
|
_.memory.Free(votingHandlerReference); |
|
|
|
_.memory.Free(votingHandlerReference); |
|
|
|
_.memory.Free(pseudonimToMap); |
|
|
|
_.memory.Free(pseudonimToMap); |
|
|
|
votingHandlerReference = none; |
|
|
|
votingHandlerReference = none; |
|
|
|
pseudonimToMap = none; |
|
|
|
pseudonimToMap = none; |
|
|
|
outputMapList.length = 0; |
|
|
|
pseudonimMapList.length = 0; |
|
|
|
|
|
|
|
realMapList.length = 0; |
|
|
|
gameModesSeen = 0; |
|
|
|
gameModesSeen = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -54,7 +62,7 @@ public function string LoadGameModeMaps(GameMode gameMode) { |
|
|
|
local Text mapNameReal, mapNamePseudonim; |
|
|
|
local Text mapNameReal, mapNamePseudonim; |
|
|
|
local VotingHandler.MapHistoryInfo nextMapInfo; |
|
|
|
local VotingHandler.MapHistoryInfo nextMapInfo; |
|
|
|
local VotingHandler.MapVoteMapList nextRecord; |
|
|
|
local VotingHandler.MapVoteMapList nextRecord; |
|
|
|
local array<VotingHandler.MapVoteMapList> newMaps; |
|
|
|
local array<VotingHandler.MapVoteMapList> newMapsPseudonim, newMapReal; |
|
|
|
local string gameModePrefix; |
|
|
|
local string gameModePrefix; |
|
|
|
|
|
|
|
|
|
|
|
votingHandler = GetVotingHandler(); |
|
|
|
votingHandler = GetVotingHandler(); |
|
|
@ -70,7 +78,6 @@ public function string LoadGameModeMaps(GameMode gameMode) { |
|
|
|
mapNamePseudonim = MakeMapPseudonim(mapNameReal, gameModePrefix); |
|
|
|
mapNamePseudonim = MakeMapPseudonim(mapNameReal, gameModePrefix); |
|
|
|
pseudonimToMap.SetItem(mapNamePseudonim, mapNameReal); |
|
|
|
pseudonimToMap.SetItem(mapNamePseudonim, mapNameReal); |
|
|
|
// Setup `VotingHandler.MapVoteMapList` struct for next map |
|
|
|
// Setup `VotingHandler.MapVoteMapList` struct for next map |
|
|
|
nextRecord.mapName = mapNamePseudonim.ToString(); |
|
|
|
|
|
|
|
if (votingHandler.history != none) { |
|
|
|
if (votingHandler.history != none) { |
|
|
|
nextMapInfo = votingHandler.history.GetMapHistory(mapNameReal.ToString()); |
|
|
|
nextMapInfo = votingHandler.history.GetMapHistory(mapNameReal.ToString()); |
|
|
|
nextRecord.playCount = nextMapInfo.p; |
|
|
|
nextRecord.playCount = nextMapInfo.p; |
|
|
@ -79,9 +86,12 @@ public function string LoadGameModeMaps(GameMode gameMode) { |
|
|
|
nextRecord.playCount = 0; |
|
|
|
nextRecord.playCount = 0; |
|
|
|
nextRecord.sequence = 0; |
|
|
|
nextRecord.sequence = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
newMaps[newMaps.length] = nextRecord; |
|
|
|
nextRecord.mapName = mapNamePseudonim.ToString(); |
|
|
|
|
|
|
|
newMapsPseudonim[newMapsPseudonim.length] = nextRecord; |
|
|
|
|
|
|
|
nextRecord.mapName = mapNameReal.ToString(); |
|
|
|
|
|
|
|
newMapReal[newMapReal.length] = nextRecord; |
|
|
|
} |
|
|
|
} |
|
|
|
AppendMapsIntoHandler(newMaps); |
|
|
|
AppendMaps(newMapsPseudonim, newMapReal); |
|
|
|
gameModesSeen += 1; |
|
|
|
gameModesSeen += 1; |
|
|
|
return gameModePrefix; |
|
|
|
return gameModePrefix; |
|
|
|
} |
|
|
|
} |
|
|
@ -148,7 +158,9 @@ private function ArrayList GetAllGameModeMaps(GameMode gameMode) { |
|
|
|
return result; |
|
|
|
return result; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private function AppendMapsIntoHandler(array<VotingHandler.MapVoteMapList> newMaps) { |
|
|
|
private function AppendMaps( |
|
|
|
|
|
|
|
array<VotingHandler.MapVoteMapList> newMapsPseudonim, |
|
|
|
|
|
|
|
array<VotingHandler.MapVoteMapList> newMapsReal) { |
|
|
|
local int i; |
|
|
|
local int i; |
|
|
|
local XVotingHandler votingHandler; |
|
|
|
local XVotingHandler votingHandler; |
|
|
|
|
|
|
|
|
|
|
@ -157,12 +169,11 @@ private function AppendMapsIntoHandler(array<VotingHandler.MapVoteMapList> newMa |
|
|
|
warn("votingHandler is none!"); |
|
|
|
warn("votingHandler is none!"); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if (newMaps.length == 0) { |
|
|
|
for (i = 0; i < newMapsPseudonim.length; i += 1) { |
|
|
|
warn("newMaps.length is 0!"); |
|
|
|
pseudonimMapList[pseudonimMapList.length] = newMapsPseudonim[i]; |
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
for (i = 0; i < newMaps.length; i += 1) { |
|
|
|
for (i = 0; i < newMapsReal.length; i += 1) { |
|
|
|
outputMapList[outputMapList.length] = newMaps[i]; |
|
|
|
realMapList[realMapList.length] = newMapsReal[i]; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -171,9 +182,47 @@ public final function InjectMaps() { |
|
|
|
|
|
|
|
|
|
|
|
votingHandler = GetVotingHandler(); |
|
|
|
votingHandler = GetVotingHandler(); |
|
|
|
if (votingHandler != none) { |
|
|
|
if (votingHandler != none) { |
|
|
|
votingHandler.mapList = outputMapList; |
|
|
|
votingHandler.mapList = pseudonimMapList; |
|
|
|
votingHandler.mapCount = outputMapList.length; |
|
|
|
votingHandler.mapCount = pseudonimMapList.length; |
|
|
|
|
|
|
|
backupMessageMapWon = votingHandler.lmsgMapWon; |
|
|
|
|
|
|
|
backupMessageAdminMapChange = votingHandler.lmsgAdminMapChange; |
|
|
|
|
|
|
|
votingHandler.lmsgMapWon = ACEDIA_MAP_WON_COMMAND $ "::%mapname%"; |
|
|
|
|
|
|
|
votingHandler.lmsgAdminMapChange = ACEDIA_MAP_FORCED_COMMAND $ "::%mapname%"; |
|
|
|
|
|
|
|
_server.unreal.broadcasts.OnHandleText(self).connect = HandleMapChange; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private function bool HandleMapChange( |
|
|
|
|
|
|
|
Actor sender, |
|
|
|
|
|
|
|
out string message, |
|
|
|
|
|
|
|
name type, |
|
|
|
|
|
|
|
bool teamMessage |
|
|
|
|
|
|
|
) { |
|
|
|
|
|
|
|
local Parser parser; |
|
|
|
|
|
|
|
local XVotingHandler votingHandler; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
votingHandler = GetVotingHandler(); |
|
|
|
|
|
|
|
if (sender == none) return true; |
|
|
|
|
|
|
|
if (votingHandler != sender) return true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
parser = _.text.ParseString(message); |
|
|
|
|
|
|
|
parser.Match(P(ACEDIA_MAP_WON_COMMAND)); |
|
|
|
|
|
|
|
parser.Match(P("::")); |
|
|
|
|
|
|
|
if (parser.Ok()) { |
|
|
|
|
|
|
|
message = Repl(backupMessageMapWon, "%mapname%", parser.GetRemainderS()); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
parser.Match(P(ACEDIA_MAP_FORCED_COMMAND)); |
|
|
|
|
|
|
|
parser.Match(P("::")); |
|
|
|
|
|
|
|
if (parser.Ok()) { |
|
|
|
|
|
|
|
message = Repl(backupMessageAdminMapChange, "%mapname%", parser.GetRemainderS()); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (parser.Ok()) { |
|
|
|
|
|
|
|
votingHandler.mapList = realMapList; |
|
|
|
|
|
|
|
votingHandler.mapCount = realMapList.length; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
_.memory.Free(parser); |
|
|
|
|
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private function XVotingHandler GetVotingHandler() { |
|
|
|
private function XVotingHandler GetVotingHandler() { |
|
|
@ -184,4 +233,6 @@ private function XVotingHandler GetVotingHandler() { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
defaultproperties { |
|
|
|
defaultproperties { |
|
|
|
|
|
|
|
ACEDIA_MAP_FORCED_COMMAND = "ACEDIA_LAUNCHER:MAP_FORCED:DEADBEEF" |
|
|
|
|
|
|
|
ACEDIA_MAP_WON_COMMAND = "ACEDIA_LAUNCHER:MAP_WON:DEADBEEF" |
|
|
|
} |
|
|
|
} |