Ir para conteúdo
  • 0

Item que add VIP por account


kolosso

Pergunta

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



Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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?

 

Link para o comentário
Compartilhar em outros sites

  • 0

 

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 por kolosso
Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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 por kolosso
Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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 por kolosso
Link para o comentário
Compartilhar em outros sites

  • 0

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 por kolosso
Link para o comentário
Compartilhar em outros sites

  • 0

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á.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...