Problem z petla for i tablicami

Moderator: Inkwizytor

Awatar użytkownika
kondor
Posty: 1526
Rejestracja: 13 marca 2007, 11:50
ID Steam: Przemek_kondor
Kontakt:

Re: Problem z petla for i tablicami

Post autor: kondor »

Tak, gdzies na początku. addPublicVariableEventHandler sprawia, że po publikowaniu zmiennej (w tym przypadku ktos_zginal_w) wykona się kod ten w klamrach (ale tylko na komputerach innych niż, ten który publikował tą zmienną).
Czyli opisowo:
gdy player zginie, to ogłasza, że zginął (poprzez pulikowanie zmiennej) i sam uaktualnia tablicę (zrobiłem wyżej poprawki - bo oczywiście musi czekać, aż będzie żył)
a gdy inni otrzymają wiadomość że zginął też ją uaktualnią
Awatar użytkownika
Trance
Posty: 1090
Rejestracja: 20 maja 2007, 19:06
ID Steam:
ID gracza: 0

Re: Problem z petla for i tablicami

Post autor: Trance »

Wprowadziłem zmiany, ale teraz to jakby system wogole tej tablicy nie widział, bo markery sie wogole nie tworzą.
Obrazek
Awatar użytkownika
kondor
Posty: 1526
Rejestracja: 13 marca 2007, 11:50
ID Steam: Przemek_kondor
Kontakt:

Re: Problem z petla for i tablicami

Post autor: kondor »

W załączniku jest moja konsola do debugowania (również w MP).
Dzięki niej można testować wartości zmiennych i w ogóle wyrażeń.
Będziesz mógł sobie wyświetlić zawartość tablicy west_array i innych publicznych zmiennych w tym wa1, wa2, pozycje markerów i jak się zmieniają w czasie.
Wartości update'ują się teraz co 2 sekundy (można to zmienić zmieniając wartość zmiennej KNDR_UPDATING_DELAY)
Konsolę uruchamia sie przez radio.
Jeśli się wywali (np poprzez błędną komendę) należy wcisnąć "Clear", zamknąć konsolę i uruchomić raz jeszcze.
Żeby ją w ogóle móc użyć w misji należy:
-katalog _debug_ z załączonego pliku umieścić w foderze z misją
-w init.sqf umieścić linijkę

Kod: Zaznacz cały

call compile preprocessFile "_debug_\kndr_init_debug.sqf";
-w description.ext umieścić linijkę

Kod: Zaznacz cały

#include "_debug_\kndr_debug_console.hpp"
-w konsoli wpisać, np:
west_array
wa1
getPos wa1
getMarkerPos "w1marker"
time
"UH60" createVehicle (getPos player)
(to ostatnie co 2 sekundy bedzie tworzyc heli)
na pewno nie działają instrukcje przypisania, czyli np nie zadziała array = [wa1, wa2] oraz komenda call
Ogólnie nie bardzo to testowałem, ale działa dla mnie wystarczająco dobrze
Załączniki
_debug_.zip
(3.79 KiB) Pobrany 152 razy
Awatar użytkownika
Trance
Posty: 1090
Rejestracja: 20 maja 2007, 19:06
ID Steam:
ID gracza: 0

Re: Problem z petla for i tablicami

Post autor: Trance »

Naprawde ciekawy wynalazek. Dziekuje za załączenie go.
Sprawa wyglada tak, ze po czasie okolo 15-30 sekund po smierci jednostki tablica west_array z niewiadomych przyczyn nagle sie oczyszcza. Na poczatku wyswietla wszystko ok, nawet po smierci wyswietla ok, ale po niedlugim czasie kiedy wpisuje west_array w konsoli, w okienku wyzej pojawia sie :
west_array = [
dokładnie to.

Pierwsze co w takim razie zrobie, to przewertuje wszystkie skrypty w poszukiwaniu linijki, ktora mi czysci ta tablice (o ile taka istnieje), no chyba, ze jest to spowodowane czym innym...
Obrazek
Awatar użytkownika
kondor
Posty: 1526
Rejestracja: 13 marca 2007, 11:50
ID Steam: Przemek_kondor
Kontakt:

Re: Problem z petla for i tablicami

Post autor: kondor »

z ciekawości spreparowałem sytuację i wygląda na to, że tablica się psuje chwilę po tym jako ciało zostanie usunięte (jeśli wyłączysz hideBody - przynajmniej u mnie tak było) to tablica wydaje się być dobra ale nie jest, choć jeśli ją wyświetlimy to niby zawiera wszystkie obiekty.
Dowód? Zrobiłem test
- nazwałem wojaków p1, p2, p3, p4 i zrobiłem z nich tablicę west_array
- w konsoli wpisałem west_array - wyświetla się tablica
- w konsoli wpisałem p2 setDammage 1 - zginął gościu
- wyczyściłem konsole
- wpisałem west_array - wyświetla się tablica niby ok
- w konsoli wpisałem (west_array select 1) setDammage 1 - nie zabiło gościa (choć west_array select 1 pisze że to p2)
- dla pewności p2 setDammage 1 zabija gościa
wniosek: tablica tylko wydaje się ok.

Skoro tablica w takiej postaci przechowuje tak jakby wartości, a nie wskaźniki to może by zasymulować wskaźniki:
zamiast

Kod: Zaznacz cały

west_array = [wa1, wa2, ...];
wpisać

Kod: Zaznacz cały

west_array = ["wa1", "wa2", ...];
a przy sięganiu do tablicy zamiast

Kod: Zaznacz cały

west_array select _j
użyć:

Kod: Zaznacz cały

call compile (west_array select _j)
Awatar użytkownika
Trance
Posty: 1090
Rejestracja: 20 maja 2007, 19:06
ID Steam:
ID gracza: 0

Re: Problem z petla for i tablicami

Post autor: Trance »

To nieprawdopodobne, ale to działa :).
Dziekuje Ci za pomoc kondor, bede od dzisiaj Twoim wielkim dłużnikiem. Masz niesamowitą wiedzę i doświadczenie w materii skryptów, z czego bardzo sie ciesze. Dziekuje jeszcze raz :)
Pozdrawiam.
Obrazek
Awatar użytkownika
Trance
Posty: 1090
Rejestracja: 20 maja 2007, 19:06
ID Steam:
ID gracza: 0

Re: Problem z petla for i tablicami

Post autor: Trance »

Witam. Znowu mam problem z tablicami. Problem tak prosty, ze az trudny, potrzebuje zeby ktos spojzał na to świezym okiem.

Mam tablice (bardzo rozbudowana jak widac, w pliku init.sqf zadefiniowana):
rwvl = ["a101"];

a w pliku innym, ale tez .sqf:

if ((format ["%1",_name]) in rwvl) then
{
hint"udało sie";
};

_name to zmienna maja wartosc = a101

Dlaczego w takim razie warunek ten nie jest spełniony?
Obrazek
Awatar użytkownika
kondor
Posty: 1526
Rejestracja: 13 marca 2007, 11:50
ID Steam: Przemek_kondor
Kontakt:

Re: Problem z petla for i tablicami

Post autor: kondor »

a sprawdzałeś w mojej konsolce wartość wyrażenia

Kod: Zaznacz cały

format ["%1", a101]
oraz

Kod: Zaznacz cały

(format ["%1", a101]) in rwvl
?
Awatar użytkownika
Trance
Posty: 1090
Rejestracja: 20 maja 2007, 19:06
ID Steam:
ID gracza: 0

Re: Problem z petla for i tablicami

Post autor: Trance »

Sprawdzalem. W debugerze wszystko wygladalo ok, w skrypcie zas - nie.
Ale problem rozwiazałem.
Okazalo sie, ze w innym skrypcie w tym samym czasie mialem ustawione hint "", ktore kasowalo mi wyswietlenie napisu, ponadto po respawnie pojazdu trzeba uzyc komendy setVehicleVarName (albo jakiejs podobnej, pisze z głowy), aby nadac jej konkretne "imie" i wsystko juz dziala jak nalezy.
Dziekuje za pomoc.
Pozdrawiam.
Obrazek
ODPOWIEDZ

Wróć do „Edytor - tworzenie misji, skrypty oraz programowanie”