CGotoHideSpotSched::CGotoHideSpotSched(CBot *pBot, edict_t *pEdict, bool bIsGrenade) { // run at flank while shooting CFindPathTask *pHideGoalPoint = new CFindPathTask(pEdict); pBot->SetCoverFrom(pEdict); AddTask(new CFindGoodHideSpot(pEdict)); AddTask(pHideGoalPoint); //if ( bIsGrenade ) //AddTask(new CDODWaitForGrenadeTask(pEdict)); // don't need to hide if the player we're hiding from died while we're running away pHideGoalPoint->FailIfTaskEdictDead(); pHideGoalPoint->SetLookTask(LOOK_WAYPOINT); // no interrupts, should be a quick waypoint path anyway pHideGoalPoint->SetNoInterruptions(); // get vector from good hide spot task pHideGoalPoint->GetPassedVector(); pHideGoalPoint->DontGoToEdict(); if (bIsGrenade) { pHideGoalPoint->SetRange(BLAST_RADIUS + 100.0f); pHideGoalPoint->CompleteOutOfRangeFromEdict(); } }
CBotRemoveSapperSched::CBotRemoveSapperSched(edict_t *pBuilding, eEngiBuild id) { CFindPathTask *pathtask = new CFindPathTask(pBuilding); AddTask(pathtask); pathtask->CompleteInRangeFromEdict(); pathtask->SetRange(150.0f); AddTask(new CBotRemoveSapper(pBuilding, id)); }
CBotTF2AttackSentryGun::CBotTF2AttackSentryGun(edict_t *pSentry, CBotWeapon *pWeapon) { CFindPathTask *path = new CFindPathTask(pSentry); AddTask(path); AddTask(new CBotTF2AttackSentryGunTask(pSentry, pWeapon)); path->CompleteInRangeFromEdict(); path->CompleteIfSeeTaskEdict(); path->SetRange(pWeapon->PrimaryMaxRange() - 100); }
CBotTFEngiUpgrade::CBotTFEngiUpgrade(CBot *pBot, edict_t *pBuilding) { CFindPathTask *pathtask = new CFindPathTask(pBuilding); AddTask(pathtask); pathtask->CompleteInRangeFromEdict(); pathtask->FailIfTaskEdictDead(); pathtask->SetRange(150.0f); if (!CTeamFortress2Mod::IsSentryGun(pBuilding)) { pathtask->SetInterruptFunction(new CBotTF2EngineerInterrupt(pBot)); CBotTF2UpgradeBuilding *upgbuilding = new CBotTF2UpgradeBuilding(pBuilding); AddTask(upgbuilding); upgbuilding->SetInterruptFunction(new CBotTF2EngineerInterrupt(pBot)); } else { AddTask(new CBotTF2UpgradeBuilding(pBuilding)); } }