Ir para conteúdo
Fórum Script Brasil
  • 0

CRON-TABS e PSEUDO-CRON


AmareshinO

Pergunta

Olá, sou novo aqui no fórum e tenho certeza que existem mais pessoas com essa duvida de PHP.

Bom, vou explicar o que estou fazendo atualmente como trabalho.

Estou montando um MMORPG com uma equipe e algumas empresas como de Comunicação Visual 3D, Marketing e etc.... eu sou um dos programadores do jogo, o PHP é a minha responsábilidade.

Eu estou com problemas de fazer o seguinte script:

No jogo há 17 edificíos, e eles possuem seus leveis.... quando o jogador estiver com 'recursos' suficientes (por exemplo) para evoluir seu Edificío Principal apra o nivel 5 na parte de evolução irá aparecer um link (o FORM seria em GET) encriptografado que acessaria uma página (atualizar.php por exemplo) ke adcionaria na tabela mySQL o "timer" deste edificio (Ex: 225 mim), o que eu estou querendo fazer é este timer, e mesmo se o jogador fechar a sessão dele o site continua trabalhando na conta dele... eu li muito na internet e vi que isso pode ser feito com o CRON ou com o PSEUDO-CRON, os quais eu já tentei de tudo e não consigo nem fazer ele funcionar... uso o sistema Linux (Ubuntu 8.04 atualizado ao maximo que já possue o Cron instalado).

Se alguém sabe como me ajudar, ficarei grato pela ajuda!

Algumas infomações:

Site do Pseudo-Cron

O site do CRON eu não estou lembrando... depois eu posto aqui!

A base de dados dos jogadores possue tudo detalhado: Coordenadas X e Y do jogador no mapa, ID do jogador e tais coisas que são cruciais para o funcionamento do jogo!

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

voce precisa de ums cript que faça o que quer, o cron só vai executar sem interação de ninguém

listar as tarefas já existentes

crontab -l

para editar

crontab -e

comandos..

ESC- para finalizr edição

:x! - salvar e sair

:q! - sair sem salvar

agora depende do tempo que vai executar

mm HH DD MM DS

mm: minutos

HH: horas

DD: dia

MM: mês

DS: dia da semana

exemplo executando um script todo dia a 1 da madrugada:

* 1 * * * /usr/bin/php /home/usuario/local/cron.php

Link para o comentário
Compartilhar em outros sites

  • 0

Ao invés de um timer só de quando ele está online você poderia implementar um timer desde a data de cadastro

1. Pegar timestamp da data de cadastro

$stmp_cadastro = mktime($hora,$minuto,$segundo,$mes,$dia,$ano); //de cadastro
2. Pegar o stamp atual
$stmp_atual = time();
3. Subtrair
$stamp = $stmp_cadastro - $stmp_atual;
4. Converte em horas
function diferenca($timestmp)
{
  $time = array(0, 0, 0);
    if ($timestmp >= 3600)
        $time[0] = floor(($timestmp >= 86400) ? ($timestmp / 86400) * 24 : $timestmp / 3600);

    if ($calc = ($timestmp % 3600)) {
        $time[1] = floor($calc / 60);
        $time[2] = $calc % 60;
    }
return $time;

}

$data = diferenca($timestamp);
echo $data[0].":";// horas
echo $data[1].":";// minutos
echo $data[2];//segundos

Obs: o que seria Cron <_< ?

Link para o comentário
Compartilhar em outros sites

  • 0

Então, isso eu sei, criei um PHP que gera a função que adciona as coisas que quero na DB. mas teoricamente, TUDO serial atualizado ao mesmo tempo no mesmo segundo... EX:

ou seja o CRON teria que atualizar a cada segundo.....

existem 2 usuários criando unidades.. cada um esta criando 10 unidades que demoram 10 mim para produzir cada 1.

o total das 10 unidades são 100 mim ou 1h e 40mim... ok, so que ao mesmo tempo que ele conta os 100 mim ele tem ke separar os 10 mim de cada unidade.... ai mesmo demorando 1h e 40, a cada 10 mim ele vai add 1 uniadde.. entendeu?? ou compliquei tudo?

Link para o comentário
Compartilhar em outros sites

  • 0

bom o que eu to tentando fazer Norivan é o seguinte:

Página: edificios.php

<?php
// Isso é um teste e eu estou inventando isso agora (e já to fingindo ke a sessão já esta logada)

$id = $_SESSION["ID"]; // Vamos falar ke o player é o ID=1
$recurso['1'] = "1000"; // Recurso que o player tem
$recurso['2'] = "1000"; // Recurso que o player tem
$recurso['3'] = "1000"; // Recurso que o player tem

$recurso_precisa['1'] = "1000"; // Recurso nessesário para a evolução do edificio
$recurso_precisa['2'] = "1000"; // Recurso nessesário para a evolução do edificio
$recurso_precisa['3'] = "1000"; // Recurso nessesário para a evolução do edificio

$edificio_id = "1"; // Id do edificio São 17 vou usar de exemplo o 1
$tempo_evolucao['1'] = "3600"; // segundos
$evolucoes = "0'; // Numero de evoluções da fila de evoluções (logo mais o mySQL vai checar e atualizar este numero)

// Abre o mySQL

$conexao = mysql_connect("localhost","root","senha");
$db = mysql_select_db("mmorpg");

$sql = "SELECT * FROM evolucoes ORDER BY id_player";
$resultado = @mysql_query($sql);

while ($linha=mysql_fetch_array($resultado)) {
 $temp['player'] = $linha['id_player'];
 if ($temp['player'] = $id) { // Checa se a tabela evolucoes do mySQL tem nas linhas alguma evolução com o ID do player
  $evolucoes ++;
 }
}

// Aqui ele deve checar se o player já possue 3 evoluções na fila... ele checa no mySQL do DB
if ($evolucoes !< 3) {
 echo 'Limete de evoluções exedido.';
}
else {
 if ($recurso['1'] => $recurso_precisa['1'] && $recurso['2'] => $recurso_precisa['2'] && $recurso['3'] => $recurso_precisa['3']) {
  echo "<a href=evoluir_edificio.php?id='. $id .'&edificio='. $edificio_id .'&tempo='. $tempo_evolucao[$edificio_id] .'>Evoluir para o nivel 2</a>";
 }
 else {
  echo "Recursos Insuficientes para evoluir este edificio";
 }
}
?>

ai quadno o player clicar no link ele vai ir para a página: evoluir_edificio.php?id=1&edificio_id=1&tempo_evolucao=3600

nessa página ele vai adcionar na tabela o seguinte:

ID da tarefa | ID do player | ID do edificio | Tempo de evolução

com isso ele vai gerar o timer, ele converte os 3600 segundos para 1 hora ou 60 mim (tanto faz) ai quando o player for ver a lista de construções (que ele pode por até 3 evoluções de edificios ao mesmo tempo) vai aparecer as evoluções mas o sistema so pode evoluir 1 por vez, e quando o timer acabar (3600 chegar a 0) ele vai para a proxima evolução... mesmo se o player estiver offline e quando ele terminar ele já altera o edificio ID=1 da tabela do mySQL do player ID=1 para nivél 2.

deu pra entender agora?

Norivan e Jissa obrigado pro me ajudar... valeu mesmo... to ficando loco com isso... so falta isso e o mapa pra terminar o jogo..

Norivan o CRON é um sistema tipo um Agendador de Tarefas... você programa ele pra data exata ele executar algum script.. e ele executa na data que você escreveu!

Editado por AmareshinO
Link para o comentário
Compartilhar em outros sites

  • 0

Eu baixei alguns livros de AJAX e PHP... eu também li em alguns sites que da para fazer isso em ajax, o problema é que eu não domino NADA de ajax..... comecei a fuçar em ajax a 1 semana....

os livros que eu peguei são bons.... se alguém quiser eu passo.... so que são em inglês!

o link do site de e-books: Know Free

Editado por AmareshinO
Link para o comentário
Compartilhar em outros sites

  • 0

minha opinião voce vai travar o servidor com a quantidade de processamento..

uma pergunta.. quantos segundos levaria para executar seu script se tivesse 100 jogadores??

se colocar 1 segundo o script pode efetuar mais de uma operação, tipo se cada jogador tiver 1 segundo de processamento 60 vai levar 1 minuto para percorrer o script todo antes de ser executado novamente, quando estiver no 2 jogador ele vai estar iniciando novamente o primeiro ai já vai ter dois processamentos, ai vira uma cascata de execuções.

uma forma de fazer é rodar ele pelo terminal e deixar residente

#/path/php /path/script.php &

e seu script colocar o slep

while( true )

{

sleep(1);

# script aqui...

}

***sempre ficar rodando vai dar uma sobrecarga de processos no servidor

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

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

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...