LU

[Creaturescripts] Recompensa Por Level

Por lucas502, 22 de mai. de 2012 em Scripts

script
16
3.3k
lucas502L
22 de maio de 2012 às 22:38

Ae galera beleza? preciso de uma ajudinha basica aki pra colocar recompensa quando o player atingir certo level

 

mas tem um porém, não quero q ele ganhe itens, quero que a recompensa seja premium points (premium points do gesior) para que possa gastar os points no site

 

tenho um exemplo aki, mas é de item e character, como faço para colocar pra ganhar premium point na account:

function onAdvance(cid, skill, oldlevel, newlevel)

	    if(getPlayerStorageValue(cid, 99963) ~= 1 and skill == SKILL__LEVEL and newlevel >= 45) then
					    doPlayerAddItem(cid, 2160, 5)
					    setPlayerStorageValue(cid, 99963, 1)
					    doPlayerSendTextMessage(cid, 22, "You have received 5 crystal coins because you reached level 45")
					    end
	    return TRUE
end

 

Aguardo, Vlw!

LordfireL
22 de maio de 2012 às 23:16

Como funciona esse sistema do seu server, de premium point?

 

Se souber mexer em algo, basta substituir o que tem entre o "then" e o primeiro "end" por algum código que adicione premium points (que você saiba que funcione).

caoticC
23 de maio de 2012 às 13:28

Acredito que seja por storage se souber o numero da storage manda ela....

lucas502L
23 de maio de 2012 às 13:45

não é por storage não. É uma coluna (campo) que fica na db do mysql.

 

na table Accounts, la onde mostra "id, premdays" e tal. Tem uma chamada: Premium_Points

 

acredito que é soh colocar pra ele ganhar um X Numero nesse campo.

VildenV
23 de maio de 2012 às 15:12

Não sei meche com databases mais posso tentar, envie uma ss ou escreva

o que tem dentro da tabela premium_points

 

 

 

function onAdvance(cid, skill, oldlevel, newlevel)

 

local quantia = 10

 

if(getPlayerStorageValue(cid, 99963) ~= 1 and skill == SKILL__LEVEL and newlevel >= 45) then

db.executeQuery("INSERT INTO `accounts` (`premium_points`) VALUES ('".. quantia.."');")

setPlayerStorageValue(cid, 99963, 1)

doPlayerSendTextMessage(cid, 22, "You have received 5 crystal coins because you reached level 45")

end

return TRUE

end

 

 

 

 

Testa ai, não sei se vai funfa

Editado Maio 23 por Vilden

lucas502L
23 de maio de 2012 às 15:59

não funcionou nao vilden, a proposito...

 

vc colocou db.executequery, isso não colocaria os points para todas as accounts do server?

 

e outra duvida tbm: percebi que ali em ('".. quantia.."') , falta um espaço entre os ".." e "quantia" né? ou n tem nada a ver? kkk

resumindo, não funcionou não..

 

aah, outra coisa, isso afetaria os points que o player ja tem? por exemplo, eu quero q ele ganhe "MAIS" 10 pontos ao atingir 350. E não "setar" 10 points, entende? tipo, eu ja tenho 20 points, se eu chegar no lvl 350 a query vai "setar" 10 points, ou vai "adicionar" + 10 points, totalizando 30?

 

eu tenho uma query aki, não sei se serviria para te ajudar:

UPDATE `accounts` SET `premium_points` = `premium_points` + '".$points."'

 

aguardo, vlw ;)

Editado Maio 23 por Lucas502

VildenV
23 de maio de 2012 às 16:04

function onAdvance(cid, skill, oldlevel, newlevel)

 

local quantia = 10

 

if(getPlayerStorageValue(cid, 99963) ~= 1 and skill == SKILL__LEVEL and newlevel >= 45) then

db.executeQuery("INSERT INTO `accounts` (`premium_points`) VALUES ('premium_points' + '".. quantia .."');")

setPlayerStorageValue(cid, 99963, 1)

doPlayerSendTextMessage(cid, 22, "You have received 5 crystal coins because you reached level 45")

end

return TRUE

end

 

 

Não sei mecher com database rs

lucas502L
23 de maio de 2012 às 18:53

mysql_real_query<>: INSERT INTO `accounts` <`premium_points`> VALUES <'premium_points' + '10'>; - MYSQL ERROR: Duplicate entry '' for key 2 <1062>

dragonfightD
23 de maio de 2012 às 19:54

Teste:

 

function onAdvance(cid, skill, oldlevel, newlevel)
local points = 50

   if(getPlayerStorageValue(cid, 99963) ~= 1 and skill == SKILL__LEVEL and newlevel >= 45) then
   db.executeQuery("UPDATE `accounts` SET `premium_points` = "..points.." WHERE `name` ='"..getPlayerAccount(cid).."'")
   setPlayerStorageValue(cid, 99963, 1)
   doPlayerSendTextMessage(cid, 22, "editar texto")
   end
   return TRUE
end

Editado Maio 23 por dragonfight

lucas502L
23 de maio de 2012 às 20:25

ok dragonfight, não testei ainda mas acho q ira funcionar, só q tem um porém..

 

 

como eu falei acima, parece q este seu script q vc postou, irá "setar" os 10 pontos, e não "somar" +10 aos points que a account ja tem, entendeu?

 

Eu quero que a query "adicione, some" +10 points, e não "setar" os 10 points, para que não seja afetado os points que a account ja tem...

dragonfightD
23 de maio de 2012 às 20:40

Vá na pasta libs depois em 050-function e adicione as seguintes funções:

 

function getAccountPoints(cid)
local Info = db.getResult("SELECT `premium_points` FROM `accounts` WHERE `id` = " .. getPlayerAccountId(cid) .. " LIMIT 1")
	if Info:getID() ~= LUA_ERROR then
	local Points= Info:getDataInt("premium_points")
	Info:free()
	return Points
end
 return LUA_ERROR
end

 

function doAddPoints(cid, points)
db.executeQuery("UPDATE `accounts` SET `premium_points` = `premium_points` + " .. points .. " WHERE `id` = " .. getPlayerAccountId(cid) .. ";")
end

 

Depois o código fica assim:

 

function onAdvance(cid, skill, oldlevel, newlevel)
local points = 50

	   if(getPlayerStorageValue(cid, 99963) ~= 1 and skill == SKILL__LEVEL and newlevel >= 45) then
	   doAddPoints(cid, points)
	   setPlayerStorageValue(cid, 99963, 1)
	   doPlayerSendTextMessage(cid, 22, "editar texto")
	   end
	   return TRUE
end

 

Crédito pelas funções ao Lord Side de um outro fórum na Net

 

Tem também a função de remover os pontos ingame, o que pode ser útil:

 

function doRemovePoints(cid, points)
 local Info = db.getResult("SELECT `premium_points` FROM `accounts` WHERE `id` = " .. getPlayerAccountId(cid) .. " LIMIT 1")
  if Info:getID() ~= LUA_ERROR then
  db.executeQuery("UPDATE accounts SET premium_points = - " .. points .. " WHERE id=" .. getPlayerAccountId(cid) .. ";")
  Info:free()
  return 1
  end
end

Editado Maio 23 por dragonfight

lucas502L
23 de maio de 2012 às 21:50

deu error:

 

Cannot load script reward.lua:10
'end' expected <to close 'function' at line 1> near '<eof>'

dragonfightD
23 de maio de 2012 às 21:54

Maws errei, tenta aew:

 

function onAdvance(cid, skill, oldlevel, newlevel)
local points = 50

			   if(getPlayerStorageValue(cid, 99963) ~= 1 and skill == SKILL__LEVEL and newlevel >= 45) then
			   doAddPoints(cid, points)
			   setPlayerStorageValue(cid, 99963, 1)
			   doPlayerSendTextMessage(cid, 22, "editar texto")
			   end
			   return TRUE
end

lucas502L
23 de maio de 2012 às 22:13

resolvido, vlw ae otimo script, porém, nem precisei adicionar os functions na lib não, usei o db.executequery que postou antes ;)

 

 

vlw Vilden e DragonFight

Makelin1M
23 de maio de 2012 às 22:19

Duvida Sanada Tópico Reportado