Идентификатор

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
702
Реакции
54
Как можно получить идентификатор владельца лука, стрел, неважно, здесь:
плагин от fantom
Код:
public ArrowTouch(const arrow, const ent) {

    if (is_nullent(arrow)) {

        return;

    }



    SetTouch(arrow, "");

    set_entvar(arrow, var_flags, FL_KILLME);

    set_entvar(arrow, var_nextthink, get_gametime());



    if (is_nullent(ent) || get_entvar(ent, var_takedamage) == DAMAGE_NO) {

        return;

    }



    rg_multidmg_clear();

    rg_multidmg_add(arrow, ent, ARROW_DAMAGE, DMG_BULLET);

    rg_multidmg_apply(arrow, get_entvar(arrow, var_owner));

}
и здесь:
Код:
fireArrow(id) {

    new arrow = rg_create_entity("info_target", false);

    if (is_nullent(arrow)) {

        return 0;

    }



    set_entvar(arrow, var_classname, ARROW_CLASSNAME);

    set_entvar(arrow, var_owner, id);



    static Float:vecOrigin[3], Float:vecAngles[3], Float:vecScr[3], Float:ViewOfs[3];

    static Float:vecForward[3], Float:vecRight[3], Float:vecUp[3];



    get_entvar(id, var_origin, vecOrigin);

    get_entvar(id, var_angles, vecAngles);



    get_entvar(id, var_view_ofs, ViewOfs);

    xs_vec_add(vecOrigin, ViewOfs, vecOrigin);



    global_get(glb_v_forward, vecForward);

    global_get(glb_v_right, vecRight);

    global_get(glb_v_up, vecUp);



    xs_vec_mul_scalar(vecForward, 1.0, vecForward);

    xs_vec_mul_scalar(vecRight, 4.0, vecRight);

    xs_vec_mul_scalar(vecUp, -4.0, vecUp);

 

    vecOrigin[0] += vecForward[0] + vecRight[0] + vecUp[0];

    vecOrigin[1] += vecForward[1] + vecRight[1] + vecUp[1];

    vecOrigin[2] += vecForward[2] + vecRight[2] + vecUp[2];



    set_entvar(arrow, var_angles, vecAngles);

    set_entvar(arrow, var_v_angle, vecAngles);

    set_entvar(arrow, var_origin, vecOrigin);



    set_entvar(arrow, var_solid, SOLID_SLIDEBOX);

    set_entvar(arrow, var_movetype, MOVETYPE_TOSS);



    velocity_by_aim(id, ARROW_SPEED, vecScr);

    set_entvar(arrow, var_velocity, vecScr);



    engfunc(EngFunc_VecToAngles, vecScr, vecAngles);

    set_entvar(arrow, var_angles, vecAngles);

    set_entvar(arrow, var_v_angle, vecAngles) ;



    engfunc(EngFunc_SetModel, arrow, ARROW_MODEL);

    engfunc(EngFunc_SetSize, arrow, Float:{-1.0, -1.0, -1.0}, Float:{1.0, 1.0, 1.0});

    SetTouch(arrow, "ArrowTouch");

    return arrow;

}
Или это невозможно?
Мне просто нужно менять ARROW_SPEED и ARROW_DAMAGE и для этого надо получить в обоих случаях идентификатор (id) владельца лука, а не идентификатор самой стрелы.
 

Ayk

Сообщения
763
Реакции
478
Помог
19 раз(а)
Код:
set_entvar(arrow, var_owner, id);
 
Сообщения
702
Реакции
54
Ayk, идентификатором владельца лука является "id"?
А в случае с уроном?
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
Сообщения
702
Реакции
54
fl0wer, чтобы вытянуть идентификатор надо произвести что-то вроде этого?
Код:
new arch_owner = get_entvar(arrow, var_owner);
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
ThePhoenix, если разговор об хуке урона, то аттакер и будет владельцем лука. Если говорить о стреле, то как владельца получить вы уже сделали выше. Только стоит проверять на коннектед.
 
Сообщения
857
Реакции
532
Помог
13 раз(а)
Код:
set_entvar(arrow, var_owner, id);
на SOLID_BBOX, где var_owner > 0, может сделать объект совсем неосязаемым, т.е. объект останется без коллизий и без тача
для SOLID_SLIDEBOX скорее всего та же песня
 
Сообщения
702
Реакции
54
fantom, если я правильно понял, то в хуке урона надо зарегать аттакера, ибо arrow это инфликтор, ent это жертва.
BalbuR, ???
 
Сообщения
702
Реакции
54
fantom,
Код:
public ArrowTouch(const attacker, const ent, const arrow) {
    if (is_nullent(arrow)) {
        return;
    }

    SetTouch(arrow, "");
    set_entvar(arrow, var_flags, FL_KILLME);
    set_entvar(arrow, var_nextthink, get_gametime());

    if (is_nullent(ent) || get_entvar(ent, var_takedamage) == DAMAGE_NO) {
        return;
    }
    
    if(!is_user_connected(attacker))
        return;
        
    тут дальше уже используем действия с аттакером, которые мне нужны


    rg_multidmg_clear();
    rg_multidmg_add(arrow, ent, ARROW_DAMAGE, DMG_BULLET);
    rg_multidmg_apply(arrow, get_entvar(arrow, var_owner));
}
Насколько я понял)
 
  • Sad
Реакции: Ayk

Ayk

Сообщения
763
Реакции
478
Помог
19 раз(а)
ThePhoenix, "не правильно! ... широкую на широкую!" (с)
Ты бы с основ начал, а то я смотрю ты число параметров меняешь, а их там строго 2.

Я же тебе уже показал: set_entvar(arrow, var_owner, id);
Владелец стрелы это аттакер (владелец лука).
Что-бы узнать его ИД делаем обратное: id = get_entvar(arrow, var_owner);
И проверку на коннект этого ИД.
 
Сообщения
702
Реакции
54
Ayk,
ThePhoenix, если разговор об хуке урона, то аттакер и будет владельцем лука. Только стоит проверять на коннектед.
Я и подумал, что нужно указать дополнительно аттакера, т.е в паблике и потом проверить на коннект и делать с ним, что нужно.

Как получить владельца с var_owner'a я понял, как я и писал выше.
 
Статус
В этой теме нельзя размещать новые ответы.

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

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