KA

[Script] StorageValue

Por KarlKalvin, 23 de ago. de 2016 em Scripts

storage
collect
profissao
pxg
46
5.5k
KarlKalvinK
23 de agosto de 2016 às 23:34
16 minutos atrás, Gabriel Netto disse:

Esse erro aí não é do actionId, já que tá falando de setAttribute...

Não sei qual pode ser o problema de lógica, se algum scripter mais experiente quiser intervir please

 

 

Me explica oque significa >= 1, <= 1, == 1, ~=1, e == null?

LumusL
23 de agosto de 2016 às 23:48
17 minutos atrás, KarlKalvin disse:

 

Me explica oque significa >= 1, <= 1, == 1, ~=1, e == null?

São sinais matemáticos:

 

<= menor/menor ou igual à

>= maior/maior ou igual à

== igualdade absoluta

~= diferente  -> no php é: !=

null - valor nulo

Editado Agosto 23 por Lumus

23 de agosto de 2016 às 23:57
22 minutos atrás, KarlKalvin disse:

 

Me explica oque significa >= 1, <= 1, == 1, ~=1, e == null?

São operadores relacionais. Eles fazem verificações e só retornam valores booleanos, ou seja, true ou false.

 

>= : maior ou igual.

 

ex:

 

23 >= 23 retorna true, porque 23 é maior ou igual à 23

23 >= 14 retorna true, porque 23 é maior ou igual à 14

23 >= 24 retorna false, porque 23 não é maior ou igual à 24

 

<= : mesmo caso do anterior, só que significa menor ou igual.

 

==: operador de comparação

 

ex:

 

2 == 2 retorna true, porque 2 é igual à dois

2 == 3 retorna false, porque 2 não é igual à três

 

~= ( também visto como != ): mesmo caso do anterior, só que significa diferente. 

 

ex:

 

2 ~= 2 retorna false, porque 2 não é diferente de 2

2 ~= 3, retorna true, porque 2 é diferente de 2

 

Null ou nil é mais complexo. Ele é basicamente um nada que significa algo e ocupa espaço na memória. Pode ser usado em comparações e é útil em alguns casos.

 

Uma variável qnd só declarada é igual à null.

ex. em C++:

 

int a;

std::cout << a;

Vai retornar null.

Editado Agosto 23 por Gabriel Netto

KarlKalvinK
24 de agosto de 2016 às 00:32

Veja se meu raciocinio está correto....

 

O script tá trabalhando com um actionID 4432

 

Se eu por um if no começo do script com if getActionID(cid, 4432) ~= 1 then

return doPlayerSendCancel(cid, MSG_NAO)

end

 

Citar

 


function getActionID(itemid)
    return getItemDescriptions(itemid).actionid
end
 

 

 

Função do getactionid, to tentando dar uns desenrolos aqui... ai o script ficaria assim:

 

 



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

