[wizs] 一些設計

看板mud_sanc (Sanctuary - 聖殿)作者 (揮淚斬馬雲)時間8月前 (2023/08/08 22:10), 8月前編輯推噓1(1014)
留言15則, 2人參與, 8月前最新討論串1/1
某房間有某物時,從它鄰近的房間都無法進入該房間 最簡單是改 go,但移動不只有 go,而且移動手段多種,所以 最好的方法是該物本身有 init 函數,當被觸發時 void init() { object ppl=this_player(),env; if(!userp(ppl)) return ; // 讀取玩家上一個地點 if(!env=ppl->query("last_location")) return ; // 把玩家踢走 if(env=environment(this_object())) { ppl->move_player(env->query("exits/out"),"SNEAK"); return ; } // 把玩家移回前一個地方 ppl->move_to(env); return ; } 這個可以用在攻城戰的階段設計,當敵方還存在著某些單位時, 玩家無法突破,必須先掃除該階段的敵人,然後這些單位會遠隔 攻擊玩家,也就是玩家一邊要清除現階段的敵人,一邊要承受敵 人的遠隔砲火,直到敵人清除完畢,那麼這些單位才會轉化成實 際的可攻擊單位,玩家才能進入去清除這些敵方單位。 如何讓任務具有隨機性 quest read 後會產生 .c 檔,為該檔做前置程式段塞入主要是 靠腳本檔的 other= 去添加,解析 .c 檔的結構: inherit "/open/cmds/quest/quest_d.c"; void set_quest_data() { quest_data["1"]["msg"]=" $M:你好哇~趕快先去加入(join)東邊盡頭的冒險者公會   加入後就能回來找我領賞喔 ^_^"; . . 理論上,玩家 quest ooo about xxx 時,stepX_end 會被呼叫 ,就可以在這裡動手腳: int stepX_end() { string msg=quest_data["X"]["msg"]; mixed foods=({"蘋果派","蘋果蛋糕","蘋果司康"}); int r=random(3); msg=substr(msg,"$FOOD",foods[r]); me->set("record_data/quest_l013_food",foods[r]); return 1; } 不過,到底是 msg 先被丟過去處理,還是 end 先被呼叫,就 要實際印證才知道,若是 msg 先被處理,那就要調換 end 到 更優先的呼叫位置。 如何讓副本串副本 /u/l/laechan/skycastle/room/street/game2.c 進入副本的方法 questing("instance","create","laechan/0071", ({"/u/l/laechan/workroom",({me}),"normal",0})); 在 0071.c 裡頭有循環判斷函數 instance_check if((int)ob->query_temp("time_record/shadow_1_dragon_times")>=3) { tell_object(ob,"你已經殺掉了三位龍忍者,自動進入下一關!\n"); ob->delete_temp("time_record/shadow_1_dragon_times"); } 只要在上述判斷區加上一行(目前還沒加): questing("instance","create","laechan/0072", ({"/u/l/laechan/workroom",({me}),"normal",0})); 這樣玩家就會從 0071 副本跳進 0072 副本。 龍忍者發出一聲慘叫!! 龍忍者慢慢的倒在地上死了...你得到 11488點的經驗值。 你拿起[副本怪] 龍忍者(Dragon Ninja)身上所有的東西。 75% 103% 100% > 你已經殺掉了三位龍忍者,自動進入下一關! 目前有規劃幾個副本會做這樣的設計,初期會用來模擬一些任○堂 的遊戲。 如何避免怪物遭受無心跳攻擊 最簡單的方法是怪物自定義 set_heart_beat 函數: int set_heart_beat(int i) { // 不管 i 是什麼,都當成 1 ::set_heart_beat(1); return 1; } 目前會讓怪物無心跳的技能為束縛術 /d/spell/confine.c,實際 上若讓 set("no_confine",1); 有作用也是可以的。 如何防止怪物被破甲攻擊置換 有一種做法是讓房間做循環判斷,假設循環判斷的函數是 heart_beat: int heart_beat() { mixed obs; object ob,origin_mob; if(!obs=all_inventory(this_object())) return 1; foreach(ob in obs) { if(!ob) continue; // 有發現到被破甲的怪時 if(base_name(ob)==FINGERWIND_MOB_FILE) { if(origin_mob=ob->query("origin_mob")) { // 就自動交換回來 origin_mob->move(this_object()); ob->remove(); continue; } } } return 1; } 上面讀取 origin_mob 的設定也可以換成 clone 別的怪物。 另一種做法則是,因為只有 fingerwind 會破甲,只要簡單限制 玩家無法在該房間施展任何 fist 即可。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.126.145.135 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/mud_sanc/M.1691503802.A.8F6.html

08/09 11:04, 8月前 , 1F
end先處理..任務j040有用過
08/09 11:04, 1F

08/09 11:04, 8月前 , 2F
step1_msg=它出現在"+CONTROL->get_name()+"上
08/09 11:04, 2F

08/09 11:05, 8月前 , 3F
step1_end=set_quest_data()
08/09 11:05, 3F

08/09 11:06, 8月前 , 4F
讚 >_<b
08/09 11:06, 4F
※ 編輯: laechan (59.126.145.135 臺灣), 08/09/2023 11:27:43

08/11 08:43, 8月前 , 5F
剛剛搜到/adm//vip/access裡的/d/spell權限是[r]
08/11 08:43, 5F

08/11 08:44, 8月前 , 6F
所以不能改,雖然還沒查到norr是如何開放給我改他的
08/11 08:44, 6F

08/11 08:44, 8月前 , 7F
目錄的
08/11 08:44, 7F

08/11 09:25, 8月前 , 8F
那個在 /d/ppl/adm 下改的, /d/spell 下的東西我還
08/11 09:25, 8F

08/11 09:26, 8月前 , 9F
在動,權限已開,但建議你先cp比方fire2.c,改一改沒問
08/11 09:26, 9F

08/11 09:27, 8月前 , 10F
題,再確認一下我有沒有在改,然後再cp回fire.c
08/11 09:27, 10F

08/11 09:28, 8月前 , 11F
原先的fire.c 則備份一下
08/11 09:28, 11F

08/11 09:32, 8月前 , 12F
技能有改動啥盡量發文說明一下
08/11 09:32, 12F

08/11 11:14, 8月前 , 13F
了解
08/11 11:14, 13F

08/11 15:28, 8月前 , 14F
我最近動的範圍會先侷限在種族進化的相關技能及新技
08/11 15:28, 14F

08/11 15:29, 8月前 , 15F
能的檔案,最近會新增的是/d/spell/meteor.c
08/11 15:29, 15F
文章代碼(AID): #1aqaowZs (mud_sanc)
文章代碼(AID): #1aqaowZs (mud_sanc)