rott/kf_sources/ScrnBalanceSrv/Classes/ScrnZedVoting.uc
2026-07-14 20:27:09 +07:00

107 lines
3.0 KiB
Ucode

class ScrnZedVoting extends ScrnVotingOptions;
var ScrnGameLength GL;
const VOTE_ZED = 0;
var string ZedVote;
// returns :
// 0 - vote is on
// 1 - vote is off
// 2 - partially on (some are on and some are off)
// -1 - vote not found
function int VoteState(string vote)
{
local int i, j, result, value;
result = -1;
for ( i = 0; i < GL.ZedInfos.length; ++i ) {
for ( j = 0; j < GL.ZedInfos[i].Zeds.length; ++j ) {
if ( GL.ZedInfos[i].Zeds[j].Vote ~= vote ) {
value = int((!GL.ZedInfos[i].Zeds[j].bDisabled) ^^ GL.ZedInfos[i].Zeds[j].bVoteInvert);
if ( result == -1 )
result = value;
else if ( result != value )
return 2;
}
}
}
return result;
}
function int GetGroupVoteIndex(PlayerController Sender, string Group, string Key, out string Value, out string VoteInfo)
{
local int VoteValue, BoolValue;
VoteValue = VoteState(Key);
BoolValue = TryStrToBool(Value);
if ( VoteValue == -1 )
return VOTE_UNKNOWN;
else if ( BoolValue == -1 )
return VOTE_ILLEGAL;
else if ( BoolValue == VoteValue )
return VOTE_NOEFECT;
ZedVote = Key;
return VOTE_ZED;
}
function ApplyVoteValue(int VoteIndex, string VoteValue)
{
local int i, j;
local int BoolValue;
local bool bDisabled, bChanged;
BoolValue = TryStrToBool(VoteValue);
bDisabled = !bool(BoolValue);
for ( i = 0; i < GL.ZedInfos.length; ++i ) {
bChanged = false;
for ( j = 0; j < GL.ZedInfos[i].Zeds.length; ++j ) {
if ( GL.ZedInfos[i].Zeds[j].Vote ~= ZedVote ) {
GL.ZedInfos[i].Zeds[j].bDisabled = bDisabled ^^ GL.ZedInfos[i].Zeds[j].bVoteInvert;
bChanged = true;
}
}
if ( bChanged )
GL.ZedInfos[i].SaveConfig();
}
}
function SendGroupHelp(PlayerController Sender, string Group)
{
local string s;
local int i;
local int ln;
ln = 1;
for ( i = 0; i < GL.ZedVotes.length; ++i ) {
switch (VoteState(GL.ZedVotes[i])) {
case 0: s @= "%r"; break;
case 1: s @= "%g"; break;
case 2: s @= "%y"; break;
default: s @= "%k"; break; // shouldn't happen
}
s $= GL.ZedVotes[i];
if ( len(s) > 60 ) {
// move to new line
GroupInfo[ln++] = VotingHandler.ParseHelpLine(default.GroupInfo[1] @ s);
s = "";
}
}
if ( s != "" )
GroupInfo[ln++] = VotingHandler.ParseHelpLine(default.GroupInfo[1] @ s);
super.SendGroupHelp(Sender, Group);
}
defaultproperties
{
DefaultGroup="ZED"
HelpInfo(0)="%pZED %y<zed_vote> %gON%w|%rOFF %w Add|Remove zeds from the game. Type %bMVOTE ZED HELP %w for more info."
GroupInfo(0)="%pZED %y<zed_vote> %gON%w|%rOFF %w Add or remove zeds from the game. Map restart required."
GroupInfo(1)="%wZed votes:"
}