mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Merged from revision: 7565
Multiplayer Bugfix: Fixed endless clock on enemy interrupt on the server, by reverting the non working interrupt fix which was introduced in revision 5623 - INFO: The endless clock on the client still occurs on certain enemy interrupts, but this can be fixed by pressing ALT + E on the server and giving the turn back to the client. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7566 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+1
-69
@@ -1947,74 +1947,6 @@ void send_interrupt (SOLDIERTYPE *pSoldier)
|
||||
}
|
||||
|
||||
// WANNE - MP: Here we have to add AddTopMessage() on the clients
|
||||
#ifdef INTERRUPT_MP_DEADLOCK_FIX
|
||||
|
||||
void recieveINTERRUPT (RPCParameters *rpcParameters)
|
||||
{
|
||||
INT_STRUCT* INT = (INT_STRUCT*)rpcParameters->input;
|
||||
SOLDIERTYPE* pOpponent = MercPtrs[ INT->Interrupted];
|
||||
|
||||
if(INT->bTeam == netbTeam || (is_server && INT->bTeam == 1))//its for us or we are server and its for AI which we control
|
||||
{
|
||||
|
||||
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
|
||||
{
|
||||
if((INT->gubOutOfTurnOrder[i] >= ubID_prefix) && (INT->gubOutOfTurnOrder[i] < (ubID_prefix+6)))
|
||||
{
|
||||
INT->gubOutOfTurnOrder[i]=INT->gubOutOfTurnOrder[i]-ubID_prefix;
|
||||
}
|
||||
}
|
||||
memcpy(gubOutOfTurnOrder,INT->gubOutOfTurnOrder, sizeof(UINT8) * MAXMERCS);
|
||||
gubOutOfTurnPersons = INT->gubOutOfTurnPersons;
|
||||
|
||||
|
||||
//AddTopMessage( PLAYER_INTERRUPT_MESSAGE, TeamTurnString[ 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
|
||||
{
|
||||
//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
|
||||
SOLDIERTYPE* pMerc = MercPtrs[ INT->ubID ];
|
||||
pMerc->HaultSoldierFromSighting(TRUE);
|
||||
FreezeInterfaceForEnemyTurn();
|
||||
InitEnemyUIBar( 0, 0 );
|
||||
fInterfacePanelDirty = DIRTYLEVEL2;
|
||||
gTacticalStatus.fInterruptOccurred = TRUE;
|
||||
|
||||
AddTopMessage( COMPUTER_INTERRUPT_MESSAGE, TeamTurnString[ INT->bTeam ] );
|
||||
//this needed to add details of who's interrupt it is - hayden
|
||||
|
||||
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
|
||||
|
||||
void recieveINTERRUPT (RPCParameters *rpcParameters)
|
||||
{
|
||||
INT_STRUCT* INT = (INT_STRUCT*)rpcParameters->input;
|
||||
@@ -2054,6 +1986,7 @@ void send_interrupt (SOLDIERTYPE *pSoldier)
|
||||
gTacticalStatus.fInterruptOccurred = TRUE;
|
||||
|
||||
//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
|
||||
}
|
||||
else
|
||||
@@ -2074,7 +2007,6 @@ void send_interrupt (SOLDIERTYPE *pSoldier)
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void intAI (SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
|
||||
@@ -148,10 +148,6 @@ extern char cServerName[30];
|
||||
//OJW - 20081224
|
||||
#define MAX_CONNECT_RETRIES 5
|
||||
|
||||
// WANNE: After some MP-Tests: It seems there are still problems with enemy interupt and if this define is enabled the ALT + E (give turn to client) does not work either. So I disabled this define for now ...
|
||||
// WANNE: If this define is enabled, it hopefully fixes the "enemy AI got stuck on pure client interrupt". (this "fix" was added in revision 5623)
|
||||
//#define INTERRUPT_MP_DEADLOCK_FIX
|
||||
|
||||
// WANNE: This features seems to work without any errors, so it is enabled :)
|
||||
#define ENABLE_MP_FRIENDLY_PLAYERS_SHARE_SAME_FOV
|
||||
|
||||
|
||||
+13
-33
@@ -1179,21 +1179,14 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred )
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"unchecked interrupt call area:(resume interrupted interrupt)...");
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef INTERRUPT_MP_DEADLOCK_FIX
|
||||
// INTERRUPT is calculated on the server who controls AI
|
||||
if (0) //the AI had interrupted someone //experiment with 0 as with doneaddindtointlist func
|
||||
#else
|
||||
if ((nbTeam > 0) && (nbTeam <6 ) && is_server) // AI interrupt resume and im server
|
||||
#endif
|
||||
{
|
||||
send_interrupt( npSoldier );
|
||||
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
|
||||
|
||||
}
|
||||
// INTERRUPT is calculated on the server who controls AI
|
||||
else if(is_server && gTacticalStatus.ubCurrentTeam == 1)//its AI's turn (it got interrupted)
|
||||
else if(is_server && gTacticalStatus.ubCurrentTeam == 1)// resume AI interrupted and im server
|
||||
{
|
||||
//hayden
|
||||
send_interrupt( npSoldier );
|
||||
@@ -1204,16 +1197,11 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred )
|
||||
StartInterrupt();
|
||||
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt of AI by %s", TeamNameStrings[npSoldier->bTeam]);
|
||||
}
|
||||
|
||||
#ifdef INTERRUPT_MP_DEADLOCK_FIX
|
||||
//its our turn//else// pure client awarding interrupt resume //its our turn
|
||||
else if(gTacticalStatus.ubCurrentTeam == 0)
|
||||
#else
|
||||
// pure client awarding interrupt resume
|
||||
else
|
||||
#endif
|
||||
}
|
||||
else// pure client awarding interrupt resume //suspect it needs to be: else if(gTacticalStatus.ubCurrentTeam == 0)//its our turn (we are moving)
|
||||
{
|
||||
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt with %s", TeamNameStrings[npSoldier->bTeam]);//this can be simplified if above comment is implemented
|
||||
//ClearIntList();
|
||||
//hayden//may need more work.
|
||||
@@ -2283,15 +2271,10 @@ void DoneAddingToIntList( SOLDIERTYPE * pSoldier, BOOLEAN fChange, UINT8 ubInter
|
||||
//npSoldier is interruptor
|
||||
//hayden
|
||||
|
||||
#ifdef INTERRUPT_MP_DEADLOCK_FIX
|
||||
// INTERRUPT is calculated on the server who controls AI
|
||||
if (0) //the AI has interrupted someone//made this 0 as interrupt should only be calculated by person whos turn it is
|
||||
#else
|
||||
// INTERRUPT is calculated on the server
|
||||
if ((nbTeam > 0) && (nbTeam <6 ) && is_server) //is for AI and are server
|
||||
#endif
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Interrupt calculated between %s and AI", TeamNameStrings[pSoldier->bTeam]);
|
||||
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s is interrupt by AI", TeamNameStrings[pSoldier->bTeam]);
|
||||
|
||||
// Only display the top message if we (the server) got interrupted
|
||||
if (pSoldier->bTeam == 0)
|
||||
@@ -2301,8 +2284,8 @@ void DoneAddingToIntList( SOLDIERTYPE * pSoldier, BOOLEAN fChange, UINT8 ubInter
|
||||
StartInterrupt();
|
||||
|
||||
}
|
||||
// INTERRUPT is calculated on the server who controls AI
|
||||
else if(is_server && gTacticalStatus.ubCurrentTeam == 1)//the AI has been interrupted
|
||||
// INTERRUPT is calculated on the server
|
||||
else if(is_server && gTacticalStatus.ubCurrentTeam == 1)// against ai and are server
|
||||
{
|
||||
//hayden
|
||||
send_interrupt( npSoldier ); //
|
||||
@@ -2311,20 +2294,17 @@ void DoneAddingToIntList( SOLDIERTYPE * pSoldier, BOOLEAN fChange, UINT8 ubInter
|
||||
else
|
||||
StartInterrupt();//
|
||||
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Interrupt calculated with AI and %s", TeamNameStrings[npSoldier->bTeam]);
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"AI is interrupted by %s", TeamNameStrings[npSoldier->bTeam]);
|
||||
}
|
||||
// INTERRUPT is calculated on the pure client or server
|
||||
else if(gTacticalStatus.ubCurrentTeam == 0)//its our turn
|
||||
// INTERRUPT is calculated on the pure client
|
||||
else if(gTacticalStatus.ubCurrentTeam == 0)//its our turn (we are moving)
|
||||
{
|
||||
#ifdef INTERRUPT_MP_DEADLOCK_FIX
|
||||
// Do nothing
|
||||
#else
|
||||
if (cGameType == MP_TYPE_COOP)
|
||||
ScreenMsg( FONT_MCOLOR_LTRED, MSG_INTERFACE, MPClientMessage[79]);
|
||||
#endif
|
||||
|
||||
send_interrupt( npSoldier );
|
||||
|
||||
|
||||
SOLDIERTYPE* pMerc = MercPtrs[ gusSelectedSoldier ];
|
||||
//AdjustNoAPToFinishMove( pMerc, TRUE );
|
||||
pMerc->HaultSoldierFromSighting(TRUE);
|
||||
@@ -2335,7 +2315,7 @@ void DoneAddingToIntList( SOLDIERTYPE * pSoldier, BOOLEAN fChange, UINT8 ubInter
|
||||
AddTopMessage( COMPUTER_INTERRUPT_MESSAGE, TeamTurnString[ nbTeam ] );
|
||||
gTacticalStatus.fInterruptOccurred = TRUE;
|
||||
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Interrupt calculated against You by %s", TeamNameStrings[npSoldier->bTeam]);
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"You have interrupted %s", TeamNameStrings[npSoldier->bTeam]);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user