Map berakás - teljes leírás

Indította Alissa, 2012-07-11, 18:37:12

2012-07-11, 18:37:12 Utolsó szerkesztés: 2012-07-12, 20:23:30 Szerző: Alissa
Kedves Fórumozók,

Úgy érzem, itt az ideje egy ilyen témának is, mert bár van, aki leírta előttem, mégis sokaknak nem túl világos, így leírom az én módszerem is, amit ha jól csinálsz, 100%-ig hibátlanul fog működni a berakott map (kivéve, ha a kliensoldal bugos, arra felelősséget nem vállalok).

Hát kezdjük is el. Ha a maphez volt letöltésben szerveroldal, azt törölheted is, ugyanis teljesen felesleges, csinálunk sajátot (speciális mapeknél a server_attr-t mondjuk célszerű megtartani - amiken van szerver oldali pvp védelem, vagy pecázható rész, más okokból azt se célszerű).

Mit is látunk, ha először belenézünk a map kliensoldali mappájába?
Valami ehhez hasonlót:

A mappák, amiket látsz (lehet 1, lehet több), mind mind 1-1 ún. areát jelölnek, ezekből áll össze a map. Egy area 256x256-os méretű, ezt jobb tudni.

Mit csináljunk, ha hiányzik a mapproperty.txt vagy setting.txt?
Ha a mapproperty.txt hiányzik, akkor elég egyszerű dolgunk van.
Csak létre kell hozni a fájlt, és beleírni ezt:

ScriptType MapProperty

MapType "Outdoor"



Ha a setting.txt hiányzik, egy fokkal nehezebb dolgunk van, viszont ezt majdnem minden esetben szerkesztenünk kell, úgyhogy ideje megbarátkozni vele.
Nos, én 2 részre szoktam tagolni a fájlt, az egyik része ami kell nekünk, a másik pedig, ami nem. A szerkesztésnél mindig ügyelj, hogy a tagokat TAB használatával válaszd el egymástól!

Az első fele általában így néz ki:


ScriptType MapSetting

CellScale 200
HeightScale 0.500000

ViewRadius 128

Őszintén szólva csak sejtéseim vannak, hogy ezek közül mi micsoda, de mivel majdnem az összes map ezt a beállítást használja, így ha ez a setting.txt első fele, mindenképp jó lesz.

A második fele az, amit szerkeszthetünk, itt egy példa rá:


MapSize 4 4
BasePosition 0 0
TextureSet textureset\metin2_n_desert1.txt
Environment milgyo.msenv

A MapSize a map mérete.
Ha nem tudjuk a map méretét, akkor először számoljuk meg az area mappákat. Ugye az elsők 000-val kezdődnek, utána 001, majd 002 és így tovább... Ezeket az egyforma kezdetű mappákat tekintsük az egyszerűség kedvéért egy-egy csoportnak, és számoljuk meg először, hány csoport van. Ez lesz a mapünk méretének első száma. Utána számoljuk meg, hogy egy csoporton belül hány mappa található, és az lesz a mapünk méretének második száma.
Hogy érthetőbb legyek, egy 4x5-ös map pl. így fog kinézni:
1. csoport:
000000
000001
000002
000003
000004
(5db)
2. csoport:
001000
001001
001002
001003
001004
(5db)
3. csoport:
002000
002001
002002
002003
002004
(5db)
4. csoport:
003000
003001
003002
003003
003004
(5db)
4 csoport x 5 mappa --> MapSize: 4 5

A következő a BasePosition. Kliensoldalon igazából teljesen mindegy, mit írunk oda, legcélszerűbb 0 0-t, ugyanis ez nem fogja érdekelni a szervert. Persze beírhatjuk oda a map warp koordinátáját is, de nem célszerű elsietni, a későbbiekben még lesz erről szó, hogyan számítsuk ki a warp koordinátát.

A TextureSet résznél adhatjuk meg, hogy melyik textureset fájlt olvassa be a map, és annak a beállításai lesznek rá érvényesek. Ezeket a fájlokat a textureset.eix/epk fájlban találhatjuk meg.

Az Environment résznél a környezet textúrát adjuk meg (ez leginkább az égre vonatkozik), ha a map fekete-fehéren villódzik, az azt jelenti, hogy ez van elrontva. Az ehhez szükséges msenv fájlokat az etc.eix/epk-ban találhatjuk meg, a ymir work/environment mappában. Itt nem szükséges elérési út, ha nem tér el az msenv fájl helye az environment mappától.

Ezzel a kliensoldali mappával készen is lennénk.

