Вопросы

John_Silver
Новичок

Помогите плиз кто сможет. Сделал систему голода, но ни как не тогу сделать смерть когда твой голод = 0.

Вот код:

 

Спойлер

stock EatStock()
{
    SetTimer("GolodTimer"20000true);
    return 1;
}

forward GolodTimer(playerid);
public GolodTimer(playerid)
{
    Player[playerid][pGolod] -= 1;
    if(Player[playerid][pGolod] < 20return SCM(playerid, -1"Âû õîòèòå åñòü");
    if(Player[playerid][pGolod] < 15)
    {
        SetTimer("MinGolod"10000true);
    }
    SavePlayer(playerid);
    return 1;
}

stock KillPlayer(playerid)
{
    SetPlayerHealth(playerid, 0);
    SpawnPlayer(playerid);
    return 1;
}

forward MinGolod(playerid);
public MinGolod(playerid)
{
    if(Player[playerid][pGolod] == 0return KillPlayer(playerid);
    SavePlayer(playerid);
    return 1;
}

 

 

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

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


Ссылка на сообщение

2 ответа на этот вопрос

  • 0
Cawfee
Великий Гуру

@John_Silver, функции GolodTimer и MinGolod никогда не будут вызываться, потому что в функции SetTimer вы задаете совсем другое определение этих функций (вы не указываете параметры функций GolodTimer и MinGolod, и машина ищет эти функции без параметров, причем ищет зря, ведь таких функций найти не сможет). Используйте SetTimerEx.

 

Касаемо функции GolodTimer. Если у игрока значение голода меньше 20, вы вызываете функцию отправки сообщения клиенту в чат и выходите из функции GolodTimer. Тем самым выделенный ниже красным фрагмент кода не будет исполняться никогда, а значит и никогда не будет сохраняться значение голода, никогда не будет вызвана функция MinGolod по таймеру.

 

Далее, говоря о SetTimerEx, обратите внимание, что в функции есть замечательный параметр repeating, который позволяет указывать, должна ли функция таймера вызываться каждый раз с заданным интервалом, либо лишь один раз. Для функции GolodTimer вам потребуется ее вызов регулярно с заданным интервалом (то есть repeating = true), в то же время для функции MinGolod потребуется лишь однократный вызов (repeating - false), причем именно в тот момент, когда значение голода уже на нуле.

 

Спойлер
Цитата

forward GolodTimer(playerid);
public GolodTimer(playerid)
{
    Player[playerid][pGolod] -= 1;
    if(Player[playerid][pGolod] < 20) return SCM(playerid, -1, "Âû õîòèòå åñòü");
    if(Player[playerid][pGolod] < 15)
    {
        SetTimer("MinGolod", 10000, true);
    }
    SavePlayer(playerid);
    return 1;

}

 

 

Сделав что-нибудь такое, жизнь станет прекрасна.

 

Спойлер

// в начало мода
new gHungerTimer[MAX_PLAYERS] = -1;

// сразу после загрузки аккаунта
gHungerTimer[playerid] = SetTimerEx("GolodTimer"10 * 1000true"i", playerid);

// куда-нибудь ...
forward GolodTimer(playerid); // обратите внимание, в определении функции теперь есть один параметр
public GolodTimer(playerid) { 

    /*
        если человек не играет (умер, авторизуется, в режиме наблюдения), 
        не имеет смысла считать его здоровье
    */

    new state = GetPlayerState(playerid);
    if (state == PLAYER_STATE_NONE || state == PLAYER_STATE_WASTED || state == PLAYER_STATE_SPECTATING) {
        return false;
    }

    if (Player[playerid][pGolod] > 0) { // чтобы не уйти в минус, лучше проверить
        Player[playerid][pGolod] -= 1;
    }

    if (Player[playerid][pGolod] < 5) {
        SendClientMessage(playerid, -1"Вы скоро можете умереть от голода");
    }

    else if (Player[playerid][pGolod] < 10) {
        SendClientMessage(playerid, -1"Вы очень голодны");
    }

    else if (Player[playerid][pGolod] < 20) {
        SendClientMessage(playerid, -1"Вы проголодались");
    }

    if (Player[playerid][pGolod] == 0) {
        SetTimerEx("MinGolod"20 * 1000false"i", playerid);
    }

    SavePlayer();
    return true;
}

forward MinGolod(playerid);
public MinGolod(playerid) {
    KillPlayer(playerid); // голод = 0, убиваем игрока
}

 

 

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


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

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

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

    • Korochansky
      От Korochansky
      Я рад объявить о выпуске первой публичной версии современной IDE с открытым исходным кодом под лицензией GPLv3 для разработки open.mp и SA-MP, которая отличается интеграцией с SAMPCTL, управлением зависимостями и встроенной поддержкой Git.
       
      Особенности:
      • Разработано специально для open.mp и SA-MP разработки.
      • Встроенная интеграция с SAMPCTL для создания, запуска и управления проектами.
      • Менеджер зависимостей для удобной установки и обновления серверных пакетов и компонентов.
      • Встроенная поддержка Git с индикаторами состояния репозитория и историей коммитов.
      • Маркеры истории изменений для отслеживания измененных и сохраненных строк.
      • Автоматическое сопоставление и выделение скобок
      • Предварительный просмотр цвета для значений RGBA и HEX прямо в редакторе.
      • Интеграция инструмента выбора цвета для быстрой вставки цветов в код Pawn.
      • Режим 'Разделенный редактор кода' для одновременной работы с несколькими файлами.
      • Дерево проекта, оптимизированное для крупных проектов.
      • Интегрированные панели вывода результатов сборки и консоли сервера.
      • Автоматический мониторинг и обновление файлов проектов.
      • Портативная версия (установка не требуется).
       
      В репозитории: https://github.com/daniilkorochansky/spawn
    • Margiela
      От Margiela
      устал от vs code + он часто конфликтует с маками, конкретно с версией M3(как у меня).
      имеются ли аналоги pawno на mac?