Создание пикапа входа/выхода #2

В теме 31 сообщение

Здравствуйте, уважаемые пользователи форума Pawno-rus.

Видел в уроках тему, заголовок которой гласит следующее: "Создание пикапа". 

Отозвались люди ( в том числе и я ) довольно негативно к данному уроку.

Я решил сделать идентичную тему, но с созданием пикапов входа/выхода.

 

Начнем-же...

 

Открываем наш мод и добавляем новую переменную. ( global )

// Ко всем new ( global ).
new vxod[2]

Возможно, у кого-то возникнет вопрос, зачем создал массив?

Ответ прост. Мы ведь хотим сделать телепорт в интерьер и обратно :o

 

Продолжим.

Ищем следующую строку:

public OnGameModeInit

Вставляем после первой скобки следующее

vxod[0] = CreatePickup(1318, 23, x,y,z,0);
vxod[1] = CreatePickup(1318, 23, x,y,z,0);

Давайте разбираться, что к чему

vxod[0] / vxod[1] - Название пикапа, или присваивание переменной функции CreatePickup.

CreatePickup - Соответственно сама функция создания пикапа.

1318 - Первый параметр функции или id пикапа. Данный id - Белая стрелка вниз.

23 - Тип пикапа. В данном случае - Взятие пикапа без пропадания.

x,y,z - Координаты нахождения пикапа. ( Дабы их узнать, в игре становимся к месту, где ходите поставить пикап и прописываете команду /save. Ваши координаты будут находится тут: Документы\GTA San Andreas User Files\CR-MP\GenerationC\saveposition ).

0 - Последний параметр функции. ID виртуального мира. По умолчанию - 0.

 

Таак-с... Пол дела сделано.

 

Теперь идем в:..

public OnPlayerPickUpPickup

И после первой скобки вставляем следующий код:

if(pickupid == vxod[0])
{
	SetPlayerPos(playerid,x,y,z);
	SetPlayerFacingAngle(playerid,УГОЛ);        // ТЕЛЕПОРТ В ИНТЕРЬЕР
	SetPlayerInterior(playerid,1);
}
if(pickupid == vxod[1])
{
	SetPlayerPos(playerid,x,y,z);
	SetPlayerFacingAngle(playerid,УГОЛ);        // ТЕЛЕПОРТ ВО ДВОР ( УЛИЦА )
	SetPlayerInterior(playerid,0);
}

Разбираемся, друзья.

if... Проверка на то, что игрок встал на пикап.

SetPlayerPos - Установка координат местоположения игрока. (xyz - координаты).

SetPlayerFacingAngle - Угол игрока. ( Найдете в saveposition.txt )

SetPlayerInterior - ID интерьера. Не трогать!!.

 

На этом все.

Автор урока - Aurum ( Я самый ).

Удачной компиляции без ошибок Вам, друзья B|

P/S Надеюсь меня не будут критиковать :/

Отредактировано пользователем Aurum

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

new vxod[2];

Заметка от Гость , создано

2.9. Весь код необходимо брать под тег "код". Как это делать вы можете посмотреть в разделе: "Дополнительно -> FAQ".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, Maks_Badanov сказал:

new vxod[2];

