1
[CreatureEvents] Npc no mantiene el storage de buff Miér Nov 03, 2021 4:05 am
Morfar

Miembro

Descripcion escribió:Amigos buenas noches que tal nuevamente solicitando de su apoyo con este sistema que encontre el sistema funciona como tal es un npc que te da un buff temporal a tu eleccion, el problema es que al logear o morir pierdes el buff, entonces coloque el siguiente storage en creaturescriptsSi mantiene el tiempo ya que no me permite pedirle al npc el buff, el problema si logeo o muero pierdo el buff que pedi pero el tiempo si me lo mantiene ya que no me deja pedirle al npc nuevamente el buff hasta pasar el tiempo ojala puedan ayudarme les adjunto el script es tfs 0.4 dev 8.6
- Código:
function onLogin(cid)
if isPlayer(cid) then
setPlayerStorageValue(cid, 77700, -1)
end
return true
end
- Código:
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
local config = {
storage = 77700,
value = 1,
}
money = 2000
invisibleseconds = 600
magicshieldseconds = 600
regeseconds = 600
speedseconds = 600
skillsseconds = 600
skillsupgrade = {}
skillsupgrade['fist'] = 130
skillsupgrade['club'] = 130
skillsupgrade['sword'] = 130
skillsupgrade['axe'] = 135
skillsupgrade['distance'] = 60
skillsupgrade['shield'] = 50
skillsupgrade['ml'] = 10
-- end configs
-- Configs of buffs
local conditionMagic = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(conditionMagic, CONDITION_PARAM_BUFF, true)
setConditionParam(conditionMagic, CONDITION_PARAM_TICKS, skillsseconds * 1000)
setConditionParam(conditionMagic, CONDITION_PARAM_STAT_MAGICLEVEL, skillsupgrade['ml'])
local combatInvisible = createConditionObject(CONDITION_INVISIBLE)
setConditionParam(combatInvisible, CONDITION_PARAM_BUFF, true)
setConditionParam(combatInvisible, CONDITION_PARAM_TICKS, invisibleseconds*1000)
local conditionMelee = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(conditionMelee, CONDITION_PARAM_BUFF, true)
setConditionParam(conditionMelee, CONDITION_PARAM_TICKS, skillsseconds*5600)
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'])
local conditionDistance = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(conditionDistance, CONDITION_PARAM_BUFF, true)
setConditionParam(conditionDistance, CONDITION_PARAM_TICKS, skillsseconds*5600)
setConditionParam(conditionDistance, CONDITION_PARAM_SKILL_DISTANCE, skillsupgrade['distance'])
local conditionShield = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(conditionShield, CONDITION_PARAM_BUFF, true)
setConditionParam(conditionShield, CONDITION_PARAM_TICKS, skillsseconds*1000)
setConditionParam(conditionShield, CONDITION_PARAM_SKILL_SHIELD, skillsupgrade['shield'])
local combatUtamo = createConditionObject(CONDITION_MANASHIELD)
setConditionParam(combatUtamo, CONDITION_PARAM_BUFF, true)
setConditionParam(combatUtamo, CONDITION_PARAM_TICKS, magicshieldseconds*1000)
local conditionRege = createConditionObject(CONDITION_REGENERATION)
setConditionParam(conditionRege, CONDITION_PARAM_BUFF, true)
setConditionParam(conditionRege, CONDITION_PARAM_TICKS, regeseconds*1000)
setConditionParam(conditionRege, CONDITION_PARAM_HEALTHGAIN, 20)
setConditionParam(conditionRege, CONDITION_PARAM_HEALTHTICKS, 2000)
local conditionspeed = createConditionObject(CONDITION_HASTE)
setConditionParam(conditionspeed, CONDITION_PARAM_BUFF, true)
setConditionParam(conditionspeed, CONDITION_PARAM_TICKS, speedseconds*1000)
setConditionFormula(conditionspeed, 1.0, -86, 1.0, -86)
-- Configs of buffs
function magicl(cid, message, keywords, parameters, node)
local guid = getPlayerGUID(cid)
if not npcHandler:isFocused(cid) then
return false
end
if (isPlayer(cid) or isSorcerer(cid)) and getCreatureStorage(cid, config.storage) == -1 then
if getPlayerMoney(cid) >= 50000 then
doPlayerRemoveMoney(cid, 50000)
doAddCondition(cid, conditionMagic)
npcHandler:say('Your magic level has increased for 10 minutes!', cid)
setPlayerStorageValue(cid, config.storage, config.value)
addEvent(db.executeQuery, skillsseconds * 1000, "UPDATE `player_storage` SET `key` = " .. config.storage .. ", `value` = -1 WHERE `player_id` = " .. guid .. " LIMIT 1;")
else
npcHandler:say('You don\'t have such money.', cid)
end
else
npcHandler:say('You must be a druid or a sorcerer to receive this increment.', cid)
end
end
function invisible(cid, message, keywords, parameters, node)
local guid = getPlayerGUID(cid)
if not npcHandler:isFocused(cid) then
return false
end
if (isPlayer(cid) or isSorcerer(cid)) and getCreatureStorage(cid, config.storage) == -1 then
if getPlayerMoney(cid) >= 50000 then
doPlayerRemoveMoney(cid, 50000)
npcHandler:say('You received invisibility for 10 minutes!', cid)
doAddCondition(cid, combatInvisible)
setPlayerStorageValue(cid, config.storage, config.value)
addEvent(db.executeQuery, invisibleseconds * 1000, "UPDATE `player_storage` SET `key` = " .. config.storage .. ", `value` = -1 WHERE `player_id` = " .. guid .. " LIMIT 1;")
else
npcHandler:say('You don\'t have such money.', cid)
end
else
npcHandler:say('You must be a druid or a sorcerer to receive this increment.', cid)
end
end
function melee(cid, message, keywords, parameters, node)
local guid = getPlayerGUID(cid)
if not npcHandler:isFocused(cid) then
return false
end
if isPlayer(cid) and getCreatureStorage(cid, config.storage) == -1 then
if getPlayerMoney(cid) >= 50000 then
doPlayerRemoveMoney(cid, 50000)
doAddCondition(cid, conditionMelee)
npcHandler:say('Your Melee Skills has increased for 60 minutes!', cid)
setPlayerStorageValue(cid, config.storage, config.value)
addEvent(db.executeQuery, skillsseconds * 1000, "UPDATE `player_storage` SET `key` = " .. config.storage .. ", `value` = -1 WHERE `player_id` = " .. guid .. " LIMIT 1;")
else
npcHandler:say('You don\'t have such money.', cid)
end
else
npcHandler:say('You must be a knight to receive this increment.', cid)
end
end
function distance(cid, message, keywords, parameters, node)
local guid = getPlayerGUID(cid)
if not npcHandler:isFocused(cid) then
return false
end
if isPlayer(cid) and getCreatureStorage(cid, config.storage) == -1 then
if getPlayerMoney(cid) >= 50000 then
doPlayerRemoveMoney(cid, 50000)
doAddCondition(cid, conditionDistance)
npcHandler:say('Your Distance Skill has increased for 60 minutes!', cid)
setPlayerStorageValue(cid, config.storage, config.value)
addEvent(db.executeQuery, skillsseconds * 1000, "UPDATE `player_storage` SET `key` = " .. config.storage .. ", `value` = -1 WHERE `player_id` = " .. guid .. " LIMIT 1;")
else
npcHandler:say('You don\'t have such money.', cid)
end
else
npcHandler:say('You must be a Paladin to receive this increment.', cid)
end
end
function shield(cid, message, keywords, parameters, node)
local guid = getPlayerGUID(cid)
if not npcHandler:isFocused(cid) then
return false
end
if (isPaladin(cid) or isKnight(cid)) and getCreatureStorage(cid, config.storage) == -1 then
if getPlayerMoney(cid) >= 50000 then
doPlayerRemoveMoney(cid, 50000)
doAddCondition(cid, conditionShield)
npcHandler:say('Your Shielding Skill has increased for 10 minutes!', cid)
setPlayerStorageValue(cid, config.storage, config.value)
addEvent(db.executeQuery, skillsseconds * 1000, "UPDATE `player_storage` SET `key` = " .. config.storage .. ", `value` = -1 WHERE `player_id` = " .. guid .. " LIMIT 1;")
else
npcHandler:say('You don\'t have such money.', cid)
end
else
npcHandler:say('You must be a Paladin or a Knight to receive this increment.', cid)
end
end
function magicshield(cid, message, keywords, parameters, node)
local guid = getPlayerGUID(cid)
if not npcHandler:isFocused(cid) then
return false
end
if (isPaladin(cid) or isDruid(cid) or isSorcerer(cid) or isPlayer(cid)) and getCreatureStorage(cid, config.storage) == -1 then
if getPlayerMoney(cid) >= 50000 then
doPlayerRemoveMoney(cid, 50000)
doAddCondition(cid, combatUtamo)
npcHandler:say('You received a Magic Shield for 10 minutes!', cid)
setPlayerStorageValue(cid, config.storage, config.value)
addEvent(db.executeQuery, magicshieldseconds * 1000, "UPDATE `player_storage` SET `key` = " .. config.storage .. ", `value` = -1 WHERE `player_id` = " .. guid .. " LIMIT 1;")
else
npcHandler:say('You don\'t have such money.', cid)
end
else
npcHandler:say('Knights can\'t receive this increment.', cid)
end
end
function regener(cid, message, keywords, parameters, node)
local guid = getPlayerGUID(cid)
if not npcHandler:isFocused(cid) then
return false
end
if isPlayer(cid) and getCreatureStorage(cid, config.storage) == -1 then
if getPlayerMoney(cid) >= 50000 then
doPlayerRemoveMoney(cid, 50000)
doAddCondition(cid, conditionRege)
npcHandler:say('Your regeneration has increased for 10 minutes!', cid)
setPlayerStorageValue(cid, config.storage, config.value)
addEvent(db.executeQuery, regeseconds * 1000, "UPDATE `player_storage` SET `key` = " .. config.storage .. ", `value` = -1 WHERE `player_id` = " .. guid .. " LIMIT 1;")
else
npcHandler:say('You don\'t have such money.', cid)
end
else
npcHandler:say('You can\'t receive more than two increases.', cid)
end
end
function speed(cid, message, keywords, parameters, node)
local guid = getPlayerGUID(cid)
if not npcHandler:isFocused(cid) then
return false
end
if isPlayer(cid) and getCreatureStorage(cid, config.storage) == -1 then
if getPlayerMoney(cid) >= 50000 then
doPlayerRemoveMoney(cid, 50000)
doAddCondition(cid, conditionspeed)
npcHandler:say('Your speed has increased for 10 minutes!', cid)
setPlayerStorageValue(cid, config.storage, config.value)
addEvent(db.executeQuery, speedseconds * 1000, "UPDATE `player_storage` SET `key` = " .. config.storage .. ", `value` = -1 WHERE `player_id` = " .. guid .. " LIMIT 1;")
else
npcHandler:say('You don\'t have such money.', cid)
end
else
npcHandler:say('You can\'t receive more than two increases.', 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())
Captura del Error escribió:Imagen del error:
El error radica en: CreatureScript
3 participantes