Ir para conteúdo
  • 0

Duvida Em Relação A Variaveis E Funções


sabrina9292

Pergunta

Bom pessoal...

Eu comecei a criar meu proprio script de mineraçao...

E neste sistema será possivel avançar skills...

Só que para poder avançar skill eu criei um "formulinha" que esta me dando dor de cabeça, pois não sei qual e o metodo certo de lidar com este problema...

 

Por enquanto, o script eh este:

 

a = 10
b = 0
c = 10
function onUse(cid, item, fromPosition, itemEx, toPosition)
local function skillTry(cid)
  if getPlayerStorageValue(cid,102) < 0 then
  return 0
  else
  return getPlayerStorageValue(cid,102)
  end
end
local function skillLevel(cid)
  if getPlayerStorageValue(cid,202) < 0 then
  return 0
  else
  return getPlayerStorageValue(cid,202)
  end
end
if itemEx.actionid == 1515 then
  setPlayerStorageValue(cid, 102, skillTry(cid)+1)
  print(getPlayerStorageValue(cid,102)..', '.. c)
  if skillTry(cid) == c then
	 doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'Você avançou sua habilidade em mineração para o nível '.. skillLevel(cid)+1 .. '.')
	 setPlayerStorageValue(cid, 202, skillLevel(cid)+1)
	 setPlayerStorageValue(cid, 102, 0)
	 a = a + b
	 b = b + 10
	 c = c + a
  else
	 doSendAnimatedText(toPosition, 'Tick', 210)
	 doSendMagicEffect(toPosition, CONST_ME_POFF)
  end
  end
  return true																														  
end

 

E a minha dúvida é em relação as variavéis globais...

Até onde eu sei, não é aconselhavél usa-las, pois se houver duas variaveis com o mesmo nome em scripts diferentes, uma irá interferir na outra, mas em certos casos, você e obrigado a usa-las...

E minha duvida e justamente está... Existe algum modo mais sensato para fazer o que quero fazer?Sei-la, eu não entendo muito bem de funções, na verdade não entendo boa parte de lua ¬¬, mas talvez com funções seja melhor...

 

Bom é isso ai...

Acredito que neste script existam partes que possam ser substituidas por metodos mais "avançados" que complicam menos o script...

 

Desde já...

Muito obrigada

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

Posts Recomendados

  • 0

Não tenho certeza... Mas acredito que por variaveis globais realmente não irá dar certo... Pois estes valores tem que restringir particularmente a cada player...

Sei la

Acho que dá pra fazer isto com storages...

Mas talvez haja uma forma melhor

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpe minha ignorância, mas será que você se importa de me explicar mais detalhadamente, não consegui entender mellow.png

Mas de qualquer forma levou meu rep+...

Muito obrigada por tentar ajudar...

 

Depois de muito quebrar a cabeça... Meu script ficou assim:

 

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

local t = {
sign = {{level = {0,9}, percent = 25, itemid = {1293, 1294, 1295}},
	 {level = {10,14}, percent = 30, itemid = {1293, 1294, 1295, 2150}},
	 {level = {15,19}, percent = 35, itemid = {1293, 1294, 1295, 2150, 2149}},
	 {level = {20,24}, percent = 40, itemid = {1293, 1294, 1295, 2150, 2149, 2146}},
	 {level = {25,29}, percent = 45, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147}},
	 {level = {30,34}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970}},
	 {level = {35,39}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145}},
	 {level = {40,44}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157}},
	 {level = {45,49}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157, 2154}},
	 {level = {50,54}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157, 2154, 2156}},
	 {level = {55,59}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157, 2154, 2156, 2153}},
	 {level = {60,64}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157, 2154, 2156, 2153, 2155}},
	 {level = {70, 1000}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157, 2154, 2156, 2153, 2155, 2177}}}										     
	  }


  if itemEx.actionid == 1515 then
  setPlayerStorageValue(cid, 101, getPlayerStorageValue(cid, 101)+1)
  print('Skill Try: '.. getPlayerStorageValue(cid, 101) .. ' Skill Level:' .. getPlayerStorageValue(cid,102) .. ' A+B: ' .. getPlayerStorageValue(cid,103) + getPlayerStorageValue(cid,104))
  for Q = 1, #t.sign do
	 if getPlayerStorageValue(cid, 102) >= t.sign[Q].level[1] and getPlayerStorageValue(cid, 102) <= t.sign[Q].level[2] then
	    percent = t.sign[Q].percent
	    itemid = t.sign[Q].itemid[math.random(1,#t.sign[Q].itemid)]
	    break
	 end
  end
  doSendMagicEffect(toPosition, CONST_ME_POFF)
  if math.random(20,100) <= percent then
	 doPlayerAddItem(cid, itemid , 1)
  else
	 doSendAnimatedText(toPosition, 'Tick', 210)
  end
  if getPlayerStorageValue(cid, 101) == getPlayerStorageValue(cid, 103)+getPlayerStorageValue(cid, 104) then
	 doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'Você avançou sua habilidade em mineração para o nível '.. getPlayerStorageValue(cid, 102)+1 .. '.')
	 setPlayerStorageValue(cid, 103, getPlayerStorageValue(cid, 103)+getPlayerStorageValue(cid, 104))	    
	 setPlayerStorageValue(cid, 104, getPlayerStorageValue(cid, 104)+getPlayerStorageValue(cid, 105))
	 setPlayerStorageValue(cid, 105, getPlayerStorageValue(cid, 105)+10)
	 setPlayerStorageValue(cid, 102, getPlayerStorageValue(cid, 102)+1)
  end
  end
  return true																														   
end

 

Mas sinto que ele esta grotesco e ate ira causar leg quando muitas pessoas estiverem mineirando... E eu adoraria aprender tecnicas mais avançadas ;D

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

  • 0

Bom pessoal...

Eu estou querendo criar um sistema de mineração com skills...

Só que é a primeira vez que fasso isso e estou com medo de estar fazendo do modo errado, acredito que para isso o mais apropriado nao seja variaveis...

Entao tentei com storages e então o meu script ficou como o postado no meu ultimo post... Porem eu acho que ele ta muito grotesco e até ira causar lag quando muitas pessoas resolverem minerar...

Então gostaria de saber se vocês sabem um metódo mais simples de fazer o que eu quero fazer...

 

A respeito da fórmula... Acho que a melhor forma de entender e pelo script que criei para poder entende-la:

a=0
b=10
c=0
while a+b <= 1000000 do
  print(a .. ' + '.. b .. ' = ' .. a+b)
  a=a+b
  b=b+c
  c=c+10
end

 

É isso ai pessoal... Acho que da pra entender pelo script... Mas qualquer coisa eu tento esplica-la...

 

Resumindo em poucas palavras... Eu gostaria que vo^ces me ajudassem a "encurtar" o script e torna-lo mais "eficiente"

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

  • 0

isso não é uma fórmula, é um monte de soma sem sentido.

 

vc precisa de uma fórmula pra quando ele tentar usar o item aumentar as chances dele de dar certo ou não, e a cada vez que ele usar o item aumentar o skill dele.

 

Primeiramente quero deixar bem claro que sou muito grata a você, afinal de contas, reconheço que você tem um grau de conhecimento muito maior que o meu e ja me ajudou demais ... Muito obrigada

Mas me desculpe, terei que discordar de você... Não sei a definilção exata da palavra "formula" e nem o que você costuma considerar como formula, mas ate onde eu sei, é uma representação simbolica utilizada para encontrar um número, e foi exatamente nisto que este script me ajudou... E se voce analiza-lo e conseguir realmente entende-lo, irá fazer o maior sentido...

Observe:

Serão necessário 10 para o nível 1

Serão necessário 20 para o nível 2

Serão necessário 40 para o nível 3

Serão necessário 80 para o nível 4

Serão necessário 150 para o nível 5

Serão necessário 260 para o nível 6

Serão necessário 420 para o nível 7

Serão necessário 640 para o nível 8

Serão necessário 930 para o nível 9

Serão necessário 1300 para o nível 10

Serão necessário 1760 para o nível 11

Serão necessário 2320 para o nível 12

Serão necessário 2990 para o nível 13

Serão necessário 3780 para o nível 14

Serão necessário 4700 para o nível 15

Serão necessário 5760 para o nível 16

Serão necessário 6970 para o nível 17

Serão necessário 8340 para o nível 18

Serão necessário 9880 para o nível 19

Serão necessário 11600 para o nível 20

Serão necessário 13510 para o nível 21

Serão necessário 15620 para o nível 22

Serão necessário 17940 para o nível 23

Serão necessário 20480 para o nível 24

Serão necessário 23250 para o nível 25

Serão necessário 26260 para o nível 26

Serão necessário 29520 para o nível 27

Serão necessário 33040 para o nível 28

Serão necessário 36830 para o nível 29

Serão necessário 40900 para o nível 30

Serão necessário 45260 para o nível 31

Serão necessário 49920 para o nível 32

Serão necessário 54890 para o nível 33

Serão necessário 60180 para o nível 34

Serão necessário 65800 para o nível 35

Serão necessário 71760 para o nível 36

Serão necessário 78070 para o nível 37

Serão necessário 84740 para o nível 38

Serão necessário 91780 para o nível 39

Serão necessário 99200 para o nível 40

Serão necessário 107010 para o nível 41

Serão necessário 115220 para o nível 42

Serão necessário 123840 para o nível 43

Serão necessário 132880 para o nível 44

Serão necessário 142350 para o nível 45

Serão necessário 152260 para o nível 46

Serão necessário 162620 para o nível 47

Serão necessário 173440 para o nível 48

Serão necessário 184730 para o nível 49

Serão necessário 196500 para o nível 50

 

Observe que a quantidade de pontos necessaria para cada nivel aumenta gradativamente, e alem do mais, todas as quantidades de pontos necessarios são numeros exatos e não são exagerados.

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

  • 0

já entendi seu código, não entendi o problema ainda.

 

você está usando os storages corretamente.

 

só não entendi o math.random do seu código.

 

 

if math.random(20,100) <= percent then

 

por que não if math.random(1, 100) <= percent then

 

não seria o correto?

Link para o comentário
Compartilhar em outros sites

  • 0

já entendi seu código, não entendi o problema ainda.

 

você está usando os storages corretamente.

 

só não entendi o math.random do seu código.

 

 

if math.random(20,100) <= percent then

 

por que não if math.random(1, 100) <= percent then

 

não seria o correto?

 

Esta parte eu ainda nao acabei... Eu ainda tenho que rever estes numeros, mas acredito que não irá mudar muita coisa, só ira ficar mais facil de dropar os items...

Eu gostaria de saber se vocês conhecem uma forma melhor e mais eficiente de fazer este script...

 

Mas muito obrigada pela dica

Link para o comentário
Compartilhar em outros sites

  • 0

mas por que? seu código não está ruim.

 

só a tabela la que podia ser assim:

 

 

sign = {{level = {0,9}, percent = 25, itemid = {1293, 1294, 1295}},
                {level = {10,14}, percent = 30, itemid = {1293, 1294, 1295, 2150}},
                {level = {15,19}, percent = 35, itemid = {1293, 1294, 1295, 2150, 2149}},
                {level = {20,24}, percent = 40, itemid = {1293, 1294, 1295, 2150, 2149, 2146}},
                {level = {25,29}, percent = 45, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147}},
                {level = {30,34}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970}},
                {level = {35,39}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145}},
                {level = {40,44}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157}},
                {level = {45,49}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157, 2154}},
                {level = {50,54}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157, 2154, 2156}},
                {level = {55,59}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157, 2154, 2156, 2153}},
                {level = {60,64}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157, 2154, 2156, 2153, 2155}},
                {level = {70, 1000}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157, 2154, 2156, 2153, 2155, 2177}}}

 

Não precisava estar dentro de uma outra table.

Link para o comentário
Compartilhar em outros sites

  • 0

mas por que? seu código não está ruim.

 

só a tabela la que podia ser assim:

 

 

sign = {{level = {0,9}, percent = 25, itemid = {1293, 1294, 1295}},
			 {level = {10,14}, percent = 30, itemid = {1293, 1294, 1295, 2150}},
			 {level = {15,19}, percent = 35, itemid = {1293, 1294, 1295, 2150, 2149}},
			 {level = {20,24}, percent = 40, itemid = {1293, 1294, 1295, 2150, 2149, 2146}},
			 {level = {25,29}, percent = 45, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147}},
			 {level = {30,34}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970}},
			 {level = {35,39}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145}},
			 {level = {40,44}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157}},
			 {level = {45,49}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157, 2154}},
			 {level = {50,54}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157, 2154, 2156}},
			 {level = {55,59}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157, 2154, 2156, 2153}},
			 {level = {60,64}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157, 2154, 2156, 2153, 2155}},
			 {level = {70, 1000}, percent = 50, itemid = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157, 2154, 2156, 2153, 2155, 2177}}}

 

Não precisava estar dentro de uma outra table.

 

 

Ahhhh... Muito obrigada...

Eu copiei a estrutura da tabela de outro script e nao havia notado...

