Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
phpdts
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Nemo Ma
phpdts
Commits
4d4c0c2f
Commit
4d4c0c2f
authored
Feb 06, 2023
by
hisuinohoshi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rev combat phase 2.33
还……还没有新东西……
parent
b43c145b
Changes
17
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
636 additions
and
367 deletions
+636
-367
command.php
command.php
+1
-1
game.php
game.php
+1
-1
gamedata/cache/combatcfg_1.php
gamedata/cache/combatcfg_1.php
+11
-4
gamedata/cache/style_20190718.css
gamedata/cache/style_20190718.css
+1
-1
include/game.func.php
include/game.func.php
+1
-0
include/game/attr.func.php
include/game/attr.func.php
+9
-1
include/game/combat.func.php
include/game/combat.func.php
+5
-24
include/game/itemmain.func.php
include/game/itemmain.func.php
+35
-16
include/game/revattr.func.php
include/game/revattr.func.php
+142
-87
include/game/revattr_extra.func.php
include/game/revattr_extra.func.php
+59
-48
include/game/revbattle.func.php
include/game/revbattle.func.php
+25
-10
include/game/revcombat.func.php
include/game/revcombat.func.php
+325
-112
include/game/search.func.php
include/game/search.func.php
+3
-3
include/global.func.php
include/global.func.php
+13
-11
include/news.func.php
include/news.func.php
+3
-1
include/state.func.php
include/state.func.php
+1
-46
templates/default/profile.htm
templates/default/profile.htm
+1
-1
No files found.
command.php
View file @
4d4c0c2f
...
@@ -446,7 +446,7 @@ if($hp > 0){
...
@@ -446,7 +446,7 @@ if($hp > 0){
else
else
{
{
include_once
GAME_ROOT
.
'./include/game/revcombat.func.php'
;
include_once
GAME_ROOT
.
'./include/game/revcombat.func.php'
;
rev_combat_prepare
(
$pdata
,
$edata
,
1
,
$command
);
rev_combat_prepare
(
$pdata
,
$edata
,
1
,
$command
,
$message
);
}
}
}
elseif
(
$mode
==
'rest'
)
{
}
elseif
(
$mode
==
'rest'
)
{
include_once
GAME_ROOT
.
'./include/state.func.php'
;
include_once
GAME_ROOT
.
'./include/state.func.php'
;
...
...
game.php
View file @
4d4c0c2f
...
@@ -108,7 +108,7 @@ elseif((strpos($action,'neut')===0)){
...
@@ -108,7 +108,7 @@ elseif((strpos($action,'neut')===0)){
$result
=
$db
->
query
(
"SELECT * FROM
{
$tablepre
}
players WHERE pid='
$nid
' AND hp>0"
);
$result
=
$db
->
query
(
"SELECT * FROM
{
$tablepre
}
players WHERE pid='
$nid
' AND hp>0"
);
if
(
$db
->
num_rows
(
$result
)
>
0
){
if
(
$db
->
num_rows
(
$result
)
>
0
){
$edata
=
$db
->
fetch_array
(
$result
);
$edata
=
$db
->
fetch_array
(
$result
);
include_once
GAME_ROOT
.
'./include/game/rev
combat
.func.php'
;
include_once
GAME_ROOT
.
'./include/game/rev
battle
.func.php'
;
findneut
(
$edata
,
1
);
findneut
(
$edata
,
1
);
extract
(
$edata
,
EXTR_PREFIX_ALL
,
'w'
);
extract
(
$edata
,
EXTR_PREFIX_ALL
,
'w'
);
init_battle
(
1
);
init_battle
(
1
);
...
...
gamedata/cache/combatcfg_1.php
View file @
4d4c0c2f
...
@@ -39,11 +39,18 @@ $pose_defend_modifier = Array(0,25,0,-25,-50,-50,-466);
...
@@ -39,11 +39,18 @@ $pose_defend_modifier = Array(0,25,0,-25,-50,-50,-466);
$tactic_attack_modifier
=
Array
(
0
,
20
,
-
25
,
25
,
-
50
);
$tactic_attack_modifier
=
Array
(
0
,
20
,
-
25
,
25
,
-
50
);
//应战策略对防御力的加成(单位:百分比加算)
//应战策略对防御力的加成(单位:百分比加算)
$tactic_defend_modifier
=
Array
(
0
,
-
20
,
50
,
-
25
,
0
);
$tactic_defend_modifier
=
Array
(
0
,
-
20
,
50
,
-
25
,
0
);
//场景对攻击力的加成(单位:百分比加算)
//场景对攻击力的加成(单位:百分比加算) wtf
$pls_attack_modifier
=
Array
(
0
,
0
,
0
,
0
,
0
,
0
,
10
,
0
,
0
,
-
10
,
0
,
0
,
0
,
0
,
-
10
,
0
,
0
,
0
,
10
,
0
,
0
,
0
);
$pls_attack_modifier
=
Array
(
// 无月 端点 RF高 雪镇 索拉 指挥 梦幻 清水 白穗 墓地 麦斯 对天 夏镇 三体 光坂 守矢 常林 常高 秋镇 精灵 春镇 圣G 初始 幻想 永恒 妖精 冰封 花菱 FARG 风祭 格纳 和田 SCP 雏菊 英灵
10
,
0
,
0
,
-
5
,
0
,
5
,
5
,
-
5
,
-
5
,
5
,
0
,
-
15
,
-
5
,
0
,
-
10
,
0
,
0
,
5
,
-
5
,
-
15
,
-
5
,
0
,
0
,
0
,
0
,
0
,
10
,
-
10
,
5
,
0
,
0
,
0
,
-
20
,
0
,
15
// 0, 0, 0, 0, 0, 0, 10, 0, 0, -10, 0, 0, 0, 0, -10, 0, 0, 0, 10, 0, 0, 0
);
//场景对防御力的加成(单位:百分比加算)
//场景对防御力的加成(单位:百分比加算)
$pls_defend_modifier
=
Array
(
0
,
-
10
,
10
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
-
10
,
10
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
10
,
0
);
$pls_defend_modifier
=
Array
(
// 无月 端点 RF高 雪镇 索拉 指挥 梦幻 清水 白穗 墓地 麦斯 对天 夏镇 三体 光坂 守矢 常林 常高 秋镇 精灵 春镇 圣G 初始 幻想 永恒 妖精 冰封 花菱 FARG 风祭 格纳 和田 SCP 雏菊 英灵
0
,
-
10
,
0
,
0
,
-
10
,
0
,
0
,
0
,
0
,
0
,
-
10
,
5
,
0
,
-
10
,
0
,
0
,
5
,
0
,
0
,
0
,
0
,
0
,
-
10
,
-
10
,
-
10
,
0
,
0
,
0
,
5
,
5
,
5
,
0
,
0
,
-
5
,
0
// 0, -10, 10, 0, 0, 0, 0, 0, 0, 0, 0, -10, 10, 0, 0, 0, 0, 0, 0, 0, 10, 0
);
//各种攻击方式可能导致受伤的部位
//各种攻击方式可能导致受伤的部位
$infatt
=
Array
(
'N'
=>
'bhaf'
,
'P'
=>
'bhaf'
,
'K'
=>
'bhaf'
,
'G'
=>
'bhaf'
,
'C'
=>
'bhaf'
,
'D'
=>
'bhaf'
,
'F'
=>
'bhaf'
,
'J'
=>
'bhaf'
);
$infatt
=
Array
(
'N'
=>
'bhaf'
,
'P'
=>
'bhaf'
,
'K'
=>
'bhaf'
,
'G'
=>
'bhaf'
,
'C'
=>
'bhaf'
,
'D'
=>
'bhaf'
,
'F'
=>
'bhaf'
,
'J'
=>
'bhaf'
);
//各种攻击方式可能导致受伤的部位
//各种攻击方式可能导致受伤的部位
...
...
gamedata/cache/style_20190718.css
View file @
4d4c0c2f
...
@@ -371,7 +371,7 @@ span[tooltip]:hover:before {
...
@@ -371,7 +371,7 @@ span[tooltip]:hover:before {
text-shadow
:
3px
3px
3px
#3b3535
;
text-align
:
center
;
text-fill-color
:
white
;
-webkit-text-fill-color
:
white
;
text-shadow
:
3px
3px
3px
#3b3535
;
text-align
:
center
;
text-fill-color
:
white
;
-webkit-text-fill-color
:
white
;
background-size
:
0
;
background-clip
:
border-box
;
background-color
:
rgba
(
198
,
114
,
199
,
0.8
);
background-size
:
0
;
background-clip
:
border-box
;
background-color
:
rgba
(
198
,
114
,
199
,
0.8
);
top
:
20px
;
left
:
-5px
;
border-radius
:
2px
;
top
:
20px
;
left
:
-5px
;
border-radius
:
2px
;
width
:
160px
;
max-width
:
160px
;
z-index
:
3
;
position
:
absolute
;
width
:
160px
;
max-width
:
160px
;
z-index
:
3
;
position
:
absolute
;
z-index
:
5
;
}
}
/*==========下拉菜单样式==========*/
/*==========下拉菜单样式==========*/
...
...
include/game.func.php
View file @
4d4c0c2f
...
@@ -496,6 +496,7 @@ function current_player_save(){
...
@@ -496,6 +496,7 @@ function current_player_save(){
global
$$key
;
global
$$key
;
$pdata
[
$key
]
=
$$key
;
$pdata
[
$key
]
=
$$key
;
}
}
$pdata
=
player_format_with_db_structure
(
$pdata
);
$db
->
array_update
(
"
{
$tablepre
}
players"
,
$pdata
,
"pid='
$pid
'"
);
$db
->
array_update
(
"
{
$tablepre
}
players"
,
$pdata
,
"pid='
$pid
'"
);
return
$pdata
;
return
$pdata
;
}
}
...
...
include/game/attr.func.php
View file @
4d4c0c2f
...
@@ -19,7 +19,12 @@ function get_find_r($weather = 0,$pls = 0,$pose = 0,$tactic = 0,$club = 0,$inf =
...
@@ -19,7 +19,12 @@ function get_find_r($weather = 0,$pls = 0,$pose = 0,$tactic = 0,$club = 0,$inf =
(
(
'weather'
=>
array
(
10
,
20
,
0
,
-
2
,
-
3
,
-
10
,
-
7
,
5
,
-
10
,
-
20
,
0
,
-
7
,
-
5
,
-
30
,
-
5
,
-
20
,
0
,
20
),
'weather'
=>
array
(
10
,
20
,
0
,
-
2
,
-
3
,
-
10
,
-
7
,
5
,
-
10
,
-
20
,
0
,
-
7
,
-
5
,
-
30
,
-
5
,
-
20
,
0
,
20
),
//'weather' => array(10,20,0,-2,-3,-7,-10,-5,10,0,0,-7,-5,-30),
//'weather' => array(10,20,0,-2,-3,-7,-10,-5,10,0,0,-7,-5,-30),
'pls'
=>
array
(
10
,
0
,
0
,
10
,
-
10
,
10
,
0
,
10
,
-
10
,
0
,
10
,
0
,
0
,
-
10
,
0
,
-
10
,
-
10
,
-
10
,
0
,
10
,
0
,
10
),
//'pls' => array(10,0,0,10,-10,10,0,10,-10,0,10,0,0,-10,0,-10,-10,-10,0,10,0,10),
'pls'
=>
Array
(
// 无月 端点 RF高 雪镇 索拉 指挥 梦幻 清水 白穗 墓地 麦斯 对天 夏镇 三体 光坂 守矢 常林 常高 秋镇 精灵 春镇 圣G 初始 幻想 永恒 妖精 冰封 花菱 FARG 风祭 格纳 和田 SCP 雏菊 英灵
20
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
10
,
0
,
20
// 10, 0, 0, 10, -10, 10, 0, 10, -10, 0, 10, 0, 0, -10, 0, -10, -10, -10, 0, 10, 0, 10
),
'pose'
=>
array
(
0
,
0
,
0
,
25
,
-
10
,
-
25
,
85
),
'pose'
=>
array
(
0
,
0
,
0
,
25
,
-
10
,
-
25
,
85
),
'tactic'
=>
array
(),
'tactic'
=>
array
(),
);
);
...
@@ -72,6 +77,9 @@ function get_active_r($weather = 0,$pls = 0,$pose = 0,$tactic = 0,$club = 0,$inf
...
@@ -72,6 +77,9 @@ function get_active_r($weather = 0,$pls = 0,$pose = 0,$tactic = 0,$club = 0,$inf
//echo 'active:'.$active_r.' ';
//echo 'active:'.$active_r.' ';
return
$active_r
;
return
$active_r
;
}
}
# 下面的部分在新版战斗流程中已弃用 #
//命中率修正
//命中率修正
function
get_hitrate
(
$wkind
=
'N'
,
$skill
=
0
,
$club
=
0
,
$inf
=
''
){
function
get_hitrate
(
$wkind
=
'N'
,
$skill
=
0
,
$club
=
0
,
$inf
=
''
){
global
$hitrate_obbs
,
$hitrate_max_obbs
,
$hitrate_r
,
$weather
,
$inf_htr_p
;
global
$hitrate_obbs
,
$hitrate_max_obbs
,
$hitrate_r
,
$weather
,
$inf_htr_p
;
...
...
include/game/combat.func.php
View file @
4d4c0c2f
...
@@ -159,8 +159,7 @@ function combat($active = 1, $wep_kind = '') {
...
@@ -159,8 +159,7 @@ function combat($active = 1, $wep_kind = '') {
$w_wep_kind
=
$w_w1
;
$w_wep_kind
=
$w_w1
;
}
}
$def_dmg
=
defend
(
$w_wep_kind
,
1
);
$def_dmg
=
defend
(
$w_wep_kind
,
1
);
if
(
get_single_clbpara
(
$clbpara
,
'revival_flag'
))
$revival_flag
=
get_single_clbpara
(
$clbpara
,
'revival_flag'
);
if
((
$hp
>
0
)
&&
(
$tactic
!=
4
)
&&
(
$pose
!=
5
))
{
if
((
$hp
>
0
)
&&
(
$tactic
!=
4
)
&&
(
$pose
!=
5
)
&&
!
$revival_flag
)
{
global
$rangeinfo
;
global
$rangeinfo
;
if
(
$rangeinfo
[
$wep_kind
]
>=
$rangeinfo
[
$w_wep_kind
]
&&
$rangeinfo
[
$w_wep_kind
]
!==
0
)
{
if
(
$rangeinfo
[
$wep_kind
]
>=
$rangeinfo
[
$w_wep_kind
]
&&
$rangeinfo
[
$w_wep_kind
]
!==
0
)
{
$counter
=
get_counter
(
$wep_kind
,
$tactic
,
$club
,
$inf
);
$counter
=
get_counter
(
$wep_kind
,
$tactic
,
$club
,
$inf
);
...
@@ -178,8 +177,6 @@ function combat($active = 1, $wep_kind = '') {
...
@@ -178,8 +177,6 @@ function combat($active = 1, $wep_kind = '') {
}
else
{
}
else
{
$log
.=
"<span class=
\"
red
\"
>你攻击范围不足,不能反击,逃跑了!</span><br>"
;
$log
.=
"<span class=
\"
red
\"
>你攻击范围不足,不能反击,逃跑了!</span><br>"
;
}
}
}
elseif
(
$revival_flag
)
{
//复活后不会反击,不发log
}
else
{
}
else
{
$log
.=
"<span class=
\"
red
\"
>你逃跑了!</span><br>"
;
$log
.=
"<span class=
\"
red
\"
>你逃跑了!</span><br>"
;
}
}
...
@@ -227,13 +224,6 @@ function combat($active = 1, $wep_kind = '') {
...
@@ -227,13 +224,6 @@ function combat($active = 1, $wep_kind = '') {
logsave
(
$w_pid
,
$now
,
$w_log
,
'b'
);
logsave
(
$w_pid
,
$now
,
$w_log
,
'b'
);
}
}
//注销复活标记
if
(
$revival_flag
)
{
unset
(
$revival_flag
);
$clbpara
=
del_clbpara
(
$clbpara
,
'revival_flag'
);
}
if
((
$att_dmg
>
$hdamage
)
&&
(
$att_dmg
>=
$def_dmg
))
{
if
((
$att_dmg
>
$hdamage
)
&&
(
$att_dmg
>=
$def_dmg
))
{
$hdamage
=
$att_dmg
;
$hdamage
=
$att_dmg
;
$hplayer
=
$name
;
$hplayer
=
$name
;
...
@@ -286,7 +276,6 @@ function combat($active = 1, $wep_kind = '') {
...
@@ -286,7 +276,6 @@ function combat($active = 1, $wep_kind = '') {
else
else
{
{
if
(
$w_type
==
0
){
$killnum
++
;};
if
(
$w_type
==
0
){
$killnum
++
;};
check_kill_events
(
$pid
,
$w_pid
);
$log
.=
npc_chat
(
$w_type
,
$w_name
,
'death'
);
$log
.=
npc_chat
(
$w_type
,
$w_name
,
'death'
);
include_once
GAME_ROOT
.
'./include/game/achievement.func.php'
;
include_once
GAME_ROOT
.
'./include/game/achievement.func.php'
;
...
@@ -1334,7 +1323,6 @@ function defend($w_wep_kind = 'N', $active = 0) {
...
@@ -1334,7 +1323,6 @@ function defend($w_wep_kind = 'N', $active = 0) {
$attack
=
$w_att
+
$watt
;
$attack
=
$w_att
+
$watt
;
$defend
=
checkdef
(
$def
,
$arbe
+
$arhe
+
$arae
+
$arfe
,
$w_att_key
);
$defend
=
checkdef
(
$def
,
$arbe
+
$arhe
+
$arae
+
$arfe
,
$w_att_key
);
$damage
=
get_original_dmg
(
'w_'
,
''
,
$attack
,
$defend
,
$w_wep_skill
,
$w_wep_kind
);
$damage
=
get_original_dmg
(
'w_'
,
''
,
$attack
,
$defend
,
$w_wep_skill
,
$w_wep_kind
);
if
(
$w_wep_kind
==
'F'
)
{
if
(
$w_wep_kind
==
'F'
)
{
...
@@ -1427,19 +1415,10 @@ function defend($w_wep_kind = 'N', $active = 0) {
...
@@ -1427,19 +1415,10 @@ function defend($w_wep_kind = 'N', $active = 0) {
include_once
GAME_ROOT
.
'./include/state.func.php'
;
include_once
GAME_ROOT
.
'./include/state.func.php'
;
$killmsg
=
death
(
$w_wep_kind
,
$w_name
,
$w_type
,
$w_wep_temp
);
$killmsg
=
death
(
$w_wep_kind
,
$w_name
,
$w_type
,
$w_wep_temp
);
$log
.=
npc_chat
(
$w_type
,
$w_name
,
'kill'
);
$log
.=
npc_chat
(
$w_type
,
$w_name
,
'kill'
);
global
$clbpara
;
if
(
$hp
>
0
)
if
(
$hp
>
0
&&
get_single_clbpara
(
$clbpara
,
'revival_flag'
))
{
$revival_flag
=
get_single_clbpara
(
$clbpara
,
'revival_flag'
);
if
(
$revival_flag
==
99
)
{
{
$log
.=
'<span class="yellow">由于你及时按了BOMB键,你原地满血复活了!</span><br>'
;
$log
.=
'<span class="yellow">由于你及时按了BOMB键,你原地满血复活了!</span><br>'
;
}
}
elseif
(
$revival_flag
==
17
)
{
$log
.=
"<span class=
\"
lime b
\"
>但是,空气中弥漫着的奥罗拉让你重新站了起来!</span><br>"
;
}
}
}
}
}
else
{
}
else
{
$damage
=
0
;
$damage
=
0
;
...
@@ -1475,6 +1454,7 @@ function get_original_dmg($w1, $w2, $att, $def, $ws, $wp_kind) {
...
@@ -1475,6 +1454,7 @@ function get_original_dmg($w1, $w2, $att, $def, $ws, $wp_kind) {
$att_pow
*=
$attfac
;
$att_pow
*=
$attfac
;
$def_pow
*=
$deffac
;
$def_pow
*=
$deffac
;
if
(
$def_pow
<=
0
){
$def_pow
=
0.01
;}
if
(
$def_pow
<=
0
){
$def_pow
=
0.01
;}
echo
"【DEBUG】原始伤害计算阶段:PA的基础攻击为
{
$att_pow
}
,PD的基础防御为
{
$def_pow
}
,"
;
$damage
=
(
$att_pow
/
$def_pow
)
*
$ws
*
$skill_dmg
[
$wp_kind
];
$damage
=
(
$att_pow
/
$def_pow
)
*
$ws
*
$skill_dmg
[
$wp_kind
];
$dfluc
=
$dmg_fluc
[
$wp_kind
];
$dfluc
=
$dmg_fluc
[
$wp_kind
];
...
@@ -1483,6 +1463,7 @@ function get_original_dmg($w1, $w2, $att, $def, $ws, $wp_kind) {
...
@@ -1483,6 +1463,7 @@ function get_original_dmg($w1, $w2, $att, $def, $ws, $wp_kind) {
$dmg_factor
=
(
100
+
rand
(
-
$dfluc
,
$dfluc
))
/
100
;
$dmg_factor
=
(
100
+
rand
(
-
$dfluc
,
$dfluc
))
/
100
;
$damage
=
round
(
$damage
*
$dmg_factor
*
rand
(
4
,
10
)
/
10
);
$damage
=
round
(
$damage
*
$dmg_factor
*
rand
(
4
,
10
)
/
10
);
echo
"【DEBUG】伤害浮动为
{
$dmg_factor
}
,原始伤害为
{
$damage
}
<br>"
;
return
$damage
;
return
$damage
;
}
}
...
...
include/game/itemmain.func.php
View file @
4d4c0c2f
...
@@ -1106,12 +1106,12 @@ function getcorpse($item){
...
@@ -1106,12 +1106,12 @@ function getcorpse($item){
return
;
return
;
}
}
//武器损耗&消耗计算:force_imp
强制扣除武器效果
//武器损耗&消耗计算:force_imp
:强制扣除武器效果;check_sk:是否在武器毁坏时重新检查属性数组$pa['ex_keys']
function
weapon_loss
(
&
$pa
,
$
force_imp
=
0
)
function
weapon_loss
(
&
$pa
,
$
hurtvalue
,
$force_imp
=
0
,
$check_sk
=
0
)
{
{
global
$log
,
$wepimprate
,
$nosta
;
global
$log
,
$wepimprate
,
$nosta
;
if
(
isset
(
$pa
[
'wep_imp_times'
])
&&
$pa
[
'wep_imp_times'
]
>
0
&&
$pa
[
'wep_kind'
]
!=
'N'
)
if
(
$hurtvalue
>
0
&&
$pa
[
'wep_kind'
]
!=
'N'
)
{
{
$wep_loss_flag
=
0
;
$wep_loss_flag
=
0
;
//获取武器损耗类型
//获取武器损耗类型
...
@@ -1121,13 +1121,13 @@ function weapon_loss(&$pa,$force_imp=0)
...
@@ -1121,13 +1121,13 @@ function weapon_loss(&$pa,$force_imp=0)
{
{
if
(
$pa
[
'weps'
]
==
$nosta
||
$force_imp
)
if
(
$pa
[
'weps'
]
==
$nosta
||
$force_imp
)
{
{
$pa
[
'wepe'
]
=
max
(
0
,
$pa
[
'wepe'
]
-
$
pa
[
'wep_imp_times'
]
);
$pa
[
'wepe'
]
=
max
(
0
,
$pa
[
'wepe'
]
-
$
hurtvalue
);
$log
.=
"
{
$pa
[
'nm'
]
}
的
{
$pa
[
'wep'
]
}
的攻击力下降了
{
$pa
[
'wep_imp_times'
]
}
。
<br>"
;
if
(
!
$pa
[
'type'
])
$log
.=
"<span class='grey'>
{
$pa
[
'nm'
]
}
的
{
$pa
[
'wep'
]
}
的攻击力下降了
{
$hurtvalue
}
。</span>
<br>"
;
}
}
else
else
{
{
$pa
[
'weps'
]
=
max
(
0
,
$pa
[
'weps'
]
-
$
pa
[
'wep_imp_times'
]
);
$pa
[
'weps'
]
=
max
(
0
,
$pa
[
'weps'
]
-
$
hurtvalue
);
$log
.=
"
{
$pa
[
'nm'
]
}
的
{
$pa
[
'wep'
]
}
的耐久度下降了
{
$pa
[
'wep_imp_times'
]
}
。
<br>"
;
if
(
!
$pa
[
'type'
])
$log
.=
"<span class='grey'>
{
$pa
[
'nm'
]
}
的
{
$pa
[
'wep'
]
}
的耐久度下降了
{
$hurtvalue
}
。</span>
<br>"
;
}
}
if
(
empty
(
$pa
[
'weps'
])
||
empty
(
$pa
[
'wepe'
]))
if
(
empty
(
$pa
[
'weps'
])
||
empty
(
$pa
[
'wepe'
]))
{
{
...
@@ -1140,10 +1140,10 @@ function weapon_loss(&$pa,$force_imp=0)
...
@@ -1140,10 +1140,10 @@ function weapon_loss(&$pa,$force_imp=0)
{
{
if
(
$pa
[
'weps'
]
!=
$nosta
)
if
(
$pa
[
'weps'
]
!=
$nosta
)
{
{
$pa
[
'weps'
]
=
max
(
0
,
$pa
[
'weps'
]
-
$
pa
[
'wep_imp_times'
]
);
$pa
[
'weps'
]
=
max
(
0
,
$pa
[
'weps'
]
-
$
hurtvalue
);
if
(
$pa
[
'wep_kind'
]
==
'C'
||
$pa
[
'wep_kind'
]
==
'D'
||
$pa
[
'wep_kind'
]
==
'F'
)
if
(
$pa
[
'wep_kind'
]
==
'C'
||
$pa
[
'wep_kind'
]
==
'D'
||
$pa
[
'wep_kind'
]
==
'F'
)
{
{
$log
.=
"
{
$pa
[
'nm'
]
}
用掉了
{
$pa
[
'wep_imp_times'
]
}
个
{
$pa
[
'wep'
]
}
。
<br>"
;
if
(
!
$pa
[
'type'
])
$log
.=
"<span class='grey'>
{
$pa
[
'nm'
]
}
用掉了
{
$hurtvalue
}
个
{
$pa
[
'wep'
]
}
。</span>
<br>"
;
if
(
empty
(
$pa
[
'weps'
]))
if
(
empty
(
$pa
[
'weps'
]))
{
{
$log
.=
"
{
$pa
[
'nm'
]
}
的<span class=
\"
red
\"
>
{
$pa
[
'wep'
]
}
</span>用光了!<br>"
;
$log
.=
"
{
$pa
[
'nm'
]
}
的<span class=
\"
red
\"
>
{
$pa
[
'wep'
]
}
</span>用光了!<br>"
;
...
@@ -1152,7 +1152,7 @@ function weapon_loss(&$pa,$force_imp=0)
...
@@ -1152,7 +1152,7 @@ function weapon_loss(&$pa,$force_imp=0)
}
}
elseif
(
$pa
[
'wep_kind'
]
==
'G'
||
$pa
[
'wep_kind'
]
==
'J'
)
elseif
(
$pa
[
'wep_kind'
]
==
'G'
||
$pa
[
'wep_kind'
]
==
'J'
)
{
{
$log
.=
"
{
$pa
[
'nm'
]
}
的
{
$pa
[
'wep'
]
}
的弹药数减少了
{
$pa
[
'wep_imp_times'
]
}
。
<br>"
;
if
(
!
$pa
[
'type'
])
$log
.=
"<span class='grey'>
{
$pa
[
'nm'
]
}
的
{
$pa
[
'wep'
]
}
的弹药数减少了
{
$hurtvalue
}
。</span>
<br>"
;
if
(
empty
(
$pa
[
'weps'
]))
if
(
empty
(
$pa
[
'weps'
]))
{
{
$log
.=
"
{
$pa
[
'nm'
]
}
的<span class=
\"
red
\"
>
{
$pa
[
'wep'
]
}
</span>弹药用光了!<br>"
;
$log
.=
"
{
$pa
[
'nm'
]
}
的<span class=
\"
red
\"
>
{
$pa
[
'wep'
]
}
</span>弹药用光了!<br>"
;
...
@@ -1163,21 +1163,23 @@ function weapon_loss(&$pa,$force_imp=0)
...
@@ -1163,21 +1163,23 @@ function weapon_loss(&$pa,$force_imp=0)
}
}
if
(
$wep_loss_flag
)
if
(
$wep_loss_flag
)
{
{
//剔除武器属性
if
(
$check_sk
&&
!
empty
(
$pa
[
'wepsk'
]))
unset_ex_from_array
(
$pa
,
get_itmsk_array
(
$pa
[
'wepsk'
]));
$pa
[
'wep'
]
=
'拳头'
;
$pa
[
'wep_kind'
]
=
'N'
;
$pa
[
'wepk'
]
=
'WN'
;
$pa
[
'wep'
]
=
'拳头'
;
$pa
[
'wep_kind'
]
=
'N'
;
$pa
[
'wepk'
]
=
'WN'
;
$pa
[
'wepe'
]
=
0
;
$pa
[
'weps'
]
=
$nosta
;
$pa
[
'wepsk'
]
=
''
;
$pa
[
'wepe'
]
=
0
;
$pa
[
'weps'
]
=
$nosta
;
$pa
[
'wepsk'
]
=
''
;
return
-
1
;
return
-
1
;
}
}
unset
(
$pa
[
'wep_imp_times'
]);
}
}
return
;
return
;
}
}
//扣除指定装备的耐久。
$hurtkind 0=装备损坏文本 1=灵魂绑定消失文本
//扣除指定装备的耐久。
check_sk:是否在武器毁坏时重新检查属性数组$pa['ex_keys']
function
armor_hurt
(
&
$pa
,
$which
,
$hurtvalue
,
$
hurtkind
=
0
)
function
armor_hurt
(
&
$pa
,
$which
,
$hurtvalue
,
$
check_sk
=
0
)
{
{
global
$log
,
$nosta
;
global
$log
,
$nosta
;
if
(
isset
(
$pa
[
$which
.
's'
]))
if
(
!
empty
(
$pa
[
$which
.
's'
]))
{
{
//无限耐久的防具可以抵挡1次任意点损耗
//无限耐久的防具可以抵挡1次任意点损耗
if
(
$pa
[
$which
.
's'
]
==
$nosta
)
if
(
$pa
[
$which
.
's'
]
==
$nosta
)
...
@@ -1187,11 +1189,15 @@ function armor_hurt(&$pa,$which,$hurtvalue,$hurtkind=0)
...
@@ -1187,11 +1189,15 @@ function armor_hurt(&$pa,$which,$hurtvalue,$hurtkind=0)
//扣除耐久
//扣除耐久
$x
=
min
(
$pa
[
$which
.
's'
],
$hurtvalue
);
$x
=
min
(
$pa
[
$which
.
's'
],
$hurtvalue
);
$pa
[
$which
.
's'
]
=
$pa
[
$which
.
's'
]
-
$x
;
$pa
[
$which
.
's'
]
=
$pa
[
$which
.
's'
]
-
$x
;
$log
.=
"
{
$pa
[
'nm'
]
}
的"
.
$pa
[
$which
]
.
"的耐久度下降了
{
$x
}
!
<br>"
;
if
(
!
$pa
[
'type'
])
$log
.=
"<span class=
\"
grey
\"
>
{
$pa
[
'nm'
]
}
的"
.
$pa
[
$which
]
.
"的耐久度下降了
{
$x
}
!</span>
<br>"
;
//耐久为0 装备损坏
//耐久为0 装备损坏
if
(
$pa
[
$which
.
's'
]
<=
0
)
if
(
$pa
[
$which
.
's'
]
<=
0
)
{
{
$log
.=
"
{
$pa
[
'nm'
]
}
的<span class=
\"
red b
\"
>"
.
$pa
[
$which
]
.
"</span>受损过重,无法再装备了!<br>"
;
$log
.=
"
{
$pa
[
'nm'
]
}
的<span class=
\"
red
\"
>"
.
$pa
[
$which
]
.
"</span>受损过重,无法再装备了!<br>"
;
//剔除防具属性
if
(
$check_sk
&&
!
empty
(
$pa
[
$which
.
'sk'
]))
unset_ex_from_array
(
$pa
,
get_itmsk_array
(
$pa
[
$which
.
'sk'
]));
if
(
$which
==
'arb'
)
if
(
$which
==
'arb'
)
{
{
$pa
[
$which
]
=
'内衣'
;
$pa
[
$which
.
'k'
]
=
'DN'
;
$pa
[
$which
]
=
'内衣'
;
$pa
[
$which
.
'k'
]
=
'DN'
;
...
@@ -1208,5 +1214,18 @@ function armor_hurt(&$pa,$which,$hurtvalue,$hurtkind=0)
...
@@ -1208,5 +1214,18 @@ function armor_hurt(&$pa,$which,$hurtvalue,$hurtkind=0)
return
0
;
return
0
;
}
}
//从属性数组中剔除指定属性
function
unset_ex_from_array
(
&
$pa
,
$exarr
)
{
if
(
!
empty
(
$pa
[
'ex_keys'
])
&&
!
empty
(
$exarr
))
{
foreach
(
$exarr
as
$ex
)
{
if
(
in_array
(
$ex
,
$pa
[
'ex_keys'
]))
unset
(
$pa
[
'ex_keys'
][
array_search
(
$ex
,
$pa
[
'ex_keys'
])]);
}
}
return
;
}
?>
?>
include/game/revattr.func.php
View file @
4d4c0c2f
...
@@ -12,6 +12,10 @@
...
@@ -12,6 +12,10 @@
//获取真实攻击类别
//获取真实攻击类别
function
get_wep_kind
(
&
$pa
,
$wep_kind
=
''
)
function
get_wep_kind
(
&
$pa
,
$wep_kind
=
''
)
{
{
global
$nosta
;
if
(
isset
(
$pa
[
'is_wpg'
]))
unset
(
$pa
[
'is_wpg'
]);
if
(
!
empty
(
$wep_kind
))
if
(
!
empty
(
$wep_kind
))
{
{
$pa
[
'wep_kind'
]
=
strpos
(
$pa
[
'wepk'
],
$wep_kind
)
===
false
?
substr
(
$pa
[
'wepk'
],
1
,
1
)
:
$wep_kind
;
$pa
[
'wep_kind'
]
=
strpos
(
$pa
[
'wepk'
],
$wep_kind
)
===
false
?
substr
(
$pa
[
'wepk'
],
1
,
1
)
:
$wep_kind
;
...
@@ -23,6 +27,7 @@
...
@@ -23,6 +27,7 @@
if
(((
$w1
==
'G'
)
||
(
$w1
==
'J'
))
&&
(
$pa
[
'weps'
]
==
$nosta
))
if
(((
$w1
==
'G'
)
||
(
$w1
==
'J'
))
&&
(
$pa
[
'weps'
]
==
$nosta
))
{
{
$pa
[
'wep_kind'
]
=
$w2
?
$w2
:
'P'
;
$pa
[
'wep_kind'
]
=
$w2
?
$w2
:
'P'
;
if
(
$pa
[
'wep_kind'
]
==
'P'
)
$pa
[
'is_wpg'
]
=
true
;
}
}
else
else
{
{
...
@@ -80,6 +85,7 @@
...
@@ -80,6 +85,7 @@
//在初始化战斗阶段触发的事件。即:无论是否反击都只会触发1次的事件。
//在初始化战斗阶段触发的事件。即:无论是否反击都只会触发1次的事件。
function
combat_prepare_events
(
&
$pa
,
&
$pd
,
$active
)
function
combat_prepare_events
(
&
$pa
,
&
$pd
,
$active
)
{
{
# 百命猫 初始化事件: 每次初始化战斗时都会提升等级与怒气
# 百命猫 初始化事件: 每次初始化战斗时都会提升等级与怒气
if
((
$pa
[
'type'
]
==
89
&&
$pa
[
'name'
]
==
'是TSEROF啦!'
)
||
(
$pd
[
'type'
]
==
89
&&
$pd
[
'name'
]
==
'是TSEROF啦!'
))
if
((
$pa
[
'type'
]
==
89
&&
$pa
[
'name'
]
==
'是TSEROF啦!'
)
||
(
$pd
[
'type'
]
==
89
&&
$pd
[
'name'
]
==
'是TSEROF啦!'
))
{
{
...
@@ -90,34 +96,38 @@
...
@@ -90,34 +96,38 @@
if
(
$pa
[
'type'
]
==
89
&&
$pa
[
'name'
]
==
'笼中鸟'
)
if
(
$pa
[
'type'
]
==
89
&&
$pa
[
'name'
]
==
'笼中鸟'
)
{
{
$flag
=
attr_extra_89_cagedbird
(
$pa
,
$pd
,
$active
);
$flag
=
attr_extra_89_cagedbird
(
$pa
,
$pd
,
$active
);
if
(
$flag
<
0
)
return
$flag
;
}
}
if
(
$pd
[
'type'
]
==
89
&&
$pd
[
'name'
]
==
'笼中鸟'
)
else
if
(
$pd
[
'type'
]
==
89
&&
$pd
[
'name'
]
==
'笼中鸟'
)
{
{
$flag
=
attr_extra_89_cagedbird
(
$pd
,
$pa
,
$active
);
$flag
=
attr_extra_89_cagedbird
(
$pd
,
$pa
,
$active
);
}
if
(
$flag
<
0
)
return
$flag
;
if
(
$flag
<
0
)
return
$flag
;
}
return
1
;
return
1
;
}
}
//攻击方(pa)在
开始伤害计算流程前触发的事件(直死、临摹装置、DOT结算、踩陷阱……) 返回1-继续打击流程 返回0-
中止打击流程
//攻击方(pa)在
命中流程前触发的事件(直死、DOT结算、踩陷阱……) 返回值小于0:
中止打击流程
function
hitrate_prepare_events
(
&
$pa
,
&
$pd
,
$active
)
function
hitrate_prepare_events
(
&
$pa
,
&
$pd
,
$active
)
{
{
global
$log
;
global
$log
,
$attinfo
;
# 玩家直死反噬:
# 玩家直死反噬:
这是一个暴毙死法,触发时将中止后续战斗动作。
if
(
in_array
(
'X'
,
$pa
[
'ex_keys'
])
&&
!
$pa
[
'type'
])
if
(
in_array
(
'X'
,
$pa
[
'ex_keys'
])
&&
!
$pa
[
'type'
])
{
{
$xdice
=
diceroll
(
99
);
$xdice
=
diceroll
(
99
);
if
(
$xdice
<=
14
)
if
(
$xdice
<=
14
)
{
{
$log
.=
"<span class=
\"
red
\"
>
{
$pa
[
'nm'
]
}
手中的武器忽然失去了控制,喀吧一声就斩断了什么。那似乎是
{
$pa
[
'nm'
]
}
的死线……</span><br>"
;
$log
.=
"<span class=
\"
red
\"
>
{
$pa
[
'nm'
]
}
手中的武器忽然失去了控制,喀吧一声就斩断了什么!那似乎是
{
$pa
[
'nm'
]
}
的死线……</span><br>"
;
$pa
[
'gg_flag'
]
=
1
;
$pa
[
'hp'
]
=
0
;
$pa
[
'gg_flag'
]
=
39
;
#这个标记用于登记暴毙死法 39-武器反噬
$pa
[
'hp'
]
=
0
;
return
-
1
;
}
}
return
0
;
}
}
# 真红暮进攻事件:
# 真红暮进攻事件:
# 注意:真红暮的进攻事件虽然有让敌人扣血致死的可能,但是不应该返回-1,因为死的不是自己。在这个函数里,只有攻击方在造成伤害前暴毙才需要返回-1。
# 如果想为真红暮的特殊攻击提供指定死法,请在判定中添加:$pd['gg_flag'] = '死法编号';
if
(
$pa
[
'type'
]
==
19
&&
$pa
[
'name'
]
==
'红暮'
)
if
(
$pa
[
'type'
]
==
19
&&
$pa
[
'name'
]
==
'红暮'
)
{
{
attr_extra_19_crimson
(
$pa
,
$pd
,
$active
,
'attack'
);
attr_extra_19_crimson
(
$pa
,
$pd
,
$active
,
'attack'
);
...
@@ -135,6 +145,12 @@
...
@@ -135,6 +145,12 @@
attr_extra_89_walksheep
(
$pa
,
$pd
,
$active
);
attr_extra_89_walksheep
(
$pa
,
$pd
,
$active
);
}
}
# 书中虫受伤时rp上升事件:
if
(
$pd
[
'type'
]
==
89
&&
(
$pd
[
'name'
]
==
'高中生·白神'
||
$pd
[
'name'
]
==
'白神·讨价还价'
||
$pd
[
'name'
]
==
'白神·接受'
))
{
attr_extra_89_bookworm
(
$pa
,
$pd
,
$active
,
'rp'
);
}
# 临摹装置:
# 临摹装置:
if
(
$pa
[
'wep'
]
==
"临摹装置"
)
if
(
$pa
[
'wep'
]
==
"临摹装置"
)
{
{
...
@@ -166,9 +182,14 @@
...
@@ -166,9 +182,14 @@
}
else
{
}
else
{
$log
.=
"<span class=
\"
yellow
\"
>
{
$pa
[
'nm'
]
}
成功地复制了对手的武器!</span><br>"
;
$log
.=
"<span class=
\"
yellow
\"
>
{
$pa
[
'nm'
]
}
成功地复制了对手的武器!</span><br>"
;
$log
.=
"<span class=
\"
yellow
\"
>临摹装置化作了<span class=
\"
red
\"
>
{
$pd
[
'wep'
]
}
</span>!</span><br><br>"
;
$log
.=
"<span class=
\"
yellow
\"
>临摹装置化作了<span class=
\"
red
\"
>
{
$pd
[
'wep'
]
}
</span>!</span><br><br>"
;
//从原属性数组中剔除当前武器属性
if
(
!
empty
(
$pa
[
'wepsk'
]))
unset_ex_from_array
(
$pa
,
get_itmsk_array
(
$pa
[
'wepsk'
]));
$pa
[
'wep'
]
=
$pd
[
'wep'
];
$pa
[
'wepk'
]
=
$pd
[
'wepk'
];
$pa
[
'wepsk'
]
=
$pd
[
'wepsk'
];
$pa
[
'wep'
]
=
$pd
[
'wep'
];
$pa
[
'wepk'
]
=
$pd
[
'wepk'
];
$pa
[
'wepsk'
]
=
$pd
[
'wepsk'
];
$pa
[
'wepe'
]
=
$pd
[
'wepe'
];
$pa
[
'weps'
]
=
$pd
[
'weps'
];
$pa
[
'wepe'
]
=
$pd
[
'wepe'
];
$pa
[
'weps'
]
=
$pd
[
'weps'
];
//没有灵抽的情况下,向属性数组中打入复制后武器的属性
if
(
!
isset
(
$pa
[
'sldr_flag'
]))
$pa
[
'ex_keys'
]
=
array_merge
(
$pa
[
'ex_keys'
],
get_itmsk_array
(
$pa
[
'wepsk'
]));
get_wep_kind
(
$pa
);
get_wep_kind
(
$pa
);
$log
.=
"
{
$pa
[
'nm'
]
}
使用
{
$pa
[
'wep'
]
}
<span class=
\"
yellow
\"
>
{
$attinfo
[
$pa
[
'wep_kind'
]]
}
</span>
{
$pd
[
'nm'
]
}
!<br>"
;
}
}
}
}
else
else
...
@@ -177,7 +198,13 @@
...
@@ -177,7 +198,13 @@
}
}
}
}
return
1
;
# 存在其他方式提供的暴毙死法,也中止后续战斗动作。
if
(
isset
(
$pa
[
'gg_flag'
]))
{
return
-
1
;
}
return
0
;
}
}
//获取基础命中率与修正
//获取基础命中率与修正
...
@@ -252,6 +279,7 @@
...
@@ -252,6 +279,7 @@
}
}
//计算实际命中次数
//计算实际命中次数
$pa
[
'hitrate_times'
]
=
$pa
[
'inf_times'
]
=
$pa
[
'wep_imp_times'
]
=
0
;
for
(
$i
=
1
;
$i
<=
$atk_t
;
$i
++
)
for
(
$i
=
1
;
$i
<=
$atk_t
;
$i
++
)
{
{
$dice
=
diceroll
(
99
);
$dice
=
diceroll
(
99
);
...
@@ -291,7 +319,7 @@
...
@@ -291,7 +319,7 @@
{
{
if
(
$pa
[
'wep'
]
==
'燕返262'
)
$log
.=
"<img src=
\"
img/other/262.png
\"
><br>"
;
if
(
$pa
[
'wep'
]
==
'燕返262'
)
$log
.=
"<img src=
\"
img/other/262.png
\"
><br>"
;
$damage
=
999983
;
$damage
=
999983
;
$pd
[
'
gg_flag'
]
=
1
;
$pd
[
'
sp_death_flag'
]
=
1
;
#这个标记用于影响是否复活或登记特殊死法的判断
$log
.=
"造成<span class=
\"
red
\"
>
$damage
</span>点伤害!<br>"
;
$log
.=
"造成<span class=
\"
red
\"
>
$damage
</span>点伤害!<br>"
;
return
$damage
;
return
$damage
;
}
}
...
@@ -311,7 +339,7 @@
...
@@ -311,7 +339,7 @@
if
(
$pd
[
'arte'
]
<
100
)
if
(
$pd
[
'arte'
]
<
100
)
{
{
$pd
[
'arte'
]
=
min
(
100
,
$pd
[
'arte'
]
+
$pd
[
'arts'
]);
$pd
[
'arte'
]
=
min
(
100
,
$pd
[
'arte'
]
+
$pd
[
'arts'
]);
$log
.=
"<span class=
\"
red
\"
>
{
$pd
[
'nm'
]
}
身上的数据护盾投射出了防护罩,轻松挡下了
你
的攻击!</span><br>"
;
$log
.=
"<span class=
\"
red
\"
>
{
$pd
[
'nm'
]
}
身上的数据护盾投射出了防护罩,轻松挡下了
{
$pa
[
'nm'
]
}
的攻击!</span><br>"
;
return
0
;
return
0
;
}
}
}
}
...
@@ -320,7 +348,7 @@
...
@@ -320,7 +348,7 @@
if
(
$pd
[
'arte'
]
>
1
)
if
(
$pd
[
'arte'
]
>
1
)
{
{
$pd
[
'arte'
]
=
max
(
1
,
$pd
[
'arte'
]
-
$pd
[
'arts'
]);
$pd
[
'arte'
]
=
max
(
1
,
$pd
[
'arte'
]
-
$pd
[
'arts'
]);
$log
.=
"<span class=
\"
red
\"
>
{
$pd
[
'nm'
]
}
身上的数据护盾投射出了防护罩,轻松挡下了
你
的攻击!</span><br>"
;
$log
.=
"<span class=
\"
red
\"
>
{
$pd
[
'nm'
]
}
身上的数据护盾投射出了防护罩,轻松挡下了
{
$pa
[
'nm'
]
}
的攻击!</span><br>"
;
return
0
;
return
0
;
}
}
}
}
...
@@ -341,7 +369,7 @@
...
@@ -341,7 +369,7 @@
$damage
=
$pd
[
'def'
]
>
65000
?
1
:
350
;
$damage
=
$pd
[
'def'
]
>
65000
?
1
:
350
;
if
(
$damage
>
1
)
$log
.=
"<span class=
\"
lime
\"
>蜂针命中了
{
$pd
[
'nm'
]
}
,对其造成了350点真实伤害!</span><br>"
;
if
(
$damage
>
1
)
$log
.=
"<span class=
\"
lime
\"
>蜂针命中了
{
$pd
[
'nm'
]
}
,对其造成了350点真实伤害!</span><br>"
;
else
$log
.=
"<span class=
\"
lime
\"
>然而
{
$pd
[
'nm'
]
}
的防御力实在太高,
你
根本无法对其造成有效伤害!</span><br>"
;
else
$log
.=
"<span class=
\"
lime
\"
>然而
{
$pd
[
'nm'
]
}
的防御力实在太高,
{
$pa
[
'nm'
]
}
根本无法对其造成有效伤害!</span><br>"
;
if
(
strpos
(
$pd
[
'inf'
],
'p'
)
===
false
)
if
(
strpos
(
$pd
[
'inf'
],
'p'
)
===
false
)
{
{
...
@@ -378,7 +406,7 @@
...
@@ -378,7 +406,7 @@
$pa
[
'wepe_t'
]
=
$pa
[
'wepe'
];
$pa
[
'wepe_t'
]
=
$pa
[
'wepe'
];
}
}
//枪托打人 武器伤害=面板数值/5
//枪托打人 武器伤害=面板数值/5
elseif
(
$pa
[
'is_wpg'
]
)
elseif
(
isset
(
$pa
[
'is_wpg'
])
)
{
{
$pa
[
'wepe_t'
]
=
round
(
$pa
[
'wepe'
]
/
5
);
$pa
[
'wepe_t'
]
=
round
(
$pa
[
'wepe'
]
/
5
);
}
}
...
@@ -391,10 +419,11 @@
...
@@ -391,10 +419,11 @@
rev_get_clubskill_bonus
(
$pa
[
'club'
],
$pa
[
'skills'
],
$pa
,
$pd
[
'club'
],
$pa
[
'skills'
],
$pd
,
$att1
,
$def1
);
rev_get_clubskill_bonus
(
$pa
[
'club'
],
$pa
[
'skills'
],
$pa
,
$pd
[
'club'
],
$pa
[
'skills'
],
$pd
,
$att1
,
$def1
);
//pa攻击力:
//pa攻击力:
$base_att
=
$pa
[
'att'
]
+
$pa
[
'wepe_t'
]
+
$att1
;
$base_att
=
$pa
[
'att'
]
+
$pa
[
'wepe_t'
]
+
$att1
;
//echo "【DEBUG】{$pa['name']}的base_att是{$base_att},";
global
$log
;
//$log.= "【DEBUG】{$pa['name']}的base_att是{$base_att},";
//计算攻击力修正
//计算攻击力修正
$base_att
=
get_base_att_modifier
(
$pa
,
$pd
,
$active
,
$base_att
);
$base_att
=
get_base_att_modifier
(
$pa
,
$pd
,
$active
,
$base_att
);
//
echo
"修正后是{$base_att}。<br>";
//
$log.=
"修正后是{$base_att}。<br>";
return
$base_att
;
return
$base_att
;
}
}
...
@@ -428,7 +457,7 @@
...
@@ -428,7 +457,7 @@
//获取pd的防御力与修正
//获取pd的防御力与修正
function
get_base_def
(
&
$pa
,
&
$pd
,
$active
)
function
get_base_def
(
&
$pa
,
&
$pd
,
$active
)
{
{
global
$specialrate
;
global
$specialrate
,
$log
;
//pd基础防御力:
//pd基础防御力:
$base_def
=
$pd
[
'def'
];
$base_def
=
$pd
[
'def'
];
//pd装备提供防御力:
//pd装备提供防御力:
...
@@ -440,7 +469,7 @@
...
@@ -440,7 +469,7 @@
if
(
$Ndice
<
$specialrate
[
'N'
])
if
(
$Ndice
<
$specialrate
[
'N'
])
{
{
$equip_def
=
round
(
$equip_def
/
2
);
$equip_def
=
round
(
$equip_def
/
2
);
//为了美观考虑……冲击的log在之后的
attack
_prepare_events()显示
//为了美观考虑……冲击的log在之后的
deal_damage
_prepare_events()显示
$pa
[
'charge_flag'
]
=
1
;
$pa
[
'charge_flag'
]
=
1
;
}
}
}
}
...
@@ -448,10 +477,10 @@
...
@@ -448,10 +477,10 @@
rev_get_clubskill_bonus
(
$pa
[
'club'
],
$pa
[
'skills'
],
$pa
,
$pd
[
'club'
],
$pa
[
'skills'
],
$pd
,
$att1
,
$def1
);
rev_get_clubskill_bonus
(
$pa
[
'club'
],
$pa
[
'skills'
],
$pa
,
$pd
[
'club'
],
$pa
[
'skills'
],
$pd
,
$att1
,
$def1
);
//pd防御力:
//pd防御力:
$total_def
=
$base_def
+
$equip_def
+
$def1
;
$total_def
=
$base_def
+
$equip_def
+
$def1
;
//
echo
"【DEBUG】{$pd['name']}的total_def是{$total_def},";
//
$log.=
"【DEBUG】{$pd['name']}的total_def是{$total_def},";
//计算防御力修正
//计算防御力修正
$total_def
=
get_base_def_modifier
(
$pa
,
$pd
,
$active
,
$total_def
);
$total_def
=
get_base_def_modifier
(
$pa
,
$pd
,
$active
,
$total_def
);
//
echo
"修正后是{$total_def}。<br>";
//
$log.=
"修正后是{$total_def}。<br>";
return
$total_def
;
return
$total_def
;
}
}
...
@@ -459,13 +488,18 @@
...
@@ -459,13 +488,18 @@
function
get_base_def_modifier
(
&
$pa
,
&
$pd
,
$active
,
$total_def
)
function
get_base_def_modifier
(
&
$pa
,
&
$pd
,
$active
,
$total_def
)
{
{
//计算天气、姿态、策略、地点对pd防御力的修正
//计算天气、姿态、策略、地点对pd防御力的修正
global
$weather
,
$weather_defend_modifier
,
$pose_defend_modifier
,
$tactic_defend_modifier
,
$pls_defend_modifier
;
global
$weather
,
$weather_defend_modifier
,
$pose_defend_modifier
,
$tactic_defend_modifier
,
$pls_defend_modifier
,
$log
;
$wth_def_per
=
$weather_defend_modifier
[
$weather
]
?:
0
;
$wth_def_per
=
$weather_defend_modifier
[
$weather
]
?:
0
;
//$log.= "天气修正系数是{$wth_def_per}。<br>";
$pose_def_per
=
$pose_defend_modifier
[
$pd
[
'pose'
]]
?:
0
;
$pose_def_per
=
$pose_defend_modifier
[
$pd
[
'pose'
]]
?:
0
;
//$log.= "姿势修正系数是{$pose_def_per}。<br>";
$tac_def_per
=
$tactic_defend_modifier
[
$pd
[
'tactic'
]]
?:
0
;
$tac_def_per
=
$tactic_defend_modifier
[
$pd
[
'tactic'
]]
?:
0
;
//$log.= "策略修正系数是{$tac_def_per}。<br>";
$pls_def_per
=
$pls_defend_modifier
[
$pd
[
'pls'
]]
?:
0
;
$pls_def_per
=
$pls_defend_modifier
[
$pd
[
'pls'
]]
?:
0
;
//$log.= "地点修正系数是{$pls_def_per}。<br>";
$total_def
=
round
(
$total_def
*
((
100
+
$wth_def_per
+
$pose_def_per
+
$tac_def_per
+
$pls_def_per
)
/
100
));
$total_def
=
round
(
$total_def
*
((
100
+
$wth_def_per
+
$pose_def_per
+
$tac_def_per
+
$pls_def_per
)
/
100
));
//$log.= "上述修正后防御为{$total_def}。<br>";
//计算受伤状态对pd防御力的修正
//计算受伤状态对pd防御力的修正
global
$inf_def_p
;
global
$inf_def_p
;
...
@@ -477,6 +511,7 @@
...
@@ -477,6 +511,7 @@
//计算社团技能对pd防御力的修正
//计算社团技能对pd防御力的修正
rev_get_clubskill_bonus_p
(
$pa
[
'club'
],
$pa
[
'skills'
],
$pa
,
$pd
[
'club'
],
$pa
[
'skills'
],
$pd
,
$attfac
,
$deffac
);
rev_get_clubskill_bonus_p
(
$pa
[
'club'
],
$pa
[
'skills'
],
$pa
,
$pd
[
'club'
],
$pa
[
'skills'
],
$pd
,
$attfac
,
$deffac
);
$total_def
*=
$deffac
;
$total_def
*=
$deffac
;
//$log.= "社团技能修正后防御为{$total_def}。<br>";
$total_def
=
max
(
0.01
,
$total_def
);
$total_def
=
max
(
0.01
,
$total_def
);
return
$total_def
;
return
$total_def
;
...
@@ -485,8 +520,9 @@
...
@@ -485,8 +520,9 @@
//计算原始伤害
//计算原始伤害
function
get_original_dmg_rev
(
&
$pa
,
&
$pd
,
$active
)
function
get_original_dmg_rev
(
&
$pa
,
&
$pd
,
$active
)
{
{
global
$skill_dmg
,
$dmg_fluc
,
$weather
,
$pls
;
global
$skill_dmg
,
$dmg_fluc
,
$weather
,
$pls
,
$log
;
//$log.= "【DEBUG】原始伤害计算阶段:{$pa['name']}的攻击系数为{$pa['base_att']},{$pd['name']}的防御系数为{$pd['base_def']},";
//原始伤害:(pa基础攻击/pd基础防御) * pa熟练度 * pa熟练度系数
//原始伤害:(pa基础攻击/pd基础防御) * pa熟练度 * pa熟练度系数
$damage
=
(
$pa
[
'base_att'
]
/
$pd
[
'base_def'
])
*
$pa
[
'wep_skill'
]
*
$skill_dmg
[
$pa
[
'wep_kind'
]];
$damage
=
(
$pa
[
'base_att'
]
/
$pd
[
'base_def'
])
*
$pa
[
'wep_skill'
]
*
$skill_dmg
[
$pa
[
'wep_kind'
]];
//获取伤害浮动系数:
//获取伤害浮动系数:
...
@@ -496,6 +532,7 @@
...
@@ -496,6 +532,7 @@
//计算伤害浮动:
//计算伤害浮动:
$dmg_factor
=
(
100
+
rand
(
-
$dfluc
,
$dfluc
))
/
100
;
$dmg_factor
=
(
100
+
rand
(
-
$dfluc
,
$dfluc
))
/
100
;
$damage
=
round
(
$damage
*
$dmg_factor
*
rand
(
4
,
10
)
/
10
);
$damage
=
round
(
$damage
*
$dmg_factor
*
rand
(
4
,
10
)
/
10
);
//echo "【DEBUG】伤害浮动为{$dmg_factor},原始伤害为{$damage}<br>";
//把计算得到的原始伤害保存在$pa['original_dmg']里
//把计算得到的原始伤害保存在$pa['original_dmg']里
$pa
[
'original_dmg'
]
=
$damage
;
$pa
[
'original_dmg'
]
=
$damage
;
return
$damage
;
return
$damage
;
...
@@ -504,6 +541,7 @@
...
@@ -504,6 +541,7 @@
//计算在原始伤害基础上附加的固定伤害
//计算在原始伤害基础上附加的固定伤害
function
get_original_fix_dmg_rev
(
&
$pa
,
&
$pd
,
$active
)
function
get_original_fix_dmg_rev
(
&
$pa
,
&
$pd
,
$active
)
{
{
$damage
=
0
;
//重枪
//重枪
if
(
$pa
[
'wep_kind'
]
==
'J'
)
if
(
$pa
[
'wep_kind'
]
==
'J'
)
{
{
...
@@ -515,7 +553,7 @@
...
@@ -515,7 +553,7 @@
if
(
$pa
[
'wep_kind'
]
==
'F'
)
if
(
$pa
[
'wep_kind'
]
==
'F'
)
{
{
global
$log
;
global
$log
;
if
(
$pa
[
'sldr_flag'
]
||
$pd
[
'sldr_flag'
]
)
if
(
isset
(
$pa
[
'sldr_flag'
])
||
isset
(
$pd
[
'sldr_flag'
])
)
{
{
$log
.=
"<span class=
\"
red
\"
>由于灵魂抽取的作用,灵系武器伤害大幅降低了!</span><br>"
;
$log
.=
"<span class=
\"
red
\"
>由于灵魂抽取的作用,灵系武器伤害大幅降低了!</span><br>"
;
}
}
...
@@ -536,11 +574,30 @@
...
@@ -536,11 +574,30 @@
//在输出成log时会显示为:总计造成了100x0.5x1.2...=111点伤害 的形式
//在输出成log时会显示为:总计造成了100x0.5x1.2...=111点伤害 的形式
$dmg_p
=
Array
();
$dmg_p
=
Array
();
# 书中虫防守事件:
# 灵力武器伤害↔体力消耗系数判定:
if
(
$pd
[
'type'
]
==
89
)
if
(
$pa
[
'wep_kind'
]
==
'F'
)
{
//玩家使用灵力武器才会计算体力消耗
if
(
!
$pa
[
'type'
])
{
{
$p
=
attr_extra_89_bookworm
(
$pa
,
$pd
,
$active
);
//获取体力消耗系数:
if
(
$p
>
0
)
$dmg_p
[]
=
$p
;
$sp_cost_r
=
$pa
[
'club'
]
==
9
?
0.2
:
0.25
;
//获取社团技能对体力消耗系数的修正:
$sp_cost_r
*=
get_clubskill_bonus_spd
(
$pa
[
'club'
],
$pa
[
'skills'
]);
//获取理论消耗体力最大值:
$sp_cost_max
=
$sp_cost_r
*
$pa
[
'wepe'
];
//获取实际消耗体力:
$sp_cost
=
min
(
ceil
(
$sp_cost_max
),
$pa
[
'sp'
]
-
1
);
$log
.=
"消耗
{
$sp_cost
}
点体力,"
;
}
//获取威力系数:NPC固定为50%
$factor
=
$pa
[
'type'
]
?
0.5
:
0.5
+
(
$sp_cost
/
$sp_cost_max
/
2
);
//获取伤害变化倍率并扣除体力
$dmg_p
[]
=
$factor
;
$pa
[
'sp'
]
-=
$sp_cost
;
//输出log
$f
=
round
(
100
*
$factor
);
$log
.=
"发挥了灵力武器
{
$f
}
%的威力!<br>"
;
}
}
# 重击判定:
# 重击判定:
...
@@ -576,37 +633,11 @@
...
@@ -576,37 +633,11 @@
//输出log
//输出log
$log
.=
npc_chat
(
$pa
[
'type'
],
$pa
[
'nm'
],
'critical'
);
$log
.=
npc_chat
(
$pa
[
'type'
],
$pa
[
'nm'
],
'critical'
);
$log
.=
"
{
$pa
[
'nm'
]
}
消耗<span class=
\"
yellow
\"
>
{
$rage_min_cost
}
</span>点怒气,"
;
$log
.=
"
{
$pa
[
'nm'
]
}
消耗<span class=
\"
yellow
\"
>
{
$rage_min_cost
}
</span>点怒气,"
;
if
(
$pa
[
'club'
]
==
9
)
$log
.=
"<span class=
\"
red
\"
>发动必杀技!</span>"
;
if
(
$pa
[
'club'
]
==
9
)
$log
.=
"<span class=
\"
red
\"
>发动必杀技!</span>
<br>
"
;
else
$log
.=
"<span class=
\"
red
\"
>使出重击!</span>"
;
else
$log
.=
"<span class=
\"
red
\"
>使出重击!</span>
<br>
"
;
}
}
}
}
# 灵力武器伤害↔体力消耗系数判定:
if
(
$pa
[
'wep_kind'
]
==
'F'
)
{
//玩家使用灵力武器才会计算体力消耗
if
(
!
$pa
[
'type'
])
{
//获取体力消耗系数:
$sp_cost_r
=
$pa
[
'club'
]
==
9
?
0.2
:
0.25
;
//获取社团技能对体力消耗系数的修正:
$sp_cost_r
*=
get_clubskill_bonus_spd
(
$pa
[
'club'
],
$pa
[
'skills'
]);
//获取理论消耗体力最大值:
$sp_cost_max
=
$sp_cost_r
*
$pa
[
'wepe'
];
//获取实际消耗体力:
$sp_cost
=
min
(
$sp_cost_max
,
$pa
[
'sp'
]
-
1
);
$log
.=
"消耗
{
$sp_cost
}
点体力,"
;
}
//获取威力系数:NPC固定为50%
$factor
=
$pa
[
'type'
]
?
0.5
:
0.5
+
(
$sp_cost
/
$sp_cost_max
/
2
);
//获取伤害变化倍率并扣除体力
$dmg_p
[]
=
$factor
;
$pa
[
'sp'
]
-=
$sp_cost
;
//输出log
$f
=
round
(
100
*
$factor
);
$log
.=
"发挥了灵力武器
{
$f
}
%的威力!<br>"
;
}
# 连击判定:
# 连击判定:
# 只要命中次数大于1就进入连击判定,不需要再检查武器有没有连击属性。方便一些技能强制附加连击
# 只要命中次数大于1就进入连击判定,不需要再检查武器有没有连击属性。方便一些技能强制附加连击
if
(
$pa
[
'hitrate_times'
]
>
1
)
if
(
$pa
[
'hitrate_times'
]
>
1
)
...
@@ -623,12 +654,12 @@
...
@@ -623,12 +654,12 @@
}
}
//攻击方在造成伤害前触发的事件
//攻击方在造成伤害前触发的事件
function
attack
_prepare_events
(
&
$pa
,
&
$pd
,
$active
)
function
deal_damage
_prepare_events
(
&
$pa
,
&
$pd
,
$active
)
{
{
global
$log
,
$def_kind
,
$specialrate
,
$itemspkinfo
;
global
$log
,
$def_kind
,
$specialrate
,
$itemspkinfo
;
# 冲击效果log显示(实际的效果判断在get_base_def()阶段)
# 冲击效果log显示(实际的效果判断在get_base_def()阶段)
if
(
$pa
[
'charge_flag'
]
)
if
(
!
empty
(
$pa
[
'charge_flag'
])
)
{
{
$log
.=
"<span class=
\"
yellow
\"
>
{
$pa
[
'nm'
]
}
的攻击隔着
{
$pd
[
'nm'
]
}
的防具造成了伤害!</span><br>"
;
$log
.=
"<span class=
\"
yellow
\"
>
{
$pa
[
'nm'
]
}
的攻击隔着
{
$pd
[
'nm'
]
}
的防具造成了伤害!</span><br>"
;
}
}
...
@@ -679,14 +710,18 @@
...
@@ -679,14 +710,18 @@
}
}
# 贯穿效果判定:
# 贯穿效果判定:
if
(
in_array
(
'n'
,
$pa
[
'ex_keys'
])
&&
$pd
[
'phy_def_flag'
]
)
if
(
in_array
(
'n'
,
$pa
[
'ex_keys'
]))
{
{
$dice
=
diceroll
(
99
);
$dice
=
diceroll
(
99
);
if
(
$dice
<
$specialrate
[
'n'
])
if
(
$dice
<
$specialrate
[
'n'
])
{
if
(
!
empty
(
$pd
[
'phy_def_flag'
]))
{
{
$pd
[
'phy_def_flag'
]
=
0
;
$pd
[
'phy_def_flag'
]
=
0
;
$log
.=
"<span class=
\"
yellow
\"
>
{
$pa
[
'nm'
]
}
的攻击贯穿了
{
$pd
[
'nm'
]
}
的防具!</span><br>"
;
$log
.=
"<span class=
\"
yellow
\"
>
{
$pa
[
'nm'
]
}
的攻击贯穿了
{
$pd
[
'nm'
]
}
的防具!</span><br>"
;
}
}
$pa
[
'pierce_flag'
]
=
1
;
}
}
}
return
;
return
;
}
}
...
@@ -750,13 +785,13 @@
...
@@ -750,13 +785,13 @@
}
}
# 防御属性减伤判定:
# 防御属性减伤判定:
if
(
$pd
[
'phy_def_flag'
]
)
if
(
!
empty
(
$pd
[
'phy_def_flag'
])
)
{
{
//存在抹消属性
//存在抹消属性
if
(
$pd
[
'phy_def_flag'
]
==
2
)
if
(
$pd
[
'phy_def_flag'
]
==
2
)
{
{
$p
=
0
;
$p
=
0
;
$log
.=
"<span class=
\"
yellow
\"
>
{
$pa
[
'nm'
]
}
的攻击完全被
{
$pd
[
'nm'
]
}
的装备吸收了!</span><br>"
;
$log
.=
"<span class=
\"
red
\"
>
{
$pa
[
'nm'
]
}
的攻击完全被
{
$pd
[
'nm'
]
}
的装备吸收了!</span><br>"
;
}
}
else
else
{
{
...
@@ -786,7 +821,7 @@
...
@@ -786,7 +821,7 @@
}
}
//pa在造成属性伤害前触发的事件
//pa在造成属性伤害前触发的事件
function
ex_attack
_prepare_events
(
&
$pa
,
&
$pd
,
$active
)
function
deal_ex_damage
_prepare_events
(
&
$pa
,
&
$pd
,
$active
)
{
{
global
$log
,
$ex_attack
,
$ex_def_kind
,
$specialrate
,
$itemspkinfo
;
global
$log
,
$ex_attack
,
$ex_def_kind
,
$specialrate
,
$itemspkinfo
;
...
@@ -845,14 +880,18 @@
...
@@ -845,14 +880,18 @@
}
}
# 破格(属穿)效果判断:
# 破格(属穿)效果判断:
if
(
in_array
(
'y'
,
$pa
[
'ex_keys'
])
&&
isset
(
$pd
[
'ex_def_flag'
])
)
if
(
in_array
(
'y'
,
$pa
[
'ex_keys'
]))
{
{
$dice
=
diceroll
(
99
);
$dice
=
diceroll
(
99
);
if
(
$dice
<
$specialrate
[
'y'
])
if
(
$dice
<
$specialrate
[
'y'
])
{
if
(
!
empty
(
$pd
[
'ex_def_flag'
]))
{
{
$pd
[
'ex_def_flag'
]
=
0
;
$pd
[
'ex_def_flag'
]
=
0
;
$log
.=
"<span class=
\"
yellow
\"
>
{
$pa
[
'nm'
]
}
的攻击瓦解了
{
$pd
[
'nm'
]
}
的属性防护!</span><br>"
;
$log
.=
"<span class=
\"
yellow
\"
>
{
$pa
[
'nm'
]
}
的攻击瓦解了
{
$pd
[
'nm'
]
}
的属性防护!</span><br>"
;
}
}
$pa
[
'ex_pierce_flag'
]
=
1
;
}
}
}
return
;
return
;
}
}
...
@@ -860,9 +899,9 @@
...
@@ -860,9 +899,9 @@
//计算可造成的属性伤害
//计算可造成的属性伤害
function
get_original_ex_dmg
(
&
$pa
,
&
$pd
,
$active
)
function
get_original_ex_dmg
(
&
$pa
,
&
$pd
,
$active
)
{
{
global
$log
;
global
$log
,
$now
;
//触发了属抹效果,直接返回固定伤害值
//触发了属抹效果,直接返回固定伤害值
if
(
$pd
[
'ex_def_flag'
]
==
2
)
if
(
isset
(
$pd
[
'ex_def_flag'
])
&&
$pd
[
'ex_def_flag'
]
==
2
)
{
{
$total_ex_dmg
=
count
(
$pa
[
'ex_attack_keys'
]);
$total_ex_dmg
=
count
(
$pa
[
'ex_attack_keys'
]);
$log
.=
"<span class=
\"
red
\"
>属性攻击的力量完全被防具吸收了!</span>仅造成了<span class=
\"
red
\"
>
{
$total_ex_dmg
}
</span>点伤害!<br>"
;
$log
.=
"<span class=
\"
red
\"
>属性攻击的力量完全被防具吸收了!</span>仅造成了<span class=
\"
red
\"
>
{
$total_ex_dmg
}
</span>点伤害!<br>"
;
...
@@ -873,8 +912,8 @@
...
@@ -873,8 +912,8 @@
$ex_dmg
=
0
;
$ex_inf
=
0
;
$ex_dmg
=
0
;
$ex_inf
=
0
;
// 属性攻击名 异常状态 对应防御属性 基础属性伤害 属性伤害上限 效果↔伤害系数 熟练↔伤害系数 伤害浮动
// 属性攻击名 异常状态 对应防御属性 基础属性伤害 属性伤害上限 效果↔伤害系数 熟练↔伤害系数 伤害浮动
global
$exdmgname
,
$exdmginf
,
$ex_def_kind
,
$ex_base_dmg
,
$ex_max_dmg
,
$ex_wep_dmg
,
$ex_skill_dmg
,
$ex_dmg_fluc
;
global
$exdmgname
,
$exdmginf
,
$ex_def_kind
,
$ex_base_dmg
,
$ex_max_dmg
,
$ex_wep_dmg
,
$ex_skill_dmg
,
$ex_dmg_fluc
;
// 属性↔异常 异常率 异常率上限 熟练↔异常率系数 异常↔伤害系数 得意社团
// 属性↔异常 异常率 异常率上限 熟练↔异常率系数 异常↔伤害系数 得意社团
得意武器
global
$ex_inf
,
$ex_inf_r
,
$ex_max_inf_r
,
$ex_skill_inf_r
,
$ex_inf_punish
,
$ex_good_club
;
global
$ex_inf
,
$ex_inf_r
,
$ex_max_inf_r
,
$ex_skill_inf_r
,
$ex_inf_punish
,
$ex_good_club
,
$ex_good_wep
;
foreach
(
$pa
[
'ex_attack_keys'
]
as
$ex
)
foreach
(
$pa
[
'ex_attack_keys'
]
as
$ex
)
{
{
...
@@ -887,18 +926,18 @@
...
@@ -887,18 +926,18 @@
//计算得意武器类型修正
//计算得意武器类型修正
if
(
$ex_good_wep
[
$ex
]
==
$pa
[
'wep_kind'
])
$ex_dmg
*=
2
;
if
(
$ex_good_wep
[
$ex
]
==
$pa
[
'wep_kind'
])
$ex_dmg
*=
2
;
//计算已经进入的异常状态对属性攻击伤害的影响
//计算已经进入的异常状态对属性攻击伤害的影响
if
(
strpos
(
$inf
,
$exdmg
inf
[
$ex
])
!==
false
&&
isset
(
$ex_inf_punish
[
$ex
]))
if
(
isset
(
$ex_inf
[
$ex
])
&&
strpos
(
$pd
[
'inf'
],
$ex_
inf
[
$ex
])
!==
false
&&
isset
(
$ex_inf_punish
[
$ex
]))
{
{
$ex_dmg
*=
$ex_inf_punish
[
$ex
];
$ex_dmg
*=
$ex_inf_punish
[
$ex
];
$log
.=
"由于
{
$pd
[
'nm'
]
}
已经
{
$
dmginf
}
,
{
$exdmgname
[
$ex
]
}
伤害"
;
$log
.=
"由于
{
$pd
[
'nm'
]
}
已经
{
$
exdmginf
[
$ex_inf
[
$ex
]]
}
,
{
$exdmgname
[
$ex
]
}
的
伤害"
;
$log
.=
$ex_inf_punish
[
$ex
]
>
1
?
"
倍增!"
:
"减少
!"
;
$log
.=
$ex_inf_punish
[
$ex
]
>
1
?
"
增加了!"
:
"减少了
!"
;
}
}
//计算属性伤害浮动
//计算属性伤害浮动
$ex_dmg
=
round
(
$ex_dmg
*
rand
(
100
-
$ex_dmg_fluc
[
$ex
],
100
+
$ex_dmg_fluc
[
$ex
])
/
100
);
$ex_dmg
=
round
(
$ex_dmg
*
rand
(
100
-
$ex_dmg_fluc
[
$ex
],
100
+
$ex_dmg_fluc
[
$ex
])
/
100
);
//计算属性伤害是否被防御
//计算属性伤害是否被防御
$log
.=
$exdmgname
[
$ex
];
$log
.=
$exdmgname
[
$ex
];
if
(
$pd
[
'ex_def_flag'
]
==
1
||
in_array
(
$ex
,
$pd
[
'ex_def_flag'
]
))
if
(
!
empty
(
$pd
[
'ex_def_flag'
])
&&
(
$pd
[
'ex_def_flag'
]
==
1
||
(
is_array
(
$pd
[
'ex_def_flag'
])
&&
in_array
(
$ex
,
$pd
[
'ex_def_flag'
]))
))
{
{
$ex_dmg
=
round
(
$ex_dmg
*
0.5
);
$ex_dmg
=
round
(
$ex_dmg
*
0.5
);
$log
.=
"被防御效果抵消了!仅"
;
$log
.=
"被防御效果抵消了!仅"
;
...
@@ -906,7 +945,7 @@
...
@@ -906,7 +945,7 @@
else
else
{
{
//计算是否施加属性异常
//计算是否施加属性异常
if
(
strpos
(
$pd
[
'inf'
],
$ex_inf
[
$ex
])
===
false
)
if
(
isset
(
$ex_inf
[
$ex
])
&&
strpos
(
$pd
[
'inf'
],
$ex_inf
[
$ex
])
===
false
)
{
{
$dice
=
diceroll
(
99
);
$dice
=
diceroll
(
99
);
//获取属性施加异常的基础概率 + 熟练度修正
//获取属性施加异常的基础概率 + 熟练度修正
...
@@ -936,7 +975,14 @@
...
@@ -936,7 +975,14 @@
function
get_final_dmg_p
(
&
$pa
,
&
$pd
,
$active
)
function
get_final_dmg_p
(
&
$pa
,
&
$pd
,
$active
)
{
{
global
$log
;
global
$log
;
$fin_dmg_p
=
1
;
$fin_dmg_p
=
Array
();
# 书中虫防守事件:移动到最终伤害系数变化阶段了
if
(
$pd
[
'type'
]
==
89
&&
(
$pd
[
'name'
]
==
'高中生·白神'
||
$pd
[
'name'
]
==
'白神·讨价还价'
))
{
$p
=
attr_extra_89_bookworm
(
$pa
,
$pd
,
$active
,
'defend'
);
if
(
$p
>
0
)
$fin_dmg_p
[]
=
$p
;
}
# 晶莹判定:
# 晶莹判定:
if
(
$pa
[
'club'
]
==
19
||
$pd
[
'club'
]
==
19
)
if
(
$pa
[
'club'
]
==
19
||
$pd
[
'club'
]
==
19
)
...
@@ -957,15 +1003,24 @@
...
@@ -957,15 +1003,24 @@
{
{
global
$log
;
global
$log
;
$fin_dmg
=
0
;
# 伤害制御判定:
# 伤害制御判定:
if
(
in_array
(
'h'
,
$pd
[
'ex_keys'
])
&&
$fin_dmg
>=
1950
)
if
(
in_array
(
'h'
,
$pd
[
'ex_keys'
])
&&
$fin_dmg
>=
1950
)
{
{
$dice
=
diceroll
(
99
);
$dice
=
diceroll
(
99
);
if
(
$dice
<
90
)
if
(
$dice
<
90
)
{
//贯穿与破格同时生效时 穿透伤害制御
if
(
isset
(
$pa
[
'ex_pierce_flag'
])
&&
isset
(
$pa
[
'pierce_flag'
]))
{
$log
.=
"<span class='gold'>
{
$pa
[
'nm'
]
}
凌厉的攻势直接突破了
{
$pd
[
'nm'
]
}
的伤害限制!</span><br>"
;
}
else
{
{
$fin_dmg
=
1950
+
$dice
;
$fin_dmg
=
1950
+
$dice
;
$log
.=
"在
{
$pd
[
'nm'
]
}
的装备的作用下,攻击伤害被限制了!<br>"
;
$log
.=
"在
{
$pd
[
'nm'
]
}
的装备的作用下,攻击伤害被限制了!<br>"
;
}
}
}
else
else
{
{
...
@@ -997,7 +1052,7 @@
...
@@ -997,7 +1052,7 @@
{
{
if
(
$pa
[
'final_damage'
]
<
2000
)
{
if
(
$pa
[
'final_damage'
]
<
2000
)
{
$hp_d
=
floor
(
$pa
[
'hp'
]
/
2
);
$hp_d
=
floor
(
$pa
[
'hp'
]
/
2
);
}
elseif
(
$
dmg
<
5000
)
{
}
elseif
(
$
pa
[
'final_damage'
]
<
5000
)
{
$hp_d
=
floor
(
$pa
[
'hp'
]
*
2
/
3
);
$hp_d
=
floor
(
$pa
[
'hp'
]
*
2
/
3
);
}
else
{
}
else
{
$hp_d
=
floor
(
$pa
[
'hp'
]
*
4
/
5
);
$hp_d
=
floor
(
$pa
[
'hp'
]
*
4
/
5
);
...
@@ -1037,7 +1092,7 @@
...
@@ -1037,7 +1092,7 @@
$aim
=
rand
(
0
,
count
(
$inf_parts
)
-
1
);
$aim
=
rand
(
0
,
count
(
$inf_parts
)
-
1
);
$inf_aim
=
$inf_parts
[
$aim
];
$inf_aim
=
$inf_parts
[
$aim
];
//对应部位致伤次数+1
//对应部位致伤次数+1
$inf_att
[
$inf_aim
]
+=
1
;
$inf_att
[
$inf_aim
]
=
isset
(
$inf_att
[
$inf_aim
])
?
$inf_att
[
$inf_aim
]
+
1
:
1
;
}
}
//应用防具损伤/致伤效果
//应用防具损伤/致伤效果
foreach
(
$inf_att
as
$ipt
=>
$times
)
foreach
(
$inf_att
as
$ipt
=>
$times
)
...
@@ -1049,8 +1104,8 @@
...
@@ -1049,8 +1104,8 @@
}
}
else
else
{
{
$flag
=
get_inf_rev
(
$pd
,
$i
nf_at
t
);
$flag
=
get_inf_rev
(
$pd
,
$i
p
t
);
if
(
$flag
)
$log
.=
"
{
$pd
[
'nm'
]
}
的<span class=
\"
red
\"
>
$infinfo[$i
nf_at
t]
</span>部受伤了!<br>"
;
if
(
$flag
)
$log
.=
"
{
$pd
[
'nm'
]
}
的<span class=
\"
red
\"
>
$infinfo[$i
p
t]
</span>部受伤了!<br>"
;
}
}
}
}
}
}
...
@@ -1084,7 +1139,7 @@
...
@@ -1084,7 +1139,7 @@
if
(
strpos
(
$pa
[
'inf'
],
$infnm
)
===
false
)
if
(
strpos
(
$pa
[
'inf'
],
$infnm
)
===
false
)
{
{
$pa
[
'inf'
]
.=
$infnm
;
$pa
[
'inf'
]
.=
$infnm
;
$pa
[
'combat_inf'
]
.=
$infnm
;
//
$pa['combat_inf'] .= $infnm;
return
1
;
return
1
;
}
}
return
0
;
return
0
;
...
...
include/game/revattr_extra.func.php
View file @
4d4c0c2f
...
@@ -26,7 +26,8 @@
...
@@ -26,7 +26,8 @@
# 真红暮作为进攻方时的事件:
# 真红暮作为进攻方时的事件:
if
(
$pa
[
'type'
]
==
19
&&
$pa
[
'name'
]
==
'红暮'
&&
$phase
==
'attack'
)
if
(
$pa
[
'type'
]
==
19
&&
$pa
[
'name'
]
==
'红暮'
&&
$phase
==
'attack'
)
{
{
$log
.=
"<span class=
\"
yellow
\"
>“那么说好了,不留手咯~”<br>红暮吐气扬声,向你袭来!</span><br>"
;
$log
.=
"<span class=
\"
yellow
\"
>“那么说好了,不留手咯~”<br></span>"
;
//$log .= "红暮吐气扬声,向你袭来!<br>";
if
(
$pa
[
'wep'
]
!=
'喷气式红杀重铁剑'
)
if
(
$pa
[
'wep'
]
!=
'喷气式红杀重铁剑'
)
{
{
...
@@ -67,8 +68,7 @@
...
@@ -67,8 +68,7 @@
if
(
$event_dice
==
1
)
if
(
$event_dice
==
1
)
{
{
$wdamage
=
rand
(
5
,
40
);
$wdamage
=
rand
(
5
,
40
);
$pd
[
'wep_imp_times'
]
=
$wdamage
;
weapon_loss
(
$pd
,
$wdamage
,
1
,
1
);
weapon_loss
(
$pd
,
1
);
get_inf_rev
(
$pd
,
'a'
);
get_inf_rev
(
$pd
,
'a'
);
$log
.=
"<span class=
\"
yellow
\"
>这一发强袭追踪弹结实地打到了你手持武器的手上,你痛的龇牙咧嘴,武器也受到了损伤!</span><br>"
;
$log
.=
"<span class=
\"
yellow
\"
>这一发强袭追踪弹结实地打到了你手持武器的手上,你痛的龇牙咧嘴,武器也受到了损伤!</span><br>"
;
}
}
...
@@ -118,7 +118,7 @@
...
@@ -118,7 +118,7 @@
$adamage
=
rand
(
5
,
40
);
$adamage
=
rand
(
5
,
40
);
foreach
(
Array
(
'arb'
,
'arh'
,
'ara'
,
'arf'
)
as
$ar
)
foreach
(
Array
(
'arb'
,
'arh'
,
'ara'
,
'arf'
)
as
$ar
)
{
{
if
(
!
empty
(
$
{
$ar
.
's'
}))
armor_hurt
(
$pd
,
$ar
,
$adamage
);
if
(
!
empty
(
$
{
$ar
.
's'
}))
armor_hurt
(
$pd
,
$ar
,
$adamage
,
1
);
}
}
}
}
else
else
...
@@ -126,8 +126,6 @@
...
@@ -126,8 +126,6 @@
$log
.=
"<span class=
\"
lime
\"
>然而飞弹的精度太低,你并没有被它们打中。</span><br>"
;
$log
.=
"<span class=
\"
lime
\"
>然而飞弹的精度太低,你并没有被它们打中。</span><br>"
;
}
}
}
}
//血量小于0的情况下 返回值1
if
(
$pd
[
'hp'
]
<
0
)
return
1
;
}
}
return
NULL
;
return
NULL
;
...
@@ -226,11 +224,13 @@
...
@@ -226,11 +224,13 @@
function
attr_extra_89_bookworm
(
&
$pa
,
&
$pd
,
$active
,
$phase
=
0
)
function
attr_extra_89_bookworm
(
&
$pa
,
&
$pd
,
$active
,
$phase
=
0
)
{
{
global
$log
;
global
$log
;
$rp_up
=
0
;
$dmg_p
=
-
1
;
# 防守方(pd)为白神
if
(
$pd
[
'type'
]
==
89
)
if
(
$pd
[
'type'
]
==
89
)
{
{
$rp_up
=
0
;
$dmg_p
=
-
1
;
if
(
$pd
[
'name'
]
==
'高中生·白神'
)
if
(
$pd
[
'name'
]
==
'高中生·白神'
)
{
if
(
$phase
==
'rp'
)
{
{
$log
.=
"<span class=
\"
yellow
\"
>“你真的愿意对这个手无寸铁的高中女生下手么?”</span><br>"
;
$log
.=
"<span class=
\"
yellow
\"
>“你真的愿意对这个手无寸铁的高中女生下手么?”</span><br>"
;
$dice
=
diceroll
(
444
);
$dice
=
diceroll
(
444
);
...
@@ -240,6 +240,9 @@
...
@@ -240,6 +240,9 @@
$log
.=
"<span class=
\"
neonblue
\"
>“你不该这么做的。”</span><br>"
;
$log
.=
"<span class=
\"
neonblue
\"
>“你不该这么做的。”</span><br>"
;
}
}
$rp_up
=
$pa
[
'rp'
]
+
$dice
;
$rp_up
=
$pa
[
'rp'
]
+
$dice
;
}
elseif
(
$phase
==
'defend'
)
{
if
(
$pa
[
'original_dmg'
]
>
400
)
if
(
$pa
[
'original_dmg'
]
>
400
)
{
{
$log
.=
"<span class=
\"
yellow
\"
>白神从裙底抽出了她的名为WIN MAX 2的微型电脑!<br>“哪能这样被你干打?”</span><br>"
;
$log
.=
"<span class=
\"
yellow
\"
>白神从裙底抽出了她的名为WIN MAX 2的微型电脑!<br>“哪能这样被你干打?”</span><br>"
;
...
@@ -247,7 +250,10 @@
...
@@ -247,7 +250,10 @@
$dmg_p
=
0.005
;
$dmg_p
=
0.005
;
}
}
}
}
}
if
(
$pd
[
'name'
]
==
'白神·讨价还价'
)
if
(
$pd
[
'name'
]
==
'白神·讨价还价'
)
{
if
(
$phase
==
'rp'
)
{
{
$dice
=
diceroll
(
1777
);
$dice
=
diceroll
(
1777
);
$log
.=
"<span class=
\"
yellow
\"
>“对面似乎真的没有敌意,你还是决定要下手么?”</span><br>"
;
$log
.=
"<span class=
\"
yellow
\"
>“对面似乎真的没有敌意,你还是决定要下手么?”</span><br>"
;
...
@@ -259,6 +265,9 @@
...
@@ -259,6 +265,9 @@
$log
.=
"<span class=
\"
neonblue
\"
>“罪恶感爬上了你的脊梁!”</span><br>"
;
$log
.=
"<span class=
\"
neonblue
\"
>“罪恶感爬上了你的脊梁!”</span><br>"
;
}
}
$rp_up
=
$pa
[
'rp'
]
+
$dice
;
$rp_up
=
$pa
[
'rp'
]
+
$dice
;
}
elseif
(
$phase
==
'defend'
)
{
if
(
$pa
[
'original_dmg'
]
>
400
)
if
(
$pa
[
'original_dmg'
]
>
400
)
{
{
$log
.=
"<span class=
\"
yellow
\"
>白神从裙底抽出了她的名为DECK的微型电脑!<br>“哪能这样被你干打?”</span><br>"
;
$log
.=
"<span class=
\"
yellow
\"
>白神从裙底抽出了她的名为DECK的微型电脑!<br>“哪能这样被你干打?”</span><br>"
;
...
@@ -266,20 +275,24 @@
...
@@ -266,20 +275,24 @@
$dmg_p
=
0.005
;
$dmg_p
=
0.005
;
}
}
}
}
}
if
(
$pd
[
'name'
]
==
'白神·接受'
)
if
(
$pd
[
'name'
]
==
'白神·接受'
)
{
{
global
$rp
;
if
(
$phase
==
'rp'
)
{
$dice
=
rand
(
1777
,
4888
);
$dice
=
rand
(
1777
,
4888
);
$log
.=
"<span class=
\"
yellow
\"
>“你对一位毫无反抗能力,并且已经表示无敌意的女高中生横下死手。”</span><br>"
;
$log
.=
"<span class=
\"
yellow
\"
>“你对一位毫无反抗能力,并且已经表示无敌意的女高中生横下死手。”</span><br>"
;
$log
.=
"<span class=
\"
neonblue
\"
>“希望你的良心还能得以安生。”</span><br>"
;
$log
.=
"<span class=
\"
neonblue
\"
>“希望你的良心还能得以安生。”</span><br>"
;
//$log .= "<span class=\"neonblue\">“【DEBUG】你的rp上升了<span class=\"red\">$dice</span>点。”</span><br>";
//$log .= "<span class=\"neonblue\">“【DEBUG】你的rp上升了<span class=\"red\">$dice</span>点。”</span><br>";
$rp_up
=
$pa
[
'rp'
]
+
$dice
;
$rp_up
=
$pa
[
'rp'
]
+
$dice
;
}
}
}
//结算rp上升事件
//结算rp上升事件
if
(
$rp_up
>
0
)
$pa
[
'rp'
]
=
$pa
[
'rp'
]
+
$rp_up
;
if
(
$
phase
==
'rp'
&&
$
rp_up
>
0
)
$pa
[
'rp'
]
=
$pa
[
'rp'
]
+
$rp_up
;
//返回一个伤害系数
//返回一个伤害系数
if
(
$phase
==
'defend'
&&
$dmg_p
>
0
)
return
$dmg_p
;
}
}
return
$dmg_p
;
return
;
}
}
# 百命猫特殊判定
# 百命猫特殊判定
...
@@ -290,7 +303,7 @@
...
@@ -290,7 +303,7 @@
if
(
$pa
[
'lvl'
]
<
255
)
$pa
[
'lvl'
]
++
;
if
(
$pa
[
'lvl'
]
<
255
)
$pa
[
'lvl'
]
++
;
if
(
$pa
[
'rage'
]
<
255
)
$pa
[
'rage'
]
++
;
if
(
$pa
[
'rage'
]
<
255
)
$pa
[
'rage'
]
++
;
}
}
if
(
$pd
[
'type'
]
==
89
&&
$pd
[
'name'
]
==
'是TSEROF啦!'
)
else
if
(
$pd
[
'type'
]
==
89
&&
$pd
[
'name'
]
==
'是TSEROF啦!'
)
{
{
if
(
$pd
[
'lvl'
]
<
255
)
$pd
[
'lvl'
]
++
;
if
(
$pd
[
'lvl'
]
<
255
)
$pd
[
'lvl'
]
++
;
if
(
$pd
[
'rage'
]
<
255
)
$pd
[
'rage'
]
++
;
if
(
$pd
[
'rage'
]
<
255
)
$pd
[
'rage'
]
++
;
...
@@ -376,11 +389,10 @@
...
@@ -376,11 +389,10 @@
{
{
$log
.=
"<span class=
\"
neonblue
\"
>“我这双拳头……很强……很厉害……咚咚打你……”</span><br>"
;
$log
.=
"<span class=
\"
neonblue
\"
>“我这双拳头……很强……很厉害……咚咚打你……”</span><br>"
;
$damage
=
rand
(
5
,
40
);
$damage
=
rand
(
5
,
40
);
if
(
!
empty
(
$pd
[
'wep
s'
])
)
if
(
!
empty
(
$pd
[
'wep
e'
])
&&
$pd
[
'wepk'
]
!=
'WN'
)
{
{
$log
.=
"攻击使得<span class=
\"
red
\"
>
{
$pd
[
'wep'
]
}
</span>的耐久度下降了<span class=
\"
red
\"
>
$damage
</span>点!<br>"
;
$log
.=
"攻击使得<span class=
\"
red
\"
>
{
$pd
[
'wep'
]
}
</span>的效果下降了<span class=
\"
red
\"
>
$damage
</span>点!<br>"
;
$pd
[
'wep_imp_times'
]
=
$damage
;
$loss_flag
=
weapon_loss
(
$pd
,
$damage
,
1
,
1
);
$loss_flag
=
weapon_loss
(
$pd
,
1
);
if
(
$loss_flag
<
0
)
if
(
$loss_flag
<
0
)
{
{
$pa
[
'money'
]
=
$pa
[
'money'
]
+
(
$damage
*
120
);
$pa
[
'money'
]
=
$pa
[
'money'
]
+
(
$damage
*
120
);
...
@@ -388,9 +400,9 @@
...
@@ -388,9 +400,9 @@
}
}
foreach
(
Array
(
'arb'
,
'arh'
,
'ara'
,
'arf'
)
as
$ar
)
foreach
(
Array
(
'arb'
,
'arh'
,
'ara'
,
'arf'
)
as
$ar
)
{
{
if
(
!
empty
(
$
{
$ar
.
's'
}
))
if
(
!
empty
(
$
pd
[
$ar
.
's'
]
))
{
{
$loss_flag
=
armor_hurt
(
$pd
,
$ar
,
$damage
);
$loss_flag
=
armor_hurt
(
$pd
,
$ar
,
$damage
,
1
);
if
(
$loss_flag
<
0
)
if
(
$loss_flag
<
0
)
{
{
$pa
[
'money'
]
=
$pa
[
'money'
]
+
(
$damage
*
60
);
$pa
[
'money'
]
=
$pa
[
'money'
]
+
(
$damage
*
60
);
...
@@ -434,7 +446,6 @@
...
@@ -434,7 +446,6 @@
}
else
{
}
else
{
$log
.=
"<span class=
\"
yellow
\"
>体当冲刺朝你袭来!造成了<span class=
\"
red
\"
>550</span>点伤害!<br>"
;
$log
.=
"<span class=
\"
yellow
\"
>体当冲刺朝你袭来!造成了<span class=
\"
red
\"
>550</span>点伤害!<br>"
;
$dmg
=
250
;
$dmg
=
250
;
if
(
$hp
<
0
)
$hp
=
0
;
}
}
return
$dmg
;
return
$dmg
;
}
}
...
...
include/game/revbattle.func.php
View file @
4d4c0c2f
...
@@ -8,13 +8,16 @@
...
@@ -8,13 +8,16 @@
function
findenemy_rev
(
$edata
)
function
findenemy_rev
(
$edata
)
{
{
global
$db
,
$tablepre
;
global
$db
,
$tablepre
;
global
$fog
,
$pid
,
$log
,
$mode
,
$main
,
$cmd
,
$battle_title
,
$attinfo
,
$skillinfo
;
global
$fog
,
$pid
,
$log
,
$mode
,
$main
,
$cmd
,
$battle_title
,
$attinfo
,
$skillinfo
,
$nosta
;
$battle_title
=
'发现敌人'
;
$battle_title
=
'发现敌人'
;
//
保存当前玩家数据,返回当前玩家数据组
//
获取并保存当前玩家数据
$sdata
=
current_player_save
();
$sdata
=
current_player_save
();
//格式化双方clbpara
$sdata
[
'clbpara'
]
=
get_clbpara
(
$sdata
[
'clbpara'
]);
$edata
[
'clbpara'
]
=
get_clbpara
(
$edata
[
'clbpara'
]);
//格式化对战双方数据
//格式化对战双方数据
$init_data
=
update_db_player_structure
();
$init_data
=
update_db_player_structure
();
foreach
(
Array
(
'w_'
,
's_'
)
as
$p
)
foreach
(
Array
(
'w_'
,
's_'
)
as
$p
)
...
@@ -24,13 +27,14 @@
...
@@ -24,13 +27,14 @@
extract
(
$edata
,
EXTR_PREFIX_ALL
,
'w'
);
extract
(
$sdata
,
EXTR_PREFIX_ALL
,
's'
);
extract
(
$edata
,
EXTR_PREFIX_ALL
,
'w'
);
extract
(
$sdata
,
EXTR_PREFIX_ALL
,
's'
);
init_rev_battle
();
init_rev_battle
();
$log
.=
"你发现了敌人<span class=
\"
red
\"
>
$w_name
</span>!<br>对方好像完全没有注意到你!<br>"
;
$log
.=
"你发现了敌人<span class=
\"
red
\"
>
{
$w_name
}
</span>!<br>对方好像完全没有注意到你!<br>"
;
//初始化玩家攻击方式信息
//初始化玩家攻击方式信息
$w1
=
substr
(
$s_wepk
,
1
,
1
);
$w1
=
substr
(
$s_wepk
,
1
,
1
);
$w2
=
substr
(
$s_wepk
,
2
,
1
);
$w2
=
substr
(
$s_wepk
,
2
,
1
);
if
(
$w2
==
'0'
||
$w2
==
'1'
)
$w2
=
''
;
if
(
$w2
==
'0'
||
$w2
==
'1'
)
$w2
=
''
;
if
((
$w1
==
'G'
||
$w1
==
'J'
)
&&
(
$s_weps
==
$nosta
))
$w1
=
'P'
;
if
((
$w1
==
'G'
||
$w1
==
'J'
)
&&
(
$s_weps
==
$nosta
))
$w1
=
'P'
;
include
template
(
'battlecmd_rev'
);
include
template
(
'battlecmd_rev'
);
$cmd
=
ob_get_contents
();
$cmd
=
ob_get_contents
();
ob_clean
();
ob_clean
();
...
@@ -41,20 +45,31 @@
...
@@ -41,20 +45,31 @@
//发现中立NPC $kind 0=中立单位 1=友军
//发现中立NPC $kind 0=中立单位 1=友军
function
findneut
(
&
$edata
,
$kind
=
0
)
function
findneut
(
&
$edata
,
$kind
=
0
)
{
{
global
$
log
,
$action
,
$mode
,
$name
,
$main
,
$cmd
,
$battle_title
,
$pid
,
$
db
,
$tablepre
;
global
$db
,
$tablepre
;
global
$
w_type
,
$w_name
,
$w_gd
,
$w_sNo
,
$w_icon
,
$w_hp
,
$w_mhp
,
$w_sp
,
$w_msp
,
$w_rage
,
$w_wep
,
$w_wepk
,
$w_wepe
,
$w_lvl
,
$w_pose
,
$w_tactic
,
$w_inf
;
global
$
fog
,
$log
,
$mode
,
$main
,
$cmd
,
$battle_title
,
$attinfo
,
$skillinfo
;
$battle_title
=
$kind
?
'发现朋友'
:
'发现敌人?'
;
$battle_title
=
$kind
?
'发现朋友'
:
'发现敌人?'
;
extract
(
$edata
,
EXTR_PREFIX_ALL
,
'w'
);
//获取并保存当前玩家数据
init_battle
(
1
);
$sdata
=
current_player_save
();
if
(
!
is_array
(
$edata
[
'clbpara'
]))
$edata
[
'clbpara'
]
=
get_clbpara
(
$edata
[
'clbpara'
]);
//格式化双方clbpara
$sdata
[
'clbpara'
]
=
get_clbpara
(
$sdata
[
'clbpara'
]);
$edata
[
'clbpara'
]
=
get_clbpara
(
$edata
[
'clbpara'
]);
//格式化双方数据
$init_data
=
update_db_player_structure
();
foreach
(
Array
(
'w_'
,
's_'
,
''
)
as
$p
)
{
foreach
(
$init_data
as
$i
)
global
$
{
$p
.
$i
};
}
extract
(
$edata
,
EXTR_PREFIX_ALL
,
'w'
);
extract
(
$sdata
,
EXTR_PREFIX_ALL
,
's'
);
init_rev_battle
(
1
);
$log
.=
"你发现了<span class=
\"
yellow
\"
>
$w_name
</span>!<br>"
;
$log
.=
"你发现了<span class=
\"
yellow
\"
>
$w_name
</span>!<br>"
;
if
(
!
$kind
)
$log
.=
"对方看起来没有敌意。<br>"
;
if
(
!
$kind
)
$log
.=
"对方看起来没有敌意。<br>"
;
//TODO:把这一段挪到一个独立函数里
//TODO:把这一段挪到一个独立函数里
if
(
$edata
[
'clbpara'
][
'post'
]
==
$
pid
)
if
(
$edata
[
'clbpara'
][
'post'
]
==
$
sdata
[
'pid'
]
)
{
{
$log
.=
"对方一看见你,便猛地朝你扑了过来!<br>
$log
.=
"对方一看见你,便猛地朝你扑了过来!<br>
<br><span class='sienna'>“老板!有你的快递喔!”</span><br>
<br><span class='sienna'>“老板!有你的快递喔!”</span><br>
...
@@ -81,7 +96,7 @@
...
@@ -81,7 +96,7 @@
include
template
(
'findneut'
);
include
template
(
'findneut'
);
$cmd
=
ob_get_contents
();
$cmd
=
ob_get_contents
();
ob_clean
();
ob_clean
();
$main
=
'battle'
;
$main
=
'battle
_rev
'
;
return
;
return
;
}
}
?>
?>
\ No newline at end of file
include/game/revcombat.func.php
View file @
4d4c0c2f
...
@@ -8,25 +8,34 @@
...
@@ -8,25 +8,34 @@
include_once
GAME_ROOT
.
'./include/game/revattr.func.php'
;
include_once
GAME_ROOT
.
'./include/game/revattr.func.php'
;
include_once
GAME_ROOT
.
'./include/game/combat.func.php'
;
include_once
GAME_ROOT
.
'./include/game/combat.func.php'
;
//战斗准备流程:根据active为交战双方分配视角,初始化界面
# 战斗准备流程:
# pa、pd分别代表先制发现者与被先制发现者;
# active用于判断当前的主视角(玩家、战斗界面下方那一栏)对应pa还是pd;
# actvie=1代表主视角是pa,否则主视角是pd;
function
rev_combat_prepare
(
$pa
,
$pd
,
$active
,
$wep_kind
=
''
,
$msg
=
''
,
$log_print
=
1
)
function
rev_combat_prepare
(
$pa
,
$pd
,
$active
,
$wep_kind
=
''
,
$msg
=
''
,
$log_print
=
1
)
{
{
global
$db
,
$tablepre
,
$log
,
$mode
,
$main
,
$cmd
,
$battle_title
;
global
$db
,
$tablepre
,
$log
,
$mode
,
$main
,
$cmd
,
$battle_title
;
//没有传入pd时,读取当前玩家数据
# actvie=0但没有传入pd时,读取当前玩家数据。
if
(
!
isset
(
$pd
))
$pd
=
current_player_save
();
# pa无论怎样都会有的,因为玩家主动发现还要过一遍findenemy()
if
(
!
isset
(
$pd
)
&&
!
$active
)
$pd
=
current_player_save
();
//显示界面
# 格式化双方clbpara:最后保存角色数据的时候会自动转写clbpara,所以想改什么直接改就行了
$pa
[
'clbpara'
]
=
get_clbpara
(
$pa
[
'clbpara'
]);
$pd
[
'clbpara'
]
=
get_clbpara
(
$pd
[
'clbpara'
]);
# 是否显示战斗界面
if
(
$log_print
)
if
(
$log_print
)
{
{
//格式化交战双方信息
// 格式化交战双方信息
// 主视角(战斗界面下方那一栏)前缀是$s_;敌对视角前缀是$w_;
// 为什么要这么搞……?都是为了兼容 NPC vs NPC 的战斗场景……
$init_data
=
update_db_player_structure
();
$init_data
=
update_db_player_structure
();
foreach
(
Array
(
'w_'
,
's_'
)
as
$p
)
foreach
(
Array
(
'w_'
,
's_'
)
as
$p
)
{
{
foreach
(
$init_data
as
$i
)
global
$
{
$p
.
$i
};
foreach
(
$init_data
as
$i
)
global
$
{
$p
.
$i
};
}
}
if
(
$active
)
if
(
$active
)
{
//
先制攻击,主视角是pa,给一个s_前缀;敌对视角是pd,给
一个w_前缀;
{
//
先制攻击,主视角是pa,给pa一个s_前缀;敌对视角是pd,给pd
一个w_前缀;
extract
(
$pa
,
EXTR_PREFIX_ALL
,
's'
);
extract
(
$pd
,
EXTR_PREFIX_ALL
,
'w'
);
extract
(
$pa
,
EXTR_PREFIX_ALL
,
's'
);
extract
(
$pd
,
EXTR_PREFIX_ALL
,
'w'
);
}
}
else
else
...
@@ -38,37 +47,37 @@
...
@@ -38,37 +47,37 @@
$main
=
'battle_rev'
;
$main
=
'battle_rev'
;
}
}
//
加入喊话
#
加入喊话
if
(
!
empty
(
$msg
))
$pa
[
'message'
]
=
$msg
;
if
(
!
empty
(
$msg
))
$pa
[
'message'
]
=
$msg
;
//
进入战斗流程
#
进入战斗流程
rev_combat
(
$pa
,
$pd
,
$active
,
$wep_kind
,
$log_print
);
rev_combat
(
$pa
,
$pd
,
$active
,
$wep_kind
,
$log_print
);
}
}
//
战斗流程:
#
战斗流程:
function
rev_combat
(
&
$pa
,
&
$pd
,
$active
,
$wep_kind
=
''
,
$log_print
=
1
)
function
rev_combat
(
&
$pa
,
&
$pd
,
$active
,
$wep_kind
=
''
,
$log_print
=
1
)
{
{
global
$db
,
$tablepre
,
$now
,
$mode
,
$main
,
$cmd
,
$log
;
global
$db
,
$tablepre
,
$now
,
$mode
,
$main
,
$cmd
,
$log
;
global
$hdamage
,
$hplayer
,
$message
;
global
$hdamage
,
$hplayer
;
global
$infinfo
,
$plsinfo
,
$hplsinfo
,
$nosta
;
global
$infinfo
,
$plsinfo
,
$hplsinfo
,
$nosta
;
//
登记非功能性地点信息时合并隐藏地点
#
登记非功能性地点信息时合并隐藏地点
foreach
(
$hplsinfo
as
$hgroup
=>
$hpls
)
$plsinfo
+=
$hpls
;
foreach
(
$hplsinfo
as
$hgroup
=>
$hpls
)
$plsinfo
+=
$hpls
;
//登记称谓
# 登记称谓:之后的流程里已经用不到active了(大概)
$pa
[
'nm'
]
=
(
!
$pa
[
'type'
]
&&
$active
)
?
'你'
:
$pa
[
'name'
];
$pa
[
'nm'
]
=
(
!
$pa
[
'type'
]
&&
$active
)
?
'你'
:
$pa
[
'name'
];
$pd
[
'nm'
]
=
(
!
$pd
[
'type'
]
&&
!
$active
&&
$pa
[
'nm'
]
!==
'你'
)
?
'你'
:
$pd
[
'name'
];
$pd
[
'nm'
]
=
(
!
$pd
[
'type'
]
&&
!
$active
&&
$pa
[
'nm'
]
!==
'你'
)
?
'你'
:
$pd
[
'name'
];
//在初始化战斗阶段触发的事件。即:无论是否反击都只会触发1次的事件。
# 在初始化战斗阶段触发的事件。即:无论是否反击都只会触发1次的事件。如果返回值小于0,则中断战斗。
//如果返回值小于0,则中断战斗。
$cp_flag
=
combat_prepare_events
(
$pa
,
$pd
,
$active
);
$cp_flag
=
combat_prepare_events
(
$pa
,
$pd
,
$active
);
if
(
$cp_flag
<
0
)
goto
battle_finish_flag
;
if
(
$cp_flag
<
0
)
goto
battle_finish_flag
;
# 遇敌log
if
(
$active
)
if
(
$active
)
{
{
if
(
!
$pa
[
'type'
]
&&
$pa
[
'message'
]
)
if
(
!
$pa
[
'type'
]
&&
isset
(
$pa
[
'message'
])
)
{
{
$log
.=
"<span class=
\"
lime
\"
>
{
$pa
[
'nm'
]
}
大喊着:
{
$pa
[
'message'
]
}
,
向<span class=
\"
red
\"
>
{
$pd
[
'nm'
]
}
</span>发起了攻击!</span><br>"
;
$log
.=
"<span class=
\"
lime
\"
>
{
$pa
[
'nm'
]
}
大喊着:
{
$pa
[
'message'
]
}
!
向<span class=
\"
red
\"
>
{
$pd
[
'nm'
]
}
</span>发起了攻击!</span><br>"
;
if
(
!
$pd
[
'type'
])
if
(
!
$pd
[
'type'
])
{
{
$w_log
=
"<span class=
\"
lime
\"
>
{
$pa
[
'name'
]
}
对你大喊:
{
$pa
[
'message'
]
}
</span><br>"
;
$w_log
=
"<span class=
\"
lime
\"
>
{
$pa
[
'name'
]
}
对你大喊:
{
$pa
[
'message'
]
}
</span><br>"
;
...
@@ -85,32 +94,33 @@
...
@@ -85,32 +94,33 @@
$log
.=
"<span class=
\"
red
\"
>
{
$pa
[
'nm'
]
}
</span>突然向
{
$pd
[
'nm'
]
}
袭来!<br>"
;
$log
.=
"<span class=
\"
red
\"
>
{
$pa
[
'nm'
]
}
</span>突然向
{
$pd
[
'nm'
]
}
袭来!<br>"
;
}
}
//战斗发起者是NPC时进行的判断
# 战斗发起者是NPC时
if
(
$pa
[
'type'
])
if
(
$pa
[
'type'
])
{
{
$log
.=
npc_chat
(
$pa
[
'type'
],
$pa
[
'name'
],
'attack'
);
$log
.=
npc_chat
(
$pa
[
'type'
],
$pa
[
'name'
],
'attack'
);
//换装判定
//换装判定
npc_changewep
(
);
npc_changewep
_rev
(
$pa
,
$pd
,
$active
);
}
}
//传入了攻击方式/主动技的情况下,在这里判断传入参数的合法性,并初始化$pa['wep_kind']
# 初始化双方的真实攻击方式wep_kind,传入了攻击方式/主动技的情况下,在这里判断传入参数的合法性。
get_wep_kind
(
$pa
,
$wep_kind
);
get_wep_kind
(
$pa
,
$wep_kind
);
get_wep_kind
(
$pd
);
get_wep_kind
(
$pd
);
//打击流程
# 打击流程
# 这里的第一个参数指的是进攻方(造成伤害的一方);第二个参数指的是防守方(承受伤害的一方)。active已经没用了。
# 传参的时候只用考虑参数位置,不用管pa、pd具体是谁。
$att_dmg
=
rev_attack
(
$pa
,
$pd
,
$active
);
$att_dmg
=
rev_attack
(
$pa
,
$pd
,
$active
);
//暴毙流程
# 存在暴毙标识:进攻方(pa)在进攻过程中未造成伤害就暴毙,可能是因为触发了武器直死。
if
(
$pa
[
'gg_flag'
]
)
if
(
isset
(
$pa
[
'gg_flag'
])
)
{
{
//登记暴毙死法
$pa
[
'hp'
]
=
0
;
//
执行复活判定:
//
提前进行战斗结果判断。注意:这里的pa、pd顺序。因为暴毙的是pa,所以pa放在第二个参数位置。
//
$revival_flag = revive_process($pa,$pd,$active);
//
在rev_combat_result()中:传入的第一个参数代表击杀者(敌人)、第二个参数代表死者。不用管是pa还是pd,只要按照这个规则传就行了。
//if(!$revival_flag) goto battle_finish_flag
;
$att_result
=
rev_combat_result
(
$pd
,
$pa
,
$active
)
;
}
}
# 没有暴毙,结算打击伤害
//打击效果结算
elseif
(
isset
(
$att_dmg
))
if
(
isset
(
$att_dmg
))
{
{
//扣血
//扣血
$pd
[
'hp'
]
=
max
(
0
,
$pd
[
'hp'
]
-
$att_dmg
);
$pd
[
'hp'
]
=
max
(
0
,
$pd
[
'hp'
]
-
$att_dmg
);
...
@@ -118,23 +128,25 @@
...
@@ -118,23 +128,25 @@
$att_result
=
rev_combat_result
(
$pa
,
$pd
,
$active
);
$att_result
=
rev_combat_result
(
$pa
,
$pd
,
$active
);
}
}
//判断是否进入反击流程 把!$att_result去掉可以实现复活后反击 很酷吧!
# 反击流程判断:$att_result>0,且敌人非治疗姿态或重视躲藏才会触发反击。 TODO:为反击条件新建一个函数
if
((
$pd
[
'hp'
]
>
0
)
&&
(
$pd
[
'pose'
]
!=
5
)
&&
(
$pd
[
'tactic'
]
!=
4
)
&&
$att_result
>
0
)
if
((
$pd
[
'hp'
]
>
0
)
&&
(
$pd
[
'pose'
]
!=
5
)
&&
(
$pd
[
'tactic'
]
!=
4
)
&&
$att_result
>
0
)
{
{
global
$rangeinfo
;
global
$rangeinfo
;
//echo "【DEBUG】{$pd['name']}的攻击方式是{$pd['wep_kind']}<br>";
# 通过武器射程判断是否满足反击条件。 TODO:为武器射程判断新建一个函数
$d_wep_temp
=
$pd
[
'wep'
];
if
(
$rangeinfo
[
$pa
[
'wep_kind'
]]
<=
$rangeinfo
[
$pd
[
'wep_kind'
]]
&&
$rangeinfo
[
$pa
[
'wep_kind'
]]
!==
0
)
if
(
$rangeinfo
[
$pa
[
'wep_kind'
]]
<=
$rangeinfo
[
$pd
[
'wep_kind'
]]
&&
$rangeinfo
[
$pa
[
'wep_kind'
]]
!==
0
)
{
{
# 计算基础反击率
$counter
=
get_counter
(
$pd
[
'wep_kind'
],
$pd
[
'tactic'
],
$pd
[
'club'
],
$pd
[
'inf'
]);
$counter
=
get_counter
(
$pd
[
'wep_kind'
],
$pd
[
'tactic'
],
$pd
[
'club'
],
$pd
[
'inf'
]);
# 计算社团技能对基础反击率的修正
$counter
*=
rev_get_clubskill_bonus_counter
(
$pd
[
'club'
],
$pd
[
'skills'
],
$pd
,
$pa
[
'club'
],
$pa
[
'skills'
],
$pa
);
$counter
*=
rev_get_clubskill_bonus_counter
(
$pd
[
'club'
],
$pd
[
'skills'
],
$pd
,
$pa
[
'club'
],
$pa
[
'skills'
],
$pa
);
$counter_dice
=
rand
(
0
,
99
);
# 掷骰
$counter_dice
=
diceroll
(
99
);
if
(
$counter_dice
<
$counter
)
if
(
$counter_dice
<
$counter
)
{
{
$log
.=
"<span class=
\"
red
\"
>
{
$pd
[
'nm'
]
}
的反击!</span><br>"
;
$log
.=
"<span class=
\"
red
\"
>
{
$pd
[
'nm'
]
}
的反击!</span><br>"
;
$log
.=
npc_chat
(
$pd
[
'type'
],
$pd
[
'nm'
],
'defend'
);
$log
.=
npc_chat
(
$pd
[
'type'
],
$pd
[
'nm'
],
'defend'
);
//反击打击实行
# 反击打击实行
# 因为这时候进攻方(造成伤害)的一方是pd,所以向第一个位置传入pd,向第二个位置(防守方)传入pa。
$def_dmg
=
rev_attack
(
$pd
,
$pa
,
1
);
$def_dmg
=
rev_attack
(
$pd
,
$pa
,
1
);
}
}
else
else
...
@@ -143,29 +155,38 @@
...
@@ -143,29 +155,38 @@
$log
.=
"<span class=
\"
red
\"
>
{
$pd
[
'nm'
]
}
处于无法反击的状态,逃跑了!</span><br>"
;
$log
.=
"<span class=
\"
red
\"
>
{
$pd
[
'nm'
]
}
处于无法反击的状态,逃跑了!</span><br>"
;
}
}
}
}
# 不满足射程
else
else
{
{
$log
.=
npc_chat
(
$pd
[
'type'
],
$pd
[
'nm'
],
'cannot'
);
$log
.=
npc_chat
(
$pd
[
'type'
],
$pd
[
'nm'
],
'cannot'
);
$log
.=
"<span class=
\"
red
\"
>
{
$pd
[
'nm'
]
}
攻击范围不足,不能反击,逃跑了!</span><br>"
;
$log
.=
"<span class=
\"
red
\"
>
{
$pd
[
'nm'
]
}
攻击范围不足,不能反击,逃跑了!</span><br>"
;
}
}
}
}
# 不满足基础反击条件
elseif
(
$pd
[
'hp'
]
>
0
&&
$att_result
>
0
)
elseif
(
$pd
[
'hp'
]
>
0
&&
$att_result
>
0
)
{
{
$log
.=
"<span class=
\"
red
\"
>
{
$pd
[
'nm'
]
}
没有反击,转身逃开了!</span><br>"
;
$log
.=
"<span class=
\"
red
\"
>
{
$pd
[
'nm'
]
}
没有反击,转身逃开了!</span><br>"
;
}
}
//反击效果结算
# 存在暴毙标识:反击方(pd)在反击过程中未造成伤害就暴毙,可能是因为触发了武器直死。
if
(
isset
(
$def_dmg
))
if
(
isset
(
$pd
[
'gg_flag'
]))
{
$pd
[
'hp'
]
=
0
;
//提前进行战斗结果判断。注意:这里的pa、pd顺序。
$att_result
=
rev_combat_result
(
$pa
,
$pd
,
$active
);
}
# 没有暴毙,结算反击伤害
elseif
(
isset
(
$def_dmg
))
{
{
//扣血
//扣血
$pa
[
'hp'
]
=
max
(
0
,
$pa
[
'hp'
]
-
$def_dmg
);
$pa
[
'hp'
]
=
max
(
0
,
$pa
[
'hp'
]
-
$def_dmg
);
//判断是否触发击杀或复活
//判断是否触发击杀或复活
。增补:$active已经没有用了,不用管它。
$def_result
=
rev_combat_result
(
$pd
,
$pa
,
1
-
$active
);
$def_result
=
rev_combat_result
(
$pd
,
$pa
,
1
-
$active
);
}
}
//
检查是否更新最高伤害情报
#
检查是否更新最高伤害情报
$att_dmg
=
$att_dmg
?
$att_dmg
:
0
;
$att_dmg
=
!
empty
(
$att_dmg
)
?
$att_dmg
:
0
;
$def_dmg
=
$def_dmg
?
$def_dmg
:
0
;
$def_dmg
=
!
empty
(
$def_dmg
)
?
$def_dmg
:
0
;
if
((
$att_dmg
>
$hdamage
)
&&
(
$att_dmg
>=
$def_dmg
)
&&
(
!
$pa
[
'type'
]))
{
if
((
$att_dmg
>
$hdamage
)
&&
(
$att_dmg
>=
$def_dmg
)
&&
(
!
$pa
[
'type'
]))
{
$hdamage
=
$att_dmg
;
$hdamage
=
$att_dmg
;
$hplayer
=
$pa
[
'name'
];
$hplayer
=
$pa
[
'name'
];
...
@@ -176,14 +197,25 @@
...
@@ -176,14 +197,25 @@
save_combatinfo
();
save_combatinfo
();
}
}
//
logsave
# 敌人是玩家,更新
logsave
if
(
!
$pd
[
'type'
]
)
if
(
(
$active
&&
!
$pd
[
'type'
])
||
(
!
$active
&&
!
$pa
[
'type'
])
)
{
{
if
(
$active
)
{
$w_log
=
"手持<span class=
\"
red
\"
>
{
$pa
[
'wep_name'
]
}
</span>的<span class=
\"
yellow
\"
>
{
$pa
[
'name'
]
}
</span>向你袭击!<br>你受到其<span class=
\"
yellow
\"
>
$att_dmg
</span>点攻击,对其做出了<span class=
\"
yellow
\"
>
$def_dmg
</span>点反击。<br>"
;
logsave
(
$pd
[
'pid'
],
$now
,
$w_log
,
'c'
);
}
else
{
$w_log
=
"你发现了手持<span class=
\"
red
\"
>
{
$pd
[
'wep_name'
]
}
</span>的<span class=
\"
yellow
\"
>
{
$pd
[
'name'
]
}
</span>并且先发制人!<br>你对其做出<span class=
\"
yellow
\"
>
$att_dmg
</span>点攻击,受到其<span class=
\"
yellow
\"
>
$def_dmg
</span>点反击。<br>"
;
logsave
(
$pa
[
'pid'
],
$now
,
$w_log
,
'c'
);
}
}
}
# 战斗准备事件中触发了跳过战斗标记,直接goto跳转到这个位置。
battle_finish_flag
:
battle_finish_flag
:
//如果战斗中出现了死人 更新action标记
# 如果战斗中出现了死者 更新action标记
if
(
$active
)
if
(
$active
)
{
{
if
(
$pd
[
'hp'
]
<=
0
&&
$pa
[
'hp'
]
>
0
)
if
(
$pd
[
'hp'
]
<=
0
&&
$pa
[
'hp'
]
>
0
)
...
@@ -206,32 +238,33 @@
...
@@ -206,32 +238,33 @@
$pd
[
'action'
]
=
'corpse'
.
$pa
[
'pid'
];
$pd
[
'action'
]
=
'corpse'
.
$pa
[
'pid'
];
}
}
}
}
if
(
!
$pa
[
'type'
]
&&
$acitve
)
# 主视角不是玩家,可能是玩家召唤的NPC帮手。将身上的印记传给玩家。
if
(
!
$pa
[
'type'
]
&&
$active
)
{
{
//主视角-pa是NPC的情况下,把身上的标记传递给玩家
//主视角-pa是NPC的情况下,把身上的标记传递给玩家
global
$action
;
global
$action
;
$action
=
$pa
[
'action'
];
$action
=
$pa
[
'action'
];
}
}
//保存两个人的状态
# 保存双方状态
if
(
$active
)
if
(
$active
)
{
{
//pa是玩家/主视角NPC的情况下 把edata(
w_前缀)发给$pd
//pa是玩家/主视角NPC的情况下 把edata(
$w_*)发给$pd 把sdata($s_*) 发给$pa
$edata
=
$pd
;
$sdata
=
$pa
;
$edata
=
$pd
;
$sdata
=
$pa
;
player_save
(
$pa
);
player_save
(
$pd
);
player_save
(
$pa
);
player_save
(
$pd
);
if
(
!
$pd
[
'type'
])
save_enemy_battlelog
(
$pd
);
}
}
else
else
{
{
//pd是玩家/主视角NPC的情况下 把edata(
w_前缀)发给$pa
//pd是玩家/主视角NPC的情况下 把edata(
$w_*)发给$pa 把sdata($s_*) 发给$pd
$edata
=
$pa
;
$sdata
=
$pd
;
$edata
=
$pa
;
$sdata
=
$pd
;
player_save
(
$pa
);
player_save
(
$pd
);
player_save
(
$pa
);
player_save
(
$pd
);
if
(
!
$pa
[
'type'
])
save_enemy_battlelog
(
$pa
);
}
}
//
刷新玩家状态
#
刷新玩家状态
if
(
!
$sdata
[
'type'
])
player_load
(
$sdata
);
if
(
!
$sdata
[
'type'
])
player_load
(
$sdata
);
//刷新界面状态
# 刷新界面显示 蛋疼度+233
$init_data
=
update_db_player_structure
();
$init_data
=
update_db_player_structure
();
foreach
(
Array
(
'w_'
,
's_'
,
''
)
as
$p
)
foreach
(
Array
(
'w_'
,
's_'
,
''
)
as
$p
)
{
{
...
@@ -241,7 +274,7 @@
...
@@ -241,7 +274,7 @@
init_rev_battle
(
1
);
init_rev_battle
(
1
);
$main
=
'battle_rev'
;
$main
=
'battle_rev'
;
//获取后续
页面
# 根据玩家身上的标记($action) 判断接下来要跳转的
页面
if
(
substr
(
$action
,
0
,
6
)
==
'corpse'
)
if
(
substr
(
$action
,
0
,
6
)
==
'corpse'
)
{
{
include_once
GAME_ROOT
.
'./include/game/battle.func.php'
;
include_once
GAME_ROOT
.
'./include/game/battle.func.php'
;
...
@@ -256,29 +289,14 @@
...
@@ -256,29 +289,14 @@
return
;
return
;
}
}
//打击流程:
# 打击流程:
# 这里的第一个参数pa指的是进攻方(造成伤害的一方);第二个参数pd指的是防守方(承受伤害的一方)。active已经没用了。
# 传参的时候只用考虑位置,不用管pa、pd都是谁。
function
rev_attack
(
&
$pa
,
&
$pd
,
$active
=
1
)
function
rev_attack
(
&
$pa
,
&
$pd
,
$active
=
1
)
{
{
//通用
global
$now
,
$nosta
,
$log
,
$infobbs
,
$infinfo
,
$attinfo
,
$skillinfo
,
$wepimprate
,
$specialrate
;
global
$now
,
$nosta
,
$log
,
$infobbs
,
$infinfo
,
$attinfo
,
$skillinfo
,
$wepimprate
,
$specialrate
;
global
$db
,
$tablepre
;
global
$db
,
$tablepre
;
# 在打击流程开始前判定的事件(直死、临摹装置、DOT结算、踩陷阱……) 返回1-继续打击流程 返回0-中止打击流程
$gg_flag
=
hitrate_prepare_events
(
$pa
,
$pd
,
$active
);
if
(
!
$gg_flag
)
return
0
;
//枪托修正:你怎么老搞特殊化
if
((
$pa
[
'wep_kind'
]
==
'G'
||
$pa
[
'wep_kind'
]
==
'J'
)
&&
(
$pa
[
'weps'
]
==
$nosta
))
{
$pa
[
'wep_kind'
]
=
'P'
;
$pa
[
'is_wpg'
]
=
true
;
}
//登记武器名
$pa
[
'wep_name'
]
=
$pa
[
'wep'
];
$log
.=
"
{
$pa
[
'nm'
]
}
使用
{
$pa
[
'wep'
]
}
<span class=
\"
yellow
\"
>
{
$attinfo
[
$pa
[
'wep_kind'
]]
}
</span>
{
$pd
[
'nm'
]
}
!<br>"
;
# 获取属性
# 获取属性
$pa
[
'ex_equip_keys'
]
=
$pa
[
'ex_wep_keys'
]
=
Array
();
$pa
[
'ex_equip_keys'
]
=
$pa
[
'ex_wep_keys'
]
=
Array
();
$pa
[
'ex_equip_keys'
]
=
get_equip_ex_array
(
$pa
);
//获取pa防具上的所有属性
$pa
[
'ex_equip_keys'
]
=
get_equip_ex_array
(
$pa
);
//获取pa防具上的所有属性
...
@@ -288,34 +306,43 @@
...
@@ -288,34 +306,43 @@
$pd
[
'ex_equip_keys'
]
=
get_equip_ex_array
(
$pd
);
//获取pd防具上的所有属性
$pd
[
'ex_equip_keys'
]
=
get_equip_ex_array
(
$pd
);
//获取pd防具上的所有属性
$pd
[
'ex_wep_keys'
]
=
get_wep_ex_array
(
$pd
);
//获取pd武器、饰品上的所有属性
$pd
[
'ex_wep_keys'
]
=
get_wep_ex_array
(
$pd
);
//获取pd武器、饰品上的所有属性
//
技能抽取判定
#
技能抽取判定
if
(
in_array
(
'+'
,
array_merge
(
$pa
[
'ex_wep_keys'
],
$pa
[
'ex_equip_keys'
]))
||
in_array
(
'+'
,
array_merge
(
$pd
[
'ex_wep_keys'
],
$pd
[
'ex_equip_keys'
])))
if
(
in_array
(
'+'
,
array_merge
(
$pa
[
'ex_wep_keys'
],
$pa
[
'ex_equip_keys'
]))
||
in_array
(
'+'
,
array_merge
(
$pd
[
'ex_wep_keys'
],
$pd
[
'ex_equip_keys'
])))
{
{
$log
.=
"<span class=
\"
yellow
\"
>技能抽取使双方的武器熟练度在战斗中大幅下降!</span><br>"
;
$log
.=
"<span class=
\"
yellow
\"
>技能抽取使双方的武器熟练度在战斗中大幅下降!</span><br>"
;
$pa
[
'skdr_flag'
]
=
$pd
[
'skdr_flag'
]
=
1
;
$pa
[
'skdr_flag'
]
=
$pd
[
'skdr_flag'
]
=
1
;
}
}
//
灵魂抽取判定
#
灵魂抽取判定
if
(
in_array
(
'*'
,
$pa
[
'ex_wep_keys'
])
||
in_array
(
'*'
,
$pd
[
'ex_wep_keys'
]))
if
(
in_array
(
'*'
,
$pa
[
'ex_wep_keys'
])
||
in_array
(
'*'
,
$pd
[
'ex_wep_keys'
]))
{
{
$log
.=
"<span class=
\"
yellow
\"
>灵魂抽取使双方的武器和饰物属性全部失效!</span><br>"
;
$log
.=
"<span class=
\"
yellow
\"
>灵魂抽取使双方的武器和饰物属性全部失效!</span><br>"
;
$pa
[
'ex_wep_keys'
]
=
$pd
[
'ex_wep_keys'
]
=
Array
();
$pa
[
'ex_wep_keys'
]
=
$pd
[
'ex_wep_keys'
]
=
Array
();
$pa
[
'sldr_flag'
]
=
$pd
[
'sldr_flag'
]
=
1
;
$pa
[
'sldr_flag'
]
=
$pd
[
'sldr_flag'
]
=
1
;
}
}
//
精神抽取判定
#
精神抽取判定
if
(
in_array
(
'-'
,
$pa
[
'ex_equip_keys'
])
||
in_array
(
'-'
,
$pd
[
'ex_equip_keys'
]))
if
(
in_array
(
'-'
,
$pa
[
'ex_equip_keys'
])
||
in_array
(
'-'
,
$pd
[
'ex_equip_keys'
]))
{
{
$log
.=
"<span class=
\"
yellow
\"
>精神抽取使双方的防具属性全部失效!</span><br>"
;
$log
.=
"<span class=
\"
yellow
\"
>精神抽取使双方的防具属性全部失效!</span><br>"
;
$pa
[
'ex_equip_keys'
]
=
$pd
[
'ex_equip_keys'
]
=
Array
();
$pa
[
'ex_equip_keys'
]
=
$pd
[
'ex_equip_keys'
]
=
Array
();
$pa
[
'mdr_flag'
]
=
$pd
[
'mdr_flag'
]
=
1
;
$pa
[
'mdr_flag'
]
=
$pd
[
'mdr_flag'
]
=
1
;
}
}
//PS:三抽检定现在没有做彼此保留的额外判定。因为单独写在这里太丑陋了。
//
PS:三抽检定现在没有做彼此保留的额外判定。因为单独写在这里太丑陋了。
//因此如果一件武器/防具上同时带有3抽,有可能会被灵抽/精抽洗掉对方的效果。但是现在游戏里还没有这样的装备,所以等出问题了再解决。
//
因此如果一件武器/防具上同时带有3抽,有可能会被灵抽/精抽洗掉对方的效果。但是现在游戏里还没有这样的装备,所以等出问题了再解决。
//三抽检定过后把2个属性数组合并,不然每次都要拖着一长串
//三抽检定过后把2个属性数组合并,不然每次都要拖着一长串
$pa
[
'ex_keys'
]
=
array_merge
(
$pa
[
'ex_wep_keys'
],
$pa
[
'ex_equip_keys'
]);
unset
(
$pa
[
'ex_wep_keys'
]);
unset
(
$pa
[
'ex_equip_keys'
]);
$pa
[
'ex_keys'
]
=
array_merge
(
$pa
[
'ex_wep_keys'
],
$pa
[
'ex_equip_keys'
]);
unset
(
$pa
[
'ex_wep_keys'
]);
unset
(
$pa
[
'ex_equip_keys'
]);
$pd
[
'ex_keys'
]
=
array_merge
(
$pd
[
'ex_wep_keys'
],
$pd
[
'ex_equip_keys'
]);
unset
(
$pd
[
'ex_wep_keys'
]);
unset
(
$pd
[
'ex_equip_keys'
]);
$pd
[
'ex_keys'
]
=
array_merge
(
$pd
[
'ex_wep_keys'
],
$pd
[
'ex_equip_keys'
]);
unset
(
$pd
[
'ex_wep_keys'
]);
unset
(
$pd
[
'ex_equip_keys'
]);
# 获取真实熟练度 保存在$pa['wep_skill']内
# 在计算命中流程开始前判定的事件,分两种:(以后看情况要不要分成两个函数)
# 第一种:进攻方(pa)在进攻前因为某种缘故受到伤害、甚至暴毙(直死、DOT结算等) 。判断是否继续进攻流程;
# 如果需要登记特殊的死法,请给死者(比如pa)赋一个$pa['gg_flag'] = '死法编号'; 这样在后续的流程里会自动判定特殊死亡事件,如果没有登记特殊死法,会按照正常的战死流程登记;
# 第二种:pa对pd的装备、武器产生影响的特殊攻击(临摹装置、一些特殊的直接伤害等)。
# 如果这个阶段让pa或pd的武器发生了改变,记得使用get_wep_kind()刷新真实攻击方式。对武器和装备的破坏请使用weapon_loss()与armor_hurt()函数,以使装备在被破坏后从ex_keys中剔除对应的属性。
# 返回值小于0时中止流程,否则继续。
$flag
=
hitrate_prepare_events
(
$pa
,
$pd
,
$active
);
if
(
$flag
<
0
)
return
$flag
;
# 获取真实熟练度 保存在$pa['wep_skill']内。TODO:将熟练度计算汇总到一个函数内
if
(
$pa
[
'club'
]
==
18
)
if
(
$pa
[
'club'
]
==
18
)
{
{
$pa
[
'wep_skill'
]
=
round
(
$pa
[
$skillinfo
[
$pa
[
'wep_kind'
]]]
*
0.7
+
(
$pa
[
'wp'
]
+
$pa
[
'wk'
]
+
$pa
[
'wc'
]
+
$pa
[
'wg'
]
+
$pa
[
'wd'
]
+
$pa
[
'wf'
])
*
0.3
);
$pa
[
'wep_skill'
]
=
round
(
$pa
[
$skillinfo
[
$pa
[
'wep_kind'
]]]
*
0.7
+
(
$pa
[
'wp'
]
+
$pa
[
'wk'
]
+
$pa
[
'wc'
]
+
$pa
[
'wg'
]
+
$pa
[
'wd'
]
+
$pa
[
'wf'
])
*
0.3
);
...
@@ -324,7 +351,7 @@
...
@@ -324,7 +351,7 @@
{
{
$pa
[
'wep_skill'
]
=
$pa
[
$skillinfo
[
$pa
[
'wep_kind'
]]];
$pa
[
'wep_skill'
]
=
$pa
[
$skillinfo
[
$pa
[
'wep_kind'
]]];
}
}
//
应用技抽效果
#
应用技抽效果
if
(
isset
(
$pa
[
'skdr_flag'
])
||
isset
(
$pd
[
'skdr_flag'
]))
if
(
isset
(
$pa
[
'skdr_flag'
])
||
isset
(
$pd
[
'skdr_flag'
]))
{
{
$pa
[
'wep_skill'
]
=
sqrt
(
$pa
[
'wep_skill'
]);
$pa
[
'wep_skill'
]
=
sqrt
(
$pa
[
'wep_skill'
]);
...
@@ -334,6 +361,10 @@
...
@@ -334,6 +361,10 @@
$pa
[
'hitrate'
]
=
get_hitrate_rev
(
$pa
,
$pd
,
$active
);
$pa
[
'hitrate'
]
=
get_hitrate_rev
(
$pa
,
$pd
,
$active
);
# 计算命中次数 保存在$pa['hitrate_times']内
# 计算命中次数 保存在$pa['hitrate_times']内
get_hit_time_rev
(
$pa
,
$pd
,
$active
);
get_hit_time_rev
(
$pa
,
$pd
,
$active
);
# 在执行伤害计算前登记武器名 防止武器被消耗掉后不能正常登记击杀信息
$pa
[
'wep_name'
]
=
$pa
[
'wep'
];
$log
.=
"
{
$pa
[
'nm'
]
}
使用
{
$pa
[
'wep'
]
}
<span class=
\"
yellow
\"
>
{
$attinfo
[
$pa
[
'wep_kind'
]]
}
</span>
{
$pd
[
'nm'
]
}
!<br>"
;
# 命中次数大于0时 执行伤害判断
# 命中次数大于0时 执行伤害判断
if
(
$pa
[
'hitrate_times'
]
>
0
)
if
(
$pa
[
'hitrate_times'
]
>
0
)
...
@@ -343,6 +374,7 @@
...
@@ -343,6 +374,7 @@
if
(
isset
(
$fix_dmg
))
if
(
isset
(
$fix_dmg
))
{
{
$damage
=
$fix_dmg
;
$damage
=
$fix_dmg
;
if
(
$damage
<=
0
)
$log
.=
"<span class=
\"
yellow
\"
>造成的总伤害:<span class=
\"
red
\"
>
$damage
</span>。</span><br>"
;
}
}
//如无,则正常计算伤害
//如无,则正常计算伤害
else
else
...
@@ -359,7 +391,7 @@
...
@@ -359,7 +391,7 @@
//获取攻击方(pa)对伤害倍率施加的变化(连击、必杀、灵力武器发挥了x%的威力) 返回的是一个数组 每个值是一个单独的系数
//获取攻击方(pa)对伤害倍率施加的变化(连击、必杀、灵力武器发挥了x%的威力) 返回的是一个数组 每个值是一个单独的系数
$damage_p
=
get_damage_p_rev
(
$pa
,
$pd
,
$active
);
$damage_p
=
get_damage_p_rev
(
$pa
,
$pd
,
$active
);
//获取攻击方(pa)在造成伤害前触发的事件(检查pd身上是否有防御属性,pa是否触发了贯穿、冲击)
//获取攻击方(pa)在造成伤害前触发的事件(检查pd身上是否有防御属性,pa是否触发了贯穿、冲击)
attack
_prepare_events
(
$pa
,
$pd
,
$active
);
deal_damage
_prepare_events
(
$pa
,
$pd
,
$active
);
//获取防守方(pd)对伤害倍率施加的变化(防御属性、持有重枪受伤增加、热恋、同志) 系数保存在同一个数组里,分开2个函数只是为了调整log顺序
//获取防守方(pd)对伤害倍率施加的变化(防御属性、持有重枪受伤增加、热恋、同志) 系数保存在同一个数组里,分开2个函数只是为了调整log顺序
$damage_p
=
array_merge
(
$damage_p
,
get_damage_def_p_rev
(
$pa
,
$pd
,
$active
));
$damage_p
=
array_merge
(
$damage_p
,
get_damage_def_p_rev
(
$pa
,
$pd
,
$active
));
//计算物理伤害:
//计算物理伤害:
...
@@ -396,7 +428,7 @@
...
@@ -396,7 +428,7 @@
if
(
$pa
[
'ex_attack_keys'
])
if
(
$pa
[
'ex_attack_keys'
])
{
{
//获取攻击方(pa)在造成属性伤害前触发的事件(检查pd身上是否有防御属性,pa是否触发了属穿)
//获取攻击方(pa)在造成属性伤害前触发的事件(检查pd身上是否有防御属性,pa是否触发了属穿)
ex_attack
_prepare_events
(
$pa
,
$pd
,
$active
);
deal_ex_damage
_prepare_events
(
$pa
,
$pd
,
$active
);
//获取攻击方(pa)能造成的属性伤害
//获取攻击方(pa)能造成的属性伤害
$ex_damage
=
get_original_ex_dmg
(
$pa
,
$pd
,
$active
);
$ex_damage
=
get_original_ex_dmg
(
$pa
,
$pd
,
$active
);
...
@@ -430,18 +462,26 @@
...
@@ -430,18 +462,26 @@
}
}
#最终伤害计算部分:
#最终伤害计算部分:
//获取最终伤害的系数变化(晶莹)
//获取最终伤害的系数变化(晶莹
、书中虫减伤
)
$fin_damage_p
=
get_final_dmg_p
(
$pa
,
$pd
,
$active
);
$fin_damage_p
=
get_final_dmg_p
(
$pa
,
$pd
,
$active
);
//最终伤害存在系数队列的情况下,输出一段 AxBxC=D 格式的文本,但是如果最终伤害发生了定值变化,则不会使用这一段文本。
if
(
!
empty
(
$fin_damage_p
))
{
$fd_log
=
$damage
;
foreach
(
$fin_damage_p
as
$fin_p
)
foreach
(
$fin_damage_p
as
$fin_p
)
{
{
$damage
=
round
(
$damage
*
$fin_p
);
$damage
=
round
(
$damage
*
$fin_p
);
$fd_log
.=
"×
{
$fin_p
}
"
;
}
}
}
//获取最终伤害的定值变化(伤害制御、剔透)
//获取最终伤害的定值变化(伤害制御、剔透)
$damage
=
get_final_dmg_fix
(
$pa
,
$pd
,
$active
,
$damage
);
$fin_damage_fix
=
get_final_dmg_fix
(
$pa
,
$pd
,
$active
,
$damage
);
//输出log
if
(
$fin_damage_fix
>
0
)
$damage
+=
$fin_damage_fix
;
//存在物理伤害以外的其他伤害 输出一段最终伤害log:
if
(
$pdamage
!=
$damage
)
if
(
$pdamage
!=
$damage
)
{
{
$log
.=
"<span class=
\"
yellow
\"
>造成的总伤害:<span class=
\"
red
\"
>
$damage
</span>。</span><br>"
;
if
(
isset
(
$fd_log
)
&&
!
$fin_damage_fix
)
$log
.=
"<span class=
\"
yellow
\"
>造成的总伤害:
{
$fd_log
}
=<span class=
\"
red
\"
>
$damage
</span>。</span><br>"
;
else
$log
.=
"<span class=
\"
yellow
\"
>造成的总伤害:<span class=
\"
red
\"
>
$damage
</span>。</span><br>"
;
}
}
}
}
//将造成的最终伤害登记在$pa['final_damage']内
//将造成的最终伤害登记在$pa['final_damage']内
...
@@ -462,21 +502,23 @@
...
@@ -462,21 +502,23 @@
$log
.=
"但是没有击中!<br>"
;
$log
.=
"但是没有击中!<br>"
;
}
}
//计算武器损耗
//计算武器损耗
weapon_loss
(
$pa
);
if
(
!
empty
(
$pa
[
'wep_imp_times'
]))
weapon_loss
(
$pa
,
$pa
[
'wep_imp_times'
]
);
//发出声音
//发出声音
addnoise
(
$pa
[
'wep_kind'
],
$pa
[
'wepsk'
],
$now
,
$pa
[
'pls'
],
$pa
[
'pid'
],
$pd
[
'pid'
],
$pa
[
'wep_kind'
]
);
addnoise
(
$pa
[
'wep_kind'
],
$pa
[
'wepsk'
],
$now
,
$pa
[
'pls'
],
$pa
[
'pid'
],
$pd
[
'pid'
],
$pa
[
'wep_kind'
]
);
//增加熟练度
//增加熟练度
$pa
[
$skillinfo
[
$pa
[
'wep_kind'
]]]
+=
$pa
[
'club'
]
==
10
?
2
:
1
;
$pa
[
$skillinfo
[
$pa
[
'wep_kind'
]]]
+=
$pa
[
'club'
]
==
10
?
2
:
1
;
//print_r($pa);
return
$damage
;
return
$damage
;
}
}
//战斗结算流程:返回1=继续战斗;返回0=中止战斗;
# 战斗结算流程:返回1=继续战斗;返回0=中止战斗;
# 这里第一个参数pa指的是杀人者(敌对方)视角,第二个参数pd指的是死者(受到伤害者)视角。不需要考虑papd具体是谁,只要按照这个规则传参就行
# active已经没用了……大概吧
function
rev_combat_result
(
&
$pa
,
&
$pd
,
$active
)
function
rev_combat_result
(
&
$pa
,
&
$pd
,
$active
)
{
{
global
$log
;
global
$log
;
#
防守方
血量低于0时 结算击杀/复活事件
#
死者(受伤者)pd
血量低于0时 结算击杀/复活事件
if
(
$pd
[
'hp'
]
<=
0
)
if
(
$pd
[
'hp'
]
<=
0
)
{
{
# NPC二阶段处理:
# NPC二阶段处理:
...
@@ -499,47 +541,66 @@
...
@@ -499,47 +541,66 @@
# 击杀、复活判定检查
# 击杀、复活判定检查
else
else
{
{
# 如果存在暴毙标记,证明pd是在攻击过程中死掉的,发送一个暴毙log
if
(
isset
(
$pd
[
'gg_flag'
]))
{
$death_flag
=
$pd
[
'gg_flag'
];
unset
(
$pd
[
'gg_flag'
]);
$log
.=
"<span class=
\"
red
\"
>
{
$pd
[
'nm'
]
}
在与
{
$pa
[
'nm'
]
}
的战斗中意外身亡!</span><br>"
;
}
# 否则,pd作为防守方被打死,发送正常击杀log
else
{
$death_flag
=
$pa
[
'wep_kind'
];
$log
.=
"<span class=
\"
red
\"
>
{
$pd
[
'nm'
]
}
被
{
$pa
[
'nm'
]
}
杀死了!</span><br>"
;
$log
.=
"<span class=
\"
red
\"
>
{
$pd
[
'nm'
]
}
被
{
$pa
[
'nm'
]
}
杀死了!</span><br>"
;
//执行不需要考虑复活问题的击杀事件:
}
$lastword
=
pre_kill_events
(
$pa
,
$pd
,
$active
,
$pa
[
'wep_kind'
]);
# 执行不需要考虑复活问题的击杀事件:
//执行复活判定:
$lastword
=
pre_kill_events
(
$pa
,
$pd
,
$active
,
$death_flag
);
# 执行复活判定:
$revival_flag
=
revive_process
(
$pa
,
$pd
,
$active
);
$revival_flag
=
revive_process
(
$pa
,
$pd
,
$active
);
//
没有复活的情况下,执行完后续击杀事件:
#
没有复活的情况下,执行完后续击杀事件:
if
(
!
$revival_flag
)
if
(
!
$revival_flag
)
{
{
global
$alivenum
,
$deathnum
;
global
$alivenum
,
$deathnum
;
$pd
[
'hp'
]
=
0
;
$pd
[
'hp'
]
=
0
;
//初始化遗言
# 初始化遗言
if
(
!
$pd
[
'type'
])
if
(
!
$pd
[
'type'
])
{
{
//死者是玩家,增加击杀数并保存系统状况。
//死者是玩家,增加击杀数并保存系统状况。
$pa
[
'killnum'
]
++
;
$pa
[
'killnum'
]
++
;
$alivenum
--
;
$alivenum
--
;
if
(
!
empty
(
$lastword
))
$log
.=
"<span class='evergreen'>你用尽最后的力气喊道:“"
.
$lastword
.
"”</span><br>"
;
}
}
else
else
{
{
//死者是NPC,加载NPC遗言
//死者是NPC,加载NPC遗言
$l
astword
=
npc_chat
(
$pd
[
'type'
],
$pd
[
'name'
],
'death'
);
$l
og
.
=
npc_chat
(
$pd
[
'type'
],
$pd
[
'name'
],
'death'
);
}
}
$deathnum
++
;
$deathnum
++
;
if
(
!
empty
(
$lastword
))
$log
.=
"<span class='yellow'>“"
.
$lastword
.
"”</span><br>"
;
//
初始化killmsg
#
初始化killmsg
if
(
!
$pa
[
'type'
])
if
(
!
$pa
[
'type'
])
{
{
global
$db
,
$tablepre
;
global
$db
,
$tablepre
;
$pname
=
$pa
[
'name'
];
$pname
=
$pa
[
'name'
];
$result
=
$db
->
query
(
"SELECT killmsg FROM
{
$tablepre
}
users WHERE username = '
$pname
'"
);
$result
=
$db
->
query
(
"SELECT killmsg FROM
{
$tablepre
}
users WHERE username = '
$pname
'"
);
$killmsg
=
$db
->
result
(
$result
,
0
);
$killmsg
=
$db
->
result
(
$result
,
0
);
if
(
!
empty
(
$killmsg
))
$log
.=
"<span class=
\"
evergreen
\"
>
{
$pa
[
'nm'
]
}
对
{
$pd
[
'nm'
]
}
说:“
{
$killmsg
}
”</span><br>"
;
}
}
else
else
{
{
$
killmsg
=
npc_chat
(
$pa
[
'type'
],
$pa
[
'name'
],
'kill'
);
$
log
.
=
npc_chat
(
$pa
[
'type'
],
$pa
[
'name'
],
'kill'
);
}
}
if
(
$killmsg
)
$log
.=
"<span class=
\"
yellow
\"
>
{
$pa
[
'nm'
]
}
对
{
$pd
[
'nm'
]
}
说:“
{
$killmsg
}
”</span><br>"
;
//
杀人rp结算
#
杀人rp结算
get_killer_rp
(
$pa
,
$pd
,
$active
);
get_killer_rp
(
$pa
,
$pd
,
$active
);
//保存游戏进行状态
# 执行死亡事件(灵魂绑定等)
check_death_events
(
$pa
,
$pd
,
$active
);
# 检查成就
include_once
GAME_ROOT
.
'./include/game/achievement.func.php'
;
check_battle_achievement
(
$pa
[
'name'
],
$pd
[
'type'
],
$pd
[
'name'
],
$pa
[
'wep_name'
]);
# 保存游戏进行状态
include_once
GAME_ROOT
.
'./include/system.func.php'
;
include_once
GAME_ROOT
.
'./include/system.func.php'
;
save_gameinfo
();
save_gameinfo
();
}
}
...
@@ -554,13 +615,18 @@
...
@@ -554,13 +615,18 @@
return
1
;
return
1
;
}
}
//执行不需要考虑复活问题的击杀事件:
# 执行不需要考虑复活问题的击杀事件:
# 再重复一遍:这里的第一个参数指的是杀人者(敌对方)视角,第二个参数指的是死者(受到伤害者)视角。
function
pre_kill_events
(
&
$pa
,
&
$pd
,
$active
,
$death
)
function
pre_kill_events
(
&
$pa
,
&
$pd
,
$active
,
$death
)
{
{
global
$log
,
$now
,
$db
,
$tablepre
,
$typeinfo
,
$lwinfo
;
global
$log
,
$now
,
$db
,
$tablepre
,
$typeinfo
,
$lwinfo
;
//登记死法
// 登记死法
if
(
$death
==
'N'
)
{
// 传入了数字编号死法
if
(
is_numeric
(
$death
))
{
$pd
[
'state'
]
=
$death
;
// 否则按照指定武器类型判断
}
elseif
(
$death
==
'N'
)
{
$pd
[
'state'
]
=
20
;
$pd
[
'state'
]
=
20
;
}
elseif
(
$death
==
'P'
)
{
}
elseif
(
$death
==
'P'
)
{
$pd
[
'state'
]
=
21
;
$pd
[
'state'
]
=
21
;
...
@@ -584,7 +650,6 @@
...
@@ -584,7 +650,6 @@
//初始化死者信息
//初始化死者信息
$dtype
=
$pd
[
'type'
];
$dname
=
$pd
[
'name'
];
$dpls
=
$pd
[
'pls'
];
$dtype
=
$pd
[
'type'
];
$dname
=
$pd
[
'name'
];
$dpls
=
$pd
[
'pls'
];
$lwname
=
$typeinfo
[
$dtype
]
.
' '
.
$dname
;
$lwname
=
$typeinfo
[
$dtype
]
.
' '
.
$dname
;
//初始化NPC遗言
//初始化NPC遗言
if
(
$dtype
)
if
(
$dtype
)
{
{
...
@@ -606,10 +671,11 @@
...
@@ -606,10 +671,11 @@
return
$lastword
;
return
$lastword
;
}
}
//执行复活事件:
# 执行复活事件:
# 重要的事情要说三次:这里的第一个参数指的是杀人者(敌对方)视角,第二个参数指的是死者(受到伤害者)视角。
function
revive_process
(
&
$pa
,
&
$pd
,
$active
)
function
revive_process
(
&
$pa
,
&
$pd
,
$active
)
{
{
global
$log
,
$weather
;
global
$log
,
$weather
,
$now
;
$revival_flag
=
0
;
$revival_flag
=
0
;
...
@@ -646,4 +712,151 @@
...
@@ -646,4 +712,151 @@
return
$revival_flag
;
return
$revival_flag
;
}
}
# 特殊死亡事件(灵魂绑定等)
function
check_death_events
(
&
$pa
,
&
$pd
,
$active
)
{
global
$db
,
$tablepre
,
$log
,
$now
,
$nosta
;
# 快递被劫事件:
if
(
isset
(
$pd
[
'clbpara'
][
'post'
]))
{
$log
.=
"<span class='sienna'>某样东西从
{
$pd
[
'name'
]
}
身上掉了出来……</span><br>"
;
//获取快递信息
$iid
=
$pd
[
'clbpara'
][
'postid'
];
//获取金主信息
$sponsorid
=
$pd
[
'clbpara'
][
'sponsor'
];
$result
=
$db
->
query
(
"SELECT * FROM
{
$tablepre
}
gambling WHERE uid = '
$sponsorid
'"
);
$sordata
=
$db
->
fetch_array
(
$result
);
//发一条news 表示快递被劫走了
addnews
(
$now
,
'gpost_failed'
,
$sordata
[
'uname'
],
$pd
[
'itm'
.
$iid
]);
//消除快递相关参数
unset
(
$pd
[
'clbpara'
][
'post'
]);
unset
(
$pd
[
'clbpara'
][
'postid'
]);
unset
(
$pd
[
'clbpara'
][
'sponsor'
]);
//解除快递锁
$db
->
query
(
"UPDATE
{
$tablepre
}
gambling SET bnid=0 WHERE uid='
$sponsorid
'"
);
}
# 灵魂绑定事件:
foreach
(
Array
(
'wep'
,
'arb'
,
'arh'
,
'ara'
,
'arf'
,
'art'
)
as
$equip
)
{
// ……我为什么不把这个装备名数组放进resources里……用了一万遍了
if
(
!
empty
(
$pd
[
$equip
.
's'
])
&&
strpos
(
$pd
[
$equip
.
'sk'
],
'v'
)
!==
false
)
{
$log
.=
"伴随着
{
$pd
[
'nm'
]
}
的死亡,<span class=
\"
yellow
\"
>
{
$pd
[
$equip
]
}
</span>也化作灰烬消散了。<br>"
;
$pd
[
$equip
]
=
$pd
[
$equip
.
'k'
]
=
$pd
[
$equip
.
'sk'
]
=
''
;
$pd
[
$equip
.
'e'
]
=
$pd
[
$equip
.
's'
]
=
0
;
if
(
$equip
==
'wep'
)
{
$pd
[
$equip
]
=
'拳头'
;
$pd
[
$equip
.
'k'
]
=
'WN'
;
$pd
[
$equip
.
'sk'
]
=
''
;
$pd
[
$equip
.
'e'
]
=
0
;
$pd
[
$equip
.
's'
]
=
$nosta
;
}
elseif
(
$equip
==
'arb'
)
{
$pd
[
$equip
]
=
'内衣'
;
$pd
[
$equip
.
'k'
]
=
'DN'
;
$pd
[
$equip
.
'sk'
]
=
''
;
$pd
[
$equip
.
'e'
]
=
0
;
$pd
[
$equip
.
's'
]
=
$nosta
;
}
}
}
for
(
$i
=
0
;
$i
<=
6
;
$i
++
)
{
if
(
!
empty
(
$pd
[
'itms'
.
$i
])
&&
strpos
(
$pd
[
'itmsk'
.
$i
],
'v'
)
!==
false
)
{
$log
.=
"伴随着
{
$pd
[
'nm'
]
}
的死亡,<span class=
\"
yellow
\"
>
{
$pd
[
'itm'
.
$i
]
}
</span>也化作灰烬消散了。<br>"
;
$pd
[
'itm'
.
$i
]
=
$pd
[
'itmk'
.
$i
]
=
$pd
[
'itmsk'
.
$i
]
=
''
;
$pd
[
'itme'
.
$i
]
=
$pd
[
'itms'
.
$i
]
=
0
;
}
}
return
;
}
# NPC自动换装
#说实话没有完全看懂,但是能跑就行
function
npc_changewep_rev
(
&
$pa
,
&
$pd
,
$acitve
)
{
global
$now
,
$log
;
global
$rangeinfo
,
$ex_dmg_def
;
if
(
!
$pa
[
'type'
]
||
$pa
[
'club'
]
!=
98
)
return
;
$dice
=
diceroll
(
99
);
if
(
$dice
>
50
)
{
$weplist
=
Array
();
$wepklist
=
Array
(
$pa
[
'wepk'
]);
$weplist2
=
Array
();
for
(
$i
=
0
;
$i
<=
6
;
$i
++
)
{
if
(
!
empty
(
$pa
[
'itms'
.
$i
])
&&
!
empty
(
$pa
[
'itme'
.
$i
])
&&
strpos
(
$pa
[
'itmk'
.
$i
],
'W'
)
===
0
)
{
$weplist
[]
=
Array
(
$i
,
$pa
[
'itm'
.
$i
],
$pa
[
'itmk'
.
$i
],
$pa
[
'itme'
.
$i
],
$pa
[
'itms'
.
$i
],
$pa
[
'itmsk'
.
$i
]);
$wepklist
[]
=
$pa
[
'itmk'
.
$i
];
}
}
if
(
!
empty
(
$weplist
))
{
$wepklist
=
array_unique
(
$wepklist
);
$temp_pd_ex_keys
=
array_merge
(
get_equip_ex_array
(
$pd
),
get_wep_ex_array
(
$pd
));
$wepkAI
=
$wepskAI
=
true
;
if
(
!
empty
(
$temp_pd_ex_keys
))
{
if
(
count
(
$wepklist
)
<=
1
)
$wepkAI
=
false
;
foreach
(
$temp_pd_ex_keys
as
$ex
)
{
if
(
in_array
(
$ex
,
Array
(
'A'
,
'B'
)))
$wepkAI
=
false
;
if
(
in_array
(
$ex
,
Array
(
'a'
,
'b'
)))
$wepskAI
=
false
;
}
}
if
(
$wepkAI
)
{
$wepk_temp
=
$pa
[
'wepk'
];
foreach
(
$weplist
as
$val
)
{
if
(
$rangeinfo
[
substr
(
$val
[
2
],
1
,
1
)]
>=
$rangeinfo
[
substr
(
$wepk_temp
,
1
,
1
)]
&&
!
in_array
(
substr
(
$val
[
2
],
1
,
1
),
$temp_pd_ex_keys
))
{
$weplist2
[]
=
$val
;
}
}
if
(
$weplist2
)
{
$weplist
=
$weplist2
;
}
}
if
(
$wepskAI
&&
$weplist
)
{
$minus
=
array
();
foreach
(
$weplist
as
$val
)
{
foreach
(
$ex_dmg_def
as
$key
=>
$val2
){
if
(
strpos
(
$val
[
5
],
$key
)
!==
false
&&
!
in_array
(
$val2
,
$temp_pd_ex_keys
)){
$minus
[]
=
$val
;
}
}
}
if
(
count
(
$minus
)
<
count
(
$weplist
)){
$weplist
=
array_diff
(
$weplist
,
$minus
);
}
}
}
else
{
//没有获取到可换装列表,直接返回
return
;
}
if
(
!
empty
(
$weplist
))
{
$oldwep
=
$pa
[
'wep'
];
shuffle
(
$weplist
);
$chosen
=
$weplist
[
0
];
$c
=
$chosen
[
0
];
//var_dump($chosen);
$pa
[
'itm'
.
$c
]
=
$pa
[
'wep'
];
$pa
[
'itmk'
.
$c
]
=
$pa
[
'wepk'
];
$pa
[
'itmsk'
.
$c
]
=
$pa
[
'wepsk'
];
$pa
[
'itme'
.
$c
]
=
$pa
[
'wepe'
];
$pa
[
'itms'
.
$c
]
=
$pa
[
'weps'
];
$pa
[
'wep'
]
=
$chosen
[
1
];
$pa
[
'wepk'
]
=
$chosen
[
2
];
$pa
[
'wepe'
]
=
$chosen
[
3
];
$pa
[
'weps'
]
=
$chosen
[
4
];
$pa
[
'wepsk'
]
=
$chosen
[
5
];
$pa
[
'wep_kind'
]
=
get_wep_kind
(
$pa
);
$log
.=
"<span class=
\"
yellow
\"
>
{
$pa
[
'nm'
]
}
</span>将手中的<span class=
\"
yellow
\"
>
{
$oldwep
}
</span>卸下,装备了<span class=
\"
yellow
\"
>
{
$pa
[
'wep'
]
}
</span>!<br>"
;
}
}
return
;
}
?>
?>
\ No newline at end of file
include/game/search.func.php
View file @
4d4c0c2f
...
@@ -592,7 +592,7 @@ function discover($schmode = 0) {
...
@@ -592,7 +592,7 @@ function discover($schmode = 0) {
{
{
$bid
=
$edata
[
'pid'
];
$bid
=
$edata
[
'pid'
];
$action
=
'neut'
.
$edata
[
'pid'
];
$action
=
'neut'
.
$edata
[
'pid'
];
include_once
GAME_ROOT
.
'./include/game/rev
combat
.func.php'
;
include_once
GAME_ROOT
.
'./include/game/rev
battle
.func.php'
;
findneut
(
$edata
,
1
);
findneut
(
$edata
,
1
);
return
;
return
;
}
}
...
@@ -609,7 +609,7 @@ function discover($schmode = 0) {
...
@@ -609,7 +609,7 @@ function discover($schmode = 0) {
if
(
$active_dice
<
$active_r
)
if
(
$active_dice
<
$active_r
)
{
{
$action
=
'enemy'
.
$edata
[
'pid'
];
$action
=
'enemy'
.
$edata
[
'pid'
];
include_once
GAME_ROOT
.
'./include/game/battle.func.php'
;
//
include_once GAME_ROOT.'./include/game/battle.func.php';
//findenemy($edata);
//findenemy($edata);
include_once
GAME_ROOT
.
'./include/game/revbattle.func.php'
;
include_once
GAME_ROOT
.
'./include/game/revbattle.func.php'
;
findenemy_rev
(
$edata
);
findenemy_rev
(
$edata
);
...
@@ -625,7 +625,7 @@ function discover($schmode = 0) {
...
@@ -625,7 +625,7 @@ function discover($schmode = 0) {
echo
"passive_w_type=
{
$edata
[
'type'
]
}
\n
"
;
echo
"passive_w_type=
{
$edata
[
'type'
]
}
\n
"
;
echo
"passive_w_sNo=
{
$edata
[
'sNo'
]
}
\n
"
;
echo
"passive_w_sNo=
{
$edata
[
'sNo'
]
}
\n
"
;
}
}
include_once
GAME_ROOT
.
'./include/game/combat.func.php'
;
//
include_once GAME_ROOT.'./include/game/combat.func.php';
//combat(0);
//combat(0);
include_once
GAME_ROOT
.
'./include/game/revcombat.func.php'
;
include_once
GAME_ROOT
.
'./include/game/revcombat.func.php'
;
rev_combat_prepare
(
$edata
,
NULL
,
0
);
rev_combat_prepare
(
$edata
,
NULL
,
0
);
...
...
include/global.func.php
View file @
4d4c0c2f
...
@@ -657,30 +657,32 @@ function get_itmsk_strlen($sk_value,$max_length=5)
...
@@ -657,30 +657,32 @@ function get_itmsk_strlen($sk_value,$max_length=5)
return
$ret
;
return
$ret
;
}
}
//将clbpara转为数组
function
get_clbpara
(
$para
)
function
get_clbpara
(
$para
)
{
{
return
json_decode
(
$para
,
true
);
if
(
!
is_array
(
$para
))
return
json_decode
(
$para
,
true
);
else
return
$para
;
}
}
//获取clbpara中指定键
function
get_single_clbpara
(
$para
,
$key
)
function
get_single_clbpara
(
$para
,
$key
)
{
{
$para
=
get_clbpara
(
$para
);
if
(
!
is_array
(
$para
))
$para
=
get_clbpara
(
$para
);
if
(
isset
(
$para
[
$key
]))
return
$para
[
$key
];
if
(
isset
(
$para
[
$key
]))
return
$para
[
$key
];
return
;
return
;
}
}
//删除clbpara中指定键
function
del_clbpara
(
$para
,
$key
)
function
del_
single_
clbpara
(
$para
,
$key
)
{
{
$para
=
get_clbpara
(
$para
);
if
(
!
is_array
(
$para
))
$para
=
get_clbpara
(
$para
);
if
(
isset
(
$para
[
$key
]))
unset
(
$para
[
$key
]);
if
(
isset
(
$para
[
$key
]))
unset
(
$para
[
$key
]);
return
json_encode
(
$para
)
;
return
$para
;
}
}
//修改clbpara中指定键
function
set_clbpara
(
$para
,
$key
,
$value
)
function
set_clbpara
(
$para
,
$key
,
$value
)
{
{
$para
=
get_clbpara
(
$para
);
if
(
!
is_array
(
$para
))
$para
=
get_clbpara
(
$para
);
$para
[
$key
]
=
$value
;
if
(
isset
(
$para
[
$key
]))
$para
[
$key
]
=
$value
;
return
json_encode
(
$para
)
;
return
$para
;
}
}
function
mgzdecode
(
$data
)
function
mgzdecode
(
$data
)
...
...
include/news.func.php
View file @
4d4c0c2f
...
@@ -123,6 +123,8 @@ function nparse_news($start = 0, $range = 0 ){//$type = '') {
...
@@ -123,6 +123,8 @@ function nparse_news($start = 0, $range = 0 ){//$type = '') {
$newsinfo
.=
"<li>
{
$hour
}
时
{
$min
}
分
{
$sec
}
秒,<span class=
\"
yellow
\"
>
$a
</span>被<span class=
\"
yellow
\"
>
$c
</span>埋设
{
$d
}
伏击炸死"
;
$newsinfo
.=
"<li>
{
$hour
}
时
{
$min
}
分
{
$sec
}
秒,<span class=
\"
yellow
\"
>
$a
</span>被<span class=
\"
yellow
\"
>
$c
</span>埋设
{
$d
}
伏击炸死"
;
}
elseif
(
$news
==
'death29'
)
{
}
elseif
(
$news
==
'death29'
)
{
$newsinfo
.=
"<li>
{
$hour
}
时
{
$min
}
分
{
$sec
}
秒,<span class=
\"
yellow
\"
>
$a
</span>被<span class=
\"
yellow
\"
>
$c
</span>发动
{
$d
}
以灵力杀死"
;
$newsinfo
.=
"<li>
{
$hour
}
时
{
$min
}
分
{
$sec
}
秒,<span class=
\"
yellow
\"
>
$a
</span>被<span class=
\"
yellow
\"
>
$c
</span>发动
{
$d
}
以灵力杀死"
;
}
elseif
(
$news
==
'death39'
)
{
$newsinfo
.=
"<li>
{
$hour
}
时
{
$min
}
分
{
$sec
}
秒,<span class=
\"
yellow
\"
>
$a
</span>在与<span class=
\"
yellow
\"
>
$c
</span>的战斗中因<span class=
\"
red
\"
>武器反噬</span>意外身亡"
;
}
elseif
(
$news
==
'death26'
)
{
}
elseif
(
$news
==
'death26'
)
{
if
(
$c
)
{
if
(
$c
)
{
$newsinfo
.=
"<li>
{
$hour
}
时
{
$min
}
分
{
$sec
}
秒,<span class=
\"
yellow
\"
>
$a
</span>因食用了<span class=
\"
yellow
\"
>
$c
</span>下毒的
{
$d
}
被毒死"
;
$newsinfo
.=
"<li>
{
$hour
}
时
{
$min
}
分
{
$sec
}
秒,<span class=
\"
yellow
\"
>
$a
</span>因食用了<span class=
\"
yellow
\"
>
$c
</span>下毒的
{
$d
}
被毒死"
;
...
...
include/state.func.php
View file @
4d4c0c2f
...
@@ -6,7 +6,7 @@ if (! defined ( 'IN_GAME' )) {
...
@@ -6,7 +6,7 @@ if (! defined ( 'IN_GAME' )) {
function
death
(
$death
,
$kname
=
''
,
$ktype
=
0
,
$annex
=
''
)
{
function
death
(
$death
,
$kname
=
''
,
$ktype
=
0
,
$annex
=
''
)
{
global
$now
,
$db
,
$tablepre
,
$alivenum
,
$deathnum
,
$name
,
$state
,
$deathtime
,
$type
,
$lvl
,
$bid
,
$killmsginfo
,
$typeinfo
,
$hp
,
$mhp
,
$wp
,
$wk
,
$wg
,
$wc
,
$wd
,
$wf
,
$sp
,
$msp
,
$club
,
$pls
,
$nick
;
global
$now
,
$db
,
$tablepre
,
$alivenum
,
$deathnum
,
$name
,
$state
,
$deathtime
,
$type
,
$lvl
,
$bid
,
$killmsginfo
,
$typeinfo
,
$hp
,
$mhp
,
$wp
,
$wk
,
$wg
,
$wc
,
$wd
,
$wf
,
$sp
,
$msp
,
$club
,
$pls
,
$nick
;
global
$weather
,
$clbpara
;
global
$weather
;
if
(
!
$death
)
{
if
(
!
$death
)
{
return
;
return
;
}
}
...
@@ -97,28 +97,11 @@ function death($death, $kname = '', $ktype = 0, $annex = '') {
...
@@ -97,28 +97,11 @@ function death($death, $kname = '', $ktype = 0, $annex = '') {
//$alivenum = $db->result($db->query("SELECT COUNT(*) FROM {$tablepre}players WHERE hp>0 AND type=0"), 0);
//$alivenum = $db->result($db->query("SELECT COUNT(*) FROM {$tablepre}players WHERE hp>0 AND type=0"), 0);
$revival_flag
=
false
;
$revival_flag
=
false
;
//依次判定复活效果
if
(
!
$revival_flag
&&
$weather
==
17
)
{
include_once
GAME_ROOT
.
'./include/game/dice.func.php'
;
$aurora_rate
=
10
;
//玩家10%概率复活
$aurora_dice
=
diceroll
(
100
);
if
(
$aurora_dice
<=
$aurora_rate
)
{
//奥罗拉复活效果
addnews
(
$now
,
'aurora_revival'
,
$name
);
$hp
+=
min
(
$mhp
,
max
(
$aurora_dice
,
1
));
$sp
+=
min
(
$msp
,
max
(
$aurora_dice
,
1
));
$alivenum
++
;
$state
=
0
;
$clbpara
=
set_clbpara
(
$clbpara
,
'revival_flag'
,
'17'
);
$revival_flag
=
true
;
}
}
if
(
!
$revival_flag
&&
$type
==
0
&&
$club
==
99
&&
(
$death
==
"N"
||
$death
==
"P"
||
$death
==
"K"
||
$death
==
"G"
||
$death
==
"C"
||
$death
==
"D"
||
$death
==
"F"
||
$death
==
"J"
||
$death
==
"trap"
))
if
(
!
$revival_flag
&&
$type
==
0
&&
$club
==
99
&&
(
$death
==
"N"
||
$death
==
"P"
||
$death
==
"K"
||
$death
==
"G"
||
$death
==
"C"
||
$death
==
"D"
||
$death
==
"F"
||
$death
==
"J"
||
$death
==
"trap"
))
{
{
addnews
(
$now
,
'revival'
,
$name
);
//玩家春哥附体称号的处理
addnews
(
$now
,
'revival'
,
$name
);
//玩家春哥附体称号的处理
$hp
=
$mhp
;
$sp
=
$msp
;
$hp
=
$mhp
;
$sp
=
$msp
;
$club
=
17
;
$state
=
0
;
$club
=
17
;
$state
=
0
;
$clbpara
=
set_clbpara
(
$clbpara
,
'revival_flag'
,
'99'
);
$alivenum
++
;
$alivenum
++
;
}
}
...
@@ -571,32 +554,4 @@ function rest($command) {
...
@@ -571,32 +554,4 @@ function rest($command) {
return
;
return
;
}
}
//登记一些特殊的死亡事件
function
check_kill_events
(
$kid
,
$eid
)
{
global
$db
,
$tablepre
,
$log
,
$now
;
$result
=
$db
->
query
(
"SELECT * FROM
{
$tablepre
}
players WHERE pid='
$eid
'"
);
$edata
=
$db
->
fetch_array
(
$result
);
if
(
!
is_array
(
$edata
[
'clbpara'
]))
$edata
[
'clbpara'
]
=
get_clbpara
(
$edata
[
'clbpara'
]);
if
(
$edata
[
'clbpara'
][
'post'
])
{
//发一条news 表示快递被劫走了
$log
.=
"<span class='sienna'>某样东西从
{
$edata
[
'name'
]
}
身上掉了出来……</span><br>"
;
$iid
=
$edata
[
'clbpara'
][
'postid'
];
$sponsorid
=
$edata
[
'clbpara'
][
'sponsor'
];
$result
=
$db
->
query
(
"SELECT * FROM
{
$tablepre
}
gambling WHERE uid = '
$sponsorid
'"
);
$sordata
=
$db
->
fetch_array
(
$result
);
addnews
(
$now
,
'gpost_failed'
,
$sordata
[
'uname'
],
$edata
[
'itm'
.
$iid
]);
//消除快递相关参数
unset
(
$edata
[
'clbpara'
][
'post'
]);
unset
(
$edata
[
'clbpara'
][
'postid'
]);
unset
(
$edata
[
'clbpara'
][
'sponsor'
]);
//解除快递锁
$db
->
query
(
"UPDATE
{
$tablepre
}
gambling SET bnid=0 WHERE uid='
$sponsorid
'"
);
player_save
(
$edata
);
}
return
;
}
?>
?>
templates/default/profile.htm
View file @
4d4c0c2f
...
@@ -42,7 +42,7 @@
...
@@ -42,7 +42,7 @@
<img
src=
"img/dead.gif"
style=
"position:absolute;top:120;left:6;width:94;height:40"
>
<img
src=
"img/dead.gif"
style=
"position:absolute;top:120;left:6;width:94;height:40"
>
<!--{elseif $hp <= $mhp*0.2}-->
<!--{elseif $hp <= $mhp*0.2}-->
<img
src=
"img/danger.gif"
style=
"position:absolute;top:120;left:5;width:95;height:37"
>
<img
src=
"img/danger.gif"
style=
"position:absolute;top:120;left:5;width:95;height:37"
>
<!--{elseif $hp <= $mhp*0.5}-->
<!--{elseif $hp <= $mhp*0.5
|| $inf!=''
}-->
<img
src=
"img/caution.gif"
style=
"position:absolute;top:120;left:5;width:95;height:36"
>
<img
src=
"img/caution.gif"
style=
"position:absolute;top:120;left:5;width:95;height:36"
>
<!--{elseif !$inf}-->
<!--{elseif !$inf}-->
<img
src=
"img/fine.gif"
style=
"position:absolute;top:120;left:12;width:81;height:38"
>
<img
src=
"img/fine.gif"
style=
"position:absolute;top:120;left:12;width:81;height:38"
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment