AMX MOD X
Пятница, 19.04.2024, 06:20:37



Приветствую Вас Гость | RSS
[ Главная ] [ Событие "стрельба по энтити" - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Событие "стрельба по энтити" (игрок стреляет в entity)
Событие "стрельба по энтити"
pashok_91Дата: Воскресенье, 06.12.2009, 10:59:53 | Сообщение # 1
Сержант
Группа: Пользователи
Сообщений: 34
Репутация: 0
Статус: Не в сети
Третий вопрос)
Подскажите, как словить событие огня по энтити, с определением энтити по которому стрельнул игрок и собственно игрока который стрелял?
 
PomanoBДата: Воскресенье, 06.12.2009, 11:10:54 | Сообщение # 2
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Ham_TakeDamage, но сработает только если ентити можно нанести урон

http://romanov4400.mybrute.com
 
pashok_91Дата: Воскресенье, 06.12.2009, 11:17:15 | Сообщение # 3
Сержант
Группа: Пользователи
Сообщений: 34
Репутация: 0
Статус: Не в сети
А какому энтити можно нанести урон?)

Я создаю такое:

eid2 = create_entity("info_target")

entity_set_string(eid2, EV_SZ_classname, "xxx")
entity_set_model(eid2, "models/barney.mdl")

entity_set_int(eid2, EV_INT_solid, SOLID_BBOX);
entity_set_origin(eid2, origin)

entity_set_int(eid2, EV_INT_movetype, MOVETYPE_BOUNCEMISSILE)
drop_to_floor(eid2)

Сообщение отредактировал pashok_91 - Воскресенье, 06.12.2009, 11:17:39
 
PomanoBДата: Воскресенье, 06.12.2009, 11:24:38 | Сообщение # 4
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Установи pev_health и pev_takedamage = DAMAGE_YES

http://romanov4400.mybrute.com
 
pashok_91Дата: Воскресенье, 06.12.2009, 11:35:17 | Сообщение # 5
Сержант
Группа: Пользователи
Сообщений: 34
Репутация: 0
Статус: Не в сети
Плииз, маленький кусочег кода, я нуп....

Потому что вот добавил я это

set_pev(eid2, pev_takedamage, DAMAGE_YES)
set_pev(eid2, pev_health, 10)

это(заранее объявив функцию, естественно)

public имя_моей_функции(victim,weapon,killer,damage)
{
set_hudmessage(0, 0, 255, -1.0, -1.0)
show_hudmessage(1, "<Hudmessage>")

}

а оно неработает) надпись не появляется...

Сообщение отредактировал pashok_91 - Воскресенье, 06.12.2009, 11:36:16
 
defaultNick8433Дата: Воскресенье, 06.12.2009, 11:52:00 | Сообщение # 6
Генерал-полковник
Группа: Скриптеры
Сообщений: 806
Репутация: 19
Статус: Не в сети
По конкретней,что не так

Раскручиваю сайты,ставлю трекера на хостинг.Всё бесплатно.Если заинтересовало,то моя аська 400538001
 
PomanoBДата: Воскресенье, 06.12.2009, 11:52:54 | Сообщение # 7
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
покажи как регистрировал Ham_TakeDamage
надо
RegisterHam(Ham_TakeDamage, "func_breakable", "funcName")
И ентити тоже сделай func_breakable а не info_target


http://romanov4400.mybrute.com
 
DaTaДата: Воскресенье, 06.12.2009, 14:55:19 | Сообщение # 8
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Разве реально в точку попасть? :D
Code
    new Float:afMins[] = {-5.0, -5.0, -5.0}
  new Float:afMaxs[] = {5.0, 5.0, 5.0}
  set_pev(ent, pev_mins, afMins)
  set_pev(ent, pev_maxs, afMaxs)
 
pashok_91Дата: Воскресенье, 06.12.2009, 19:40:44 | Сообщение # 9
Сержант
Группа: Пользователи
Сообщений: 34
Репутация: 0
Статус: Не в сети
ничего не получилось.... размер вроде применился, игрок как бы "спотыкается" при коллизии с энтити...
но пули проходят мимо, вот мой код:

Code

public plugin_init() {
RegisterHam(Ham_TakeDamage, "func_breakable", "hurt")
}

public некая_функция()
{
new Float:origin[3],Float:velocity[3]

//ОЗДАНИЕ МОНСТРА
eid2 = create_entity("func_breakable")

entity_get_vector(gi,EV_VEC_origin,origin);
entity_get_vector(gi,EV_VEC_angles,velocity);

entity_set_string(eid2, EV_SZ_classname, "LOL")
entity_set_model(eid2, "models/barney.mdl")

entity_set_int(eid2, EV_INT_solid, SOLID_BBOX);
entity_set_origin(eid2, origin)

set_pev(eid2,pev_sequence,SQ_RUN)
set_pev(eid2,pev_gaitsequence,SQ_RUN)
set_pev(eid2,pev_framerate,FR_IDLE)

//код ниже дает вектор движения энтити в такую же сторону, куда смотрит игрок
new Float:velocity2[3], Float:v2[3], Float:origin3[3],Float:v_angle2[3], Float:v_angle3[3];
entity_get_vector(ind,EV_VEC_v_angle, velocity2);
velocity2[2]=0.00;
velocity2[0]=0.00;
entity_set_vector(eid2, EV_VEC_angles, velocity2)

angle_vector(velocity2, 1, v_angle2);

v_angle3[0]=v_angle2[0]*100.00;
v_angle3[1]=v_angle2[1]*100.00;

entity_set_vector(eid2,EV_VEC_velocity,v_angle3);

///

entity_set_int(eid2, EV_INT_movetype, MOVETYPE_BOUNCEMISSILE)
drop_to_floor(eid2)

set_pev(eid2, pev_takedamage, 1.0)
set_pev(eid2, pev_health, 10.00)

//entity_set_float(eid2,EV_FL_takedamage, 1.0)
//entity_set_float(eid2,EV_FL_health, 10.0)

new Float:afMins[] = {-50.0, -50.0, 0.0}
new Float:afMaxs[] = {50.0, 50.0, 50.0}
set_pev(eid2, pev_mins, afMins)
set_pev(eid2, pev_maxs, afMaxs)

remove_entity(gi);
}
//gi - другое энтити, на месте которого должен появится eid2.

//
public hurt(victim,weapon,killer,damage)
{
//remove_entity(victim);
client_print(1,print_chat,"COLLISION!!!")
}



Сообщение отредактировал pashok_91 - Воскресенье, 06.12.2009, 19:42:23
 
DaTaДата: Воскресенье, 06.12.2009, 22:43:52 | Сообщение # 10
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Посмотри в этом плагине порядок создания и проверку на урон в функции
Code
public make_fakeCF(ent)
 
pashok_91Дата: Понедельник, 07.12.2009, 01:38:14 | Сообщение # 11
Сержант
Группа: Пользователи
Сообщений: 34
Репутация: 0
Статус: Не в сети
Чесно говоря вобще не понял что делает плагин, кроме невидимой бомбы...
 
PAHANCSДата: Понедельник, 07.12.2009, 10:25:11 | Сообщение # 12
Полковник
Группа: Пользователи
Сообщений: 183
Репутация: 4
Статус: Не в сети
Quote (PomanoB)

И ентити тоже сделай func_breakable а не info_target

Странно, а у меня получилось с info_target, ток вот с анимацией плохо:

Code


#include <amxmodx>
#include <xs>
#include <fakemeta>
#include <hamsandwich>

new Blood;
new BloodSpray;

new start_sound[3][] =      
{
      "barney/ba_another.wav",
      "barney/ba_attack1.wav",
      "barney/ba_bring.wav"
}

new death_sound[3][] =      
{
      "player/die1.wav",
      "player/die2.wav",
      "player/die3.wav"
}

new damage_sound[3][] =      
{
      "player/bhit_flesh-1.wav",
      "player/bhit_flesh-2.wav",
      "player/bhit_flesh-3.wav"
}

new BloodsSmall[7] = {190, 191, 192, 193, 194, 196, 197}

public plugin_init()      
{
      RegisterHam(Ham_Killed, "info_target", "fw_killed");
      register_concmd("delete_barney_all", "delete_barney_all")
      RegisterHam(Ham_TakeDamage, "info_target", "fw_takedamage");
      register_concmd("create_barney_by_aim", "create_barney_by_aim");
      register_concmd("delete_barney_by_aim", "delete_barney_by_aim");
      register_plugin("Barney Damage", "1.0", "PahanCS");
}

public plugin_precache()      
{
      precache_model("models/barney.mdl");
      Blood = precache_model("sprites/blood.spr");
      BloodSpray = precache_model("sprites/bloodspray.spr");
      for(new i=0; i<3; i++)      
      {
       precache_sound(start_sound[i]);
       precache_sound(death_sound[i]);
       precache_sound(damage_sound[i]);
      }
}

public create_barney_by_aim(id)
{
      if(!is_user_alive(id))
       return PLUGIN_CONTINUE;
      static ent;
      ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
      if(!pev_valid(ent))      
      {
       client_print(id, print_chat, "[create_barney_by_aim] can't create barney");
       return PLUGIN_CONTINUE;
      }
      static Float:fOrigin[3], Float:fAngles[3];
      fm_get_aimorigin_dist(id, 100.0, fOrigin);
      pev(id, pev_angles, fAngles);
      set_pev(ent, pev_classname, "ent_barney");
      set_pev(ent, pev_origin, fOrigin);
      set_pev(ent, pev_angles, fAngles);
      set_pev(ent, pev_solid, SOLID_SLIDEBOX);
      set_pev(ent, pev_movetype, MOVETYPE_PUSHSTEP);
      set_pev(ent, pev_health, 500.0);
      set_pev(ent, pev_takedamage, DAMAGE_YES);
      engfunc(EngFunc_SetModel, ent, "models/barney.mdl");
      engfunc(EngFunc_SetSize, ent, Float:{-12.0, -12.0, 0.0 }, Float:{12.0, 12.0, 76.0});
      engfunc(EngFunc_DropToFloor, ent);
      set_pev(ent, pev_sequence, 3);
      set_pev(ent, pev_gaitsequence, 3);
      set_pev(ent, pev_framerate, 1.0);
      set_live_state(ent, 1);
      engfunc(EngFunc_EmitSound, ent, CHAN_VOICE, start_sound[random_num(0, 2)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
      client_print(id, print_chat, "[create_barney_by_aim] create barney id: %i",ent);
      return PLUGIN_CONTINUE;
}

public delete_barney_by_aim(id)
{
      if(!is_user_alive(id))
       return PLUGIN_CONTINUE;
      static ent;
      ent = fm_get_aiment_dist(id, 9999.0);
      if(!is_ent_barney(ent))      
      {
       client_print(id, print_chat, "[delete_barney_by_aim] can't delete barney");
       return PLUGIN_CONTINUE;
      }
      engfunc(EngFunc_RemoveEntity, ent);
      client_print(id, print_chat, "[delete_barney_by_aim] delete barney id: %i",ent);
      return PLUGIN_CONTINUE;
}

public delete_barney_all(id)
{
      static ent, bool:isdel;
      isdel = false;
      ent = engfunc(EngFunc_FindEntityByString, -1, "classname", "ent_barney");
      while(ent > 0)      
      {
       if(pev_valid(ent))      
       {
        isdel = true;
        client_print(id, print_chat, "[delete_barney_all] delete barney id: %i",ent);
        engfunc(EngFunc_RemoveEntity, ent);
       }
       ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "ent_barney");
      }
      if(!isdel)
       client_print(id, print_chat, "[delete_barney_all] can't delete barney");
      return PLUGIN_CONTINUE;
}

public fw_takedamage(ent, idinflictor, idattacker, Float:damage, damagebits)      
{
      if(!is_ent_barney(ent) || !get_live_state(ent))      
       return HAM_IGNORED;
      static Float:fOrigin[3], anim;
      anim = random_num(13, 14);
      pev(ent, pev_origin, fOrigin);
      set_pev(ent, pev_sequence, anim);
      set_pev(ent, pev_gaitsequence, anim);
      set_pev(ent, pev_framerate, 1.0);
      create_blood(fOrigin);
      create_bloodtrace_player(fOrigin);
      engfunc(EngFunc_EmitSound, ent, CHAN_VOICE, damage_sound[random_num(0, 2)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
      client_print(idattacker, print_chat, "[fw_takedamage] damage barney: %f",damage);
      if(is_user_connected(idattacker))      
       barney_push_from_attacker(ent, idattacker, damage);
      return HAM_IGNORED;
}

public fw_killed(ent, idattacker, shouldgib)      
{
      if(!is_ent_barney(ent) || !get_live_state(ent))      
       return HAM_IGNORED;
      set_live_state(ent, 0);
      static Float:fOrigin[3], anim;
      anim = random_num(25, 30);
      pev(ent, pev_origin, fOrigin);
      set_pev(ent, pev_sequence, anim);
      set_pev(ent, pev_gaitsequence, anim);
      set_pev(ent, pev_framerate, 1.0);
      set_pev(ent, pev_solid, SOLID_NOT);
      set_pev(ent, pev_movetype, MOVETYPE_NONE);
      create_blood(fOrigin);
      create_bloodtrace_player(fOrigin);
      engfunc(EngFunc_EmitSound, ent, CHAN_VOICE, death_sound[random_num(0, 2)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
      client_print(idattacker, print_chat, "[fw_killed] barney attacker id: %i",idattacker);
      return HAM_SUPERCEDE;
}

stock barney_push_from_attacker(ent, idother, Float:multiplier)      
{
      static Float:fVector[3], Float:fEntVelocity[3];
      pev(idother, pev_v_angle, fVector);
      angle_vector(fVector, ANGLEVECTOR_FORWARD, fVector);
      xs_vec_mul_scalar(fVector, multiplier * 3, fVector);
      pev(ent, pev_velocity, fEntVelocity);
      xs_vec_add(fEntVelocity, fVector, fVector);
      set_pev(ent, pev_velocity, fVector);
}

stock get_live_state(ent)      
{
      return pev(ent, pev_iuser1);
}

stock set_live_state(ent, livestate)      
{
      set_pev(ent, pev_iuser1, livestate);
}

stock fm_get_aimorigin_dist(index, Float:fDistance, Float:fRetOrigin[3], entignore = 0, monstersignore = 0)      
{
      static Float:fStart[3], Float:fViewOfs[3], trace;
      pev(index, pev_origin, fStart);
      pev(index, pev_view_ofs, fViewOfs);
      xs_vec_add(fStart, fViewOfs, fStart);
      static Float:fDest[3];
      pev(index, pev_v_angle, fDest);
      engfunc(EngFunc_MakeVectors, fDest);
      global_get(glb_v_forward, fDest);
      xs_vec_mul_scalar(fDest, fDistance, fDest);
      xs_vec_add(fStart, fDest, fDest);
      if(pev_valid(entignore))      
       engfunc(EngFunc_TraceLine, fStart, fDest, monstersignore == 1 ? 1:0, entignore, trace);
      else      
       engfunc(EngFunc_TraceLine, fStart, fDest, monstersignore == 1 ? 1:0, index, trace);
      get_tr2(trace, TR_vecEndPos, fRetOrigin);
      free_tr2(trace);
}

stock fm_get_aiment_dist(index, Float:fDistance, entignore = 0, monstersignore = 0) {
      static Float:fStart[3], Float:fViewOfs[3], trace, hit
      pev(index, pev_origin, fStart)
      pev(index, pev_view_ofs, fViewOfs)
      xs_vec_add(fStart, fViewOfs, fStart)
      static Float:fDest[3]
      pev(index, pev_v_angle, fDest)
      engfunc(EngFunc_MakeVectors, fDest)
      global_get(glb_v_forward, fDest)
      xs_vec_mul_scalar(fDest, fDistance, fDest)
      xs_vec_add(fStart, fDest, fDest)
      if(pev_valid(entignore))      
       engfunc(EngFunc_TraceLine, fStart, fDest, monstersignore == 1 ? 1:0, entignore, trace)
      else      
       engfunc(EngFunc_TraceLine, fStart, fDest, monstersignore == 1 ? 1:0, index, trace)
      hit = get_tr2(trace, TR_pHit)
      free_tr2(trace)
      return hit
}

stock create_blood(Float:fOrigin[3])      
{
      message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
      write_byte(TE_BLOODSTREAM);
      engfunc(EngFunc_WriteCoord, fOrigin[0]);
      engfunc(EngFunc_WriteCoord, fOrigin[1]);
      engfunc(EngFunc_WriteCoord, fOrigin[2] + 45.0);
      write_coord(random_num(-50, 50));
      write_coord(random_num(-50, 50));
      write_coord(-10);
      write_byte(70);
      write_byte(random_num(50, 100));
      message_end();
      message_begin(MSG_BROADCAST, SVC_TEMPENTITY) ;
      write_byte(TE_BLOODSPRITE);
      engfunc(EngFunc_WriteCoord, fOrigin[0] + random_float(-5.0, 5.0));
      engfunc(EngFunc_WriteCoord, fOrigin[1] + random_float(-5.0, 5.0));
      engfunc(EngFunc_WriteCoord, fOrigin[2] + 45.0);
      write_short(BloodSpray);
      write_short(Blood);
      write_byte(70);
      write_byte(7);
      message_end();
}

stock create_bloodtrace_player(Float:fOrigin[3])      
{
      message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
      write_byte(TE_WORLDDECAL);
      engfunc(EngFunc_WriteCoord, fOrigin[0] + random_float(-5.0, 5.0));
      engfunc(EngFunc_WriteCoord, fOrigin[1] + random_float(-5.0, 5.0));
      engfunc(EngFunc_WriteCoord, fOrigin[2] + 3.0);
      write_byte(BloodsSmall[random_num(0, 6)]);
      message_end();
}

stock bool:is_ent_barney(ent)      
{
      if(pev_valid(ent))      
      {
       static classname[32];
       pev(ent, pev_classname, classname, 31);
       if(equal(classname, "ent_barney"))      
        return true;
      }
      return false;
}

В sma файле:

Прикрепления: BarneyDamage.sma (8.2 Kb)


PAHANCS

Сообщение отредактировал PAHANCS - Понедельник, 07.12.2009, 11:35:47
 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Событие "стрельба по энтити" (игрок стреляет в entity)
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2024