Opis problema*: Kad god igrac proda/kupuje imovinu debug izbacuje "Attempted to read/write array element at negative index -1", takodje kad se jednom proda imovina igracu, ne moze vise da se proda drzavi, izbacuje
if(GlobalImovinaIgracu) return SendErrorMessage(playerid, "Ne mozes prodati firmu dok je u procesu prodaja igracu!");Pokušaj rešavanja*: Pokusao sam da nadjem po samp forumima i drugim forumima kako da resim ali mi nije bas najjasnije jer je uvek nesto drugo u pitanju
Deo programskog koda*:
else if(dialogid == dialog_PROPSELLDRZAVA )
{
if( response )
{
if( PlayerInfo[ playerid ][ xBRacun ] < 0 ) return SendErrorMessage( playerid, "Ne mozes da prodas imovinu dok ne izadjes iz minusa u banci." );
new id = ChosenProperty[ playerid ];
if( GetNearestProperty( playerid ) != id ) return SendErrorMessage( playerid, "Niste pored svoje imovine!" );
if( strcmp( ImeIgraca( playerid ), II[ GetNearestProperty( playerid ) ][ iOwner ], true) == 0 )
{
WriteLog("log-sell", "Igrac %s je prodao imovinu ID %d na buy", ImeIgraca( playerid ), id);
strmid( II[ GetNearestProperty( playerid ) ][ iOwner ], "Drzava", 0, strlen( "Drzava" ), 32);
DajIgracuNovac( playerid, (II[ GetNearestProperty( playerid ) ][ iPrice ]/2) );
II[ GetNearestProperty( playerid ) ][ iNeaktivnost ] = 0;
II[ GetNearestProperty( playerid ) ][ iOwned ] = 0;
II[ GetNearestProperty( playerid ) ][ iOnAuction ] = false;
II[ GetNearestProperty(playerid) ][ iOwnerSQLID ] = -1;
PlayerPlaySound( playerid, 1058, 0, 0, 0 );
PropertyRefresh( GetNearestProperty( playerid ) );
SaveProperty( GetNearestProperty( playerid ) );
if( PlayerInfo[ playerid ][ xProperty ][ 0 ] == id )
{
PlayerInfo[ playerid ][ xProperty ][ 0 ] = -1;
PlayerInfo[ playerid ][ xPropertySqlID ][ 0 ] = 0;
sql_user_update_integer( playerid, "property_id_1", PlayerInfo[ playerid ][ xPropertySqlID ][ 0 ] );
}
else if( PlayerInfo[ playerid ][ xProperty ][ 1 ] == id )
{
PlayerInfo[ playerid ][ xProperty ][ 1 ] = -1;
PlayerInfo[ playerid ][ xPropertySqlID ][ 1 ] = 0;
sql_user_update_integer( playerid, "property_id_2", PlayerInfo[ playerid ][ xPropertySqlID ][ 1 ] );
}
else if( PlayerInfo[ playerid ][ xProperty ][ 2 ] == id )
{
PlayerInfo[ playerid ][ xProperty ][ 2 ] = -1;
PlayerInfo[ playerid ][ xPropertySqlID ][ 2 ] = 0;
sql_user_update_integer( playerid, "property_id_3", PlayerInfo[ playerid ][ xPropertySqlID ][ 2 ] );
}
}
else SendErrorMessage( playerid, "Ovo nije vase." );
}
if( !response )
{
SendClientMessage( playerid, CRVENA, "(IMOVINA): Odustali ste od prodaje imovine drzavi." );
}
}
else if(dialogid == dialog_PROPSELLTP )
{
if( !response ) return 1;
if( response )
{
if( PlayerInfo[ playerid ][ xBRacun ] < 0 ) return SendErrorMessage( playerid, "Ne mozes da prodas imovinu dok ne izadjes iz minusa u banci." );
new id = ChosenProperty[ playerid ], idigraca, cena, string[ 128 ], Float:Pos[ 3 ];
if( sscanf( inputtext, "ui", idigraca, cena ) ) return ShowPlayerDialog( playerid, dialog_PROPSELLTP, DIALOG_STYLE_INPUT, D_NASLOV, "{FFFFFF}* U prazni prostor ispod unesite ID igraca i cenu imovina:", "Ponudi", "Odustani" );
GetPlayerPos( idigraca, Pos[ 0 ], Pos[ 1 ], Pos[ 2 ] );
if( !IsPlayerInRangeOfPoint( playerid, 3.0, Pos[ 0 ], Pos[ 1 ], Pos[ 2 ] ) ) return SendErrorMessage( playerid, "Igrac nije blizu vas");
if( cena < 1 ) return SendErrorMessage( playerid, "Cena ne moze biti manja od 1$!");
if( idigraca == IPI ) return SendErrorMessage( playerid, "Pogresan ID." );
if( idigraca == playerid ) return SendErrorMessage( playerid, "Ne mozes sam sebi prodati kucu!");
if( PlayerInfo[ idigraca ][ xProperty ][ 0 ] != -1 && PlayerInfo[ idigraca ][ xProperty ][ 1 ] != -1 && PlayerInfo[ idigraca ][ xProperty ][ 2 ] != -1 ) return SendErrorMessage( playerid, "Igrac vec ima 3 imovine!");
if( PlayerInfo[ idigraca ][ xLevel ] < II[ id ][ iLevel ] ) return SCMF( playerid, CRVENA, "(IMOVINA): Da bi ste tom igracu prodali ovu imovinu, on mora biti level {FFFFFF}(%d+).", II[ id ][ iLevel ] );
SCMF( playerid, 0x33CCFFFF, "(IMOVINA): Ponudili ste igracu {FFFFFF}%s {33CCFF}imovinu po ceni od {FFFFFF}($%d).", ImeIgraca( idigraca ), cena );
GlobalProdaja[ idigraca ] = playerid;
GlobalCena[ idigraca ] = cena;
GlobalID[ idigraca ] = id;
GlobalImovinaIgracu = true;
format( string, sizeof( string ), "{FFFFFF}* Igrac %s vam je ponudio da kupite njegovu imovinu za $%d.", ImeIgraca( playerid ), cena );
ShowPlayerDialog( idigraca, dialog_ACCEPTPROP, DIALOG_STYLE_MSGBOX, D_NASLOV, string, "Prihvati", "Odbij" );
}
}
else if(dialogid == dialog_ACCEPTPROP)
{
if( response )
{
new id = GlobalID[ playerid ];
if( PlayerInfo[ playerid ][ xNovac ] < GlobalCena[ playerid ] ) return SendErrorMessage( playerid, "Nemate dovoljno novca.");
if( PlayerInfo[ GlobalProdaja[ playerid ] ][ xProperty ][ 0 ] == id )
{
PlayerInfo[ GlobalProdaja[ playerid ] ][ xProperty ][ 0 ] = -1;
PlayerInfo[ GlobalProdaja[ playerid ] ][ xPropertySqlID ][ 0 ] = 0;
}
else if( PlayerInfo[ GlobalProdaja[ playerid ] ][ xProperty ][ 1 ] == id )
{
PlayerInfo[ GlobalProdaja[ playerid ] ][ xProperty ][ 1 ] = -1;
PlayerInfo[ GlobalProdaja[ playerid ] ][ xPropertySqlID ][ 1 ] = 0;
}
else if( PlayerInfo[ GlobalProdaja[ playerid ] ][ xProperty ][ 2 ] == id )
{
PlayerInfo[ GlobalProdaja[ playerid ] ][ xProperty ][ 2 ] = -1;
PlayerInfo[ GlobalProdaja[ playerid ] ][ xPropertySqlID ][ 2 ] = 0;
}
if( PlayerInfo[ playerid ][ xProperty ][ 0 ] == -1 )
{
PlayerInfo[ playerid ][ xProperty ][ 0 ] = id;
PlayerInfo[ playerid ][ xPropertySqlID ][ 0 ] = II;
}
else if( PlayerInfo[ playerid ][ xProperty ][ 1 ] == -1 )
{
PlayerInfo[ playerid ][ xProperty ][ 1 ] = id;
PlayerInfo[ playerid ][ xPropertySqlID ][ 1 ] = II;
}
else if( PlayerInfo[ playerid ][ xProperty ][ 2 ] == -1 )
{
PlayerInfo[ playerid ][ xProperty ][ 2 ] = id;
PlayerInfo[ playerid ][ xPropertySqlID ][ 2 ] = II;
}
WriteLog("log-sell", "Igrac %s je prodao imovinu ID %d igracu %s za %d", ImeIgraca( GlobalProdaja[ playerid ] ), id, ImeIgraca( playerid ), GlobalCena[ playerid ]);
SCMF( playerid, 0x33CCFFFF, "(IMOVINA): Uspesno ste kupili imovinu od igraca {FFFFFF}%s {33CCFF}za {FFFFFF}($%d).", ImeIgraca( GlobalProdaja[ playerid ] ), GlobalCena[ playerid ] );
strmid( II[ id ][ iOwner ], ImeIgraca( playerid ), 0, strlen( ImeIgraca( playerid ) ), 255);
II[ id ][ iOwnerSQLID ] = PlayerInfo;
SaveProperty( id );
PropertyRefresh( id );
sql_user_update_property( playerid );
sql_user_update_property( GlobalProdaja[ playerid ] );
SCMF( GlobalProdaja[ playerid ], ZUTA, "(IMOVINA): Prodali ste kucu igracu {FFFFFF}%s {33CCFF}za {FFFFFF}($%d).", ImeIgraca( playerid ), GlobalCena[ playerid ] );
SendClientMessage( playerid, ZUTA, "(IMOVINA): Kupili ste kucu." );
DajIgracuNovac( GlobalProdaja[ playerid ], GlobalCena[ playerid ] );
DajIgracuNovac( playerid, -GlobalCena[ playerid ] );
GlobalProdaja[ playerid ] = -1;
GlobalCena[ playerid ] = -1;
GlobalID[ playerid ] = -1;
GlobalImovinaIgracu[GlobalProdaja] = false;
GlobalImovinaIgracu = false;
}
else if( !response )
{
SCMF( GlobalProdaja[ playerid ], ZUTA, "(IMOVINA): Igrac {FFFFFF}%s {DABB3E}je odbio vasu ponudu za kupovinu imovine.", ImeIgraca( playerid ) );
SendClientMessage( playerid, ZUTA, "(IMOVINA): Odbili ste ponudu.");
GlobalProdaja[ playerid ] = -1;
GlobalCena[ playerid ] = -1;
GlobalID[ playerid ] = -1;
}
}
else if(dialogid == dialog_ACCEPTVEH )
{
if( response )
{
new seller = GlobalProdaja[ playerid ],
autoid = GlobalID[ playerid ];
if( seller == IPI ) return SendErrorMessage( playerid, "Taj igrac je offline.");
if( carspawntimer == 1 ) return SCMF( playerid, ANTICHEAT, "(ANTICHEAT): Neko je spawnao/parkirao vozilo pre vas. Pokusajte za 3 sekunde. (Anticrash)");
new slot = -1;
for( new j = 0; j < MAX_VEH_SLOT; j ++ )
{
if( player_veh[ seller ][ vehicle_id ][ j ] != -1 && player_veh[ seller ][ vehicle_id ][ j ] == autoid )
{
slot = j;
break;
}
}
if( slot == -1 ) return SendErrorMessage( playerid, "To vozilo nije u vlasnistvu igraca koji vam ga je ponudio!");
if( !IsPlayerNearPlayer( 5.0, playerid, seller ) ) return SendErrorMessage( playerid, "Niste blizu igraca koji vam zeli prodati vozilo.");
if( PlayerInfo[ playerid ][ xNovac ] < GlobalCena[ playerid ] ) return SendErrorMessage( playerid, "Nemate dovoljno novca da kupite vozilo.");
if( !IsPlayerConnected( seller ) )
{
SendErrorMessage( playerid, "Taj igrac je offline.");
GlobalProdaja[ playerid ] = -1;
GlobalCena[ playerid ] = -1;
GlobalID[ playerid ] = -1;
return 1;
}
slot = -1;
for( new j = 0; j < MAX_VEH_SLOT; j ++ )
{
if( (j+1) <= PlayerInfo[ playerid ][ xSlotoviVozila ] && player_veh[ playerid ][ vehicle_id ][ j ] == -1 )
{
slot = j;
break;
}
}
if( slot == -1 ) return SendErrorMessage( playerid, "Svi slotovi vozila su vam zauzeti." );
strmid( VehicleInfo[ autoid ][ vOwner ], ImeIgraca( playerid ), 0, strlen( ImeIgraca( playerid ) ), 24);
VehicleInfo[ autoid ][ vOwner_sqlID ] = PlayerInfo[ playerid ][ xID ];
VehicleInfo[ autoid ][ v_owner_id ] = playerid;
new q[ 128 ];
mysql_format( mSQL, q, sizeof(q), "UPDATE `vehicles` SET `owner_sqlID` = '%d' WHERE `veh_id` = '%d' LIMIT 1",
VehicleInfo[ autoid ][ vOwner_sqlID ],
VehicleInfo[ autoid ][ vSqlID ] );
mysql_tquery( mSQL, q );
for( new j = 0; j < MAX_VEH_SLOT; j ++ )
{
if( player_veh[ seller ][ vehicle_id ][ j ] == autoid )
{
player_veh[ seller ][ vehicle_id ][ j ] = -1;
break;
}
}
for( new j = 0; j < MAX_VEH_SLOT; j ++ )
{
if( (j+1) <= PlayerInfo[ playerid ][ xSlotoviVozila ] && player_veh[ playerid ][ vehicle_id ][ j ] == -1 )
{
player_veh[ playerid ][ vehicle_id ][ j ] = autoid;
break;
}
}
WriteLog("log-sell", "Igrac %s je prodao vozilo %s igracu %s za %d", ImeIgraca( seller ), GetVehicleNameEx( VehicleInfo[ autoid ][ vModel ] ), ImeIgraca( playerid ), GlobalCena[ playerid ]);
DajIgracuNovac( seller, GlobalCena[ playerid ] );
RemovePlayerFromVehicle( seller );
DajIgracuNovac( playerid, -GlobalCena[ playerid ] );
SendClientMessage( playerid, ZUTA, "(Vozilo): Uspesno ste kupili vozilo." );
SendClientMessage( seller, ZUTA, "(Vozilo): Uspesno ste prodali vozilo." );
carspawntimer = 1;
SetTimer_("AntiSpawnCrash", 3000, 3000, 1);
GlobalProdaja[ playerid ] = -1;
GlobalCena[ playerid ] = -1;
GlobalID[ playerid ] = -1;
GlobalImovinaIgracu[GlobalProdaja] = false;
GlobalImovinaIgracu[GlobalProdaja] = false;
}
else if( !response )
{
SCMF( GlobalProdaja[ playerid ], ZUTA, "(Vozilo): Igrac {FFFFFF}%s {DABB3E}je odbio vasu ponudu za kupovinu vozla.", ImeIgraca( playerid ) );
SendClientMessage( playerid, ZUTA, "(Vozilo): Odbili ste ponudu.");
GlobalProdaja[ playerid ] = -1;
GlobalCena[ playerid ] = -1;
GlobalID[ playerid ] = -1;
}
}
else if(dialogid == dialog_VEHSELLDRZAVI )
{
if( !response ) return 1;
if( response )
{
new vehicleid = ChosenVehicle[ playerid ];
if( !IsPlayerInVehicle( playerid, vehicleid ) ) return SendErrorMessage( playerid, "Morate biti u svom vozilu!");
WriteLog("log-sell", "Igrac %s je prodao vozilo %s na aukciju", ImeIgraca( playerid ), GetVehicleNameEx( VehicleInfo[ vehicleid ][ vModel ] ));
DajIgracuNovac( playerid, VehicleInfo[ vehicleid ][ vPrice ]/2 );
SCMF( playerid, ZUTA, "(Vozilo): Dobili ste {FFFFFF}($%d) {DABB3E}za ovo vozilo.", VehicleInfo[ vehicleid ][ vPrice ]/2 );
for( new j = 0; j < MAX_VEH_SLOT; j ++ )
{
if( player_veh[ playerid ][ vehicle_id ][ j ] == vehicleid )
{
player_veh[ playerid ][ vehicle_id ][ j ] = -1;
break;
}
}
sql_vehicles_delete( vehicleid );
ResetVehicle( vehicleid );
SMG_DestroyVehicle( vehicleid );
SendClientMessage( playerid, ZUTA, "(Vozilo): Vase vozilo je uspesno prodano otpadu.");
}
}
else if(dialogid == dialog_VEHSELLTP )
{
if( !response ) return 1;
if( response )
{
new idigraca, string[ 128 ],
cena,
autoid = ChosenVehicle[ playerid ];
if( sscanf( inputtext, "ui", idigraca, cena ) ) return ShowPlayerDialog( playerid, dialog_VEHSELLTP, DIALOG_STYLE_INPUT, D_NASLOV, "{FFFFFF}* Unesite id igraca kome zelite da prodate vozilo i cenu.\nPrimer: 145 12003", "Potvrdi", "Odustani" );
if( !IsPlayerConnected( idigraca ) || idigraca == IPI ) return SendErrorMessage( playerid, "Nevaljan ID igraca.");
if( !IsPlayerNearPlayer( 5.0, playerid, idigraca ) ) return SendErrorMessage( playerid, "Taj igrac nije blizu vas !");
if( idigraca == playerid ) return SendErrorMessage( playerid, "Ne mozes sam sebi prodati vozilo!");
new slot = -1;
for( new j = 0; j < MAX_VEH_SLOT; j ++ )
{
if( (j+1) <= PlayerInfo[ playerid ][ xSlotoviVozila ] && player_veh[ playerid ][ vehicle_id ][ j ] != -1 && player_veh[ playerid ][ vehicle_id ][ j ] == autoid )
{
slot = j;
break;
}
}
if( slot == -1 ) return SendErrorMessage( playerid, "Ovo vozilo nije u vasem vlasnistvu." );
slot = -1;
for( new j = 0; j < MAX_VEH_SLOT; j ++ )
{
if( (j+1) <= PlayerInfo[ idigraca ][ xSlotoviVozila ] && player_veh[ idigraca ][ vehicle_id ][ j ] == -1 )
{
slot = j;
break;
}
}
if( slot == -1 ) return SendErrorMessage( playerid, "Svi slotovi vozila izabranog igraca su zauzeti." );
if( cena < ( VehicleInfo[ autoid ][ vPrice ]/2 ) ) return SendErrorMessage( playerid, "Cena mora biti veca od polovine kupljene.");
if( !IsVehicleBajs( autoid ) ) {
if( PlayerInfo[ idigraca ][ xLevel ] < 3 ) return SendErrorMessage( playerid, "Igrac mora biti level 3+ da bi ste mu prodali vozilo." );
}
SCMF( playerid, ZUTA, "(Vozilo): Ponudili ste igracu {FFFFFF}%s {DABB3E}vozilo po ceni od {FFFFFF}($%d).", ImeIgraca( idigraca ), cena );
GlobalProdaja[ idigraca ] = playerid;
GlobalCena[ idigraca ] = cena;
GlobalID[ idigraca ] = autoid;
GlobalImovinaIgracu = true;
format( string, sizeof( string ), "{FFFFFF}* Igrac %s vam je ponudio da kupite njegovo vozilo marke %s za $%d.", ImeIgraca( playerid ), GetVehicleNameEx( VehicleInfo[ autoid ][ vModel ] ), cena );
ShowPlayerDialog( idigraca, dialog_ACCEPTVEH, DIALOG_STYLE_MSGBOX, D_NASLOV, string, "Prihvati", "Odbij" );
}
}
