mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +02:00
- MP Bugfix: Fixed the nasty interrupt bug (endless clock), when playing in COOP and the pure client got interrupted by the enemy AI (by haydent)
o As a workaround the server had to press ALT + E to give the turn back to the client. Now this workaround should not be needed (hopefully ) :) git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@5623 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+29
-26
@@ -1941,10 +1941,18 @@ void recieveINTERRUPT (RPCParameters *rpcParameters)
|
|||||||
INT_STRUCT* INT = (INT_STRUCT*)rpcParameters->input;
|
INT_STRUCT* INT = (INT_STRUCT*)rpcParameters->input;
|
||||||
SOLDIERTYPE* pOpponent = MercPtrs[ INT->Interrupted];
|
SOLDIERTYPE* pOpponent = MercPtrs[ INT->Interrupted];
|
||||||
|
|
||||||
if(INT->bTeam==netbTeam)//for us
|
if(INT->bTeam == netbTeam || (is_server && INT->bTeam == 1))//its for us or we are server and its for AI which we control
|
||||||
{
|
{
|
||||||
INT->bTeam=0;
|
|
||||||
INT->ubID=INT->ubID - ubID_prefix;
|
if(INT->bTeam == netbTeam){//for me
|
||||||
|
INT->bTeam=0;
|
||||||
|
INT->ubID=INT->ubID - ubID_prefix;
|
||||||
|
AddTopMessage( PLAYER_INTERRUPT_MESSAGE, TeamTurnString[ INT->bTeam ] );
|
||||||
|
}else{//for ai
|
||||||
|
//ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"starting ai" );
|
||||||
|
AddTopMessage( COMPUTER_INTERRUPT_MESSAGE, TeamTurnString[ INT->bTeam ] );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
for(int i=0; i <= INT->gubOutOfTurnPersons; i++)//this loop translates soldier id's from what they are in someone else's game to what they are locally
|
for(int i=0; i <= INT->gubOutOfTurnPersons; i++)//this loop translates soldier id's from what they are in someone else's game to what they are locally
|
||||||
{
|
{
|
||||||
@@ -1957,14 +1965,24 @@ void recieveINTERRUPT (RPCParameters *rpcParameters)
|
|||||||
gubOutOfTurnPersons = INT->gubOutOfTurnPersons;
|
gubOutOfTurnPersons = INT->gubOutOfTurnPersons;
|
||||||
|
|
||||||
|
|
||||||
AddTopMessage( PLAYER_INTERRUPT_MESSAGE, TeamTurnString[ INT->bTeam ] );
|
//AddTopMessage( PLAYER_INTERRUPT_MESSAGE, TeamTurnString[ INT->bTeam ] );
|
||||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Interrupt of %s awarded to %s.", TeamNameStrings[pOpponent->bTeam], TeamNameStrings[INT->bTeam] );
|
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Recieved interrupt between %s and %s.", TeamNameStrings[pOpponent->bTeam], TeamNameStrings[INT->bTeam] );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//start interrupt turn //real interrupt code
|
||||||
|
SOLDIERTYPE* pSoldier = MercPtrs[ INT->ubID ];
|
||||||
|
ManSeesMan(pSoldier,pOpponent,pOpponent->sGridNo,pOpponent->pathing.bLevel,2,1);
|
||||||
|
StartInterrupt();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
else//its not for us, make faux interrupt look while it happens
|
||||||
// WANNE - MP: This seems to cause the HANG on AI interrupt where we have to press ALT + E on the server!
|
|
||||||
if( INT->bTeam != 0)//not for our team - hayden
|
|
||||||
{
|
{
|
||||||
|
//this following section starts the interrupt, either with faux interrupt look, or real interrupt code, or nothing if already there
|
||||||
|
|
||||||
|
//if( INT->bTeam != 0)//not for our team - hayden
|
||||||
|
//{
|
||||||
|
|
||||||
//stop moving merc who was interrupted and init UI bar
|
//stop moving merc who was interrupted and init UI bar
|
||||||
SOLDIERTYPE* pMerc = MercPtrs[ INT->ubID ];
|
SOLDIERTYPE* pMerc = MercPtrs[ INT->ubID ];
|
||||||
@@ -1977,29 +1995,14 @@ void recieveINTERRUPT (RPCParameters *rpcParameters)
|
|||||||
AddTopMessage( COMPUTER_INTERRUPT_MESSAGE, TeamTurnString[ INT->bTeam ] );
|
AddTopMessage( COMPUTER_INTERRUPT_MESSAGE, TeamTurnString[ INT->bTeam ] );
|
||||||
//this needed to add details of who's interrupt it is - hayden
|
//this needed to add details of who's interrupt it is - hayden
|
||||||
|
|
||||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Interrupt with %s awarded to %s.", TeamNameStrings[pOpponent->bTeam], TeamNameStrings[INT->bTeam] );//was MPClientMessage[17], can be reconnected if text updated and translated
|
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Recieved interrupt with %s and %s.", TeamNameStrings[pOpponent->bTeam], TeamNameStrings[INT->bTeam] );//was MPClientMessage[17], can be reconnected if text updated and translated
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
//it for us ! :)
|
|
||||||
if(INT->gubOutOfTurnPersons==0)//indicates finished interrupt maybe can just call end interrupt
|
|
||||||
{
|
|
||||||
//ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"old int finish" );
|
|
||||||
}
|
|
||||||
else //start our interrupt turn
|
|
||||||
{
|
|
||||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Interrupt of %s awarded to you.", TeamNameStrings[pOpponent->bTeam] );//was MPClientMessage[37], can be reconnected if text updated and translated
|
|
||||||
|
|
||||||
SOLDIERTYPE* pSoldier = MercPtrs[ INT->ubID ];
|
|
||||||
ManSeesMan(pSoldier,pOpponent,pOpponent->sGridNo,pOpponent->pathing.bLevel,2,1);
|
|
||||||
StartInterrupt();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void intAI (SOLDIERTYPE *pSoldier )
|
void intAI (SOLDIERTYPE *pSoldier )
|
||||||
{
|
{
|
||||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"intAI with %s", TeamNameStrings[pSoldier->bTeam] );//was MPClientMessage[17], can be reconnected if text updated and translated
|
//ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"intAI with %s", TeamNameStrings[pSoldier->bTeam] );//was MPClientMessage[17], can be reconnected if text updated and translated
|
||||||
AddTopMessage( COMPUTER_INTERRUPT_MESSAGE, TeamTurnString[ pSoldier->bTeam ] );
|
AddTopMessage( COMPUTER_INTERRUPT_MESSAGE, TeamTurnString[ pSoldier->bTeam ] );
|
||||||
gTacticalStatus.fInterruptOccurred = TRUE;
|
gTacticalStatus.fInterruptOccurred = TRUE;
|
||||||
}
|
}
|
||||||
@@ -4606,7 +4609,7 @@ void teamwiped ( void )
|
|||||||
void recieve_wipe (RPCParameters *rpcParameters)
|
void recieve_wipe (RPCParameters *rpcParameters)
|
||||||
{
|
{
|
||||||
sc_struct* data = (sc_struct*)rpcParameters->input;
|
sc_struct* data = (sc_struct*)rpcParameters->input;
|
||||||
ScreenMsg( FONT_LTGREEN, MSG_INTERFACE, MPClientMessage[75], data->ubStartingTeam );
|
ScreenMsg( FONT_LTGREEN, MSG_INTERFACE, MPClientMessage[75], TeamNameStrings[data->ubStartingTeam] );
|
||||||
if(is_server)
|
if(is_server)
|
||||||
{
|
{
|
||||||
if(gTacticalStatus.ubCurrentTeam==data->ubStartingTeam)EndTurn( data->ubStartingTeam+1 );
|
if(gTacticalStatus.ubCurrentTeam==data->ubStartingTeam)EndTurn( data->ubStartingTeam+1 );
|
||||||
|
|||||||
+17
-17
@@ -1162,15 +1162,16 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred )
|
|||||||
#ifdef BETAVERSION
|
#ifdef BETAVERSION
|
||||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"unchecked interrupt call area:(resume interrupted interrupt)...");
|
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"unchecked interrupt call area:(resume interrupted interrupt)...");
|
||||||
#endif
|
#endif
|
||||||
|
// INTERRUPT is calculated on the server who controls AI
|
||||||
if ((nbTeam > 0) && (nbTeam <6 ) && is_server) // AI interrupt resume and im server
|
if (0)//(nbTeam > 0) && (nbTeam <6 ) && is_server) //the AI had interrupted someone //experiment with 0 as with doneaddindtointlist func
|
||||||
{
|
{
|
||||||
send_interrupt( npSoldier );
|
send_interrupt( npSoldier );
|
||||||
StartInterrupt();
|
StartInterrupt();
|
||||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt with %s and AI", TeamNameStrings[npSoldier->bTeam]);//tried to use pSoldier, but its not available. find another way to get correct team
|
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt with %s and AI", TeamNameStrings[npSoldier->bTeam]);//tried to use pSoldier, but its not available. find another way to get correct team
|
||||||
|
|
||||||
}
|
}
|
||||||
else if(is_server && gTacticalStatus.ubCurrentTeam == 1)// resume AI interrupted and im server
|
// INTERRUPT is calculated on the server who controls AI
|
||||||
|
else if(is_server && gTacticalStatus.ubCurrentTeam == 1)//its AI's turn (it got interrupted)
|
||||||
{
|
{
|
||||||
//hayden
|
//hayden
|
||||||
send_interrupt( npSoldier );
|
send_interrupt( npSoldier );
|
||||||
@@ -1183,7 +1184,7 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred )
|
|||||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt of AI by %s", TeamNameStrings[npSoldier->bTeam]);
|
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt of AI by %s", TeamNameStrings[npSoldier->bTeam]);
|
||||||
|
|
||||||
}
|
}
|
||||||
else// pure client awarding interrupt resume //suspect it needs to be: else if(gTacticalStatus.ubCurrentTeam == 0)//its our turn (we are moving)
|
else if(gTacticalStatus.ubCurrentTeam == 0)//its our turn//else// pure client awarding interrupt resume //its our turn
|
||||||
{
|
{
|
||||||
|
|
||||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt with %s", TeamNameStrings[npSoldier->bTeam]);//this can be simplified if above comment is implemented
|
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt with %s", TeamNameStrings[npSoldier->bTeam]);//this can be simplified if above comment is implemented
|
||||||
@@ -2259,10 +2260,10 @@ void DoneAddingToIntList( SOLDIERTYPE * pSoldier, BOOLEAN fChange, UINT8 ubInter
|
|||||||
//npSoldier is interruptor
|
//npSoldier is interruptor
|
||||||
//hayden
|
//hayden
|
||||||
|
|
||||||
// INTERRUPT is calculated on the server
|
// INTERRUPT is calculated on the server who controls AI
|
||||||
if ((nbTeam > 0) && (nbTeam <6 ) && is_server) //is for AI and are server
|
if (0)//((nbTeam > 0) && (nbTeam <6 ) && is_server) //the AI has interrupted someone//made this 0 as interrupt should only be calculated by person whos turn it is
|
||||||
{
|
{
|
||||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s is interrupt by AI", TeamNameStrings[pSoldier->bTeam]);
|
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Interrupt calculated between %s and AI", TeamNameStrings[pSoldier->bTeam]);
|
||||||
|
|
||||||
// Only display the top message if we (the server) got interrupted
|
// Only display the top message if we (the server) got interrupted
|
||||||
if (pSoldier->bTeam == 0)
|
if (pSoldier->bTeam == 0)
|
||||||
@@ -2272,8 +2273,8 @@ void DoneAddingToIntList( SOLDIERTYPE * pSoldier, BOOLEAN fChange, UINT8 ubInter
|
|||||||
StartInterrupt();
|
StartInterrupt();
|
||||||
|
|
||||||
}
|
}
|
||||||
// INTERRUPT is calculated on the server
|
// INTERRUPT is calculated on the server who controls AI
|
||||||
else if(is_server && gTacticalStatus.ubCurrentTeam == 1)// against ai and are server
|
else if(is_server && gTacticalStatus.ubCurrentTeam == 1)//the AI has been interrupted
|
||||||
{
|
{
|
||||||
//hayden
|
//hayden
|
||||||
send_interrupt( npSoldier ); //
|
send_interrupt( npSoldier ); //
|
||||||
@@ -2282,16 +2283,15 @@ void DoneAddingToIntList( SOLDIERTYPE * pSoldier, BOOLEAN fChange, UINT8 ubInter
|
|||||||
else
|
else
|
||||||
StartInterrupt();//
|
StartInterrupt();//
|
||||||
|
|
||||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"AI is interrupted by %s", TeamNameStrings[npSoldier->bTeam]);
|
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Interrupt calculated with AI and %s", TeamNameStrings[npSoldier->bTeam]);
|
||||||
}
|
}
|
||||||
// INTERRUPT is calculated on the pure client
|
// INTERRUPT is calculated on the pure client or server
|
||||||
else if(gTacticalStatus.ubCurrentTeam == 0)//its our turn (we are moving)
|
else if(gTacticalStatus.ubCurrentTeam == 0)//its our turn
|
||||||
{
|
{
|
||||||
ScreenMsg( FONT_MCOLOR_LTRED, MSG_INTERFACE, MPClientMessage[79]);
|
//ScreenMsg( FONT_MCOLOR_LTRED, MSG_INTERFACE, MPClientMessage[79]);
|
||||||
|
|
||||||
send_interrupt( npSoldier );
|
send_interrupt( npSoldier );
|
||||||
|
|
||||||
|
|
||||||
SOLDIERTYPE* pMerc = MercPtrs[ gusSelectedSoldier ];
|
SOLDIERTYPE* pMerc = MercPtrs[ gusSelectedSoldier ];
|
||||||
//AdjustNoAPToFinishMove( pMerc, TRUE );
|
//AdjustNoAPToFinishMove( pMerc, TRUE );
|
||||||
pMerc->HaultSoldierFromSighting(TRUE);
|
pMerc->HaultSoldierFromSighting(TRUE);
|
||||||
@@ -2302,7 +2302,7 @@ void DoneAddingToIntList( SOLDIERTYPE * pSoldier, BOOLEAN fChange, UINT8 ubInter
|
|||||||
AddTopMessage( COMPUTER_INTERRUPT_MESSAGE, TeamTurnString[ nbTeam ] );
|
AddTopMessage( COMPUTER_INTERRUPT_MESSAGE, TeamTurnString[ nbTeam ] );
|
||||||
gTacticalStatus.fInterruptOccurred = TRUE;
|
gTacticalStatus.fInterruptOccurred = TRUE;
|
||||||
|
|
||||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"You have interrupted %s", TeamNameStrings[npSoldier->bTeam]);
|
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Interrupt calculated against You by %s", TeamNameStrings[npSoldier->bTeam]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6407,7 +6407,7 @@ STR16 MPClientMessage[] =
|
|||||||
L"Spectator mode disabled",
|
L"Spectator mode disabled",
|
||||||
L"Choose client to kick from game. #1: <Cancel>, #2: %S, #3: %S, #4: %S",
|
L"Choose client to kick from game. #1: <Cancel>, #2: %S, #3: %S, #4: %S",
|
||||||
// 75
|
// 75
|
||||||
L"Team #%d is wiped out.",
|
L"Team %s is wiped out.",
|
||||||
L"Client failed to start. Terminating.",
|
L"Client failed to start. Terminating.",
|
||||||
L"Client disconnected and shutdown.",
|
L"Client disconnected and shutdown.",
|
||||||
L"Client is not running.",
|
L"Client is not running.",
|
||||||
|
|||||||
@@ -6410,7 +6410,7 @@ STR16 MPClientMessage[] =
|
|||||||
L"Spectator mode disabled",
|
L"Spectator mode disabled",
|
||||||
L"Choose client to kick from game. #1: <Cancel>, #2: %S, #3: %S, #4: %S",
|
L"Choose client to kick from game. #1: <Cancel>, #2: %S, #3: %S, #4: %S",
|
||||||
// 75
|
// 75
|
||||||
L"Team #%d is wiped out.",
|
L"Team %s is wiped out.",
|
||||||
L"Client failed to start. Terminating.",
|
L"Client failed to start. Terminating.",
|
||||||
L"Client disconnected and shutdown.",
|
L"Client disconnected and shutdown.",
|
||||||
L"Client is not running.",
|
L"Client is not running.",
|
||||||
|
|||||||
@@ -6404,7 +6404,7 @@ STR16 MPClientMessage[] =
|
|||||||
L"Spectator mode disabled",
|
L"Spectator mode disabled",
|
||||||
L"Choose client to kick from game. #1: <Cancel>, #2: %S, #3: %S, #4: %S",
|
L"Choose client to kick from game. #1: <Cancel>, #2: %S, #3: %S, #4: %S",
|
||||||
// 75
|
// 75
|
||||||
L"Team #%d is wiped out.",
|
L"Team %s is wiped out.",
|
||||||
L"Client failed to start. Terminating.",
|
L"Client failed to start. Terminating.",
|
||||||
L"Client disconnected and shutdown.",
|
L"Client disconnected and shutdown.",
|
||||||
L"Client is not running.",
|
L"Client is not running.",
|
||||||
|
|||||||
@@ -6390,7 +6390,7 @@ STR16 MPClientMessage[] =
|
|||||||
L"Mode spectateur désactivé",
|
L"Mode spectateur désactivé",
|
||||||
L"Choisir le numéro du client a kické :",
|
L"Choisir le numéro du client a kické :",
|
||||||
// 75
|
// 75
|
||||||
L"La team #%d a été anéantie.",
|
L"La team %s a été anéantie.",
|
||||||
L"Le client n'as pas réussi à démarrer. Terminé.",
|
L"Le client n'as pas réussi à démarrer. Terminé.",
|
||||||
L"Le client s'est déconnecté et s'est fermé.",
|
L"Le client s'est déconnecté et s'est fermé.",
|
||||||
L"Le client n'est pas démarré.",
|
L"Le client n'est pas démarré.",
|
||||||
|
|||||||
@@ -6229,7 +6229,7 @@ STR16 MPClientMessage[] =
|
|||||||
L"Überwachungsmodus wurde ausgeschaltet",
|
L"Überwachungsmodus wurde ausgeschaltet",
|
||||||
L"Wählen Sie den Client, der gekickt werden soll. #1: <Abbruch>, #2: %S, #3: %S, #4: %S",
|
L"Wählen Sie den Client, der gekickt werden soll. #1: <Abbruch>, #2: %S, #3: %S, #4: %S",
|
||||||
// 75
|
// 75
|
||||||
L"Team #%d wurde vernichtet",
|
L"Team %s wurde vernichtet",
|
||||||
L"Client konnte nicht gestartet werden. Beendigung.",
|
L"Client konnte nicht gestartet werden. Beendigung.",
|
||||||
L"Client Verbindung aufgelöst und heruntergefahren.",
|
L"Client Verbindung aufgelöst und heruntergefahren.",
|
||||||
L"Client läuft nicht.",
|
L"Client läuft nicht.",
|
||||||
|
|||||||
@@ -6398,7 +6398,7 @@ STR16 MPClientMessage[] =
|
|||||||
L"Spectator mode disabled",
|
L"Spectator mode disabled",
|
||||||
L"Choose client to kick from game. #1: <Cancel>, #2: %S, #3: %S, #4: %S",
|
L"Choose client to kick from game. #1: <Cancel>, #2: %S, #3: %S, #4: %S",
|
||||||
// 75
|
// 75
|
||||||
L"Team #%d is wiped out.",
|
L"Team %s is wiped out.",
|
||||||
L"Client failed to start. Terminating.",
|
L"Client failed to start. Terminating.",
|
||||||
L"Client disconnected and shutdown.",
|
L"Client disconnected and shutdown.",
|
||||||
L"Client is not running.",
|
L"Client is not running.",
|
||||||
|
|||||||
@@ -6407,7 +6407,7 @@ STR16 MPClientMessage[] =
|
|||||||
L"Spectator mode disabled",
|
L"Spectator mode disabled",
|
||||||
L"Choose client to kick from game. #1: <Cancel>, #2: %S, #3: %S, #4: %S",
|
L"Choose client to kick from game. #1: <Cancel>, #2: %S, #3: %S, #4: %S",
|
||||||
// 75
|
// 75
|
||||||
L"Team #%d is wiped out.",
|
L"Team %s is wiped out.",
|
||||||
L"Client failed to start. Terminating.",
|
L"Client failed to start. Terminating.",
|
||||||
L"Client disconnected and shutdown.",
|
L"Client disconnected and shutdown.",
|
||||||
L"Client is not running.",
|
L"Client is not running.",
|
||||||
|
|||||||
@@ -6381,7 +6381,7 @@ STR16 MPClientMessage[] =
|
|||||||
L"Spectator mode disabled",
|
L"Spectator mode disabled",
|
||||||
L"Укажите номер клиента, который нужно кикнуть. №1: <Отменить>, №2: %S, №3: %S, №4: %S",
|
L"Укажите номер клиента, который нужно кикнуть. №1: <Отменить>, №2: %S, №3: %S, №4: %S",
|
||||||
// 75
|
// 75
|
||||||
L"Команда #%d уничтожена.",
|
L"Команда %s уничтожена.",
|
||||||
L"Ошибка при запуске клиента. Завершение операции.",
|
L"Ошибка при запуске клиента. Завершение операции.",
|
||||||
L"Клиент отсоединился и закрыт.",
|
L"Клиент отсоединился и закрыт.",
|
||||||
L"Клиент не запущен.",
|
L"Клиент не запущен.",
|
||||||
|
|||||||
@@ -6414,7 +6414,7 @@ STR16 MPClientMessage[] =
|
|||||||
L"Spectator mode disabled",
|
L"Spectator mode disabled",
|
||||||
L"Choose client to kick from game. #1: <Cancel>, #2: %S, #3: %S, #4: %S",
|
L"Choose client to kick from game. #1: <Cancel>, #2: %S, #3: %S, #4: %S",
|
||||||
// 75
|
// 75
|
||||||
L"Team #%d is wiped out.",
|
L"Team %s is wiped out.",
|
||||||
L"Client failed to start. Terminating.",
|
L"Client failed to start. Terminating.",
|
||||||
L"Client disconnected and shutdown.",
|
L"Client disconnected and shutdown.",
|
||||||
L"Client is not running.",
|
L"Client is not running.",
|
||||||
|
|||||||
Reference in New Issue
Block a user