Creste prin script - creaza moduri - modificari - s

În scripturi, există o singură funcție care este responsabilă pentru obiectele reproducătoare:
alife (): crea (secțiune, poziție, nivelvertex, gamevertex)

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:
db.actor:game_vertex ()

Deci, spre, de exemplu, zaspavnit bolt sub picioarele actorului, vom scrie:
alife (): create ("bolt", db.actor (): position (), 1, db.actor: game_vertex ()

De ce 1, nu nivelul_vertex? Verificat - nici o diferență specială, ce level_vertex, cu toate că, în unele cazuri, este necesar să se prescrie vertex este valabil, și că subiectul poate pur și simplu nu zaspavnen în cazul în care de așteptat. Dar, în cea mai mare parte, totul merge bine cu unitatea. (Ignorarea level_vertex poate duce la căderea prin obiecte / caractere fabricate în sol.) Dar game_vertex este totul - indică nivelul la care se depune icrele obiect, deci trebuie să fie specificate. Teoretic, puteți pur și simplu găsi pentru fiecare nivel de un game_vertex'u și să le utilizeze în script-uri. De fapt, game_vertex prezintă un fragment dintr-o hartă utilizată (întreaga hartă este împărțită în bucăți cu numerotare continuă pentru toate nivelurile și selectează game_vertex corespunzătoare), respectiv, abuzul de cherevato.

În plus - există un alt parametru - ID-ul obiectului, dacă specificați ID-ul NPC sau actorului - atunci obiectul va fi dat în inventar.

Exemplu (aruncarea artefactului Medusa în inventarul actorului):
alife (): creați ( "af_medusa", db.actor (): poziția (), 1, db.actor:game_vertex (), db.actor:id ())

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:
local obj
local a = vector () - Setați tipul de variabilă
dir local = db.actor:direction ()

a.x = -243.61 - coordonata X
a.y = -19.52 - înălțimea Y
a.z = -127.17 - coordonata Z

obj = alife (): create ("bar_dolg_respawn_3", a, 13193,8,65535)
alife (): create_ammo ("ammo_9x18_fmj",
obj.position,
obj.m_level_vertex_id,
obj.m_game_vertex_id,
obj.id,
20) - număr de cartușe

Doar un set minim - coordonate, ID, secțiune și din acesta (obiectul serverului), de obicei, este necesar doar ID-ul, deoarece prin ID puteți obține acest obiect de server cel mai mult:
(alife (): obiect (id))

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:
dacă obj: id () == saved_id atunci.

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, care nu se pot 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 parcela originală a jocului, sarcina va fi eliberată după trecerea căutarea cu stick-ul rapid, astfel cum au fost, în același timp, există un zombie cu gangsteri și rapid. 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:
rs_stats pe sau rs_stats 1

Astfel, vom include rezultatele pe ecran. Apoi, introduceți o altă comandă:
demo_record 1

Ș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):
funcția main_menu: main_cheat_f3 ()






-- Vom trimite un mesaj despre locația noastră
textul local
vid local
gvid locale
local a = vector () - tip variabil
textul local

Să adăugăm al cincilea model.

Pentru aceasta, creați o secțiune la sfârșitul fișierului:
[zombie_ghost]: zombie_strong

Aceasta înseamnă că al cincilea zombie moștenește toți parametrii zombie_strong, vom adăuga doar o reprezentare vizuală.

Putem scrie mai departe:
$ spawn = "monștrii \ zombie \ zombie_ghost"
vizuale = monștri \ zombi \ zombi_1_ghost

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:
local zombie_types =

Apoi, scriem funcția:
funcția spawn_zombies (poziție, totală)
local zombie_index - tip zombie din matricea zombie_types
local new_pos, x_offset, z_offset - declara variabile
pentru zombie_index = 1, totală do - loop bucla de câte ori
stabilește variabila totală
x_offset = math.random (5) - aleatoriu (aleatoriu) x de la 1 la 5
z_offset = math.random (5) - aleatoriu (aleatoriu) z de la 1 la 5
new_pos = position - transferă coordonatele funcției
new_pos.x = new_pos.x + x_offset - adăugați la specificat
coordonează x aleatoriu x de mai sus
new_pos.z = new_pos.z + z_offset - adăugați la specificat
z coordonate, aleatoriu de mai sus x
-- Mai jos, de fapt, funcția de spawn a zombie de tip aleatoriu
zombie_types [math.random (5)] legat de coordonatele noastre
alife (): crea (zombie_types [math.random (5)], new_pos, db.actor: level_vertex_id (), db.actor:game_vertex_id ())
capăt
capăt

Și ultimul:
funcția zomby_story_1 (actor, npc)
-- zece zombi în fabrică (Cordon)
local spawn_point = vector (): set (115, -6, -16) - aici specificăm coordonatele,
aleasă de noi pentru spawn, când camera "zboară" :)
spawn_zombies (spawn_point, 10) - apelând de fapt la funcția anterioară
cu transferul de coordonate și numărul de obiecte
capăt

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:
zombie_weak = 1, zombie_normal = 2, zombie_str 3

În linia locală sect_alias:
zombie_weak = "zombie_weak", zombie_normal = "zombie_normal", zombie_str "zombie_strong"