local chance = 10 -- chance de cortar
local madeiras = {17180, 17081, 17182, 17183} -- item que o player irá ganhar
local premio = madeiras[math.random(1, #madeiras)]
local scanningFailCanRepeat = false --ponha true se quiser que de para escanear novamente se o escaneamento falhar. Se botar false, só vai dar pra escanear o mesmo corpse 1x, independente da falha ou sucesso
local transformItem = 0
local texts = {"Coletando Informações..."}  -- texto que irá aparecer quando usar o item
local randoms = texts[math.random(1,#texts)]
local time = 2 -- Minutos para crescer novamente
local tempo = 1
local outfit = 38                   -- ID da Outfit Male.
local outfit2 = 31                  -- ID da Outfit Female.

if isRiderOrFlyOrSurf(cid) then
   return doPlayerSendCancel(cid, MSG_NAO_E_POSSIVEL)
end

if getActionID(cid, 4432) == 1 then
  return doPlayerSendCancel(cid, MSG_NAO_E_POSSIVEL)
end
                            
   local name = getItemNameById(item2.itemid)
    if not name:find("fainted") then
 doPlayerSendCancel(cid, MSG_NAO_E_POSSIVEL)
 return true
end
 
if getPlayerStorageValue(cid, 12015) ~= 1 then
doPlayerSendCancel(cid, "Nao pode.")
return true
end

   if getPlayerSex(cid) == 1 then
      doSetCreatureOutfit(cid, {lookType = outfit, lookHead = 0, lookAddons = 0, lookLegs = 0, lookBody = 0, lookFeet = 0}, time*1*1000)  --  Tempo em que a outfit estará trocada.
   else
       doSetCreatureOutfit(cid, {lookType = outfit2, lookHead = 0, lookAddons = 0, lookLegs = 0, lookBody = 0, lookFeet = 0}, time*1*1000)  --  Tempo em que a outfit estará trocada.
end
doCreatureSetNoMove(cid, true)
addEvent(function()
    if not isPlayer(cid) then return true end
    doCreatureSetNoMove(cid, false)
end, 1000)


    local name = getItemNameById(item2.itemid)
    tempo = 5 -- Segundos em que "paralisia" fica no player 
    if name:find("fainted") and item2.aid ~= 4432 then
        if math.random(1,100) >= chance then
            doSetItemActionId(item2.aid, 4432)
            doSendAnimatedText(topos, ""..randoms.."", TEXTCOLOR_GREEN)
            item = doCreateItemEx(premio, math.random(2,5))
            doItemSetAttribute(item, "unique", getCreatureName(cid))
            doPlayerAddItemEx(cid, item)
            doCreatureSetNoMove(cid, false)
            doPlayerSendTextMessage(cid, 22, "Você coletou informações e ganhou pontos.")
        else
            doSetItemActionId(item2.aid, 4432)
            doSendAnimatedText(topos, ""..randoms.."", TEXTCOLOR_GREEN)
            addEvent(function()
                doCreatureSetNoMove(cid, false)
                doPlayerSendTextMessag(cid,22,"Você não conseguiu coletar.")        
            end, time * 1000)
        end
    end
    return true
end

 

 

Editado Agosto 24 por KarlKalvin

24 de agosto de 2016 às 00:45
3 minutos atrás, KarlKalvin disse:

Veja se meu raciocinio está correto....

 

O script tá trabalhando com um actionID 4432

 

Se eu por um if no começo do script com if getActionID(cid, 4432) ~= 1 then

return doPlayerSendCancel(cid, MSG_NAO)

end

?

Não existe a função getActionID :/

Eu fiz isso aí usando o operador lógico AND.

Ele basicamente retorna true se as duas condições forem verdadeira, senão retorna false. É bem útil pra não ter que fazer vários ifs.

 

Com if encadeado:

 

if a = true then

  if b = true then

    bloco de código

  end

end

 

Com o operador and:

 

if a = true and b = true then

bloco de código

end

 

No teu script eu usei ele, olha:

if name:find("fainted") and item2.aid ~= 4432 then

Traduzindo, ficaria:

Se achar FAINTED no nome do item que eu usei o Use With e o item que eu usei o Use With tiver action ID diferente de 4432 então

 

 

Também temos o or e o xor. O or retorna true se pelo menos uma das condições forem verdadeiras, senão retorna false. Já o xor retorna true se só uma das condições forem verdadeiras.

 

KarlKalvinK
24 de agosto de 2016 às 01:02
15 minutos atrás, Gabriel Netto disse:

Não existe a função getActionID :/

Eu fiz isso aí usando o operador lógico AND.

Ele basicamente retorna true se as duas condições forem verdadeira, senão retorna false. É bem útil pra não ter que fazer vários ifs.

 

Com if encadeado:

 

if a = true then

  if b = true then

    bloco de código

  end

end

 

Com o operador and:

 

if a = true and b = true then

bloco de código

end

 

No teu script eu usei ele, olha:

if name:find("fainted") and item2.aid ~= 4432 then

Traduzindo, ficaria:

Se achar FAINTED no nome do item que eu usei o Use With e o item que eu usei o Use With tiver action ID diferente de 4432 então

 

 

Também temos o or e o xor. O or retorna true se pelo menos uma das condições forem verdadeiras, senão retorna false. Já o xor retorna true se só uma das condições forem verdadeiras.

 

Eu entendi.. tá uma bela dor de cabeça esse negocio, me adc no skype ai Gabi... kalvin.karl   ( país zimbabue para fácil achar )

Luga03L
24 de agosto de 2016 às 08:00

Use este código aqui:

 

function onUse(cid, item, frompos, item2, topos)
	
	local chance = 10 -- chance de cortar
	local madeiras = {17180, 17081, 17182, 17183} -- item que o player irá ganhar
	local premio = madeiras[math.random(1, #madeiras)]
	local texts = {"Coletando Informações..."} -- texto que irá aparecer quando usar o item
	local randoms = texts[math.random(1,#texts)]
	local time = 2 -- Segundos de outfit coletando informações
	local outfit = 38 -- ID da Outfit Male.
	local outfit2 = 31 -- ID da Outfit Female.
	
	if isRiderOrFlyOrSurf(cid) then
		return doPlayerSendCancel(cid, MSG_NAO_E_POSSIVEL)
	end
	
	local name = getItemNameById(item2.itemid)
	if not name:find("fainted") then
		doPlayerSendCancel(cid, MSG_NAO_E_POSSIVEL)
		return true
	end
	
	if getPlayerStorageValue(cid, 12015) ~= 1 then
		doPlayerSendCancel(cid, "Nao pode.")
		return true
	end
	
	if getPlayerSex(cid) == 1 then
		doSetCreatureOutfit(cid, {lookType = outfit, lookHead = 0, lookAddons = 0, lookLegs = 0, lookBody = 0, lookFeet = 0}, time*1*1000)
	else
		doSetCreatureOutfit(cid, {lookType = outfit2, lookHead = 0, lookAddons = 0, lookLegs = 0, lookBody = 0, lookFeet = 0}, time*1*1000)
	end
	doCreatureSetNoMove(cid, true)
	addEvent(function()
		if not isPlayer(cid) then return true end
		doCreatureSetNoMove(cid, false)
	end, 1000)
	
	
	local name = getItemNameById(item2.itemid) 
	if name:find("fainted") and item2.actionid ~= 4432 then
		if math.random(1,100) >= chance then
			doItemSetAttribute(item2.uid, "aid", 4432)
			doSendAnimatedText(topos, ""..randoms.."", TEXTCOLOR_GREEN)
			item = doCreateItemEx(premio, math.random(2,5))
			doItemSetAttribute(item, "unique", getCreatureName(cid))
			doPlayerAddItemEx(cid, item)
			doCreatureSetNoMove(cid, false)
			doPlayerSendTextMessage(cid, 22, "Você coletou informações e ganhou pontos.")
		else
			doItemSetAttribute(item2.uid, "aid", 4432)
			doSendAnimatedText(topos, ""..randoms.."", TEXTCOLOR_GREEN)
			addEvent(function()
				doCreatureSetNoMove(cid, false)
				doPlayerSendTextMessage(cid,22,"Você não conseguiu coletar.")		
			end, time * 1000)
		end
	end
	return true
end

Creio que este dará certo.

 

@Gabriel Netto, se tu quiser posso te explicar depois como funciona +- o addEvent

Editado Agosto 24 por Drazyn

PoccnnP
24 de agosto de 2016 às 08:09
14 horas atrás, Gabriel Netto disse:

É isso que eu vou fazer HSUAHUSASHAU, não tinha me tocado.

Como faz pra eu verificar o action id do item? :X:

 

Pega de dentro da tabela do item.

item.actionid

7 horas atrás, KarlKalvin disse:

Veja se meu raciocinio está correto....

 

O script tá trabalhando com um actionID 4432

 

Se eu por um if no começo do script com if getActionID(cid, 4432) ~= 1 then

return doPlayerSendCancel(cid, MSG_NAO)

end

 

 

Função do getactionid, to tentando dar uns desenrolos aqui... ai o script ficaria assim:

 

  Mostrar conteúdo oculto

 

 

 

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

 

local chance = 10 -- chance de cortar

local madeiras = {17180, 17081, 17182, 17183} -- item que o player irá ganhar

local premio = madeiras[math.random(1, #madeiras)]

local scanningFailCanRepeat = false --ponha true se quiser que de para escanear novamente se o escaneamento falhar. Se botar false, só vai dar pra escanear o mesmo corpse 1x, independente da falha ou sucesso

local transformItem = 0

local texts = {"Coletando Informações..."}  -- texto que irá aparecer quando usar o item

local randoms = texts[math.random(1,#texts)]

local time = 2 -- Minutos para crescer novamente

local tempo = 1

local outfit = 38                   -- ID da Outfit Male.

local outfit2 = 31                  -- ID da Outfit Female.

 

if isRiderOrFlyOrSurf(cid) then

   return doPlayerSendCancel(cid, MSG_NAO_E_POSSIVEL)

end

 

if getActionID(cid, 4432) == 1 then

  return doPlayerSendCancel(cid, MSG_NAO_E_POSSIVEL)

end

                            

   local name = getItemNameById(item2.itemid)

    if not name:find("fainted") then

 doPlayerSendCancel(cid, MSG_NAO_E_POSSIVEL)

 return true

end

 

if getPlayerStorageValue(cid, 12015) ~= 1 then

doPlayerSendCancel(cid, "Nao pode.")

return true

end

 

   if getPlayerSex(cid) == 1 then

      doSetCreatureOutfit(cid, {lookType = outfit, lookHead = 0, lookAddons = 0, lookLegs = 0, lookBody = 0, lookFeet = 0}, time*1*1000)  --  Tempo em que a outfit estará trocada.

   else

       doSetCreatureOutfit(cid, {lookType = outfit2, lookHead = 0, lookAddons = 0, lookLegs = 0, lookBody = 0, lookFeet = 0}, time*1*1000)  --  Tempo em que a outfit estará trocada.

end

doCreatureSetNoMove(cid, true)

addEvent(function()

    if not isPlayer(cid) then return true end

    doCreatureSetNoMove(cid, false)

end, 1000)

 

 

    local name = getItemNameById(item2.itemid)

    tempo = 5 -- Segundos em que "paralisia" fica no player 

    if name:find("fainted") and item2.aid ~= 4432 then

        if math.random(1,100) >= chance then

            doSetItemActionId(item2.aid, 4432)

            doSendAnimatedText(topos, ""..randoms.."", TEXTCOLOR_GREEN)

            item = doCreateItemEx(premio, math.random(2,5))

            doItemSetAttribute(item, "unique", getCreatureName(cid))

            doPlayerAddItemEx(cid, item)

            doCreatureSetNoMove(cid, false)

            doPlayerSendTextMessage(cid, 22, "Você coletou informações e ganhou pontos.")

        else

            doSetItemActionId(item2.aid, 4432)

            doSendAnimatedText(topos, ""..randoms.."", TEXTCOLOR_GREEN)

            addEvent(function()

                doCreatureSetNoMove(cid, false)

                doPlayerSendTextMessag(cid,22,"Você não conseguiu coletar.")        

            end, time * 1000)

        end

    end

    return true

end

 

 

 

 

 

Companheiro; além de estar errado os parâmetros da função,  você pode pegar o actionid p item diretamento no corpo dq função onuse ()

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

 

item.actionid

Luga03L
24 de agosto de 2016 às 08:20
9 minutos atrás, Poccnn disse:

 

Pega de dentro da tabela do item.

item.actionid

 

Companheiro; além de estar errado os parâmetros da função,  você pode pegar o actionid p item diretamento no corpo dq função onuse ()

 

item.actionid

Sim, verdade esqueci de ver se estava correto a verificação de ter actionid kk

 

Atualizei o ultimo código que eu postei.

 

Obs: Tópico movido para a área correta!

24 de agosto de 2016 às 12:48
12 horas atrás, KarlKalvin disse:

Veja se meu raciocinio está correto....

 

O script tá trabalhando com um actionID 4432

 

Se eu por um if no começo do script com if getActionID(cid, 4432) ~= 1 then

return doPlayerSendCancel(cid, MSG_NAO)

end

?

Se puder, quero sim, manda pm xD

KarlKalvinK
24 de agosto de 2016 às 13:00
5 horas atrás, Drazyn disse:

Use este código aqui:

 

function onUse(cid, item, frompos, item2, topos)
	
	local chance = 10 -- chance de cortar
	local madeiras = {17180, 17081, 17182, 17183} -- item que o player irá ganhar
	local premio = madeiras[math.random(1, #madeiras)]
	local texts = {"Coletando Informações..."} -- texto que irá aparecer quando usar o item
	local randoms = texts[math.random(1,#texts)]
	local time = 2 -- Segundos de outfit coletando informações
	local outfit = 38 -- ID da Outfit Male.
	local outfit2 = 31 -- ID da Outfit Female.
	
	if isRiderOrFlyOrSurf(cid) then
		return doPlayerSendCancel(cid, MSG_NAO_E_POSSIVEL)
	end
	
	local name = getItemNameById(item2.itemid)
	if not name:find("fainted") then
		doPlayerSendCancel(cid, MSG_NAO_E_POSSIVEL)
		return true
	end
	
	if getPlayerStorageValue(cid, 12015) ~= 1 then
		doPlayerSendCancel(cid, "Nao pode.")
		return true
	end
	
	if getPlayerSex(cid) == 1 then
		doSetCreatureOutfit(cid, {lookType = outfit, lookHead = 0, lookAddons = 0, lookLegs = 0, lookBody = 0, lookFeet = 0}, time*1*1000)
	else
		doSetCreatureOutfit(cid, {lookType = outfit2, lookHead = 0, lookAddons = 0, lookLegs = 0, lookBody = 0, lookFeet = 0}, time*1*1000)
	end
	doCreatureSetNoMove(cid, true)
	addEvent(function()
		if not isPlayer(cid) then return true end
		doCreatureSetNoMove(cid, false)
	end, 1000)
	
	
	local name = getItemNameById(item2.itemid) 
	if name:find("fainted") and item2.actionid ~= 4432 then
		if math.random(1,100) >= chance then
			doItemSetAttribute(item2.uid, "aid", 4432)
			doSendAnimatedText(topos, ""..randoms.."", TEXTCOLOR_GREEN)
			item = doCreateItemEx(premio, math.random(2,5))
			doItemSetAttribute(item, "unique", getCreatureName(cid))
			doPlayerAddItemEx(cid, item)
			doCreatureSetNoMove(cid, false)
			doPlayerSendTextMessage(cid, 22, "Você coletou informações e ganhou pontos.")
		else
			doItemSetAttribute(item2.uid, "aid", 4432)
			doSendAnimatedText(topos, ""..randoms.."", TEXTCOLOR_GREEN)
			addEvent(function()
				doCreatureSetNoMove(cid, false)
				doPlayerSendTextMessage(cid,22,"Você não conseguiu coletar.")		
			end, time * 1000)
		end
	end
	return true
end

Creio que este dará certo.

 

@Gabriel Netto, se tu quiser posso te explicar depois como funciona +- o addEvent

 

Eu também quero uma explicação do addevent, se puder mandar no meu pm também algum link de video aula ou qualquer coisa um texto explicando vou aceitar, obg. 

 

Vou testar o script!

 

EDIT: Script funcionando do jeito que eu queria só tem um detalhe básico quando você usa denovo a função:

 



if getPlayerSex(cid) == 1 then doSetCreatureOutfit(cid, {lookType = outfit, lookHead = 0, lookAddons = 0, lookLegs = 0, lookBody = 0, lookFeet = 0}, time*1*1000) else doSetCreatureOutfit(cid, {lookType = outfit2, lookHead = 0, lookAddons = 0, lookLegs = 0, lookBody = 0, lookFeet = 0}, time*1*1000) end

 

Ainda está sendo carregada mas o resto não porque?

Editado Agosto 24 por KarlKalvin

PoccnnP
24 de agosto de 2016 às 13:12

@KarlKalvin, existem tutoriais que ensinam programação em lua.

Dá uma conferida na seção de tutoriais de scripts.

Luga03L
24 de agosto de 2016 às 20:07
7 horas atrás, KarlKalvin disse:

 

Eu também quero uma explicação do addevent, se puder mandar no meu pm também algum link de video aula ou qualquer coisa um texto explicando vou aceitar, obg. 

 

Vou testar o script!

 

EDIT: Script funcionando do jeito que eu queria só tem um detalhe básico quando você usa denovo a função:

 

 

 

 

Ainda está sendo carregada mas o resto não porque?

Ok, não entendi essa sua ultima dúvida...

 

 

Obs: Vou mandar PM para vocês com uma explicaçãozinha básica kk

KarlKalvinK
24 de agosto de 2016 às 21:01
53 minutos atrás, Drazyn disse:

Ok, não entendi essa sua ultima dúvida...

 

 

Obs: Vou mandar PM para vocês com uma explicaçãozinha básica kk

 

Tipo... eu consigo "usar" o item nos SQM do meu lado porém esse "usar" é apenas a outfit mudando  já o script em si não funciona mas a outfit muda

Luga03L
25 de agosto de 2016 às 07:51
function onUse(cid, item, frompos, item2, topos)	print("inicio")	local chance = 10 -- chance de cortar	local madeiras = {17180, 17081, 17182, 17183} -- item que o player irá ganhar	local premio = madeiras[math.random(1, #madeiras)]	local texts = {"Coletando Informações..."} -- texto que irá aparecer quando usar o item	local randoms = texts[math.random(1,#texts)]	local time = 2 -- Segundos de outfit coletando informações	local outfit = 38 -- ID da Outfit Male.	local outfit2 = 31 -- ID da Outfit Female.		if isRiderOrFlyOrSurf(cid) then		return doPlayerSendCancel(cid, MSG_NAO_E_POSSIVEL)	end		local name = getItemNameById(item2.itemid)	if not name:find("fainted") then		doPlayerSendCancel(cid, MSG_NAO_E_POSSIVEL)		return true	end	print("nao esta de fly")	if getPlayerStorageValue(cid, 12015) ~= 1 then		doPlayerSendCancel(cid, "Nao pode.")		return true	end		if getPlayerSex(cid) == 1 then		doSetCreatureOutfit(cid, {lookType = outfit, lookHead = 0, lookAddons = 0, lookLegs = 0, lookBody = 0, lookFeet = 0}, time*1*1000)		print("male")	else		doSetCreatureOutfit(cid, {lookType = outfit2, lookHead = 0, lookAddons = 0, lookLegs = 0, lookBody = 0, lookFeet = 0}, time*1*1000)		print("female")	end		doCreatureSetNoMove(cid, true)	addEvent(function()		if not isPlayer(cid) then return true end		doCreatureSetNoMove(cid, false)	end, 1000)			local name = getItemNameById(item2.itemid) 	if name:find("fainted") and item2.actionid ~= 4432 then		print("isCorpse and not have a actionid")		if math.random(1,100) >= chance then			print("chance >")			doItemSetAttribute(item2.uid, "aid", 4432)			doSendAnimatedText(topos, ""..randoms.."", TEXTCOLOR_GREEN)			item = doCreateItemEx(premio, math.random(2,5))			doItemSetAttribute(item, "unique", getCreatureName(cid))			doPlayerAddItemEx(cid, item)			addEvent(function()				doCreatureSetNoMove(cid, false)				doPlayerSendTextMessage(cid, 22, "Você coletou informações e ganhou pontos.")				print("nao coletou")			end, time * 1000)		else			print("chance < ")			doItemSetAttribute(item2.uid, "aid", 4432)			doSendAnimatedText(topos, ""..randoms.."", TEXTCOLOR_GREEN)			addEvent(function()				doCreatureSetNoMove(cid, false)				doPlayerSendTextMessage(cid,22,"Você não conseguiu coletar.")	              	print("nao coletou")			end, time * 1000)		end	end	return trueend

Usa esse script, executa o action e me manda print do que aparece na tela...