Sursa interior

Introducere în programmirovnie pentru SDK-ul Source

Poate că ești un începător și nu au nici o idee despre ce programare în C ++ și ceea ce este în spatele acestor toate numele: „compilație“, „de clasă“, „interfață“, și așa mai departe, în acest caz, trebuie să dobândească abilități de bază de programare în C ++, după care poate îndeplini pe deplin mod de sarcină programator.






Sursa SDK oferă codul sursă pentru modificările motorului de joc.
Acest lucru înseamnă că aveți unele cunoștințe și instrumente pot, dacă aveți o sursă pe care le face funcționalitatea necesară în ea.
Care este motorul?
De exemplu, există un fel de joc pe care se execută pe computer.
Jocul este format din cod de program și fișiere de date.
Fișierele de date nu este greu de înțeles ce este - o parte din care a construit lumea jocului, grafică, hărți, modele, și așa mai departe ..
Un cod - este executat de faptul că procesorul, aproximativ vorbind, am constatat că acestea pot fi afișate pe ecran, mișcare și sunet.
Această parte a programului și denumit „motor“.
Motorul este format din mai multe sisteme, fiecare responsabil pentru sarcina proprie (redare grafica, lucrul cu fișiere, comenzi de prelucrare, crearea de rețele, organizarea de scenă joc, obiecte de joc ...)

2. Surse de SDK sursă. Descărcați întotdeauna posibil folosind Steam.

3. Microsoft Visual Studio 7.1. Lucrările la codul de produs în acest mediu pentru a lucra cu ambele Visual C ++ 7.1 de la compania Microsoft.
Poate că există și alte modalități de a compila proiect Visual C ++, dar că este o chestiune separată.

După ce ați creat un nou mod (Jocuri Play -> Instrumente / Source SDK-ul -> Crearea unui Mod -> Modificare Half-Life 2) src deschis / fișier Game_sdk.sln
fișier SLN - o soluție - soluție este un astfel de termen în Visual Studio. De ce nu-l numesc un proiect în Visual Studio 6?
Soluția (.sln) este format din mai multe proiecte (.vcproj), care pot genera o dată sau în mod individual.
Acest fișier soluție constă în două proiecte:
client - clientul
hl - server de
De ce sunt două dintre ele, și dacă ne place, nu există nici un multiplayer în joc?
În orice caz, dacă un singur motor multiplayer jucător va consta din două părți. Acest lucru se explică, astfel încât lumea mecanism de joc de simulare este împărțit în două părți reciproc independente.
Ce server și client, ceea ce este diferența lor?
Serverul efectuează o simulare a realității virtuale în timp real, permițându-vă să sincronizați diferite obiecte de joc;
serverul se alăture clienții care sunt, de asemenea, aceste obiecte, una sau mai multe, în general, în engine-ul Source poate fi de până la 255 de clienți.
În cazul unui joc de rețea prin intermediul rețelei interent sau locală, executați un server partajat care sincronizează toți clienții, ci doar un server local și activitatea de client într-un singur joc.
Clientul este responsabil pentru ce? El efectuează o intrare de control din informațiile de jucător și de afișare, inclusiv primite de la server. Adică implementează interfața cu player-ul.
De obicei, tot ceea ce nu este posibil (nu este nevoie) în nici un mod de afișare nu este efectuată pe client pentru jucător.
client Voobscheto simulează aproximativ la fel ca server, dar nu poate depăși mai multă putere decât serverul. Prin urmare, este important doar ca clientul pentru serverul poate transmite starea de jucător, și poate face setările de server diferite specificate de dezvoltatori.







Așa că am ajuns la concluzia că motorul are două părți diferite care sunt executate în paralel și independente una de cealaltă.
Acum, se pare că în codul sursă.
Există o bucată de cod care este responsabil de partea de client, serverul face parte din codul face parte din codul pe care le comunică.

Compilarea acest cod avem două modulul DLL (client și server).

Codul server este în src / directorul DLL-uri.
Acesta oferă o ierarhie de clase de servere, în care o clasă este baza pentru clasele de copii generate. La proiectarea unei clase toate comune proprietățile mai multor filiale în clasa părinte.
clase de servere, de obicei, au nume, cum ar fi CImya (CBaseEntity. CBasePlayer).
Serverul este responsabil pentru ceea ce se întâmplă în joc, indiferent de modul în care ar trebui să fie afișat pe ecranul player-ului, logica a ceea ce se întâmplă foarte important pentru el.
Ca urmare, proiectul src / dlls / hl_sdk.vcproj de asamblare se transformă fișierul server.dll.

