Bonjour à tous,
Je viens de mettre à dispo pour mon alliance un OGSpy sur serveur dédié. Pour l'installation, quelques petites batailles de version avec php sinon tout s'est bien passé.
Par contre je me heurte à un bug concernant le mod eXpedition, impossible de lui faire prendre en compte les messages de gain ressources. Tous les autres types de messages d'expédition passent (vaisseaux, retard, pirates, aliens...) mais pas les ressources.
Dans les logs erreur, j'ai ce message :
PHP Warning: preg_match(): Compilation failed: escape sequence is invalid in character class at offset 33 in /opt/ogspy/mod/expedition/_xtense.php on line 187
La ligne 187 correspond à la première ligne de ce bloc...
else if(preg_match($regexRess, $content, $expRess) != 0){
logging("RESSOURCES");
logging("Ressources1 : ".$expRess[1]);
logging("Ressources2 : ".$expRess[2]);
// L`attaquant obtient Antimatière (AM) 310.Extrait du journal
log_('debug', $expRess[2]);
if(preg_match("/Métal/", $expRess[1]))
{
$typeRess = 0;
$met = str_replace('.','', $expRess[2]);
$cri = 0;
$deut = 0;
$antimat = 0;
}
if(preg_match("/Cristal/", $expRess[1]))
{
$typeRess = 1;
$met = 0;
$cri = str_replace('.','', $expRess[2]);
$deut = 0;
$antimat = 0;
}
if(preg_match("/Deutérium/", $expRess[1]))
{
$typeRess = 2;
$met = 0;
$cri = 0;
$deut = str_replace('.','', $expRess[2]);
$antimat = 0;
}
if(preg_match("/Antimatière/", $expRess[1]))
{
$typeRess = 3;
$met = 0;
$cri = 0;
$deut = 0;
$antimat = str_replace('.','', $expRess[2]);
}
if($typeRess == -1)
{
die("Parsing Error");
}
logging("Ressources : Insertion table : ".TABLE_EXPEDITION);
$query =
"INSERT INTO ".TABLE_EXPEDITION."
(user_id, date, pos_galaxie, pos_sys, type)
VALUES ($uid, $timestamp, $galaxy, $system, 1)";
$db->sql_query($query);
$idInsert = $db->sql_insertid();
logging("Ressources : Insertion table : ".TABLE_EXPEDITION." = OK");
logging("Ressources : Insertion table : ".TABLE_EXPEDITION_RESS);
$query =
"INSERT INTO ".TABLE_EXPEDITION_RESS."
(id_eXpedition, typeRessource, metal, cristal, deuterium, antimatiere)
VALUES ($idInsert, $typeRess, $met, $cri, $deut, $antimat)";
$db->sql_query($query);
logging("Ressources : Insertion table : ".TABLE_EXPEDITION_RESS." = OK");
return true;
}
Quelqu'un aurait une idée?
Merci
Hello
La correction a été identifiée. La publication est proche ;-)
Bonjour,
Oui en effet c'est un problème lié à la version 7.4 de php, un changement dans la syntaxe qui fait que ça ne fonctionne plus normalement.
C'est toujours fonctionnel avec les versions antérieures de php, je n'ai pas eu trop le temps de m'y metttre ces derniers temps, je vais essayer de corriger ça au plus vite ;)
La Pull Request est disponible :-)
Hello,
Je ne sais pas si c'est toujours d'actualité, mais le problème est effectivement lié aux échappements (et à ce qui doit maintenant être échappé) des caractères des regex sur la version 7.4 de php.
J'avais réussi à faire marcher le truc en bidouillant la ligne 74 du fichier xtense.php dans le dossier du mod extension:
J'ai remplacé:
$regexRess = "/L`attaquant\sobtient\s(\S+)\s[\(\AM\)]*\s?([\d+\.+]*)/";
Par la ligne suivante:
$regexRess = "/L`attaquant\sobtient\s(\S+)\s[\\\(\\\AM\\\)]*\s?([\d+\.+]*)/";
Je partage à tout hasard, si ça peut servir à quelqu'un :)
Je peux même faire une version du coup :-)