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

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

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

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

Проверка здоровья вначале раунда

Статус пользователя Krevedko
сообщение 7.11.2010, 13:04
Сообщение #1


Стаж: 16 лет

Сообщений: 325
Благодарностей: 93
Полезность: 243

Здравствуйте! Мне нужно узнать сколько хп у юзера вначале раунда и присвоить переменную к этому количеству.
Смысл в том, что есть плагин amx_vampire, который добавляет хп после убийства, и есть варкрафт мод, где у разных игроков разное количество хп, например у всех по 100, а у HUMAN'a - 175. Так вот, этот плагин ограничивает хп после убийства кваром, то есть
Код
if (nKiller_hp > hp_maximux) nKiller_hp = hp_maximux

по дефолту hp_maximux = 100, вот и выходит, что игрок с 175 hp, после убийства остается со 100 hp
Вот я и решил сделать проверку на хп вначале раунда и каждому игроку присваивать свое hp_maximum. Но поскольку я 0 в скриптовании, то вот, что вышло:

Код
public logevent_Round_Start_checkhp()
{
    new players[32], id, pnum;
    get_players(players, pnum, "a");
    for(new i = 0; i < pnum; i++)
    id = players[i];
    {
        hp_maximux = get_user_health(id);
        return PLUGIN_CONTINUE
    }
}

public hook_death( id )
{
   // Killer id
   nKiller = read_data(1)
  
   if ( (read_data(3) == 1) && (read_data(5) == 0) )
   {
      nHp_add = get_pcvar_num (health_hs_add)
   }
   else
      nHp_add = get_pcvar_num (health_add)

   // Updating Killer HP
   if(!(get_user_flags(nKiller) & ADMIN_LEVEL_H))
   return;

   nKiller_hp = get_user_health(nKiller)
   nKiller_hp += nHp_add
   // Maximum HP check
   if (nKiller_hp > hp_maximux) nKiller_hp = hp_maximux
   set_user_health(nKiller, nKiller_hp)
   // Hud message "Healed +15/+30 hp"
   set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 1.0, 1.0, 0.1, 0.1, -1)
   show_hudmessage(nKiller, "Healed +%d hp", nHp_add)
   // Screen fading
   message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, nKiller)
   write_short(1<<10)
   write_short(1<<10)
   write_short(0x0000)
   write_byte(0)
   write_byte(0)
   write_byte(200)
   write_byte(75)
   message_end()

}


В результате работает через задницу, то 175 ограничение, то 100. Need help!

Отредактировал: Krevedko, - 7.11.2010, 13:05
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя GODZILLA
сообщение 7.11.2010, 16:43
Сообщение #2


Стаж: 18 лет

Сообщений: 1471
Благодарностей: 440
Полезность: 716

нутк конечно :) ты же проверяешь здоровье у конкретного игрока, а переменная ставится для всех.
щас подумаем
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Krevedko
сообщение 7.11.2010, 16:50
Сообщение #3


Стаж: 16 лет

Сообщений: 325
Благодарностей: 93
Полезность: 243

Ну вот я тоже подумал, что переменная-то одна, а игроков много :)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Ser_UFL
сообщение 7.11.2010, 17:42
Сообщение #4


Стаж: 19 лет

Сообщений: 1632
Благодарностей: 637
Полезность: 819

Код
#include <amxmodx>

#define PLUGIN "Plugin"
#define VERSION "Version"
#define AUTHOR "Author"

new Max_HP[32][10]

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)

    register_logevent("logevent_Round_Start_checkhp", 2, "1=Round_Start")    // или как ты там начало раунда ловишь...
}

public logevent_Round_Start_checkhp()
{
    new players[32], pnum

    get_players(players, pnum, "a")

    for (new i = 0; i < pnum; i++)
        setc(Max_HP[i], charsmax(Max_HP), get_user_health(i))
}



public hook_death(id)
{
    new hp_maximux, nKiller, nHp_add, health_hs_add, health_add, nKiller_hp

    // Killer id
    nKiller = read_data(1)

    if ((read_data(3) == 1) && (read_data(5) == 0))
        nHp_add = get_pcvar_num(health_hs_add)
    else
        nHp_add = get_pcvar_num(health_add)

    // Updating Killer HP
    if(!(get_user_flags(nKiller) & ADMIN_LEVEL_H))
        return

    nKiller_hp = get_user_health(nKiller)
    nKiller_hp += nHp_add

    // Maximum HP check
    hp_maximux = str_to_num(Max_HP[id])

    if (nKiller_hp > hp_maximux)
        nKiller_hp = hp_maximux

    set_user_health(nKiller, nKiller_hp)

    // Hud message "Healed +15/+30 hp"
    set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 1.0, 1.0, 0.1, 0.1, -1)
    show_hudmessage(nKiller, "Healed +%d hp", nHp_add)

    // Screen fading
    message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, nKiller)
    write_short(1<<10)
    write_short(1<<10)
    write_short(0x0000)
    write_byte(0)
    write_byte(0)
    write_byte(200)
    write_byte(75)
    message_end()
}


как-то так наверно... хз, писал на коленке..
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Krevedko
сообщение 7.11.2010, 17:49
Сообщение #5


Стаж: 16 лет

Сообщений: 325
Благодарностей: 93
Полезность: 243

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


Стаж: 16 лет

Сообщений: 325
Благодарностей: 93
Полезность: 243

HP не считывает к сожалению и выходит вот такая беда

Я когда эксперементировал у меня такая же байда выходила, когда я ошибку допускал в
public logevent_Round_Start_checkhp()

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