E aew galera bom esse topico eu nunca vi aki no xtibia
e como eu montei 4 vocaçoes novas no meu ot caseiro xD
resolvi posta como cria um npc para dar a 3º vocaçao pra algum player
e tbm vo mostra como almenta o dia de premmy q o npc vende
isso pode tira mtas duvidas ^^
bom se vc abri a pasta data/npc/scripts do seu ot e abri o promote.lua vai v q ele e assim
local focus = 0local talk_start = 0
local target = 0
local days = 0
function onThingMove(creature, thing, oldpos, oldstackpos)
end
function onCreatureAppear(creature)
end
function onCreatureDisappear(cid, pos)
if focus == cid then
selfSay('Good bye then.')
focus = 0
talk_start = 0
end
end
function onCreatureTurn(creature)
end
function msgcontains(txt, str)
return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end
function onCreatureSay(cid, type, msg)
msg = string.lower(msg)
if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then
selfSay('Hello ' .. creatureGetName(cid) .. '! I sell premiums andpromotions.')
focus = cid
talk_start = os.clock()
elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
selfSay('Sorry, ' .. creatureGetName(cid) .. '! I talk to you in a minute.')
elseif focus == cid then
talk_start = os.clock()
if msgcontains(msg, 'promotion') or msgcontains(msg, 'promote') then
if getPlayerVocation(cid) > 4 then
selfSay('Sorry, you are already promoted.')
talk_state = 0
elseif getPlayerLevel(cid) < 20 then
selfSay('Sorry, you need level 20 to buy promotion.')
talk_state = 0
elseif not isPremium(cid) then
selfSay('Sorry, you must be premium to buy promotion.')
talk_state = 0
else
selfSay('Do you want to buy promotion for 20k?')
talk_state = 1
end
elseif msgcontains(msg, 'premium') or msgcontains(msg, 'premmy') then
selfSay('Do you want to buy 7 days of premium for 7k?')
talk_state = 2
elseif talk_state == 1 then
if msgcontains(msg, 'yes') then
if pay(cid,20000) then
doPlayerSetVocation(cid, getPlayerVocation(cid)+4)
selfSay('You are now promoted!')
else
selfSay('Sorry, you do not have enough money.')
end
end
talk_state = 0
elseif talk_state == 2 then
if msgcontains(msg, 'yes') then
if pay(cid,7000) then
selfSay('/premium '.. creatureGetName(cid) ..', 7')
selfSay('You have 7 days of premium more!')
else
selfSay('Sorry, you do not have enough money.')
end
end
talk_state = 0
elseif msgcontains(msg, 'bye') and getDistanceToCreature(cid) < 4 then
selfSay('Good bye, ' .. creatureGetName(cid) .. '!')
focus = 0
talk_start = 0
end
end
end
function onCreatureChangeOutfit(creature)
end
function onThink()
doNpcSetCreatureFocus(focus)
if (os.clock() - talk_start) > 30 then
if focus > 0 then
selfSay('Next Please...')
end
focus = 0
end
if focus ~= 0 then
if getDistanceToCreature(focus) > 5 then
selfSay('Good bye then.')
focus = 0
end
end
end
bom explicando
tudo que esta em vermelho e oq iremos muda da p.a
e tudo q estive em azul e sobre a promoted
como por exemplo no meu eu coloquei a parte do lvl assim
selfSay('Sorry, you need level 80 to buy second promotion.')
mais isso vai do gosto de cada um
agora eu vo coloca como fico o meu e vo explica onde muda pra vcs colocarem a gosto
local focus = 0local talk_start = 0
local target = 0
local days = 0
function onThingMove(creature, thing, oldpos, oldstackpos)
end
function onCreatureAppear(creature)
end
function onCreatureDisappear(cid, pos)
if focus == cid then
selfSay('Good bye then.')
focus = 0
talk_start = 0
end
end
function onCreatureTurn(creature)
end
function msgcontains(txt, str)
return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end
function onCreatureSay(cid, type, msg)
msg = string.lower(msg)
if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then
selfSay('Hello ' .. creatureGetName(cid) .. '! I sell second promotions and premmy.')
focus = cid
talk_start = os.clock()
elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
selfSay('Sorry, ' .. creatureGetName(cid) .. '! I talk to you in a minute.')
elseif focus == cid then
talk_start = os.clock()
if msgcontains(msg, 'promotion') or msgcontains(msg, 'promote') then
if getPlayerVocation(cid) > 8 then
selfSay('Sorry, you are already second promoted.')
talk_state = 0
elseif getPlayerLevel(cid) < 150 then
selfSay('Sorry, you need level 150 to buy promotion.')
talk_state = 0
elseif not isPremium(cid) then
selfSay('Sorry, you must be premium to buy promotion.')
talk_state = 0
else
selfSay('Do you want to buy promotion for 100k?')
talk_state = 1
end
elseif msgcontains(msg, 'premium') or msgcontains(msg, 'premmy') then
selfSay('Do you want to buy 200 days of premium for 80k?')
talk_state = 2
elseif talk_state == 1 then
if msgcontains(msg, 'yes') then
if pay(cid,100000) then
doPlayerSetVocation(cid, getPlayerVocation(cid)+4)
selfSay('You are now second promoted!')
else
selfSay('Sorry, you do not have enough money.')
end
end
talk_state = 0
elseif talk_state == 2 then
if msgcontains(msg, 'yes') then
if pay(cid,80000) then
selfSay('/premium '.. creatureGetName(cid) ..', 200')
selfSay('You have 200 days of premium more!')
else
selfSay('Sorry, you do not have enough money.')
end
end
talk_state = 0
elseif msgcontains(msg, 'bye') and getDistanceToCreature(cid) < 4 then
selfSay('Good bye, ' .. creatureGetName(cid) .. '!')
focus = 0
talk_start = 0
end
end
end
function onCreatureChangeOutfit(creature)
end
function onThink()
doNpcSetCreatureFocus(focus)
if (os.clock() - talk_start) > 30 then
if focus > 0 then
selfSay('Next Please...')
end
focus = 0
end
if focus ~= 0 then
if getDistanceToCreature(focus) > 5 then
selfSay('Good bye then.')
focus = 0
end
end
end
id das vocaçoes se decha 4 ele so vai ir ate a promote e nao ate a second promote
oq o npc vai fla quando o player fla hi
o lvl q vc vai quere q o player tenha pra pode se promove
o preço da second promote ponha o tanto q o player tera q pagar
o q vc que q o npc fale quando o player ja for second promoted
o tanto de dia de premmy e o custo dela q vc quer q o npc fle se o player fla premmy ow premium
onde vc muda para o tando de dia de p.a q vc vai quere q o npc venda
o preço que o player tera que paga pelos dias de p.a
bom creiu que aki coloquei tudo agora salve isso com suas modificaçoes e o nome do npc
agora volte uma pasta e da ctrl +c e ctrl +v em uma pasta apague conteudo dela e ponha
<?xml version="1.0"?>
<npc name="Grand johnny" script="data/npc/scripts/promote 2.lua" access="3" lookdir="2">
<mana now="800" max="800"/>
<health now="200" max="200"/>
<look type="133" head="114" body="119" legs="132" feet="114"/>
</npc>
no lugar do Grand Johnny ponha o nome do seu npc e
aki script="data/npc/scripts/promote 2.lua ponha o nome da onde vc salvo
e so isso comentem plz
ah nao esquecendo q o nome q tive .xml por exemplo joao.xml vc vai usa o /s joao pra faze o npc caso ele n tenha um respawn fixo ^^
Credito 100% by me =)