Bobot_common.c (3)

/*----------------------------------------------------------------------------------------------------------
3emeType
le bot se dirige vers un pack (enfin, là où il l'a vu pour la dernière fois) et s'en saisit.
----------------------------------------------------------------------------------------------------------*/
void BOBOT_COMMON_TakePack(gentity_t *bobot, usercmd_t *ucmd)
{     vec3_t         dir;
    Sbobot        *bobotAI = &bobots[bobot->s.clientNum];
    gentity_t    *goalentity = bobotAI->currentAction.ent;

    if(goalentity == NULL)
    {    BOBOT_AI_endOfCurrentAction(bobotAI);
        BOBOT_COMMON_TakeBestWeapon(bobot,bobotAI->myteam,ucmd);
        return;
    }
    VectorSubtract (bobotAI->currentAction.lastKnownPos, bobot->client->ps.origin, dir);
    if (VectorLengthSquared(dir) < BOBOT_DIST_TAKE_PACK)    // le bot va vers le pack, si assez près du pack
    {     if(!bobotAI->currentAction.ent->inuse  || (VectorLength(dir) <= 30))
        { BOBOT_AI_endOfCurrentAction(bobotAI); }            // s'il l'a pris il arrête son action
        else                                                // le bot va tout droit
        {    BOBOT_BasicMove(bobot,ucmd);    }
    }
    else                                                    // sinon il utilise son réseau de neurones pour éviter les obstacles
    { BOBOT_Move(bobot,ucmd); }
}

/*-----------------------------------------------------------------
Pav : le bobot choisit l'arme pour laquelle il reste des munitions.
-------------------------------------------------------------------*/
void BOBOT_COMMON_TakeBestWeapon(gentity_t *bobot, int team, usercmd_t *ucmd)
{    weapon_t    weapon,weapon2;    //,weapon3;

    weapon  = bobot->client->sess.playerWeapon;
    weapon2  = bobot->client->sess.playerWeapon2;
    /*if (weapon2==WP_AKIMBO_COLT || weapon2==WP_AKIMBO_SILENCEDCOLT || weapon2==WP_AKIMBO_LUGER || weapon2==WP_AKIMBO_COLT)
        weapon3=BG_AkimboSidearm(weapon2);
    else
        weapon3=weapon2;*/
   
    //G_Printf("\nweapon2 %i nweapon3 %i",weapon2,weapon3);
    if (VerifierMunitions(bobot,weapon) <= 0)                // Pav si il n'y a plus de munition dans l'arme pricipale on prend l'arme secondaire (flingue/akimbo)
    {    ucmd->weapon = weapon2;
        if (VerifierMunitions(bobot,weapon2) <= 0)            // si il n'y a plus de munition dans l'arme secondaire, on triche, on en met 16 en réserve.
        {    bobot->client->ps.ammo[BG_FindAmmoForWeapon(weapon2)] = 16;
            ucmd->wbuttons |= WBUTTON_RELOAD;
            if(random() < 0.03)                                // On demande des ammos de temps en temps pour ne pas souler de messages.
            { G_Voice( bobot, NULL, SAY_TEAM, "NeedAmmo", qtrue); }
        }
    }
    else
    {    ucmd->weapon = weapon;
        if ( bobot->client->ps.ammoclip[BG_FindClipForWeapon(weapon)]<=0)
        {    if (bobot->client->ps.ammo[BG_FindAmmoForWeapon(weapon)]>0)
                ucmd->wbuttons |= WBUTTON_RELOAD;
        }
    }
}

Créer un site gratuit avec e-monsite - Signaler un contenu illicite sur ce site