• Getting weight of all players weapons
    7 replies, posted
So I am trying to make a system that modifies the players speed depending on the weight of all the weapons he is carrying for my gamemode. So if the player has the following: RPG: 75 USP: 25 Knife: 10 It makes the players walk and runspeed 110 less. I cant figure out how to do this tho, only how to get the weight of the weapon the player is holding. Any ideas?
[img]http://wiki.garrysmod.com/favicon.ico[/img] [url=http://wiki.garrysmod.com/page/Player/GetWeapons]Player:GetWeapons[/url] [img]http://wiki.garrysmod.com/favicon.ico[/img] [url=http://wiki.garrysmod.com/page/Weapon/GetWeight]Weapon:GetWeight[/url] Add them all in a for loop Not sure if GetWeight actually gets the weight though, it might be for something else
Weight refers to the weapon's auto-switch priority. You can see the Source implementation here: [url]https://github.com/Kefta/GSWeapons/blob/master/gsweapons_base/lua/code_gs/gsweapons_gslib.lua#L78-L114[/url]
[QUOTE=code_gs;51470786]Weight refers to the weapon's auto-switch priority. You can see the Source implementation here: [url]https://github.com/Kefta/GSWeapons/blob/master/gsweapons_base/lua/code_gs/gsweapons_gslib.lua#L78-L114[/url][/QUOTE] Yep I know that, but I use it for actual weight. :P
[QUOTE=Thiefdroid;51473465]Yep I know that, but I use it for actual weight. :P[/QUOTE] That's going to be pretty inaccurate.
[QUOTE=code_gs;51473485]That's going to be pretty inaccurate.[/QUOTE] Not at all, I love weapons having the weight = amount of damage they do, or really any random value.
Or you know, you could create an addon that creates a weight value for all the weapons and works with that value instead. Here is a tiny example I tried writing last night, doubt it works at the moment but you get the gist. [CODE]--serverside hook.Add("PlayerInitialSpawn", "initWeight", function(ply) ply.MaxWeight = 100; --here you can change the max weight the player can hold ply.CurrWeight = 0; ply:setWeightofWeapons() --setting weight of default weapons end) hook.Add("Initialize", "checkWeightRunSpeed", function() timer.Create("checkWeightchangeSpeeds", 1, 0, function() --adjusting movement speed local players = player.GetAll(); local runspeed = 500; --base gamemode runspeed local walkspeed = 200; --base gamemode walkspeed for _, v in pairs(players) do v.MaxWeight = v.MaxWeight or 100; v.CurrWeight = v.CurrWeight or 0; if IsValid(v) then if v:getWeightofWeapons() >= 100 then v:SetRunSpeed(200) --reducing speeds here v:SetWalkSpeed(50) else v:SetRunSpeed(runspeed) v:SetWalkSpeed(walkspeed) end end print(v:getWeightofWeapons()) end end) end) hook.Add("PlayerCanPickupWeapon", "checkWeight", function(ply, wep) wep.WeaponWeight = wep.WeaponWeight or 10; if (ply:getWeightofWeapons() + wep.WeaponWeight) <= ply.MaxWeight then --prevent the player from picking up weapons that put them over their weight limit return true else return false end end) local p = FindMetaTable("Player"); function p:setWeightofWeapons() for k, v in pairs(self:GetWeapons()) do if v.WeaponWeight == nil then v.WeaponWeight = 0 --sets weapons to default 0 weight self:adjustWeight(v.WeaponWeight) end end end function p:getWeightofWeapons() for k, v in pairs(p:GetWeapons()) do local w = v.WeaponWeight; w = w + v.WeaponWeight end self.CurrWeight = w; return self.CurrWeight end[/CODE]
[QUOTE=Apple_Bloom;51474998]Or you know, you could create an addon that creates a weight value for all the weapons and works with that value instead. Here is a tiny example I tried writing last night, doubt it works at the moment but you get the gist. [CODE]-code-[/CODE][/QUOTE] Awesome, thanks!
Sorry, you need to Log In to post a reply to this thread.