Raised This Month: $51 Target: $400
 12% 

Pasar funciones de Fakemeta a Engine


  
 
 
Thread Tools Display Modes
Author Message
Kiske
Veteran Member
Join Date: May 2009
Old 01-08-2012 , 23:10   Pasar funciones de Fakemeta a Engine
#1

Les voy a enseñar como para funciones de Fakemeta a Engine y viceversa.
No requiere de mucho conocimiento, y es fácil de entender.


Para empezar necesitamos tener abierto el fakemeta_const.inc y el engine.inc


Fakemeta -> Engine
Debemos tener en cuenta que no todas las funciones de fakemeta tienen su reemplazo en engine, pero si lo queres cambiar igual, deberíamos buscar funciones de otros archivos de inclusión que cumplan su misma función.

Un error bastante típico al hacer esto, es cambiar pev_valid(entindex) por is_valid_ent(entity), bueno, hay que tener mucho cuidado con esto, porque no cumple la misma función en su totalidad.
is_valid_ent devuelve 0 o 1 dependiendo si la entidad es valida o no, mientras que pev_valid no hace lo mismo en su totalidad.
Por lo que pev_valid se usa mucho cuando hay que chequear pdatas.

Por lo que si no entiendes mucho del tema aún y veas un pev_valid(), dejalo como está.


Es muy fácil de pasar funciones, solo necesitamos ver el nombre del valor en fakemeta, buscarlo en el engine_const.inc y reemplazarlo.

Acá les mostrare varios ejemplos.


PHP Code:
new Ent engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"func_pushable")) 
Busco en engine_const.inc pero no tiene reemplazo. Esto es porque en engine_const.inc no aparecen todas las funciones del engine, entonce vamos a engine.inc y buscamos algún reemplazo para esta función.

Buscando la palabra clave entity me encontre con diferentes funciones, pero la que más se asemeja a hacer lo mismo es:
PHP Code:
/* Creates an entity, will return the index of the created entity. ClassName must be valid. */
native create_entity(const szClassname[]); 
Entonces reemplazamos, obviamente que hay que reemplazar bien.
Nos quedaría:
PHP Code:
new Ent create_entity("func_pushable"); 

PHP Code:
engfunc(EngFunc_SetOriginEntorigin);
engfunc(EngFunc_SetModelEntmodel);
engfunc(EngFunc_SetSizeEntsize[Mins], size[Maxs]); 
Nuevamente varios engfunc, lo cual no vamos a encontrar su reemplazo en engine_const.inc pero si en engine.inc

Acá es fácil, buscamos palabras claves como "origin" , "model" y "size". Luego solo es cuestión de lógica para entender que cumple su misma función. Por lo que si buscan bien, se darán cuenta que sus reemplazos en engine son:
PHP Code:
/* Proper origin setting, keeps updated with Half-Life engine. */
native entity_set_origin(iIndex, const Float:fNewOrigin[3]);

/* Sets the model of an Entity. */
native entity_set_model(iIndex, const szModel[]);

/* Set entity bounds. */
native entity_set_size(index, const Float:mins[3], const Float:maxs[3]); 
Ahora, como hacemos para reemplazarlos ?
Muy fácil, nos fijamos los parámetros que nos muestran las funciones de engine, y nos fijamos los que tenemos en la función de fakemeta.
PHP Code:
engfunc(EngFunc_SetOriginEntorigin);
entity_set_origin(Entorigin);

engfunc(EngFunc_SetModelEntmodel);
entity_set_model(Entmodel);

engfunc(EngFunc_SetSizeEntsize[Mins], size[Maxs]);
entity_set_size(Entsize[Mins], size[Maxs]); 
Como verán, es fácil, solo es cuestión de buscar las funciones con palabras claves.



Bueno, ya se pasar engfuncs a funciones de engine, pero que hago con los pev y set_pev que veo por todos lados ?
Bien, esto es más sencillo aún, ya que la mayoría (no digo todos porque no se) de los pevs, se encuentran reemplazo en engine en engine_const.inc

La técnica que hay que usar es la misma, buscar la palabra clave del pev en engine_const.inc

