La funzione Call e controllo del giocatore con Ajax
Aggiungete questi oggetti comuni al progetto:
Ajax, Keyboard, Audio, Touch, Function
Funzioni con la Ajax Call
Prima della chiamata alla funzione, il checkcode viene settato, se ce n'e', e usato nella chiamata alla funzione con 3 parametri per la richiesta di chiamata. Utilizzeremo una chiamata di funzione per ogni cosa collegata al posting Ajax.
Se date un'occhiata piu' attenta, potrete vedere:
"request="&Function.Param(0)&"&extra="&Function.Param(1)&"&code="&CheckCode
In ogni chiamata alla funzione per fare le richeiste, utilizzeremo il primo parametro (quindi la variabile richiesta), un extra= che conterra' un secondo parametro, ed ovviamente un terzo per il terzo parametro che contiene in genere il CheckCode.
Nella prima chiamata di richiesta, faremo un request=checkplayer che, se presente, invierà anche il terzo parametro CheckCode.
Continuiamo a vedere la parte in PHP dopo quello che abbiamo fatto fin qui, per non diventare ripetitivi e tediosi.
In PHP stiamo aspettando la nostra chiamata Ajax, ed il cuore delle funzioni sara' definito dalla variabile "richiedente". In questo caso, alla partenza del layout, viene richiesto il checkplayer.
Questa e' la parte PHP:
if($_POST[request] == "checkplayer"){
// Crea i codici
$playeragent = $_SERVER['HTTP_USER_AGENT'];
$playerhost = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$playerip=$_SERVER['REMOTE_ADDR'];
// Cerca codici gia' esistenti o rigenera il codice:
if(!empty($_POST[code])) {
$playercode = stripslashes(mysql_real_escape_string($_POST[code]));
} else {
$playercode = md5($playeragent.$playerhost.$playerip);
}
// Controlla codici gia' esistenti
if(mysql_num_rows(mysql_query("select id from players where playercode = '$playercode'")) == 0){
// Il codice del giocatore non esiste, quindi aggiungo
mysql_query("insert into players (playercode,state,kills,killed) values ('$playercode','no',0,0)");
// IMPORTANTE: comincia a costruire la stringa da ritornare
$message= "playeractive|"; // Pipe sign is crucial
} else {
// Il codice giocatore esiste, faccio un update dello stato e delle uccisioni, per evitare imbprgli
mysql_query("update players set state='no',kills=0 where playercode='$playercode'"); $message="playeractive|";
}
$message .= $playercode; // Aggiunge il check code alla stringa ritornata
// Prende lo user ID che utilizzeremo per moltissimi elementi del gioco
$playerid = mysql_fetch_object(mysql_query("select id from players where playercode = '$playercode'"));
$message .= "|".$playerid->id; // Ritorniamo anche l'ID del giocatore
}
// Questa istruzione visualizzera' la stringa che viene restituita a Construct 2; dobbiamo tenere questa istruzione sempre alla fine del file. Ogni altra funzione che aggiungeremo piu' tardi verra' inserita sopra questa.
echo $message;
Come potete vedere nelle funzionalita' in Construct 2 nella "on request complete", che controlla anche la stringa precedente il primo pipe |, quando trova che la prima variabiel e' "playeractive" fa un update del CheckCode e seta la unitid per il giocatore.
Questa versione semplificata non fa differenze tra giocatori nuovi ed esistenti.
La prossima funzione che vedremo nella parte successiva, e' leggermente piu' avanzata.