Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Olá galera,

Como ficou explicito no titulo, gostaria de saber se existe alguma forma de registrar informações que foram geradas ou informadas dentro do script.

deixe-me exemplificar para facilitar.

 

Situação1

math.random(x, y)

supondo que um script possua vários math.random durante sua execução, é possível registrar seus respectivos resultados?

eu já vi scripts em que as pessoas declaram uma tabela vazia, e a o decorrer do script inserem e retiram valores dela. acredito que esse seja um dos métodos mas não consigo entender como.

 

Situação2

	getCreaturePosition(cid)

essa linda função que retorna a posição da criatura em x,y e z. é possivel registrar a posição inicial do jogador ao executar o script? vi um script do Wolf que ele usa a função de inserir em tabela,

mas igual a situação1 não consigo compreender apenas ao ler o script.

---enfim, o pedido é praticamente pra ensinar a usar uma função especifica, mas caso haja outro modo, gostaria de saber.

aguardo dicas haha, obrigado galera.

Link para o post
Compartilhar em outros sites

vc quer salvar a posicao do player pra usar no mesmo script ou em outro? Pq usar tabelas ou variáveis depende muito do que vc quer fazer, ag se se for pra usar em outro script tem q salvar no player

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

na verdade as duas formas são interessantes, embora a segunda se mostra aparentemente muito mais complexa.

a primeira é mais interessante no momento.

seria a segunda responsavel por ser possivel fazer ranks?

Link para o post
Compartilhar em outros sites

pra fazer rank é só fazer uma query no banco de dados do servidor. Calma q esse papo tá muito disléxico, oque vc quer especificamente? pra cada problema a forma de solucionar varia, se vc quer q eu te explique qnd usar cada forma eu posso fazer mas preciso primeiro entender oque vc quer..

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

eu imaginei mesmo que fosse bem complexo. segue a ideia

estou bolando um creaturescript que o monstro tem 10% de chances (dado inutil) de iniciar uma mecanica

mecanica :

ele faz um math.random (1, 6). e finaliza

dps tem mais 10% de chances de de fazer dnv e assim consecutivamente.

assim por 3x. ou seja, ele fez 3 math.random(1, 6) ( bolei uma forma bem feia de contar as vezes mas, enfim.)

queria que na quarta vez eu pudesse usar o valor dos math.random na formula por exemplo.

 

getAllRandomValues(math1, math2, math3)
if math1 * math2 * math3 <= xxx then
                              alguma coisa
elseif math1 * math2 * math3 == xxx then
                              alguma coisa
elseif math1 * math2 *math3 >= then
                              alguma coisa

se eu soubesse como, poderia fazer até uma função para isso hahaha

pois parece bem util.

ou então uma forma de inserir os valores em uma tabela, porque ai seria possivel usar o table.concat fazendo um sistema igualmente interessante.

table.insert(maths, 1, math1) and tableinsert (maths, 2, math2) and table.insert (maths, 3, math3)
local finaljudge = table.concat (maths)
if finaljudge <= XXX then
                   bla bla bla toda aquela historia

porque acredito que o table.concat retornaria a junção dos 3 numeros, por exemplo.

 

math1 = 2

math2 = 1

math3 = 6

 

table.concat retornaria 216.

estou certo?

acho que deu pra entender haha

Link para o post
Compartilhar em outros sites

bom, tem dois jeitos ao meu ver:

criar uma tabela fora do escopo do callback e checar se o #table % 4 == 0 (se o numero de elementos na tabela é multiplo de 4) e dar concat nos 3 ultimos elementos

for i = #table - 2, #table do
     --
end

A outra opção é fazer assim
if storage > 100 then
zera o storage e faz o golpe pegando o valor do storage.
elseif storage > 10 then
 salva como sendo valor antigo + (100* valor atual)
elseif storage > 0 then
salva como sendo valor antigo + (10 * valor atual)
else salva como sendo valor antigo
end

mas lembra que isso não vai separar os hits de cada player, se 10 caras atacarem eles vão stackar o bang no mob rapidão.

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

veja, eu não entendi muito bem as duas formas, mas deixa eu tentar explicar melhor.

o script está assim (não está terminado, mas da pra ter uma base)

