Jump to content

[CODE] Press to attack


Recommended Posts

I was wondering how to trigger an action by pressing a key. Maybe someone here knows how to make it (and is willing to share knowledge with others). Thanks to K1NGT1GER609 I finished Mosin Nagant rifle for my character, but now I would like to upgrade PPSh SMG with hold to fire button. I have met so called keyhandlers before during my research, but problem here is to attach an action for a key. For instance in PPSh prefab:

local assets=
{ 
    Asset("ANIM", "anim/ppsh_smg.zip"),
    Asset("ANIM", "anim/swap_ppsh_smg.zip"), 

    Asset("ATLAS", "images/inventoryimages/ppsh_smg.xml"),
    Asset("IMAGE", "images/inventoryimages/ppsh_smg.tex"),
}

local prefabs = 
{
}

local function OnEquip(inst, owner)
	owner.AnimState:OverrideSymbol("swap_object", "swap_ppsh_smg", "ppsh")
	owner.AnimState:Show("ARM_carry")
	owner.AnimState:Hide("ARM_normal")
end

local function OnUnequip(inst, owner)
	owner.AnimState:Hide("ARM_carry")
	owner.AnimState:Show("ARM_normal")
end
    
local function onattack_gun(inst, owner, target)
    inst.SoundEmitter:PlaySound("dontstarve/ghost/bloodpump")   
end 

local function fn(Sim)
	local inst = CreateEntity()
	inst.entity:AddTransform()
	inst.entity:AddAnimState()
	inst.entity:AddNetwork()
	inst.entity:AddSoundEmitter()
	
	MakeInventoryPhysics(inst)
	
	inst.AnimState:SetBank("ppsh")
	inst.AnimState:SetBuild("ppsh_smg")
	inst.AnimState:PlayAnimation("idle")
	
	inst:AddTag("sharp")
	
	if not TheWorld.ismastersim then
		return inst
	end
	inst.entity:SetPristine()
	
	
	
	inst:AddComponent("inventoryitem")
	inst.components.inventoryitem.imagename = "ppsh_smg"
	inst.components.inventoryitem.atlasname = "images/inventoryimages/ppsh_smg.xml"
	
	inst:AddComponent("inspectable")
	inst:AddComponent("equippable")
	MakeHauntableLaunch(inst)
	
	inst.components.equippable:SetOnEquip( OnEquip )
	inst.components.equippable:SetOnUnequip( OnUnequip )
	
	inst:AddComponent("finiteuses")
    inst.components.finiteuses:SetMaxUses(2000)
    inst.components.finiteuses:SetUses(2000)    
    inst.components.finiteuses:SetOnFinished(inst.Remove)

    inst:AddComponent("weapon")   	
	inst.components.weapon:SetDamage(25)
    inst.components.weapon:SetRange(14)
    inst.components.weapon:SetProjectile("smgammo")
	inst.components.weapon:SetOnAttack(onattack_gun) 

inst.HasAmmo = function(inst, owner)
        if (owner and owner.components.inventory and owner.components.inventory:Has("smgammo", 1)) then
            owner.components.inventory:ConsumeByName("smgammo", 1)
            inst.components.weapon:SetDamage(25)
            return true
        end
        return false
    end 
	
	return inst
end



return Prefab("common/inventory/ppsh_smg", fn, assets, prefabs)

What line shall I write into code to make weapon firing a bullet every key press ?

Link to comment
Share on other sites

Keyhandlers is a long order for what you want so here's a start.

 

local function onattack_gun(inst, owner, target, data) 

inst.SoundEmitter:PlaySound("dontstarve/ghost/bloodpump")

if data.inst == ThePlayer then--make sure its a player

if data.inst.HUD and (data.inst.HUD:IsChatInputScreenOpen() or data.inst.HUD:IsConsoleScreenOpen()) then return end --make sure not to trigger on chat or console

if owner and owner.components.inventory and owner.components.inventory:Has("smgammo", 1) and data:IsKeyDown(KEY_R) then --or is it TheInput:IsKeyDown(KEY_R)

inst.components.weapon:LaunchProjectile(inst, target)

end

end

local function fn(Sim)

 

if not TheWorld.ismastersim then return inst end --reference

inst:AddComponent("keyhandler")

The only main part thats missing is adding a additional component keyhandler by making a folder in: scripts-components-keyhandler.lua.

other than that this code hasn't been tested and this material is still new to me.

keyhandler.lua

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
  • Create New...