În scripturi, există o singură funcție care este responsabilă pentru obiectele reproducătoare:
Prima opțiune - configurații de secțiune care descrie obiectul, de exemplu, „Bolt“, „med_kit“ - este o secțiune simplă, obiecte simple și există obiecte care se deplasează în online / offline, este NPC-uri, monștri și așa mai departe, de exemplu mil_killer_respawn_2 - icrelor grupurile de lunetist ucigași.
Cu numărul de referință cred că nu este necesar să se explice, există doar caveat - această înălțime Y și Z. nu este posibil să se precizeze poziția unui astfel de vector de construcție (): set (x, y, z), unde x, y și z - coordonate la punctul unde obiectul este dat naștere.
Mai dificilă, pentru că eu nu o pot formula chiar eu.
Să începem de la simplu la complex. Există multe obiecte pe fiecare nivel, toate obiectele constând din poligoane, fiecare poligon are vârfuri de vârf.
Aceștia sunt cei care ar trebui să sublinieze de ce, nu înțeleg în mod special, cel mai probabil pentru poziționarea exactă a obiectului. De exemplu, puteți obține vârful cel mai apropiat de actor - db.actor:level_vertex ()
Apoi vine un parametru mult mai interesant game_vertex, este aproape la fel ca level_vertex, dar (!) Sunt valori globale! Dacă nivelul_vertex este considerat pentru un nivel, atunci game_vertex este pentru întregul joc și este necesar să se indice care hartă să creeze un obiect (nu am găsit o explicație mai inteligibilă).
În consecință, pentru a conecta ceva pe altă hartă, este suficient să specificați game_vertex în al patrulea parametru De exemplu:
Deci, spre, de exemplu, zaspavnit bolt sub picioarele actorului, vom scrie:
De ce 1, nu nivelul_vertex? Se verifică - diferența nu este specială, ceea ce nivel_vertex, deși în unele cazuri este necesar să se înregistreze un vertex valid și apoi obiectul poate doar să nu adoarmă unde a fost planificat. Dar, în cea mai mare parte, totul merge bine cu unitatea. (Ignorarea nivelului_vertex poate duce la eșecul elementelor produse / caracterelor sub pământ.) Dar game_vertex rezolvă totul - indică nivelul la care ar trebui să se rotească obiectul, deci trebuie indicat. Teoretic, puteți găsi pur și simplu pentru fiecare nivel un game_vertex'u și le puteți folosi în scripturi. De fapt, game_vertex arată ce fragment al hărții este folosit (întreaga hartă este împărțită în bucăți cu numerotare de la capăt la cap pentru toate nivelurile și game_vertex alege cea corectă), respectiv utilizarea incorectă a strâmbelor.
În plus, există un alt parametru - ID-ul obiectului, dacă specificați ID-ul NPC-ului sau actorului - atunci obiectul va fi dat în inventar.
Exemplu (aruncarea artefactului Medusa în inventarul actorului):
Funcția spawn returnează obiectul serverului, adică nici NPC-ul, nici monstrul, nici altceva.
Obiectul server permite unui NPC nou creat sau o memorie cache să se împacheteze cu diferite reguli / artefacte. De exemplu, aici vom crea un debitor în fața lui Sidorovici și vom împinge un cartuș în el:
Doar un set minim - coordonate, ID, secțiune și din acesta (obiectul serverului), de obicei, este necesar doar ID, deoarece prin ID puteți obține acest obiect de server cel mai mult:
Poate fi folosit pentru a pune o etichetă, de exemplu, dar eu o folosesc personal în alte scopuri - spawn de obiecte complexe, în mod specific - NPC.
De exemplu, trebuie să rezolvați următoarea problemă - trebuie să creați un mercenar, să schimbați gruparea și să schimbați inventarul acestuia, bine, în încărcătură - faceți un prieten pentru jucător.
La un anumit punct, obiectul aruncat devine online, moment în care callback-ul este numit net_spawn.
Ce facem? Verificați ID-ul obiectului online cu ID-ul salvat!
Dacă se potrivesc, de exemplu:
Cel mai important este faptul că ID-ul obiectului de server - acest parametru, iar ID-ul obiectului on-line se obține utilizând funcția. Acest lucru este important, și apoi puteți arde.
Deci, ne-am prins pe ucigașul nostru prin ID.
Mai mult, totul este foarte simplu - numim comenzile pentru gauss spawn și cartușele în inventarul NPC (vezi mai sus), schimbăm gruparea printr-o funcție specială și o facem prietenă.
De ce asemenea dificultăți? În mod simplu offline, NPC nu există, există doar o mențiune indirectă a acesteia și, în plus, toate aceste funcții funcționează cu un obiect de tip "NPC", nu cu obiecte server.
Practica (partea 1)
1. Pentru a evita repetarea în descrierea unei noi quest, un document de studiu privind crearea de quest-uri Fr3nzy - cele mai bune articole pe acest subiect, eu nu am văzut :) Pur și simplu, totul lega împreună și să învețe să ruleze obiecte din scenariu.
De ce este preferabil să cânți un scenariu, și nu prin același xrSpawner? Programul xrSpawner, cu toate avantajele sale, are un dezavantaj, și anume - face să pătrundă prin fișierul all.spawn, ceea ce duce la:
- Incapacitatea de a combina două moduri, cum ar fi utilizatorii de reproducători
- Necesități de fiecare dată pentru a începe un nou joc
Odată cu apariția scenariului, situația este diferită: în majoritatea covârșitoare a cazurilor, jocurile salvate anterior vor funcționa, ceea ce nu se poate bucura :)
Deci, să definim căutarea.
Sarcina: după ce am vorbit cu zombii spam din Sidorovici în fabrica din prima locație. Pentru a nu deteriora complotul inițial al jocului, sarcina va fi emisă după trecerea quest-ului cu o unitate flash Shustrogo, deoarece va fi un zombie în același timp cu bandiții și Shustra. Cred că rezultatul este predeterminat :)
Implementare: Voi încerca să descriu toate acțiunile în cele mai multe detalii, literalmente în pași. Mai întâi de toate, rulați jocul :)
În consola, tastați:
Astfel, vom include rezultatele pe ecran. Apoi, introduceți o altă comandă:
Și vom "zbura" în fabrică. Trebuie să alegem un loc pentru spaiul de obiecte și acest mod este cel mai potrivit pentru implementarea conceputului. Am pus aparatul de fotografiat în punctul unde se presupune că arde și scrie coordonatele - am 115, -6, -16.
Pentru a ieși din modul demo_record, apăsați Esc, în consolă scrieți rs_stats oprit sau rs_stats 0 (eliminați ieșirea de informații).
Un alt mod de a obține aceleași informații este să veniți la locul potrivit și să rulați un script care să dea toate coordonatele necesare. Folosesc următorul scenariu (îl numesc într-un mod binecunoscut, prin main_menu):
Din joc, du-te la folderul cu un joc și de a crea directorul gamedata (presupunând că „sculpta“ „evenimente“ lor „curat“ jocul fără mods instalat, și au resurse de joc neambalate într-un dosar, să zicem, sursa gamedata).
În dosarul gamedata creează config folderul, iar în el - fișierele de folder. Copiați fișierul m_zombie.ltx din dosarul original și deschideți-l pentru editare.
Există 5 modele de zombi civili în fișierele de joc:
Ne intoarcem la jocul tuturor :)
Există deja secțiuni:
Ultimele două tipuri utilizează același model zombi_trup.ogf, hmm. tulburare, am corectat. Ultima secțiune arată astfel:
Să adăugăm al cincilea model.
Pentru aceasta, creați o secțiune la sfârșitul fișierului:
Aceasta înseamnă că al cincilea zombie moștenește toți parametrii zombie_strong, vom adăuga doar o reprezentare vizuală.
Asta e tot. Salvați modificările și închideți fișierul.
2. Noi scriem scenariul spawn. În folderul gamedata creează un script de folder nou, în care creăm un document text nou și îl sunăm esc_zombie.script.
Deci, deschideți fișierul gol pentru editare, prima linie în care declarăm o variabilă în care sunt stocate zombiile noastre:
Apoi, scriem funcția:
Asta e tot. Salvați și închideți fișierul.
Pentru ca jocul să nu se prăbușească după ce am adăugat un nou tip de monștri, trebuie să fie adăugați la fișierul xr_statistic.script. Deci, copiați acest fișier din folderul script-urilor de joc în dosarul nostru în fișierul esc_zombie.script și deschideți-l pentru editare.
Adăugați un killCountProps local la monștri:
În linia locală sect_alias:
Și mai jos în linia monster_classes:
În funcția getNpcType (npc) adăugăm construcția:
Salvați modificările și închideți fișierul.
Totul va funcționa pentru un bang, până când vom încerca să căutăm zombie moartă. De îndată ce vom face, jocul se va prăbuși cu așa ceva.
Așa - jocul nu știe ce icoană să ne arate pentru un zombie. Meniurile icoane sunt stocate în fișierul ui_npc_monster.dds. Există două opțiuni:
Să revenim la fișierul m_zombie.ltx iar în secțiunea [m_zombie_e]: monster_base introduceți parametrul
Asta e tot. Nu vor fi zboruri.
3. Subiectul acestui articol nu oferă o descriere detaliată a modului de a face un nou dialog. La începutul articolului am menționat o sursă în care puteți găsi informații complete despre crearea de dialoguri și pot da un exemplu de articol despre crearea dialogurilor din BAC9-FLCL.
Trebuie doar să testați capacitatea de lucru a scenariului spawn, așadar vă voi oferi dialogul actual modificat din dialogs_escape.xml:
Și, de asemenea, fișierul asociat stable_dialogs_escape.xml. La începutul fișierului, scrieți următoarele:
Asta e tot. Puteți rula jocul, du-te la Cordon, după ce ați vorbit cu Sidorovici, în funcție de soluția aleasă etichetat, fugim la fabrică și ... urmăriți-vă singuri :)
Tema - pentru a reveni la jocul de tip 6 de zombie civile :)
Practica (partea 2)
4. Astăzi, vom termina cu zombies în plin - adăuga descrieri în enciclopedie, adăugați icoane, și se va ocupa cu „temele“ :) Cred că am studiat cu atenție acest articol, veți putea recupera prin intermediul funcțiilor de script de orice caracter care nu sunt incluse în eliberarea finală a jocului. Dacă care au timp si dorinta, ei pot scrie chiar ceva de genul „Noaptea morților vii“ :) - o serie de quest-uri care implică propria sa poveste. Deci, "homework" - adăugăm la joc al șaselea zombie.
Fișierul model înainte de editare
Fișier model după editare
5. Acum, să alocăm noului nostru zombie tuturor fișierelor pe care le-am creat mai devreme. În dosarul m_zombie.ltx la sfârșitul secțiunii, adăugați secțiunea:
în fișierul esc_zombie.script schimbăm matricea în prima linie:
În funcția spawn_zombies, schimbăm linia spawn:
în funcția zombie_story_1 schimbăm numărul de obiecte cu un multiplu de 6 (opțional):
Asta e tot. Salvați și închideți.
6. Copiați dosarul gamedata \ config \ gameplay \ file encyclopedia_mutants.xml, adăugați o descriere a zombiilor în enciclopedie:
Și în fișierul string_table_enc_mutants.xml asociat cu acesta în dosarul gamedata \ config \ text \ rus \ add:
Copiați același fișier stable_statistic_caption.xml și schimbați-l la 3 rânduri:
Salvați și închideți.
7. Și în final - adăugați icoane. Spune-i ia imediat fișier gata deja zombi care conține și alte „monștri recuperate“ (Fr3nzy datorită) pictograme. Deci, copiați doar ui_npc_monster.dds fișier din arhiva într-un dosar gamedata \ texturi \ ui \, și fișierul ui_npc_monster.xml - dosar gamedata \ config \ ui \. Dacă doriți să faceți propriul dvs. - citiți lecția despre schimbarea texturilor.
Pe scurt, acesta descrie fișierul ui_npc_monster.xml în ea coordonatele icoanelor aranjate în fișierul ui_npc_monster.dds pentru fiecare tip de monștri în joc.
Accidentul final. Deschideți fișierul m_zombie.ltx, iar în prima secțiune înlocuiți linia
În secțiunea [zombie_ghost], adăugați linia:
Salvați modificările. Asta e tot.
Această parte a articolului este scrisă de Arhet și este creată pe exemplul modului în care în modulul SRP grupurile NPC "Sin" au fost create.
- gamedata \ config \ gameplay \ character_desc_escape.xml
- gamedata \ config \ gameplay \ npc_profile.ltx
- gamedata \ config \ creaturi \ spawn_sections.ltx
Să începem cu character_desc_escape.xml. Descrierea a ceea ce înseamnă fiecare linie nu voi scrie, pentru că totul sa făcut înainte de mine.
Aici creăm un personaj nou:
Vom scrie codul după câteva
Acum mergeți la npc_profile.xml și mergeți acolo:
Acum trebuie să facem spawn_sections.ltx. Scriptul va "lua NPC" din acest fișier. Noi scriem acolo:
Acum luăm orice scenariu NPC, vom conduce în numele secțiunii de la spawn_sections.ltx și woo-a-la.
uita curent că acest NPC va fi atribuit Init Logic a uitat să menționeze despre (xxx - Loka) (de exemplu, în cazul în care merg prostește nu știu):
xxx gulag.script (acțiuni NPS! Unde pot: unde pot atribui statutul de camper, wolfer etc.)
xxx gulag.ltx (un dublu logic, adică duplicarea pe scurt a acțiunilor NPS)