[wizs] 函數 show
貼出來,大家來看看問題在哪。
底下是個人猜測:因為增加了幻影術的判斷造成需 substr 的東西過多
void show(object me,object tar,string msg,int dam)
{
string wp_name,tmp,tname,mname,con,s1,s2;
mixed obs;
int i,dam2,u,t,j;
u=userp(me); //->query("user");
t=userp(tar); //->query("user");
// 玩家對玩家PK時減傷
if(u && t)
dam=dam/15;
// msg 裡面有 $W 時以呼叫者手拿的武器名稱替代
if(strsrch(msg,"$W")>0)
{
object wp;
wp = (object)me->query("weapon1");
if(wp)
{
wp_name=wp->query("name");
msg=substr(msg,"$W",wp_name+NOR);
}
else
msg=substr(msg,"$W", "拳腳");
}
// 取得自己及對方的 chi_name
tname=tar->query("chi_name");
mname=me->query("chi_name");
// 這裡可以做節省運算
msg+="\n";
// $N替代為 mname
// 這裡應該就可以再做 $O 替代為 tname
tmp=substr(msg,"$N",mname);
// 這個判斷有過早的嫌疑
// 寫在這裡代表任何狀況的呼叫show(包含非戰鬥中)都替換
if(me->query_temp("illusion spell")>0)
{
// 增加一行幻影術的訊息
wp_name=substr(msg,"$N",mname+"的幻影");
tmp+=wp_name;
}
// 將 tmp 的 $O(包含有幻影術那行) 替換為 tname 並存為 s2
s2=substr(tmp,"$O",tname);
// 若 !dam = 一般呼叫 show 的狀態(最後面沒有傷害顯示值)
// 但這個判斷可能是錯的
// 正確的判斷應該是 "不需要這個 if", 直接做下面
if(!dam)
{
obs=all_inventory(environment(me));
// 底下的訊息不顯示給 me 跟 tar 看
obs-=({me,tar});
j=sizeof(obs);
for(i=0;i<j;i++)
{
if(!obs[i]->query("user")) continue;
if(obs[i]->query("record_data/no_environment_msg")) continue;
// 把含有 $N 跟 $O 名字的訊息顯示給 me 跟 tar 以外的人看
tell_object(obs[i],s2);
}
// 這裡應該就直接做 tell_object(me 跟 tar 然後就 return ;
}
// 底下又做了一次上面的東西,我猜是重覆了
// 我會再多看幾次,若確定是重覆就會更正
if(me->query_temp("illusion spell")>0)
{
wp_name=substr(wp_name,"$N","$N的幻影");
tmp=msg+wp_name;
}
else
tmp=msg;
// 底下的訊息部份
// s1 : 顯示給自己看(所以$N替換為"你", $O替換為 tname)
// s2 : 顯示給敵人看(所以$O替換為"你", $N替換為 mname)
s1=substr(tmp,"$N",me->query("sex_name"));
s1=substr(s1,"$O",tname);
s2=substr(tmp,"$O",tar->query("sex_name"));
s2=substr(s2,"$N",mname);
// 這裡可能有問題
if(dam<1)
{
if(u)
tell_object(me,s1);
if(t && tar!=me)
tell_object(tar,s2);
return ;
}
// 執行到這裡確定 tar 有受到 dam 傷害
// 所以底下是對的
tar->receive_damage(dam);
// for 幻影術的傷害部份實裝底下程式段 by Laechan@Sanc 2010/03/22
// 這裡基本上是對的, 更嚴格一點可以 if(me && tar && 幻影術)
if(me->query_temp("illusion spell")>0 && tar)
{
// 這裡公式的修改可借用 deus 寫在某物件的變通公式來做
tar->receive_damage(dam);
dam=dam*2; // dam+dam2;
}
// 我猜這裡還有 bug, 古老的某一個 bug
if(tar)
{
con=Condit(tar,dam);
if(t && tar!=me)
tell_object(tar,s2+"「"HIR+mname+con+NOR"」\n");
if(u)
tell_object(me,s1+"「"HIM+tname+HIM+con+NOR"」\n"); //C no colo
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.253.173.213
→
05/01 23:18, , 1F
05/01 23:18, 1F
→
05/01 23:18, , 2F
05/01 23:18, 2F
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
5
12