[wizs] 如何以新型態區域的開發方式製作城鎮

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間10年前 (2015/10/21 14:49), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
這篇也是備忘。 l mirror 到 rocky,該區域所在目錄 /u/p/ppl/hiei/rocky/ 其中 /u/p/ppl/hiei/rocky/002.c 是武器店,與其它房間的差 別在於該房間保留了底下幾行 // inherit 替換成別的時就回復底下 void init() { ::init(); if(!query("long")) find_object_or_load(__DIR__+"area_room")->init(this_object()); } 而其它房間的這幾行則以 /* */ abort 掉,與 script_area 檔 的內容一樣。 這意思就是說,一開始 002.c 的這幾行就是 /* */ 的,之後要 將這格設為武器店時才把 /* */ 拿掉。 那麼,把 void init() 函數寫成這樣的用意是什麼呢? 1.讓該房間可照舊跑它原先的 init (例如繼承武器店的房間, ::init() 就可以使用 list, sell, buy 等指令) 2.讓該房間的房間敘述及其它設定,可 follow area_room.c 的 設定 (也就是一般新型態區域的設定) 另外,因為是武器店,所以 inherit 的地方也要改為 WP_SHOP; 這樣,就可以讓該房間變成武器店。至於該武器店預設要賣哪些 武器,個人是認為這樣的設定應該放在 area_room.c 裡面,這樣 才會方便統一管理。 (日後不需要再去動武器店、防具店、..,只要動 area_room.c) 這意思就是說,公會也是一樣 1.把 /* */ 拿掉 2.把 inherit 改成 GUILD; 3.進行其它必要的設定(建議在 area_room.c 做) set("guild","knight"); set("chi_name","騎士公會"); set("un_pri_guild_max_lv",25); set("pri_guild_skill","encasement"); 這樣就能把 /u/p/ppl/hiei/rocky/007.c 變成騎士公會。 那麼,area_room.c 需注意什麼事項呢? 1.先令 n = atoi(ob->query("room_file")); 這樣就能讀出房間編號 2.有了房間編號就能做 switch(n) 或是 if(n==xxx) 這樣的獨 立判斷及設定。 3.村子除了 set_npcs 之外,還可以設定一些村民,而且可透過 新型態區域的特性,讓村民每次出生的位置都不一樣。 其它就都跟一般的新型態區域設定方式一樣了。 最近將以這樣的做法弄出泰帕依城。 LAechan -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.61.157.53 ※ 文章網址: https://www.ptt.cc/bbs/mud_sanc/M.1445410160.A.4CD.html
文章代碼(AID): #1M9pLmJD (mud_sanc)
文章代碼(AID): #1M9pLmJD (mud_sanc)