foreach(new i : EVM){
format(gh, sizeof(gh), "iterator: %d", i);
SendClientMessage(playerid, EVMCOLOR_RED, gh);
Iter_Remove(EVM, i);
}
Code 1:
foreach(new I : EVM)
print(i);
Result:
Iterator: 0
Iterator: 1
Iterator: 2
Iterator: 3
Iterator: 4
Iterator: 5
Code 2:
foreach(new I : EVM){
print(i);
Iter_Remove(i);
}
Result:
sometimes it shows random numbers
Iterator: 26(The first iterator appears here)
Iterator: 0(always shows 0)
Iterator -33161(always shows this number)
some other times the server just crashes
|
Have you tried this?
|
foreach(new i : EVM){
printf("Iterator: %d", i);
new cur = evmID;
Iter_SafeRemove(EVM, cur, evmID);
}
Iterator: 7
Iterator: 0
Iterator: -39800
foreach(new i : EVM)
DeleteEVM(i);
DeleteEVM(evmID){
EVMInfo[evmID][e_evmName][0] = EOS;
EVMInfo[evmID][e_evmPosX] = 0;
EVMInfo[evmID][e_evmPosY] = 0;
EVMInfo[evmID][e_evmPosZ] = 0;
EVMInfo[evmID][e_evmRotX] = 0;
EVMInfo[evmID][e_evmRotY] = 0;
EVMInfo[evmID][e_evmRotZ] = 0;
EVMInfo[evmID][e_evmIsBlocked] = true;
DestroyDynamicObject(EVMInfo[evmID][e_evmObj]);
DestroyDynamic3DTextLabel(EVMInfo[evmID][e_evmLabel]);
new cur = evmID;
Iter_SafeRemove(EVM, cur, evmID);
}
foreach(new i : EVM){
DeleteEVM(i);
new cur = i;
Iter_SafeRemove(EVM, cur, i);
}
DeleteEVM(evmID){
EVMInfo[evmID][e_evmName][0] = EOS;
EVMInfo[evmID][e_evmPosX] = 0;
EVMInfo[evmID][e_evmPosY] = 0;
EVMInfo[evmID][e_evmPosZ] = 0;
EVMInfo[evmID][e_evmRotX] = 0;
EVMInfo[evmID][e_evmRotY] = 0;
EVMInfo[evmID][e_evmRotZ] = 0;
EVMInfo[evmID][e_evmIsBlocked] = true;
DestroyDynamicObject(EVMInfo[evmID][e_evmObj]);
DestroyDynamic3DTextLabel(EVMInfo[evmID][e_evmLabel]);
}
|
Since you're "deleting" all EVMs, simply use Iter_Clear(EVM); after the foreach loop (removing the need of Iter_Remove/Iter_SafeRemove - Iter_Remove cannot be used within a loop that uses the self iterator btw).
|