Hogyan csomagoljam be a fájlokat?
A mapet rakhatod a season1-be, season2-be, patchbe vagy akár külön outdoor fájlokba is. Arra kell figyelni, hogy ha nem a seasonök közül választasz, akkor mindenképp a gyökérkönyvtárba tedd (tehát ne ymir work és egyéb mappákba). A becsomagoláshoz bele kell írnod az összes fájl elérési útját a becsomagoló XML-be is, ezt főleg nagyobb mapeknél abszolút nem célszerű kézzel, inkább használj XML kreátort, pl. itt találsz egyet. Mindenképp ellenőrizd le az elkészült XML-t, ugyanis a kreátorok könnyen hibáznak, de a Notepad++ csere funkciójának segítségével ezeket nagyon egyszerű kijavítani.

Ha nem season1/2-be raktam, akkor hogyan írjam be a kliens indexébe?
Ha Outdoor fájlba raktad, akkor csak ennyit írj az Index végére (pack mappában találhatod):

mapodneve/
outdoorneve

Például:

map_b_fielddungeon/
outdoorfielddungeon1

Kiterjesztés nem kell.

Ha patch fájlba raktad, akkor azt két * jel közé kell illesztened (célszerű közvetlen a PACK felirat alatt):

*
patchneve
*


Az atlasinfoba mit írjak?
A root.eix/epk-ban találhatod az atlasinfo.txt-t, ez a fájl navigál téged a szerver által küldött koordináta szerint a megfelelő mapre (pont ezért nem szükséges a kliensoldali settingsbe koordinátát írni, mert az atlasinfo elvégzi ezt a feladatot helyette).
Az atlasinfo formátuma a következő:
kliensoldali map neve[tab]X koordináta[tab]Y koordináta[tab]X mapméret[tab]Y mapméret
Példa:
metin2_map_spiderdungeon 51200 486400 3 3
Ha season1/2-be tetted a mapet, akkor azt meg kell jelölni a map neve előtt, pl. így:
season1/metin2_map_spiderdungeon_02 665600 435200 4 4
A koordinátát még mindig nem kell elsietni, később még lesz róla szó.

Hogyan csinálom meg a szerveroldalt?
Egyszerűbben, mint gondolnád. De mielőtt nekiesnél, beszéljünk kicsit a koordinátákról.
Képzelj például egy hatalmas területet, amire mi papírlapokat terítünk ki. Ezek a papírlapok most a server_attr-ek lesznek. Ha valahol összeérnek, abból rengeteg hiba lehet, például leállnak a CH-k, az adott map ledobálja a játékosokat, és még sorolhatnám, ezért ki kell számolnunk, hogy melyik területre helyezzük el a mapünket.
Ha mindenáron biztosra akarsz menni, mivel van bőven helyünk (nem tudom, hol lehet a max, de szerintem bírja 2,1 milliárdig, mindenesetre nem célszerű ezzel kísérletezni), ezért keresd meg a legnagyobb koordinátát, és számold ki, hol ér véget az adott map. Minden koordinátának a végére írni kell még 2db 0-t, így azokat ne számold bele. Minden area 256 magas és 256 széles, tehát:
Ha egy mapnak ez a koordinátája: 1000000 100000, akkor annak valós koordinátája: 1000 1000
Ha a mérete 4x5, akkor 1000+4x256 és 1000+5x256 (meg még utána írjuk a 2-2 0-t), tehát 202400 228000 koordinátáknál lesz vége, eggyel arrébb már kezdődhet is a következő map. Nem feltétlen kell mindkettő után, akkor pont átlósan helyezed el őket, így a következőt helyezheted akár a 202500 100000 koordinátára is.
Ezt a koordinátát fogod írni az atlasinfoba is.

Az első lépés, hozz létre egy mappát a /home/game/share/locale/germany/map mappában (régi szerverfájloknál /usr/rain/channel/share_data/locale/hongkong/map), célszerű a map nevével, de akár mást is kitalálhatsz neki, és másold bele a kliensoldali settings.txt-t, de írd át a nevét Settings.txt-re (nagy kezdőbetű!). Itt már a BasePosition részhez oda kell írni a koordinátát tabokkal elválasztva.
A map méretének megfelelő server_attr-t tedd bele simán server_attr néven (ebben a letöltésben megtalálod az összeset 1x1-től 8x8-ig).
Ezután hozz létre egy Town.txt-t, amiben szóközzel választod el a kis koordinátáit annak a helynek, ahol "városban éledhetsz újra". Ez az a koordináta, amit ingame leolvashatsz a térképről. Kezdetben célszerű annyit írni bele, hogy 1 1, ezt majd később még tudod korrigálni.
A szerveroldali mappával készen is vagyunk. A tévhit ellenére nem kell semmilyen jogot sem adni a fájloknak, de ha nagyon akarsz, akkor adhatsz, nem fog történni semmi.

