"//最簡單的主動技"enable:"phaseUse",//出牌階段發動content:function(){//內容: player.draw();//你摸一張牌},"//最簡單的觸發技"trigger:{//時機: player:"phaseBegin",//你的回合開始時},content:function(){//內容: player.draw();//你可以摸一張牌},"//最簡單的視為技"enable:"phaseUse",//出牌階段發動selectCard:1,//把一張filterCard:true,//任意position:"h",//手牌viewAs:{//視為 name:"wuzhong",//無中生有},viewAsFilter:function(player){//視為技的限制條件 return player.countCards("h");//你有手牌時才能發動}, "//最簡單的限定技"unique:true,//特殊技(限定技和覺醒技都是)limited:true,//限定技mark:true,//標記intro:{//標記介紹 content:"limited",//內容:未發動},skillAnimation:true,//有技能動畫init:function(player){//初始化 player.storage.xx=false;//技能未發動(xx為技能名)},filter:function(event,player){//發動限制條件 return player.storage.xx==false;//你沒發動過這個技能},enable:"phaseUse",//出牌階段發動content:function(){//內容: "step 0"//第0步(必須從0開始) player.storage.xx=true;//技能發動過 player.awakenSkill("xx");//技能文本變灰(失去技能,標記消失) "step 1"//第1步 player.draw();//你摸一張牌}, "//稍複雜的主動技"enable:"phaseUse",//出牌階段發動usable:1,//每回合一次(因為回合外沒有你的出牌階段,實際為出牌階段限一次)selectCard:1,//棄置一張filterCard:true,//任意position:"h",//手牌selectTarget:1,//選擇一名filterTarget:true,//任意目標filter:function(event,player){//發動限制條件 return player.countCards("h");//你有手牌時才能發動},content:function(){//內容: target.draw();//目標摸一張牌}, "//稍複雜的觸發技"forced:true,//鎖定技usable:1,//每回合一次trigger:{//時機: player:"damageEnd",//你受到傷害後},filter:function(event,player){//發動限制條件 return player.countCards("h");//你有手牌時才能發動},content:function(){//內容: "step 0"//第0步(必須從0開始) player.chooseTarget();//你可以選擇一個目標 "step 1"//第1步 if(result.bool){//如果選了目標(沒取消) result.targets[0].draw();//(選的第一個)目標摸一張牌 } else player.draw();//否則,你摸一張牌}, "//比較複雜的主動技"enable:"phaseUse",//出牌階段發動usable:1,//每回合一次(因為回合外沒有你的出牌階段,實際為出牌階段限一次)selectCard:[1,Infinity],//棄置一張以上position:"h",//手牌中的filterCard:function(card){//牌的限制條件 return get.type(card)=="basic";//基本牌},selectTarget:1,//選擇一名filterTarget:function(card,player,target){//目標的限制條件 return target.hp<player.hp;//體力比你少的目標},filter:function(event,player){//發動限制條件 if(!player.countCards("h")){//如果你沒有手牌 return false;//不能發動 } var tj=false;//定義變量tj,初始值為false tj=game.hasPlayer(function(current){//tj賦值為:場上是否有角色 return current.hp<player.hp;//體力比你少 }); if(tj){//如果有 return true;//可以發動 }},content:function(){//內容: var num=cards.length;//定義變量num為棄置的牌的數量 target.draw(num);//目標摸這麼多牌}, "//各種函數括號里的參數"init:function(player,skill){},//獲得技能時onremove:function(player,skill){},//失去技能時prompt:function(event){},//文字提示logTarget:function(event,player){},//記錄技能目標targetprompt:function(target){},//選擇目標時每個目標顯示的文本prepare:function(cards,player,targets){},//主動技的準備工作filterCard:function(card,player){},//牌的限制條件filterTarget:function(card,player,target){},//目標的限制條件filter:function(event,player){},//發動限制條件check:function(event,player){},//ai發動的限制條件(觸發技)check:function(card){},//ai選牌的限制條件(主動技)check:function(button){},//ai選按鈕的限制條件(視為技,chooseButton里,少見)content:function(){},//內容ai:{//技能ai order:function(){},//發動順序優先級 save:true,//可以求桃時發動 skillTagFilter:function(player,tag,arg){},//技能標籤的生效限制條件 result:{//收益(只有主動技可以寫) player:function(player,target){},//技能對玩家的收益 target:function(player,target){},//技能對目標的收益 }, effect:{//效果影響 player:function(card,player,target){},//牌對你的影響 target:function(card,player,target){}, //一名角色以你為牌的目標時對你的影響 },}, "//各種函數括號里的參數②"mark:true,//一直有標記intro:{//標記介紹 content:function(storage,player,skill){},//標記介紹內容 mark:function(dialog,content,player){},//內容補充},onChooseToUse:function(event){},//需要使用牌時的觸發內容onCompare:function(player){},//拼點時的觸發內容chooseButton:{//選擇按鈕 dialog:function(event,player){},//按鈕內容 check:function(button){},//ai選按鈕的限制條件 filter:function(button,player){},//按鈕的限制條件 backup:function(links,player){//之後發動的內容 return{ filterCard:function(card){},//牌的限制條件 viewAs:{},//視為 viewAsFilter:function(player){},//視為技的限制條件 onuse:function(result,player){},//視為技為使用時的觸發內容 precontent:function(){},//技能發動前的內容 }; }, prompt:function(links,player){},//選按鈕後的提示},"//另外補充一些常見函數的參數"player.chooseTarget(function(card,player,target){//請選擇一個目標 return player!=target;//限制條件:不能選你}).set("ai",function(target){//ai選目標的限制條件 var player=get.player();//定義變量player為選目標的發起者(不懂可以先不寫) return get.attitude(player,target);//選友軍});player.chooseControl("回血","摸牌",true).set(//選擇摸牌回血"ai",function(event,player){});game.hasPlayer(function(current){});//場上有角色怎麼怎麼樣 "//content:function(){},的分步寫法""如果技能處理的兩步可以同時處理,可並為一步,否則需要分步""(例如:回血摸牌可以並為一步,選目標並棄置目標手牌就不能並為一步)"content:function(){//內容: "step 0"//必須從0開始,引號可以是單引號,但是整個技能裡面不能變 player.chooseTarget();//選目標 "step 1"//第1步 if(result.bool){//如果上一步沒取消 result.targets[0].draw();//目標摸一張牌 if(result.targets[0].countCards("h")>3){//如果目標手牌數大於3 event.finish();//這一步結束後,整個事件結束 } if(result.targets[0].countCards("h")<2){//如果目標手牌數小於2 event.goto(0);//這一步結束後,返回第0步 } } "step 2"//第2步 player.draw();//你摸一張牌 if(player.countCards("h")<2){//如果你的手牌數小於2 event.redo();//這一步結束後,再進行這一步 }}, "//全局變量""用var 定義的變量是局部變量,只能在此函數或此步使用,而有的時候會需要這個變量能跨step,或者在整局遊戲有效,多個技能中""有效,這就需要全局變量登場了。""//第①種,event.xx(只在此技能內有效)"content:function(){//內容: "step 0"//必須從0開始,引號可以是單引號,但是整個技能裡面不能變 player.chooseTarget(true);//必須選一個目標 "step 1"//第1步 event.targets=result.targets;//用event.targets記錄選的目標 "step 2"//第2步 event.targets[0].draw(2);//(選的第1個)目標摸2張牌 "step 3"//第3步 event.targets[0].damage();//(選的第1個)目標受到一點傷害},"//第②種,標記,player.storage.xx(整局遊戲有效)"content:function(){//內容: "step 0"//必須從0開始,引號可以是單引號,但是整個技能裡面不能變 player.storage.num=player.hp;//用player.storage.num記錄你的體力 "step 1"//第1步 player.draw(player.storage.num);//你摸你體力值張牌},"//第③種,不用var 定義的變量是全局變量(只要不重啟,一直有效)"//注意,這種全局變量最好不要出現在技能裡面content:function(){//內容: "step 0"//必須從0開始,引號可以是單引號,但是整個技能裡面不能變 cards=player.getCards("h");//用全局變量cards記錄你的手牌 "step 1"//第1步 player.discard(cards);//你棄置所有手牌}, "//判定"player.judge(名字,函數);"第1個參數為判定時顯示的文字,默認為技能名"event.judgestr="閃電";//用event.judgestr記錄"閃電"player.judge(event.judgestr);//你進行名字為閃電的判定//注意,event.judgestr是judge()裡面的變量,不能用其他變量記錄"第2個參數為判定時判斷結果的函數""返回值大於0時,你頭像上出現「洗具」,返回值小於0時,你頭像上出現「杯具」。"//注意:這個參數是用來教ai改判的content:function(){//內容: "step 0"//必須從0開始,引號可以是單引號,但是整個技能裡面不能變 player.judge(function(card){//你進行一次判定 return card.color=="red"?1:-1;//紅色返回1,否則返回-1 });},"判定的result比較多,還以上面的為例,假如判定牌是黑桃6青釭劍"result.card=="qinggang";//result.card為黑桃6青釭劍result.suit=="spade";//result.suit為黑桃result.color=="black";//result.color為黑色result.number==6;//result.number為6result.judge==-1;//result.judge為-1result.bool==false;//result.bool為false/*注意:當result.judge大於0時,result.bool為true當result.judge等於0時,result.bool為null*/"如果判定的結果很多(例如每種花色一個不同效果),可以用switch(){}"content:function(){//內容: "step 0"//必須從0開始,引號可以是單引號,但是整個技能裡面不能變 player.judge();//你進行一次判定 "step 1"//第1步 switch(result.suit){//根據判定牌的花色 case "spade":player.loseHp();break;//黑桃:你失去一點體力 case "heart":player.draw();break;//紅桃:你摸一張牌 case "club":player.damage();break;//梅花:你受到一點傷害 default:player.insertPhase();//其他情況:你進行一個額外回合 }}, "//選目標""這裡只介紹觸發技的選目標寫法,主動技的請看主動技框架"player.chooseTarget(提示,數量,強制,條件,ai);"第1個參數為選目標時的提示,默認為「請選擇#個目標」"player.chooseTarget("請選擇一個目標");//選擇1個目標,提示為「請選擇一個目標」"第2個參數為選目標的個數,默認為1"player.chooseTarget(2);//選2個目標player.chooseTarget([1,2]);//選1到2個目標player.chooseTarget([1,Infinity]);//選1個以上目標"第3個參數為強制,默認為false"player.chooseTarget(true);//必須選1個目標"第4個參數為限制條件,默認沒有條件"player.chooseTarget(function(card,player,target){//選1個目標 return player!=target;//限制條件:你不是目標});"第5個參數為ai,默認第2個函數參數是ai,如果怕混淆,用set()"player.chooseTarget(function(card,player,target){//選1個目標 return player!=target;//限制條件:你不是目標},function(target){//ai: var player=get.player();//定義變量player為選目標的發起者(不懂可以先不寫) return -get.attitude(player,target);//選敵人});player.chooseTarget().set("ai",function(target){//設置ai: return get.attitude(player,target);//選友軍});"選目標的result"result.bool//是否選了目標,選了為true,沒選為falseresult.targets//選擇的目標,為數組,result.targets[0]為選的第1個目標"還是拿之前的作為例子"content:function(){//內容: "step 0"//第0步(必須從0開始) player.chooseTarget();//你可以選擇一個目標 "step 1"//第1步 if(result.bool){//如果選了目標(沒取消) result.targets[0].draw();//(選的第一個)目標摸一張牌 } else player.draw();//否則,你摸一張牌}, "//比較複雜的視為技""出牌階段,你可以將一張手牌當殺或順手牽羊或過河拆橋使用"enable:"phaseUse",//出牌階段發動chooseButton:{//選擇按鈕 dialog:function(){//顯示 return ui.create.dialog([["sha","shunshou","guohe"],"vcard"]); //顯示"殺","順手牽羊","過河拆橋"的虛擬按鈕 }, filter:function(button,player){//選按鈕的限制條件 return lib.filter.filterCard({name:button.link[2]},player,_status.event.parent); //你能選擇現在能使用的牌的虛擬按鈕 }, backup:function(links,player){//視為技部分 return{ selectCard:1,//把一張 filterCard:true,//任意(手牌) viewAs:{//視為 name:links[0][2],//名字和選擇按鈕的牌相同的牌 }, }; }, prompt:function(links,player){//提示: return "請選擇"+get.translation(links[0][2])+"的目標"; //請選擇+(牌名)+的目標 },}, "//標記視為技(例子:鄧艾的\"急襲\")"enable:"phaseUse",//出牌階段發動filter:function(event,player){//發動限制條件 return player.storage.tuntian.length>0;//你屯的田沒用完},chooseButton:{//選擇按鈕 dialog:function(){//顯示 return ui.create.dialog("急襲",player.storage.tuntian,"hidden"); //顯示"急襲"和屯田的牌 }, backup:function(links,player){//視為技部分 return{ selectCard:-1,//把所有(手牌) filterCard:function(){return false},//牌限制條件:都不符合 viewAs:{//視為 name:"shunshou",//順手牽羊 }, cards:links,//定義cards為選的按鈕 onuse:function(result,player){//視為技使用牌時執行的內容 result.cards=lib.skill[result.skill].cards; //視為前的牌變為這個視為技的cards var card=result.cards[0];//定義變量card為視為前的牌 player.storage.tuntian.remove(card);//移除此"田" player.syncStorage("tuntian");//同步"屯田"的標記 }, }; }, prompt:function(links,player){//提示: return "選擇急襲的目標";//選擇急襲的目標 },}, "拼點"player.chooseToCompare(目標);"首先得有能拼點的目標"filter:function(event,player){//發動限制條件 return game.hasPlayer(function(current){//場上有角色 return player.canCompare(current);//你能和他拼點 });},"拼點的result"//假如player的拼點牌為青釭劍,目標的為古錠刀result.bool==true;//6>1result.tie==false;//不是平局result.player //你的拼點牌result.target //目標的拼點牌result.num1==6 //你的點數為6result.num2==1 //目標的點數為1"改變拼點用的牌"onCompare:function(player){//拼點時拼點牌為 return game.cardsGotoSpecial(get.cards()).cards;//牌堆頂一張牌},//摘自秦宓的"天辯""其他少見的操作"player.chooseToCompareMultiple(目標數組);//同時和多人拼點//player.chooseToCompareMultiple的目標拼點牌為result.targetsplayer.chooseToCompare(targets).callback=lib.skill.gushe.callback;//摘自王朗的"鼓舌"callback:function(){ "step 0" //和content的寫法一樣,event.num1為player的點數,event.num2為目標的點數},ai:{ noCompareTarget:true,//不能成為拼點目標(技能標籤,告訴ai的)}, "//標記(用來記錄東西,非標記技能也有用處)""這裡只簡單介紹,後面還會有更詳細的內容"mark:true,//獲得這個技能時markSkill,可以用unmarkSkill不顯示標記marktext:"暴",//標記名字為"暴",可以填1個漢字或2個英文字符(因為地方不夠)intro:{//標記介紹 name:"暴怒",//標記說明的名字,默認為技能名 content:"mark",//內容:你有(數)個標記},init:function(player){//初始化(好習慣),獲得這個技能時執行的內容 player.storage.baonu=2;//初始為2個暴怒標記 player.syncStorage("baonu");//同步標記(每當標記變動都要寫這句) //注:標記名必須和技能名相同},onremove:true,//失去這個技能時銷毀標記"其他的content樣式"content:"card",//一張牌content:"cards",//多張牌content:"limited",//限定技,覺醒技專用content:"time",//剩餘發動次數content:"turn",//剩餘回合數content:"cardCount",//牌數content:"info",//技能描述content:"character",//武將牌content:function(storage,player,skill){},//自定義"相關函數"player.markSkill(技能名);//顯示該技能的標記player.unmarkSkill(技能名);//不顯示該技能的標記player.syncStorage(技能名);//同步該技能標記player.updateMarks();//同步所有技能的標記player.hasMark(技能名);//是否有該技能的標記player.countMark(技能名);//有多少該技能的標記(若標記為數組,返回數組長度)player.addMark(技能名,數量,log);//添加標記(只適用於標記是數字);player.removeMark(技能名,數量,log);//移除標記(只適用於標記是數字); "//比較簡單的武將牌上牌技能"/*摘自原創武將,詹台洛的"排兵"出牌階段,你可將任意張手牌放武將牌上稱為"兵"*/mark:true,//獲得這個技能時markSkill,可以用unmarkSkill不顯示標記marktext:"兵",//標記名字為"兵",可以填1個漢字或2個英文字符(因為地方不夠)intro:{//標記介紹 content:"cards",//內容:武將牌上的牌},init:function(player){//初始化(好習慣),獲得這個技能時執行的內容 player.storage.paibing=[];//初始沒有牌},filter:function(event,player){//發動限制條件 return player.countCards("h");//你有手牌時才能發動},enable:"phaseUse",//出牌階段發動selectCard:[1,Infinity],//選擇一張以上filterCard:true,//任意position:"h",//手牌discard:false,//不棄置prepare:"throw",//準備內容:播放throw的動畫content:function(){//內容: "step 0"//第0步(必須從0開始) player.storage.paibing.addArray(cards);//將選的牌放武將牌上 player.syncStorage("paibing");//同步"排兵"標記(每當標記變動都要寫這句)}, "//比較簡單的標記技能"/*節選自原創武將,一方通行的"矢控"鎖定技:遊戲開始時你獲得2個"障",你受到傷害前移除1個"障"取消傷害。。。*/marktext:"障",//標記名字為"障",可以填1個漢字或2個英文字符(因為地方不夠)group:"shikong_dm",//擁有子技能"dm"intro:{//標記介紹 content:"你擁有#個障",//內容:你擁有(標記數量)個障},init:function(player){//初始化(好習慣),獲得這個技能時執行的內容 player.storage.shikong=2;//初始獲得2個"障" player.markSkill("shikong");//顯示標記 player.syncStorage("shikong");//同步標記(每當標記變動都要寫這句) game.log(player,"獲得了2個「障」");//遊戲記錄:玩家獲得了2個"障"},subSkill:{//子技能 dm:{//子技能名字為"dm" trigger:{//時機: player:"damageBefore",//你受到傷害前 }, forced:true,//鎖定技 filter:function(event,player){//發動限制條件 return player.storage.shikong>0;//你有"障" }, content:function(){//內容: "step 0"//第0步(必須從0開始) player.storage.shikong--;//"障"-1 player.syncStorage("shikong");//同步標記(每當標記變動都要寫這句) game.log(player,"移除了1個「障」");//遊戲記錄:玩家移除了1個"障" if(player.storage.shikong==0){//如果沒有"障" player.unmarkSkill("shikong");//不顯示標記 } }, },}, "//技能組與子技能"group:["quanji","zili"],//擁有技能"權計","自立"//注:發動技能時顯示該技能名(權計,自立)group:["longdan_sha","longdan_shan"],//擁有"龍膽"的2個子技能//發動技能時顯示"龍膽"/*特別注意:不能group一個未定義技能,或含有group的技能*/"假設技能名為jn"subSkill:{//子技能 sha:{//子技能名字為"sha" sub:true,//是子技能 }, "1":{//子技能名字為"1" sub:true,//是子技能 content:function(){//內容: player.draw();//你摸一張牌 }, },},enable:"phaseUse",//出牌階段發動content:function(){//內容: player.addTempSkill("jn_sha");//你獲得子技能"殺"直至該回合結束 player.useSkill("jn_1");//你發動子技能"1"},/*注:1.sub:true,如果不寫會自動補上2.自己group的子技能的mark:true,不會顯示標記,可以用markSkill顯示3.子技能和主技能共用技能名,但不共用技能描述4.多個子技能可以有不同配音5.如果主技能不是鎖定技,子技能會被界馬超封,即使子技能是鎖定技*/ "//常見trigger"//任何時機都能通過添加"Before","Begin","End","After"獲得不同時間點的新時機//任何事件函數都有時機(例如:draw,recover,chooseToDiscard,changeHp)//任何牌都有時機(例如:taoAfter,"juedouAfter","huogongAfter")//注1:init其實是global:"gameStart"和player:"enterGame",時機//注2:沒有changeHujia這個時機,但有changeHujiaBegin等時機(因為沒trigger)//注3:changeHp沒有changeHpBegin等時機(因為false了)global:"gameDrawAfter",//遊戲發牌後global:"roundStart",//一輪開始時player:"phaseBegin",//回合開始時(已被"phaseZhunbeiBegin"取代)player:"phaseEnd",//回合結束時(已被"phaseJieshuBegin"取代)player:"phaseJudgeEnd",//判定階段結束時player:"phaseDrawEnd",//摸牌階段結束時player:"phaseUseEnd",//出牌階段結束時player:"phaseDiscardEnd",//棄牌判定階段結束時player:"damageEnd",//受到傷害結束時source:"damageEnd",//造成傷害結束時player:"shaBegin",//你使用殺結算開始時target:"shaBegin",//你成為殺的目標結算開始時player:"dyingBegin",//你的瀕死階段開始時player:"dieBegin",//確定死亡開始時player:"useCardEnd",//使用牌結束時player:"useCardToEnd",//你使用牌對目標結算結束時player:"chooseToRespondBegin",//需要響應牌開始時player:"chooseToUseBegin",//需要使用牌開始時player:"chooseToCompareAfter",//拼點後player:"judge",//判定時player:"chooseCard",//選牌時player:"respond",//響應時player:"loseEnd",//失去牌結束時player:"gainEnd",//獲得牌結束時player:"linkAfter",//連環後player:"turnOverAfter",//翻面後 "//數組操作"//數組是用"[]"括起來的,元素用","隔開的一種數據類型。可以存放多個數據"var list=[];//定義變量list為空數組var list=[true,"yingzi"];//定義變量list為數組[true,"yingzi"]var list=[0,1,3,2];//定義變量list為數組[0,1,3,2]"判斷是不是數組"if(Array.isArray(list))game.log("變量list是數組");"數組的屬性"list.length //數組的長度,即元素個數list[0] //數組的第1個元素(數組的下標從0開始)list[1] //數組的第2個元素(下標為1)"數組的函數" //注:這裡的函數其實是方法,只是便於理解//var list=[0,1,3,2];"1.//javascript自帶的"數組1.concat(數組2);//將數組1和數組2合併成一個數組"例:"list.concat([0,1]);//返回[0,1,3,2,0,1]數組.includes(數值);//判斷數組中是否含有這個數值"例:"list.includes(1);//判斷list中是否有1這個元素,返回true數組.indexOf(數值,起始下標);//返回數組中這個數值最早出現的下標,沒找到返回-1"例:"list.indexOf(1);//返回list中最早出現1的下標,返回1"例:"list.indexOf(1,2);//從下標2開始,返回list中最早出現1的下標,返回-1數組.push(數值);//給數組末尾添加一個值為數值的元素"例:"list.push(3);//在list末尾添加一個元素3,返回[0,1,3,2,3]數組.slice(起始下標,結束下標);//截取數組中從起始下標到結束下標之間的內容"例:"list.slice(1,2);//截取list的下標1到下標2之間的內容,返回[1,3]"例:"list.slice(0);//截取list的所有內容,返回[0,1,3,2]"例:"list.slice(0,-2);//截取list的下標0到倒數下標2之間的內容,返回[0,1]數組.splice(下標,數量);//刪除數組從下標起的數量個元素"例:"list.splice(1,2);//刪除list的下標1起的2個元素,返回[0,2]數組.pop();//刪除數組的最後一個元素並返回"例:"list.pop();//list變成[0,1,3],返回2數組.shift();//刪除數組的第一個元素並返回"例:"list.shift();//list變成[1,3,2],返回0 "//函數介紹chooseCard()"player.chooseCard(數量,位置,提示,強制,限制,ai);"第一個參數為數量,默認為1"player.chooseCard(2);//選兩張手牌"第二個參數為位置,默認為手牌"player.chooseCard("e");//選一張裝備區的牌//注:判定區的牌點不到,請用choosePlayerCard()或chooseButton()"第三個參數為提示,默認為請選擇x張牌"player.chooseCard("請選擇一張手牌");//提示為:請選擇一張手牌"第四個參數為強制,默認為false"player.chooseCard(true);//必須選一張手牌"第五個參數為限制,默認為無"player.chooseCard({color:"red"});//選擇一張紅色手牌player.chooseCard(function(card){//注:新版本添加了參數player return card.name=="sha";//選擇手牌中的一張殺});"第六個參數為ai,默認為無,最好用set"player.chooseCard().set("ai",function(card){ return get.value(card);//選擇價值高的牌});"結果result"result.bool //是否選擇了牌。如果點了取消,就是falseresult.cards //選擇的牌,為數組"簡單的例子"content:function(){//內容: "step 0"//第0步(必須從0開始) player.chooseCard("he").set("ai",function(card){//選擇一張牌 if(card.name=="sha")return 1;//如果牌名字是殺,返回1(大於0代表選) else return 0;//否則返回0(即不選) }); "step 1"//第1步 if(result.bool){//如果上一步沒取消 if(result.cards[0].name=="sha"){//如果選的(第一張)牌名字是"殺" player.draw();//你摸一張牌 } }}, "//函數介紹damage()"player.damage(數量,屬性,來源,牌);"第一個參數為數量,默認為1"player.damage(1);//受到1點傷害"第二個參數為屬性,默認為無"player.damage("fire");//受到1點火焰傷害"第三個參數為來源,默認為當前事件的角色"target.damage(player);//target受到你造成的1點傷害"第四個參數為牌,默認為當前事件棄置的牌"player.damage({name:"sha"});//受到殺造成的1點傷害"/ 一些少見的參數 /"player.damage("nosource");//受到1點無來源傷害player.damage("nocard");//受到1點非牌造成的傷害player.damage("notrigger");//受到一點神聖傷害/*注:1.你的技能裡面,你為傷害來源2.主動技裡面,牌為主動技棄置的牌(例如:強襲、黷武棄置的牌,所以要加"nocard")*/"另外講一下damage事件"event.player //受到傷害的角色event.source //傷害來源event.num //傷害大小event.nature //傷害的屬性event.card //造成傷害的虛擬牌event.cards //造成傷害的實體牌//可以看到,函數和事件是一一對應的"時機"player:"damageBefore",//受到傷害前,免疫傷害的技能player:"damageBegin",//受到傷害時,舊時機就不多講了player:"damageZero",//受到0點傷害時,觸發這個就不觸發別的source:"damageBegin1",//造成傷害時1,可以改變傷害大小,例如裸衣source:"damageBegin2",//造成傷害時2,不能改變傷害大小,例如寒冰劍player:"damageBegin3",//受到傷害時1,可以改變大小,可以轉移(標天香)player:"damageBegin4"//受到傷害時2,不能改變大小,可以取消(界天香)player:"damage",//受到傷害,此時血量已經減少了source:"damageSource",//造成傷害後,此時目標的血量已經減少了player:"damageEnd",//受到傷害後,此時血量已經減少了,賣血技的時機 "//函數介紹draw()"player.draw(數量);"第一個參數為數量,默認為1"player.draw(2);//摸兩張牌"/ 一些少見的參數 /"player.draw(target);//target令你摸一張牌player.draw().log=false;//無記錄player.draw("bottom");//從牌堆底摸一張牌player.draw("nodelay");//沒有摸牌動畫player.draw("visible");//摸一張牌並展示"結果result"result //摸到的牌,為數組,result[0]是摸到的第一張牌"簡單的例子"content:function(){//內容: "step 0"//第0步(必須從0開始) player.draw("visible");//摸一張牌並展示 "step 1"//第1步 event.card=result[0];//用event.card記錄摸到的第一張牌 "step 2"//第2步 if(event.card.name=="sha"){//如果摸到的牌是"殺" player.recover();//你回復一點體力 }},"draw事件"event.player //摸牌的人event.num //摸牌數event.result //摸到的牌event.source //摸牌來源角色"另外講一下phaseDraw事件,注意和draw事件的區別"event.player //進行摸牌階段的人event.num //摸牌數event.cards //摸到的牌event.numFixed //放棄摸牌event.attachDraw //要額外摸到的牌//注:draw是gain的一種,gain獲得的牌是event.cards //本章講騷操作,有興趣的可以看看,基礎牢固了再用"01"player.chooseTarget().set("ai",function(target){ var player=get.player();});/*①事件函數的返回值通常是該事件,例如chooseTarget()返回的是chooseTarget事件。事件類型的數據可以用set()來創建屬性和對應的值。set()函數的返回值是修改過的該事件,所以可以繼續用set()函數來創建屬性和對應的值。例如:*/player.chooseTarget().set("prompt","選人").set("selectTarget",2);/*②var player=get.player();這句在前面出現過,現在可以講這句的作用了。get.player()的返回值是_status.event.player,_status.event是當前事件,這裡指的就是chooseTarget事件,_status.event.player指的就是要選目標的人,也就是你。所以,get.player()的作用是得到當前事件的人。如果是trigger.player.chooseTarget(),get.player()指的就是trigger.player。*/trigger.player.chooseTarget().set("ai",function(target){ var pl=_status.event.pl;}).set("pl",player);/*這樣給chooseTarget增加一個pl屬性,屬性的值是player。那麼裡面的_status.event.pl指的就是player了。*/"//本節總結""1.事件函數的返回值通常是該事件""2.事件類型的數據可以用set()來創建屬性和對應的值""3.set()函數的返回值是修改過的該事件""4.一個事件可以連續加多個set()""5.get.player()的作用是得到當前事件的人""6.通過set()函數增加的屬性和值,可以在ai的function裡面用" player[player.storage.x?"markSkill":"unmarkSkill"]("x");/*①*/player.draw();/*和*/player["draw"]();/*是同一個意思。下面的寫法較長,通常不用。一個點可以換成一對方括號加一對雙引號。*//*②問號的用法。問號語句相當於一個簡化的if語句*/player.hasSkill("yingzi")?player.draw():player.loseHp();/*和*/if(player.hasSkill("yingzi"))player.draw();else player.loseHp();/*是同一個意思。用上面的寫法可以節省很多代碼。賦值也用的上,例如:*/var pl=player.isDamaged()?player:target;//如果你已受傷,pl指的是你,否則pl指的是目標/*③最上面那句的意思是,如果player.storage.x為true,就markSkill("x")否則unmarkSkill("x")。這句是標記技能裡面比較常用的寫法。④*/var pl=target||player;/*和*/var pl=target?target:player;/*是同一個意思。上面這句通常用來設置一個變量的初始值*///注:不要和var pl=(target||player);弄混了,加了括號完全不一樣"//本節總結""1.有2種方式訪問一個對象的屬性""2.問號語句相當於一個簡化的if語句""3.問號語句可以用於賦值語句,節省代碼""4.變量初始化是好習慣,用||語句可以設置一個變量的初始值" 本章講ai。主動技,觸發技的ai是有很大區別的
"//觸發技ai 01""你的準備階段,你可以失去一點體力,然後摸兩張牌"trigger:{//時機: player:"phaseZhunbeiBegin",//你的準備階段},content:function(){//內容: "step 0"//第0步(必須從0開始) player.loseHp();//你失去一點體力 player.draw(2);//你摸兩張牌},"現在這個技能沒寫ai,但是這個技能ai會無腦用"/*原因:是否發動技能是一個chooseBool,不寫chooseBool的ai的話,電腦會無腦選是這個chooseBool的ai就是check*/check:function(event,player){//觸發技ai,括號里參數是event,plater if(player.hp>1)return true;//如果你體力大於1就發動 else return false;//否則不發動},"這樣ai會在2血及以上時發動,1血不發動"//frequent 自動發動(能自動發動,也就可以手動發動,肯定不是鎖定技)frequent:true,//設為自動發動frequent:"check",//當check滿足時自動發動,即ai會發動時你發動frequent:function(event,player){ return player.hp>2;//你體力大於2時自動發動},//effect 牌對你的影響(例如:你免疫傷害,傷害牌對你的影響就是0)ai:{ threaten:1.1,//嘲諷值為1.1,稍微注意點 effect:{//牌的影響 player:function(card,player,target){//你使用牌時對你的影響 if(card.name=="tao"){//如果使用的牌是桃 return 1.1;//影響比一般人大點 } }, target:function(card,player,target){//你成為牌的目標時對你的影響 if(get.tag(card,"damage")){//如果牌能造成傷害 return 1.1;//影響比一般人大點 } }, },}, "//觸發技ai 02""技能標籤"ai:{ respondSha:true,//這個技能在需要使用或打出殺時可以發動 respondShan:true,//這個技能在需要使用或打出閃時可以發動 save:true,//這個技能在需要救人時可以發動 maixie:true,//這是個賣血技能 nofire:true,//你不會受到火焰傷害 nothunder:true,//你不會受到雷電傷害 skillTagFilter:function(player,tag,arg){//技能標籤限制條件 if(tag=="save"&&player.hp<0)return false; //當你血量低於0時,save標籤失效 },},"//effect的返回值"//effect有3種可能的返回值,1個數字,長度為2的數組,長度為4的數組。//1個數字n:收益*n//長度為2的數組[a,b]:a*收益+b//長度為4的數組[a,b,c,d]:對目標為a*收益+b,對使用者為c*收益+d//*注意 zeroplayertarget 實際上是[0,0,0,0] zerotarget 實際上是[0,0]"下面以target:function(){},別人對你使用殺為例,括號里為可能的技能描述"return -1;//負影響(殺對你造成傷害時改為等量回復)return 0;//無影響(殺對你無效)return 2;//2倍影響(殺對你的傷害翻倍)return 0.5;//一半影響(殺對你的傷害減半)return [1,1];//正常影響+1(成為殺的目標摸一張牌)return [1,-1];//正常影響-1(成為殺的目標棄一張牌)return [0,1];//無影響+1(殺對你造成傷害時改為摸一張牌);return [0,-1];//無影響-1(殺對你造成傷害時改為棄一張牌)return [1,0,0,-1];//對你正常影響,對使用者無影響-1(剛烈)return [1,1,1,1];//對雙方正常影響+1(你成為殺的目標時你和使用者各摸一張牌) "//主動技ai 01""出牌階段限一次,你可以棄置一張手牌,失去一點體力,然後摸3張牌"enable:"phaseUse",//出牌階段發動usable:1,//限一次selectCard:1,//選擇一張filterCard:true,//任意position:"h",//手牌(棄置)content:function(){//內容: "step 0"//第0步(必須從0開始) player.loseHp();//你失去一點體力 player.draw(3);//你摸3張牌},"現在這個技能沒寫ai,這個技能ai不會用"ai:{ order:11,//主動技使用的先後,殺是3,酒是3.2。這個技能排在最前面 result:{//主動技的收益 player:1,//對你的收益為1,所以ai肯定會發動 },},"這樣ai就無腦發動了,這裡需要改一下"player:function(player,target){//注意,和effect里的參數不一樣 return player.hp-1.1;//血越多收益越高,1血不發動},"這樣ai會在2血及以上時發動,1血不發動"//check選牌ai(主動技選牌是一個chooseCard,check是這個chooseCard的ai)check:function(card){//主動技選牌ai,括號里參數是card return 4-get.value(card);//棄置價值小於4的牌},"這樣ai會棄置手牌里價值小於4的牌,如果沒有就不發動" "//主動技ai 02"ai:{ result:{//主動技的收益,返回值只能是1個數字 player:function(player,target){//發動這個技能對你的收益 }, target:function(player,target){//發動這個技能對目標的收益 }, },}, 註:只要潛心研究,人人都可能能成為大佬
鑽石舞台 發表在 痞客邦 留言 (0) 人氣( )