精華區beta mud_sanc 關於我們 聯絡資訊
※ 引述《amosdeus (幽素)》之銘言: : 【閒聊】小太保(laechan)道: : if(!ob=present(str,tar)) return 0; : if(ob!=this_object()) return 0; : 【閒聊】小太保(laechan)道: drink xxx 的部份你可以這樣判定 : 【閒聊】小太保(laechan)道: 假設你身上有安柏希雅跟 hp 藥水 : 【閒聊】小太保(laechan)道: drink hp 時, 因為你身上沒有叫 hp 的東西, 它就會喝 hp 藥水 : 【閒聊】小太保(laechan)道: 而你身上有 ambrosia 時, ob = 那瓶酒 當玩家身上有 xxx 這個東西,而它有自訂 action,例如 drink 時 ,因為 drink 同時也是共通指令,因此在判定上採取「若 drink 後 面所接的字串,不是指該物品、或不是該物品指定的用法時」,就讓 drink 執行原先的「drink 指令」(也就是 return 0)。 if(!ob=present(str,tar)) return 0; if(ob!=this_object()) return 0; 採用這種寫法的原因,是因為一個人身上可能同時帶了數瓶可 drink 的東西,例如你要 drink ambrosia 2 時,以原先的寫法就無法支援 這樣的喝法,而以上面的寫法就可以。 : 【閒聊】小太保(laechan)道: : tar->delete_temp("block_command"); : tar->delete_temp("ready_attack"); : 【閒聊】小太保(laechan)道: block_command 跟 ready_attack 不是放在 temp 區 : 【閒聊】小太保(laechan)道: 另外, 最好不要動 ready_attack. : 【閒聊】小太保(laechan)道: delete("block_command") 時要順便 delete("block_command_msg"); ready_attack 不要動的原因是,有時你把 ready_attack 刪掉時玩 家會瞬間再發動一次 en/普攻 攻擊,正常來說最好是... tar->set("ready_attack",240); 也就是讓玩家的 ready_attack 回復為正常,而不要刪掉。 : 【閒聊】小太保(laechan)道: : tar->temp_several_same_mod(({"stat/air","stat/dex","stat/fel","stat/mag"}),1+random(50),HIM"微醺"NOR,3); : // tar->temp_mod("stat/air",random(50),HIM"微醺"NOR,3); : // tar->temp_mod("stat/dex",random(50),HIM"微醺"NOR,3); : // tar->temp_mod("stat/fel",random(50),HIM"微醺"NOR,3); : // tar->temp_mod("stat/mag",random(50),HIM"微醺"NOR,3); : 【閒聊】小太保(laechan)道: 盡量不要在同一時間 temp_mod 太多次, 比較妥的做法 : 【閒聊】小太保(laechan)道: 是 temp_several_same_mod({"集中起來",....}), : 【閒聊】小太保(laechan)道: 後面的值讓它 random 一次就好 tar->temp_mod("要作用的參數",數值,"作用的名稱",時間); 例如 egingin, tar->temp_mod("stat/str",99,"egingin",1); 若希望 egingin 同時讓 str dex air con 都 99, 用底下寫法 tar->temp_several_same_mod(({"stat/str","stat/dex","stat/air","stat/con"}), 99,"egingin",1); : 【閒聊】小太保(laechan)道: forest.c 是 mob : 【閒聊】你道:【愛情】 嗯 這個是抄 i 的寫法 【唯物】 : > 【閒聊】小太保(laechan)道: mob 要放在 mob 目錄..以後再改就好 我發現有些繼承 MONSTER 的物件放在 /obj 目錄下,以後最好 盡量避免,因為要 qc 不方便,例如我 qc 到最後幾件了,發現 其中一個有問題時,而前面幾個繼承 MONSTER 的物件也有相同的 問題時,因為你們物件的檔名取得很長,判讀不易,我就得重頭 再找出哪些檔案是繼承 MONSTER 的。 : 【閒聊】小太保(laechan)道: : tar->set("block_command",10); : tar->add("block_command_msg",HIP"你昏沉沉的睜不開眼睛,又睡著嚕 zzzzzzzzz\n\n"NOR); : 【閒聊】小太保(laechan)道: 秒數要用 add or set : 【閒聊】小太保(laechan)道: 訊息要用 set : > 【閒聊】小太保(laechan)道: 因為秒數是整數, 可以 set 也可以 add : 【閒聊】小太保(laechan)道: 字串不能用 add 的 tar->set("block_command",10); tar->set("block_command_msg","你現在動彈不得...\n"); 這是一組的. 同樣的 tar->delete("block_command"); tar->delete("block_command_msg"); 這也是一組的。 : 【閒聊】小太保(laechan)道: 你一些怪物的寫法要改 : 【閒聊】小太保(laechan)道: : 設定怪物的順序是 : set("level",xxx); : set("race","xxx"); : ::create(); // <= 一定要放在 level 跟 race 下面 : 【閒聊】小太保(laechan)道: ::create 就是去讀取 MONSTER 裡面所寫的 create : 【閒聊】小太保(laechan)道: 那個函數是用來初始化怪物的資料的, 過程中 : 【閒聊】小太保(laechan)道: 它會用到怪物的 level 跟 race 上面要注意。(qc 時基本上沒有錯誤) : 【閒聊】小太保(laechan)道: /obj 就剛剛說的那些 : 【閒聊】小太保(laechan)道: : write(ORIGIN_EQ_NAME+HIW"帶給你異樣的輕快飄逸,整個世界似乎都變得緩慢了些!\n"NOR); : tell_room(environment(ppl),ppl->query("chi_name")+HIW"身影迷離有如殘影片段一格一格的跳躍者,飄邈不定更是詭奇萬分!\n"NOR); : 【閒聊】小太保(laechan)道: 你這樣寫時, 裝備者會看到 write 與 tell_room 的訊息 : > 【閒聊】小太保(laechan)道: : tell_room(environment(ppl),ppl->query("chi_name")+HIW"身影迷離有如殘影片段一格一格的跳躍者,飄邈不定更是詭奇萬分!\n"NOR,ppl); : 【閒聊】小太保(laechan)道: 在最後加上 , ppl : > 【閒聊】小太保(laechan)道: ppl 就不會看到 tell_room 的訊息, 只會看到 write 的 : 【閒聊】小太保(laechan)道: 它相當於 : i閒聊】小太保(laechan)道: say(,ppl->query("chi_name")+HIW"身影迷離有如殘影片段一格一格的跳躍者,飄邈不定更是詭奇萬分!\n"NOR); : 【閒聊】小太保(laechan)道: 也就是說自己是用 write, 給同房間的其它人用 say : 【閒聊】小太保(laechan)道: : write(ORIGIN_EQ_NAME+HIW"帶給你異樣的輕快飄逸,整個世界似乎都變得緩慢了些!\n"NOR); : say(ppl->query("chi_name")+HIW"身影迷離有如殘影片段一格一格的跳躍者,飄邈不定更是詭奇萬分!\n"NOR); : 大致就是降寫就行了. 上面的意思就是... // 給自己看的 write("你觸摸了雕像.\n"); // 給房間的其它人看的 say("你看到"+this_player()->query("chi_name")+"伸手觸摸了雕像.\n"); // 房間的所有人都看得到 tell_room(environment(this_player()),"突然雕像發出了耀眼的光芒!\n"); : 【閒聊】小太保(laechan)道: : if((string)ppl->query("pri_guild")!="clerical") : if (query("effect")) : delete("effect"); : 【閒聊】小太保(laechan)道: 這三個視為一段喔 上面其實是.. if((string)ppl->query("pri_guild")!="clerical") { if(query("effect")) { delete("effect"); } } 省略之下就變成 if((string)ppl->query("pri_guild")!="clerical") if(query("effect")) delete("effect"); 跟某些情況下的 foreach 一樣 foreach(ob in usr) write(ob->query("short")); 意思是,當只有一個執行緒時(以 ; 分隔),就可省略 { } : 【閒聊】小太保(laechan)道: /eq 就剛剛說的那些 : 【閒聊】小太保(laechan)道: wp/劍有限制裝備條件, or 取得條件, or 認主? : 【閒聊】你道:【愛情】 wp的寫來給mob使用 【唯物】 : 【閒聊】小太保(laechan)道: 那最好加上裝備者限定為 mob : 【閒聊】小太保(laechan)道: 我加上去了 : 【閒聊】小太保(laechan)道: : int wear_func(string str) : { : if(userp(this_player())) : { : write("你不能裝備它喔.\n"); : return 0; : } 限定怪物裝備時,最好要加上限定用的判斷。不過,未來也可在 wear 指令中新增 only_for_mob 的判斷。 : dest tide : Destructing: 怪物(tide /u/p/plain/wide/virtue/mob/tide) : > 【閒聊】小太保(laechan)道: 這樣就行了 : chat* nod : 【閒聊】幽素(Plain:劍尊)同意地點點頭。 : > 【閒聊】小太保(laechan)道: wp/ 就剛剛說的那些. : 以上 今晚qc的部份 : 謝謝 : Plain@Sanc 預定今天 qc mob 與 npc 目錄,請先暫時不要動到這兩個目錄。 另外,有幾件事要注意.. 一、當實體物品並有自訂動作,如一些可 drink 類的或可 eat 類的   ,要注意「可 clone 出的數量」以及「最好設定 no_save」,以   及價格不要設定的太貴。   當然,最好是不要有這類的實體物品存在。 二、某些情況下 move_to 不能用,我舉例,例如 ambrosia 有自訂 drink 指令,當 ambrosia->move_to(this_player()) 時,該玩   家會無法使用 drink 指令(因為 move_to = 無條件移過去, 過   程中它不會做其它判定)。 三、錯別字。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.231.122.65
hlead:恩...了解。...cheer.. 07/24 10:08