witam mam w swoim kodzie na dawanie do auta nitra zrobione:
chce teraz zrobi? timer kt?ry co sekunde w kt?rej chcemy u?yc nitra ?eby sprawdza? czy:
widzia?em co? takiego na jednym zserwer?w wi?c wiem ?e to mo?liwe
Ostatnio zmieniony przez ToxiC. 2017-01-25, 10:58, w całości zmieniany 1 raz
i w nim sprawdzasz czy gracz trzyma przycisk odpowiadaj?cy za nitro (w tym przypadku id 4 makro KEY_FIRE) i albo tworzysz timer albo w nim odejmujesz nitro.
Lepsza opcj? wydaje si? tutaj timer globalny a w nim p?tla na wszystkich graczy. Najlepiej robisz sobie jak?? zmienn? bool (na gracza) kt?r? zmieniasz podczas trzymania przycisku na true a w przypadku kiedy pu?ci przycisk, zmieniasz na false przez co warunek si? nie wykona w timerze.
Testowa?em to troch? i wydaje mi si? ?e to jest jedna z lepszych opcji.
Tutaj przyk?adowy kod w OnPlayerKeyStateChange:
Timer:
To jest tylko przyk?ad, mo?e znajdziesz lepszy spos?b.
o dzi?ki da?em timer przy po??czeniu gracza ??by sprawdza? co 100ms(tylko czy to nie obciazy zbytnio serwera?
I po za tym jak zrobic funkcje kiedy pusci klawisz czy od tego jest oldkey?
[ Dodano: 2017-01-25, 19:24 ]
daje tak:
znaczy dzia?a to ale gdy wcisne przycisk nitra i przycisk "w" to wtedy nitro nadal w poje?dzie jest odpalone i dzia?a ale gdy nie wciskam w to normalnie sie usuwa
Opisz dok?adniej o co Ci chodzi z tym W. Za puszczenie odpowiada RELEASED makro znajdziesz na wiki SAMP-a. Po za tym zamiast zrobi? timer na jednego gracza zr?b to jak wcze?niej napisa?em, nie wiem czy piszesz skrypt (od poczatku) czy nie bo je?eli jaki? edytujesz to prawdopodobnie znajdziesz tam timer z p?tl? na wszystkich graczy kt?ry wykonuje si? co sekund? czy tam ile? i w tej p?tli sprawdzaj czy nitro jest i ile i zamiast da? warto?? 500 to zmniejsz na mniejsz? (np. 50) i wyjdzie na to samo co timer co 100ms czy tam ile?.
Ten kod nie b?dzie dzia?a? dobrze, ju? to testowa?em i te odejmowanie w HOLDING r??nie dzia?a po za tym ten tw?j kod b?dzie ca?y czas odejmowa? t? zmienn? z nitrem a? w ko?cu zcrashuje ci si? klient (zrobi?em tak dzisiaj przez przypadek). Lepiej to zrobi? tak jak wspomnia?em wy?ej timer jeden g??wny, globalny na sekund? najlepiej i w nim p?telka i sprawdzanie. Nie wiem r?wnie? po co to else bez warunku ju? lepiej trzeba by?o warunek waln?? a tak to else co chwile si? b?dzie wykonywa?o (jak np. nie b?dzie pasowa? jaki? klawisz do kt?rego? z warunk?w, lub je?eli pu?ci?). M?j kod przecie? dzia?a dobrze, wystarczy dobrze wszystko "wklei?".
Rozumiem ?e chcesz bardzo pom?c ale zanim to zrobisz postaraj si? przemy?le? co i jak bo to jest p??niej takie mieszanie i wracanie do punktu wyj?cia.
dobra relased zadzia?a?o tylko teraz ten timer Pytanie czy on bardzo bedzie nieoptymalny?
Wola? bym co 100ms zamiast 1s bo jezeli ktos pusci nitro przed timerem tomu nie zabierze a razcej take nitro b?d? oszcz?dza?
timer og?lny co 100ms zrobi?em i taki w nim kod:
https://hastebin.com/ahupusemab.cpp
Powiem tak, ci??ko powiedzie?. Kod niby nie jest jaki? ci??ki do prze?kni?cia ale to wiadomo jednak jest to te 100ms. Tak wi?c moja rada jest taka aby? przetestowa? co i jak, jak b?d? jakie? problemy to po prostu zwi?ksz warto??. Mo?esz te? ustawi? 500ms. Zamiast MAX_PLAYERS u?yj GetPlayerPoolSize()
Ten kod co masz to tak jak wspomnia? Wafelowski jedynym problemem jest cz?stotliwo?? wykonywania si? timera. Trudniejsze operacje w Pawn nie b?d? tak dynamicznie pracowa? jak by?my chcieli. Kod w tym syfie wykonuje si? od g?ry do do?u. Robi?c tego typu bajerki zawsze nara?asz w jakim? tam stopniu optymalizacje game mode, co? za co?. Jakie? ci??sze obliczeniowe operacje nale?y robi? w pluginie przy pomocy sampgdk.
Tutaj masz include kt?ry poprawi dok?adno?? wykonywania si? timer?w oraz ich bug z niemo?liwo?ci? przenoszenia stringu w formacie http://gtao.pl.com/showthread.php?t=435525
Co do GetPlayerPoolSize() to trzeba zwr?ci? uwag? na to ?e ta funkcja zwraca najwi?ksze u?yte ID na serwerze, wi?c trzeba sprawdza? czy kt?rego? gracza nie ma na serwerze. Niestety niekt?rzy na to nie zwr?c? uwagi i p??niej maj? z tym problemy.
Dodam ?e jest te? problem z zabiciem takiego timera nie ma jak go zabi? bo jak zabijesz to on ponownie si? uruchomi. Jak ju? tak musisz szale? z tym czasem to ustaw na jakie? 700-800ms i testuj.
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach