十八,舰队活动(flyingfleethandler php)

在前面的文章中,我们已经对舰队活动的源代码的一个初步的研究,并提到舰队活动触发。现在我进一步分析xnova舰队活动,本质上是由玩家触发,不以时间计算定时器。舰队的活动触发了common.php,所以进入这个文件,并且代码如下:


对舰队进行检查
_fleets美元= doQuery(SELECT * FROM { {表} } where'fleet_start_time(时间)< =。;
每个治疗周期/舰队
而($行= mysql_fetch_array($ _fleets)){
数组=();
数组{ 'galaxy} = { } 'fleet_start_galaxy美元的行;
数组{系统} = { } 'fleet_start_system美元的行;
数组{ 'planet} = { } 'fleet_start_planet美元的行;
数组{ 'planet_type} = { } 'fleet_start_type美元的行;
舰队处理功能
$温度= flyingfleethandler(数组);
}
检查返回离开舰队
_fleets美元= doQuery(SELECT * FROM { {表} } where'fleet_end_time(时间)< =。;
每个治疗周期/舰队
而($行= mysql_fetch_array($ _fleets)){
数组=();
数组{ 'galaxy} = { } 'fleet_end_galaxy美元的行;
数组{系统} = { } 'fleet_end_system美元的行;
数组{ 'planet} = { } 'fleet_end_planet美元的行;
数组{ 'planet_type} = { } 'fleet_end_type美元的行;
舰队处理功能
$温度= flyingfleethandler(数组);
}


正如你所看到的,这个部分前面的代码写得不好,因为每次都会调用它,而且效率太低了,因此我们可以在这里优化它,这样每个周期只需要一个ID的ID来发送给函数,并且相应的函数应该被修改和修改。

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


锁定表,防止出现数据同步问题。
doQuery(锁表{ {表} } { {表}苦写,RW写},
{ { } }错误写入,{ } }消息写入,{ { } }舰队写入,
{ { }行星写入,{ } }星系写入,{ } }用户写
大段是在这里制作的,数组参数可以使用舰队,舰队ID,优化。
qryfleet美元=SELECT * FROM { {表} };
qryfleet美元=哪里(;
qryfleet美元(;
qryfleet美元=` fleet_start_galaxy `星球'galaxy'} {美元。和;
qryfleet美元=` `行星系统的fleet_start_system美元{ }。和=;
qryfleet美元=` fleet_start_planet `星球'planet'} {美元。和;
qryfleet美元=` fleet_start_type ` =。地球'planet_type'} { $ ;
qryfleet美元(或);
qryfleet美元=` fleet_end_galaxy `星球'galaxy'} {美元。和;
qryfleet美元=` `行星系统的fleet_end_system美元{ }。和=;
qryfleet美元=` fleet_end_planet ` ={ }和星球'planet美元。;
qryfleet美元=` fleet_end_type ` ={ } 'planet_type美元的星球。和;
qryfleet美元=(` fleet_start_time ` <时间)。。(或` fleet_end_time ` (时间)。',');;
fleetquery美元= doQuery(qryfleet美元,'fleets);
根据不同的目标舰队活动,分别在不同的处理函数中
而($ currentfleet = mysql_fetch_array($ fleetquery)){
开关($ currentfleet {fleet_mission )){
案例1:
一般攻击
missioncaseattack($ currentfleet);
打破;
案例2:
这里应该是ACS攻击或其他攻击,但现在没有使用。
doQuery(删除{ {表} }在` fleet_id ` =。currentfleet美元'fleet_id'} {。
打破;
案例3:
/运输
missioncasetransport($ currentfleet);
打破;
案例4:
发送
missioncasestay($ currentfleet);
打破;
案例5:
ACS联合调度,防御
missioncasestayally($ currentfleet);
打破;
案例6:
/调查
missioncasespy($ currentfleet);
打破;
案例7:
/殖民地
missioncasecolonisation($ currentfleet);
打破;
案例8:
恢复
missioncaserecycling($ currentfleet);
打破;
案例9:
销毁月份。
missioncasedestruction($ currentfleet);
打破;
案例10:
预订!!

打破;
案例15:
探险探险
missioncaseexpedition($ currentfleet);
打破;
删除其他的/舰队,这是一个好习惯。
默认值:{
doQuery(删除{ {表} }在` fleet_id ` =。currentfleet美元'fleet_id'} {。
}
}
}
解锁/表
doQuery(解锁表


上面的函数是清晰的,代码是清晰的,注释是清晰的。