int CBuilderCAI::GetDefaultCmd(CUnit* pointed, CFeature* feature) { if (pointed) { if (!teamHandler->Ally(gu->myAllyTeam, pointed->allyteam)) { if (owner->unitDef->canAttack && (owner->maxRange > 0)) { return CMD_ATTACK; } else if (owner->unitDef->canReclaim && pointed->unitDef->reclaimable) { return CMD_RECLAIM; } } else { CTransportCAI* tran = dynamic_cast<CTransportCAI*>(pointed->commandAI); if ((pointed->health < pointed->maxHealth) && (!pointed->soloBuilder || (pointed->soloBuilder == owner)) && (( pointed->beingBuilt && owner->unitDef->canAssist) || (!pointed->beingBuilt && owner->unitDef->canRepair))) { return CMD_REPAIR; } else if (tran && tran->CanTransport(owner)) { return CMD_LOAD_ONTO; } else if (owner->unitDef->canGuard) { return CMD_GUARD; } } } if (feature) { if (owner->unitDef->canResurrect && !feature->createdFromUnit.empty()) { return CMD_RESURRECT; } else if(owner->unitDef->canReclaim && feature->def->reclaimable) { return CMD_RECLAIM; } } return CMD_MOVE; }
int CMobileCAI::GetDefaultCmd(const CUnit* pointed, const CFeature* feature) { if (pointed) { if (!teamHandler->Ally(gu->myAllyTeam,pointed->allyteam)) { if (owner->unitDef->canAttack) { return CMD_ATTACK; } } else { CTransportCAI* tran = dynamic_cast<CTransportCAI*>(pointed->commandAI); if(tran && tran->CanTransport(owner)) { return CMD_LOAD_ONTO; } else if (owner->unitDef->canGuard) { return CMD_GUARD; } } } return CMD_MOVE; }