{literal}


Lekcja 3


W lekcji 3 pokaże jak zrobić parametry AI dla gry w potyczkę, mplayera i kampanie. Moja sugestia zamiast używać // wiele razy linijka w linijka, można użyć /* i na koniec */ w ten oto sposób eliminujemy część skryptu. Na początek opis co robimy. Otóż tworzymy skrypt gracza sterowanego przez AI w potyczce, bo tam najłatwiej jest zauważyć to co robimy. Pewnie pytasz się czytelniku po co to. A po to, żeby się nauczyć i to są podstawy, w kampanie i potyczce będziemy sterować AI czy chcesz czy nie. Choćby wynalazki. Dosyć tego przemówienia, do pracy!!! Oto co trzeba zrobić żeby AI był w grze:
1.tworzymy katalogi "scripts" ,a w nim "aiplayers"
2.nazwa pliku skryptu to np. 5_PoziomAI.ecoMP dla TMP i LS, a dla Earth2150 to 5_PoziomAI.eco
3.mapa na której będziesz testował skrypt, graj najlepiej jako gracz zielony lub niebieski i wyżej;
zmiany są dla graczy żółtego i czerwonego.


player "Poziom.1.0" (0)
{
state Initialize;
state SetLimitState;
state Nothing;

state Initialize
{
if(GetRace()==1)//ucs (1)
{
SetName("UCS poziomu.1.0"); (2)
}
if(GetRace()==2)//ed
{
SetName("ED poziomu.1.0");
}
if(GetRace()==3)//lc
{
SetName("LC poziomu.1.0");
}
EnableAIFeatures(aiUpgradeCannons,false); (3)
EnableAIFeatures(aiRush,false); (4)
EnableAIFeatures(aiBuildSuperAttack,false); (5)

SetMaxTankPlatoonSize(3); (6)
SetMaxHelicopterPlatoonSize(3); (7)
SetMaxShipPlatoonSize(3); (8)

SetNumberOfOffensiveTankPlatoons(1); (9)
SetNumberOfOffensiveShipPlatoons(1); (10)
SetNumberOfOffensiveHelicopterPlatoons(1); (11)

SetNumberOfDefensiveTankPlatoons(3); (12)
SetNumberOfDefensiveShipPlatoons(0); (13)
SetNumberOfDefensiveHelicopterPlatoons(1); (14)

SetMaxAttackFrequency(400); (15)
return SetLimitState,10;
}

state SetLimitState
{
if(GetMoney()<20000) AddMoney(20000-GetMoney());
EnableMilitaryUnitsLimit(false); (16)
return Nothing,6000;
}
state Nothing
{
return Nothing,100000;
}
}

(0) początek gracza AI wraz z nazwą tak jak w misjach lekcjach 1 i 2
(1) jeżeli AI jest UCS to {}
(2) zmienia nazwę gracza sterowanego przez AI
(3) false - zakazuje AI na ulepszanie istniejących broni na budynkach i itp. true - powrót do normalnych ustawień
(4) false - nie będzie szybkiego ataku ze strony AI
(5) false - zakazuje budowy przez AI broni masowej zagłady
(6) maksymalny rozmiar jednego plutonu pancernego
(7) -||- powietrznego
(8) -||- wodnego
(9),(10),(11) iloma plutonami AI atakuje
(12),(13),(14) ile plutonów zostawia w bazie do obrony
(15) nie jestem pewny, ale to jest chyba szybkość następnego ataku mogę się mylić
(16) limit jednostek - false oznacza, że go niema // za false można wstawić dowolną liczbę, ale za Enable trzeba wstawić Set


I jak? Czeka nas jeszcze wiele pracy kolego. Oto Poziom.1.1


player "Poziom.1.1"
{
state Initialize;
state SetLimitState;
state Nothing;

state Initialize
{
if(GetRace()==1)//ucs
{
SetName("UCS poziomu.1.1");
if(GetIFFNumber()==0 ||GetIFFNumber()==1)SetName("AI specjal"); (0)
}
if(GetRace()==2)//ed
{
SetName("ED poziomu.1.1");
if(GetIFFNumber()==0 ||GetIFFNumber()==1)SetName("AI specjal");
}
if(GetRace()==3)//lc
{
SetName("LC poziomu.1.1");
if(GetIFFNumber()==0 ||GetIFFNumber()==1)SetName("AI specjal");
}
EnableAIFeatures(aiUpgradeCannons,false);
EnableAIFeatures(aiRush,false);
EnableAIFeatures(aiBuildSuperAttack,false); (x)

SetMaxTankPlatoonSize(3); (x)
SetMaxHelicopterPlatoonSize(3);
SetMaxShipPlatoonSize(3);

SetNumberOfOffensiveTankPlatoons(1); (x)
SetNumberOfOffensiveShipPlatoons(1);
SetNumberOfOffensiveHelicopterPlatoons(1);

SetNumberOfDefensiveTankPlatoons(3);
SetNumberOfDefensiveShipPlatoons(0);
SetNumberOfDefensiveHelicopterPlatoons(1);

if((GetIFFNumber()==0 ||GetIFFNumber()==1)
{
EnableAIFeatures(aiRush,true);
EnableAIFeatures(aiBuildSuperAttack,true); (1)
SetMaxTankPlatoonSize(5); (2)
SetNumberOfOffensiveTankPlatoons(3); (3)
AddResearch("RES_MCH2"); (4)
AddResearch("RES_MCH3");
AddResearch("RES_MCH4");
}

SetMaxAttackFrequency(400);
return SetLimitState,10;
}

state SetLimitState
{
if(GetMoney()<20000) AddMoney(20000-GetMoney());
SetMilitaryUnitsLimit(17500); (x) (5)
if((GetIFFNumber()==0 ||GetIFFNumber()==1)
{
EnableMilitaryUnitsLimit(false); (5)
}
return Nothing,6000;
}
state Nothing
{
return Nothing,100000;
}
}

(0) teraz gracze AI żółty i czerwony mają inną nazwę
(0) funkcja GetIFFNumber() jest opisana w EARTHC
(1) graczowi żółtemu i czerwonemu zezwalamy na budowę i używanie "super budynków bum bum"
(2) zwiększamy wielkość plutonu 2 graczy
(3) ilość plutonów przeznaczonych do ataku
(4) dajemy im rakiety naprowadzane 100% niech będzie trudniej
(5) wstawiamy limit jednostek
(x) a teraz o co chodzi z (x) otóż najpierw wstawiamy właściwości dla wszystkich 15 graczy, a dopiero potem dla wybranych


I myślisz, że to wszystko co można zrobić otóż nie. Tu zadowolą się gracze w potyczkę AI będzie atakować AI.


player "Poziom.1.2"
{
state Initialize;
state SetLimitState;
state Nothing;

state Initialize
{
if(GetRace()==1)//ucs
{
SetName("UCS poziomu.1.2");
if(GetIFFNumber()==0 ||GetIFFNumber()==1)SetName("AI specjal");
}
if(GetRace()==2)//ed
{
SetName("ED poziomu.1.2");
if(GetIFFNumber()==0 ||GetIFFNumber()==1)SetName("AI specjal");
}
if(GetRace()==3)//lc
{
SetName("LC poziomu.1.2");
if(GetIFFNumber()==0 ||GetIFFNumber()==1)SetName("AI specjal");
}
EnableAIFeatures(aiUpgradeCannons,false);
EnableAIFeatures(aiRush,false);
EnableAIFeatures(aiBuildSuperAttack,false);

SetMaxTankPlatoonSize(3);
SetMaxHelicopterPlatoonSize(3);
SetMaxShipPlatoonSize(3);

SetNumberOfOffensiveTankPlatoons(1);
SetNumberOfOffensiveShipPlatoons(1);
SetNumberOfOffensiveHelicopterPlatoons(1);

SetNumberOfDefensiveTankPlatoons(3);
SetNumberOfDefensiveShipPlatoons(0);
SetNumberOfDefensiveHelicopterPlatoons(1);

if(GetIFFNumber()==0 ||GetIFFNumber()==1)
{
EnableAIFeatures(aiRush,true);
EnableAIFeatures(aiBuildSuperAttack,true);
SetMaxTankPlatoonSize(5);
SetNumberOfOffensiveTankPlatoons(3);
AddResearch("RES_MCH2");
AddResearch("RES_MCH3");
AddResearch("RES_MCH4");
EnableAIFeatures2(ai2NeutralAI,false); (0)
EnableAIFeatures(aiBuildShips,false); (1)
EnableAIFeatures(aiBuildHelicopters,false); (1)
EnableAIFeatures(aiBuildShipyard,false); (1a)
EnableAIFeatures(aiRejectAlliance,true); (2)
}

SetMaxAttackFrequency(400);
return SetLimitState,10;
}

state SetLimitState
{
if(GetMoney()<20000) AddMoney(20000-GetMoney());
SetMilitaryUnitsLimit(17500);
if(GetIFFNumber()==0 ||GetIFFNumber()==1)
{
EnableMilitaryUnitsLimit(false);
}
return Nothing,6000;
}
state Nothing
{
return Nothing,100000;
}
}


(0) teraz po tej komendzie AI będzie walczyć przeciwko AI, żeby atakowało bazy trzeba ustawić inne opcje o których później.
(1) powiecmy, że chcemy, żeby AI walczyło tylko na lądzie.
(1a) zakazujemy budowy przez AI stoczni
(2) tu fajne AI na naszą prośbę zatwierdzi z nami sojusz. na razie to zrobi tylko tyle, że przyjedzie do naszej bazy jednym plutonem, ale gdy 2 AI się spotka to będą walczyć ze sobą. To po to, aby udowodnić, że AI atakuje AI.


To na tyle w Lekcji 3

/* Zapowiedz Kolejnych lekcji */

AI atakuje bazę AI
AI posiada takie same wynalazki co ty
Brak statystyk zielonego gracza
Wysadzanie bazy AI w powietrze
Drugi typ znaczników na mapie
Efekt z 1 misji ED w kampanii z TMP
Skrypt AI użyty w skrypcie misji

To na tyle. Do pisania.

P.S. Spróbuje dla maniaków czegoś trudniejszego w Lekcji XXL / grzebanie w pliku Parameters.par

{/literal}