Ir para conteúdo
  • 0

Script e npc


Duuhzinhow

Pergunta

 

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
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

local vocation = 1 -- Vocação que precisa ter

-- Primeira Vocação
local vocationnome1 = 'Master sorcerer' -- Nome da primeira vocação que ira se torna
local vocationid1 = 5 -- id da vocação que vai ganha
local item1 = 2033 -- primeiro items da primeira vocação
local item2 = 5882 -- Segundo items da primeira vocação
local qnt1 = 1 -- quantidade do primeiro items
local qnt2 = 5 -- quantidade do segundo items
-- Segunda Vocação
local vocationnome2 = 'Dark wizard' -- Nome da segunda vocação que ira se torna
local vocationid2 = 11 -- id da vocação que vai ganha
local item1 = 4852 -- primeiro items da segunda vocação
local item2 = 2144 -- Segundo items da segunda vocação
local qnt1 = 1 -- quantidade do primeiro items
local qnt2 = 15 -- quantidade do segundo items
-- Terceira Vocação
local vocationnome3 = 'Blood Mage' -- Nome da terceira vocação que ira se torna
local vocationid3 = 12 -- id da vocação que vai ganha
local items1 = 10601 -- primeiro items da terceira vocação
local items2 = 5905 -- Segundo items da terceira vocação
local qnts1 = 10 -- quantidade do primeiro items
local qnts2 = 2 -- quantidade do segundo items


function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end

local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid


if msgcontains(msg, 'yes') then
if getPlayerVocation(cid) == vocation then
selfSay('Você quer ['..vocationnome1..'] ou ['..vocationnome2..'] ou ['..vocationnome3..'].', cid)
talkState[talkUser] = 1
else
selfSay('Sua vocaçao nao e digna destas promotions, ou voce ja recebeu sua promotion..', cid)
end
end

if talkState[talkUser] == 1 and msgcontains(msg, ''..vocationnome1..'') then
if getPlayerItemCount(cid, item1) >= qnt1 and getPlayerItemCount(cid, item2) >= qnt2 then
selfSay('Parabêns você acaba de se tornar '..vocationnome1..'', cid)
doPlayerSetVocation(cid, vocationid1)
doPlayerRemoveItem(cid, item1, qnt1)
doPlayerRemoveItem(cid, item2, qnt2)
else
selfSay('Você precisa de 1 golden mug e 5 red dragon scales para ganhar a promotion.', cid)
end
end

if talkState[talkUser] == 1 and msgcontains(msg, ''..vocationnome2..'') then
if getPlayerItemCount(cid, item1) >= qnt1 and getPlayerItemCount(cid, item2) >= qnt2 then
selfSay('Parabêns você acaba de se tornar '..vocationnome2..'', cid)
doPlayerSetVocation(cid, vocationid2)
doPlayerRemoveItem(cid, item1, qnt1)
doPlayerRemoveItem(cid, item2, qnt2)
else
selfSay('Você precisa de 1 black stone (loot de black knight), e 15 black pearl para ganhar a promotion.', cid)
end
end

if talkState[talkUser] == 1 and msgcontains(msg, ''..vocationnome3..'') then
if getPlayerItemCount(cid, items1) >= qnts1 and getPlayerItemCount(cid, items2) >= qnts2 then
selfSay('Parabêns você acaba de ser torna '..vocationnome3..'', cid)
doPlayerSetVocation(cid, vocationid3)
doPlayerRemoveItem(cid, items1, qnts1)
doPlayerRemoveItem(cid, items2, qnts2)
else
selfSay('Você precisa de 10 vampire teeth e 2 vampire dust para ganhar a promotion.', cid)
end
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

 

Esse é o script de um npc que muda a vocaçao com 3 opçoes, preciso que façam alguns ajustes nela:

 

Adicionar uma storage para que só possa escolher uma vocaçao e depois nao possa mudar de volta.

 

Arrumar a primeira vocaçao que nao esta funcionando (nao da nenhum erro), mesmo tendo os itens ele diz que ainda precisa dos itens em questao, ps: as outras duas estao funcionando normal.

 

E quando desloga, perde a vocaçao ganha. Conto com a ajuda de voces, Obrigado!

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

10 respostass a esta questão

Posts Recomendados

  • 0

Reformulei o script do npc

-- Do not remove the credits --
-- Developed by Rigby --
-- Xtibia.com --
 
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
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
 
