下面是引用 StaR乂Night 於 2013-03-30 10:48 發表的 :
簡單的 大致意思就可以了
以下這兩個的判斷條件和效果是一樣的
複製程式
public I_am_forward(id)
{
if (is_user_alive(id))
{
client_print(id, print_chat, "a7811311622")
}
}
public I_am_forward_too(id)
{
if (!is_user_alive(id))
retuen FMRES_IGNORED
client_print(id, print_chat, "a7811311622")
retuen FMRES_IGNORED // 如果這個forward裡面有回傳值(retuen XXX)就一定要加這行
}
但是使用retuen FMRES_IGNORED程式的排列順序就非常重要…
例如
複製程式
public I_am_forward_too(id)
{
if (is_user_alive(id))
retuen FMRES_IGNORED // 當程式跑到這裡…下面的內容都會被無視…
if (!is_user_alive(id))
retuen FMRES_IGNORED // 既然上面的條件說「如果是死人」…那你下面內容何必管他死活?
client_print(id, print_chat, "a7811311622") // 所以這句話不會顯示
retuen FMRES_IGNORED
}
可是IF條件就比較不會有順序問題
複製程式
public I_am_forward(id)
{
if (!is_user_alive(id))
{
// 隨便寫…
}
if (is_user_alive(id))
{
client_print(id, print_chat, "a7811311622") // 上面的死人部分和這邊無關…這句話正常顯示…
}
}
如果你覺得IF用起來比較不會出問題就先用IF…
只是會寫插件的通常對那越寫越長的內容看不順眼…HAM_SUPERCEDE和其他差不多效果的是用來取消原本會發生的事件…
例如下面這個是傷害與受傷的事件…
複製程式
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
if (is_user_alive(id))
return HAM_SUPERCEDE
return HAM_IGNORED
}
用了HAM_SUPERCEDE後滿足IF條件的傷害都會被無效化…