В моде попутаны иды машин
#1

Здравствуйте!
Вообщем у меня такая проблема: в моем РП моде попутаны иды машин, а именно при destroy'e определенной машины ид которой записан в переменную, удаляется еще одна (может и больше). Незнаю почему так, сделал вывод что айди машин попутаны и совпадают. Очень долго мучаюсь с этой проблемой, немогу никак решить.

Кто подскажет, что можно сделать?
Заранее спасибо!
Reply
#2

42__
Reply
#3

У вас массив с идами машин? Код пж-ста

Quote:

42

Профит!
Reply
#4

jhonyxakep, нет, не масив. Путаются не иды моделей, а именно иды транспорта
Reply
#5

Ты свою проблему грамотнее изложи, не?
Reply
#6

Насколько я помню, в гф создаётся куча машин, а потом просто делаются проверки такого вида: if (vehicleid > 30 && vehicleid < 36) (вроде даже в отдельные функции не вынесено>_<)
Поэтому, автор, забей, ты не исправишь это.
Reply
#7

Quote:
Originally Posted by ZiGGi
Посмотреть сообщение
Насколько я помню, в гф создаётся куча машин, а потом просто делаются проверки такого вида: if (vehicleid > 30 && vehicleid < 36) (вроде даже в отдельные функции не вынесено>_<)
Поэтому, автор, забей, ты не исправишь это.
Через переменную можно
Reply
#8

Quote:

Ты свою проблему грамотнее изложи, не?

Постараюсь. Вообщем так, почти все созданные машины записываются в переменные типо
grovecar[число] = CreateVehicle....
Тоесть в grovecar[число] записан ид тачки. Также создаются личные авто, авто всех работ и т.д. (серв РП, но это не важно). И вот эти иды записаные в переменных совпадают с другими.
А теперь расскажу чем мне это мешает.
В OnPlayerEnterVehicle стоит у меня проверка на машину. Если это к примеру машина фракции в которой я не состою то при входе будет писать "вы не член бла-бла-бла". А вот если ид например совпал с чьей-то личной машиной, при входе в нее будет писать тоже самое! Либо если совпали иды 2х личных машин, при fix'e (обновлении) одной, вторая тоже пропадет. Вообщем вот вся проблема, то что они часто совпадают и когда владелец обновляет личый транспорт пропадает посреди дороги еще у кого-то.

Если не ясно рассказал, могу написать кратко и понятней.

P.S. Проверка не именно по иду, а по иду в переменной, тоесть не vehicleid == 35, а peremennaya == 35 по этому думаю проблема не в этом что говорит ZiGGi
Reply
#9

А диапазон ID как проверяется? Может быть вместо > стоит >= или с < то же самое...
Reply
#10

Quote:
Originally Posted by OKStyle
Посмотреть сообщение
А диапазон ID как проверяется? Может быть вместо > стоит >= или с < то же самое...
Если к примеру у меня 10 машин car[10] то проверка будет такая: if(newcar >= car[0] && newcar <= car[9]) и так везде.
Но суть же не в проверке? Причем она тут если машины совпадают и те которые не в фракциях, а личные

Есть вариант что не соблюдается порядок при создании машин. Тоесть переменная для личных машин (у меня new caridhouse[MAX_PLAYERS]) объявлена выше переменных для тех машин, которые в игре создаются первее личных.

Ходил по форуму, вот у Gettopro аналогичная проблема https://sampforum.blast.hk/showthread.php?tid=325033

P.S. На многих русскоязычных форумах сидел, помощи нигде так и не нашел...
Reply
#11

Зря используешь AddStaticVehicleEx для динамических машин, используй CreateVehicle.
В команде "/fixcar" есть вероятность что ты удалишь чужую машину.
caridhouse[playerid] = 0; -> caridhouse[playerid] = INVALID_VEHICEL_ID;

В остальном вроде все верно, может проблема в других машинах?
Reply
#12

Quote:
Originally Posted by Stepashka
View Post
Зря используешь AddStaticVehicleEx для динамических машин, используй CreateVehicle.
В команде "/fixcar" есть вероятность что ты удалишь чужую машину.
caridhouse[playerid] = 0; -> caridhouse[playerid] = INVALID_VEHICEL_ID;

В остальном вроде все верно, может проблема в других машинах?
А где ты вообще нашел в fixcar что я caridhouse = 0 присваиваю? Или в других случаях? Ну если ты об этом то не думаю что тут проблема. Т.к. я щас пишу обновления и тут на всякий случай уже поставил чтобы переменная обнулялась, еще даже не загружал. Ок, вместо обнуления поставлю INVALID_VEHICEL_ID

Такс... иду заменять AddStaticVehicleEx на CreateVehicle.

И вот на всякий случай паблик в котором я создаю машины. Глянь, мб что-то не так я тут сделал

PHP Code:
public CreateVehicles() //Машины сервера
{
lvpdcar[0] = AddStaticVehicleEx(598,2268.9678,2443.6958,10.5668,359.5409,44,1,900);  
AddStaticVehicleEx(598,2273.5706,2443.7290,10.5665,0.6987,44,1,900);   
AddStaticVehicleEx(598,2277.9482,2443.7490,10.5654,359.8027,44,1,900);  
AddStaticVehicleEx(598,2282.1309,2443.7957,10.5660,359.7104,44,1,900);  
AddStaticVehicleEx(598,2282.5002,2476.4595,10.5663,181.3129,44,1,900);  
AddStaticVehicleEx(598,2277.6665,2476.5178,10.5670,180.8092,44,1,900);  
AddStaticVehicleEx(598,2273.6030,2476.5684,10.5669,180.3357,44,1,900);  
AddStaticVehicleEx(598,2268.8853,2476.6331,10.5663,179.7468,44,1,900);  
AddStaticVehicleEx(598,2269.2004,2459.8330,10.5683,0.1298,44,1,900);  
AddStaticVehicleEx(598,2273.3623,2459.5422,10.5661,178.7547,44,1,900);  
AddStaticVehicleEx(598,2278.0513,2459.7075,10.5667,359.0662,44,1,900);  
AddStaticVehicleEx(598,2281.9307,2459.4504,10.5672,180.7914,44,1,900);  
AddStaticVehicleEx(599,2290.6970,2443.7861,11.0110,1.2899,44,1,900);  
AddStaticVehicleEx(599,2260.5859,2476.3032,11.0123,180.0692,44,1,900);  
lvpdcar[1] = AddStaticVehicleEx(497,2271.4736,2470.6799,38.8604,0.0013,44,1,900); 
...

Reply
#13

Зачем записывать id каждого транспорта в собственный массив? Достаточно иметь массив на 2 ячейки и записывать туда первый и последний id транспорта.
Reply
#14

Quote:
Originally Posted by ZiGGi
View Post
Зачем записывать id каждого транспорта в собственный массив? Достаточно иметь массив на 2 ячейки и записывать туда первый и последний id транспорта.
PHP Code:
new lvpdcar[2];
lvpdcar[0] = AddStaticVehicleEx(598,2268.9678,2443.6958,10.5668,359.5409,44,1,900); 
AddStaticVehicleEx(598,2273.5706,2443.7290,10.5665,0.6987,44,1,900);  
AddStaticVehicleEx(598,2277.9482,2443.7490,10.5654,359.8027,44,1,900); 
AddStaticVehicleEx(598,2282.1309,2443.7957,10.5660,359.7104,44,1,900); 
AddStaticVehicleEx(598,2282.5002,2476.4595,10.5663,181.3129,44,1,900); 
AddStaticVehicleEx(598,2277.6665,2476.5178,10.5670,180.8092,44,1,900); 
AddStaticVehicleEx(598,2273.6030,2476.5684,10.5669,180.3357,44,1,900); 
AddStaticVehicleEx(598,2268.8853,2476.6331,10.5663,179.7468,44,1,900); 
AddStaticVehicleEx(598,2269.2004,2459.8330,10.5683,0.1298,44,1,900); 
AddStaticVehicleEx(598,2273.3623,2459.5422,10.5661,178.7547,44,1,900); 
AddStaticVehicleEx(598,2278.0513,2459.7075,10.5667,359.0662,44,1,900); 
AddStaticVehicleEx(598,2281.9307,2459.4504,10.5672,180.7914,44,1,900); 
AddStaticVehicleEx(599,2290.6970,2443.7861,11.0110,1.2899,44,1,900); 
AddStaticVehicleEx(599,2260.5859,2476.3032,11.0123,180.0692,44,1,900); 
lvpdcar[1] = AddStaticVehicleEx(497,2271.4736,2470.6799,38.8604,0.0013,44,1,900); 
Ты это имел ввиду? Если да то не плохо, что-то даже не думал что так можно сделать...
Reply
#15

AddStaticVehicle(Ex)

Функция добавляет статичный транспорт, который не может быть удален.

Примечание: эту функцию можно использовать только внутри OnGameModeInit, в других автовызываемых функциях она работать не будет. Используйте CreateVehicle, чтобы создавать транспорт в процессе игры.


А у меня почти все машины которые создаются в процессе игры добавлены через AddStaticVehicle(Ex)... Уже заменил все на CreateVehicles, на днях обновлю. Если пропадать перестанут - плясать буду
Reply
#16

Проблема решилась
Reply
#17

Quote:
Originally Posted by stabker
View Post
Проблема решилась
Каким образом решил? У меня такая же беда.
Reply
#18

Quote:
Originally Posted by Newcomer
View Post
Каким образом решил? У меня такая же беда.
1. Если динамическая машина не создана или удалена, изменяй ее значение на INVALID_VEHICLE_ID.
2. Если удаляешь динамическую машину, делай тоже самое (в моем случае это были лишь личные тс).
3. Перед созданием машины проверяй, не создана ли она уже. Перед удалением соответственно, не удалена ли она уже (не равно ли значение ида машины в переменной значению INVALID_VEHICLE_ID).
Reply
#19

Спасибо.
Тоже интересовал такой вопрос.

Как то давно поднимал тему на другом форуме но толком не смог объяснить
Reply
#20

Возможно у тебя превышен размер, то есть смотри:
Например у тебя grovecar это массив, а кол-во авто 6, так вот ставишь массив на grovecar[7];
и потом уже машины
grovecar[0] = AddStatisticVehicle...
grovecar[1] = AddStatisticVehicle...
grovecar[2] = AddStatisticVehicle...
grovecar[3] = AddStatisticVehicle...
grovecar[4] = AddStatisticVehicle...
grovecar[5] = AddStatisticVehicle...// Всего 6!
И проверка
if(carid >= grovecar[0] && grovecar[5] <= carid)// как то так, ну вот и проверка на них, и так все проверь авто
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)