|
DIY教程:如何添加化境系统
将近一万行的jymain和一万多行的jywar,不论谁看了都要头晕。jywar主要问题在于,数据与实现没有分离。也就是说,在jywar中,有太多诸如
- if wugong == xx and pid == xx and xxx and (xxx or xxx) then
复制代码
之类的代码。所以说,如果把每种化境组合,用上述方式添加到jywar文件中,起码也要写几百行。而且,要是再添加或者剔除化境组合的话,还要再到上万行代码中找到这些地方进行修改。
所以,添加化境系统,采用数据与实现分离的方式。
首先,在jyconst文件中,设立一个CC.HUAJING全局变量,储存各种化境组合。
- CC.HUAJING = {
- --紫霞
- {89, 30},
- {89, 31},
- {89, 32},
- {89, 34},
- --混元
- {90, 37},
- {90, 40},
- {90, 60},
- {90, 121},
- --神照
- {94, 114},
- }
复制代码
如此,要调整化境组合搭配,只要在jyconst中调整这张表即可。甚至,取消化境系统,只需要
设置空表即可,完全不需要调整jywar代码。实际上,这段代码也存在问题,就是太多魔数,89啊,30啊,实际上,可以在游戏里制作一个编辑器模式,用选武功名称,而不是敲数字的方式,来输出这张表。
其次,在jymain文件中,设立一个函数HJ_WG,来查询内外功组合是否符合化境搭配。
- --化境判定
- function HJ_WG(pid, WGid)
- local NGid = JY.Person[pid]["主运内功"]
- if Pair_Search(NGid, WGid, CC.HUAJING) then
- return true;
- end
- return false;
- end
复制代码
HJ_WG函数中,调用了一个查表函数Pair_Search。这个查表函数,可以帮助查询任何两两匹配表,在天衣无缝系统中,还会重复用到查表函数Pair_Search。
- --查表
- function Pair_Search(item1, item2, pair)
- for _ , t in ipairs(pair) do
- if t[1] == item1 and t[2] == item2 then
- return true
- end
- end
- return false
- end
复制代码
接着。开始实现化境的几个效果:
武功威力,低于600的,提升至800威力。
武功威力,超过600的,提升199威力,至多为1199威力。
增加33%连击率。
攻击时,50%几率获得【浑然天成】效果,追加300点杀气。
首先,武功威力增加,是在jymain中get_skill_power函数实现的,只需添加一两句判定即可。
- if HJ_WG(personid, wugongid) then
- if power <= 600 then
- power = 800
- else
- power = power + 199
- end
- if power > 1199 then
- power = 1199
- end
- end
复制代码
余下的,都需要在上万行的jywar文件中修改。按理来说,在这里应该把逻辑与显示进一步分离,也就是说,化境系统的连击、杀气,与画面中显示"至臻化境.浑然天成"绿字,进一步分离。可是本人水平有限,对付不了上万行代码。
总体而言,大部分对于战斗系统的修改,都集中于War_Fight_Sub与War_WugongHurtLife中,前者主要处理攻击时的各种特效,而后者则处理防御时的各种特效。
War_Fight_Sub函数大致三千行,承担过多的任务,其大体执行逻辑如下:
- function War_Fight_Sub(id, wugongnum, x, y)
- --判定所使用的武功
- --判定是否合击
- WAR.ZYHB = 1 --判定是否左右互博
- local LJ; --计算连击率
- fightnum = xx --连击次数
- while WAR.ACT <= fightnum do --连击循环
- --初始化一些全局变量
- --判定额外连击
- local BJ; --计算暴击率
- --计算内功加力
- --计算特定人物攻击特效
- --计算特定武功攻击特效
- --计算标主大招特效
- War_WugongHurtLife--计算伤害的敌人
- --计算吸血
- --显示动画
- --计算武功经验与升级
- --计算内力消耗
- end
- local jtl = 0; --计算体力消耗
- local dz = {}; --计算斗转星移
- end
复制代码
于是乎,连击率增加,在jywar中,查找"local LJ"计算连击率那一部分的代码,在下面添加一句。
- if HJ_WG(pid, wugong) then
- LJ = LJ + 33
- end
复制代码
再接着,浑然天成,显然是在连击循环中计算,只要放在计算伤害的敌人之前都可以,于是放在计算暴击率之前,查找"local BJ",在之前添加下面一句。
- --化境
- WAR.HJ = 0
- if HJ_WG(pid, wugong) and JLSD(20, 70, pid) then
- WAR.HJ = 1
- if WAR.Person[WAR.CurID]["特效文字4"] ~= nil then
- WAR.Person[WAR.CurID]["特效文字4"] = "至臻化境.浑然天成" .."·".. WAR.Person[WAR.CurID]["特效文字4"]
- else
- WAR.Person[WAR.CurID]["特效文字4"] = "至臻化境.浑然天成";
- end
- end
复制代码
这里将,全局变量初始化与实现放在一处,可能是更合适的一种选择。
War_WugongHurtLife函数大致也有三千行,其大体执行逻辑如下:
- function War_WugongHurtLife(enemyid, wugong, level, ang, x, y)
- --判定攻击的武功
- --计算护体
- ----计算阴、林、山
- ----计算特定人物防御特效
- ----计算特定内功防御特效
- ----计算斗转星移
- --计算伤害
- ----计算武器、防具对伤害的影响
- ----计算暴击对伤害的影响
- ----计算特定人物对伤害的影响
- ----计算系数对伤害的影响
- ----计算连击对伤害的影响
- ----计算难度对伤害的影响
- ----计算闪避
- ----xxxx
- ----yyyy
- JY.Person[eid]["生命"] = JY.Person[eid]["生命"] - hurt --伤害结算
- --复活判定
- --计算杀气
- --计算上毒
- --计算吸血内
- --计算封穴、流血、冰封、灼烧、怒气
- --计算杀敌增加实战
- --结算
- end
复制代码
于是乎,追加杀气可以添加计算杀气中,搜"local spdhurt",于其后添加下面一句。
- --化境追加杀气
- if WAR.HJ == 1 then
- spdhurt = spdhurt + 300
- end
复制代码
最末,特效文字的显示,在War_ShowFight函数中,添加下面一句。
- if HJ_WG(pid, wugong) then
- kfname = kfname .. "·化境"
- end
复制代码
以及其后特效文字的显示颜色,代码就不列举了。
化境系统最终就完成了。除去jyconst中的表外,添加的代码大致五十行,并不是很难。问题的关键,在于搞清楚War_Fight_Sub与War_WugongHurtLife两个大头函数的运行逻辑。从上面可以看出,这两个函数,所承担的任务实在太多,必须重构,否则任何战斗系统的改变,修改起来都是十分头痛的。
|
评分
-
查看全部评分
|