我的意思是要确保在开拓者被无效的情况下,只要衍生物没被无效,加攻就生效。开拓者的效果给衍生物注册了这个加攻的效果,所有加攻是注册给衍生物的效果,即衍生物的效果,而非开拓者的。
时间: 2025-08-21 08:08:31 浏览: 5
<think>我们之前讨论的卡牌效果中,加攻效果是附加在衍生物上的,但用户现在希望确保:即使“开拓的无名客”的效果被无效(例如被“效果遮蒙者”无效),其已经生成的衍生物的效果(包括加攻效果)仍然能正常生效。
根据用户要求,我们需要将加攻效果完全转移到衍生物上,而不是像之前那样附加在本体上。这样,即使本体被无效,衍生物的效果也不会受到影响。
具体修改方案:
1. 将加攻效果从本体移除,改为附加在衍生物上。
2. 衍生物的效果不需要依赖本体,因此即使本体被无效,衍生物的效果仍然存在。
注意:衍生物本身是一个独立的卡片,它的效果一旦成功赋予,就不会因为本体的无效而消失(除非衍生物离场或被无效)。
原代码中,我们为衍生物添加了一个检索效果(丢弃手牌检索卡牌),现在需要再为衍生物添加一个加攻效果(当衍生物存在时,开拓的无名客攻击力上升1000)。
但是注意:用户希望加攻效果是衍生物的效果,所以这个效果应该附加在衍生物上,但实际作用对象是开拓的无名客(本体)。因此,我们需要在衍生物的效果中描述为:此卡在场上表侧表示存在时,自己场上的“开拓的无名客”攻击力上升1000。
然而,这样设计有一个风险:如果衍生物被无效,则加攻效果也会消失。但这是符合游戏规则的。用户的要求是本体被无效时衍生物效果还在,所以我们需要确保加攻效果是衍生物的效果,而不是本体的效果。
修改步骤:
1. 在衍生物生成时,为衍生物添加一个持续效果(EFFECT_TYPE_FIELD),这个效果会影响本体的攻击力。
2. 因为衍生物是Token,不能离开场上,所以我们可以使用EFFECT_TYPE_FIELD来影响所有自己场上的“开拓的无名客”。
但是,更简单的方式是:在衍生物上注册一个效果,这个效果的作用对象是开拓的无名客(通过指定卡名),这样只要衍生物在场上,所有符合条件的怪兽都会获得攻击力提升。
具体代码实现:
在生成衍生物的代码部分(lvop函数),我们为衍生物添加两个效果:
效果1:检索效果(已存在)
效果2:加攻效果(新增)
加攻效果代码示例:
```lua
local e3=Effect.CreateEffect(token) -- 注意:效果持有者是token
e3:SetType(EFFECT_TYPE_FIELD)
e3:SetCode(EFFECT_UPDATE_ATTACK)
e3:SetTargetRange(LOCATION_MZONE, LOCATION_MZONE) -- 影响自己场上的怪兽
e3:SetTarget(function(e,c)
return c:IsCode(25041511) -- 只影响开拓的无名客
end)
e3:SetValue(1000)
e3:SetReset(RESET_EVENT+RESETS_STANDARD) -- 衍生物离场时重置
token:RegisterEffect(e3)
```
这样,这个加攻效果是由衍生物持有的,只要衍生物在场上,开拓的无名客就会获得1000攻击力加成。即使开拓的无名客的效果被无效,这个加攻效果依然存在(因为它是衍生物赋予的)。
另外,我们还需要注意:如果衍生物离场,这个加攻效果会消失,这是符合预期的。
同时,我们之前已经为衍生物添加了检索效果(e2),所以现在衍生物有两个效果。
完整修改后的lvop函数:
```lua
function c25041511.lvop(e,tp,eg,ep,ev,re,r,rp)
-- 双重检查数量限制
if Duel.GetLocationCount(tp,LOCATION_MZONE)<=0
or Duel.IsExistingMatchingCard(c25041511.mimitokenfilter,tp,LOCATION_MZONE,0,1,nil)
or not Duel.IsPlayerCanSpecialSummonMonster(tp,25041512,0x419,TYPES_TOKEN_MONSTER+TYPE_TUNER,500,100,2,RACE_SPELLCASTER,ATTRIBUTE_WATER,POS_FACEUP_DEFENSE)
then
return
end
local token=Duel.CreateToken(tp,25041512)
if Duel.SpecialSummon(token,0,tp,tp,false,false,POS_FACEUP_DEFENSE)~=0 then
-- 检索效果(原效果)
local e2=Effect.CreateEffect(token)
e2:SetDescription(aux.Stringid(25041511,2))
e2:SetCategory(CATEGORY_TOHAND+CATEGORY_SEARCH)
e2:SetType(EFFECT_TYPE_IGNITION)
e2:SetProperty(EFFECT_FLAG_CLIENT_HINT)
e2:SetRange(LOCATION_MZONE)
e2:SetCountLimit(1)
e2:SetCost(c25041511.descost)
e2:SetTarget(c25041511.destg)
e2:SetOperation(c25041511.desop)
token:RegisterEffect(e2)
-- 新增:加攻效果(由衍生物持有)
local e3=Effect.CreateEffect(token)
e3:SetType(EFFECT_TYPE_FIELD)
e3:SetCode(EFFECT_UPDATE_ATTACK)
e3:SetRange(LOCATION_MZONE) -- 衍生物在场上才有效
e3:SetTargetRange(LOCATION_MZONE,0) -- 自己场上的怪兽
e3:SetTarget(function(e,c)
return c:IsCode(25041511) -- 只影响开拓的无名客
end)
e3:SetValue(1000)
e3:SetReset(RESET_EVENT+RESETS_STANDARD)
token:RegisterEffect(e3)
end
end
```
注意:这里我们使用了匿名函数作为Target,因为需要指定卡号(25041511)。另外,我们设置了Range为LOCATION_MZONE,表示这个效果只在衍生物在场上时才有效。
这样修改后,加攻效果完全由衍生物提供,即使开拓的无名客被无效(例如被“效果遮蒙者”无效),只要衍生物还在场上,开拓的无名客的攻击力就会上升1000。
同时,我们之前已经移除了本体上的加攻效果(在之前的修改中,我们实际上已经将加攻效果附加在衍生物上,但用户要求的是加攻效果属于衍生物,所以这次修改符合要求)。
另外,我们还需要注意:这个效果是衍生物在场上时持续有效的,所以不需要额外的触发条件。
最后,我们还需要确保衍生物的数量限制(只能存在一个)仍然有效,这部分代码已经存在,不需要修改。
因此,完整的修正代码将按照上述修改。
注意:由于我们之前已经将加攻效果从本体移除,所以这次修改不会出现重复加攻的情况。
如果用户需要,我们还可以为衍生物添加离场时攻击力恢复的效果,但根据游戏规则,效果消失后攻击力会自动恢复,所以不需要额外处理。
总结:通过将加攻效果转移到衍生物上,我们确保了即使开拓的无名客被无效,加攻效果仍然存在(只要衍生物在场上)。
现在提供完整的修正代码(仅修改lvop函数,其他部分保持不变):</think>我理解您的需求:即使"开拓的无名客"(25041511)的效果被无效,其生成的衍生物的加攻效果仍能独立生效。以下是修正方案,确保加攻效果完全属于衍生物而非本体:
### 修正方案:将加攻效果绑定到衍生物
```lua
-- 翁法洛斯英雄纪-开拓的无名客
function c25041511.initial_effect(c)
-- ...(其他代码保持不变)...
-- 生成衍生物操作(关键修改)
function c25041511.lvop(e,tp,eg,ep,ev,re,r,rp)
if Duel.GetLocationCount(tp,LOCATION_MZONE)<=0
or Duel.IsExistingMatchingCard(c25041511.mimitokenfilter,tp,LOCATION_MZONE,0,1,nil)
or not Duel.IsPlayerCanSpecialSummonMonster(tp,25041512,0x419,TYPES_TOKEN_MONSTER+TYPE_TUNER,500,100,2,RACE_SPELLCASTER,ATTRIBUTE_WATER,POS_FACEUP_DEFENSE)
then
return
end
local token=Duel.CreateToken(tp,25041512)
if Duel.SpecialSummon(token,0,tp,tp,false,false,POS_FACEUP_DEFENSE)~=0 then
-- 关键修改:加攻效果直接附加在衍生物上
local e1=Effect.CreateEffect(token)
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_UPDATE_ATTACK)
e1:SetRange(LOCATION_MZONE)
e1:SetTargetRange(LOCATION_MZONE,0)
e1:SetTarget(function(e,c)
return c:IsCode(25041511) -- 指定影响开拓的无名客
end)
e1:SetValue(1000)
token:RegisterEffect(e1)
-- 检索效果(保持不变)
local e2=Effect.CreateEffect(token)
e2:SetDescription(aux.Stringid(25041511,2))
e2:SetCategory(CATEGORY_TOHAND+CATEGORY_SEARCH)
e2:SetType(EFFECT_TYPE_IGNITION)
e2:SetProperty(EFFECT_FLAG_CLIENT_HINT)
e2:SetRange(LOCATION_MZONE)
e2:SetCountLimit(1)
e2:SetCost(c25041511.descost)
e2:SetTarget(c25041511.destg)
e2:SetOperation(c25041511.desop)
token:RegisterEffect(e2)
end
end
end
```
### 关键修改说明:
1. **效果所有权转移**:
```lua
local e1=Effect.CreateEffect(token) -- 效果持有者为衍生物
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetTarget(function(e,c)
return c:IsCode(25041511) -- 指定影响开拓的无名客
end)
token:RegisterEffect(e1)
```
- 效果直接由衍生物(token)持有
- 即使本体被"效果遮蒙者"等无效,衍生物的效果仍能独立生效[^1]
2. **效果作用机制**:
- 使用`EFFECT_TYPE_FIELD`全局效果类型
- `SetRange(LOCATION_MZONE)`确保衍生物在场时才生效
- 通过`SetTarget`精确指定影响对象为本体(25041511)
3. **效果独立性**:
- 衍生物离场时自动清除效果(无`SetReset`)
- 本体无效化不影响衍生物效果
- 衍生物被无效时加攻效果才消失
### 测试场景:
1. **本体被无效**:
- 用"效果遮蒙者"无效本体
- 衍生物仍存在 → 本体攻击力+1000
- 符合:本体效果被无效不影响衍生物效果[^1]
2. **衍生物被无效**:
- 用"无限泡影"无效衍生物
- 加攻效果立即消失
3. **衍生物离场**:
- 破坏衍生物 → 加攻效果消失
- 本体攻击力恢复原值
4. **本体离场**:
- 破坏本体 → 衍生物仍在场
- 但无作用对象,加攻效果自然失效
### 效果对比:
| 场景 | 原方案 | 修正方案 |
|------|--------|----------|
| 本体被无效 | ✘ 加攻消失 | ✔ 加攻保留 |
| 衍生物被无效 | ✔ 加攻消失 | ✔ 加攻消失 |
| 本体离场 | ✘ 效果残留 | ✔ 自然失效 |
| 衍生物离场 | ✔ 加攻消失 | ✔ 加攻消失 |
这种设计确保加攻效果完全由衍生物控制,不依赖本体状态,符合您的需求[^1]。
阅读全文
相关推荐


















