123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- --[[
- Script Name : SpawnScripts/Generic/CombatModule.lua
- Script Author : LordPazuzu
- Script Date : 2023.09.19 08:09:17
- Script Purpose : Base Population Combat Common Features
- :
- --]]
- GlobalDmgMod = 1.0 -- Global Damage Multiplier- make global adjustments to all NPC autoattack damage.
- globalStatMod = 1.0 -- Global Attribute Multiplier- make global adjustments to NPC attribute scores.
-
- function combatModule(NPC, Spawn)
- level = GetLevel(NPC) -- NPC Level
- difficulty = GetDifficulty(NPC) -- NPC Difficulty || Function in testing phase, default to 6 if necessary.
- levelSwitch(NPC)
- regen(NPC)
- attributes(NPC)
-
- end
- --Determine damage function based on NPC level.
- function levelSwitch(NPC, Spawn)
- if level <= 3 then
- TierOneA(NPC)
- elseif level >= 4 and level <= 5 then
- TierOneB(NPC)
- elseif level >= 6 and level <= 9 then
- TierOneC(NPC)
- elseif level >= 10 and level <= 15 then
- TierTwoA(NPC)
- elseif level >= 16 and level <= 19 then
- TierTwoB(NPC)
- elseif level >= 20 and level <= 24 then
- TierThreeA(NPC)
- elseif level >= 25 and level <= 29 then
- TierThreeB(NPC)
- end
- end
- -- Set attributes based on NPC level and difficulty
- function attributes(NPC, Spawn)
- -- Calculate attributes
- if level <= 4 then
- baseStat = 19 else
- baseStat = level + 15
- end
-
- local low = baseStat - 15 -- Difficulty 1-3 vvv
- local four = baseStat - 10 -- Difficulty 4 vv
- local five = baseStat - 5 -- Difficulty 5 v
- local seven = baseStat + 10 -- Difficulty 7 ^
- local eight = baseStat + 15 -- Difficulty 8 ^^
- local nine = baseStat + 20 -- Difficulty 9 ^^^
-
- lowStat = math.floor(low * globalStatMod)
- fourStat = math.floor(four * globalStatMod)
- fiveStat = math.floor(five * globalStatMod)
- sixStat = math.floor(baseStat * globalStatMod)
- sevenStat = math.floor(seven * globalStatMod)
- eightStat = math.floor(eight * globalStatMod)
- nineStat = math.floor(nine * globalStatMod)
-
- -- Determine attribute by difficulty
- if difficulty <= 3 then
- finalStat = lowStat
- elseif difficulty == 4 then
- finalStat = fourStat
- elseif difficulty == 5 then
- finalStat = fiveStat
- elseif difficulty == 6 then
- finalStat = sixStat
- elseif difficulty == 7 then
- finalStat = sevenStat
- elseif difficulty == 8 then
- finalStat = eightStat
- elseif difficulty == 9 then
- finalStat = nineStat
- end
-
-
- SetInfoStructFloat(NPC, "str", finalStat)
- SetStrBase(NPC, finalStat)
- SetInfoStructFloat(NPC, "agi", finalStat)
- SetAgiBase(NPC, finalStat)
- SetInfoStructFloat(NPC, "sta", finalStat)
- SetStaBase(NPC, finalStat)
- SetInfoStructFloat(NPC, "intel", finalStat)
- SetIntBase(NPC, finalStat)
- SetInfoStructFloat(NPC, "wis", finalStat)
- SetWisBase(NPC, finalStat)
-
- end
- --Health and power regeneration rates
- function regen(NPC, Spawn)
-
- -- In-combat health regeneration
- SetInfoStructUInt(NPC, "hp_regen_override", 1) -- Set to 0 to disable and allow the server to set the regen rate.
- SetInfoStructSInt(NPC, "hp_regen", 0) -- Set Regen Amount. Default 0
-
- -- In-combat power regeneration
- SetInfoStructUInt(NPC, "pw_regen_override", 1) -- Set to 0 to disable and allow the server to set the regen rate.
- SetInfoStructSInt(NPC, "pw_regen", 0) -- Set Regen Amount. Default 0
-
- end
- --Damage functions based on NPC level range.
- --Level 1-3
- function TierOneA(NPC, Spawn)
- local dmgMod =GetStr(NPC)/10 -- Strength-based damage bonus for autoattack damage.
- lowDmg = math.floor(0 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(2 * GlobalDmgMod + dmgMod)
- SetInfoStructUInt(NPC, "override_primary_weapon", 1) -- Enables override of server autoattack damage. Set to 0 to allow server to set damage.
- SetInfoStructUInt(NPC, "primary_weapon_damage_low", lowDmg)
- SetInfoStructUInt(NPC, "primary_weapon_damage_high", highDmg)
- end
- --Level 4-5
- function TierOneB(NPC, Spawn)
- local dmgMod =GetStr(NPC)/10
- if difficulty <=4 then --
- lowDmg = math.floor(1 * GlobalDmgMod + dmgMod)
- highDmg =math.floor(2 * GlobalDmgMod + dmgMod)
- elseif difficulty == 5 then
- lowDmg = math.floor(1 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(3 * GlobalDmgMod + dmgMod)
- elseif difficulty >=6 and difficulty <=9 then
- lowDmg = math.floor(2 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(4 * GlobalDmgMod + dmgMod)
- end
- SetInfoStructUInt(NPC, "override_primary_weapon", 1)
- SetInfoStructUInt(NPC, "primary_weapon_damage_low", lowDmg)
- SetInfoStructUInt(NPC, "primary_weapon_damage_high", highDmg)
- end
- --Level 6-9
- function TierOneC(NPC, Spawn)
- local dmgMod =GetStr(NPC)/10
- if difficulty <=4 then -- 1-3 dif 1-4
- lowDmg = math.floor(1 * GlobalDmgMod + dmgMod)
- highDmg =math.floor(3 * GlobalDmgMod + dmgMod)
- elseif difficulty == 5 then -- 2-4 dif 5
- lowDmg = math.floor(2 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(4 * GlobalDmgMod + dmgMod)
- elseif difficulty ==6 then -- 2-7 damage- Dif 6
- lowDmg = math.floor(2 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(7 * GlobalDmgMod + dmgMod)
- elseif difficulty >=7 then -- 2-7 damage- Dif 7+
- lowDmg = math.floor(5 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(10 * GlobalDmgMod + dmgMod)
- end
-
- SetInfoStructUInt(NPC, "override_primary_weapon", 1)
- SetInfoStructUInt(NPC, "primary_weapon_damage_low", lowDmg)
- SetInfoStructUInt(NPC, "primary_weapon_damage_high", highDmg)
- end
- --Level 10-15
- function TierTwoA(NPC, Spawn)
- local dmgMod =GetStr(NPC)/10
- if difficulty <=4 then
- lowDmg = math.floor(2 * GlobalDmgMod + dmgMod)
- highDmg =math.floor(4 * GlobalDmgMod + dmgMod)
- elseif difficulty == 5 then
- lowDmg = math.floor(2 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(7 * GlobalDmgMod + dmgMod)
- elseif difficulty ==6 then
- lowDmg = math.floor(6 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(15 * GlobalDmgMod + dmgMod)
- elseif difficulty == 7 then
- lowDmg = math.floor(8 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(17 * GlobalDmgMod + dmgMod)
- elseif difficulty >= 8 then
- lowDmg = math.floor(12 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(24 * GlobalDmgMod + dmgMod)
- end
-
- SetInfoStructUInt(NPC, "override_primary_weapon", 1)
- SetInfoStructUInt(NPC, "primary_weapon_damage_low", lowDmg)
- SetInfoStructUInt(NPC, "primary_weapon_damage_high", highDmg)
- end
- --Level 16-19
- function TierTwoB(NPC, Spawn)
- local dmgMod =GetStr(NPC)/10
- if difficulty <=4 then
- lowDmg = math.floor(2 * GlobalDmgMod + dmgMod)
- highDmg =math.floor(7 * GlobalDmgMod + dmgMod)
- elseif difficulty == 5 then
- lowDmg = math.floor(6 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(15 * GlobalDmgMod + dmgMod)
- elseif difficulty ==6 then
- lowDmg = math.floor(12 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(24 * GlobalDmgMod + dmgMod)
- elseif difficulty == 7 then
- lowDmg = math.floor(18 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(32 * GlobalDmgMod + dmgMod)
- elseif difficulty >= 8 then
- lowDmg = math.floor(25 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(55 * GlobalDmgMod + dmgMod)
- end
-
- SetInfoStructUInt(NPC, "override_primary_weapon", 1)
- SetInfoStructUInt(NPC, "primary_weapon_damage_low", lowDmg)
- SetInfoStructUInt(NPC, "primary_weapon_damage_high", highDmg)
- end
- --Level 20-24
- function TierThreeA(NPC, Spawn)
- local dmgMod =GetStr(NPC)/10
- if difficulty <=4 then
- lowDmg = math.floor(2 * GlobalDmgMod + dmgMod)
- highDmg =math.floor(7 * GlobalDmgMod + dmgMod)
- elseif difficulty == 5 then
- lowDmg = math.floor(6 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(15 * GlobalDmgMod + dmgMod)
- elseif difficulty ==6 then
- lowDmg = math.floor(12 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(24 * GlobalDmgMod + dmgMod)
- elseif difficulty == 7 then
- lowDmg = math.floor(18 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(32 * GlobalDmgMod + dmgMod)
- elseif difficulty >= 8 then
- lowDmg = math.floor(25 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(55 * GlobalDmgMod + dmgMod)
- end
-
- SetInfoStructUInt(NPC, "override_primary_weapon", 1)
- SetInfoStructUInt(NPC, "primary_weapon_damage_low", lowDmg)
- SetInfoStructUInt(NPC, "primary_weapon_damage_high", highDmg)
-
- end
- --Level 25-29
- function TierThreeB(NPC, Spawn)
- local dmgMod =GetStr(NPC)/10
- if difficulty <=4 then
- lowDmg = math.floor(6 * GlobalDmgMod + dmgMod)
- highDmg =math.floor(15 * GlobalDmgMod + dmgMod)
- elseif difficulty == 5 then
- lowDmg = math.floor(12 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(24 * GlobalDmgMod + dmgMod)
- elseif difficulty ==6 then
- lowDmg = math.floor(20 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(35 * GlobalDmgMod + dmgMod)
- elseif difficulty == 7 then
- lowDmg = math.floor(18 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(32 * GlobalDmgMod + dmgMod)
- elseif difficulty >= 8 then
- lowDmg = math.floor(35 * GlobalDmgMod + dmgMod)
- highDmg = math.floor(75 * GlobalDmgMod + dmgMod)
- end
-
- SetInfoStructUInt(NPC, "override_primary_weapon", 1)
- SetInfoStructUInt(NPC, "primary_weapon_damage_low", lowDmg)
- SetInfoStructUInt(NPC, "primary_weapon_damage_high", highDmg)
- end
|