Még mindig a map mappában vagyunk, keresd meg az index nevű fájlt. Menj a legvégére, és keress egy olyan számot (indexet), amit még egy map sem használ. Írd a végére az indexet, majd szóköz és a map szerveroldali mappájának a neve. Pl:
220 metin2_map_devilscatacomb
Fontos, hogy a végén legyen egy üres sor, különben nem fogja tudni a szerver beolvasni az indexet (tehát nyomj egy entert).

Most keresd meg a channelek mappáit (/home/game/channel1, /home/game/channel2, /home/game/game99, vagy ha raktál még hozzá, akkor azok is...), és döntsd el, hol akarod, hogy legyen a maped. Ha a normál channelekre rakod a mapet, akkor minden CH-n szerepel a map, és lehet rajta játszani CH1-en, CH2-n, stb, de ha game99-re rakod, akkor minden CH-ról oda fog warpolni, magyarul olyan, mintha egyszerre szerepelne az összesen, majd onnét CH1-re lehet kiwarpolni.
Fontos, hogy NE szerepeljen egyszerre a normál channeleken is, és game99-en is!
Nos, ha sikerült dönteni, akkor keresd meg a kiválasztott mappákban a CONFIG fájlokat, és keresd meg a MapAllow részt. Itt alapból 32 map allow van engedélyezve, úgyhogy számold meg, és ha több van, akkor sajnos ki kell szedned egyet, vagy másik CH-ra kell tenned a mapedet. Ha van elég hely, akkor csak simán, szóközzel elválasztva írd a végére a maped indexét.

Ha kész vagy, restartolj. Ha visszacsomagoltad az összes kliensoldali fájlt is, és ismét elindult a szervered, akkor már oda is warpolhatsz az új mapedre.


Gyakori hibák, kérdések

Hogyan hozhatok létre /go parancsos warp kódot a mapemnek?
Keresd meg a /home/game/share/locale/germany mappában a settings.lua fájlt.
Adj hozzá egy új sort:
add_goto_info("név", 0, mapindex, X koordináta, Y koordináta)
Például:
add_goto_info("dc", 0, 220, 3147, 12102)
Ezzel a /go dc paranccsal a 220-as mapindexen lévő 3147 12102-es koordinátára fog vinni a szerver.
A settings.lua szerkesztése után szintén restart szükséges.

Nem indul el a szerverem új map berakása után, vagy csak ugrik egyet a kép bejelentkezéskor, és visszadob
Amelyik CH-k mappáiba beraktad a mapet, nyisd meg a syserrt, és olvasd ki belőle a hibaüzenetet.
Leggyakoribb hibák:
  • kifelejtetted a Town.txt-t, vagy hibásan írtad meg
  • nem megfelelő a server_attr mérete
  • hibásan írtad meg a Settings.txt-t
  • nincs üres sor az index fájl végén
  • Tisztán kiolvasható a syserrből, ha ezen hibák valamelyike áll fenn. Ha semmi maphez kapcsolódót nem találsz, akkor valószínűleg nem azt rontottad el.

    Nem warpol oda a mapre, hiába írom be a jó koordinátát
    Először is győződj meg, hogy nem-e írtad hozzá véletlen a 2db 0-t, ugyanis ezt warpoláskor nem kell odaírni.
    Ha csak annyit ír ki, hogy "you warp to koordináta", akkor valószínűleg vagy kifelejtetted a CONFIG/index fájlokból, vagy mégis elfogyott a megengedett map allowok száma, vagy egyszerűen csak hibás az indexszám, amin elhelyezted, ebben az esetben próbálj meg egy másik indexet.
    Ellenőrizd le az atlasinfot is, hogy ott is jó koordinátát adtál-e meg a mapnek.

    Amikor warpolok a mapre, bezáródik a kliens
    Ebben az esetben vagy rossz mappára irányítottad magad az atlasinfon keresztül, vagy rosszul csomagoltad be a mapedet. Célszerű többször leellenőrizni a csomagoló XML-t, ha egy / jel rossz helyre kerül, már az is okozhat bonyodalmakat.

    Nem indul el a szerver, a Vbox/Putty pedig egy "assertion failed"-del kezdődő szöveget ír ki
    Ha ez a probléma, akkor a map mappájában hagyhattál egy npc.txt/boss.txt/regen.txt/stone.txt-t, ami hibásan van megírva. Ha nem ott, akkor máshol (drop fájlok is okozhatják).


    Remélem, sokatok hasznára válik majd a téma, és kevesebbet kell kérdeznetek is!:)

    Üdvözlettel: Alissa