Question aux surdoués du PHP (Merrick ?)

Vous pouvez poser ici toutes vos questions sur les règles, le fonctionnement du jeu, etc...
Répondre
Avatar de l’utilisateur
Orka
Meuble
Messages : 523
Inscription : 22 mars 2005 17:51

Question aux surdoués du PHP (Merrick ?)

Message par Orka » 07 janv. 2007 18:54

Voilà, je redémmare à zéro un projet sur un jdr en PHP... rassurez-vous, différent de celui-ci... et je me demandais comment les programmeurs de Delain faisaient pour faire jouer les monstres, tout en sachant que ceux-ci sont quasi autonomes ?

En PHP, il faudrait activer leurs DLT pour qu'ils jouent, or, il faudrait que quelqu'un le fasse.

Je doute que ce soit automatique dès que quelqu'un se connecte, car ça checkerait l'ensemble des milliers de monstres... Trop long et trop lourd comme requêtes à chaques connexions d'un joueur...

Je ne crois pas non plus que quelqu'un active manuellement toutes les DLT toutes les 5min... Trop fous ^^

A moins qu'une partie de la gestion, donc la fameuse IA soit codée en Java... ?

Je ne demande pas de connaître les secrets de l'usine, mais simplement qu'on me mette sur le voie pour continuer mon projet ;)

C'est possible ?
Avatar de l’utilisateur
Khazâd
Ami des souterrains de Delain
Messages : 1773
Inscription : 30 août 2005 19:17

Message par Khazâd » 07 janv. 2007 19:41

J'ai moi aussi un jeu en construction en ce moment et moi je joue sans dlt mais avec augmentation de PA/Heure.
Je demande à mon AI de jouer tous les monstres qui ont plus d'un certain nombre de PA soit une attaque s'il y a quelqu'un à coté d'eux, soit en faisant un déplacement.
Après tu n'as plus qu'à demande à webcron d'activer ton AI toutes les heures ou si tu as un serveur de faire tes propres crontab.

Capture d'écran

Khazâd, sur le long chemin de la programmation depuis aout 2006 :roll:

Certain comprendront peut-être pourquoi je suis moins dispo pour delain ces derniers temps ;)
Image
Avant d'entrer dans mon échoppe, merci de vous essuyer les pieds !
Avatar de l’utilisateur
Orka
Meuble
Messages : 523
Inscription : 22 mars 2005 17:51

Message par Orka » 07 janv. 2007 19:50

c'est sur DB ? ^^ c'est bien ;)

J'avais déjà enctendu parler de webcron dans le passé, je vais me renseigner, merci ;)
Avatar de l’utilisateur
doniphan
Membre de Avatars & Co, Filliale de M&Co
Messages : 1483
Inscription : 08 janv. 2004 19:30
Localisation : # 740

Message par doniphan » 07 janv. 2007 22:33

:roll: Vous êtes des malades...



:wink:
Deviens ce que tu es. (Aristote)
Avatar de l’utilisateur
Khazâd
Ami des souterrains de Delain
Messages : 1773
Inscription : 30 août 2005 19:17

Message par Khazâd » 24 janv. 2007 22:37

:roll: bon, j'ai un pb avec les fuseaux horaires pour mon jeu. Depsuis quelques jours, il me mets une erreur de ce type :

Code : Tout sélectionner

Une erreur a été détectée.
Erreur n°: 2048
Type d'erreur : Suggestion de PHP
Message d'erreur : date() [function.date]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead
Fichier : jeu/fiche_perso.php
Ligne : 71
J'ai fait des recherches et j'ai vaguement compris qu'il fallait introduire une fonction de ce type:

Code : Tout sélectionner

date_default_timezone_set("Europe/Paris");
le souci, c'est que je sais pas où et là où j'ai fait des tests, ça n'a pas résolut mon pb.

Alors au grand maître du php, je t'en supplie, viens moi en aide et éclaire moi de tes lumières.

http://www.siteduzero.com/forum-83-1076 ... ml#r964175
On parle bien du même Merrick ?
Dernière modification par Khazâd le 25 janv. 2007 23:39, modifié 1 fois.
Image
Avant d'entrer dans mon échoppe, merci de vous essuyer les pieds !
Avatar de l’utilisateur
Iuchi_Ozogi
Meuble
Messages : 631
Inscription : 24 févr. 2004 16:16

Message par Iuchi_Ozogi » 24 janv. 2007 23:13

2 questions importantes avant de pouvoir régler un problème en php:

Quelle version de php ? (la dernière est la 5.x mais on utilise encore beaucoup 4.x )

As-tu accès au php.ini ?

Si les réponses sont: 5.x et oui
alors tu peux :

- ajouter/modifier la ligne suivante dans php.ini:

date.timezone = Europe/Paris

- et/ou aussi modifier la ligne error_reporting:

