new test = create_entity("info_target")
new Float:origin[3]
entity_get_vector(id, EV_VEC_origin, origin)
entity_set_origin(npc, origin)
entity_set_float(npc, EV_FL_takedamage, 1.0)
entity_set_float(npc, EV_FL_health, 100.0)
entity_set_string(npc, EV_SZ_classname, "testowy")
entity_set_model(npc, "models/player/terror/terror.mdl")
entity_set_int(npc, EV_INT_solid, 2)
new Float:maxs[3] = {16.0,16.0,36.0}
new Float:mins[3] = {-16.0,-16.0,-36.0}
entity_set_size(npc, mins, maxs)
entity_set_float(npc, EV_FL_animtime, 2.0)
entity_set_float(npc, EV_FL_framerate, 1.0)
entity_set_int(npc, EV_INT_sequence, 1)
entity_set_float(npc,EV_FL_nextthink,halflife_time() + 0.01)
drop_to_floor(npc)
Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
Guest Message by DevFuse
Ent i hitboxy
Temat rozp.
MarWit
, 04.07.2011 17:58
14 odpowiedzi w tym temacie
#1
Napisano 04.07.2011 17:58
Mam pytanie, jak "nałozyc" hitboxy na stworzonego enta(jeżeli się w ogóle da), np model "models/player/terror/terror.mdl" i kod.
#2
Napisano 04.07.2011 21:57
chodzi o kształt bytu? to zawsze prostopadłościan ustawiany w size, a czy hitboxy są uwzględniane np. w TraceLine to musisz sprawdzić, jakoś nigdy tego nie tego potrzebowałem i zwyczajnie nie wiem
#3
Napisano 04.07.2011 23:21
Jeśli chcesz aby twojego Enta można było "zabić" najlepiej użyć do tego Ham_TakeDamage i Ham_TraceAttack.
#4
Napisano 05.07.2011 14:09
Chodzi mi o miejsca trafien,ze po trafieniu ent-a np. w głowe dostawało by sie załóżmy 800$ i wyswietla sie: "GraczA zabił byt E strzałem w głowe"
#5
Napisano 05.07.2011 14:52
To może pobranie gdzie gracz celuje w momencie strzału i
HeadOrigin = miejsce głowy
Oczywiście numer kości zależy od modelu ale w standardowych jest to 8
new ent, body;
get_user_aiming(id, ent, body);
new Float:HeadOrigin[3], Float:HeadAngles[3];
engfunc(EngFunc_GetBonePosition, ent, 8, HeadOrigin, HeadAngles);
HeadOrigin = miejsce głowy
Oczywiście numer kości zależy od modelu ale w standardowych jest to 8
#6
Napisano 07.07.2011 12:22
Diablix, mniej wiecej o cos takiego mi chodzilo. Mam jeszcze male pytanie, czy używając Ham_TraceAttack da sie pobrac trase lotu pocisku ?
#8
Napisano 07.07.2011 15:04
R3X, jakbyś mogl jeszcze powiedzieć jak tego uzyc razem z danymi od diablix-a byłbym wdzięczny. Próbowałem użyć direction(traceattack) oraz get_tr2(tracehandle, TR_vecEndPos) i nie dziala.
#9
Napisano 07.07.2011 15:10
Traceline ma 2 przydatne tu pola
ent może być równe -1 jak strzelasz w powietrze
TR_pHit, // int (edict_t*) TR_iHitgroup, // intpierwsze to indeks bytu a drugie to numer trafionego hitboxa
ent może być równe -1 jak strzelasz w powietrze
#10
Napisano 08.07.2011 20:31
Hmm, dziala ale jakos dziwnie, ponieważ nie po trafieniu pociskiem a po namiezeniu celownikiem. Jeszcze poproboje inaczej, ale na razie nie mam czasu
P.S. proszę na razie o nie zamykanie tematu
Dodano 10 lipiec 2011 - 13:49:
Hmm, napisalem cos w tym stylu ale nie dziala
P.S. proszę na razie o nie zamykanie tematu
Dodano 10 lipiec 2011 - 13:49:
Hmm, napisalem cos w tym stylu ale nie dziala
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <engine>
#include <fakemeta>
#define PLUGIN "PluginName"
#define VERSION "1.0"
#define AUTHOR "MarWit"
new hitbox[33]
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_TraceAttack, "player", "TraceAttack")
RegisterHam(Ham_TakeDamage, "player", "TakeDamage")
}
public TraceAttack(this, idattacker, Float:damage, Float:direction[3], tracehandle, damagebits)
{
hitbox[this] = get_tr2(tracehandle, TR_iHitgroup)
return HAM_IGNORED
}
public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
new className[32]
entity_get_string(this, EV_SZ_classname, className, charsmax(className))
if(!equali(className, "przykladowy_ent"))
return;
new weapon = get_user_weapon(idattacker)
if(hitbox[this] == HIT_HEAD){
client_print(idattacker, print_center, "trafiles w glowe!")
damage+=100.0
}
if(hitbox[this] == HIT_LEFTARM || hitbox[this] == HIT_LEFTLEG || hitbox[this] == HIT_RIGHTARM || hitbox[this] == HIT_RIGHTLEG)
damage-=5.0
}
Użytkownik MarWit edytował ten post 10.07.2011 11:59
#11
Napisano 10.07.2011 14:55
pewnie, że nie działa; hamsandwich łapie wirtualne funkcje danej klasy bytu:
poza tym obrażenia możesz zmieniać już w TraceAttack, a jak już zmieniasz to SetHamParamFloat() + HAM_HANDLED, samo przemnożenie zmiennej damage nic nie daje
RegisterHam(Ham_TraceAttack, "player", "TraceAttack")tutaj łapiej obrażenia zadawane graczom, a potem sprawdzasz klasę
new className[32] entity_get_string(this, EV_SZ_classname, className, charsmax(className)) if(!equali(className, "przykladowy_ent")) return;czyli return jest zawsze
poza tym obrażenia możesz zmieniać już w TraceAttack, a jak już zmieniasz to SetHamParamFloat() + HAM_HANDLED, samo przemnożenie zmiennej damage nic nie daje
#12
Napisano 10.07.2011 19:27
R3X, mniej-wiecej tak ?
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#define PLUGIN "Test"
#define VERSION "1.0"
#define AUTHOR "MarWit"
new hitbox[33];
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
RegisterHam(Ham_TraceAttack, "player", "TraceAttack");
register_forward(FM_Spawn,"Spawn");
}
public Spawn(id)
{
hitbox[id] = 0;
}
public TraceAttack(this, idattacker, Float:damage, Float:direction[3], tracehandle, damagebits)
{
hitbox[this] = get_tr2(tracehandle, TR_iHitgroup);
new className[32];
pev(this, pev_classname, className, charsmax(className));
if(!equali(className, "przykladowy_ent"))
return HAM_IGNORED;
if(hitbox[this] == HIT_HEAD){
client_print(idattacker, print_center, "trafiles heada!");
SetHamParamFloat(3, damage+100.0);
return HAM_HANDLED;
}
if(hitbox[this] == HIT_LEFTARM || hitbox[this] == HIT_LEFTLEG || hitbox[this] == HIT_RIGHTARM || hitbox[this] == HIT_RIGHTLEG){
SetHamParamFloat(3, damage-5.0);
return HAM_HANDLED;
}
return HAM_IGNORED;
}
#13
Napisano 10.07.2011 19:30
ciągle źle, popatrz
RegisterHam(Ham_TraceAttack, "player", "TraceAttack");
tu jest klasa bytu, u Ciebie prawdopodobnie jest to info_target albo func_breakable, raczej nie "player"; poszukaj create_entity albo EngFunc_AllocString
RegisterHam(Ham_TraceAttack, "player", "TraceAttack");
tu jest klasa bytu, u Ciebie prawdopodobnie jest to info_target albo func_breakable, raczej nie "player"; poszukaj create_entity albo EngFunc_AllocString
#14
Napisano 10.07.2011 19:34
aaa, wiec oto chodzi pozmieniam trochę kod i zrobię edita. klasa bytu to info_target
[Edit]
R3X, jestes wielki! Działa jak powinno a kod wyglada tak
Temat do zamkniecia.
[Edit]
R3X, jestes wielki! Działa jak powinno a kod wyglada tak
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#define PLUGIN "Test"
#define VERSION "1.0"
#define AUTHOR "MarWit"
new hitbox[33];
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
RegisterHam(Ham_TraceAttack, "info_target", "TraceAttack");
register_forward(FM_Spawn,"Spawn");
}
public Spawn(id)
{
hitbox[id] = 0;
}
public TraceAttack(iEnt, idattacker, Float:damage, Float:direction[3], tracehandle, damagebits)
{
hitbox[idattacker] = get_tr2(tracehandle, TR_iHitgroup);
new className[32];
pev(iEnt, pev_classname, className, charsmax(className));
if(!equali(className, "przykladowy_ent"))
return HAM_IGNORED;
if(hitbox[idattacker] == HIT_HEAD){
//client_print(idattacker, print_center, "trafiles heada!");
SetHamParamFloat(3, damage+20.0);
return HAM_HANDLED;
}
if(hitbox[idattacker] == HIT_LEFTARM || hitbox[iEnt] == HIT_LEFTLEG || hitbox[iEnt] == HIT_RIGHTARM || hitbox[iEnt] == HIT_RIGHTLEG){
SetHamParamFloat(3, damage-5.0);
return HAM_HANDLED;
}
return HAM_IGNORED;
}
Temat do zamkniecia.
Użytkownik MarWit edytował ten post 10.07.2011 20:01
#15
Napisano 10.07.2011 20:27
nie potrzebujesz już globalnej tablicy hitbox[33];
public TraceAttack(iEnt, idattacker, Float:damage, Float:direction[3], tracehandle, damagebits) { new hitbox = get_tr2(tracehandle, TR_iHitgroup);
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych