[摳頂] spell_practice1.c

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間15年前 (2010/06/09 15:28), 編輯推噓8(806)
留言14則, 3人參與, 最新討論串1/1
// spell_practice1.c // Laechan@Sanc add in 2009/10/24 // 基本原則是以練習室的心跳函數來控制所有在這個房間的人 // 它們的練習, 這樣可一次處理多人的練習 inherit ROOM; mapping practice=([]); // practice = ([ // "gravity":數值, // 重力數值 // // "on_2" :代表啟動上面 // // 以上為練習飄浮術之用(它會抓身上有無飄浮術) // // "lv" : 數值, // 攻擊級數 // "hit" : 數值, // 攻擊連擊數 // "time" : 數值, // 幾秒後啟動攻擊 // // "on_1" : 代表啟動上面 // // 以上為練習護盾法術之用(它會抓身上的護盾) // // "on_3" : 代表啟動的防壁護罩 // // 以上為自行練習攻擊法術之用 // // ]), void create() { ::create(); seteuid(getuid(this_object())); set("light",1); set("short","法術練習室"); set("long",@LONG      四周是一望無際的巨大空間。在這裡你可以使用      兩個指令:tune 及 spells。 LONG ); // 禁止不正常脫離 set("no_recall",1); set("no_return",30); set("exits/out",__DIR__+"spell_practice"); set("pre_exit_func/out","hi"); set_heart_beat(1); } int hi() { // 特殊情況下無法 out // 也可能以出口開啟狀態無法啟動任何東西為設定 return 1; } // spell_practice = 練習室申請處 int env_remove(mixed obs) { if(obs) obs->move(__DIR__+"spell_practice"); this_object()->remove(); return 1; } int heart_beat(int i) { string names=(string)query("names"); // 練習室的'登記'者 object ppl,env=this_object(); mixed obs; // 房間的所有物件 // 房間沒有這個人時就把練習室幹掉 if(!ppl=present(names,env)) return env_remove(obs); obs=all_inventory(env); if(!userp(ppl)) return env_remove(obs); // 將 ppl 跟 obs 分開 // obs 會受到的影響是房間的重力等因素 obs-=({ppl}); // ppl 的部份 // obs 的部份 foreach(ppl in obs) if(ppl && userp(ppl)) gravity_effect(ppl); // 重力影響; return 1; } void init() { object ppl=this_player(); if((string)query("names") == (string)ppl->query("name") || wizardp(ppl)) { if((int)practice["gravity"]<1) practice["gravity"]=1; add_action("tune_xxx","tune"); add_action("on_xxx","on"); add_action("off_xxx","off"); add_action("spells_xxx","spells"); } } int tune_xxx(string str) { string a,b; int a1,a2,n; if(!str || str=="") return notify_fail(@LONG tune 指令說明: ================================================================= tune 1-1 to [n] 將魔法攻擊等級設定為 n, 最小 1 最大 5 tune 1-2 to [n] 將魔法連擊次數設定為 n, 最小 10 最大 99 tune 1-3 to [n] 設定魔法攻擊的時間在 on 1 之後 n 秒 n 最小 5,最大 20。 tune 2 to n 設定練習室的重力倍數為 n 倍, 最小 1 最大 99 on [n] 啟動第 n 項設定 off [n] 關閉第 n 項設定 restart [n] 重覆第 n 項設定 (註:restart 2 無意義) ================================================================= Laechan@Sanc in 2009/10/24 LONG ); if((int)practice["cant_tune"]>0) return notify_fail("tune: 練習室正在執行程式,你現在不能 tune 喔。\n"); if(sscanf(str,"%s to %s",a,b)!=2) return notify_fail("tune: 你的指令語法不對喔.\n"); if(atoi(a)==2) a1=2; else if(sscanf(a,"%d-%d",a1,a2)==2); else return notify_fail("tune: 你的指令語法不對喔.\n"); if(a1<1 || a1>2) return notify_fail("tune: 你的指令語法不對喔.\n"); n=atoi(b); if(n<1 || n>99) return notify_fail("tune: 你不能給 "+b+" 這樣的值喔.\n"); switch(a1) { case 1: switch(a2) { case 1: if(n<1 || n>5) return notify_fail("tune: 魔法攻擊等級只能設定在 1~5 之間喔.\n"); practice["lv"]=n; return notify_fail("tune: 你將魔法攻擊的等級設定為 ["+n+"] 級了。\n"); break; case 2: if(n<10 || n>99) return notify_fail("tune: 魔法連擊次數只能設定在 10~99 之間喔.\n"); practice["hit"]=n; return notify_fail("tune: 你將魔法連擊的次數設定為 ["+n+"] 連擊了。\n"); break; case 3: if(n<5 || n>20) return notify_fail("tune: 魔法連擊時間只能設定在 5~20 秒後喔.\n"); practice["time"]=n; return notify_fail("tune: 你將魔法攻擊的時間設定在 ["+n+"] 秒後了。\n"); break; default: return notify_fail("tune: 沒有 "+a1+"-"+a2+" 這個設定項喔。\n"); break; } break; case 2: a2=(int)practice["gravity"]; if(n==a2) return notify_fail("tune: 練習室現在的重力倍數已經是 "+n+" 了喔.\n"); practice["gravity"]=n; return notify_fail("tune: 你將練習室的重力倍數調整為 "+n+" 了。\n"); break; default: return notify_fail("tune: 沒有第 "+a1+" 設定項喔。\n"); break; } } int on_xxx(string str) { int n; object ppl=this_player(); if((string)query("names")!=(string)ppl->query("name")) return 0; if(!str || str=="") return notify_fail("語法:on [n],如 on 1、on 2 等。\n"); n=atoi(str); if(n<1 || n>2) return notify_fail("目前你只能下 on 1 跟 on 2 喔。\n"); if(practice["on_"+n]) return notify_fail("on: 第 "+n+" 項已經啟動了喔。\n"+ " 關閉的指令是 off,重啟動的指令是 restart。\n"); if(n==1) { if(!practice["lv"]) return notify_fail("在 on 1 之前你要先 tune 1-1 to [級數] 喔.\n"); if(!practice["hit"]) return notify_fail("在 on 1 之前你要先 tune 1-2 to [連擊數] 喔.\n"); if(!practice["time"]) return notify_fail("在 on 1 之前你要先 tune 1-3 to [時間] 喔.\n"); practice["on_"+n]=1; n=practice["time"]; practice["when_start"]=n+time(); set_heart_beat(1); return notify_fail("on: 你啟動了[能量盾]的練習設定.\n"+ "┌──────────────┐\n"+ sprintf("│魔法攻擊級數  :%d │\n", practice["lv"])+ sprintf("│魔法攻擊連擊數 :%2d │\n", practice["hit"])+ sprintf("│魔法攻擊執行時間:%2d 秒後 │\n", practice["time"])+ "└──────────────┘\n"+ (ppl->query_temp("shield2") ? "你已做好衝擊準備。\n" : HIR"你尚未施展護盾,請盡快施展!"NOR"\n"); } int spells_xxx(string str) { if(!str || str=="") return notify_fail(@LONG spells(法術練習室專用指令)說明: ================================================== spells [數量] [法術名稱] 1.數量的多寡與 mag 屬性有關 2.剩餘的 sp 值也會影響可擊發的數量 3.不需加級數(會自動施展最大級數) 4.部份技能作用在自己身上的效果,可提高擊發數量 // 底下是相關的設定備忘錄 比方你按 2,它會顯示它已經在天空張設了結界,請你對天空發 出「任意數量的攻擊法術」,指令以底下為例... spells 99 fire 就是對天空發出 99 發的火系法術,它會根據你的「能力」來決 定你發完後「是否沒力了」,只要處於沒力狀態,就必須等回復 了才能再練習。 所以選擇的訣竅,就是摸索出依自己目前的「能力」能擊出的最 多數量,使自己不會沒力、「休息一會兒」即可再練習。 1. 數量越大,熟練度平方影響 2. 數量超越極限的話只能發出最大的 n 發, 然後需休息的時 間較久 (不管 sp 有沒有回滿) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 編輯: laechan 來自: 61.225.162.212 (06/09 15:47)

06/09 17:15, , 1F
.....要不要多設一個no_quit......avert
06/09 17:15, 1F
無論任何地方都可 quit,這是目前會確保的。

06/09 17:55, , 2F
....return可以將團員從裡面call出來..進去時強制
06/09 17:55, 2F

06/09 17:55, , 3F
p leave....
06/09 17:55, 3F

06/09 17:57, , 4F
還是說這是單人的...那就沒此問題..beat_heart有判斷
06/09 17:57, 4F

06/09 18:14, , 5F
漂浮術---->重力試鍊,解毒術-->各種狀態毒素試鍊
06/09 18:14, 5F

06/09 18:16, , 6F
遠見法術--->比較像巫師之眼(定期觀察)......
06/09 18:16, 6F

06/09 18:18, , 7F
這個是要控制及持續....那維持魔力輸出的試鍊了..
06/09 18:18, 7F
限制 return 不能進去,是因為那是一個特別的空間, 因此也無法 recall。 在規劃上允許申請人可讓玩家進入該空間看該玩家練習 ,並且還能幫申請人 cast。(採允許制) 而且你要在裡面組隊、聊天、或幹嘛也隨你。 因為我有看到有人在牧師練習室 pr 時「不安於室」, 我不太想做機車的限制,但限制是一定要的,所以這個 練習室會跟牧師的不同,只要法師一離開,練習室就會 重置,而且短時間內該玩家無法再申請練習室。 (未來也傾向讓申請練習室需要付出代價,錢是一種) 目前輔助技能的部份也只規劃漂浮術跟護盾。我有考慮 讓主法副牧也能在裡面練聖光盾。 ※ 編輯: laechan 來自: 122.117.3.82 (06/09 19:43)

06/09 20:10, , 8F
牧師不安於室是因為學點不足..而且pr到滿要很久,所以
06/09 20:10, 8F

06/09 20:11, , 9F
寫成跑機狀態....
06/09 20:11, 9F

06/09 20:14, , 10F
...也就是主人一定要在..其它人可以走進走出.....
06/09 20:14, 10F

06/09 20:19, , 11F
那個我不會做什麼限制,不要太離譜我都當沒看到
06/09 20:19, 11F

06/09 20:29, , 12F
...pr聖光盾..2種盾的性質太過接近了.....
06/09 20:29, 12F

06/09 20:58, , 13F
牧師bless到後面間隔150以上,沒辦法像法師一樣在裡
06/09 20:58, 13F

06/09 20:59, , 14F
面發呆....
06/09 20:59, 14F
※ 編輯: laechan 來自: 122.117.3.82 (06/14 20:16) ※ 編輯: laechan 來自: 61.225.162.241 (06/17 10:36) ※ 編輯: laechan 來自: 61.225.162.241 (06/17 14:20) ※ 編輯: laechan 來自: 61.225.160.229 (06/18 09:24)
文章代碼(AID): #1C3qA0-u (mud_sanc)
文章代碼(AID): #1C3qA0-u (mud_sanc)