В этой теме я покажу, как заставить объект плавно вращаться вокруг выбранной оси. Не забываем, что материал опубликован в феврале 2011 года, а SA-MP 0.3d с плавным движением вышел только через 10 месяцев после
В начало мода, либо к своим new:
В OnGameModeInit:
В OnPlayerCommandText (в тестовом режиме, пихайте в свои командные процессоры, если хотите):
В низ скрипта или ко всем таймерам:
В начало мода, либо к своим new:
PHP:
new CurrentObject, AxisOfRotation, iteration;
PHP:
CurrentObject = CreateObject(....); // создаём объект
PHP:
if(!strcmp(cmd,"/rox+",true))
{
new tmp[30];
tmp = strtok(cmdtext,idx);
AxisOfRotation = 1;
new angle = strval(tmp);
iteration = angle/0.5;
SetTimerEx("ObjectRotateTimer",100,iteration);
return 1;
}
if(!strcmp(cmd,"/roy+",true))
{
new tmp[30];
tmp = strtok(cmdtext,idx);
AxisOfRotation = 2;
new angle = strval(tmp);
iteration = angle/0.5;
SetTimerEx("ObjectRotateTimer",100,iteration);
return 1;
}
if(!strcmp(cmd,"/roz+",true))
{
new tmp[30];
tmp = strtok(cmdtext,idx);
AxisOfRotation = 3;
new angle = strval(tmp);
iteration = angle/0.5;
SetTimerEx("ObjectRotateTimer",100,iteration);
return 1;
}
if(!strcmp(cmd,"/rox-",true))
{
new tmp[30];
tmp = strtok(cmdtext,idx);
AxisOfRotation = 4;
new angle = strval(tmp);
iteration = angle/0.5;
SetTimerEx("ObjectRotateTimer",100,iteration);
return 1;
}
if(!strcmp(cmd,"/roy-",true))
{
new tmp[30];
tmp = strtok(cmdtext,idx);
AxisOfRotation = 5;
new angle = strval(tmp);
iteration = angle/0.5;
SetTimerEx("ObjectRotateTimer",100,iteration);
return 1;
}
if(!strcmp(cmd,"/roz-",true))
{
new tmp[30];
tmp = strtok(cmdtext,idx);
AxisOfRotation = 6;
new angle = strval(tmp);
iteration = angle/0.5;
SetTimerEx("ObjectRotateTimer",100,iteration);
return 1;
}
PHP:
forward ObjectRotateTimer(angle);
public ObjectRotateTimer(angle)
{
if(iteration > 0)
{
if(AxisOfRotation == 1)
{
new Float:x,Float:y,Float:z;
GetObjectRot(CurrentObject,x,y,z);
SetObjectRot(CurrentObject,x+0.5,y,z);
}
else if(AxisOfRotation == 2)
{
new Float:x,Float:y,Float:z;
GetObjectRot(CurrentObject,x,y,z);
SetObjectRot(CurrentObject,x,y+0.5,z);
}
else if(AxisOfRotation == 3)
{
new Float:x,Float:y,Float:z;
GetObjectRot(CurrentObject,x,y,z);
SetObjectRot(CurrentObject,x,y,z+0.5);
}
else if(AxisOfRotation == 4)
{
new Float:x,Float:y,Float:z;
GetObjectRot(CurrentObject,x,y,z);
SetObjectRot(CurrentObject,x-0.5,y,z);
}
else if(AxisOfRotation == 5)
{
new Float:x,Float:y,Float:z;
GetObjectRot(CurrentObject,x,y,z);
SetObjectRot(CurrentObject,x,y-0.5,z);
}
else if(AxisOfRotation == 6)
{
new Float:x,Float:y,Float:z;
GetObjectRot(CurrentObject,x,y,z);
SetObjectRot(CurrentObject,x,y,z-0.5);
}
iteration--;
}
}