Code:
Code:
...
enum _:PowerInfo
{
iTime,
szName[32],
szModel[32],
iColor[3]
}
...
/* Natives */
public plugin_natives()
{
register_native("register_powerup","native_register_powerup", 0)
//native register_powerup(iTime, szName[], szModel[], iColor[3]) (from .inc)
}
public native_register_powerup( iPlugin, iParams )
{
if(iParams != 4)
{
log_amx("Power Up: Registration failed (parameters, item: %d).", g_iTotalPowers+1)
return PLUGIN_HANDLED
}
else if(g_iTotalPowers >= MAX_POWERUPS)
{
log_amx("Power Up: Maximum reached (%d).", MAX_POWERUPS)
return PLUGIN_HANDLED
}
new regInfo[PowerInfo], iTempColor[3], iNum, szTempName[32], szTempModel[32]
iNum = get_param(1)
server_print("Time: %i", iNum)
get_string(2, szTempName, charsmax(szTempName))
get_string(3, szTempModel, charsmax(szTempModel))
// get_string( 2, regInfo[ szName ], charsmax( regInfo[ szName ] ) )
// get_string( 3, regInfo[ szModel ], charsmax( regInfo[ szModel ] ) )
if(!file_exists(szTempModel))
{
log_amx("Power Up: Registration failed (no model found: %s).", szTempModel)
return PLUGIN_HANDLED
}
else server_print("model: %s", szTempModel)
get_array( 4, iTempColor, sizeof( iTempColor ) )
regInfo[ iColor ][ 0 ] = clamp( iTempColor[0], 0, 255 )
regInfo[ iColor ][ 1 ] = clamp( iTempColor[1], 0, 255 )
regInfo[ iColor ][ 2 ] = clamp( iTempColor[2], 0, 255 )
copy(regInfo[szModel], charsmax(regInfo[szModel]), szTempModel)
copy(regInfo[szName], charsmax(regInfo[szName]), szTempName)
regInfo[ iTime ] = clamp(iNum, 0, MAX_TIME )
server_print("Power Added PRE ! [Name: %s | Time: %i (orig: %i)]", regInfo[szName], regInfo[iTime], get_param(1))
ArrayPushArray( g_aPowerUps, PowerInfo:regInfo );
g_iTotalPowers++
server_print("Power Added Post ! [Name: %s | Time: %i]", regInfo[szName], regInfo[iTime])
return (g_iTotalPowers - 1)
}
...
Code is badly organized and not optimized because of all the debugging..
The problem is with regInfo[iTime] because it gets messed up. It will not containing get_param(1) value but instead some value related to regInfo[szModel].
I have changed the order of retrieving values and everytime I set regInfo[iTime]
before setting regInfo[szModel] it will get changed to a (seemingly) random value but it will always be the same. On the other hand, if I set regInfo[iTime]
after setting regInfo[szModel] it will affect the first letter of regInfo[szModel] string causing the plugin to fail because of invalid model location.
Everything else works properly. I can retrieve the iTime value later for the dynamic array, but it doestn't contain the right value.
edit: Some debug log.
Current code (which crashes the server because of invalid model)
Code:
L 04/01/2012 - 15:53:12: -------- Mapchange to de_dust2 --------
L 04/01/2012 - 15:53:12: [csdm_spawn_preset.amxx] Loaded 40 spawn points for map de_dust2.
L 04/01/2012 - 15:53:12: [csdm_main.amxx] CSDM spawn mode set to preset
L 04/01/2012 - 15:53:14: [zzPowerUps.amxx] Time: 5
L 04/01/2012 - 15:53:14: [zzPowerUps.amxx] model: models/power/speed.mdl
L 04/01/2012 - 15:53:14: [zzPowerUps.amxx] Power Added PRE ! [Name: Amazing Powerup 1 | Time: 5 (orig: 5)]
L 04/01/2012 - 15:53:14: [zzPowerUps.amxx] Power Added Post ! [Name: Amazing Powerup 1 | Time: 5]
L 04/01/2012 - 15:53:14: [zzPowerUps.amxx] invalid model: odels/power/speed.mdl <- There's actually a symbol replacing "m", but doesn't show up in log file.
L 04/01/2012 - 15:53:14: [zzPowerUps.amxx] Time: 30
L 04/01/2012 - 15:53:14: [zzPowerUps.amxx] model: models/power/invisibility.mdl
L 04/01/2012 - 15:53:14: [zzPowerUps.amxx] Power Added PRE ! [Name: Amazing Another 2 | Time: 30 (orig: 30)]
L 04/01/2012 - 15:53:14: [zzPowerUps.amxx] Power Added Post ! [Name: Amazing Another 2 | Time: 30]
L 04/01/2012 - 15:53:14: [zzPowerUps.amxx] invalid model: odels/power/invisibility.mdl
L 04/01/2012 - 15:53:14: [zzPowerUps.amxx] Time: 0
L 04/01/2012 - 15:53:14: [zzPowerUps.amxx] model: models/power/recoil.mdl
L 04/01/2012 - 15:53:14: [zzPowerUps.amxx] Power Added PRE ! [Name: Excellent Powerup 3 | Time: 0 (orig: 0)]
L 04/01/2012 - 15:53:14: [zzPowerUps.amxx] Power Added Post ! [Name: Excellent Powerup 3 | Time: 0]
L 04/01/2012 - 15:53:14: [zzPowerUps.amxx] invalid model:
If I move "regInfo[ iTime ] = clamp(iNum, 0, MAX_TIME )" line simply above the two copy functions. Doesn't cause a crash but get regInfo[iTime] value messed up.
Code:
L 04/01/2012 - 15:55:04: -------- Mapchange to de_dust2 --------
L 04/01/2012 - 15:55:05: [csdm_spawn_preset.amxx] Loaded 40 spawn points for map de_dust2.
L 04/01/2012 - 15:55:05: [csdm_main.amxx] CSDM spawn mode set to preset
L 04/01/2012 - 15:55:06: [zzPowerUps.amxx] Time: 5
L 04/01/2012 - 15:55:06: [zzPowerUps.amxx] model: models/power/speed.mdl
L 04/01/2012 - 15:55:06: [zzPowerUps.amxx] Power Added PRE ! [Name: Amazing Powerup 1 | Time: 109 (orig: 5)]
L 04/01/2012 - 15:55:06: [zzPowerUps.amxx] Power Added Post ! [Name: Amazing Powerup 1 | Time: 109]
L 04/01/2012 - 15:55:06: [zzPowerUps.amxx] model: models/power/speed.mdl
L 04/01/2012 - 15:55:06: [zzPowerUps.amxx] Time: 30
L 04/01/2012 - 15:55:06: [zzPowerUps.amxx] model: models/power/invisibility.mdl
L 04/01/2012 - 15:55:06: [zzPowerUps.amxx] Power Added PRE ! [Name: Amazing Another 2 | Time: 109 (orig: 30)]
L 04/01/2012 - 15:55:06: [zzPowerUps.amxx] Power Added Post ! [Name: Amazing Another 2 | Time: 109]
L 04/01/2012 - 15:55:06: [zzPowerUps.amxx] model: models/power/invisibility.mdl
L 04/01/2012 - 15:55:06: [zzPowerUps.amxx] Time: 0
L 04/01/2012 - 15:55:06: [zzPowerUps.amxx] model: models/power/recoil.mdl
L 04/01/2012 - 15:55:06: [zzPowerUps.amxx] Power Added PRE ! [Name: Excellent Powerup 3 | Time: 109 (orig: 0)]
L 04/01/2012 - 15:55:06: [zzPowerUps.amxx] Power Added Post ! [Name: Excellent Powerup 3 | Time: 109]
L 04/01/2012 - 15:55:06: [zzPowerUps.amxx] model: models/power/recoil.mdl