Skip to content

Commit 68a4a70

Browse files
committed
improve zbot in zb1
1 parent 199e3b3 commit 68a4a70

File tree

14 files changed

+109
-163
lines changed

14 files changed

+109
-163
lines changed

CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ if(CMAKE_SIZEOF_VOID_P MATCHES "8")
3131
endif()
3232
endif()
3333

34+
# force xp build
35+
if(MSVC)
36+
add_definitions(-D_USING_V110_SDK71_)
37+
endif()
38+
3439
if(64BIT AND CMAKE_SIZEOF_VOID_P EQUAL 4)
3540
message(FATAL_ERROR "You enabled XASH_64BIT, but compiler can't create 64 bit code!")
3641
endif()

CMakeSettings.json

Lines changed: 0 additions & 91 deletions
This file was deleted.

dlls/bot/cs_bot.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -965,3 +965,28 @@ float CCSBot::GetRangeToFarthestEscortedHostage() const
965965

966966
return away.m_farRange;
967967
}
968+
969+
bool CCSBot::IsAwareOfEnemyDeath() const
970+
{
971+
if (GetEnemyDeathTimestamp() == 0.0f)
972+
return false;
973+
974+
if (m_enemy == NULL)
975+
return true;
976+
977+
if (!m_enemy->IsAlive() && gpGlobals->time - GetEnemyDeathTimestamp() > (1.0f - GetProfile()->GetSkill()))
978+
return true;
979+
980+
if (g_pGameRules->PlayerRelationship(const_cast<CCSBot *>(this), m_enemy) == GR_TEAMMATE)
981+
return true;
982+
983+
return false;
984+
}
985+
986+
void CCSBot::MakeZombie(ZombieLevel iEvolutionLevel)
987+
{
988+
CBasePlayer::MakeZombie(iEvolutionLevel);
989+
StopAiming();
990+
StopAttacking();
991+
Idle();
992+
}

dlls/bot/cs_bot.h

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,8 @@ class CCSBot: public CBot
336336
virtual void Walk();
337337
virtual bool Jump(bool mustJump = false); // returns true if jump was started
338338

339+
virtual void MakeZombie(ZombieLevel iEvolutionLevel);
340+
339341
virtual void OnEvent(GameEventType event, CBaseEntity *entity = NULL, CBaseEntity *other = NULL); // invoked when event occurs in the game (some events have NULL entity)
340342

341343
#define CHECK_FOV true
@@ -1413,20 +1415,6 @@ inline const Vector *CCSBot::GetNoisePosition() const
14131415
return NULL;
14141416
}
14151417

1416-
inline bool CCSBot::IsAwareOfEnemyDeath() const
1417-
{
1418-
if (GetEnemyDeathTimestamp() == 0.0f)
1419-
return false;
1420-
1421-
if (m_enemy == NULL)
1422-
return true;
1423-
1424-
if (!m_enemy->IsAlive() && gpGlobals->time - GetEnemyDeathTimestamp() > (1.0f - GetProfile()->GetSkill()))
1425-
return true;
1426-
1427-
return false;
1428-
}
1429-
14301418
inline bool CCSBot::IsNotMoving() const
14311419
{
14321420
const float stillSpeed = 10.0f;

dlls/bot/cs_bot_vision.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -973,6 +973,8 @@ void CCSBot::UpdateReactionQueue()
973973
m_enemyQueue[ now ].player = NULL;
974974
m_enemyQueue[ now ].isReloading = false;
975975
m_enemyQueue[ now ].isProtectedByShield = false;
976+
if(m_isAttacking)
977+
StopAttacking();
976978
}
977979

978980
// queue is round-robin

dlls/bot/states/cs_bot_attack.cpp

Lines changed: 58 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -516,10 +516,11 @@ void AttackState::OnUpdate(CCSBot *me)
516516
if (gpGlobals->time > m_reacquireTimestamp)
517517
me->FireWeaponAtEnemy();
518518

519-
519+
bool bEnemyIsZombie = (enemy->IsPlayer() && static_cast<CBasePlayer *>(enemy)->m_bIsZombie);
520+
// attacking zombie, must moveback
520521
// do dodge behavior
521522
// If sniping or crouching, stand still.
522-
if (m_dodge && !me->IsUsingSniperRifle() && !m_crouchAndHold)
523+
if (m_dodge || bEnemyIsZombie)
523524
{
524525
Vector toEnemy = enemy->pev->origin - me->pev->origin;
525526
float range = toEnemy.Length2D();
@@ -530,67 +531,76 @@ void AttackState::OnUpdate(CCSBot *me)
530531
float maxRange = me->GetCombatRange() + hysterisRange;
531532

532533
// move towards (or away from) enemy if we are using a knife, behind a corner, or we aren't very skilled
533-
if (me->GetProfile()->GetSkill() < 0.66f || !me->IsEnemyVisible())
534+
if (me->GetProfile()->GetSkill() < 0.66f || !me->IsEnemyVisible() || bEnemyIsZombie)
534535
{
535536
if (range > maxRange)
537+
{
536538
me->MoveForward();
539+
SetCrouchAndHold(false);
540+
}
537541
else if (range < minRange)
542+
{
538543
me->MoveBackward();
544+
SetCrouchAndHold(false);
545+
}
539546
}
540547

541-
// don't dodge if enemy is facing away
542-
const float dodgeRange = 2000.0f;
543-
if (range > dodgeRange || !me->IsPlayerFacingMe(enemy))
544-
{
545-
m_dodgeState = STEADY_ON;
546-
m_nextDodgeStateTimestamp = 0.0f;
547-
}
548-
else if (gpGlobals->time >= m_nextDodgeStateTimestamp)
548+
if (!me->IsUsingSniperRifle() && !m_crouchAndHold)
549549
{
550-
int next;
551-
552-
// select next dodge state that is different that our current one
553-
do
550+
// don't dodge if enemy is facing away
551+
const float dodgeRange = 2000.0f;
552+
if (range > dodgeRange || !me->IsPlayerFacingMe(enemy))
554553
{
555-
// high-skill bots may jump when first engaging the enemy (if they are moving)
556-
const float jumpChance = 33.3f;
557-
if (m_firstDodge && me->GetProfile()->GetSkill() > 0.5f && RANDOM_FLOAT(0, 100) < jumpChance && !me->IsNotMoving())
558-
next = RANDOM_LONG(0, NUM_ATTACK_STATES - 1);
559-
else
560-
next = RANDOM_LONG(0, NUM_ATTACK_STATES - 2);
554+
m_dodgeState = STEADY_ON;
555+
m_nextDodgeStateTimestamp = 0.0f;
561556
}
562-
while (!m_firstDodge && next == m_dodgeState);
557+
else if (gpGlobals->time >= m_nextDodgeStateTimestamp)
558+
{
559+
int next;
563560

564-
m_dodgeState = (DodgeStateType)next;
565-
m_nextDodgeStateTimestamp = gpGlobals->time + RANDOM_FLOAT(0.3f, 1.0f);
566-
m_firstDodge = false;
567-
}
561+
// select next dodge state that is different that our current one
562+
do
563+
{
564+
// high-skill bots may jump when first engaging the enemy (if they are moving)
565+
const float jumpChance = 33.3f;
566+
if (m_firstDodge && me->GetProfile()->GetSkill() > 0.5f && RANDOM_FLOAT(0, 100) < jumpChance && !me->IsNotMoving())
567+
next = RANDOM_LONG(0, NUM_ATTACK_STATES - 1);
568+
else
569+
next = RANDOM_LONG(0, NUM_ATTACK_STATES - 2);
570+
} while (!m_firstDodge && next == m_dodgeState);
571+
572+
m_dodgeState = (DodgeStateType)next;
573+
m_nextDodgeStateTimestamp = gpGlobals->time + RANDOM_FLOAT(0.3f, 1.0f);
574+
m_firstDodge = false;
575+
}
568576

569-
switch (m_dodgeState)
570-
{
571-
case STEADY_ON:
572-
{
573-
break;
574-
}
575-
case SLIDE_LEFT:
576-
{
577-
me->StrafeLeft();
578-
break;
579-
}
580-
case SLIDE_RIGHT:
581-
{
582-
me->StrafeRight();
583-
break;
584-
}
585-
case JUMP:
586-
{
587-
if (me->m_isEnemyVisible)
577+
switch (m_dodgeState)
578+
{
579+
case STEADY_ON:
588580
{
589-
me->Jump();
581+
break;
582+
}
583+
case SLIDE_LEFT:
584+
{
585+
me->StrafeLeft();
586+
break;
587+
}
588+
case SLIDE_RIGHT:
589+
{
590+
me->StrafeRight();
591+
break;
592+
}
593+
case JUMP:
594+
{
595+
if (me->m_isEnemyVisible)
596+
{
597+
me->Jump();
598+
}
599+
break;
600+
}
590601
}
591-
break;
592-
}
593602
}
603+
594604
}
595605
}
596606

