Ir para conteúdo

Npc Que Vende Nova Vocação


WooX

Posts Recomendados

Ae Xtibianos

 

Vou Ensinar A Vocês Como Criar Um Npc Que Vende A Nova Voc Que Vc Criou No Seu Server!

 

1°Vá Hem data/npc/

 

Click Hem Novo->Documento De Texto

 

Renomei Para Nome Que Quiser

 

Dentro Coloque Iso

 

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

<npc name="Vip Johnny" script="data/npc/scripts/vip promote.lua" walkinterval="2000" floorchange="0">

<mana now="800" max="800"/>

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

<look type="133" head="114" body="119" legs="132" feet="114"/>

</npc>

 

Azul:Nome Do NPc

 

Click Hem Salvar Como

 

Coloque Nome Que Quiser + No Final Coloque.xml

 

E Salve Na Pasta Do Seu Ot

 

Agora Delete O Arquivo Txt Que Tinha Criado!

 

2°Vá Hem data/npc/scripts/

 

Copie E Cole Qualquer Arquivo.lua

 

Renomeio Para vip promote

 

Dentro Coloque Iso

 

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

 

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, 'vip sorcerer') or msgcontains(msg, 'vip sorcerer')) then

selfSay('Deseja virar {Vip Sorcerer} por 50 crystal coins?', cid)

talkState[talkUser] = 1

elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then

if(getPlayerItemCount(cid, 2160) >= 50) then

doPlayerRemoveItem(cid, 2160, 50)

doPlayerSetVocation(cid,9)

selfSay('Vocação trocada com sucesso , Agora você é um Vip Sorcerer.', cid)

else

selfSay('Você não tem {crystal coins} Suficientes.', cid)

end

talkState[talkUser] = 0

end

return true

end

 

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

 

Vermelho:Vocação

Verde:Preço Da Voc

Roxo:ID Da Voc

 

É Isso Vlw

 

Se Falto Algo Comenten

 

By:Leo46

Link para o comentário
Compartilhar em outros sites

achei o npc muito simples por dois motivos.

 

o primeiro é que nele tem uma falha,qualquer vocação pode usar esse npc,ou sejá um knight poderá virar um "vip sorcerer",já que não tem nenhuma função que faz a checkagem da voc do player.

 

e a segunda é que o npc só da uma vocação,o certo seriam no minimo 4 vocações.

 

procure melhorar amigo,você tem futuro

 

espero novos trabalhos seus por aqui

 

abraços

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

Hmm, eu liguei nesses erros so que eu ia fazer para min tipow qalquer voc ia virar uma vocation vip '-' e nao Vip Kina e etc..

 

Mais se for para usar nesse tipo como o vodkart falo, é muinto simplisinho!!

Link para o comentário
Compartilhar em outros sites

TPW No Caso De Qualquer Voc Pegar As Vocs Vip!

Meu Ot É Baiak Yoruts 8.54 a 8.57.

Coloquei O Npc So Na Area Vip.

Assim Somente Vips Comprariam.

E No Caso De Vender 4 Vocs.

É So Copiar Iso Abaixo E Editar.

elseif(msgcontains(msg, 'vip druid') or msgcontains(msg, 'vip druid')) then

selfSay('Deseja virar {Vip Druid} por 50 crystal coins?', cid)

talkState[talkUser] = 2

elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 2) then

if(getPlayerItemCount(cid, 2160) >= 50) then

doPlayerRemoveItem(cid, 2160, 50)

doPlayerSetVocation(cid,10)

selfSay('Vocação trocada com sucesso , Agora você é um Vip Druid.', cid)

else

selfSay('Você não tem {crystal coins} Suficientes.', cid)

end

talkState[talkUser] = 0

 

No Final Coloque Iso.

end

return true

end

 

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

 

Desculpa Se O Npc Não Ta Perfeito Vou Tentar Melhorar.

Link para o comentário
Compartilhar em outros sites

  • 1 month later...
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

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

local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid


local a = {
[5] = {new_voc = 9,need_level = true,level = 60,cobrar = true,price = 100000,need_premium = true},
[6] = {new_voc = 10,need_level = true,level = 60,cobrar = true,price = 100000,need_premium = true},
[7] = {new_voc = 11,need_level = true,level = 60,cobrar = true,price = 100000,need_premium = true},
[8] = {new_voc = 12,need_level = true,level = 60,cobrar = true,price = 100000,need_premium = true}
}
local b = a[getPlayerVocation(cid)]
if(msgcontains(msg, 'vip promotion') or msgcontains(msg, 'vip promote')) then
if(not b) then
selfSay('Você não tem a second promote, então não poderá ser promovido!.', cid)
talkState[talkUser] = 0
else
selfSay('Deseja virar ' .. getVocationInfo(b.new_voc).name .. ' por '..b.price..' gold coins? {yes}', cid)
talkState[talkUser] = 1
end
elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
if b.need_premium == true and not isPremium(cid) then
selfSay('Você precisa ser Premium para ser promovido!.', cid)
talkState[talkUser] = 0
elseif b.need_level == true and getPlayerLevel(cid) < b.level then
selfSay('Você deve ter pelo menos level '.. b.level ..' para ser promovido!.', cid)
talkState[talkUser] = 0
elseif b.cobrar == true and doPlayerRemoveMoney(cid, b.price) == TRUE then
doPlayerSetVocation(cid,b.new_voc)
selfSay('Você foi promovido com sucesso.', cid)
talkState[talkUser] = 0
else
selfSay('Você não tem '..b.price..' gold coins Suficientes.', cid)
doSendMagicEffect(getPlayerPosition(cid), 2)
end
end
return TRUE
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...
  • 3 weeks later...
  • 2 months later...

Boa a explicação, e o tutorial é muito útil.

 

O script postado pelo @Vodkart é o que, de fato, eu estava procurando.

 

 

PORÉM...

Ambos têm o mesmo bug: Quando o player promovido Loga, ele volta a ser a vocação que era antes. Exemplo: O player sai do jogo Vip Knight, e volta Elite Knight. Ou seja, a promoção funciona! mas até o player fazer logoff.

 

Alguém aí sabe sanar este problema? se souber, posta, por favor!

 

Abraços.

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

  • 2 months later...
  • 4 months later...
  • 4 months later...

Cara, eu não sou scripter então não sei a tag correta para usar pra concertar, porem eu estou estudando script, e pelo que eu vi o problema é o código "PlayerSetVocation" pois ele ele muda a vocação mas éla funciona como um buff, quando vc loga, acaba.

o correto seria utilizar um código de promotion (o qual eu não sei qual é) pois vc usando ex:"doPromotion" ele cria uma especie de storage do player que de 0 passa a ser 1 tornando o player promoted, ai no caso teria que fazer um código promotion de 1 "setPromotion = 2'

algo assim... posso ta falando besteira, defecando pela boca, mas eu acredito que seja isso =P

quem souber, puder fazer, agradeço, prescio desse npc tbm

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

Cara, eu não sou scripter então não sei a tag correta para usar pra concertar, porem eu estou estudando script, e pelo que eu vi o problema é o código "PlayerSetVocation" pois ele ele muda a vocação mas éla funciona como um buff, quando vc loga, acaba.

o correto seria utilizar um código de promotion (o qual eu não sei qual é) pois vc usando ex:"doPromotion" ele cria uma especie de storage do player que de 0 passa a ser 1 tornando o player promoted, ai no caso teria que fazer um código promotion de 1 "setPromotion = 2'

algo assim... posso ta falando besteira, defecando pela boca, mas eu acredito que seja isso =P

quem souber, puder fazer, agradeço, prescio desse npc tbm

 

Na verdade está certíssimo. É doPlayerSetPromotionLevel(cid, level). Eu postei um Script para segunda promotion (promotion VIP) aqui já. Aqui vai o code e o link do pastebin:

local keywordHandler = KeywordHandler:new() -- By Byerne XTibia
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

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

local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
local startVoc = (getPlayerVocation(cid) - ((getPlayerPromotionLevel(cid))*4))

if msgcontains(msg, 'promotion') then
if getPlayerPromotionLevel(cid) ~= 1 then
selfSay("Não posso te promover.", cid)
else
selfSay("Deseja virar um {VIP "..getVocationInfo(startVoc).name.."} por {40.000 gold coins} ({40k})?", cid)
talkState[talkUser] = 1
end
elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
if doPlayerRemoveMoney(cid, 40000) then
doPlayerSetPromotionLevel(cid, 2)
selfSay("Parabéns, você agora é um "..getVocationInfo(getPlayerVocation(cid)).name..".", cid)
else
selfSay("Você não tem dinheiro suficiente.", cid)
end
talkState[talkUser] = 0
end

return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

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

×
×
  • Criar Novo...