Punktacja misji typu Sector Control

Edytor Arma (Arma, Arma2, Arma2OA)

Moderatorzy: kondor, Inkwizytor

ODPOWIEDZ
Zygmunt
Posty: 60
Rejestracja: 07 października 2010, 13:08
ID Steam:
ID gracza: 0

Punktacja misji typu Sector Control

Post autor: Zygmunt »

Witam

Dopiero zaczynam z tworzeniem misji, edytor jest prosty, ale skryptowanie to piekło. Chciałem zrobić prostą misję typu utrzymać lokację i pojawił się problem którego nie mogę przejść. Przeszukałem sporo wątków, edytowałem różne misje MP i nigdzie nie znalazłem odpowiedzi która wyjaśniła by mi w pełni jak zrobić punktację w takiej misji (którą bym zrozumiał).

Sedno problemu. stworzyłem 3 sektory, każdy składa się z nazwanego markera np "sektor1" (koła o zadanym promieniu) i 3 aktywatorów (koła o tym samym promieniu). Te aktywatory zmieniają kolor tego markera na niebieski, czerwony , lub żółty w zależności kto kontroluje sektor (żółty nikt nie kontroluje). Wszystko działa. Chciałbym teraz przyznawać punkty np: w "sektor1" 3 punkty za każde 4 sekundy utrzymania sektoru, w "sektor2" 4 pkt za każde 6s utrzymania i podobnie w "sektor3". Ponadto chciałbym żeby za każde zabicie wrogiego żołnierza było przyznawane 5pkt, za każde zniszczenie wrogiego lekkiego pojazdu 6pkt, oraz za każde zniszczenie wrogiej jednostki latającej 8pkt. Nie wiem jak napisać skrypt, żeby serwer zliczał te wszystkie punkty.

Proszę podpowiedzcie jakich funkcji powinienem użyć i w jakim pliku je wpisać, lub podajcie przykładowy skrypt dający takie efekty. Wyświetlanie punktów planuję zrobić dodając akcję do każdego gracza "wyświetl punkty". Na marginesie zamierzam to zrobić w arma 3 , ale wątek umieściłem tu ponieważ wydaj mi się, że akurat to co chcę wykonać będzie działać zarówno w armie 3 jak i w armie 2.

Pozdrawiam
[PAC-8BZ] Marcin
Awatar użytkownika
RozekPoland
Posty: 193
Rejestracja: 20 czerwca 2010, 13:16
ID Steam: RozekPoland
Numer GG: 24417445
Kontakt:

Re: Punktacja misji typu Sector Control

Post autor: RozekPoland »

Co do naliczania punktów za sektory to polecam szablon misji ECL.

Jeżeli zaś chodzi o naliczanie punktów za zabite jednostki/zniszczone pojazdy to powinieneś zacząć temat od tego - http://community.bistudio.com/wiki/rating
Niestety, z tego co się orientuję to dotyczy to punktów, które pojawiają się w odprawie misji, ale być może jest możliwość ich "wyciągnięcia" i podglądania na bieżąco.

Niestety nie potrafię ci pomóc co do całościowego zliczania punktów za to wszystko razem. W tym celu mógłbyś pogrzebać w misjach z projektu VB (Virtual Battle), Project Reality, albo nawet zwykłe AAS.
:ofp :weteran


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

Re: Punktacja misji typu Sector Control

Post autor: kondor »

1. Stwórz w zmienne w init.sqf i tylko na serwerze licz punkty za sektory (żeby nie zliczać ich na każdym komputerze, co dałoby n-razy za dużo punktów):

Kod: Zaznacz cały

westScore = 0;
eastScore = 0;

if (isServer) then
{
  [triggerSector1, 3, 4] execVM "manageSector.sqf";
  [triggerSector2, 4, 6] execVM "manageSector.sqf";
  [triggerSector3, 4, 6] execVM "manageSector.sqf";
};
2. w "manageSectior.sqf":

Kod: Zaznacz cały

_trigger = _this select 0;
_score = _this select 1;
_delay = _this select 2;

_sectorMarker = format["%1marker", _trigger]; // to zaklada, że markery sektorów nazywają się "triggerSector1marker" itd. Poza tym nie wiem czy to przejdzie

