Niewidzialność na nożu
Blondyna
19.05.2013
Siemka
Chcę zrobić aby vip mógł ładowac niewidzialność na nożu, tylko za bardzo mi to nie wychodzi.
Daje kod, który zrobiłem:
public knife(id) { if( read_data(2) == CSW_KNIFE ) { stock createBarTime(id, Float:fTime, startprogress = 0){ static barTime2; if(!barTime2) barTime2 = get_user_msgid("BarTime2"); message_begin( id ? MSG_ONE : MSG_ALL, barTime2, _, id) write_short( floatround( fTime ) ); write_short( startprogress ); message_end(); } else { if(get_user_weapon(id) == CSW_KNIFE) set_rendering(id,kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 10); else set_rendering(id,kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 255); } }
sNH.
19.05.2013
Ja zrobiłbym sam warunek
if(get_user_weapon(id) == CSW_KNIFE)set_rendering(id,kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 10);
else
set_rendering(id,kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 255);
}
}
Albo tak
if( read_data(2) == CSW_KNIFE ){set_rendering(id,kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 10);}else{set_rendering(id,kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 255);}
Blondyna
19.05.2013
Czyli jak da na nóż będzie ładował się pasak a gdy się załaduje będzie niewidzialny .?
K!113r
19.05.2013
Od razu będziesz niewidzialny, jeżeli chcesz to po jakimś czasie to polecam set_task()
Blondyna
19.05.2013
To możesz podać z "set_tasak()", 5 sek i staje się niewidzialny I ładuje sie pasek.
Z góry dzięki
K!113r
19.05.2013
Kodu Ci nie podam, specjalnie po to abyś myślał co robisz - samo kopiowanie nie uczy za wiele
Ja bym zrobił to tak:
Złapanie zdarzenia zmiany broni, jeżeli jest to nóż (wspaniale!) tworzymy ten pasek, tak aby wypełniał się przez 5 sekund, dodatkowo tworzymy task'a, również na 5 sekund, dodatkowo wymaganym byłoby przesłać id, więc robimy to w id tasku, przykład:
#define STALA_JAKAS 4300 /* wywołujemy taska */ set_task(5.0, "Taskowa_funkcja", id + STALA_JAKAS) /* jak wydobyć id gracza w funkcji tasku */ public Taskowa_funkcja(task_id) { new id = task_id - STALA_JAKAS }
Dlaczego dodajemy liczbę 4300 (liczba przypadkowa, lecz nie może się powtarzać)? Ponieważ każdy task powinien mieć unikalne ID, nasz task będzie miał id zależne od id gracza, czyli id będzie z zakresu 4301 - 4332. W owej funkcji taskowej sprawdzamy czy gracz żyje i nadajemy mu niewidzialność, ale jeżeli zmieni broń to i tak będzie niewidzialny, więc powracamy do łapania zmiany broni, jeżeli warunek nie jest spełniony - gracz nie ma noża (czyli else) to usuwamy task (najlepiej sprawdzić czy taki istnieje, aby czegoś w logach czasem nie było ) poprzez remove_task(id+STALA_JAKAS) i usunąć pasek, czyli ustawić jego czas wypełniania na 0 (tak kiedyś chyba robiłem ) i należałoby mu przywrócić widoczność (oczywiście mało optymalne jest ustawianie widzialności po każdej zmianie broni jak i też usuwanie taska i paska, więc wypadałoby zrobić tablice boolean, zapisywać czy gracz jest widzialny czy nie i uwarunkować aby część kodu nie wykonywała się gdy jest on widzialny (uwidacznienie), a część jak jest niewidzialny ( usuwanie task'a i paska)
GwynBleidD
19.05.2013
Z zaznaczeniem jednak, że STALA_JAKAS musi być unikalna dla tasków wyłącznie w obrębie pluginu więc można równie dobrze używać po kolei dla tasków wartości 32, 64, 96, 128... A ID lepiej poprzez data przerzucić, gdyż możesz od razu do data zapisać inne potrzebne wartości. A niestety nie można w tasku przechwycić równocześnie ID taska i parametr data.
Użytkownik GwynBleidD edytował ten post 19.05.2013 15:44
K!113r
19.05.2013
Szukać w "Gotowe Funkcje" to nie łaska? Masz tam piękny stock, klejasz go na koniec sma (jako odrębna funkcja) i używasz samej nazwy stocka (np. CreateBarTime() ) z odpowiednimi parametrami, tak się jakoś złożyło że przy prawie każdym stocku omówione są jego parametry i podane użycie.
Klakier
20.05.2013
Koledze chodzi o coś takiego?
#define TIME 5.0 //zmieniasz ile chcesz sekund #define UNIKAT 2013 new msgBarTime; public plugin_init() { register_plugin(nazwa, "1.0", "Klakier"); register_event("CurWeapon", "knife", "be", "1=1"); msgBarTime = get_user_msgid("BarTime"); } public knife(id) { if(read_data(2) == CSW_KNIFE) { if(!task_exists(id+UNIKAT)) { new data[1]; data[0] = id; bartime(id, floatround(TIME)) set_task(TIME, "set_invisible", id+UNIKAT, data, 1) } } else { if(task_exists(id+UNIKAT)) { remove_task(id+UNIKAT); bartime(id, 0); } } } public set_invisible(data[]) { new id = data[0]; set_rendering(id,kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 10); } stock bartime(id, czas) { message_begin(MSG_ONE_UNRELIABLE, msgBarTime, .player = id); write_short(czas); message_end(); }
Blondyna
24.05.2013
A jakie moduły .?
Welcome to the AMX Mod X 1.8.1-300 Compiler. Copyright (c) 1997-2006 ITB CompuPhase, AMX Mod X Team Warning: Loose indentation on line 30 Error: Undefined symbol "set_rendering" on line 61 Warning: Symbol is assigned a value that is never used: "id" on line 62 1 Error. Could not locate output file C:\Users\BO\Downloads\codclass_zabojca.amx (compile failed).
Załączone pliki
Blondyna
24.05.2013
Klakier, vip jest cały czas niewidzialny i jak zrobić aby to działało na flagę .?
A ja chcę aby był niewidzialny jak załaduje się pasek a potem gdy da na broń znowu jest widzialny jak w Diablo Mod klasa zabójca
Użytkownik Vesfper edytował ten post 24.05.2013 14:08
Blondyna
24.05.2013
Działa
Teraz powiedz jak zrobić to na flagę aby było to dla vipa.
Czy jest możliwość dodania tekstu jak pasek się naładuje ?
Pan Marian 24.05.2013
@UP, jest on przyznany dla VIP'a tylko i wyłącznie
public knife(id) { if(get_user_flags(id) & 524288 == 524288) { } }
Blondyna
25.05.2013
A czy da się zrobić aby pasek ładował się tylko podczas stania w miejscu .?