Anonymous | Login | Signup for a new account | 2025-07-27 03:55 UTC | ![]() |
My View | View Issues | Change Log | Roadmap | Zandronum Issue Support Ranking | Rules | My Account |
View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||||||
0002039 | Zandronum | [All Projects] Suggestion | public | 2014-12-29 21:22 | 2015-01-10 17:09 | ||||||||
Reporter | Monsterovich | ||||||||||||
Assigned To | |||||||||||||
Priority | normal | Severity | feature | Reproducibility | sometimes | ||||||||
Status | new | Resolution | open | ||||||||||
Platform | OS | OS Version | |||||||||||
Product Version | |||||||||||||
Target Version | Fixed in Version | ||||||||||||
Summary | 0002039: LMS CVar improvements | ||||||||||||
Description | What my patch does: - Removed lms_allow@WEAPONNAMEFROMDOOM2@ (because it doesn't work with custom weapons and cannot disallow them) - Replaced integer cvar lms_allowedweapons with string that contains names of allowed weapons (default is:"Chainsaw,Fist,Pistol,Shotgun,SuperShotgun,Chaingun,RocketLauncher,PlasmaRifle") if it's empty then all weapons are disallowed - Added new cvar lms_onlyallowedweapons that controls lms_allowedweapons (false - all weapons are allowed, true - only weapons from the list are allowed) Also, I removed other liminations: - Added sv_lmsstarthealth (default is 200) - Added sv_lmsstartinventory (default is: "GreenArmor,PowerStrength" in doom or "SilverArmor" in heretic) | ||||||||||||
Attached Files | ![]() Общие подкаталоги: src_old/asm_ia32 и src/asm_ia32 Общие подкаталоги: src_old/asm_x86_64 и src/asm_x86_64 Общие подкаталоги: src_old/g_doom и src/g_doom Общие подкаталоги: src_old/g_heretic и src/g_heretic Общие подкаталоги: src_old/g_hexen и src/g_hexen Общие подкаталоги: src_old/gl и src/gl Общие подкаталоги: src_old/g_raven и src/g_raven Общие подкаталоги: src_old/g_shared и src/g_shared Общие подкаталоги: src_old/g_strife и src/g_strife Общие подкаталоги: src_old/huffman и src/huffman diff -c src_old/lastmanstanding.cpp src/lastmanstanding.cpp *** src_old/lastmanstanding.cpp 2014-10-05 22:47:04.000000000 +0300 --- src/lastmanstanding.cpp 2014-11-16 22:49:22.100425257 +0200 *************** *** 94,99 **** --- 94,104 ---- } //***************************************************************************** + // CVARS + + CVAR( Bool, sv_lmsonlyallowedweapons, false, CVAR_ARCHIVE) + + //***************************************************************************** // void LASTMANSTANDING_Tick( void ) { *************** *** 674,735 **** bool LASTMANSTANDING_IsWeaponDisallowed( const PClass *pType ) { // [BB] Not in LMS mode, everything is allowed. ! if (( lastmanstanding == false ) && ( teamlms == false )) return false; ! if ((( lmsallowedweapons & LMS_AWF_CHAINSAW ) == false ) && ! ( pType == PClass::FindClass( "Chainsaw" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_PISTOL ) == false ) && ! ( pType == PClass::FindClass( "Pistol" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_SHOTGUN ) == false ) && ! ( pType == PClass::FindClass( "Shotgun" ))) ! { ! return true; ! } ! if (( pType == PClass::FindClass( "SuperShotgun" )) && ! ((( lmsallowedweapons & LMS_AWF_SSG ) == false ) || ! (( gameinfo.flags & GI_MAPxx ) == false ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_CHAINGUN ) == false ) && ! ( pType == PClass::FindClass( "Chaingun" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_MINIGUN ) == false ) && ! ( pType == PClass::FindClass( "Minigun" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_ROCKETLAUNCHER ) == false ) && ! ( pType == PClass::FindClass( "RocketLauncher" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_GRENADELAUNCHER ) == false ) && ! ( pType == PClass::FindClass( "GrenadeLauncher" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_PLASMA ) == false ) && ! ( pType == PClass::FindClass( "PlasmaRifle" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_RAILGUN ) == false ) && ! ( pType == PClass::FindClass( "Railgun" ))) { ! return true; } ! return false; } //***************************************************************************** --- 679,698 ---- bool LASTMANSTANDING_IsWeaponDisallowed( const PClass *pType ) { // [BB] Not in LMS mode, everything is allowed. ! if (( lastmanstanding == false ) && ( teamlms == false ) && !sv_lmsonlyallowedweapons) return false; ! char *weapon = strtok((char*)FString(lmsallowedweapons).GetChars(), ","); ! ! while (weapon) { ! if (pType == PClass::FindClass(weapon)) ! return false; ! ! weapon = strtok(NULL, ","); } ! return true; } //***************************************************************************** *************** *** 830,854 **** } } ! CUSTOM_CVAR( Int, lmsallowedweapons, LMS_AWF_ALLALLOWED, CVAR_SERVERINFO ) { if (( NETWORK_GetState( ) == NETSTATE_SERVER ) && ( gamestate != GS_STARTUP )) { - SERVER_Printf( PRINT_HIGH, "%s changed to: %d\n", self.GetName( ), (LONG)self ); if ( lastmanstanding || teamlms ) SERVERCOMMANDS_SetLMSAllowedWeapons( ); } } - CVAR( Flag, lms_allowpistol, lmsallowedweapons, LMS_AWF_PISTOL ); - CVAR( Flag, lms_allowshotgun, lmsallowedweapons, LMS_AWF_SHOTGUN ); - CVAR( Flag, lms_allowssg, lmsallowedweapons, LMS_AWF_SSG ); - CVAR( Flag, lms_allowchaingun, lmsallowedweapons, LMS_AWF_CHAINGUN ); - CVAR( Flag, lms_allowminigun, lmsallowedweapons, LMS_AWF_MINIGUN ); - CVAR( Flag, lms_allowrocketlauncher, lmsallowedweapons, LMS_AWF_ROCKETLAUNCHER ); - CVAR( Flag, lms_allowgrenadelauncher, lmsallowedweapons, LMS_AWF_GRENADELAUNCHER ); - CVAR( Flag, lms_allowplasma, lmsallowedweapons, LMS_AWF_PLASMA ); - CVAR( Flag, lms_allowrailgun, lmsallowedweapons, LMS_AWF_RAILGUN ); - CVAR( Flag, lms_allowchainsaw, lmsallowedweapons, LMS_AWF_CHAINSAW ); CUSTOM_CVAR( Int, lmsspectatorsettings, LMS_SPF_VIEW, CVAR_SERVERINFO ) { --- 793,806 ---- } } ! CUSTOM_CVAR( String, lmsallowedweapons, LMS_ALLOWED_WEAPONS, CVAR_SERVERINFO ) { if (( NETWORK_GetState( ) == NETSTATE_SERVER ) && ( gamestate != GS_STARTUP )) { if ( lastmanstanding || teamlms ) SERVERCOMMANDS_SetLMSAllowedWeapons( ); } } CUSTOM_CVAR( Int, lmsspectatorsettings, LMS_SPF_VIEW, CVAR_SERVERINFO ) { diff -c src_old/lastmanstanding.h src/lastmanstanding.h *** src_old/lastmanstanding.h 2014-10-05 22:47:04.000000000 +0300 --- src/lastmanstanding.h 2014-11-16 17:20:15.155587829 +0200 *************** *** 65,88 **** } LMSSTATE_e; - #define LMS_AWF_PISTOL 0x00000001 - #define LMS_AWF_SHOTGUN 0x00000002 - #define LMS_AWF_SSG 0x00000004 - #define LMS_AWF_CHAINGUN 0x00000008 - #define LMS_AWF_MINIGUN 0x00000010 - #define LMS_AWF_ROCKETLAUNCHER 0x00000020 - #define LMS_AWF_GRENADELAUNCHER 0x00000040 - #define LMS_AWF_PLASMA 0x00000080 - #define LMS_AWF_RAILGUN 0x00000100 - #define LMS_AWF_CHAINSAW 0x00000200 - - #define LMS_AWF_ALLALLOWED ( LMS_AWF_PISTOL|LMS_AWF_SHOTGUN|LMS_AWF_SSG|LMS_AWF_CHAINGUN| \ - LMS_AWF_MINIGUN|LMS_AWF_ROCKETLAUNCHER|LMS_AWF_GRENADELAUNCHER|LMS_AWF_PLASMA| \ - LMS_AWF_RAILGUN|LMS_AWF_CHAINSAW ) - #define LMS_SPF_CHAT 0x00000001 #define LMS_SPF_VIEW 0x00000002 //***************************************************************************** // PROTOTYPES --- 65,76 ---- } LMSSTATE_e; #define LMS_SPF_CHAT 0x00000001 #define LMS_SPF_VIEW 0x00000002 + #define LMS_ALLOWED_WEAPONS "Chainsaw,Fist,Pistol,Shotgun,SuperShotgun,Chaingun,RocketLauncher,PlasmaRifle" + #define LMS_START_INVENTORY (gameinfo.gametype == GAME_Heretic) ? "SilverArmor" : "GreenArmor,PowerStrength" + //***************************************************************************** // PROTOTYPES *************** *** 117,123 **** // EXTERNAL CONSOLE VARIABLES EXTERN_CVAR( Int, sv_lmscountdowntime ) ! EXTERN_CVAR( Int, lmsallowedweapons ); EXTERN_CVAR( Int, lmsspectatorsettings ); EXTERN_CVAR( Int, winlimit ) --- 105,111 ---- // EXTERNAL CONSOLE VARIABLES EXTERN_CVAR( Int, sv_lmscountdowntime ) ! EXTERN_CVAR( String, lmsallowedweapons ); EXTERN_CVAR( Int, lmsspectatorsettings ); EXTERN_CVAR( Int, winlimit ) Общие подкаталоги: src_old/Linux и src/Linux Общие подкаталоги: src_old/network и src/network Общие подкаталоги: src_old/oplsynth и src/oplsynth diff -c src_old/p_user.cpp src/p_user.cpp *** src_old/p_user.cpp 2014-10-05 22:47:04.000000000 +0300 --- src/p_user.cpp 2014-11-16 22:12:08.568330537 +0200 *************** *** 80,85 **** --- 80,93 ---- // Note: ZDoom's limit is chosen such that the sky is rendered properly. CVAR (Bool, cl_oldfreelooklimit, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) + // LMS + CUSTOM_CVAR( Int, sv_lmsstarthealth, 200, CVAR_ARCHIVE ) + { + if (self <= 0) + self = 100; + } + CVAR( String, sv_lmsstartinventory, LMS_START_INVENTORY, CVAR_ARCHIVE ) + static FRandom pr_skullpop ("SkullPop"); *************** *** 1429,1434 **** --- 1437,1443 ---- } // Also give the player berserk. + /* player->mo->GiveInventoryTypeRespectingReplacements( PClass::FindClass( "Berserk" ) ); pBerserk = static_cast<APowerStrength *>( player->mo->FindInventory( PClass::FindClass( "PowerStrength" ))); if ( pBerserk ) *************** *** 1440,1448 **** if ( NETWORK_GetState( ) == NETSTATE_SERVER ) SERVERCOMMANDS_GivePowerup( static_cast<ULONG>(player - players), pBerserk ); } - player->health = deh.MegasphereHealth; - player->mo->GiveInventoryTypeRespectingReplacements( PClass::FindClass( "GreenArmor" ) ); player->health -= player->userinfo.lHandicap; // Don't allow player to be DOA. --- 1449,1466 ---- if ( NETWORK_GetState( ) == NETSTATE_SERVER ) SERVERCOMMANDS_GivePowerup( static_cast<ULONG>(player - players), pBerserk ); } + */ + + player->health = sv_lmsstarthealth; + + char *item = strtok((char*)FString(sv_lmsstartinventory).GetChars(), ","); + + while (item) + { + player->mo->GiveInventoryTypeRespectingReplacements(PClass::FindClass(item)); + item = strtok(NULL, ","); + } player->health -= player->userinfo.lHandicap; // Don't allow player to be DOA. *************** *** 1554,1561 **** } } ! player->health = deh.MegasphereHealth; ! player->mo->GiveInventoryTypeRespectingReplacements( PClass::FindClass( "SilverShield" ) ); player->health -= player->userinfo.lHandicap; // Don't allow player to be DOA. --- 1572,1587 ---- } } ! player->health = sv_lmsstarthealth; ! ! char *item = strtok((char*)FString(sv_lmsstartinventory).GetChars(), ","); ! ! while (item) ! { ! player->mo->GiveInventoryTypeRespectingReplacements(PClass::FindClass(item)); ! item = strtok(NULL, ","); ! } ! player->health -= player->userinfo.lHandicap; // Don't allow player to be DOA. Общие подкаталоги: src_old/sdl и src/sdl Общие подкаталоги: src_old/sfmt и src/sfmt Общие подкаталоги: src_old/sound и src/sound diff -c src_old/sv_commands.cpp src/sv_commands.cpp *** src_old/sv_commands.cpp 2014-10-05 22:47:04.000000000 +0300 --- src/sv_commands.cpp 2014-11-16 12:52:15.710905932 +0200 *************** *** 3515,3521 **** SERVER_CheckClientBuffer( ulIdx, 5, true ); NETWORK_WriteHeader( &SERVER_GetClient( ulIdx )->PacketBuffer.ByteStream, SVC_SETLMSALLOWEDWEAPONS ); ! NETWORK_WriteLong( &SERVER_GetClient( ulIdx )->PacketBuffer.ByteStream, lmsallowedweapons ); } } --- 3515,3521 ---- SERVER_CheckClientBuffer( ulIdx, 5, true ); NETWORK_WriteHeader( &SERVER_GetClient( ulIdx )->PacketBuffer.ByteStream, SVC_SETLMSALLOWEDWEAPONS ); ! NETWORK_WriteString(&SERVER_GetClient( ulIdx )->PacketBuffer.ByteStream, lmsallowedweapons); } } Только в src/: svnrevision.h Общие подкаталоги: src_old/textures и src/textures Общие подкаталоги: src_old/thingdef и src/thingdef Общие подкаталоги: src_old/timidity и src/timidity Общие подкаталоги: src_old/win32 и src/win32 Общие подкаталоги: src_old/xlat и src/xlat ![]() Общие подкаталоги: src_old/asm_ia32 и src/asm_ia32 Общие подкаталоги: src_old/asm_x86_64 и src/asm_x86_64 Общие подкаталоги: src_old/g_doom и src/g_doom Общие подкаталоги: src_old/g_heretic и src/g_heretic Общие подкаталоги: src_old/g_hexen и src/g_hexen Общие подкаталоги: src_old/gl и src/gl Общие подкаталоги: src_old/g_raven и src/g_raven Общие подкаталоги: src_old/g_shared и src/g_shared Общие подкаталоги: src_old/g_strife и src/g_strife Общие подкаталоги: src_old/huffman и src/huffman diff -c src_old/lastmanstanding.cpp src/lastmanstanding.cpp *** src_old/lastmanstanding.cpp 2014-10-05 22:47:04.000000000 +0300 --- src/lastmanstanding.cpp 2015-01-10 18:26:13.962794054 +0200 *************** *** 94,99 **** --- 94,104 ---- } //***************************************************************************** + // CVARS + + CVAR( Bool, sv_lmsonlyallowedweapons, false, CVAR_ARCHIVE) + + //***************************************************************************** // void LASTMANSTANDING_Tick( void ) { *************** *** 674,735 **** bool LASTMANSTANDING_IsWeaponDisallowed( const PClass *pType ) { // [BB] Not in LMS mode, everything is allowed. ! if (( lastmanstanding == false ) && ( teamlms == false )) return false; ! if ((( lmsallowedweapons & LMS_AWF_CHAINSAW ) == false ) && ! ( pType == PClass::FindClass( "Chainsaw" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_PISTOL ) == false ) && ! ( pType == PClass::FindClass( "Pistol" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_SHOTGUN ) == false ) && ! ( pType == PClass::FindClass( "Shotgun" ))) ! { ! return true; ! } ! if (( pType == PClass::FindClass( "SuperShotgun" )) && ! ((( lmsallowedweapons & LMS_AWF_SSG ) == false ) || ! (( gameinfo.flags & GI_MAPxx ) == false ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_CHAINGUN ) == false ) && ! ( pType == PClass::FindClass( "Chaingun" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_MINIGUN ) == false ) && ! ( pType == PClass::FindClass( "Minigun" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_ROCKETLAUNCHER ) == false ) && ! ( pType == PClass::FindClass( "RocketLauncher" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_GRENADELAUNCHER ) == false ) && ! ( pType == PClass::FindClass( "GrenadeLauncher" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_PLASMA ) == false ) && ! ( pType == PClass::FindClass( "PlasmaRifle" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_RAILGUN ) == false ) && ! ( pType == PClass::FindClass( "Railgun" ))) { ! return true; } ! return false; } //***************************************************************************** --- 679,699 ---- bool LASTMANSTANDING_IsWeaponDisallowed( const PClass *pType ) { // [BB] Not in LMS mode, everything is allowed. ! if (( lastmanstanding == false ) && ( teamlms == false ) && !sv_lmsonlyallowedweapons) return false; ! FString weapons(lmsallowedweapons); ! char *weapon = strtok((char*)weapons.GetChars(), ","); ! ! while (weapon) { ! if (pType == PClass::FindClass(weapon)) ! return false; ! ! weapon = strtok(NULL, ","); } ! return true; } //***************************************************************************** *************** *** 830,854 **** } } ! CUSTOM_CVAR( Int, lmsallowedweapons, LMS_AWF_ALLALLOWED, CVAR_SERVERINFO ) { if (( NETWORK_GetState( ) == NETSTATE_SERVER ) && ( gamestate != GS_STARTUP )) { - SERVER_Printf( PRINT_HIGH, "%s changed to: %d\n", self.GetName( ), (LONG)self ); if ( lastmanstanding || teamlms ) SERVERCOMMANDS_SetLMSAllowedWeapons( ); } } - CVAR( Flag, lms_allowpistol, lmsallowedweapons, LMS_AWF_PISTOL ); - CVAR( Flag, lms_allowshotgun, lmsallowedweapons, LMS_AWF_SHOTGUN ); - CVAR( Flag, lms_allowssg, lmsallowedweapons, LMS_AWF_SSG ); - CVAR( Flag, lms_allowchaingun, lmsallowedweapons, LMS_AWF_CHAINGUN ); - CVAR( Flag, lms_allowminigun, lmsallowedweapons, LMS_AWF_MINIGUN ); - CVAR( Flag, lms_allowrocketlauncher, lmsallowedweapons, LMS_AWF_ROCKETLAUNCHER ); - CVAR( Flag, lms_allowgrenadelauncher, lmsallowedweapons, LMS_AWF_GRENADELAUNCHER ); - CVAR( Flag, lms_allowplasma, lmsallowedweapons, LMS_AWF_PLASMA ); - CVAR( Flag, lms_allowrailgun, lmsallowedweapons, LMS_AWF_RAILGUN ); - CVAR( Flag, lms_allowchainsaw, lmsallowedweapons, LMS_AWF_CHAINSAW ); CUSTOM_CVAR( Int, lmsspectatorsettings, LMS_SPF_VIEW, CVAR_SERVERINFO ) { --- 794,807 ---- } } ! CUSTOM_CVAR( String, lmsallowedweapons, LMS_ALLOWED_WEAPONS, CVAR_SERVERINFO ) { if (( NETWORK_GetState( ) == NETSTATE_SERVER ) && ( gamestate != GS_STARTUP )) { if ( lastmanstanding || teamlms ) SERVERCOMMANDS_SetLMSAllowedWeapons( ); } } CUSTOM_CVAR( Int, lmsspectatorsettings, LMS_SPF_VIEW, CVAR_SERVERINFO ) { diff -c src_old/lastmanstanding.h src/lastmanstanding.h *** src_old/lastmanstanding.h 2014-10-05 22:47:04.000000000 +0300 --- src/lastmanstanding.h 2014-11-16 17:20:15.155587829 +0200 *************** *** 65,88 **** } LMSSTATE_e; - #define LMS_AWF_PISTOL 0x00000001 - #define LMS_AWF_SHOTGUN 0x00000002 - #define LMS_AWF_SSG 0x00000004 - #define LMS_AWF_CHAINGUN 0x00000008 - #define LMS_AWF_MINIGUN 0x00000010 - #define LMS_AWF_ROCKETLAUNCHER 0x00000020 - #define LMS_AWF_GRENADELAUNCHER 0x00000040 - #define LMS_AWF_PLASMA 0x00000080 - #define LMS_AWF_RAILGUN 0x00000100 - #define LMS_AWF_CHAINSAW 0x00000200 - - #define LMS_AWF_ALLALLOWED ( LMS_AWF_PISTOL|LMS_AWF_SHOTGUN|LMS_AWF_SSG|LMS_AWF_CHAINGUN| \ - LMS_AWF_MINIGUN|LMS_AWF_ROCKETLAUNCHER|LMS_AWF_GRENADELAUNCHER|LMS_AWF_PLASMA| \ - LMS_AWF_RAILGUN|LMS_AWF_CHAINSAW ) - #define LMS_SPF_CHAT 0x00000001 #define LMS_SPF_VIEW 0x00000002 //***************************************************************************** // PROTOTYPES --- 65,76 ---- } LMSSTATE_e; #define LMS_SPF_CHAT 0x00000001 #define LMS_SPF_VIEW 0x00000002 + #define LMS_ALLOWED_WEAPONS "Chainsaw,Fist,Pistol,Shotgun,SuperShotgun,Chaingun,RocketLauncher,PlasmaRifle" + #define LMS_START_INVENTORY (gameinfo.gametype == GAME_Heretic) ? "SilverArmor" : "GreenArmor,PowerStrength" + //***************************************************************************** // PROTOTYPES *************** *** 117,123 **** // EXTERNAL CONSOLE VARIABLES EXTERN_CVAR( Int, sv_lmscountdowntime ) ! EXTERN_CVAR( Int, lmsallowedweapons ); EXTERN_CVAR( Int, lmsspectatorsettings ); EXTERN_CVAR( Int, winlimit ) --- 105,111 ---- // EXTERNAL CONSOLE VARIABLES EXTERN_CVAR( Int, sv_lmscountdowntime ) ! EXTERN_CVAR( String, lmsallowedweapons ); EXTERN_CVAR( Int, lmsspectatorsettings ); EXTERN_CVAR( Int, winlimit ) Общие подкаталоги: src_old/Linux и src/Linux Общие подкаталоги: src_old/network и src/network Общие подкаталоги: src_old/oplsynth и src/oplsynth diff -c src_old/p_user.cpp src/p_user.cpp *** src_old/p_user.cpp 2014-10-05 22:47:04.000000000 +0300 --- src/p_user.cpp 2015-01-10 18:31:51.562808371 +0200 *************** *** 80,85 **** --- 80,93 ---- // Note: ZDoom's limit is chosen such that the sky is rendered properly. CVAR (Bool, cl_oldfreelooklimit, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) + // LMS + CUSTOM_CVAR( Int, sv_lmsstarthealth, 200, CVAR_ARCHIVE ) + { + if (self <= 0) + self = 100; + } + CVAR( String, sv_lmsstartinventory, LMS_START_INVENTORY, CVAR_ARCHIVE ) + static FRandom pr_skullpop ("SkullPop"); *************** *** 1428,1448 **** } } ! // Also give the player berserk. ! player->mo->GiveInventoryTypeRespectingReplacements( PClass::FindClass( "Berserk" ) ); ! pBerserk = static_cast<APowerStrength *>( player->mo->FindInventory( PClass::FindClass( "PowerStrength" ))); ! if ( pBerserk ) ! { ! pBerserk->EffectTics = 768; ! // [BB] This is a workaround to set the EffectTics property of the powerup on the clients. ! // Note: The server already tells the clients that they got PowerStrength, because ! // Berserk uses A_GiveInventory("PowerStrength"). ! if ( NETWORK_GetState( ) == NETSTATE_SERVER ) ! SERVERCOMMANDS_GivePowerup( static_cast<ULONG>(player - players), pBerserk ); } - player->health = deh.MegasphereHealth; - player->mo->GiveInventoryTypeRespectingReplacements( PClass::FindClass( "GreenArmor" ) ); player->health -= player->userinfo.lHandicap; // Don't allow player to be DOA. --- 1436,1452 ---- } } ! player->health = sv_lmsstarthealth; ! ! FString items(sv_lmsstartinventory); ! char *item = strtok((char*)items.GetChars(), ","); ! ! while (item) ! { ! player->mo->GiveInventoryTypeRespectingReplacements(PClass::FindClass(item)); ! item = strtok(NULL, ","); } player->health -= player->userinfo.lHandicap; // Don't allow player to be DOA. *************** *** 1554,1561 **** } } ! player->health = deh.MegasphereHealth; ! player->mo->GiveInventoryTypeRespectingReplacements( PClass::FindClass( "SilverShield" ) ); player->health -= player->userinfo.lHandicap; // Don't allow player to be DOA. --- 1558,1574 ---- } } ! player->health = sv_lmsstarthealth; ! ! FString items(sv_lmsstartinventory); ! char *item = strtok((char*)items.GetChars(), ","); ! ! while (item) ! { ! player->mo->GiveInventoryTypeRespectingReplacements(PClass::FindClass(item)); ! item = strtok(NULL, ","); ! } ! player->health -= player->userinfo.lHandicap; // Don't allow player to be DOA. Общие подкаталоги: src_old/sdl и src/sdl Общие подкаталоги: src_old/sfmt и src/sfmt Общие подкаталоги: src_old/sound и src/sound diff -c src_old/sv_commands.cpp src/sv_commands.cpp *** src_old/sv_commands.cpp 2014-10-05 22:47:04.000000000 +0300 --- src/sv_commands.cpp 2014-11-16 12:52:15.710905932 +0200 *************** *** 3515,3521 **** SERVER_CheckClientBuffer( ulIdx, 5, true ); NETWORK_WriteHeader( &SERVER_GetClient( ulIdx )->PacketBuffer.ByteStream, SVC_SETLMSALLOWEDWEAPONS ); ! NETWORK_WriteLong( &SERVER_GetClient( ulIdx )->PacketBuffer.ByteStream, lmsallowedweapons ); } } --- 3515,3521 ---- SERVER_CheckClientBuffer( ulIdx, 5, true ); NETWORK_WriteHeader( &SERVER_GetClient( ulIdx )->PacketBuffer.ByteStream, SVC_SETLMSALLOWEDWEAPONS ); ! NETWORK_WriteString(&SERVER_GetClient( ulIdx )->PacketBuffer.ByteStream, lmsallowedweapons); } } diff -c src_old/sv_main.cpp src/sv_main.cpp *** src_old/sv_main.cpp 2014-10-05 22:47:04.000000000 +0300 --- src/sv_main.cpp 2014-11-17 16:40:05.801303394 +0200 *************** *** 1911,1916 **** --- 1911,1917 ---- } // Make sure the network game version matches. + Printf("Netversion: %d\n", lClientNetworkGameVersion); if ( NETGAMEVERSION != lClientNetworkGameVersion ) { SERVER_ClientError( lClient, NETWORK_ERRORCODE_WRONGPROTOCOLVERSION ); Только в src/: svnrevision.h Общие подкаталоги: src_old/textures и src/textures Общие подкаталоги: src_old/thingdef и src/thingdef Общие подкаталоги: src_old/timidity и src/timidity Общие подкаталоги: src_old/win32 и src/win32 Общие подкаталоги: src_old/xlat и src/xlat ![]() Общие подкаталоги: src_old/asm_ia32 и src/asm_ia32 Общие подкаталоги: src_old/asm_x86_64 и src/asm_x86_64 Общие подкаталоги: src_old/g_doom и src/g_doom Общие подкаталоги: src_old/g_heretic и src/g_heretic Общие подкаталоги: src_old/g_hexen и src/g_hexen Общие подкаталоги: src_old/gl и src/gl Общие подкаталоги: src_old/g_raven и src/g_raven Общие подкаталоги: src_old/g_shared и src/g_shared Общие подкаталоги: src_old/g_strife и src/g_strife Общие подкаталоги: src_old/huffman и src/huffman diff -c src_old/lastmanstanding.cpp src/lastmanstanding.cpp *** src_old/lastmanstanding.cpp 2014-10-05 22:47:04.000000000 +0300 --- src/lastmanstanding.cpp 2015-01-10 18:26:13.962794054 +0200 *************** *** 94,99 **** --- 94,104 ---- } //***************************************************************************** + // CVARS + + CVAR( Bool, sv_lmsonlyallowedweapons, false, CVAR_ARCHIVE) + + //***************************************************************************** // void LASTMANSTANDING_Tick( void ) { *************** *** 674,735 **** bool LASTMANSTANDING_IsWeaponDisallowed( const PClass *pType ) { // [BB] Not in LMS mode, everything is allowed. ! if (( lastmanstanding == false ) && ( teamlms == false )) return false; ! if ((( lmsallowedweapons & LMS_AWF_CHAINSAW ) == false ) && ! ( pType == PClass::FindClass( "Chainsaw" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_PISTOL ) == false ) && ! ( pType == PClass::FindClass( "Pistol" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_SHOTGUN ) == false ) && ! ( pType == PClass::FindClass( "Shotgun" ))) ! { ! return true; ! } ! if (( pType == PClass::FindClass( "SuperShotgun" )) && ! ((( lmsallowedweapons & LMS_AWF_SSG ) == false ) || ! (( gameinfo.flags & GI_MAPxx ) == false ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_CHAINGUN ) == false ) && ! ( pType == PClass::FindClass( "Chaingun" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_MINIGUN ) == false ) && ! ( pType == PClass::FindClass( "Minigun" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_ROCKETLAUNCHER ) == false ) && ! ( pType == PClass::FindClass( "RocketLauncher" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_GRENADELAUNCHER ) == false ) && ! ( pType == PClass::FindClass( "GrenadeLauncher" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_PLASMA ) == false ) && ! ( pType == PClass::FindClass( "PlasmaRifle" ))) ! { ! return true; ! } ! if ((( lmsallowedweapons & LMS_AWF_RAILGUN ) == false ) && ! ( pType == PClass::FindClass( "Railgun" ))) { ! return true; } ! return false; } //***************************************************************************** --- 679,699 ---- bool LASTMANSTANDING_IsWeaponDisallowed( const PClass *pType ) { // [BB] Not in LMS mode, everything is allowed. ! if (( lastmanstanding == false ) && ( teamlms == false ) && !sv_lmsonlyallowedweapons) return false; ! FString weapons(lmsallowedweapons); ! char *weapon = strtok((char*)weapons.GetChars(), ","); ! ! while (weapon) { ! if (pType == PClass::FindClass(weapon)) ! return false; ! ! weapon = strtok(NULL, ","); } ! return true; } //***************************************************************************** *************** *** 830,854 **** } } ! CUSTOM_CVAR( Int, lmsallowedweapons, LMS_AWF_ALLALLOWED, CVAR_SERVERINFO ) { if (( NETWORK_GetState( ) == NETSTATE_SERVER ) && ( gamestate != GS_STARTUP )) { - SERVER_Printf( PRINT_HIGH, "%s changed to: %d\n", self.GetName( ), (LONG)self ); if ( lastmanstanding || teamlms ) SERVERCOMMANDS_SetLMSAllowedWeapons( ); } } - CVAR( Flag, lms_allowpistol, lmsallowedweapons, LMS_AWF_PISTOL ); - CVAR( Flag, lms_allowshotgun, lmsallowedweapons, LMS_AWF_SHOTGUN ); - CVAR( Flag, lms_allowssg, lmsallowedweapons, LMS_AWF_SSG ); - CVAR( Flag, lms_allowchaingun, lmsallowedweapons, LMS_AWF_CHAINGUN ); - CVAR( Flag, lms_allowminigun, lmsallowedweapons, LMS_AWF_MINIGUN ); - CVAR( Flag, lms_allowrocketlauncher, lmsallowedweapons, LMS_AWF_ROCKETLAUNCHER ); - CVAR( Flag, lms_allowgrenadelauncher, lmsallowedweapons, LMS_AWF_GRENADELAUNCHER ); - CVAR( Flag, lms_allowplasma, lmsallowedweapons, LMS_AWF_PLASMA ); - CVAR( Flag, lms_allowrailgun, lmsallowedweapons, LMS_AWF_RAILGUN ); - CVAR( Flag, lms_allowchainsaw, lmsallowedweapons, LMS_AWF_CHAINSAW ); CUSTOM_CVAR( Int, lmsspectatorsettings, LMS_SPF_VIEW, CVAR_SERVERINFO ) { --- 794,807 ---- } } ! CUSTOM_CVAR( String, lmsallowedweapons, LMS_ALLOWED_WEAPONS, CVAR_SERVERINFO ) { if (( NETWORK_GetState( ) == NETSTATE_SERVER ) && ( gamestate != GS_STARTUP )) { if ( lastmanstanding || teamlms ) SERVERCOMMANDS_SetLMSAllowedWeapons( ); } } CUSTOM_CVAR( Int, lmsspectatorsettings, LMS_SPF_VIEW, CVAR_SERVERINFO ) { diff -c src_old/lastmanstanding.h src/lastmanstanding.h *** src_old/lastmanstanding.h 2014-10-05 22:47:04.000000000 +0300 --- src/lastmanstanding.h 2014-11-16 17:20:15.155587829 +0200 *************** *** 65,88 **** } LMSSTATE_e; - #define LMS_AWF_PISTOL 0x00000001 - #define LMS_AWF_SHOTGUN 0x00000002 - #define LMS_AWF_SSG 0x00000004 - #define LMS_AWF_CHAINGUN 0x00000008 - #define LMS_AWF_MINIGUN 0x00000010 - #define LMS_AWF_ROCKETLAUNCHER 0x00000020 - #define LMS_AWF_GRENADELAUNCHER 0x00000040 - #define LMS_AWF_PLASMA 0x00000080 - #define LMS_AWF_RAILGUN 0x00000100 - #define LMS_AWF_CHAINSAW 0x00000200 - - #define LMS_AWF_ALLALLOWED ( LMS_AWF_PISTOL|LMS_AWF_SHOTGUN|LMS_AWF_SSG|LMS_AWF_CHAINGUN| \ - LMS_AWF_MINIGUN|LMS_AWF_ROCKETLAUNCHER|LMS_AWF_GRENADELAUNCHER|LMS_AWF_PLASMA| \ - LMS_AWF_RAILGUN|LMS_AWF_CHAINSAW ) - #define LMS_SPF_CHAT 0x00000001 #define LMS_SPF_VIEW 0x00000002 //***************************************************************************** // PROTOTYPES --- 65,76 ---- } LMSSTATE_e; #define LMS_SPF_CHAT 0x00000001 #define LMS_SPF_VIEW 0x00000002 + #define LMS_ALLOWED_WEAPONS "Chainsaw,Fist,Pistol,Shotgun,SuperShotgun,Chaingun,RocketLauncher,PlasmaRifle" + #define LMS_START_INVENTORY (gameinfo.gametype == GAME_Heretic) ? "SilverArmor" : "GreenArmor,PowerStrength" + //***************************************************************************** // PROTOTYPES *************** *** 117,123 **** // EXTERNAL CONSOLE VARIABLES EXTERN_CVAR( Int, sv_lmscountdowntime ) ! EXTERN_CVAR( Int, lmsallowedweapons ); EXTERN_CVAR( Int, lmsspectatorsettings ); EXTERN_CVAR( Int, winlimit ) --- 105,111 ---- // EXTERNAL CONSOLE VARIABLES EXTERN_CVAR( Int, sv_lmscountdowntime ) ! EXTERN_CVAR( String, lmsallowedweapons ); EXTERN_CVAR( Int, lmsspectatorsettings ); EXTERN_CVAR( Int, winlimit ) Общие подкаталоги: src_old/Linux и src/Linux Общие подкаталоги: src_old/network и src/network Общие подкаталоги: src_old/oplsynth и src/oplsynth diff -c src_old/p_user.cpp src/p_user.cpp *** src_old/p_user.cpp 2014-10-05 22:47:04.000000000 +0300 --- src/p_user.cpp 2015-01-10 18:31:51.562808371 +0200 *************** *** 80,85 **** --- 80,93 ---- // Note: ZDoom's limit is chosen such that the sky is rendered properly. CVAR (Bool, cl_oldfreelooklimit, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) + // LMS + CUSTOM_CVAR( Int, sv_lmsstarthealth, 200, CVAR_ARCHIVE ) + { + if (self <= 0) + self = 100; + } + CVAR( String, sv_lmsstartinventory, LMS_START_INVENTORY, CVAR_ARCHIVE ) + static FRandom pr_skullpop ("SkullPop"); *************** *** 1428,1448 **** } } ! // Also give the player berserk. ! player->mo->GiveInventoryTypeRespectingReplacements( PClass::FindClass( "Berserk" ) ); ! pBerserk = static_cast<APowerStrength *>( player->mo->FindInventory( PClass::FindClass( "PowerStrength" ))); ! if ( pBerserk ) ! { ! pBerserk->EffectTics = 768; ! // [BB] This is a workaround to set the EffectTics property of the powerup on the clients. ! // Note: The server already tells the clients that they got PowerStrength, because ! // Berserk uses A_GiveInventory("PowerStrength"). ! if ( NETWORK_GetState( ) == NETSTATE_SERVER ) ! SERVERCOMMANDS_GivePowerup( static_cast<ULONG>(player - players), pBerserk ); } - player->health = deh.MegasphereHealth; - player->mo->GiveInventoryTypeRespectingReplacements( PClass::FindClass( "GreenArmor" ) ); player->health -= player->userinfo.lHandicap; // Don't allow player to be DOA. --- 1436,1452 ---- } } ! player->health = sv_lmsstarthealth; ! ! FString items(sv_lmsstartinventory); ! char *item = strtok((char*)items.GetChars(), ","); ! ! while (item) ! { ! player->mo->GiveInventoryTypeRespectingReplacements(PClass::FindClass(item)); ! item = strtok(NULL, ","); } player->health -= player->userinfo.lHandicap; // Don't allow player to be DOA. *************** *** 1554,1561 **** } } ! player->health = deh.MegasphereHealth; ! player->mo->GiveInventoryTypeRespectingReplacements( PClass::FindClass( "SilverShield" ) ); player->health -= player->userinfo.lHandicap; // Don't allow player to be DOA. --- 1558,1574 ---- } } ! player->health = sv_lmsstarthealth; ! ! FString items(sv_lmsstartinventory); ! char *item = strtok((char*)items.GetChars(), ","); ! ! while (item) ! { ! player->mo->GiveInventoryTypeRespectingReplacements(PClass::FindClass(item)); ! item = strtok(NULL, ","); ! } ! player->health -= player->userinfo.lHandicap; // Don't allow player to be DOA. Общие подкаталоги: src_old/sdl и src/sdl Общие подкаталоги: src_old/sfmt и src/sfmt Общие подкаталоги: src_old/sound и src/sound diff -c src_old/sv_commands.cpp src/sv_commands.cpp *** src_old/sv_commands.cpp 2014-10-05 22:47:04.000000000 +0300 --- src/sv_commands.cpp 2014-11-16 12:52:15.710905932 +0200 *************** *** 3515,3521 **** SERVER_CheckClientBuffer( ulIdx, 5, true ); NETWORK_WriteHeader( &SERVER_GetClient( ulIdx )->PacketBuffer.ByteStream, SVC_SETLMSALLOWEDWEAPONS ); ! NETWORK_WriteLong( &SERVER_GetClient( ulIdx )->PacketBuffer.ByteStream, lmsallowedweapons ); } } --- 3515,3521 ---- SERVER_CheckClientBuffer( ulIdx, 5, true ); NETWORK_WriteHeader( &SERVER_GetClient( ulIdx )->PacketBuffer.ByteStream, SVC_SETLMSALLOWEDWEAPONS ); ! NETWORK_WriteString(&SERVER_GetClient( ulIdx )->PacketBuffer.ByteStream, lmsallowedweapons); } } Только в src/: svnrevision.h Общие подкаталоги: src_old/textures и src/textures Общие подкаталоги: src_old/thingdef и src/thingdef Общие подкаталоги: src_old/timidity и src/timidity Общие подкаталоги: src_old/win32 и src/win32 Общие подкаталоги: src_old/xlat и src/xlat ![]() Общие подкаталоги: src_old/asm_ia32 и src/asm_ia32 Общие подкаталоги: src_old/asm_x86_64 и src/asm_x86_64 Общие подкаталоги: src_old/g_doom и src/g_doom Общие подкаталоги: src_old/g_heretic и src/g_heretic Общие подкаталоги: src_old/g_hexen и src/g_hexen Общие подкаталоги: src_old/gl и src/gl Общие подкаталоги: src_old/g_raven и src/g_raven Общие подкаталоги: src_old/g_shared и src/g_shared Общие подкаталоги: src_old/g_strife и src/g_strife Общие подкаталоги: src_old/huffman и src/huffman diff -u src_old/lastmanstanding.cpp src/lastmanstanding.cpp --- src_old/lastmanstanding.cpp 2014-10-05 22:47:04.000000000 +0300 +++ src/lastmanstanding.cpp 2015-01-10 18:26:13.962794054 +0200 @@ -94,6 +94,11 @@ } //***************************************************************************** +// CVARS + +CVAR( Bool, sv_lmsonlyallowedweapons, false, CVAR_ARCHIVE) + +//***************************************************************************** // void LASTMANSTANDING_Tick( void ) { @@ -674,62 +679,21 @@ bool LASTMANSTANDING_IsWeaponDisallowed( const PClass *pType ) { // [BB] Not in LMS mode, everything is allowed. - if (( lastmanstanding == false ) && ( teamlms == false )) + if (( lastmanstanding == false ) && ( teamlms == false ) && !sv_lmsonlyallowedweapons) return false; - if ((( lmsallowedweapons & LMS_AWF_CHAINSAW ) == false ) && - ( pType == PClass::FindClass( "Chainsaw" ))) - { - return true; - } - if ((( lmsallowedweapons & LMS_AWF_PISTOL ) == false ) && - ( pType == PClass::FindClass( "Pistol" ))) - { - return true; - } - if ((( lmsallowedweapons & LMS_AWF_SHOTGUN ) == false ) && - ( pType == PClass::FindClass( "Shotgun" ))) - { - return true; - } - if (( pType == PClass::FindClass( "SuperShotgun" )) && - ((( lmsallowedweapons & LMS_AWF_SSG ) == false ) || - (( gameinfo.flags & GI_MAPxx ) == false ))) - { - return true; - } - if ((( lmsallowedweapons & LMS_AWF_CHAINGUN ) == false ) && - ( pType == PClass::FindClass( "Chaingun" ))) - { - return true; - } - if ((( lmsallowedweapons & LMS_AWF_MINIGUN ) == false ) && - ( pType == PClass::FindClass( "Minigun" ))) - { - return true; - } - if ((( lmsallowedweapons & LMS_AWF_ROCKETLAUNCHER ) == false ) && - ( pType == PClass::FindClass( "RocketLauncher" ))) - { - return true; - } - if ((( lmsallowedweapons & LMS_AWF_GRENADELAUNCHER ) == false ) && - ( pType == PClass::FindClass( "GrenadeLauncher" ))) - { - return true; - } - if ((( lmsallowedweapons & LMS_AWF_PLASMA ) == false ) && - ( pType == PClass::FindClass( "PlasmaRifle" ))) - { - return true; - } - if ((( lmsallowedweapons & LMS_AWF_RAILGUN ) == false ) && - ( pType == PClass::FindClass( "Railgun" ))) + FString weapons(lmsallowedweapons); + char *weapon = strtok((char*)weapons.GetChars(), ","); + + while (weapon) { - return true; + if (pType == PClass::FindClass(weapon)) + return false; + + weapon = strtok(NULL, ","); } - return false; + return true; } //***************************************************************************** @@ -830,25 +794,14 @@ } } -CUSTOM_CVAR( Int, lmsallowedweapons, LMS_AWF_ALLALLOWED, CVAR_SERVERINFO ) +CUSTOM_CVAR( String, lmsallowedweapons, LMS_ALLOWED_WEAPONS, CVAR_SERVERINFO ) { if (( NETWORK_GetState( ) == NETSTATE_SERVER ) && ( gamestate != GS_STARTUP )) { - SERVER_Printf( PRINT_HIGH, "%s changed to: %d\n", self.GetName( ), (LONG)self ); if ( lastmanstanding || teamlms ) SERVERCOMMANDS_SetLMSAllowedWeapons( ); } } -CVAR( Flag, lms_allowpistol, lmsallowedweapons, LMS_AWF_PISTOL ); -CVAR( Flag, lms_allowshotgun, lmsallowedweapons, LMS_AWF_SHOTGUN ); -CVAR( Flag, lms_allowssg, lmsallowedweapons, LMS_AWF_SSG ); -CVAR( Flag, lms_allowchaingun, lmsallowedweapons, LMS_AWF_CHAINGUN ); -CVAR( Flag, lms_allowminigun, lmsallowedweapons, LMS_AWF_MINIGUN ); -CVAR( Flag, lms_allowrocketlauncher, lmsallowedweapons, LMS_AWF_ROCKETLAUNCHER ); -CVAR( Flag, lms_allowgrenadelauncher, lmsallowedweapons, LMS_AWF_GRENADELAUNCHER ); -CVAR( Flag, lms_allowplasma, lmsallowedweapons, LMS_AWF_PLASMA ); -CVAR( Flag, lms_allowrailgun, lmsallowedweapons, LMS_AWF_RAILGUN ); -CVAR( Flag, lms_allowchainsaw, lmsallowedweapons, LMS_AWF_CHAINSAW ); CUSTOM_CVAR( Int, lmsspectatorsettings, LMS_SPF_VIEW, CVAR_SERVERINFO ) { diff -u src_old/lastmanstanding.h src/lastmanstanding.h --- src_old/lastmanstanding.h 2014-10-05 22:47:04.000000000 +0300 +++ src/lastmanstanding.h 2014-11-16 17:20:15.155587829 +0200 @@ -65,24 +65,12 @@ } LMSSTATE_e; -#define LMS_AWF_PISTOL 0x00000001 -#define LMS_AWF_SHOTGUN 0x00000002 -#define LMS_AWF_SSG 0x00000004 -#define LMS_AWF_CHAINGUN 0x00000008 -#define LMS_AWF_MINIGUN 0x00000010 -#define LMS_AWF_ROCKETLAUNCHER 0x00000020 -#define LMS_AWF_GRENADELAUNCHER 0x00000040 -#define LMS_AWF_PLASMA 0x00000080 -#define LMS_AWF_RAILGUN 0x00000100 -#define LMS_AWF_CHAINSAW 0x00000200 - -#define LMS_AWF_ALLALLOWED ( LMS_AWF_PISTOL|LMS_AWF_SHOTGUN|LMS_AWF_SSG|LMS_AWF_CHAINGUN| \ - LMS_AWF_MINIGUN|LMS_AWF_ROCKETLAUNCHER|LMS_AWF_GRENADELAUNCHER|LMS_AWF_PLASMA| \ - LMS_AWF_RAILGUN|LMS_AWF_CHAINSAW ) - #define LMS_SPF_CHAT 0x00000001 #define LMS_SPF_VIEW 0x00000002 +#define LMS_ALLOWED_WEAPONS "Chainsaw,Fist,Pistol,Shotgun,SuperShotgun,Chaingun,RocketLauncher,PlasmaRifle" +#define LMS_START_INVENTORY (gameinfo.gametype == GAME_Heretic) ? "SilverArmor" : "GreenArmor,PowerStrength" + //***************************************************************************** // PROTOTYPES @@ -117,7 +105,7 @@ // EXTERNAL CONSOLE VARIABLES EXTERN_CVAR( Int, sv_lmscountdowntime ) -EXTERN_CVAR( Int, lmsallowedweapons ); +EXTERN_CVAR( String, lmsallowedweapons ); EXTERN_CVAR( Int, lmsspectatorsettings ); EXTERN_CVAR( Int, winlimit ) Общие подкаталоги: src_old/Linux и src/Linux Общие подкаталоги: src_old/network и src/network Общие подкаталоги: src_old/oplsynth и src/oplsynth diff -u src_old/p_user.cpp src/p_user.cpp --- src_old/p_user.cpp 2014-10-05 22:47:04.000000000 +0300 +++ src/p_user.cpp 2015-01-10 18:31:51.562808371 +0200 @@ -80,6 +80,14 @@ // Note: ZDoom's limit is chosen such that the sky is rendered properly. CVAR (Bool, cl_oldfreelooklimit, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) +// LMS +CUSTOM_CVAR( Int, sv_lmsstarthealth, 200, CVAR_ARCHIVE ) +{ + if (self <= 0) + self = 100; +} +CVAR( String, sv_lmsstartinventory, LMS_START_INVENTORY, CVAR_ARCHIVE ) + static FRandom pr_skullpop ("SkullPop"); @@ -1428,21 +1436,17 @@ } } - // Also give the player berserk. - player->mo->GiveInventoryTypeRespectingReplacements( PClass::FindClass( "Berserk" ) ); - pBerserk = static_cast<APowerStrength *>( player->mo->FindInventory( PClass::FindClass( "PowerStrength" ))); - if ( pBerserk ) - { - pBerserk->EffectTics = 768; - // [BB] This is a workaround to set the EffectTics property of the powerup on the clients. - // Note: The server already tells the clients that they got PowerStrength, because - // Berserk uses A_GiveInventory("PowerStrength"). - if ( NETWORK_GetState( ) == NETSTATE_SERVER ) - SERVERCOMMANDS_GivePowerup( static_cast<ULONG>(player - players), pBerserk ); + player->health = sv_lmsstarthealth; + + FString items(sv_lmsstartinventory); + char *item = strtok((char*)items.GetChars(), ","); + + while (item) + { + player->mo->GiveInventoryTypeRespectingReplacements(PClass::FindClass(item)); + item = strtok(NULL, ","); } - player->health = deh.MegasphereHealth; - player->mo->GiveInventoryTypeRespectingReplacements( PClass::FindClass( "GreenArmor" ) ); player->health -= player->userinfo.lHandicap; // Don't allow player to be DOA. @@ -1554,8 +1558,17 @@ } } - player->health = deh.MegasphereHealth; - player->mo->GiveInventoryTypeRespectingReplacements( PClass::FindClass( "SilverShield" ) ); + player->health = sv_lmsstarthealth; + + FString items(sv_lmsstartinventory); + char *item = strtok((char*)items.GetChars(), ","); + + while (item) + { + player->mo->GiveInventoryTypeRespectingReplacements(PClass::FindClass(item)); + item = strtok(NULL, ","); + } + player->health -= player->userinfo.lHandicap; // Don't allow player to be DOA. Общие подкаталоги: src_old/sdl и src/sdl Общие подкаталоги: src_old/sfmt и src/sfmt Общие подкаталоги: src_old/sound и src/sound diff -u src_old/sv_commands.cpp src/sv_commands.cpp --- src_old/sv_commands.cpp 2014-10-05 22:47:04.000000000 +0300 +++ src/sv_commands.cpp 2014-11-16 12:52:15.710905932 +0200 @@ -3515,7 +3515,7 @@ SERVER_CheckClientBuffer( ulIdx, 5, true ); NETWORK_WriteHeader( &SERVER_GetClient( ulIdx )->PacketBuffer.ByteStream, SVC_SETLMSALLOWEDWEAPONS ); - NETWORK_WriteLong( &SERVER_GetClient( ulIdx )->PacketBuffer.ByteStream, lmsallowedweapons ); + NETWORK_WriteString(&SERVER_GetClient( ulIdx )->PacketBuffer.ByteStream, lmsallowedweapons); } } Только в src/: svnrevision.h Общие подкаталоги: src_old/textures и src/textures Общие подкаталоги: src_old/thingdef и src/thingdef Общие подкаталоги: src_old/timidity и src/timidity Общие подкаталоги: src_old/win32 и src/win32 Общие подкаталоги: src_old/xlat и src/xlat | ||||||||||||
![]() |
|
Dusk (developer) 2014-12-29 21:50 edited on: 2014-12-29 21:52 |
I like the premise of the patch for the most part, though..char *weapon = strtok((char*)FString(lmsallowedweapons).GetChars(), ","); First you cast lmsallowedweapons to FString via constructor, then to const char* via GetChars(), then to char* via a C-style const cast?! And then you proceed to pass this to strtok which mutates its value..? Using FString::IndexOf should produce a much cleaner version here. At least you should copy the value of lmsallowedweapons to a temporary buffer to make strtok safer to use. |
Edward-san (developer) 2015-01-10 17:01 |
When you're making a new diff, please use unified diff ( '-u' option ). |
Monsterovich (reporter) 2015-01-10 17:09 |
Ahh, sorry. Fixed. |
Only registered users can voice their support. Click here to register, or here to log in. | |
Supporters: | Monsterovich Klofkac |
Opponents: | No one explicitly opposes this issue yet. |
![]() |
|||
Date Modified | Username | Field | Change |
2014-12-29 21:22 | Monsterovich | New Issue | |
2014-12-29 21:22 | Monsterovich | File Added: lms.diff | |
2014-12-29 21:50 | Dusk | Note Added: 0011135 | |
2014-12-29 21:52 | Dusk | Note Edited: 0011135 | View Revisions |
2015-01-10 16:39 | Monsterovich | File Added: lms2.diff | |
2015-01-10 16:42 | Monsterovich | File Added: lms2fix.diff | |
2015-01-10 17:01 | Edward-san | Note Added: 0011358 | |
2015-01-10 17:09 | Monsterovich | File Added: lms3.diff | |
2015-01-10 17:09 | Monsterovich | Note Added: 0011359 |
Copyright © 2012-2025, Torr Samaho & Zandronum Team.
Doom and Doom II are the property of id Software.
Copyright © 2000 - 2025 MantisBT Team |