|
AlliedModders Donor
|

12-09-2014
, 05:26
Invalid cellvector handle provided
|
#1
|
Hi guys, this is what i get in my console once i start my server with the plugin. Basically it's a snow plugin that generates .spr's at a random location. However i believe that the locations are screwed up. This is the error, and it goes on and on.
Code:
L 12/08/2014 - 21:20:30: Invalid cellvector handle provided (6:1220087467:0)
L 12/08/2014 - 21:20:30: [AMXX] Displaying debug trace (plugin "snow_plugin.amxx")
L 12/08/2014 - 21:20:30: [AMXX] Run time error 10: native error (native "ArrayGetArray")
L 12/08/2014 - 21:20:30: [AMXX] [0] snow_plugin.sma::fwd_MagicEntityThink (line 117)
L 12/08/2014 - 21:20:33: Invalid cellvector handle provided (6:1427720619:0)
L 12/08/2014 - 21:20:33: [AMXX] Displaying debug trace (plugin "snow_plugin.amxx")
L 12/08/2014 - 21:20:33: [AMXX] Run time error 10: native error (native "ArrayGetArray")
L 12/08/2014 - 21:20:33: [AMXX] [0] snow_plugin.sma::fwd_MagicEntityThink (line 117)
L 12/08/2014 - 21:20:36: Invalid cellvector handle provided (6:2089803835:0)
L 12/08/2014 - 21:20:36: [AMXX] Displaying debug trace (plugin "snow_plugin.amxx")
L 12/08/2014 - 21:20:36: [AMXX] Run time error 10: native error (native "ArrayGetArray")
L 12/08/2014 - 21:20:36: [AMXX] [0] snow_plugin.sma::fwd_MagicEntityThink (line 117)
This is the code, i highlighted the line 117 to make it easier for you guys to see it in the code :
PHP Code:
#include < amxmodx >
#include < fakemeta >
#include < engine >
#include < xs >
new const
PLUGIN_NAME[ ] = "Realistic Snow",
PLUGIN_VERSION[ ] = "0.4.2b";
#define SS_VERSION "1.0"
#define SS_MIN_DISTANCE 250.0
#define SS_MAX_LOOPS 100000
new Array:g_vecSsOrigins;
new Array:g_vecSsSpawns;
new Array:g_vecSsUsed;
new Float:g_flSsMinDist;
new g_iSsTime;
new const g_szStarts[][] =
{
"info_player_start",
"info_player_deathmatch"
};
new const Float:g_flOffsets[] =
{
3500.0,
3500.0,
1500.0
};
new g_iCvarSnowType;
new g_iSprite;
new Array:g_vecOrigins;
new g_iOrigins = 0;
new g_iMagicEntity;
public plugin_precache( )
{
register_plugin( PLUGIN_NAME, PLUGIN_VERSION, "Askhanar" );
g_iCvarSnowType = register_cvar( "rs_type", "2" );
g_iSprite = precache_model( "sprites/snow1.spr" );
}
public plugin_init( )
{
remove_entity_name( "env_fog" );
remove_entity_name( "env_rain" );
remove_entity_name( "env_snow" );
g_vecOrigins = ArrayCreate( 3, 1 );
SsInit( 200.0 );
SsScan( );
SsDump( );
CreateEntity:
new iEnt;
iEnt = engfunc( EngFunc_CreateNamedEntity, engfunc( EngFunc_AllocString, "info_target" ) );
if( !pev_valid( iEnt ) || !iEnt )
goto CreateEntity;
set_pev( iEnt, pev_classname, "Askhanar's_MagicEntity" );
set_pev( iEnt, pev_nextthink, get_gametime( ) + 1.0 );
register_forward( FM_Think, "fwd_MagicEntityThink" );
g_iMagicEntity = iEnt;
}
public fwd_MagicEntityThink( iEnt )
{
set_pev( iEnt, pev_nextthink, get_gametime( ) + 3.1 );
static iSnowType;
iSnowType = clamp( get_pcvar_num( g_iCvarSnowType ), 0, 3 );
if( iEnt != g_iMagicEntity || !pev_valid( iEnt ) || !iSnowType )
return FMRES_IGNORED;
static Float:fOrigin[ 3 ], iLocations, iCount;
switch( iSnowType )
{
case 1:
{
iCount = 3;
iLocations = 20;
}
case 2:
{
iCount = 5;
iLocations = 30;
}
case 3:
{
iCount = 10;
iLocations = 45;
}
}
while( iLocations > 0 )
{
ArrayGetArray( g_vecOrigins, random( g_iOrigins ), fOrigin ); //Line 117, where the error occurs.
MakeSnow( fOrigin, g_iSprite, iCount, 8, random_num( 5, 10 ), 50, 30 );
iLocations--;
}
return FMRES_IGNORED;
}
MakeSnow( Float:fOrigin[ 3 ], iSpriteId, iCount, iLife, iScale, iVelocity, iRandomness )
{
engfunc( EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, fOrigin, 0 );
write_byte( TE_SPRITETRAIL ); // TE ID
engfunc( EngFunc_WriteCoord, fOrigin[ 0 ] ); // x axis
engfunc( EngFunc_WriteCoord, fOrigin[ 1 ] ); // y axis
engfunc( EngFunc_WriteCoord, fOrigin[ 2 ] + 40 ); // z axis
engfunc( EngFunc_WriteCoord, fOrigin[ 0 ] ); // x axis
engfunc( EngFunc_WriteCoord, fOrigin[ 1 ] ); // y axis
engfunc( EngFunc_WriteCoord, fOrigin[ 2 ] ); // z axis
write_short( iSpriteId ); // Sprite Index
write_byte( iCount ); // Count
write_byte( iLife ); // Life
write_byte( iScale ); // Scale
write_byte( iVelocity ); // Velocity Along Vector
write_byte( iRandomness ); // Rendomness of Velocity
message_end( );
}
stock Get_Sky_Origin( const Float:vecTarget[ 3 ], Float:vecStart[ 3 ] )
{
new Float:vecHit[ 3 ];
vecStart[ 0 ] = vecTarget[ 0 ];
vecStart[ 1 ] = vecTarget[ 1 ];
vecStart[ 2 ] = vecTarget[ 2 ] + 5096.0;
while( engfunc( EngFunc_PointContents, vecStart ) != -1 )
{
if( vecStart[ 2 ] < vecTarget[ 2 ] + 128.0 )
break;
vecStart[ 2 ] -= 16.0;
}
if( vecStart[ 2 ] - vecTarget[ 2 ] <= 196.0 )
return 0;
xs_vec_copy( vecStart, vecHit );
vecHit[ 2 ] += 256.0;
new s_TextureName[ 16 ];
engfunc( EngFunc_TraceTexture, 0, vecStart, vecHit, s_TextureName, sizeof( s_TextureName ) -1 );
if( !equal( s_TextureName, "sky" ) )
return 0
vecStart[ 2 ] -= 10.0;
return 1;
}
/*====================================
=============Super Spawns============*/
public SsInit(Float:mindist)
{
register_cvar("sv_superspawns", SS_VERSION, (FCVAR_SERVER|FCVAR_SPONLY));
register_concmd("_ss_dump", "SsDump");
g_flSsMinDist = mindist;
g_vecSsOrigins = ArrayCreate(3, 1);
g_vecSsSpawns = ArrayCreate(3, 1);
g_vecSsUsed = ArrayCreate(3, 1);
}
stock SsClean()
{
g_flSsMinDist = 0.0;
ArrayClear(g_vecSsOrigins);
ArrayClear(g_vecSsSpawns);
ArrayClear(g_vecSsUsed);
}
stock SsGetOrigin(Float:origin[3])
{
new Float:data[3], size;
new ok = 1;
while((size = ArraySize(g_vecSsOrigins)))
{
new idx = random_num(0, size - 1);
ArrayGetArray(g_vecSsOrigins, idx, origin);
new used = ArraySize(g_vecSsUsed);
for(new i = 0; i < used; i++)
{
ok = 0;
ArrayGetArray(g_vecSsUsed, i, data);
if(get_distance_f(data, origin) >= g_flSsMinDist)
{
ok = 1;
break;
}
}
ArrayDeleteItem(g_vecSsOrigins, idx);
if(ok)
{
ArrayPushArray(g_vecSsUsed, origin);
return true;
}
}
return false;
}
public SsDump()
{
new Float:origin[3], Float:fOrigin[ 3 ];
new count = ArraySize(g_vecSsOrigins);
server_print("-------------------------------------------------------");
for(new i = 0; i < count; i++)
{
ArrayGetArray(g_vecSsOrigins, i, origin);
if( Get_Sky_Origin( origin, fOrigin ) )
{
ArrayPushArray( g_vecOrigins, fOrigin );
g_iOrigins++;
}
}
}
public SsScan()
{
new start, Float:origin[3], starttime;
starttime = get_systime();
for(start = 0; start < sizeof(g_szStarts); start++)
{
server_print("Searching for %s", g_szStarts[start]);
new ent;
if((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", g_szStarts[start])))
{
new counter;
pev(ent, pev_origin, origin);
ArrayPushArray(g_vecSsSpawns, origin);
while(counter < SS_MAX_LOOPS)
{
counter = GetLocation(origin, counter);
}
}
}
g_iSsTime = get_systime();
g_iSsTime -= starttime;
}
GetLocation(Float:start[3], &counter)
{
new Float:end[3];
for(new i = 0; i < 3; i++)
{
end[i] += random_float(0.0 - g_flOffsets[i], g_flOffsets[i]);
}
if(IsValid(start, end))
{
start[0] = end[0];
start[1] = end[1];
start[2] = end[2];
ArrayPushArray(g_vecSsOrigins, end);
}
counter++;
return counter;
}
IsValid(Float:start[3], Float:end[3])
{
SetFloor(end);
end[2] += 36.0;
new point = engfunc(EngFunc_PointContents, end);
if(point == CONTENTS_EMPTY)
{
if(CheckPoints(end) && CheckDistance(end) && CheckVisibility(start, end))
{
if(!trace_hull(end, HULL_LARGE, -1))
{
return true;
}
}
}
return false;
}
CheckVisibility(Float:start[3], Float:end[3])
{
new tr;
engfunc(EngFunc_TraceLine, start, end, IGNORE_GLASS, -1, tr);
return (get_tr2(tr, TR_pHit) < 0);
}
SetFloor(Float:start[3])
{
new tr, Float:end[3];
end[0] = start[0];
end[1] = start[1];
end[2] = -99999.9;
engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, -1, tr);
get_tr2(tr, TR_vecEndPos, start);
}
CheckPoints(Float:origin[3])
{
new Float:data[3], tr, point;
data[0] = origin[0];
data[1] = origin[1];
data[2] = 99999.9;
engfunc(EngFunc_TraceLine, origin, data, DONT_IGNORE_MONSTERS, -1, tr);
get_tr2(tr, TR_vecEndPos, data);
point = engfunc(EngFunc_PointContents, data);
if(point == CONTENTS_SKY && get_distance_f(origin, data) < 250.0)
{
return false;
}
data[2] = -99999.9;
engfunc(EngFunc_TraceLine, origin, data, DONT_IGNORE_MONSTERS, -1, tr);
get_tr2(tr, TR_vecEndPos, data);
point = engfunc(EngFunc_PointContents, data);
if(point < CONTENTS_SOLID)
return false;
return true;
}
CheckDistance(Float:origin[3])
{
new Float:dist, Float:data[3];
new count = ArraySize(g_vecSsSpawns);
for(new i = 0; i < count; i++)
{
ArrayGetArray(g_vecSsSpawns, i, data);
dist = get_distance_f(origin, data);
if(dist < SS_MIN_DISTANCE)
return false;
}
count = ArraySize(g_vecSsOrigins);
for(new i = 0; i < count; i++)
{
ArrayGetArray(g_vecSsOrigins, i, data);
dist = get_distance_f(origin, data);
if(dist < SS_MIN_DISTANCE)
return false;
}
return true;
}
/*====================================
=============Super Spawns============*/
|
|