游戏王残局简化版

一点点点基础.md at [5b9fb5e09f]
Login

一点点点基础.md at [5b9fb5e09f]

File script/一点点点基础.md artifact add2903578 part of check-in 5b9fb5e09f


一点点点基础

添加卡片

青眼白龙的卡密是 89631139 ,但查不到 c89631139.lua 。

估计只需要更改 cards.cdb ,就可以添加卡片了。


c89631139 的 c 是指 card ,就是「卡片」。

注册效果

火球的效果足够简单,就以火球为例。

火球里有很多函数,但并没有启用这些函数的语句,这表明它们自己单独是不能运行的,而是其他的东西给调用。

在 c46130346.lua ,有以下效果:

function c46130346.initial_effect(c)
end

它被 interpreter.cpp 所调用:

call_card_function(pcard, "initial_effect", 1, 0);

c46130346.initial_effect 不利于复制粘贴。

在 utility.lua 有:

function GetID()
end

所以可以这样注册效果:

local s,id,o=GetID()
function s.initial_effect(c)
end

效果描述

诸如 SetProperty ,其参数可以在 constant.lua 查。


简单的描述就写简单一点,复杂的描述就写复杂一点。

效果参数

在 processor.cpp 可以看到,有时给函数传参数的时候传的是匿名参数,所以很多时候,这些参数其实是的。

e effect
tp this player
eg event group
ep event player
ev event value
re reason effect
r reason
rp reason player
chk check
chkc check card

0 指先攻玩家, 1 指后攻玩家,这是绝对的。

tp 指我方玩家, 1 - tp 指对方玩家,这是相对的。


这套效果参数,可以看作是一个规范,目的是为了便于看懂与复制代码。

效果检查

function c46130346.damtg(e,tp,eg,ep,ev,re,r,rp,chk)
  if chk==0 then return 233333333 end
  233333333
end

这个函数,我觉得应该看作两个函数。

它在 chk 的值不同时,执行不同的分支。

而 chk 取决于效果执行的阶段:检查阶段与执行阶段。

火球

function c46130346.damtg(e,tp,eg,ep,ev,re,r,rp,chk)
	if chk==0 then return true end
	Duel.SetTargetPlayer(1-tp)
	Duel.SetTargetParam(500)
	Duel.SetOperationInfo(0,CATEGORY_DAMAGE,nil,0,1-tp,500)
end

把:

if chk==0 then return true end

改成:

if chk==0 then return false end

则无法发动火球。


去掉:

Duel.SetOperationInfo(0,CATEGORY_DAMAGE,nil,0,1-tp,500)

则无法对应火球而发动痛魂之咒术。


去掉

e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)

则无法对应火球而发动精灵之镜。

叛逆之罪宝-蛇眼

去掉:

e1:SetCountLimit(1,id+EFFECT_COUNT_CODE_OATH)

则可以发动多次。


去掉:

e1:SetDescription(aux.Stringid(id,0))

则没有变化。


去掉:

Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FACEUP)

则提示文本发生改变。

这些提示文本可以在 constant.lua 中找到


去掉:

e1:SetValue(TYPE_SPELL+TYPE_CONTINUOUS)

则旋风无法破坏那些怪兽。


去掉:

e1:SetReset(RESET_EVENT+RESETS_STANDARD-RESET_TURN_SET)

则那些怪兽离开场上后仍然被当作永续魔法卡。

废铁死亡恶魔

去掉:

c:EnableReviveLimit()

没有苏生限制。

虫饵

去掉:

e2:SetCode(EFFECT_CANNOT_SUMMON)

不会封锁召唤。

天底的使徒

去掉:

e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON)

则我方仍然可从额外卡组特殊召唤怪兽。


去掉:

e1:SetReset(RESET_PHASE+PHASE_END)

则我方一直被限制特召。

异界共鸣-同调融合

去掉:

e1:SetTargetRange(1,0)

则我方仍可特召。