推 hlead:恩...了解。...cheer.. 07/24 10:08
※ 引述《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