無名殺制作擴(kuò)展教程00.3 摸牌技
摘要:
? ??英姿 獨(dú)進(jìn) 短視 幽明 摸金 幸寵
前言:
(2000字廢話)
? ? 不積跬步,無以至千里。從這里開始,寫一個(gè)原創(chuàng)的技能吧!
開場(chǎng)語:
? ? 摸牌,是最直接的收益,早期還有1血2牌的換算。這里不討論技能設(shè)計(jì),而是講技能的實(shí)現(xiàn),順便能知道技能描述對(duì)技能代碼量的影響。
正文:
講到摸牌技,肯定繞不開英姿。下面是無名殺里英姿的代碼

看到這里,你可能會(huì)疑惑:
1.我就想多摸一張牌,為什么要寫這么多代碼?
2.哪句代碼讓我多摸一張牌了?沒找到
這是一個(gè)無名殺官方技能代碼,所以很全。實(shí)際上,下面的代碼大部分情況也能起到相同的效果。
{
? ? trigger:{
? ? ? ? player:"phaseDrawBegin",
? ? },
? ? content:function(){
? ? ? ? trigger.num++;
??? },
}
這樣看的話,第2個(gè)問題現(xiàn)在已經(jīng)有答案了:
"trigger.num++;"這句代碼是讓你多摸一張牌的代碼。
phaseDrawBegin,即為"摸牌階段開始時(shí)"
trigger,詞典查到的意思是"觸發(fā)",這里指的是觸發(fā)這個(gè)技能的事件。
"++"是自增運(yùn)算符,簡(jiǎn)化了很多代碼,完整的寫法是:
trigger.num = trigger.num + 1;
整個(gè)代碼可以這么理解:摸牌階段開始時(shí),摸牌階段的摸牌數(shù)+1。

那么,多的那些代碼有什么用?
首先

為了符合規(guī)則集,添加了phaseDrawBegin1和
phaseDrawBegin2這兩個(gè)時(shí)機(jī)。phaseDrawBegin1這個(gè)時(shí)機(jī)可以放棄摸牌,而phaseDrawBegin2是改變摸牌數(shù)的。
那么,這個(gè)filter限制了哪些?

event.numFixed指摸牌數(shù)是否固定下來了,如果已經(jīng)固定下來了,改變摸牌數(shù)的技能就不生效。
這個(gè)機(jī)制就是"放棄摸牌",將摸牌數(shù)變成0,然后不讓摸牌數(shù)發(fā)生改變。
再后面是
audio:2,
audioname:["sp_lvmeng"],
這兩句是技能配音的代碼,不做過多闡述。
frequent:true,
默認(rèn)設(shè)置為自動(dòng)發(fā)動(dòng),這樣就不需要每次發(fā)動(dòng)技能點(diǎn)確認(rèn)了(但不意味著這個(gè)技能變成鎖定技了)
ai里面的threaten是嘲諷,1.3的嘲諷值比默認(rèn)的大,敵人會(huì)優(yōu)先打他。

英姿的技能代碼已經(jīng)講解完了,接下來就是魔改時(shí)間了。
1.改成多摸兩張牌
蠢辦法,代碼寫2遍:
trigger.num++;
trigger.num++;
稍聰明的辦法:
trigger.num=trigger.num+2;
推薦方法:
trigger.num+=2;
取巧方法:
trigger.num++;
player.draw();
2.多摸X張牌
例子為凌操的獨(dú)進(jìn)

Math.floor()就是向下取整的函數(shù)
其他的還有
Math.ceil()向上取整
Math.round()四舍五入
比如體力越低越強(qiáng)
trigger.num+=1+player.getDamagedHp();
還有隨游戲輪數(shù)上升
trigger.num+=game.roundNumber;

差點(diǎn)偏了,這篇教程講的是摸牌技,英姿只是其中一種。接下來看幾個(gè)真實(shí)的設(shè)計(jì)

鍵盤俠是我的擴(kuò)展《靈樞包》的一個(gè)武將。(第二個(gè)字念shu一聲,不是靈柩,也不陰間)
技能強(qiáng)度不談,直接看代碼

phaseZhunbeiBegin 準(zhǔn)備階段開始時(shí)
player.skip("phaseUse");跳過出牌階段
至于check的那一堆代碼,可加可不加。大致意思是如果頭上有樂,兵糧或草木,發(fā)動(dòng)這個(gè)技能。否則只有在手牌數(shù)不比手牌上限多的情況下發(fā)動(dòng)。

另一個(gè)例子,玩點(diǎn)論殺的神甄姬

神甄姬沒有任何區(qū)域,摸牌階段做這種改動(dòng)也很合理。
還是直接看代碼。

因?yàn)槭欠艞壝?,所以時(shí)機(jī)選的是phaseDrawBegin1
trigger.changeToZero();這句代碼把trigger.num設(shè)置為0,并且把數(shù)字固定了,也就是"放棄摸牌"

最后一個(gè)例子,小游戲摸牌,由于代碼太長(zhǎng),就不放了。(這種設(shè)計(jì)真的沒啥意思)

結(jié)語:
看完了新手教程,趕快開始實(shí)戰(zhàn)吧,先從這個(gè)"簡(jiǎn)單"的技能開始(笑)
