[GDRCD 5.4] - Messaggi stile WA
25/06/2021 23:37:21 e modificato da haruka il 25/06/2021 23:47:13
*** STEP 5 ***
Creare un nuovo file dentro la folder /pages/messages
chiamato
readnew.inc.php
Contenuto
<style type="text/css">
div.pagina_messages_center {border:none; box-shadow: none;}
.list {
list-style: none;
padding: 0;
margin: 0;
}
.list li {
position: relative;
margin-bottom: 10px;
}
.mittente {width: 80%; float:left; padding:20px; margin: 10px;
}
.destinatario {width: 80%; float:right; padding:20px; margin:10px;
</style>
<h3>Conversazione con: <?php echo $_REQUEST['personaggio_conversazione']; ?> </h3>
<form class="form_messaggi" action="main.php?page=messages_center_new&op=readnew&personaggio_conversazione=<?php echo $_REQUEST['personaggio_conversazione'] ?>" method="post">
<input type="hidden" name="replynew" value="singolo" />
<div class='form_field' id="ckeditor">
<textarea type="textbox" name="testo"><?php
/** * Fix per evitare le parentesi quadre vuote quando si compone un nuovo messaggio
* @author Blancks
*/
?></textarea>
<script type="text/javascript"> CKEDITOR.replace( 'testo' );</script>
</div>
<!-- Submit -->
<input type="hidden" name="op" value="send_message" />
<div class='form_submit'>
<input type="submit" value="<?php echo gdrcd_filter('out', $MESSAGE['interface']['forms']['submit']); ?>" />
</div>
</form>
<?php
//Determinazione pagina
if(isset($_REQUEST['offset']) === false) {
$pagebegin = 0;
} else {
$pagebegin = (int) $_REQUEST['offset'] * $PARAMETERS['settings']['messages_per_page_new'];
}
$pageend = $PARAMETERS['settings']['messages_per_page_new'];
//Conteggio messaggi totali
$record = gdrcd_query("SELECT COUNT(*) FROM messaggi WHERE destinatario = '".$_SESSION['login']."'");
$totaleresults = $record['COUNT(*)'];
//Elenco messaggi paginato
/** * Bugfix: correzione di un bug che permetteva la visualizzazione di messaggi non inviati all'utente
* semplicemente modificando l'id. Viene quindi aggiunta nella clausola where il controllo sulla proprietà
* del messaggio. Nel caso in cui non venga trovato alcun messaggio verrà mostrato un errore.
* @author Rhllor
*/
//$result=gdrcd_query("SELECT * FROM messaggi WHERE personaggio_conversazione = ".gdrcd_filter('num',$_REQUEST['personaggio_conversazione'])." LIMIT 1", 'result');
if (gdrcd_filter('get', $_POST['replynew']) == 'singolo') {
$check_dest = explode(',', gdrcd_filter('get', $_POST['destinatario']));
$destinat = $_REQUEST['personaggio_conversazione'];
$result = gdrcd_query("SELECT nome FROM personaggio WHERE nome = '" . $destinat . "'", 'result');
if ((gdrcd_query($result, 'num_rows') > 0) && (empty($destinat) === false)) {
gdrcd_query("INSERT INTO messaggi (mittente, destinatario, spedito, testo) VALUES ('" . $_SESSION['login'] . "', '" . gdrcd_capital_letter(gdrcd_filter('in', $destinat)) . "', NOW(),
'" . gdrcd_filter('in', $_POST['testo']) . "')");
gdrcd_query("INSERT INTO backmessaggi (mittente, destinatario, spedito, testo) VALUES ('" . $_SESSION['login'] . "', '" . gdrcd_capital_letter(gdrcd_filter('in', $destinat)) . "', NOW(), '" . gdrcd_filter('in', $_POST['testo']) . "')");
}//if
}
if(gdrcd_filter('get', $_POST['op']) == 'eliminaredest') {
$id_mex = $_POST['id'];
gdrcd_query("UPDATE messaggi SET destinatario_del = 1 WHERE destinatario='".gdrcd_filter('in', $_SESSION['login'])."' AND id IN (".$id_mex.")");
}
if(gdrcd_filter('get', $_POST['op']) == 'eliminaremitt') {
$id_mex = $_POST['id'];
gdrcd_query("UPDATE messaggi SET mittente_del = 1 WHERE mittente='".gdrcd_filter('in', $_SESSION['login'])."' AND id IN (".$id_mex.")");
}
$result = gdrcd_query("SELECT mittente, destinatario, testo, letto, spedito, id, destinatario_del, mittente_del
FROM (
(
SELECT mittente, destinatario, testo, letto, spedito, id, destinatario_del, mittente_del
FROM messaggi
WHERE 1
AND destinatario = '".$_SESSION['login']."'
AND mittente = '".$_REQUEST['personaggio_conversazione']."'
AND destinatario_del = 0
ORDER BY spedito DESC
)
UNION ALL
(
SELECT mittente, destinatario, testo, letto, spedito, id, destinatario_del, mittente_del
FROM messaggi
WHERE 1
AND destinatario = '".$_REQUEST['personaggio_conversazione']."'
AND mittente = '".$_SESSION['login']."'
AND mittente_del = 0
ORDER BY spedito DESC
)
) AS conversazione
ORDER BY spedito DESC
", 'result');
?>
<?php
while($row = gdrcd_query($result, 'fetch')) {
if(($row['destinatario'] == $_SESSION['login']) && ($row['letto'] == 0)) {
gdrcd_query("UPDATE messaggi SET letto = 1 WHERE id = ".gdrcd_filter('num', $row['id'])." LIMIT 1");
}
?>
<div>
<ul class="list">
<li class="<?php echo $row['mittente'] == $_SESSION['login'] ? 'destinatario' : 'mittente'; ?>
<tr>
<td class="elementi_elenco_preview">
<div>
Data: <?php echo $row['spedito']; ?>
</div>
</td>
<td class="elementi_elenco_preview">
<div>
Mittente: <?php echo $row['mittente']; ?>
</div>
</td>
<td class="elementi_elenco_preview">
<div>
<?php echo $row['testo']; ?>
</div>
</td>
</tr>
<div class="read_message_box_form">
<!-- attach -->
<form action="main.php?page=messages_center_new"
method="post">
<input type="hidden" name="reply_dest" value="<?php echo $row['mittente']; ?>" />
<div style="display:none;"><input type="hidden" name="testo" value="<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['attachment'].$row['testo']); ?>" /></div>
<input type="hidden" name="op" value="attach" />
<input type="image" title="rispondi quotando" src="imgs/icons/attach.png" value="submit" alt="<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['attach']); ?>"
title="<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['attach']); ?>" />
</form>
</div>
<?php if ($row['destinatario'] == $_SESSION['login']) { ?>
<form action="main.php?page=messages_center_new&op=readnew&personaggio_conversazione=<?php echo $_REQUEST['personaggio_conversazione'] ?>" method="post">
<div class="form_submit">
<input type="hidden" name="op" value="eliminaredest" />
<input type="hidden" name="id" value="<?php echo $row['id']; ?>" />
<input type="image" title="elimina messaggio" src="imgs/icons/erase.png" style="width:20px; height:20px; float:right;" />
</div>
</form>
<?php }?>
<?php if ($row['mittente'] == $_SESSION['login']) { ?>
<form action="main.php?page=messages_center_new&op=readnew&personaggio_conversazione=<?php echo $_REQUEST['personaggio_conversazione'] ?>" method="post">
<div class="form_submit">
<input type="hidden" name="op" value="eliminaremitt" />
<input type="hidden" name="id" value="<?php echo $row['id']; ?>" />
<input type="image" title="elimina messaggio" src="imgs/icons/erase.png" style="width:20px; height:20px; float:right;" />
</div>
</form>
<?php }?>
<div>
<?php if(($row['destinatario'] != $_SESSION['login']) && ($row['letto'] == 1)) { ?>
<img title="messaggio letto dal destinatario" src="imgs/icons/letto.png" style="width:20px; height:20px; float:right;" />
<?php } ?>
<?php if(($row['destinatario'] != $_SESSION['login']) && ($row['letto'] == 0)) { ?>
<img title="messaggio non ancora letto dal destinatario" src="imgs/icons/nonletto.png" style="width:20px; height:20px; float:right;" />
<?php } ?>
</div>
</li>
</ul>
</div>
<?php
}
?>
<div style="clear:both;"> </div>
<input value="Carica altri" type="submit" id="next"></input>
<script type="text/javascript">
$(document).ready(function(){
var list = $(".list li");
var numToShow = 10;
var button = $("#next");
var numInList = list.length;
list.hide();
if (numInList > numToShow) {
button.show();
}
list.slice(0, numToShow).show();
button.click(function(){
var showing = list.filter(':visible').length;
list.slice(showing - 1, showing + numToShow).fadeIn();
var nowShowing = list.filter(':visible').length;
if (nowShowing >= numInList) {
button.hide();
}
});
});
</script>
25/06/2021 23:51:49 e modificato da haruka il 25/06/2021 23:55:45
*** STEP 6 ***
Creare un nuovo file dentro la folder /pages/messages
chiamato
createnew.inc.php
Contenuto
<div class="panels_box">
<form class="form_messaggi" action="main.php?page=messages_center" method="post">
<!-- Destinatario -->
<div class='form_label'>
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['destination']); ?>
</div>
<div class='form_field'>
<input type="text" list="personaggi" name="destinatario" placeholder="Nome del personaggio" value="<?php echo gdrcd_filter('get', $_REQUEST['reply_dest']); ?>" />
</div>
<?php
echo gdrcd_list('personaggi');
if($_SESSION['permessi'] >= GUILDMODERATOR) { ?>
<div class="form_field">
<select name="multipli">
<option value="singolo" selected>
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['multiple']['single']); ?>
</option>
<option value="multiplo">
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['multiple']['multiple']); ?>
</option>
<option value="presenti">
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['multiple']['online']); ?>
</option>
<?php if($_SESSION['permessi'] >= MODERATOR) { ?>
<option value="broadcast">
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['multiple']['all']); ?>
</option>
<?php } ?>
</select>
</div>
<?php
} //if
?>
<div class="form_info">
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['multiple']['info']); ?>
</div>
<!-- Testo -->
<div class='form_label'>
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['body']); ?>
</div>
<div class='form_field'>
<textarea type="textbox" name="testo"><?php
/** * Fix per evitare le parentesi quadre vuote quando si compone un nuovo messaggio
* @author Blancks
*/
if(isset($_POST['testo'])) {
echo "\n\n\n[".gdrcd_filter('out', trim($_POST['testo']))."]";
}
?></textarea>
</div>
<!-- Submit -->
<input type="hidden" name="op" value="send_messagenew" />
<input type="hidden" name="reply_attach" value="<?php echo gdrcd_filter('get', $_POST['reply_attach']); ?>" />
<div class='form_submit'>
<input type="submit" value="<?php echo gdrcd_filter('out', $MESSAGE['interface']['forms']['submit']); ?>" />
</div>
</form>
</div>
<div class="link_back">
<a href="main.php?page=messages_center&offset=0"><?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['go_back']); ?></a>
</div>
25/06/2021 23:57:05
Dovrebbe essere tutto.
Attenzione, ho aggiornato i codici degli step 3, 4 e 5 perché contenevano delle personalizzazioni che possono creare problemi (vedi l'oggetto del messaggio che è una patch di gdrcd e non fa parte del pacchetto ufficiale).
26/06/2021 02:08:37
Ho fatto un poco di debugging e ho individuato qualche errore qua e là, probabilmente dettato dall'adattamento da una versione custom ad una più generica, e qualche aggiustamento per renderlo più versatile.
Appena finisco il tutto, provo a passarti l'intero pacchetto di modifiche fixato. Escogito un modo per dartelo completo.
Kasa.
19/07/2021 17:26:16 e modificato da kasa il 19/07/2021 17:26:29
anchor ha scritto: ...
È un refuso di messagges/index.php, che è stato preso come spunto per la realizzazione di messages/indexnew.php .
Puoi cancellare quelle righe, dato che non sono coerenti con il metodo delle conversazioni.
Poi, subito dopo la query per la selezione delle conversazioni, puoi modificare questa linea:
$numresults = gdrcd_query($result, 'num_rows');
cosi:
$numresults = $totaleresults = gdrcd_query($result, 'num_rows');
In questo modo i due valori coincidono e non dovresti cambiare altri punti del file.
Potresti provare?
Kasa.
19/07/2021 17:40:33 e modificato da haruka il 19/07/2021 17:40:48
Ho fatto al volo un test. Col tuo codice, Kasa, vedo che nell'index vengono mostrate le prime quaranta conversazioni più recenti (il 40 è il valore da me impostato in config, il messages_per_page per intenderci), ma non essendoci più la paginazione, se si volesse ripescare le più vecchie non sarebbe possibile (salvo attendere che la conversazione per qualche motivo torni in cima).
19/07/2021 17:41:01
Ok.
Riesci a postare le prime righe di indexnew.php fino alla riga che ti ho fatto modifiche?
Kasa.
20/07/2021 10:19:06 e modificato da kasa il 20/07/2021 10:21:16
@anchor
Allora...
Ho avuto un poco di tempo e son riuscito a sistemare del tutto file, trovando gli errori da me lasciati indietro. Ecco come ho risolto:
Ho eliminato in ogni caso le righe refuso della visualizzazione standard dei messaggi, essendo non più coerenti con il concetto delle conversazioni.
Per intenderci, queste:
//Conteggio messaggi totali
$record = gdrcd_query("SELECT COUNT(*) FROM messaggi WHERE destinatario = '".$_SESSION['login']."' AND stato='OFF' ");
$totaleresults = $record['COUNT(*)'];
Successivamente, ho staccato la query delle conversazioni dalla funzione gdrcd_query() e l'ho racchiusa in una variabile, in modo da poterla sistemare all'occorrenza con i LIMIT della sezione.
Quindi, mi ritrovo con questo:
// Costruisco la query per raccogliere le conversazioni
$sqlConversazioni = "
SELECT conversazioni.personaggio AS personaggio_conversazione,
conversazioni.testo, conversazioni.spedito, conversazioni.letto
FROM (
SELECT IF(destinatario = '".$_SESSION['login']."', mittente, destinatario) AS personaggio,
messaggi.*
FROM messaggi
) AS conversazioni
INNER JOIN (
SELECT MAX(spedito) AS spedito,
IF(destinatario = '".$_SESSION['login']."', mittente, destinatario) AS personaggio
FROM messaggi
WHERE 1
AND (
(destinatario = '".$_SESSION['login']."' AND destinatario_del = 0)
||
(mittente = '".$_SESSION['login']."' AND mittente_del = 0)
)
GROUP BY personaggio
) AS ultimo_messaggio_conversazione
ON (
conversazioni.spedito = ultimo_messaggio_conversazione.spedito
AND
conversazioni.personaggio = ultimo_messaggio_conversazione.personaggio
)
WHERE 1
AND (
(conversazioni.destinatario = '".$_SESSION['login']."' AND conversazioni.destinatario_del = 0)
||
(conversazioni.mittente = '".$_SESSION['login']."' AND conversazioni.mittente_del = 0)
)
GROUP BY conversazioni.personaggio_conversazione
ORDER BY conversazioni.spedito DESC
";
// Ottengo le conversazioni da visualizzare nella pagina corrente
$result = gdrcd_query($sqlConversazioni. " LIMIT ".$pagebegin.", ".$pageend, 'result');
$numresults = gdrcd_query($result, 'num_rows');
I LIMIT li ho aggiunti in coda nella funzione, in modo comunque da vedere le conversazioni che mi aspetto dalla pagina. La creazione di $numresults l'ho messo subito sotto, per avere il blocco di informazioni unico.
Subito sotto a questo, ho messo questo:
// Conteggio i record totali per l'impaginazione
$totaleresults = gdrcd_query(gdrcd_query($sqlConversazioni, 'result'), 'num_rows');
In questo mondo la variabile $totaleresults può avere il TOTALE delle conversazioni dell'utente e, quindi, garantire una impaginazione corretta. Non è una soluzione elegantissima, sia chiaro, ma è funzionale.
In fondo al file, dove viene gestita la impaginazione ho cambiato il contenuto di "<div class="pager">" con questo:
<?php
if($totaleresults > $PARAMETERS['settings']['messages_per_page']) {
echo gdrcd_filter('out', $MESSAGE['interface']['pager']['pages_name']);
for($i = 0; $i <= floor($totaleresults / $PARAMETERS['settings']['messages_per_page']) - 1; $i++) {
if($i != $_REQUEST['offset']) { ?>
<a href="main.php?page=messages_center_new&offset=<?php echo $i; ?>"><?php echo ($i+1); ?></a>
<?php } else {
echo ' '.($i+1).' ';
}
}
}
?>
Così ora dovrei avere la giusta impaginazione dei messaggi.
Potresti provare?
@haruka
Nel caso in cui dovesse funzionare correttamente, ti passo il file per aggiornare il pacchetto.
Kasa.
20/07/2021 11:23:23
Sicuramente sbaglio qualcosa io.
Non ho capito se la query devo sostituirla col nuovo blocco codice. Mi restituisce questo errore:
GDRCD MySQLi Error [File: indexnew.inc.php; Line: 62]
Error Code: 1054
Error String: Unknown column 'conversazioni.personaggio_conversazione' in 'group statement'
Error Detail: SELECT conversazioni.personaggio AS personaggio_conversazione, conversazioni.testo, conversazioni.spedito, conversazioni.letto FROM ( SELECT IF(destinatario = 'Haruka', mittente, destinatario) AS personaggio, messaggi.* FROM messaggi ) AS conversazioni INNER JOIN ( SELECT MAX(spedito) AS spedito, IF(destinatario = 'Haruka', mittente, destinatario) AS personaggio FROM messaggi WHERE 1 AND ( (destinatario = 'Haruka' AND destinatario_del = 0) || (mittente = 'Haruka' AND mittente_del = 0) ) GROUP BY personaggio ) AS ultimo_messaggio_conversazione ON ( conversazioni.spedito = ultimo_messaggio_conversazione.spedito AND conversazioni.personaggio = ultimo_messaggio_conversazione.personaggio ) WHERE 1 AND ( (conversazioni.destinatario = 'Haruka' AND conversazioni.destinatario_del = 0) || (conversazioni.mittente = 'Haruka' AND conversazioni.mittente_del = 0) ) GROUP BY conversazioni.personaggio_conversazione ORDER BY conversazioni.spedito DESC LIMIT 0, 40
20/07/2021 11:27:38
haruka ha scritto: ...
Per darti una idea, andrebbe sostituito questo:
<?php
//Determinazione pagina
if(isset($_REQUEST['offset']) === false) {
$pagebegin = 0;
} else {
$pagebegin = (int) $_REQUEST['offset'] * $PARAMETERS['settings']['messages_per_page'];
}
$pageend = $PARAMETERS['settings']['messages_per_page'];
//Conteggio messaggi totali
$record = gdrcd_query("SELECT COUNT(*) FROM messaggi WHERE destinatario = '".$_SESSION['login']."'");
$totaleresults = $record['COUNT(*)'];
// Elimina tutti i messaggi
if(gdrcd_filter('get', $_POST['op']) == 'eliminatutto') {
gdrcd_query(" UPDATE messaggi SET mittente_del = IF(mittente = '".gdrcd_filter('in', $_SESSION['login'])."', 1, mittente_del), destinatario_del = IF(destinatario = '".gdrcd_filter('in', $_SESSION['login'])."', 1, destinatario_del), letto = IF(destinatario = '".gdrcd_filter('in', $_SESSION['login'])."', 1, letto) WHERE (mittente = '".gdrcd_filter('in', $_SESSION['login'])."' AND destinatario = '".$_POST['dest']."') OR (destinatario = '".gdrcd_filter('in', $_SESSION['login'])."' AND mittente ='" .$_POST['dest']. "') ");
}
$result = gdrcd_query("
SELECT conversazioni.personaggio AS personaggio_conversazione,
conversazioni.testo, conversazioni.spedito, conversazioni.letto
FROM (
SELECT IF(destinatario = '".$_SESSION['login']."', mittente, destinatario) AS personaggio,
messaggi.*
FROM messaggi
) AS conversazioni
INNER JOIN (
SELECT MAX(spedito) AS spedito,
IF(destinatario = '".$_SESSION['login']."', mittente, destinatario) AS personaggio
FROM messaggi
WHERE 1
AND (
(destinatario = '".$_SESSION['login']."' AND destinatario_del = 0)
||
(mittente = '".$_SESSION['login']."' AND mittente_del = 0)
)
GROUP BY personaggio
) AS ultimo_messaggio_conversazione
ON (
conversazioni.spedito = ultimo_messaggio_conversazione.spedito
AND
conversazioni.personaggio = ultimo_messaggio_conversazione.personaggio
)
WHERE 1
AND (
(conversazioni.destinatario = '".$_SESSION['login']."' AND conversazioni.destinatario_del = 0)
||
(conversazioni.mittente = '".$_SESSION['login']."' AND conversazioni.mittente_del = 0)
)
GROUP BY conversazioni.personaggio_conversazione
ORDER BY conversazioni.spedito DESC
LIMIT ".$pagebegin.", ".$pageend, 'result');
$numresults = gdrcd_query($result, 'num_rows');
?>
Con questo:
<?php
//Determinazione pagina
$pagebegin = isset($_REQUEST['offset']) === false ? 0 : (int)$_REQUEST['offset'] * $PARAMETERS['settings']['messages_per_page'];
$pageend = $PARAMETERS['settings']['messages_per_page'];
// Elimina tutti i messaggi
if(gdrcd_filter('get', $_POST['op']) == 'eliminatutto') {
gdrcd_query(" UPDATE messaggi SET mittente_del = IF(mittente = '".gdrcd_filter('in', $_SESSION['login'])."', 1, mittente_del), destinatario_del = IF(destinatario = '".gdrcd_filter('in', $_SESSION['login'])."', 1, destinatario_del), letto = IF(destinatario = '".gdrcd_filter('in', $_SESSION['login'])."', 1, letto) WHERE (mittente = '".gdrcd_filter('in', $_SESSION['login'])."' AND destinatario = '".$_POST['dest']."') OR (destinatario = '".gdrcd_filter('in', $_SESSION['login'])."' AND mittente ='" .$_POST['dest']. "') ");
}
// Costruisco la query per raccogliere le conversazioni
$sqlConversazioni = "
SELECT conversazioni.personaggio AS personaggio_conversazione,
conversazioni.testo, conversazioni.spedito, conversazioni.letto
FROM (
SELECT IF(destinatario = '".$_SESSION['login']."', mittente, destinatario) AS personaggio,
messaggi.*
FROM messaggi
) AS conversazioni
INNER JOIN (
SELECT MAX(spedito) AS spedito,
IF(destinatario = '".$_SESSION['login']."', mittente, destinatario) AS personaggio
FROM messaggi
WHERE 1
AND (
(destinatario = '".$_SESSION['login']."' AND destinatario_del = 0)
||
(mittente = '".$_SESSION['login']."' AND mittente_del = 0)
)
GROUP BY personaggio
) AS ultimo_messaggio_conversazione
ON (
conversazioni.spedito = ultimo_messaggio_conversazione.spedito
AND
conversazioni.personaggio = ultimo_messaggio_conversazione.personaggio
)
WHERE 1
AND (
(conversazioni.destinatario = '".$_SESSION['login']."' AND conversazioni.destinatario_del = 0)
||
(conversazioni.mittente = '".$_SESSION['login']."' AND conversazioni.mittente_del = 0)
)
GROUP BY conversazioni.personaggio_conversazione
ORDER BY conversazioni.spedito DESC
";
$result = gdrcd_query($sqlConversazioni. " LIMIT ".$pagebegin.", ".$pageend, 'result');
$numresults = gdrcd_query($result, 'num_rows');
// Conteggio i record totali per l'impaginazione
$totaleresults = gdrcd_query(gdrcd_query($sqlConversazioni, 'result'), 'num_rows');
?>
Ho preso come riferimento il file indexnew.inc.php del pacchetto.
Kasa.
Discussione seguita da
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
RAID Shadow Legends ↗
Foundation Galactic Frontier ↗
Fallen Gods ↗
Wuthering Waves ↗
Project Entropy ↗
Enlisted ↗
Crossout ↗
War Thunder ↗
Tibia ↗