Și mai jos în linia monster_classes:
[clsid.zombie_s] = "zombie"

În funcția getNpcType (npc) adăugăm construcția:
elseif npc: character_community () == atunci "zombie"
comunitate = "zombie"

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.
Expression. eroare fatală
Funcția. CInifile :: r_string
Fișier. D: \ xray-svn \ xrCore \ Xr_ini.cpp
Linie. 351
Descriere:
Argumentele. Nu găsiți pictograma variabilă în [zombie_weak]

Să revenim la fișierul m_zombie.ltx iar în secțiunea [m_zombie_e]: monster_base introduceți parametrul
pictograma = ui_npc_monster_kontroler

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:

escape_trader_talk_info_999
7770
9991
9992
9993
9994
9995
9996


escape_trader_talk_info_99922
9996
9995


escape_trader_talk_info_3121
9996
9995


escape_trader_talk_info_3131
9996
9995


escape_trader_talk_info_41
9996
9995


escape_trader_talk_info_7779
9996
9995


escape_trader_talk_info_7777
esc_zombie.zombie_story_1
9996
9995

escape_trader_talk_info_51
9996
9995


Și, de asemenea, fișierul asociat stable_dialogs_escape.xml. La începutul fișierului, scrieți următoarele:

Nu au fost incidente?


Da, știți. Se pare că totul este liniștit aici. Deși, aici, îmi amintesc! Mi-au spus
una din zilele astea, că la fabrica, bine, unde bandiții se țin tot timpul, au văzut ceva
oameni sau fantome. Nu știu ce sunt în stare de ebrietate - i-am spus acelor alarmanți, spun ei,
au o gustare! Heh, la naiba, betivi.


Deci, eu sunt pe cineva de stomp din fabrică - în același timp și uita-te la acestea
„Oamenii-fantome.“


Da, într-un fel nu am vrut să merg așa.


Păi, vezi-te, fii atent.


Da. Du-te, ia niște aer. Atunci veți veni, veți spune, că acolo și cum.


Aici este interzis pasajul, stalker.


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 :)
Fișiere de eșantion finalizate
Spawn Lib

Tema - pentru a reveni la jocul de tip 6 de zombie civile :)

A continua ...
Practica (partea 2)

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:
[zombie_old]: zombie_normal
$ spawn = "monștrii \ zombie \ zombie_old"
vizuale = monștri \ zombi \ zombi_3

în fișierul esc_zombie.script schimbăm matricea în prima linie:
zombie_types locale = "zombie_old", "zombie_ghost">

În funcția spawn_zombies, schimbăm linia spawn:
alife (): crea (zombie_types [math.random (6)], new_pos,
db.actor:level_vertex_id (), db.actor:game_vertex_id ())

în funcția zombie_story_1 schimbăm numărul de obiecte cu un multiplu de 6 (opțional):
spawn_zombies (spawn_point, 12)

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:


O fantomă zombie este diferită de o zombie normală doar de faptul că
Influența Burnout-ului creierului a distrus complet nu numai structura personalității, ci și
corpul, astfel încât fantoma zombie este oarecum mai tenace în comparație cu un zombie convențional.


Impactul Brainworm-ului distruge complet structura personalității,
lăsând doar coaja corporală. \ n \ n După rătăcirea în jurul zonei puțin, corpurile fără minte
începe să se transforme în zombi reali. Din reflexele pe care le au numai cele mai primitive,
armele și echipamentul vor deveni în curând fără valoare. Ca rezultat, zombi nu devin mai mult decât
altele, ca jumătăți de traume lente, dintre care există doar doi stimuli eficienți:
hrană și somn. Zombii sunt absolut indiferenți în alegerea alimentelor și băuturilor, astfel încât corpurile lor literalmente
impregnate cu radiații și toxine. De regulă, aceste creaturi se rătăcesc în jurul zonei sau,
ca cadavre, situate în interiorul clădirilor abandonate. Totuși, doar un zombie se va simți aproape
prezența unei persoane vii, el încearcă imediat să atace. Stalkeri cu experiență
încercați să ocoliți aceste cochilii devastate devastatoare.


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
pictograma = ui_npc_monster_kontroler

Pentru:
pictograma = ui_npc_monster_zombie

În secțiunea [zombie_ghost], adăugați linia:
pictograma = ui_npc_monster_zombieg

Salvați modificările. Asta e tot.

Iată fișierele de eșantion. Mult noroc și vă mulțumesc pentru atenția dvs. :)
Spawn of the NPC

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.

Activați fișierele:
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:

esc_dark_stalker_01 - aici este noua clasă nouă.
dark_stalker stalker_terrain

actorii \ dark_stalker \ dark_stalker_1
characters_voice \ human_01 \ monolith \
-1
0

[spawn] \ n
wpn_dark_colt1911 \ n
ammo_11.43x23_hydro \ n
# include "gameplay \ character_items.xml" \ n
#include "gameplay \ character_drugs.xml" \ n
#include "gameplay \ character_food.xml"


Vom scrie codul după câteva

Acum mergeți la npc_profile.xml și mergeți 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)







Trimiteți-le prietenilor: