Witam Panów i być może Panie.
Przejdę może od razu do rzeczy, bo sprawa zbyt prosta nie jest.
Robię pewien mały projekcik i potrzebuję pomocy przy wykrywaniu jednostek, które dołączyły jako JIP. Ogólny sschemat jest nastepujący:
Misja dynamicznie wypełnia wszelkie miasta, w okolicy których znaleźli się gracze odpowiednią ilością jednostek wojskowych i cywili zalezną od wielkości lokacji w obrębie całej wyspy. Jeżeli gracze oddalą się na odpowiednią odległość, to miasta są czyszczone, a jednostki sprzed wyczyszczenia są zapamiętywane aby później miasto wrócić do stanu sprzed "uśpienia". Wszystko to dzieje się praktycznie bez żadnego grzebania w edytorze, za pomocą samych skryptów. To wszystko na razie działa i ten system nazwałem sobie GCE.
W czym problem:
Misja jest przystosowane do gry z respawnami i jednostki, które mogą aktywować miasta nazwane są (w edytorze) jako GCE_p(liczba). Skrypt na początku przelatuje wszystkie cyferki od 0-64 i sprawdza, czy zmienna GCE_p(_i) jest zainicjalizowana, i jeżeli tak, to dodaje grupę tej jednostki, do puli sprawdzanych na odległość od miast. Problem tkwi w graczach, którzy dołoączyli w trakcie gry do grup, w których nie było żadnych jednostek (zablokowane AI) i nie zostały dodane na starcie. Szybkie testy wykazały, że owi gracze nie widzą siebie jako GCE_p(cyfra), ale jako <obj-null> (to wykazuje hint format["%1", player] w init.sqf). Potrzebuję jakiegoś sposobu, który pozwoliłby na przesłanie informacji na serwer, że dana jednostka pojawiła się na mapie i że musi zostać dodana do tablicy rozpoznawanych grup.
Czego nie chcę:
Coś takiego w polu odpalanym tylko u serwera w init.sqf:
I czegoś takiego w polu odpalanym tylko u klienta w init.sqf:
Ponieważ istnieje szansa, że 2 graczy w tym samym czasie zrobi publicVariable "GCE_Call"; to skrypt może się posypać, lub jeden z graczy może nie byc rozpoznawany. Potrzebuję czegoś bardziej niezawodnego.
Jezeli potrzeba dalszych wyjaśnień - chętnie ich udzielę.
Przejdę może od razu do rzeczy, bo sprawa zbyt prosta nie jest.
Robię pewien mały projekcik i potrzebuję pomocy przy wykrywaniu jednostek, które dołączyły jako JIP. Ogólny sschemat jest nastepujący:
Misja dynamicznie wypełnia wszelkie miasta, w okolicy których znaleźli się gracze odpowiednią ilością jednostek wojskowych i cywili zalezną od wielkości lokacji w obrębie całej wyspy. Jeżeli gracze oddalą się na odpowiednią odległość, to miasta są czyszczone, a jednostki sprzed wyczyszczenia są zapamiętywane aby później miasto wrócić do stanu sprzed "uśpienia". Wszystko to dzieje się praktycznie bez żadnego grzebania w edytorze, za pomocą samych skryptów. To wszystko na razie działa i ten system nazwałem sobie GCE.
W czym problem:
Misja jest przystosowane do gry z respawnami i jednostki, które mogą aktywować miasta nazwane są (w edytorze) jako GCE_p(liczba). Skrypt na początku przelatuje wszystkie cyferki od 0-64 i sprawdza, czy zmienna GCE_p(_i) jest zainicjalizowana, i jeżeli tak, to dodaje grupę tej jednostki, do puli sprawdzanych na odległość od miast. Problem tkwi w graczach, którzy dołoączyli w trakcie gry do grup, w których nie było żadnych jednostek (zablokowane AI) i nie zostały dodane na starcie. Szybkie testy wykazały, że owi gracze nie widzą siebie jako GCE_p(cyfra), ale jako <obj-null> (to wykazuje hint format["%1", player] w init.sqf). Potrzebuję jakiegoś sposobu, który pozwoliłby na przesłanie informacji na serwer, że dana jednostka pojawiła się na mapie i że musi zostać dodana do tablicy rozpoznawanych grup.
Czego nie chcę:
Coś takiego w polu odpalanym tylko u serwera w init.sqf:
- Kod: Zaznacz cały
"GCE_Call" addPublicVariableEventHandler
{
if !((group GCE_Call) in GCE_Groups) then
{
GCE_Groups = GCE_Groups + [group GCE_Call];
};
};
I czegoś takiego w polu odpalanym tylko u klienta w init.sqf:
- Kod: Zaznacz cały
GCE_Call = player;
publicVariable "GCE_Call";
Ponieważ istnieje szansa, że 2 graczy w tym samym czasie zrobi publicVariable "GCE_Call"; to skrypt może się posypać, lub jeden z graczy może nie byc rozpoznawany. Potrzebuję czegoś bardziej niezawodnego.
Jezeli potrzeba dalszych wyjaśnień - chętnie ich udzielę.