KO
pedido

Item que add VIP por account

Por kolosso, 01 de set. de 2015 em Scripts

17
3.9k
kolossoK
01 de setembro de 2015 às 10:16

Bom dia, eu to tentando adicionar um item que da vip, até conseguir, só que quando eu uso ele adiciona VIP so em um CHar (no char que usou o item) e o resto dos chars da conta continua sem vip, estou usando a storage 13540

tentei usar esses 2 scripts

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

local config={
removeOnUse = "yes" -- remover quando usar ("yes" or "no")
}

local days = 30 -- dias que serão adicionados
local daysvalue = days * 24 * 60 * 60
local storageplayer = getPlayerStorageValue(cid, 13540)
local timenow = os.time()

if getPlayerStorageValue(cid, 13540) - os.time() <= 0 then
time = timenow + daysvalue
else
time = storageplayer + daysvalue
end

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados, Agora relogue o seu personagem. ".. days .." dias de VIP no seu character.")
setPlayerStorageValue(cid, 13540, time)
local quantity = math.floor((getPlayerStorageValue(cid, 13540) - timenow)/(24 * 60 * 60))
doSendMagicEffect(getPlayerPosition(cid), math.random(28,30))
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem ".. quantity .." dias de VIP restantes.")
if (config.removeOnUse == "yes") then
doRemoveItem(item.uid, 1)
end

return TRUE
end



local dias = 30 -- dias vip

function onUse(cid, item)
dias = tonumber(dias)
vip.addVipByAccount(getPlayerAccount(cid), vip.getDays(dias))
doRemoveItem(item.uid, 1)
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_MAGIC_GREEN)
doPlayerPopupFYI(cid, "Foram adicionados " .. dias .. " dias de VIP em sua account.\nSua VIP Account expira em " .. os.date("%d/%m/%y", vip.getVip(cid)) .. ".")
return true
end



BrunoB
01 de setembro de 2015 às 14:19

Bom dia, eu to tentando adicionar um item que da vip, até conseguir, só que quando eu uso ele adiciona VIP so em um CHar (no char que usou o item) e o resto dos chars da conta continua sem vip, estou usando a storage 13540

 

 

Você utiliza MySQL?

 

kolossoK
01 de setembro de 2015 às 20:45

 

Você utiliza MySQL?

 

sim, uso Mysql

distro 0.4 ou 1.0 (agora esqueci)

ot mapa global 8.6

 

Obs: não quero que add vip pelo site, só pelo item, gostaria que ele add a vip na conta e não no char...

Editado Setembro 1 por kolosso

BrunoB
01 de setembro de 2015 às 21:49

sim, uso Mysql

distro 0.4 ou 1.0 (agora esqueci)

ot mapa global 8.6

 

Obs: não quero que add vip pelo site, só pelo item, gostaria que ele add a vip na conta e não no char...

Não precisa de site, mas de banco de dados.

Logo vou postar o script.

kolossoK
01 de setembro de 2015 às 22:26

Não precisa de site, mas de banco de dados.

Logo vou postar o script.

Obrigado... to no aguardo ...

BrunoB
02 de setembro de 2015 às 09:46
Melhor resposta

Obrigado... to no aguardo ...

Preiramente vá até sua db e rode essa query:

ALTER TABLE `accounts` ADD `vip_time` INT(15) NOT NULL;
Agora vá em data/libs, crie um arquivo chamado vipSystem.lua com o seguinte conteúdo:

 

function vip.getVip(cid)
	assert(tonumber(cid), 'Parameter must be a number')
	if not isPlayer(cid) then error('Player don\'t find') end;
	ae = db.getResult("SELECT `vip_time` FROM `accounts` WHERE `name` = '" .. getPlayerAccount(cid) .. "';")
	if ae:getID() == -1 then
		return 0
	end
	
	local retee = ae:getDataInt("vip_time") or 0
	ae:free()
	return retee
end

