From bd02a9526002f7b7aa7934e77586945e17854833 Mon Sep 17 00:00:00 2001 From: Giegue Date: Sat, 4 Mar 2023 17:24:01 -0300 Subject: [PATCH] Fix broken shock roach death. Fix hwgrunt not spinning down the minigun. Other misc. fixes. --- extra/valve/bin/hl_monsterbridge.amxx | Bin 4049 -> 4426 bytes extra/valve/src/hl_monsterbridge.sma | 20 ++++++++++++++++++-- src/dlls/dllapi.cpp | 8 ++++---- src/dlls/hornet.cpp | 2 ++ src/dlls/hwgrunt.cpp | 13 ++++++++++++- src/dlls/shockroach.cpp | 2 +- src/dlls/util.cpp | 5 +++-- 7 files changed, 40 insertions(+), 10 deletions(-) diff --git a/extra/valve/bin/hl_monsterbridge.amxx b/extra/valve/bin/hl_monsterbridge.amxx index 59a174c47e5cbe21a648e691db50611021fb9058..ada2c3eb826b26a78c41e0c717ec36ede769cdaa 100644 GIT binary patch literal 4426 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 Q{N^JnH@4UR11Ob1d3T58V*mgE literal 4049 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 DP8=bR diff --git a/extra/valve/src/hl_monsterbridge.sma b/extra/valve/src/hl_monsterbridge.sma index 199c817..cb4b933 100644 --- a/extra/valve/src/hl_monsterbridge.sma +++ b/extra/valve/src/hl_monsterbridge.sma @@ -16,7 +16,7 @@ new Trie:g_HLDefaultNames; public plugin_init() { - register_plugin( "HL-MONSTER Bridge", "1.0", "Giegue" ); + register_plugin( "HL-MONSTER Bridge", "1.1", "Giegue" ); RegisterHam( Ham_IRelationship, "monster_alien_controller", "mmIRelationship" ); RegisterHam( Ham_IRelationship, "monster_alien_grunt", "mmIRelationship" ); @@ -67,10 +67,12 @@ public plugin_init() TrieSetString( g_HLDefaultNames, "monster_osprey", "Osprey Helicopter" ); TrieSetString( g_HLDefaultNames, "monster_gargantua", "Gargantua" ); TrieSetString( g_HLDefaultNames, "monster_nihilanth", "Nihilanth" ); - TrieSetString( g_HLDefaultNames, "monster_tentacle"," Tentacle" ); + TrieSetString( g_HLDefaultNames, "monster_tentacle", "Tentacle" ); set_task( 0.3, "hlScan", 0, "", 0, "b" ); register_srvcmd( "monster_hurt_entity", "hlTakeDamage" ); + + RegisterHam( Ham_Killed, "player", "PlayerKilled", 1 ); } public plugin_end() { @@ -186,3 +188,17 @@ public hlTakeDamage() ExecuteHamB( Ham_TakeDamage, victim, inflictor, attacker, damage, damageBits ); } } + +public PlayerKilled( victim, attacker, shouldgib ) +{ + // don't obstruct monstermod + if ( victim == attacker ) + return HAM_IGNORED; + + // fix monster score + if ( entity_get_int( attacker, EV_INT_flags ) & FL_MONSTER ) + entity_set_float( attacker, EV_FL_frags, entity_get_float( attacker, EV_FL_frags ) + 2 ); + + entity_set_edict( victim, EV_ENT_dmg_inflictor, attacker ); + return HAM_IGNORED; +} diff --git a/src/dlls/dllapi.cpp b/src/dlls/dllapi.cpp index 21be0f7..e81a07f 100644 --- a/src/dlls/dllapi.cpp +++ b/src/dlls/dllapi.cpp @@ -399,12 +399,12 @@ void check_player_dead( edict_t *pPlayer ) } else { - // SOMETHING that is a monster + // Does this monster have a name? if ( !FStringNull( pAttacker->v.netname ) ) strcpy(szName, STRING( pAttacker->v.netname )); else { - // No netname, use classname + // No name, use class strcpy(szName, STRING( pAttacker->v.classname )); } } @@ -537,8 +537,8 @@ void check_monster_info( edict_t *pPlayer ) // It should be alive if ( UTIL_IsAlive( tr.pHit ) ) { - // Must be a monster - if (tr.pHit->v.flags & FL_MONSTER) + // Must be a monster (and strictly a monster!) + if (strncmp( STRING( tr.pHit->v.classname ), "monster_", 8 ) == 0 && tr.pHit->v.flags & FL_MONSTER) { char szName[129]; float monsterHealth, monsterFrags; diff --git a/src/dlls/hornet.cpp b/src/dlls/hornet.cpp index b41edc0..e4966e7 100644 --- a/src/dlls/hornet.cpp +++ b/src/dlls/hornet.cpp @@ -372,6 +372,8 @@ void CMHornet::DieTouch ( edict_t *pOther ) CMBaseMonster *pMonster = GetClassPtr((CMBaseMonster *)VARS(pOther)); pMonster->TakeDamage( pev, VARS( pev->owner ), pev->dmg, DMG_BULLET ); } + else + UTIL_TakeDamageExternal( pOther, pev, VARS( pev->owner ), pev->dmg, DMG_BULLET ); } pev->modelindex = 0;// so will disappear for the 0.1 secs we wait until NEXTTHINK gets rid diff --git a/src/dlls/hwgrunt.cpp b/src/dlls/hwgrunt.cpp index 09888bd..a768b6d 100644 --- a/src/dlls/hwgrunt.cpp +++ b/src/dlls/hwgrunt.cpp @@ -700,7 +700,18 @@ void CMHWGrunt :: SetActivity ( Activity NewActivity ) case ACT_RUN: case ACT_WALK: default: - iSequence = LookupActivity ( NewActivity ); + if ( m_flMinigunSpinTime != 0 ) + { + // if the hwgrunt used his minigun but became unable to attack + // then spin it down before doing anything else + refreshActivity = FALSE; + + EMIT_SOUND(ENT(pev), CHAN_WEAPON, "hassault/hw_spindown.wav", 0.8, ATTN_NORM); + m_flMinigunSpinTime = gpGlobals->time + 1.40; + iSequence = LookupSequence( "spindown" ); + } + else + iSequence = LookupActivity ( NewActivity ); break; } diff --git a/src/dlls/shockroach.cpp b/src/dlls/shockroach.cpp index baf7125..34d074d 100644 --- a/src/dlls/shockroach.cpp +++ b/src/dlls/shockroach.cpp @@ -153,7 +153,7 @@ void CMShockRoach::MonsterThink(void) { pev->health = -1; Killed(pev, 0); - return; + //return; // it still needs to think } CMHeadCrab::MonsterThink(); diff --git a/src/dlls/util.cpp b/src/dlls/util.cpp index fc65ad3..c6382ab 100644 --- a/src/dlls/util.cpp +++ b/src/dlls/util.cpp @@ -39,7 +39,7 @@ typedef struct { } gamedll_funcs_t; extern gamedll_funcs_t *gpGamedllFuncs; - +extern void check_player_dead( edict_t *pPlayer ); // Print to console. void META_CONS(char *fmt, ...) { @@ -1760,7 +1760,8 @@ int UTIL_TakeDamage( edict_t *pEdict, entvars_t *pevInflictor, entvars_t *pevAtt { pEdict->v.health = 1; // can't suicide if already dead! gpGamedllFuncs->dllapi_table->pfnClientKill(pEdict); - + check_player_dead(pEdict); // will you just fucking work? + // Add 1 score to the monster that killed this player if ( pevAttacker->flags & FL_MONSTER ) pevAttacker->frags += 1.0;