local needVocation = 1
local config = {
    ["Master sorcerer"] = {items = {2033, 1}, items2 = {5882, 5}, gainVocation = 5, storage = 221321321},
    ["Dark wizard"] = {items = {4852, 1}, items2 = {2144, 15}, gainVocation = 11, storage = 221321322},
    ["Blood Mage"] = {items = {10601, 10}, items2 = {5905, 2}, gainVocation = 12, storage = 221321323},
}
 
function creatureSayCallback(cid, type, msg)
    if(not npcHandler:isFocused(cid)) then
        return false
    end
 
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
    if msgcontains(msg, 'yes') then
        if getPlayerVocation(cid) == needVocation then
            selfSay('Qual você quer?', cid)
            for k, v in pairs(config) do
                selfSay('{'..k..'}', cid)
                talkState[talkUser] = 1
            end
        else
            selfSay('Sua vocação não e digna destas promotions, ou voce ja recebeu sua promotion.', cid)
        end
    end
 
    for i, q in pairs(config) do
        if talkState[talkUser] == 1 and msgcontains(msg, ''..i..'') then
            if getPlayerItemCount(cid, q.items[1]) >= q.items[2] and getPlayerItemCount(cid, q.items2[1]) >= q.items[2] then
                selfSay('Parabêns você acaba de se tornar '..i..'', cid)
                doPlayerSetVocation(cid, q.gainVocation)
                doPlayerRemoveItem(cid, q.items[1], q.items[2])
                doPlayerRemoveItem(cid, q.items2[1], q.items2[2])
                setPlayerStorageValue(cid, q.storage, 1)
                talkState[talkUser] = 2
            else
                selfSay('Você ter '..q.items[2]..' '..getItemNameById(q.items[1])..' e '..q.items2[2]..' '..getItemNameById(q.items2[1])..'.', cid)
            end
        end
    end
end
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
e para que ele não perca a vocation
local config = {
  --[storage] = vocation,
    [221321321] = 5,
    [221321322] = 11,
    [221321323] = 12,
}
 
function onLogin(cid)
    for i, q in pairs(config) do
        if getPlayerStorageValue(cid, i) == 1 then
            doPlayerSetVocation(cid, q)
        end
    end
return true
end
Link para o comentário
Compartilhar em outros sites

  • 0

Uma vez Oneshot falo num tópico que isso é um bug no sistema e infelizmente eu não lembro como resolve isso mas eu sei um jeito de resolver em .lua

Isso pode resolve para que a vocação não mude, so basta adiciona para que o npc de uma certa storage, e quando ele loga ele ganha a vocação de novo.

function onLogin(cid)
    if getPlayerStorageValue(cid, 645332) == 1 then
        doPlayerSetVocation(cid, 6)
    end
return true
end

Eu to indo tomar banho, jaja eu refaço esse npc ai que eu tinha feito hehehe, adicionar um tabela nele.

Link para o comentário
Compartilhar em outros sites

  • 0

Uma vez Oneshot falo num tópico que isso é um bug no sistema e infelizmente eu não lembro como resolve isso mas eu sei um jeito de resolver em .lua

Isso pode resolve para que a vocação não mude, so basta adiciona para que o npc de uma certa storage, e quando ele loga ele ganha a vocação de novo.

function onLogin(cid)
    if getPlayerStorageValue(cid, 645332) == 1 then
        doPlayerSetVocation(cid, 6)
    end
return true
end

Eu to indo tomar banho, jaja eu refaço esse npc ai que eu tinha feito hehehe, adicionar um tabela nele.

 

Nossa mano, mas ai teria que fazer para cada vocaçao que transformaria... ok

Refaz o npc do jeitinho la que pedi no topico, e ja coloca esse de dar o storage em cada um das 3 opçoes, ai vou ter que colocar no login.lua um para cada opçao de cada npc que vou criar certo?

 

Link para o comentário
Compartilhar em outros sites

  • 0
	<vocation id="1" name="Naruto" description="a Naruto" needpremium="0" gaincap="5" gainhp="90" gainmana="130" gainhpticks="0" gainhpamount="0" gainmanaticks="0" gainmanaamount="0" manamultiplier="1.1" attackspeed="2500" soulmax="100" gainsoulticks="120" fromvoc="1">
		<formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="5.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/>
		<skill fist="2.0" club="1.2" sword="2.0" axe="1.2" distance="2.0" shielding="2.0" fishing="2.0" experience="1.0"/>
	</vocation>

Para que quando deslogue não perca vocação você poem o id da vocação aqui fromvoc="1">

Link para o comentário
Compartilhar em outros sites

  • 0
	<vocation id="1" name="Naruto" description="a Naruto" needpremium="0" gaincap="5" gainhp="90" gainmana="130" gainhpticks="0" gainhpamount="0" gainmanaticks="0" gainmanaamount="0" manamultiplier="1.1" attackspeed="2500" soulmax="100" gainsoulticks="120" fromvoc="1">
		<formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="5.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/>
		<skill fist="2.0" club="1.2" sword="2.0" axe="1.2" distance="2.0" shielding="2.0" fishing="2.0" experience="1.0"/>
	</vocation>

Para que quando deslogue não perca vocação você poem o id da vocação aqui fromvoc="1">

 

 

nao entendi --'

 

Voce quer dizer que o ID e o Fromvoc tem que ser iguais? mas ai ate as promotions do tibia global deveriam sair ao deslogar certo?

E tambem se fizer assim irá aparecer essas opçoes de vocaçoes no account manager, coisa que eu nao quero que aconteça.

 

Link para o comentário
Compartilhar em outros sites

  • 0

 

Reformulei o script do npc

-- Do not remove the credits --
-- Developed by Rigby --
-- Xtibia.com --
 
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
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
 
local needVocation = 1
local config = {
    ["Master sorcerer"] = {items = {2033, 1}, items2 = {5882, 5}, gainVocation = 5, storage = 221321321},
    ["Dark wizard"] = {items = {4852, 1}, items2 = {2144, 15}, gainVocation = 11, storage = 221321322},
    ["Blood Mage"] = {items = {10601, 10}, items2 = {5905, 2}, gainVocation = 12, storage = 221321323},
}
 
function creatureSayCallback(cid, type, msg)
    if(not npcHandler:isFocused(cid)) then
        return false
    end
 
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
    if msgcontains(msg, 'yes') then
        if getPlayerVocation(cid) == needVocation then
            selfSay('Qual você quer?', cid)
            for k, v in pairs(config) do
                selfSay('{'..k..'}', cid)
                talkState[talkUser] = 1
            end
        else
            selfSay('Sua vocação não e digna destas promotions, ou voce ja recebeu sua promotion.', cid)
        end
    end
 
    for i, q in pairs(config) do
        if talkState[talkUser] == 1 and msgcontains(msg, ''..i..'') then
            if getPlayerItemCount(cid, q.items[1]) >= q.items[2] and getPlayerItemCount(cid, q.items2[1]) >= q.items[2] then
                selfSay('Parabêns você acaba de se tornar '..i..'', cid)
                doPlayerSetVocation(cid, q.gainVocation)
                doPlayerRemoveItem(cid, q.items[1], q.items[2])
                doPlayerRemoveItem(cid, q.items2[1], q.items2[2])
                setPlayerStorageValue(cid, q.storage, 1)
                talkState[talkUser] = 2
            else
                selfSay('Você ter '..q.items[2]..' '..getItemNameById(q.items[1])..' e '..q.items2[2]..' '..getItemNameById(q.items2[1])..'.', cid)
            end
        end
    end
end
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
e para que ele não perca a vocation
local config = {
  --[storage] = vocation,
    [221321321] = 5,
    [221321322] = 11,
    [221321323] = 12,
}
 
function onLogin(cid)
    for i, q in pairs(config) do
        if getPlayerStorageValue(cid, i) == 1 then
            doPlayerSetVocation(cid, q)
        end
    end
return true
end

 

 

Mano, vlw tudo certinho, exceeto... A vocation Blood mage, mesmo tendo os itens ele diz que sao necessarios os itens e nao ganha a vocation.

 

Link para o comentário
Compartilhar em outros sites

  • 0

Eu testei aqui e ta funcionando certo, você deve ta com os items errado 10, 10601 e 2, 5905.

 

20:57 Rigby [56]: hi
20:57 Deruno: Ta Afim de ganha uma vocação?
20:57 Rigby [56]: yes
20:57 Deruno: Qual você quer?
20:57 Deruno: Dark wizard
20:57 Deruno: Blood Mage
20:57 Deruno: Master sorcerer
20:57 Rigby [56]: blood mage
20:57 Deruno: Parabêns você acaba de se tornar Blood Mage
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...