precache_model tylko gdy plugin jest w sta...
siC
23.11.2008
Witam. Udało nam się z Waszą pomocą napisać ten plugin, który zmienia modele naszych graczy na serwerze. Teraz mamy taki problem, że chcielibyśmy, aby te modele się nie pobierały ludziom wchodzącym na serwer jeśli plugin jest w stanie "paused". Przyznam szczerze, że trochę kombinowałem na tyle ile umiałem i napisałem taki plugin na test jednak wykorzystanie go przy funkcji plugin_precache() nie daje rezultatu. Czytałem, że precache_model(), precache_sound() można użyć tylko w funkcji plugin_precache(), czyli analogicznie w plugin_precache musiałbym sprawdzić jaki plugin ma status i jeśli ma "running", to precache_model. Tak też zrobiłem, jednak za każdym razem ten model się pobiera.
Kod nie działa
Reasumując. Chcemy, żeby modele się nie pobierały gdy plugin jest zapauzowany. Czy znajdzie się jakaś łaskawa, doświadczona dusza i pomoże rozwiązać problem?? Oczywiście podkreślam, że chcemy to pobieranie modeli zastosować w tym pluginie. Za pomoc oczywiście ++
Z góry dzięki i pozdrawiam
Kod nie działa
#include <amxmodx> #include <amxmisc> #include <cstrike> public plugin_init() { register_plugin("Test", "1.0", "siC") } public plugin_precache() { new filename[32] new name[32] new version[32] new author[32] new status[32] // Nasz plugin ma id 39, przypisałem na stałe, żeby nie pobierać wszystkich get_plugin ( 39, filename, 31, name, 31, version, 31, author, 31, status, 31 ) new fstatus[16] format (fstatus, 15, status, 31) if (equali(fstatus, "running")) { // Tu powinny się pobierać modele precache_model("models/player/lars_ct/lars_ct.mdl") precache_model("models/player/lars_te/lars_te.mdl") } else if (equali(fstatus, "paused")) { // Nic } return PLUGIN_CONTINUE }W innej funkcji ten if działa, jednak gdy przeniosę go do funkcji plugin_precache, to już nie działa.
Reasumując. Chcemy, żeby modele się nie pobierały gdy plugin jest zapauzowany. Czy znajdzie się jakaś łaskawa, doświadczona dusza i pomoże rozwiązać problem?? Oczywiście podkreślam, że chcemy to pobieranie modeli zastosować w tym pluginie. Za pomoc oczywiście ++
Z góry dzięki i pozdrawiam
Seba 23.11.2008
Zdaje mi się że nie da sie bezproblemowo. plugin_precache jest wykonywane jako pierwsze w całym pluginie, Twój plugin musiałby być ostatni na liście i jakiś wcześniej wpisany musiałby go zatrzymywać.
Anyway, to
Anyway, to
if (equali(fstatus, "running")) { // Tu powinny się pobierać modele precache_model("models/player/lars_ct/lars_ct.mdl") precache_model("models/player/lars_te/lars_te.mdl") } else if (equali(fstatus, "paused")) { // Nic }powinno być po prostu tak
if (equali(fstatus, "running")) { // Tu powinny się pobierać modele precache_model("models/player/lars_ct/lars_ct.mdl") precache_model("models/player/lars_te/lars_te.mdl") }Napisz więcej kiedy plugin ma być zapauzowany. Może na pojedynczych mapach? Jak tak, to wtedy można skorzystać z wbudowanego mechanizmu do AMXMODX do wyłączania pluginów na danych mapkach.
siC
23.11.2008
Seba, Owszem można napisać inny plugin, który sprawdza stan konkretnie tego z modelami, tylko nie wiem jak go właśnie zatrzymać. Wiem są funkcje plugin_pause, plugin_unpause, ale nawet wtedy ten model się pobiera, bo próbowałem.
Chodzi dokładnie o to, że jeśli gramy mixy to ładujemy sobie cfg, gdzie pauzują się inne pluginy i ten też. Jednak nawet jeśli plugin lars_model.amxx (bo tak się nazywa) jest zapauzowany, to modele się pobierają. Myślę, że trzeba by było go unloadować, żeby się nie pobierały. Potem po mixach, czy restarcie serwa jest ładowany server.cfg, gdzie odpauzowują się pluginy. Zapauzowanie lars_model.amxx nic nie daje, bo modele się pobierają. Teraz pomyśleć, że każdy wchodzący musi ściągać te modele, to większość płacze, a niestety cl_allowdownload 0 też nic nie daje, bo modele się pobierają. Sam już nie wiem co zrobić. Próbowałem kilku sposobów jednak nie znalazłem skutecznego rozwiązania.
PS. 1. A jak można za pomocą pluginu zrobić unload innego pluginu? może to by zadziałało?
PS. 2. Apropos kodu to wiem, że wystarczy tylko pierwszy if. Napisałem to tylko kontrolnie.
Chodzi dokładnie o to, że jeśli gramy mixy to ładujemy sobie cfg, gdzie pauzują się inne pluginy i ten też. Jednak nawet jeśli plugin lars_model.amxx (bo tak się nazywa) jest zapauzowany, to modele się pobierają. Myślę, że trzeba by było go unloadować, żeby się nie pobierały. Potem po mixach, czy restarcie serwa jest ładowany server.cfg, gdzie odpauzowują się pluginy. Zapauzowanie lars_model.amxx nic nie daje, bo modele się pobierają. Teraz pomyśleć, że każdy wchodzący musi ściągać te modele, to większość płacze, a niestety cl_allowdownload 0 też nic nie daje, bo modele się pobierają. Sam już nie wiem co zrobić. Próbowałem kilku sposobów jednak nie znalazłem skutecznego rozwiązania.
PS. 1. A jak można za pomocą pluginu zrobić unload innego pluginu? może to by zadziałało?
PS. 2. Apropos kodu to wiem, że wystarczy tylko pierwszy if. Napisałem to tylko kontrolnie.
Miczu
23.11.2008
Nie wiem czy to zrobi roznice, ale moze zrob cvara on/off a potem stawdzac i to dac wlasnie do if'a
siC
23.11.2008
Miczu, yyyym coś takiego??
#include <amxmodx> #include <amxmisc> #include <cstrike> new larsmodel public plugin_init() { register_plugin("Test", "1.0", "siC") larsmodel = register_cvar("amx_larsmodel", "1") } public plugin_precache() { if(get_pcvar_num(larsmodel) == 1) { // Tu powinny się pobierać modele precache_model("models/player/lars_ct/lars_ct.mdl") precache_model("models/player/lars_te/lars_te.mdl") } return PLUGIN_CONTINUE }
Miczu
23.11.2008
Tak, jakby stawial opory, to radze tez sprawdzic dla domyslnie ustawionego na 0 ;-)
siC
23.11.2008
Miczu, Ogólnie zrobiłem na próbę wyświetlanie. Jednak teraz wcale nie pobiera modelu ani na 1 ani na 0
[ Dodano: 23-11-2008, 21:37 ]
Miczu Nie trybi cholera weź sie zlituj
#include <amxmodx> #include <amxmisc> #include <cstrike> #define SETHUDMSG set_hudmessage(000, 100, 255, -1.0, 0.25, 0, 6.0, 1.0, 0.1, 0.2, 4); new larsmodel public plugin_init() { register_plugin("Test", "1.0", "siC") larsmodel = register_cvar("amx_larsmodel", "1") pokaz() } public plugin_precache() { if(get_pcvar_num(larsmodel) == 1) { // Tu powinny się pobierać modele precache_model("models/player/test/test.mdl") } else if(get_pcvar_num(larsmodel) == 0) { // Plugin zatrzymany } return PLUGIN_CONTINUE } public pokaz() { if(get_pcvar_num(larsmodel) == 1) { SETHUDMSG show_hudmessage(0, "Uruchomiony") } else if(get_pcvar_num(larsmodel) == 0) { SETHUDMSG show_hudmessage(0, "Zatrzymany") } set_task(2.0,"pokaz") return PLUGIN_CONTINUE }
[ Dodano: 23-11-2008, 21:37 ]
Miczu Nie trybi cholera weź sie zlituj
Miczu
23.11.2008
siC, po prostu plug wyswietla zanim wbijasz na serwa - zmien wyswietlanie na komende
wizu
23.11.2008
Nie wiem, czy robi różnicę ale spróbuj tak:
Plug wyświetla co 2 sekundy na czacie Miczu
#include <amxmodx> public plugin_init() { register_plugin("Test", "1.0", "siC") register_cvar("amx_larsmodel", "1") pokaz() } public plugin_precache() { if(get_cvar_num("amx_larsmodel")) precache_model("models/player/test/test.mdl") } public pokaz() { if(get_cvar_num("amx_larsmodel")) client_print(0, print_chat, "smiga") else client_print(0, print_chat, "zatrzymany") set_task(2.0,"pokaz") }
Plug wyświetla co 2 sekundy na czacie Miczu
siC
23.11.2008
Miczu, funkcja pokaz() co 2 sekundy pokazuje tylko na hud stan spluga
wizu, Nic to nie zmieniło. Model za każdym razem się pobiera, nie zależnie od stanu pluga.
Spróbowałem dodać { }
wizu, Nic to nie zmieniło. Model za każdym razem się pobiera, nie zależnie od stanu pluga.
Spróbowałem dodać { }
public plugin_precache() public plugin_precache() { if(get_cvar_num("amx_larsmodel")) { precache_model("models/player/test/test.mdl") } return PLUGIN_CONTINUE }I wtedy nastała światłość - zadziałało, jakiś chory ten pawn
Miczu
23.11.2008
#include <amxmodx> public plugin_init() { register_plugin("Test", "1.0", "siC") register_cvar("amx_larsmodel", "1") pokaz() } public pokaz() { if(get_cvar_num("amx_larsmodel")) client_print(0, print_chat, "smiga") else client_print(0, print_chat, "zatrzymany") set_task(2.0,"pokaz") }To mi "smiga". A co do set_task to sorki, ale nie zauwazylem ze sie odwoluje sam do siebie.
siC
23.11.2008
Miczu, No tak to działa, ale tu chodzi o to żeby pobierał lub nie pobierał modeli kiedy jest zatrzymany/włączony plugin. Rozwiązanie znalazłem dzięki wizu.
Tak napisany kod działa. Oczywiście można teraz usunąć funkcje pokaz(), która tylko była kontrolna. Teraz jak cvar amx_larsmodel 1 to pobiera, jak na 0 to nie pobiera.
Temat do zamknięcia, rozdam + i do domu
Dzięki wszystkim za sugestie i pomoc
#include <amxmodx> #include <amxmisc> #include <cstrike> public plugin_init() { register_plugin("Test", "1.0", "siC") register_cvar("amx_larsmodel", "1") pokaz() } public plugin_precache() { if(get_cvar_num("amx_larsmodel")) { precache_model("models/player/test/test.mdl") } return PLUGIN_CONTINUE } public pokaz() { if(get_cvar_num("amx_larsmodel")) { client_print(0, print_chat, "uruchomiony") } else { client_print(0, print_chat, "zatrzymany") } set_task(2.0,"pokaz") }
Tak napisany kod działa. Oczywiście można teraz usunąć funkcje pokaz(), która tylko była kontrolna. Teraz jak cvar amx_larsmodel 1 to pobiera, jak na 0 to nie pobiera.
Temat do zamknięcia, rozdam + i do domu
Dzięki wszystkim za sugestie i pomoc
siC
23.11.2008
No oczywiście cvar to Twoja zasługa, jednak on rozwiązał jego sprawdzaniewylanczania
Miczu
23.11.2008
cvar czy pcvar nie robilo moim zdaniem zbyt wielkier roznicy (pcvar ponoc dziala szybciej), wiec nic nie mowilem, ale jesli plugin_precache() dziala przed plugin_init() to pcvar nie zostanie umieszczony w zmiennej i ona bedzie miala wartosc 0 (zmienne sa zerowane przy deklaracji).
siC
23.11.2008
Widocznie skryptowi robiło różnicę. Znalazłem także rozwiązanie dla naszego lars_model.amxx tym samym. Tylko, że tam i tak pobierało model, bo jak mi się wydaje to event go wymagał. Dostawiłem ifa i teraz działa
wizu
24.11.2008
Ja tam tylko poprawiłem kod wyżej. Podaj końcowy działający kod. Może się komuś przyda.
siC
24.11.2008
Ok. Nie ma sprawy. Dodam go potem jak go potestuje jeszcze, ale jak na razie działa bez zarzutów
Seba 27.11.2008
To nie może działać. Powód? Jak chcesz sprawdzić wartość CVAR'a, przed tym jak go utworzysz ?Miczu, No tak to działa, ale tu chodzi o to żeby pobierał lub nie pobierał modeli kiedy jest zatrzymany/włączony plugin. Rozwiązanie znalazłem dzięki wizu.
#include <amxmodx> #include <amxmisc> #include <cstrike> public plugin_init() { register_plugin("Test", "1.0", "siC") register_cvar("amx_larsmodel", "1") pokaz() } public plugin_precache() { if(get_cvar_num("amx_larsmodel")) { precache_model("models/player/test/test.mdl") } return PLUGIN_CONTINUE } public pokaz() { if(get_cvar_num("amx_larsmodel")) { client_print(0, print_chat, "uruchomiony") } else { client_print(0, print_chat, "zatrzymany") } set_task(2.0,"pokaz") }
Tak napisany kod działa. Oczywiście można teraz usunąć funkcje pokaz(), która tylko była kontrolna. Teraz jak cvar amx_larsmodel 1 to pobiera, jak na 0 to nie pobiera.
Temat do zamknięcia, rozdam + i do domu
Dzięki wszystkim za sugestie i pomoc
wizu
27.11.2008
Jak nie może działać?
Cvar jest tworzony w plugin_init, który jest wykonywany jeden raz na mapę na samym jej początku.
A plugin_precache przy połączeniu gracza. A połączenie musi być po rozpoczęciu mapy. Więc cvar jest już utworzony. Chyba, że źle rozumują, to wyprowadźcie mnie z błędu
@EDIT
Tym powyżej proszę się nie sugerować. Zostawiam tylko dla zachowania ciągłości tematu.
Dodatkowo jeśli by nie tworzyło cvaru, to jego wartość byłą by równa flase, czyli funkcja if by się nie wykonał i w rezultacie nic by się nie ściągało.
Cvar jest tworzony w plugin_init, który jest wykonywany jeden raz na mapę na samym jej początku.
A plugin_precache przy połączeniu gracza. A połączenie musi być po rozpoczęciu mapy. Więc cvar jest już utworzony. Chyba, że źle rozumują, to wyprowadźcie mnie z błędu
@EDIT
Tym powyżej proszę się nie sugerować. Zostawiam tylko dla zachowania ciągłości tematu.
Dodatkowo jeśli by nie tworzyło cvaru, to jego wartość byłą by równa flase, czyli funkcja if by się nie wykonał i w rezultacie nic by się nie ściągało.