下面是引用 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条件的伤害都会被无效化…