Проблема с удалением.
#1

Доброе утро уважаемые скриптеры.
Вообщем у меня есть система машин , загружается все нормально , когда онлайн 40 , машины еще не путаются , а вот когда онлайн с выше 50 - 100 , начинается путаница удаления , удаляются машины игроков , которые на сервере , при том что выходит со всем другой игрок.
Вот удаление машин при выходе.

PHP код:
    if(PI[playerid][cCarId][0] != INVALID_VEHICLE_ID)
    {
        
DestroyDynamic3DTextLabel(VehicleLabel[PI[playerid][cCarId][0]]);
        
DestroyVehicle(PI[playerid][cCarId][0]);
        
PI[playerid][cCarId][0] = INVALID_VEHICLE_ID;
    }
    if(
PI[playerid][cCarId][1] != INVALID_VEHICLE_ID)
    {
        
DestroyDynamic3DTextLabel(VehicleLabel[PI[playerid][cCarId][1]]);
        
DestroyVehicle(PI[playerid][cCarId][1]);
        
PI[playerid][cCarId][1] = INVALID_VEHICLE_ID;
    }
    if(
PI[playerid][cCarId][2] != INVALID_VEHICLE_ID)
    {
        
DestroyDynamic3DTextLabel(VehicleLabel[PI[playerid][cCarId][2]]);
        
DestroyVehicle(PI[playerid][cCarId][2]);
        
PI[playerid][cCarId][2] = INVALID_VEHICLE_ID;
    } 
Reply
#2

Создание покажи и скажи сколько машин на сервере.
Reply
#3

PHP код:
stock LoadMyCar(playerid)
{
    new 
count_car[MAX_PLAYERS] = 0;
    for(new 
i3i++)
    {
        if(
PI[playerid][cModel][i] > && PI[playerid][cX][i] == && PI[playerid][cY][i] == && PI[playerid][cZ][i] == 0count_car[playerid]++;
    }
    if(
count_car[playerid] > 0)
    {
        
SendClientMessage(playeridCOLOR_ORANGE"Один из Ваших автомобилей не был припаркован после выхода с сервера, и поэтому он был заспавнен на парковке у Анашана");
        
SendClientMessage(playeridCOLOR_ORANGE"Найдите его на карте с помощью (/findcar) и припаркуйте (/park)");
    }
    if(
PI[playerid][cModel][0] > 0)
    {
        if(
PI[playerid][cCarId][0] != INVALID_VEHICLE_ID)
        {
            
DestroyDynamic3DTextLabel(VehicleLabel[PI[playerid][cCarId][0]]);
            
DestroyVehicle(PI[playerid][cCarId][0]);
            
PI[playerid][cCarId][0] = INVALID_VEHICLE_ID;
        }
        if(
PI[playerid][cX][0] == && PI[playerid][cY][0] == && PI[playerid][cZ][0] == 0)
        {
            new 
random(sizeof(SalonRandSpawn));
            
PI[playerid][cCarId][0] = CreateVehicle(PI[playerid][cModel][0], SalonRandSpawn[r][0], SalonRandSpawn[r][1], SalonRandSpawn[r][2], SalonRandSpawn[r][3], PI[playerid][cColor1][0], PI[playerid][cColor1][1], 90000);
            
TuneCar(playerid);
        }
        else
        {
            
PI[playerid][cCarId][0] = CreateVehicle(PI[playerid][cModel][0], PI[playerid][cX][0], PI[playerid][cY][0], PI[playerid][cZ][0], PI[playerid][cFa][0], PI[playerid][cColor1][0], PI[playerid][cColor1][1], 90000);
            
TuneCar(playerid);
        }
        
PI[playerid][cLock][0] = 1;
        
CarDoors(PI[playerid][cCarId][0], PI[playerid][cLock][0]);
        
Fuel[PI[playerid][cCarId][0]] = PI[playerid][cFuel][0];
        
SetVehicleHealth(PI[playerid][cCarId][0], 1000);
        
Engine[PI[playerid][cCarId][0]] = false;
        
Lights[PI[playerid][cCarId][0]] = false;
        switch(
PI[playerid][cLock][0])
        {
        case 
0IsLocked[PI[playerid][cCarId][0]] = false;
        case 
1IsLocked[PI[playerid][cCarId][0]] = true;
        }
    
        if(
strcmp(PI[playerid][cNumber1],"Транзит",true,64) != 0)
        {
            
format(totalstring,220,"%s",PI[playerid][cNumber1]);
            
VehicleLabel[PI[playerid][cCarId][0]] = CreateDynamic3DTextLabel(totalstring0xFFFFFFFF00040.0,INVALID_PLAYER_IDPI[playerid][cCarId][0], 1);
            
//Attach3DTextLabelToVehicle(VehicleLabel[PI[playerid][cCarId]], PI[playerid][cCarId], 0, 0, 0.1);
        
}
        else
        {
            
VehicleLabel[PI[playerid][cCarId][0]] = CreateDynamic3DTextLabel("Транзит"0xFFFFFFFF00040.0,INVALID_PLAYER_IDPI[playerid][cCarId][0], 1);
            
//Attach3DTextLabelToVehicle(VehicleLabel[PI[playerid][cCarId]], PI[playerid][cCarId], 0, 0, 0.1);
        
}
    }
    if(
PI[playerid][cModel][1] > 0)
    {
        if(
PI[playerid][cCarId][1] != INVALID_VEHICLE_ID)
        {
            
DestroyDynamic3DTextLabel(VehicleLabel[PI[playerid][cCarId][1]]);
            
DestroyVehicle(PI[playerid][cCarId][1]);
            
PI[playerid][cCarId][1] = INVALID_VEHICLE_ID;
        }
        if(
PI[playerid][cX][1] == && PI[playerid][cY][1] == && PI[playerid][cZ][1] == 0)
        {
            new 
random(sizeof(SalonRandSpawn));
            
PI[playerid][cCarId][1] = CreateVehicle(PI[playerid][cModel][1], SalonRandSpawn[r][0], SalonRandSpawn[r][1], SalonRandSpawn[r][2], SalonRandSpawn[r][3], PI[playerid][cColor2][0], PI[playerid][cColor2][1], 90000);
        }
        else
        {
            
PI[playerid][cCarId][1] = CreateVehicle(PI[playerid][cModel][1], PI[playerid][cX][1], PI[playerid][cY][1], PI[playerid][cZ][1], PI[playerid][cFa][1], PI[playerid][cColor2][0], PI[playerid][cColor2][1], 90000);
        }
        
PI[playerid][cLock][1] = 1;
        
CarDoors(PI[playerid][cCarId][1], PI[playerid][cLock][1]);
        
Fuel[PI[playerid][cCarId][1]] = PI[playerid][cFuel][1];
        
SetVehicleHealth(PI[playerid][cCarId][1], 1000);
        
Engine[PI[playerid][cCarId][1]] = false;
        
Lights[PI[playerid][cCarId][1]] = false;
        switch(
PI[playerid][cLock][1])
        {
        case 
0IsLocked[PI[playerid][cCarId][1]] = false;
        case 
1IsLocked[PI[playerid][cCarId][1]] = true;
        }
        if(
strcmp(PI[playerid][cNumber2],"Транзит",true,64) != 0)
        {
            
format(totalstring,220,"%s",PI[playerid][cNumber2]);
            
VehicleLabel[PI[playerid][cCarId][1]] = CreateDynamic3DTextLabel(totalstring0xFFFFFFFF00040.0,INVALID_PLAYER_IDPI[playerid][cCarId][1], 1);
            
//Attach3DTextLabelToVehicle(VehicleLabel[PI[playerid][cCarId]], PI[playerid][cCarId], 0, 0, 0.1);
        
}
        else
        {
            
VehicleLabel[PI[playerid][cCarId][1]] = CreateDynamic3DTextLabel("Транзит"0xFFFFFFFF00040.0,INVALID_PLAYER_IDPI[playerid][cCarId][1], 1);
            
//Attach3DTextLabelToVehicle(VehicleLabel[PI[playerid][cCarId]], PI[playerid][cCarId], 0, 0, 0.1);
        
}
    }
    if(
PI[playerid][cModel][2] > 0)
    {
        if(
PI[playerid][cCarId][2] != INVALID_VEHICLE_ID)
        {
            
DestroyDynamic3DTextLabel(VehicleLabel[PI[playerid][cCarId][2]]);
            
DestroyVehicle(PI[playerid][cCarId][2]);
            
PI[playerid][cCarId][2] = INVALID_VEHICLE_ID;
        }
        if(
PI[playerid][cX][2] == && PI[playerid][cY][2] == && PI[playerid][cZ][2] == 0)
        {
            new 
random(sizeof(SalonRandSpawn));
            
PI[playerid][cCarId][2] = CreateVehicle(PI[playerid][cModel][2], SalonRandSpawn[r][0], SalonRandSpawn[r][1], SalonRandSpawn[r][2], SalonRandSpawn[r][3], PI[playerid][cColor3][0], PI[playerid][cColor3][1], 90000);
            
TuneCar(playerid);
        }
        else
        {
            
PI[playerid][cCarId][2] = CreateVehicle(PI[playerid][cModel][2], PI[playerid][cX][2], PI[playerid][cY][2], PI[playerid][cZ][2], PI[playerid][cFa][2], PI[playerid][cColor3][0], PI[playerid][cColor3][1], 90000);
            
TuneCar(playerid);
        }
        
PI[playerid][cLock][2] = 1;
        
CarDoors(PI[playerid][cCarId][2], PI[playerid][cLock][2]);
        
Fuel[PI[playerid][cCarId][2]] = PI[playerid][cFuel][2];
        
SetVehicleHealth(PI[playerid][cCarId][2], 1000);
        
Engine[PI[playerid][cCarId][2]] = false;
        
Lights[PI[playerid][cCarId][2]] = false;
        switch(
PI[playerid][cLock][2])
        {
        case 
0IsLocked[PI[playerid][cCarId][2]] = false;
        case 
1IsLocked[PI[playerid][cCarId][2]] = true;
        }
    
        if(
strcmp(PI[playerid][cNumber3],"Транзит",true,64) != 0)
        {
            
format(totalstring,220,"%s",PI[playerid][cNumber3]);
            
VehicleLabel[PI[playerid][cCarId][2]] = CreateDynamic3DTextLabel(totalstring0xFFFFFFFF00040.0,INVALID_PLAYER_IDPI[playerid][cCarId][2], 1);
            
//Attach3DTextLabelToVehicle(VehicleLabel[PI[playerid][cCarId]], PI[playerid][cCarId], 0, 0, 0.1);
        
}
        else
        {
            
VehicleLabel[PI[playerid][cCarId][2]] = CreateDynamic3DTextLabel("Транзит"0xFFFFFFFF00040.0,INVALID_PLAYER_IDPI[playerid][cCarId][2], 1);
            
//Attach3DTextLabelToVehicle(VehicleLabel[PI[playerid][cCarId]], PI[playerid][cCarId], 0, 0, 0.1);
        
}
    }
    return 
true;

Вот загрузка машин.
Кол-во , ну может загружаться до 300 или 400 , так как онлайн максимальный 160 - 170 , и каждый игрок может имееть по 2 машины , а некоторые по 3.
Reply
#4

PHP код:
if(PI[playerid][cCarId][0] != INVALID_VEHICLE_ID
        { 
            
DestroyDynamic3DTextLabel(VehicleLabel[PI[playerid][cCarId][0]]); 
            
DestroyVehicle(PI[playerid][cCarId][0]); 
            
PI[playerid][cCarId][0] = INVALID_VEHICLE_ID
        } 
Паранойя?
И зачем дублировать код трижды?

ЗЫ: Как починить тачку на сервере? Просто... перезайди.
Reply
#5

Обьясни мне. Всмысле дублировать?
Reply
#6

Quote:
Originally Posted by Artem_Loginov
Посмотреть сообщение
Обьясни мне. Всмысле дублировать?
Изучи циклы, это сэкономит тебе кучу строк кода.
Reply
#7

Хорошо я понял. Уже оптимизировал цикл.

PHP код:
    if(PlayerLogged[playerid] == true)
    {
           for(new 
03i++)
        {
            if(
PI[playerid][cCarId][i] != INVALID_VEHICLE_ID)
            {
                
DestroyDynamic3DTextLabel(VehicleLabel[PI[playerid][cCarId][i]]);
                
VehicleLabel[PI[playerid][cCarId][i]] = Text3D:INVALID_3DTEXT_ID;
                
DestroyDynamic3DTextLabel(VehicleLabel[PI[playerid][cCarId][i]]);
                
PI[playerid][cCarId][i] = INVALID_VEHICLE_ID;
               }
        }
    } 
Вот но сути всеравно иногда иды путаются.
Reply
#8

> когда кто-то сказал про оптимизацию циклов
- Маза, только не бомби
- АААААААААААААААААААААААААААААААААААА
PHP код:
#define MAX_PLAYER_PRIVATE_VEHICLES (3)
if(PlayerLogged[playerid] == true) {
    new 
vehicleid;
    for(new 
0MAX_PLAYER_PRIVATE_VEHICLES; ++i) {
        
vehicleid PI[playerid][cCarId][i];
        if(
vehicleid != INVALID_VEHICLE_ID) {
            if(
VehicleLabel[vehicleid] != INVALID_3DTEXT_ID) { // мы тут не в идеальном мире живём вообще-то
                
DestroyDynamic3DTextLabel(VehicleLabel[vehicleid]);
                
VehicleLabel[vehicleid] = Text3D:INVALID_3DTEXT_ID;
            }
            
DestroyVehicle(vehicleid);
            
PI[playerid][cCarId][i] = INVALID_VEHICLE_ID;
        }
    }

И вот так (не проверял)
PHP код:
stock LoadMyCar(playerid) { 
    new 
count_car 0//new count_car[MAX_PLAYERS] = 0; // вот это кек
    
for(new 0MAX_PLAYER_PRIVATE_VEHICLES; ++i) { 
        if(
PI[playerid][cModel][i] > && PI[playerid][cX][i] == 0.0 && PI[playerid][cY][i] == 0.0 && PI[playerid][cZ][i] == 0.0) {
            ++
count_car;    
        } 
    } 
    if(
count_car 0) { 
        
SendClientMessage(playeridCOLOR_ORANGE, !"Один из Ваших автомобилей не был припаркован после выхода с сервера, и поэтому он был заспавнен на парковке у Анашана"); 
        
SendClientMessage(playeridCOLOR_ORANGE, !"Найдите его на карте с помощью (/findcar) и припаркуйте (/park)"); 
    }
    new 
vehicleidmodelid;
    new 
enumid_NumberPlate[MAX_PLAYER_PRIVATE_VEHICLES] = {cNumber1cNumber2cNumber3};
    new 
enumid_Color[MAX_PLAYER_PRIVATE_VEHICLES] = {cColor1cColor2cColor3};
    for(new 
homecarslot 0homecarslot MAX_PLAYER_PRIVATE_VEHICLES; ++homecarslot) {
        
vehicleid PI[playerid][cCarId][homecarslot];
        
modelid PI[playerid][cModel][homecarslot];
        if(
PI[playerid][cModel][homecarslot] > 0) {
            if(
vehicleid != INVALID_VEHICLE_ID) {
                if(
VehicleLabel[vehicleid] != INVALID_3DTEXT_ID) {
                    
DestroyDynamic3DTextLabel(VehicleLabel[vehicleid]);
                    
VehicleLabel[vehicleid] = INVALID_3DTEXT_ID;
                }
            }
            
DestroyVehicle(vehicleid); 
            
PI[playerid][cCarId][homecarslot] = INVALID_VEHICLE_ID
        }
        new 
Float:carPosX PI[playerid][cX][homecarslot],
            
Float:carPosY PI[playerid][cY][homecarslot],
            
Float:carPosZ PI[playerid][cZ][homecarslot],
            
Float:carAnglePI[playerid][cFa][homecarslot],
            
colorid1 PI[playerid][enumid_Color[homecarslot]][0],
            
colorid2 PI[playerid][enumid_Color[homecarslot]][1]
        ;
        if(
carPosX == 0.0 && carPosY == 0.0 && carPosZ == 0.0) {
            new 
random(sizeof(SalonRandSpawn));
            
carPosX SalonRandSpawn[r][0];
            
carPosY SalonRandSpawn[r][1];
            
carPosZ SalonRandSpawn[r][2];
            
carAngleSalonRandSpawn[r][3];
        }
        
vehicleid CreateVehicle(modelidcarPosXcarPosYcarPosZcarAnglecolorid1colorid290000);
        
PI[playerid][cCarId][homecarslot] = vehicleid;
        if(
vehicleid != INVALID_VEHICLE_ID) { // мир не идеален, надо проверять
            
TuneCar(playerid);
            
PI[playerid][cLock][homecarslot] = 1
            
CarDoors(PI[playerid][cCarId][homecarslot], PI[playerid][cLock][homecarslot]); 
            
Fuel[vehicleid] = PI[playerid][cFuel][homecarslot]; 
            
SetVehicleHealth(vehicleid1000); 
            
Engine[vehicleid] = false
            
Lights[vehicleid] = false;
            
IsLocked[vehicleid] = PI[playerid][cLock][homecarslot] & 1;
            if(
strcmp(PI[playerid][enumid_NumberPlate[homecarslot]], "Транзит"true64) != 0) { 
                
format(totalstringsizeof(totalstring), "%s"PI[playerid][enumid_NumberPlate[homecarslot]]); 
                
VehicleLabel[vehicleid] = CreateDynamic3DTextLabel(totalstring0xFFFFFFFF00040.0,INVALID_PLAYER_IDvehicleid1); 
                
//Attach3DTextLabelToVehicle(VehicleLabel[vehicleid], vehicleid, 0, 0, 0.1); 
            
} else { 
                
VehicleLabel[vehicleid] = CreateDynamic3DTextLabel("Транзит"0xFFFFFFFF00040.0,INVALID_PLAYER_IDvehicleid1); 
                
//Attach3DTextLabelToVehicle(VehicleLabel[vehicleid], vehicleid, 0, 0, 0.1); 
            
}
        }
    }
    return 
true

Скажи честно, ты заебался, когда писал одни и те же строки кода (или копипастил и выискивал где изменить значения)?
Хз поможет или нет, но видеть предыдущий индусо-код не в кайф.
особенно
pawn Код:
new count_car[MAX_PLAYERS] = 0;
// когда используется в функции только count_car[playerid]
Я бы мог вам помочь вам исправлении всех косяков, но, боюсь, что придётся сесть на зарплату, хех.
Reply
#9

Хех , да я не против чтоб кто помог , даже заплатил бы за один баг который не могу исправить досих пор.
А так попробую твой вариант.
Reply
#10

Quote:

new Float:carPosX = PI[playerid][cX][homecarslot],
Float:carPosY = PI[playerid][cY][homecarslot],
Float:carPosZ = PI[playerid][cZ][homecarslot],
Float:carAngle= PI[playerid][cFa][homecarslot],
colorid1 = PI[playerid][enumid_Color[homecarslot]][0],
colorid2 = PI[playerid][enumid_Color[homecarslot]][1], //<---------тут
;
if(carPosX == 0.0 && carPosY == 0.0 && carPosZ == 0.0) {
new r = random(sizeof(SalonRandSpawn));
carPosX = SalonRandSpawn[r][0];
carPosY = SalonRandSpawn[r][1];
carPosZ = SalonRandSpawn[r][2];
carAngle= SalonRandSpawn[r][3];
}

лишняя запятая
Reply
#11

Я удалял всеравно ошибка
Reply
#12

Спасибо за вариант , но его надо доработать , а я по коду сам немного не пойму) попробую переписать паблик загрузки сам.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)