最后一部分是PHP脚本相关和实际的测试效果,其实这部分对于MMORpg来说,只是一个与数据库的交互罢了,人物位置,动作,攻击之类的同步,大家可以用photon cloud来实现。
数据库交互
PHP脚本
首先是login.php:
<?php
// 连接 =========================================================
$host = "www.dongliguangyou.cn"; //主机
$user = "dongliguangyou"; //一般是root 数据库账号 你的虚拟主机数据库账号
$password = "123456"; //你的虚拟主机数据库密码
$dbname = "dongliguangyou"; //你的数据库的名称
mysql_connect($host, $user, $password) or die("Cant connect into database");
mysql_select_db($dbname)or die("Cant connect into database");
//=========================================================================
function anti_injection_login_senha($sql, $formUse = true)
{
$sql = preg_replace("/(from|select|insert|delete|where|drop table|show tables|,|'|#|\*|--|\\\\)/i","",$sql);
$sql = trim($sql);
$sql = strip_tags($sql);
if(!$formUse || !get_magic_quotes_gpc())
$sql = addslashes($sql);
$sql = md5(trim($sql));
return $sql;
}
function anti_injection_login($sql, $formUse = true)
{
$sql = preg_replace("/(from|select|insert|delete|where|drop table|show tables|,|'|#|\*|--|\\\\)/i","",$sql);
$sql = trim($sql);
$sql = strip_tags($sql);
if(!$formUse || !get_magic_quotes_gpc())
$sql = addslashes($sql);
return $sql;
}
// =============================================================================
$unityHash = anti_injection_login($_POST["myform_hash"]);
$phpHash = "hashcode"; //和客户端的要一样
$user = anti_injection_login($_POST["myform_user"]);
$pass = anti_injection_login_senha($_POST["myform_pass"]);
if(!$user || !$pass) {
echo "用户名和密码不能为空";
} else {
if ($unityHash != $phpHash){
echo "HASH code 和客户端游戏的不同";
} else {
$SQL = "SELECT * FROM qquser WHERE username = '" . $user . "'"; // 选择所有用户,并比较密码是否正确
$result_id = @mysql_query($SQL) or die("DATABASE ERROR!");//查询数据库获取ID
$total = mysql_num_rows($result_id);//根据ID获取行
if($total) {
$datas = @mysql_fetch_array($result_id);
if(!strcmp($pass, $datas["password"])) {
echo "Correct:";
$sql2 = "SELECT newuser FROM qquser WHERE username = '" . $user . "'";
$result_id2 = @mysql_query($sql2) or die("DATABASE ERROR!");
while($row = mysql_fetch_array($result_id2))
{
echo $row['newuser'];
}
} else {
echo "Wrong";
}
} else {
echo "Data invalid - cant find name.";
}
}
}
//关闭mysql
mysql_close();
?>
register.php代码如下:
<?php
// 连接 =========================================================
$host = "www.dongliguangyou.cn";
$user = "dongliguangyou";
$password = "123456";
$dbname = "dongliguangyou";
mysql_connect($host, $user, $password) or die("Cant connect into database");
mysql_select_db($dbname)or die("Cant connect into database");
// =========================================================================
function anti_injection_login_senha($sql, $formUse = true)
{
$sql = preg_replace("/(from|select|insert|delete|where|drop table|show tables|,|'|#|\*|--|\\\\)/i","",$sql);
$sql = trim($sql);
$sql = strip_tags($sql);
if(!$formUse || !get_magic_quotes_gpc())
$sql = addslashes($sql);
return $sql;
}
function anti_injection_login($sql, $formUse = true)
{
$sql = preg_replace("/(from|select|insert|delete|where|drop table|show tables|,|'|#|\*|--|\\\\)/i","",$sql);
$sql = trim($sql);
$sql = strip_tags($sql);
if(!$formUse || !get_magic_quotes_gpc())
$sql = addslashes($sql);
return $sql;
}
// =============================================================================
$unityHash = anti_injection_login($_POST["myform_hash"]);
$phpHash = "hashcode";
$user = anti_injection_login($_POST["myform_user"]);
$pass = anti_injection_login_senha($_POST["myform_pass"]);
if(!$user || !$pass) {
echo "用户名和密码不能为空";
} else {
if ($unityHash != $phpHash){
echo "HASH code 和客户端游戏不相符";
} else {
$SQL = "SELECT * FROM qquser WHERE username = '" . $user . "'";
$result_id = @mysql_query($SQL) or die("DATABASE ERROR!");
$total = mysql_num_rows($result_id);
if($total == 0) {
$msg1 = "INSERT INTO `qquser` ( `id` , `username` , `password` , `newuser` ) VALUES (NULL , '" . $user . "', MD5( '" . $pass. "' ), 0)";
$sql1 = mysql_query($msg1);
echo "Done";
} else {
echo "用户名存在";
}
}
}
mysql_close();
?>
写好这两个php脚本后,将其都上传至网站空间,根据客户端的www连接地址(login.cs中的这句代码就是,public string URL = “http://www.dongliguangyou.cn/QQChat/login.php“; 这边是改变你的网站地址的,我的是http://www.dongliguangyou.cn,你们改成自己的就行),确定上传的位置。
ps:如果只想本机测试也行,不过得下个phpStudy,将网站放在其www文件夹下,客户端www连接地址改成本机ip地址就行。
测试效果
差点忘了,在数据库中添加一张表,我这边是qquser,然后添加id,uername,password几个字段就行,直接在西部数码的数据库管理中添加就行。
之后运行客户端,点击注册,注册成功后,数据库中就会添加新的账户,点登陆的话,如果数据库中有该账户,就能登录成功。
好了,大概就是这样,如果有任何问题都可以联系我。
其实会了注册和登录,其他MMORpg中的包括物品,人物属性,商店等等都可以放置在数据库中,需要的时候调出来就行了。