Vytvoření jedoucího tanku
13.10.2008 - 21:15,
(Autor: Perník)
  • Zajisté vás alespoň jednou při tvoření vaší mapy napadlo: "Sakriš, to by chtělo ňákej tank, kterej by mi sem jako přijel a začal střílet..". A na to se teď právě půjdeme podívat.
  • Předem upozorňuji, že názvy některých hodnot v tutorialu se neshodují s těmi, co jsou k nalezení na okolních obrázcích. Tutorial jsem psal až poté, co jsem si sám odzkoušel funkčnost originálu a hodnoty zde uvedené mi přijdou více na pochopení!
  • Zapněte si CoD Radiant(popřípadě Graydiant - UO)a vytvořte si(nebo nahrejte)nějakou mapu. Do ní vložte pomocí pravého tlačítka(dále jen PT) - script -> model. Objeví se nám červená entita, tu ale nechceme a tak si musíme nastavit nějaký model. Označte entitu script_model, zmáčkněte N a vyplňte:

    Key: model
    Value : xmodel/vehicle_tank_tiger

    Key: targetname
    Value : tiger

    Key: vehicletype
    Value: tiger

  • Hodnotu klíče targetname si můžete pojmenovat jak chcete, tak se bude jmenovat "pracovně" váš tank, ovšem musíte pak upravit i .gsc soubor, který celou tuto proceduru rozhýbe. Klíč vehicletype nevím co přesně nám zařídí(asi správné otáčení hlavně atd.), ale bez zadaní správné hodnoty, hru nespustíte - pro zjištění "vehicletypů" si otevřete třeba WinRARem soubor pak0.pak3 v adresáři main v CoD složce tam ve složce vehicle najdete názvy pro určité modely. No a xmodel nastaví jaký to bude model.


  • Takže teď už máme připravenou mapu s tankem(umístěte ho raději někam kam hráč při jeho startu neuvidí), ale ještě potřebujeme nastavit kam má dojet a jeho cestu samotnou. Na to nám poslouží entity vehicle_node a vehicle_node_rotate, které najdeme pomocí PT -> info. Entita vehicle_node se používá na start, konec a nějaké zastávky tanku(či jiného vozidla), vehicle_node_rotate nám poslouží, jak už z názvu vyplívá, na otočení vozidla. Kostky si rozestavte po mapě(ukázka na obrázku), pospojujte(můžete od startovací až po konečnou funkcí Ctrl + K, ale vždy jen dvě tzn. označit jednu a druhou a pak druhou a třetí a mezitím je spojovat CTRL + K), a poté musíme nastavit hodnoty startovací kostky...(měla by být zelená):

    Key: targetname
    Value: start

    Key: lookahead
    Value: 0.6

    Key: speed
    Value: 7

    Key: spawnflags
    Value: 1

  • Klíč spawnflags nastavený na 1, nám jen nahradí zaškrtnutí okénka START_NODE v okně entit.

  • funkcnitank01

  • ...a konečné entity, opět zelená kostka.

  • Key: targetname
    Value: 'po použití funkce CTRL + K se nastaví sama'

    Key: speed
    Value: 1
  • Po rozestavění kostek, kterými se tank bude řídit(tank nepojede přímo od kostky ke kostce, ale po správném spojení a POJMENOVÁNÍ startovací kostky, se vám při označení jakékoliv kostky spojené s ostatními "tankovými" kostkami, zobrazí v editoru červená cesta, po které vozidlo přímo pojede ve hře)a nastavení modelu samotného tanku, musíme ještě "naznačit" cíl na který tank bude střílet. Ten vytvoříme za pomoci PT -> script -> origin a nastavíme:
  • Key: targetname
    Value: tank_shoot
  • Zase je jedno, jak si to pojmenujete, ovšem nesmíte zapomenout přejmenovat to i ve vašem skriptu(soubor nazevvasimapy.gsc).

    Tak to by jsme měli mít hotovou mapu, kterou již můžete zkompilovat, a teď se vrhneme na script. Ten se musí zkopírovat do souboru jmenovasimapy.gsc, který si musíte vytvořit ve stejné složce jako jmenovasimapy.bsp(zkompilovaná mapa).


  • main()

    {

    maps\_load::main(); //nahraje vseobecny skript

    maps\_tiger::main(); //nahraje skript tigeru

    precachemodel ("xmodel/vehicle_tank_panzeriv_machinegun"); //pripravi kulomet

    thread tank();

    }

    tank()

    {

    wait(5); //pocka 5 sekund

    tank = getent ("tiger","targetname"); //pripravi tank pod nazvem tiger

    tank thread maps\_tiger::init();

    tank thread maps\_tankgun::mgon(); //zapne kulomet - mgoff vypne

    path = getVehicleNode("start","targetname"); //pripravi startovaci kostku

    tank attachpath(path); //spoji tank se startovaci kostkou

    tank startpath(); //rozjede tank na startovaci kostce

    tank waittill ("reached_end_node"); //pockat nez dorazi na posledni kostku

    tank.health = 1000; //nastavi zivoty tanku

    wait(2); //ceka 2s

    tanktarget1 = getent ("tank_shoot","targetname"); //nastavi cil tanku

    tank setTurretTargetEnt( tanktarget1, (0,0,0) ); //natoci hlaven na cil

    wait(2);

    tank waittill ("turret_on_vistarget"); //pocka nez bude hlaven nastavena na cil

    tank FireTurret(); //vystreli z hlavne

    wait(4); //pocka 4s

    tank FireTurret(); //opet vystreli z hlavne

    }
Soubor s ukázkovou mapou a skriptem si múžete stáhnout zde

 

Napísať otázku k tutoriálu

Meno: Dátum:
Kontrolný kód : 5 + sedem =