Problem początkującego

Moderator: Inkwizytor

thebil
Posty: 17
Rejestracja: 01 lipca 2008, 23:40
ID Steam:
ID gracza: 0

Problem początkującego

Post autor: thebil »

Witam wszystkich, jest to mój pierwszy psot tutaj, wiec kozystając z okazji chciałem się przywitać.
Problem jest nastepujący:
Dodałem w edytorze 2 pojazdy - BMP i szyłkę o nazwach v1 i v2. Dodałem teżwyzwalacz z warunkiem true i nazwą m1 (i gracza, żeby obserwować działanie skryptu).
Oto zawartość pliku skrypt1.sqs, którego otwieram w poli inicjacji postaci gracza komendą this exec "skrypt1.sqs";

Kod: Zaznacz cały

_rnd = random(2);
if (_rnd == 1) then 
{
deleteVehicle v2;
v1 setPos (getPos (m1));
hint "v1";
}
else
{
deleteVehicle v1;
v2 setPos (getPos (m1));
hint "v2";
};
if(true)exitwith{};
Jak widać ma on losować, czy w danym miejscu ma sie pojawić szyłka, czy treż BMP. Pojawia mi się jednak błąd:

Kod: Zaznacz cały

|#|};
Brak {
Ktoś wie może dlaczego?
Jak widać jestem tu początkujący...
Awatar użytkownika
Matte
Posty: 805
Rejestracja: 17 stycznia 2007, 12:20
ID Steam:
Numer GG: 3470353
ID gracza: 2166020
Lokalizacja: Sosnowiec

Re: Problem początkującego

Post autor: Matte »

hyhy, składnia sqf, a zapisałeś jako sqs?
Oto zawartość pliku skrypt1.sqs,
o tak!, zmień na "skrypt1.sqf" ;>
Jestem BIS fanboyem! :ofp :weteran
FAQ:
Co zrobić gdy powiedzą coś złego o OFP:DR? DR nie żyje, a fani zapomnieli.
Co zrobić gdy powiedzą coś złego o ArmA II? - Do 1.96 jescze trochę brakuję...
All of BIS's programming is done by Ondrej's hair
Blogaska prowadzę, i gadam do mikrofonu w podcaście na matteprl.net
thebil
Posty: 17
Rejestracja: 01 lipca 2008, 23:40
ID Steam:
ID gracza: 0

Re: Problem początkującego

Post autor: thebil »

Czym różni się składnia pliku sqs od sqf? Jestem nowy w tym zagadnieniu i narazie sobie próbuję.

EDIT:

Zmieniłem rozszerzenie, ale problem pozostał ten sam. Nadal pojawia się komunikat
|#|};
Brak {
Awatar użytkownika
kondor
Posty: 1526
Rejestracja: 13 marca 2007, 11:50
ID Steam: Przemek_kondor
Kontakt:

Re: Problem początkującego

Post autor: kondor »

thebil
Posty: 17
Rejestracja: 01 lipca 2008, 23:40
ID Steam:
ID gracza: 0

Re: Problem początkującego

Post autor: thebil »

Dzięki za pomoc. Błąd odnaleziony - użyłem exec zamiast execVM.
Topic do zamknięcia.

Edit:
Albo nie. Mam jeszcze kilka pytań. Udało mi się wreszcie doprowadzić do porządku ten skrypt i zaimplementować go do misji. Okazało się, że nie losował tak jak trzeba, bo pokazywałz awsze v2. Okazało się, że funkcja random nie zwraca całkowitej wartości.

Zauwazyłem też, że faktycznie, usuwa pojazd, ale nie załogę. Pojawia się więc pytanie - jak mogę dostać grupę sterującą danym pojazdem? Chciałbym użyć deleteGroup, ale nie mam odpowiedniej tablicy.

Drugie pytanie - czy w misji multiplayer po uzyciu "random" dla każdego gracza jej wartość jest inna?
Awatar użytkownika
Trance
Posty: 1090
Rejestracja: 20 maja 2007, 19:06
ID Steam:
ID gracza: 0

Re: Problem początkującego

Post autor: Trance »

_c1 = commander v1;
_g1 = gunner v1;
_d1 = driver v1;

Masz tutaj trzy osoby siedzace w w tym v1. Podobnie robisz dla v2 i ich usuwasz w skrypcie
Obrazek
Awatar użytkownika
kondor
Posty: 1526
Rejestracja: 13 marca 2007, 11:50
ID Steam: Przemek_kondor
Kontakt:

Re: Problem początkującego

Post autor: kondor »

thebil pisze: Drugie pytanie - czy w misji multiplayer po uzyciu "random" dla każdego gracza jej wartość jest inna?
dla każdego gracza wartość random będzie niezależna, co nie znaczy, że każdemu się wylosuje inna wartość
Awatar użytkownika
Matte
Posty: 805
Rejestracja: 17 stycznia 2007, 12:20
ID Steam:
Numer GG: 3470353
ID gracza: 2166020
Lokalizacja: Sosnowiec

Re: Problem początkującego

Post autor: Matte »

Najlepszym rozwiązaniem będzie zrobienie losowania po stronie serwera, a następnie przesłanie wyniku do klientów
Jestem BIS fanboyem! :ofp :weteran
FAQ:
Co zrobić gdy powiedzą coś złego o OFP:DR? DR nie żyje, a fani zapomnieli.
Co zrobić gdy powiedzą coś złego o ArmA II? - Do 1.96 jescze trochę brakuję...
All of BIS's programming is done by Ondrej's hair
Blogaska prowadzę, i gadam do mikrofonu w podcaście na matteprl.net
thebil
Posty: 17
Rejestracja: 01 lipca 2008, 23:40
ID Steam:
ID gracza: 0

Re: Problem początkującego

Post autor: thebil »

Nie rozumiem na czym ma polegać ta niezależność. Może mi ktoś tao wytłumaczyć?
Rozumiem, że jeżeli w skrypcie dam random (3), to wylosuje dla każdego tą samą wartość. W czym przejawia się ta niezależność?

@matte

Jak coś takiego zrobić?
Awatar użytkownika
kondor
Posty: 1526
Rejestracja: 13 marca 2007, 11:50
ID Steam: Przemek_kondor
Kontakt:

Re: Problem początkującego

Post autor: kondor »

niezależność polega na tym, że wyniki random 3 u graczy są obliczane odzdzielnie. Zazwyczaj nie ma wspólnego wyniku, ale nie można powiedzieć, że na pewno
dla każdego gracza jej wartość jest inna
bo może się zdarzyć, że będą takie same.
Matte chciał powiedzieć, że losowanie powinno być wykonane w jednym miejscu (najlepiej na serwerze) i jego wynik ogłoszony reszczcie graczy. Czyli gdzieś musisz zrobić coś w rodzaju:

Kod: Zaznacz cały

if(isServer)then
{
  liczba = random 3;
  PublicVariable "liczba";
};
i wówczas wszyscy będą mieć wspólną losową liczbę
(o ile w tym wszystkim domyśliliśmy się o co Ci chodzi)
thebil
Posty: 17
Rejestracja: 01 lipca 2008, 23:40
ID Steam:
ID gracza: 0

Re: Problem początkującego

Post autor: thebil »

(o ile w tym wszystkim domyśliliśmy się o co Ci chodzi)
Wybaczcie panowie mój brak profesjonalizmu, ale dopiero co zaczynam.
Już spieszę z tłumaczeniem wszystko od góry do dołu. Zacznę od początku - misja polega na zajęciu Ixel (koło Masbete). Problem polega na tym, że ma być losowo: BWP-2, Szyłka, albo po zajęciu miasta ma przyjechać t72. To, co podałem miało być ogólnym zarysem skryptu i już myślę, że jest gotowe. Oto on:

Kod: Zaznacz cały

_rnd = random (3); 

if (_rnd <= 1) then
{
 {deleteVehicle _x} forEach units (group (bwp1D));
 deleteVehicle bwp1;
 {deleteVehicle _x} forEach units (group (t721D));
 deleteVehicle t721;
 hint "Szylka";
};

if ((_rnd > 1) AND (_rnd < 2)) then
{
 {deleteVehicle _x} forEach units (group (sz1D));
 deleteVehicle sz1;
 {deleteVehicle _x} forEach units (group (bwp1D));
 deleteVehicle bwp1;
 hint "t72";
};

if (_rnd >= 2) then
{
 {deleteVehicle _x} forEach units (group (sz1D));
 deleteVehicle sz1;
 {deleteVehicle _x} forEach units (group (t721D));
 deleteVehicle t721;
 hint "BWP-2";
};


if (true) exitWith {};
Rozumiem, że na początku powinienem użyć to:
if(isServer)then
{
liczba = random 3;
PublicVariable "liczba";
};
do losowania zmiennej _rnd?

Edit:
Kolejne z serii niezrównanych pytań - jak mogę w hint wypisać zmienną?
Mamy zmienną _i=5 i chciałbym to wypisać na ekranie.
Przydałoby się to do debuggowania kodu - wypisałbym wartość zmiennej i wiedziałbym co się dzieje.
ODPOWIEDZ

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