这篇文章主要介绍了PHP网页游戏Xnova(ogame)源码解读的舰队活动页面处理流程,需要的朋友可以参考下

十八、舰队活动(FlyingFleetHandler.php)

在前文中我们曾经初步研究过舰队活动的源码,提到过舰队活动的触发。现在我进一步分析Xnova中舰队活动,这些在本质上是由玩家触发的,并不是由定时器在进行定时计算。舰队活动的触发是在common.php中进行的,所以入口就在这文件中,代码如下:

//检查是否有到达目的地的舰队

$_fleets = doquery("SELECT * FROM {{table}} WHERE 'fleet_start_time' <= '".time()."';", 'fleets'); // OR fleet_end_time <= ".time()

//循环处理每个舰队

while ($row = mysql_fetch_array($_fleets)) {

$array = array();

$array['galaxy'] = $row['fleet_start_galaxy'];

$array['system'] = $row['fleet_start_system'];

$array['planet'] = $row['fleet_start_planet'];

$array['planet_type'] = $row['fleet_start_type'];

//舰队处理函数

$temp = FlyingFleetHandler ($array);

}

//检查是否有返回出发地的舰队

$_fleets = doquery("SELECT * FROM {{table}} WHERE 'fleet_end_time' <= '".time()."';", 'fleets'); // OR fleet_end_time <= ".time()

//循环处理每个舰队

while ($row = mysql_fetch_array($_fleets)) {

$array = array();

$array['galaxy'] = $row['fleet_end_galaxy'];

$array['system'] = $row['fleet_end_system'];

$array['planet'] = $row['fleet_end_planet'];

$array['planet_type'] = $row['fleet_end_type'];

//舰队处理函数

$temp = FlyingFleetHandler ($array);

}

大家看到了,前面这段代码其实写的不好,因为这里每次都会被调用,效率太低了。因此我们在这里可以进行优化,使每次循环只需要一个舰队的ID传递给函数即可;相应的函数也要做修改,有兴趣的自己修改下。

接下来看看函数FlyingFleetHandler(),这是集中调用舰队活动的函数。

//锁表,防止出现数据不同步等问题