NOTA: Los pev( se reemplazan por entity_get_* y el set_pev( por entity_set_*
El * se reemplaza por int , float , vector , edict , string o byte. Obviamente dependiendo que queremos reemplazar.
Acá algunos ejemplos:

PHP Code:
set_pev(Entpev_classname"Pushable");
set_pev(Entpev_movetypeMOVETYPE_FLY);
set_pev(Entpev_solidSOLID_BBOX);
set_pev(Entpev_absminabssize[Mins]);
set_pev(Entpev_absmaxabssize[Maxs]); 
Lo mismo que antes, buscamos palabras claves en engine_const.inc para reemplazar cada una de estas funciones.
Tales como classname , movetype , solid , absmin , absmax

Buscamos classname y nos encontramos con: EV_SZ_classname y seguramente se estarán preguntando que mierda hago con esto.

Acá entra el razonamiento, tenemos un set_pev por lo que hay que reemplazarlo por entity_set_* , y como averiguamos el * ? Fácil, sabemos que el SZ de EV_SZ_classname es un string, entonces, entity_set_string

PHP Code:
entity_set_string(EntEV_SZ_classname"Pushable"); 
Y así hacemos con todo el resto.

Si quieren pueden buscarlo ustedes mismos los otros 4, un poco más abajo están los reemplazos.

















PHP Code:
set_pev(Entpev_movetypeMOVETYPE_FLY);
EV_INT_movetype
entity_set_int
(EntEV_INT_movetypeMOVETYPE_FLY);


set_pev(Entpev_solidSOLID_BBOX);
// Acá encontramos varios:
EV_INT_solid
GL_trace_allsolid
GL_trace_startsolid
TR_AllSolid
TR_StartSolid
/* Si nos topamos con esto y no sabemos que hacer,
hay que saber que cuando reemplacemos PEVs,
siempre en su reemplazo con engine, tiene que tener un EV_*/
EV_INT_solid
entity_set_int
(EntEV_INT_solidSOLID_BBOX)


set_pev(Entpev_absminabssize[Mins]);
EV_VEC_absmin
entity_set_vector
(EntEV_VEC_absminabssize[Mins]);


set_pev(Entpev_absmaxabssize[Maxs]);
EV_VEC_absmax
entity_set_vector
(EntEV_VEC_absmaxabsmax(Maxs); 


Recien vimos los set_pev, ahora miremos los pev solos, es casi lo mismo.
Acá dos ejemplos:
PHP Code:
pev(idpev_button);
// Acá encontramos varios también:
EV_INT_oldbuttons
EV_INT_button
usercmd_buttons
/* Si ya aprendimos a elegir que necesitamos usar,
el usercmd_buttons lo descartamos.
El pev es pev_button, por lo que es obvio que necesitamos el EV_INT_button*/
EV_INT_button
entity_set_int
(idEV_INT_button);


pev(idpev_flags);
// Tenemos:
EV_INT_spawnflags
EV_INT_flags
GL_serverflags
GL_trace_flags
/* Y acá sucede lo mismo que antes, solamente nos interesan los EV_
y luego buscamos el que nos sirve, si no sabemos cual nos sirve lo sacamos por lógica,
el pev es pev_flags solo, por lo que el EV_ tendría que ser solo flags solo.*/
EV_INT_flags
entity_get_int
(idEV_INT_flags


Tal vez otro día haga de como pasar de engine a fakemeta.
Espero que les haya gustado esta guía o tutorial y hayan aprendido a pasar funciones de fakemeta a engine.

Last edited by Kiske; 01-10-2012 at 02:26.
Kiske is offline
Send a message via Skype™ to Kiske
YakumoHiratsuhi
Veteran Member
Join Date: Dec 2010
Location: Dreαmlαnd.
Old 01-09-2012 , 09:17   Re: Pasar funciones de Fakemeta a Engine
#2

la unica diferencia que yo le veo a fakemeta y a engine, esque engine es más organizado y rapido que fakemeta, pero fakemeta es más facil de usar, pues solamente para manejar entidades usas pev(), set_pev(), dllfunc() & engfunc() & una que otra vez set_pev_string()
__________________
"Podra parecer ridiculo o imposible, pero este es el camino que seguimos los verdaderos hombres, si hay un muro en el camino, lo derribamos, si no hay camino, haremos uno, con nuestras propias manos, porque el magma de nuestro corazón arde en llamas."
YakumoHiratsuhi is offline
Send a message via MSN to YakumoHiratsuhi
xLeoNNN
Veteran Member
Join Date: Sep 2010
Location: de_dust2
Old 01-09-2012 , 11:39   Re: Pasar funciones de Fakemeta a Engine
#3

mm buen post, gracias =)

PD: que es mejor, fakemeta o engine y por que ?
__________________
xLeoNNN is offline
Send a message via MSN to xLeoNNN
YakumoHiratsuhi
Veteran Member
Join Date: Dec 2010
Location: Dreαmlαnd.
Old 01-09-2012 , 12:47   Re: Pasar funciones de Fakemeta a Engine
#4

Quote:
Originally Posted by xLeoNNN View Post
mm buen post, gracias =)

PD: que es mejor, fakemeta o engine y por que ?
engine, es más organizado y más rapido, pero es más dificil de aprenderse los entity_set/get_*() ya que estos vienen organizados segun el tipo de datos que manejan, mientras que fakemeta es más facil de usar porque todo viene desorganizado pero facil de hayar pero es más lento.
__________________
"Podra parecer ridiculo o imposible, pero este es el camino que seguimos los verdaderos hombres, si hay un muro en el camino, lo derribamos, si no hay camino, haremos uno, con nuestras propias manos, porque el magma de nuestro corazón arde en llamas."

Last edited by YakumoHiratsuhi; 01-09-2012 at 12:48.
YakumoHiratsuhi is offline
Send a message via MSN to YakumoHiratsuhi
xLeoNNN
Veteran Member
Join Date: Sep 2010
Location: de_dust2
Old 01-09-2012 , 13:04   Re: Pasar funciones de Fakemeta a Engine
#5

y si es mas lento o mas rapido afecta en consumo o rendimiento del plugin ?

PD: gracias por la aclaración e.e
__________________
xLeoNNN is offline
Send a message via MSN to xLeoNNN
XINLEI
me too
Join Date: Jun 2011
Location: Colombian Coffee storage
Old 01-09-2012 , 13:16   Re: Pasar funciones de Fakemeta a Engine
#6

Engine y fakemeta son buenos siempre y cuando hagan las cosas que se necesitan. uno no es mejor que el otro ni nada por el estilo.
XINLEI is offline
shinoda
Spanish Moderator
Join Date: Nov 2009
Location: ag_crossfire
Old 01-09-2012 , 19:25   Re: Pasar funciones de Fakemeta a Engine
#7

Quote:
Originally Posted by xLeoNNN View Post
y si es mas lento o mas rapido afecta en consumo o rendimiento del plugin ?

PD: gracias por la aclaración e.e
1. Mientras menos llamadas al módulo, mejor (por ejemplo la creación de una entidad)
2. Usa fakemeta sólo con cosas que no puedes hacer con engine, aunque no hay mucha diferencia.
3. Puedes probar usando profile.
__________________
Oh hell no this shit is awesome !!!

Last edited by shinoda; 01-09-2012 at 19:26.
shinoda is offline
Send a message via MSN to shinoda Send a message via Skype™ to shinoda
Old 01-09-2012, 19:25
shinoda
This message has been deleted by shinoda. Reason: -.-
xLeoNNN
Veteran Member
Join Date: Sep 2010
Location: de_dust2
Old 01-09-2012 , 19:26   Re: Pasar funciones de Fakemeta a Engine
#8

Quote:
Originally Posted by shinoda View Post
1. Mientras menos llamadas al módulo, mejor (por ejemplo la creación de una entidad)
2. Usa fakemeta sólo con cosas que no puedes hacer con engine.
3. Puedes probar usando profile.
gracias

PD: que es el profile ?
PD2: por que hay que usar fakemeta solo con cosas que no puedes usar con engine ? por que si o por otra razon como pregunte mas arriba ?
__________________
xLeoNNN is offline
Send a message via MSN to xLeoNNN
lucas_7_94
Leche Loco
Join Date: Mar 2009
Location: Argentina
Old 01-09-2012 , 19:29   Re: Pasar funciones de Fakemeta a Engine
#9

el profile te dice las veces que se llama x funcion en un plugin determinado que vos vayas a chequear.
__________________
ATWWMH - MiniDuels
Madness is like gravity, just need a little push.
lucas_7_94 is offline
Send a message via Skype™ to lucas_7_94
xLeoNNN
Veteran Member
Join Date: Sep 2010
Location: de_dust2
Old 01-09-2012 , 19:30   Re: Pasar funciones de Fakemeta a Engine
#10

ahh gracias
__________________
xLeoNNN is offline
Send a message via MSN to xLeoNNN
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 12:03.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode