Dyskusja: edytor

Kącik niedzielnych fanów ArmA3 - zapraszamy wszystkich chętnych do wspólnych rozgrywek

Image

Moderators: SQ_Arma_XO, SQ_Arma_CO

Post Reply
User avatar
TigeR
Posts: 135
Joined: 2019-07-02 12:14

Flights: 32 (148hs)
Specialized in: M-2000C



Gildia Rentier

VFA-418 Pilot

A3 Commanding Officer

Ktoś wie gdzie leży błąd, że to nie działa jak powinno? Albo ArmA ma padake bo wykonuje się tylko raz (tzn arty oddaje tylko jeden strzal i kończy swoją robotę mimo, że ma 12 pocisków) albo jakiś koder może będzie chciał pomóc? :)

Code: Select all

_ammo = getArtilleryAmmo [gun1] select 0;  
_rounds = 12;  
while {_rounds >= 0} do {  
 _dir = round random 360;  
 _dis = round random 80; 
 _tgt = target1 getRelPos [_dis, _dir];  
 gun1 doArtilleryFire[_tgt,_ammo,1];  
 _rounds = _rounds - 1;  
};
Arty ma strzelać na danym obszarze, jednak z "rozpiętością" do 80m od celu. target1 to przypisany obiekt w grze, a gun1 to arty w grze, kod wyzwalany w trigerze. Z góry dzięki.

User avatar
Igorczyk
Posts: 42
Joined: 2019-08-06 00:05
Contact:

Flights: 25 (64hs)
Specialized in: F/A-18C



Gildia Rentier

VMFA-117 Executive Officer

W takiej sytuacji (może i koderem nie jestem, ale według mnie będzie bardziej estetycznie i być może zachce zadziałać) użyłbym pętli for w taki sposób:

Code: Select all

_ammo = getArtilleryAmmo [gun1] select 0;  
_rounds = 12;  
for "_i" from _rounds to 0 step -1 do {  
 _dir = round random 360;  
 _dis = round random 80; 
 _tgt = target1 getRelPos [_dis, _dir];  
 gun1 doArtilleryFire[_tgt,_ammo,1];  
};
Pamiętaj tylko, że w ten sposób nie jest resetowana ilość pocisków artylerii. Jeśli chcesz to zrobić to zrób tak

Code: Select all

_ammo = getArtilleryAmmo [gun1] select 0;  
_rounds = 12;  
for "_i" from _rounds to 0 step -1 do {  
 _dir = round random 360;  
 _dis = round random 80; 
 _tgt = target1 getRelPos [_dis, _dir];  
 gun1 doArtilleryFire[_tgt,_ammo,1];
 _rounds = _i;
};
POWINNO zadziałać, jeśli nie, no to cóż... próbowałem :D

User avatar
Igorczyk
Posts: 42
Joined: 2019-08-06 00:05
Contact:

Flights: 25 (64hs)
Specialized in: F/A-18C



Gildia Rentier

VMFA-117 Executive Officer

Aj sorki, dodatkowo jeszcze spróbuj poczekać, aż artyleria przeładuje! Właśnie doczytałem że trzeba poczekać!


czyli biorąc drugi przykład kod wygląda tak

Code: Select all


_ammo = getArtilleryAmmo [gun1] select 0;  
_rounds = 12;  
for "_i" from _rounds to 0 step -1 do {  
 _dir = round random 360;  
 _dis = round random 80; 
 _tgt = target1 getRelPos [_dis, _dir];  
 gun1 doArtilleryFire[_tgt,_ammo,1];
 _rounds = _i;
 sleep 20;
};


User avatar
TigeR
Posts: 135
Joined: 2019-07-02 12:14

Flights: 32 (148hs)
Specialized in: M-2000C



Gildia Rentier

VFA-418 Pilot

A3 Commanding Officer

Igorczyk wrote: 2020-05-26 19:42

Code: Select all


_ammo = getArtilleryAmmo [gun1] select 0;  
_rounds = 12;  
for "_i" from _rounds to 0 step -1 do {  
 _dir = round random 360;  
 _dis = round random 80; 
 _tgt = target1 getRelPos [_dis, _dir];  
 gun1 doArtilleryFire[_tgt,_ammo,1];
 _rounds = _i;
 sleep 20;
};
W tej formie też niestety strzela tylko raz. Natomiast wywala w mojej wersji, jak i Twojej "generic error in expression". A wywołuje go "sleep". Czyli trzeba będzie znaleźć jakieś obejście albo rozwiązanie problemu ze sleepem, aczkolwiek dziękuje, że próbowałeś :)

User avatar
VladMordock
Posts: 2300
Joined: 2017-09-26 23:45

Flights: 79 (192hs)
Specialized in: ATC / AWACS



Gildia Rentier

Tutaj macie rozwiązanie:
https://forums.bohemia.net/forums/topic ... -clueless/

Spróbuj z commandArtilleryFire

Kontakt z administracją (Marshallers) via contactadmin.
Dodawanie odznaczeń do profilu viewtopic.php?p=2106#p2106 .
User avatar
Igorczyk
Posts: 42
Joined: 2019-08-06 00:05
Contact:

Flights: 25 (64hs)
Specialized in: F/A-18C



Gildia Rentier

VMFA-117 Executive Officer

Ten kod co napisałem ze sleepem u mnie działa... możesz pokazać co masz w triggerze?

User avatar
TigeR
Posts: 135
Joined: 2019-07-02 12:14

Flights: 32 (148hs)
Specialized in: M-2000C



Gildia Rentier

VFA-418 Pilot

A3 Commanding Officer

Image

Image

Wystrzeli raz, a potem kupa.

User avatar
Igorczyk
Posts: 42
Joined: 2019-08-06 00:05
Contact:

Flights: 25 (64hs)
Specialized in: F/A-18C



Gildia Rentier

VMFA-117 Executive Officer

Aha, bo ty to robisz wewnątrz triggera, to tak na pewno nie zadziała :D

Zrób tak.

W triggerze wpisz to

Code: Select all

nul = execVM "nazwa_skryptu.sqf";
A w folderze z misją (w folderze z plikiem mission.sqm) stwórz plik o tej samej nazwie (przykładowo nazwa_skryptu.sqf), a w nim napisz ten mój ostatni skrypt, który wysłałem w tym wątku

o ten

Code: Select all

_ammo = getArtilleryAmmo [gun1] select 0;  
_rounds = 12;  
for "_i" from _rounds to 0 step -1 do {  
 _dir = round random 360;  
 _dis = round random 80; 
 _tgt = target1 getRelPos [_dis, _dir];  
 gun1 doArtilleryFire[_tgt,_ammo,1];
 _rounds = _i;
 sleep 20;
};
Niestety musisz zrobić to w ten sposób, inaczej będziesz miał kłopoty z puszczeniem jakiejkolwiek pętli. Tak niestety działa scheduler w armie

User avatar
TigeR
Posts: 135
Joined: 2019-07-02 12:14

Flights: 32 (148hs)
Specialized in: M-2000C



Gildia Rentier

VFA-418 Pilot

A3 Commanding Officer

Tego nie wiedziałem. Dzięki za info, spróbuje :)

Post Reply