function vip.getVipByAccount(acc)
	assert(acc, 'Account is nil')
	local a = db.getResult("SELECT `vip_time` FROM `accounts` WHERE `name` = '" .. acc .. "';")
	if a:getID() ~= -1 then
		return a:getDataInt("vip_time") or 0, a:free()
	else
		error('Account don\'t find.')
	end
end

function vip.setVip(cid, time)
	dofile("config.lua")
	assert(tonumber(cid), 'Parameter must be a number')
	assert(tonumber(time), 'Parameter must be a number')
	if not isPlayer(cid) then error('Player don\'t find') end
	local days = vip.getVip(cid)
	days = os.difftime(days, os.time())
	if days < 0 then days = 0 end
	days = days + vip.getDays(time)
	db.query("UPDATE `accounts` SET `vip_time` = '" .. (os.time() + days) .. "' WHERE `accounts`.`name` = '" ..  getPlayerAccount(cid) .. "';")
end

function vip.hasVip(cid)
	assert(tonumber(cid), 'Parameter must be a number')
	if not isPlayer(cid) then return end
	local t = vip.getVip(cid) or 0
	if os.time(day) < t then
		return true
	else
		return false
	end
end

function vip.accountHasVip(acc)
	assert(acc, 'Account is nil')
	if os.time() < vip.getVipByAccount(acc) then
		return true
	else
		return false
	end
end

function vip.getDays(days)
	return (3600 * 24 * days)
end

function vip.addVipByAccount(acc, time)
	assert(acc, 'Account is nil')
	assert(tonumber(time), 'Parameter must be a number')
	local a = vip.getVipByAcc(acc)
	a = os.difftime(a, os.time())
	if a < 0 then a = 0 end
	a = a + vip.getDays(time)
	return vip.setVipByAccount(acc, a)
end

function vip.setVipByAccount(acc, time)
	dofile("config.lua")
	assert(acc, 'Account is nil')
	assert(tonumber(time), 'Parameter must be a number')
	db.query("UPDATE `accounts` SET `vip_time` = '" .. (os.time() + time) .. "' WHERE `accounts`.`name` = '" .. acc .. "';")
	return true
end

function vip.returnVipString(cid)
	assert(tonumber(cid), 'Parameter must be a number')
	if isPlayer(cid) then
		return os.date("%d/%m/%Y %X", vip.getVip(cid))
	end
end

 

 

Item para dar vip:

Vá em data/actions/actions.xml adicione a seguinte tag?

 

<action itemid="2420" script="addVip.lua" />
Altere o itemid pelo id do item que irá usar para adicionar vip.

 

Em data/actions/scritps crie o arquivo addVip.lua com o seguinte conteúdo:

 

 

local dias = 30 -- dias que serão adicionados

function onUse(cid, item, fromPosition, itemEx, toPosition)
    vip.setVip(cid, dias)
    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados " .. dias .. " dias de VIP na sua account.")
    doSendMagicEffect(getPlayerPosition(cid), math.random(28, 30))
    doRemoveItem(item.uid, 1)
    return true
end

 

 

Piso que só vip passa:

Vá em data/movements/movements.xml e adicione a seguinte TAG:

 

<movevent type="StepIn" actionid="13500" event="script" value="vipTile.lua" />

Agora em data/movements/scripts crie o arquivo vipTile.lua com o seguinte conteúdo:

 

 

 

local tileConfig = {
    kickMsg = "You need to be a vip player to access this area.",
    kickEffect = CONST_ME_POFF,
    enterMsg = "Welcome to vip area!",
    enterEffect = CONST_ME_MAGIC_RED,
}

function onStepIn(cid, item, position, fromPosition)    
    if not isPlayer(cid) then return false end
    if not vip.hasVip(cid) then
        doTeleportThing(cid, fromPosition)
        doSendMagicEffect(fromPosition, tileConfig.kickEffect)
        doPlayerSendCancel(cid, tileConfig.kickMsg)
        return false
    end

    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, tileConfig.enterMsg)
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua VIP Account acaba em: " .. vip.returnVipString(cid) .. ".")
    doSendMagicEffect(position, tileConfig.enterEffect)
    return true
end

 

 

Agora basta utilizar a actionid 13500 nos pisos que só jogadores vip podem passar.

 

Créditos do sistema à Mock pela criação e Bruno Minervino pela edição.

Editado Setembro 2 por Bruno Minervino

kolossoK
02 de setembro de 2015 às 10:07

da erro no distro...

post-358727-0-22335800-1441199175_thumb.png

BrunoB
02 de setembro de 2015 às 10:14

da erro no distro...

Atualiza sua lib, editei o post.

MudrockM
02 de setembro de 2015 às 10:15

da erro no distro...

 

Rode essa query na db

ALTER TABLE `accounts` ADD `vipdays` INT(15) NOT NULL;
kolossoK
02 de setembro de 2015 às 10:21

Atualiza sua lib, editei o post.

como eu atualizo ?

já reiniciei o server e continua a mesma coisa

 

 

 

Rode essa query na db

ALTER TABLE `accounts` ADD `vipdays` INT(15) NOT NULL;

continua dando o mesmo erro

 

 

não teria como consigurar esse script aqui pra fazer ele da Vip pra acc ?

 

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

local config={

removeOnUse = "yes" -- remover quando usar ("yes" or "no")

}

 

local days = 30 -- dias que serão adicionados

local daysvalue = days * 24 * 60 * 60

local storageplayer = getPlayerStorageValue(cid, 13540)

local timenow = os.time()

 

if getPlayerStorageValue(cid, 13540) - os.time() <= 0 then

time = timenow + daysvalue

else

time = storageplayer + daysvalue

end

 

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados ".. days .." dias de VIP no seu character.")

setPlayerStorageValue(cid, 13540, time)

local quantity = math.floor((getPlayerStorageValue(cid, 13540) - timenow)/(24 * 60 * 60))

doSendMagicEffect(getPlayerPosition(cid), math.random(28,30))

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem ".. quantity .." dias de VIP restantes.")

if (config.removeOnUse == "yes") then

doRemoveItem(item.uid, 1)

end

 

return TRUE

end

 

 

até pq o meu systema já ta configurado pra storage 13540

Editado Setembro 2 por kolosso

BrunoB
02 de setembro de 2015 às 10:40

até pq o meu systema já ta configurado pra storage 13540

Amigo, editei a libs e o script da action, agora vai funcionar 100% :)

 

Referente ao seus script, é por storage (player storage), ou seja, aplica-se apenas ao player em si.

 

Se quiser deixar para a account, utiliza este ai.

kolossoK
02 de setembro de 2015 às 10:52

Amigo, editei a libs e o script da action, agora vai funcionar 100% :)

 

Referente ao seus script, é por storage (player storage), ou seja, aplica-se apenas ao player em si.

 

Se quiser deixar para a account, utiliza este ai.

Obrigadão, funfo, tenso é que não apareceu que vc editou o post, mas muito obrigado mesmo XD

Editado Setembro 2 por kolosso

MudrockM
02 de setembro de 2015 às 10:56

Tópico Movido
Este tópico foi movido de "OTServSuporteSuporte Scripting"
para "OTServSuporteSuporte ScriptingPedidos e dúvidas resolvidos - Scripting".

 

 

kolossoK
02 de setembro de 2015 às 10:59

Af, agora apareceu outro problema, ele adiciona vip na acc, mas depois de 1 min a acc perde a vip

10:58 Foram adicionados 30 dias de VIP na sua account.

10:59 Your VIP's over!

Editado Setembro 2 por kolosso

BrunoB
02 de setembro de 2015 às 11:18

Af, agora apareceu outro problema, ele adiciona vip na acc, mas depois de 1 min a acc perde a vip

 

10:58 Foram adicionados 30 dias de VIP na sua account.

 

10:59 Your VIP's over!

Altera sua lib, modifiquei lá.