LucasFerraz
Systems Analyst
WHY THIS NPC DON'T WORK?
I made this NPC for War Servers.
His functions:
- Buff Magic level
- Buff Melee Skills
- Buff Shielding
- Buff Distane Fighting
- Buff Speed of character
- Buff regeneration of player
- Player can choose only one per time
I made this NPC for War Servers.
His functions:
- Buff Magic level
- Buff Melee Skills
- Buff Shielding
- Buff Distane Fighting
- Buff Speed of character
- Buff regeneration of player
- Player can choose only one per time
LUA:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
-- Buff Config beginning --
-- configs
vocation = getPlayerVocation(cid)
storage = 77700
pricetobuff = 2000
invisibleseconds = 600
magicshieldseconds = 600
regeseconds = 600
speedseconds = 600
skillsseconds = 600
skillsupgrade = {}
skillsupgrade['fist'] = 20
skillsupgrade['club'] = 20
skillsupgrade['sword'] = 20
skillsupgrade['axe'] = 20
skillsupgrade['distance'] = 20
skillsupgrade['shield'] = 20
skillsupgrade['ml'] = 10
-- end configs
function magicl(cid, message, keywords, parameters, node)
if(not npcHandler:isFocused(cid)) then
return false
end
if getPlayerMoney(cid) >= 5000 and (vocation == 1 or vocation == 2) and getPlayerStorageValue(cid,storage) == -1 then
doPlayerRemoveMoney(cid,5000)
local conditionMagic = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(condition, CONDITION_PARAM_BUFF, TRUE)
setConditionParam(conditionMagic, CONDITION_PARAM_TICKS, skillsseconds*1000)
setConditionParam(conditionMagic, CONDITION_PARAM_STAT_MAGICPOINTS, skillsupgrade['ml'])
selfSay('Your magic level has increased for ".. skillsseconds .."!', cid)
local guid = getPlayerGUID(cid)
setPlayerStorageValue(cid, storage, value)
addEvent(db.executeQuery, skillsseconds * 1000, "UPDATE `player_storage` SET `key` = " .. storage .. ", `value` = -1 WHERE `player_id` = " .. guid .. " LIMIT 1;")
else
selfSay('You don\'t have such money.', cid)
end
end
function invisible(cid, message, keywords, parameters, node)
if(not npcHandler:isFocused(cid)) then
return false
end
if getPlayerMoney(cid) >= 5000 and (vocation == 1 or vocation == 2) and getPlayerStorageValue(cid,storage) == -1 then
local combatInvisible = createCombatObject()
setConditionParam(condition, CONDITION_PARAM_BUFF, TRUE)
setCombatParam(combatInvisible, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED)
setCombatParam(combatInvisible, COMBAT_PARAM_AGGRESSIVE, 0)
local condition = createConditionObject(CONDITION_INVISIBLE)
setConditionParam(condition, CONDITION_PARAM_TICKS, invisibleseconds*1000)
setCombatCondition(combatInvisible, condition)
doPlayerRemoveMoney(cid,5000)
selfSay('You received invisibility for ".. invisibleseconds .."!', cid)
local guid = getPlayerGUID(cid)
setPlayerStorageValue(cid, storage, value)
addEvent(db.executeQuery, invisibleseconds * 1000, "UPDATE `player_storage` SET `key` = " .. storage .. ", `value` = -1 WHERE `player_id` = " .. guid .. " LIMIT 1;")
else
selfSay('You don\'t have such money.', cid)
end
end
function melee(cid, message, keywords, parameters, node)
if(not npcHandler:isFocused(cid)) then
return false
end
if getPlayerMoney(cid) >= 5000 and vocation == 4 and getPlayerStorageValue(cid,storage) == -1 then
local conditionMelee = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(condition, CONDITION_PARAM_BUFF, TRUE)
setConditionParam(conditionMelee, CONDITION_PARAM_TICKS, skillsseconds*1000)
setConditionParam(conditionMelee, CONDITION_PARAM_SKILL_FIST, skillsupgrade['fist'])
setConditionParam(conditionMelee, CONDITION_PARAM_SKILL_CLUB, skillsupgrade['club'])
setConditionParam(conditionMelee, CONDITION_PARAM_SKILL_SWORD, skillsupgrade['sword'])
setConditionParam(conditionMelee, CONDITION_PARAM_SKILL_AXE, skillsupgrade['axe'])
doPlayerRemoveMoney(cid,5000)
selfSay('Your Melee Skills has increased for ".. skillsseconds .."!', cid)
local guid = getPlayerGUID(cid)
setPlayerStorageValue(cid, storage, value)
addEvent(db.executeQuery, skillsseconds * 1000, "UPDATE `player_storage` SET `key` = " .. storage .. ", `value` = -1 WHERE `player_id` = " .. guid .. " LIMIT 1;")
else
selfSay('You don\'t have such money.', cid)
end
end
function distance(cid, message, keywords, parameters, node)
if(not npcHandler:isFocused(cid)) then
return false
end
if getPlayerMoney(cid) >= 5000 and vocation == 3 and getPlayerStorageValue(cid,storage) == -1 then
local conditionDistance = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(condition, CONDITION_PARAM_BUFF, TRUE)
setConditionParam(conditionDistance, CONDITION_PARAM_TICKS, skillsseconds*1000)
setConditionParam(conditionDistance, CONDITION_PARAM_SKILL_DISTANCE, skillsupgrade['distance'])
doPlayerRemoveMoney(cid,5000)
selfSay('Your Distance Skill has increased for ".. skillsseconds .."!', cid)
local guid = getPlayerGUID(cid)
setPlayerStorageValue(cid, storage, value)
addEvent(db.executeQuery, skillsseconds * 1000, "UPDATE `player_storage` SET `key` = " .. storage .. ", `value` = -1 WHERE `player_id` = " .. guid .. " LIMIT 1;")
else
selfSay('You don\'t have such money.', cid)
end
end
function shield(cid, message, keywords, parameters, node)
if(not npcHandler:isFocused(cid)) then
return false
end
if getPlayerMoney(cid) >= 5000 and (vocation == 3 or vocation == 4) and getPlayerStorageValue(cid,storage) == -1 then
local conditionShield = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(condition, CONDITION_PARAM_BUFF, TRUE)
setConditionParam(conditionShield, CONDITION_PARAM_TICKS, skillsseconds*1000)
setConditionParam(conditionShield, CONDITION_PARAM_SKILL_SHIELD, skillsupgrade['shield'])
doPlayerRemoveMoney(cid,5000)
selfSay('Your Shielding Skill has increased for ".. skillsseconds .."!', cid)
local guid = getPlayerGUID(cid)
setPlayerStorageValue(cid, storage, value)
addEvent(db.executeQuery, skillsseconds * 1000, "UPDATE `player_storage` SET `key` = " .. storage .. ", `value` = -1 WHERE `player_id` = " .. guid .. " LIMIT 1;")
else
selfSay('You don\'t have such money.', cid)
end
end
function magicshield(cid, message, keywords, parameters, node)
if(not npcHandler:isFocused(cid)) then
return false
end
if getPlayerMoney(cid) >= 5000 and (vocation == 1 or vocation == 2 or vocation == 4) and getPlayerStorageValue(cid,storage) == -1 then
local combatUtamo = createConditionObject(CONDITION_MANASHIELD)
setConditionParam(condition, CONDITION_PARAM_BUFF, TRUE)
setConditionParam(condition, CONDITION_PARAM_TICKS, magicshieldseconds*1000)
setCombatCondition(combatUtamo, condition)
doPlayerRemoveMoney(cid,5000)
selfSay('You received a Magic Shield for ".. magicshieldseconds .."!', cid)
local guid = getPlayerGUID(cid)
setPlayerStorageValue(cid, storage, value)
addEvent(db.executeQuery, magicshieldseconds * 1000, "UPDATE `player_storage` SET `key` = " .. storage .. ", `value` = -1 WHERE `player_id` = " .. guid .. " LIMIT 1;")
else
selfSay('You don\'t have such money.', cid)
end
end
function regener(cid, message, keywords, parameters, node)
if(not npcHandler:isFocused(cid)) then
return false
end
if getPlayerMoney(cid) >= 5000 and getPlayerStorageValue(cid,storage) == -1 then
doPlayerRemoveMoney(cid,5000)
local condition = createConditionObject(CONDITION_REGENERATION)
setConditionParam(condition, CONDITION_PARAM_BUFF, TRUE)
setConditionParam(condition, CONDITION_PARAM_TICKS, regeseconds*1000)
setConditionParam(condition, CONDITION_PARAM_HEALTHGAIN, 20)
setConditionParam(condition, CONDITION_PARAM_HEALTHTICKS, 2000)
selfSay('Your regeneration has increased for ".. regeseconds .."!', cid)
local guid = getPlayerGUID(cid)
setPlayerStorageValue(cid, storage, value)
addEvent(db.executeQuery, regeseconds * 1000, "UPDATE `player_storage` SET `key` = " .. storage .. ", `value` = -1 WHERE `player_id` = " .. guid .. " LIMIT 1;")
else
selfSay('You don\'t have such money.', cid)
end
end
function speed(cid, message, keywords, parameters, node)
if(not npcHandler:isFocused(cid)) then
return false
end
if getPlayerMoney(cid) >= 5000 and getPlayerStorageValue(cid,storage) == -1 then
doPlayerRemoveMoney(cid,5000)
local condition = createConditionObject(CONDITION_HASTE)
setConditionParam(condition, CONDITION_PARAM_TICKS, speedseconds*1000)
setConditionFormula(condition, 1.0, -86, 1.0, -86)
setCombatCondition(combat, condition)
selfSay('Your regeneration has increased for ".. speedseconds .."!', cid)
local guid = getPlayerGUID(cid)
setPlayerStorageValue(cid, storage, value)
addEvent(db.executeQuery, speedseconds * 1000, "UPDATE `player_storage` SET `key` = " .. storage .. ", `value` = -1 WHERE `player_id` = " .. guid .. " LIMIT 1;")
else
selfSay('You don\'t have such money.', cid)
end
end
-- Buff Config End --
keywordHandler:addKeyword({'help'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = "I can increase your {melee}, {distance}, {shielding}, {magic level}, {regeneration}, {invisibility}, {magic shield} and {speed}"})
local node1 = keywordHandler:addKeyword({'magic level'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to increase your magic level for a certain time?'})
node1:addChildKeyword({'yes'}, magicl, {npcHandler = npcHandler, onlyFocus = true, reset = true})
node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Alright then. Come back if you want an upgrade in your skills.', reset = true})
local node2 = keywordHandler:addKeyword({'invisibility'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to be invisible for a certain time?'})
node2:addChildKeyword({'yes'}, invisible, {npcHandler = npcHandler, onlyFocus = true, reset = true})
node2:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Alright then. Come back if you want an upgrade in your skills.', reset = true})
local node3 = keywordHandler:addKeyword({'melee'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to increase your melee skills for a certain time?'})
node3:addChildKeyword({'yes'}, melee, {npcHandler = npcHandler, onlyFocus = true, reset = true})
node3:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Alright then. Come back if you want an upgrade in your skills.', reset = true})
local node4 = keywordHandler:addKeyword({'distance'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to increase your distance skills for a certain time?'})
node4:addChildKeyword({'yes'}, distance, {npcHandler = npcHandler, onlyFocus = true, reset = true})
node4:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Alright then. Come back if you want an upgrade in your skills.', reset = true})
local node5 = keywordHandler:addKeyword({'shielding'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to increase your shielding skill for a certain time?'})
node5:addChildKeyword({'yes'}, shield, {npcHandler = npcHandler, onlyFocus = true, reset = true})
node5:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Alright then. Come back if you want an upgrade in your skills.', reset = true})
local node6 = keywordHandler:addKeyword({'magic shield'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to receive a magic shield for a certain time?'})
node6:addChildKeyword({'yes'}, magicshield, {npcHandler = npcHandler, onlyFocus = true, reset = true})
node6:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Alright then. Come back if you want an upgrade in your skills.', reset = true})
local node7 = keywordHandler:addKeyword({'regeneration'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to increase your regeneration for a certain time?'})
node7:addChildKeyword({'yes'}, regener, {npcHandler = npcHandler, onlyFocus = true, reset = true})
node7:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Alright then. Come back if you want an upgrade in your skills.', reset = true})
local node8 = keywordHandler:addKeyword({'speed'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to increase your speed for a certain time?'})
node8:addChildKeyword({'yes'}, speed, {npcHandler = npcHandler, onlyFocus = true, reset = true})
node8:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Alright then. Come back if you want an upgrade in your skills.', reset = true})
npcHandler:addModule(FocusModule:new())
Last edited: