Skriptování v Counter-Strike 1.díl
zdroj: tisková zpráva

Skriptování v Counter-Strike 1.díl

19. 7. 2001 0:00 | Téma | autor: Redakce Games.cz |

Vytváření sekvencí příkazů v nejpopulárnější síťové hře Vás zaujalo a tak jsme se nyní na skriptování podívali trochu podrobněji.


Skriptování nejen v Counter-Strike - 1.část

Autor: Mickey Mouse
Publikováno: 19.července 2001

Zvětšit zdroj: tisková zpráva Předpokládám, že každý, kdo Counter-Strike či jiný herní mód běžící na enginu Half-Lifu trochu hraje, alespoň tuší, co se bindováním a scriptováním myslí. Scriptování je vytváření jednoduchých sekvencí příkazů - scriptů. Bindování je pak přiřazení těchto scriptů klávesám nebo tlačítkům na myši, kterými si je spouštíme. Ostatně - již jsme se jej dotkli před nějakým časem v tomto článku.

Dnes se podíváme na scriptování trochu podrobněji, neboť se pořád ozývají ti, kterým není něco jasné a potřebují pomoc aspoň do začátku pro pochopení základních principů. Druhý důvod, proč jsem se k tomuto článku odhodlal je, že jsem se trochu v scriptování povrtal, sem tam něco vyčetl ze zahraničních webů, něco v praxi otestoval, pozměnil apod. No a do třetice je příčinou, proč tento článek vznikl i to, že jsme se rozhodli některým opravdu vydařeným módům pro Half-Life věnovat v některých příštích článcích, protože je opravdu o co stát.

Celý princip, ktetrý si v článku popíšeme je společný pro všechny herní modifikace Half-Life, pouze v různých hrách budou malé změny ve specifických příkazech, které ten který mód hře přidává čímž jsou tyto příkazy dostupné pouze v dané hře. Ukázky v článku uvedené se týkají Counter-Striku, ale řada z nich je samozřejmě použitelná v módech jiných. Pojďme tedy na to. Ještě na úvod uvedu link na jednu pomůcku, kterou můžete při bindování shledat užitečnou, a tou je obrázek klávesnice, kde jsou označeny klávesy, které lze bindovat včetně toho, jak se ta která klávesa ve scriptech značí (klávesy, které bindovat nelze jsou označeny šedě). Můžete si pak do obrázku značit, co kde máte již nabindované a alespoň do začátku jej můžete ve hře používat jako nápovědu, než dostanete všechno do paměti. Obrázek ve formátu PDF si můžete stáhnout odtud (k jeho otevření potřebujete volně stažitelný Adobe Acrobat Reader).

 Na začátek trochu teorie
Začnu opět zcela od začátku. Bindování je spojeno s vytvářením tzv. aliasů. To není nic jiného než pojmenování si sekvence příkazů (scriptu) názvem, kterým ji pak budeme volat. Například si vytvoříte tento alias:

alias KALASHNIKOV "buy; menuselect 4; menuselect 1"

Tímto jednoduchým způsobem jsme si tedy vytvořili alias nazvaný KALASHNIKOV a jemu přiřadili sekvenci příkazů uvedenou v uvozovkách. Nyní nebudeme ještě rozebírat, co jednotlivé (jsou tři) příkazy oddělené středníky znamenají. Zatím by mělo být z ukázky jasné, CO to alias je a jakým způsobem se vytváří. Nyní si povíme o tom, K ČEMU je dobrý a JAK se používá. Alias je dobrý k tomu, že zastupuje jeden či více příkazů (sekvenci), které se provádějí automaticky v pořadí, ve kterém jsou napsány. Přijde-li na řadu příkaz, který není možné v danou chvíli provést, jednoduše je přeskočen a pokračuje se v plnění následujícího proveditelného příkazu. Výhody a nevýhody jakož i využití v praxi si ukážeme za chvíli. Způsob spuštění aliasu (a tím pádem dané sekvence) je pak takový, že tento alias přiřadíme (nabindujeme) na stisk některé klávesy či tlačítka myši. Ve hře to pak funguje tak, že při stisku oné klávesy se provedou všechny příkazy, které jsou do daného aliasu zahrnuty.

Nyní vyvstává otázka, KAM tyhle aliasy a přiřazení klávesám napíšeme, aby si je hra pamatovala. Takže: aliasy se standardně píšou do souboru autoexec.cfg. Způsob, jakým se zapisují jsme si už uvedli na začátku a doplníme snad jen to, že každý bindovatelný alias by měl začínat na novém řádku. Chcete-li si psát textové komentáře, začněte řádek lomítky a Half-Life bude celý tento řádek ignorovat. Všechno si zase dále ukážeme.

Bindování se zapisuje do souboru config.cfg , a to následujícím způsobem:

bind "F1" KALASHNIKOV

Zvětšit zdroj: tisková zpráva Příkaz bind slouží k onomu přiřazení (odtud výraz bindování), v uvozovkách následuje klávesa, jejímž stisknutím alias spustíme a následuje název onoho aliasu. Čili velmi jednoduché. Pro správnou funkci tedy musíme jednak do souboru autoexec.cfg vytvořit alias a do souboru config.cfg pro něj musíme nabindovat klávesu, která bude sloužit jeho spuštění. Obě uvedené ukázky tedy představují vytvoření aliasu (první ukázka) a jeho přiřazení na stisk klávesy F1 (druhá ukázka). Tím je tedy operce hotova a alias je připraven k používání.

K souborům autoexec.cfg a config.cfg (dále už jen autoexec a config) si řekneme ještě toto: soubor config.cfg najdete v adresáři s Counter-Strikem vždy. Ten se vytvoří automaticky po instalaci hry a jsou v něm uložena její nastavení a ovládání tak, jak jste si je provedli z herních nabídek. Tento soubor můžete klidně ručně přepisovat, přidávat nebo odebírat z něj řádky a upravovat si jej podle vlastního uvážení. Ještě upozorním, že config si Counter-Strike při spuštění kompiluje, čili pokud si jej opatříte třeba popiskami, přijdete (bohužel) o ně. Autoexec je dodatečný soubor, který standardně hra nepoužívá, ale je pro jeho využití připravena a pokud jej umístíte do adresáře s Counter-Strikem (tedy do stejného, kde je config), automaticky se spustí při naběhnutí hry a jeho obsah se načte a zapamatuje. Pokud tedy autoexec v adresáři nenajdete, vytvořte si jej jako normální textový dokument, který si pouze pojmenujte autoexec.cfg. Pro editaci obou konfiguračních souborů pak používejte nejlépe Notepad (Poznámkový blok) systému Windows, případně jiný jednoduchý textový editor (nedoporučuji Word nebo jiný komplexnější textový procesor, neboť vám mohou svojí umělou inteligencí obsah souboru zprasit).

Ještě si řekněme, jaké akce se tak nejčastěji bindují a proč:

- snaha zautomatizovat poměrně složité sekvence
klasickým příkladem je úvodní nakupování, které je relativně složité a navíc musí být provedeno co nejrychleji, abyste nedali soupeři časovou výhodu. Celý složitý nákup je pak otázkou stisknutí jedné až dvou kláves. Takže nákupy doporučuji nabindovat určitě jako první, navíc je to velice jednoduché a dobře si na tom základy bindování procvičíte.

- radiové zprávy a vlastní hlášky
základem pořádné týmovky je dorozumívání. Používání rádiových a vlastních zpráv patří k pokročilejšímu hraní CS i v případě používání hlasové komunikace. Kromě nabindování nejpoužívanějších hlášek používají třeba klany vlastní textové hlášky, kterými třeba kapitáni velí k použití určité nacvičené strategie apod.

- přiřazení příkazů, které je jinak nutné psát z konzole
tímto myslíme celou řadu příkazů, které hra dokáže používat, ale pomocí nabídek pro nastavení ovládání hry se k nim nedostanete a museli byste je ručně vypisovat do konzole, což je samozřejmě nepříjemné. Nabindováním si tedy tyto funkce zpřístupníte pouhým stiskem jedné klávesy. Jako příklad uveďme třeba možnost zapnutí/vypnutí zobrazení FPS (snímků za vteřinu).

Na konec teoretické části si ještě zmíníme jednu zajímavost (díky níž jsem nakonec rozlouskl jednu nepříjemnost, o které si řekneme později) a tou je možnost bindovat jak na stisknutí klávesy, tak na její uvolnění. Prakticky se to provádí přidáním znaménka plus (pro stisknutí) a minus (pro uvolnění) před název aliasu (ještě lépe řečeno je to tak, že název aliasu MUSÍ plusem a minusem začínat, čili nejedná se o „přidání“ těchto znaků, ale spíše o jejich „zahrnutí“ do názvu). Vypadá to pak v autoexecu takto:

alias +RELOADZOOM "sekvence pro nabití zbraně"
alias -RELOADZOOM "sekvence pro aktivaci zaměřovače"


A v configu pak přiřadíme ke klávese pouze první z obou aliasů (protože už se logicky předpokládá, že klávesa je stisknutá a tak nic jiného než její uvolnění nemůže nakonec nastat):

bind "F2" +RELOADZOOM

Ve hře to pak vypadá tak, že stisknutím klávesy F2 se provede nabití zbraně, jejím uvolněním se zapne zaměřovač (například u sniperky).

 Přecházíme do praxe
Zvětšit zdroj: tisková zpráva Nyní tedy máme za sebou teoretické základy a pokud je nám vše jasné, můžeme se pustit do praktičtějšího použití. Ukážeme si vše na příkladě mého vlastního autoexecu a configu, protože mi to přijde nejnázornější. Probereme si pouze autoexec, protože právě zde vytváření sekvencí začneme, v configu pak pouze přiřadíme klávesy, takže je zbytečné jej celý vypisovat. Následuje tedy výpis celého mého autoexecu abyste viděli, jak to celé vypadá pohromadě, následně si pak probereme jednotlivé jeho sekce a něco si o nich povíme.

autoexec.cfg

// nakupy zbrani
alias +MP5 "buy; menuselect 3; menuselect 1"
alias -MP5 "slot10; wait; wait; slot10"

alias +KALACH_M4A1 "buy; menuselect 4; menuselect 1; buy; menuselect 4; menuselect 3"
alias -KALACH_M4A1 " slot10; wait; wait; slot10"

alias +SIG552_STEYR "buy; menuselect 4; menuselect 2; buy; menuselect 4; menuselect 4"
alias -SIG552_STEYR "slot10; wait; wait; slot10"

alias +AWP "buy; menuselect 4; menuselect 6"
alias -AWP "slot10; wait; wait; slot10"

// nakup munice a vystroje
alias +SPOTREBAK "buy; menuselect 8; menuselect 2; buy; menuselect 8; menuselect 1; buy; menuselect 6; buy; menuselect 8; menuselect 4; buy; menuselect 8; menuselect 3; buyammo2; buy; menuselect 8; menuselect 6"
alias -SPOTREBAK "slot10; wait; wait; slot10"

// radiomessages ktere umi PODBot
alias +STORM "radio2; menuselect 5" //vsichni boti rushuji smerem, kam jdu ja
alias -STORM "slot10; wait; wait; slot10"

alias +FOLLOWME "radio1; menuselect 5" //boti v mem okoli me nasleduji
alias -FOLLOWME "slot10; wait; wait; slot10"

alias +TAKINGFIRE "radio1; menuselect 6" //vsichni boti mi jdou na pomoc
alias -TAKINGFIRE "slot10; wait; wait; slot10"

alias +GOGOGO "radio2; menuselect 1" //boti kteri me nasleduji prestanou; boti v okoli kteri campuji se rozejdou po mape
alias -GOGOGO "slot10; wait; wait; slot10"

alias +NEEDBACKUP "radio3; menuselect 3" //boti z okoli mi prijdou na pomoc
alias -NEEDBACKUP "slot10; wait; wait; slot10"

alias +HOLDPOS "radio1; menuselect 3" //boti, kteri me nasleduji se na chvili zastavi
alias -HOLDPOS "slot10; wait; wait; slot10"

alias +FALLBACK "radio2; menuselect2" //botum se snizi agresivita a zvysi opatrnost alias -FALLBACK "slot10; wait; wait; slot10"

// Crouch&Jump Script pro vyskoceni spolu se skrcenim
alias +cjump "+jump; +duck"
alias -cjump "-jump; -duck"

// rychle hozeni HE granatu (pri stisknuti klavesy vezme a odjisti, pri uvolneni klavesy hodi
alias +hethro "weapon_hegrenade; wait; wait; +attack"
alias -hethro " wait; -attack"

// cyklovani vsemi radiovymi menu jedinou klavesou
alias radcycle "radc1"
alias radc1 "radio1; alias radcycle radc2"
alias radc2 "radio2; alias radcycle radc3"
alias radc3 "radio3; alias radcycle radc1"

// nastaveni barvy zamerovaciho kurzoru
alias cross "adjust_crosshair"

// prepinani zobrazeni FPS
alias fps "fpson"
alias fpson "cl_showfps 1; alias fps fpsoff"
alias fpsoff "cl_showfps 0; alias fps fpson"

// prepinani zobrazeni NetGraphu
alias graph "graphon" alias graphon "net_graph 3;
alias graph graphoff" alias graphoff "net_graph 0;
alias graph graphon"


Zvětšit zdroj: tisková zpráva Ukázkový autoexec je vytvořen i tak, aby zastupoval všechny nejčastěji používané „finty“ používané ve scriptování, na jejichž principu si můžete potom zcela obdobně vytvářet aliasy vlastní. Jednotlivé sekce si nyní probereme podrobně. Znovu si je zde postupně zobrazíme a na konci vždy červeně uvedeme seznam aliasů, které je třeba v configu nabindovat klávesám (uvedené klávesy v uvozovkách slouží jako příklad a samozřejmě si místo nich zvolte to, co chcete pro danou funkci používat).

 Nakupujeme zbraně
Vrhněme se na první sekci. Ta se věnuje nákupu nejčastěji používaných zbraní. K tomu si pak rovnou uvedeme několik zajímavostí.

autoexec.cfg
// nakupy zbrani
alias +MP5 "buy; menuselect 3; menuselect 1"
alias -MP5 "slot10; wait; wait; slot10"

alias +KALACH_M4A1 "buy; menuselect 4; menuselect 1; buy; menuselect 4; menuselect 3"
alias -KALACH_M4A1 " slot10; wait; wait; slot10"

alias +SIG552_STEYR "buy; menuselect 4; menuselect 2; buy; menuselect 4; menuselect 4"
alias -SIG552_STEYR "slot10; wait; wait; slot10"

alias +AWP "buy; menuselect 4; menuselect 6"
alias -AWP "slot10; wait; wait; slot10"


config.cfg
bind "F9" "+MP5"
bind "F10" "+KALACH_M4A1"
bind "F11" "+SIG552_STEYR "
bind "F12" "+AWP"


V této sekci mám přiřazeny klávesy k nákupu mnou nejpoužívanějších zbraní, které kupuji jednak podle toho, kolik mám peněz a také v závislosti na mapě, kterou hraji. Samozřejmě bych mohl vytvořit aliasy pro přiřazení kláves k nákupu všech zbraní, ale tím bych vyprodukoval hlavně zmatek na klávesnici. Proto je vždy dobré zvážit, co je užitečné a kdy už začíná spíš chaos a nepřehánět to s bindováním kdejaké ptákoviny.

Mně tedy stačí možnost rychlého nákupu čtyř zbraní a dost. Nákupní alias obsahuje v mém případě tři příkazy: buy otevírá nákupní menu (samozřejmě musíte stát v nákupní zóně), následný příkaz menuselect je obecný příkaz pro zvolení dané položky z menu. V případě nákupu samopalu MP5 tedy otevřu nákupní menu, zvolím z něj položku číslo 3, která mi otevře další menu s nabídkou samopalů a odtud si vyberu ten, který se nachází pod volbou číslo 1. Stisknutím klávesy tedy okamžitě nakoupím samopal MP5.

Zbývá ještě naposledy otevřenou nabídku zavřít. Příkaz, který to provádí je slot 10 (dokonce je uveden dvakrát, což si hned vysvětlíme). Ten najdete v druhém řádku prvního aliasu a spolu s ním tam ještě vidíte dvakrát příkaz wait, který sám o sobě nedělá nic a používá se pouze k zpomalení celé sekvence, čili vloží do ní kratičkou pauzu. Důvod je ten, že občas program nestíhá plnit a tuto pauzu prostě potřebuje. Teoreticky by stačilo do druhého řádku aliasu (anebo přímo na konec řádku prvního) napsat pouze jedenkrát příkaz slot10, který menu zavře. To, že je použita celá sekvence příkazů, je ze zkušenosti. Program občas příkaz pro zavření menu nezaregistruje a tak je toto zavření provedeno raději dvakrát po sobě, navíc je mezi oba pokusy vložena dvojitá časová prodleva. Celá sekvence je tedy použita spíše „pro jistotu“.

Zvětšit zdroj: tisková zpráva A nyní k tomuto rozdělení nákupu na dvě části. K tomu jsem dospěl poté, co mě šíleně hryzlo, že alias, kde vložím příkaz pro zavření nabídky přímo do prvního řádku s vlastním nákupem, často (z nezjištěného důvodu) nefunguje a celý nákup se provede, ale poslední okno se ne a ne zavřít. Standardní nákupní skripty, které většinou na webu najdete vypadají jednodušeji a v mém případě by vypadaly takto:

alias MP5 "buy; menuselect 3; menuselect 1; wait; slot 10"

Tento skript vám bude asi bez problému fungovat, když si založíte hru na vlastním počítači. Když se ale připojíte k jinému serveru, ať již přes internet či LAN, zřejmě se dostaví onen problém se zavřením okna, které pak musíte provést ručně. A to je nepříjemné. Proto jsem se uchýlil k tomuto řešení a nákup jsem rozdělil: celý nákup jsem přiřadil stisknutí klávesy a finální zavření nákupního okna pak přiřadil jejímu uvolnění. A ejhle! Funguje to. Pro jistotu klávesu podržím mírně déle (občas se přeci jen stane, že se okno nezavře), ale výsledek je nesrovnatelně lepší a k nezavření menu dojde jen zcela výjimečně. Podobně mám vytvořeny i aliasy na radiové hlášky a prostě všude tam, kde nějaké menu otevírám.

 Nákup Kalašnikova nebo M4A1
Nyní přistoupíme k druhému aliasu, který slouží pro nákup Kalašnikova (pokud hraji za teroristy) a zároveň i pro nákup M4A1 (jsem-li v týmu protiteroristů). Zde využívám toho, že obě zbraně přiřadím jediné klávese proto, neboť jsou vždy ve výbavě pouze jednoho z týmů.

alias +KALACH_M4A1 "buy; menuselect 4; menuselect 1; buy; menuselect 4; menuselect 3"
alias -KALACH_M4A1 "wait; slot10"


Jak jsem psal v úvodu první části tohoto článku, příkaz, který nelze provést, se v sekvenci přeskočí a pokračuje se plněním následujícího. A na tomto je postaven právě tento alias. Vidíme, že otevírám nákupní menu, vybírám položku číslo 4 a následně položku číslo 1, která odpovídá nákupu Kalashnikova, jenž se koupí. Následně znovu otevírám nabídku pro nákup, volím položku 4 a následně položku 3, která zase odpovídá zbrani M4A1. Podle toho, v jaké roli hraju, mám k dispozici vždy jen jednu z těchto zbraní, čili buď koupím Kalašnikov a nákup M4A1 se přeskočí anebo naopak bude přeskočen nákup Kalašnikova a koupí se až M4A1. Tím jsem si pod jedinou klávesu navolil nákup dvou adekvátních zbraní. Naprosto stejným způsobem je řešeno nakoupení Siga a Steyra v případě následujícího aliasu v autoexecu výše. Nákup AWP není pak ničím zajímavý, pouze doplňuje můj oblíbený sortiment.

Zvětšit zdroj: tisková zpráva K nákupu zbraní, které v mém příkladě ještě doplňuje následující sekce autoexecu a kterou si zase podrobněji probereme, chci na tomto místě ještě upozornit, abyste nakupování věnovali ve vlastním zájmu určitou pozornost a dříve než začnete aliasy tvořit, si udělejte jasno, co a v jakém pořadí je pro vás důležité nakoupit a zvažte různé varianty hromadných nákupů. Hodně hráčů třeba nakupuje spolu se zbraní automaticky i příslušné náboje. Já jsem se od tohoto způsobu nakupování oprostil, neboť ke zbrani vždy alepsoň jeden zásobník dostanu a pak mám při nakupování vyšší priority než zrovna náhradní munici.

