Open jaxjaxk opened 7 years ago
I am proficient at 3DS Max, so I could create a the model, but my 3DS Max is currently looking in invalid paths for 3 paths I am unable to set manually. Do you have any particular design in mind I can reference?
@OctothorpeObelus best i got is http://callofduty.wikia.com/wiki/GobbleGum
As of now I am gonna experiment with running 3DS Max from and External HDD to solve these issue. Will get started once this happens :)
Can't wait to spawn a death machine and camp in a corner. lol.
just as a heads up so far i have all of these working --Arms Grace --Coagulant --In Plain Sight --Impatient --Sword Flay --Anywhere But Here! --Now You See Me --Alchemical Antithesis --Aftertaste --Burned Out --Dead of Nuclear Winter --I'm Feeling Lucky --Immolation Liquidation --Licensed Contractor --Phoenix Up --Pop Shocks --Unquenchable --Who's Keeping Score? --Fatal Contraption --Unbearable --Board Games --Idle Eyes --Board to Death --Cache Back --Kill Joy --On The House --Wall Power --Fear in Headlights --Temporal Gift --Crate Power --Soda Fountain --Killing Time --Perkaholic --Secret Shopper --Shopping Free --Near Death Experience --Profit Sharing --Round Robbin' --Self Medication --Power Vacuum --Reign Drops
while a good portion of these can work without having to alter files (you know, hooks are great) some stuff just flat out requires it. as you can guess once we have the model i can start altering gamefiles as quite a lot of files change. so i will wait until the machine is ready so that i do not end up updating an old version of NZ and i can use the newest version on gethub for the pull request. ( that and all my personal alterations are mixed in so i need a fresh copy anyways)
Cool.
If I get around to make Gobblegums, which I might now that I have the models and animations, it will be through a hook system rather than altering a bunch of files to check only the relevant gobblegums. It will basically change the entire gamemode to call hooks and use return values to change the outcome. Gobblegums will then just hook.Add that player. It will also be likely that it won't be default BO3 Gobblegums, but instead many custom variations on them, possibly even some completely original ones. Most importantly though, it will allow addons to add more Gobblegum types. Also probably use png icons rather than BO3 model skins (such as silk icons), which allows easier adding of new Gobblegums (not having to port a model, just draw a .png icon and pick the relevant gobblegum color).
I'm saying this because when you say "pull request", there is a high chance I won't accept it and instead make my own version if yours doesn't follow the same modular vision I have for this entire gamemode.
@Zet0rz you have the GobbleGum model? Should I still work on my model or are you going to use that one?
if you make these, will it be the same as wunderfizz allowing you to choose which ones you use?
@Zet0rz you have the GobbleGum model? Should I still work on my model or are you going to use that one?
I don't have it directly, but I have BO3 as well as a program to extract it. Working on Zombie models atm.
if you make these, will it be the same as wunderfizz allowing you to choose which ones you use?
That's actually a good idea. I was originally thinking of making it like BO3 though, where you have a personal inventory that you can build up with some gamble/spinner, and where it is saved locally in a .txt file (which means you could easily modify how many of what gobblegum you have. The alternative was to save it on the server, but I didn't really like how you'd lose it from playing solo/local multiplayer. The third alternative was to let any player have all gums, but where the rarer ones are rare from the machine itself, not from the gamble to get it in your inventory.
If I go with the third alternative, I could probably make it like the Wunderfizz. But I imagine I'd go for the first solution,
@Zet0rz right now i just use them as items you can use any time. as for using hooks, let's face it 50% can get away with just simple code or hooks, the other half require you to modify files. obviously something like "Shopping Free" can not be done with hooks as everything is free so.....
Incorrect, any single effect can be done with hooks if we modify the gamemode code to call the hook and use its return value. As in our own custom hooks. Shopping Free is actually the easiest one, just hook into OnPlayerBuy or PlayerCanAfford or whatever I called it, and return 0 as the new price lol. You are correct though, half of them would be able to get away with a simple run-on-use function like some perks.
@Zet0rz you just admitted you would have to alter the game mode code...... last time i checked adding "hook.call" is considered modifying files.
although honestly i wish you could hook any function even ones you create. oh and using CPP instead of lua would be nice..... you know, because multithreading and better coding.
welp here is a quick preview of what i have code wise. this works well however the final will be modular and better.
this is the simple function that is run when they eat the gum ( note that some required files to modified so only half of these work without the modified files) `` GLOBALGUM = {}
GLOBALGUM.Board_to_Death = false
GLOBALGUM.Temporal_Gift = false
GLOBALGUM.Near_Death_Experience = 0
GLOBALGUM.Profit_Sharing = false
GLOBALGUM.Power_Vacuum = 0
function NZEatFunction(ply,item)
ply:PrintMessage(HUD_PRINTTALK, "you ate the gum "..item)
if item == "Arms_Grace" then
ply.HasArmsGrace = true
elseif item == "Coagulant" then
ply.HasCoagulant = true
timer.Simple(1200, function()
ply.HasCoagulant = false
end)
elseif item == "In_Plain_Sight" then
ply:SetTargetPriority(TARGET_PRIORITY_NONE)
timer.Simple(20, function()
ply:SetTargetPriority(TARGET_PRIORITY_PLAYER)
end)
elseif item == "Impatient" then
if (ply:Alive() == false) or (ply:Team() == TEAM_WAITING) then
if nzRound:GetNumber() == -2 then
ply:PrintMessage(HUD_PRINTTALK, "you will respawn in 25 min")
timer.Simple(1500,function()
ply:SetReady( true )
ply:SetPlaying( true )
ply:SetTeam(TEAM_PLAYERS)
ply:ReSpawn()
end)
else
ply:PrintMessage(HUD_PRINTTALK, "you will respawn when 80% of all zombies are dead")
timer.Create( "Impatient"..ply:SteamID() , 5, 0, function()
if (nzRound:GetZombiesKilled()*100)/(nzRound:GetZombiesMax()) >=80 then
ply:SetReady( true )
ply:SetPlaying( true )
ply:SetTeam(TEAM_PLAYERS)
ply:ReSpawn()
timer.Destroy( "Impatient"..ply:SteamID() )
end
end)
end
else
ply:PrintMessage(HUD_PRINTTALK, "you must be dead to use this!")
ply:AddItem("Impatient", 1)
end
elseif item == "Sword_Flay" then
ply.HasSwordFlay = true
timer.Simple(150,function()
ply.HasSwordFlay = false
end)
elseif item == "Anywhere_But_Here" then
local available = ents.FindByClass("nz_spawn_zombie_special")
local spawns = {}
for k,v in pairs(available) do
if v.link == nil or nzDoors:IsLinkOpened( v.link ) then
if v:IsSuitable() then
--local pos = spawns[math.random(#spawns)]:GetPos()
table.insert(spawns, v)
end
end
end
local pos = spawns[math.random(#spawns)]:GetPos()
ply:SetPos(pos)
local aim = ply:GetAimVector( )
local force = aim*(3*750)+Vector(0,0,1000)
for k,v in pairs (ents.FindInSphere( ply:GetPos(), 1000 ) ) do
if nzConfig.ValidEnemies[v:GetClass()] then
v:Kill()
end
end
local windshot = ents.Create("wind_shot")
if !windshot:IsValid() then return false end
windshot:SetAngles(Angle(0,0,0))
windshot:SetPos(ply:GetPos())
windshot:SetOwner(ply)
windshot:Spawn()
windshot:Activate()
windshot:SetColor(Color(0,0,0,0))
timer.Simple(1,function()
windshot:Remove()
end)
elseif item == "Now_You_See_Me" then
timer.Create( "youseeme"..ply:SteamID() , 1, 10, function()
for _, target in pairs(ents.GetAll()) do
if nzConfig.ValidEnemies[target:GetClass()] and target.Distracted != ply then
target:SetTarget(ply)
target.Distracted = ply
end
end
end)
timer.Simple(11,function()
for _, target in pairs(ents.GetAll()) do
if nzConfig.ValidEnemies[target:GetClass()] then
--target:SetTarget(self)
target.Distracted = false
end
end
end)
elseif item == "Alchemical_Antithesis" then
ply.AlchemicalAntithesis = true
timer.Simple(120,function()
ply.AlchemicalAntithesis = false
end)
elseif item == "Newtonian_Negation" then
--[[ physenv.SetGravity(Vector(100000,0,-100000))
hook.Add("EntityTakeDamage", "nzEnemies_OnEntityCreated_newtonian", function (enemy, attacker, dmginfo, hitgroup)
end)
timer.Simple(1500,function()
hook.Remove("OnEnemyKilled", "nzEnemies_OnEntityCreated_newtonian")
end)]]
elseif item == "Aftertaste" then
ply.aftertaste = 3
elseif item == "Burned_Out" then
ply.BurnedOut = 5
elseif item == "Dead_of_Nuclear_Winter" then
local spawns = {}
local available = ents.FindByClass("nz_spawn_zombie_special")
for k,v in pairs(available) do
if v.link == nil or nzDoors:IsLinkOpened( v.link ) then
if v:IsSuitable() then
table.insert(spawns, v)
end
end
end
local pos = spawns[math.random(#spawns)]:GetPos()
nzPowerUps:SpawnPowerUp(pos, "nuke")
--pos = spawns[math.random(#spawns)]:GetPos()
--nzPowerUps:SpawnPowerUp(pos, "nuke")
elseif item == "Im_Feeling_Lucky" then
local spawns = {}
local available = ents.FindByClass("nz_spawn_zombie_special")
for k,v in pairs(available) do
if v.link == nil or nzDoors:IsLinkOpened( v.link ) then
if v:IsSuitable() then
table.insert(spawns, v)
end
end
end
local pos = spawns[math.random(#spawns)]:GetPos()
nzPowerUps:SpawnPowerUp(pos)
--pos = spawns[math.random(#spawns)]:GetPos()
--nzPowerUps:SpawnPowerUp(pos)
elseif item == "Immolation_Liquidation" then
local spawns = {}
local available = ents.FindByClass("nz_spawn_zombie_special")
for k,v in pairs(available) do
if v.link == nil or nzDoors:IsLinkOpened( v.link ) then
if v:IsSuitable() then
table.insert(spawns, v)
end
end
end
local pos = spawns[math.random(#spawns)]:GetPos()
nzPowerUps:SpawnPowerUp(pos,"firesale")
--pos = spawns[math.random(#spawns)]:GetPos()
--nzPowerUps:SpawnPowerUp(pos,"firesale")
elseif item == "Licensed_Contractor" then
local spawns = {}
local available = ents.FindByClass("nz_spawn_zombie_special")
for k,v in pairs(available) do
if v.link == nil or nzDoors:IsLinkOpened( v.link ) then
if v:IsSuitable() then
table.insert(spawns, v)
end
end
end
local pos = spawns[math.random(#spawns)]:GetPos()
nzPowerUps:SpawnPowerUp(pos,"carpenter")
--pos = spawns[math.random(#spawns)]:GetPos()
--nzPowerUps:SpawnPowerUp(pos,"carpenter")
elseif item == "Phoenix_Up" then
for k,v in pairs( player.GetAll() ) do
if IsValid(v) and !v:GetNotDowned() then
v:RevivePlayer()
end
end
elseif item == "Pop_Shocks" then
ply.PopShocks = 5
elseif item == "Unquenchable" then
ply.Unquenchable = true
elseif item == "Whos_Keeping_Score" then
local spawns = {}
local available = ents.FindByClass("nz_spawn_zombie_special")
for k,v in pairs(available) do
if v.link == nil or nzDoors:IsLinkOpened( v.link ) then
if v:IsSuitable() then
table.insert(spawns, v)
end
end
end
local pos = spawns[math.random(#spawns)]:GetPos()
nzPowerUps:SpawnPowerUp(pos,"dp")
--pos = spawns[math.random(#spawns)]:GetPos()
--nzPowerUps:SpawnPowerUp(pos,"dp")
elseif item == "Fatal_Contraption" then
local spawns = {}
local available = ents.FindByClass("nz_spawn_zombie_special")
for k,v in pairs(available) do
if v.link == nil or nzDoors:IsLinkOpened( v.link ) then
if v:IsSuitable() then
table.insert(spawns, v)
end
end
end
local pos = spawns[math.random(#spawns)]:GetPos()
nzPowerUps:SpawnPowerUp(pos,"deathmachine")
--pos = spawns[math.random(#spawns)]:GetPos()
--nzPowerUps:SpawnPowerUp(pos,"deathmachine")
elseif item == "Unbearable" then
ply.Unbearable = 2
elseif item == "Board_Games" then
ply.Board_Games = 5
elseif item == "Idle_Eyes" then
for _,v in ipairs(player.GetAll()) do
v:SetTargetPriority(TARGET_PRIORITY_NONE)
timer.Simple(60, function()
v:SetTargetPriority(TARGET_PRIORITY_PLAYER)
end)
end
elseif item == "Board_to_Death" then
GLOBALGUM.Board_to_Death = true
timer.Simple(300,function()
GLOBALGUM.Board_to_Death = false
end)
elseif item == "Cache_Back" then
local spawns = {}
local available = ents.FindByClass("nz_spawn_zombie_special")
for k,v in pairs(available) do
if v.link == nil or nzDoors:IsLinkOpened( v.link ) then
if v:IsSuitable() then
table.insert(spawns, v)
end
end
end
local pos = spawns[math.random(#spawns)]:GetPos()
nzPowerUps:SpawnPowerUp(pos,"maxammo")
--pos = spawns[math.random(#spawns)]:GetPos()
--nzPowerUps:SpawnPowerUp(pos,"maxammo")
elseif item == "Kill_Joy" then
local spawns = {}
local available = ents.FindByClass("nz_spawn_zombie_special")
for k,v in pairs(available) do
if v.link == nil or nzDoors:IsLinkOpened( v.link ) then
if v:IsSuitable() then
table.insert(spawns, v)
end
end
end
local pos = spawns[math.random(#spawns)]:GetPos()
nzPowerUps:SpawnPowerUp(pos,"insta")
--pos = spawns[math.random(#spawns)]:GetPos()
--nzPowerUps:SpawnPowerUp(pos,"insta")
elseif item == "On_The_House" then
ply:GiveRandomPerk(false)
elseif item == "Wall_Power" then
ply.Wall_Power = true
elseif item == "Fear_in_Headlights" then
local plyfear = ply
timer.Create( "headlights"..ply:SteamID(), .5, 240, function()
if SERVER then
for k,v in pairs( nzConfig.ValidEnemies ) do
for k2, v2 in pairs( ents.FindByClass( k ) ) do
if v2:Visible( ply) then
v2.loco:SetDesiredSpeed(0)
if timer.Exists((v2:EntIndex() ).."headlights_gum") then
timer.Start((v2:EntIndex() ).."headlights_gum")
else
timer.Create( (v2:EntIndex() ).."headlights_gum", 2, 1, function ()
if IsValid(v2) then
v2.WebAura = nil
local speeds = nzRound:GetZombieSpeeds()
if speeds then
v2.loco:SetDesiredSpeed( nzMisc.WeightedRandom(speeds) )
else
print("back to normal")
v2.loco:SetDesiredSpeed( 100 )
end
end
end)
end
end
end
end
end
end)
elseif item == "Temporal_Gift" then
GLOBALGUM.Temporal_Gift = true
elseif item == "Crate_Power" then
ply.Crate_Power =true
elseif item == "Soda_Fountain" then
ply.Soda_Fountain = 5
elseif item == "Killing_Time" then
local Killing_Time_List = {}
if SERVER then
for k,v in pairs( nzConfig.ValidEnemies ) do
for k2, v2 in pairs( ents.FindByClass( k ) ) do
v2.loco:SetDesiredSpeed(0)
Killing_Time_List[v2:EntIndex()] = false
timer.Create( (v2:EntIndex() ).."killing_time", 20, 1, function ()
if IsValid(v2) then
v2.WebAura = nil
local speeds = nzRound:GetZombieSpeeds()
if speeds then
v2.loco:SetDesiredSpeed( nzMisc.WeightedRandom(speeds) )
else
v2.loco:SetDesiredSpeed( 100 )
end
if Killing_Time_List[v2:EntIndex()] == true then
v2:Kill()
end
end
end)
end
end
end
hook.Add("EntityTakeDamage","gobblegum_damage_killingtime",function(ent,dmginfo)
if ent:IsValidZombie() then
Killing_Time_List[ent:EntIndex()] = true
end
end)
elseif item == "Perkaholic" then
for _,v in pairs( ents.FindByClass( "perk_machine") ) do
if v:GetPerkID() != "pap" then
ply:GivePerk(v:GetPerkID(), v)
end
end
elseif item == "Secret_Shopper" then
ply.Secret_Shopper = true
timer.Simple(600,function()
ply.Secret_Shopper = true
end)
elseif item == "Shopping_Free" then
ply.Shopping_Free = true
timer.Simple(60,function()
ply.Shopping_Free = false
end)
elseif item == "Near_Death_Experience" then
GLOBALGUM.Near_Death_Experience = 3
timer.Create( "near_death_gum", .5, 0, function()
if !(GLOBALGUM.Near_Death_Experience > 0) then
timer.Destroy("near_death_gum")
end
for _,v in ipairs(player.GetAll()) do
if v:Alive() and v:GetNotDowned() then
for _,v in ipairs(ents.FindInSphere( v:GetPos(), 100)) do
if IsValid(v) and v:IsPlayer() and !v:GetNotDowned() then
v:RevivePlayer()
end
end
end
end
end)
elseif item == "Profit_Sharing" then
GLOBALGUM.Profit_Sharing = true
timer.Simple(600,function()
GLOBALGUM.Profit_Sharing = false
end)
elseif item == "Round_Robbin" then
if nzRound:GetNumber() < 0 or !nzRound:GetState(ROUND_PROG) then
ply:PrintMessage(HUD_PRINTTALK, "you can not use that now!")
ply:AddItem("Round_Robbin", 1)
else
nzRound:SetNumber( nzRound:GetNumber() + 1)
nzRound:SetState(ROUND_PROG)
nzRound:Prepare()
if SERVER then
for k,v in pairs( nzConfig.ValidEnemies ) do
for k2, v2 in pairs( ents.FindByClass( k ) ) do
v2:Kill()
end
end
end
end
for _,v in ipairs(player.GetAll()) do
v:GivePoints(1600)
end
elseif item == "Self_Medication" then
ply.Self_Medication = 3
--add elseif here
elseif item == "Power_Vacuum" then
GLOBALGUM.Power_Vacuum = 4
elseif item == "Reign_Drops" then
NZEatFunction(ply,"Kill_Joy")
NZEatFunction(ply,"Cache_Back")
NZEatFunction(ply,"Fatal_Contraption")
NZEatFunction(ply,"Whos_Keeping_Score" )
NZEatFunction(ply,"Dead_of_Nuclear_Winter" )
NZEatFunction(ply,"Immolation_Liquidation " )
NZEatFunction(ply,"Licensed_Contractor " )
end
end
``
and here is the hook file `` hook.Add("PlayerInitialSpawn", "gobblegum_initialspawn", function(ply) ply.HasArmsGrace = false ply.HasCoagulant = false ply.HasSwordFlay = false ply.AlchemicalAntithesis = false ply.aftertaste = 0 ply.BurnedOut = 0 ply.PopShocks = 0 ply.Unquenchable = false ply.Unbearable = 0 ply.Board_Games = 0 ply.Wall_Power = false ply.Crate_Power = false ply.Soda_Fountain = 0 ply:SetCanZoom(false) ply.Secret_Shopper = false ply.Shopping_Free = false ply.Self_Medication = 0 end)
GUMTypes = { "Arms_Grace", "Coagulant", "In_Plain_Sight", "Impatient", "Sword_Flay", "Anywhere_But_Here", "Now_You_See_Me", "Alchemical_Antithesis", "Aftertaste", "Burned_Out", "Dead_of_Nuclear_Winter", "Im_Feeling_Lucky", "Immolation_Liquidation", "Licensed_Contractor", "Phoenix_Up", "Pop_Shocks", "Unquenchable", "Whos_Keeping_Score", "Fatal_Contraption", "Unbearable", "Board_Games", "Idle_Eyes", "Board_to_Death", "Cache_Back", "Kill_Joy", "On_The_House", "Wall_Power", "Fear_in_Headlights", "Temporal_Gift", "Crate_Power", "Soda_Fountain", "Killing_Time", "Perkaholic", "Secret_Shopper", "Shopping_Free", "Near_Death_Experience", "Profit_Sharing", "Round_Robbin", "Self_Medication", "Power_Vacuum", "Reign_Drops"
} hook.Add("PlayerDeath", "gobblegum_death", function(ply,inf,attacker) --[[print("died") if ply.HasArmsGrace then print("had grace") ply.HasArmsGrace = ply:GetWeapons() end]]
end)
hook.Add("PlayerSpawn", "gobblegumrespawn", function(ply) timer.Simple(1,function() if ply.HasArmsGrace != false then ply:StripWeapons() local weplistthing = string.Explode( " ", ply.HasArmsGrace, false) for ,v in ipairs (weplistthing) do ply:Give(v) end ply.HasArmsGrace = false end end) end)
hook.Add("EntityTakeDamage","gobblegum_damage",function(ent,dmginfo) if ent:IsPlayer() and ent.BurnedOut > 0 then for k, v in pairs ( ents.FindInSphere( ent:GetPos(), 200 ) ) do if nzConfig.ValidEnemies[v:GetClass()] then local timetoig = math.Round(math.random( 1, 10 )) if !v:IsOnFire() then v:Ignite(timetoig) local dmginfo = DamageInfo() dmginfo:SetDamage( 250 ) dmginfo:SetDamageType( DMG_BURN ) dmginfo:SetAttacker( ent) dmginfo:SetInflictor( ent ) timer.Create( (v:EntIndex() ).."zombie_gum", 1, timetoig, function() if v:IsValid() then v:TakeDamageInfo( dmginfo ) end
end)
end
end
end
ent.BurnedOut = ent.BurnedOut - 1
elseif ent:IsValidZombie() then
if dmginfo:GetAttacker().HasSwordFlay then
if dmginfo:GetInflictor():GetClass() == "csgo_karambit_ultraviolet" or dmginfo:GetInflictor():GetClass() == "csgo_m9_ultraviolet" or dmginfo:GetInflictor():GetClass() == "leak" or dmginfo:GetInflictor():GetClass() == "leek" then
dmginfo:ScaleDamage( 5 )
end
end
if dmginfo:GetAttacker():IsPlayer() and dmginfo:GetAttacker().PopShocks > 0 then
if dmginfo:GetInflictor():GetClass() == "csgo_karambit_ultraviolet" or dmginfo:GetInflictor():GetClass() == "csgo_m9_ultraviolet" or dmginfo:GetInflictor():GetClass() == "leak" or dmginfo:GetInflictor():GetClass() == "leek" then
nzEffects:Tesla( {
pos = dmginfo:GetAttacker():GetPos() + Vector(0,0,50),
ent = dmginfo:GetAttacker(),
turnOn = true,
dieTime = 1,
lifetimeMin = 0.05,
lifetimeMax = 0.1,
intervalMin = 0.01,
intervalMax = 0.02,
})
--print(pct)
local zombies = ents.FindInSphere(dmginfo:GetAttacker():GetPos(), 250)
local d = DamageInfo()
d:SetDamage( 500 )
d:SetDamageType( DMG_SHOCK )
d:SetAttacker(dmginfo:GetAttacker())
d:SetInflictor(dmginfo:GetAttacker())
for k,v in pairs(zombies) do
if nzConfig.ValidEnemies[v:GetClass()] then
v:TakeDamageInfo(d)
end
end
dmginfo:GetAttacker().PopShocks = dmginfo:GetAttacker().PopShocks - 1
end
end
end
end) hook.Add( "OnRoundPreparation", "gum_roundstart", function() if SERVER then if GLOBALGUM.Near_Death_Experience >0 then GLOBALGUM.Near_Death_Experience = GLOBALGUM.Near_Death_Experience - 1 end if GLOBALGUM.Power_Vacuum > 0 then GLOBALGUM.Power_Vacuum = GLOBALGUM.Power_Vacuum - 1 end GLOBALGUM.Temporal_Gift = false
for _,v in ipairs(player.GetAll()) do
if v.aftertaste >0 then
v.aftertaste = v.aftertaste - 1
end
if v.Board_Games >0 then
v.Board_Games = v.Board_Games -1
end
end
end
end) ``
Looks like fun
Yeah there's no way I'd merge that. Sorry to say, but that is terrible code :/ (20+ elseif's, hooks globally added, players storing sometimes irrelevant information). That being said, the code above is fine as a proof-of-concept/sketch/basis for mechanics if that's what you were going for.
I'm thinking a more sophisticated system, kinda like the perks. Players only store information about currently active gobblegum, hooks are added dynamically and per-player. Functions are ran via table key lookup rather than elseif-stacking. Doing it in table form also allows customization that can be useful elsewhere. My idea would end up something like this:
local GUM = {
name = "Perkaholic",
desc = "All perks acquired!",
icon = "path/to/perkaholic.png",
rarity = GOBBLE_ULTRA,
color = GOBBLE_INSTANT,
func = function(ply)
-- Give perks and stuff
end,
}
nzGobble:Add("gum_perkaholic", GUM)
The gobblegum model would then read this data, using the activation type for color, using rarity for the pattern, and using icon for the icon. You can then easily set up any gobblegum including custom ones following this. Activation would be by key lookup so it would be done like gobblegums[gum.id].func(gum.owner)
- no need for elseifs.
Edit: The table would probably have more things like a ProgressUpdate function so you can handle progress and local gum data, to keep it on HUD or keep track of remaining activations.
@Zet0rz well obviously you would not merge that. that is the very first working method. it was more of a proof of concept. i have nothing to gain from making it modular as i am the only one using it, however if we get the model i will change it into something modular that works like the perkcola machines. i just do not feel like wasting my time right now if we never even get the model.
My friend ported the GobbleGum model from BO3 if you want it. You'll need to make a QC for it and port it to the Source format, though... https://feen.us/210nxtow.rar
Is there gonna be a Dr. Monty's Factory and Liquid Divinium drops like black ops 3 or are they gonna be all free?
Most likey free
how is the gobblegum making going?
bump
There is no need to bump these threads.
if anyone is interested in making the GobbleGum machine model i can do the remainder. all i need is the machine and it will be perfect.
so say something if you are interested in making the model for the machine because i suck at that stuff.