LeadKiller / leadbot

🤖Player AI Bots to revive obscure gamemodes in Garry's Mod🤖

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Weapon Priority System

LeadKiller opened this issue · comments

commented

Currently, the bot relies on either the gamemode or bot code to switch weapons.

Weapon Priority would allow users to add weapons to the gamemode configuration, allowing users to define if weapons are projectile, melee or hitscan (possibly categories such as sniper and smg?) and their priority for pickup.

The bot would be able to switch between weapons depending on which is stronger (set by pickup priority), and if needed, switch weapons depending on the situation.

Melee weapons may have an issue where the draw animation disallows the bot to switch back to their previous weapon and primary attack. To fix this, the bot could have a delay before switching back.

Bots would also be able to pick up weapons in gamemodes that have weapon pickups (if the weapon is stronger than their current one), such as Quake III and other deathmatch gamemodes.

I make it ^-^

    local selectWeap = "hands"
    local range = 160000
    local WepList0 = {
        "weapon_bugbait",
        "weapon_crwbr",
        "weapon_fists",
        "weapon_crowbar",
        "weapon_stunstick",
        "weapon_slapstick",
        "weapon_longbar"
    }
    local WepList1 = {
        "weapon_parkinsons",
        "weapon_spraynpray",
        "weapon_pistol",
        "weapon_357",
        "weapon_smg1",
        "weapon_ar2",
        "weapon_crossbow",
        "weapon_rpg"
    }
    local WepList2 = {
        "weapon_hossrifle",
        "weapon_longbar",
        "weapon_frag",
        "weapon_shotgun"
    }

if(IsValid(controller.Target)) then
    local TargetDist = controller.Target:GetPos():DistToSqr(controller:GetPos())
    if (TargetDist < range/4 and TargetDist < range*2) then
        for _, wepClass in ipairs(WepList0) do
            if bot:HasWeapon( wepClass ) then
              selectWeap = wepClass
              weapon_type = 'mele'
            end
         end
    elseif (TargetDist > range) then
        for _, wepClass in ipairs(WepList1) do
            if bot:HasWeapon( wepClass ) then
              selectWeap = wepClass
              weapon_type = "long_guns"
            end
         end
    elseif (TargetDist < range) then
        for _, wepClass in ipairs(WepList2) do
            if bot:HasWeapon( wepClass ) then
                selectWeap = wepClass
                weapon_type = "shotgun"
            end
    end

    end

    if (TargetDist > range/4) then
        buttons = buttons + IN_DUCK
    end
    
    if selectWeap != nil then
        bot:SelectWeapon(selectWeap)
    end

    end

    cmd:ClearButtons()
    cmd:ClearMovement()
    cmd:SetButtons(buttons)
end