В общем ради интереса написал плагин
Quote
public test(id)
{
if( id )
return 1;
}
пропустил через AmxxDump, получил
Quote
No module data detected.
0x00000008 public test(id)
codestart codeend address type name
0x00000008 0x0000003C 0x0000000C local val id
0x00000008 0x0000003C 0x00000008 public test
0x8 PROC ; public test(id)
0xC BREAK ; test2.sma:0
0x10 BREAK ; test2.sma:2
0x14 LOAD.S.pri 0xC ; id
0x1C JZER 0x34 ; jump_0
0x24 BREAK ; test2.sma:3
0x28 CONST.pri 0x1 ; signed=1 float=0.000000
0x30 RETN
0x34 ZERO.pri ; target:jump_0
0x38 RETN
file: test2.sma
Перед последним возвратом
Quote
public test(id)
{
if( id )
return 1;
//который находиться здесь
}
выполняется ZERO.pri, что обнуляет реестр pri в котором храниться возвращаемое значение.
Так как PLUGIN_CONTINUE == 0, то твой плагин скомпилируется как
Quote
public plugin_init(){
register_clcmd("say /start","desable")
}
public desable(id){
if(id==test[id]||id==test3[id]){
ColorChat(id,GREEN, "You are in a duel. Command disabled.");
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
Но я не рекомендую первый вариант, потому что другие скриптеры могут не понять код, можешь сам сбиться с толку и в следующих версиях компилятора могут произойти изменения, которые не дадут скомпилироваться. И вообще варнинги - это ламерство, не красиво
_______
Если плагин не будет возвращать значение
Quote
public test(id)
{
if( id )
return;
}
Quote
No module data detected.
0x00000008 public test(id)
codestart codeend address type name
0x00000008 0x00000038 0x0000000C local val id
0x00000008 0x00000038 0x00000008 public test
0x8 PROC ; public test(id)
0xC BREAK ; test2.sma:0
0x10 BREAK ; test2.sma:2
0x14 LOAD.S.pri 0xC ; id
0x1C JZER 0x30 ; jump_0
0x24 BREAK ; test2.sma:3
0x28 ZERO.pri
0x2C RETN
0x30 ZERO.pri ; target:jump_0
0x34 RETN
file: test2.sma
Аналогично - тут даже пустая инструкция return возвращает 0.