Ir para conteúdo

Buff Npc


noobinhu

Posts Recomendados

Acabei de acabar, este npc bem interessante, ele pode usar em você mana shield, invisible, haste, te curar, aumentar skills melee, distance, shield e magic por um tempo e uma quantia de dinheiro.

 

Primeiro faça um arquivo chamado Buff NPC.xml em data/npc contendo:

<?xml version="1.0" encoding="UTF-8"?>

<npc name="Buff NPC" script="data/npc/scripts/buff.lua" walkinterval="2000" floorchange="0">

<health now="100" max="100"/>

<look type="132" head="20" body="39" legs="45" feet="7" addons="0"/>

<parameters>

<parameter key="message_greet" value="Hello, |PLAYERNAME|. I can 'heal', 'haste', 'mana shield', invisible', upgrade your 'melee', 'magic', 'distance' and 'shield' skills."/>

</parameters>

</npc>

 

Salve, faça outra arquivo chamado buff.lua em npc/scripts contendo:

-- configs

pricetobuff = 1000

hasteseconds = 120

invisibleseconds = 120

magicshieldseconds = 120

skillsseconds = 200

skillsupgrade = {}

skillsupgrade['fist'] = 20

skillsupgrade['club'] = 20

skillsupgrade['sword'] = 20

skillsupgrade['axe'] = 20

skillsupgrade['distance'] = 20

skillsupgrade['shield'] = 20

skillsupgrade['ml'] = 10

-- end configs

 

 

-- heal combat

local combatHeal = createCombatObject()

setCombatParam(combatHeal, COMBAT_PARAM_TYPE, COMBAT_HEALING)

setCombatParam(combatHeal, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)

setCombatParam(combatHeal, COMBAT_PARAM_AGGRESSIVE, FALSE)

setCombatParam(combatHeal, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)

setCombatFormula(combatHeal, COMBAT_FORMULA_LEVELMAGIC, 99, 99, 99, 99)

 

-- haste combat

local combatHaste = createCombatObject()

setCombatParam(combatHaste, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)

setCombatParam(combatHaste, COMBAT_PARAM_AGGRESSIVE, 0)

local condition = createConditionObject(CONDITION_HASTE)

setConditionParam(condition, CONDITION_PARAM_TICKS, hasteseconds*1000)

setConditionFormula(condition, 99, 99, 99, 99)

setCombatCondition(combatHaste, condition)

 

-- 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 sorcerers and druids can upgrade their magic skills.", cid)

errors = 1

end

 

if buff == conditionMelee or buff == conditionShield and (isSorcerer(cid) or isDruid(cid)) then

npcHandler:say("Only knights and paladins can upgrade their melee and shield skills.", cid)

errors = 1

end

 

if buff == conditionDistance and (isDruid(cid) or isKnight(cid) or isSorcerer(cid)) then

npcHandler:say("Only paladins can upgrade their distance 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({'heal'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to be healed?'})

node1:addChildKeyword({'yes'}, buff, {buff = combatHeal, message = 'Now you are fully restored!'})

node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, moveup = 1, text = 'Then not.'})

 

local node1 = keywordHandler:addKeyword({'haste'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to be hasted?'})

node1:addChildKeyword({'yes'}, buff, {buff = combatHaste, message = 'Now you are fully hasted!'})

node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, moveup = 1, text = 'Then not.'})

 

local node1 = keywordHandler:addKeyword({'invisible'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to be invisible?'})

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 effect?'})

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 some time?'})

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 some time?'})

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 some time?'})

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 some time?'})

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 = "Uhm?"})

keywordHandler:addKeyword({'help'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = "Ya?"})

 

npcHandler:addModule(FocusModule:new())

 

Seu sistema está pronto, basta configurar ali em cima em negrito como desejar, o tempo de duração em segundos, o preço e o tanto de skills que aumentará.

 

Screenshoot:

buff_npc.png

 

Bom proveito,

Yunie.

Editado por noobinhu
Link para o comentário
Compartilhar em outros sites

Ótimo NPC, eu já tinha pensado nisso, até começei criar esse sistema só que começei a trabalhar parei com tudo, ma tem uma maneira mais simples de se fazer o Buff System, se eu achar no meu PC mando pra você via e-mail para você "acoplar" ao seu sistema.

 

parabéns, se a CipSoft tivesse toda essa criatividade que programadores, scripters, mappers, designers de OTServers, Tibia Global seria muito mais roxxx...

 

 

 

Tutorial Nota 10

 

Aprovado

Link para o comentário
Compartilhar em outros sites

Bom Npc .. (Mais..)

 

Se o player ja for promovido tem magias q nao posso compra...

 

 

Fui com meu elite em meu ot testar..

Falei melee.(Npc disse only blablabla paladins e knights ) algo assim

 

eu queria saber se foi sua ideia deixar assim ou é um bug msm,pq tem magias q com promoçao paladin da certo

 

...

Esperando

_________________________________nota 9

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...