Mas por nao conhecer os metodos mais avançados, tenho medo dos meus scripts darem lag, sei la...

Mas muito obrigada, levou meu rep+ xD

Link para o comentário
Compartilhar em outros sites

  • 0

o que da pra fazer é deixar mais "bonitinho", dar uma orientada a objetos:

 

http://pastebin.com/XtJzE3t5

 

Postado no pastebin porque o fórum ta comendo minha identação.

 

Se importa de me ajudar em so mais uma coisinha pititinharolleyes.gif ?

 

Pode me explicar o que significa os dois pontos em lua ":" ?

 

function sign:new(uid, toPosition)

self:setFormule(uid)

function sign:setFormule(uid)

sign:new(cid, toPosition)

 

Brigadim ;D

Link para o comentário
Compartilhar em outros sites

  • 0
Link para o comentário
Compartilhar em outros sites

  • 0

Não sei se ajuda, mas pra diminuir essa LISTA de items gigantesca dá pra fazer algo como isso:

local sign = { {level = {0,9}, percent = 25},
{level = {10,14}, percent = 30},
{level = {15,19}, percent = 35},
{level = {20,24}, percent = 40},
{level = {25,29}, percent = 45},
{level = {30,34}, percent = 50},
{level = {35,39}, percent = 50},
{level = {40,44}, percent = 50},
{level = {45,49}, percent = 50},
{level = {50,54}, percent = 50},
{level = {55,59}, percent = 50},
{level = {60,69}, percent = 50},
{level = {70,false}, percent = 50}}


local itemids_ALL = {1293, 1294, 1295, 2150, 2149, 2146, 2147, 9970, 2145, 2157, 2154, 2156, 2153, 2155, 2177}
local l, r, newid, itemids = getPlayerLevel(cid), 0, 0, {}
for k,v in ipairs(sign) do
r = k
if l >= v.level[1] and (l <= v.level[2] or v.level[2] == false) then
break
end
end

while newid < r do
newid = newid+1
table.insert(itemids, itemid_ALL[newid])
end

 

E também, já que os levels seguem um padrão, não creio que você vá precisar colocar uma tabela com isso.

 

Edit --

No final ficou a mesma coisa, mas por exemplo, se você quiser colocar novos items até o 140 por exemplo, você ia perder uma hora fazendo a lista, com isso só colocar um amais no final .. :)

 

Sobre a fórmula você tem que fazer que várias variáveis formem um total utilizado no final.

Tente usar variáveis como os storages de level e try e o level do player e depois utilizar isso em uma porcentagem (math.random(1,100) <= resultado_da_formula).

 

Edit² --

O XTibia tá tirando a identação :/

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

×
×
  • Criar Novo...