07:28
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Dima-kun  
Форум SAMP о мультиплеерах для GTA. »   » Wiki-Samp-Rus » Дополнительные фунции (0.0 - X 34.0 - Y 1000.0 - Z)
Дополнительные фунции
theAloneДата: Вторник, 19.08.2008, 13:42 | Сообщение # 1
Долгожитель
Группа: Пользователи
Сообщений: 1380
Награды: 1
Город: Москва
Репутация: 92
Замечания: 0%
Статус:
AddAllClass - добавляет все скины 1 коммандой.

Code
public AddAllClass(Float:x,Float:y,Float:z,Float:r,w1,a1,w2,a2,w3,a3)
  for(new i; i < 300; i++)
      if(IsValidSkin(i)) AddPlayerClass(i,x,y,z,r,w1,a1,w2,a2,w3,a3);
public IsValidSkin(skinid)
{
  #define    MAX_BAD_SKINS   14
  new badSkins[MAX_BAD_SKINS] = {
   3, 4, 5, 6, 8, 42, 65, 74, 86,
   119, 149, 208, 273, 289
  };
  if  (skinid < 0 || skinid > 299) return false;
  for (new i = 0; i < MAX_BAD_SKINS; i++) {
      if (skinid == badSkins[i]) return false;
  }
  #undef MAX_BAD_SKINS
  return true;
}

Пример использования:

Code
AddAllClass(0.0,34.0,1000.0,50.0,46,1,24,100,15,1);

0.0 - X
34.0 - Y
1000.0 - Z
50.0 - поворот
46 - 1 оружие
1 - патроны 1 оружия
24 - 2 оружие
100 - патроны 2 оружия
15 - 3 оружие
1 - патроны 3 оружия

AlekseyДата: Вторник, 19.08.2008, 19:51 | Сообщение # 2
Советчик
Группа: Продвинутые
Сообщений: 1028
Награды: 5
Город: Челябинск
Репутация: 41
Замечания: 0%
Статус:
public AddAllClass(Float:x,Float:y,Float:z,Float:r,w1,a1,w2,a2,w3,a3)
{
for(new i; i < 300; i++) {if(IsValidSkin(i)) AddPlayerClass(i,x,y,z,r,w1,a1,w2,a2,w3,a3);}
return 1;
}
public IsValidSkin(skinid)
{
new badSkins[14] = { 3, 4, 5, 6, 8, 42, 65, 74, 86, 119, 149, 208, 273, 289 };
if (skinid < 0 || skinid > 299) return 0;
for (new i = 0; i < 14; i++) { if (skinid == badSkins[i]) return 0; }
return 1;
}
более валидный код



вааааааааааййй..// :(0
SpiritДата: Суббота, 30.08.2008, 10:29 | Сообщение # 3
Освоившийся
Группа: Продвинутые
Сообщений: 129
Награды: 1
Город: Омск
Репутация: 14
Замечания: 0%
Статус:
Code

Float:abs(Float:x)
{
  return x<0?x*(-1):x;
}
forward CameraMove(playerid,Float:PosX,Float:PosY,Float:PosZ,Float:ToX,Float:ToY,Float:ToZ,Float:LookX,Float:LookY,Float:LookZ,Float:speed);
public CameraMove(playerid,Float:PosX,Float:PosY,Float:PosZ,Float:ToX,Float:ToY,Float:ToZ,Float:LookX,Float:LookY,Float:LookZ,Float:speed)
{
  new  Float:Speed = speed/100;
  if(PosX < ToX)
      PosX = (abs(PosX - ToX) < Speed)?ToX:PosX + Speed;
  else if(PosX > ToX)
   PosX = (abs(ToX - PosX) < Speed)?ToX:PosX - Speed;
    
     if(PosY < ToY)
      PosY = (abs(PosY - ToY) < Speed)?ToY:PosY + Speed;
  else if(PosY > ToY)
   PosY = (abs(ToY - PosY) < Speed)?ToY:PosY - Speed;
    
     if(PosZ < ToZ)
      PosZ = (abs(PosZ - ToZ) < Speed)?ToZ:PosZ + Speed;
  else if(PosZ > ToZ)
   PosZ = (abs(ToZ - PosZ) < Speed)?ToZ:PosZ - Speed;
  SetPlayerCameraPos(playerid,PosX,PosY,PosZ);
  SetPlayerCameraLookAt(playerid,LookX,LookY,LookZ);
  printf("%f|%f|%f",PosX,PosY,PosZ);
  printf("^%f|%f|%f",ToX,ToY,ToZ);
  if(PosX != ToX || PosY != ToY || PosZ != ToZ)
      SetTimerEx("CameraMove",10,0,"dffffffffff",playerid,PosX,PosY,PosZ,ToX,ToY,ToZ,LookX,LookY,LookZ,speed);
}

Функция движения камера игрока на подобие передвижения объектов, функцию можно доработать если знать как имея координаты на которые направлена камера получить угол её поворота по всем 3 осям, задача для математиков(геометрия).
Использовать её туго так как нет функции позволяющей получить координаты камеры игрока приходится самостоятельно высчитывать стартовые координаты, но вообще как вариант использования это перед стартом гонок, идёт отсчёт времени и камера передвигается за машину игрока. Помните что после того как движение будет закончено необходимо вернуть камеру игроку для этого используется функция SetCameraBehindPlayer(playerid) в случае с гонками можно дописать следующий код.

Code

forward CameraBehind(playerid);
public CameraBehind(playerid)
{
SetCameraBehindPlayer(playerid);
}

Немного меняем конец функции движения камеры
Code

f(PosX != ToX || PosY != ToY || PosZ != ToZ)
      SetTimerEx("CameraMove",10,0,"dffffffffff",playerid,PosX,PosY,PosZ,ToX,ToY,ToZ,LookX,LookY,LookZ,speed);
else
             SetTimerEx("CameraBehind",1000,0,"d",playerid);//Теперь через секунду после окончания движения камеры она будет возвращена игроку

Добавлено (30.08.2008, 10:29)
---------------------------------------------
Другая функция на подобие движения объектов только эта их поворачивает (незнаю на сколько она новая, химичил сам), применение пока придумал только одно открытие/закрытие шлагбаумов, скоро скриптик выложу:

Code

Float:abs(Float:x)
{
  return x<0?x*(-1):x;
}

new TimerObjects[MAX_OBJECTS];
forward RotObjectMove(objectid,Float:ToRx,Float:ToRy,Float:ToRz,Float:speed);
public RotObjectMove(objectid,Float:ToRx,Float:ToRy,Float:ToRz,Float:speed)
{
  KillTimer(TimerObjects[objectid]);
  new Float:Speed = speed/10;
  new Float:Rx,Float:Ry,Float:Rz;
  GetObjectRot(objectid,Rx,Ry,Rz);
  if(Rx < ToRx)
      Rx = (abs(Rx - ToRx) < Speed)?ToRx:Rx + Speed;
  else if(Rx > ToRx)
   Rx = (abs(ToRx - Rx) < Speed)?ToRx:Rx - Speed;

     if(Ry < ToRy)
      Ry = (abs(Ry - ToRy) < Speed)?ToRy:Ry + Speed;
  else if(Ry > ToRy)
   Ry = (abs(ToRy - Ry) < Speed)?ToRy:Ry - Speed;

     if(Rz < ToRz)
      Rz = (abs(Rz - ToRz) < Speed)?ToRz:Rz + Speed;
  else if(Rz > ToRz)
   Rz = (abs(ToRz - Rz) < Speed)?ToRz:Rz - Speed;
  SetObjectRot(objectid,Rx,Ry,Rz);
  if(Rx != ToRx || Ry != ToRy || Rz != ToRz)
      TimerObjects[objectid] = SetTimerEx("RotObjectMove",10,0,"dffff",objectid,ToRx,ToRy,ToRz,speed);
  else
      TimerObjects[objectid] = -1;
}

Перед этим все элементы таймера желательно бы приравнять к (-1), а то ещё снесёт вам в моде таймер какой нужный.


Любиш садизм люби и мазахизм :)
OrangeДата: Среда, 03.09.2008, 19:47 | Сообщение # 4
Уважаемый человек
Группа: Продвинутые
Сообщений: 945
Награды: 6
Город: San Fierro
Репутация: 101
Замечания: 0%
Статус:
простенько и со вкусом :)
Получить имя игрока
Code
stock GetSimplePlayerName(playerid)
{
   new playername[24];
   GetPlayerName(playerid, playername, sizeof(playername));
   return playername;
}

это упрощает код, чем писать там new name... GetPlayerName в каждом куске мода можно просто использовать эу функцию. например format(string,sizeof(string)," Самый крутой чувак: %s", GetSimplePlayerName(playerid));

Добавлено (03.09.2008, 19:47)
---------------------------------------------
или еще мелочь:

Code
stock GivePlayerScore(playerid, score)
{
      SetPlayerScore(playerid,GetPlayerScore(playerid)+score);
}

ну это тоже просто, можно самому писать подобные функции упрощающие и укорачивающие код.

P.S 555 пост cool




Сообщение отредактировал Mishanzanza - Среда, 03.09.2008, 19:48
theAloneДата: Пятница, 05.09.2008, 18:09 | Сообщение # 5
Долгожитель
Группа: Пользователи
Сообщений: 1380
Награды: 1
Город: Москва
Репутация: 92
Замечания: 0%
Статус:
Code
stock SetPlayerMoney(playerid, money)
{
       GivePlayerMoney(playerid,ResetPlayerMoney(playerid)+money);
}

Устанавливает кол-во денег игроку.

MadCatДата: Пятница, 05.09.2008, 19:11 | Сообщение # 6
Освоившийся
Группа: Продвинутые
Сообщений: 113
Награды: 5
Город: Екатеринбург
Репутация: 24
Замечания: 0%
Статус:
Или
Code

stock SetPlayerMoney(playerid,money) {
   GivePlayerMoney(playerid,money-GetPlayerMoney(playerid));
}

:)



MultiGTA
Now open source
Последняя информация
LuxurYДата: Суббота, 06.09.2008, 22:20 | Сообщение # 7
Уверенный в себе
Группа: Продвинутые
Сообщений: 281
Награды: 1
Город: OZ
Репутация: 45
Замечания: 0%
Статус:
Code
stock GetRandomOnlinePlayer ( )
{
     new
         online[MAX_PLAYERS],
         loop;
     for ( new i; i < MAX_PLAYERS; i++ )
     {
         if ( IsPlayerConnected ( i ) == 1 ) online[loop++] = i;
     }
     return ( loop == 0 ) ? ( INVALID_PLAYER_ID ) : ( online[random ( loop )] );
}

ну вообщем название говорит за себя. если игроков нет возвращает неправильный ид игрока.


www.gtascript.ru admin
www.gtascript.ru - профессиональный скриптинг SA-MP, MTA
OrangeДата: Воскресенье, 07.09.2008, 17:16 | Сообщение # 8
Уважаемый человек
Группа: Продвинутые
Сообщений: 945
Награды: 6
Город: San Fierro
Репутация: 101
Замечания: 0%
Статус:
LuxurY, блин сидел мучался как такое замутить, а тут вуаля!


stepmexДата: Понедельник, 08.09.2008, 15:54 | Сообщение # 9
Мастер джэдай
Группа: Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус:
Возвращает ID игрока который сидит за рулем машины:
Code
stock IsVehicleDriver(vehicleid)
{
     for(new i = 0; i < MAX_PLAYERS; i++)
  {
   if(IsPlayerConnected(i) && IsPlayerInVehicle(i,vehicleid) && GetPlayerState(i) == 2)
   {
    return i;
   }
  }
  return INVALID_PLAYER_ID;
}



И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
[TDM]KosmosДата: Понедельник, 08.09.2008, 20:28 | Сообщение # 10
Мастер джэдай
Группа: Продвинутые
Сообщений: 2046
Награды: 8
Город: Йошкар-Ола
Репутация: 126
Замечания: 40%
Статус:
Напишите программный код пожайлуста, чтобы когда ты ВНН не мог садится за руль транспорта


Я вернулся =)
stepmexДата: Понедельник, 08.09.2008, 21:07 | Сообщение # 11
Мастер джэдай
Группа: Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус:
Quote (LOgotipik)
Напишите программный код пожайлуста, чтобы когда ты ВНН не мог садится за руль транспорта
такое пишиться индивидуально для каждого мода, т.к. ВНН встроенно в мод и передать его в другой код нереал.
Юзай OnPlayerEnterVehicle



И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
[TDM]KosmosДата: Вторник, 09.09.2008, 00:18 | Сообщение # 12
Мастер джэдай
Группа: Продвинутые
Сообщений: 2046
Награды: 8
Город: Йошкар-Ола
Репутация: 126
Замечания: 40%
Статус:
Я хочу это реализовать в PEN: LS+SF v1.5.3
Если можеш, помоги wink



Я вернулся =)
MadCatДата: Вторник, 09.09.2008, 06:19 | Сообщение # 13
Освоившийся
Группа: Продвинутые
Сообщений: 113
Награды: 5
Город: Екатеринбург
Репутация: 24
Замечания: 0%
Статус:
А я бы это сделал через OnPlayerStateChange... Вот так, например.
Code

  if (gPublicEnemy != INVALID_PLAYER_ID){
   if (gPublicEnemy == playerid && newstate == PLAYER_STATE_DRIVER){
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,COLOUR_RED,"ВВН не может садиться за руль!");
   }
  }



MultiGTA
Now open source
Последняя информация
[TDM]KosmosДата: Вторник, 09.09.2008, 07:11 | Сообщение # 14
Мастер джэдай
Группа: Продвинутые
Сообщений: 2046
Награды: 8
Город: Йошкар-Ола
Репутация: 126
Замечания: 40%
Статус:
Параллельный вопрос!
Вот это что за эррор?
Code
local variable "newstate" shadows a variable at a preceding level



Я вернулся =)

Сообщение отредактировал LOgotipik - Вторник, 09.09.2008, 07:15
MadCatДата: Вторник, 09.09.2008, 08:38 | Сообщение # 15
Освоившийся
Группа: Продвинутые
Сообщений: 113
Награды: 5
Город: Екатеринбург
Репутация: 24
Замечания: 0%
Статус:
Это варнинг... Переменная уже есть в коде... Покажи несколько строчек до и после той, на которой этот варнинг... Если это от вставки моего кода - покажи, куда вставил...


MultiGTA
Now open source
Последняя информация
Форум SAMP о мультиплеерах для GTA. »   » Wiki-Samp-Rus » Дополнительные фунции (0.0 - X 34.0 - Y 1000.0 - Z)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua