Skocz do zawartości

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.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Ent i hitboxy


  • Zamknięty Temat jest zamknięty
14 odpowiedzi w tym temacie

#1 MarWit

    The Chosen One

  • Przyjaciel

Reputacja: 843
Czempion

  • Postów:1 485
  • GG:
  • Steam:steam
  • Imię:Marcin
  • Lokalizacja:Bystrzyca
Offline

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.

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)

  • +
  • -
  • 0

marwit-0.png


#2 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

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
  • +
  • -
  • 0

#3 Owner123

    Wszechpomocny

  • Użytkownik

Reputacja: 146
Zaawansowany

  • Postów:331
  • Lokalizacja:Barty ;]
Offline

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.
  • +
  • -
  • 1

#4 MarWit

    The Chosen One

  • Autor tematu
  • Przyjaciel

Reputacja: 843
Czempion

  • Postów:1 485
  • GG:
  • Steam:steam
  • Imię:Marcin
  • Lokalizacja:Bystrzyca
Offline

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"
  • +
  • -
  • 0

marwit-0.png


#5 diablix

    emeryt

  • Przyjaciel

Reputacja: 507
Wszechwiedzący

  • Postów:663
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Warszawa
Offline

Napisano 05.07.2011 14:52

To może pobranie gdzie gracz celuje w momencie strzału i

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
  • +
  • -
  • 1

#6 MarWit

    The Chosen One

  • Autor tematu
  • Przyjaciel

Reputacja: 843
Czempion

  • Postów:1 485
  • GG:
  • Steam:steam
  • Imię:Marcin
  • Lokalizacja:Bystrzyca
Offline

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 ?
  • +
  • -
  • 0

marwit-0.png


#7 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 07.07.2011 12:26

myślisz o RegisterHam? uchwyt tr daje mnóstwo informacji o locie pocisku, zobacz get_tr2
  • +
  • -
  • 0

#8 MarWit

    The Chosen One

  • Autor tematu
  • Przyjaciel

Reputacja: 843
Czempion

  • Postów:1 485
  • GG:
  • Steam:steam
  • Imię:Marcin
  • Lokalizacja:Bystrzyca
Offline

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.
  • +
  • -
  • 0

marwit-0.png


#9 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 07.07.2011 15:10

Traceline ma 2 przydatne tu pola
TR_pHit,			// int (edict_t*)
TR_iHitgroup,		// int
pierwsze to indeks bytu a drugie to numer trafionego hitboxa


ent może być równe -1 jak strzelasz w powietrze
  • +
  • -
  • 0

#10 MarWit

    The Chosen One

  • Autor tematu
  • Przyjaciel

Reputacja: 843
Czempion

  • Postów:1 485
  • GG:
  • Steam:steam
  • Imię:Marcin
  • Lokalizacja:Bystrzyca
Offline

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 czasuDołączona grafika

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

  • +
  • -
  • 0

marwit-0.png


#11 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 10.07.2011 14:55

pewnie, że nie działa; hamsandwich łapie wirtualne funkcje danej klasy bytu:
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
  • +
  • -
  • 0

#12 MarWit

    The Chosen One

  • Autor tematu
  • Przyjaciel

Reputacja: 843
Czempion

  • Postów:1 485
  • GG:
  • Steam:steam
  • Imię:Marcin
  • Lokalizacja:Bystrzyca
Offline

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;
}


  • +
  • -
  • 0

marwit-0.png


#13 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

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
  • +
  • -
  • 1

#14 MarWit

    The Chosen One

  • Autor tematu
  • Przyjaciel

Reputacja: 843
Czempion

  • Postów:1 485
  • GG:
  • Steam:steam
  • Imię:Marcin
  • Lokalizacja:Bystrzyca
Offline

Napisano 10.07.2011 19:34

aaa, wiec oto chodzi Dołączona grafika pozmieniam trochę kod i zrobię edita. klasa bytu to info_target

[Edit]

R3X, jestes wielki!Dołączona grafika 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

  • +
  • -
  • 0

marwit-0.png


#15 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

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);

  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych