Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Показано с 1 по 6 из 6
  1. #1
    Аватар для Snoop_Dog
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.02.2014
    Сообщений
    65
    Репутация:
    0 ±

    По отнимания хп у игрока

    Есть глобальный таймер который обновляется каждую 1 секунду
    Но возникло 2 способа
    1.
    объявляется глобальная переменная new Hptimer_Player = 0;
    после чего в этом глобальном таймере происходит вот такое ветвление
    PHP код:
    Hptimer_Player ++;
        if(
    Hptimer_Player == 45)
        {
        
    HPPlayer(i);
        
    Hptimer_Player 0;
        } 
    В этом ветвление выполняется действие(stock) HPPlayer(i);

    2.
    объявляется PVar SetPVarInt(i, "HPPlayer", gettime() + 45); после него вот такое ветвление
    PHP код:
    if(GetPVarInt(i"HPPlayer") <= GetTime && GetPVarInt(i"HPPlayer") != 0)
        {
        
    GetPlayerHealth(iPLAYER[i][HEALTH]);
        if(
    PLAYER[i][HEALTH] <= floatround(10.0)) SendClientMessage(iCOLOR_ADM"Вам плохо! Лучше сходить к врачу на лечение или провести обследование");
        
    SetPlayerHealth(ifloatround(PLAYER[i][HEALTH] - 1.0));
        
    DeletePVar(i"HPPlayer");
        } 
    Последний раз редактировалось Snoop_Dog; 02.06.2015 в 22:40.

  2. #2
    Аватар для Londlem
    Модератор

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Сообщений
    1,360
    Репутация:
    767 ±
    Используйте второй вариант, можно без PVar'ов с проверкой на то делится ли unix-время на 45 без остатка:
    PHP код:
    if(== (gettime() % 45))
    {
        
    GetPlayerHealth(iPLAYER[i][HEALTH]);
        if(
    PLAYER[i][HEALTH] <= 10.0)
            
    SendClientMessage(iCOLOR_ADM"Вам плохо! Лучше сходить к врачу на лечение или провести обследование");

        
    SetPlayerHealth(iPLAYER[i][HEALTH] - 1.0);


  3. #3
    Аватар для Snoop_Dog
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.02.2014
    Сообщений
    65
    Репутация:
    0 ±
    Цитата Сообщение от Londlem Посмотреть сообщение
    Используйте второй вариант, можно без PVar'ов с проверкой на то делится ли unix-время на 45 без остатка:
    PHP код:
    if(== (gettime() % 45))
    {
        
    GetPlayerHealth(iPLAYER[i][HEALTH]);
        if(
    PLAYER[i][HEALTH] <= 10.0)
            
    SendClientMessage(iCOLOR_ADM"Вам плохо! Лучше сходить к врачу на лечение или провести обследование");

        
    SetPlayerHealth(iPLAYER[i][HEALTH] - 1.0);

    Хм.. стоит мне посмотреть мануал бы про unix, а так спасибо!

  4. #4
    Аватар для Snoop_Dog
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.02.2014
    Сообщений
    65
    Репутация:
    0 ±
    Есть еще один вопрос, но он не относится к этой тему, дабы не создавать новую тему я решил сюда написать

    Вопрос по форматированию и показа сообщения:
    Посмотрел в учебнике Daniel_Cortez'a про этот урок (форм. и показ сообщения)
    Например я хочу показать игроку имя:
    Старый показ
    PHP код:
    new string[64];
    format(stringsizeof(string), "Ваше имя: %s"Player[playerid][Name]);
    SendClientMessage(playerid, -1string); 
    Я не стал считать сам а указал в стринге макс. значение 64

    Способ второй
    PHP код:
    static const fmt_string[] = "Ваше имя: %s";
    new 
    string[sizeof(fmt_string)-2+MAX_PLAYER_NAME];
    format(stringsizeof(string), fmt_stringPlayer[playerid][Name]);
    SendClientMessage(playerid, -1string); 
    Как показывается в учебнике, 2 способ сам подсчитывает необходимый размер строки(то есть компилятор)

    Ну и главный вопрос какой из них лучше?
    Самому подсчитывать или пускай сам компилятор подсчитывает, не будет ли лагов из за 2 способа?
    Просто кто то 2 способа воздерживается и говорят что это плохо.

  5. #5
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,662
    Репутация:
    2145 ±
    Цитата Сообщение от Snoop_Dog Посмотреть сообщение
    не будет ли лагов из за 2 способа?
    На сервере? С чего бы это? Размер строки подсчитывается при компиляции, а не при выполнении на сервере.
    Для работы на сервере же одна выгода.
    Во-первых, компилятор сам рассчитает размер массивов под строки и скрипт будет использовать именно столько места в стеке, сколько нужно, а не сколько захотела ваша правая пятка.
    Во-вторых, скрипт будет работать быстрее: при создании локальных массивов (в т.ч. и под строки) все элементы инициализируются нулями (иначе в массиве будут мусорные значения из стека, оставшиеся после выполнения другого кода). Чем меньше элементов (см. 1), тем быстрее процесс инициализации массива.


    Цитата Сообщение от Snoop_Dog Посмотреть сообщение
    Просто кто то 2 способа воздерживается и говорят что это плохо.
    Так обычно говорят те, кто не осилил набор текста и печатает со скоростью 1-2 символа в секунду. На том же govno-info это чуть ли не каждый второй. Nuff said.

    P.S.: Выдал предупреждение за нарушение пункта 9.3 ОПФ.
    3. Также в темах с вопросами запрещено удаление и/или изменение постов с целью скрыть их содержимое (например, замена содержимого поста на "delete" или любой другой бесполезный текст).
    Помните: на портале Вам помогают безвозмездно, не требуя ничего взамен - так помогите и Вы другим людям с таким же вопросом, дав им возможность найти ответ, посмотрев Вашу тему. Никто не любит эгоистов.
    Содержимое 1 поста восстановил.
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  6. Пользователь сказал cпасибо:
    Snoop_Dog (03.06.2015)
  7. #6
    Аватар для Snoop_Dog
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.02.2014
    Сообщений
    65
    Репутация:
    0 ±
    Тему можно закрывать.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •