# HG changeset patch # User Adam Kaminski # Date 1607285070 18000 # Sun Dec 06 15:04:30 2020 -0500 # Node ID a933a4e7cb68e33dbbef0f96230e2aa918d7fbb4 # Parent fd3392863367d367aa28a2b7145405ca2cce4a97 Actors inheriting from the "WhiteFlag" class now work properly in One Flag CTF. diff -r fd3392863367 -r a933a4e7cb68 src/g_doom/doom_sbar.cpp --- a/src/g_doom/doom_sbar.cpp Fri Dec 04 19:48:07 2020 -0500 +++ b/src/g_doom/doom_sbar.cpp Sun Dec 06 15:04:30 2020 -0500 @@ -752,7 +752,7 @@ // If they're not, then check to see if they're carrying the white flag in one // flag CTF. if ( ( pInventory == NULL ) && CPlayer->mo ) - pInventory = CPlayer->mo->FindInventory( PClass::FindClass( "WhiteFlag" )); + pInventory = CPlayer->mo->FindInventory( PClass::FindClass( "WhiteFlag" ), true ); // If the player is carrying any of these "flags", draw an indicator. if ( pInventory ) diff -r fd3392863367 -r a933a4e7cb68 src/g_shared/a_flags.cpp --- a/src/g_shared/a_flags.cpp Fri Dec 04 19:48:07 2020 -0500 +++ b/src/g_shared/a_flags.cpp Sun Dec 06 15:04:30 2020 -0500 @@ -138,7 +138,7 @@ // Execute the return scripts. if ( NETWORK_InClientMode() == false ) { - if ( this->GetClass( ) == PClass::FindClass( "WhiteFlag" )) + if ( this->IsKindOf( PClass::FindClass( "WhiteFlag" ) )) { FBehavior::StaticStartTypedScripts( SCRIPT_WhiteReturn, NULL, true ); } @@ -972,7 +972,7 @@ LONG AWhiteFlag::AllowFlagPickup( AActor *pToucher ) { // [BB] Carrying more than one WhiteFlag is not allowed. - if (( pToucher == NULL ) || ( pToucher->FindInventory( PClass::FindClass( "WhiteFlag" ) ) == NULL ) ) + if (( pToucher == NULL ) || ( pToucher->FindInventory( PClass::FindClass( "WhiteFlag" ), true ) == NULL ) ) return ( ALLOW_PICKUP ); else return ( DENY_PICKUP ); diff -r fd3392863367 -r a933a4e7cb68 src/medal.cpp --- a/src/medal.cpp Fri Dec 04 19:48:07 2020 -0500 +++ b/src/medal.cpp Sun Dec 06 15:04:30 2020 -0500 @@ -910,7 +910,7 @@ } // Delete the white flag if the player no longer has it. - pInventory = pPlayer->mo->FindInventory( PClass::FindClass( "WhiteFlag" )); + pInventory = pPlayer->mo->FindInventory( PClass::FindClass( "WhiteFlag" ), true ); if ( pInventory == NULL ) { bInvalid = true; @@ -1060,7 +1060,7 @@ { if ( oneflagctf ) { - AInventory *pInventory = pPlayer->mo->FindInventory( PClass::FindClass( "WhiteFlag" )); + AInventory *pInventory = pPlayer->mo->FindInventory( PClass::FindClass( "WhiteFlag" ), true ); if ( pInventory ) ulDesiredSprite = SPRITE_WHITEFLAG; } @@ -1179,7 +1179,7 @@ } // Delete the white flag if the player no longer has it. - pInventory = pPlayer->mo->FindInventory( PClass::FindClass( "WhiteFlag" )); + pInventory = pPlayer->mo->FindInventory( PClass::FindClass( "WhiteFlag" ), true ); if (( oneflagctf ) && ( pInventory == NULL )) bDelete = true; diff -r fd3392863367 -r a933a4e7cb68 src/p_map.cpp --- a/src/p_map.cpp Fri Dec 04 19:48:07 2020 -0500 +++ b/src/p_map.cpp Sun Dec 06 15:04:30 2020 -0500 @@ -6031,7 +6031,7 @@ } // [BC] Do the same thing, except for the white flag. - if ( thing->GetClass( ) == PClass::FindClass( "WhiteFlag" )) + if ( thing->IsKindOf( PClass::FindClass( "WhiteFlag" ) )) { if ( thing->flags & MF_DROPPED ) TEAM_ExecuteReturnRoutine( teams.Size( ), NULL ); diff -r fd3392863367 -r a933a4e7cb68 src/p_mobj.cpp --- a/src/p_mobj.cpp Fri Dec 04 19:48:07 2020 -0500 +++ b/src/p_mobj.cpp Sun Dec 06 15:04:30 2020 -0500 @@ -5058,7 +5058,7 @@ TEAM_ExecuteReturnRoutine( i, NULL ); } - if (( oneflagctf ) && ( actor->GetClass( ) == PClass::FindClass( "WhiteFlag" ))) + if (( oneflagctf ) && ( actor->IsKindOf( PClass::FindClass( "WhiteFlag" ) ))) TEAM_ExecuteReturnRoutine( teams.Size( ), NULL ); } diff -r fd3392863367 -r a933a4e7cb68 src/p_user.cpp --- a/src/p_user.cpp Fri Dec 04 19:48:07 2020 -0500 +++ b/src/p_user.cpp Sun Dec 06 15:04:30 2020 -0500 @@ -2121,19 +2121,19 @@ } // Check if the player is carrying the white flag. - pInventory = this->FindInventory( PClass::FindClass( "WhiteFlag" )); + pInventory = this->FindInventory( PClass::FindClass( "WhiteFlag" ), true ); if (( oneflagctf ) && ( pInventory )) { this->RemoveInventory( pInventory ); // Tell the clients that this player no longer possesses a flag. if (( bLeavingGame == false ) && ( NETWORK_GetState( ) == NETSTATE_SERVER )) - SERVERCOMMANDS_TakeInventory( player - players, PClass::FindClass( "WhiteFlag" ), 0 ); + SERVERCOMMANDS_TakeInventory( player - players, pInventory->GetClass( ), 0 ); if ( NETWORK_GetState( ) != NETSTATE_SERVER ) SCOREBOARD_RefreshHUD( ); // Spawn a new flag. - pTeamItem = Spawn( PClass::FindClass( "WhiteFlag" ), x, y, z, NO_REPLACE ); + pTeamItem = Spawn( PClass::FindClass( "WhiteFlag" ), x, y, z, ALLOW_REPLACE ); if ( pTeamItem ) { pTeamItem->flags |= MF_DROPPED; diff -r fd3392863367 -r a933a4e7cb68 src/scoreboard.cpp --- a/src/scoreboard.cpp Fri Dec 04 19:48:07 2020 -0500 +++ b/src/scoreboard.cpp Sun Dec 06 15:04:30 2020 -0500 @@ -1964,7 +1964,7 @@ TEAM_SetCarrier( i, &players[ulIdx] ); } - if ( players[ulIdx].mo->FindInventory( PClass::FindClass( "WhiteFlag" ))) + if ( players[ulIdx].mo->FindInventory( PClass::FindClass( "WhiteFlag" ), true )) g_pWhiteCarrier = &players[ulIdx]; } } diff -r fd3392863367 -r a933a4e7cb68 src/sv_main.cpp --- a/src/sv_main.cpp Fri Dec 04 19:48:07 2020 -0500 +++ b/src/sv_main.cpp Sun Dec 06 15:04:30 2020 -0500 @@ -1488,7 +1488,7 @@ SERVERCOMMANDS_GiveInventory( ulIdx, pInventory, g_lCurrentClient, SVCF_ONLYTHISCLIENT ); // See if the player is carrying the white flag in OFCTF. - pInventory = players[ulIdx].mo->FindInventory( PClass::FindClass( "WhiteFlag" )); + pInventory = players[ulIdx].mo->FindInventory( PClass::FindClass( "WhiteFlag" ), true ); if (( oneflagctf ) && ( pInventory )) SERVERCOMMANDS_GiveInventory( ulIdx, pInventory, g_lCurrentClient, SVCF_ONLYTHISCLIENT ); } diff -r fd3392863367 -r a933a4e7cb68 src/team.cpp --- a/src/team.cpp Fri Dec 04 19:48:07 2020 -0500 +++ b/src/team.cpp Sun Dec 06 15:04:30 2020 -0500 @@ -294,7 +294,7 @@ pClass = TEAM_GetItem( ulTeamIdx ); g_bSpawningTemporaryFlag = true; - pTeamItem = Spawn( pClass, 0, 0, 0, NO_REPLACE ); + pTeamItem = Spawn( pClass, 0, 0, 0, ALLOW_REPLACE ); g_bSpawningTemporaryFlag = false; if ( pTeamItem->IsKindOf( PClass::FindClass( "TeamItem" )) == false ) { @@ -323,7 +323,7 @@ { while (( pTeamItem = Iterator.Next( ))) { - if (( pTeamItem->GetClass( ) != pClass ) || (( pTeamItem->flags & MF_DROPPED ) == false )) + if (( pTeamItem->IsKindOf( pClass ) == false ) || (( pTeamItem->flags & MF_DROPPED ) == false )) continue; // If we're the server, tell clients to destroy the flag.