[wizs] return spell 原始碼

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間13年前 (2012/10/03 10:56), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
不只 wiz,玩家也可以參考。 // Norr 新增防止用歸還帶新手出村 in 2012/04/05 // Laechan@Sanc re-write 技能檔 in 2010/05/09 // 歸還魔法(return spell) // Laechan add in 2000.05.17 for 最終版牧師 // Norr 新增限制 in 2010.04.26 #define PARTY_D "/adm/daemons/party_d.c" #define RETURN_TIMES 10 #define NEXT_RETURN_TIMES 30 // 減半施展成功後的再使用時間 #define FAIL_RETURN_TIMES 5 #define CLERICAL_GUILD "/d/map/isalon/clerical-guild" inherit "/d/spell/spell_d.c"; int start_skill(object tar,int lv) { object ppl; string str,skname; int dt,tt; skname=skill_name("return spell"); ppl=this_player(); tt=time(); if(ppl->query_temp("time_record/returning")>tt) { write("你現在還不能再次使用歸還術、你必須等一下喔。\n"); return 0; } /* if((string)ppl->query("pri_guild")!="clerical") { write("只有正職的牧師,才有使用"+skname+"唷!\n"); return 0; } */ if(!ppl->query_temp("clerical heart")) { write("施展"+skname+"之前必須先 heart clerical 喔。\n"); return 0; } if(!ppl->query_temp("heal_time/pray")) { write("施展"+skname+"之前必須先 cast pray 喔。\n"); return 0; } // 狀況 1 : 單人無組隊及跟隨隊伍的情況,「單人歸還牧師公會」 // 成功率與房間設定幾級以上才可歸還有關 // 如房間 set("no_return",10), 則只有 11 以上(含)才能成功 // Lv max 歸還術完全可成功 if(!ppl->query_temp("leader")) { str=ppl->query("adv_guild"); switch(str) { case "maily": show(ppl,tar,"$N緩緩唸著:"HIW"藉助麥理之力,讓我的身體、我的心,"+ "幻化成風吧!"NOR); break; case "marfa": show(ppl,tar,HIW"$N"HIW"緩緩地祈禱著:大地之母瑪法呀,以您偉大的神力,"+ "將我帶至遠方吧!"NOR); break; case "faris": show(ppl,tar,"$N緩緩唸著:"HIW"至高神聖之神法理斯呀,回應我的祈禱,"+ "將我帶離此地吧!"NOR); break; default: show(ppl,tar,"$N緩緩唸著:"HIW"藉助偉大的神力,讓我的身體、我的心,"+ "幻化成風吧!"NOR); break; } show(ppl,tar,HIW"\n$N的身體泛起一陣白色的柔和光芒..."NOR"\n"); dt=RETURN_TIMES-((int)ppl->query("skill/clerical heart")/990); ppl->set_temp("cast_return_location",environment(ppl)); if(dt<1) call_out("start_return",1,ppl,lv,1); else { ppl->set_temp("time_record/returning",tt+dt); call_out("start_return",dt,ppl,lv,1); } return 1; } // 狀況 2 : 牧師自組隊、或跟隨組隊的情況 show(ppl,tar,"$N緩緩唸著:"HIW"神聖的光芒啊..回應我的祈禱,"+ "帶領吾人離開此地吧!\n\n"+ "一道柔和的白色光柱灑落此地,準備帶走$N們..."NOR"\n"); dt=RETURN_TIMES*2-((int)ppl->query("skill/clerical heart")/990)- ((int)ppl->query("skill/bless")/990); ppl->set_temp("cast_return_location",environment(ppl)); if(dt<5) dt=5; ppl->set_temp("time_record/returning",tt+dt); call_out("start_return",dt,ppl,lv,2); return 1; } int start_effect(object target,object ppl,int lv,int skill,int times) { return 1; } int start_return(object ppl,int lv,int check) { object env,leader,env2,ob; string msg; int cost,t,p,num; mixed party; if(!ppl) return 1; if(!interactive(ppl)) return 1; ppl->delete_temp("time_record/returning"); env=environment(ppl); if(!env || (env && (object)ppl->query_temp("cast_return_location")!=env)) { write(HIR"本次歸還失敗,因為天神在你當初施展歸還術的地方找不到你唷。\n"NOR); return 1; } if(living(env)) { write(HIR"在生物的體內是不能施展歸還術的喔.\n"); return 1; } if(lv<30 && lv<=(int)env->query("no_return")) { t=(int)env->query("no_return"); msg=HIB"這個地方有著"+chinese_number(t)+"重的魔法力場,"; switch(ppl->query("adv_guild")) { case "maily": show(ppl,ppl,msg+"麥理無法聽到$N的歸還祈求。"NOR"\n"); break; case "marfa": show(ppl,ppl,msg+"瑪法無法聽到$N的歸還祈求。"NOR"\n"); break; case "faris": show(ppl,ppl,msg+"法理斯無法聽到$N的歸還祈求。"NOR"\n"); break; default: show(ppl,ppl,msg+"神無法聽到$N的歸還祈求。"NOR"\n"); break; } return 1; } cost = 5000-(int)ppl->query("skill/return spell")+lv*1000; // 耗魔量 if(cost<3000) cost = 3000; // 單人歸還的情況 if(check==1) { tell_room(env,HIW+ppl->query("chi_name")+ HIW"的身體逐漸消失在光芒之中。"NOR"\n",({ppl})); ppl->move_player("/d/wiz/room/disc","SNEAK"); tell_object(ppl,HIW"你藉著歸還術的力量,來到了這個地方。\n"NOR); ppl->add_3p("sp",-cost,-cost); ppl->set_temp("time_record/returning",time()+NEXT_RETURN_TIMES); return 1; } // 多人歸還的情況 if(!leader=ppl->query_temp("leader")) { write("你的隊伍所屬的隊長不見蹤影,你無法在身處於隊伍的情況中使用歸還術。\n"+ "若你要單獨使用歸還術的話,請先退出隊伍(party leave).\n"); return 1; } // party 包含隊長自己 party=(mixed)find_object_or_load(PARTY_D)->query_members(leader); num=PARTY_D->party_number(ppl); if( num < 0 || !party) return notify_fail(HIR"你的隊伍裡面沒有半個人唷!\n"NOR); // 先檢查與該牧師同隊的玩家 foreach(ob in party) if(ob && environment(ob) && environment(ob)==env) p++; if(p==1) // 代表雖然牧師跟隊或自組隊, 但跟牧師同房間的隊員只有牧師自己 check=100; else { // 讀取 leader 的 leadership 影響 if(leader) p=(int)leader->query("skill/leadership")/50; if((string)ppl->query("adv_guild")=="marfa") check=60+(lv*(int)ppl->query("skill/bless"))/7500; else if((string)ppl->query("adv_guild")!="") check=40+(lv*(int)ppl->query("skill/bless"))/7500; else { // 沒有進階的情況 bless max 5000, 5000/300 < 18 // 這時最高成功率 9900/200 + 17.x < 70%, 再藉 leader 之力 // 最高 6x + 30 < 100%, 但一般主職牧師通常 clerical heart // 都不會滿, 所以成功率更低, 沒有 heart clerical 更低 if(ppl->query_temp("clerical heart")) check=lv+(int)ppl->query("skill/clerical heart")/200+ (int)ppl->query("skill/bless")/250; else check=lv+(int)ppl->query("skill/bless")/250; } check=check+p; } if(check<1+random(100)) { write("你本次的歸還失敗了!可能你沒有用力對神祈禱的緣故。\n"+ "你可以再試一次看看唷!\n"); ppl->add_3p("sp",-cost,-cost); ppl->set_temp("time_record/returning",time()+FAIL_RETURN_TIMES); return 1; } // 狀況 1. leader 在此地, 與 leader 一起歸還到 recall 處 if(leader && environment(leader)==env) { foreach(leader in party) { if(leader && environment(leader) && environment(leader)==env) if(!leader->query("record_data/newbie_check")) // 去除新手 { tell_object(leader,HIW"自地面出現了光之魔法陣,將你傳送至遠方。\n"NOR); leader->move_player("/d/wiz/room/disc","SNEAK"); tell_object(leader,"你藉著歸還術的力量,來到了這個地方。\n"); } } ppl->set_temp("time_record/returning",time()+NEXT_RETURN_TIMES); return 1; } // 狀況 2. leader 不在此地, 將房間所有的隊員歸還到隊長所在之處 if(!leader || (leader && !env2=environment(leader))) { write("神找不到你的隊伍所屬的隊長或是該隊長的所在地喔。\n"); return 1; } if(env2 && living(env2)) { write("你的隊長所在的地方是在生物的體內,無法用歸還術進到那裡喔!\n"); return 1; } if(lv<30 && lv<=(int)env2->query("no_return")) { check=(int)env2->query("no_return"); msg=leader->query("name"); msg=HIB+msg+" 所在的地方有著"+chinese_number(check)+"重的魔法力場,"; switch(ppl->query("adv_guild")) { case "maily": show(ppl,ppl,msg+"麥理無法聽到$N的歸還祈求。"NOR"\n"); break; case "marfa": show(ppl,ppl,msg+"瑪法無法聽到$N的歸還祈求。"NOR"\n"); break; case "faris": show(ppl,ppl,msg+"法理斯無法聽到$N的歸還祈求。"NOR"\n"); break; default: show(ppl,ppl,msg+"神無法聽到$N的歸還祈求。"NOR"\n"); break; } return 1; } msg=base_name(env2); foreach(leader in party) { if(leader && environment(leader) && environment(leader)==env) if(!leader->query("record_data/newbie_check")) // 去除新手 { tell_object(leader,HIW"自地面出現了光之魔法陣,將你傳送至遠方。\n"NOR); leader->move_player(msg,"SNEAK"); tell_object(leader,"你藉著歸還術的力量,來到了這個地方。\n"); } } ppl->set_temp("time_record/returning",time()+NEXT_RETURN_TIMES); return 1; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.61.157.53
文章代碼(AID): #1GQwbQMH (mud_sanc)
討論串 (同標題文章)
文章代碼(AID): #1GQwbQMH (mud_sanc)