_secondsCounter = 0;
while {true} do
{
  // update colors
  _westInSector = { side _x == WEST } count (list _trigger);
  _eastInSector = { side _x == EAST } count (list _trigger);
  
  _color = "ColorYellow";
  if (_westInSector != _eastInSector) then
  {
    _color = if (_westInSector > _eastInSector) then { "ColorBlue" } else { "ColorRed" };
  };
  _sectorMarker setMarkerColor _color;
  
  // score
  secondsCounter = secondsCounter + 1;
  if ((secondsCounter % _delay) == 0)
  {
     if (_westInSector > _eastInSector) then
     {
        westScore = westScore + 1;
        publicVariable "westScore";
     };
     if (_westInSector < _eastInSector) then
     {
        eastScore = eastScore + 1;
        publicVariable "eastScore";
     };

     secondsCounter = 0;
  }

  sleep 1;
};
Co do liczenia punktów za zabicie musisz się bawić z event handlerami "KILLED" (poszukaj na forum)

Powyższy kod był nietestowany w ogóle.
Zygmunt
Posty: 60
Rejestracja: 07 października 2010, 13:08
ID Steam:
ID gracza: 0

Re: Punktacja misji typu Sector Control

Post autor: Zygmunt »

:D Serdecznie dziękuję za odpowiedzi. Zaraz wypróbuję i dam znać co i jak. Najważniejsze, żeby za sektory zaliczało :)

Edit.
Nie pokazuje punktów i twierdzi, że jest błąd w skrypcie. Obrazek http://imageshack.us/photo/my-images/44 ... 84339.jpg/ Jeszcze nie mam zaimplementowanego wyświetlania punktów a tu chyba niema prawda?
Edit.
dodałem do każdego żołnierza This AddAction ["show score", "showscore.sqf"]; a w showscore.sqf wpisałem
_str = format ["POINTS:\nBLUFOR : %1 - OPFOR %2",westScore,eastScore];
hint _str;
Ale ppo respawnie nie ma już możliwości włączenia show score. :( skrypty = welcome to hell

Wydaje mi się ponadto, że niedostatecznych informacji udzieliłem, albo nie rozumiem z tymi trigerami. W każdym sektorze mam 3 trigery (czyli 9 trigerów bo 3 sektory) aktywowane przez byle kogo, powtarzalnie i w condition - ({side _x == opfor} count thisList > {side _x == blufor} count thisList) i w on act - "sector1" setMarkerColor "ColorRed" w dwóch pozostałych podobnie. I to działa. W zamyśle chciałem uzależnić dodawanie punktów od kolorów poszczególnych markerów nazwanych odpowiednio "sector1", "sector2", "sector3".

myślałem o takim skrypcie odpalanym w init.sqf [] Exec "points.sqf"
a w nim

// score
_westscore = _this select 0;
_eastscore = _this select 1;

while {(getMarkerColor "sector1") == "ColorBlue"} do {
westscore = westscore + 3;
publicVariable "westScore";
};
while {(getMarkerColor "sector1") == "ColorRed"} do {
westscore = eastscore + 3;
publicVariable "eastScore";

i tak dla wszystkich markerów. Ale to kompletnie nie działa w dodatku na początku przyznaje 2 pkt do westscore. Poza tym nie wiem jeszcze jak zrobić pętlę.
[PAC-8BZ] Marcin
Zygmunt
Posty: 60
Rejestracja: 07 października 2010, 13:08
ID Steam:
ID gracza: 0

Re: Punktacja misji typu Sector Control

Post autor: Zygmunt »

Dobra poradziłem sobie. Oto skrypt który zastosowałem. Daje co 4 sekundy tyle puntów co wpisane. Żeby w każdym sektorze zrobić inne przydzielanie czasowe można użyć trzech osobnych skryptów.


while {true} do
{
if (getMarkerColor "sector1" == "ColorBlue") then
{
westScore = westScore + 4;
publicVariable "westScore";
};
if (getMarkerColor "sector1" == "ColorRed") then
{
eastScore = eastScore + 4;
publicVariable "eastScore";
};
if (getMarkerColor "sector2" == "ColorBlue") then
{
westScore = westScore + 5;
publicVariable "westScore";
};
if (getMarkerColor "sector2" == "ColorRed") then
{
eastScore = eastScore + 5;
publicVariable "eastScore";
};
if (getMarkerColor "sector3" == "ColorBlue") then
{
westScore = westScore + 6;
publicVariable "westScore";
};
if (getMarkerColor "sector3" == "ColorRed") then
{
eastScore = eastScore + 6;
publicVariable "eastScore";
};
sleep 4;
};
[PAC-8BZ] Marcin
ODPOWIEDZ

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