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

Lua [NPC] Edit this script, please.

Geza1927


Joined
Mar 23, 2008
Messages
358
Reaction score
43
Location
Poland
-
Hey, can some one edit this script?

I want npc attacking, monsters not peoples with skull.
This should attack wolves, near city gate
.
-


Code:
local target = 0
local prevTarget = 0
local maxChaseDistance = 20
local origPos = 0
local lastAttack = 0
local followTimeout = 10
 
local function isSkulled(cid)
	if(getCreatureSkullType(cid) >= SKULL_WHITE and isPlayerPzLocked(cid)) 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
 
didn't tested:

Lua:
local target = 0
local prevTarget = 0
local maxChaseDistance = 20
local origPos = 0
local lastAttack = 0
local followTimeout = 10
 
local function goToOrigPos()
	target = 0
	lastAttack  = 0
	selfFollow(0)
	doTeleportThing(getNpcCid(), origPos)
end
 
local function updateTarget()
	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(getCreatureName(_target):lower() == "wolf") 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