Ir para conteúdo
  • Cadastre-se

(Resolvido)Request - Quest que dá SSA com 100 cargas


Ir para solução Resolvido por zipter98,

Posts Recomendados

Olá senhores,

 

 tem como alguém criar um sctipt pra mim, de uma quest que a recompensa seja um SSA (ID:2197) de 100 cargas?

 

Desde já agradeço muito!

Link para o post
Compartilhar em outros sites
function onUse(cid, item)

local storage =	105487
local itemid = 2197
local count = 100

		if getPlayerStorageValue(cid, storage) < 1 then
			doPlayerAddItem(cid, itemid, count)
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You received " .. itemid .. ".")
			setPlayerStorage(cid, storage, 1)	
		else	
			return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Item not found")	
		end
	return true
end
		
Editado por Summ (veja o histórico de edições)

EQD4Qy4.gif

Link para o post
Compartilhar em outros sites

Oi Summ,

 

 não deu certo não.

 

 Deu erro na Distro, linha 10.

 

 

"Attempt to call global 'setplayerstorage' <a nil value>

 

setPlayerStorage(cid, storage, 1)

 

 O player no caso recebeu o item, porém, apenas 1 unidade.

Editado por ADM Lucas OTBR (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

:hum:

local x = 
{	storage = 105977,
	itemid = {2197, 100} -- {item, count}
}
	
function onUse(cid, item)
 
		if getPlayerStorageValue(cid, x.storage) < 1 then
			doPlayerAddItem(cid, x.itemid[1], 100)
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You received " .. x.itemid[1] .. ".")
			setPlayerStorageValue(cid, x.storage, 1)	
		else	
			return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Item not found")	
		end
	return true
end
Editado por Summ (veja o histórico de edições)

EQD4Qy4.gif

Link para o post
Compartilhar em outros sites

Está dando o primeiro erro.

 

 "Attempt to call global 'setplayerstorage' <a nil value>

 

Agora na linha 11, e o player ganha apenas 1 unidade.

Link para o post
Compartilhar em outros sites

O erro era causado por falta de atenção minha era pra eu colocar "setPlayerStorageValue(cid, x.storage, 1)" e não "setPlayerStorag(cid, x.storage, 1)" rsrsrs, sobre o erro de receber apenas 1 unidade to achando estranho, setei o numero de cargas na própria função pra ver se funciona agr.

#editei o post lá em cima

EQD4Qy4.gif

Link para o post
Compartilhar em outros sites

Deu mais ou menos certo.

 

 O distro n apresenta nenhum erro, porém, ainda n vem com as 100 cargas.

 

 KKKKKKK, o que será que acontece.

Link para o post
Compartilhar em outros sites

@Summ,

doPlayerAddItem não altera o atributo charges...

 

@ADM Lucas OTBR tente assim, 

local storage = 105977
local itemid, charges = 2197, 100
	
function onUse(cid, item)
	if getPlayerStorageValue(cid, storage) < 1 then
		doPlayerAddItem(cid, itemid, 1)
		doItemSetAttribute(itemid, 'charges', charges)
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You received " .. getItemName(itemid) .. ".")
		setPlayerStorageValue(cid, storage, 1)	
	else	
		return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Item not found")	
	end
	return true
end
Editado por Bruno Minervino (veja o histórico de edições)

Atenciosamente,

Bruno Minervino

Link para o post
Compartilhar em outros sites

@Summ,

doPlayerAddItem não altera o atributo charges...

 

@ADM Lucas OTBR tente assim, 

local storage = 105977
local itemid, charges = 2197, 100
	
function onUse(cid, item)
	if getPlayerStorageValue(cid, storage) < 1 then
		doPlayerAddItem(cid, itemid, 1)
		doItemSetAttribute(itemid, 'charges', charges)
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You received " .. getItemName(itemid) .. ".")
		setPlayerStorageValue(cid, x.storage, 1)	
	else	
		return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Item not found")	
	end
	return true
end

 

Não sabia disso obrigado, doPlayerAddItem só server então pra setar a quantidade do item a ser adicionada então, bom saber >.<, 

aqui nessa parte "You received " .. getItemName(itemid) .. "." tanto faz fazer apenas com "you received" .. itemid .."." ou precisa usar função getItName() pra funcionar ?

 

detalhes tu esqueceu de apagar o "x" aqui rsrsrsrs

                                        \/                               

setPlayerStorageValue(cid, x.storage, 1)
setPlayerStorageValue(cid, storage, 1)

e obrigado dnv, estou começando a aprender .lua e quanto mais me ensinarem melhor ainda :D

Editado por Summ (veja o histórico de edições)

EQD4Qy4.gif

Link para o post
Compartilhar em outros sites

Não sabia disso obrigado, doPlayerAddItem só server então pra setar a quantidade do item a ser adicionada então, bom saber >.<, 

aqui nessa parte "You received " .. getItemName(itemid) .. "." tanto faz fazer apenas com "you received" .. itemid .."." ou precisa usar função getItName() pra funcionar ?

 

detalhes tu esqueceu de apagar o "x" aqui rsrsrsrs

                                        \/                               

setPlayerStorageValue(cid, x.storage, 1)
setPlayerStorageValue(cid, storage, 1)
e obrigado dnv, estou começando a aprender .lua e quanto mais me ensinarem melhor ainda :D

Já tinha alterado kkkkk

Então, se você colocar somente o .. itemid .. vai dar erro, porque itemid é do tipo int e o resto é um string. E usando aquela função ela retorna o nome do item em string.

Que isso cara, precisando de ajuda pode chamar!

Edit: se você quiser apresentar o id do item mesmo, ai é só dar um tostring(itemid).

Abraço!

Editado por Bruno Minervino (veja o histórico de edições)

Atenciosamente,

Bruno Minervino

Link para o post
Compartilhar em outros sites

Bruno,

 

 deu alguns erros.

 

 

 data/lib/050-function.lua = attempt to index a boolean value stack traceback.

 Linha da scritp 4, e ele tbm fala sobre a function getItemName da lib 050

Link para o post
Compartilhar em outros sites

Bruno,

 

 deu alguns erros.

 

 

 data/lib/050-function.lua = attempt to index a boolean value stack traceback.

 Linha da scritp 4, e ele tbm fala sobre a function getItemName da lib 050

Realmente, se você não tiver a função em sua lib, vai dar erro.

Tente assim, só para testar.

local storage = 105977
local itemid, charges = 2197, 100
local msg = "Voce achou um Stone Skin Amulet com 100 cargas."
	
function onUse(cid, item)
	if getPlayerStorageValue(cid, storage) < 1 then
		doPlayerAddItem(cid, itemid, 1)
		doItemSetAttribute(itemid, 'charges', charges)
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg)
		setPlayerStorageValue(cid, storage, 1)	
	else	
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce ja fez esta quest.")
		return true
	end
	return true
