Ir para conteúdo
  • 0

[AJUDA] Item que Troca Vocação


yagoshira004

Pergunta

EAE,

 

to precisando de uma ajuda com uma action, que ao usar o item, o player troca de vocação, tipo uma promotion, porem como a vocação é VIP, ela nao pode aparecer no acc manager.

 

Estou usando o seguinte script:

  Mostrar conteúdo oculto

Porem no caso desse script, ao morrer/deslogar o player perde a vocação, alguem que manja como resolver?
  Citar

 

- Se eu deixar o fromvoc=x , ele nao aparece no acc manager, porem perder a voc ao deslogar

 

- Se eu deixar o fromvoc= igual as outras vocações, ele nao aparece no acc manager mas perde a vocação ao deslogar

 

- Se eu deixar o fromvoc= igual a própria nova vocação ele nao perde ao deslogar, porem ele fica no account manager dando pra criar a vocação vip, o que eu nao quero.

 

Meu vocations.xml :

  Mostrar conteúdo oculto

Agradeço desde já, +REP pra quem puder ajudar! OBG.

 

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

@

Bem, é uma gambiarra, mas vai resolver... o script do action do seu item vai ser este:

 

  Mostrar conteúdo oculto

 

 

 

 

 

 

Agora substitua seu login.lua pelo código abaixo:

 

 

  Mostrar conteúdo oculto

 

Link para o comentário
Compartilhar em outros sites

  • 0

Fiz rápido, bem simples porém creio que funcione.

Crie um arquivo chamado goldenpaper.lua em data/actions/scripts e coloque isso:
function onUse(cid, item, fromPosition, toPosition)


local voc = {1} --id da vocação
local scroll = {} --id do item
local efeito = {} -- efeito


if item.uid == scroll then
doPlayerSetVocation(cid, voc)
doSendMagicEffect(cid, efeito)
end
return true
end

Agora em actions.xml, adicione essa tag:

<action actionid="id do item" script="goldenpaper.lua"/>

 

Link para o comentário
Compartilhar em outros sites

  • 0
  Em 10/11/2015 em 18:42, Entus disse:

Fiz rápido, bem simples porém creio que funcione.

 

Crie um arquivo chamado goldenpaper.lua em data/actions/scripts e coloque isso:
function onUse(cid, item, fromPosition, toPosition)


local voc = {1} --id da vocação
local scroll = {} --id do item
local efeito = {} -- efeito


if item.uid == scroll then
doPlayerSetVocation(cid, voc)
doSendMagicEffect(cid, efeito)
end
return true
end

Agora em actions.xml, adicione essa tag:

<action actionid="id do item" script="goldenpaper.lua"/>

 

Entus, o script está apenas para mudar qualquer vocação para uma nova? Pq o que eu uso muda por exemplo: o master sorcerer para um vip master sorcerer e assim respectivamente, no caso eu teria de criar um item para cada?

 

  Em 10/11/2015 em 18:32, Caronte disse:

Claro que vai mudar, não colocou nenhum query...

só muda in-game, a database continua a mesma.

 

fica online, vou arrumar, só um segundo.

 

 

Desculpe, eu nao sei quase nada de script |:

Ok, estou no aguardo.

Link para o comentário
Compartilhar em outros sites

  • 0
  Citar

 

 

Entus, o script está apenas para mudar qualquer vocação para uma nova? Pq o que eu uso muda por exemplo: o master sorcerer para um vip master sorcerer e assim respectivamente, no caso eu teria de criar um item para cada?

Sim, para cada!

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

  • 0
  Em 10/11/2015 em 19:13, Yagoxp disse:

 

Não funciona, nada acontece ao dar "use" apenas uma mensagem : "voce nao pode usar essa runa aqui" algo assim.

Mas agradeço pela ajuda!

Ah, eu testei em Tfs 1.0, vou fazer um mais elaborado e te mando no PM.

 

Até!

Link para o comentário
Compartilhar em outros sites

  • 0

la no actions.xml coloca

<action itemid="ID DO Item" event="script" value="nome do arquivo.lua"/>

o arquivo.lua coloca isso

local voc = 632 -- ID Da Vocation Que vai virar
local outfit = 916 -- Outfit Da outfit que vai ganhar


function onUse(cid, item, frompos, item2, topos)


if item.itemid == 12832 then -- id do item que vai ter que clickar o mesmo que coloco la no .xml
doPlayerSetVocation(cid,voc)
doCreatureChangeOutfit(cid, {lookType = outfit})
doRemoveItem(item.uid,1)
end
return true
end

na minha opniao no caso da vocation não aparece no account manager pq você não duplica cada vocation e fais que ao deslonga ele simplesmente va para vocation Master X e quando ele deslonga pela 2x ele va para Master Y assim ele não aparece no account manager e resolve o problema

Link para o comentário
Compartilhar em outros sites

  • 0

Não vai funcionar assim, ele disse que a função não tá mudando permanentemente............

 

precisa de um query....

 

 

 

 

Eu já fiz, só que me enrolei no query, e não tá dando....

vou pro meu curso, quando voltar eu dou uma outra olhada, quem quiser corrigir:

function onUse(cid, item, fromPosition, itemEx, toPosition)

    if getPlayerStorageValue(cid,1992) == 1 then
        doCreatureSay(cid, "Você já usou o golden papper.", TALKTYPE_ORANGE_1)
    else if getPlayerLevel(cid) >= 8 then -- a partir de que level podera usar
            doCreatureSay(cid, "Legendary!", TALKTYPE_ORANGE_1)
            if getPlayerVocation(cid) == 1 or getPlayerVocation(cid) == 1 then
			
				db.query('UPDATE `players` SET `vocation` = 5 WHERE `id` = '.. getPlayerGUID(cid))		
                                doRemoveCreature(cid)  	
				return true
            end
            if getPlayerVocation(cid) == 2 or getPlayerVocation(cid) == 2 then
               
				db.query('UPDATE `players` SET `vocation` = 6 WHERE `id` = '.. getPlayerGUID(cid))	
				doRemoveCreature(cid) 
				return true
            end
            if getPlayerVocation(cid) == 3 or getPlayerVocation(cid) == 3 then
              
				db.query('UPDATE `players` SET `vocation` = 7 WHERE `id` = '.. getPlayerGUID(cid))	
				doRemoveCreature(cid)  
				return true
            end
            if getPlayerVocation(cid) == 4 or getPlayerVocation(cid) == 4 then
               
				db.query('UPDATE `players` SET `vocation` = 8 WHERE `id` = '.. getPlayerGUID(cid))	
				doRemoveCreature(cid) 
				return true
            end
            return true
        else
            doCreatureSay(cid, "Você precisa estar level 8 ou mais para usar o Item!",TALKTYPE_ORANGE_1)
        end
    end
end
Editado por Caronte
Link para o comentário
Compartilhar em outros sites

  • 0

@@Entus

 

 

  Citar

 

Ah, eu testei em Tfs 1.0, vou fazer um mais elaborado e te mando no PM.

 

O que você alega é IMPOSSÍVEL, já que o script que você postou não funciona corretamente em NENHUMA VERSÃO DO TFS!!!

 

Vamos analisá-lo:

 

  Citar

 

 

function onUse(cid, item, fromPosition, toPosition)

local voc = {1} --id da vocação
local scroll = {} --id do item
local efeito = {} -- efeito


if item.uid == scroll then
doPlayerSetVocation(cid, voc)
doSendMagicEffect(cid, efeito)
end
return true
end

 

 

Você declara as variáveis scroll, voc e efeito como tabelas... depois você quer comparar o uid do item com o itemid que o autor iria preencher na variável scroll, ou seja, NUNCA IRIA DAR CERTO, mas mesmo assim vamos continuar analisando. O modo que você pega os valores das variáveis scroll, voc e efeito está totalmente errado, pois se trata de tabelas, ou seja, você tem que especificar o índice, caso contrário irá retornar a própria tabela, tornando IMPOSSÍVEL sua função funcionar...

 

Não é a primeira vez que você posta algo sem saber... não digo que é para parar de postar e talz, porque é importante tentarmos ajudar, mas também é importante sabermos o que estamos fazendo e acima de tudo, REALMENTE TESTAR e postar antes de falar que testou.

 

 

 

@@Caronte

 

Tentei fazer por query, ele altera quando roda o script, porém quando o player reloga o server retorna o valor da vocation na database para o que era... vou deixar a função com a alteração na query abaixo, caso queira usar para resolver o problema, pois tenho que ir trabalhar agora... no pior dos casos basta alterar o login.lua padrão...

 

 

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerStorageValue(cid,1992) == 1 then
		doCreatureSay(cid, "Você já usou o golden papper.", TALKTYPE_ORANGE_1)
	else
		if getPlayerLevel(cid) >= 8 then
			doCreatureSay(cid, "Legendary!", TALKTYPE_ORANGE_1)
			local voc = getPlayerVocation(cid)
			if voc <= 4 then
				doPlayerSetVocation(cid, voc + 4)
				db.executeQuery("UPDATE `players` SET `vocation` = "..(voc + 4).." WHERE `id` = "..getPlayerGUID(cid)..";")
			end
			doSendMagicEffect(fromPosition, CONST_ME_GIFT_WRAPS)
			doRemoveItem(item.uid)
			setPlayerStorageValue(cid,1992,1)
			return true
		else
			doCreatureSay(cid, "Você precisa estar level 8 ou mais para usar o Item!",TALKTYPE_ORANGE_1)
		end
	end
	return true
end
Editado por Antharaz
Link para o comentário
Compartilhar em outros sites

  • 0

Como posso fazer isso? nao faço a minima ideia de como mexer nisso oO

 

 

  Mostrar conteúdo oculto

Esse é meu login.lua
Link para o comentário
Compartilhar em outros sites

  • 0
  Em 11/11/2015 em 01:44, Antharaz disse:

@

Bem, é uma gambiarra, mas vai resolver... o script do action do seu item vai ser este:

 

  Mostrar conteúdo oculto

 

 

 

 

 

 

Agora substitua seu login.lua pelo código abaixo:

 

 

  Mostrar conteúdo oculto

 

 

 

Gambiarra mesmo eim, kkkkk.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...