Já osobně tedy nakoupím nejdříve primární zbraň samostatně a veškeré další příslušenství včetně nábojů kupuji dodatečně druhou klávesou, což uvidíme za chvíli. Výhodu vidím navíc i v tom, že v případě, že v kole přežiji, stisknu už jen tuhle klávesu pro nákup všeho ostatního vybavení a jsem připraven hrát aniž bych se musel starat o to, jestli ještě nekoupit náboje. Tohle si tedy každý zvažte sám a tomu přizpůsobte svoje aliasy.

 Nákup dalšího vybavení
Nyní půjdeme dále a podíváme se, jak mám řešen nákup dalšího vybavení:

// nakup munice a vystroje
alias +SPOTREBAK "buy; menuselect 8; menuselect 2; buy; menuselect 8; menuselect 1; buy; menuselect 6; buy; menuselect 8; menuselect 4; buy; menuselect 8; menuselect 3; buyammo2; buy; menuselect 8; menuselect 6"
alias -SPOTREBAK " slot10; wait; wait; slot10"

bind "F8" "+SPOTREBAK"

Na první pohled je vidět, že i tento nákup mám rozdělený po zkušenostech na dva aliasy. Druhý pouze zavře menu, tím prvním nakupuji. Vše funguje naprosto stejně jako v případě nákupů zbraní a opět si jen hrajeme s čísly položek v nákupním menu. Důležitá je ale posloupnost, čili co nakupujeme dřív a co později. V případě, že máme dost peněz na všechno, je to samozřejmě fuk. Význam přijde v momentě, kdy zase tolik peněz není a je třeba zvažovat, co koupit raději. Čili nejprve nakupujeme to, co je pro nás důležité a pak případně teprve to méně podstatné. Posloupnost by tedy měla směřovat od důležitějších věcí k těm méně potřebným. Pohledem na můj alias +SPOTREBAK vidíte, že nejdříve ze všeho kupuji kevlarovou vestu s helmou (8-2), protože tato ochrana představuje něco jako druhý život ve hře. Pokud na to nemám peníze, nic se nekoupí a pokračujeme dál. V tom případě se snažím koupit alespoň levnější kevlarovou vestu (8-1). Následuje nákup munice pro primární zbraň (6), nákup explozívního granátu (8-4), oslepujícího granátu (8-3), jednoho zásobníku do pistole (buyammo2 - obdobně pro nákup jednoho zásobníku do primární zbraně docílíte příkazem buyammo1) a nakonec beru defuser, který se samozřejmě koupí pouze v případě, že hraji za policajty. Tím mám vše standardní pod jedinou klávesou a v pořadí, které mi vyhovuje, navíc zase nevyhazuji zbytečně peníze oknem kupováním zbytečností.

Zvětšit zdroj: tisková zpráva Nákup na začátku kola je pak otázkou stisknutí maximálně dvou kláves - jedna pro primární zbraň (pokud jsem předchozí kolo nepřežil anebo mi ta, kterou držím, nevyhovuje), druhá pro všechno ostatní (tím si doplním vše potřebné do dalšího boje, takže pokud předchozí kolo přežiju, stačí mi jediná klávesa k celému jinak složitému nákupu). Když pak tímto způsobem ve hře nakupuji, stihnu si za ty čtyři pět vteřin, které bývají zpravidla vyhrazeny nákupům kromě vybavení se do hry v klidu zkontrolovat, co všechno se mi nakoupilo a přepnout si na nůž či granát, s nímž vyběhnu vstříc nepříteli, případně si s týmem vyměníme nějaké ty pokyny.

K nákupům ještě uvedu, že pokud již vlastníte třeba explozívní granát, tak se jeho další nákup neprovede. Opačně je tomu v případě primární zbraně, kterou pokud byste si koupili tu samou, kterou držíte v ruce, tak ji odhodíte a koupí se vám znovu ta samá zbraň, na což si tedy dejte pozor. V případě kevlaru se koupí nový vždy, pokud ten, který máte už na sobě není stoprocentně v pořádku.


Tímto končíme první část článku o bindování, který má být jakýmsi teoretickým úvodem s prvními praktickými kroky. Další sekce vzorového autoexecu si ukážeme příště (tuto neděli) a řekneme si ještě další zajímavosti a finty, které se při scriptování používají.

Mickey Mouse
připravil: jd


Spoustu dalších článků na téma Counter-Strike najdete na našem serveru zde




M_M

Nejnovější články