Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Плавное вращение объекта по его осям

OKStyle

Адвокат по делам семейным
Administrator
Wiki Team
Регистрация
4 Мар 2011
Сообщения
7,094
Лучшие ответы
226
Репутация
2,455
Награды
11
В этой теме я покажу, как заставить объект плавно вращаться вокруг выбранной оси. Не забываем, что материал опубликован в феврале 2011 года, а SA-MP 0.3d с плавным движением вышел только через 10 месяцев после ;)

В начало мода, либо к своим new:
PHP:
new CurrentObject, AxisOfRotation, iteration;
В OnGameModeInit:
PHP:
CurrentObject = CreateObject(....); // создаём объект
В OnPlayerCommandText (в тестовом режиме, пихайте в свои командные процессоры, если хотите):
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--;  
     }  
}
 
Сверху Снизу