Range chcek error

Wszelkie pytania na temat SAIL'a i modowania OW.
Post Reply
User avatar

Topic author
Don Hard
Soldier level 5
Soldier level 5
Nepal
Posts: 203
Joined: Thu May 28, 2015 7:40 pm
Location: In despair

Range chcek error

#1

Post by Don Hard » Sat May 06, 2017 1:23 pm

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.
"Protection against deception, and never allow others to read your emotions. And whoever stands before you, don't let them push you around. Remember that."

User avatar

0dd1
ArCamp Developer
Posts: 318
Joined: Tue Jul 01, 2014 3:01 pm

Re: Range chcek error

#2

Post by 0dd1 » Tue May 09, 2017 8:55 pm

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

Topic author
Don Hard
Soldier level 5
Soldier level 5
Nepal
Posts: 203
Joined: Thu May 28, 2015 7:40 pm
Location: In despair

Re: Range chcek error

#3

Post by Don Hard » Wed May 10, 2017 5:33 am

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:
"Protection against deception, and never allow others to read your emotions. And whoever stands before you, don't let them push you around. Remember that."

Post Reply

Who is online

Users browsing this forum: No registered users and 0 guests