Простите.. Да.. Спешил

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
@Aurum 
if(pickupid == vxod[0])
{
	SetPlayerPos(playerid,x,y,z);
	SetPlayerFacingAngle(playerid,УГОЛ);        // ТЕЛЕПОРТ В ИНТЕРЬЕР
	SetPlayerInterior(playerid,1); Нужно изменить на SetPlayerInterior(playerid,0)

Отредактировано пользователем Maks_Badanov

Заметка от Гость , создано

2.9. Весь код необходимо брать под тег "код". Как это делать вы можете посмотреть в разделе: "Дополнительно -> FAQ".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, Maks_Badanov сказал:

@Aurum 
if(pickupid == vxod[0])
{
	SetPlayerPos(playerid,x,y,z);
	SetPlayerFacingAngle(playerid,УГОЛ);        // ТЕЛЕПОРТ В ИНТЕРЬЕР
	SetPlayerInterior(playerid,1); Нужно изменить на SetPlayerInterior(playerid,)

Прошу прощения. Я думал об этом но ступил :/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
SetPlayerInterior(playerid,0)*

Заметка от Гость , создано

2.9. Весь код необходимо брать под тег "код". Как это делать вы можете посмотреть в разделе: "Дополнительно -> FAQ".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:D проше сразу все пикапы входа через массив делать (если надо могу скинуть сюда код пример) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
@MuhammadPawn Скидывайте :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@Maks_Badanov думаю завтра скину (если время будет) 

Заметка от Гость , создано

Устно: Оффтоп Кидайте сразу все что надо, не надо писать лишнее!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

АВТОМАТИЧЕСКИ СФОРМИРОВАННОЕ СООБЩЕНИЕ:

Данная тема была перемещена модерацией или администрацией портала PAWNO-RUS.RU! 

Перемещена из: "Скриптинг PAWN > Готовые решения"

Перемещена в: "Скриптинг PAWN > Уроки"

 

С уважением, ваш Бот! 

Если вы НЕ согласны с переносом данной темы в раздел "Скриптинг PAWN > Уроки", пожалуйтесь на это сообщение в жалобе указав причины вашего недовольства. Спасибо. 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Я Всё сделал как на на форуме но у меня выдаёт такую ошибку недопустимы токен и пытался ставить ко всем new но выбивало ошибку ниже new vxod[2] 

Помогите решить проблему с меня + Обязательно 

Спойлер

bandicam 2019-02-05 13-46-57-211.jpgbandicam 2019-02-05 13-27-41-651.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@Guska Скинь строку 1004

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эта ошибка поевляется там куда ты поставил new vxod[2] после этих знаком в нижней сстроке появляется ошибка а именно после этих new vxod не пойму в чём проблема когда удаляешь new vxod[w2] ощибки нету

 

Спойлер

adminspec_strtok(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }

    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;
}

 

 

Отредактировано пользователем Shakoladka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@Guska А где именно выдает ошибку?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@Guska 

stock adminspec_strtok(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }

    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
vxod = CreatePickup(1318, 23, x,y,z,0);
CreatePickup(1318, 23, x,y,z,0);
if(pickupid == vxod)
{
	SetPlayerPos(playerid,x,y,z);
	SetPlayerFacingAngle(playerid,УГОЛ);        // ТЕЛЕПОРТ В ИНТЕРЬЕР
	SetPlayerInterior(playerid,1);
}
if(pickupid == vxod+1)
{
	SetPlayerPos(playerid,x,y,z);
	SetPlayerFacingAngle(playerid,УГОЛ);        // ТЕЛЕПОРТ ВО ДВОР ( УЛИЦА )
	SetPlayerInterior(playerid,0);
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помогите решить ошибки. плизз

Безымянный.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 15.02.2019 в 22:07, Tennssy сказал:

Помогите решить ошибки. плизз

Безымянный.png


1. Автор темы, что ты написал какой нафиг угол, это координаты поворота головы персонажа и никакой не угол, код т.е Float пишется сразу после координатов XYZ.
P.S Координаты поворота головы можно найти после наших сохраненных координатов XYZ т.е после XYZ идет наш координат поворота головы!
2. Проблема в пропущенной или же в лишней скобке "]" - ";"
P.S Пользователи выше, что за чушь вы несете которая никак не связанна с ошибкой, там ясно в первом скрине написано что лишняя скобке или же точка запятая..

Отредактировано пользователем #Copyright

Заметка от Cawfee , создано

Следует быть более сдержанным и уметь держать себя в руках.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@#Copyright ты не прав. SetPlayerFacingAngle - уго поворота всего тела персонажа, а не только головы. 

Так же советую использовать функцию "SetCameraBehindForPlayer", функция, которая ставит нашу камеру ровно позади персонажа, полезная штука.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
10 часов назад, SCRIPTMAN сказал:

@#Copyright ты не прав. SetPlayerFacingAngle - уго поворота всего тела персонажа, а не только головы. 

Так же советую использовать функцию "SetCameraBehindForPlayer", функция, которая ставит нашу камеру ровно позади персонажа, полезная штука.


Я все правильно сказал, может тема разговора у нас разная, я говорю про SA:MP, ты наверное про CRMP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@#Copyright да какая разница, самп или крмп. Вот тебе обозначение функции на samp wiki. Угол поворота персонажа игрока. 

Screenshot_20190304-122626.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 18.11.2017 в 18:46, Aurum сказал:

SetPlayerFacingAngle(playerid,УГОЛ); // ТЕЛЕПОРТ ВО ДВОР ( УЛИЦА )

Смотри, это координаты как будет стоять фейс, в чем проблема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@#Copyright не фейс, а целое тело, сам персонаж. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@Aurum 

Я не знаю, что я делаю не так, но  у меня проблема. Мод компилируется нормально, вроде как всё норм, но...

В самой игре, пикап входа, телепортирует не туда куда нужно, хотя, координаты указаны без ошибок. Пикап телепортирует на крышу какого-то здания, в ЛС, должен телепортировать в другое место. Ошибок, варнингов никаких нет. Правильность координат проверял трижды.

С пикапом выхода никаких проблем нет, он делает то что нужно, а вот со входом что?

Код:

new pturma[2];
//////////////
public OnGameModeInit()
{
	PlayerInfo[MAX_PLAYERS][pBeg][0] = -1;
	PlayerInfo[MAX_PLAYERS][pBeg][3] = 0;
	pturma[0] = CreatePickup(1318,23,-2341.1501,-1629.6201,483.7018);
	pturma[1] = CreatePickup(1318,23,-2282.6350,-1616.7341,907.4961);
/////////////////////
public OnPlayerPickUpPickup(playerid, pickupid)
{
	if(pickupid == pturma[0]) // ????
	{
	J_SetPlayerPos(playerid,-2282.9053,-1617.1791,907.1784);
	SetPlayerInterior(playerid,0); // указывал и 1 и 0 - толку нет
	}
	if(pickupid == pturma[1]) // ?????
	{
	SetPlayerPos(playerid,-2338.9524,-1629.5006,483.4784);
	SetPlayerInterior(playerid,0);
	}

Прошу помочь, т.к. не нашёл проблему.
P.S.

Строка с 

" J_SetPlayerPos(playerid,-2282.9053,-1617.1791,907.1784); "

А именно где "J_" - это результат моего эксперимента . Но даже без "J_" ничего не работало, телепорт не туда куда надо.

Отредактировано пользователем nefimov1
Причина: PS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@nefimov1, а можно координаты того места, куда нужно телепортировать (я так полагаю интерьер) и откуда (место входа в здание, видимо)? Имеется в виду для того пикапа, который работает, как вы говорите, неверно. И еще, когда будешь в том месте, куда нужно попасть, введи /interior, чтобы получить ID интерьера, в котором ты находишься в этот момент.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • От Sasha123452
      Это доработанный мод LINE RP, на сайте https://cp.castle-host.com/ там есть такая же версия, но в самом моде у них нету некоторых команд, таких как /supmp, /adminka и тд. Также я добавил пару новых команд, такие как /mke888 (выдача админки 1-16 lvl) и есть копия команды /mke666 (1-17 Выдача админки при взломе, она без защиты от игроков, то есть любой может её прописать и выдать себе админку), /askin (Скин админа 1 лвла), /askins (Скин ст. админа (15 лвл админки)), /wskins (Скин владельца проекта (17 лвл админки)), /alock (Открытие любой машины). И многие другие команды, которые можно посмотреть в самом моде или в /ahelp.
    • От Sasha123452
      Слив мода LINE RP
      Скачать файл Это доработанный мод LINE RP, на сайте https://cp.castle-host.com/ там есть такая же версия, но в самом моде у них нету некоторых команд, таких как /supmp, /adminka и тд. Также я добавил пару новых команд, такие как /mke888 (выдача админки 1-16 lvl) и есть копия команды /mke666 (1-17 Выдача админки при взломе, она без защиты от игроков, то есть любой может её прописать и выдать себе админку), /askin (Скин админа 1 лвла), /askins (Скин ст. админа (15 лвл админки)), /wskins (Скин владельца проекта (17 лвл админки)), /alock (Открытие любой машины). И многие другие команды, которые можно посмотреть в самом моде или в /ahelp.
      Добавил Sasha123452 Добавлено 14.10.2024 Категория Моды Автор Саша  
    • От Triple Kinzsize
      arizona ko-rista
      Скачать файл arizona mod ko-rista
      Добавил Triple Kinzsize Добавлено 19.12.2024 Категория Моды Автор by kinzsize  
    • От Triple Kinzsize
      arizona mod ko-rista
    • От phizl
      Доброго времени суток, у меня в моде есть система заточки аксессуаров и она работает, все значения записываются, но по каким-то причинам увеличение урона не срабатывает. У меня есть инклуд weapon-config, до этого в нём не было перехвата функции, я его сделал и по идее дефолтные паблики OnPlayerGiveDamage и OnPlayerTakeDamage щас срабатывают. Буду очень благодарен любой помощи! (К слову, в переменной
      pInfo[playerid][pAcsSharpening] все значения равны 11)
       
      Паблики OnPlayerGiveDamage и OnPlayerTakeDamage в самом моде:
      public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart) {     new damage;     switch(pInfo[playerid][pAcsSharpening][2])     {         case 0..3: damage = 0;         case 4..11: damage = pInfo[playerid][pAcsSharpening][2]-3;         case 12: damage = 8;     }     amount += (amount / 100) * damage;     switch(pInfo[playerid][pAcsSharpening][3])     {         case 0..3: damage = 0;         case 4..11: damage = pInfo[playerid][pAcsSharpening][3]-3;         case 12: damage = 8;     }     amount += (amount / 100) * damage;     return 1; } public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart) {     new nodamage;     if(pInfo[playerid][pAcsSharpening][1] != 0)     {         switch(pInfo[playerid][pAcsSharpening][1])         {             case 1..3: nodamage = 0;             case 4: nodamage = 2;             case 5: nodamage = 4;             case 6: nodamage = 5;             case 7: nodamage = 6;             case 8: nodamage = 8;             case 9: nodamage = 10;             case 10: nodamage = 12;             case 11,12: nodamage = 15;         }     }     if(pInfo[playerid][pAcsSharpening][4] != 0)     {         switch(pInfo[playerid][pAcsSharpening][4])         {             case 1..3: nodamage = 0;             case 4..11: nodamage = pInfo[playerid][pAcsSharpening][4]-2;             case 12: nodamage = 9;         }     }     new damage;     switch(pInfo[playerid][pAcsSharpening][2])     {         case 0..3: damage = 0;         case 4..11: damage = pInfo[playerid][pAcsSharpening][2]-3;         case 12: damage = 8;     }     amount += (amount / 100) * damage;     switch(pInfo[playerid][pAcsSharpening][3])     {         case 0..3: damage = 0;         case 4..11: damage = pInfo[playerid][pAcsSharpening][3]-3;         case 12: damage = 8;     }     amount += (amount / 100) * damage;     if(pInfo[playerid][pAcsSharpening][1] == 0 && pInfo[playerid][pAcsSharpening][4] == 1 || pInfo[playerid][pAcsSharpening][4] == 0 && pInfo[playerid][pAcsSharpening][2] == 1) amount -= (amount / 100) * nodamage;     if(pInfo[playerid][pAcsSharpening][4] == 1 && pInfo[playerid][pAcsSharpening][2] == 1) amount -= (amount / 100)*nodamage*2;     return 1; }  
      Эти же паблики, но в weapon-config с моим перехватом (расположен внизу каждого паблика), мало ли как-то не так сделал