[FORRÁS]Öntsünk tiszta vizet a pohárba

Indította Meli, 2016-09-13, 07:11:22

2016-09-13, 07:11:22 Utolsó szerkesztés: 2016-09-20, 15:06:09 Szerző: Meli


Sziasztok.

Ebben a témában szeretném tisztázni mi is az a forrás, mit hogy kell.
Mai napig rengetegen keresnek meg bizonyos dolgokkal a forrással kapcsolatban,
ebben a témában szeretnék mindent leírni amit tudni kell.
Kicsit kérdezz-felelős lett.
Kezdjük a kedvencemmel ;D

1. A forrás az egy szerverfájl?
Nem, a forrás magában nem egy szerverfájl!
A forrásfájlokból csak gamefájlt és db-t, esetleg indítót tudtok fordítani. (buildelni)
Mégis mi értelme ennek? Miért nem jó a kész 34k gamefájl?
Ha új nagyobb kaliberű dolgokat szeretnél a szerveredben, például a 4 leltár, 255+ szint, 2,1mrd+ yang
akkor kell a forrás. Ha ilyesmiket nem szeretnél nyugodtan maradhatsz 34k-nál.

2. Mit kell tenni pontosan hogy a forrásos vdi-n fordítsak és szervert tudjak futtatni?
Most írok egy részletes leírást, tulajdonképpen ez miatt nyitottam a témát.
Először is leszeded a vdi-t, és megcsinálsz mindent a leírásom alapján.
Feltételezem egy bsd-t vboxba betudtok konfigolni root/hamachira, ha már forással foglalkoztok.
Ha ez megvan akkor van egy db és egy game fájlod. Egyenlőre maradjon ott ahova fordítja.
Nos a forrásos vdi-n van alapból egy szerver, ajánlom töröld le és rakd rá a sajátodat, vagy bármilyet
ami neked szimpatikus. Két példa:
Ha VZ-t teszel rá, akkor Feco leírása szerint ki kell venned majd a notxt-t és a protokat át kell konvertálnod txt-sre.
Ha Whiteworld 40k-ra alakított VZ-jét szeded le és teszed majd fel, akkor nem kell megcsinálnod az előbbieket, Whiteworld megtette.
itt van Whiteworld témája amúgy.
A forrásos vdi-n lévő szerverfájlt ugye mondtam töröld le, így tudod, írd be a bsd konzolba:
rm -rf /var/db/mysql
rm -rf /usr/home/game

Ezzel megvolnánk. Akkor most tegyük fel a letöltött szerverfájlt.
A mysql.tar.gz-t (más a neve, pl vz-nél vzmysql.tar.gz de remélem egyértelmű nektek) töltsd fel ide:
/var/db
És telepítsd fel így:
cd /var/db
tar -xf tarneve.tar.gz

(vz-nél ugye tar -xf vzmysql.tar.gz)
Ezzel a Metin2 szerver mysql része kipipálva.
Jöhet a game része, azaz a game.tar.gz (vz-nél vzgame.tar.gz)
Töltsd fel ide /usr
Majd telepítsd fel:
cd /usr
tar -xf tarneve.tar.gz

(vz-nél ugye tar -xf vgame.tar.gz)
Most nyomjunk egy reboot-ot.
Akkor most jön Feco témája alapján a notxt kivétel,
white átalakított VZ-jével nem kell megtenned, ugorj tovább.
A lefordított 40k game és db fájlokat amihez írtam hogy egyenlőre maradjon ott ahol fordítja, na azok most kellenek.
Ugye itt vannak:
A lefordult game itt lesz: /usr/src/mainline/Srcs/Server/game
A lefordult db itt lesz: /usr/src/mainline/Srcs/Server/db

(De tudnod kell ha megcsináltad a leírásom alapján már a fordítást amit írtam ennek a tutnak az elején hogy tegyél meg ;D)
Töltsd le a game és db fájlokat gépedre, és menj ide:
/usr/game/share
Innen töröld a régi game és db fájlokat, majd töltsd fel a te általad fordítottat a helyükre amiket letöltöttél a gépedre. Ne felejtsd el magadni nekik a 777 jogot!
Nos innentől indíthatod a szerverfájlod bsd-n mostmár a te általad fordított game és db fájlal, szóval
"most már forrást használsz" :)

3. Mit tegyek amikor elindítom a szerverfájlom és hiányol libeket?
Talán egy vagy kettőt nekem is hiányolt, azokra keress rá a Google-n és ki fogja adni.
Nekem is kiadta anno, bár már nem emlékszek pontosan melyiket hiányolta.
Több mint egy éve volt amikor én csináltam ezeket.
De feltöltök egy packot, ezekből nézhetsz, valószínűleg mind benne van ami kell: Mega
/usr/lib mappába töltsd fel, ne írj felül semmit lehetőleg ha már létezik.
Szerk: masodikbela is elküldte a lib packját, ha esetleg valamit hiányzol ami az enyémbe
nincs, nézzétek meg ebben.

4. Most akkor forrást használok szerveroldalon, de klienshez az indítóra is van forrás?
Persze hogy van! Szintén én csináltam róla témát, Itt elérhető.
Pontosan csinálj meg minden lépést, és akkor sikerülni fog, ez nem olyan dolog hogy csak nagyjából letöltünk pár fájlt, el sem olvassuk a leírást és várjuk a csodát.

5. És vps-en lehet használni a 40k-s szervert?
Ez a legnagyobb tévhit az mellett hogy maga a forrás = egy szerver fájlal.
Persze hogy lehet! Annyi a dolgod hogy lemented tar.gz-be a szervered és feltöltöd a vps-re majd kicsomagolod.
tar.gz-be így lehet menteni:
cd /mappa/elérése
tar -cf valami.tar.gz mappaneve

Példa:
cd /usr
tar -cf game.tar.gz game
cd /var/db
tar -cf mysql.tar.gz mysql

Feltelepíteni meg ugye már tudtok tar.gz-t mert fentebb volt róla szó.

6. És akkor fordítani is lehet vps-en?
Nos, elvileg lehet. Viszont nem ajánlom, sokkal praktikusabb ha otthon a vdi-n fordítasz, és a gamefájlokat töltöd majd csak fel a vps-re. Miért? Mert ha vps-en fordítasz az keményen meglaggoltatja a játékosokat.
Ha ennek ellenére is vps-en akarsz fordítani, akkor a /usr/src mappát csomagold tar.gz-be majd töltsd fel a vps-re és telepítsd, és ezeket a programokat telepítsd fel a vps-re még.

7. Lehet más forrását használni?
Nos, itt-ott lehet találni már előre szerkesztett forrásfájlokat.
Én véleményem az hogy jobban jársz ha te csináld meg benne a dolgokat, mert akkor nem marad ki tudás, és mégis te tudni fogod mit hol csináltál.
Amennyiben mégis más előre szerkesztett forrását szeretnéd használni, ezeken az eléréseken írd felül a fájlokat:
/usr/src/mainline/Srcs/Server/game/src
/usr/src/mainline/Srcs/Server/db/src
/usr/src/mainline/Srcs/Server/common

És utána fordítsd le a megszokott módon.

8. Vannak leírások a forrás szerkesztésére?
Mint a tenger! ;) Ajánlom Metin2Devet illetve Epvp-t a keresgélésre, de a Google is kidob néha hasznos fórumokat.
De nekem is van egy témám pár módosításról.

9. Lehet 40k-s diffeket betenni a saját gamefájlomba?
Nem. Az offsetek mások. Viszont szinte minden olyan dologra amire van pl 34k-ra diff, arra van forrásos leírás is.
Szóval nem fog gondot jelenteni hogy nem lehet diffelni a saját gamefájlod előre megírt sima 40k-s difekkel, amúgyis minden fordítás után újra kellene akkor diffelni ha lehetne.

10. Milyen klienst érdemes használni 40k forrássos gamefájlhoz?
Alapvetően két kliens elérhető mindenki számára.
Jelenlegi HU (GF) Kliens - Disco
Test Client Für 40250 - Metin2Dev
Nos, én az utóbbit használom, mivel amikor még én kezdtem 40k-val, akkor még nem csinálta meg Disco a kliensét.
Mégis melyik a jobb? Erre nem tudok válaszolni. Neked kell dönteni. Pár bugg biztos hogy van mindkettőben.
Talán mégis Disco kliensét ajánlom mert magyar, bár a magyarosítás a test-nél is csak annyiból áll hogy a locale-ban a nyelvfájlokat kicseréljük magyarra.

11. Novaline, Mainline, dev stb melyik a jó, melyik mi?
Nos, alapvetően így kell használni:
Szerveroldalon: Mainline (Sima)
Kliensoldalon: Novaline.
Ezek passzolnak egymáshoz, ezek működnek egymással.
A többi branch pedig más, gondolom teszt verzókat tartalmaz mint például
a dev_wolf_branch szerintem a wolfmant tesztelték, bár amennyire tudom
ebben kb csak a biri-karakterválasztás van megírva a farkasra.
A mainline_released meg több mint valószínű a metin2.sg használta.
A lényeg hogy te szerveroldalon a mainline-t használd, kliensoldalon pedig a novaline-t
a témáim szerint. A többivel ne foglalkozz.

12. Nem tetszenek a txt-s protok, lehet a régi mysql-est használni?
Terméeszetesen lehet. Bár én szerintem a txt-s proto praktikusabb, de ízlések
és pofonok. Nos, ha mysql-ből akarod hogy olvassa, akkor Itt találsz leírást.

13. Mi ez a test file fordítás után a gamefájl melett?
Valóban fordításnál létrehoz egy test file-t is, ez is egy gamefájl tulajdonképpen, csak
máshogy van fordítva. Ne ezt használjátok hanem a másikat, a game_r40250_32-t. (Vagy amire átneveztétek)
A makefile-ból ki lehet törölni hogy ne hozza létre a test file-t, mert amúgy sem kell nektek.
Szóval így kell kivenni a makefile-ból:
Nyisd le a spoilert!
[spoiler]
A game makefile itt van értelemszerűen:
/usr/src/mainline/Srcs/Server/game/src/ és itt makefile simán
Ezt töröljétek:
$(TEST_TARGET): $(TESTCPP) $(CPPOBJS) $(COBJS) $(TESTOBJ)
@echo linking $(TEST_TARGET)
@$(CC) $(CFLAGS) $(LIBDIR) $(COBJS) $(CPPOBJS) $(TESTOBJ) $(LIBS) -o ../test


TESTOBJ = $(OBJDIR)/test.o
TESTCPP = test.cpp
TEST_TARGET = $(BINDIR)/test


Ezt írjátok át:
default: $(TARGET) $(TEST_TARGET)
Erre:
default: $(TARGET)

Ezt pedig:
makedepend -f Depend $(INCDIR) -I/usr/include/c++/3.3 -I/usr/include/c++/4.2 -p$(OBJDIR)/ $(CPPFILE) $(CFILE) $(MAINCPP) $(TESTCPP) 2> /dev/null > Depend
Erre:
makedepend -f Depend $(INCDIR) -I/usr/include/c++/3.3 -I/usr/include/c++/4.2 -p$(OBJDIR)/ $(CPPFILE) $(CFILE) $(MAINCPP) 2> /dev/null > Depend

De ha valaki strippelve szereti a gamefájlát, azt is bele lehet írni hogy auto-n strippelje.
Ez mögé:
@echo linking $(TARGET)....
@$(CC) $(CFLAGS) $(LIBDIR) $(COBJS) $(CPPOBJS) $(MAINOBJ) $(LIBS) -o $(TARGET)


Írd ezt:
@echo strip $(TARGET)...
@strip $(TARGET)


A db makefile-ban is be lehet állítani így a strippelést
Ez után:
@echo linking ...
@$(CC) $(CFLAGS) $(LIBDIR) $(OBJS) $(LIBS) -o $(TARGET)
@touch version.cpp

Írd ezt:
@echo strip $(TARGET)...
@strip $(TARGET)


De ha már kitértem a strip-re is, gondolom akik nem tudják mi az azok szeretnék tudni :D
Nagyon röviden: Összetömöríti a gamefájlt.
Akit pontosan érdekel annak találtam egy jó kis magyarázatot:

IdézIf you compile an executable with gcc's -g flag, it contains debugging information. That means for each instruction there is information which line of the source code generated it, the name of the variables in the source code is retained and can be associated to the matching memory at runtime etc. Strip can remove this debugging information and other data included in the executable which is not necessary for execution in order to reduce the size of the executable.
A strippelés nem okoz semmi lényeges változást, csak kisebb lesz a gamefájlod.
Persze egyáltalán nem kötelező strippeltetni a gamefájlt, félre értés ne essék.
[/spoiler]

14. Hogyan kell felfrissíteni a pythont 2.2-ről 2.7-re?
Először is töltsd le ezt: Katt (Feltöltötte Disco)
És tedd ide mappástul: include_stuff/ és client/ScriptLib/ mappa.
Ha szeretnéd törölheted a régi 2.2-es mappákat amik eddig ott voltak, azt többé nem használja.
UserInterface.cpp-ben keresd meg ezt:
#pragma comment( lib, "python22.lib" )
írd át erre:
#pragma comment( lib, "python27.lib" )
Aztán a ScriptLib/StdAfx.h-ban minden Python-2.2 kifejezést írj át Python-2.7-re!
Utánna a ScriptLib/PythonUtils.cpp-ben az include-ok után írd ezt:
#define PyLong_AsLong PyLong_AsLongLong
#define Pylong_AsUnsignedLong PyLong_AsUnsignedLongLong

Saját észrevétel:
Utánna ScriptLib/PythonLauncher.cpp és ScriptLib/PythonLauncher.h fájlokban is írd át a Python-2.2 kifejezést Python-2.7-re,
egyszer-egyszer lesz bennük.
Ezek után a PythonMarshal.h-ban is írd át a Python-2.2 kifejezést Python-2.7-re.
Rendben, forrásban készen vagy. Ajánlom hogy rebuild-ozz sima build helyett. build->rebuild solution
Kliens főkönyvátradból töröld a python22-dll-t mert az már fölösleges illetve a lib mappát, és tegyél be egy 2.7-es dll-t és lib mappát.
Ezt megszerezheted pl Sanchez klienséből, vagy masodikbela csatolt egyet: Katt
Köszönet Masodikbela-nak és Disco-nak, illetve leírás egy részéért Lefloyd-nak epvp-ről.

15. És végül egy jó tanács mindenkinek:
Csináljatok mentést minden nagyobb módosításotok előtt legalább a .cpp és .h fájlaitokról, mert ha elrontjátok nehéz lesz javítani, és nem árt néha egy teljes kőrű mentés legalább a game/src db/src és common mappáról sem.

Remélem most már minden tiszta a kezdőknek is a forrásról.
A témát elképzelhető hogy még kiegészítem ha valami fontos az eszembe jut.

By,
TheSLZ

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”