# 奇机与起迹技能实装

## 技能概述

1. **奇机（tl_2ndchance）**：
   - 被动技能，在战斗中，当受到将大于目前生命值的伤害时，那个伤害成为目前生命值-1的数值（也即留下1HP）
   - 这是一个保命技能，可以防止玩家被一击致命

2. **起迹（tl_oncemore）**：
   - 被动技能，在战斗中，只要自己的生命值为1，则将那次伤害变为0
   - 使用后会在玩家的clbpara中记录一个flag（tl_oncemore_used）
   - flag存在的场合该技能无效
   - 玩家通过使用补给和治疗获得生命值时，将这个flag去除
   - 这是一个配合奇机使用的技能，可以在生命值为1时免疫一次伤害

## 实装步骤

### 1. 添加技能定义

在 `gamedata/cache/clubskills_1.php` 文件中添加了两个技能的定义：

```php
'tl_2ndchance' => Array
(
    'name' => '奇机',
    'tags' => Array('passive'),
    'desc' => '被动技能，在战斗中，受到将大于目前生命值的伤害时，那个伤害成为目前生命值-1的数值（也即留下1HP）。',
    'cost' => 30,
    'input' => '学习',
    'log' => '消耗了<span class="lime">[:cost:]</span>点技能点，学会了技能「奇机」。<br>',
),
'tl_oncemore' => Array
(
    'name' => '起迹',
    'tags' => Array('passive'),
    'desc' => '被动技能，在战斗中，只要自己的生命值为1，则将那次伤害变为0，并在该玩家的clbpara中记录一个flag，flag存在的场合该技能无效。玩家通过使用补给和治疗获得生命值时，将这个flag去除。',
    'cost' => 30,
    'input' => '学习',
    'log' => '消耗了<span class="lime">[:cost:]</span>点技能点，学会了技能「起迹」。<br>',
),
```

### 2. 实现技能检测

在 `include/game/revattr.func.php` 文件的 `get_attr_passive_skills` 函数中添加了对这两个技能的检测：

```php
# 「奇机」特殊判定：
elseif($sk == 'tl_2ndchance')
{
    $pa['skill_tl_2ndchance'] = 1;
}
# 「起迹」特殊判定：
elseif($sk == 'tl_oncemore')
{
    $pa['skill_tl_oncemore'] = 1;
}
```

### 3. 实现技能效果

在 `include/game/revattr.func.php` 文件的 `get_final_dmg_fix` 函数中添加了这两个技能的效果实现：

```php
# 「奇机」效果判定：
if(isset($pd['skill_tl_2ndchance']) && $fin_dmg > $pd['hp'])
{
    $fin_dmg = $pd['hp'] - 1;
    $log .= "<span class='yellow'>「奇机」使{$pd['nm']}在危险时刻保留了1点生命值！</span><br>";
    return $fin_dmg;
}

# 「起迹」效果判定：
if(isset($pd['skill_tl_oncemore']) && $pd['hp'] == 1 && !isset($pd['clbpara']['tl_oncemore_used']))
{
    $pd['clbpara']['tl_oncemore_used'] = 1;
    $fin_dmg = 0;
    $log .= "<span class='yellow'>「起迹」使{$pd['nm']}在生命值为1时免疫了这次伤害！</span><br>";
    return $fin_dmg;
}
```

### 4. 实现flag清除

在以下三个函数中添加了清除 `tl_oncemore_used` flag 的代码：

1. 在 `include/game/item.recovery.php` 文件的 `item_recovery_health` 函数中：

```php
# 「起迹」标记清除：
if(isset($clbpara['tl_oncemore_used'])) {
    unset($clbpara['tl_oncemore_used']);
    $log .= "<span class='yellow'>「起迹」技能恢复了效果！</span><br>";
}
```

2. 在 `include/game/item.recovery.php` 文件的 `item_recovery_both` 函数中：

```php
# 「起迹」标记清除：
if(isset($clbpara['tl_oncemore_used'])) {
    unset($clbpara['tl_oncemore_used']);
    $log .= "<span class='yellow'>「起迹」技能恢复了效果！</span><br>";
}
```

3. 在 `include/state.func.php` 文件的 `rest` 函数中：

```php
# 「起迹」标记清除：
if($uphp > 0 && isset($clbpara['tl_oncemore_used'])) {
    unset($clbpara['tl_oncemore_used']);
    $log .= "<span class='yellow'>「起迹」技能恢复了效果！</span><br>";
}
```

## 技能机制说明

### 奇机（tl_2ndchance）

1. 当玩家受到的伤害大于当前生命值时（即致命伤害），该技能会将伤害减少为"当前生命值-1"
2. 这样玩家就会剩下1点生命值，而不是被击败
3. 技能会在游戏日志中显示提示信息
4. 这个技能没有使用次数限制，每次受到致命伤害时都会触发

### 起迹（tl_oncemore）

1. 当玩家生命值为1点时，该技能会将下一次受到的伤害变为0
2. 技能触发后，会在玩家的clbpara中设置一个flag（tl_oncemore_used）
3. 当这个flag存在时，技能不会再次触发
4. 玩家通过使用补给、治疗物品或休息恢复生命值时，会清除这个flag，使技能可以再次使用
5. 技能会在游戏日志中显示提示信息

## 技能组合效果

这两个技能可以很好地配合使用：

1. 当玩家受到致命伤害时，"奇机"会使玩家剩下1点生命值
2. 然后，如果玩家再次受到攻击，"起迹"会使这次伤害变为0，保护玩家
3. 玩家可以利用这个机会使用补给或治疗物品恢复生命值
4. 恢复生命值后，"起迹"的flag会被清除，可以再次使用

这种组合为玩家提供了强大的生存能力，特别是在危险的战斗中。
