Ir para conteúdo
  • Cadastre-se

Posts Recomendados

  • Respostas 77
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Olá pessoal, estou desenvolvendo esse sistema vip para TFS 1.x, se precisarem de alguma função nova é só comentar, criei para usar em um servidor meu e resolvi postar, bom proveito a todos.   É

@andreoam, poste o que você tem em spoiler. 

@gangul321 Para colocar em spoiler siga esses passos.

Posted Images

Em 26/09/2017 em 19:03, Toni Reinbold disse:

Uma função que retorne se a account já foi vip ou não.

Por favor

no caso você não poderá usar ter usado esta função: 

-- player:checkVipLogin()
function Player.checkVipLogin(self)
	if self:getVipTime() > 0 and not self:isVip() then
		return self:removeVip() and self:teleportTo(self:getTown():getTemplePosition())
	end
end

e crie esta: 

-- player:checkVip()
function Player.checkVip(self)
	return self:getVipTime() > 0 and true or false
end

 

Link para o post
Compartilhar em outros sites
  • 1 month later...

@luanluciano93

 

Bom dia, os dias de VIP não estão contando. alguém saberia o problema? No caso coloquei 2 dias que ficaram 1510925768 na database, porém o valor não muda e não chega a 0 nunca.

 

Obrigado.

Link para o post
Compartilhar em outros sites

Boa tarde @alls , então, não é desda forma que funciona. Existe uma contagem de computador, que é determinada desde uma certa época, que começou a contar por segundos e assim vai ... 
digamos que esse determinado segundo que eu estou escrevendo é o valor 100000, daqui a 1 minuto ele vai valer 100060 ... e é assim.

Esse valor que esta salvo na sua database é o "time" de quando vai acabar sua vip. O script verifica se o "time" atual é maior que esse valor que voce tem salvo, se sim, sua vip acabou (isso é verificado toda vez que vocÊ LOGAR).

Link para o post
Compartilhar em outros sites
7 minutos atrás, luanluciano93 disse:

Boa tarde @alls , então, não é desda forma que funciona. Existe uma contagem de computador, que é determinada desde uma certa época, que começou a contar por segundos e assim vai ... 
digamos que esse determinado segundo que eu estou escrevendo é o valor 100000, daqui a 1 minuto ele vai valer 100060 ... e é assim.

Esse valor que esta salvo na sua database é o "time" de quando vai acabar sua vip. O script verifica se o "time" atual é maior que esse valor que voce tem salvo, se sim, sua vip acabou (isso é verificado toda vez que vocÊ LOGAR).

 

 

Ah entendi, muito obrigado. Bem na hora que você respondeu ao tópico eu tava vendo como funcionava a função os.time :)

 

Muito obrigado pela aula rápida! Valeu parceiro

Link para o post
Compartilhar em outros sites
  • 1 month later...
2 hours ago, leandrocore said:

@luanluciano93 

poderia me ajuda estou tentando fazer ele informa o jogando no momento que ele loga o tempo que ele possui de vip

e tbm um npc que só vende itens para jogadorers vip 

 

 

Essa função retorna os dias de vip que ainda restam ... player:sendVipDaysMessage()


Para o NPC tente esse código:

Spoiler

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end

local tradeOffers = {
	-- SELL OFFERS
	{id=7396, buy=0, sell=20000, name='behemoth trophy'},
	{id=7393, buy=0, sell=40000, name='demon trophy'},
	{id=7399, buy=0, sell=10000, name='dragon lord trophy'},
	-- BUY OFFERS
	{id=10518, buy=1000, sell=0, name='demon backpack'},
}

local items, data = {}
for i = 1, #tradeOffers do
	data = tradeOffers[i]
	items[data.id] = {id = data.id, buy = data.buy, sell = data.sell, name = ItemType(data.id):getName():lower()}
end

local function greetCallback(cid)
	npcHandler:setMessage(MESSAGE_GREET, 'Welcome |PLAYERNAME| ... !')
	return true
end

local function onBuy(cid, item, subType, amount, ignoreCap, inBackpacks)
	local player = Player(cid)
	if not ignoreCap and player:getFreeCapacity() < ItemType(items[item].id):getWeight(amount) then
		return player:sendTextMessage(MESSAGE_INFO_DESCR, 'You don\'t have enough cap.')
	end
	if items[item].buy then
		if player:removeMoney(amount * items[item].buy) then
			if player:addItem(items[item].id, amount) then
				return player:sendTextMessage(MESSAGE_INFO_DESCR, 'Bought '..amount..'x '..items[item].name..' for '..items[item].buy * amount..' gold coins.')
			end
		end
	end
	return true
end

local function onSell(cid, item, subType, amount, ignoreCap, inBackpacks)
	local player = Player(cid)
	if items[item].sell then
		if player:addMoney(items[item].sell * amount) then
			if player:removeItem(items[item].id, amount) then
				return player:sendTextMessage(MESSAGE_INFO_DESCR, 'Sold '..amount..'x '..items[item].name..' for '..items[item].sell * amount..' gold coins.')
			end
		end
	end
	return true
end

local function creatureSayCallback(cid, type, msg)
	if not npcHandler:isFocused(cid) then return false end

	local player = Player(cid)
	msg = msg:gsub("(%l)(%w*)", function(a,b) return string.upper(a)..b end)
	if msgcontains('trade', msg) then
		local tradeItems = {}
		if player:isVip() then
			tradeItems = tradeOffers
			openShopWindow(cid, tradeItems, onBuy, onSell)
			return npcHandler:say('It\'s my offer.', cid)
		else
			return npcHandler:say('You don\'t have vip account.', cid)
		end
	end
end

npcHandler:setMessage(MESSAGE_FAREWELL, 'Happy hunting, old chap!')
npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

 

Link para o post
Compartilhar em outros sites
28 minutos atrás, luanluciano93 disse:

 

Essa função retorna os dias de vip que ainda restam ... player:sendVipDaysMessage()


Para o NPC tente esse código:

  Ocultar conteúdo


local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end

local tradeOffers = {
	-- SELL OFFERS
	{id=7396, buy=0, sell=20000, name='behemoth trophy'},
	{id=7393, buy=0, sell=40000, name='demon trophy'},
	{id=7399, buy=0, sell=10000, name='dragon lord trophy'},
	-- BUY OFFERS
	{id=10518, buy=1000, sell=0, name='demon backpack'},
}

local items, data = {}
for i = 1, #tradeOffers do
	data = tradeOffers[i]
	items[data.id] = {id = data.id, buy = data.buy, sell = data.sell, name = ItemType(data.id):getName():lower()}
end

local function greetCallback(cid)
	npcHandler:setMessage(MESSAGE_GREET, 'Welcome |PLAYERNAME| ... !')
	return true
end

local function onBuy(cid, item, subType, amount, ignoreCap, inBackpacks)
	local player = Player(cid)
	if not ignoreCap and player:getFreeCapacity() < ItemType(items[item].id):getWeight(amount) then
		return player:sendTextMessage(MESSAGE_INFO_DESCR, 'You don\'t have enough cap.')
	end
	if items[item].buy then
		if player:removeMoney(amount * items[item].buy) then
			if player:addItem(items[item].id, amount) then
				return player:sendTextMessage(MESSAGE_INFO_DESCR, 'Bought '..amount..'x '..items[item].name..' for '..items[item].buy * amount..' gold coins.')
			end
		end
	end
	return true
end

local function onSell(cid, item, subType, amount, ignoreCap, inBackpacks)
	local player = Player(cid)
	if items[item].sell then
		if player:addMoney(items[item].sell * amount) then
			if player:removeItem(items[item].id, amount) then
				return player:sendTextMessage(MESSAGE_INFO_DESCR, 'Sold '..amount..'x '..items[item].name..' for '..items[item].sell * amount..' gold coins.')
			end
		end
	end
	return true
end

local function creatureSayCallback(cid, type, msg)
	if not npcHandler:isFocused(cid) then return false end

	local player = Player(cid)
	msg = msg:gsub("(%l)(%w*)", function(a,b) return string.upper(a)..b end)
	if msgcontains('trade', msg) then
		local tradeItems = {}
		if player:isVip() then
			tradeItems = tradeOffers
			openShopWindow(cid, tradeItems, onBuy, onSell)
			return npcHandler:say('It\'s my offer.', cid)
		else
			return npcHandler:say('You don\'t have vip account.', cid)
		end
	end
end

npcHandler:setMessage(MESSAGE_FAREWELL, 'Happy hunting, old chap!')
npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

 

 

 

Este ele está dando trade tanto pra quem é vip quanto para quem não é 

Edite-

esqueci de edita uma outra parte do npc haha funcionou  

 

 player:sendVipDaysMessage()  eu havia colocado no login mais não apareceu para o player

Editado por leandrocore (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

como faço para usar o comando !checkvip ? tentei de tudo que é maneira e não dá kk segue o script que estou utilizando: 

function onSay(cid, words, param)
    local player = Player(cid)

    local days = player:getVipDays()
    if days == 0 then
        player:sendCancelMessage('You do not have any vip days.')
    else
        player:sendCancelMessage(string.format('You have %s vip day%s left.', (days == 0xFFFF and 'infinite amount of' or days), (days == 1 and '' or 's')))
    end
    return false
end

Assim não funciona =/

Link para o post
Compartilhar em outros sites

@vine96 

-- !checkvip
function onSay(player, words, param)
	if player:isVip() then
		local vipTime = player:getVipTime() - os.time()
		local vipDays = 1 + (math.floor(vipTime / 86400))
		if player:getVipTime() ~= false then
			player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, 'You have '.. vipDays .. ' vip day(s) in your account.')
		end
	else
		player:sendCancelMessage('You do not have any vip days.')
	end
  	return false
end

 

Link para o post
Compartilhar em outros sites
  • 7 months later...
  • 2 months later...

tem como eu coloca pra no lugar de mostra Premium Status no site Parecer VIP Status? ou seja no meu site se o player for premium ou nao ele mostra la, porem quero coloca se o player e vip ou nao ira mostra la tem como? me da uma força ai jovem?

Link para o post
Compartilhar em outros sites
  • 7 months later...

Fala @luanluciano93!

Quanto tempo meu camarada!

To de volta!

kkkkkkk

Tava vendo alguns scripts nos forums da vida e me deparo com os teus (os melhores né xD)

Link para o post
Compartilhar em outros sites
  • 1 month later...

vi que tem uma função que verifica se o vip do player acabou ou nao, porem nao estou sabendo onde colocar ou como fazer o script,
estou tentando fazer no login, para fazer a verificação mas estou com dificuldades

Link para o post
Compartilhar em outros sites
51 minutos atrás, Faysal disse:

vi que tem uma função que verifica se o vip do player acabou ou nao, porem nao estou sabendo onde colocar ou como fazer o script,
estou tentando fazer no login, para fazer a verificação mas estou com dificuldades

Em qualquer lugar do seu script de login.lua, que seja depois do onLogin e antes do ultimo return true end

player:checkVipLogin()
Link para o post
Compartilhar em outros sites
6 minutos atrás, luanluciano93 disse:

Em qualquer lugar do seu script de login.lua, que seja depois do onLogin e antes do ultimo return true end


player:checkVipLogin()

 

então, coloquei assim 
function onLogin(player)
    player:checkVipLogin()

e após reiniciar o ot, mesmo na area vip e sem vip ele nao vai para o templo, na verdade não acontece nada

 

Link para o post
Compartilhar em outros sites
  • 1 year later...

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por looktsx
      Salve Rapaziada ...

      sera q tem como cria um script de addon doll ou mont doll ? 
      ou um npc q vende addon e montaria, pra versao 13.11 do tibia ?
       
      pode me ajuda fico muito grato 
    • Por Rpzada
      Oi boa tarde.
      Sera q tu pode me ajudar como uma duvida... no meu otserver. Tenho cliente 13 e client otc... ai os npcs no 13 ele reconhece dinheiro do banco quando vou comprar... porem no otc eu tenho q estar com dinheiro na bag.... tu sabe o pq e como arrumo isso... queria q no otc ele reconhecesse o dinheiro no bank
    • Por Anderson Sacani
      Estou criando um servidor com base nos scripts de TFS 1.x e voltado ao público da america latina por causa do baixo ping na VPS... Argentina, Bolívia, Brasil, Chile, entre outros, portanto sei que falamos em português e nossos vizinhos em espanhol.
      Todos os sistemas do meu servidor são pensados para terem traduções e venho por meio deste tópico compartilhar à vocês algumas dessas funções:
       
      Antes de qualquer coisa, você precisará adicionar a seguinte variável em alguma biblioteca:
      USER_LANGUAGE = 1022118443  
      Agora que adicionou essa variável em alguma biblioteca, poderá adicionar as seguintes funções na mesma biblioteca, porém a baixo da variável USER_LANGUAGE.
       
      A primeira função serve para retornar qual idioma o player está usando:
      --[[ getLanguage, how to use: player:getLanguage() ]] function Player.getLanguage(self) if self:isPlayer() then if self:getStorageValue(USER_LANGUAGE) < 1 then return "portuguese" else return "spanish" end else print("getLanguage: Only works on players..") end end Um exemplo de como usar: player:getLanguage()
       
      A segunda função serve para alterar o idioma do player. O ideal é que seja usada na primeira vez em que o player loga no servidor:
      --[[ setLanguage, how to use: player:setLanguage("portuguese") ]] function Player.setLanguage(self, language) local value = 0 if self:isPlayer() then if language == "portuguese" then value = 0 elseif language == "spanish" then value = 1 else print("setLanguage: Only two options available. Choose one of them: 'portuguese' or 'spanish'.") end return self:setStorageValue(USER_LANGUAGE, value) else print("setLanguage: Only works on players..") end end Exemplos de como usar:
      player:setLanguage("portuguese")
      ou
      player:setLanguage("spanish")
       
      A terceira e não menos importante função, serve para mandar uma mensagem de texto ao jogador, porém ele receberá no idioma em que escolheu:
      --[[ sendLanguageTextMessage, how to use: local portugueseMessage = "Ola, tudo bom? Isto aqui é um algoritmo!" local spanishMessage = "Hola todo bien? Esto de aqui es un algoritmo!" player:sendLanguageTextMessage(MESSAGE_EVENT_ADVANCE, portugueseMessage,spanishMessage) ]] function Player.sendLanguageTextMessage(self, type, portugueseMessage, spanishMessage) if self:isPlayer() then if self:getStorageValue(USER_LANGUAGE) < 1 then return self:sendTextMessage(type, portugueseMessage) else return self:sendTextMessage(type, spanishMessage) end else print("sendLanguageTextMessage: Only works on players..") end end Um exemplo de como usar:
      player:sendLanguageTextMessage(MESSAGE_EVENT_ADVANCE, portugueseMessage, spanishMessage)
      O primeiro parâmetro é o tipo de mensagem, o segundo parâmetro será a mensagem em português e o terceiro parâmetro será em espanhol.
    • Por Rodrigo Querobim
      Salve rapaziada eu tenho o server canary open source e quando implementei os bosses atuais começou dar este erro, nem mexi nessa linha que esta dando os erros, alguem sabe me dizer oq pode ser?



       
    • Por Tofames
      Hi,
      Para devolver o que recebi aqui, colocarei para si um sistema de transformação a trabalhar na TFS 1.X.
      (Testei em 1.4.2) 
       
      MUDANÇA DE SOURCE NECESSÁRIA PARA O BOM FUNCIONAMENTO!
      Havia algo dentro do código TFS (e provavelmente outras distros) que não estava funcionando corretamente e depois que eu informei, eles se fundiram em tfs principais, então já está dentro do TFS 1.5, mas não está em versões mais antigas.
      Trata-se de refrescar a velocidade do jogador após a transformação, se você não tiver isso, então sua velocidade do vocations.xml baseSpeed não é refrescada.
      Você precisa adicionar isto às sources:
      https://github.com/otland/forgottenserver/pull/4215/files
      se você não tem acesso às sources, eu tenho um meio de contornar isso, mas não vou inundar este posto, então escreva em pv.
       
      Créditos: 
      Erexo (guião original)
      Itutorial (TFS 1.X),
      Tofame (alteração: talkaction --> spell; source mudanças; correções do scripts)
       

      transform system.mp4  
      no final do global.lua:
      --[[ voc = from vocation newVoc = to vocation looktype = new outfit revertLooktype = current outfit level = lvl needed to transform rage = soul needed to transform (you can disable it, just type 0) kiToTrans = mana to transform addHp = maxHp added when you transform addKi = maxMana added effectOn = magic effect when you use transform aura = magic effect when you have current transform (can be disabled, just type 0). type nil in this version constant = if transform is constant (when it is, player dont lose transform/outfit and maxHp/Mana, and cannot use revert) --]] exhaust_transform = {} -- [1-8] naruto, transform = { [1] = {voc = 1, newVoc = 2, from_looktype = 2, looktype = 3, level = 50, rage = 0, mana = 50, addHealth = 450, addMana = 450, effect = 76, aura = nil, constant = false}, [2] = {voc = 2, newVoc = 3, from_looktype = 3, looktype = 4, level = 100, rage = 0, mana = 50, addHealth = 500, addMana = 500, effect = 76, aura = nil, constant = false}, [3] = {voc = 3, newVoc = 4, from_looktype = 4, looktype = 5, level = 150, rage = 0, mana = 50, addHealth = 650, addMana = 650, effect = 76, aura = nil, constant = false}, [4] = {voc = 4, newVoc = 5, from_looktype = 5, looktype = 6, level = 200, rage = 0, mana = 50, addHealth = 800, addMana = 800, effect = 76, aura = nil, constant = false}, [5] = {voc = 5, newVoc = 6, from_looktype = 6, looktype = 7, level = 250, rage = 0, mana = 50, addHealth = 900, addMana = 900, effect = 76, aura = nil, constant = false}, [6] = {voc = 6, newVoc = 7, from_looktype = 7, looktype = 8, level = 300, rage = 0, mana = 50, addHealth = 1000, addMana = 1000, effect = 76, aura = nil, constant = false}, [7] = {voc = 7, newVoc = 8, from_looktype = 8, looktype = 9, level = 400, rage = 0, mana = 50, addHealth = 1500, addMana = 1500, effect = 76, aura = nil, constant = false}, [8] = {voc = 8, newVoc = 9, from_looktype = 9, looktype = 10, level = 500, rage = 0, mana = 50, addHealth = 1500, addMana = 1500, effect = 76, aura = nil, constant = false} -- end naruto transforms } spells/scripts/revert.lua
      local combat = Combat() combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false) function onCastSpell(player, variant) local pid = player:getId() local TRANS = transform[player:getVocation():getId() - 1] -- - [player:getVocation():getId() - 4] domyslnie, should be -1. if not TRANS then player:sendCancelMessage("You cannot revert.") return false end local outfit = player:getOutfit() outfit.lookType = TRANS.from_looktype if TRANS.constant then player:setOutfit(outfit) else player:setOutfit(outfit, false) end exhaust_transform[pid] = 1 player:setMaxHealth(player:getMaxHealth() - TRANS.addHealth) player:setMaxMana(player:getMaxMana() - TRANS.addMana) player:setVocation(TRANS.voc) player:save() return combat:execute(player, variant) end spells/scripts/transform.lua
      local combat = Combat() combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false) function onCastSpell(player, variant) local effectPosition = Position(player:getPosition().x, player:getPosition().y, player:getPosition().z) local pid = player:getId() local TRANS = transform[player:getVocation():getId()] if not TRANS then player:sendCancelMessage("You cannot transform.") return false end if TRANS.effect == 76 then effectPosition = Position(player:getPosition().x + 2, player:getPosition().y, player:getPosition().z) end if player:getLevel() < TRANS.level then player:sendCancelMessage("You must reach level "..TRANS.level.." to transform.") return false end if player:getSoul() < TRANS.rage then player:sendCancelMessage("You need "..TRANS.rage.." to transform.") return false end if player:getMana() < TRANS.mana then player:sendCancelMessage("You need "..TRANS.mana.." to transform.") return false end local outfit = player:getOutfit() outfit.lookType = TRANS.looktype if TRANS.constant then player:setOutfit(outfit) else player:setOutfit(outfit, false) end player:addSoul(-TRANS.rage) player:setMaxHealth(player:getMaxHealth() + TRANS.addHealth) player:setMaxMana(player:getMaxMana() + TRANS.addMana) effectPosition:sendMagicEffect(TRANS.effect) player:setVocation(TRANS.newVoc) player:save() return combat:execute(player, variant) end spells.xml:
      <instant group="support" spellid="175" name="Revert" words="revert" level="1" mana="10" aggressive="0" selftarget="1" cooldown="1000" groupcooldown="1000" needlearn="0" script="revert.lua" /> <instant group="support" spellid="175" name="Transform" words="transform" level="1" mana="10" aggressive="0" selftarget="1" cooldown="1000" groupcooldown="1000" needlearn="0" script="transform.lua" />  
       
      As coisas abaixo são opcionais, adicione-as se você quiser ter aura. Se você não estiver usando, deixe a aura = nil em global.lua
      Também observei que isso poderia causar atrasos/screen freeze, por isso não recomendo o uso de aura.
       
      globalevents.xml adicionar linha:
      <globalevent name="TransformEffects" interval="2000" script="TransformEffects.lua"/> TransformEffects.lua (data/globalevents/scripts/TransformEffects.lua):
      function onThink(interval) for _, player in pairs(Game.getPlayers()) do if player then TRANS = transform[player:getVocation():getId()] if TRANS then if TRANS.aura ~= nil then player:getPosition():sendMagicEffect(TRANS.aura) end end end end return true end  
      edit:
      só consigo falar um pouco de espanhol e muito bem em inglês, por isso uso DEEPL para falar portugês.



×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo