Teraz jest So 20 kwi, 2024 00:00


Skrypt Zamykanie-Otwieranie auta ? serwer problem

Dział poświęcony edytorowi ArmA II i Operation Arrowhead, czyli tworzeniu misji.
  • Autor
  • Wiadomość
Offline
Avatar użytkownika

Rafalsky

Major

Major

  • Posty: 748
  • Dołączył(a): Cz 21 sty, 2010 23:27
  • Lokalizacja: Londyn

Skrypt Zamykanie-Otwieranie auta ? serwer problem

PostPn 26 kwi, 2010 12:09

skrypt umozliwia: podejscie do pojazdu i otwarcie lub zamkniecie.

inicjalizacja
Kod: Zaznacz cały
init field of the vehicle:
     a = [this] execVM "lockVehicles.sqf";
    or
     a = [this,"Humvee #1"] execVM "lockVehicles.sqf";


lockVehicles.sqf
Kod: Zaznacz cały
private ["_pojazd", "_stan", "_akcja"];

_pojazd = _this select 0;
_stan = locked _pojazd;
_nazwa = _pojazd;

// ta czesc kodu rozpoznaje czy to inicjalizacja czy juz dzialanie z addAction.
if ((count _this) <= 2) then {
   if ((count _this) == 2) then {_nazwa = _this select 1};
   _stan = !(_stan);     //podczas inicjalizacji, aby nie zmieniac stanu pojazdu

   } else {
      _akcja = _this select 2;
      _pojazd removeAction _akcja;
      _nazwa = (_this select 3) select 0;
   };
      
if (_stan) then {
  _pojazd lock false;
  _akcja = _pojazd addAction [format["Lock the %1", _nazwa], "lockVehicles.sqf",[_nazwa]];
 
  // debug hint, comment it in the mission
  hint "The vehicle has beed unlocked";

  } else {
  _pojazd lock true;
  _akcja = _pojazd addAction [format["Unlock the %1", _nazwa], "lockVehicles.sqf",[_nazwa]];
 
  //debug hint, comment it in the mission
  hint "The vehicle has beed locked";
};



Problem przyklad: Wstawiasz w edytorze , auto i je zamykasz.

testy w edytorze na lokalu wszystko dziala OK, (ale lokal to tak jakbys byl serwerem).

natomiast gdy misja odpalona zostaje na dedyku: podchodzisz do pojazdu, z rolki unlock, i on na "0.5 sek ci go fizycznie otworzy, a potem zamknie." Tak jakby po skonczeniu skryptu auto powracalo do ustawienia jakie bylo gdy je wstawiales w edytorze. ?? ???

moja teoria spiskowa:
Czy to moze byc ze ta funkcja "lock" dziala lokalnie, wiec poki skrypt jest odpalony lokalnie ty widzisz ze auto zostalo otwarte (to 0.5sek co masz otwarte), skrypt sie konczy i serwer wysyla do klientow uaktualnienie stanu pojazdu wzgledem siebie. A na serwerze nic sie nie zmienilo, wiec ustawia auto u klienta, na takie jak ma u siebie czyli (oryginalnie zamkniete).

PS w zalaczeniu przyklad.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Ostatnio edytowano Pn 26 kwi, 2010 17:57 przez Rafalsky, łącznie edytowano 1 raz
- "Nigdy nie mów ludziom, jak mają wykonywać swe zadania. Powiedz im tylko, co mają robić, a będziesz zdziwiony ich pomysłowością."
Offline
Avatar użytkownika

Kadryl

Major

Major

  • Posty: 883
  • Dołączył(a): Cz 14 wrz, 2006 14:04
  • Lokalizacja: Wa-wa

PostŚr 05 maja, 2010 17:48

Na to wygląda bo jak wspominałem skrypt działa na wartościach lokalnych.
Ale sprawdżmy podejrzenie:


Kod: Zaznacz cały
private ["_pojazd", "_stan", "_akcja"];

_pojazd = _this select 0;
_stan = locked _pojazd;
_nazwa = _pojazd;

// ta czesc kodu rozpoznaje czy to inicjalizacja czy juz dzialanie z addAction.
if ((count _this) <= 2) then {
    if ((count _this) == 2) then {_nazwa = _this select 1};
    _stan = !(_stan);     //podczas inicjalizacji, aby nie zmieniac stanu pojazdu

    } else {
        _akcja = _this select 2;
        _pojazd removeAction _akcja;
        _nazwa = (_this select 3) select 0;
    };
       
if (_stan) then {
//  _pojazd lock false;
pojazd = [_pojazd, false];
publicvariable "pojazd";
sleep 0.5;
(pojazd select 0) lock (pojazd select 1);

  _akcja = _pojazd addAction [format["Lock the %1", _nazwa], "lockVehicles.sqf",[_nazwa]];
 
  // debug hint, comment it in the mission
  hint "The vehicle has beed unlocked";

  } else {
// _pojazd lock true;
pojazd = [_pojazd, true];
publicvariable "pojazd";
(pojazd select 0) lock (pojazd select 1);
sleep 0.5;
  _akcja = _pojazd addAction [format["Unlock the %1", _nazwa], "lockVehicles.sqf",[_nazwa]];
 
  //debug hint, comment it in the mission
  hint "The vehicle has beed locked";
};
Offline
Avatar użytkownika

Rafalsky

Major

Major

  • Posty: 748
  • Dołączył(a): Cz 21 sty, 2010 23:27
  • Lokalizacja: Londyn

PostSo 15 maja, 2010 11:52

no :)
do sprawdzenia na serwerze a2c misja ts-lockVehicle 1.1.

Funkcja nie dziala poprawnie. Stan pojazdu nie jest zmieniany.
- "Nigdy nie mów ludziom, jak mają wykonywać swe zadania. Powiedz im tylko, co mają robić, a będziesz zdziwiony ich pomysłowością."
Offline
Avatar użytkownika

gremdek

Porucznik

Porucznik

  • Posty: 428
  • Dołączył(a): Pn 27 lut, 2006 15:02

PostSo 15 maja, 2010 15:31

lock musi być odpalony na kliencie który siedzi w samochodzie(jest jakby w posiadaniu) lub AI pod jego komendą jest w nim. w przypadku pustego pojazdu/AI w środku na serwerze musi to pójść.

najprościej to po prostu odpalić na raz na wszystkich maszynach, czyli jakieś publicvariable i połączone z tym: http://community.bistudio.com/wiki/addP ... entHandler
:(

Powrót do [ArmA II] Edytor

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 37 gości

cron