Page 1 of 1

engine, fakemeta

Posted: 2013 Jul 25 12:10
by MPD
Girdėjau, kad engine ir fakemeta daro vos ne tą patį, tik, kad fakemeta yra geresnis. Tad man pasidarė įdomu, kaip padaryti kokį dalyką ir ant vieno, ir ant kito. Tai parūpo, kad nereikėtų įtraukti abiejų bibliotekų.
Pavyzdžiui, aš ieškojau kaip šitą pakeisti su engine:

Code: Select all

set_pdata_int( went, OFFSET_CLIPAMMO, Weapon[id], OFFSET_LINUX_WEAPONS);
Arba šį kodą su fakemeta:

Code: Select all

g_msgid_ClCorpse = get_user_msgid("ClCorpse"); set_msg_block(g_msgid_ClCorpse, BLOCK_ONCE);
bet nei vieno, nei kito neradau.

Re: engine, fakemeta

Posted: 2013 Jul 25 12:41
by aaarnas
Nėra tokio dalyko kaip vienas ar kitas geresnis. Yra dalykų, kur geriau su engine galbūt daryti, yra kur su fakemeta.
Jei matuojant 0,00000001 tikslumu, tai engine yra greitesnis. Vien dėl to tikriausiai, kad engine naudoja paprastesę sintaksę funkcijų (bet nežiūrėjau kuo ten taip skirtis gali).
Nieko blogo turėti abu includintus. Kompiliatorius išsirenka tik tą, kas reikia. Visi moduliai pastoviai būna veikiantys, tiesiog pluginai naudoja tą, ką jiems reikia.

-- 2013 Lie 25 12:54 --

Bet kaip ir sakiau - tai skirtingi moduliai skirtingiems poreikiams. Tad naudoji vieną ar kitą priklausomai nuo to ko tau reikia ir ne visais atvejais vieną pakeisi kitu.

Pvz ten tokios panašios funkcijos kaip is_ent_valid(ent) (engine) ir pev_valid(ent) (fakemeta) yra skirtingos ir gali grąžinti net ir skirtingus rezultatus:

Code: Select all

int is_ent_valid(int iEnt){    if (iEnt < 1 || iEnt > gpGlobals->maxEntities)         return 0;     if (iEnt <= gpGlobals->maxClients)    {        if (!MF_IsPlayerIngame(iEnt))        {            return 0;        }    } else {        if (FNullEnt(INDEXENT(iEnt)))        {            return 0;        }    }     return 1;}

Code: Select all

static cell AMX_NATIVE_CALL amx_pev_valid(AMX *amx, cell *params){    int idx = static_cast<int>(params[1]);     edict_t *e = INDEXENT(idx);     if (FNullEnt(e))        return 0;     if (e->pvPrivateData)        return 2;     return 1;}