Z tego co zauważyłem gangi (które lekko przerobiłem) nie ładują się poprawnie. Wygląda to tak że co prawda się zapisują, ale po zmianie mapy wszystkie umiejętności są ustawione na 0.
Ustawiłem w pliku zapisującym gangi jakieś losowe wartości, wszedłem na serwer i od razu po włączeniu serwera i rozpoczęciu się mapy znowu wszystko było na 0 (tak samo w pliku).
Pomoże ktoś znaleźć błąd w tej funkcji ?
Spoiler
public LoadGangs()
{
new szConfigsDir[ 60 ];
get_configsdir( szConfigsDir, charsmax( szConfigsDir ) );
add( szConfigsDir, charsmax( szConfigsDir ), "/zpKlans.ini" );
new iFile = fopen( szConfigsDir, "r+t" );
new aData[ GangInfo ];
new szBuffer[ 512 ], szData[ 6 ], szValue[ 6 ], i, iCurGang;
while( !feof( iFile ) )
{
fgets( iFile, szBuffer, charsmax( szBuffer ) );
trim( szBuffer );
remove_quotes( szBuffer );
if( !szBuffer[ 0 ] || szBuffer[ 0 ] == ';' )
{
continue;
}
if( szBuffer[ 0 ] == '[' && szBuffer[ strlen( szBuffer ) - 1 ] == ']' )
{
copy( aData[ GangName ], strlen( szBuffer ) - 2, szBuffer[ 1 ] );
aData[ GangGold ] = 0;
aData[ GangHP ] = 0;
aData[ GangStamina ] = 0;
aData[ GangDamage ] = 0;
aData[ GangArmor ] = 0;
aData[ GangExp ] = 0;
aData[ GangKills ] = 0;
aData[ NumMembers ] = 0;
aData[ GangMembers ] = _:TrieCreate();
if( TrieKeyExists( g_tGangNames, aData[ GangName ] ) )
{
new szError[ 256 ];
formatex( szError, charsmax( szError ), "[ZP] Klan already exists: %s", aData[ GangName ] );
set_fail_state( szError );
}
ArrayPushArray( g_aGangs, aData );
TrieSetCell( g_tGangNames, aData[ GangName ], iCurGang );
log_amx( "Klan Created: %s", aData[ GangName ] );
iCurGang++;
continue;
}
strtok( szBuffer, szData, 31, szValue, 511, '=' );
trim( szData );
trim( szValue );
if( TrieGetCell( g_tGangValues, szData, i ) )
{
ArrayGetArray( g_aGangs, iCurGang - 1, aData );
switch( i )
{
case VALUE_GOLD:
aData[ GangGold ] = str_to_num( szValue );
case VALUE_HP:
aData[ GangHP ] = str_to_num( szValue );
case VALUE_STAMINA:
aData[ GangStamina ] = str_to_num( szValue );
case VALUE_DAMAGE:
aData[ GangDamage ] = str_to_num( szValue );
case VALUE_ARMOR:
aData[ GangArmor ] = str_to_num( szValue );
case VALUE_EXP:
aData[ GangExp ] = str_to_num( szValue );
case VALUE_KILLS:
aData[ GangKills ] = str_to_num( szValue );
}
ArraySetArray( g_aGangs, iCurGang - 1, aData );
}
}
new Array:aSQL;
sqlv_read_all_ex( g_hVault, aSQL );
new aVaultData[ SQLVaultEntryEx ];
new iGang;
for( i = 0; i < ArraySize( aSQL ); i++ )
{
ArrayGetArray( aSQL, i, aVaultData );
if( TrieGetCell( g_tGangNames, aVaultData[ SQLVEx_Key2 ], iGang ) )
{
ArrayGetArray( g_aGangs, iGang, aData );
TrieSetCell( aData[ GangMembers ], aVaultData[ SQLVEx_Key1 ], str_to_num( aVaultData[ SQLVEx_Data ] ) );
aData[ NumMembers ]++;
ArraySetArray( g_aGangs, iGang, aData );
}
}
fclose( iFile );
}


Dodatki SourceMod












