Sh4d0wS14d3 Posted December 12, 2019 Share Posted December 12, 2019 I've been working on my Snivy here and there, and I figure that the base system I used for the leveling needs some...adjusting. And it's a little because gaining any number of experience triggers the level-up sound, and that's pretty much entirely my fault. local function levelexp(inst) if inst.exp == 0 then startinglevel(inst) end if inst:HasTag("pokemon") and inst:HasTag("mediumslowexp") then if inst.exp <8 then inst:AddTag("level1") inst.level = 1 elseif inst.exp >= 8 and inst.exp < 27 then inst:AddTag("level2") inst:RemoveTag("level1") inst.level = 2 inst.SoundEmitter:PlaySound("snivy/characters/snivy/levelup") elseif inst.exp >= 27 and inst.exp < 64 then inst:AddTag("level3") inst:RemoveTag("level2") inst.level = 3 -- Skipping levels 4-97 elseif inst.exp >= 970299 and inst.exp < 1000000 then inst:AddTag("level99") inst:RemoveTag("level98") inst.level = 99 inst.SoundEmitter:PlaySound("snivy/characters/snivy/levelup") elseif inst.exp >=1000000 then inst:AddTag("level100") inst:RemoveTag("level99") inst.level = 100 inst.exp = 1000000 inst.SoundEmitter:PlaySound("snivy/characters/snivy/levelup") end end Could I get some help figuring out a more reasonable method of setting level ups? Link to comment Share on other sites More sharing options...
CarlZalph Posted December 15, 2019 Share Posted December 15, 2019 (edited) Instead of using tags, I'd advise you use a networked variable of 8bits. This would let you have 256 unique levels and the server only networks a byte for the data instead of a whole string. Also your code can remove half of your compares since the else statement goes if the condition is not true: if (N < 10) is false, then (N >= 10) is true always and doesn't need to be checked. As for how to handle leveling up, I'd store the minimum xp values for the next level and use those as a reference point instead of a bit if-then-else nest. Example LUA: local xp = 0 local lvl = 0 local minxpforlvl = { 1, 5, 10, 50 } local function deltalvl(oldlvl, newlvl) if newlvl > oldlvl then print(string.format("Level up! [%i]->[%i]", oldlvl, newlvl)) elseif oldlvl > newlvl then print(string.format("Level down! [%i]->[%i]", oldlvl, newlvl)) else print(string.format("Level unchanged! [%i]->[%i]", oldlvl, newlvl)) end end local function addxp(newxp) print(string.format("Adding xp: %i [%i]", newxp, xp + newxp)) xp = xp + newxp while true do local xpfornextlvl = minxpforlvl[lvl + 1] if xpfornextlvl == nil then return end if xp >= xpfornextlvl then local oldlvl = lvl lvl = lvl + 1 deltalvl(oldlvl, lvl) else break end end end for i=0,50 do addxp(1) end Prints: Spoiler Adding xp: 1 [1] Level up! [0]->[1] Adding xp: 1 [2] Adding xp: 1 [3] Adding xp: 1 [4] Adding xp: 1 [5] Level up! [1]->[2] Adding xp: 1 [6] Adding xp: 1 [7] Adding xp: 1 [8] Adding xp: 1 [9] Adding xp: 1 [10] Level up! [2]->[3] Adding xp: 1 [11] Adding xp: 1 [12] Adding xp: 1 [13] Adding xp: 1 [14] Adding xp: 1 [15] Adding xp: 1 [16] Adding xp: 1 [17] Adding xp: 1 [18] Adding xp: 1 [19] Adding xp: 1 [20] Adding xp: 1 [21] Adding xp: 1 [22] Adding xp: 1 [23] Adding xp: 1 [24] Adding xp: 1 [25] Adding xp: 1 [26] Adding xp: 1 [27] Adding xp: 1 [28] Adding xp: 1 [29] Adding xp: 1 [30] Adding xp: 1 [31] Adding xp: 1 [32] Adding xp: 1 [33] Adding xp: 1 [34] Adding xp: 1 [35] Adding xp: 1 [36] Adding xp: 1 [37] Adding xp: 1 [38] Adding xp: 1 [39] Adding xp: 1 [40] Adding xp: 1 [41] Adding xp: 1 [42] Adding xp: 1 [43] Adding xp: 1 [44] Adding xp: 1 [45] Adding xp: 1 [46] Adding xp: 1 [47] Adding xp: 1 [48] Adding xp: 1 [49] Adding xp: 1 [50] Level up! [3]->[4] Adding xp: 1 [51] for i=0,50 do addxp(100) end Prints: Spoiler Adding xp: 100 [100] Level up! [0]->[1] Level up! [1]->[2] Level up! [2]->[3] Level up! [3]->[4] Adding xp: 100 [200] Adding xp: 100 [300] Adding xp: 100 [400] <more> Note that this code for the function 'addxp' makes the assumption that you can't lose experience or downgrade a level. That's left up to the reader. Edited December 15, 2019 by CarlZalph Link to comment Share on other sites More sharing options...
Sh4d0wS14d3 Posted December 30, 2019 Author Share Posted December 30, 2019 I don't actually remember making this thread, probably sleep-deprived or something by the looks of the title, but I certainly needed the help. Sorry for not responding for so long, and thanks. A couple of problems I had though are trying to get the level-up sound to work, alongside the system actually leveling up. And a less pertinent question since I'm a fool and already put in the numbers, can I put in a formula for the minxpforlevel, or would that just break? Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now