Zapadni Balkan SA-MP

PAWN | SKRIPTANJE => SAMP Tutorijali => Topic started by: ivodev54 on November 18, 2025, 01:38:57 PM

Title: [TUTORIAL] #emit, __emit, @emit
Post by: ivodev54 on November 18, 2025, 01:38:57 PM
Uvod
U novijim verzijama kompajlera i biblioteke amx_assembly postoje tri varijante „emit“ operatera: #emit, __emit i @emit. Svaka ima svoje specifičnosti i drugačije ponašanje u PAWN-u.

1. #emit
Ovo je izvorna verzija emit‑operatera u PAWN‑u. 
Koristi se za direktno ubacivanje ASM (p‑code) instrukcija tačno na mjestu gdje je pozvan u skripti.

Primjer:
Code: (pawn) You are not allowed to view links. Register or Login
Function()
{
    #emit ZERO.pri
    #emit RETN
    return 1;
}

Karakteristike:
Code: You are not allowed to view links. Register or Login
#if /
Code: You are not allowed to view links. Register or Login
#else se ignorišu u kontekstu
Code: You are not allowed to view links. Register or Login
#emit
2. __emit
Code: You are not allowed to view links. Register or Login
__emit je naprednija verzija
Code: You are not allowed to view links. Register or Login
#emit
Radi na nivou izraza i dobro je integrirana u kompajler.

Primjer i karakteristike:
Code: (pawn) You are not allowed to view links. Register or Login
__emit(CONST.pri (5 * MAX_PLAYERS));
Code: You are not allowed to view links. Register or Login
#define
Code: (pawn) You are not allowed to view links. Register or Login
#define GetCurrentAddress() __emit(LCTRL 6)
Code: (pawn) You are not allowed to view links. Register or Login
__emit(INC.U var);
Code: (pawn) You are not allowed to view links. Register or Login
new var = __emit(LOAD.S.pri param, ADD.C 5);

3. @emit
Code: You are not allowed to view links. Register or Login
@emit služi za run‑time injektiranje instrukcija u PAWN VM — izmjena koda za vrijeme rada servera.

Primjer:
Code: (pawn) You are not allowed to view links. Register or Login
ReturnFive()
{
    return 3;
}

public OnCodeInit()
{
    new context[AsmContext];
    AsmInitPtr(context, _:addressof(ReturnFive<>), 4 * cellbytes);

    @emit PROC
    @emit CONST.pri 5
    @emit RETN

    return 1;
}

Kada koristiti:
Title: Re: [TUTORIAL] #emit, __emit, @emit
Post by: fx3ee.pwn on November 18, 2025, 04:32:08 PM
Zna Ivo  ;D
SimplePortal 2.3.7 © 2008-2026, SimplePortal