Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

regen health

Статус пользователя xoymiii
сообщение 15.12.2013, 13:32
Сообщение #1


Стаж: 13 лет

Сообщений: 769
Благодарностей: 244
Полезность: 567

Здравствуйте! Нужна помощь скриптеров. Плагин должен при получении дамага прибавлять 1 hp в 5 секунд. Он же работает как то не так. Прибавляет по то по 2, то по 1 и очень быстро. Где я туплю?

Код:
#include <amxmodx>
#include <fun>

public plugin_init() {
register_plugin("regen health", "1.0", "xoymiii")
register_event("Damage","add_health", "b")
}

public add_health(id) {
set_task(5.0, "regen", id, _, _, "b")
}

public regen(id){
if(is_user_alive(id)){
if(get_user_health(id) < 100)
set_user_health(id, get_user_health(id) + 1)
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Andrei
сообщение 15.12.2013, 13:45
Сообщение #2


Стаж: 15 лет

Сообщений: 1335
Благодарностей: 693
Полезность: 740

Потому как вызов register_event("Damage","add_health", "b") происходит при каждому получении урона,поэтому у тебя и идет некое зацикливание таска. Проверь на task_exists .

Отредактировал: Andrei, - 15.12.2013, 13:45
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя csnet
сообщение 15.12.2013, 13:50
Сообщение #3
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

или это не весь код, или нужно еще регенилку отключать как то, проще добавить уникальный id в таск. отключать после смерти например.
если регенилка действует только минуту логично сделать сделать set_task 1.0 и 60 раз c флагом "a"


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя xoymiii
сообщение 15.12.2013, 14:04
Сообщение #4


Стаж: 13 лет

Сообщений: 769
Благодарностей: 244
Полезность: 567

с проверкой на task_exists всё норм, спасибо

Код:
#include <amxmodx>
#include <fun>

public plugin_init() {
register_plugin("regen health", "1.0", "xoymiii")
register_event("Damage","add_health", "b")
}

public add_health(id) {
if(!task_exists(id))
set_task(5.0, "regen", id, _, _, "b")
}

public regen(id){
if(is_user_alive(id)){
if(get_user_health(id) < 100)
set_user_health(id, get_user_health(id) + 1)
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 15.12.2013, 17:37
Сообщение #5


Иконка группы

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

xoymiii,

А я бы сделал вот так:
Код:
#include <amxmodx>
#include <fakemeta>

new g_maxplayers

public plugin_init()
{
register_plugin( "regen health", "1.0", "xoymiii" )

g_maxplayers = get_maxplayers()

set_task( 5.0, "regen", _, _, _, "b" )
}

public regen( id )
{
for( new id = 1; id <= g_maxplayers; id ++ )
{
if( is_user_alive( id ) )
{
new Float:health; pev( id, pev_health, health )

if( health < 100.0 )
set_pev( id, pev_health, health + 1.0 )
}
}
}


Хотя, можно и фан вместо фейкметы, просто, в последнее время, оно мне симпатично ;D


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя xoymiii
сообщение 15.12.2013, 18:11
Сообщение #6


Стаж: 13 лет

Сообщений: 769
Благодарностей: 244
Полезность: 567

Цитата(AndrewZ @ 15.12.2013, 19:37) *
xoymiii,

А я бы сделал вот так:
Код:
#include <amxmodx>
#include <fakemeta>

new g_maxplayers

public plugin_init()
{
register_plugin( "regen health", "1.0", "xoymiii" )

g_maxplayers = get_maxplayers()

set_task( 5.0, "regen", _, _, _, "b" )
}

public regen( id )
{
for( new id = 1; id <= g_maxplayers; id ++ )
{
if( is_user_alive( id ) )
{
new Float:health; pev( id, pev_health, health )

if( health < 100.0 )
set_pev( id, pev_health, health + 1.0 )
}
}
}


Хотя, можно и фан вместо фейкметы, просто, в последнее время, оно мне симпатично ;D

можно и через fakemeta_util сделать =) я сегодня все эти 3 варианта делал)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 15.12.2013, 18:47
Сообщение #7


Иконка группы

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

xoymiii,
я имею в виду, что типо лучше 1 таск чем целая куча на каждого игрока.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: