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

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

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

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

Мануал Ослепляющая граната

Статус
В этой теме нельзя размещать новые ответы.

Ashley100

Умник
Ку всем. Данная система можно сказать немного приблизит действия на серве, к реальности.

Описание:
Вы кидаете гранату, и всего кого заденет волна взрыва, будут ослеплены на ~3 секунды.

Начнем...

Создаем переменную TD и переменные для проверок

PHP:
new Text: FlashBang [ 5 ];

new FlashbangStage [ MAX_PLAYERS ];
new FlashbangSwayLevel [ MAX_PLAYERS ];
Теперь создадим сам TD, для этого идем в OnGameModeInit()
PHP:
for (new t = 1; t <= 4; t++)
 	{
  		FlashBang[t] = TextDrawCreate(-20.000000,2.000000,"|");
                TextDrawUseBox(FlashBang[t],1);
                TextDrawTextSize(FlashBang[t],660.000000,22.000000);
                TextDrawAlignment(FlashBang[t],0);
                TextDrawFont(FlashBang[t],3);
                TextDrawLetterSize(FlashBang[t],1.000000,52.200000);
                TextDrawBackgroundColor(FlashBang[t],0x000000ff);
                TextDrawColor(FlashBang[t],0x000000ff);
                TextDrawSetOutline(FlashBang[t],1);
                TextDrawSetProportional(FlashBang[t],1);
                TextDrawSetShadow(FlashBang[t],1);
        }

        TextDrawBoxColor(FlashBang[1],0xffffffff);
        TextDrawBoxColor(FlashBang[2],0xffffffaa);
        TextDrawBoxColor(FlashBang[3],0xffffff55);
        TextDrawBoxColor(FlashBang[4],0xffffff22);
И создадим команду
PHP:
CMD:flashka(playerid, params[])
{
    	new weaponId;
        new ammoAmount;
        GetPlayerWeaponData(playerid, 8, weaponId, ammoAmount);

        if (weaponId == WEAPON_GRENADE && ammoAmount > 0)
        {
            return SendClientMessage(playerid, -1, "У вас уже есть зажигательная граната.");
        }

        SendClientMessage(playerid, -1, "Вы взяли зажигательную гранату.");
        GivePlayerWeapon(playerid, WEAPON_GRENADE, 1);
        return 1;
}
Далее идем в OnPlayerTakeDamage, для того чтобы узнать кого ослепить
PHP:
        if (weaponid == WEAPON_GRENADE || weaponid == 51)// Ну тут ясно, проверка на оружее(граната)
        {
                new Float:health;//->
                GetPlayerHealth(playerid, health);// Получаем хп игрока
                SetPlayerHealth(playerid, (health - (amount * 0.3)));// Отбираем хп

                FlashbangStage[playerid] = 1;

                HandleFlashbangStage(playerid);
        }
Остались 2 паблика в которых и будет происходить действие

Вставить можете в конец мода:


PHP:
forward HandleFlashbangStage(playerid);
public HandleFlashbangStage(playerid)
{
	switch (FlashbangStage[playerid])
 	{
  		case 1 .. 5:
    	{
     		SetPlayerDrunkLevel(playerid, (FlashbangStage[playerid] == 1) ? 50000 : GetPlayerDrunkLevel(playerid));
  			if (FlashbangStage[playerid] == 2)
     		{
       			FlashbangSwayLevel[playerid] = 1;
          		HandleFlashbangSway(playerid);
            }
            if (FlashbangStage[playerid] < 5) TextDrawShowForPlayer(playerid, FlashBang[FlashbangStage[playerid]]);
            if (FlashbangStage[playerid] > 1) TextDrawHideForPlayer(playerid, FlashBang[FlashbangStage[playerid] - 1]);
            FlashbangStage[playerid] = ((FlashbangStage[playerid] == 5) ? -1 : FlashbangStage[playerid]);
       	}
	}
	if (FlashbangStage[playerid] < 5 && FlashbangStage[playerid] != -1)
 	{
  		FlashbangStage[playerid]++;
		new time = (FlashbangStage[playerid] == 2) ? 1800 : 100;
  		SetTimerEx("HandleFlashbangStage", time, false, "i", playerid);
    }
    return 1;
}

forward HandleFlashbangSway(playerid);
public HandleFlashbangSway(playerid)
{
    switch (FlashbangSwayLevel[playerid])
    {
    	case 1 .. 6:
		{
  			SetPlayerDrunkLevel(playerid, 10000 - (2000 * (FlashbangSwayLevel[playerid] - 1)));
     		if (FlashbangSwayLevel[playerid] == 6) FlashbangSwayLevel[playerid] = -1;
       	}
	}
 	if (FlashbangSwayLevel[playerid] < 6 && FlashbangSwayLevel[playerid] != -1)
  	{
		FlashbangSwayLevel[playerid]++;

		new time = (FlashbangSwayLevel[playerid] == 5) ? 1000 : 600;
		SetTimerEx("HandleFlashbangSway", time, false, "i", playerid);
  	}
}

Автор: CaveDweller
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу