Некорректный спавн некоторых машин после взрыва
#1

Думаю многие сталкивались с такой проблемкой.. Некоторые машины после взрыва не спавнятся.. а стоят на том месте где взорвались. И для каждого вновь подъезжающего игрока взрываются как бы снова, а для тех кто и так стоял рядом с не взрываются.
Иной раз создается впечатление что едешь по минному полю..

Уже пытался цеплять на таймер.. и затем принудительно отправлять на спавн.
Сейчас использую вообще спавн сразу как дэш:

Code:
public OnVehicleDeath(vehicleid)
{
	vehTrunk[vehicleid][vehTrunkCounter[vehicleid]] = '\0';
	vehTrunkAmmo[vehicleid][vehTrunkCounter[vehicleid]] = '\0';
	vehTrunkCounter[vehicleid]--;
	SaveTrunk();
	SetVehicleToRespawn(vehicleid);
}
И все равно вот недавно заметил что часть машин не хотят нормально топать на место. Как решить эту проблемку? Сэпасибо
Reply
#2

при создании машины используй AddStaticVehicleEx
Reply
#3

Все машины мода AddStaticVehicleEx. Чуть больше 1000 машин всего. Замечал подобное не только у себя, но и на других серверах..
Reply
#4

Что вызывает смерть машины?
Про какие именно машины идет речь? Прицепы, самалёты, лодки? Это проверено на всех машинах?
Ни разу такого не замечал.

Возможно проблема в вашем сценарии. Проверьте, может в таймере вы ставите машинам 100 здоровья. Обычно новички все считают что у машин максимально 100 здоровья как у персов.
Reply
#5

Нет, я уже не новичок.. И прекрасно понимаю что здоровья 1000.. У меня на админское тв /dl вписано давненько уже xDDD

Машины абсолютно разные.. речь идет именно о машинах на которых можно передвигаться самостоятельно. Буллеты, премьеры итд..
Быть может это зависит от количества транспорта.. не знаю. Но вот факт налицо - если получится даже скрин выложу ситуации.. Хотя выкладывать то нечего.. Просто игрок например ехал на машине с 300хп, врезался, взорвался. Он зареспавнился, машина осталась.. Каждый кто поедет через место взрыва машины будет как бы вновь наблюдать взрыв машины.. но уже пустой. И потом будет видеть лишь обугленный остов, который отказывается исчезать. Я такое даже на ГВ видел. И не только я.
Reply
#6

да описанное выше поведение имеет место быть, но, вроде, по таймауту машинка все равно будет зареспавлена как пустая, самим сампом
Reply
#7

У меня 794 машин. Попробуй уменьши их до 699 и проверь. Может проблема в новых стримерах тачек.
Также выложи код как ты спаунишь машины
Reply
#8

Quote:
Originally Posted by dimonml
View Post
да описанное выше поведение имеет место быть, но, вроде, по таймауту машинка все равно будет зареспавлена как пустая, самим сампом
Так то оно так, да вот только если таймер выставлен высокий, например 2 раза в сутки спавн.. Машинка не заспавнится пока он не сработает.
А так как игроки просили отменить спавн машин таймером через какое то время, то вот я теперь ищу как иначе исправить этот косяк. Можно конечно вернуть все обратно.. Просто даже если выставить таймер пониже - все равно какое то время машина будет находится в баговом состоянии.
Reply
#9

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

Quote:
Originally Posted by toneysix
View Post
Деиствительно, наблюдал подобные вещи на различных серверах, однако, как заметили другие скриптеры, у многих такого косяка не наблюдается, нужно узнать истинную причину появления данного казуса.
Предлагаешь очередную тему в баги добавить? "ответа не ждите"
Reply
#11

А ничего нет в OnVehicleDeath(vehicleid, killerid) ?
Reply
#12

public OnVehicleDeath(vehicleid, killerid)

у меня в мод не вписан, только

public OnVehicleDeath(vehicleid).. то что в первом посте.
Reply
#13

А что в SaveTrunk(); ?
Reply
#14

Ничего особенного.

Code:
public SaveTrunk()
{
	new idx;
	new File: file2;
	idx = 1;
	while (idx < sizeof(CarInfo))
	{
		new coordsstring[256];
		format(coordsstring, sizeof(coordsstring), "%i,%i,%i,%i,%i,%i,%i,%i,%i,%f\n",
		vehTrunk[idx][1],
		vehTrunkAmmo[idx][1],
		vehTrunk[idx][2],
		vehTrunkAmmo[idx][2],
		vehTrunk[idx][3],
		vehTrunkAmmo[idx][3],
		vehTrunk[idx][4],
		vehTrunkAmmo[idx][4],
		vehTrunkCounter[idx],
		vehTrunkArmour[idx]);
		if(idx == 1)
		{
			file2 = fopen("trunk.cfg", io_write);
		}
		else
		{
			file2 = fopen("trunk.cfg", io_append);
		}
		fwrite(file2, coordsstring);
		idx++;
		fclose(file2);
	}
	return 1;
}
Кстати деш машины выглядит чуть иначе.. я старый дал.. Тут я вписал обнуление тюнинга для некоторых авто..
Обнуление загрузки машины и багажника. Но это не должно влиять на спавн же.. Ведь тогда бы это распространялось на все машины а не случайные.. За сутки бывает до 15 машин с разными айди.. Иной раз вообще не бывает


Code:
public OnVehicleDeath(vehicleid)
{
	PlayerHaul[vehicleid][pLoad] = 0;
	vehTrunk[vehicleid][vehTrunkCounter[vehicleid]] = '\0';
	vehTrunkAmmo[vehicleid][vehTrunkCounter[vehicleid]] = '\0';
	vehTrunkCounter[vehicleid]--;
	SaveTrunk();
	if(vehicleid > 235 && vehicleid < 696||vehicleid >= 921 && vehicleid <= 940)
	{
 	CarsInfo[vehicleid][cSpoiler] = 0;
	CarsInfo[vehicleid][cHood] = 0;
	CarsInfo[vehicleid][cSideskirt] = 0;
	CarsInfo[vehicleid][cNitro] = 0;
	CarsInfo[vehicleid][cLamps] = 0;
	CarsInfo[vehicleid][cExhaust] = 0;
	CarsInfo[vehicleid][cWheels] = 0;
	CarsInfo[vehicleid][cRoof] = 0;
	CarsInfo[vehicleid][cStereo] = 0;
	CarsInfo[vehicleid][cHydraulics] = 0;
	CarsInfo[vehicleid][cBullbar] = 0;
	CarsInfo[vehicleid][cRearBullbars] = 0;
	CarsInfo[vehicleid][cFrontSign] = 0;
	CarsInfo[vehicleid][cFrontBullbars] = 0;
	CarsInfo[vehicleid][cFrontBumper] = 0;
	CarsInfo[vehicleid][cRearBumper] = 0;
	CarsInfo[vehicleid][cVents] = 0;
	CarsInfo[vehicleid][cPaintJob] = -1;
	OnPropUpdate();
	}
	SetVehicleToRespawn(vehicleid);
}
Reply
#15

Вот прошло 6 лет, и проблема походу осталась актуальна, но у меня сервер же CR и версия 0.3e (2012 года выпуска).
Иногда стал замечать, что тачки горят. Спавнятся - и тут же горят.
Раньше такого не замечал, после последнего вчерашнего обновления (работа таксиста) началась эта фигня.

В OnVehicleDead ничего особенного, вот собственно код, больше в паблике ничего нет:
PHP Code:
DeadTaxi(vehicleid)
{
    if (
GetVehicleModel(vehicleid) == 438)
    {
        for (new 
taxiidtaxiid MAX_PLAYERStaxiid++)
        {
            if (
taxi_save_dvehid[taxiid] == vehicleid)
            {
                if (
IsPlayerTaxi(taxiid))
                {
                    
FinishedWorkTaxi(taxiid3);
                    
ResetDataTaxi(taxiid);
                    break;
                }
            }
        }
    }

В FinishedWorkTaxi там чисто сообщения для чата, а в ResetDataTaxi сбрасывания данных:
PHP Code:
ResetDataTaxi(taxiid)
{
    
taxi_check_count{taxiid} = 0;
    
KillTimer(taxi_check_in_veh_timerid[taxiid]);
    
Update3DTextLabelText(taxi_text3d_id[taxiid], 0xffff00ff" ");
    for (new 
clientidclientid MAX_PLAYERSclientid++)
    {
        if (
IsValidDynamicMapIcon(taxi_icon_id[taxiid][clientid]))
        {
            
DestroyDynamicMapIcon(taxi_icon_id[taxiid][clientid]);
            
taxi_icon_id[taxiid][clientid] = -1;
        }
        
// if (IsValidDynamicCP(taxi_cp_id[taxiid][clientid]))
        // {
            // DestroyDynamicCP(taxi_cp_id[taxiid][clientid]);
            // taxi_cp_id[taxiid][clientid] = -1;
        // }
    
}
    
KillTimer(taxi_counter_time_timerid[taxiid]);
    
taxi_counter_time_timerid[taxiid] = -1;
    
taxi_time_work[taxiid] = 0;
    
taxi_money_client[taxiid] = 0;
    
taxi_save_dvehid[taxiid] = INVALID_VEHICLE_ID;

Лимит тачек не превышен (~ 120 моделей, ~ 500 транспорта), может читак засел, вообщем посмотрим как дальше дела пойдут.
Reply
#16

Твои закорючки здесь не при чем. Удаляй транспорт и создавай заново.
Reply
#17

Не пробовал, но, возможно, такой вариант сработает. Как известно, авто с уровнем HP ниже 300 начинает гореть. Получается, что у всех "остовов" HP должен быть ниже 300. Т.о. по таймеру (скажем, раз в минуту) можно отправлять на респавн все авто с таким уровнем.
Reply
#18

Оба предложенных варианта стоит явно попробывать
Reply
#19

Удалить и создать. Понять и простить...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)