error_reporting = E_ALL
pour éviter de renvoyer ce genre d'erreur qui logiquement n'est qu'un warning.
Iuchi Ozogi.

Vorbis le teigneux, caravanier.
Avatar de l’utilisateur
Khazâd
Ami des souterrains de Delain
Messages : 1773
Inscription : 30 août 2005 19:17

Message par Khazâd » 25 janv. 2007 09:11

je suis bien en php 5.x (je sais plus exactement, mais j'ai vérifié lundi) par contre je suis chez free (que ceux qui s'apprêtent à me dire que c'est nul est que je devrais passer à un hébergeur payant s'abstiennent, pour le moment je suis en test) et du coup pas d'accès au php.ini.

par contre j'ai ça comme fonction pour gérer les erreurs et il est possible qu'il y ait un truc qui cloche

Code : Tout sélectionner

// Fonction spéciale de gestion des erreurs
function ErrorHandler($errno, $errmsg, $filename, $linenum, $vars)
{
	// Suppression des messages "Notice: Undefined variable:"
	if ($errno != E_NOTICE)
	{		
		// Définit un tableau associatif avec les chaînes d'erreur
		$errortype = array (
		           E_ERROR              => 'Erreur',
		           E_WARNING            => 'Alerte',
		           E_PARSE              => 'Erreur d\'analyse',
		           E_NOTICE            => 'Note',
		           E_CORE_ERROR        => 'Core Error',
		           E_CORE_WARNING      => 'Core Warning',
		           E_COMPILE_ERROR      => 'Compile Error',
		           E_COMPILE_WARNING    => 'Compile Warning',
		           E_USER_ERROR        => 'Erreur spécifique',
		           E_USER_WARNING      => 'Alerte spécifique',
		           E_USER_NOTICE        => 'Note spécifique',
		           E_STRICT             => 'Suggestion de PHP',
		           );
		           
		// Les niveaux qui seront enregistrés
		$user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);
		
		$err = 'Une erreur a été détectée.<br />';
		$err .= '<b>Erreur n°:</b> '. $errno . '<br />';
		$err .= '<b>Type d\'erreur :</b> '. $errortype[$errno] .'<br />';
		$err .= '<b>Message d\'erreur : </b> '.$errmsg.'<br />';
		$err .= '<b>Fichier :</b> '.$filename.'<br />';
		$err .= '<b>Ligne :</b> ' . $linenum . '<br />';
		
		if (in_array($errno, $user_errors))
		{
		   $err .= wddx_serialize_value($vars,"Variables").'<br />';
		}
		
		echo $err;
		
		// sauvegarde de l'erreur, et mail si c'est critique
		$err = addslashes($err);
		mysql_query("INSERT INTO lpma_rapport_bug VALUES('', '" . time() . "', '$err')") OR die(mysql_error());
		
		// Envoye un message d'erreur si non locale
		if($isOnline == TRUE){error_log($err, 1, "[email protected]", "Critical User Error");}
		
		die();
   }
}

// Nouvelle configuration des erreurs avec la fonction "ErrorHandler" ci-dessus
set_error_handler("ErrorHandler");
Ce qui est étrange, c'est que l'erreur 2048 ne s'affiche pas à chaque fois comme une erreur de script.
C'est grave docteur ? :oops:
Image
Avant d'entrer dans mon échoppe, merci de vous essuyer les pieds !
Avatar de l’utilisateur
Orka
Meuble
Messages : 523
Inscription : 22 mars 2005 17:51

Message par Orka » 25 janv. 2007 09:58

Je ne m'y connais pas assez pour t'aider, désolé, mais connais-tu ce site ?

http://www.siteduzero.com/tuto-3-4-0-un ... c-php.html

Le forum est super et les gens t'aident beaucoup.
Avatar de l’utilisateur
Khazâd
Ami des souterrains de Delain
Messages : 1773
Inscription : 30 août 2005 19:17

Message par Khazâd » 25 janv. 2007 10:11

c'est avec ce site et les tutos de M@téo que je me suis formé au php ;)
Par contre je n'ai pas de compte et c'est vrai que ça serait plus simple pour poser des questions et avoir des réponses adaptées :roll:
Image
Avant d'entrer dans mon échoppe, merci de vous essuyer les pieds !
Avatar de l’utilisateur
PureAngel
Meuble
Messages : 561
Inscription : 13 avr. 2005 09:25

Message par PureAngel » 25 janv. 2007 11:05

Sans rapport avec la question, mais dans ton tableau de chaînes d'erreurs, plutôt que de définir 3 niveaux (Error, Warning, Notice) de messages pour chaque source (Général, core, compile, user, ...), pourquoi ne pas faire un tableau "Sources" et un tableau "Niveau", qui te permettrait de diviser par 3 le nombre de lignes, et de pouvoir utiliser simplement une combinaison "Source_Niveau" (Ou plutôt Niveau_Source pour trier simplement par niveau) sans devoir vérifier si tu as un niveau "Notice" pour les messages de compilation,
Permet aussi de desactiver simplement les notices ou les warnings en filtrant sur le niveau, sans devoir lister toutes les sources à filtrer.

D'où sort cette fonction de gestion des erreurs ? Rien que l'association

Code : Tout sélectionner

if ($errno != E_NOTICE)
avec

Code : Tout sélectionner

E_NOTICE            => 'Note',
me fait douter de la qualité du codage de la fonction.
Avatar de l’utilisateur
Meknar
Petit joueur
Messages : 47
Inscription : 28 janv. 2005 18:47

Message par Meknar » 25 janv. 2007 11:50

Khazâd a écrit :par contre je suis chez free (que ceux qui s'apprêtent à me dire que c'est nul est que je devrais passer à un hébergeur payant s'abstiennent, pour le moment je suis en test) et du coup pas d'accès au php.ini.
pourquoi tu tentes pas de théberger toi même avec un serveur genre easyphp ou wamp5 si t'es en php5 ? c'est vraiment aps compliqué a faire, tu lances le serveru et c'est bon (faut juste faire gaffe avec le firewall)
Avatar de l’utilisateur
Orka
Meuble
Messages : 523
Inscription : 22 mars 2005 17:51

Message par Orka » 25 janv. 2007 12:13

C'est vrai que easyPHP est super pour créer un site en local, mais pas assez puissant pour héberger son site chez sois et le rendre accessible au public...

Perso, je l'utilise pour coder le mien.
Avatar de l’utilisateur
Iuchi_Ozogi
Meuble
Messages : 631
Inscription : 24 févr. 2004 16:16

Message par Iuchi_Ozogi » 25 janv. 2007 21:02

- ok, dans ce cas tu peux remplacer

if ($errno != E_NOTICE)

par

if ($errno != E_NOTICE && $errno != E_STRICT )


- easyPHP: effectivement utilisé uniquement pour le dev.

- Et pour lancer l'IA régulièrement comme sur Delain, il faut avoir accès à la crontab de la machine (très peu de chance que vous y ayez accès chez un hébergeur gratuit)
Iuchi Ozogi.

Vorbis le teigneux, caravanier.
Avatar de l’utilisateur
Orka
Meuble
Messages : 523
Inscription : 22 mars 2005 17:51

Message par Orka » 25 janv. 2007 23:29

Iuchi_Ozogi a écrit :- Et pour lancer l'IA régulièrement comme sur Delain, il faut avoir accès à la crontab de la machine (très peu de chance que vous y ayez accès chez un hébergeur gratuit)

C'est pour ça que très peu de jeux finis voient réellement le jour et survivent. Il faut un hebergeur payant.
Les frais vont être conséquents si le site est bien fait et attire le public...
Avatar de l’utilisateur
Khazâd
Ami des souterrains de Delain
Messages : 1773
Inscription : 30 août 2005 19:17

Message par Khazâd » 25 janv. 2007 23:38

PureAngel a écrit :pourquoi ne pas faire un tableau "Sources" et un tableau "Niveau", qui te permettrait de diviser par 3 le nombre de lignes, et de pouvoir utiliser simplement une combinaison "Source_Niveau" (Ou plutôt Niveau_Source pour trier simplement par niveau)
:? euh, j'ai pas tout compris, tu pourrais recommencer ou me donner un exemple
Meknar a écrit :pourquoi tu tentes pas de théberger toi même avec un serveur genre easyphp
Comme Orka, j'utilise easyphp en locale pour bosser sur le jeu, mais il est hors de question que ma bécane tourne 24/24, je supporterai pas le bruit :?
Orka a écrit :
Iuchi_Ozogi a écrit :- Et pour lancer l'IA régulièrement comme sur Delain, il faut avoir accès à la crontab de la machine (très peu de chance que vous y ayez accès chez un hébergeur gratuit)
C'est pour ça que très peu de jeux finis voient réellement le jour et survivent. Il faut un hebergeur payant.
Les frais vont être conséquents si le site est bien fait et attire le public...
Pour l'instant, j'utilise webcron, une tache par heure est amplement suffisante vue la fréquentation (4 joueurs testeurs), mais si je dois passer à la vitesse supérieur, c'est sur que je passerai par un hébergeur payant ;)

Enfin pour l'instant, on va dire que j'apprends à programmer
Iuchi_Ozogi a écrit :if ($errno != E_NOTICE && $errno != E_STRICT )
Pour l'instant, ça marche mais il faudra que je remets pas mal de chose à plat sinon ça va vite devanir le bazar. Sinon j'avais pensé à ça "ini_set("date.timezone","Europe/Paris");" mais je suis pas sur que ça fonction bien. Il faudrait que je fasse des tests :roll:

en tout cas, merci pour le coup de main, c'est sympa ;)
Image
Avant d'entrer dans mon échoppe, merci de vous essuyer les pieds !
Répondre