Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Телепорт по выстрелу для админов - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Scr ][ All ]
Телепорт по выстрелу для админов Через WeaponShot
Оценка: -----

#1
Пользователь офлайн   Lanzo 

  • Пользователь
  • Вставить ник
  • Раскрыть информацию
Короче, я писал такую хрень что бы когда игрок бил воздух то его тпхало вперёд, но там были баги и я решил сделать такую хрень, типа если игрок выстрелит в пол, то его туда тпхнет
Это к командам(ну там проверочки на админку сами делайте)
if (strcmp("/keyfire", cmdtext, true) == 0)
	{
	if(GetPVarInt(playerid, "keyfirea") == 0)
	{
	SetPVarInt(playerid, "keyfirea", 1);
	SCM(playerid, COLOR_LGREEN, " KeyFire ON");
	}
	if(GetPVarInt(playerid, "keyfirea") == 1)
	{
	SetPVarInt(playerid, "keyfirea", 0);
	SCM(playerid, COLOR_RED, "KeyFire OFF");
	}
	}

А это в OnPlayerWeaponShot
	if(GetPVarInt(playerid, "keyfirea") == 1) {
	if(fX != 0 && fY != 0 && fZ != 0) //Это проверка на то что бы чел не стрельнул в небо, и его не тпхнуло на ферму
        { if(hittype == 0) //Знач это проверка на то что это Объект стандарт
        { SetPlayerPos(playerid, fX, fY, fZ+1); //Ну и тпшим песюна
        }  } }


Всё, это вот так просто, ах да, если у кого Неизвестные символы SCM - то, к дефайнам #define SCM SendClientMessage
p.s. Как это в игре:

Сообщение отредактировал Lanzo: 12 Октябрь 2017 - 19:22

2

#2
Пользователь офлайн   Skiffi 

  • HennessyProject
  • Вставить ник
  • Раскрыть информацию
Код, так скажем не очень.
Если ставите тэг [ All ], функции нужно использовать стандратные.
Идея не плохая.
0

#3
Пользователь офлайн   sql!te 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию
if (strcmp("/keyfire", cmdtext, true) == 0)
{
    if(GetPVarInt(playerid, "keyfirea") == 0)
    {
        SetPVarInt(playerid, "keyfirea", 1);
        SendClientMessage(playerid, COLOR_LGREEN, " KeyFire ON");
    }
    else
    {
        SetPVarInt(playerid, "keyfirea", 0);
        SendClientMessage(playerid, COLOR_RED, "KeyFire OFF");
    }
}


Тоже самое, но по-мне так это будет правильней, ибо у тебя 2 значения, а не 10.
А лучше всего создать булевую переменную.
Почитай внимательно про временные переменные.
0

#4
Пользователь офлайн   Long- 

  • Знаток
  • Вставить ник
  • Раскрыть информацию
Одно не понимаю, если ты выкладываешь свой код на всеобщее обозрение, почему сразу нельзя заменить на стандартные функции?
Зачем вот это все?
Мусорить в моде ничего более
0

#5
Пользователь офлайн   Long- 

  • Знаток
  • Вставить ник
  • Раскрыть информацию
Abramoff.A, если уже и говорить о оптимизации то:

new gKeyFireTP[MAX_PLAYERS char];


if (strcmp("/keyfire", cmdtext, true) == 0)
{
     gKeyFireTP{playerid} = !gKeyFireTP{playerid};
         return SendClientMessage(playerid, -1, gKeyFireTP{playerid} == 0 ? ("KeyFire OFF") : ("KeyFire ON"));
}


public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
      if(gKeyFireTP{playerid} == 1)
      {
           if(fX == 0 && fY == 0 && fZ == 0)
               return 1;

           if(hittype != BULLET_HIT_TYPE_NONE)
               return 1;

           SetPlayerPos(playerid, fX, fY, fZ+1);
      }
      return 1;
}

Сообщение отредактировал Long-: 14 Октябрь 2017 - 13:52

1

#6
Пользователь офлайн   McDowell 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияLong- (13 Октябрь 2017 - 12:16) писал:

...

Благодарю. С тем кодом вылезало две ошибки.
0

#7
Пользователь офлайн   SooBad 

  • SooGood-Ritorical
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияMcDowell (13 Октябрь 2017 - 19:52) писал:

Благодарю. С тем кодом вылезало две ошибки.

Ничего трагичного в этом нет.
Автор поста пропустил аргумент в функции SCM.

Корректный вариант:
if (strcmp("/keyfire", cmdtext, true) == 0)
{
     gKeyFireTP{playerid} = !gKeyFireTP{playerid};
         return SendClientMessage(playerid, -1, gKeyFireTP{playerid} == 0 ? ("KeyFire OFF") : ("KeyFire ON"));
}

0

#8
Пользователь офлайн   Nexius 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияLong- (13 Октябрь 2017 - 12:16) писал:

Abramoff.A, если уже и говорить о оптимизации то:

new gKeyFireTP[MAX_PLAYERS char];


if (strcmp("/keyfire", cmdtext, true) == 0)
{
     gKeyFireTP{playerid} = !gKeyFireTP{playerid};
         return SendClientMessage(playerid, -1, gKeyFireTP{playerid} == 0 ? ("KeyFire OFF") : ("KeyFire ON"));
}


public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
      if(gKeyFireTP{playerid} == 1)
      {
           if(fX == 0 && fY == 0 && fZ == 0)
               return 1;

           if(hittype != BULLET_HIT_TYPE_NONE)
               return 1;

           SetPlayerPos(playerid, fX, fY, fZ+1);
      }
      return 1;
}


1. Забыл bool
2. Аргументы fX, fY и fZ в OnPlayerWeaponShot типа Float, значит и проверять и работать с ними нужно не как с целыми числами
0

#9
Пользователь офлайн   Franko_Lee 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Ну такое..
Кому то может пойдет...
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей