Помощь с созданием Plug-In'а

Сообщения
51
Реакции
8
Помог
1 раз(а)
Всем привет,вообщем задумка в том,что если у игрока меньше 50 HP,то ему выдается скорость и с него льется кровь.

Я вот тут попытался это реализовать,но все равно работает не так,как надо,а именно:
1.После смены оружия сбрасывается скорость(Пытался реализовать с помощью отлова CurWeapon,но пока ничего не получается).
2.Если при нанесении урона HP у игрока больше 50,то все равно льется кровь

И вообще подскажите как это лучше сделать)
Код:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fun>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "serveer_222"

new arg[1]

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    RegisterHam(Ham_TakeDamage,"player","damager",1)
    register_event("CurWeapon","damager","be")
}

public damager(id){
    new hp=get_user_health(id)
    if (hp<50){
     set_user_health(id,hp+150)
     set_user_maxspeed(id,0)
     arg[0] = id
          set_task(1.0,"blood",3,arg,1,"b")
    }else{
     set_user_maxspeed(id,0)
    }
}
    
public blood(agr[]){
    if (is_user_alive(arg[0])){
    new origin[3]
    get_user_origin(arg[0],origin,0)
    message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
    write_byte(TE_BLOODSTREAM)
    write_coord(origin[0])
    write_coord(origin[1])
    write_coord(origin[2]+10)
    write_coord(random_num(-100,100))
    write_coord(random_num(-100,100))
    write_coord(random_num(-10,10))
    write_byte(70)
    write_byte(100)
    message_end()
    }else{
        return PLUGIN_HANDLED;
    }
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/
 

Вложения

Сообщения
51
Реакции
8
Помог
1 раз(а)
wopox1337, с CurWeapon вроде бы решил проблемуЯ другие флаги поставил,и вроде бы все нормально.
По поводу 2ого: "2.Если при нанесении урона HP у игрока больше 50,то все равно льется кровь",нет вариантов почему так?
 
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
Если при нанесении урона HP у игрока больше 50,то все равно льется кровь
все потому что арг у вас глобальная перменная. Вам достаточно зарегистрировать таск. И где ид таска указать например 100 + ид игрока. А в таске получать ид - 100
13 Июн 2018
с CurWeapon вроде бы решил проблему
все же лучше резетмаксспид хукать
 
Сообщения
51
Реакции
8
Помог
1 раз(а)
fantom, хорошо,большое спасибо)
С ResetMaxSpeed попробую)
 
Сообщения
2,713
Реакции
2,993
Помог
59 раз(а)
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
wopox1337, в данном случае таск не единый и зависит от хп игрока
 
Сообщения
51
Реакции
8
Помог
1 раз(а)
wopox1337, а как я без set_task сделаю,чтоб кровь лилась?
 
Сообщения
51
Реакции
8
Помог
1 раз(а)
wopox1337, тогда только 1 брызг крови идет.
А мне надо,чтоб постоянно(Через каждую 1 секунду) брызгало пока меньше 50HP)
 
Сообщения
51
Реакции
8
Помог
1 раз(а)
Всем привет,вообщем задумка в том,что если у игрока меньше 50 HP,то ему выдается скорость и с него льется кровь.
Алексеич, льется...постоянно льется...не 1 раз вылилось,а льется.
13 Июн 2018
Не актуально.Все решили.
 

Вложения

Последнее редактирование:
Сообщения
51
Реакции
8
Помог
1 раз(а)
При изменении plugin'а столкнулся в 2мя проблемами:

1.Если HP меньше 50(Именно 50),то при смене оружия сбрасывается скорость(Если HP больше 50,то все нормально)

2.Не отображается кровоток у игроков,которых я ранил(Тут никаких закономерностей нет,бывает я у 2ух игроков вижу кровотечение,бывает у 1)

Исходный код:
Код:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fun>

new Ham:Ham_CS_Player_ResetMaxSpeed = Ham_Item_PreFrame

#define PLUGIN "RealHL"
#define VERSION ""
#define AUTHOR "serveer_222"

enum _:Coords
{
    x,
    y,
    z
}


new n_hp
new n_speed
new n_time

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    RegisterHam(Ham_TakeDamage,"player","damager",1)
    RegisterHam(Ham_CS_Player_ResetMaxSpeed,"player","damager",0)
 
}

public plugin_cfg() {
    n_hp = register_cvar("n_hp","50")
    n_speed = register_cvar("n_speed","200.0")
    n_time = register_cvar("n_time","0.3")
    server_cmd("exec addons/amxmodx/configs/RealHL.cfg")
 
    n_hp = get_pcvar_num(n_hp)
    n_speed = get_pcvar_num(n_speed)
    n_time = get_pcvar_num(n_time)
}
 
public damager(id) {
 
    if (is_user_alive(id) && get_user_health(id) < n_hp){
        set_user_maxspeed(id,n_speed)
        set_task(n_time,"blood",id,.flags="b")
        }
}

public blood(id) {
 
    if (is_user_alive(id) && (get_user_health(id) < n_hp)){
     
        new iOrigin[Coords]
        get_user_origin(id,iOrigin,0)
         
        message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
        write_byte(TE_BLOODSTREAM)
        write_coord(iOrigin[x])
        write_coord(iOrigin[y])
        write_coord(iOrigin[z] + 10)
        write_coord(random_num(-100,100))
        write_coord(random_num(-100,100))
        write_coord(random_num(-10,10))
        write_byte(70)
        write_byte(50)
        message_end()
    }else{
        remove_task(id)
    }
}

Конфигурационный файл:
Код:
n_hp 90 //Number of HP for slowing and blood flow | Количество HP для замедления и кровотока
n_speed 0.0 //Sets the "realistic" speed | Устанавливает "реалистичную" скорость
n_time 0.1

Прошу помощи,сам уже догнать не могу.
 
Последнее редактирование:

RockTheStreet

Саппорт года
Сообщения
1,744
Реакции
349
Помог
40 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Если HP меньше 50(Именно 50),то при смене оружия сбрасывается скорость
Ну всё как в жизни) А что, ты с кровотечением будешь бегать быстрее? :D
Непонятно что именно тебе нужно. Чтобы при низком количестве хп быстрее бегал игрок? Тогда делай проверку на хп(get_user_health) и увеличивай скорость.
 
Сообщения
51
Реакции
8
Помог
1 раз(а)
melfyk, а,да,забыл указать.
Вот конфигурационный файл:
Код:
n_hp 90 //Number of HP for slowing and blood flow | Количество HP для замедления и кровотока
n_speed 0.0 //Sets the "realistic" speed | Устанавливает "реалистичную" скорость
n_time 0.1

И судя по нему я наоборот должен бегать быстрее,я в принципе и бегаю быстрее,но почему-то именно при 50 и ниже HP сбрасывается все...

Чтобы при низком количестве хп быстрее бегал игрок? Тогда делай проверку на хп(get_user_health) и увеличивай скорость.
Именно это и стоит у меня в конф.файле(Чтоб быстрее бегал).А по исходному коду не видно,что я и так get_user_health получаюи скорость добавляю?
 

RockTheStreet

Саппорт года
Сообщения
1,744
Реакции
349
Помог
40 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
serveer_222, Через консоль пытался сверять значения кваров?
 
Сообщения
51
Реакции
8
Помог
1 раз(а)
melfyk, да,они в норме,иначе не давалось бы ускорение после 90 HP.
Сама проблема в том,что это ускорение пропадает,если HP меньше 50 становится.
 
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
RegisterHam(Ham_CS_Player_ResetMaxSpeed,"player","damager",0)
тут хук ПРЕ и смена скорости. А уже в оригинальной функции идет установка нормального значения, которое перезапишет твое. Соответсвенно скорость не будет изменятся

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

// new Ham:Ham_CS_Player_ResetMaxSpeed = Ham_Item_PreFrame

#define PLUGIN "RealHL"
#define VERSION ""
#define AUTHOR "serveer_222"

enum _:Coords {
    x,
    y,
    z
}

new n_hp, Float:n_speed, Float:n_time

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    RegisterHam(Ham_TakeDamage, "player", "PlayerTakeDamage", 1)
    RegisterHam(Ham_CS_Player_ResetMaxSpeed, "player", "PlayerResetMaxSpeed", 1)
    register_cvar("n_hp", "50")
    register_cvar("n_speed", "200.0")
    register_cvar("n_time", "0.3")
    
    new dir[128];
    get_localinfo("amx_configsdir", dir, charsmax(dir))
    server_cmd("exec %s/RealHL.cfg", dir)
    server_exec()
 
}

public plugin_cfg() {
    n_hp = get_cvar_num("n_hp")
    n_speed = get_cvar_float("n_speed")
    n_time = get_cvar_float("n_time")
}
 
public PlayerTakeDamage(const id) {
    if (is_user_alive(id) && get_user_health(id) < n_hp){
        set_user_maxspeed(id, n_speed)
        set_task(n_time, "TaskBlood", id, .flags="b")
    }
}

public PlayerResetMaxSpeed(const id) {
    if (is_user_alive(id) && get_user_health(id) < n_hp) {
        set_user_maxspeed(id, n_speed)
    }
}

public TaskBlood(const id) {
    if (!is_user_alive(id) || get_user_health(id) >= n_hp) {
        remove_task(id)
        return
    }
    
    new origin[Coords]
    get_user_origin(id, origin, 0)
    
    message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
    write_byte(TE_BLOODSTREAM)
    write_coord(origin[x])
    write_coord(origin[y])
    write_coord(origin[z] + 10)
    write_coord(random_num(-100,100))
    write_coord(random_num(-100,100))
    write_coord(random_num(-10,10))
    write_byte(70)
    write_byte(50)
    message_end()
}

Ах да на 1.8.2 я хз заработает ли. Там вроде нету в хаме Ham_CS_Player_ResetMaxSpeed
 
Сообщения
327
Реакции
289
Помог
9 раз(а)
вообщем задумка в том,что если у игрока меньше 50 HP,то ему выдается скорость
Не понятен прикол) Если бы у раненного снижалась скорость- было бы реалистично.
C++:
#include <amxmodx>
#include <hamsandwich>
#include <fun>

#if !defined AMXX_VERSION_RELEASE
new Ham:Ham_CS_Player_ResetMaxSpeed = Ham_Item_PreFrame
#endif

#define PLUGIN "RealHL"
#define VERSION ""
#define AUTHOR "serveer_222"

enum _:Coords
{
    x,
    y,
    z
}

new n_hp
new n_speed
new n_time

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    RegisterHam(Ham_TakeDamage,"player","damager",1)
    RegisterHam(Ham_CS_Player_ResetMaxSpeed,"player","HamResetMaxSpeed",0)
    
    n_hp = register_cvar("n_hp","50")
    n_speed = register_cvar("n_speed","200.0")
    n_time = register_cvar("n_time","0.3")
    server_cmd("exec addons/amxmodx/configs/RealHL.cfg")
}

public damager(id)
{
    if(0 < get_user_health(id) < get_pcvar_num(n_hp))
    {
        if(!task_exists(id))
            set_task(get_pcvar_float(n_time),"blood",id,.flags="b")

        set_user_maxspeed(id,get_pcvar_float(n_speed))
    }
}

public HamResetMaxSpeed(id)
{
    return get_user_health(id) < get_pcvar_num(n_hp) ? HAM_SUPERCEDE : HAM_IGNORED;
}

public blood(id) {
 
    if(!is_user_alive(id) || get_user_health(id) >= get_pcvar_num(n_hp))
    {
        if(task_exists(id))
            remove_task(id);
    
        return;
    }

    new iOrigin[Coords]
    get_user_origin(id,iOrigin,0)
          
    message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
    write_byte(TE_BLOODSTREAM)
    write_coord(iOrigin[x])
    write_coord(iOrigin[y])
    write_coord(iOrigin[z] + 10)
    write_coord(random_num(-100,100))
    write_coord(random_num(-100,100))
    write_coord(random_num(-10,10))
    write_byte(70)
    write_byte(50)
    message_end()
}
 
Сообщения
51
Реакции
8
Помог
1 раз(а)
zhorzh78, в релизной версии так оно и будет,но вот мне захотелось,чтоб скорость нааоборот повышалось,а оно не работает(
Тут не в том дело какая скорость,а в том,что оно не работает.
 

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

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу