Per i source posso anche condividerli ma in privato..
Cmq ora vi racconto un pò come funziona il tutto...
Chiaramente di contenuti non ce ne sono ancora tanti visto che stò ancora scrivendo la base..
Se avete notato, la pagina rimane sempre a quel indirizzo, non cè uso di iframe e non funziona in ajax (eccetto la chat)...
La pagina index.php include la 'zona' (tipo foresta, villaggio o quel che sia) in cui si trova il personaggio (le informazioni le legge dal database), se è in battaglia non includerà la relativa pagina...
Quando si clicka in un link, si richiama una pagina la quale elabora i dati e con un header ti rispedisce alla index.
In alcuni casi, come la battaglia, quando 'attacchi' (mi sono accorto ora che non funziano >: S mo correggo) la pagina richiamata è la index (?act=1round), in questo caso il server fa un pò di lavoro in più dato che deve rileggere anche dati che non gli servono, però così facendo risparmio tempo e spazio (altrimenti dovrei creare una nuova pagina, ristabilire una connessione, e selezionare tutti i parametri da leggere.. un centinaio di righe..)
La index lavora in questo modo:
Includo il file di config
Includo il file delle funzioni
leggo se cè la sessione aperta (e se sono loggato)
if true {
includo la pagina e il relativo menu che mi legge il database
oppure la battaglia e la visualizzazione di essa
}
else mostro il login o home o registrazione quel che sia
Ogni zona è un file separato con inizialmente le informazioni da cui posso raggiungerla, il suo relativo menu e la pagina.
Oltre che alla '$location' ho aggiunto una sub_location che permette di muoversi dentro una zona.. in questo modo potrei anche creare dei dungeon..
La battaglia (versione 3, non online)
PHP:
<?php
require_once("./battle/lib.battle.php");
# Quando entro in battaglia viene salvato un ID incrementale nel player.. esempio: 123 < numero del match
// Nota Bene, questa pagina viene inclusa nella index.php
if ($battle_status==1){ // Mi assicuro di essere in battaglia
# Guardo le azioni che vuole fare il player
// $azioni=$_GET['act']; # già letto dalla index
if ($azioni=="1round")$azioni=1;
//if ($azioni=="5round")$azioni=5;
if ($azioni=="fuga") casefuga_battle();
// if ($azioni=="spell") xxxxxxxxxx();
# ### ### ### BATTLE v3 ### ### ###
# matchid id univoco
# turno turno del match
# player String=playername INT=creatura
# buff x.y-x.y
# x=id spell y=turni rimanenti
# . - separatori
# ### ### ### END ### ### ### ###
// leggo l'ID del match
$matchid = matchid($name);
// Leggo ID della creatura sfidante
$creaturasfidante = leggi_creatura_attaccante($name,$matchid);
if ($creaturasfidante) { # Questo NON è un pvp...
//Informazioni sulla creatura sfidante!
info_creatura_attaccante($creaturasfidante); // questo modifica $guys sul vettore della creatura. (è sempre un INTERO)
$creep = $creaturasfidante;
}
$i=0;
while ($i < $azioni)
{
##### Seleziono la riga più alta della creatura
#
$result = mysql_query("SELECT MAX(turno) FROM ".tabella_battle." WHERE (matchid='".$matchid."' AND player_npc = '".$creaturasfidante."')");
#
$ultimo_turno = mysql_result($result,0);
# Leggo le stats della creatura
# con i dati dell'ultimo scontro..
$result = mysql_query("SELECT * FROM ".tabella_battle." WHERE (matchid='".$matchid."' AND turno = '".$ultimo_turno."' AND player_npc = '".$creaturasfidante."')");
#
$guys[$creaturasfidante]['hp'] = mysql_result($result,0,"hp");
$guys[$creaturasfidante]['mana'] = mysql_result($result,0,"mana");
$guys[$creaturasfidante]['buff'] = mysql_result($result,0,"buff");
#####
# IF NO PVP
$players=2;
$ultimo_turno++;
for ($k=1;$k<=$players;$k++){
# caso di chi attacca.<br>
# leggi ultimo attaccante per percentuali
switch($k)
{
case 1:
$guy=$name;
$target=$creaturasfidante;
break;
case 2:
$guy=$creaturasfidante;
$target=$name;
break;
}
if (($guys[$name]['hp'] > 0) && ($guys[$creep]['hp'] > 0)){
unset($total_damage);
// Modifico il danno (attacco + cazzi vari tipo aure items..)
$total_damage += $guys[$guy]['attack'];
# ...
# ...
$guys[$target]['hp'] -= $total_damage;
mysql_query("INSERT INTO ".tabella_battle."
(matchid,turno, subturno, player_npc, hp, mana, dannoinferto, buff) VALUES
('".$matchid."','".$ultimo_turno."', '$k', '".$guy."', '".$guys[$guy]['hp']."','".$guys[$guy]['mana']."','".$total_damage."','".$guys[$guy]['buff']."')");
if ($target==$name){
mysql_query("UPDATE ".tabella_player." SET hp = ".$guys[$target]['hp']." WHERE ". tabella_account ." = '$name'");
mysql_query("UPDATE ".tabella_player." SET mana = ".$guys[$target]['mana']." WHERE ". tabella_account ." = '$name'");
# Elabora i buffs con relativa longevitÃ
mysql_query("UPDATE ".tabella_player." SET buff = ".$guys[$target]['buff']." WHERE ". tabella_account ." = '$name'");
}
}
}
$i++;
} // Fine while
check_creatura_die();
}
?>
Codice:
-- ----------------------------
-- Table structure for `battle3`
-- ----------------------------
DROP TABLE IF EXISTS `battle3`;
CREATE TABLE `battle3` (
`matchid` bigint(11) default NULL,
`turno` int(11) default NULL,
`subturno` int(2) default NULL,
`player_npc` text,
`hp` double default NULL,
`mana` double default '0',
`dannoinferto` double default NULL,
`buff` text
)
Sò che non è bellissimo e non è nemmeno finito... ma +o- funziona così! Questa dovrebbe essere la base, ma il problema non è tanto scriptare la battle,
ma bensì fare in modo che si visualizzino tutti i turni!
Il mio problema, forse, è come strutturare la tabella della battaglia....
@@ Per quanto riguarda razza e classe, è solo una bozza, dovrà essere esteso
@Che qualità deve avere il programmatore??
Io non sono granché.. ho cominciato a scrivere in php 'seriamente' poco prima di questo progetto (per dire.. non occorre essere geni
)
Questo è il codice di una zona
PHP:
<?php // LE ZONE DA CUI POSSO ARRIVARE
$come_from[-1][1]=true; // Cimitero risorto
$come_from[1][0]=true;
$come_from[3][0]=true;
$come_from[3][1]=true;
$come_from[3][2]=true;
$come_from[3][3]=true;
$come_from[3][4]=true;
$come_from[4]["all"]=true;
$come_from[6]["all"]=true;
$come_from[7][0]=true;
$come_from[9]["all"]=true;
//$come_from[x]=true;
$can_go=0;
if ($display_page==true):
?>
Benvenuto nel villaggio <strong><?php echo $name; ?></strong>!<br>
il tuo ping: <?php ping(server_url, 80, 10); ?>
<p>
<br />
<?php
include "./chat/chat.php";
?>
<p>In questo momento sono connessi:
<?php
$result=mysql_query("SELECT * FROM ". tabella_account ." WHERE logged='1'");// Cerco se esiste già l'ID dell'account
$num=mysql_numrows($result); // numero dei risultati
for ($i=0;$i<$num;$i++){
$player_name=mysql_result($result,$i,"name");
echo "<br>• $player_name";
}if (!$i) echo "Nessun player connesso.. Nemmeno tu! Qualcosa non quadra non credi?";
?>
</p>
<?php endif;
if ($display_menu==true){
$goto_for = array (
$location_name[1]."|La Foresta",
$location_name[7]."|Campo d'allenamento",
$location_name[3]."|La Taverna di Boe",
"bagni|I Bagni Pubblici",
$location_name[6]."|La vecchia Banca",
$location_name[4]."|Help ID",
$location_name[9]."|Pannello Admin"
);
}
?>
[size=large]Ma porca vacca........... Hai ragione non prosegue nella registrazione =.= ora cerco di correggere[/size]
errori dovuti alla diversità della versione del database... compatibile con la versione offline....
Edit: Ok ora [size=large]la creazione del personaggio funziona![/size].. finalmente.. La battaglia ha smesso di andare.. 'da sola' .. non perdo tempo a guardarci tanto è la versione vecchia se volete vedere un esempio è nella screen...
Domande?