Xnova(OGAME)PHP网页游戏学习源代码的解释(十六)
十九、攻击任务(missioncaseattack php)根据舰队任务的数量,第一个任务是攻击任务,代码很长,你必须耐心等待。
这不是一个很大的参考,并给出详细的说明,读者不会头晕。
功能missioncaseattack($ fleetrow)
{
全球用户phpex美元,美元,美元的价目表,xnova_root_path美元,美元美元美元的资源,combatcaps郎;
在记录/舰队,fleet_start_time不是出发时间抵达时间的代表,但
出发的时间是start_time / /代表
除了fleet_end_time / /这是回家的时间
这是 / / fleet_end_stay最后停留(联防和远征任务将使用)
因此,舰队的目标是到达目的地,而不是舰队。
如果($ fleetrow { 'fleet_start_time ' })(<=时间){
/ / fleet_mess用来记录舰队的状态,这可以理解为在三月或返航
但是感觉不好用,如果只有两种状态,可以用真和假来记录。
因此,我将它设置为0, 1, 2,三,以保持任务,保持在第三状态。
如果($ fleetrow { } = = 0 'fleet_mess){
这个判断是:存在测试数据存储文件。
如果文件不存在,将中断操作,提示管理员。
如果(!isset($ combatcaps { 202 } {高' })){
消息()。'sys_no_vars'} { $郎。
}
这里是一系列的键/启动数据库查询,既能获得攻防机群的数量和科技水平。
根据获得的资料,防御舰队/行星数据
qrytargetplanet美元=SELECT * FROM { {表} };
qrytargetplanet美元= ,;
$QryTargetPlanet = `galaxy` = $FleetRow{'fleet_end_galaxy'}. ;
qrytargetplanet美元=`系统` = { 'fleet_end_system fleetrow美元}。 ;
qrytargetplanet美元=`行星` = { 'fleet_end_planet fleetrow美元}。 ;
qrytargetplanet美元= ` planet_type ` = { } fleetrow美元'fleet_end_type'。;
targetplanet美元= doQuery(qrytargetplanet美元,'planets ',真的);
targetuserid美元美元'id_ownertargetplanet { } =;
根据所获得的信息攻击舰队信息
qrycurrentuser美元=SELECT * FROM { {表} };
qrycurrentuser美元= ,;
qrycurrentuser美元= ` ID ` = { } fleetrow美元'fleet_owner'。;
中美元= doQuery(qrycurrentuser美元,'users ',真的);
美元美元currentUserId =中{ 'id' };
拥有行星数据的所有者行星
qrytargetuser美元=SELECT * FROM { {表} };
qrytargetuser美元= ,;
qrytargetuser美元= ` ID ` = targetuserid美元。;
targetuser美元= doQuery(qrytargetuser美元,'users ',真的);
然后获取技术信息/
事实上,以下两个可以与上述两个查询一起
qrytargettech美元= 选择;
qrytargettech美元` military_tech `,` defence_tech `,` shield_tech ` ;
qrytargettech美元=从{ { } }表;
qrytargettech美元= ,;
qrytargettech美元= ` ID ` = targetuserid美元。;
targettechno美元= doQuery(qrytargettech美元,'users ',真的);
qrycurrenttech美元= 选择;
qrycurrenttech美元` military_tech `,` defence_tech `,` shield_tech ` ;
qrycurrenttech美元=从{ { } }表;
qrycurrenttech美元= ,;
qrycurrenttech美元= ` ID ` = currentUserId美元。;
currenttechno美元= doQuery(qrycurrenttech美元,'users ',真的);
如果有其他因素影响项目的测量(如舰队指挥官等),也应在此处取出。
/代国防舰队(防御)
如果考虑在这个星球上联合防御也应该派出一个联合防御舰队的提取物。
然后计算科技水平和数量。
为($ SETITEM = 200;$ SETITEM 0){
targetset { } { SETITEM美元美元'} = { count targetplanet美元美元美元资源{ } } SETITEM;
}
}
攻击者 / /代舰队,同时随着存储阵列。'fleet_array'can不能直接使用。
这个字段的结构是数字、数字、数字;……
因此,使用需要使用两次爆炸将其分解,然后存入数组中。
车队=爆炸(美元;
foreach($船队美元= $){
如果(b)!=){
$ =爆炸()
为实现{ $ { 0 } } { count} = $ { 1 };
}
}
包括战斗引擎,准备战斗
include_once(xnova_root_path美元。'包含用于在有/ ataki。。phpex美元);
在输入信息之前的捕获时间
时间=瞬时(美元);
$时间=爆炸(
美元美元的时间=时间{ 1 } + $时间{ 0 };
StartTime =美元美元的时间;
双方将 / /舰队和战斗引擎技术的输入,并使用$沃尔卡记录输出结果
$沃尔卡=沃尔卡($ CurrentSet,targetset美元,美元currenttechno美元,targettechno);
然后,获取时间,争取时间的战斗。
原点是 / /战斗报告x.xxxxxxxxxx秒
时间=瞬时(美元);
$时间=爆炸(
美元美元的时间=时间{ 1 } + $时间{ 0 };
结果=时间美元美元;
$totaltime = ($endtime - $starttime);
剩下的舰队分别使用一个单独的数组来记录攻击信息,
CurrentSet美元美元=atakujacy沃尔卡{};
/……防御信息的舰队,
targetset美元美元沃尔卡{ =了};
/……战斗的结果,战斗的结果,
fleetresult美元美元沃尔卡{ =wygrana};
/……每轮的细节,
dane_do_rw美元美元沃尔卡{ =dane_do_rw};
损失和双方之间的废墟
zlom美元美元沃尔卡{ =zlom};
其余的攻击单元,加载的方式将包含在
= $ fleetarray ;
fleetamount = 0美元;
fleetstorage = 0美元;
foreach(CurrentSet美元美元船= $count){
fleetstorage美元美元美元价格表} { = {船容量} { } * $计数count;
fleetarray美元/ /舰队的记录,转换成数据库格式存储
fleetarray美元。为船。$count { count}。
fleetamount美元=美元计数的计数{ };
}
fleetstorage美元美元fleetrow { =fleet_resource_metal};
fleetstorage美元美元fleetrow { =fleet_resource_crystal};
fleetstorage美元美元fleetrow { =fleet_resource_deuterium};
战后星球防御{计算}
= $ targetplanetupd ;
如果(!is_null($ targetset)){
foreach(targetset美元美元美元船=计数){
targetplanetupd美元=` 。$ { }。` = $计数{ count}。
}
}
如果为攻击者的胜利结果,开始掠夺资源的较低的情况计算。
Here you can enter PlanetResourceUpdate.php / / include, to update the target planet in plundering the resources before
为挖掘制造} = 0 {;
为挖掘'crystal} = { 0;
为挖掘'deuter} = { 0;
如果($ fleetresult = =一){
如果($ fleetstorage > 0){
金属targetplanet美元美元制造的} { / 2;
水晶= { 'crystal targetplanet美元美元的} / 2;
Deuter美元美元targetplanet { =氘} / 2;
如果(($金属)> $ fleetstorage / 3){
{ } =美元制造的挖掘fleetstorage / 3美元;
fleetstorage =美元美元美元制造的fleetstorage挖掘{ };
{人}
{ } =挖掘制造美元美元的金属;
fleetstorage =美元美元美元制造的fleetstorage挖掘{ };
}
如果(($晶体)> $ fleetstorage / 2){
为挖掘'crystal} = { $ fleetstorage / 2;
fleetstorage美元美元美元= fleetstorage挖掘{ 'crystal};
{人}
为挖掘'crystal} = { $晶体;
fleetstorage美元美元美元= fleetstorage挖掘{ 'crystal};
}
如果(($ Deuter)> $ fleetstorage){
为挖掘'deuter} = { fleetstorage美元;
fleetstorage美元美元美元= fleetstorage挖掘{ 'deuter};
{人}
为挖掘'deuter} = { $多特;
fleetstorage美元美元美元= fleetstorage挖掘{ 'deuter};
}
}
}
向上箭头/到目前为止是计算的结束,但如果恒星是在金属巨人,但晶体和几乎没有氘。
以及将安装1个 3位置的金属,剩余的2 3的所有空缺位置。
所以考虑一下你自己的方法,改善外表,并不困难。
{ } =挖掘制造的美元(美元开采制造的圆{ });
{ } =挖掘'crystal美元(合采{ 'crystal轮});
{ } =挖掘'deuter美元(合采{ 'deuter轮});
密钥:更新数据库
qryupdatetarget美元={ } } {表更新设置;
qryupdatetarget = targetplanetupd美元美元;
qryupdatetarget美元= `金属` = `金属` '制造' } { $挖掘。
qryupdatetarget美元= `晶体` = `晶体`的挖掘'crystal'} {美元。
qryupdatetarget美元= `氘氘` = ` `的挖掘'deuter'} {美元。;
qryupdatetarget美元= ,;
qryupdatetarget美元=`银河` =美元fleetrow { 'fleet_end_galaxy}。 ;
qryupdatetarget美元=`系统` = { 'fleet_end_system fleetrow美元}。 ;
qryupdatetarget美元=`行星` = { 'fleet_end_planet fleetrow美元}。 ;
qryupdatetarget美元= ` planet_type ` = { } fleetrow美元'fleet_end_type'。;
qryupdatetarget限1美元;;
doQuery($ qryupdatetarget,'planets);
qryupdategalaxy美元={ } } {表更新设置;
qryupdategalaxy美元= `金属` = `金属` + $ zlom { }制造'。;
qryupdategalaxy美元= `晶体` = `晶体` + $ zlom { 'crystal}。;
qryupdategalaxy美元= ,;
qryupdategalaxy美元=`银河` =美元fleetrow { 'fleet_end_galaxy}。 ;
qryupdategalaxy美元=`系统` = { 'fleet_end_system fleetrow美元}。 ;
qryupdategalaxy美元= `行星` = { } fleetrow美元'fleet_end_planet'。;
qryupdategalaxy限1美元;;
doQuery($ qryupdategalaxy,'galaxy);
关键词:废墟和计算的损失
fleetdebris美元=美元制造的zlom { } { } 'crystal zlom + $ ';
strattackerunits美元= sprintf($郎{ 'sys_attacker_lostunits},pretty_number($ zlom {atakujacy ))))
strdefenderunits美元= sprintf($郎{ 'sys_defender_lostunits},pretty_number($ zlom {了))))
strruins美元= sprintf($郎{ 'sys_gcdrunits},pretty_number($ zlom {金属)){ },郎制造的美元,pretty_number($ zlom { 'crystal},{ 'crystal美元)郎'});
debrisfield = strattackerunits美元美元。。strdefenderunits美元。strruins美元。;
下生产概率计算月
moonchance美元=美元fleetdebris / 100000;
如果($ fleetdebris > 2000000){
moonchance = 20美元;
}
如果($ fleetdebris = 100000){
userchance美元= mt_rand(1, 100);
chancemoon美元= sprintf($郎{ 'sys_moonproba},moonchance美元);
}
如果RP足够好,可以产生月球。当然,前提是月球没有这个坐标。
如果(($ userchance > 0)和(userchance美元美元moonchance){
......
}
键:/从这里开始生成战斗报告,很长,但并不复杂
attackdate美元=日期(R
$标题= sprintf($LANG { 'sys_attack_title},attackdate美元);
关系= 美元。$标题。;
zniszczony美元= false;
a_zestrzelona = 0美元;
把进攻和防御信息都记下来。如果还有其他的测量方法也可以影响舰队在这里添加。
当然,这里的数据显示在战场上,不会影响实际的战斗岛。
attacktechon美元{'a' } $ currenttechno { =military_tech}×10;
attacktechon美元{ B } $ currenttechno { =defence_tech}×10;
attacktechon美元{ C } $ currenttechno { =shield_tech}×10;
attackerdata美元= sprintf($郎{ 'sys_attack_attacker_pos},{中美元的用户名),fleetrow美元{ 'fleet_start_galaxy},{ 'fleet_start_system fleetrow美元},{ 'fleet_start_planet fleetrow美元}。
attackertech美元= sprintf($郎{ 'sys_attack_techologies},attacktechon美元{'a' },{ } attacktechon美元B,C attacktechon美元{ });
defendtechon美元{'a' } $ targettechno { =military_tech}×10;
defendtechon美元{ B } $ targettechno { =defence_tech}×10;
defendtechon美元{ C } $ targettechno { =shield_tech}×10;
defenderdata美元= sprintf($郎{ 'sys_attack_defender_pos},{ targetuser美元用户名),fleetrow美元{ 'fleet_end_galaxy},{ 'fleet_end_system fleetrow美元},{ 'fleet_end_planet fleetrow美元}。
defendertech美元= sprintf($郎{ 'sys_attack_techologies},defendtechon美元{'a' },{ } defendtechon美元B,C defendtechon美元{ });
根据每回合的战斗细节生成细节,包括每个回合的攻防价值,以及吸收造成的多大伤害。
有一些键可能需要看战斗引擎会明白它代表什么,所以不能阅读,也不要介意在这里。
foreach(dane_do_rw美元美元= $){
......
}
根据结果的结果,在这里显示相应的结束
开关($ fleetresult){
......
}
/ /战斗报告生成x.xxxxxxxxxxxx秒
simmessage美元= sprintf($郎{ 'sys_rapport_build_time},总美元);
报告simmessage美元美元= ;
下一层将战斗/报告编码,存储在数据库中。
$ dpath =(!用户名,{dpath})default_skinpath:用户名,{dpath};
为摆脱= MD5($报告);
qryinsertrapport美元=插入表} } { {集;
qryinsertrapport美元= unix_timestamp(`时间`)
qryinsertrapport美元= ` id_owner1 ` = { } fleetrow美元'fleet_owner'。;
qryinsertrapport美元= ` id_owner2 ` = targetuserid美元。;
qryinsertrapport美元= `摆脱摆脱` =美元。;
qryinsertrapport美元= ` a_zestrzelona ` = a_zestrzelona美元。;
qryinsertrapport美元=`报告` = addslashes 。($报告)。;
doQuery($ qryinsertrapport,'rw);
这是这里的问题: / /游戏玩家的消息,其中有一个onclick链接到上述
以下是攻击,根据战斗结果,标题也有不同的颜色。
= $ 关系;
$报告;
如果($ fleetresult = =一){
$报告;
} elseif($ fleetresult = = R){
$报告;
} elseif($ fleetresult = = W){
$报告;
}
报告......美元
下来这里/突然回到攻击舰队的资源承载能力计算,实际上可以去上面。
{ } =美元制造的挖掘挖掘{ } +美元制造的fleetrow美元{fleet_resource_metal};
为挖掘'crystal} = { } { 'crystal美元的采矿+ $ fleetrow {fleet_resource_crystal};
为挖掘'deuter} = { } { 'deuter美元的采矿+ $ fleetrow {fleet_resource_deuterium};
舰队信息更新
qryupdatefleet美元={ } } {表更新设置;
qryupdatefleet美元= ` fleet_amount ` = fleetamount美元。;
qryupdatefleet美元= ` fleet_array ` = fleetarray美元。;
qryupdatefleet美元= ` fleet_mess ` = 1、;
qryupdatefleet美元= ` fleet_resource_metal ` = $挖掘{制造}。;
qryupdatefleet美元= ` fleet_resource_crystal ` = { } 'crystal美元挖掘的。;
qryupdatefleet美元= ` fleet_resource_deuterium ` = { } 'deuter美元挖掘的。;
qryupdatefleet美元=在fleet_id = $ fleetrow { } 'fleet_id'。;
qryupdatefleet限1美元;;
doQuery($ qryupdatefleet,'fleets);
向攻击者发送信息
sendsimplemessage(currentUserId美元,美元fleetrow { 'fleet_start_time},3,朗{ 'sys_mess_tower美元'},{ } 'sys_mess_attack_report郎美元的关系,美元);
突然在这里开始了战斗经验和战斗的计算。
对编写此文件的编码器的严重怀疑是不喝醉的。
美元美元'xpraid中加入点光源= { } + 1;
qryupdateofficier美元={ } } {表更新设置;
qryupdateofficier美元= ` xpraid ` = $加入点光源。;
qryupdateofficier美元=id是currentUserId美元。;
qryupdateofficier限1美元;;
doQuery($ qryupdateofficier,'users);
raidstotal =美元美元中'raids'} { + 1;
如果($ fleetresult = =一){
raidswin =美元美元中'raidswin'} { + 1;
qryupdateraidscompteur美元={ } } {表更新设置;
qryupdateraidscompteur美元=` raidswin ` raidswin美元。=
qryupdateraidscompteur美元=`突袭` raidstotal美元。=;
qryupdateraidscompteur美元=id是currentUserId美元。;
qryupdateraidscompteur限1美元;;
doQuery($ qryupdateraidscompteur,'users);
} elseif($ fleetresult = =R| | fleetresult美元=W){
raidsloose =美元美元中'raidsloose'} { + 1;
qryupdateraidscompteur美元={ } } {表更新设置;
qryupdateraidscompteur美元=` raidswin ` raidsloose美元。=
qryupdateraidscompteur美元=`突袭` raidstotal美元。=;
qryupdateraidscompteur美元=id是currentUserId美元。;
qryupdateraidscompteur限1美元;;
doQuery($ qryupdateraidscompteur,'users);
}
关键字:返回并开始向消息的防御方写入
= $ raport2 ;
raport2美元;
如果($ fleetresult = =一){
raport2美元;
} elseif($ fleetresult = = R){
raport2美元;
} elseif($ fleetresult = = W){
raport2美元;
}
raport2美元=美元'sys_mess_attack_report郎{ }。{。fleetrow美元'fleet_end_galaxy'} {。。fleetrow美元{ 'fleet_end_system}。:fleetrow美元{ 'fleet_end_planet}};
sendsimplemessage(targetuserid美元,美元'fleet_start_timefleetrow { },3,朗{ 'sys_mess_tower美元'},{ 'sys_mess_attack_report $LANG'},raport2美元);
}
如果飞机从这里降落,飞机就开始卸载、储存。
= $ fquery ;
如果($ fleetrow { 'fleet_end_time} $count){
fquery美元=` 。$ { }。。$ { }。‘+''} { $计数计数。
}
{人}
舰队=爆炸();
foreach($舰队美元= $){
如果(b)!=){
$ =爆炸()
fquery美元= { $资源{ $ { 0 } } } = { $资源{ $ { 0 } } } + { $ { 1 } },;
}
}
}
最后,不要忘了删除这个记录或一个舰队,它总是占据通道,其他舰队任务也是一样的。
doQuery(删除{ {表} }在` fleet_id ` =。fleetrow美元{fleet_id},'fleets);
(如果!($ fleetresult = =W)){
qryupdateplanet美元={ } } {表更新设置;
qryupdateplanet = fquery美元美元;
qryupdateplanet美元= `金属` = `金属` +。fleetrow美元{ 'fleet_resource_metal}
qryupdateplanet美元= `晶体` = ` ` +水晶。fleetrow美元{ 'fleet_resource_crystal}
qryupdateplanet美元= `氘氘` = ` ` +。fleetrow美元{ 'fleet_resource_deuterium} ;
qryupdateplanet美元= ,;
qryupdateplanet美元=`银河` fleetrow美元{ 'fleet_start_galaxy}。和;
qryupdateplanet美元=`系统` fleetrow美元{ 'fleet_start_system}。和;
qryupdateplanet美元=`行星` fleetrow美元{ 'fleet_start_planet}。和;
qryupdateplanet美元=` planet_type ` =$ fleetrow { 'fleet_start_type}限制。1;;
doQuery($ qryupdateplanet,'planets);
}
}
}
}