Ir para conteúdo

POWERED BY:

Arquivado

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

deathnoterpg

[Resolvido] Recuperação de HP automaticamente (RPG BROWSER)

Recommended Posts

Alguem me ajuda?..

estou criando um RPG- BRowser PHP

no meu banco de dados tenho players->maxhp & players->hp

 

eu preciso de algum codigo que o HP vai aumentando automaticamente até chegar ao maxHP

 

ME ajudem POr favor??

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que sem nenhuma condiçao .. tipo... :

 

o Maximo de HP que ele pode possuir ---> maxHP

o Total de HP que ele possui----> HP

 

se o jogador for atacado ou atacar alguem e perder HP,

ele vai recuperando o HP de pouco em pouco ateh chegar ao limite de HP que ele pode possuir(max HP)

 

http://deathnotegame.host.sk

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depende do tempo que o HP vai aumentar. Você pode criar uma cronjob (isso se eu não estiver complicando demais o processo) pra ir verificando todas as contas e ir adicionando em um certo intervalo de segundos (pode verificar usando time).

 

Eu já fiz um sistema parecido para um RPG de Harry Potter, e fazia a verificação de tempo de preparo de poções que cada usuário estava fabricando usando uma verificação como essa, e deu certo xD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depende do tempo que o HP vai aumentar. Você pode criar uma cronjob (isso se eu não estiver complicando demais o processo)

 

Claro que não !! boa ideia, pensei na mesma coisa, porem pensei se forma diferente, já que os dados são guardados

no banco de dados MySQL, você pode fazer esse processo por lá mesmo :P

 

CREATE EVENT `addHealthPoints` ON SCHEDULE EVERY 1 MINUTE ON COMPLETION NOT PRESERVE ENABLE
DO BEGIN
DECLARE points INT(11) DEFAULT '50';
UPDATE `players`.`users` SET `users`.`hp` = `users`.`hp` + points 
       WHERE `users`.`hp` != `users`.`maxhp` + points AND `users`.`hp` + points <= `users`.`maxhp`;
END

 

Tabela que eu usei pra teste:

CREATE TABLE `users` (
`pid` MEDIUMINT(16) UNSIGNED NOT NULL AUTO_INCREMENT,
`nome` VARCHAR(42) NOT NULL,
`hp` INT(11) NOT NULL,
`maxhp` INT(11) NOT NULL DEFAULT '400',
PRIMARY KEY (`pid`)
)
ENGINE=InnoDB ROW_FORMAT=DYNAMIC AUTO_INCREMENT=2

 

Então, criei meu usuário, comecei com 300 de hp:

mysql> select * from users;
+-----+--------+-----+-------+
| pid | nome   | hp  | maxhp |
+-----+--------+-----+-------+
|   1 | Andrey | 300 |   400 |
+-----+--------+-----+-------+
1 row in set (0.00 sec)

 

Depois de 1 minuto:

mysql> select * from users;
+-----+--------+-----+-------+
| pid | nome   | hp  | maxhp |
+-----+--------+-----+-------+
|   1 | Andrey | 350 |   400 |
+-----+--------+-----+-------+
1 row in set (0.00 sec)

 

Depois de 2 minutos:

mysql> select * from users;
+-----+--------+-----+-------+
| pid | nome   | hp  | maxhp |
+-----+--------+-----+-------+
|   1 | Andrey | 400 |   400 |
+-----+--------+-----+-------+
1 row in set (0.00 sec)

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andrey, ultimamente seus conhecimentos em SQL estão até me assustando cara. Dá pra explicar passo a passo esse EVENT pro burrico aqui?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual exatamente a dúvida maninho ?

CREATE EVENT `addHealthPoints` ON SCHEDULE EVERY 1 MINUTE ON COMPLETION NOT PRESERVE ENABLE

Cria um evento chamando 'addHealthPoints' a cada 1 minuto, quando completar, preserva o evento ligado

DO BEGIN
       DECLARE points INT(11) DEFAULT '50';
       UPDATE `players`.`users` SET `users`.`hp` = `users`.`hp` + points 
       WHERE `users`.`hp` != `users`.`maxhp` + points AND `users`.`hp` + points <= `users`.`maxhp`;
END

Declara points como INT( 11 ) DEFAULT '50';

SQL Nativo ..

 

Declare é uma variável,

@algumacoisa :=

também é, você pode fazer:

 

DO BEGIN
  DECLARE nome VARCHAR(16);
  SELECT @nome := `tabela`.`nome` FROM ... WHERE ..
  SET nome = @nome;
  UPDATE tabela2 SET nome = ... WHERE .. 
END

 

Isso tirando o nome de uma tabela, de uma linha da tabela, pra ser mais específico ..

E alterando o nome resgatado da tabela1 na tabela 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

CARA aqui ta dando erro...

 

