Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

_TrovaoxD_

Contagem de Tempo para fazer missao (rpg site)

Recommended Posts

Olá pessoal sou novo aqui no forum e queria vir aqui pedir uma ajuda a vocês, e desculpem se esto fazendo algo errado aqui http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

 

Bom é assim, eu estou fazendo um rpg de site do naruto e estou utilizando o php, mas e meio complicado pq nao sei quase nada, apenas o basicão mesmo.

Então vai ser assim, irá ter uma parte que as pessoas podem fazer missões, quando ela clicar em missao irá aparecer uma pagina para ela escolher uma missão que deseja fazer, quando ela escolher uma ela clica em aceitar missao, depois dessa parte que ela clico em aceitar ela vai ser redirecionada para uma pagina de contagem, essa contagem e da missao, Por exemplo:

 

Ela escolhe uma missão de 3 horas.

Então quando ela clica nesta missao de 3 hrs ela será redirecionda para uma pagina que comesa a fazer uma contagem de 3 hrs, vai aparecer assim 2:59, 2:58: 2:57...., comesa a contar de 3 hrs ate chegar a 0, e quando chegar a 0 a missao termina e ele ganha uma recompensa, mais ela não poderá acessar a pagina de missoes se ela estiver fazendo uma.

Mais ai vai ter uma opção de de canselar a missão, se ela clicar em canselar ai a contagem para e ela não recebe nada da recompensa e ela pode voltar a pagina de missões de volta, mas o problema tbm é que eu queria que a contagem não parase mesmo se ela fechase o navegador ou desligase o pc, porque em alguns rpgs de site que vi, msm eu fechando tudo e desligando o pc no outro dia a contagem ja tinha terminado e eu recebia minha recompensa.

 

e tipo assim que tinha que ser, e se alguem sabe mais o menos como pode funcionar isso eu agradeço muito se me ajudar, parece q to pedindo mt mais msm se não for possivel fazer isso, se vcs tiverem dicas tbm para mim poder tentar fazer aqui de um geito diferente que nao seja meio impossivel igual esse, eu agredeço mt tbm.

 

Se eu não expliquei direito porfavor me digam, pq ai eu explico melhor.

Vlw ae e até +++

Compartilhar este post


Link para o post
Compartilhar em outros sites

Projete TODO o seu sistema, (não só a parte de missões) tudo que será possível fazer no site e leve as dúvidas ao fórum de modelagem de bancos de dados. Lá vão te instruir sobre a melhor maneira de criar, relacionar e linkar as tabelas, quantas, quais e como serão necessárias (claro se houver colaboração e empenho da sua parte).

 

Depois que este passo estiver concluído, comece a setorizar seu portal de modo a trabalhar focado uma ação de cada vez (mesmo que elas sejam relacionadas).

 

 

Estou pedindo isso porque, podemos até ajudar. Eu vou falar pra você fazer esse contador com setInterval() do Javascript. Pra adicionar um ID de missão e DateTime inicial no banco de dados, criar uma coluna "inMission" no banco de dados, etc. Mas se você não tiver isso pronto, as dúvidas vão se acumular. Prepare o recipiente, aí despejaremos conhecimento ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Projete TODO o seu sistema, (não só a parte de missões) tudo que será possível fazer no site e leve as dúvidas ao fórum de modelagem de bancos de dados. Lá vão te instruir sobre a melhor maneira de criar, relacionar e linkar as tabelas, quantas, quais e como serão necessárias (claro se houver colaboração e empenho da sua parte).

 

Depois que este passo estiver concluído, comece a setorizar seu portal de modo a trabalhar focado uma ação de cada vez (mesmo que elas sejam relacionadas).

 

 

Estou pedindo isso porque, podemos até ajudar. Eu vou falar pra você fazer esse contador com setInterval() do Javascript. Pra adicionar um ID de missão e DateTime inicial no banco de dados, criar uma coluna "inMission" no banco de dados, etc. Mas se você não tiver isso pronto, as dúvidas vão se acumular. Prepare o recipiente, aí despejaremos conhecimento ;)

 

 

Olá Evandro, bom eu n entendi mt o que você quis dizer, mais tipo eu ja fiz ja quase todo o site, ja fiz todos os menus e ja linkei tudo, ja terminei as otras paginas em php, cada uma com uma função difrente, uma das partes mais dificil msm é essa da missão que vai ser por tempo igual eu disse la em cima que eu não estou conseguindo fazer :( .

Compartilhar este post


Link para o post
Compartilhar em outros sites

ja tem o banco de dados?

 

imagino que você tenha uma tabela chamada players/jogadores, ok?

 

nela você vai adicionar 3 novos campos:

 

ultima_missao -> integer not null

inicio_missao -> datetime

em_missao -> boolean

 

ultima_missao faz referência à uma tabela "Missões" linkando ao ID da mesma que deve ser um Índice, preferencialmente chave primária e, se possível ultima_missão deve ser uma FOREIGN_KEY referenciando ao ID na tabela "Missões".

 

inicio_missao tem apenas a função de armazenar a hora de início da missão

 

em_missao guarda a informação se já existe uma missão em curso para evitar que o jogador efetue mais de uma ao mesmo tempo

 

você vai então, implementar códigos PARECIDOS com o conteúdo abaixo:

 

doMission.php

<?php
// Estou assumindo que você armazena o ID do jogador em uma SESSION:
session_start();

$id = $_SESSION['id'];

// Jogador mandou iniciar uma missão, e os dados são passados através da URL assim
// www.meujogo.com.br/domission.php?missionId=1

$mission = $_GET['doMission'];

// Definindo os valores da missão para o banco:

$conn = mysql_connect('localhost','root','');
mysql_select_db('meudb',$conn);
mysql_query('UPDATE `jogadores` SET `em_missao`=TRUE, `ultima_missao`='.$mission.', `inicio_missao`="'.date('Y-m-d H:i:s').'" WHERE `id`='.$id);
mysql_close($conn);
header('Location: ./showMission.php');
?>

Pronto, a missão está registrada no banco, agora vamos detalhá-la

 

showMission.php

<?

session_start();

$id = $_SESSION['id'];

// A tabela de missões deve conter um campo 'duracao' que informa quanto tempo ela demora pra ser concluída
// para o nosso exemplo, o prazo é registrado em segundos (3 horas = 3600 * 3 = 10800)

$conn = mysql_connect('localhost','root','');
mysql_select_db('meudb',$conn);
$query = mysql_query('SELECT `missoes`.`missao`,`missoes`.`duracao`,`jogadores`.`em_missao` FROM `missoes` JOIN `jogadores` ON `jogadores`.`ultima_missao` = `missoes`.`id` WHERE `jogadores`.`id` = '.$id);


/* Esta função retorna o tempo restante para o término da missão
 * 
 * @param string startDate : Hora inicial no formato SQL DATETIME
 *
 * @return integer Diferença em segundos entre startDate e endDate
*/
function remainSeconds($startDate)
{
    $endDate = getdate();
    $startDate = date_parse($startDate);
    return (
        mktime($startDate['hours'],$startDate['minutes'],$startDate['seconds'],$startDate['mday'],$startDate['mon'],$startDate['year']) -
        mktime($endDate['hours'],$endDate['minutes'],$endDate['seconds'],$endDate['mday'],$endDate['mon'],$endDate['year'])
    );
}

$dados = mysql_fetch_assoc($query);

if($dados['em_missao'] == 'FALSE') die('Você não está em uma missão.');

$secondsLeft = remainSeconds($dados['inicio_missao']);
if($secondsLeft < 0) {
    mysql_query('UPDATE `jogadores` SET `em_missao`=FALSE WHERE `id`='.$id);
    // outras ações a tomar quando o jogador termina uma missão
    // entram nessa parte
}
else {
    echo "Missão em curso: {$dados['missao']}.";
    echo "tempo restante: <span id=\"counter\"></span>";

?>
<script type="text/javascript">
var left = <?php echo $secondsLeft; ?>;

window.onload = function(){
    sec = setInterval('updateTime',1000);
}

function updateTime(){
    if(--left == 0) document.location = location.reload();
    leftHours = Math.floor(left / 3600);
    leftMins = Math.floor((left % 3600) / 60);
    leftSecs = Math.floor(left % 60);
    document.getElementById('counter').innerHTML = leftHours + ':' + leftMins + ':' + leftSecs;
}
</script>
<?php } ?>

 

espero que ajude =S

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evandro mt obrigado por estar me ajudando, eu so estou com dificuldade na configuração, tipo que tabelas eu preciso criar, que tipos elas são e etc?

 

Eu tenho uma tabela chamada contas, nessa tabela vai todos os dados do usuario, la estao persoangens, nome e etc, quando ele troca de pagina tem uma SESSION user e senha, é nesta tabela que tenho que criar essas colunas ou tenho que criar uma tabela nova?como eu posso comesar?

 

será que tem com você me dar mais algumas explicações porfavor, pq nao estou entendo muito bem :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sugiro que consulte a sessão de modelagem de bancos de dados.

 

Lá tem gente muito mais competente e capacitada que eu pra te auxiliar a criar as tabelas da maneira mais correta e precisa para a sua necessidade.

 

Visite a sessão já tendo em mente o máximo possível de todas as interações possíveis do jogador com o site, para o pessoal poder fazer o levantamento de todos os dados que serão processados em tempo de execução.

 

Não costumo postar lá, mas verifico as soluções e, na maioria dos tópicos onde o necessitado colabora com a comunidade, a solução é de excelente qualidade e auto-explicativa.

 

Qualquer dúvida, recorra novamente ao fórum.

Compartilhar este post


Link para o post
Compartilhar em outros sites

concerteza vou nessa sessão para ver se conseguido fazer de um geito mais facil, mais agora o problema é assim, eu consegui por o tempo correndo e quando ele termina ele leva para outra pagina onde a pessoa recebe a recompensa pela missao, fiz até alguns esquemas para ficar mais igual e arrumar algumas coisas que podiam atrapalhar, MAS o problema agora é outra coisa, a missão ocorre normal eu clico na missao que eu quero, ele ja joga pra uma pagina onde comesam a contar o tempo e quando termina ela me joga pra otra pagina e ja me da a recompensa, mais quando comesa a fazer a contagem e eu mudo de pagina ou fecho, o tempo cancela e ele volta do comeso de nvo quando eu clico la. EU PERGUNTO: TEM COMO EU FAZER O TEMPO CONTINUAR MSM DEPOIS DEU FECHAR TUDO E DESLIGAR O PC IGUAIS NOS OUTROS JOGOS ASSIM DE SITE? e se tem como me ajudar com este comando?.

 

pq eu vi que em alguns sites, tipo eu coloco uma missao de 5 hrs la na hora de dormir, no outro dia eu acordo e ela ja ta finalizada pq ja passou as 5 hrs e eu nem tava no pc :P

 

E tambem queria saber pq o comando UPDATE para de funcionar, eu utilizo ele e quando ele é utlizado varias vezes ele derrepente para de da UPDATE na tabela, ja aconteceu isso varias vezes com pessoas que cadatraram no meu site e tipo trocaram de nome algumas vezes e chega uma hora que nao atualiza mais, fica na mesma, e o pior e que estou utilizando ele nos esquemas da missao para atualizar as colunas em_missao e etc.

 

É isso que eu gostaria de saber se alguem puder ajudar fico mt grato !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será que alguem pode me ajudar?? eu estou com 2 problemas agora e não estou conseguindo prosseguir por causa deles.

 

É assim, depois que a pessoa clicou em uma missao o tempo comesa a contar, ai quando ela clica la e o tempo comesa, ja executa um comando que insere na tabela missao os dados daquela missao que ela esta fazendo, so que assim tem como a pessoa burlar esse sistema e conseguir a recompensa sem que tenha q esperar o tempo da missao.

AI o unico geito que eu pensei foi, so insere os dados na tabela missão depois que o tempo chegar a 00:00:02, quando chegar a isso ai que executa o comando e insere, pq ai nao tem como a pessoa enganar o sistema.

 

Olha o comand que estou usando de javascript para contar o tempo:

<script language="javascript" type="text/javascript">
var conc=0;
function calculafim(div,divtotal){
	if(conc==0){
	var navegador=navigator.appName;
	var tmp = document.getElementById(div).innerHTML.split(":");
	var s = tmp[2];
	var m = tmp[1];
	var h = tmp[0];
	s--;
	if (s < 00){ s = 59;	m--; }
	if (m < 00){ m = 59;	h--; };
	s = new String(s); if (s.length < 2) s = "0" + s;
	m = new String(m); if (m.length < 2) m = "0" + m;
	h = new String(h); if (h.length < 2) h = "0" + h;
	
	var temp = h + ":" + m + ":" + s;
	
	document.getElementById(div).innerHTML = temp;
	document.getElementById(div).value = temp;
	atualiza(div,divtotal);
	document.title='['+temp+'] :: NNKOnline - RPG ::';
	}
}
window.setInterval('calculafim("missao_tempo","mensagem")',1000);function atualiza(div,divtotal){
  	if((document.getElementById(div).value) < "00:00:01"){
	<?
	$tarefa = Tarefa_1;
	$addRelatorio = mysql_query("INSERT INTO missoes (AccountID, missao) VALUES ('$user','$tarefa')");
	?>
	  	window.open('fimtarefa1.php','direito')
  		conc=1;
	}
}
</script>

Vocês podem ver que tem um esquema ali de quando chega a 00:00:01 ele executa um comando que chama outra pagina, eu até tentei colocar la o comando em PHP de INSERIR como está ali no comando, mais não adiantou, sem ele terminar o comando comesou a inserir na tabela varios dados, é como que se aquele comando de php no meio dos java executa-se toda hora sem que o tempo chegue a 00:00:01.

BOM EU QUERIA SABER SE TEM COMO ADICIONAR ALGO A MAIS NESSE COMANDO QUE QUANDO CHEGAR A 00:00:02, ELE EXECUTAR O PHP QUE INSERE NA TABELA MISSOES, MAS SO QUANDO CHEGAR A 00:00:02.

 

 

A segunda coisa que eu queria saber é a mesma coisa que eu disse a cima: TEM COMO EU FAZER O TEMPO CONTINUAR MSM DEPOIS DEU FECHAR TUDO E DESLIGAR O PC IGUAIS NOS OUTROS JOGOS ASSIM DE SITE?

pq eu vi que em alguns sites, tipo eu coloco uma missao de 5 hrs la na hora de dormir, no outro dia eu acordo e ela ja ta finalizada pq ja passou as 5 hrs e eu nem tava no pc :P

 

É isso pessoal, qualquer ajuda de vcs vai me ajudar mt, abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se estudasse o código que te passei, veria que existe uma função chamanda remainSeconds() que é a qual faz a contagem de tempo restante DESDE QUE O DB ESTEJA DO JEITO QUE EXEMPLIFIQUEI.

 

Seu erro aí está no fato que você não tem como fazer um Javascript executar um bloco PHP, apenas o contrário.

 

Toda a instrução PHP será processada ANTES da página ser enviada ao usuário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

MAIS TIPO É POSSIVEL FAZER ISSO? INSERIR NA TABELA ALGO SÓ DEPOIS DO TEMPO CHEGAR A 00:00:02 ?? TEM ALGUMA SOLUÇÃO PARA ISSO, ALGUMA LOGICA DE DAR CERTO?

 

 

E TEM COMO EU FAZER O TEMPO CONTINUAR MSM DEPOIS DEU FECHAR TUDO E DESLIGAR O PC IGUAIS NOS OUTROS JOGOS ASSIM DE SITE?

 

esses são meus problemas, será que alguem consegue ajudar a resolver?

Obrigado e um abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Haaaaa, pelomenos me ajuda nesse problema de quando eu fechar tudo a contagem ainda continua?????

só isso que eu quero arrumar mais, os outros eu dou um geito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara eu tambem estou com esse poblema...

talvez podemos juntar nosso conhecimento para resolver...

 

você esta criando um RPG não é? eu tambem estou só que não é do naruto é de outro anime o DEATH NOTE

da uma olhada nele www.deathnoterpg.com e passa o link do seu...

 

ai nós vemos o que podemos fazer para colocar essa missão!!!

 

VLW

Compartilhar este post


Link para o post
Compartilhar em outros sites

mann alguem pode me ajudar? eu estou com o mesmo poblema...

alguem tem algum jeito de fazer esse sistema de missão pra um RPG BROWSER???

o sistema que preciso eh do mesmo jeito que o _Trovão_ precisa ...!!

:o

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caras antes de começar qualquer sistema grande como esse leiam tutoriais e video aulas na net sobre as linguagens que você vai precisar estudem muito e depois começem

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.