chojrak
Banned User
- Joined
- Oct 25, 2008
- Messages
- 5,832
- Solutions
- 2
- Reaction score
- 160
Hello, I wrote to you interesting NPC.
Functions:
Configuration
Mastah.xml:
mastah.lua:
YouTube Presentation: YouTube - Hunting Assistance
Tested on The Forgotten Server 0.3.4pl2
Always sorry for my bad english
Functions:
Code:
[LIST][*]Healer
[*]Mana Restore
[*]Rune Shoot
[*]Spell Use
[*]Anty Paralyze
[/LIST]
Configuration
Code:
[B]_- Basic -_[/B]
[B]ownerName[/B] - Your character name.
[B]_- Healer -_[/B]
[B]enabled[/B] - Do you want to use healer?
[B]sayWord[/B] - Do you want to NPC say 'exura sio "your name'?
[B]healthToHeal[/B] - NPC will use healing spell when your health is minor than this value.
[B]min[/B] - Min. healing damage.
[B]max[/B] - Max. healing damage.
[B]_- Mana Restorer -_[/B]
[B]enabled[/B] - Do you want to use restorer?
[B]manaToRestore[/B] - NPC will restore your mana when mana point is minor than this value.
[B]min[/B] - Min. mana restore value.
[B]max[/B] - Max. mana restore value.
[B]_- Rune Shooter -_[/B]
[B]enabled[/B] - Do you want to use rune shooter?
[B]delay[/B] - Interval between hits. (In seconds.)
[B]effect[/B] - Rune's hit effect.
[B]shootEffect[/B] - Rune's shoot effect.
[B]combat[/B] - Rune's combat type.
[B]min[/B] - Min. rune's damage.
[B]max[/B] - Max. rune's damage
[B]_- Spell Caster -_[/B]
[B]enabled[/B] - Do you want to use spell caster?
[B]sayWord[/B] - Do you want to NPC say 'spell word'?
[B]delay[/B] - Interval between casts.
[B]combat[/B] - Spell's combat type.
[B]area[/B] - Spell's area.
[B]word[/B] - Spell word.
[B]effect[/B] - Spell's effect.
[B]min[/B] - Min. spell's damage.
[B]max[/B] - Max. spell's damage.
[B]_- Anty Paralyze -_[/B]
[B]enabled[/B] - Do you want to use anty paralyze?
[B]_- Magic Keywords -_[/B]
[B]disappear[/B] - NPC will disappear.
[B]kick[/B] - NPC will kick you.
Mastah.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>
mastah.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
YouTube Presentation: YouTube - Hunting Assistance
Tested on The Forgotten Server 0.3.4pl2
Always sorry for my bad english
Last edited: