Well. I am making a module that can show sprite hud (using entity). But i can't compile it, and can't fix it. i dont understand
PHP Code:
int AddToFullPack(struct entity_state_s *state, int e, edict_t *ent, edict_t *host, int hostflags, int player, unsigned char *pSet)
{
if(!IS_VALID_ENT(host) || !IS_VALID_ENT(ent))
return 0;
if(ENTINDEX(host) <= 0 || ENTINDEX(host) > gpGlobals->maxClients)
return 0;
if(EDICT_TO_INT(ent) == g_PlayerHud[ENTINDEX(host)])
{
Vector Origin, ForVec, vOffSets;
// Get Host Origin
Origin = host->v.origin;
// Get View Ofs
vOffSets = host->v.view_ofs;
// Add View Ofs to Origin
Origin = Origin + vOffSets;
// Get Velocity
float VelocityL = ent->v.iuser3;
ForVec = fm_velocity_by_aim(host, VelocityL);
// Velocity Vec to Origin Vec
Origin = Origin + ForVec;
// Set Origin for Hud
SET_ORIGIN(ent, Origin);
state->origin = Origin; // ERROR Here
// Set Effect
state->rendermode = kRenderTransAdd; // ERROR Here
state->renderamt = 255; // ERROR Here
}
return 1;
}
Error:
Code:
1>------ Build started: Project: EntSprClient, Configuration: Debug Win32 ------
1> main.cpp
1>c:\users\dias\desktop\entsprclient\entsprclient\main.cpp(102): error C2027: use of undefined type 'entity_state_s'
1> e:\sdk\hlsdk-2.3-p3\multiplayer\engine\eiface.h(252) : see declaration of 'entity_state_s'
1>c:\users\dias\desktop\entsprclient\entsprclient\main.cpp(102): error C2227: left of '->origin' must point to class/struct/union/generic type
1>c:\users\dias\desktop\entsprclient\entsprclient\main.cpp(105): error C2027: use of undefined type 'entity_state_s'
1> e:\sdk\hlsdk-2.3-p3\multiplayer\engine\eiface.h(252) : see declaration of 'entity_state_s'
1>c:\users\dias\desktop\entsprclient\entsprclient\main.cpp(105): error C2227: left of '->rendermode' must point to class/struct/union/generic type
1>c:\users\dias\desktop\entsprclient\entsprclient\main.cpp(106): error C2027: use of undefined type 'entity_state_s'
1> e:\sdk\hlsdk-2.3-p3\multiplayer\engine\eiface.h(252) : see declaration of 'entity_state_s'
1>c:\users\dias\desktop\entsprclient\entsprclient\main.cpp(106): error C2227: left of '->renderamt' must point to class/struct/union/generic type
1> EntSprClient_Utils.cpp
1> Generating Code...
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Full "main.cpp"
PHP Code:
#include "amxxmodule.h"
#include "EntSprClient_Utils.h"
int g_PlayerHud[33];
bool IS_PLAYER_VALID[33];
/* First edict which is null */
edict_t * g_pNullEdict;
/* A few conversion methods */
#define INT_TO_EDICT( i ) \
( ( edict_t * ) ( g_pNullEdict + i ) )
#define EDICT_TO_INT( i ) \
( ( int ) ( i - g_pNullEdict ) )
void ClientPutInServer( edict_t *pEntity )
{
int iPlayer = ENTINDEX(pEntity);
IS_PLAYER_VALID[ iPlayer ] = true;
}
void ClientDisconnect( edict_t *pEntity )
{
int iPlayer = ENTINDEX(pEntity);
IS_PLAYER_VALID[ iPlayer ] = false;
}
static cell AMX_NATIVE_CALL show_sprhud(AMX *amx, cell *pParameters)
{
int Id; Id = pParameters[1];
int MaxClient; MaxClient = gpGlobals->maxClients;
// char *szSprite = (char)pParameters[2];
if(Id <= 0 || Id > MaxClient)
return 0;
if(gpGlobals->time <= 4)
return 0;
if(FNullEnt(INT_TO_EDICT(Id)) || INT_TO_EDICT(Id)->pvPrivateData == NULL)
return 0;
edict_t *pHudEnt;
pHudEnt = INDEXENT(g_PlayerHud[Id]);
if(!IS_VALID_ENT(pHudEnt)) // Entity isn't created
{
pHudEnt = CREATE_NAMED_ENTITY(MAKE_STRING("env_sprite"));
if(!IS_VALID_ENT(pHudEnt))
return 0;
g_PlayerHud[Id] = ENTINDEX(pHudEnt);
}
pHudEnt->v.takedamage = 0.0;
pHudEnt->v.solid = SOLID_NOT;
pHudEnt->v.movetype = MOVETYPE_NONE;
int iLength = 0;
char *model = MF_GetAmxString(amx, pParameters[2], 0, &iLength);
SET_MODEL(ENT(pHudEnt), model);
pHudEnt->v.rendermode = kRenderTransAdd;
pHudEnt->v.renderamt = 0.0;
pHudEnt->v.scale = gpGlobals->time + (float)pParameters[3];
pHudEnt->v.iuser3 = pParameters[4];
return g_PlayerHud[Id];
}
int AddToFullPack(struct entity_state_s *state, int e, edict_t *ent, edict_t *host, int hostflags, int player, unsigned char *pSet)
{
if(!IS_VALID_ENT(host) || !IS_VALID_ENT(ent))
return 0;
if(ENTINDEX(host) <= 0 || ENTINDEX(host) > gpGlobals->maxClients)
return 0;
if(EDICT_TO_INT(ent) == g_PlayerHud[ENTINDEX(host)])
{
Vector Origin, ForVec, vOffSets;
// Get Host Origin
Origin = host->v.origin;
// Get View Ofs
vOffSets = host->v.view_ofs;
// Add View Ofs to Origin
Origin = Origin + vOffSets;
// Get Velocity
float VelocityL = ent->v.iuser3;
ForVec = fm_velocity_by_aim(host, VelocityL);
// Velocity Vec to Origin Vec
Origin = Origin + ForVec;
// Set Origin for Hud
SET_ORIGIN(ent, Origin);
state->origin = Origin;
// Set Effect
state->rendermode = kRenderTransAdd;
state->renderamt = 255;
}
return 1;
}
static cell AMX_NATIVE_CALL remove_sprhud(AMX *, cell * pParameters)
{
int Id; Id = pParameters[1];
int MaxClient; MaxClient = gpGlobals->maxClients;
if(Id <= 0 || Id > MaxClient)
return 0;
if(gpGlobals->time <= 4)
return 0;
if(FNullEnt(INT_TO_EDICT(Id)) || INT_TO_EDICT(Id)->pvPrivateData == NULL)
return 0;
if(IS_VALID_ENT(INDEXENT(g_PlayerHud[Id]))) REMOVE_ENTITY(INT_TO_EDICT(g_PlayerHud[Id]));
return 0;
}
// Register Natives
AMX_NATIVE_INFO EntSprClient[] =
{
{"show_sprhud", show_sprhud},
{"remove_sprhud", remove_sprhud},
{NULL, NULL}
};
void OnAmxxAttach( void )
{
MF_AddNatives(EntSprClient);
}
void ServerActivate_Post( edict_t * pFirstEdict, int, int ) {
g_pNullEdict = pFirstEdict;
RETURN_META( MRES_IGNORED );
}