←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Byty, które wywołuje ten func...

Zablokowany

  • +
  • -
Fili:P - zdjęcie Fili:P 28.04.2013

Cześć, mam ID bytu "func_button", jak teraz dowiedzieć się jakie "wywołuje" ( doprowadza do zmiany pozycji etc. jak na Deathrun ) byty. Czyli załóżmy jaką pułapkę uruchamia func_button o id 12 ? ( potrzebuje metody wydobycia id bytu pułapki lub kilku bytów pułapki )

Odpowiedz

  • +
  • -
K!113r - zdjęcie K!113r 28.04.2013

Specjalnie trochę poczytałem na forach mapperskich, lecz tam coś jest mowa o ustawieniu targetu dla bytu, więc może ze stałą pev_target? Nie wiem czy to dobra odpowiedź, to moja dedukcja :) Nie mam teraz jak to sprawdzić zbytnio, jak znajdę czas to coś popatrzę.

Odpowiedz

  • +
  • -
MarWit - zdjęcie MarWit 28.04.2013

https://developer.va...iki/Func_button


new szTarget[ 64 ];
pev( iButton, pev_target, szTarget, 63 );

new iDoor = -1; 
while( ( iDoor = fm_find_ent_by_target( iDoor, szTarget ) ) > 0 )
{
    // do sth..
}
Odpowiedz

  • +
  • -
Fili:P - zdjęcie Fili:P 28.04.2013

Hmm.. moim celem jest aby osoba stojąca przy przycisku na dr widziała pokolorowaną pułapkę, to kod, ale coś nie działa :/

Efekt to przycisk pokolorowany na czarno, dziwne :/

#include <amxmodx>

#include <fakemeta>
#include <engine>
 
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
 
 
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_forward( FM_AddToFullPack, "fw_Fullpack", 1 );
}
public fw_Fullpack(es_handle, e, ENT, HOST, hostflags, player, pSet)
{
if(player)
return FMRES_IGNORED;
if( !is_user_alive( HOST ) )
return FMRES_IGNORED;
new Float:origin[3];
pev( HOST, pev_origin, origin );
new ent[2];
find_sphere_class( 0, "func_button", 50.0, ent, 1, origin );
if( !ent[0] )
return FMRES_IGNORED;
new szTarget[ 64 ];
pev( ent[0], pev_target, szTarget, 63 );
new iDoor = -1; 
while( ( iDoor = find_ent_by_target( iDoor, szTarget ) ) > 0 )
{
if( iDoor == ENT )
{
set_es( es_handle, ES_RenderMode, kRenderTransColor );
set_es( es_handle, ES_RenderColor, { 55.0, 200.0, 55.0 } );
set_es( es_handle, ES_RenderAmt, 100.0 );
}
}
}

Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 28.04.2013

public fw_Fullpack(es_handle, e, ENT, HOST, hostflags, player, pSet)
{
    if(player)
        return FMRES_IGNORED;
        
    if( !is_user_alive( HOST ) )
        return FMRES_IGNORED;
        
    new Float:origin[3];
    pev( HOST, pev_origin, origin ); \\ [1.]

    
    new ent[2];
    find_sphere_class( 0, "func_button", 50.0, ent, 1, origin );\\ [2.]

    if( !ent[0] )
        return FMRES_IGNORED;
        
    new szTarget[ 64 ];
    pev( ent[0], pev_target, szTarget, 63 );           \\ [3.]
    new iDoor = -1;
    while( ( iDoor = find_ent_by_target( iDoor, szTarget ) ) > 0 )             \\ [4.]
    {
        if( iDoor == ENT )                                // [5.]
        {
            set_es( es_handle, ES_RenderMode, kRenderTransColor );
            set_es( es_handle, ES_RenderColor, { 55.0, 200.0, 55.0 } );
            set_es( es_handle, ES_RenderAmt, 100.0 );
        }
    }
}
  • Pobierasz pozycję gracza

     

     

  • Wyszukujesz przycisk położony najbliżej gracza

     

     

  • Pobierasz target na który przycisk wskazuje.

     

     

  • Szukasz wszystkich bytów o określonym targecie

     

     

  • I podświetlasz te, których ID jest RÓWNE ID bytu z fullpacka, czyli podświetlasz de facto również przycisk (posiada on przecież taki sam target)

     

     

 

 

Już widzisz gdzie popełniasz błąd?


Użytkownik GwynBleidD edytował ten post 28.04.2013 15:05
Odpowiedz

  • +
  • -
Fili:P - zdjęcie Fili:P 29.04.2013


Już widzisz gdzie popełniasz błąd?

Niestety nie, moje doświadczenie z bytami wygląda kiepsko. Próbowałem co nieco ale nic nie wyszło. 

 


czyli podświetlasz de facto również przycisk (posiada on przecież taki sam target)

Właśnie nie również ( bo wydaje mi się że zrozumiałeś ze podświetla się przycisk i pułapka ). Podświetla się jedynie przycisk :/

Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 29.04.2013

Hmm, a zróbmy drobnego debuga:

client_print(id, print_chat, "ent: %d, ENT: %d, iDoor: %d, targetname: %s", ent[0], ENT, iDoor, szTarget);

dodaj to po while zaraz, później obserwuj w grze jakie wartości się wyświetlają.

Odpowiedz

  • +
  • -
MarWit - zdjęcie MarWit 29.04.2013

Spóbuj w engfunc'u z targetname ew. z globalname.. nie pamiętam już jaka wartość kvd za to odpowiadała.
Odpowiedz

  • +
  • -
Fili:P - zdjęcie Fili:P 29.04.2013

Dzięki wszystkim za pomoc. Tak wygląda mój "działający" kod :)

#include <amxmodx>

#include <fakemeta>
#include <engine>
 
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
 
 
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_forward( FM_AddToFullPack, "fw_Fullpack", 1 );
}
public fw_Fullpack(es_handle, e, ENT, HOST, hostflags, player, pSet)
{
if(player)
return FMRES_IGNORED;
if( !is_user_alive( HOST ) )
return FMRES_IGNORED;
if( !pev_valid( ENT ) )
return FMRES_IGNORED;
new Float:origin[3];
pev( HOST, pev_origin, origin );
new ent[2];
find_sphere_class( 0, "func_button", 50.0, ent, 1, origin );
if( !ent[0] )
return FMRES_IGNORED;
new szTarget[ 64 ];
pev( ent[0], pev_target, szTarget, 63 );
new szTname[64];
pev( ENT, pev_targetname, szTname, 63 );
if( equal( szTarget, szTname ) )
{
set_es( es_handle, ES_RenderMode, kRenderTransColor );
set_es( es_handle, ES_RenderColor, { 55.0, 200.0, 55.0 } );
set_es( es_handle, ES_RenderAmt, 100.0 );
}
 
}
 

Odpowiedz

  • +
  • -
MarWit - zdjęcie MarWit 29.04.2013

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany