Range chcek error

Wszelkie pytania na temat SAIL'a i modowania OW.
User avatar
Don Hard
Soldier level 5
Soldier level 5
Nepal
Messages : 242
Inscription : Thu May 28, 2015 7:40 pm
Location : Lechia

Range chcek error

Post par Don Hard »

Czas na kolejną łatwą rzecz, którą nie ogarniam.

No więc zaprogramowałem sobie, aby komputer po pewnym czasie stworzył w swojej fabryce pojazd, który:

Będzie miał podwodzie śr. lub cięż. gąsienicowe
Będzie sterowany komputerowo.
Będzie miał silnik spalinowy
Jego bronią będzie podwójne działo lub wyrzutnia rakiet.
Jednak po wyprodukowaniu pojazdu gra mi wywala Range Check Errora.

Mój kod (przepraszam za ten burdel, jeszcze się uczę pewnych spraw)

Code: Select all

EXPORT RandVeh;
EXPORT function CreateRandVeh;
begin
CreateRandVeh;
Wait(0$10);
SetResourceType(GetBase(W2),mat_cans,1000);
RandVeh=(FilterAllUnits( [ [f_engine, engine_combustion],[f_side,8],[f_chassis,us_medium_tracked,[f_or],us_heavy_tracked],[f_control,control_computer],[f_weapon,us_double_gun,[f_or],[f_weapon,us_rocket_launcher] ]]));
enable;
end;

every 1$30 marked 002 do
begin
ComConstruct(F3,vc_chassis=[Rand(us_medium_tracked,us_heavy_tracked)],vc_control=control_computer,vc_engine=engine_combustion,vc_weapon=[Rand(us_double_gun,us_rocket_launcher)]);
ComMoveToArea(RandVeh,RandVehArea);
end;

EXPORT function RandAttack;
begin
RandAttack;
if (FilterAllUnits( [ [f_engine, engine_combustion],[f_side,8],[f_chassis,us_medium_tracked,[f_or],us_heavy_tracked],[f_control,control_computer],[f_weapon,us_double_gun,[f_or],[f_weapon,us_rocket_launcher] ]])) > 8 then
ComMoveToArea(FilterAllUnits( [ [f_engine, engine_combustion],[f_side,8],[f_chassis,us_medium_tracked,[f_or],us_heavy_tracked],[f_control,control_computer],[f_weapon,us_double_gun,[f_or],[f_weapon,us_rocket_launcher], ]]),Attack);
enable;
end;




Zapewne znów chodzi o jąkąś błahostkę, a ja nie mogę jej zobaczyć.
Z góry dziękuję za pomoc. :amhello:

EDIT: A jeśli kod jest bezsensowny... no to cóż... uczę się troszku jeszcze.
Last edited by Don Hard on Sat May 06, 2017 1:24 pm, edited 1 time in total.
User avatar
0dd1
ArCamp Developer
Messages : 334
Inscription : Tue Jul 01, 2014 3:01 pm

Re: Range chcek error

Post par 0dd1 »

f_or używa się tak: [f_or, [f_chassis, us_medium_tracked], [f_chassis, us_heavy_tracked] ] i tak samo z f_and, albo f_not

ten pierwszy nawias przy definiowaniu RandVeh chyba nieotrzebny. zrób po prostu: RandVeh = FilterAllUnits();
do tego pamiętaj że filter zwraca listę, więc żeby namierzyć pojedynczą jednostkę musisz sprecyzować że chodzi o pierwszą jednostkę w tej liście. Dodaj [1] na końcu: RandVeh = FilterallUnits()[1];

przy ComConstruct:
zamiast vc_control=control_computer wystarczy samo control_computer. Te od "vc_" używa się tylko przy funkcji Createhuman/vehicle/building

zajrzyj do Tools -> Identify w oknie saila. W constants znajdziesz us_double_gun i us_rocket_launcher jako 5 i 7, a pomiędzy nimi (6) jest jeszcze us_heavy_gun. Czyli rand(us_double_gun, us_rocket_launcher) to to samo co rand(5,7), i może ci wypaść 6.
Jeśli chcesz wybrać tylko pomiędzy działem i rakietą to tak: [us_double_gun, us_rocket_launcher][rand(1,2)]

A to:

EXPORT function RandAttack;
begin
RandAttack;

to jakaś incepcja. Nie wywołuj funkcji w niej samej. To samo z enable - raczej tylko do bloków every. Poza tym, jeśli już chcesz zrobić pętlę to musi mieć jakieś wait() bo inaczej zablokuje ci grę.
Generalnie powinieneś własne funkcje traktować jak te które sail już ma, jak ComConstruct albo FilterAllUnits. Czyli:

every 0$1 do
begin
RandAttack;

enable;
end;

to będzie wykonywać twoją funkcje bez końca.
Do it!
User avatar
Don Hard
Soldier level 5
Soldier level 5
Nepal
Messages : 242
Inscription : Thu May 28, 2015 7:40 pm
Location : Lechia

Re: Range chcek error

Post par Don Hard »

No jak mówiłem trochę przekombinowałem ten kod, a jako że nie umiałem tego za bardzo zrobić, to chociaż spróbowałem i jak widzę wcale nie tak dużo muszę poprawiać. Tak czy inaczej dziękuję za pomoc. :wink:
Répondre