Esse npc achei muito interressante e não é meu
Peguei no otfans
Ele mata pks,monstros que chegam perto dele
Ele é um npc guarda
Funciona apenas em TFS 0.20 +
Em npcs adicione xxx.xml
<?xml version="1.0" encoding="UTF-8"?> <npc name="Defender Sauron" script="data/npc/scripts/defender.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="130" head="114" body="114" legs="114" feet="114" addons="3"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|. I'm defender of Kni. I'm busy, don't waste my time!"/> <parameter key="message_walkaway" value="Good bye."/> <parameter key="HitInterval" value="1000" /> <parameter key="ShootEffect" value="31" /> <!-- CONST_ANI_SUDDENDEATH --> <parameter key="HitEffect" value="17" /> <!-- CONST_ME_MORTAREAR --> <parameter key="TypeDmg" value="1024" /> <!-- COMBAT_HOLYDAMAGE --> <parameter key="minDamage" value="150" /> <parameter key="maxDamage" value="700" /> <parameter key="sayText" value="Exori Vis" /> <parameter key="multiAttack" value="1" /> <parameter key="hitSkulledPlayer" value="1" /> <parameter key="minHeal" value="50" /> <parameter key="maxHeal" value="150" /> <parameter key="dmgRadiusX" value="7" /> <parameter key="dmgRadiusY" value="5" /> <parameter key="healRadiusX" value="3" /> <parameter key="healRadiusY" value="3" /> </parameters> </npc>
E npcs/scripts adicione defender.lua
NpcSystem.parseParameters(npcHandler) local guard = defender:new() guard:setHitInterval(getNpcParameter("HitInterval")) guard:setShootEffect(getNpcParameter("ShootEffect")) guard:setHitEffect(getNpcParameter("HitEffect")) guard:setTypeDmg(getNpcParameter("TypeDmg")) guard:setDamage(getNpcParameter("minDamage"),getNpcParameter("maxDamage")) guard:setSayText(getNpcParameter("sayText")) guard:setHeal(getNpcParameter("minHeal"),getNpcParameter("maxHeal")) guard:setHitSkulledPlayer(getNpcParameter("hitSkulledPlayer")) guard:setMultiAttack(getNpcParameter("multiAttack")) guard:setDmgRadius(getNpcParameter("dmgRadiusX"),getNpcParameter("dmgRadiusY")) guard:setHealRadius(getNpcParameter("healRadiusX"),getNpcParameter("healRadiusY")) function onThink() guard:onThink(getNpcCid()) npcHandler:onThink() end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end npcHandler:addModule(FocusModule:new())
E em /data/npc/lib/npc.lua adicione na primeira linha :
dofile('data/npc/lib/creature.lua')
na mesma pasta crie creature.lua e adicione ;
-- @ Mehah and Gesior function OTSYS_TIME() return os.clock()*1000 end defender = { cid = 0, targetList = {}, targetTime = OTSYS_TIME(), hitInterval = 1000, shootEffect = CONST_ANI_THROWINGSTAR, hitEffect = CONST_ME_HITAREA, typeDmg = COMBAT_PHYSICALDAMAGE, minDmg = 300, maxDmg = 1200, sayText = "", minHeal = 1, maxHeal = 10, hitSkulledPlayer = 1, multiAttack = 1, dmgRadiusX = 7, dmgRadiusY = 5, healRadiusX = 3, healRadiusY = 3, } function defender:new() local obj = {} setmetatable(obj, self) self.__index = self return obj end function defender:onThink(_cid) if self.cid == 0 then self.cid = _cid return end local _time = OTSYS_TIME() if (_time - self.targetTime) > self.hitInterval then self.targetTime = _time local position = getCreaturePosition(self.cid) local creature = {} local pos = {x = 0, y = 0, z = 0, stackpos = 0} if self.minDmg > 0 and self.maxDmg > 0 then self:clearTargetList() for x = -self.dmgRadiusX, self.dmgRadiusX do for y = -self.dmgRadiusY, self.dmgRadiusY do if not (x == 0 and y == 0) then pos = {x = position.x+x, y = position.y+y, z = position.z, stackpos = STACKPOS_TOP_CREATURE} creature = getTopCreature(pos) if (creature.type == 2) or (creature.type == 1 and self.hitSkulledPlayer == 1 and getPlayerSkullType(creature.uid) > 0) then if self.multiAttack ~= 1 and #self.targetList > 0 then break end self:addTarget(creature.uid) self:doSendDamage(creature.uid) end end end end if #self.targetList > 0 then if self.sayText ~= "" then doCreatureSay(self.cid, self.sayText, TALKTYPE_ORANGE_1) end end end if self.minHeal > 0 and self.maxHeal > 0 then self:clearTargetList() for x = -self.healRadiusX, self.healRadiusX do for y = -self.healRadiusY, self.healRadiusY do if not (x == 0 and y == 0) then pos = {x = position.x+x, y = position.y+y, z = position.z, stackpos = STACKPOS_TOP_CREATURE} creature = getTopCreature(pos) if (creature.type == 1) then self:doHeal(creature.uid) end end end end end end end function defender:doSendDamage(target) if isCreature(target) == TRUE then local hitDmg = math.random(self.minDmg, self.maxDmg) if getCreatureHealth(target) <= hitDmg then doSetCreatureDropLoot(target, 0) end doSendDistanceShoot(getCreaturePosition(self.cid), getCreaturePosition(target), self.shootEffect) doTargetCombatHealth(self.cid, target, self.typeDmg, -hitDmg, -hitDmg, self.hitEffect) end end function defender:doHeal(target) doTargetCombatHealth(self.cid, target, COMBAT_HEALING, self.maxHeal, self.minHeal, CONST_ME_MAGIC_BLUE) end function defender:addTarget(_target) table.insert(self.targetList,_target) end function defender:clearTargetList() self.targetList = {} end function defender:setHitInterval(hitInterval) self.hitInterval = tonumber(hitInterval) end function defender:setShootEffect(shootEffect) self.shootEffect = shootEffect end function defender:setHitEffect(hitEffect) self.hitEffect = hitEffect end function defender:setTypeDmg(typeDmg) self.typeDmg = typeDmg end function defender:setSayText(sayText) self.sayText = tostring(sayText) end function defender:setDamage(minDmg,maxDmg) self.minDmg = tonumber(minDmg) self.maxDmg = tonumber(maxDmg) end function defender:setHeal(minHeal,maxHeal) self.minHeal = tonumber(minHeal) self.maxHeal = tonumber(maxHeal) end function defender:setHitSkulledPlayer(hitSkulledPlayer) self.hitSkulledPlayer = tonumber(hitSkulledPlayer) end function defender:setMultiAttack(multiAttack) self.multiAttack = tonumber(multiAttack) end function defender:setDmgRadius(dmgRadiusX,dmgRadiusY) self.dmgRadiusX = tonumber(dmgRadiusX) self.dmgRadiusY = tonumber(dmgRadiusY) end function defender:setHealRadius(healRadiusX,healRadiusY) self.healRadiusX = tonumber(healRadiusX) self.healRadiusY = tonumber(healRadiusY) end
Depois coloque-o no mapa
Quando ele mata um monstro
O monstro não dá loot
creditos : Gesior e Mehah