Скриптинг курилка

Quote:
Originally Posted by eakwarp
View Post
Хрен редьки не слаще. Но суть, я очень надеюсь, вы уловили, а то срам.

Вопрос.
Много лет назад запилил спидометр на объекте при виде от первого лица.
Какое-то время все работало прекрасно(даже видосик был https://www.youtube.com/watch?v=JNgS04BDb3o )
Код в целом не менялся, но спидометр стал нещадно моргать.
Code:
public OnPlayerUpdate(playerid)
{
	if(CameraViewUsed[playerid])
	{
		if(PlayerCarSpeedBit[playerid]==0)
		{
		    format(speedstr,64,"%0.1f {FF4500}%d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
		    DestroyObject(speedobj[playerid]);
		    speedobj[playerid] = CreateObject(19476, 0,0,0, 0, 0, 0, 100);
			AttachObjectToVehicle(speedobj[playerid],SpeedoInfo[playerid][sdcarid],CarSpeedPos[speedmodelupd[playerid]][0],CarSpeedPos[speedmodelupd[playerid]][1],CarSpeedPos[speedmodelupd[playerid]][2],CarSpeedPos[speedmodelupd[playerid]][3],CarSpeedPos[speedmodelupd[playerid]][4],CarSpeedPos[speedmodelupd[playerid]][5]);
			PlayerCarSpeedBit[playerid]=20;
		}
		else
		{
		    format(speedstr,64,"%0.1f {FF4500}%d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
		    SetObjectMaterialText(speedobj[playerid], speedstr, 0, OBJECT_MATERIAL_SIZE_256x128, "Arial", CarSpeedSize[speedmodelupd[playerid]]);
		    PlayerCarSpeedBit[playerid]--;
		}
	}
return 1;
}
Куда копать?
Зачем каждые 20 срабатываний пересоздавать объект?
Reply

Quote:
Originally Posted by ZiGGi
View Post
Зачем каждые 20 срабатываний пересоздавать объект?
Перестает меняться текст каждые 20-30 итераций. Поэтому такой счетчик. Но моргает каждую итерацию, а не каждые 20.
Reply

Quote:
Originally Posted by Stepashka
View Post
В любой другой код который был добавлен и после которого стало "моргать".
Объемы его обширны, и установить после чего это началось не представляется возможным. Более того, я даже точно не вспомню на какой версии сампа это началось

За ночь эксперементов я пришел уже к вот такому виду:
Code:
public OnPlayerUpdate(playerid)
{
 if(CameraViewUsed[playerid])
 {
   if(CarAlarms[SpeedoInfo[playerid][sdcarid]])
   {
   if(fifthsecbit>2)
    format(speedstr,64,"{FFCC00}< >{FFFFFF}%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
   else
    format(speedstr,64,"{FFFFFF}< >%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
   }
   else
   {
   switch(gPlayerIndikator[playerid])
   {
    case 1:
    {
     format(speedstr,64,"{FFFFFF}< >%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
    }
    case 2://левый
    {
     if(fifthsecbit>2)
      format(speedstr,64,"{FFCC00}< {FFFFFF}>%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
     else
      format(speedstr,64,"{FFFFFF}< >%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
    }
    case 3://правый
    {
     if(fifthsecbit>2)
      format(speedstr,64,"{FFFFFF}< {FFCC00}>{FFFFFF}%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
     else
      format(speedstr,64,"{FFFFFF}< >%0.1f {FF4500}%03d>",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
    }
   }
  }
  if(PlayerCarSpeedBit[playerid]==0)
  {
   GetVehiclePos(SpeedoInfo[playerid][sdcarid],vehpos[0],vehpos[1],vehpos[2]);
   DestroyObject(speedobj[playerid]);
   speedobj[playerid] = CreateObject(19476, vehpos[0],vehpos[1],vehpos[2], 0, 0, 0);
   AttachObjectToVehicle(speedobj[playerid],SpeedoInfo[playerid][sdcarid],CarSpeedPos[speedmodelupd[playerid]][0],CarSpeedPos[speedmodelupd[playerid]][1],CarSpeedPos[speedmodelupd[playerid]][2],CarSpeedPos[speedmodelupd[playerid]][3],CarSpeedPos[speedmodelupd[playerid]][4],CarSpeedPos[speedmodelupd[playerid]][5]);
   PlayerCarSpeedBit[playerid]=20;
  }
  else
  {
   SetObjectMaterialText(speedobj[playerid], speedstr, 0, OBJECT_MATERIAL_SIZE_256x128, "Arial", CarSpeedSize[speedmodelupd[playerid]]);
   PlayerCarSpeedBit[playerid]--;
  }
 }
 return 1;
}
Но, собственно, ничего не изменилось.
Reply

Quote:
Originally Posted by eakwarp
View Post
Перестает меняться текст каждые 20-30 итераций. Поэтому такой счетчик. Но моргает каждую итерацию, а не каждые 20.
Может где то макрос есть на подмену c CreateObject на CreateDynamicObject?
Reply

Quote:
Originally Posted by pawnoholic
View Post
Может где то макрос есть на подмену c CreateObject на CreateDynamicObject?
Нет, этого точно нет. Специально из-за использования в подобных случаях.
Reply

Quote:
Originally Posted by eakwarp
View Post
Объемы его обширны, и установить после чего это началось не представляется возможным. Более того, я даже точно не вспомню на какой версии сампа это началось

За ночь эксперементов я пришел уже к вот такому виду:
Code:
public OnPlayerUpdate(playerid)
{
 if(CameraViewUsed[playerid])
 {
   if(CarAlarms[SpeedoInfo[playerid][sdcarid]])
   {
   if(fifthsecbit>2)
    format(speedstr,64,"{FFCC00}< >{FFFFFF}%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
   else
    format(speedstr,64,"{FFFFFF}< >%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
   }
   else
   {
   switch(gPlayerIndikator[playerid])
   {
    case 1:
    {
     format(speedstr,64,"{FFFFFF}< >%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
    }
    case 2://левый
    {
     if(fifthsecbit>2)
      format(speedstr,64,"{FFCC00}< {FFFFFF}>%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
     else
      format(speedstr,64,"{FFFFFF}< >%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
    }
    case 3://правый
    {
     if(fifthsecbit>2)
      format(speedstr,64,"{FFFFFF}< {FFCC00}>{FFFFFF}%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
     else
      format(speedstr,64,"{FFFFFF}< >%0.1f {FF4500}%03d>",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
    }
   }
  }
  if(PlayerCarSpeedBit[playerid]==0)
  {
   GetVehiclePos(SpeedoInfo[playerid][sdcarid],vehpos[0],vehpos[1],vehpos[2]);
   DestroyObject(speedobj[playerid]);
   speedobj[playerid] = CreateObject(19476, vehpos[0],vehpos[1],vehpos[2], 0, 0, 0);
   AttachObjectToVehicle(speedobj[playerid],SpeedoInfo[playerid][sdcarid],CarSpeedPos[speedmodelupd[playerid]][0],CarSpeedPos[speedmodelupd[playerid]][1],CarSpeedPos[speedmodelupd[playerid]][2],CarSpeedPos[speedmodelupd[playerid]][3],CarSpeedPos[speedmodelupd[playerid]][4],CarSpeedPos[speedmodelupd[playerid]][5]);
   PlayerCarSpeedBit[playerid]=20;
  }
  else
  {
   SetObjectMaterialText(speedobj[playerid], speedstr, 0, OBJECT_MATERIAL_SIZE_256x128, "Arial", CarSpeedSize[speedmodelupd[playerid]]);
   PlayerCarSpeedBit[playerid]--;
  }
 }
 return 1;
}
Но, собственно, ничего не изменилось.
Универсальным решением будет использование по 2 объектов с текстом на каждую машину, при этом объекты не всё время будут существовать одновременно.

Покажу на временном графике время существования каждого из объектов (в тактах).
1) ***********00000000000***********00000000000
2) 000000000***********00000000000***********00

где "*" - момент, когда объект жив, а "0" - когда объект не существует.

PS: не понятно что вы имели под "дико моргал": моргания, связанные с пересозданием объекта, либо моргания, связанные с обновлением текста во время жизни объекта (дал совет по борьбе с первым случаем).
Reply

Quote:
Originally Posted by Mutha_X
View Post
Универсальным решением будет использование по 2 объектов с текстом на каждую машину, при этом объекты не всё время будут существовать одновременно.

Покажу на временном графике время существования каждого из объектов (в тактах).
1) ***********00000000000***********00000000000
2) 000000000***********00000000000***********00

где "*" - момент, когда объект жив, а "0" - когда объект не существует.

PS: не понятно что вы имели под "дико моргал": моргания, связанные с пересозданием объекта, либо моргания, связанные с обновлением текста во время жизни объекта (дал совет по борьбе с первым случаем).
С обновлением текста, два объекта - я уже пробовал. Могу видео записать.
Reply

Quote:
Originally Posted by eakwarp
View Post
Хрен редьки не слаще. Но суть, я очень надеюсь, вы уловили, а то срам.

Вопрос.
Много лет назад запилил спидометр на объекте при виде от первого лица.
Какое-то время все работало прекрасно(даже видосик был https://www.youtube.com/watch?v=JNgS04BDb3o )
Код в целом не менялся, но спидометр стал нещадно моргать.
Code:
public OnPlayerUpdate(playerid)
{
	if(CameraViewUsed[playerid])
	{
		if(PlayerCarSpeedBit[playerid]==0)
		{
		    format(speedstr,64,"%0.1f {FF4500}%d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
		    DestroyObject(speedobj[playerid]);
		    speedobj[playerid] = CreateObject(19476, 0,0,0, 0, 0, 0, 100);
			AttachObjectToVehicle(speedobj[playerid],SpeedoInfo[playerid][sdcarid],CarSpeedPos[speedmodelupd[playerid]][0],CarSpeedPos[speedmodelupd[playerid]][1],CarSpeedPos[speedmodelupd[playerid]][2],CarSpeedPos[speedmodelupd[playerid]][3],CarSpeedPos[speedmodelupd[playerid]][4],CarSpeedPos[speedmodelupd[playerid]][5]);
			PlayerCarSpeedBit[playerid]=20;
		}
		else
		{
		    format(speedstr,64,"%0.1f {FF4500}%d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
		    SetObjectMaterialText(speedobj[playerid], speedstr, 0, OBJECT_MATERIAL_SIZE_256x128, "Arial", CarSpeedSize[speedmodelupd[playerid]]);
		    PlayerCarSpeedBit[playerid]--;
		}
	}
return 1;
}
Куда копать?
В CreatePlayerObject, вместо CreateObject, ну или тот же стример
Reply

видали
Reply

я не знаю, может быть я чего-то упустил или что-то еще, но почему калкора все называют Кайем?
Reply

Quote:
Originally Posted by DeepCode
Посмотреть сообщение
я не знаю, может быть я чего-то упустил или что-то еще, но почему калкора все называют Кайем?
Понабежало ньюфагов.
Reply

я понял чому, спс за пуки
Reply

Quote:
Originally Posted by DeepCode
Посмотреть сообщение
я не знаю, может быть я чего-то упустил или что-то еще, но почему калкора все называют Кайем?
Kyeman aka Kalcor
Его старый никнейм.
Reply

Компилятор во время компиляции забирает только 25% от ЦП. Это нормально?
Reply

Quote:
Originally Posted by Mcc
Посмотреть сообщение
Компилятор во время компиляции забирает только 25% от ЦП. Это нормально?
1 из 4 ядро. Да это нормально.
Reply

Quote:
Originally Posted by White_116
Посмотреть сообщение
1 из 4 ядро. Да это нормально.
Т.е если бы у меня было только одно ядро но с мощностью 4 ядер - компиляция была бы в 4 раза быстрее?
Reply

Quote:
Originally Posted by Mcc
Посмотреть сообщение
Т.е если бы у меня было только одно ядро но с мощностью 4 ядер - компиляция была бы в 4 раза быстрее?
Это зависит от многих факторов! Условно... 80-90% может и было бы.
Reply

Quote:
Originally Posted by White_116
Посмотреть сообщение
Kyeman aka Kalcor
Его старый никнейм.
да, я уже посмотрел. спасибо что без "ньюфаги налетели" и прочей ерунды
Reply

В каком порядке стример создает игроку объекты?
Reply

Quote:
Originally Posted by stabker
View Post
В каком порядке стример создает игроку объекты?
В порядке обработки ID, в пределах стрима для объекта.
Reply


Forum Jump:


Users browsing this thread: 29 Guest(s)