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

tobias89

Pikaz Liek Pikaz
Joined
Apr 24, 2010
Messages
110
Reaction score
0
Im not that good with scripting.. and ive tried for allmost 2 days now.. So im guessing it has alot of bugs...

Could somebody please help a poor guy in distress :p


I WILL REP++





Configuration:

Code:
_- Basic -_
ownerName - Your character name.

_- Healer -_
enabled - Do you want to use healer?
sayWord - Do you want to NPC say 'exura sio "your name'?
healthToHeal - NPC will use healing spell when your health is minor than this value.
min - Min. healing damage.
max - Max. healing damage.

_- Mana Restorer -_
enabled - Do you want to use restorer?
manaToRestore - NPC will restore your mana when mana point is minor than this value.
min - Min. mana restore value.
max - Max. mana restore value.

_- Rune Shooter -_
enabled - Do you want to use rune shooter?
delay - Interval between hits. (In seconds.)
effect - Rune's hit effect.
shootEffect - Rune's shoot effect.
combat - Rune's combat type.
min - Min. rune's damage.
max - Max. rune's damage

_- Spell Caster -_
enabled - Do you want to use spell caster?
sayWord - Do you want to NPC say 'spell word'?
delay - Interval between casts.
combat - Spell's combat type.
area - Spell's area.
word - Spell word.
effect - Spell's effect.
min - Min. spell's damage.
max - Max. spell's damage.

_- Anty Paralyze -_
enabled - Do you want to use anty paralyze?

_- Magic Keywords -_
disappear - NPC will disappear.
kick - NPC will kick you.

XML:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Mastah" script="data/npc/scripts/mastah.lua" speed="1200" walkinterval="0" floorchange="0">
        <health now="1500" max="1500"/>
        <look type="289" addons="3" head="0" body="0" legs="0" feet="0" corpse="2317"/>
</npc>



LUA
Code:
-- Load spell area's data.
dofile(getDataDir() .. "spells/lib/spells.lua"

-- Basic Config
local basic = {
        ownerName = "Meeow" -- Your character name.
}

-- Healer Config
local healer = {
        enabled = TRUE,
        sayWord = TRUE,
        healthToHeal = 4000,
        min = 700,
        max = 1200
}
-- Mana Restore Config
local manaRestore = {
        enabled = TRUE,
        manaToRestore = 800,
        min = 150,
        max = 300
}
-- 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 = 750,
        max = 1100
}
-- Spell Config
local spell = {
        enabled = TRUE,
        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 = FALSE
        local shooted = FALSE
        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())
                elseif (msg == "kick" then
                        doRemoveCreature(cid)
                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

Thank you
 
Last edited:
Back
Top