Убивает сразу

Тема в разделе "Программирование / Скриптинг", создана пользователем Hejter, 20 май 2016.

  1. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Решил переписать кровотечение на новый синтаксис и вроде бы все работает.
    Исходники
    Проблема: Если в кваре стоит снимать 10 хп когда идет кровотечение, то когда у игрока остается 10 хп его сразу же убивает или меньше 10 хп (не успеет даже пройти таймер его убьет).
     
  2. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.566
    Симпатии:
    1.988
    Код:
    int health = GetClientHealth(client) - GetConVarInt(g_hBleedingHealth);
    if (health < 1) KillPlayer(client);
    Сам же написал, что пусть убивает, когда разница меньше единицы, хотя время ещё не пришло.
     
  3. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    @AlmazON, Дело в том что, если у игрока осталось 8 ХП, а по квару снимает 10 ХП то через секунду его убьет.
     
  4. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.566
    Симпатии:
    1.988
    Я тебе и сказал. Смотри внимательно указанное место:
    Код:
    stock bool StartBleeding(int client)
    {
    	int health = GetClientHealth(client) - GetConVarInt(g_hBleedingHealth);
    	//Допустим, у игрока сейчас 5 ХП: 5 - 5 = 0. health = 0.
    	
    	if (i_bleeding[client] > 0)
    	{
    		i_bleeding[client]--;
    		PrintHintText(client, "<font color='#ff0000'>Кровотечение через %d</font>", i_bleeding[client]);
    
    		//Первый "тик" таймера, а health уже < 1 - убивает, хотя время и остаётся.
    		if (health < 1) KillPlayer(client);
    	}
    	
    	else if (i_bleeding[client] == 0 && health <= GetConVarInt(g_hBleedingBorder))
    	{
    		SetEntityHealth(client, health);
    		i_bleeding[client] = GetConVarInt(g_hBleedingTime);
    	}
    }
    Оффтоп
     
  5. Крабос

    Крабос

    Сообщения:
    47
    Симпатии:
    21
    Код:
    int health = GetClientHealth(client) - GetConVarInt(g_hBleedingHealth);
    У тебя оно узнает сколько хп будет у игрока,если кровотечение нанесет урон.
    Ну вот если у тебя и остается 8 хп,то health уже будет равен -2.

    Вот тут и срабатывает твой KillPlayer(client) во время таймера, который сразу и убивает
     
  6. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    @AlmazON, нет писать за меня не нужно, надо учиться самому.

    Код:
    stock bool StartBleeding(int client)
    {
        int health = GetClientHealth(client) - GetConVarInt(g_hBleedingHealth);
       
        if (i_bleeding[client] > 0)
        {
            PrintHintText(client, "<font color='#ff0000'>Кровотечение через %d</font>", i_bleeding[client]--);
        }
       
        else if (i_bleeding[client] == 0 && health <= GetConVarInt(g_hBleedingBorder))
        {
            if (health < 1)
            {
                KillPlayer(client);
            }
            else
            {
                SetEntityHealth(client, health);
                i_bleeding[client] = GetConVarInt(g_hBleedingTime);
            }
        }
    }
     
  7. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.566
    Симпатии:
    1.988
    Приходится...
    PHP:
    stock bool StartBleeding(int client)
    {
        
    int health GetClientHealth(client);
        if(
    health GetConVarInt(g_hBleedingBorder)) b_bleeding[client] = false;

        else if (
    i_bleeding[client] > 0)
        {
            
    i_bleeding[client]--;
            
    PrintHintText(client"<font color='#ff0000'>Кровотечение через %d</font>"i_bleeding[client]);
        }
       
        else if (
    i_bleeding[client] == 0)
        {
            if ((
    health -= GetConVarInt(g_hBleedingHealth)) > 0)
            {
                
    SetEntityHealth(clienthealth);
                
    i_bleeding[client] = GetConVarInt(g_hBleedingTime);
            }
            else 
    KillPlayer(client);
        }
    }
    У тебя опять расчёт не на месте и, если у игрока регенерация, то всё равно может начаться кровотечение, хоть его ХП уже и больше квара начала кровотечения.
     
    Hejter и Крабос нравится это.
  8. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    @AlmazON, я об этом не думал.
    --- Добавлено позже ---
    Ну все, вопрос решен.
     
    Последнее редактирование: 20 май 2016