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
1e131866
Commit
1e131866
authored
Jun 10, 2025
by
Nemo Ma
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ADJUSTMENT: club22
parent
2f571548
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
95 additions
and
0 deletions
+95
-0
doc/etc/20250103_145200_fireseed_combat_fix.txt
doc/etc/20250103_145200_fireseed_combat_fix.txt
+69
-0
include/game/club22.func.php
include/game/club22.func.php
+12
-0
include/game/search.func.php
include/game/search.func.php
+14
-0
No files found.
doc/etc/20250103_145200_fireseed_combat_fix.txt
0 → 100644
View file @
1e131866
# 枫火歌者种火战斗机制修复
## 修改时间
2025-01-03 14:52:00
## 问题描述
根据用户测试反馈,枫火歌者的机制存在以下问题:
1. 玩家在探索·移动时可能遇到自己配下的种火并与其发起战斗甚至将其杀死
2. 种火的索敌逻辑会对同玩家的其他种火NPC造成伤害
在虚构层上,这些行为是不可接受的,需要进行修复。
## 修改内容
### 1. 修改遇敌逻辑 (include/game/search.func.php)
在 `discover` 函数的遇敌判断逻辑中添加了对枫火歌者玩家遇到自己配下种火的特殊处理:
**修改位置**: 第741-759行
**修改逻辑**:
- 在遇敌循环中,当玩家为枫火歌者(club == 22)且遇到种火NPC(type == 92)时
- 检查该种火的owner字段是否为当前玩家的pid
- 如果是自己配下的种火,则跳过战斗并显示友好文案
- 继续寻找其他可能的敌人
**显示文案**:
- "你遇到了自己配下的种火「种火名称」。"
- "「种火名称」友好地看着你,你们没有发生冲突。"
### 2. 修改种火索敌逻辑 (include/game/club22.func.php)
在 `FireseedDrainNPC` 函数中添加了对同玩家其他种火NPC的保护:
**修改位置**: 第331-350行
**修改逻辑**:
- 在索敌循环中,当目标NPC为种火(type == 92)时
- 检查该种火的owner字段是否为当前玩家的pid
- 如果是同玩家的种火,则跳过攻击
- 继续寻找其他可攻击的NPC目标
## 技术细节
### 数据结构处理
- 使用 `get_clbpara()` 函数确保NPC的clbpara字段为数组格式
- 通过检查 `$npc['clbpara']['owner']` 字段判断种火归属
- 使用 `$pid` 变量标识当前玩家
### 兼容性考虑
- 修改不影响其他社团的正常遇敌逻辑
- 修改不影响种火对其他类型NPC的索敌功能
- 保持了原有的防御力和技能检查逻辑
## 预期效果
1. **遇敌逻辑修复**: 枫火歌者玩家不会再与自己配下的种火发生战斗
2. **索敌逻辑修复**: 种火不会攻击同玩家的其他种火NPC
3. **虚构层合理性**: 符合枫火歌者与种火之间的主从关系设定
## 测试建议
1. 测试枫火歌者玩家在有自己种火的地图上移动/探索
2. 测试种火索敌功能是否正常工作但不攻击同玩家种火
3. 测试其他社团玩家的正常遇敌逻辑是否受影响
4. 测试种火对其他类型NPC的索敌功能是否正常
## 相关文件
- `include/game/search.func.php` - 遇敌逻辑修改
- `include/game/club22.func.php` - 种火索敌逻辑修改
include/game/club22.func.php
View file @
1e131866
...
@@ -337,6 +337,18 @@ function FireseedDrainNPC($pls) {
...
@@ -337,6 +337,18 @@ function FireseedDrainNPC($pls) {
continue
;
continue
;
}
}
// 跳过同玩家的其他种火NPC
if
(
$npc
[
'type'
]
==
92
)
{
// 确保 NPC 的 clbpara 是数组格式
if
(
!
is_array
(
$npc
[
'clbpara'
]))
{
$npc
[
'clbpara'
]
=
get_clbpara
(
$npc
[
'clbpara'
]);
}
// 检查是否为同玩家的种火
if
(
!
empty
(
$npc
[
'clbpara'
][
'owner'
])
&&
$npc
[
'clbpara'
][
'owner'
]
==
$pid
)
{
continue
;
// 跳过对同玩家种火的攻击
}
}
// 计算削减成功率(每个种火增加一次成功机会)
// 计算削减成功率(每个种火增加一次成功机会)
$success
=
false
;
$success
=
false
;
foreach
(
$location_fireseeds
as
$fs_id
=>
$fs_data
)
{
foreach
(
$location_fireseeds
as
$fs_id
=>
$fs_data
)
{
...
...
include/game/search.func.php
View file @
1e131866
...
@@ -741,6 +741,20 @@ function discover($schmode = 0,&$data=NULL)
...
@@ -741,6 +741,20 @@ function discover($schmode = 0,&$data=NULL)
# 暂时直接略过盟友单位
# 暂时直接略过盟友单位
if
(
!
empty
(
$edata
[
'clbpara'
][
'mate'
])
&&
in_array
(
$pid
,
$edata
[
'clbpara'
][
'mate'
]))
continue
;
if
(
!
empty
(
$edata
[
'clbpara'
][
'mate'
])
&&
in_array
(
$pid
,
$edata
[
'clbpara'
][
'mate'
]))
continue
;
# 枫火歌者遇到自己配下的种火时的特殊处理
if
(
$club
==
22
&&
$edata
[
'type'
]
==
92
)
{
// 确保 NPC 的 clbpara 是数组格式
if
(
!
is_array
(
$edata
[
'clbpara'
]))
{
$edata
[
'clbpara'
]
=
get_clbpara
(
$edata
[
'clbpara'
]);
}
// 检查是否为自己配下的种火
if
(
!
empty
(
$edata
[
'clbpara'
][
'owner'
])
&&
$edata
[
'clbpara'
][
'owner'
]
==
$pid
)
{
$log
.=
"<span class='yellow'>你遇到了自己配下的种火「
{
$edata
[
'name'
]
}
」。</span><br>"
;
$log
.=
"<span class='lime'>「
{
$edata
[
'name'
]
}
」友好地看着你,你们没有发生冲突。</span><br>"
;
continue
;
// 跳过战斗,继续寻找其他敌人
}
}
# 「量心」技能效果判定(不会遭遇HP为1的敌人):
# 「量心」技能效果判定(不会遭遇HP为1的敌人):
if
(
!
check_skill_unlock
(
'c19_dispel'
,
$data
)
&&
!
empty
(
get_skillpara
(
'c19_dispel'
,
'active'
,
$clbpara
))
&&
$edata
[
'hp'
]
==
1
)
continue
;
if
(
!
check_skill_unlock
(
'c19_dispel'
,
$data
)
&&
!
empty
(
get_skillpara
(
'c19_dispel'
,
'active'
,
$clbpara
))
&&
$edata
[
'hp'
]
==
1
)
continue
;
...
...
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