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
Punktacja misji typu Sector Control
Moderatorzy: kondor, Inkwizytor
Punktacja misji typu Sector Control
[PAC-8BZ] Marcin
- RozekPoland
- Posty: 193
- Rejestracja: 20 czerwca 2010, 13:16
- ID Steam: RozekPoland
- Numer GG: 24417445
- Kontakt:
Re: Punktacja misji typu Sector Control
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.
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.
Re: Punktacja misji typu Sector Control
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):
2. w "manageSectior.sqf":
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.
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";
};
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;
};
Powyższy kod był nietestowany w ogóle.
Re: Punktacja misji typu Sector Control


Edit.
Nie pokazuje punktów i twierdzi, że jest błąd w skrypcie.

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.

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
Re: Punktacja misji typu Sector Control
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;
};
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