[GDRCD 5.6] Bug sussurri
[GDRCD 5.6] Bug sussurri postato il 01/08/2023 03:04:48 nel forum programmazione, open source e hosting e modificato da moderazione il 21/04/2026 16:46:40
Ciao a tutti!
Ho da poco scaricato il nuovo pacchetto per creare un sito fra amici, ma mi sono accorta di un bug che purtroppo - non essendo programmatrice - non sto riuscendo in nessun modo a risolvere, perciò chiedo umilmente il vostro aiuto.
Il problema è che i sussurri, pur non vedendoli, suonano sempre anche quando non sono diretti a te e questo crea una fastidiosa cacofonia, specialmente poi quando si giocherà in gruppo. Proprio perché non ho toccato niente ed è presente da quando ho installato gdrcd 5.6, forse è un problema insito nel pacchetto? E nessuno fino ad ora ha riscontrato già il problema? Altrimenti non saprei cos'è che crea conflitto.
Vi posto i codici di ref_header:
<?php[Spoiler - Clicca per Aprire]
<?php
//Includio i parametri, la configurazione, la lingua e le funzioni
require ('includes/required.php');
$last_message = isset($_SESSION['last_message']) ? $_SESSION['last_message'] : 0;
if(!empty($_SESSION['theme']) and array_key_exists($_SESSION['theme'], $PARAMETERS['themes']['available'])){
$PARAMETERS['themes']['current_theme'] = $_SESSION['theme'];
}
//Eseguo la connessione al database
$handleDBConnection = gdrcd_connect();
//Ricevo il tempo di reload
$i_ref_time = gdrcd_filter_get($_GET['ref']);
if((gdrcd_filter_get($_REQUEST['chat']) == 'yes') && (empty($_SESSION['login']) === false)) {
/*Aggiornamento chat*/
/*Se ho inviato un azione*/
if((gdrcd_filter('get', $_POST['op']) == 'take_action') && (($PARAMETERS['mode']['skillsystem'] == 'ON') || ($PARAMETERS['mode']['dices'] == 'ON'))) {
$actual_healt = gdrcd_query("SELECT salute FROM personaggio WHERE nome = '".$_SESSION['login']."'");
if( (gdrcd_filter('get', $_POST['id_ab']) != 'no_skill') && !empty($_POST['id_ab']) ) {
if($actual_healt['salute'] > 0) {
$skill = gdrcd_query("SELECT nome, car FROM abilita WHERE id_abilita = ".gdrcd_filter('num', $_POST['id_ab'])." LIMIT 1");
$car = gdrcd_query("SELECT car".gdrcd_filter('num', $skill['car'])." AS car_now FROM personaggio WHERE nome = '".$_SESSION['login']."' LIMIT 1");
$bonus = gdrcd_query("SELECT SUM(oggetto.bonus_car".gdrcd_filter('num', $skill['car']).") as bonus FROM oggetto JOIN clgpersonaggiooggetto ON clgpersonaggiooggetto.id_oggetto=oggetto.id_oggetto WHERE clgpersonaggiooggetto.nome='".$_SESSION['login']."' AND clgpersonaggiooggetto.posizione > 1");
$racial_bonus = gdrcd_query("SELECT bonus_car".gdrcd_filter('num', $skill['car'])." AS racial_bonus FROM razza WHERE id_razza IN (SELECT id_razza FROM personaggio WHERE nome='".$_SESSION['login']."')");
$rank = gdrcd_query("SELECT grado FROM clgpersonaggioabilita WHERE id_abilita=".gdrcd_filter('num', $_POST['id_ab'])." AND nome='".$_SESSION['login']."' LIMIT 1");
if($PARAMETERS['mode']['dices'] == 'ON') {
mt_srand((double) microtime() * 1000000);
$dice=($_POST['dice']!='no_dice')?$_POST['dice']:'1';
$die = mt_rand(1, (int) $dice);
$chat_dice_msg = gdrcd_filter('in', $MESSAGE['chat']['commands']['use_skills']['die']).' '.gdrcd_filter('num', $die).',';
} else {
$chat_dice_msg = '';
$die = 0;
}
$car=gdrcd_filter('num', $car['car_now']) + gdrcd_filter('num',$racial_bonus['racial_bonus']);
$carr=gdrcd_filter('num', $car['car_now']) + gdrcd_filter('num',$racial_bonus['racial_bonus']) + gdrcd_filter('num', $die) +gdrcd_filter('num', $rank['grado']) + gdrcd_filter('num', $bonus['bonus']);
$testo="{$_SESSION['login']} ".gdrcd_filter('in', $MESSAGE['chat']['commands']['use_skills']['uses'])." <b>". gdrcd_filter('in', $skill['nome']).":</b> ".gdrcd_filter('in', $PARAMETERS['names']['stats']['car'.$skill['car'].'']) ." {$car}, {$chat_dice_msg} ". gdrcd_filter('in', $MESSAGE['chat']['commands']['use_skills']['ramk']). " " .gdrcd_filter('num', $rank['grado']) .", ". gdrcd_filter('in', $MESSAGE['chat']['commands']['use_skills']['items']). " " . gdrcd_filter('num', $bonus['bonus']) . ", ". gdrcd_filter('in', $MESSAGE['chat']['commands']['use_skills']['sum']) . " {$carr}" ;
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'C', '{$testo}')");
} else {
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in', $_SESSION['login'])."', NOW(), 'S', '".gdrcd_filter('in', $MESSAGE['status_pg']['exausted'])."')"));
}
/** * Tiro su caratteristica
* @author Blancks
*/
}
else if (gdrcd_filter('get', $_POST['id_stats']) != 'no_stats' && gdrcd_filter('get',$_POST['dice']) != 'no_dice')
{
mt_srand((double)microtime()*1000000);
$die=mt_rand(1,gdrcd_filter('num', (int)$_POST['dice']));
$id_stats = explode('_', $_POST['id_stats']);
$car = gdrcd_query("SELECT car".gdrcd_filter('num',$id_stats[1])." AS car_now FROM personaggio WHERE nome = '".$_SESSION['login']."' LIMIT 1");
$racial_bonus = gdrcd_query("SELECT bonus_car".gdrcd_filter('num',$id_stats[1])." AS racial_bonus FROM razza WHERE id_razza IN (SELECT id_razza FROM personaggio WHERE nome='".$_SESSION['login']."')");
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'C', '".$_SESSION['login'].' '.gdrcd_filter('in',$MESSAGE['chat']['commands']['use_skills']['uses']).' '.gdrcd_filter('in',$PARAMETERS['names']['stats']['car'.$id_stats[1]]).': '.gdrcd_filter('in',$PARAMETERS['names']['stats']['car'.$id_stats[1].'']).' '.gdrcd_filter('num',$car['car_now']+$racial_bonus['racial_bonus']).', '.gdrcd_filter('in', $MESSAGE['chat']['commands']['use_skills']['die']).' '.gdrcd_filter('num',$die).', '.gdrcd_filter('in',$MESSAGE['chat']['commands']['use_skills']['sum']).' '.(gdrcd_filter('num',$car['car_now']+$racial_bonus['racial_bonus'])+gdrcd_filter('num',$die)+gdrcd_filter('num',$rank['grado'])+gdrcd_filter('in',$bonus['bonus']))."')");
} elseif( (gdrcd_filter('get', $_POST['dice']) != 'no_dice') && !empty($_POST['dice']) ){
mt_srand((double) microtime() * 1000000);
$die = mt_rand(1, gdrcd_filter('num', $_POST['dice']));
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'D', '".$_SESSION['login'].' '.gdrcd_filter('in', $MESSAGE['chat']['commands']['die']['cast']).gdrcd_filter('num', $_POST['dice']).': '.gdrcd_filter('in', $MESSAGE['chat']['commands']['die']['sum']).' '.gdrcd_filter('num', $die)."')");
} elseif( (gdrcd_filter('get', $_POST['id_item']) != 'no_item') && !empty($_POST['id_item']) ) {
$item = gdrcd_filter('num', $_POST['id_item']);
$me = gdrcd_filter('in',$_SESSION['login']);
$data = gdrcd_query("
SELECT oggetto.nome,oggetto.cariche AS new_cariche, clgpersonaggiooggetto.cariche,clgpersonaggiooggetto.numero
FROM oggetto
LEFT JOIN clgpersonaggiooggetto
ON clgpersonaggiooggetto.id_oggetto = oggetto.id_oggetto
WHERE oggetto.id_oggetto='{$item}'
AND clgpersonaggiooggetto.nome='{$me}' LIMIT 1");
// Informazioni dell'oggetto
$nomeOggetto = gdrcd_filter_out($data['nome']);
$cariche = gdrcd_filter('num',$data['cariche']);
$numero = gdrcd_filter('num',$data['numero']);
$new_cariche = gdrcd_filter('num',$data['new_cariche']);
# Se ho meno di una carica
if($cariche <= 1){
# Se ho un solo oggetto
if($numero == 1){
# Cancello la riga
$query = "DELETE FROM clgpersonaggiooggetto WHERE nome ='{$me}' AND id_oggetto='{$item}' LIMIT 1";
}
# Se ho piu' oggetti
else{
# Ricarico le cariche e scalo il numro di oggetti
$query = "UPDATE clgpersonaggiooggetto
SET cariche = '{$new_cariche}', numero = numero - 1
WHERE nome ='{$me}' AND id_oggetto='{$item}' LIMIT 1";
}
}
# SE ho piu' di una sola carica
else{
$query = "UPDATE clgpersonaggiooggetto SET cariche = cariche -1 WHERE nome ='{$me}' AND id_oggetto='{$item}' LIMIT 1";
}
gdrcd_query($query);
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'O', '".$_SESSION['login'].' '.gdrcd_filter('in', $MESSAGE['chat']['commands']['die']['item']).': '.gdrcd_filter('in', $nomeOggetto)."')");
}
}
/*Se ho inviato un messaggio*/
if(gdrcd_filter('get', $_POST['op']) == 'new_chat_message') {
$actual_healt = gdrcd_query("SELECT salute FROM personaggio WHERE nome = '".$_SESSION['login']."'");
$chat_message = gdrcd_filter('in', gdrcd_angs($_POST['message']));
$tag_n_beyond = gdrcd_filter('in', $_POST['tag']);
$type = gdrcd_filter('in', $_POST['type']);
$first_char = substr($chat_message, 0, 1);
if($PARAMETERS['mode']['exp_by_chat']=='ON')
{
$msg_length = strlen($chat_message);
$char_needed = gdrcd_filter('num', $PARAMETERS['settings']['exp_by_chat']['number']);
$exp_bonus = $msg_length/$char_needed;
}
if($type < "5")
{
if(!empty($_POST['message'])){
//E' un messaggio.
/*Verifico il tipo di messaggio*/
if(($type == "4") || ($first_char == "@")) { /*Sussurro*/
$m_type = 'S';
if($type != '4') {
$dest_end = strpos(substr($chat_message, 1), "@");
if($dest_end === false) {
/*Se il destinatario e' mal formattato lo prendo come parlato*/
$m_type = 'P';
} else {
$tag_n_beyond = gdrcd_capital_letter(substr($chat_message, 1, $dest_end));
$chat_message = substr($chat_message, $dest_end + 2);
}
} elseif($m_type == 'S') {/*Se il sussurro e' inviato correttamente*/
$r_check_dest = gdrcd_query("SELECT nome FROM personaggio WHERE DATE_ADD(ultimo_refresh, INTERVAL 2 MINUTE) > NOW() AND ultimo_luogo = ".$_SESSION['luogo']." AND nome = '".$tag_n_beyond."' LIMIT 1", 'result');
if(gdrcd_query($r_check_dest, 'num_rows') < 1) {
$chat_message = $tag_n_beyond.' '.gdrcd_filter('in', $MESSAGE['chat']['whisper']['no']);
$tag_n_beyond = $_SESSION['login'];
}
} else {
$tag_n_beyond = $_SESSION['tag'];
}
} elseif($first_char == "#") { //Dado
$m_type = 'C';
if(preg_match("/^#d+([1-9][0-9]*)$/si", $chat_message, $matches)) {
$nstring = $matches[1];
$die = mt_rand(1, (int) $nstring);
$chat_message = "A ".$_SESSION['login']." esce ".$die." su ".$nstring;
} elseif(preg_match("/^#([1-9][0-9]*)d+([1-9][0-9]*)$/si", $chat_message, $matches)) {
$numero = (int) $matches[1];
$dado = (int) $matches[2];
$x = 0;
$chat_message = "A ".$_SESSION['login']." esce ";
for($x = 0; $x < $numero; $x++) {
$die = mt_rand(1, $dado);
$chat_message .= $die." su ".$dado.", ";
}
$chat_message = substr($chat_message, 0, -2);
}
} elseif(($type == "1") || ($first_char == "+")) { /*Azione*/
if($actual_healt['salute'] > 0) {
if($first_char == "+") {
$chat_message = substr($chat_message, 1);
}
$m_type = 'A';
$_SESSION['tag'] = $tag_n_beyond;
} else {
$m_type = 'S';
$tag_n_beyond = $_SESSION['login'];
$chat_message = gdrcd_filter('in', $MESSAGE['status_pg']['exausted']);
}
} elseif((($type == "2") || ($first_char == "§") || ($first_char == "-") || ($first_char == "*")) && ($_SESSION['permessi'] >= GAMEMASTER)) { /*Master*/
$m_type = 'M';
if(($first_char == "§") || ($first_char == "-")) {
$chat_message = substr($chat_message, 1);
} elseif($first_char == "*") {
$chat_message = substr($chat_message, 1);
$m_type = 'I';
}
} elseif(($type == "3") && ($_SESSION['permessi'] >= GAMEMASTER)) { /*PNG*/
$m_type = 'N';
$_SESSION['tag'] = $tag_n_beyond;
} else {
if(($type == "0") || (empty($type) === true)) { /*Parlato*/
if($actual_healt['salute'] > 0) {
$m_type = 'P';
$_SESSION['tag'] = $tag_n_beyond;
} else {
$m_type = 'S';
$tag_n_beyond = $_SESSION['login'];
$chat_message = gdrcd_filter('in', $MESSAGE['status_pg']['exausted']);
}
}
}
/*Inserisco il messaggio*/
/*E controllo se la chat non era una privata scaduta @author GoddessDanielle*/
$mappa = gdrcd_query("SELECT * FROM mappa where id = '".$_SESSION['luogo']."'");
if ($mappa['privata']==1 && strtotime($mappa['scadenza']) < time()) {
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in', $tag_n_beyond))."', NOW(), 'M', 'Chat scaduta')");
} else {
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in', $tag_n_beyond))."', NOW(), '".$m_type."', '".$chat_message."')");
}
if($PARAMETERS['mode']['exp_by_chat']=='ON')
{
if ($m_type == 'A' || $m_type == 'P' || $m_type == 'M')
{
gdrcd_query("UPDATE personaggio SET esperienza = esperienza + ".$exp_bonus." WHERE nome = '".$_SESSION['login']."' LIMIT 1");
}
}
}//Not empty message
} else { //Altrimenti e' un comando di stanza privata.
$info = gdrcd_query("SELECT invitati, nome, proprietario FROM mappa WHERE id=".$_SESSION['luogo']."");
$ok_command = false;
if($info['proprietario'] == $_SESSION['login'] || strpos($_SESSION['gilda'], $info['proprietario']) != false) {
$ok_command = true;
}
if(($type == "5") && ($ok_command === true)) { //invita
gdrcd_query("UPDATE mappa SET invitati = '".$info['invitati'].','.gdrcd_capital_letter(strtolower(gdrcd_filter('in', $tag_n_beyond)))."' WHERE id=".$_SESSION['luogo']." LIMIT 1");
gdrcd_query("INSERT INTO chat ( stanza, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", 'System message', '".$_SESSION['login']."', NOW(), 'S', '".gdrcd_capital_letter(gdrcd_filter('in', $tag_n_beyond)).' '.$MESSAGE['chat']['warning']['invited']."')");
if(empty($_POST['tag']) === false) {
gdrcd_query("INSERT INTO messaggi ( mittente, destinatario, spedito, letto, testo ) VALUES ('System message', '".gdrcd_capital_letter(gdrcd_filter('in', $_POST['tag']))."', NOW(), 0, '".$_SESSION['login'].' '.$MESSAGE['chat']['warning']['invited_message'].' '.$info['nome']."')");
}
} else {
if(($type == "6") && ($ok_command === true)) { //caccia
$scaccia = str_replace(','.gdrcd_capital_letter(gdrcd_filter('in', $tag_n_beyond)), '', $info['invitati']);
gdrcd_query("UPDATE mappa SET invitati = '".$scaccia."' WHERE id=".$_SESSION['luogo']." LIMIT 1");
gdrcd_query("INSERT INTO chat ( stanza, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", 'System message', '".$_SESSION['login']."', NOW(), 'S', '".gdrcd_capital_letter(gdrcd_filter('in', $tag_n_beyond)).' '.$MESSAGE['chat']['warning']['expelled']."')");
} elseif($ok_command === true) { //elenco
$ospiti = str_replace(',', '', $info['invitati']);
gdrcd_query("INSERT INTO chat ( stanza, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", 'System message', '".$_SESSION['login']."', NOW(), 'S', '".$MESSAGE['chat']['warning']['list'].': '.$ospiti."')");
}
}
}//else
}//Fine (gdrcd_filter('get', $_POST['op']) == 'new_chat_message')
$_SESSION['tag'] = gdrcd_filter('in', $_POST['tag']);
/**
* Scorrimento dei messaggi in chat, verifico se non è stato invertito il flusso, shorthand
* @author Breaker
*/
$typeOrder = ($PARAMETERS['mode']['chat_from_bottom'] == 'ON') ? 'DESC' : 'ASC';
/** * Controllo per impedire il print in chat delle azioni dei precedenti proprietari di una stanza privata
* Per stanze non private ora_prenotazione equivarrà ad un tempo sempre inferiore all\'orario dell'azione inviata
* facendo risultare quindi sempre veritiero il controllo in questo caso.
* @author Blancks
*/
$query = gdrcd_query(" SELECT chat.id, chat.imgs, chat.mittente, chat.destinatario, chat.tipo, chat.ora, chat.testo, personaggio.url_img_chat, mappa.ora_prenotazione
FROM chat
INNER JOIN mappa ON mappa.id = chat.stanza
LEFT JOIN personaggio ON personaggio.nome = chat.mittente
WHERE chat.id > ".$last_message." AND stanza = ".$_SESSION['luogo']." AND chat.ora > IFNULL(mappa.ora_prenotazione, '0000-00-00 00:00:00') AND DATE_SUB(NOW(), INTERVAL 120 MINUTE) < ora ORDER BY id ".$typeOrder, 'result');
while($row = gdrcd_query($query, 'fetch')) {
//Impedisci XSS nelle immagini
$row['url_img_chat'] = gdrcd_filter('fullurl', $row['url_img_chat']);
if($PARAMETERS['mode']['chaticons'] == 'ON') {
$icone_chat = explode(";", gdrcd_filter('out', $row['imgs']));
$add_icon = '<span class="chat_icons"> <img class="presenti_ico" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/races/'.$icone_chat[1].'"><img class="presenti_ico" src="imgs/icons/testamini'.$icone_chat[0].'.png"> </span>';
}
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat .= '<div class="chat_row_'.$row['tipo'].'">';
// identifico se l'ultimo messaggio è dell'utente o meno
$isLastMessageFromUser = ($row['mittente'] == $_SESSION['login']);
switch($row['tipo']) {
case 'A':
case 'P':
/** * Avatar di chat
* @author Blancks
*/
if($PARAMETERS['mode']['chat_avatar'] == 'ON' && ! empty($row['url_img_chat'])) {
$chat_avatar = '<img src="'.$row['url_img_chat'].'" class="chat_avatar" style="width:'.$PARAMETERS['settings']['chat_avatar']['width'].'px; height:'.$PARAMETERS['settings']['chat_avatar']['height'].'px;" />';
// Se è stato impostato il link sull'avatar di chat, avvio la costruzione
if(isset($PARAMETERS['settings']['chat_avatar']['link']['mode']) and ($PARAMETERS['settings']['chat_avatar']['link']['mode'] == 'ON')) {
$chat_avatar_url = ( isset($PARAMETERS['settings']['chat_avatar']['link']['popup']) and ($PARAMETERS['settings']['chat_avatar']['link']['popup'] == 'ON') )
? "javascript:modalWindow('scheda', 'Scheda di ". $row['mittente'] ."', 'popup.php?page=scheda&pg=". $row['mittente'] ."');"
: "main.php?page=scheda&pg=".$row['mittente'];
// Inserisco l'avatar di chat cliccabile
$add_chat .= '<a href="'.$chat_avatar_url.'">'.$chat_avatar.'</a>';
}
// Altrimenti mostro solo l'avatar di chat
else {
$add_chat .= $chat_avatar;
}
}
$add_chat .= '<span class="chat_time">'.gdrcd_format_time($row['ora']).'</span>';
if($PARAMETERS['mode']['chaticons'] == 'ON') {
$add_chat .= $add_icon;
}
$add_chat .= '<span class="chat_name"><a href="#" onclick="Javascript: document.getElementById(\'tag\').value=\''.$row['mittente'].'\'; document.getElementById(\'type\')[2].selected = \'1\'; document.getElementById(\'message\').focus();">'.$row['mittente'].'</a>';
if(empty ($row['destinatario']) === false) {
$add_chat .= '<span class="chat_tag"> ['.gdrcd_filter('out', $row['destinatario']).']</span>';
}
$add_chat .= ($row['tipo'] === 'P') ? ': </span> ' : '</span> ';
$add_chat .= '<span class="chat_msg">'.gdrcd_chatme($_SESSION['login'], gdrcd_chatcolor(gdrcd_filter('out', $row['testo']))).'</span>';
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
if($PARAMETERS['mode']['chat_avatar'] == 'ON') {
$add_chat .= '<br style="clear:both;" />';
}
break;
case 'S':
if($_SESSION['login'] == $row['destinatario']) {
$add_chat .= '<span class="chat_name">'.$row['mittente'].' '.$MESSAGE['chat']['whisper']['by'].': </span> ';
$add_chat .= '<span class="chat_msg">'.gdrcd_filter('out', $row['testo']).'</span>';
} elseif($_SESSION['login'] == $row['mittente']) {
$add_chat .= '<span class="chat_msg">'.$MESSAGE['chat']['whisper']['to'].' '.gdrcd_filter('out', $row['destinatario']).': </span>';
$add_chat .= '<span class="chat_msg">'.gdrcd_filter('out', $row['testo']).'</span>';
} elseif(($_SESSION['permessi'] >= MODERATOR) && ($PARAMETERS['mode']['spyprivaterooms'] == 'OFF')) {
$add_chat .= '<span class="chat_msg">'.$row['mittente'].' '.$MESSAGE['chat']['whisper']['from_to'].' '.gdrcd_filter('out', $row['destinatario']).' </span>';
$add_chat .= '<span class="chat_msg">'.gdrcd_filter('out', $row['testo']).'</span>';
}
break;
case 'N':
$add_chat .= '<span class="chat_time">'.gdrcd_format_time($row['ora']).'</span>';
$add_chat .= '<span class="chat_name">'.$row['destinatario'].'</span> ';
$add_chat .= '<span class="chat_msg">'.gdrcd_chatcolor(gdrcd_filter('out', $row['testo'])).'</span>';
break;
case 'M':
$add_chat .= '<span class="chat_master">'.gdrcd_chatme($_SESSION['login'], gdrcd_chatcolor(gdrcd_filter('out', $row['testo'])), true).'</span>';
break;
case 'I':
$add_chat .= '<img class="chat_img" src="'.gdrcd_filter('fullurl', $row['testo']).'" />';
break;
case 'C':
case 'D':
case 'O':
$add_chat .= '<span class="chat_time">'.gdrcd_format_time($row['ora']).'</span>';
$add_chat .= '<span class="chat_msg">'.gdrcd_filter('out', $row['testo']).'</span>';
break;
}
$add_chat .= '</div>';
if($row['id'] > (int) $last_message) {
$last_message = $row['id'];
}
}
gdrcd_query($query, 'free');
// Prevedo la notifica in caso di nuovi messaggi
if($_SESSION['last_message'] > 0 && (isset($isLastMessageFromUser) && !$isLastMessageFromUser) && (isset($add_chat) && $add_chat != '')){
$playAudioController = AudioController::play('chat', TRUE);;
}
// Aggiorno ultimo messaggio visualizzato
$_SESSION['last_message'] = $last_message;
}// Fine (gdrcd_filter_get($_REQUEST['chat']) == 'yes') && (empty($_SESSION['login']) === false)
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it" lang="it">
<head>
<!--meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="refresh" content="<?php echo $i_ref_time; ?>">
<link rel="stylesheet" href="../themes/<?php echo $PARAMETERS['themes']['current_theme']; ?>/presenti.css" TYPE="text/css">
<link rel="stylesheet" href="../themes/<?php echo $PARAMETERS['themes']['current_theme']; ?>/main.css" TYPE="text/css">
<link rel="stylesheet" href="../themes/<?php echo $PARAMETERS['themes']['current_theme']; ?>/chat.css" TYPE="text/css">
<title>Chat</title>
</head>
<body class="transparent_body" <?php if(gdrcd_filter('get', $_REQUEST['chat']) == 'yes') {
echo 'onLoad="echoChat();"';
} ?> >
<?php
if(gdrcd_filter('get', $_REQUEST['chat']) == 'yes') {
echo '<script type="text/javascript"> function echoChat(){';
/** * Gestione dell'ordinamento
* @author Blancks
*/
if($PARAMETERS['mode']['chat_from_bottom'] == 'OFF') {
echo 'parent.document.getElementById(\'pagina_chat\').innerHTML+= '.json_encode((string) $add_chat).';';
echo 'scrolling = parent.document.getElementById(\'pagina_chat\').scrollHeight;';
} elseif($PARAMETERS['mode']['chat_from_bottom'] == 'ON') {
echo 'parent.document.getElementById(\'pagina_chat\').innerHTML= '.json_encode((string) $add_chat).'+parent.document.getElementById(\'pagina_chat\').innerHTML;';
echo 'scrolling = 0;';
}
/** * Gestione intelligente della scrollbar
* Forza lo scroll solo quando ci sono nuovi messaggi
* @author Blancks
*/
if( ! empty($add_chat)) {
echo 'parent.document.getElementById(\'pagina_chat\').scrollTop = scrolling;';
}
if((gdrcd_filter('get', $_POST['op']) == 'take_action') || (gdrcd_filter('get', $_POST['op']) == 'new_chat_message')) {
if($PARAMETERS['mode']['skillsystem'] == 'ON') {
echo 'parent.document.getElementById(\'chat_form_actions\').reset();';
}
echo 'parent.document.getElementById(\'chat_form_messages\').reset();
parent.document.getElementById(\'chat_form_messages\').elements["tag"].value=\''.$_SESSION["tag"].'\';';
}//if
echo '}</script>';
}
// Gestisco l'avviso
if (!empty($playAudioController)) {
echo $playAudioController;
}
Vi aggiungo anche i codici dell'AudioController
/**
* @class AudioController
* @note Classe base per la gestione delle notifiche audio in GDRCD
*/
class AudioController
{
/**
* @fn isSoundAllowed
* @note Controllo sulla abilitazione dei suoni nelle configurazioni
* @return bool
*/
public static function isSoundAllowed($label)
{
global $PARAMETERS;
return $PARAMETERS['mode']['allow_audio'] == 'ON' && !empty($PARAMETERS['settings']['audio_new_'.$label]);
}
/**
* @fn build
* @note Costruisco il controllore dei suoni
* @param string $label Identificativo del componente audioControllaer
* @return string
*/
public static function build($label = NULL)
{
// Esco nel caso non sia stata impostata la tipologia
if(empty($label)) return NULL;
// Esco nel caso in cui siano disattivati i suoni
if(!self::isSoundAllowed($label) || $_SESSION['blocca_media'] == 1 ) {
return NULL;
}
// Recupero i parametri
global $PARAMETERS;
// Costruisco il controllore
$ext = explode('.', $PARAMETERS['settings']['audio_new_'.$label]);
if(isset($PARAMETERS['settings']['audiotype']['.'.strtolower(end($ext))])) {
return
'<div style="height:0;">
<audio id="audioController_'.$label.'" preload="none" controls style="display:none">
<source src="../../../sounds/'.$PARAMETERS['settings']['audio_new_'.$label].'" type="'.$PARAMETERS['settings']['audiotype']['.'.strtolower(end($ext))].'">
Your browser does not support the audio element.
</audio>
</div>';
}
return NULL;
}
/**
* @fn play
* @note Gestisco l'esecuzione o meno dell'audio di notifica
* @param string $label Identificativo del componente audioControllaer
* @return string
*/
public static function play($label = NULL, $isChild = FALSE)
{
// Se non è stato dichiarato un tipo, non emetto suono
if(empty($label)) return NULL;
// Esco nel caso in cui siano disattivati i suoni
if(!self::isSoundAllowed($label) || $_SESSION['blocca_media'] == 1 ) {
return NULL;
}
// Prevedo la possibilità di essere dentro un iFrame
$document = $isChild ? 'parent.document' : 'document';
return '<script type="text/javascript">
let mediaElementChat = '.$document.'.getElementById("audioController_'.$label.'");
mediaElementChat.play();
</script>';
}
}
Forse sto controllando nelle parti sbagliate?
In ogni caso vi ringrazio tanto!
05/08/2023 13:23:41
Heyla Ciao!
Si, c'è un piccolo bug sui sussurri. L'avevo risolto e appena prendo possesso del PC ti provo a postare la soluzione così risolvi pure tu.!!
Stay tuned!
08/08/2023 15:53:59
cbr89 ha scritto: Heyla Ciao!
Si, c'è un piccolo bug sui sussurri. L'avevo risolto e appena prendo possesso del PC ti provo a postare la soluzione così risolvi pure tu.!!
Stay tuned!
Ciao!
Oddio grazie mille, sarebbe davvero grandioso, anche perché aiuterebbe non solo me ma tutti coloro che hanno scaricato il nuovo pacchetto! Resto in attesa di tue :)
24/08/2023 18:48:27
qualcuno è riuscito a risolvere?
24/08/2023 21:34:46
londonshadows ha scritto: qualcuno è riuscito a risolvere?
Mi ci metterò penso e spero la settimana prossima, vediamo se riesco a postare na soluzione
05/09/2023 14:26:19
Anche noi saremo interessati a questa soluzione.
Qualche news?
06/09/2023 10:57:35
Ciao a tutti,
ho risolto il bug dei sussurri. Il problema sta nel ref_hader.inc.php.
dopo questa riga di codice
// identifico se l'ultimo messaggio è dell'utente o meno
$isLastMessageFromUser = ($row['mittente'] == $_SESSION['login']);
va aggiunta questa variabile
//devo capire se eventualmente è un sussurro per me, altrimenti parte la notifica sonora ma non vedo il messaggio :)
$whisperToMe = false;
Poi nel case:'S' va aggiunta questa assegazione se il sussurro è diretto verso il nostro pg:
case 'S':
if($_SESSION['login'] == $row['destinatario']) {
$whisperToMe = true; //Brancix: è un sussurro per me
$add_chat .= '<span class="chat_name">'.$row['mittente'].' '.$MESSAGE['chat']['whisper']['by'].': </span> ';
$add_chat .= '<span class="chat_msg">'.gdrcd_filter('out', $row['testo']).'</span>';
} elseif($_SESSION['login'] == $row['mittente']) {
$add_chat .= '<span class="chat_msg">'.$MESSAGE['chat']['whisper']['to'].' '.gdrcd_filter('out', $row['destinatario']).': </span>';
$add_chat .= '<span class="chat_msg">'.gdrcd_filter('out', $row['testo']).'</span>';
} elseif(($_SESSION['permessi'] >= MODERATOR) && ($PARAMETERS['mode']['spyprivaterooms'] == 'ON')) {
$add_chat .= '<span class="chat_msg">'.$row['mittente'].' '.$MESSAGE['chat']['whisper']['from_to'].' '.gdrcd_filter('out', $row['destinatario']).' </span>';
$add_chat .= '<span class="chat_msg">'.gdrcd_filter('out', $row['testo']).'</span>';
}
break;
Infine nel blocco che fa partire il controller audio, va aggiunta una modifica.
il codice originale è questo:
// Prevedo la notifica in caso di nuovi messaggi
if($_SESSION['last_message'] > 0 && (isset($isLastMessageFromUser) && !$isLastMessageFromUser) && (isset($add_chat) && $add_chat != '')){
$playAudioController = AudioController::play('chat', TRUE);;
}
va modificato così:
// Prevedo la notifica in caso di nuovi messaggi
if($_SESSION['last_message'] > 0 && (isset($isLastMessageFromUser) && !$isLastMessageFromUser) && $whisperToMe && (isset($add_chat) && $add_chat != '')){
$playAudioController = AudioController::play('chat', TRUE);;
}
il controllo
$add_chat != ''
mi sembra ridondante perché la variabile addChat comunque viene sempre valorizzata, non fa male quindi si può lasciarlo così.
Ho fatto dei test con un GDRCD vergine, e il problema è risolto.
Attendo vostri feedback
11/09/2023 20:49:16
Purtroppo non funziona :/
Ho fatto due prove:
- la prima sul mio sito, dove ho messo ai sussurri una piccola cornice (come quella che esce nel tiro dei dadi). Insomma, non compare la frase ma compare la cornice vuota all'interno, e non si sente nessun suono nella chat. Quindi né i sussurri destinati ad altri, ma neppure i suoni delle normali azioni.
- la seconda su un sito vergine, dove non funziona nessun tipo di suono in chat.
In conclusione il problema sussiste, penso che semplicemente col tuo metodo smettano di sentirsi i suoni in chat, oppure nella tua prova i suoni delle azioni si sentivano?
Sto continuando a fare altri tentativi ed altre prove, se qualcosa riesce posterò un risultato, ma per ora niente di fatto, ahimè.
12/09/2023 08:46:41 e modificato da moderazione il 21/04/2026 16:47:09
Ciao,
prova così, ho dovuto aggiungere un FLAG per gestire meglio la cosa
[Spoiler - Clicca per Aprire]
<?php
//Includio i parametri, la configurazione, la lingua e le funzioni
require ('includes/required.php');
$last_message = isset($_SESSION['last_message']) ? $_SESSION['last_message'] : 0;
if(!empty($_SESSION['theme']) and array_key_exists($_SESSION['theme'], $PARAMETERS['themes']['available'])){
$PARAMETERS['themes']['current_theme'] = $_SESSION['theme'];
}
//Eseguo la connessione al database
$handleDBConnection = gdrcd_connect();
//Ricevo il tempo di reload
$i_ref_time = gdrcd_filter_get($_GET['ref']);
if((gdrcd_filter_get($_REQUEST['chat']) == 'yes') && (empty($_SESSION['login']) === false)) {
/*Aggiornamento chat*/
/*Se ho inviato un azione*/
if((gdrcd_filter('get', $_POST['op']) == 'take_action') && (($PARAMETERS['mode']['skillsystem'] == 'ON') || ($PARAMETERS['mode']['dices'] == 'ON'))) {
$actual_healt = gdrcd_query("SELECT salute FROM personaggio WHERE nome = '".$_SESSION['login']."'");
if( (gdrcd_filter('get', $_POST['id_ab']) != 'no_skill') && !empty($_POST['id_ab']) ) {
if($actual_healt['salute'] > 0) {
$skill = gdrcd_query("SELECT nome, car FROM abilita WHERE id_abilita = ".gdrcd_filter('num', $_POST['id_ab'])." LIMIT 1");
$car = gdrcd_query("SELECT car".gdrcd_filter('num', $skill['car'])." AS car_now FROM personaggio WHERE nome = '".$_SESSION['login']."' LIMIT 1");
$bonus = gdrcd_query("SELECT SUM(oggetto.bonus_car".gdrcd_filter('num', $skill['car']).") as bonus FROM oggetto JOIN clgpersonaggiooggetto ON clgpersonaggiooggetto.id_oggetto=oggetto.id_oggetto WHERE clgpersonaggiooggetto.nome='".$_SESSION['login']."' AND clgpersonaggiooggetto.posizione > 1");
$racial_bonus = gdrcd_query("SELECT bonus_car".gdrcd_filter('num', $skill['car'])." AS racial_bonus FROM razza WHERE id_razza IN (SELECT id_razza FROM personaggio WHERE nome='".$_SESSION['login']."')");
$rank = gdrcd_query("SELECT grado FROM clgpersonaggioabilita WHERE id_abilita=".gdrcd_filter('num', $_POST['id_ab'])." AND nome='".$_SESSION['login']."' LIMIT 1");
if($PARAMETERS['mode']['dices'] == 'ON') {
mt_srand((double) microtime() * 1000000);
$dice=($_POST['dice']!='no_dice')?$_POST['dice']:'1';
$die = mt_rand(1, (int) $dice);
$chat_dice_msg = gdrcd_filter('in', $MESSAGE['chat']['commands']['use_skills']['die']).' '.gdrcd_filter('num', $die).',';
} else {
$chat_dice_msg = '';
$die = 0;
}
$car=gdrcd_filter('num', $car['car_now']) + gdrcd_filter('num',$racial_bonus['racial_bonus']);
$carr=gdrcd_filter('num', $car['car_now']) + gdrcd_filter('num',$racial_bonus['racial_bonus']) + gdrcd_filter('num', $die) +gdrcd_filter('num', $rank['grado']) + gdrcd_filter('num', $bonus['bonus']);
$testo="{$_SESSION['login']} ".gdrcd_filter('in', $MESSAGE['chat']['commands']['use_skills']['uses'])." <b>". gdrcd_filter('in', $skill['nome']).":</b> ".gdrcd_filter('in', $PARAMETERS['names']['stats']['car'.$skill['car'].'']) ." {$car}, {$chat_dice_msg} ". gdrcd_filter('in', $MESSAGE['chat']['commands']['use_skills']['ramk']). " " .gdrcd_filter('num', $rank['grado']) .", ". gdrcd_filter('in', $MESSAGE['chat']['commands']['use_skills']['items']). " " . gdrcd_filter('num', $bonus['bonus']) . ", ". gdrcd_filter('in', $MESSAGE['chat']['commands']['use_skills']['sum']) . " {$carr}" ;
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'C', '{$testo}')");
} else {
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in', $_SESSION['login'])."', NOW(), 'S', '".gdrcd_filter('in', $MESSAGE['status_pg']['exausted'])."')"));
}
/** * Tiro su caratteristica
* @author Blancks
*/
}
else if (gdrcd_filter('get', $_POST['id_stats']) != 'no_stats' && gdrcd_filter('get',$_POST['dice']) != 'no_dice')
{
mt_srand((double)microtime()*1000000);
$die=mt_rand(1,gdrcd_filter('num', (int)$_POST['dice']));
$id_stats = explode('_', $_POST['id_stats']);
$car = gdrcd_query("SELECT car".gdrcd_filter('num',$id_stats[1])." AS car_now FROM personaggio WHERE nome = '".$_SESSION['login']."' LIMIT 1");
$racial_bonus = gdrcd_query("SELECT bonus_car".gdrcd_filter('num',$id_stats[1])." AS racial_bonus FROM razza WHERE id_razza IN (SELECT id_razza FROM personaggio WHERE nome='".$_SESSION['login']."')");
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'C', '".$_SESSION['login'].' '.gdrcd_filter('in',$MESSAGE['chat']['commands']['use_skills']['uses']).' '.gdrcd_filter('in',$PARAMETERS['names']['stats']['car'.$id_stats[1]]).': '.gdrcd_filter('in',$PARAMETERS['names']['stats']['car'.$id_stats[1].'']).' '.gdrcd_filter('num',$car['car_now']+$racial_bonus['racial_bonus']).', '.gdrcd_filter('in', $MESSAGE['chat']['commands']['use_skills']['die']).' '.gdrcd_filter('num',$die).', '.gdrcd_filter('in',$MESSAGE['chat']['commands']['use_skills']['sum']).' '.(gdrcd_filter('num',$car['car_now']+$racial_bonus['racial_bonus'])+gdrcd_filter('num',$die)+gdrcd_filter('num',$rank['grado'])+gdrcd_filter('in',$bonus['bonus']))."')");
} elseif( (gdrcd_filter('get', $_POST['dice']) != 'no_dice') && !empty($_POST['dice']) ){
mt_srand((double) microtime() * 1000000);
$die = mt_rand(1, gdrcd_filter('num', $_POST['dice']));
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'D', '".$_SESSION['login'].' '.gdrcd_filter('in', $MESSAGE['chat']['commands']['die']['cast']).gdrcd_filter('num', $_POST['dice']).': '.gdrcd_filter('in', $MESSAGE['chat']['commands']['die']['sum']).' '.gdrcd_filter('num', $die)."')");
} elseif( (gdrcd_filter('get', $_POST['id_item']) != 'no_item') && !empty($_POST['id_item']) ) {
$item = gdrcd_filter('num', $_POST['id_item']);
$me = gdrcd_filter('in',$_SESSION['login']);
$data = gdrcd_query("
SELECT oggetto.nome,oggetto.cariche AS new_cariche, clgpersonaggiooggetto.cariche,clgpersonaggiooggetto.numero
FROM oggetto
LEFT JOIN clgpersonaggiooggetto
ON clgpersonaggiooggetto.id_oggetto = oggetto.id_oggetto
WHERE oggetto.id_oggetto='{$item}'
AND clgpersonaggiooggetto.nome='{$me}' LIMIT 1");
// Informazioni dell'oggetto
$nomeOggetto = gdrcd_filter_out($data['nome']);
$cariche = gdrcd_filter('num',$data['cariche']);
$numero = gdrcd_filter('num',$data['numero']);
$new_cariche = gdrcd_filter('num',$data['new_cariche']);
# Se ho meno di una carica
if($cariche <= 1){
# Se ho un solo oggetto
if($numero == 1){
# Cancello la riga
$query = "DELETE FROM clgpersonaggiooggetto WHERE nome ='{$me}' AND id_oggetto='{$item}' LIMIT 1";
}
# Se ho piu' oggetti
else{
# Ricarico le cariche e scalo il numro di oggetti
$query = "UPDATE clgpersonaggiooggetto
SET cariche = '{$new_cariche}', numero = numero - 1
WHERE nome ='{$me}' AND id_oggetto='{$item}' LIMIT 1";
}
}
# SE ho piu' di una sola carica
else{
$query = "UPDATE clgpersonaggiooggetto SET cariche = cariche -1 WHERE nome ='{$me}' AND id_oggetto='{$item}' LIMIT 1";
}
gdrcd_query($query);
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'O', '".$_SESSION['login'].' '.gdrcd_filter('in', $MESSAGE['chat']['commands']['die']['item']).': '.gdrcd_filter('in', $nomeOggetto)."')");
}
}
/*Se ho inviato un messaggio*/
if(gdrcd_filter('get', $_POST['op']) == 'new_chat_message') {
$actual_healt = gdrcd_query("SELECT salute FROM personaggio WHERE nome = '".$_SESSION['login']."'");
$chat_message = gdrcd_filter('in', gdrcd_angs($_POST['message']));
$tag_n_beyond = gdrcd_filter('in', $_POST['tag']);
$type = gdrcd_filter('in', $_POST['type']);
$first_char = substr($chat_message, 0, 1);
if($PARAMETERS['mode']['exp_by_chat']=='ON')
{
$msg_length = strlen($chat_message);
$char_needed = gdrcd_filter('num', $PARAMETERS['settings']['exp_by_chat']['number']);
$exp_bonus = $msg_length/$char_needed;
}
if($type < "5")
{
if(!empty($_POST['message'])){
//E' un messaggio.
/*Verifico il tipo di messaggio*/
if(($type == "4") || ($first_char == "@")) { /*Sussurro*/
$m_type = 'S';
if($type != '4') {
$dest_end = strpos(substr($chat_message, 1), "@");
if($dest_end === false) {
/*Se il destinatario e' mal formattato lo prendo come parlato*/
$m_type = 'P';
} else {
$tag_n_beyond = gdrcd_capital_letter(substr($chat_message, 1, $dest_end));
$chat_message = substr($chat_message, $dest_end + 2);
}
} elseif($m_type == 'S') {/*Se il sussurro e' inviato correttamente*/
$r_check_dest = gdrcd_query("SELECT nome FROM personaggio WHERE DATE_ADD(ultimo_refresh, INTERVAL 2 MINUTE) > NOW() AND ultimo_luogo = ".$_SESSION['luogo']." AND nome = '".$tag_n_beyond."' LIMIT 1", 'result');
if(gdrcd_query($r_check_dest, 'num_rows') < 1) {
$chat_message = $tag_n_beyond.' '.gdrcd_filter('in', $MESSAGE['chat']['whisper']['no']);
$tag_n_beyond = $_SESSION['login'];
}
} else {
$tag_n_beyond = $_SESSION['tag'];
}
} elseif($first_char == "#") { //Dado
$m_type = 'C';
if(preg_match("/^#d+([1-9][0-9]*)$/si", $chat_message, $matches)) {
$nstring = $matches[1];
$die = mt_rand(1, (int) $nstring);
$chat_message = "A ".$_SESSION['login']." esce ".$die." su ".$nstring;
} elseif(preg_match("/^#([1-9][0-9]*)d+([1-9][0-9]*)$/si", $chat_message, $matches)) {
$numero = (int) $matches[1];
$dado = (int) $matches[2];
$x = 0;
$chat_message = "A ".$_SESSION['login']." esce ";
for($x = 0; $x < $numero; $x++) {
$die = mt_rand(1, $dado);
$chat_message .= $die." su ".$dado.", ";
}
$chat_message = substr($chat_message, 0, -2);
}
} elseif(($type == "1") || ($first_char == "+")) { /*Azione*/
if($actual_healt['salute'] > 0) {
if($first_char == "+") {
$chat_message = substr($chat_message, 1);
}
$m_type = 'A';
$_SESSION['tag'] = $tag_n_beyond;
} else {
$m_type = 'S';
$tag_n_beyond = $_SESSION['login'];
$chat_message = gdrcd_filter('in', $MESSAGE['status_pg']['exausted']);
}
} elseif((($type == "2") || ($first_char == "§") || ($first_char == "-") || ($first_char == "*")) && ($_SESSION['permessi'] >= GAMEMASTER)) { /*Master*/
$m_type = 'M';
if(($first_char == "§") || ($first_char == "-")) {
$chat_message = substr($chat_message, 1);
} elseif($first_char == "*") {
$chat_message = substr($chat_message, 1);
$m_type = 'I';
}
} elseif(($type == "3") && ($_SESSION['permessi'] >= GAMEMASTER)) { /*PNG*/
$m_type = 'N';
$_SESSION['tag'] = $tag_n_beyond;
} else {
if(($type == "0") || (empty($type) === true)) { /*Parlato*/
if($actual_healt['salute'] > 0) {
$m_type = 'P';
$_SESSION['tag'] = $tag_n_beyond;
} else {
$m_type = 'S';
$tag_n_beyond = $_SESSION['login'];
$chat_message = gdrcd_filter('in', $MESSAGE['status_pg']['exausted']);
}
}
}
/*Inserisco il messaggio*/
/*E controllo se la chat non era una privata scaduta @author GoddessDanielle*/
$mappa = gdrcd_query("SELECT * FROM mappa where id = '".$_SESSION['luogo']."'");
if ($mappa['privata']==1 && strtotime($mappa['scadenza']) < time()) {
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in', $tag_n_beyond))."', NOW(), 'M', 'Chat scaduta')");
} else {
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in', $tag_n_beyond))."', NOW(), '".$m_type."', '".$chat_message."')");
}
if($PARAMETERS['mode']['exp_by_chat']=='ON')
{
if ($m_type == 'A' || $m_type == 'P' || $m_type == 'M')
{
gdrcd_query("UPDATE personaggio SET esperienza = esperienza + ".$exp_bonus." WHERE nome = '".$_SESSION['login']."' LIMIT 1");
}
}
}//Not empty message
} else { //Altrimenti e' un comando di stanza privata.
$info = gdrcd_query("SELECT invitati, nome, proprietario FROM mappa WHERE id=".$_SESSION['luogo']."");
$ok_command = false;
if($info['proprietario'] == $_SESSION['login'] || strpos($_SESSION['gilda'], $info['proprietario']) != false) {
$ok_command = true;
}
if(($type == "5") && ($ok_command === true)) { //invita
gdrcd_query("UPDATE mappa SET invitati = '".$info['invitati'].','.gdrcd_capital_letter(strtolower(gdrcd_filter('in', $tag_n_beyond)))."' WHERE id=".$_SESSION['luogo']." LIMIT 1");
gdrcd_query("INSERT INTO chat ( stanza, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", 'System message', '".$_SESSION['login']."', NOW(), 'S', '".gdrcd_capital_letter(gdrcd_filter('in', $tag_n_beyond)).' '.$MESSAGE['chat']['warning']['invited']."')");
if(empty($_POST['tag']) === false) {
gdrcd_query("INSERT INTO messaggi ( mittente, destinatario, spedito, letto, testo ) VALUES ('System message', '".gdrcd_capital_letter(gdrcd_filter('in', $_POST['tag']))."', NOW(), 0, '".$_SESSION['login'].' '.$MESSAGE['chat']['warning']['invited_message'].' '.$info['nome']."')");
}
} else {
if(($type == "6") && ($ok_command === true)) { //caccia
$scaccia = str_replace(','.gdrcd_capital_letter(gdrcd_filter('in', $tag_n_beyond)), '', $info['invitati']);
gdrcd_query("UPDATE mappa SET invitati = '".$scaccia."' WHERE id=".$_SESSION['luogo']." LIMIT 1");
gdrcd_query("INSERT INTO chat ( stanza, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", 'System message', '".$_SESSION['login']."', NOW(), 'S', '".gdrcd_capital_letter(gdrcd_filter('in', $tag_n_beyond)).' '.$MESSAGE['chat']['warning']['expelled']."')");
} elseif($ok_command === true) { //elenco
$ospiti = str_replace(',', '', $info['invitati']);
gdrcd_query("INSERT INTO chat ( stanza, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", 'System message', '".$_SESSION['login']."', NOW(), 'S', '".$MESSAGE['chat']['warning']['list'].': '.$ospiti."')");
}
}
}//else
}//Fine (gdrcd_filter('get', $_POST['op']) == 'new_chat_message')
$_SESSION['tag'] = gdrcd_filter('in', $_POST['tag']);
/**
* Scorrimento dei messaggi in chat, verifico se non è stato invertito il flusso, shorthand
* @author Breaker
*/
$typeOrder = ($PARAMETERS['mode']['chat_from_bottom'] == 'ON') ? 'DESC' : 'ASC';
/** * Controllo per impedire il print in chat delle azioni dei precedenti proprietari di una stanza privata
* Per stanze non private ora_prenotazione equivarrà ad un tempo sempre inferiore all\'orario dell'azione inviata
* facendo risultare quindi sempre veritiero il controllo in questo caso.
* @author Blancks
*/
$query = gdrcd_query(" SELECT chat.id, chat.imgs, chat.mittente, chat.destinatario, chat.tipo, chat.ora, chat.testo, personaggio.url_img_chat, mappa.ora_prenotazione
FROM chat
INNER JOIN mappa ON mappa.id = chat.stanza
LEFT JOIN personaggio ON personaggio.nome = chat.mittente
WHERE chat.id > ".$last_message." AND stanza = ".$_SESSION['luogo']." AND chat.ora > IFNULL(mappa.ora_prenotazione, '0000-00-00 00:00:00') AND DATE_SUB(NOW(), INTERVAL 120 MINUTE) < ora ORDER BY id ".$typeOrder, 'result');
while($row = gdrcd_query($query, 'fetch')) {
//Impedisci XSS nelle immagini
$row['url_img_chat'] = gdrcd_filter('fullurl', $row['url_img_chat']);
if($PARAMETERS['mode']['chaticons'] == 'ON') {
$icone_chat = explode(";", gdrcd_filter('out', $row['imgs']));
$add_icon = '<span class="chat_icons"> <img class="presenti_ico" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/races/'.$icone_chat[1].'"><img class="presenti_ico" src="imgs/icons/testamini'.$icone_chat[0].'.png"> </span>';
}
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat .= '<div class="chat_row_'.$row['tipo'].'">';
// identifico se l'ultimo messaggio è dell'utente o meno
$isLastMessageFromUser = ($row['mittente'] == $_SESSION['login']);
//E' un sussurro??
$whisper = false;
//devo capire se eventualmente è un sussurro per me, altrimenti parte la notifica sonora ma non vedo il messaggio :)
$whisperToMe = false;
switch($row['tipo']) {
case 'A':
case 'P':
/** * Avatar di chat
* @author Blancks
*/
if($PARAMETERS['mode']['chat_avatar'] == 'ON' && ! empty($row['url_img_chat'])) {
$chat_avatar = '<img src="'.$row['url_img_chat'].'" class="chat_avatar" style="width:'.$PARAMETERS['settings']['chat_avatar']['width'].'px; height:'.$PARAMETERS['settings']['chat_avatar']['height'].'px;" />';
// Se è stato impostato il link sull'avatar di chat, avvio la costruzione
if(isset($PARAMETERS['settings']['chat_avatar']['link']['mode']) and ($PARAMETERS['settings']['chat_avatar']['link']['mode'] == 'ON')) {
$chat_avatar_url = ( isset($PARAMETERS['settings']['chat_avatar']['link']['popup']) and ($PARAMETERS['settings']['chat_avatar']['link']['popup'] == 'ON') )
? "javascript:modalWindow('scheda', 'Scheda di ". $row['mittente'] ."', 'popup.php?page=scheda&pg=". $row['mittente'] ."');"
: "main.php?page=scheda&pg=".$row['mittente'];
// Inserisco l'avatar di chat cliccabile
$add_chat .= '<a href="'.$chat_avatar_url.'">'.$chat_avatar.'</a>';
}
// Altrimenti mostro solo l'avatar di chat
else {
$add_chat .= $chat_avatar;
}
}
$add_chat .= '<span class="chat_time">'.gdrcd_format_time($row['ora']).'</span>';
if($PARAMETERS['mode']['chaticons'] == 'ON') {
$add_chat .= $add_icon;
}
$add_chat .= '<span class="chat_name"><a href="#" onclick="Javascript: document.getElementById(\'tag\').value=\''.$row['mittente'].'\'; document.getElementById(\'type\')[2].selected = \'1\'; document.getElementById(\'message\').focus();">'.$row['mittente'].'</a>';
if(empty ($row['destinatario']) === false) {
$add_chat .= '<span class="chat_tag"> ['.gdrcd_filter('out', $row['destinatario']).']</span>';
}
$add_chat .= ($row['tipo'] === 'P') ? ': </span> ' : '</span> ';
$add_chat .= '<span class="chat_msg">'.gdrcd_chatme($_SESSION['login'], gdrcd_chatcolor(gdrcd_filter('out', $row['testo']))).'</span>';
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
if($PARAMETERS['mode']['chat_avatar'] == 'ON') {
$add_chat .= '<br style="clear:both;" />';
}
break;
case 'S':
$whisper = true;
if($_SESSION['login'] == $row['destinatario']) {
$whisperToMe=true;
$add_chat .= '<span class="chat_name">'.$row['mittente'].' '.$MESSAGE['chat']['whisper']['by'].': </span> ';
$add_chat .= '<span class="chat_msg">'.gdrcd_filter('out', $row['testo']).'</span>';
} elseif($_SESSION['login'] == $row['mittente']) {
$add_chat .= '<span class="chat_msg">'.$MESSAGE['chat']['whisper']['to'].' '.gdrcd_filter('out', $row['destinatario']).': </span>';
$add_chat .= '<span class="chat_msg">'.gdrcd_filter('out', $row['testo']).'</span>';
} elseif(($_SESSION['permessi'] >= MODERATOR) && ($PARAMETERS['mode']['spyprivaterooms'] == 'OFF')) {
$add_chat .= '<span class="chat_msg">'.$row['mittente'].' '.$MESSAGE['chat']['whisper']['from_to'].' '.gdrcd_filter('out', $row['destinatario']).' </span>';
$add_chat .= '<span class="chat_msg">'.gdrcd_filter('out', $row['testo']).'</span>';
}
break;
case 'N':
$add_chat .= '<span class="chat_time">'.gdrcd_format_time($row['ora']).'</span>';
$add_chat .= '<span class="chat_name">'.$row['destinatario'].'</span> ';
$add_chat .= '<span class="chat_msg">'.gdrcd_chatcolor(gdrcd_filter('out', $row['testo'])).'</span>';
break;
case 'M':
$add_chat .= '<span class="chat_master">'.gdrcd_chatme($_SESSION['login'], gdrcd_chatcolor(gdrcd_filter('out', $row['testo'])), true).'</span>';
break;
case 'I':
$add_chat .= '<img class="chat_img" src="'.gdrcd_filter('fullurl', $row['testo']).'" />';
break;
case 'C':
case 'D':
case 'O':
$add_chat .= '<span class="chat_time">'.gdrcd_format_time($row['ora']).'</span>';
$add_chat .= '<span class="chat_msg">'.gdrcd_filter('out', $row['testo']).'</span>';
break;
}
$add_chat .= '</div>';
if($row['id'] > (int) $last_message) {
$last_message = $row['id'];
}
}
gdrcd_query($query, 'free');
// Prevedo la notifica in caso di nuovi messaggi
if($_SESSION['last_message'] > 0 && (isset($isLastMessageFromUser) && !$isLastMessageFromUser) ){
//se è una azione normale eseguo il suono solo se non è un un sussurro
if(!$whisper){
$playAudioController = AudioController::play('chat', TRUE);
}else {
//E' un sussurro non fatto dal mio pg.
if($whisperTome){
$playAudioController = AudioController::play('chat', TRUE);
}
}
}
// Aggiorno ultimo messaggio visualizzato
$_SESSION['last_message'] = $last_message;
}// Fine (gdrcd_filter_get($_REQUEST['chat']) == 'yes') && (empty($_SESSION['login']) === false)
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it" lang="it">
<head>
<!--meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="refresh" content="<?php echo $i_ref_time; ?>">
<link rel="stylesheet" href="../themes/<?php echo $PARAMETERS['themes']['current_theme']; ?>/presenti.css" TYPE="text/css">
<link rel="stylesheet" href="../themes/<?php echo $PARAMETERS['themes']['current_theme']; ?>/main.css" TYPE="text/css">
<link rel="stylesheet" href="../themes/<?php echo $PARAMETERS['themes']['current_theme']; ?>/chat.css" TYPE="text/css">
<title>Chat</title>
</head>
<body class="transparent_body" <?php if(gdrcd_filter('get', $_REQUEST['chat']) == 'yes') {
echo 'onLoad="echoChat();"';
} ?> >
<?php
if(gdrcd_filter('get', $_REQUEST['chat']) == 'yes') {
echo '<script type="text/javascript"> function echoChat(){';
/** * Gestione dell'ordinamento
* @author Blancks
*/
if($PARAMETERS['mode']['chat_from_bottom'] == 'OFF') {
echo 'parent.document.getElementById(\'pagina_chat\').innerHTML+= '.json_encode((string) $add_chat).';';
echo 'scrolling = parent.document.getElementById(\'pagina_chat\').scrollHeight;';
} elseif($PARAMETERS['mode']['chat_from_bottom'] == 'ON') {
echo 'parent.document.getElementById(\'pagina_chat\').innerHTML= '.json_encode((string) $add_chat).'+parent.document.getElementById(\'pagina_chat\').innerHTML;';
echo 'scrolling = 0;';
}
/** * Gestione intelligente della scrollbar
* Forza lo scroll solo quando ci sono nuovi messaggi
* @author Blancks
*/
if( ! empty($add_chat)) {
echo 'parent.document.getElementById(\'pagina_chat\').scrollTop = scrolling;';
}
if((gdrcd_filter('get', $_POST['op']) == 'take_action') || (gdrcd_filter('get', $_POST['op']) == 'new_chat_message')) {
if($PARAMETERS['mode']['skillsystem'] == 'ON') {
echo 'parent.document.getElementById(\'chat_form_actions\').reset();';
}
echo 'parent.document.getElementById(\'chat_form_messages\').reset();
parent.document.getElementById(\'chat_form_messages\').elements["tag"].value=\''.$_SESSION["tag"].'\';';
}//if
echo '}</script>';
}
// Gestisco l'avviso
if (!empty($playAudioController)) {
echo $playAudioController;
}
12/09/2023 22:39:08 e modificato da misfit_skull il 12/09/2023 23:02:00
Funziona!
La cornicetta vuota del sussurro appare ancora, ma mi basterà toglierla dal css e sarà come se nessuno riceva o veda nessun sussurro destinato ad altri.
Davvero grazie mille!!
Rettifico: praticamente non si sente nessun sussurro, nemmeno quelli rivolti a te. Però, onestamente per me la problematica maggiore è stata risolta, quindi va benissimo così :)
13/09/2023 08:36:39
E' molto strano, io l'ho provato sia in una lan vergine che in una personalizzata e funziona a dovere.
Ne ho avuto un paio di conferme :/
Discussione seguita da
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Cafuné ↗
Crossout ↗
Imperion ↗
World of Warship ↗
Project Entropy ↗
Tibia ↗
Exclusive Villa GdR ↗
Storie di Agarthi ↗
Foundation Galactic Frontier ↗