local damageperna = math.floor((getCreatureMaxHealth(attacker)*5)/5)
function onStatsChange(cid, attacker, type, combat, value)
    if math.random(1, 100) <= 10 then
        if isCreature(cid) and getCreatureName(cid) == 'Dicer' then
            if getPlayerStorageValue(attacker, 9000)  == 0  then
                doCreatureSay(uid, "Então você escolheu o combate, vamos ver o que a sorte tem para você", TALKTYPE_MONSTER_YELL)
            doSendMagicEffect(getCreaturePosition(cid), 26)
            setPlayerStorageValue(attacker, 9000)
        elseif getPlayerStorageValue(attacker, 9000) == 1 then
            doCreatureSay(uid, "onde é que paramos?", TALKTYPE_MONSTER_YELL)
            doSendMagicEffect(getCreaturePosition(cid), 26)
        end
        local dice = math.random(1, 6)
        if dice == 1 then
            addEvent(function()
                if isCreature(cid) then
                    doCreatureSay(uid, "1! haha, o jogo diz que você deve perder a perna", TALKTYPE_MONSTER_YELL)
                    	doAddCondition(attacker, paralyse)
                    doSendMagicEffect(getCreaturePosition(attacker), 0)
                    doCreatureAddHealth(attacker, -(damageperna))
                    addEvent(doCreatureSay, 1000, "Então o que me diz? vamos continuar jogando? HAHA", TALKTYPE_MONSTER_YELL)
                    if getPlayerStorageValue(attacker, 9002) == 0 and getPlayerStorageValue(attacker, 9003) == 0 and getPlayerStorageValue(attacker, 9004) == 0 then
                        setPlayerStorageValue(attacker, 9002)
                    elseif getPlayerStorageValue(attacker, 9003) == 0 and getPlayerStorageValue(attacker, 9004) == 0 then
                        setPlayerStorageValue(attacker, 9003)
                    elseif getPlayerStorageValue(attacker, 9004) == 0 then
                        setPlayerStorageValue(attacker, 9004)
                    end
                end
            end, 1500)
        elseif dice == 2 then
            addEvent(function()
                if isCreature(cid) then
                    doCreatureSay(uid, "2! haha, o jogo diz que eu devo arrancar seu braço! HAHAHAHA", TALKTYPE_MONSTER_YELL)
                    
                    

parei ai mas o sistema seria o mesmo até chegar no storage maximo que é 9004. 

acredito que ficou uma gambiarra bem feia no fim das contas, mas vou tentar explicar.

        local dice = math.random(1, 6)
        if dice == x then

local dice seria a base pra fazer o jogo ser randomico (bem obvio).

agora :

                    if getPlayerStorageValue(attacker, 9002) == 0 and getPlayerStorageValue(attacker, 9003) == 0 and getPlayerStorageValue(attacker, 9004) == 0 then
                        setPlayerStorageValue(attacker, 9002)
                    elseif getPlayerStorageValue(attacker, 9003) == 0 and getPlayerStorageValue(attacker, 9004) == 0 then
                        setPlayerStorageValue(attacker, 9003)
                    elseif getPlayerStorageValue(attacker, 9004) == 0 then
                        setPlayerStorageValue(attacker, 9004)
                    end

essa é a parte que bagunça um pouco mas da pra entender (como não ta pronto, ainda não testei)

funcionaria assim :

o script verifica o storage do jogador e se ele não tiver nenhum dos 3 storages que são setados a cada ataque

ele recebe o storage 1 ( que seria o primeiro ataque ).

se a primeira condição for falsa, significa que ele possui algum storage, ai eu fui excluindo scripts dos ataques anteriores um por um de forma que vá identificando bem qual o estagio do jogo.

AGORA viria a parte que eu não consigo fazer nem pensar como fazer.

se o jogador tiver o storage 9004 que é o ultimo ataque ( o terceiro ).

o script verificaria o storage e traria a função (que não existe) que eu disse:

getAllRandomValues(math1, math2, math3)
if math1 * math2 * math3 <= xxx then
                              alguma coisa
elseif math1 * math2 * math3 == xxx then
                              alguma coisa
elseif math1 * math2 *math3 >= then
                              alguma coisa

 

Link para o post
Compartilhar em outros sites

fazendo dessa maneira fica feio mas se vc quiser q seja sempe o quarto ataque de um mesmo player pra tem q ser assim (vou dar uma melhorada nesse código pra vc mas a ideia é essa). Agora se vc não ligar de ativar sempre no quarto ataque q o bixo toma (independente de quem atacou) aí da pra fazer ficar pequeninho o código. Me fala qual das duas vc quer q eu faço já tudo pra você

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

tá bem dificil de entender oque vc quis fazer aqui mas em todo caso arrumei uns erros que vc tinha cometido (de código, de lógica ainda tem vários ao meu ver) e coloquei da forma que eu tinha proposto anteriormente.

 

Spoiler

function onStatsChange(cid, attacker, type, combat, value)
	if math.random(1, 100) <= 10 then
		if isCreature(cid) and getCreatureName(cid) == 'Dicer' then
			if getPlayerStorageValue(attacker, 9000)  == 0  then
				doCreatureSay(cid, "Então você escolheu o combate, vamos ver o que a sorte tem para você", TALKTYPE_MONSTER_YELL)
				doSendMagicEffect(getCreaturePosition(cid), 26)
				setPlayerStorageValue(attacker, 9000, 1)
			elseif getPlayerStorageValue(attacker, 9000) == 1 then
				doCreatureSay(cid, "onde é que paramos?", TALKTYPE_MONSTER_YELL)
				doSendMagicEffect(getCreaturePosition(cid), 26)
			end
			local dice = math.random(1, 6)
			if dice == 1 then
				addEvent(function()
						if isCreature(cid) then
							doCreatureSay(cid, "1! haha, o jogo diz que você deve perder a perna", TALKTYPE_MONSTER_YELL)
							doAddCondition(attacker, paralyse)
							doSendMagicEffect(getCreaturePosition(attacker), 0)
							local damageperna = math.floor((getCreatureMaxHealth(attacker))/5)
							doCreatureAddHealth(attacker, -(damageperna))
							addEvent(doCreatureSay, 1000, "Então o que me diz? vamos continuar jogando? HAHA", TALKTYPE_MONSTER_YELL)
							------------ aqui--------
							local stor = getPlayerStorageValue(cid, 9001)
							if stor > 100 then
								local dmg = stor --- abaixo disso aqui vc pode colocar pra fazer oque vc quiser com o valor do storage, está salvo nessa variável.
								setPlayerStorageValue(cid, 9001, 0)
							elseif stor > 10 then
								setPlayerStorageValue(cid, 9001, stor + 100* (math.random(1, 6)))
							elseif stor > 0 then
								setPlayerStorageValue(cid, 9001, stor + 10* (math.random(1, 6)))
							else 
								setPlayerStorageValue(cid, 9001, math.random(1, 6))
							end
							-----------------------
						end
					end, 1500)
			elseif dice == 2 then
				addEvent(function()
						if isCreature(cid) then
							doCreatureSay(cid, "2! haha, o jogo diz que eu devo arrancar seu braço! HAHAHAHA", TALKTYPE_MONSTER_YELL)

 

 

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

mas pelo que eu entendi isso ai vai armazenas a storage, não?

a ideia era que armazenasse o resultado dos math.random.

você poderia me explicar o que acontece na parte do "-----aqui-----" porque eu n entendi bem ( pra ser sincero entendi nada).

a ideia era bem mais simples que isso, era simplesmente armazenar o resultado dos 3 math.randoms que correspondem ao ataque, pra depois poder formar um numero com os 3.

tipo:

math.random 1 = 1

math.random 2 = 1

math.random 3 = 1

 

se eu conseguisse armazenar os math.random ( o resultado deles )

poderia retornar o numero "111" no script.

entende? é como se eu formasse uma sequencia de numeros com numeros previos retirados aleatoriamente.

pra mim parece q eu expliquei tão bem, mas só pra mim hahaha.

 

edit--

tenho grandes convicções para acreditar que eu expliquei mal e vc fez um script baseado na minha mal explicação.

ou eu não entendi mesmo

edit2--

colocar pra fazer oque vc quiser com o valor do storage, está salvo nessa variável.

eu preciso fazer exatamente isso, porem com o valor do math random. 

salvar o valor dos 3 math.random em 1 variavel, fazendo assim, eu poder retornar o valor a qualquer hora.

será mt complexo?

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

vê se vc entende agora:
 

Spoiler

function onStatsChange(cid, attacker, type, combat, value)
	if math.random(1, 100) <= 10 then
		if isCreature(cid) and getCreatureName(cid) == 'Dicer' then
			if getPlayerStorageValue(attacker, 9000)  == 0  then
				doCreatureSay(cid, "Então você escolheu o combate, vamos ver o que a sorte tem para você", TALKTYPE_MONSTER_YELL)
				doSendMagicEffect(getCreaturePosition(cid), 26)
				setPlayerStorageValue(attacker, 9000, 1)
			elseif getPlayerStorageValue(attacker, 9000) == 1 then
				doCreatureSay(cid, "onde é que paramos?", TALKTYPE_MONSTER_YELL)
				doSendMagicEffect(getCreaturePosition(cid), 26)
			end
			local dice = math.random(1, 6)
			------------ aqui--------
			local stor = getPlayerStorageValue(cid, 9001)
			if stor > 100 then
				local dmg = stor --- abaixo disso aqui vc pode colocar pra fazer oque vc quiser com o valor do storage, está salvo nessa variável.
				setPlayerStorageValue(cid, 9001, 0)
			elseif stor > 10 then
				setPlayerStorageValue(cid, 9001, stor + 100* dice)
			elseif stor > 0 then
				setPlayerStorageValue(cid, 9001, stor + 10* dice)
			else 
				setPlayerStorageValue(cid, 9001, dice)
			end
			-----------------------

 



o storage inicialmente é -1 então ele cai no else ali e vai setar o valor como sendo o valor do dice (1~6).
Aí no próximo ataque ele vai cair no elseif stor > 0 e setar o valor que estava (1~6) + 10 * (1~6), ou seja vai ficar (10~60)+ (1~6).
No próximo ataque ele vai cair no elseif stor > 10 e  setar o valor que estava  (10~60)+ (1~6) + 100* (1~6) ou seja, vai ficar (100~600)+(10~60)+ (1~6).

No ultimo ataque ele vai cair no if stor > 100 e aí ele passa o valor pra variável dmg e zera o storage.
Nessa parte que ele faz isso, vc pode fazer oque vc quiser com a sequência de dices que caiu.. se cair 3 no primeiro, 4 no segundo e 1 no terceiro o numero salvo em dmg será 143. Entendeu agora?

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

hmm, agora eu entendi a ideia perfeitamente.

mas deixe-me conferir se estou certo.

se eu fizer dessa forma teria de abrir mão dos 3 ataques inicias programados certo? ( que seria o jogo de dados do boss, cada numero do dado equivale a uma punição )

também teria de guardar todos os storages multiplicaveis ali para esse script, correto?

e por ultimo, eu não poderia configurar de forma precisa oque ele faria ao final do script certo? ( que seria as combinações dos numeros [ minha ideia era fazer com que a ordem dos numeros OU o seus valores significassem cada punição]) 

--

uma duvida, sempre que eu declarar "dice" no script ele vai fazer outro math.random?

Link para o post
Compartilhar em outros sites

não precisa abrir mão, dá pra vc fazer uma lógica que inclua isso.


guardar os storages multiplicáveis? como assim?

Dá pra configurar de forma precisa sim, uma vez que vc tem todos os valores salvos por ordem e por valor.

Se vc declarar dice ele vai pegar o valor salvo pelo primeiro math.random gerado, se vc quiser fazer outro use a função math.random(1,6) ao invés da variável.

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

sim, toda vez que for executado o callback ele irá gerar um novo math.random mas cada vez que vc usar dice o valor será do primeiro math.random

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

putz, mano era só isso o.O

e se eu usar

 

dice1dice2dice3

sem espaço entre eles, eles retornam em numeros, ou tem que usar varianttonumber?

Link para o post
Compartilhar em outros sites

se vc usar dice1..dice2..dice3 ele retorna uma string com os 3 valores de dice.
vamos supor 1, 4, e 2

vai retornar "142"

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

vou testar logo mais, se funcionar direi quando voltar da facul.

mas me diga, sobre os erros que tinha no codigo, quais eram os erros de logica? o.O

Link para o post
Compartilhar em outros sites

vc tava querendo pegar a vida do atacante fora do callback (nesse momento não existe atacante ainda) e tava falando pro uid falar as frases.. na vdd tinha que ser o cid

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

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 Jaurez
      .
    • Por Cat
      Em alguns casos, o tibia 8.60 comum não abre de jeito nenhum no map editor, mesmo desmarcando check file signatures e configurando o path corretamente.
       
      Este é o client 8.60 adaptado para o Remere's Map Editor. Resolvi postar já que ele foi removido do site oficial do RME. (ficou apenas a versão para linux lá)
      Se estiver tendo problemas para abrir a versão 8.60, tente utilizar este.
                                                                                                                     
      Baixar o Tibia Client 8.60 que funciona no Remere’s Map Editor
      Essa versão do Tibia 8.60 client resolve o erro unsupported client version ou Could not locate tibia.dat and/or tibia.spr, please navigate to your tibia 8.60 installation folder.
       
      Downloads
      https://tibiaking.com/applications/core/interface/file/attachment.php?id=47333

      Scan: https://www.virustotal.com/gui/file/333e172ac49ba2028db9eb5889994509e7d2de28ebccfa428c04e86defbe15cc
       
    • Por danilo belato
      Fala Galera To Com um problema aki 
       
      quero exporta umas sprites de um server para colocar em outro 
       
      eu clico na sprites ai aparece tds a forma delas do lado de la >>
       
      ai eu clico nela e ponho a opiçao de export mais quando salvo a sprite ela n abri 
       
      aparece isso quando tento vê-la 
       
      visualização não disponível ( no formatos png e bitmap)
       
      Agora no formato idc fala que o paint n pode ler 
       
      me ajudem ae...
    • Por Vitor Bicaleto
      Galera to com o script do addon doll aqui, quando eu digito apenas "!addon" ele aparece assim: Digite novamente, algo está errado!"
      quando digito por exemplo: "!addon citizen" ele não funciona e não da nenhum erro
       
      mesma coisa acontece com o mount doll.. 
    • Por Ayron5
      Substitui uma stone no serve, deu tudo certo fora  esse  erro ajudem  Valendo  Rep+  Grato  

      Erro: data/actions/scripts/boost.lua:557: table index is nil
       [Warning - Event::loadScript] Cannot load script (data/actions/scripts/boost.lua)

      Script:
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo