• 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!

NPC Guards ~ Solved! script if needed from cykotitan <3

calum69

New Member
Joined
Aug 12, 2007
Messages
346
Reaction score
3
Location
Great Britain
ive seen on a few OT's people have npc guards that attack the enemy

Credits to Cykotitan

Script:

LUA:
  local target =  0
local prevTarget = 0
local maxChaseDistance = 20
local origPos = 0
local lastAttack = 0
local followTimeout = 10

local function isSkulled(cid)
        if(getPlayerStorageValue(cid, 8435) > 0) then
                return true
        end

        return false
end

local function goToOrigPos()
        target = 0
        lastAttack  = 0
        selfFollow(0)
        doTeleportThing(getNpcCid(), origPos)
end

local function updateTarget()
        if(not isPlayer(target)) then
                goToOrigPos()
        elseif(not isSkulled(target)) then
                selfSay("Now, behave in the future.")
                goToOrigPos()
        end

        if(target == 0) then
                local list = getSpectators(getNpcPos(), 9, 9, false)
                for i = 1, table.getn(list) do
                        local _target = list[i]
                        if(_target ~= 0) then
                                if(isPlayer(_target) and isSkulled(_target)) then
                                        if(not getTilePzInfo(getCreaturePosition(_target))) then
                                                if(selfFollow(_target)) then
                                                        target = _target
                                                        if(target ~= prevTarget) then
                                                                selfSay("We do not tolerate people like you here!")
                                                        end

                                                        prevTarget = target
                                                        break
                                                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 catch you next time.")
                goToOrigPos()
                return
        end

        if(lastAttack == 0) then
                lastAttack = os.clock()
        end

        if(os.clock() - lastAttack > followTimeout) then
                selfSay("You got me this time, but just wait.")
                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, -200, -300, CONST_ME_BLOCKHIT)
                lastAttack = os.clock()
        end
end
 
Last edited:
With love to Cykotitan for this one here is the script if anyone else needs it.

LUA:
local target = 0
local prevTarget = 0
local maxChaseDistance = 20
local origPos = 0
local lastAttack = 0
local followTimeout = 10

local function isSkulled(cid)
	if(getPlayerStorageValue(cid, 8435) > 0) then
		return true
	end

	return false
end

local function goToOrigPos()
	target = 0
	lastAttack  = 0
	selfFollow(0)
	doTeleportThing(getNpcCid(), origPos)
end

local function updateTarget()
	if(not isPlayer(target)) then
		goToOrigPos()
	elseif(not isSkulled(target)) then
		selfSay("Now, behave in the future.")
		goToOrigPos()
	end

	if(target == 0) then
		local list = getSpectators(getNpcPos(), 9, 9, false)
		for i = 1, table.getn(list) do
			local _target = list[i]
			if(_target ~= 0) then
				if(isPlayer(_target) and isSkulled(_target)) then
					if(not getTilePzInfo(getCreaturePosition(_target))) then
						if(selfFollow(_target)) then
							target = _target
							if(target ~= prevTarget) then
								selfSay("We do not tolerate people like you here!")
							end

							prevTarget = target
							break
						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 catch you next time.")
		goToOrigPos()
		return
	end

	if(lastAttack == 0) then
		lastAttack = os.clock()
	end

	if(os.clock() - lastAttack > followTimeout) then
		selfSay("You got me this time, but just wait.")
		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, -200, -300, CONST_ME_BLOCKHIT)
		lastAttack = os.clock()
	end
end
 
Back
Top