Codul de client este în directorul src / cl_dll.
Acesta conține o ierarhie de clase client. clase client au de obicei nume precum C_Imya (C_BaseEntity. C_BasePlayer). Toate clasele de obiecte de joc care participă la simularea lumii au clasa corespunzătoare de pe partea de server.
Aici este codul upravlyuschy modele de redare, în calitate de voce, procesare GUI-interfață, ieșirea de mesaje text, procesarea de intrare tastatura și mouse-ul, și așa mai departe. D.
Ca rezultat, asamblarea src proiectului / cl_dll / client_sdk.vcproj transformă fișierul client.dll.
Dacă plasați fișierele DLL de pe client și server în directorul bin al dvs. mod, motorul va fi capabil să le conecteze la start.

Codul comun este în directorul src / publice și src / game_shared.

În directorul linux_sdk conține fișiere pentru a crea un fișier special pentru această platformă de compilare - Makefile, daca zankomy cu Unix, ați ghicit deja că este necesar să se realizeze un port server Linux.

Noi îngropa în detalii

Build fișiere sunt Build comando -> Build Solution.
Fereastra de ieșire (ieșire), putem vedea rezultatul procesului de construcție:

------ Build a început: Proiect: client, configurare: Release HL2 Win32 ------

Prima compilatie poate dura destul de mult timp.
În cazul în care ansamblul a avut loc cu succes, la sfârșitul producției va fi raportată:

Build: 2 a reușit, 0 eșuat, 0 omit

Generată ca urmare a fișierele sunt copiate automat în directorul bin al dvs. mod (sub setările personalizate construi Pasul).

Acum, dacă rulați jocul cu modificările noastre atunci când utilizați un obiecte (ridicare completă a butonului subiect USE), ar trebui să vedem mesajul «Bună ziua MOD!».
Modul Run, puteți utiliza fișierul run_mod.bat în directorul mod.

Luați în considerare mai multe opțiuni de linie de comandă pentru a rula propriile mods.
Iată un exemplu: HL2.exe -steam -dev -condebug -developer -ent_messages_draw 1 2 -game NAME_OF_MOD HL2.exe -steam - este de a rula jocul (nu este nevoie să se schimbe)
-dev (sau -console) - includ Shell
-condebug - înregistrează mesajele de jurnal din fișierul console.log consola
-1 sau dezvoltator 2 - nivelul de depanare
-ent_messages_draw 1 - otobrzhat rapoarte de activitate de comunicare în curs de desfășurare
-joc NAME_OF_MOD - unele evenimente rula (specificați numele directorului în moda directorul Half-life2) DESCOPERI ...

Amintiți-vă una dintre cele mai valoroase foarte caracteristicile disponibile în Visual Studio - este un cod de căutare fișiere.
Găsiți în fișiere - caută fișiere sau Ctrl + Shift + F tastatură.
Cu căutare, puteți urma orice răspuns pentru a examina codul sursă și pentru a găsi cel mai important loc pentru tine de a modifica.

Primul pas este să ia în considerare lucrurile de bază de care aveți nevoie pentru a începe cu unitatea familiarizării a motorului.
Serverul și clientul oferă o varietate de interfețe de software, care oferă o listă foarte mare de posibilități diferite.
De exemplu,
IPhysics - manipulare fizica;
Imaterial - sistem material ogranizatsii;
ICommandLine - lucra cu consola de comando;
IBaseFileSystem - citire / scriere de fișiere;
IEngineSound - ieșire audio;
IInput - tastatura de intrare sau mouse-ul;
și așa mai departe ...
Această listă este destul de lungă și de examinare detaliată necesită mai mult de acest tutorial.

Pentru un anumit loc de cod pentru a face ieșire informațiile de verificare pe ecran, cum ar fi un monitor pentru a executa codul - utilizați funcțiile auxiliare:
UTIL_ClientPrintAll. ClientPrint sau Msg

La un studiu mai aprofundat al modului în care motorul se va întâlni o mulțime de detalii care sunt importante pentru a înțelege:
server și client entitate și interacțiunea sistemului, linii de masă, sistem de mesaje, evenimente, manipulare eveniment, sistem de caching, și mai mult.
Toate acestea sunt acoperite în următorul tutorial.