Mozgólépcső
Írta: Ksisu - Dátum: 2010. April 02. 00:53:31
Hali! Ebben a kis cikkben bemutatom, hogyan lehet egyszerűen mozgólépcsőket csinálni. Sajnos nem tudtam teljesen automatizálni a scriptet, ezért olyanok vágjanak bele akik már ismerik vmennyire a dolgot, persze így se lesz nehéz. :)

A dolog lényege hogy a lépcsőfokok egymást fogják "kergetni". Mindig az előtte lévő helyére akar majd menni.

Radiant

első körben csináljunk egy lépcsőfokot, és az aljára egy origin texturájú brusht.

Utána mindkettőt kijelölve jobbklikk>script>brushmodel.
Másoljuk le és pakoljuk egymás mellé őket.

Úgy pakold őket, hogy majd ha szépen egymás után mennek, akkor úgy nézzen ki mint egy mozgólépcső. Ezt talajhoz képest-i helyzetünkél is vedd figyelembe.


Most jelöld ki az egyik lépcsőfokot(mind1 hogy melyiket), majd Entity-ben, targetname -> mlepcso1.

Most haggyuk kijelölve ezt a lépcsőfokot és jelöljök még ki a következő lépcsőfokot, majd nyomjunk W.

Majd ezt a lépcsőfokot és hozzá a következőt, majd megint W. Egészen addig amíg körbe nem érünk.

Ezzel a módszerrel csinálhatunk több mozgólépcsőt is, csak azoknak más legyen a targetname-jük.
Nekem végül így nézett ki, két mozgólépcső egyiket úgy kötetöttem össze, hogy felfele a másikat meg úgy, hogy lefele menjen. A targetname-jük: mlepcso és mlepcso2.


Script

Kezdjük azzal, hogy megnyitjuk a jegyzettömbünket és beleírjuk ezt a pár sort:
main()
{
mozgolepcso1 = getent ("mlepcso","targetname");
mozgolepcso1 thread mozgolepcso1_mukodes();
mozgolepcso2 = getent ("mlepcso2","targetname");
mozgolepcso2 thread mozgolepcso2_mukodes();

}

mozgolepcso1_mukodes()
{
Lepesek[1] = self;

Lepesek[2] = getent(Lepesek[1].target,"targetname");
Lepesek[3] = getent(Lepesek[2].target,"targetname");
Lepesek[4] = getent(Lepesek[3].target,"targetname");
Lepesek[5] = getent(Lepesek[4].target,"targetname");
Lepesek[6] = getent(Lepesek[5].target,"targetname");
Lepesek[7] = getent(Lepesek[6].target,"targetname");
Lepesek[8] = getent(Lepesek[7].target,"targetname");
Lepesek[9] = getent(Lepesek[8].target,"targetname");
Lepesek[10] = getent(Lepesek[9].target,"targetname");
Lepesek[11] = getent(Lepesek[10].target,"targetname");
Lepesek[12] = getent(Lepesek[11].target,"targetname");
Lepesek[13] = getent(Lepesek[12].target,"targetname");
Lepesek[14] = getent(Lepesek[13].target,"targetname");

Lepesek[15] = Lepesek[1];
Lepesek thread mozgom();
}


mozgolepcso2_mukodes()
{
Lepesek[1] = self;

Lepesek[2] = getent(Lepesek[1].target,"targetname");
Lepesek[3] = getent(Lepesek[2].target,"targetname");
Lepesek[4] = getent(Lepesek[3].target,"targetname");
Lepesek[5] = getent(Lepesek[4].target,"targetname");
Lepesek[6] = getent(Lepesek[5].target,"targetname");
Lepesek[7] = getent(Lepesek[6].target,"targetname");
Lepesek[8] = getent(Lepesek[7].target,"targetname");
Lepesek[9] = getent(Lepesek[8].target,"targetname");
Lepesek[10] = getent(Lepesek[9].target,"targetname");
Lepesek[11] = getent(Lepesek[10].target,"targetname");
Lepesek[12] = getent(Lepesek[11].target,"targetname");
Lepesek[13] = getent(Lepesek[12].target,"targetname");
Lepesek[14] = getent(Lepesek[13].target,"targetname");
Lepesek[15] = Lepesek[1];

Lepesek thread mozgom();
}


mozgom(){
while (1)
{
for(i=1;i<self.size;i++){
f=i+1;
self[i] moveto (self[f].origin,1);
}
self[i] waittill ("movedone");
}
}

A kék rész az ami úgy ahogy van kell a scriptbe. Egy mozgó lépcsőhöz két fő dolog kell. első a mainban:

SCRIPTNÉV = getent ("NÉV","targetname");
SCRIPTNÉV thread SCRIPTNÉV_mukodes();

SCRIPTNÉV - a scriptben szereplő név, mind1 hogy mi
NÉV - amit a radiantban megadtunk neki

A második rész a függvénye.
SCRIPTNÉV_mukodes()
{
Lepesek[1] = self;

Lepesek[2] = getent(Lepesek[1].target,"targetname");
Lepesek[3] = getent(Lepesek[2].target,"targetname");
Lepesek[4] = getent(Lepesek[3].target,"targetname");

....

Lepesek[N] = getent(Lepesek[N-1].target,"targetname");
Lepesek[N+1] = Lepesek[1];

Lepesek thread mozgom();
}

SCRIPTNÉV - a scriptben szereplő név(amit a mainban adtunk emg neki)

A narancssárga részben olvassuk be a scriptbe a lépcsőfokokat. Az én mapomon 14 lépcsőfok volt, ezért a fenti scriptben is ez a vége:
Lepesek[14] = getent(Lepesek[13].target,"targetname");
Lepesek[15] = Lepesek[1];

Ahány lépcsőfokot raktál le annyi sort kell beírni a minta szerint, remélem rájössz a minta alapján hogyan kell.

Ezt a két dolgot kell megcsinálni mind a 2 script résznél. Egyes mozgólépcsőknek lehet különböző lépcsőszáma, ennek következtében a scriptjei is hosszabbak/rövidebbek lesznek.

Most mentsük el mozgo.gsc néven az IWD\maps\mp mappába.

Már csak a pályánk fő gsc fájlában kell megnyitnunk ezzel a sorral:
maps\mp\mozgo::main();

Az áltálam készített minta pálya map fájla és IWD fájla innen letölthető.

Kis videóm is van róla:
Ksisu 2010 - TotalConverion.hu