12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052 |
- --[[
- Script Name : SpawnScripts/Generic/NPCModule.lua
- Script Author : LordPazuzu
- Script Date : 2023.11.20 08:11:41
- Script Purpose : NPC Statistics Control Script- In Development
- : Supersedes CombatModule.lua
- --]]
- require "SpawnScripts/Generic/EquipmentModule"
- 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.
- GlobalHPMod = 1.0 -- Global Hit Point Multiplier
- GlobalPowerMod = 1.0 -- Global Power Pool Multiplier
- function NPCModule(NPC, Spawn)
- level = GetLevel(NPC) -- NPC Level
- difficulty = GetDifficulty(NPC) -- NPC Difficulty
- MeleeDmgMod = GetStr(NPC) / 10 -- Determines strength bonus to auttoattack damage.
-
- --Included functions. Comment out a function to disable.
- Attributes(NPC, Spawn) -- Determines basic stats of the NPC(str, agi, sta, int, wis)
- AutoAttack(NPC, Spawn) -- Determines the NPC's tier for the purposes of autoattack damage.
- Regen(NPC, Spawn) -- Sets NPC's health and/or power regeneration rates or disables regeneration entirely.
- HealthPower(NPC, Spawn) -- Calculates NPC's based on level and difficulty.
- --Heroic(NPC, Spawn) -- Detects if an NPC should be flagged as heroic and sets the heroic flag accordingly.
- AddTimer(NPC, 25, "Heroic") -- Applies heroic flag immediately after spawn in accordance with the way the server loads spawns.
- AddTimer(NPC, 1000, "Heroic") -- Redundant heroic check to compensate for server lag when using developer commands to reload spawns.
-
- end
- --Determine damage function based on NPC level.
- function AutoAttack(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)
- lowDmg = math.floor(0 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(2 * GlobalDmgMod + MeleeDmgMod)
- damage(NPC)
- end
- --Level 4-5
- function TierOneB(NPC, Spawn)
- if difficulty <=4 then --
- lowDmg = math.floor(1 * GlobalDmgMod + MeleeDmgMod)
- highDmg =math.floor(2 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty == 5 then
- lowDmg = math.floor(1 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(3 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty >=6 and difficulty <=9 then
- lowDmg = math.floor(2 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(4 * GlobalDmgMod + MeleeDmgMod)
- end
- damage(NPC)
- end
- --Level 6-9
- function TierOneC(NPC, Spawn)
- if difficulty <=4 then -- 1-3 dif 1-4
- lowDmg = math.floor(1 * GlobalDmgMod + MeleeDmgMod)
- highDmg =math.floor(3 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty == 5 then -- 2-4 dif 5MeleeDmgMod
- lowDmg = math.floor(2 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(4 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty ==6 then -- 2-7 damage- Dif 6
- lowDmg = math.floor(2 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(7 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty >=7 then -- 2-7 damage- Dif 7+
- lowDmg = math.floor(5 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(10 * GlobalDmgMod + MeleeDmgMod)
- end
- damage(NPC)
- end
- --Level 10-15
- function TierTwoA(NPC, Spawn)
- if difficulty <=4 then
- lowDmg = math.floor(2 * GlobalDmgMod + MeleeDmgMod)
- highDmg =math.floor(4 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty == 5 then
- lowDmg = math.floor(2 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(7 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty ==6 then
- lowDmg = math.floor(6 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(15 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty == 7 then
- lowDmg = math.floor(8 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(17 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty >= 8 then
- lowDmg = math.floor(12 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(24 * GlobalDmgMod + MeleeDmgMod)
- end
- damage(NPC)
- end
- --Level 16-19
- function TierTwoB(NPC, Spawn)
- if difficulty <=4 then
- lowDmg = math.floor(2 * GlobalDmgMod + MeleeDmgMod)
- highDmg =math.floor(7 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty == 5 then
- lowDmg = math.floor(6 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(15 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty ==6 then
- lowDmg = math.floor(12 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(24 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty == 7 then
- lowDmg = math.floor(18 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(32 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty >= 8 then
- lowDmg = math.floor(25 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(55 * GlobalDmgMod + MeleeDmgMod)
- end
- damage(NPC)
- end
- --Level 20-24
- function TierThreeA(NPC, Spawn)
- if difficulty <=4 then
- lowDmg = math.floor(2 * GlobalDmgMod + MeleeDmgMod)
- highDmg =math.floor(7 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty == 5 then
- lowDmg = math.floor(6 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(15 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty ==6 then
- lowDmg = math.floor(12 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(24 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty == 7 then
- lowDmg = math.floor(18 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(32 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty >= 8 then
- lowDmg = math.floor(25 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(55 * GlobalDmgMod + MeleeDmgMod)
- end
- damage(NPC)
- end
- --Level 25-29
- function TierThreeB(NPC, Spawn)
- if difficulty <=4 then
- lowDmg = math.floor(6 * GlobalDmgMod + MeleeDmgMod)
- highDmg =math.floor(15 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty == 5 then
- lowDmg = math.floor(12 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(24 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty ==6 then
- lowDmg = math.floor(20 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(35 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty == 7 then
- lowDmg = math.floor(18 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(32 * GlobalDmgMod + MeleeDmgMod)
- elseif difficulty >= 8 then
- lowDmg = math.floor(35 * GlobalDmgMod + MeleeDmgMod)
- highDmg = math.floor(75 * GlobalDmgMod + MeleeDmgMod)
- end
- damage(NPC)
- end
- --Autoattack damage override function.
- function damage(NPC, Spawn)
- SetInfoStructUInt(NPC, "override_primary_weapon", 1) --Set to 1 enables override for 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
- --Calculate Hitpoints and Power
- function HealthPower(NPC, Spawn)
-
- -- Calculate multipliers based on difficulty tier
- if difficulty == 1 then
- HPMod = 0.20
- PWMod = 0.20
- elseif difficulty == 2 then
- HPMod = 0.25
- PWMod = 0.25
- elseif difficulty == 3 then
- HPMod = 0.35
- PWMod = 0.35
- elseif difficulty == 4 then
- HPMod = 0.45
- PWMod = 0.45
- elseif difficulty == 5 then
- HPMod = 0.66
- PWMod = 0.66
- elseif difficulty == 6 then
- HPMod = 1.0
- PWMod = 1.0
- elseif difficulty == 7 then
- HPMod = 1.45
- PWMod = 1.45
- elseif difficulty == 8 then
- HPMod = 2.2
- PWMod = 2.2
- elseif difficulty == 9 then
- HPMod = 3.25
- PWMod = 3.25
- end
-
- --Calculate hitpoints and power based on level and difficuty
- if level == 1 then
- hp = 30 * HPMod * GlobalHPMod
- pw = 25 * PWMod * GlobalPowerMod
- elseif level == 2 then
- hp = 45 * HPMod * GlobalHPMod
- pw = 35 * PWMod * GlobalPowerMod
- elseif level == 3 then
- hp = 75 * HPMod * GlobalHPMod
- pw = 45 * PWMod * GlobalPowerMod
- elseif level == 4 then
- hp = 110 * HPMod * GlobalHPMod
- pw = 55 * PWMod * GlobalPowerMod
- elseif level == 5 then
- hp = 130 * HPMod * GlobalHPMod
- pw = 65 * PWMod * GlobalPowerMod
- elseif level == 6 then
- hp = 150 * HPMod * GlobalHPMod
- pw = 80 * PWMod * GlobalPowerMod
- elseif level == 7 then
- hp = 200 * HPMod * GlobalHPMod
- pw = 90 * PWMod * GlobalPowerMod
- elseif level == 8 then
- hp = 240 * HPMod * GlobalHPMod
- pw = 100* PWMod * GlobalPowerMod
- elseif level == 9 then
- hp = 275 * HPMod * GlobalHPMod
- pw = 110 * PWMod * GlobalPowerMod
- elseif level == 10 then
- hp = 370 * HPMod * GlobalHPMod
- pw = 130 * PWMod * GlobalPowerMod
- elseif level == 11 then
- hp = 430 * HPMod * GlobalHPMod
- pw = 160 * PWMod * GlobalPowerMod
- elseif level == 12 then
- hp = 550 * HPMod * GlobalHPMod
- pw = 185 * PWMod * GlobalPowerMod
- elseif level == 13 then
- hp = 680 * HPMod * GlobalHPMod
- pw = 205 * PWMod * GlobalPowerMod
- elseif level == 14 then
- hp = 795 * HPMod * GlobalHPMod
- pw = 240 * PWMod * GlobalPowerMod
- elseif level == 15 then
- hp = 920 * HPMod * GlobalHPMod
- pw = 270 * PWMod * GlobalPowerMod
- elseif level == 16 then
- hp = 1045 * HPMod * GlobalHPMod
- pw = 310 * PWMod * GlobalPowerMod
- elseif level == 17 then
- hp = 1180 * HPMod * GlobalHPMod
- pw = 360 * PWMod * GlobalPowerMod
- elseif level == 18 then
- hp = 1290 * HPMod * GlobalHPMod
- pw = 410 * PWMod * GlobalPowerMod
- elseif level == 19 then
- hp = 1440 * HPMod * GlobalHPMod
- pw = 425 * PWMod * GlobalPowerMod
- elseif level == 20 then
- hp = 1930 * HPMod * GlobalHPMod
- pw = 475 * PWMod * GlobalPowerMod
- elseif level == 21 then
- hp = 2120 * HPMod * GlobalHPMod
- pw = 500 * PWMod * GlobalPowerMod
- elseif level == 22 then
- hp = 2355 * HPMod * GlobalHPMod
- pw = 545 * PWMod * GlobalPowerMod
- elseif level == 23 then
- hp = 2595 * HPMod * GlobalHPMod
- pw = 575 * PWMod * GlobalPowerMod
- elseif level == 24 then
- hp = 2840 * HPMod * GlobalHPMod
- pw = 620 * PWMod * GlobalPowerMod
- elseif level == 25 then
- hp = 3080 * HPMod * GlobalHPMod
- pw = 670 * PWMod * GlobalPowerMod
- elseif level == 26 then
- hp = 3340 * HPMod * GlobalHPMod
- pw = 700 * PWMod * GlobalPowerMod
- elseif level == 27 then
- hp = 3600 * HPMod * GlobalHPMod
- pw = 755 * PWMod * GlobalPowerMod
- elseif level == 28 then
- hp = 3820 * HPMod * GlobalHPMod
- pw = 795 * PWMod * GlobalPowerMod
- elseif level == 29 then
- hp = 4240 * HPMod * GlobalHPMod
- pw = 835 * PWMod * GlobalPowerMod
- else
- hp = 5000 * HPMod * GlobalHPMod --temp values
- pw = 900 * PWMod * GlobalPowerMod -- temp values
- end
- ModifyMaxHP(NPC, math.floor(hp))
- ModifyHP(NPC, math.floor(hp))
- ModifyMaxPower(NPC, math.floor(pw))
- ModifyPower(NPC, math.floor(hp))
-
-
- end
- --Automatically set heroic flags based on specified criteria
- function Heroic(NPC, Spawn)
- local group = GetGroup(NPC)
-
- if group ~= nil then
- local groupsize = #group
- if groupsize > 1 then
- SpawnSet(NPC, "heroic", 1)
- end
- end
-
- if difficulty == 8 or difficulty == 9 then
- SpawnSet(NPC, "heroic", 1)
- end
-
- end
- -- OPTIONAL COSMETIC FUNCTIONS--
- --Race functions for DoF compatibility. These are called independently in the NPC's spawn function.
- function dwarf(NPC, Spawn)
- SpawnSet(NPC,"race",2)
-
- if GetGender(NPC)==2 then
- SpawnSet(NPC,"model_type",109)
- else
- SpawnSet(NPC,"model_type",110)
- end
-
- hair(NPC)
- end
- function froglok(NPC, Spawn)
- SpawnSet(NPC,"race",4)
-
- if GetGender(NPC)==2 then
- SpawnSet(NPC,"model_type",76)
- else
- SpawnSet(NPC,"model_type",77)
- end
-
- hair(NPC)
- end
- function halfling(NPC, Spawn)
- local hair = MakeRandomInt(1,2)
- SpawnSet(NPC,"race",7)
-
- if GetGender(NPC)==2 then
- SpawnSet(NPC,"model_type",107)
- else
- SpawnSet(NPC,"model_type",108)
- end
-
- if hair == 1 then
- SpawnSet(NPC, "hair_type", MakeRandomInt(1125,1128))
- else
- SpawnSet(NPC, "hair_type", MakeRandomInt(1133,1139))
- end
- haircolor(NPC)
- end
- function highelf(NPC, Spawn)
- SpawnSet(NPC,"race",8)
-
- if GetGender(NPC)==2 then
- SpawnSet(NPC,"model_type",135)
- else
- SpawnSet(NPC,"model_type",136)
- end
-
- hair(NPC)
- end
- function woodelf(NPC, Spawn)
- SpawnSet(NPC,"race",15)
-
- if GetGender(NPC)==2 then
- SpawnSet(NPC,"model_type",113)
- else
- SpawnSet(NPC,"model_type",114)
- end
-
- SpawnSet(NPC, "hair_type", MakeRandomInt(1133, 1139))
- haircolor(NPC)
- end
- function barbarian(NPC, Spawn)
- local hair = MakeRandomInt(1,2)
- SpawnSet(NPC,"race",0)
-
- if GetGender(NPC)==2 then
- SpawnSet(NPC,"model_type",111)
- else
- SpawnSet(NPC,"model_type",112)
- end
-
- if hair == 1 then
- SpawnSet(NPC, "hair_type", MakeRandomInt(1125,1128))
- else
- SpawnSet(NPC, "hair_type", MakeRandomInt(1133,1139))
- end
- haircolor(NPC)
- end
- function erudite(NPC, Spawn)
- SpawnSet(NPC,"race",3)
-
- if GetGender(NPC)==2 then
- SpawnSet(NPC,"model_type",120)
- else
- SpawnSet(NPC,"model_type",119)
- end
-
- hair(NPC)
- end
- function gnome(NPC, Spawn)
- SpawnSet(NPC,"race",5)
-
- if GetGender(NPC)==2 then
- SpawnSet(NPC,"model_type",122)
- else
- SpawnSet(NPC,"model_type",121)
- end
-
- hair(NPC)
- end
- function halfelf(NPC, Spawn)
- SpawnSet(NPC,"race",6)
-
- if GetGender(NPC)==2 then
- SpawnSet(NPC,"model_type",79)
- else
- SpawnSet(NPC,"model_type",78)
- end
-
- hair(NPC)
- end
- function human(NPC, Spawn)
- SpawnSet(NPC,"race",9)
-
- if GetGender(NPC)==2 then
- SpawnSet(NPC,"model_type",132)
- else
- SpawnSet(NPC,"model_type",134)
- end
-
- hair(NPC)
- end
- function kerra(NPC, Spawn)
- SpawnSet(NPC,"race",11)
-
- if GetGender(NPC)==2 then
- SpawnSet(NPC,"model_type",81)
- else
- SpawnSet(NPC,"model_type",82)
- end
-
- hair(NPC)
- end
- function darkelf(NPC, Spawn)
- SpawnSet(NPC,"race",1)
-
- if GetGender(NPC)==2 then
- SpawnSet(NPC,"model_type",116)
- else
- SpawnSet(NPC,"model_type",115)
- end
-
- hair(NPC)
- DarkElfHairColor(NPC, Spawn)
- end
- function iksar(NPC, Spawn)
- SpawnSet(NPC,"race",10)
-
- if GetGender(NPC)==2 then
- SpawnSet(NPC,"model_type",104)
- else
- SpawnSet(NPC,"model_type",103)
- end
-
- hair(NPC)
- end
- function ogre(NPC, Spawn)
- SpawnSet(NPC,"race",12)
-
- if GetGender(NPC)==2 then
- SpawnSet(NPC,"model_type",123)
- else
- SpawnSet(NPC,"model_type",124)
- end
-
- hair(NPC)
- end
- function ratonga(NPC, Spawn)
- SpawnSet(NPC,"race",13)
-
- if GetGender(NPC)==2 then
- SpawnSet(NPC,"model_type",54)
- else
- SpawnSet(NPC,"model_type",53)
- end
-
- hair(NPC)
- end
- function troll(NPC, Spawn)
- SpawnSet(NPC,"race",14)
-
- if GetGender(NPC)==2 then
- SpawnSet(NPC,"model_type",105)
- else
- SpawnSet(NPC,"model_type",106)
- end
-
- hair(NPC)
-
- end
- -- Classic Orcs
- function Deathfist(NPC, Spawn)
- SpawnSet(NPC,"model_type",137)
- SpawnSet(NPC, "race", 20)
- end
- function Bloodskull(NPC, Spawn)
- SpawnSet(NPC,"model_type",137)
- SpawnSet(NPC, "race", 20)
- SpawnSet(NPC, "skin_color", "50 60 50")
- SpawnSet(NPC, "eye_color", "98 63 28")
- end
- function Brokentusk(NPC, Spawn)
- SpawnSet(NPC,"model_type",137)
- SpawnSet(NPC, "race", 20)
- SpawnSet(NPC, "skin_color", "110 75 75")
- SpawnSet(NPC, "eye_color", "98 63 28")
- end
- function Lonetusk(NPC, Spawn)
- SpawnSet(NPC,"model_type",137)
- SpawnSet(NPC, "race", 20)
- SpawnSet(NPC, "skin_color", "92 52 52")
- SpawnSet(NPC, "eye_color", "98 63 28")
- end
- function Ree(NPC, Spawn)
- SpawnSet(NPC,"model_type",137)
- SpawnSet(NPC, "race", 20)
- end
- -- DoF compatible hair functions
- function hair(NPC, Spawn)
- SpawnSet(NPC, "hair_type", MakeRandomInt(1125, 1139))
- if GetRace(NPC)==1 then --Darkelf
- DarkElfHairColor(NPC, Spawn)
- else
- haircolor(NPC)
- end
- end
- function haircolor(NPC, Spawn)
- local color = MakeRandomInt(1,5)
- if color == 1 then
- SpawnSet(NPC, "hair_type_color", "102 36 18")
- SpawnSet(NPC, "hair_type_highlight_color", "138 129 121")
- SpawnSet(NPC, "hair_face_color", "102 36 18")
- SpawnSet(NPC, "hair_face_highlight_color", "138 129 121")
- elseif color == 2 then
- SpawnSet(NPC, "hair_type_color", "218 187 120")
- SpawnSet(NPC, "hair_type_highlight_color", "114 65 4")
- SpawnSet(NPC, "hair_face_color", "218 187 120")
- SpawnSet(NPC, "hair_face_highlight_color", "114 65 4")
- elseif color == 3 then
- SpawnSet(NPC, "hair_type_color", "51 18 8")
- SpawnSet(NPC, "hair_type_highlight_color", "60 59 55")
- SpawnSet(NPC, "hair_face_color", "51 18 8")
- SpawnSet(NPC, "hair_face_highlight_color", "60 59 55")
- elseif color == 4 then
- SpawnSet(NPC, "hair_type_color", "5 5 10")
- SpawnSet(NPC, "hair_type_highlight_color", "5 5 10")
- SpawnSet(NPC, "hair_face_color", "5 5 10")
- SpawnSet(NPC, "hair_face_highlight_color", "5 5 10")
- elseif color == 5 then
- SpawnSet(NPC, "hair_type_color", "230 230 230")
- SpawnSet(NPC, "hair_type_highlight_color", "154 147 81")
- SpawnSet(NPC, "hair_face_color", "230 230 230")
- SpawnSet(NPC, "hair_face_highlight_color", "154 147 81")
- end
- end
- function DarkElfHairColor(NPC, Spawn)
- local color = MakeRandomInt(1,5)
- if color == 1 then
- SpawnSet(NPC, "hair_type_color", "183 177 183")
- SpawnSet(NPC, "hair_type_highlight_color", "84 32 14")
- SpawnSet(NPC, "hair_face_color", "183 177 183")
- SpawnSet(NPC, "hair_face_highlight_color", "84 32 14")
- elseif color == 2 then
- SpawnSet(NPC, "hair_type_color", "170 191 191")
- SpawnSet(NPC, "hair_type_highlight_color", "84 32 4")
- SpawnSet(NPC, "hair_face_color", "170 191 191")
- SpawnSet(NPC, "hair_face_highlight_color", "84 32 4")
- elseif color == 3 then
- SpawnSet(NPC, "hair_type_color", "179 173 194")
- SpawnSet(NPC, "hair_type_highlight_color", "198 184 78")
- SpawnSet(NPC, "hair_face_color", "179 173 194")
- SpawnSet(NPC, "hair_face_highlight_color", "198 184 78")
- elseif color == 4 then
- SpawnSet(NPC, "hair_type_color", "219 244 244")
- SpawnSet(NPC, "hair_type_highlight_color", "105 103 97")
- SpawnSet(NPC, "hair_face_color", "219 244 244")
- SpawnSet(NPC, "hair_face_highlight_color", "105 103 97")
- elseif color == 5 then
- SpawnSet(NPC, "hair_type_color", "139 122 138")
- SpawnSet(NPC, "hair_type_highlight_color", "105 103 97")
- SpawnSet(NPC, "hair_face_color", "139 122 138")
- SpawnSet(NPC, "hair_face_highlight_color", "105 103 97")
- end
- end
- --Idle Animation Packages: Call the function in the main spawn function of the spawn script.
- function IdleAggressive(NPC)
- if not IsInCombat(NPC) and GetRunbackDistance(NPC)<2 then
- local choice = MakeRandomInt(1,5)
- if choice == 1 then
- PlayFlavor(NPC,"","","scheme",0,0)
- elseif choice == 2 then
- PlayFlavor(NPC,"","","brandish",0,0)
- elseif choice == 3 then
- PlayFlavor(NPC,"","","tapfoot",0,0)
- elseif choice == 4 then
- PlayFlavor(NPC,"","","swear",0,0)
- elseif choice == 5 then
- PlayFlavor(NPC,"","","threaten",0,0)
- end
- end
- AddTimer(NPC,MakeRandomInt(6500,12000),"IdleAggressive")
- end
- function IdleAlert(NPC)
- if not IsInCombat(NPC) and GetRunbackDistance(NPC)<2 then
- local choice = MakeRandomInt(1,5)
- if choice == 1 then
- PlayFlavor(NPC,"","","peer",0,0)
- elseif choice == 2 then
- PlayFlavor(NPC,"","","listen",0,0)
- elseif choice == 3 then
- PlayFlavor(NPC,"","","tapfoot",0,0)
- elseif choice == 4 then
- PlayFlavor(NPC,"","","yawn",0,0)
- elseif choice == 5 then
- PlayFlavor(NPC,"","","ponder",0,0)
- end
- end
- AddTimer(NPC,MakeRandomInt(6500,12000),"IdleAlert")
- end
- function IdleMischief(NPC)
- if not IsInCombat(NPC) and GetRunbackDistance(NPC)<2 then
- local choice = MakeRandomInt(1,5)
- if choice == 1 then
- PlayFlavor(NPC,"","","moon",0,0)
- elseif choice == 2 then
- PlayFlavor(NPC,"","","neener",0,0)
- elseif choice == 3 then
- PlayFlavor(NPC,"","","giggle",0,0)
- elseif choice == 4 then
- PlayFlavor(NPC,"","","dance",0,0)
- elseif choice == 5 then
- PlayFlavor(NPC,"","","heartattack",0,0)
- end
- end
- AddTimer(NPC,MakeRandomInt(6500,12000),"IdleMischief")
- end
- function IdleBored(NPC)
- if not IsInCombat(NPC) and GetRunbackDistance(NPC)<2 then
- local choice = MakeRandomInt(1,5)
- if choice == 1 then
- PlayFlavor(NPC,"","","tapfoot",0,0)
- elseif choice == 2 then
- PlayFlavor(NPC,"","","sigh",0,0)
- elseif choice == 3 then
- PlayFlavor(NPC,"","","stretch",0,0)
- elseif choice == 4 then
- PlayFlavor(NPC,"","","yawn",0,0)
- elseif choice == 5 then
- PlayFlavor(NPC,"","","stare",0,0)
- end
- end
- AddTimer(NPC,MakeRandomInt(6500,12000),"IdleBored")
- end
- function IdlePlayful(NPC)
- if not IsInCombat(NPC) and GetRunbackDistance(NPC)<2 then
- local choice = MakeRandomInt(1,5)
- if choice == 1 then
- PlayFlavor(NPC,"","","dance",0,0)
- elseif choice == 2 then
- PlayFlavor(NPC,"","","flirt",0,0)
- elseif choice == 3 then
- PlayFlavor(NPC,"","","smile",0,0)
- elseif choice == 4 then
- PlayFlavor(NPC,"","","thumbsup",0,0)
- elseif choice == 5 then
- PlayFlavor(NPC,"","","yeah",0,0)
- end
- end
- AddTimer(NPC,MakeRandomInt(6500,12000),"IdlePlayful")
- end
- function IdleSad(NPC)
- if not IsInCombat(NPC) and GetRunbackDistance(NPC)<2 then
- local choice = MakeRandomInt(1,5)
- if choice == 1 then
- PlayFlavor(NPC,"","","sad",0,0)
- elseif choice == 2 then
- PlayFlavor(NPC,"","","pout",0,0)
- elseif choice == 3 then
- PlayFlavor(NPC,"","","sigh",0,0)
- elseif choice == 4 then
- PlayFlavor(NPC,"","","sulk",0,0)
- elseif choice == 5 then
- PlayFlavor(NPC,"","","cry",0,0)
- end
- end
- AddTimer(NPC,MakeRandomInt(6500,12000),"IdleSad")
- end
- function IdleSneaky(NPC)
- if not IsInCombat(NPC) and GetRunbackDistance(NPC)<2 then
- local choice = MakeRandomInt(1,5)
- if choice == 1 then
- PlayFlavor(NPC,"","","scheme",0,0)
- elseif choice == 2 then
- PlayFlavor(NPC,"","","smirk",0,0)
- elseif choice == 3 then
- PlayFlavor(NPC,"","","whome",0,0)
- elseif choice == 4 then
- PlayFlavor(NPC,"","","beckon",0,0)
- elseif choice == 5 then
- PlayFlavor(NPC,"","","cutthroat",0,0)
- end
- end
- AddTimer(NPC,MakeRandomInt(6500,12000),"IdleSneaky")
- end
- function IdlePriest(NPC)
- if IsInCombat(NPC) == false then
- choice = MakeRandomInt(1,5)
- if choice == 1 then
- CastSpell(NPC, 110002, 5, NPC)
- elseif choice == 2 then
- CastSpell(NPC, 110003, 5, NPC)
- PlayFlavor(NPC,"","","yawn",0,0)
- -- PlayAnimation(NPC, 891)
- elseif choice == 4 then
- PlayFlavor(NPC,"","","tapfoot",0,0)
- -- PlayAnimation(NPC, 713)
- elseif choice == 5 then
- PlayFlavor(NPC,"","","sniff",0,0)
- -- PlayAnimation(NPC, 553)
- end
- end
- AddTimer(NPC,MakeRandomInt(6500,12000),"IdlePriest")
-
- end
- function IdleAngry(NPC)
- if IsInCombat(NPC) == false then
- choice = MakeRandomInt(1,5)
- if choice == 1 then
- PlayFlavor(NPC,"","","frustrated",0,0)
- elseif choice == 2 then
- PlayFlavor(NPC,"","","curse",0,0)
- elseif choice == 3 then
- PlayFlavor(NPC,"","","scold",0,0)
- elseif choice == 4 then
- PlayFlavor(NPC,"","","shakefist",0,0)
- elseif choice == 5 then
- PlayFlavor(NPC,"","","swear",0,0)
- end
- end
- AddTimer(NPC,MakeRandomInt(7000,10000),"IdleAngry")
- end
- function IdleBeggar(NPC)
- if IsInCombat(NPC) == false then
- choice = MakeRandomInt(1,5)
- if choice == 1 then
- PlayFlavor(NPC,"","","beg",0,0)
- -- PlayAnimation(NPC, 310)
- elseif choice == 2 then
- PlayFlavor(NPC,"","","peer",0,0)
- -- PlayAnimation(NPC, 411)
- elseif choice == 3 then
- PlayFlavor(NPC,"","","yawn",0,0)
- -- PlayAnimation(NPC, 891)
- elseif choice == 4 then
- PlayFlavor(NPC,"","","tapfoot",0,0)
- -- PlayAnimation(NPC, 713)
- elseif choice == 5 then
- PlayFlavor(NPC,"","","sniff",0,0)
- -- PlayAnimation(NPC, 553)
- end
- end
- AddTimer(NPC,MakeRandomInt(10000,15000),"IdleBeggar")
- end
- function IdleTinker(NPC)
- if IsInCombat(NPC) == false then
- choice = MakeRandomInt(1,7)
- if choice == 1 then
- PlayFlavor(NPC,"","","confused",0,0)
- -- PlayAnimation(NPC, 310)
- elseif choice == 2 then
- PlayFlavor(NPC,"","","yes",0,0)
- -- PlayAnimation(NPC, 411)
- elseif choice == 3 then
- PlayFlavor(NPC,"","","boggle",0,0)
- -- PlayAnimation(NPC, 891)
- elseif choice == 4 then
- PlayFlavor(NPC,"","","ponder",0,0)
- -- PlayAnimation(NPC, 713)
- elseif choice == 5 then
- PlayFlavor(NPC,"","","grumble",0,0)
- -- PlayAnimation(NPC, 553)
- elseif choice == 6 then
- PlayFlavor(NPC,"","","doh",0,0)
- -- PlayAnimation(NPC, 553)
- elseif choice == 7 then
- PlayFlavor(NPC,"","","crazy",0,0)
- -- PlayAnimation(NPC, 553)
- end
- end
- AddTimer(NPC,MakeRandomInt(8000,13000),"IdleTinker")
- end
- -- PATHING SCRIPTS --
- --[[ Randomized Movement Loops
- Call the RandomMovement() function in the NPC's spawn function.
- Example format: RandomMovement(NPC, Spawn, -5, 5, 2, 8, 15)
- This exampled sets the NPC to randomly move anywhere in a 5 meter radius
- from it's spawn point at a speed of 2, moving every 8-15 seconds.
- --]]
- function RandomMovement(NPC, Spawn, NegDist, PosDist, Speed, MinDly, MaxDly)
- local X = GetX(NPC)
- local Y = GetY(NPC)
- local Z = GetZ(NPC)
-
- MovementLoopAddLocation(NPC, X, Y, Z, Speed, MakeRandomInt(MinDly, MaxDly))
- MovementMod(NPC, Spawn, NegDist, PosDist, Speed, MinDly, MaxDly)
- MovementLoopAddLocation(NPC, X + LocModX, Y, Z + LocModZ, Speed, MakeRandomInt(MinDly, MaxDly))
- MovementMod(NPC, Spawn, NegDist, PosDist, Speed, MinDly, MaxDly)
- MovementLoopAddLocation(NPC, X + LocModX, Y, Z + LocModZ, Speed, MakeRandomInt(MinDly, MaxDly))
- MovementMod(NPC, Spawn, NegDist, PosDist, Speed, MinDly, MaxDly)
- MovementLoopAddLocation(NPC, X + LocModX, Y, Z + LocModZ, Speed, MakeRandomInt(MinDly, MaxDly))
- MovementMod(NPC, Spawn, NegDist, PosDist, Speed, MinDly, MaxDly)
- MovementLoopAddLocation(NPC, X + LocModX, Y, Z + LocModZ, Speed, MakeRandomInt(MinDly, MaxDly))
- MovementMod(NPC, Spawn, NegDist, PosDist, Speed, MinDly, MaxDly)
- MovementLoopAddLocation(NPC, X + LocModX, Y, Z + LocModZ, Speed, MakeRandomInt(MinDly, MaxDly))
- end
- function RandomMovementFlight(NPC, Spawn, NegDist, PosDist, NegHeight, PosHeight, Speed, MinDly, MaxDly)
- local X = GetX(NPC)
- local Y = GetY(NPC)
- local Z = GetZ(NPC)
- MovementLoopAddLocation(NPC, X, Y, Z, Speed, MakeRandomInt(MinDly, MaxDly))
- MovementLoopAddLocation(NPC, X + MakeRandomInt(NegDist, PosDist), Y + MakeRandomInt(NegHeight, PosHeight), Z + MakeRandomInt(NegDist, PosDist), Speed, MakeRandomInt(MinDly, MaxDly))
- MovementLoopAddLocation(NPC, X + MakeRandomInt(NegDist, PosDist), Y + MakeRandomInt(NegHeight, PosHeight), Z + MakeRandomInt(NegDist, PosDist), Speed, MakeRandomInt(MinDly, MaxDly))
- MovementLoopAddLocation(NPC, X + MakeRandomInt(NegDist, PosDist), Y + MakeRandomInt(NegHeight, PosHeight), Z + MakeRandomInt(NegDist, PosDist), Speed, MakeRandomInt(MinDly, MaxDly))
- MovementLoopAddLocation(NPC, X + MakeRandomInt(NegDist, PosDist), Y + MakeRandomInt(NegHeight, PosHeight), Z + MakeRandomInt(NegDist, PosDist), Speed, MakeRandomInt(MinDly, MaxDly))
- MovementLoopAddLocation(NPC, X + MakeRandomInt(NegDist, PosDist), Y + MakeRandomInt(NegHeight, PosHeight), Z + MakeRandomInt(NegDist, PosDist), Speed, MakeRandomInt(MinDly, MaxDly))
- end
- ---Set an NPC to follow another NPC
- function FollowNPC(NPC, Spawn, LocID, Speed, Distance)
- local zone = GetZone(NPC)
- local leader = GetSpawnByLocationID(zone, LocID)
- if GetDistance(NPC, leader) >= Distance then
- MovementLoopAddLocation (NPC, GetX(leader), GetY(leader), GetZ(leader), Speed, 0)
- end
-
-
- -- in progress, do not use
- end
- function MovementMod(NPC, Spawn, NegDist, PosDist, Speed, MinDly, MaxDly)
- MinNegDist = math.floor(NegDist/2)
- MinPosDist = math.floor(PosDist/2)
- MinX = MakeRandomInt(1,2)
- MinZ = MakeRandomInt(1,2)
-
- if MinX == 1 then
- LocModX = MakeRandomInt(MinNegDist, NegDist)
- elseif MinX == 2 then
- LocModX = MakeRandomInt(MinPostDist, PosDist)
- end
-
- if MinZ == 1 then
- LocModZ = MakeRandomInt(MinNegDist, NegDist)
- elseif MinZ == 2 then
- LocModZ = MakeRandomInt(MinPostDist, PosDist)
- end
- end
- -- Automatically calculate hit points, power, and regeneration for named NPCs
- function Named(NPC, Spawn)
- level = GetLevel(NPC)
- difficulty = GetDifficulty(NPC)
- NamedMod = 1.5
- HealthPower(NPC)
-
- ModifyMaxHP(NPC, math.floor(hp * NamedMod))
- ModifyHP(NPC, math.floor(hp * NamedMod))
- ModifyMaxPower(NPC, math.floor(pw * NamedMod))
- ModifyPower(NPC, math.floor(hp * NamedMod))
- SetInfoStructUInt(NPC, "hp_regen_override", 1)
- SetInfoStructSInt(NPC, "hp_regen", (level * 2) + (difficulty * 2))
- SetInfoStructUInt(NPC, "pw_regen_override", 1)
- SetInfoStructSInt(NPC, "pw_regen", (level * 2) + (difficulty * 2))
- end
- -- Social Aggro by Faction- IN PROGRESS, DO NOT USE
- function Social(NPC, Spawn)
- MyFaction = GetFactionID(NPC)
- SocialRadius = GetAggroRadius(NPC) * 2
- SetPlayerProximityFunction(NPC, SocialRadius, "CheckCombat")
- end
- function CheckCombat(NPC, Spawn)
- Say(NPC, "Checking for combat.")
- if IsInCombat(Spawn) then
- Say(NPC, "You're in combat!")
- SocialAggro(NPC, Spawn)
- end
- end
- function SocialAggro(NPC, Spawn)
- local MobAssist = GetTarget(Spawn)
- local AssistFaction = GetFactionID(MobAssist)
- if MyFaction == AssistFaction then
- Attack(NPC, Spawn)
- end
- end
|