Sunday - 09. 08. 2026 •  Ucitavanje...
Link #1 Link #2 Link #3 Link #4 Link #5

!!

Registruj se i otključaj pun sadržaj

Kao gost imaš ograničen pristup forumu.
Registracijom dobijaš pristup svim temama, možeš pisati poruke, učestvovati u diskusijama i biti dio naše zajednice.

Author Topic: [TUTORIAL] #emit, __emit, @emit  (Read 5110 times)

Online

ivodev54, Admin

    Hood Titan
      Postova: 61
    • RESPECT: 5
      • View Profile
[TUTORIAL] #emit, __emit, @emit
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:
  • Točno ono što napišeš tu će biti ubačeno, bez prilagodbe.
  • Podržava vrlo malo od standardnih mogućnosti kompajlera.
  • Direktive
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
    .
  • Negativni brojevi se često moraju izražavati u heksadecimalnom formatu.

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:
  • Može koristiti potpune izraze:
Code: (pawn) You are not allowed to view links. Register or Login
__emit(CONST.pri (5 * MAX_PLAYERS));
  • Može se koristiti unutar
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)
  • Automatski bira pravu instrukciju za lokalne ili globalne varijable:
Code: (pawn) You are not allowed to view links. Register or Login
__emit(INC.U var);
  • Može ubaciti višestruke instrukcije u jednom izrazu:
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:
  • Kada želiš da kod bude izmijenjen za vrijeme izvođenja (run‑time), npr. hookiranje ili patchovanje modova.
  • Kada __emit ili #emit ne omogućavaju željenu fleksibilnost.

    Zaključak
  • Koristi #emit za najosnovnije, direktno ubacivanje ASM instrukcija.
  • Koristi __emit kada želiš fleksibilniji, compile‑time „inline asm“ stil.
  • Koristi @emit kada ti treba run‑time izmjena instrukcija.
« Last Edit: November 18, 2025, 01:55:30 PM by iv0x13 »


Offline

fx3ee.pwn, Admin

    Ghetto King
      Postova: 90
    • RESPECT: 3
      • View Profile
Re: [TUTORIAL] #emit, __emit, @emit
Reply #1 on: November 18, 2025, 04:32:08 PM
Zna Ivo  ;D
Najjači admin


 


Vrati se na pocetak
SMF 2.0.19 | SMF © 2021, Simple Machines
Page created in 0.053 seconds with 24 queries.
ZBS © 2011 - 2024, Zapadni Balkan SA:MP
Weiss X 10.2 © 2014, Jade Works Studio
Footer background belongs to GTA Forums
SimplePortal 2.3.7 © 2008-2026, SimplePortal