doquery("LOCK TABLE {{table}}lunas WRITE, {{table}}rw WRITE,

{{table}}errors WRITE, {{table}}messages WRITE, {{table}}fleets WRITE,

{{table}}planets WRITE, {{table}}galaxy WRITE ,{{table}}users WRITE", "");

//这里一大段就是取得舰队数组,参数完全可以使用舰队ID,优化之

$QryFleet = "SELECT * FROM {{table}} ";

$QryFleet .= "WHERE (";

$QryFleet .= "( ";

$QryFleet .= "`fleet_start_galaxy` = ". $planet['galaxy'] ." AND ";

$QryFleet .= "`fleet_start_system` = ". $planet['system'] ." AND ";

$QryFleet .= "`fleet_start_planet` = ". $planet['planet'] ." AND ";

$QryFleet .= "`fleet_start_type` = ". $planet['planet_type'] ." ";

$QryFleet .= ") OR ( ";

$QryFleet .= "`fleet_end_galaxy` = ". $planet['galaxy'] ." AND ";

$QryFleet .= "`fleet_end_system` = ". $planet['system'] ." AND ";

$QryFleet .= "`fleet_end_planet` = ". $planet['planet'] ." ) AND ";

$QryFleet .= "`fleet_end_type`= ". $planet['planet_type'] ." ) AND ";

$QryFleet .= "( `fleet_start_time` < '". time() ."' OR `fleet_end_time` < '". time() ."' );";

$fleetquery = doquery( $QryFleet, 'fleets' );

//根据舰队活动的目标不同,分别进入不同的函数处理

while ($CurrentFleet = mysql_fetch_array($fleetquery)) {

switch ($CurrentFleet["fleet_mission"]) {

case 1:

// 普通攻击

MissionCaseAttack ( $CurrentFleet );

break;

case 2:

// 这里应该是ACS攻击或者是其他攻击,但是现在没有用

doquery ("DELETE FROM {{table}} WHERE `fleet_id` = '". $CurrentFleet['fleet_id'] ."';", 'fleets');

break;

case 3:

// 运输

MissionCaseTransport ( $CurrentFleet );

break;

case 4:

// 派遣

MissionCaseStay ( $CurrentFleet );

break;

case 5:

// 联合派遣,即ACS防御

MissionCaseStayAlly ( $CurrentFleet );

break;

case 6:

// 侦查

MissionCaseSpy ( $CurrentFleet );

break;

case 7:

// 殖民

MissionCaseColonisation ( $CurrentFleet );

break;

case 8:

// 回收

MissionCaseRecycling ( $CurrentFleet );

break;

case 9:

// 毁月,厉害了

MissionCaseDestruction ( $CurrentFleet );

break;

case 10:

// 保留 !!

break;

case 15:

// 远征、探险

MissionCaseExpedition ( $CurrentFleet );

break;

//其他情况删除舰队,这个是好习惯

default: {

doquery("DELETE FROM {{table}} WHERE `fleet_id` = '". $CurrentFleet['fleet_id'] ."';", 'fleets');

}

}

}

//解锁表

doquery("UNLOCK TABLES", "");

上面的函数结构清晰,代码明了,注释也讲的很清楚了。

页游php怎么读其他文件夹,PHP网页游戏学习之Xnova(ogame)源码解读(十五)相关推荐

  1. 微信小程序开发之文件上传下载应用场景(附Demo源码)

    微信小程序开发之文件上传下载应用场景(附Demo源码),Demo为小相册应用,源码在附件中,本示例需要腾讯云支持. http://www.henkuai.com/forum.php?mod=viewt ...

  2. jpcsp源码解读6:PSF文件

    当你运行了模拟器,通过模拟器菜单选择并加载一个umd镜像,模拟器就用这个umd镜像实例化一个UmdIsoReader(见上一篇,源码解读5). 通过这个UmdIsoReader,从光盘提取的第一个文件 ...

  3. PTMs:QLoRA技巧之源码解读(qlora.py文件)—解析命令与加载参数→数据预处理→模型训练+评估+推理

    PTMs:QLoRA技巧之源码解读(qlora.py文件)-解析命令与加载参数→数据预处理→模型训练+评估+推理 目录 QLoRA技巧之源码解读(qlora.py文件)-解析命令与加载参数→数据预处理 ...

  4. python遍历一个文件夹下所有excel,读取所有sheet页,然后写入另一个文件夹下对应模板的excel中

    本来想直接写入,但是我们的excel报表太麻烦了,里面表头有多处要求合并的,用python去写太要命了,想了下,设置一堆空的excel模板,这样只需要把原文件的数据读出来就可以了,简单多了 #读取文件 ...

  5. 使用Process.Start打开文件夹或网页

    代码 /// <summary> /// 打开文件所在的文件夹 /// </summary> public static void OpenFileDialog(string ...

  6. php文件夹转换网页,PHP转换文件夹下所有文件的编码 适合发布网站的其他编码版本...

    PHP转换文件夹下所有文件的编码 适合发布网站的其他编码版本 比如你有一个GBK版本 你想有一个UTF8版本 或者你只有GBK的源码 你想二次开发 但是你不想改变IDE的编码方式 你可以用这个程序将其 ...

  7. 安卓游戏服务器文件是哪个文件夹,安卓手机游戏数据包放在哪个文件夹

    数据包路径一般为sdcard\ANDRIOD\data\某游戏数据包(com.游戏英文名称就是那个游戏的数据包). 安卓4.0及以上的话就是在内置存储中,也即文件管里中的sdcard目录(外置存储卡叫 ...

  8. 如何新建一个看不见的文件夹(我们的游戏都在里头)

    首先在桌面新建一个正常的文件夹 右击中英文切换  然后将半角设定成全角 之后重命名我们的文件夹 按一下空格,之后因为系统识别全角就不是空格啦 我们就可以按一下回车 他就变成了金色的文件夹啦 之后右击- ...

  9. 35.FFmpeg学习笔记 - ffplay源码解读3之读文件

    本篇文章看看ffplay是如何读取packet放入队列中的. 一.先看入口函数: int main(int argc, char **argv) {VideoState *is;...av_init_ ...

  10. steam文件夹移动后游戏需要重新安装怎么办

    有的时候我们一不小心当时年少轻狂不小心把游戏文件夹装到了c盘后来c盘空间太少移到了d盘不能用了怎么办呢,其实很简单,看网上有很多方法都不是好用的,下面就告诉你咋办 1.移动路径 直接拖拽就行这里我直接 ...

最新文章

  1. 浅谈ASP.NET中render方法
  2. 小学计算机ppt课教案,小学信息技术公开课教案《让幻灯片变得更加漂亮》教学设计与反思...
  3. javascript --- 作用域和闭包
  4. .NET Core 3.0 Preview 7 已经发布
  5. 《Python程序设计》在亚马逊京东当当互动出版网淘宝全面上架
  6. winform定义数据源名称_WinForm中使用CrystalReport水晶报表——基础,分组统计,自定义数据源...
  7. 安卓 多条通知_【安卓+苹果】石头阅读,全网小说、漫画免费看,最好用的追书神器!...
  8. php漂浮广告代码,js 居中漂浮广告_广告代码
  9. HTML5七夕情人节表白网页制作【我喜欢你H5】HTML+CSS+JavaScript
  10. mysql乐观锁 超卖_秒杀系统之超卖现象
  11. 【Oracle】并行等待之PX Deq: Table Q Normal
  12. SNS、FaceBook、导航设计等等
  13. 计算机无法读取移动光驱,电脑检测不到光驱怎么办?
  14. fatal: could not create work tree dir ‘xxx’: Permission denied解决办法
  15. Kafka Confluent 简介
  16. 9660图像 缺少iso_刻录映像时出现的问题
  17. Centos7 -samba服务配置
  18. Serverless 2.0,鸡蛋还是银弹?
  19. 计算机系统结构课后习题答案1
  20. 搜索引擎发展趋势:对SNS社交网站的收录

热门文章

  1. 学习杂感————大小写转换
  2. LightOJ1027 A - A Dangerous Maze(n次独立重复试验之几何分布)
  3. 生成随机密码对有密码的压缩包测试解压
  4. graphpad做折线图后怎么保存_用graphpad prism5 做好图后怎么输出
  5. Huginn 服务部署与安装指南(Ubuntu+Nginx+HTTPS)
  6. 【c语言】:X宏的应用
  7. 由一段材料和一部连续剧引起的感想
  8. 应用密码学期末复习知识点总结
  9. 跟我读论文系列之LightGBM
  10. springboot流浪动物救助系统-计算机毕设 附源码78174