diff --git a/gamemodes/benny/entities/entities/b-itembase.lua b/gamemodes/benny/entities/entities/b-itembase.lua index 968b013..33a64f6 100644 --- a/gamemodes/benny/entities/entities/b-itembase.lua +++ b/gamemodes/benny/entities/entities/b-itembase.lua @@ -19,8 +19,6 @@ function ENT:Initialize() end self.Class:Initialize( self ) - - --self:UseClientSideAnimation() end if SERVER then @@ -46,15 +44,6 @@ function ENT:PlayAnimation( seqid, speed ) end function ENT:Think() - - if false and SERVER then - print( "m_flAnimTime", self:GetInternalVariable("m_flAnimTime") ) - print( "m_flPrevAnimTime", self:GetInternalVariable("m_flPrevAnimTime") ) - print( "m_bClientSideAnimation", self:GetInternalVariable("m_bClientSideAnimation") ) - print( "m_bClientSideFrameReset", self:GetInternalVariable("m_bClientSideFrameReset") ) - print( "cycle", self:GetInternalVariable("cycle") ) - end - self:NextThink( CurTime() ) if CLIENT then self:SetNextClientThink( CurTime()-5 ) diff --git a/gamemodes/benny/entities/weapons/goat.lua b/gamemodes/benny/entities/weapons/goat.lua new file mode 100644 index 0000000..af2752d --- /dev/null +++ b/gamemodes/benny/entities/weapons/goat.lua @@ -0,0 +1,26 @@ + +SWEP.Base = "weapon_base" + +function SWEP:PrimaryAttack() + return true +end + +function SWEP:SecondaryAttack() + return true +end + +function SWEP:Reload() + return true +end + +function SWEP:Think() + return true +end + +function SWEP:Deploy() + return true +end + +function SWEP:Holster() + return true +end \ No newline at end of file diff --git a/gamemodes/benny/entities/weapons/itemhandler.lua b/gamemodes/benny/entities/weapons/itemhandler.lua index 74b6aaf..8ac36f4 100644 --- a/gamemodes/benny/entities/weapons/itemhandler.lua +++ b/gamemodes/benny/entities/weapons/itemhandler.lua @@ -23,10 +23,10 @@ SWEP.Secondary.Ammo = "none" SWEP.Secondary.Automatic = true function SWEP:SetupDataTables() - self:NetworkVar( "Entity", 0, "ActiveR" ) - self:NetworkVar( "Entity", 1, "ActiveL" ) - self:NetworkVar( "Entity", 2, "DesireR" ) - self:NetworkVar( "Entity", 3, "DesireL" ) + self:NetworkVar( "Entity", "ActiveR" ) + self:NetworkVar( "Entity", "ActiveL" ) + self:NetworkVar( "Entity", "DesireR" ) + self:NetworkVar( "Entity", "DesireL" ) end function SWEP:ItemR( run ) @@ -137,6 +137,8 @@ function SWEP:EquipItem( ent ) end print("Pick up", ent) + self:SetDesireR( ent ) + ent:AddEFlags( EFL_KEEP_ON_RECREATE_ENTITIES ) ent:AddEffects( EF_BONEMERGE ) ent:PhysicsInit( SOLID_NONE ) @@ -169,6 +171,8 @@ function SWEP:DropItem() if CLIENT then print("DropItem called on CLIENT but certain things aren't finished yet.") return end self:Deactive() + self:SetDesireR( NULL ) + ent:SetParent( NULL ) ent:SetOwner( NULL ) @@ -202,17 +206,38 @@ function SWEP:Think() local p = self:GetOwner() if p:IsValid() then - if p:KeyDown(IN_WEAPON1) then + + local DesireR = self:GetDesireR() + local ActiveR = self:GetActiveR() + local DesireR_Valid = DesireR:IsValid() + local ActiveR_Valid = ActiveR:IsValid() + + -- If we're holding the weapon we want... + if ActiveR == DesireR then + -- Do nothing + + -- If we want no weapon equipped + elseif !DesireR_Valid then + if ActiveR_Valid then + self:Deactive() + else + -- We're holding nothing. Do nothing. + end + + -- If we want a weapon equipped + elseif DesireR_Valid then + if ActiveR != DesireR then + self:Deactive() + end + self:SetActive( DesireR ) + end + + if p:KeyPressed(IN_WEAPON1) then if SERVER then if !self:ItemR() then local trace = self:ItemCheckTrace() self:EquipItem( trace.Entity ) - end - end - end - if p:KeyReleased(IN_WEAPON1) then - if SERVER then - if self:ItemR() then + else self:DropItem() end end @@ -244,5 +269,6 @@ end function SWEP:Deploy() end -function SWEP:Holster() +function SWEP:Holster( ent ) + return false end \ No newline at end of file diff --git a/gamemodes/benny/gamemode/inventory.lua b/gamemodes/benny/gamemode/inventory.lua index 9d7c84e..22bbb7d 100644 --- a/gamemodes/benny/gamemode/inventory.lua +++ b/gamemodes/benny/gamemode/inventory.lua @@ -114,61 +114,93 @@ end do + local qt2 = { + ["slot1"] = 1, + ["slot2"] = 2, + ["slot3"] = 3, + ["slot4"] = 4, + ["slot5"] = 5, + ["slot6"] = 6, + ["slot7"] = 7, + ["slot8"] = 8, + ["slot9"] = 9, + ["slot0"] = 0, + } local qt = { - ["slot1"] = true, - ["slot2"] = true, - ["slot3"] = true, - ["slot4"] = true, - ["slot5"] = true, - ["slot6"] = true, - ["slot7"] = true, - ["slot8"] = true, - ["slot9"] = true, - ["slot0"] = true, - - ["invprev"] = true, - ["invnext"] = true, + ["invprev"] = -1, + ["invnext"] = 1, } hook.Add( "PlayerBindPress", "Benny_PlayerBindPress_Original", function( ply, bind, pressed, code ) - if qt[bind] and pressed then + if qt2[bind] then + local Num = qt2[bind] + if pressed then + local inv = ply:GetInventory():GetWeighted() + local wep = ply:HandlerCheck() + local invf = table.Flip( inv ) + + local NumOfActive = 0 + NumOfActive = invf[wep:GetDesireR()] + + if Num == NumOfActive then + Num = 0 + end + input.SelectWeapon( ply:GetWeapon("goat_"..Num) ) + end + return true + end + if qt[bind] then + if pressed then + local Num = 0 + + local inv = ply:GetInventory():GetWeighted() + local wep = ply:HandlerCheck() + local invf = table.Flip( inv ) + local invc = #inv + + Num = wep:GetDesireR() and invf[wep:GetDesireR()] or 0 + Num = Num + qt[bind] + + if Num > invc then + Num = 0 + elseif Num < 0 then + Num = invc + end + + input.SelectWeapon( ply:GetWeapon("goat_"..Num) ) + end return true end end) end +-- breaks GESTURE_SLOT_ATTACK_AND_RELOAD and I can't fucking have that +hook.Add("DoAnimationEvent", "Benny_DoAnimationEvent_FixAnimations", function( ply, event, data ) + return ACT_INVALID +end) -local dads = { - [KEY_1] = 1, - [KEY_2] = 2, - [KEY_3] = 3, - [KEY_4] = 4, - [KEY_5] = 5, - [KEY_6] = 6, - [KEY_7] = 7, - [KEY_8] = 8, - [KEY_9] = 9, - [KEY_0] = 0, -} - -local function beatup( ply, num ) - local inv = ply:GetInventory():GetWeighted() +hook.Add( "PlayerSwitchWeapon", "Benny_PlayerSwitchWeapon_Goat", function( ply, old, ent ) + if ent.BennyItemHandler then return true end -- what happened? local wep = ply:HandlerCheck() + if !wep then print("PlayerSwitchWeapon Benny Handler Missing!!") return false end + if ent:IsValid() and ent.Goat then + local inv = ply:GetInventory():GetWeighted() - local ent = inv[num] - if ent then - if ent == wep:GetActiveR() then - wep:Deactive() - else - wep:SetActive(ent) + if ent.Goat == 0 then wep:SetDesireR( NULL ) return false end + + local ent = inv[ent.Goat] + if ent then + wep:SetDesireR( ent ) end end -end -hook.Add( "PlayerButtonDown", "Benny_PlayerButtonDown_Inv", function( ply, button ) - local wep = ply:HandlerCheck() - - if dads[button] then - beatup( ply, dads[button] ) - end + return false end) + +for i=0, 9 do + local tent = {} + tent.Base = "goat" + tent.Goat = i + + weapons.Register( tent, "goat_" .. i ) +end \ No newline at end of file diff --git a/gamemodes/benny/gamemode/player.lua b/gamemodes/benny/gamemode/player.lua index d0cd082..d4bcdbf 100644 --- a/gamemodes/benny/gamemode/player.lua +++ b/gamemodes/benny/gamemode/player.lua @@ -17,6 +17,19 @@ function GM:PlayerSpawn( ply ) ply:SetViewOffsetDucked( Vector( 0, 0, 50 ) ) ply:Give( "itemhandler" ) + ply:Give( "goat_1" ) + ply:Give( "goat_2" ) + ply:Give( "goat_3" ) + ply:Give( "goat_4" ) + ply:Give( "goat_5" ) + ply:Give( "goat_6" ) + ply:Give( "goat_7" ) + ply:Give( "goat_8" ) + ply:Give( "goat_9" ) + ply:Give( "goat_0" ) + + ply:SetActiveWeapon( ply:GetWeapon( "itemhandler" ) ) + ply:SetStamina( 1 ) ply:SetCrouchedWalkSpeed( 0.3 ) diff --git a/gamemodes/benny/gamemode/player_class.lua b/gamemodes/benny/gamemode/player_class.lua index 90318a2..670f49c 100644 --- a/gamemodes/benny/gamemode/player_class.lua +++ b/gamemodes/benny/gamemode/player_class.lua @@ -51,9 +51,6 @@ function PLAYER:SetupDataTables() self.Player:NetworkVar( "Vector", "VaultPos1") self.Player:NetworkVar( "Vector", "VaultPos2") - - self.Player:NetworkVar( "String", "ReqID1") - self.Player:NetworkVar( "String", "ReqID2") end player_manager.RegisterClass( "player_benny", PLAYER, "player_default" )