• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

city guard npc

GregoryJ

New Member
Joined
Sep 8, 2013
Messages
21
Reaction score
0
Hello,

I'm looking for a guard npc that attacks monsters that get to close to the city, and not attacking other npcs. I've searched for this and can't get any of them to work.

Thanks for looking
 
Code:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Guarda Lancelot" script="data/npc/scripts/Guarda Lancelot.lua" walkinterval="2000" floorchange="0" speed="1500">
<health now="40000" max="40000"/>
<look type="134" head="78" body="114" legs="0" feet="58" addons="2" mount="426" corpse="6080"/>
<targetchange interval="5000" chance="8"/>
<strategy attack="100" defense="0"/>
<flags>
<flag summonable="0"/>
<flag attackable="1"/>
<flag hostile="1"/>
<flag illusionable="0"/>
<flag convinceable="0"/>
<flag pushable="0"/>
<flag canpushitems="1"/>
<flag canpushcreatures="1"/>
<flag targetdistance="3"/>
<flag staticattack="50"/>
<flag runonhealth="10000"/>
</flags>
</npc>

Code:
-- Npc Guarda --
local target = 0
local prevTarget = 0
local maxChaseDistance = 7
local origPos = 0
local lastAttack = 0
local followTimeout = 10
local function goToOrigPos()
target = 0
lastAttack  = 0
selfFollow(0)
doSteerCreature(getNpcCid(), origPos)
end
local function updateTarget()
if(target == 0) then
local myPos = getNpcPos()
if(math.abs(myPos.x - origPos.x) < maxChaseDistance or math.abs(myPos.y - origPos.y) < maxChaseDistance) then
local list = getSpectators(getNpcPos(), 5, 5, false)
for i = 1, table.getn(list) do
local _target = list[i]
if(_target ~= 0) then
local monster = {"Wolf", "Snake", "Troll", "Bug"}
if(isInArray(monster, getCreatureName(_target))) then
if(not getTilePzInfo(getCreaturePosition(_target))) then
if(selfFollow(_target)) then
target = _target
if(target ~= prevTarget) then
selfSay("Everyone get to safety! I'll take care of this "..getCreatureName(_target).."!")
end
prevTarget = target
break
end
end
end
end
end
end
end
end
function onCreatureAppear(cid)
if(cid == getNpcCid()) then
origPos = getNpcPos()
end
end
function onCreatureDisappear(cid)
if(cid == target) then
goToOrigPos()
end
end
function onCreatureMove(creature, oldPos, newPos)
--
end
function onThink()
updateTarget()
if(target == 0) then
return
end
local playerPos = getCreaturePosition(target)
local myPos = getNpcPos()
if(myPos.z ~= playerPos.z) then
goToOrigPos()
return
end
if(math.abs(myPos.x - origPos.x) > maxChaseDistance or math.abs(myPos.y - origPos.y) > maxChaseDistance) then
selfSay("I'll get it next time...")
goToOrigPos()
return
end
if(lastAttack == 0) then
lastAttack = os.clock()
end
if(os.clock() - lastAttack > followTimeout) then
selfSay("I'll get you next time.")
goToOrigPos()
return
end
if((math.abs(playerPos.x - myPos.x) <= 1) and (math.abs(playerPos.y - myPos.y) <= 1)) then
doTargetCombatHealth(getNpcCid(), target, COMBAT_LIFEDRAIN, -5, -25, CONST_ME_BLOCKHIT)
lastAttack = os.clock()
end
end
 
Back
Top Bottom