Olá,
Estou postando aqui meu npc.lua, possui várias funções para scripters que, como eu, não utilizam o sistema Jiddo.
function selfIdle() following = false attacking = false selfAttackCreature(0) target = 0 end function selfSayChannel(cid, message) return selfSay(message, cid, false) end function selfMoveToCreature(id) if(not id or id == 0) then return end local t = getCreaturePosition(id) if(not t.x or t.x == nil) then return end selfMoveTo(t.x, t.y, t.z) return end function getNpcDistanceTo(id) if(not id or id == 0) then selfIdle() return nil end local c = getCreaturePosition(id) if(not c.x or c.x == 0) then return nil end local s = getCreaturePosition(getNpcId()) if(not s.x or s.x == 0 or s.z ~= c.z) then return nil end return math.max(math.abs(s.x - c.x), math.abs(s.y - c.y)) end function doMessageCheck(message, keyword) if(type(keyword) == "table") then return table.isStrIn(message, keyword) end local a, b = message:lower():find(keyword:lower()) if(a ~= nil and b ~= nil) then return true end return false end function doNpcSellItem(cid, itemid, amount, subType, ignoreCap, inBackpacks, backpack) local amount = amount or 1 local subType = subType or 1 local ignoreCap = ignoreCap and true or false local item = 0 if(isItemStackable(itemid)) then if(isItemRune(itemid)) then amount = amount * subType end local count = amount repeat item = doCreateItemEx(itemid, math.min(100, count)) if(doPlayerAddItemEx(cid, item, ignoreCap) ~= RETURNVALUE_NOERROR) then return 0, 0 end count = count - math.min(100, count) until count == 0 return amount, 0 end local a = 0 if(inBackpacks) then local container = doCreateItemEx(backpack, 1) local b = 1 for i = 1, amount do item = doAddContainerItem(container, itemid, subType) if(itemid == ITEM_PARCEL) then doAddContainerItem(item, ITEM_LABEL) end if(isInArray({(getContainerCapById(backpack) * b), amount}, i)) then if(doPlayerAddItemEx(cid, container, ignoreCap) ~= RETURNVALUE_NOERROR) then b = b - 1 break end a = i if(amount > i) then container = doCreateItemEx(backpack, 1) b = b + 1 end end end return a, b end for i = 1, amount do item = doCreateItemEx(itemid, subType) if(itemid == ITEM_PARCEL) then doAddContainerItem(item, ITEM_LABEL) end if(doPlayerAddItemEx(cid, item, ignoreCap) ~= RETURNVALUE_NOERROR) then break end a = i end return a, 0 end function doRemoveItemIdFromPos(id, n, position) local thing = getThingFromPos({x = position.x, y = position.y, z = position.z, stackpos = 1}) if(thing.itemid ~= id) then return false end doRemoveItem(thing.uid, n) return true end function getNpcName() return getCreatureName(getNpcId()) end function getNpcPos() return getCreaturePosition(getNpcId()) end function selfGetPosition() local t = getNpcPos() return t.x, t.y, t.z end function isFocused(cid, t) for i, v in pairs(t) do if(v == cid) then return true end end return false end function addFocus(focus, t) if(not isFocused(focus, t)) then table.insert(t, focus) end end function setFocus(t) for i, v in pairs(t) do if(isPlayer(v)) then doNpcSetCreatureFocus(v) return end end doNpcSetCreatureFocus(0) end function removeFocus(cid, t) for i, v in pairs(t) do if(v == cid) then table.remove(t, i) selfFocus(0) break end end end msgcontains = doMessageCheck moveToPosition = selfMoveTo moveToCreature = selfMoveToThing selfMoveToCreature = selfMoveToThing selfMoveToPosition = selfMoveTo isPlayerPremiumCallback = isPremium doPosRemoveItem = doRemoveItemIdFromPosition doRemoveItemIdFromPos = doRemoveItemIdFromPosition doNpcBuyItem = doPlayerRemoveItem doNpcSetCreatureFocus = selfFocus getNpcCid = getNpcId lookAtFocus = setFocus getDistanceTo = getNpcDistanceTo getDistanceToCreature = getNpcDistanceTo getNpcDistanceToCreature = getNpcDistanceTo
Observação: Qualquer script de NPC postado no fÓrum por mim, exigirá essa lib.