• 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] pet system!! Need some help with this mess!

tobias89

Pikaz Liek Pikaz
Joined
Apr 24, 2010
Messages
110
Reaction score
0
I came across this script on the interwebs! but i can't get it fully to work.

It needs:

IT WONT ATTACK ON SPEC!! BIG PROBLEM!!

A better teleporter system. (Follow)
Make it so that its allways under you when you are PKing hunting.

Oh and when you log of, it should go to its NPC pos.


(Maybe add acc level 6 and /goto Character_name?
thats basicly what it needs.

PHP:
-- Load spell area's data.
dofile(getDataDir() .. "spells/lib/spells.lua")
 
-- Basic Config
local basic = {
        ownerName = "OWNER_NAME_HERE"
}
 
-- Healer Config
local healer = {
        enabled = TRUE,
        sayWord = FALSE,
        healthToHeal = 2000,
        min = 70,
        max = 111
}
-- Mana Restore Config
local manaRestore = {
        enabled = TRUE,
        manaToRestore = 1500,
        min = 90,
        max = 100
}
-- Rune Config
local rune = {
        enabled = TRUE,
        lastShoot = os.clock(), -- Don't touch!
        delay = 1,
        effect = CONST_ME_MORTAREA,
        shootEffect = CONST_ANI_SUDDENDEATH,
        combat = COMBAT_DEATHDAMAGE,
        min = 300,
        max = 400
}
-- Spell Config
local spell = {
        enabled = FALSE,
        sayWord = TRUE,
        lastCast = os.clock(), -- Don't touch!
        delay = 3,
        combat = COMBAT_ICEDAMAGE,
        area = createCombatArea(AREA_CROSS5X5),
        word = "Exevo Gran Mas Frigo",
        effect = CONST_ME_ICETORNADO,
        min = 700,
        max = 1000
}
-- Anty Paralyze
local antyPara = {
        enabled = TRUE
}
 
-- Don't touch below!
local owner = 0
local target = FALSE
 
local function findOwner()
        local list = getSpectators(getNpcPos(), 9, 9, false)
        if (#list > 0) then
                for i = 1, #list do
                        local _target = list[i]
                        if (_target ~= 0) then
                                if (getCreatureName(_target) == basic.ownerName) then
                                        selfSay("Hi ".. basic.ownerName .."!")
                                        selfFollow(_target)
                                        owner = _target
                                end
                        end
                end
        end
end
 
local function doHealOwner()
        if (getCreatureHealth(owner) < healer.healthToHeal) then
                if (healer.sayWord) then
                        doCreatureSay(getNpcCid(), "Exura Sio ".. basic.ownerName.."", TALKTYPE_ORANGE_1)
                end
                doCreatureAddHealth(owner, math.random(healer.min, healer.max))
                doSendMagicEffect(getCreaturePosition(getNpcCid()), CONST_ME_MAGIC_BLUE)
                doSendMagicEffect(getCreaturePosition(owner), CONST_ME_MAGIC_GREEN)
        end
end
 
local function doRestoreMana()
        if (getPlayerMana(owner) < manaRestore.manaToRestore) then
                doPlayerAddMana(owner, math.random(manaRestore.min, manaRestore.max))
                doSendMagicEffect(getCreaturePosition(owner), CONST_ME_MAGIC_BLUE)
        end
end
 
local function doUseRune()
        target = TRUE
        local shooted = TRUE
        local r_list = getSpectators(getNpcPos(), 9, 9, false)
        if (#r_list > 0) then
                for i = 1, #r_list do
                        local r_target = r_list[i]
                        if (isPlayer(r_target) == FALSE and isNpc(r_target) == FALSE and getNpcCid() ~= r_target and shooted == FALSE) then
                                local tPos = getCreaturePosition(r_target)
                                doSendMagicEffect(tPos, rune.effect)
                                doSendDistanceShoot(getCreaturePosition(getNpcCid()), tPos, rune.shootEffect)
                                doTargetCombatHealth(getNpcCid(), r_target, rune.combat, -rune.min, -rune.max, rune.effect)
                                shooted = TRUE
                                target = TRUE
                        end
                end
        end
end
 
local function doCastSpell()
        if (spell.sayWord) then
                doCreatureSay(getNpcCid(), spell.word, TALKTYPE_ORANGE_1)
        end
 
        doAreaCombatHealth(getNpcCid(), spell.combat, getCreaturePosition(getNpcCid()), spell.area, -spell.min, -spell.max, spell.effect)
end
 
local function doRemovePara()
        if (hasCondition(owner, CONDITION_PARALYZE)) then
                doRemoveCondition(owner, CONDITION_PARALYZE)
                doSendMagicEffect(getCreaturePosition(owner), CONST_ME_MAGIC_GREEN)
        end
end
 
function onCreatureDisappear(cid)
        if (cid == owner) then
                owner = 0
        end
end
 
function onCreatureSay(cid, type, msg)
        if (cid == owner) then
                if  (msg == "disappear") then
                        selfSay("Good bye ;)")
                        doHealOwner()
                        doRestoreMana()
                        doRemoveCreature(getNpcCid())
                end
        end
end
 
function onThink()
        -- Try to find owner, if he's not already found.
        if (owner == 0) then
                findOwner()
                return
        end
 
        -- Update following
        selfFollow(owner)
 
        -- On floor change
        local myPos = getCreaturePosition(getNpcCid())
        local ownerPos = getCreaturePosition(owner)
        if (myPos.z ~= ownerPos.z) then
                doSendMagicEffect(myPos, CONST_ME_POFF)
                doTeleportThing(getNpcCid(), ownerPos)
                doSendMagicEffect(ownerPos, CONST_ME_TELEPORT)
        end
 
        -- Healer
        if (healer.enabled) then
                doHealOwner()
        end
 
        -- Mana Restore
        if (manaRestore.enabled) then
                doRestoreMana()
        end
 
        -- Shoot Rune
        if (rune.enabled and rune.lastShoot < os.clock()) then
                rune.lastShoot = (os.clock()+rune.delay)
                doUseRune()
        end
 
        -- Cast Spell
        if (spell.enabled and target ~= FALSE and spell.lastCast < os.clock()) then
                spell.lastCast = (os.clock()+spell.delay)
                doCastSpell()
        end
 
        -- Anty Paralyze
        if (antyPara.enabled) then
                doRemovePara()
        end
end
 
Back
Top