Commit 62247b43 authored by Nemo Ma's avatar Nemo Ma

FEAT: Fireseed Skills + Set

parent f343178a
# 种火系列技能实装
## 实装内容
实装了三个减伤技能:
1. 种火I(fireseed1)——使角色因为战斗受到的全部最终伤害都降低为75%
2. 种火II(fireseed2)——使角色因为战斗受到的全部最终伤害都降低为50%
3. 种火III(fireseed3)——使角色因为战斗受到的全部最终伤害都变为1
## 实装位置
1. 在 `gamedata/cache/clubskills_1.php` 文件中添加了三个技能的定义
2. 在 `include/game/revattr.func.php` 文件中的 `get_final_dmg_p` 函数中添加了种火I和种火II的伤害减免逻辑
3. 在 `include/game/revattr.func.php` 文件中的 `get_final_dmg_fix` 函数中添加了种火III的伤害固定为1的逻辑
## 实装逻辑
1. 种火I和种火II通过在 `get_final_dmg_p` 函数中添加伤害系数修正来实现伤害减免
2. 种火III通过在 `get_final_dmg_p` 函数中设置标记,然后在 `get_final_dmg_fix` 函数中检测标记并将伤害固定为1来实现
## 技能效果
这三个技能都是被动技能,玩家学习后会自动生效,不需要主动触发。技能效果会在战斗中显示在战斗日志中,告知玩家伤害减免情况。
## 注意事项
1. 这三个技能是互斥的,如果玩家同时拥有多个种火技能,会按照优先级从高到低生效(种火III > 种火II > 种火I)
2. 种火技能只对战斗中受到的伤害有效,不影响其他来源的伤害(如陷阱、毒素等)
3. 种火技能的伤害减免是在所有其他伤害计算完成后最后应用的
# 种火IV技能实装
## 实装内容
实装了种火IV(fireseed4)技能,该技能的效果是将持有该技能的玩家受到的所有伤害(包括战斗,事件,陷阱,食用毒物等)全部变为0。
## 实装位置
1. 在 `gamedata/cache/clubskills_1.php` 文件中添加了种火IV技能的定义
2. 在 `include/game/revattr.func.php` 文件中的 `get_final_dmg_p` 函数中添加了种火IV的伤害免疫逻辑
3. 在 `include/game/revattr.func.php` 文件中的 `get_final_dmg_fix` 函数中添加了种火IV的伤害固定为0的逻辑
4. 在 `include/game/item.poison.php` 文件中添加了种火IV对毒物伤害的免疫逻辑
5. 在 `include/game/itemmain.func.php` 文件中添加了种火IV对陷阱伤害的免疫逻辑
## 实装逻辑
1. 种火IV通过在 `get_final_dmg_p` 函数中设置标记,然后在 `get_final_dmg_fix` 函数中检测标记并将伤害固定为0来实现战斗伤害免疫
2. 种火IV通过在 `item.poison.php` 中检查技能并将毒物伤害设为0来实现毒物伤害免疫
3. 种火IV通过在 `itemmain.func.php` 中检查技能并将陷阱伤害设为0来实现陷阱伤害免疫
## 技能效果
这个技能是被动技能,玩家学习后会自动生效,不需要主动触发。技能效果会在受到伤害时显示在战斗日志或游戏日志中,告知玩家伤害免疫情况。
## 注意事项
1. 种火IV是种火系列技能中最强大的,它可以免疫所有类型的伤害,包括战斗伤害、陷阱伤害、毒物伤害等
2. 种火IV的技能点消耗设置为50点,比种火III(30点)更高,反映了其强大的效果
3. 种火IV的实现方式是在各个伤害计算的关键位置添加检查,确保所有类型的伤害都能被免疫
# 种火套装与技能关联实装
## 实装内容
实现了种火系列套装(fs2, fs3, fs4, fs5)与种火系列技能(fireseed1, fireseed2, fireseed3, fireseed4)的关联,使得玩家穿戴对应套装时自动获得相应的种火技能。
## 实装位置
1. 创建了新文件 `include/game/setitems.func.php` 用于处理套装效果
2. 修改了 `include/game/itemmain.func.php` 中的 `reload_set_items` 函数,调用新的套装效果处理函数
3. 修改了 `include/game/itemmain.func.php` 中的 `reload_single_set_item` 函数,在装备和卸下套装部件时调用套装效果处理函数
## 实装逻辑
1. 创建了 `process_set_item_effects` 函数,用于处理套装效果:
- 检查玩家是否拥有套装效果
- 对于每个套装,检查套装件数是否达到激活条件
- 如果达到激活条件,根据套装ID授予对应的种火技能
- 如果未达到激活条件,移除对应的种火技能(如果该技能是通过套装获得的)
2. 套装与技能的对应关系:
- fs2(种火Ⅰ套装)→ fireseed1(种火I技能)
- fs3(种火Ⅱ套装)→ fireseed2(种火II技能)
- fs4(种火Ⅲ套装)→ fireseed3(种火III技能)
- fs5(种火Ⅳ套装)→ fireseed4(种火IV技能)
3. 在以下情况下会触发套装效果处理:
- 玩家数据初始化时(通过 `reload_set_items` 函数)
- 玩家装备套装部件时(通过 `reload_single_set_item` 函数)
- 玩家卸下套装部件时(通过 `reload_single_set_item` 函数)
## 技能效果
当玩家穿戴完整的套装时,会自动获得对应的种火技能,享受相应的伤害减免效果:
- 种火I:战斗伤害降低为75%
- 种火II:战斗伤害降低为50%
- 种火III:战斗伤害变为1
- 种火IV:所有伤害(包括战斗、陷阱、毒物等)变为0
## 注意事项
1. 如果玩家通过学习获得了种火技能,即使卸下对应套装,该技能也不会消失
2. 只有通过套装获得的种火技能才会在卸下套装时消失
3. 套装效果会在游戏日志中显示,告知玩家获得或失去了哪些技能
4. 该实现方式可以扩展到其他套装效果,只需在 `process_set_item_effects` 函数中添加对应的处理逻辑
# 种火套装与技能关联修复
## 问题描述
在玩家装备或移除物品时,未出现获得或失去技能的提示,也并没有获得或失去技能。
## 问题原因
问题出在 `setitems.func.php` 文件中使用 `check_skill_unlock` 函数的方式上。这个函数不仅检查玩家是否拥有技能,还会检查技能是否可用(是否解锁),这导致了即使玩家没有技能,函数也可能返回非零值(表示技能未解锁),从而导致条件判断失败。
## 修复内容
1. 修改了 `setitems.func.php` 文件中的条件判断逻辑,不再使用 `check_skill_unlock` 函数,而是直接检查玩家的 `clbpara['skill']` 数组中是否包含对应的技能
2. 对于获得技能的条件,改为检查 `empty($pa['clbpara']['skill']) || !in_array('fireseed1', $pa['clbpara']['skill'])`
3. 对于失去技能的条件,改为检查 `!empty($pa['clbpara']['skill']) && in_array('fireseed1', $pa['clbpara']['skill'])`
4. 移除了检查技能是否通过学习获得的逻辑,因为这个逻辑在当前实现中不需要
## 修复效果
1. 现在当玩家装备完整的套装时,会正确获得对应的种火技能,并显示获得技能的提示
2. 当玩家卸下套装部件导致套装不再完整时,会正确失去对应的种火技能,并显示失去技能的提示
3. 套装效果与技能的关联关系正常工作
## 注意事项
1. 这个修复不会影响玩家通过学习获得的种火技能,只会影响通过套装获得的技能
2. 如果玩家同时通过学习和套装获得了同一个技能,卸下套装后技能会被移除,但这是预期行为,因为 `lostclubskill` 函数会直接从 `clbpara['skill']` 数组中移除技能
3. 如果需要区分通过学习获得的技能和通过套装获得的技能,需要在 `clbpara` 中添加额外的标记
# 种火IV陷阱伤害免疫修复
## 问题描述
在种火IV技能生效时,玩家踩到陷阱仍然正常受到了伤害,而该伤害应该下降为0。
## 问题原因
问题出在 `itemmain.func.php` 文件中的陷阱伤害计算逻辑。原来的代码先计算陷阱伤害,然后再检查种火IV技能,这导致在某些情况下(可能是由于代码执行顺序或其他因素),种火IV的效果没有正确应用。
## 修复内容
1. 修改了 `itemmain.func.php` 文件中的陷阱伤害计算逻辑,将种火IV的检查移到了伤害计算之前
2. 使用了 `if-else` 结构,确保当种火IV技能存在时,直接将伤害设为0,不再进行后续的伤害计算
3. 改进了检查种火IV技能的方式,不再使用 `check_skill_unlock` 函数,而是直接检查玩家的 `clbpara['skill']` 数组中是否包含 'fireseed4'
## 修复前代码
```php
# 计算陷阱伤害
$damage = calc_trap_damage($data,NULL,$playerflag,$selflag);
# 检查陷阱是否被迎击
$damage = check_trap_def_event($data,$damage,$playerflag,$selflag);
# 「种火IV」效果判定:
if(check_skill_unlock('fireseed4', $data)) {
$log .= "<span class='yellow'>「种火IV」使{$name}受到的所有伤害变为0!</span><br>";
$damage = 0;
}
if($damage)
```
## 修复后代码
```php
# 「种火IV」效果判定:
if(!empty($data['clbpara']['skill']) && in_array('fireseed4', $data['clbpara']['skill']))
{
$log .= "<span class='yellow'>「种火IV」使{$name}受到的所有伤害变为0!</span><br>";
$damage = 0;
}
else
{
# 计算陷阱伤害
$damage = calc_trap_damage($data,NULL,$playerflag,$selflag);
# 检查陷阱是否被迎击
$damage = check_trap_def_event($data,$damage,$playerflag,$selflag);
}
if($damage)
```
## 修复效果
1. 现在当玩家拥有种火IV技能时,踩到陷阱会正确地将伤害降为0
2. 玩家会看到提示消息,告知种火IV技能使伤害变为0
3. 由于伤害为0,玩家不会受到任何陷阱伤害,也不会触发陷阱击杀事件
## 注意事项
1. 这个修复只影响陷阱伤害,不影响其他类型的伤害(战斗、毒物等)
2. 修复使用了直接检查技能数组的方式,而不是使用 `check_skill_unlock` 函数,这与之前修复套装效果时的方法一致
3. IDE报告了一些未使用的变量警告,但这些不影响功能,是原代码中就存在的问题
......@@ -2487,8 +2487,11 @@ $anpcinfo = array(
'pls' => 99,
'mhp' => 17,
'msp' => 200,
'clubskill' => Array(
'fireseed3',
),
'att' => 27,
'def' => 99999,
'def' => 99,
'lvl' => 13,
'skill' => 1,
'money' => 250,
......
......@@ -74,9 +74,45 @@ $sktpemsdmg = "<span class=\"gold\" tooltip2=\"【亮晶晶】:造成纯粹伤
# 技能登记:
$cskills = Array
(
'fireseed1' => Array
(
'name' => '种火I',
'tags' => Array('passive'),
'desc' => '被动技能,使你因为战斗受到的所有最终伤害都降低为75%。',
'cost' => 10,
'input' => '学习',
'log' => '消耗了<span class="lime">[:cost:]</span>点技能点,学会了技能「种火I」。<br>',
),
'fireseed2' => Array
(
'name' => '种火II',
'tags' => Array('passive'),
'desc' => '被动技能,使你因为战斗受到的所有最终伤害都降低为50%。',
'cost' => 20,
'input' => '学习',
'log' => '消耗了<span class="lime">[:cost:]</span>点技能点,学会了技能「种火II」。<br>',
),
'fireseed3' => Array
(
'name' => '种火III',
'tags' => Array('passive'),
'desc' => '被动技能,使你因为战斗受到的所有最终伤害都变为1。',
'cost' => 30,
'input' => '学习',
'log' => '消耗了<span class="lime">[:cost:]</span>点技能点,学会了技能「种火III」。<br>',
),
'fireseed4' => Array
(
'name' => '种火IV',
'tags' => Array('passive'),
'desc' => '被动技能,使你受到的所有伤害(包括战斗、事件、陷阱、食用毒物等)都变为0。',
'cost' => 50,
'input' => '学习',
'log' => '消耗了<span class="lime">[:cost:]</span>点技能点,学会了技能「种火IV」。<br>',
),
// 可以通过在此文件中填写配置项来创建一个新技能,系统会自动生成模板。如果配置文件不能满足需求,可以自己创建一个模板文件
/*'技能编号' => Array
(
(
'name' => '技能名', //(必填)技能名
'tags' => Array(), //(非必填)定义一个技能带有的标签
'desc' => '', //(非必填)技能介绍,显示在技能面板上,可以使用[: :]设置一些静态参数,会在生成时自动替换对应参数。
......@@ -122,9 +158,9 @@ $cskills = Array
'log' => '消耗了<span class="lime">[:cost:]</span>点技能点,你的生命上限增加了<span class="yellow">[:hp:]</span>点。<br>',
'status' => Array('hp','mhp'),
'effect' => Array(
0 => Array( 'hp' => '+=::3', 'mhp' => '+=::3',),
12 => Array( 'hp' => '+=::6', 'mhp' => '+=::6',),
20 => Array( 'hp' => '+=::4', 'mhp' => '+=::4',),
0 => Array( 'hp' => '+=::3', 'mhp' => '+=::3',),
12 => Array( 'hp' => '+=::6', 'mhp' => '+=::6',),
20 => Array( 'hp' => '+=::4', 'mhp' => '+=::4',),
),
),
's_ad' => Array
......@@ -284,7 +320,7 @@ $cskills = Array
持斩系武器方可发动,消耗<span class="yellow">[:ragecost:]</span>点怒气',
'bdesc' => '本次攻击附加<span class="yellow">[:fixdmg:]+[^lvl^]</span>点伤害,且武器损耗率减半,消耗<span class="red">[:ragecost:]</span>怒气',
'vars' => Array(
'ragecost' => 5,
'ragecost' => 5,
'fixdmg' => 30, //基础固定伤害
'wepimpr' => 0.5, //武器损耗率
),
......@@ -336,7 +372,7 @@ $cskills = Array
'desc' => '本次攻击无视减半类防御属性,最终伤害<span class="yellow">+[:findmgr:]%</span>',
'bdesc' => '本次攻击攻击最终伤害<span class="yellow">+[:findmgr:]%</span>,无视敌方减半类防御属性;消耗<span class="red">[:ragecost:]</span>怒气',
'vars' => Array(
'ragecost' => 70,
'ragecost' => 70,
'findmgr' => 40, //最终伤害加成
),
'lockdesc' => Array(
......@@ -383,7 +419,7 @@ $cskills = Array
'cd' => 900, //冷却时间
),
'svars' => Array(
'active' => 0,
'active' => 0,
),
'lockdesc' => Array(
'lvl' => '21级时解锁',
......@@ -437,7 +473,7 @@ $cskills = Array
'lvl' => 0, //初次获得时等级为0
),
'vars' => Array(
'countergain' => Array(0,20,40,60,80,100,125),
'countergain' => Array(0,20,40,60,80,100,125),
),
'lockdesc' => Array(
'wepk+wep_kind' => '武器不适用,持<span class="yellow">投系武器</span>时生效',
......@@ -458,7 +494,7 @@ $cskills = Array
'bdesc' => '<span tooltip="主动发动时,若角色身上不存在伤害类属性,则会为其临时附加一项随机属性。"><span class="grey">[附加提示]</span>
发动后将使某一随机属性伤害永久<span class="yellow">+[:exdmggain:]%</span>;消耗<span class="red">[:ragecost:]</span>怒气</span>',
'vars' => Array(
'ragecost' => 8,
'ragecost' => 8,
'exdmggain' => 3, //单项属性伤害加成
'exdmgmax' => 150, //单项属性伤害加成上限
'exdmgarr' => Array( //单项属性与加成的对应关系
......@@ -470,8 +506,8 @@ $cskills = Array
'd' => 'dr',
),
'exdmgdesc' => Array( //介绍该附魔对应的加成关系
'u' => '火焰/灼焰',
'i' => '冻气/冰华',
'u' => '火焰/灼焰',
'i' => '冻气/冰华',
'p' => '毒性',
'w' => '音波',
'e' => '电气',
......@@ -479,12 +515,12 @@ $cskills = Array
),
),
'svars' => Array(
'ur' => 0,
'ir' => 0,
'pr' => 0,
'er' => 0,
'wr' => 0,
'dr' => 0,
'ur' => 0,
'ir' => 0,
'pr' => 0,
'er' => 0,
'wr' => 0,
'dr' => 0,
'active_t' => 0,//技能发动次数
),
'lockdesc' => Array(
......@@ -505,8 +541,8 @@ $cskills = Array
持投系武器方可发动,消耗<span class="yellow">[:ragecost:]</span>点怒气',
'bdesc' => '攻击必中且物理伤害<span class="yellow">+[:phydmgr:]%</span><br>消耗<span class="red">[:ragecost:]</span>怒气',
'vars' => Array(
'ragecost' => 70,
'phydmgr' => 20,
'ragecost' => 70,
'phydmgr' => 20,
),
'lockdesc' => Array(
'lvl' => '7级时解锁',
......@@ -524,8 +560,8 @@ $cskills = Array
'desc' => '如果你的武器射程不小于敌人,你对其先制攻击率<span class="yellow">+[:actgain:]%</span>,<br>
其攻击你时命中率<span class="yellow">-[:accloss:]%</span>,连击命中率惩罚<span class="yellow">+[:rbloss:]%</span>',
'vars' => Array(
'actgain' => 10,
'accloss' => 12,
'actgain' => 10,
'accloss' => 12,
'rbloss' => 8,
),
'lockdesc' => Array(
......@@ -558,7 +594,7 @@ $cskills = Array
'chancegainr' => 0.1,
),
'svars' => Array(
'active' => 1,
'active' => 1,
),
'pvars' => Array('wc','skill-active'),
'lockdesc' => Array(
......@@ -668,7 +704,7 @@ $cskills = Array
'bdesc' => '本次攻击物理伤害<span class="yellow">+[:phydmgr:]%</span>,<br>命中率<span class="yellow">+[:accgain:]%</span><br>
消耗<span class="red">[:ragecost:]</span>怒气',
'vars' => Array(
'ragecost' => 20,
'ragecost' => 20,
'accgain' => 15, //命中增益
'phydmgr' => 20, //物理伤害加成
),
......@@ -689,7 +725,7 @@ $cskills = Array
'tags' => Array('passive'),
'desc' => '当你在战斗中击杀敌人时,你立即获得<span class="yellow">(<span tooltip="基于你目前的等级">[^lvl^]</span>×[:goldr:])</span>点金钱。',
'vars' => Array(
'goldr' => 2,
'goldr' => 2,
),
'pvars' => Array('lvl'),
'lockdesc' => Array(
......@@ -709,8 +745,8 @@ $cskills = Array
'bdesc' => '物理伤害<span class="yellow">+[:phydmgr:]%</span>,属性伤害<span class="yellow">+[:exdmgr:]%</span>,
防具损坏效果<span class="yellow">+[:inftfix:]</span>。消耗<span class="red">[:ragecost:]</span>怒气',
'vars' => Array(
'ragecost' => 75,
'inftfix' => 2,
'ragecost' => 75,
'inftfix' => 2,
'phydmgr' => 20, //物理伤害加成
'exdmgr' => 80, //属性伤害加成
'disableskill' => 'c4_sniper',
......@@ -740,7 +776,7 @@ $cskills = Array
'bdesc' => '物理伤害<span class="yellow">+[:phydmgr:]%</span>,命中率<span class="yellow">+[:accgain:]%</span>,射程<span class="yellow">+[:rangegain:]</span>,<span class="yellow">连击</span>无效,
但<span class="yellow">[:prfix:]%概率贯穿</span>。消耗<span class="yellow">[:ragecost:]</span>点怒气',
'vars' => Array(
'ragecost' => 95,
'ragecost' => 95,
'rangegain' => 1,
'phydmgr' => 80, //物理伤害加成
'accgain' => 20, //命中率加成
......@@ -768,7 +804,7 @@ $cskills = Array
'tags' => Array('passive'),
'desc' => '使用射系武器造成超过<span class="yellow">[:killline:]%</span>目标当前生命值的伤害时,自动将其秒杀',
'vars' => Array(
'killline' => 85,
'killline' => 85,
),
'lockdesc' => Array(
'lvl' => '15级时解锁',
......@@ -798,8 +834,8 @@ $cskills = Array
),
'svars' => Array('lvl' => 0),
'vars' => Array(
'hidegain' => Array(0,2,4,6,8,10),
'actgain' => Array(0,2,4,6,8,10),
'hidegain' => Array(0,2,4,6,8,10),
'actgain' => Array(0,2,4,6,8,10),
),
),
'c5_caution' => Array
......@@ -817,8 +853,8 @@ $cskills = Array
),
'svars' => Array('lvl' => 0),
'vars' => Array(
'evgain' => Array(0,2,4,6,8,10),
'reugain' => Array(0,4,8,12,16,20),
'evgain' => Array(0,2,4,6,8,10),
'reugain' => Array(0,4,8,12,16,20),
),
),
'c5_review' => Array
......@@ -827,7 +863,7 @@ $cskills = Array
'tags' => Array('passive'),
'desc' => "使用爆系武器时,<br>即使攻击没有命中,也可以获得[:expgain:]点固定经验值",
'vars' => Array(
'expgain' => 1,
'expgain' => 1,
),
'lockdesc' => Array(
'wepk+wep_kind' => '武器不适用,持<span class="yellow">爆系武器</span>时生效',
......@@ -844,7 +880,7 @@ $cskills = Array
'clog' => "切换了「专注」的状态。",
'choice' => Array(0,1,2), //无效果/重视遇敌/重视探物
'svars' => Array(
'choice' => 1,
'choice' => 1,
),
'vars' => Array(
'meetgain' => 15,
......@@ -866,7 +902,7 @@ $cskills = Array
使用爆系武器方可发动,消耗<span class="yellow">[:ragecost:]</span>点怒气。',
'bdesc' => '本次攻击中爆炸属性伤害无视一切增益减益效果;消耗<span class="red">[:ragecost:]</span>怒气',
'vars' => Array(
'ragecost' => 40,
'ragecost' => 40,
),
'lockdesc' => Array(
'lvl' => '6级时解锁',
......@@ -888,7 +924,7 @@ $cskills = Array
'active_t' => 0,
),
'vars' => Array(
'ragecost' => 0,
'ragecost' => 0,
'chase_t' => 2,
'maxactive_t' => 2,
),
......@@ -921,7 +957,7 @@ $cskills = Array
0 => Array('skillpara|c9_kotodama-lvl' => '+=::1'),
),
'svars' => Array(
'lvl' => 0,
'lvl' => 0,
),
'vars' => Array(
),
......@@ -944,7 +980,7 @@ $cskills = Array
'lvl' => 0, //初次获得时等级为0
),
'vars' => Array(
'accloss' => Array(0,4,8,12),
'accloss' => Array(0,4,8,12),
'rbloss' => Array(0,2,3,4),
'spcloss' => Array(40,50,60,70),
),
......@@ -959,7 +995,7 @@ $cskills = Array
'vars' => Array(
'ragecost' => 40,
'rageback' => 6,
'phydmgr' => 2,
'phydmgr' => 2,
),
'lockdesc' => Array(
'lvl' => '3级时解锁',
......@@ -977,8 +1013,8 @@ $cskills = Array
每通过技能解除1个异常/受伤状态,你的怒气提升<span class="yellow">[:ragegain:]</span>点',
'vars' => Array(
'hpshloss' => 80,
'purify' => 1,
'ragegain' => 40,
'purify' => 1,
'ragegain' => 40,
),
'lockdesc' => Array(
'lvl' => '7级时解锁',
......@@ -1007,7 +1043,7 @@ $cskills = Array
'active_t' => 0,
),
'vars' => Array(
'rageadd' => 100,
'rageadd' => 100,
'freet' => 2,
'cd' => 600, //冷却时间
),
......@@ -1031,7 +1067,7 @@ $cskills = Array
'bdesc' => '本次攻击最终伤害<span class="yellow">×[:findmgr:]</span>,消耗<span class="red">[:ragecost:]</span>怒气',
'vars' => Array(
'ragecost' => 60,
'findmgr' => 2,
'findmgr' => 2,
),
'lockdesc' => Array(
'lvl' => '19级时解锁',
......@@ -1061,8 +1097,8 @@ $cskills = Array
'accgain' => 0, 'rbgain' => 0, 'accloss' => 0, 'rbloss' => 0,
),
'vars' => Array(
'flucmin' => 1,
'flucmax' => 3,
'flucmin' => 1,
'flucmax' => 3,
),
'pvars' => Array('skillpara|c6_godluck-accgain','skillpara|c6_godluck-rbgain','skillpara|c6_godluck-accloss','skillpara|c6_godluck-rbloss'),
),
......@@ -1087,8 +1123,8 @@ $cskills = Array
'actgain' => 0, 'countergain' => 0, 'hidegain' => 0,
),
'vars' => Array(
'flucmin' => 1,
'flucmax' => 3,
'flucmin' => 1,
'flucmax' => 3,
),
'pvars' => Array('skillpara|c6_godsend-actgain','skillpara|c6_godsend-countergain','skillpara|c6_godsend-hidegain'),
),
......@@ -1129,7 +1165,7 @@ $cskills = Array
'bdesc' => '计算熟练度时增加<span class="yellow">([^rage^]×[^lvl^]/6)</span>点(最高220点),消耗<span class="red">[:ragecost:]</span>怒气',
'vars' => Array(
'ragecost' => 25,
'rageback' => 25,
'rageback' => 25,
'skmax' => 220,
'mhpr' => 1.5,
),
......@@ -1199,7 +1235,7 @@ $cskills = Array
'accgain' => 0, 'rbgain' => 0, 'accloss' => 0, 'rbloss' => 0,
),
'vars' => Array(
'svar' => Array(110,155,185,225,265,355),
'svar' => Array(110,155,185,225,265,355),
'cd' => Array(150,120,120,90,60,45),
'hpalert' => Array(35,40,45,50,60,70),
),
......@@ -1222,7 +1258,7 @@ $cskills = Array
'bdesc' => '本次攻击<span class="yellow">带电</span>,电击属性伤害<span class="yellow">+[:exdmgfix:]</span>,有<span class="yellow">[:infr:]%</span>概率<span class="yellow">麻痹</span>敌人,或使已麻痹敌人眩晕<span class="yellow">[:lasttimes:]</span>秒;消耗<span class="red">[:ragecost:]</span>怒气',
'vars' => Array(
'ragecost' => 25,
'exdmgfix' => 60,
'exdmgfix' => 60,
'infr' => 40,
'lasttimes' => 2,
),
......@@ -1286,7 +1322,7 @@ $cskills = Array
消耗<span class="red">[:ragecost:]</span>怒气<br>本局已发动<span class="redseed"> [^skillpara|c7_emp-active_t^]/[:maxactive_t:] </span>次',
'vars' => Array(
'ragecost' => 60,
'maxactive_t' => 2,
'maxactive_t' => 2,
'lasttimes' => 3,
),
'svars' => Array('active_t' => 0),
......@@ -1315,7 +1351,7 @@ $cskills = Array
),
'svars' => Array('lvl' => 0),
'vars' => Array(
'exdmgr' => Array(10,20,30,40,50),
'exdmgr' => Array(10,20,30,40,50),
),
),
'c8_infilt' => Array
......@@ -1353,7 +1389,7 @@ $cskills = Array
'bdesc' => '本次攻击每造成1次<span class="purple">毒</span>属性伤害,最终属性伤害<span class="yellow">+[:exdmgr:]%</span>;消耗<span class="red">[:ragecost:]</span>怒气',
'vars' => Array(
'ragecost' => 50,
'exdmgr' => 25,
'exdmgr' => 25,
),
'lockdesc' => Array(
'lvl' => '7级时解锁',
......@@ -1368,7 +1404,7 @@ $cskills = Array
'tags' => Array('passive'),
'desc' => '不再受到<span class="purple">毒性</span>伤害,并将原本伤害的<span class="yellow">[:exdmgr:]%</span>转化为治疗效果',
'vars' => Array(
'exdmgr' => 75,
'exdmgr' => 75,
),
'lockdesc' => Array(
'lvl' => '12级时解锁',
......@@ -1397,7 +1433,7 @@ $cskills = Array
'events' => Array('getskill_buff_assassin','active_news'),
'link' => Array('buff_assassin'),
'vars' => Array(
'maxactive_t' => 2,
'maxactive_t' => 2,
),
'svars' => Array('active' => 0, 'active_t' => 0,),
'pvars' => Array('skillpara|c8_assassin-active_t'),
......@@ -1419,8 +1455,8 @@ $cskills = Array
'desc' => '<span class="lime">「暗杀」生效中!<br>
增益效果剩余时间:<span class="yellow">[^lasttimes^]</span> 秒</span>',
'vars' => Array(
'hidegain' => 90,
'actgain' => 100,
'hidegain' => 90,
'actgain' => 100,
'pdefbkr' => 25,
),
'slast' => Array(
......@@ -1448,7 +1484,7 @@ $cskills = Array
),
'svars' => Array(
'lvl' => 0,
'choice' => 1,
'choice' => 1,
),
),
'c10_insight' => Array
......@@ -1483,7 +1519,7 @@ $cskills = Array
'bdesc' => '物理伤害<span class="yellow">+[:phydmgr:]%</span>,击杀时额外获得<span class="lime">敌人等级-(0.15×<span tooltip2="等同于你当前等级">[^lvl^]</span>)</span>点经验;消耗<span class="red">[:ragecost:]</span>怒气',
'vars' => Array(
'ragecost' => 18,
'phydmgr' => 20,
'phydmgr' => 20,
),
'pvars' => Array('lvl'),
'lockdesc' => Array(
......@@ -1511,7 +1547,7 @@ $cskills = Array
),
'c11_merc' => Array
(
'name' => '佣兵',
'name' => '佣兵',
'tags' => Array('active','limit'),
'desc' => "本局已发动<span class=\"redseed\"> [^skillpara|c11_merc-active_t^]/[:maxactive_t:] </span>次<br>
消耗<span class='yellow'>[:mcost:]</span>元,在当前地点随机召唤一名佣兵;<br>
......@@ -1552,7 +1588,7 @@ $cskills = Array
),
'c11_stock' => Array
(
'name' => '理财',
'name' => '理财',
'tags' => Array('passive'),
'desc' => "每探索/移动<span class='yellow'>[:mst:]</span>次,你所持金钱增加<span class='yellow'>[:earn:]%</span>;<br>
所加金钱数最低不会低于<span class='yellow'>[:minmoney:]</span>元,最高不会超过<span class='yellow'>[:maxmoney:]</span>元<br>
......@@ -1562,7 +1598,7 @@ $cskills = Array
'mst' => 50,
'earn' => 20,
'minmoney' => 100,
'maxmoney' => 2500,
'maxmoney' => 2500,
),
'pvars' => Array('lvl','skillpara|c11_stock-ms'),
'lockdesc' => Array(
......@@ -1574,7 +1610,7 @@ $cskills = Array
),
'c11_renjie' => Array
(
'name' => '人杰',
'name' => '人杰',
'tags' => Array('passive'),
'desc' => "战斗中,你的熟练度始终取用最高熟练值。",
'lockdesc' => Array(
......@@ -1590,7 +1626,7 @@ $cskills = Array
'tags' => Array('passive'),
'desc' => '你对敌人的隐蔽率<span class="yellow">-[:hidegain:]%</span>;敌人对你的隐蔽率<span class="yellow">-[:hideloss:]%</span>',
'vars' => Array(
'hidegain' => 100,
'hidegain' => 100,
'hideloss' => 75,
),
),
......@@ -1642,7 +1678,7 @@ $cskills = Array
'bdesc' => "消耗<span class=\"red\">[:hpcost:]%</span>生命值,附加等于消耗值且受<span class=\"yellow\">「底力」</span>加成的{$sktpwhitedmg};发动需消耗<span class=\"red\">[:ragecost:]</span>怒气",
'vars' => Array(
'ragecost' => 50,
'hpcost' => 25,
'hpcost' => 25,
),
'lockdesc' => Array(
'lvl' => '7级时解锁',
......@@ -1713,7 +1749,7 @@ $cskills = Array
你不能再埋设陷阱,且从陷阱处受到的伤害减少<span class="yellow">[:trapdmgloss:]%</span><br>',
'vars' => Array
(
'phydmgloss' => 90,
'phydmgloss' => 90,
'phydmgloss_2' => 50,
'trapdmgloss' => 60,
),
......@@ -1842,7 +1878,7 @@ $cskills = Array
),
'c19_nirvana' => Array
(
'name' => '涅槃',
'name' => '涅槃',
'tags' => Array('passive','limit'),
'desc' => "本局已生效<span class=\"redseed\"> [^skillpara|c19_nirvana-active_t^]/[:maxactive_t:] </span>次<br>
因陷阱/战斗死亡时,转化所有的{$sktprp}并立刻复活<br>
......@@ -1971,7 +2007,7 @@ $cskills = Array
'log' => '<span class="yellow">切换了「量心」的状态。</span>',
'events' => Array('active|c19_dispel'),
'svars' => Array(
'active' => 0,
'active' => 0,
),
'pvars' => Array('skill-active'),
'lockdesc' => Array(
......@@ -2005,7 +2041,7 @@ $cskills = Array
'vars' => Array(
'sscost' => 100,
'wtht' => 600,
'maxactive_t' => 1,
'maxactive_t' => 1,
),
'svars' => Array('active_t' => 0,),
'pvars' => Array('skillpara|c19_woesea-active_t'),
......@@ -2073,7 +2109,7 @@ $cskills = Array
<span class='grey'>当前累计发动次数:[^skillpara|c20_lighting-active_t^] 次</span>",
'bdesc' => "消耗<span class='yellow'>[:emcost:]</span>份随机元素,根据所消耗元素种类附加{$sktpemsdmg};消耗<span class='red'>[:ragecost:]</span>怒气</span>",
'vars' => Array(
'ragecost' => 15,
'ragecost' => 15,
'emcost' => 30,
'emextype' => Array( // 各类元素能造成的伤害类型
0 => 'white',
......@@ -2105,7 +2141,7 @@ $cskills = Array
复活后的{$sktpzombie}有<span class=\"yellow\">50%</span>概率为你<span class='gold' tooltip2='当你攻击敌人且敌人未死亡时,与你在同一地点的灵俑有概率主动为你助战。'>协战</span>,并在你受到攻击时,<br>
为你抵挡最多不超过<span class=\"yellow\">[:maxdefhp:]%</span>灵俑当前生命的伤害",
'vars' => Array(
'maxdefhp' => 50,
'maxdefhp' => 50,
'notype' => Array(1,9,19,88,92), //不能复活为灵俑的NPC
),
'lockdesc' => Array(
......@@ -2129,7 +2165,7 @@ $cskills = Array
'log' => '<span class="yellow">切换了「火花」的状态。</span>',
'events' => Array('active|c20_sparkle'),
'svars' => Array(
'active' => 0,
'active' => 0,
'active_t' => 0,
),
'vars' => Array(
......@@ -2166,7 +2202,7 @@ $cskills = Array
'events' => Array('lotus','active_news'),
'vars' => Array(
'emsgain' => 3,
'maxactive_t' => 3,
'maxactive_t' => 3,
),
'svars' => Array('active_t' => 0,),
'pvars' => Array('skillpara|c20_lotus-active_t'),
......@@ -2261,11 +2297,11 @@ $cskills = Array
'input' => '切换',
'log' => '<span class="yellow">切换了「燃血」的状态。</span>',
'events' => Array('active|c21_sacrifice'),
'vars' => Array(
'vars' => Array(
'death_obbs' => 50 //入乡随俗
),
'svars' => Array(
'active' => 0,
'active' => 0,
),
'pvars' => Array('skill-active'),
'lockdesc' => Array(
......@@ -2285,7 +2321,7 @@ $cskills = Array
你每因此受到<span class="yellow">[:dmgrate:]</span>点伤害,就随机造成敌人一处受伤。',
'bdesc' => "引爆身上的全部代码片段,根据片段的属性对双方造成额外伤害和效果;消耗<span class='red'>[:ragecost:]</span>怒气</span>",
'vars' => Array(
'ragecost' => 100,
'ragecost' => 100,
'dmgrate' => 100, //造成一处部位受伤需要的伤害量
),
'lockdesc' => Array(
......@@ -2302,7 +2338,7 @@ $cskills = Array
'desc' => '你不会受到反噬伤害,但不能造成除了毒性、冻气以外的属性伤害<br>
你造成的最终伤害降低<span class="yellow">[:findmgloss:]%</span>,从敌人处受到的伤害降低<span class="yellow">[:findmgr:]%</span>',
'vars' => Array(
'findmgloss' => 50,
'findmgloss' => 50,
'findmgr' => 25,
),
),
......@@ -2314,7 +2350,7 @@ $cskills = Array
武器的<span class="yellow">效耐</span>取决于尸体的<span class="yellow">最大生命</span>与<span class="yellow">体力</span>,上限为<span class="red">[:limit:]</span>点。<br>
优秀的尸源有概率为武器附加<span class="yellow">冲击</span>与<span class="yellow">精英</span>属性',
'vars' => Array(
'ragecost' => 100,
'ragecost' => 100,
'limit' => 117007,
'notype' => Array(88,92),//不能用来抡的NPC
),
......
......@@ -2086,11 +2086,14 @@
'teamID' => '',
'teamPass' => '',
'gd' => 'f',
'clubskill' => Array(
'fireseed3',
),
//'pls' => 99,
'mhp' => 17,
'msp' => 200,
'att' => 27,
'def' => 99999,
'def' => 99,
'lvl' => 13,
'skill' => 1,
'money' => 250,
......
......@@ -8,13 +8,13 @@ if (! defined ( 'IN_GAME' )) {
function item_poison($itmn, &$data) {
global $log, $nosta, $db, $tablepre, $now;
extract($data, EXTR_REFS);
$itm = & ${'itm' . $itmn};
$itmk = & ${'itmk' . $itmn};
$itme = & ${'itme' . $itmn};
$itms = & ${'itms' . $itmn};
$itmsk = & ${'itmsk' . $itmn};
if (strpos($itmk, '2') === 2) {
$damage = round($itme * 2);
} elseif (strpos($itmk, '1') === 2) {
......@@ -25,6 +25,13 @@ function item_poison($itmn, &$data) {
if (strpos($inf, 'p') === false) {
$inf .= 'p';
}
# 「种火IV」效果判定:
if(check_skill_unlock('fireseed4', $data)) {
$log .= "<span class='yellow'>「种火IV」使{$name}受到的所有伤害变为0!</span><br>";
$damage = 0;
}
$hp -= $damage;
if ($itmsk && is_numeric($itmsk)) {
$result = $db->query("SELECT * FROM {$tablepre}players WHERE pid='$itmsk'");
......
......@@ -243,10 +243,19 @@ function trap(&$data=NULL){
{
$bid = $itmsk0;
# 计算陷阱伤害
$damage = calc_trap_damage($data,NULL,$playerflag,$selflag);
# 检查陷阱是否被迎击
$damage = check_trap_def_event($data,$damage,$playerflag,$selflag);
# 「种火IV」效果判定:
if(!empty($data['clbpara']['skill']) && in_array('fireseed4', $data['clbpara']['skill']))
{
$log .= "<span class='yellow'>「种火IV」使{$name}受到的所有伤害变为0!</span><br>";
$damage = 0;
}
else
{
# 计算陷阱伤害
$damage = calc_trap_damage($data,NULL,$playerflag,$selflag);
# 检查陷阱是否被迎击
$damage = check_trap_def_event($data,$damage,$playerflag,$selflag);
}
if($damage)
{
......@@ -1701,7 +1710,8 @@ function reload_set_items(&$pa)
if(!empty($pa['clbpara']['setitems']))
{
//获得对应的套装效果
include_once GAME_ROOT.'./include/game/setitems.func.php';
process_set_item_effects($pa);
}
return;
}
......@@ -1722,6 +1732,8 @@ function reload_single_set_item(&$pa,$eqp,$enm,$active=0)
$pa['clbpara']['setitems'][$sid] += 1;
$nownums = $pa['clbpara']['setitems'][$sid];
//获得对应的套装效果
include_once GAME_ROOT.'./include/game/setitems.func.php';
process_set_item_effects($pa);
//$log .= "激活了套装{$set_items_info[$sid]['name']}{$nownums}件套的效果。<br>";
//检查是否解锁对应套装成就
}
......@@ -1730,6 +1742,8 @@ function reload_single_set_item(&$pa,$eqp,$enm,$active=0)
$pa['clbpara']['setitems'][$sid] -= 1;
$nownums = $pa['clbpara']['setitems'][$sid];
//失去对应的套装效果
include_once GAME_ROOT.'./include/game/setitems.func.php';
process_set_item_effects($pa);
//$log .= "套装{$set_items_info[$sid]['name']}组件数-1,重新激活{$nownums}件套的效果。<br>";
}
}
......
......@@ -24,32 +24,32 @@ namespace revattr
$w2 = !empty($w2) && isset($attinfo[$w2]) ? $w2 : '';
# 输入了预设的攻击方式,检查是否合法
if(!empty($wep_kind))
if(!empty($wep_kind))
{
if(strpos($pa['wepk'],$wep_kind)!==false) $pa['wep_kind'] = $wep_kind;
else $pa['wep_kind'] = $wep_kind == $w2 ? $w2 : $w1;
}
# 没有输入预设攻击方式,自动选择
else
else
{
if(empty($w2))
{
$pa['wep_kind'] = $w1;
}
else
else
{
# 射系武器没有子弹的情况下,自动选用第二攻击模式
if(($w1 == 'G' || $w1 == 'J') && $pa['weps'] == $nosta)
{
$pa['wep_kind'] = $w2;
}
elseif(($w2 == 'G' || $w2 == 'J') && $pa['weps'] == $nosta)
elseif(($w2 == 'G' || $w2 == 'J') && $pa['weps'] == $nosta)
{
$pa['wep_kind'] = $w1;
}
# 检查策略模式:射程优先 & 熟练优先
else
{
{
$pa['wep_kind'] = $w1; $w1_skill = get_wep_skill($pa); $w1_range = get_wep_range($pa);
$pa['wep_kind'] = $w2; $w2_skill = get_wep_skill($pa); $w2_range = get_wep_range($pa);
# 传入pd射程,且当前两种攻击方式在射程判定上没有区别,则熟练优先
......@@ -57,7 +57,7 @@ namespace revattr
{
$pa['wep_kind'] = $w1_skill > $w2_skill ? $w1 : $w2;
}
else
else
{
# 两把武器熟练都大于250的情况下,射程优先
if($w1_skill > 250 && $w2_skill > 250) $pa['wep_kind'] = $w1_range > $w2_range ? $w1 : $w2;
......@@ -90,7 +90,7 @@ namespace revattr
if(empty($pa['wep_kind'])) get_wep_kind($pa);
$range = isset($rangeinfo[$pa['wep_kind']]) ? $rangeinfo[$pa['wep_kind']] : NULL;
//弓系射程随熟练增加,每200点加1,最多加3
if($pa['wep_kind']=='B') {
$r_add = floor($pa[$skillinfo[$pa['wep_kind']]] / 200);
......@@ -181,7 +181,7 @@ namespace revattr
if(!$pd['type'] && $pd['nm']!='你') $pd['logsave'] .= "<span class=\"yellow\">{$pa['name']}</span>对你发动了技能<span class=\"red\">「{$bsk_name}」</span>!";
elseif(!$pa['type'] && $pa['nm']!='你') $pa['logsave'] .= "你对<span class=\"yellow\">{$pd['name']}</span>发动了技能<span class=\"red\">「{$bsk_name}」</span>!";
}
else
else
{
# 主动技不满足使用条件或来源非法,直接注销标记
unset($pa['bskill']);
......@@ -257,7 +257,7 @@ namespace revattr
}
}
# 其他非特判技能,默认给一个触发标记
else
else
{
$pa['skill_'.$sk] = 1;
//$pa['skill_'.$sk.'_log'] = "";
......@@ -429,10 +429,10 @@ namespace revattr
}else{
$log .= "<span class=\"yellow\">{$pa['nm']}成功地复制了对手的武器!</span><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['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);
......@@ -441,16 +441,16 @@ namespace revattr
}
else
{
$log .= "<span class=\"red\">但是似乎失败了!</span><br>";
$log .= "<span class=\"red\">但是似乎失败了!</span><br>";
}
}
# 存在其他方式提供的暴毙死法,也中止后续战斗动作。
if(isset($pa['gg_flag']))
{
return -1;
}
return 0;
}
......@@ -461,7 +461,7 @@ namespace revattr
//基础命中率
$hitrate = $hitrate_obbs[$pa['wep_kind']];
//熟练度修正
$hitrate += round($pa['wep_skill'] * $hitrate_r[$pa['wep_kind']]);
$hitrate += round($pa['wep_skill'] * $hitrate_r[$pa['wep_kind']]);
//武器基础命中率上限
$hitrate = min($hitrate_max_obbs[$pa['wep_kind']],$hitrate);
//获取社团技能对基础命中率的修正(旧)
......@@ -469,7 +469,7 @@ namespace revattr
//获取社团技能对基础命中率的修正(新)
$hitrate = get_clbskill_hitrate($pa,$pd,$active,$hitrate);
//异常状态状态修正
foreach ($inf_htr_p as $inf_ky => $value)
foreach ($inf_htr_p as $inf_ky => $value)
{
if(strpos($pa['inf'], $inf_ky)!==false) $hitrate *= $value;
}
......@@ -480,7 +480,7 @@ namespace revattr
}
//获取命中次数
function get_hit_time_rev(&$pa,&$pd,$active)
function get_hit_time_rev(&$pa,&$pd,$active)
{
global $nosta,$wepimprate,$infobbs;
......@@ -521,7 +521,7 @@ namespace revattr
$wep_imp_obbs *= get_skillvars('c2_butcher','wepimpr');
}
}
else
else
{
//消耗型武器 每次连击必定消耗1
$wep_imp_obbs = 100;
......@@ -538,15 +538,15 @@ namespace revattr
{
$atk_t = $pa['weps']==$nosta ? $atk_t : min($atk_t,$pa['weps']);
}
//计算实际命中次数
$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);
$dice2 = diceroll(99);
$dice3 = diceroll(99);
if ($dice < $pa['hitrate'])
if ($dice < $pa['hitrate'])
{
//增加命中次数
$pa['hitrate_times'] += 1;
......@@ -591,7 +591,7 @@ namespace revattr
# 真红暮防御事件:
if($pd['type'] == 19 && $pd['name'] == '红暮')
{
{
$p = attr_extra_19_crimson($pa,$pd,$active,'defend');
if(isset($p)) return $p;
}
......@@ -604,7 +604,7 @@ namespace revattr
{
$log .= "<span class=\"yellow\">{$pa['nm']}的攻击不受「天佑」影响!</span><br>";
}
else
else
{
$log .= "<span class=\"yellow\">「天佑」使{$pa['nm']}的攻击没能造成任何伤害!</span><br>";
return 0;
......@@ -623,7 +623,7 @@ namespace revattr
return 0;
}
}
else
else
{
if($pd['arte'] > 1)
{
......@@ -702,11 +702,11 @@ namespace revattr
# 计算武器面板攻击:
//空手 武器伤害=2/3熟练度
if($pa['wep_kind'] == 'N')
if($pa['wep_kind'] == 'N')
{
if(!isset($pa['wep_skill'])) $pa['wep_skill'] = get_wep_skill($pa);
$pa['wepe_t'] = round($pa['wep_skill']*2/3);
#「拳法」效果判定,在空手基础上再额外增加
if(isset($pa['skill_c13_kungfu']))
{
......@@ -714,13 +714,13 @@ namespace revattr
}
}
//射系 武器伤害=面板数值
elseif($pa['wep_kind'] == 'G' || $pa['wep_kind'] == 'J')
elseif($pa['wep_kind'] == 'G' || $pa['wep_kind'] == 'J')
{
$pa['wepe_t'] = $pa['wepe'];
}
//枪托打人 武器伤害=面板数值/5
//弓当斩系武器也用同一个数值好了,懒得多想
elseif(isset($pa['is_wpg']))
elseif(isset($pa['is_wpg']))
{
$pa['wepe_t'] = round ($pa['wepe']/ 5 );
}
......@@ -744,7 +744,7 @@ namespace revattr
$base_att = get_base_att_modifier($pa,$pd,$active,$base_att,$tooltip);
return $base_att;
}
//获取pa的攻击力修正
function get_base_att_modifier(&$pa,&$pd,$active,$base_att,$tooltip=0)
{
......@@ -773,10 +773,10 @@ namespace revattr
if(!empty($pa['inf']))
{
global $inf_att_p;
foreach ($inf_att_p as $inf_ky => $value)
foreach ($inf_att_p as $inf_ky => $value)
{
if(strpos($pa['inf'], $inf_ky)!==false) $inf_atk_per *= $value;
}
}
}
# 计算社团技能对pa攻击力的修正(旧)
......@@ -799,7 +799,7 @@ namespace revattr
$tooltip .="\">".$base_att."</span>";
return $tooltip;
}
else
else
{
return $base_att;
}
......@@ -868,8 +868,8 @@ namespace revattr
$base_def_per = 100;
//天气修正
$wth_def_per = isset($weather_defend_modifier[$weather]) ? $weather_defend_modifier[$weather] : 0 ;
//地点修正
$pls_def_per = isset($pls_defend_modifier[$pd['pls']]) ? $pls_defend_modifier[$pd['pls']] : 0;
//地点修正
$pls_def_per = isset($pls_defend_modifier[$pd['pls']]) ? $pls_defend_modifier[$pd['pls']] : 0;
//姿态修正只在受到先制攻击时生效? //pa身上没有反击标记 代表这是一次先制攻击
if(!isset($pa['is_counter']) && $pose_defend_active) $pose_def_per = isset($pose_defend_modifier[$pd['pose']]) ? $pose_defend_modifier[$pd['pose']] : 0 ;
//姿态修正始终生效
......@@ -881,19 +881,19 @@ namespace revattr
//上述各项系数修正最低不低于1%
$base_def_per += $wth_def_per+$pls_def_per+$pose_def_per+$tac_def_per;
$base_def_per = $base_def_per > 0 ? $base_def_per : 1;
# 计算受伤状态对pd防御力的修正
$inf_def_per = 100;
if(!empty($pd['inf']))
{
global $inf_def_p;
foreach($inf_def_p as $inf_ky => $value)
foreach($inf_def_p as $inf_ky => $value)
{
if(strpos($pd['inf'], $inf_ky)!==false) $inf_def_per *= $value;
}
}
# 计算社团技能对pd防御力的修正(新)
# 计算社团技能对pd防御力的修正(新)
#「根性」技能加成
if(!check_skill_unlock('c12_garrison',$pd))
{
......@@ -921,7 +921,7 @@ namespace revattr
}
//计算原始伤害
function get_original_dmg_rev(&$pa,&$pd,$active)
function get_original_dmg_rev(&$pa,&$pd,$active)
{
global $skill_dmg, $dmg_fluc, $weather, $pls, $log;
......@@ -955,16 +955,16 @@ namespace revattr
$damage = 0;
# 重枪
if ($pa['wep_kind'] == 'J')
if ($pa['wep_kind'] == 'J')
{
$adddamage=$pd['mhp']/3;
if ($adddamage>20000) $adddamage=10000;
$damage += round($pa['wepe']*2/3+$adddamage);
}
# 灵力武器
if ($pa['wep_kind'] == 'F')
if ($pa['wep_kind'] == 'F')
{
if(isset($pa['sldr_flag']) || isset($pd['sldr_flag']))
if(isset($pa['sldr_flag']) || isset($pd['sldr_flag']))
{
$log.="<span class=\"red\">由于灵魂抽取的作用,灵系武器伤害大幅降低了!</span><br>";
}
......@@ -986,7 +986,7 @@ namespace revattr
}
//计算伤害倍率变化(攻击方)
function get_damage_p_rev(&$pa,&$pd,$active)
function get_damage_p_rev(&$pa,&$pd,$active)
{
global $log,$cskills;
......@@ -1019,14 +1019,14 @@ namespace revattr
$log_sp_cost = ceil($sp_cost);
$log .= "消耗{$log_sp_cost}点体力,";
}
else
else
{
$sp_cost = 0;
}
//获取威力系数:NPC固定为50%
$factor = $pa['type'] ? 0.5 : 0.5+round(($sp_cost/$sp_cost_max)/2,1);
//获取伤害变化倍率并扣除体力
$dmg_p[]= round($factor,2);
$dmg_p[]= round($factor,2);
if(isset($log_sp_cost)) $pa['sp'] -= $log_sp_cost;
//输出log
$f = round ( 100 * $factor );
......@@ -1038,7 +1038,7 @@ namespace revattr
{
//获取伤害变化倍率
$sk_r = get_skillvars('c9_lb','phydmgr');
$dmg_p[]= $sk_r;
$dmg_p[]= $sk_r;
//输出log
if($pa['type']) $log .= npc_chat_rev ($pa,$pd,'critical');
$log .= "<span class=\"red\">发动必杀技!</span><br>";
......@@ -1047,11 +1047,11 @@ namespace revattr
# 连击判定:
# 只要命中次数上限大于1就进入连击判定,不需要再检查武器有没有连击属性。方便一些技能强制附加连击
if($pa['hitrate_max_times'] > 1)
{
{
//获取连击次数伤害倍率:2次2倍,3次2.8倍,之后=2.8+(次数-3)*0.6
$r_dmg_p = Array(2=>2,3=>2.8);
$p = isset($r_dmg_p[$pa['hitrate_times']]) ? $r_dmg_p[$pa['hitrate_times']] : 2.8 + ($pa['hitrate_times']-3)*0.6;
$dmg_p[]= $p;
$dmg_p[]= $p;
//输出log
$log .= "{$pa['hitrate_max_times']}次连续攻击命中<span class=\"yellow\">{$pa['hitrate_times']}</span>次!";
}
......@@ -1063,7 +1063,7 @@ namespace revattr
$sk_lvl = get_skilllvl('c1_crit',$pa);
// 获取猛击倍率
$sk_p = 1 + (get_skillvars('c1_crit','attgain',$sk_lvl) / 100);
$dmg_p[]= $sk_p;
$dmg_p[]= $sk_p;
//输出log
$log .= "<span class=\"yellow\">{$pa['nm']}朝着{$pd['nm']}打出了凶猛的一击!<span class=\"clan\">{$pd['nm']}被打晕了过去!</span></span><br>";
}
......@@ -1072,7 +1072,7 @@ namespace revattr
{
$sk_p = get_skillvars('c3_potential','phydmgr');
$p = 1 + ($sk_p / 100);
$dmg_p[]= $p;
$dmg_p[]= $p;
$log.="<span class='yellow'>{$pa['nm']}爆发潜能打出了致命一击!</span><br>";
}
#「百出」判定:
......@@ -1080,7 +1080,7 @@ namespace revattr
{
$sk_p = get_skillvars('c3_numerous','dmgr')*get_skillpara('c3_enchant','active_t',$pa['clbpara']);
$p = 1 + ($sk_p / 100);
$dmg_p[]= $p;
$dmg_p[]= $p;
$log.="<span class='yellow'>{$pa['nm']}打得{$pd['nm']}落花流水,物理伤害增加了{$sk_p}%!</span><br>";
}
#「瞄准」判定:
......@@ -1088,7 +1088,7 @@ namespace revattr
{
$sk_p = get_skillvars('c4_aiming','phydmgr');
$p = 1 + ($sk_p / 100);
$dmg_p[]= $p;
$dmg_p[]= $p;
$log.="<span class='yellow'>「瞄准」使{$pa['nm']}造成的物理伤害提高了{$sk_p}%!</span><br>";
}
#「咆哮」判定:
......@@ -1096,7 +1096,7 @@ namespace revattr
{
$sk_p = get_skillvars('c4_roar','phydmgr');
$p = 1 + ($sk_p / 100);
$dmg_p[]= $p;
$dmg_p[]= $p;
$log.="<span class='yellow'>「咆哮」使{$pa['nm']}造成的物理伤害提高了{$sk_p}%!</span><br>";
}
#「穿杨」判定:
......@@ -1104,7 +1104,7 @@ namespace revattr
{
$sk_p = get_skillvars('c4_sniper','phydmgr');
$p = 1 + ($sk_p / 100);
$dmg_p[]= $p;
$dmg_p[]= $p;
$log.="<span class='yellow'>「穿杨」使{$pa['nm']}造成的物理伤害提高了{$sk_p}%!</span><br>";
}
#「解构」判定:
......@@ -1112,13 +1112,13 @@ namespace revattr
{
$sk_p = get_skillvars('c10_decons','phydmgr');
$p = 1 + ($sk_p / 100);
$dmg_p[]= $p;
$dmg_p[]= $p;
$log.="<span class='yellow'>「解构」使{$pa['nm']}造成的物理伤害提高了{$sk_p}%!</span><br>";
}
#「妙手」判定:
if(isset($pa['bskill_tl_pickpocket']))
{
$dmg_p[]= 0;
$dmg_p[]= 0;
$log.="<span class='yellow'>「妙手」使{$pa['nm']}的本次攻击几乎没有造成任何伤害!</span><br>";
}
#「宗师」判定:
......@@ -1126,7 +1126,7 @@ namespace revattr
{
$sk_p = (strpos($pa['wep_name'],'拳')!==false && $pa['wep_kind'] == 'P') ? get_skillvars('c13_master','phydmgloss_2') : get_skillvars('c13_master','phydmgloss');
$p = 1 - ($sk_p / 100);
$dmg_p[]= $p;
$dmg_p[]= $p;
$log.="<span class='yellow'>{$pa['nm']}耻于使用武器战斗!造成的物理伤害降低了{$sk_p}%!</span><br>";
}
......@@ -1180,7 +1180,7 @@ namespace revattr
unset($pd['phy_def_flag']);
}
}
else
else
{
$log .="纳尼?{$pd['nm']}的装备使攻击无效化的属性竟然失效了!<br>";
}
......@@ -1201,7 +1201,7 @@ namespace revattr
{
$pd['phy_def_flag'] = 1;
}
else
else
{
$log .= "{$pd['nm']}的装备没能发挥减半伤害的效果!<br>";
}
......@@ -1221,14 +1221,14 @@ namespace revattr
{
$pd['phy_def_flag'] = $def_kind[$pa['wep_kind']];
}
else
else
{
$log .= "{$pd['nm']}{$itemspkinfo[$def_kind[$pa['wep_kind']]]}没能发挥减半伤害的效果!<br>";
}
}
# 贯穿效果判定:
if(in_array('n',$pa['ex_keys']))
if(in_array('n',$pa['ex_keys']))
{
$dice = diceroll(99);
# 未贯穿率
......@@ -1283,7 +1283,7 @@ namespace revattr
{
//获取伤害变化倍率并扣除体力
$p = 1.5;
$dmg_p[]= $p;
$dmg_p[]= $p;
//输出log
$log.="<span class=\"red\">由于{$pd['nm']}手中的武器过于笨重,受到的伤害大增!真是大快人心啊!</span><br>";
}
......@@ -1291,20 +1291,20 @@ namespace revattr
# 热恋、同志判定:
if(in_array('l',$pd['ex_keys']))
{
$dice = diceroll(100);
if($dice <= 25)
{
if($pa['gd'] != $pd['gd'])
{
{
$p = 0;
$dmg_p[]= $p;
$dmg_p[]= $p;
$log .= "<span class=\"red\">{$pa['nm']}{$pd['nm']}迷惑,无法全力攻击!</span>";
}
else
else
{
$p = 2;
$dmg_p[]= $p;
$dmg_p[]= $p;
$log .= "<span class=\"red\">{$pa['nm']}{$pd['nm']}激怒,伤害加倍!</span>";
}
}
......@@ -1315,15 +1315,15 @@ namespace revattr
if($dice <= 25)
{
if($pa['gd'] == $pd['gd'])
{
{
$p = 0;
$dmg_p[]= $p;
$dmg_p[]= $p;
$log .= "<span class=\"red\">{$pa['nm']}{$pd['nm']}迷惑,无法全力攻击!</span>";
}
else
else
{
$p = 2;
$dmg_p[]= $p;
$dmg_p[]= $p;
$log .= "<span class=\"red\">{$pa['nm']}{$pd['nm']}激怒,伤害加倍!</span>";
}
}
......@@ -1338,12 +1338,12 @@ namespace revattr
$p = 0;
$log .= "<span class=\"red\">{$pa['nm']}的攻击完全被{$pd['nm']}的装备吸收了!</span><br>";
}
else
else
{
$p = 0.5;
$log .= "<span class=\"yellow\">{$pd['nm']}的装备使{$pa['nm']}的攻击伤害减半了!</span><br>";
}
$dmg_p[]= $p;
$dmg_p[]= $p;
}
return $dmg_p;
......@@ -1408,7 +1408,7 @@ namespace revattr
if(in_array($ex,$ex_attack))
{
//把$ex_attack和$pa['ex_keys']位置调换可过滤重复属性,现在不会过滤
$ex_keys[]= $ex;
$ex_keys[]= $ex;
}
}
......@@ -1535,7 +1535,7 @@ namespace revattr
unset($pd['ex_def_flag'] );
}
}
else
else
{
$log .="纳尼?{$pd['nm']}装备上使属性攻击无效化的属性竟然失效了!<br>"; //无效化属性攻击的属性无效化了 怎么会这样
}
......@@ -1553,7 +1553,7 @@ namespace revattr
{
$pd['ex_def_flag'] = 1;
}
else
else
{
$log .= "属性防御装备没能发挥应有的作用!<br>";
}
......@@ -1578,7 +1578,7 @@ namespace revattr
if(isset($invaild_ex))
{
$ivlog = '';
foreach($invaild_ex as $ivex)
foreach($invaild_ex as $ivex)
{
if(!empty($ivlog)) $ivlog.="、".$itemspkinfo[$ex_def_kind[$ivex]];
else $ivlog = $itemspkinfo[$ex_def_kind[$ivex]];
......@@ -1588,14 +1588,14 @@ namespace revattr
}
# 破格(属穿)效果判断:
if(in_array('y',$pa['ex_keys']))
if(in_array('y',$pa['ex_keys']))
{
$dice = diceroll(99);
# 未破格率
$obbs = 100 - $specialrate['y'];
# 「暗杀」效果判定:
if(isset($pa['skill_buff_assassin'])) $obbs += get_skillvars('buff_assassin','pdefbkr');
if ($dice > $obbs)
if ($dice > $obbs)
{
if(!empty($pd['ex_def_flag']))
{
......@@ -1620,7 +1620,7 @@ namespace revattr
{
global $log,$now;
//触发了属抹效果,直接返回固定伤害值
if(isset($pd['ex_def_flag']) && $pd['ex_def_flag'] == 2)
if(isset($pd['ex_def_flag']) && $pd['ex_def_flag'] == 2)
{
$total_ex_dmg = count($pa['ex_attack_keys']);
$log .= "<span class=\"red\">属性攻击的力量完全被防具吸收了!</span>仅造成了<span class=\"red\">{$total_ex_dmg}</span>点伤害!<br>";
......@@ -1660,7 +1660,7 @@ namespace revattr
lostclubskill('buff_shield',$pd['clbpara']);
$pa['ex_breakshield_log'] = 1;
}
else
else
{
$shield -= $ex_dmg;
$ex_dmg = 0;
......@@ -1679,14 +1679,14 @@ namespace revattr
//获取属性施加异常概率的社团修正
if(isset($ex_good_club[$ex]) && $ex_good_club[$ex] == $pd['club']) $e_htr += 20;
//施加异常
if ($dice < $e_htr)
if ($dice < $e_htr)
{
$pa['ex_dmginf_log'] = $ex_inf[$ex];
$pd['inf'] .= $pa['ex_dmginf_log'];
addnews($now,'inf',$pa['name'],$pd['name'],$pa['ex_dmginf_log']);
}
}
//整理后统一输出文本
//整理后统一输出文本
if(!empty($pa['ex_dmgpsh_log'])) $log .= $pa['ex_dmgpsh_log']; //由于对方已经xx xx伤害提升/降低
$log .= $exdmgname[$ex]; //xx
if($ex_dmg)
......@@ -1699,7 +1699,7 @@ namespace revattr
if(!empty($pa['ex_breakshield_log'])) $log .= "<span class='red'>{$pd['nm']}的「护盾」被打破了!</span><br>";
$total_ex_dmg[] = $ex_dmg;
}
else
else
{
if(!empty($pa['ex_shield_log'])) $log .= "被「护盾」抵消了!";
$log .= "没能造成伤害!<br>";
......@@ -1720,7 +1720,7 @@ namespace revattr
//获取倍率
$sk_p = get_skillvars('c4_roar','exdmgr');
$p = 1 + ($sk_p / 100);
$ex_dmg_p[]= $p;
$ex_dmg_p[]= $p;
//输出log
$log.="<span class='yellow'>「咆哮」使{$pa['nm']}造成的属性伤害提高了{$sk_p}%!</span><br>";
}
......@@ -1732,7 +1732,7 @@ namespace revattr
if(!empty($sk_p))
{
$p = 1 + ($sk_p / 100);
$ex_dmg_p[]= $p;
$ex_dmg_p[]= $p;
}
}
# 「催化」判定:
......@@ -1743,7 +1743,7 @@ namespace revattr
{
$sk_p = get_skillvars('c8_catalyst','exdmgr')*$sk_nums;
$p = 1 + ($sk_p / 100);
$ex_dmg_p[]= $p;
$ex_dmg_p[]= $p;
$log.="<span class='yellow'>「催化」使{$pa['nm']}造成的属性伤害提高了{$sk_p}%!</span><br>";
}
}
......@@ -1756,6 +1756,37 @@ namespace revattr
global $log;
$fin_dmg_p = Array();
# 「种火I」效果判定:
if(isset($pd['skill_fireseed1']))
{
$p = 0.75;
$log.= "<span class='yellow'>「种火I」使{$pd['nm']}受到的最终伤害降低为75%!</span><br>";
$fin_dmg_p[] = $p;
}
# 「种火II」效果判定:
if(isset($pd['skill_fireseed2']))
{
$p = 0.5;
$log.= "<span class='yellow'>「种火II」使{$pd['nm']}受到的最终伤害降低为50%!</span><br>";
$fin_dmg_p[] = $p;
}
# 「种火IV」效果判定:
if(isset($pd['skill_fireseed4']))
{
// 将伤害设为0的特殊处理
$pd['fireseed4_flag'] = 1;
$log.= "<span class='yellow'>「种火IV」使{$pd['nm']}受到的所有伤害变为0!</span><br>";
}
# 「种火III」效果判定:
elseif(isset($pd['skill_fireseed3']))
{
// 将伤害设为1的特殊处理
$pd['fireseed3_flag'] = 1;
$log.= "<span class='yellow'>「种火III」使{$pd['nm']}受到的最终伤害变为1!</span><br>";
}
# 「强袭」效果判定:
if(isset($pa['bskill_c2_raiding']))
{
......@@ -1827,7 +1858,7 @@ namespace revattr
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($p>0) $fin_dmg_p[]= $p;
}
# 「莹心」pa效果判定:
......@@ -1892,6 +1923,19 @@ namespace revattr
{
global $log,$plsinfo,$now;
# 「种火IV」效果判定:
if(isset($pd['fireseed4_flag']))
{
$fin_dmg = 0;
return $fin_dmg;
}
# 「种火III」效果判定:
if(isset($pd['fireseed3_flag']))
{
$fin_dmg = 1;
return $fin_dmg;
}
# 「量心」效果判定 手加减:
if(isset($pa['askill_c19_dispel']) && $fin_dmg >= $pd['hp'])
{
......@@ -1910,7 +1954,7 @@ namespace revattr
$log.="闷棍对体力不支的{$pd['nm']}造成了<span class=\"yellow\">{$sk_dmg}</span>点额外伤害!<br>";
$fin_dmg += $sk_dmg;
}
else
else
{
$log.="闷棍没有造成额外伤害!<br>";
}
......@@ -1948,14 +1992,14 @@ namespace revattr
$esum = 0;
$ssum = 0;
$sk_tot = '';
if(!isset($data))
{
global $pdata;
$data = &$pdata;
}
extract($data,EXTR_REFS);
//引爆身上的全部代码片段,并记录效耐和与属性
$log .= "{$pa['nm']}引爆了身上所有的代码片段!<br>";
foreach (array(1, 2, 3, 4, 5, 6) as $item_position)
......@@ -1973,7 +2017,7 @@ namespace revattr
}
}
//对双方造成等同于这些片段上的异常状态
global $ex_inf, $exdmginf;
global $ex_inf, $exdmginf;
$ex_inf_arr = '';
for ($i = 0; $i < mb_strlen($sk_tot); $i++)
{
......@@ -1983,8 +2027,8 @@ namespace revattr
get_inf_rev($pd,$ex_inf[$sk_tot[$i]]);
$log .= "<span class='yellow'>爆炸的代码片段使双方{$exdmginf[$ex_inf[$sk_tot[$i]]]}了!</span><br>";
}
}
}
//特定系数:耐久和100以下是0.2,500以上是0.4,2500以上是0.6,10000以上是1.0,30000以上是2.0
if ($ssum < 100) $s_factor = 0.2;
elseif ($ssum < 500) $s_factor = 0.3;
......@@ -1992,18 +2036,18 @@ namespace revattr
elseif ($ssum < 10000) $s_factor = 0.6;
elseif ($ssum < 30000) $s_factor = 1.0;
else $s_factor = 2.0;
//对双方造成等同于这些片段上的效果和除以特定系数的额外伤害
if ($esum == 0) $blaster_dmg = 1;
else $blaster_dmg = (int)($esum / $s_factor);
$pa['hp'] -= $blaster_dmg;
if ($pa['hp'] <= 0)
{
$pa['hp'] = 0;
$pa['hp'] = 0;
include_once GAME_ROOT . './include/state.func.php';
death('club21_blaster');
}
//每受到100点伤害就随机炸伤对手身上一个部位
$hurt_times = min(floor($blaster_dmg/$dmgrate), 4);
$hurts = array('b','h','a','f');
......@@ -2021,7 +2065,7 @@ namespace revattr
$log .= "<span class=\"yellow\">爆炸的代码片段使{$pd['nm']}{$exdmginf[$hurts[$key]]}了!</span><br>";
}
}
$log .= "<span class=\"yellow\">爆炸的代码片段对双方造成了<span class=\"red\">$blaster_dmg</span>点额外伤害!</span><br>";
$fin_dmg += $blaster_dmg;
}
......@@ -2035,14 +2079,14 @@ namespace revattr
# 「暗杀」效果判定
if(isset($pa['skill_buff_assassin'])) $obbs += get_skillvars('buff_assassin','pdefbkr');
if ($dice > $obbs)
if ($dice > $obbs)
{
//贯穿与破格同时生效时 穿透伤害制御
if(isset($pa['ex_pierce_flag']) && isset($pa['pierce_flag']))
{
$log .= "<span class='gold'>{$pa['nm']}凌厉的攻势直接突破了{$pd['nm']}的伤害限制!</span><br>";
}
else
else
{
#「脉冲」效果判定:
if(isset($pa['bskill_c7_emp']) || isset($pd['bskill_c7_emp']))
......@@ -2073,7 +2117,7 @@ namespace revattr
$fin_dmg += $rp_dmg;
$log .= "<span class=\"yellow\">在「祛障」的作用下,{$pd['nm']}受到了<span class=\"red\">$rp_dmg</span>点额外伤害。</span><br>";
}
else
else
{
$min_rp = get_skillvars('c19_redeem','rpmin');
$move_rp = max($min_rp,$pd['rp']);
......@@ -2085,7 +2129,7 @@ namespace revattr
# 「狂怒」效果判定:
if(isset($pa['bskill_c12_rage']))
{
$sk_dmg = round($pa['mhp']*0.25);
$sk_dmg = round($pa['mhp']*0.25);
$pa['hp'] -= $sk_dmg;
$sk_vars = get_skillvars('c12_enmity','findmgr',get_skilllvl('c12_enmity',$pa)) * calc_enmity_losshpr($pa,$pd);
if($sk_vars > 1) $sk_dmg = round($sk_dmg *(1 + ($sk_vars/100)));
......@@ -2103,7 +2147,7 @@ namespace revattr
$fin_dmg += $pa['bskill_c20_lighting_white_dmg'];
$log .= "<span class='mtgcolorless'>{$elements_info[0]}使{$pa['nm']}的攻击附加了{$pa['bskill_c20_lighting_white_dmg']}点额外伤害!</span><br>";
unset($pa['bskill_c20_lighting_white_dmg']);
}
}
# 「护盾」效果判定
if(isset($pd['skill_buff_shield']))
......@@ -2137,7 +2181,7 @@ namespace revattr
# 「灵俑」抵挡伤害判定
if(!empty($pd['clbpara']['zombieid']))
{
$mate_list = $pd['clbpara']['zombieid'];
$mate_list = $pd['clbpara']['zombieid'];
shuffle($mate_list);
foreach($mate_list as $mid)
{
......@@ -2162,13 +2206,13 @@ namespace revattr
{
$sk = 'c20_sparkle';
unset($pa['askill_c20_sparkle']);
$plslist = get_safe_plslist();
$plslist = get_safe_plslist();
$sp_pls = $plslist[array_rand($plslist)];
# 注销技能状态
set_skillpara($sk,'active',0,$pd['clbpara']);
set_skillpara($sk,'active_t',1,$pd['clbpara']);
# 切换地图
$pd['pls'] = $sp_pls;
$pd['pls'] = $sp_pls;
$pd['tp_by_sparkle'] = $sp_pls;
$log .= "<span class=\"yellow\">千钧一发之际,{$pd['nm']}点燃火花传送到了别处!</span><br>";
if(!$pa['type']) $pa['log_save'] .= "{$pd['name']}在千钧一发之际点燃了火花,传送到不知道哪去了!";
......@@ -2230,7 +2274,7 @@ namespace revattr
global $log;
#计算反噬伤害:
if ($pa['final_damage'] >= 1000)
if ($pa['final_damage'] >= 1000)
{
if ($pa['final_damage'] < 2000) {
$hp_d = floor($pa['hp']/2);
......@@ -2239,7 +2283,7 @@ namespace revattr
} else {
$hp_d = floor($pa['hp']*4/5);
}
if (in_array('H',$pa['ex_keys']))
if (in_array('H',$pa['ex_keys']))
{
#「脉冲」效果判定:
if(isset($pa['bskill_c7_emp']) || isset($pd['bskill_c7_emp']))
......@@ -2279,10 +2323,10 @@ namespace revattr
}
//防守方(pd)在受到伤害后触发的事件
function get_hurt_events(&$pa,&$pd,$active)
function get_hurt_events(&$pa,&$pd,$active)
{
global $log,$infinfo,$exdmginf;
# pd存在防具受损况,在这里应用
if(!empty($pd['armor_hurt']))
{
......@@ -2301,7 +2345,7 @@ namespace revattr
# 将pa造成的伤害记录在pd的成就里
if(!$pd['type'] && $pa['final_damage'] >= 1000000) $pd['clbpara']['achvars']['takedmg'] = $pa['final_damage'];
return;
}
......@@ -2313,8 +2357,8 @@ namespace revattr
if(strpos($pa['inf'],$infnm) === false)
{
$pa['inf'] .= $infnm;
//$pa['combat_inf'] .= $infnm;
return 1;
//$pa['combat_inf'] .= $infnm;
return 1;
}
return 0;
}
......@@ -2335,8 +2379,8 @@ namespace revattr
if(strpos($pa['inf'],$infnm) !== false)
{
$pa['inf'] = str_replace($infnm,"",$pa['inf']);
//$pa['combat_inf'] .= $infnm;
return 1;
//$pa['combat_inf'] .= $infnm;
return 1;
}
return 0;
}
......@@ -2373,7 +2417,7 @@ namespace revattr
{
$pa['clbpara']['battle_turns'] = 0;
}
else
else
{
$pa['clbpara']['battle_turns'] ++;
}
......@@ -2381,7 +2425,7 @@ namespace revattr
{
$pd['clbpara']['battle_turns'] = 0;
}
else
else
{
$pd['clbpara']['battle_turns'] ++;
}
......
<?php
if(!defined('IN_GAME')) exit('Access Denied');
# 套装效果处理函数
# 处理套装效果
function process_set_item_effects(&$pa)
{
global $log;
# 检查玩家是否有套装效果
if(empty($pa['clbpara']['setitems'])) return;
# 获取套装信息
$set_items_info = get_set_items_info();
# 处理每个套装效果
foreach($pa['clbpara']['setitems'] as $sid => $snums)
{
# 检查套装件数是否达到激活条件
if($snums >= $set_items_info[$sid]['active'][1])
{
# 根据套装ID应用不同效果
switch($sid)
{
case 'fs2': # 种火I套装
if(empty($pa['clbpara']['skill']) || !in_array('fireseed1', $pa['clbpara']['skill']))
{
getclubskill('fireseed1', $pa['clbpara']);
$log .= "<span class='yellow'>套装「{$set_items_info[$sid]['name']}」效果:获得技能「种火I」!</span><br>";
}
break;
case 'fs3': # 种火II套装
if(empty($pa['clbpara']['skill']) || !in_array('fireseed2', $pa['clbpara']['skill']))
{
getclubskill('fireseed2', $pa['clbpara']);
$log .= "<span class='yellow'>套装「{$set_items_info[$sid]['name']}」效果:获得技能「种火II」!</span><br>";
}
break;
case 'fs4': # 种火III套装
if(empty($pa['clbpara']['skill']) || !in_array('fireseed3', $pa['clbpara']['skill']))
{
getclubskill('fireseed3', $pa['clbpara']);
$log .= "<span class='yellow'>套装「{$set_items_info[$sid]['name']}」效果:获得技能「种火III」!</span><br>";
}
break;
case 'fs5': # 种火IV套装
if(empty($pa['clbpara']['skill']) || !in_array('fireseed4', $pa['clbpara']['skill']))
{
getclubskill('fireseed4', $pa['clbpara']);
$log .= "<span class='yellow'>套装「{$set_items_info[$sid]['name']}」效果:获得技能「种火IV」!</span><br>";
}
break;
# 其他套装效果可以在这里添加
default:
# 默认不做任何处理
break;
}
}
else
{
# 套装件数不足,移除对应效果
switch($sid)
{
case 'fs2': # 种火I套装
# 检查玩家是否有该技能,且该技能不是通过学习获得的
if(!empty($pa['clbpara']['skill']) && in_array('fireseed1', $pa['clbpara']['skill']))
{
# 移除技能
lostclubskill('fireseed1', $pa['clbpara']);
$log .= "<span class='yellow'>失去套装「{$set_items_info[$sid]['name']}」效果:技能「种火I」消失了!</span><br>";
}
break;
case 'fs3': # 种火II套装
if(!empty($pa['clbpara']['skill']) && in_array('fireseed2', $pa['clbpara']['skill']))
{
lostclubskill('fireseed2', $pa['clbpara']);
$log .= "<span class='yellow'>失去套装「{$set_items_info[$sid]['name']}」效果:技能「种火II」消失了!</span><br>";
}
break;
case 'fs4': # 种火III套装
if(!empty($pa['clbpara']['skill']) && in_array('fireseed3', $pa['clbpara']['skill']))
{
lostclubskill('fireseed3', $pa['clbpara']);
$log .= "<span class='yellow'>失去套装「{$set_items_info[$sid]['name']}」效果:技能「种火III」消失了!</span><br>";
}
break;
case 'fs5': # 种火IV套装
if(!empty($pa['clbpara']['skill']) && in_array('fireseed4', $pa['clbpara']['skill']))
{
lostclubskill('fireseed4', $pa['clbpara']);
$log .= "<span class='yellow'>失去套装「{$set_items_info[$sid]['name']}」效果:技能「种火IV」消失了!</span><br>";
}
break;
# 其他套装效果可以在这里添加
default:
# 默认不做任何处理
break;
}
}
}
}
?>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment