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_CreateNamedEntity, engfunc(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_SetOrigin, Ent, origin);
engfunc(EngFunc_SetModel, Ent, model);
engfunc(EngFunc_SetSize, Ent, size[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_SetOrigin, Ent, origin);
entity_set_origin(Ent, origin);
engfunc(EngFunc_SetModel, Ent, model);
entity_set_model(Ent, model);
engfunc(EngFunc_SetSize, Ent, size[Mins], size[Maxs]);
entity_set_size(Ent, size[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(Ent, pev_classname, "Pushable");
set_pev(Ent, pev_movetype, MOVETYPE_FLY);
set_pev(Ent, pev_solid, SOLID_BBOX);
set_pev(Ent, pev_absmin, abssize[Mins]);
set_pev(Ent, pev_absmax, abssize[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(Ent, EV_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(Ent, pev_movetype, MOVETYPE_FLY);
EV_INT_movetype
entity_set_int(Ent, EV_INT_movetype, MOVETYPE_FLY);
set_pev(Ent, pev_solid, SOLID_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(Ent, EV_INT_solid, SOLID_BBOX)
set_pev(Ent, pev_absmin, abssize[Mins]);
EV_VEC_absmin
entity_set_vector(Ent, EV_VEC_absmin, abssize[Mins]);
set_pev(Ent, pev_absmax, abssize[Maxs]);
EV_VEC_absmax
entity_set_vector(Ent, EV_VEC_absmax, absmax(Maxs);
Recien vimos los
set_pev, ahora miremos los
pev solos, es casi lo mismo.
Acá dos ejemplos:
PHP Code:
pev(id, pev_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(id, EV_INT_button);
pev(id, pev_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(id, EV_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.