[ROZWIĄZANE] Byty, które wywołuje ten func...
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 )
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ę.
MarWit
28.04.2013
new szTarget[ 64 ]; pev( iButton, pev_target, szTarget, 63 ); new iDoor = -1; while( ( iDoor = fm_find_ent_by_target( iDoor, szTarget ) ) > 0 ) { // do sth.. }
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 );}}}
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
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
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ą.
MarWit
29.04.2013
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 );}}
MarWit
29.04.2013
Ten temat został zamknięty przez moderatora.
Powód: Pomoc udzielona
Jeśli się z tym nie zgadzasz, raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.
Z pozdrowieniami,
Zespół AMXX.PL