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

Lua NPC SCRIPT ADD STORAGE

Lbtg

Advanced OT User
Joined
Nov 22, 2008
Messages
2,398
Reaction score
165
Hello im looking some help for this
PHP:
-- configs
pricetobuff = 6000000
invisibleseconds = 9000
magicshieldseconds = 9000
skillsseconds = 9000
skillsupgrade = {}
skillsupgrade['fist'] = 10
skillsupgrade['club'] = 10
skillsupgrade['sword'] = 10
skillsupgrade['axe'] = 10
skillsupgrade['distance'] = 10
skillsupgrade['shield'] = 10
skillsupgrade['ml'] = 10
-- end configs


-- invisible combat
local combatInvisible = createCombatObject()
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)

-- utamo combat
local combatUtamo = createCombatObject()
setCombatParam(combatUtamo, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combatUtamo, COMBAT_PARAM_AGGRESSIVE, 0)

local condition = createConditionObject(CONDITION_MANASHIELD)
setConditionParam(condition, CONDITION_PARAM_TICKS, magicshieldseconds*1000)
setCombatCondition(combatUtamo, condition)

-- melee condition
local conditionMelee = createConditionObject(CONDITION_ATTRIBUTES)
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'])

-- distance condition
local conditionDistance = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(conditionDistance, CONDITION_PARAM_TICKS, skillsseconds*1000)
setConditionParam(conditionDistance, CONDITION_PARAM_SKILL_DISTANCE, skillsupgrade['distance'])

-- shield condition
local conditionShield = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(conditionShield, CONDITION_PARAM_TICKS, skillsseconds*1000)
setConditionParam(conditionShield, CONDITION_PARAM_SKILL_SHIELD, skillsupgrade['shield'])

-- ml condition
local conditionMagic = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(conditionMagic, CONDITION_PARAM_TICKS, skillsseconds*1000)
setConditionParam(conditionMagic, CONDITION_PARAM_STAT_MAGICPOINTS, skillsupgrade['ml'])


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

function buff(cid, message, keywords, parameters, node)
if(not npcHandler:isFocused(cid)) then
return false
end
if doPlayerRemoveMoney(cid, pricetobuff) == TRUE then
buff = parameters.buff
message = parameters.message

doCombat(cid, buff, numberToVariant(cid))
npcHandler:say(message, cid)
keywordHandler:moveUp(1)
return true
else
npcHandler:say("You need ".. pricetobuff .." gold coins to buff yourself.", cid)
end
end

function buffMelee(cid, message, keywords, parameters, node)
if(not npcHandler:isFocused(cid)) then
return false
end
if doPlayerRemoveMoney(cid, pricetobuff) == TRUE then
buff = parameters.buff
errors = 0
message = parameters.message
voc = getPlayerVocation(cid)

if buff == conditionMagic and (isKnight(cid) or isPaladin(cid)) then
npcHandler:say("Only master sorcerers and elder druids can upgrade their magic skills.", cid)
errors = 1
end


if errors == 0 then
doTargetCombatCondition(0, cid, buff, CONST_ME_MAGIC_RED)
npcHandler:say(message, cid)
keywordHandler:moveUp(1)
return true
end
else
npcHandler:say("You need ".. pricetobuff .." gold coins to buff yourself.", cid)
end
end




local node1 = keywordHandler:addKeyword({'invisible'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to be invisible for 3 hours?'})
node1:addChildKeyword({'yes'}, buff, {buff = combatInvisible, message = 'Now you are invisible!'})
node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, moveup = 1, text = 'Then not.'})

local node1 = keywordHandler:addKeyword({'magic shield'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to get magic shield shield for 3 hours?'})
node1:addChildKeyword({'yes'}, buff, {buff = combatUtamo, message = 'Your magic shield is on!'})
node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, moveup = 1, text = 'Then not.'})

local node1 = keywordHandler:addKeyword({'melee'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to upgrade your melee skills for 3 hours?'})
node1:addChildKeyword({'yes'}, buffMelee, {buff = conditionMelee, message = 'Your skills had been upgraded!'})
node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, moveup = 1, text = 'Then not.'})

local node1 = keywordHandler:addKeyword({'shield'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to upgrade your shield skills for 3 hours?'})
node1:addChildKeyword({'yes'}, buffMelee, {buff = conditionShield, message = 'Your skills had been upgraded!'})
node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, moveup = 1, text = 'Then not.'})

local node1 = keywordHandler:addKeyword({'distance'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to upgrade your distance skills for 3 hours?'})
node1:addChildKeyword({'yes'}, buffMelee, {buff = conditionDistance, message = 'Your skills had been upgraded!'})
node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, moveup = 1, text = 'Then not.'})

local node1 = keywordHandler:addKeyword({'magic'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to upgrade your magic skills for 3 hours?'})
node1:addChildKeyword({'yes'}, buffMelee, {buff = conditionMagic, message = 'Your skills had been upgraded!'})
node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, moveup = 1, text = 'Then not.'})

keywordHandler:addKeyword({'offer'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = "offer ? do you mean price? 6kk each buff. buy anything or leave me alone"})
keywordHandler:addKeyword({'help'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = "whats going on with you dude?"})

npcHandler:addModule(FocusModule:new())

its a buff npc, well it woorks perfecly just if player has bought buff if he tryes to buy buff again he spends money and still has the same buff, how i can put storage ? and so than player try to buff himself while he already buff himself npc says "your still buffed come back than its over "

Kind Regards
Lbtg
 
okey i found this script
http://pastebin.com/MXZmr5d1


after player buyes a buff and tryes to buy a buff again from same npc npc
says"You must be a druid or a sorcerer to receive this increment."

how to fix if you already have a buff npc says to a player that you already have a buff and wait for xxx time , the time what is left. is it posible ?
 
This is dumb:
Code:
addEvent(db.executeQuery, regeseconds *1000,"UPDATE `player_storage` SET `key` = ".. config.storage ..", `value` = -1 WHERE `player_id` = ".. guid .." LIMIT 1;")

The solution is effectively this:

-- configs
pricetobuff = 6000000
invisibleseconds = 9000 -- these values are the same. Why not remove them and clean up the code?
magicshieldseconds = 9000
skillsseconds = 9000
buffstoragevalue = (os.time() + skillsseconds)
buffstorageid = XXXXX -- specify storageId you want to use here.
skillsupgrade = {}
skillsupgrade['fist'] = 10
skillsupgrade['club'] = 10
skillsupgrade['sword'] = 10
skillsupgrade['axe'] = 10
skillsupgrade['distance'] = 10
skillsupgrade['shield'] = 10
skillsupgrade['ml'] = 10
-- end configs

Code:
if not (player:getStorageValue(buffstorageid)) then
   player:setStorageValue(buffstorageid, -1)
end
if player:getStorageValue(buffstorageid) < os.time() then
   -- Normal apply buff code should be here.
   player:setStorageValue(buffstorageid, buffstoragevalue)
else
    npcHandler:say("You have already been buffed!", cid)
    return false
end

Both pieces of code are too messy for me to work with, and I don't really feel like re-writing it.
Hopefully you know what you're doing and can use the information above.
 
Last edited:
Back
Top