dlls/gamemode/mod_base.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ class CBasePlayer; // player.h
1515
class IBaseMod : public CHalfLifeMultiplay
1616
{
1717
public:
18-
virtual bool IsZBMode() = 0;
18+
virtual bool IsZBMode() { return false; };
19+
virtual bool FIgnoreBuyZone(CBasePlayer *player) { return false; }
1920
virtual bool CanPlayerBuy(CBasePlayer *player, bool display) = 0;
2021
};
2122

dlls/gamemode/mod_dm.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,8 +282,6 @@ void CMod_DeathMatch::PlayerSpawn(CBasePlayer *pPlayer)
282282
// Give Armor
283283
pPlayer->m_iKevlar = ARMOR_TYPE_HELMET;
284284
pPlayer->pev->armorvalue = 100;
285-
286-
pPlayer->m_signals.Signal(SIGNAL_BUY);
287285
}
288286

289287
bool CMod_DeathMatch::CheckWinLimitDM()

dlls/gamemode/mod_dm.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ class CMod_DeathMatch : public IBaseMod_RemoveObjects, public IBaseMod_RandomSpa
3030
void PlayerSpawn(CBasePlayer *pPlayer) override;
3131
bool CanPlayerBuy(CBasePlayer *player, bool display) override { return true; }
3232
public:
33-
bool IsZBMode() override { return false; }
33+
bool IsZBMode() override { return true; }
34+
bool FIgnoreBuyZone(CBasePlayer *player) override { return true; }
3435

3536
public:
3637
int CalcLeaderFrags();

dlls/gamemode/mod_zb1.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ void CMod_Zombi::HumanInfectionByZombie(CBasePlayer *player, CBasePlayer *attack
291291
EMIT_SOUND(ENT(player->pev), CHAN_BODY, RANDOM_LONG(0, 1) ? "zombi/human_death_01.wav" : "zombi/human_death_02.wav", VOL_NORM, ATTN_NORM);
292292

293293

294-
DeathNotice(player, attacker->pev, attacker->m_pActiveItem->pev);
294+
DeathNotice(player, attacker->pev, attacker->pev);
295295
SetScoreAttrib(player, player);
296296
TeamCheck();
297297
CheckWinConditions();
@@ -362,8 +362,6 @@ void CMod_Zombi::PlayerSpawn(CBasePlayer *pPlayer)
362362
pPlayer->m_iKevlar = ARMOR_TYPE_HELMET;
363363
pPlayer->pev->armorvalue = 100;
364364
pPlayer->m_bIsZombie = false;
365-
366-
pPlayer->m_signals.Signal(SIGNAL_BUY);
367365
}
368366

369367
BOOL CMod_Zombi::FPlayerCanTakeDamage(CBasePlayer *pPlayer, CBaseEntity *pAttacker)

0 commit comments

Comments
 (0)