end

Atenciosamente,

Bruno Minervino

Link para o post
Compartilhar em outros sites

Então, se você colocar somente o .. itemid .. vai dar erro, porque itemid é do tipo int e o resto é um string.

No caso, itemid é uma variável. Simplesmente retornaria o valor dela na string ao creatureid:
You received 2197.

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

No caso, itemid é uma variável. Simplesmente retornaria o valor dela na string ao creatureid:

You received 2197.

Qual a diferença ?

itemid = 2197

itemid = "2197"

Não é o tipo da variável, uma int e outra string ? Que é uma variável eu sei, qual a finalidade do seu post?

 

@ADM Lucas OTBR,

Teste desta última forma, se não funcionar, quando eu chegar em casa, se ninguém tiver lhe ajudado, eu faço lá em casa.

 

local storage = 105977
local itemid, charges = 2197, 100
local msg = "Voce achou um Stone Skin Amulet com 100 cargas."

--não mexa aqui
local item = doCreateItemEx(itemid)
doItemSetAttribute(item, 'charges', charges)
	
function onUse(cid, item)
	if getPlayerStorageValue(cid, storage) < 1 then
		doPlayerAddItemEx(cid, item, true)
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg)
		setPlayerStorageValue(cid, storage, 1)	
	else	
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce ja fez esta quest.")
		return true
	end
	return true
end
Editado por Bruno Minervino (veja o histórico de edições)

Atenciosamente,

Bruno Minervino

Link para o post
Compartilhar em outros sites

Não é o tipo da variável, uma int e outra string ? Que é uma variável eu sei, qual a finalidade do seu post?

Preste atenção no que você disse:

Então, se você colocar somente o .. itemid .. vai dar erro, porque itemid é do tipo int e o resto é um string. E usando aquela função ela retorna o nome do item em string.

Eu citei enquanto ao que você falou sobre usar a variável na string.
É uma variável que contém um número inteiro, não vai dar erro se você a chamar numa string. Já enquanto a função é óbvio que vai retornar em uma string, está certo o que você disse.

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

Preste atenção no que você disse:

 

 

Eu citei enquanto ao que você falou sobre usar a variável na string.

É uma variável que contém um número inteiro, não vai dar erro se você a chamar numa string. Já enquanto a função é óbvio que vai retornar em uma string, está certo o que você disse.

 

Mais então, a resposta não foi referente à função? Mais blz, a finalidade do tópico não é esta.

Atenciosamente,

Bruno Minervino

Link para o post
Compartilhar em outros sites

Mais então, a resposta não foi referente à função? Mais blz, a finalidade do tópico não é esta.

Eu me referi ao que você disse no tópico, passou informação incorreta, e isso já é algo coerente.
Não fique puto por errar, todos erram.

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por Mathwsz
      Bom galera, estou trazendo um script de fusão que funciona assim:
      Explicação: É necessário de 7 itens, na qual você coloca em tal coordenada e aperte a alavanca, sendo assim formando um item na qual você deseja em tal lugar configurado.
      Exemplo: Você pode fazer 7 bosses na qual dropa tals itens "Parecidos" e formando um item raro de sua escolha, ou como preferir.. Vamos ao script!
       
      Em Data/Actions/Scripts crie um arquivo chamado fusaoitens.lua e adicione isto dentro:
       
       
      Agora, em Data/Actions.xml adicione o seguinte:
       
      <action uniqueid="9900" script="fusaoitens.lua" /> E no seu RemeresMapEditor , pegue sua alavanca, vai em Propriedades e adicione o UniqueID 9900 nele! 
      PRONTO! Agora configure e divirta-se! Obs: Caso lhe ajudei, da um REP+ Aí !
    • Por MySticaL
      Script Quest:
      --[[ Script: Exemplo de Quest Autor: MySticaL Email: [email protected] ]] function onUse(cid, item, frompos, item2, topos) -- Não mecha. storage = 938312 -- Storage a cada quest que for criada aumente um numero da storage pra qnd vc pegar o baú de outra quest ñ aparecer que vc já fez. item = 2160 -- Id do item ira ganhar. quantidade = 1 -- Quantidade ira ganhar. level = 5 -- Level que precisa pra fazer. if getPlayerLevel(cid) >= level and getPlayerStorageValue(cid,storage) == -1 then -- Não mecha. doPlayerSendTextMessage(cid,25,"Você ganhou um pouco de dinheiro") -- Mensagem que aparecera quando ganhar o item. doPlayerAddItem(cid, item, quantidade) -- Não mecha. setPlayerStorageValue(cid,storage,1) -- Não mecha. elseif getPlayerLevel(cid) <= level then -- Não mecha doPlayerSendTextMessage(cid,25,"Você precisa ser level 5 ou mais.") -- Mensagem que ira aparecer se o player tiver menos level que o necessario. elseif getPlayerStorageValue(cid,storage) >= 1 then -- Não mecha. doPlayerSendTextMessage(cid,25,"Você já fez está quest") -- Quando tentar pegar mais de uma vez o baú. end return true end Actions.xml
      <action actionid="3123" event="script" value="script.lua"/> Obs: O actionid="3123" é o que você deve botar no item no Remeres Map Editor
      Caso você queria criar outra quest aumente a storage no script e o id no actions.xml !
      Como configurar ?
      R- \/
      ================================================================================================================================
      storage = 938312 -- Storage a cada quest que for criada aumente um numero da storage pra quando você for pegar o baú de outra quest não aparecer  que você já fez.
      ================================================================================================================================
      item = 2160 -- Id do item ira ganhar.
      ======================================================
      quantidade = 1 -- Quantidade ira ganhar.
      ======================================================
      level = 5 -- Level que precisa pra fazer.
      ======================================================
      Script bem simples mais irá ajudar alguns membros.
      Rep não cai o dedo
      Não sei muito sobre script.
       
      100% Créditos meu caso for postar em outro lugar deixe os créditos para min !
      Desculpem o tópico mal arrumado
       
    • Por Nazo
      Buenas, TK!
      Um usuário pediu ajuda em um script, onde queria limitar para a quest ser feita apenas uma vez por IP, mesmo que ainda seja possível mudá-lo, resolvi postar aqui xd
       
      Execute esse código SQL no seu banco de dados MySQL, para a criação da tabela onde ficarão as storages e o IP armazenado do player:
      CREATE TABLE player_ip_storage( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, player_id INT NOT NULL, ip CHAR(15) NOT NULL, storage INT NOT NULL ); ALTER TABLE player_ip_storage ADD CONSTRAINT FK_PLAYER_ID FOREIGN KEY (player_id) REFERENCES players(id);  
      Ou caso seja SQLITE, utilize esse código:
      CREATE TABLE player_ip_storage( player_id INT NOT NULL, ip CHAR(15) NOT NULL, storage INT NOT NULL ); ALTER TABLE player_ip_storage ADD CONSTRAINT FK_PLAYER_ID FOREIGN KEY (player_id) REFERENCES players(id);  
      Crie um arquivo chamado nazo-functions.lua em data/lib e adicione o seguinte conteúdo:
      -- by Nazo (tibiaking.com) -- IP Storage System function getIpQuestStatus(cid, storage) storages = db.getResult("SELECT * FROM `player_ip_storage` WHERE `ip` = \"" .. doConvertIntegerToIp(getPlayerIp(cid)) .. "\" and `storage` = "..storage..";") if(storages:getID() ~= -1) then return false end return true end function setIpQuestStatus(cid, storage) db.executeQuery("INSERT INTO player_ip_storage(player_id, ip, storage) VALUES("..getPlayerGUID(cid)..",\""..doConvertIntegerToIp(getPlayerIp(cid)).."\","..storage..")") return true end  
      Agora, quando você tiver uma quest, adicione na verificação a função getIpQuestStatus na checagem junto, e quando finalizar a quest utilize o setIpQuestStatus, com os parâmetros cid e número da storage, porém a função só armazena que essa storage tem algo no banco de dados, ou seja, a quest já foi feita, você não armazena o valor da storage junto (como a função normal que geralmente adiciona "1" na storage).
       
      Exemplo de quest abaixo:
      -- by Nazo (tibiaking.com) config = { storage = 123123, -- storage da quest premio = {2160, 1} -- {itemid, quantia} } function onUse(cid, item, frompos, item2, toPosition) queststatus = getPlayerStorageValue(cid,config.storage) if(queststatus == -1 and getIpQuestStatus(cid, config.storage)) then -- note que eu só adicionei a função, nenhuma comparação, explicarei abaixo do código doPlayerSendTextMessage(cid,22,"Tome seu prêmio.") doPlayerAddItem(cid,config.premio[1],config.premio[2]) setPlayerStorageValue(cid,config.storage,1) setIpQuestStatus(cid,config.storage) -- função que adiciona a storage no banco de dados else doPlayerSendTextMessage(cid,22,"Você já fez esta quest.") end end  
      Explicação básica do motivo da função não possuir comparação na verificação e ficar como a seguir:
       
      if(getIpQuestStatus(cid, config.storage)) then Quando você faz um if, com uma função dentro sem comparações, ela continuará o bloco de comando apenas se o retorno da mesma for verdadeiro, assim quando você fizer a quest, e tentar novamente, o get retorna falso, e isso cancela a condição e vai para o bloco de comando do "else".
    • Por Lyu
      'Dodge System 2015' versão com AMULETO & ELEMENTOS DE DEFESA.                                    Testado em OTX Server 8.60 & TFS 0.4 dev 3884.                                                                           Antes de começar, quero avisar às pessoas que estão sem tempo ou com preguiça de ler o tópico inteiro, que eu upei um zip do sistema inteiro. então é só baixar e instalar ai.   Download SCAN   Continuando Tópico..   Cada ponto de Dodge equivale a x% de chance de desviar de um ataque, e ao mesmo tempo, enviar um elemento compatível com o nível de dodge do jogador. Sobre o desvio, quase todo mundo já conhece, mas e esse tal elemento?   Ao desviar do ataque, automaticamente o amuleto contra-ataca com um ataque de distância; sua fonte de energia é o fist fighting, quanto mais alto for o skill, mais alto será o dano; Cada amuleto possui seu próprio elemento e ele será a chave para o funcionamento do dodge, ou seja, sem AMULET, sem Dodge.   1º - Procure a pasta Lib na sua datapack, crie um arquivo 151-dodgesystem.lua e dentro adicione isso :
        2º- abra o arquivo actions.xml e adicione isso : <action itemid="12411" event="script" value="dodge.lua"/> 3º- entre na pasta scripts em actions, crie um arquivo .lua chamado dodge e adicione isso :


        4º- abra o arquivo creaturescripts.xml e adicione isso : <event type="statschange" name="DodgeSystem" event="script" value="dodge.lua"/> 5º- entre na pasta scripts em creaturescripts, crie um arquivo .lua chamado dodge e adicione isso :



        6º- ainda em creaturescripts, abra o arquivo login.lua e adicione isso la no final antes do return true : registerCreatureEvent(cid, "DodgeSystem")   7º- abra o arquivo movements.xml, substitua isso : OTX :


        TFS :
        por isso :
        8º - entre na pasta scripts em movements, crie um arquivo .lua chamado dodgeamulet e adicione isso :
          9º- abra o arquivo talkactions.xml e adicione isso : <talkaction log="yes" words="!dodge;/dodge" event="script" value="dodge.lua"/> 10º- entre na pasta scripts em talkactions, crie um arquivo .lua chamado dodge e adicione isso :
          no arquivo lib.. DODGE_PERCENT é os porcentos que o jogador ganhará por cada ponto adquirido; DODGE_MAX é o máximo de dodge; DODGE_PRICE é o preço de cada pedra; DODGE_ITEMID é o ID da pedra de dodge; DODGE_COMMAND_REMOVE é um comando para remover 1 ponto de dodge e receber 75% do dinheiro que você pagou pela pedra. true = comando disponível, false = comando inexistente; DODGE_ONLY_PREMIUM é para jogadores com premium, true = o dodge só funcionará com premium, false = qualquer um poderá usar; DODGE_TEXT é o texto que aparecerá quando o player desviar de um ataque; DODGE_TEXTCOLOR é a cor do texto;   DODGE_FISTMULTIPLIER é para multiplicar o fist fighting do jogador pelo multiplier configurado. true = multiplica, false = os multipliers serão sempre os mesmos valores;   type é o tipo de elemento; min é o hit mínimo; max é o hit máximo; mana é a quantidade de mana que precisa para contra-atacar com o elemento. se não tiver mana, só vai desviar; shoot é o efeito de distância.   ID dos amulets :  terra amulet      : 7887 glacier amulet    : 7888 lightning pendant : 7889 magma amulet      : 7890   comandos : !dodge; !dodge buy; !dodge remove.   caso você queira que o amulet mude de elemento ao dar use(estilo exp alta), abra o items.xml e substitua isso :
        por isso :
        um exemplo do DODGE_FISTMULTIPLIER : se estiver true, o jogador estiver com o 'magma amulet' e tiver 100 fist fighting, ele terá a chance de acertar um hit entre 400-1000 de dano; se estiver false, ele só vai hitar entre 4-9 de dano, ai você vai ter que editar pra deixar mais alto, só que será o padrão;    algumas imagens : 
        Então pessoal, espero que tenham gostado da minha versão. Eu fiz ela do zero, peguei só a ideia do Dodge System que vi em alguns Ots e mandei bala acrescentando esses elementos com amuleto.   créditos : Halls Santos & o criador do Dodge System, infelizmente não sei o nome dele. comentem ai que eu edito depois.
    • Por tataboy67
      Opa galera beleza?
      Meu amigo esses dias pediu um sistema basicamente assim:
      sistema:
      !quests charizard (você é teleportado para hunt ou quest por "x" tempo, e após esse tempo, você é teleportado para 1 posição "y" (cp/templo)) !quest time (o jogador recebe uma msg de quanto tempo ainda resta para ele ficar nessa hunt/quest) !quest (abre uma janela aonde fala as informações dessa hunt/quest)
      bom eu tentei usar o "for" para fazer com que tenha varios tipos de hunts dentro (criando uma tabela), mas como ainda estou estudando lua e esse é meu 1º script, eu não consegui fazer, então eu to usando o "param" E eu fui pesquisar aqui no forum e em outro forums tbm esse sistema, e vi que ninguem nunca postou  
      então resolvi cria-lo.
       
      Em Talkactions.xml, adicione a linha:

      Em Talkactions, crie um arquivo com o nome de quest_time.lua, e adicione:

      Creditos:
      Eu: Pelo script

      Desculpa se o script ficou ruim, é que é meu primeiro script, tenham pena de mim.  
      Eu farei melhoras nesse script mais pra frente.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo