noobinhu 38 Postado Janeiro 11, 2009 Share Postado Janeiro 11, 2009 (editado) O usuário alex me pediu ontem um tutorial explicando melhor como fiz meu sistema VIP, para ser baseado em dias, horas, minutos e segundos. A resposta é storage value + os.time. Explicação de os.time: os.time() - Uma function que retorna o tempo atual do CPU em segundos, sendo contado desde a criação da linguagem LUA. Exemplo: os.time() 989013659 Não sei que data é esta 989013659 nem que hora, se o seu objetivo é saber isto. Tem que usar a function os.date, pesquise mais sobre a mesma pelo google, você encontrará bastante explicações. Agora, vamos entender como funciona meu sistema VIP. É o seguinte, no script de adicionar a VIP, eu coloquei um os.time() dentro da function, para retornar o tempo em segundos daquele exato momento, quando foi colocado a VIP, somei este valor com os segundos que são precisos para no caso, 30 dias de VIP e adicionei este valor em um storage value qualquer, no caso foi o 29000. 3600 segundos = 1 hora 3600 segundos *24 = 24 horas = 1 dia 3600 segundos * 24 * 30 = 1 mês comercial Exemplo: local tempo_em_segundos_agora = os.time() -- segundos retornados pelo CPUlocal tempo_da_vip = 3600*24*30 -- 30 dias tempo_total = tempo_em_segundos_agora+tempo_da_vip setPlayerStorageValue(player,29000,tempo_total) Player pode ser qualquer player, param UID, cid e etc... O importante é entender que quando eu adicionei a VIP, eu simplesmente guardei um valor de quando foi que eu coloquei somado com os segundos para a quantidade de dias de tal VIP para o player. Agora, checando se essa VIP ainda é válida. Este é bem simples também, você pega o tempo em segundos do exato momento, onde o player quer executar uma ação de VIP, subtrai pelo valor que colocamos na storage value anteriormente, de quando foi adicionada a VIP, e então se este valor for maior que 0, ele é vip, caso contrário não. Olhe o exemplo: local tempo_da_vip = getPlayerStorageValue(player,29000)local tempo_em_segundos_agora = os.time() -- segundos retornados pelo CPU tempo_restante = tempo_da_vip-tempo_em_segundos_agora if tempo_restante > 0 then -- é vip, executa quaisquer ações vips else -- não é vip, retorna algum erro end Existem outras formas de ver se ele é VIP, mas são mais complexas, esta é forma mais simples. Caso tenham dúvidas, podem postar sem medo, assim que eu ver, respondo //Yunie~ Editado Janeiro 11, 2009 por noobinhu Link para o comentário https://xtibia.com/forum/topic/104715-tutorial-ostime-e-storage-values/ Compartilhar em outros sites More sharing options...
alex008 2 Postado Janeiro 11, 2009 Share Postado Janeiro 11, 2009 (editado) O tutor é bem dificil, mais se vc ler ele todo vc vai intender muito bem. muita gente quer aprender isso pra usar em alguma função.dps eu vou usar pra fazer a minha ^^ axo q esse é o unico tutor de os.time xD parabens noobinhu NOTA 10 aprovado :button_ok: Editado Janeiro 11, 2009 por alex0007 Link para o comentário https://xtibia.com/forum/topic/104715-tutorial-ostime-e-storage-values/#findComment-673108 Compartilhar em outros sites More sharing options...
RedZL 6 Postado Janeiro 14, 2009 Share Postado Janeiro 14, 2009 Obrigado por sua contribuição. Movido. Link para o comentário https://xtibia.com/forum/topic/104715-tutorial-ostime-e-storage-values/#findComment-675316 Compartilhar em outros sites More sharing options...
DaNDaNrOxX 15 Postado Janeiro 16, 2009 Share Postado Janeiro 16, 2009 Sem dúvida é um excelente tutorial, os.time é algo um pouco complexo, mas se bem estudado fica tranquilo Eu também queria saber como se usar os.time, valeu pelo tutorial! Abraço Link para o comentário https://xtibia.com/forum/topic/104715-tutorial-ostime-e-storage-values/#findComment-676631 Compartilhar em outros sites More sharing options...
TibianoSumido 0 Postado Janeiro 22, 2009 Share Postado Janeiro 22, 2009 eiiiii kra, tpw assim, vc esplico ai como coloca sistema vip , mais eu nao entendi mto bem, me add ai no msn e nois se fla, e vc me esplica sertinhuuu pode se? :positive: ;DD add ai - joaoruis@hotmail.com - ;D Link para o comentário https://xtibia.com/forum/topic/104715-tutorial-ostime-e-storage-values/#findComment-681754 Compartilhar em outros sites More sharing options...
GODHalf 1 Postado Maio 26, 2010 Share Postado Maio 26, 2010 (editado) Fala noobinhu! Antes de mais nada parabéns pelos seus tópicos, são sempre muito interessantes! Bom, desculpe reviver esse tópico que já não comentam faz tempo, é que eu gostei muito desse tutorial, entendi a funcionalidade dele só que estou querendo aplicar no meu sistema que é linkaco com o site, ou seja, ele compra 15 dias de vip no site e é adicionado direto na conta do cara. E eu queria que esse script de retirar os dias realmente funcionasse pois eu já tentei de TUDO e não consigo, eu vou mostrar um que utilizo só que ele quando passa alguns segundos ele ZERA todos os valores (vip, vip_time e vip_days) da account e não tirando de 1 em 1 segundo do vip_time conforme eu imagino que deva ser. C:\xampp\htdocs\shopsystem.php (está funcionando normal até aqui, só preciso saber também como adicinar um storage value aqui, que vá direto na conta, eu já tentei um monte de coisa também e nada.) if(isset($buy_offer['id'])) { //item exist in database if($user_premium_points >= $buy_offer['points']) { if(check_name($buy_name)) { $buy_player = new OTS_Player(); $buy_player->find($buy_name); if($buy_player->isLoaded()) { $buy_player_account = $buy_player->getAccount(); if($_SESSION['viewed_confirmation_page'] == 'yes' && $_POST['buy_confirmed'] == 'yes') { if($buy_offer['type'] == 'pacc') { $player_vip_days = $buy_player_account->getCustomField('vip_days'); $player_lastlogin = $buy_player_account->getCustomField('lastday'); $save_transaction = 'INSERT INTO '.$SQL->tableName('z_shop_history_pacc').' (id, to_name, to_account, from_nick, from_account, price, pacc_days, trans_state, trans_start, trans_real) VALUES (NULL, '.$SQL->quote($buy_player->getName()).', '.$SQL->quote($buy_player_account->getId()).', '.$SQL->quote($buy_from).', '.$SQL->quote($account_logged->getId()).', '.$SQL->quote($buy_offer['points']).', '.$SQL->quote($buy_offer['days']).', \'realized\', '.$SQL->quote(time()).', '.$SQL->quote(time()).');'; $SQL->query($save_transaction); $buy_player_account->setCustomField('vip_days', $player_vip_days+$buy_offer['days']); $buy_player_account->setCustomField('vip_time', $player_vip_days*86400+$buy_offer['days']*86400); $buy_player_account->setCustomField('vip', $player_vip=1); $account_logged->setCustomField('premium_points', $user_premium_points-$buy_offer['points']); $user_premium_points = $user_premium_points - $buy_offer['points']; if($player_vip_days == 0) { $buy_player_account->setCustomField('lastday', time()); } data\globalevents\scripts\removevip.lua (aqui começa o problema) function onThink(interval, lastExecution, thinkInterval) Query = db.getResult("SELECT `id`, `vip_time` FROM `accounts` WHERE `accounts`.`vip` = 1") if(Query:getID() == -1) then return true end for i = 1, Query:getRows() do local AccID = Query:getDataInt("id") local VipTime = Query:getDataInt("vip_time") if VipTime >= os.time() then db.executeQuery("UPDATE `accounts` SET `vip_days` = ".. math.ceil((VipTime - os.time()) / 86400) .." WHERE `accounts`.`id` = ".. AccID ..";") else db.executeQuery("UPDATE `accounts` SET `vip_time` = 0 WHERE `accounts`.`id` = ".. AccID ..";") db.executeQuery("UPDATE `accounts` SET `vip_days` = 0 WHERE `accounts`.`id` = ".. AccID ..";") db.executeQuery("UPDATE `accounts` SET `vip` = 0 WHERE `accounts`.`id` = ".. AccID ..";") db.executeQuery("UPDATE `players` SET `reset_temple` = 1 WHERE `players`.`account_id` = ".. AccID ..";") end Query:next() end Query:free() return true end data\globalevents\globalevents.xml (aqui está assim): <globalevent name="RemoveVipDays" interval="600" event="script" value="removevip.lua"/> Como eu disse a account recebe os pontos certinho (caso ele compre 15 dias): vip = 1, vip_days = 15, vip_time = 1296000. Mais no Script removevip.lua o problema deve estar antes do if VipTime >= os.time() then, pois ele não chega a contar nada, ele pega e espera o tempo que está no globalevents.xml (interval="600") e ZERA todos os pontos que ele tem (vip, vip_days e vip_time). Tá complicado eu escrevi muito mais espero que consiga me ajudar, eu nunca mechi tanto com script pra tentar resolver esse problema, já estou ficando com dor de cabeça rs! Me ajuda ae se possível! Abraço ----------------- EDIT: Já consegui resolver o meu problema! Não precisa responder caso veja! Até =) Editado Maio 27, 2010 por GODHalf Link para o comentário https://xtibia.com/forum/topic/104715-tutorial-ostime-e-storage-values/#findComment-880738 Compartilhar em outros sites More sharing options...
Posts Recomendados