:o

 

eu no manjo mto com banco de dados...

tem como você simplificar mais ainda?

os dados que eu uso :

 

nome do banco de dados :sd1235g

tabela dos usuarios: players

e dentro da tabela players eu tenho: username, hp e maxhp

 

 

SELECT * FROM `players` WHERE 1

 

+----+--------------+----------+-----+-------+

| id | username | senha | hp | maxhp |

+----+--------------+----------+-----+-------+

| 1 | player1 | ****** | 350 | 400 |

+----+--------------+----------+-----+-------+

 

vlw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

ESSE ERRO |>

 

 

Erro

 

Comando SQL:

 

CREATE EVENT `addHealthPoints` ON SCHEDULE EVERY1 MINUTE ON COMPLETION NOT PRESERVE ENABLE DO BEGIN DECLARE points INT( 11 ) DEFAULT '50';

 

Mensagens do MySQL : Documentação

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, aqui não deu erro não, o SQL que eu usei foi o mesmo postado acima ..

CREATE EVENT `addHealthPoints` ON SCHEDULE EVERY 1 MINUTE ON COMPLETION NOT PRESERVE ENABLE
DO BEGIN
       DECLARE points INT(11) DEFAULT '50';
       UPDATE `players`.`users` SET `users`.`hp` = `users`.`hp` + points 
       WHERE `users`.`hp` != `users`.`maxhp` + points AND `users`.`hp` + points <= `users`.`maxhp`;
END

 

Você está executando, usando phpMyAdmin ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara seis acreditam que peguei costume de usar o "prompt" mysql msm huehuehueuh. Ultimamente é q to meio sem vontade usando o phpmyadmin pq sei q é melhor e mais prático... mas me sinto contrariado quando vou usando....

 

 

aproveitando pra imendar

Andrey você programa php em que?

 

eu uso notepad++ indicado por um amigo ferrado em programação.....

 

Se W.Bruno passar aqui tmb responder please.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Po eu sou leigo em php ainda, mas vou tentar explicar uma solução que poderia funcionar, só que sem os códigos, se algum helper ver que a ideia for viável poderia ajudar o amigo.

 

Poderia criar uma função que verifica o maxhp e o hp atual no banco de dados e faz as if´s else:

if hp < maxhp

hp++

UPDATE no banco de dados

else if hp > maxhp (caso alguma pessoa consiga bugar)

hp = maxhp

UPDATE no banco de dados

else if hp == maxhp

não faz nada.

 

Dai aonde ele mostra o hp do personagem, poderia ser usado uma div autorefresh que atualiza a cada 1s ou quantos segundos for essa recuperação puxando os dados do banco de dados.

 

Imagino que não deva ser a melhor solução. Mas acredito que funcionária hehe.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andrey Knupp,

Ou você inventou uma QUERY imaginária, ou você é o cara, nem imaginava que isso existia no MySQL, excelente solução, você é o mestre do MySQL!

 

MiguelTb,

Sua solução dá certo sim, o complicado é que com um grande número de usuários o servidor poderia se sobrecarregar, afinal cada usuário faria uma requisição ao servidor a cada minuto, imagine 50.000 usuários? São 50.000 solicitações por minutos.

 

deathnoteRPG,

Testei a solução apresentada pelo Andrey Knupp e aqui também não deu certo, então vamos adaptar algumas coisinhas e ver se tudo volta a funcionar.

 

1) Ative o SCHEDULE EVENT no seu servidor, para isto, basta digitar a seguinte QUERY no phpMyAdmin:

SET GLOBAL event_scheduler = 1;

 

2) Teste a seguinte QUERY:

CREATE EVENT addHP
ON SCHEDULE EVERY 1 MINUTE
DO
UPDATE users SET hp = hp + 1 WHERE hp != maxhp;

 

Vamos explicar o código de forma didática:

CREATE EVENT addHP    // Cria o evento addHP
ON SCHEDULE EVERY 1 MINUTE   // A cada um minuto realiza a seguinte tarefa  
DO
UPDATE users SET hp = hp + 1 WHERE hp != maxhp;  // Atualizar a tabela users, adicionando 1 de hp para todos que nao atingirem o limite de HP

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu tentei ativar o SCHEDULE EVENT mas deu esse erro:

 

#1227 - Access denied; you need the SUPER privilege for this operation

 

mas eu pesquesei e vi que o codigo esta certo eu vou arrurmar aqui mas acho que dessa vez

vai dar certo

 

:joia:

 

<_< no consegui arrumar no...

 

#1227 - Access denied; you need the SUPER privilege for this operation

 

esse erro que esta complicando!!

 

:!: :!:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sob qual usuário está trabalhando? O root que pode tudo ou algum outro criado à parte? Para o segundo caso, esse usuário tem permissões de executar tal comando?

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.