Szerző Téma: [Leírás] DM alapozás I.  (Megtekintve 2971 alkalommal)

[Leírás] DM alapozás I.
« Dátum: 2013. január 26. - 16:44:42 »
0 Show voters
Sziasztok
Mostanság jobban érdekel MTA scriptek fejlesztése, mint a samp-s scripteké, ezért is írom ezt a leírást, amely egy DM mód alapját szolgálja.
Jelenleg csak pár parancs ami elteleportál, fegyvert ad, skint cserél, de ki lesz bõvítve pontrendszerrel és egyéb dolgokkal.
Igyekszem leírni az összes lua-ban szereplõ dologról, hogy mi micsoda, mire használjuk majd és egyebek. Ha valaki sorról sorra követi akkor nem lesz benne hiba
Minden MTA resource kliens és szerver scriptekbõl áll, plusz a meta.xml (illetve egyéb fájlok, képek, hangok).
Nos kezdésként hozzunk létre a \"MTA_mappa/server/mods/deathmatch/resources/\" mappába egy \"DMNEV\" mappát (bármi lehet, de ne legyen benne szóköz és hosszú magánhangzó).
Nos ha ez meg van nyissunk egy jegyzettömböt, de jobb ha NotePad++-t használunk, átláthatóbb lesz az egész script írása.
NotePad++ letöltése
\"downloadLogo.png\"
Ha ezzel megvagyunk és meg van nyitva elõttünk egy szerkesztõ program akkor mentsük el az elsõ scriptünket az elõbb létrehozott mappánkba \"script_s.lua\" néven. (ez lesz a server scriptünk)
(Megyjegyzés: lua fájlokba \"--\" jellel írunk kommenteket)
Hozzunk létre pár lokális változót az értékek tárolására
 

local dmID --Komment példa
local spawnX, spawnY, spawnZ, interior = 502.3310,-70.6820,998.7570,11
local DMSzovegek = {\"Üdvözöllek a szerveren\",\"Spawn hely: DM1\",\"Spawn hely: DM2\",\"Rossz DM helyszín (1 vagy 2)\",\"Jelenleg DM zónában vagy\",\"Nem vagy DM zónában\"}

 
dmID -- DM helyeket jelöli, ebben a scriptben az ID 0 a várakozó, az ID 1 a DM 1 map, az ID 2 a DM 2 map
local spawnX, spawnY, spawnZ, interior -- Csatlakozáskor milyen pozíción spawnoljunk, plusz az interior ID mivel én a Groove kocsmát választottam Kezdõ spawnnak
local DMSzovegek -- Különféle szövegek kiírása az egyes csatlakozásokkor illetve hiba esetén
Készítsük egy a csatlakozáskor elõhívott funkciót, ezt is az elõbbi fájlba írjuk.
 

function Csatlakozas()
spawnPlayer(source, spawnX, spawnY, spawnZ, 0,50)
setElementInterior (source,interior)
fadeCamera(source,true)
setCameraTarget(source, source)
outputChatBox(DMSzovegek[1], source)
dmID = 0
end
addEventHandler(\"onPlayerJoin\", getRootElement(), Csatlakozas)

 
function Csatlakozas() -- funkció elnevezése
spawnPlayer(source, spawnX, spawnY, spawnZ, 0,50) -- Lespawnoljuk a játékost a fentebb megadott pozícióra, a source a játékost jelöli, 0 a játékos fordulási szöge, míg az 50 a játékos Skin ID-e
setElementInterior (source,interior) --Játékost a megadott interiorba rakjuk, a source továbbra is a játékost jelöli
Megyjegyzés: Interiort csak akkor szükséges ha valamilyen speciális helyre akarjuk rakni a játosunkat. Pl.:Interior ID-k
fadeCamera(source,true) --megjelenítjük a játékosnak a képernyõt.
setCameraTarget(source, source) --Játékos kameráját a játékosra állítjuk
outputChatBox(DMSzovegek[1], source) --Kiíratjuk a játékosnak a fentebb megadott táblából az elsõ szöveget
dmID = 0 --Beállítjuk, hogy a játékos melyik DM-be legyen, a 0 a várakozó
end --Lezárjuk a funkciót
addEventHandler(\"onPlayerJoin\", getRootElement(), Csatlakozas)--Elõhívjuk a \"Csatalkozas\" funkciót mikor a játékos csatlakozik \"onPlayerJoin\"
Most hogy a csatlakozással készen vagyunk, írjunk meg egy parancsot ami különféle DM \"zónákba\" spawnol különféle fegyverrel és skinnel.
 

function DMteleport(thePlayer,command,DM_ID)
if dmID == 0 then
local DM_IDs = tonumber(DM_ID)
if DM_IDs == 1 then
   dmID = 1
   takeAllWeapons (thePlayer)
   setElementPosition(thePlayer,-1394.20,987.62,1023.96)
   setElementInterior (thePlayer,15)
   setElementModel(thePlayer,287)
   giveWeapon(thePlayer,31, 500)
   giveWeapon(thePlayer,8, 1)
   outputChatBox(DMSzovegek[2], thePlayer)
elseif DM_IDs == 2 then
   dmID = 2
   takeAllWeapons (thePlayer)
   setElementPosition(thePlayer,-1394.20,987.62,1023.96)
   setElementInterior (thePlayer,15)
   setElementModel(thePlayer,286)
   giveWeapon(thePlayer,30, 500)
   giveWeapon(thePlayer,8, 1)
   outputChatBox(DMSzovegek[3], thePlayer)
else
   outputChatBox(DMSzovegek[4], thePlayer)
end
else
outputChatBox(DMSzovegek[5], thePlayer)
end
end
addCommandHandler(\"dm\",DMteleport)

 
function DMteleport(thePlayer,command,DM_ID) --Parancs funkció létrehozása, magát a parancsot késõbb adjuk meg. DMteleport a funkció neve, thePlayer a játékos aki beírja a parancsot, command lesz a parancs neve, ezt lentebb adjuk meg, hogy mit kell beírni, DM_ID hogy melyik DM \"zónába\" spawnoljon
if dmID == 0 then --Ha a játékos a várakozóban van (ID 0)
local DM_IDs = tonumber(DM_ID) --Beírt DM ID-t számmá alakítjuk
if DM_IDs == 1 then --Ha a beírt szám (DM ID-nk) 1
dmID = 1 --Beállítjuk, hogy a játékos az DM ID 1 \"zónában\" van
takeAllWeapons (thePlayer) --Játékos fegyvereit elvesszük
setElementPosition(thePlayer,-1394.20,987.62,1023.96) --Átrakjuk a játékost a DM zónába
setElementInterior (thePlayer,15) --Játékos Interior ID-jét átalakítjuk, mivel csak így spawnol be az általam kiválaszott helyre
setElementModel(thePlayer,287) --Játékos skin-ét változtassuk meg
giveWeapon(thePlayer,31, 500) --Játékosnak adunk egy M4-t 500tölténnyel
giveWeapon(thePlayer,8, 1) --Játékosnak adunk egy Katana-t
outputChatBox(DMSzovegek[2], thePlayer) --kiírjuk a játékosnak a 2. megadott szöveget (\"Spawn hely: DM1\")
elseif DM_IDs == 2 then --Ha a játékos a DM ID 2-t írta be
Továbbiak megegyezek a fentebb írtakkal, csak más paramétereket adunk meg, pl a dmID = 2, a fegyver (ID 30) egy AK47-lesz, más skinnel és más helyen spawnol.
Ha nem jó DM ID-t ad meg:
else --Ha a játékos nem megfelelõ ID-t ad meg akkor...
outputChatBox(DMSzovegek[4], thePlayer) --...kiírjuk neki ezt a szöveget
end --Lezárjuk az if állításunkat (if DM_IDs == 1 then)
Ha nem a megfelelõ DM \"zónában\" van
else --Ha a játékos nem megfelelõ DM zónában van akkor...[/color]
outputChatBox(DMSzovegek[5], thePlayer) --...kiírjuk neki ezt a szöveget
end --Lezárjuk az if állításunkat (if dmID == 0 then)
Majd lezárjuk a funkciónkat (end)
addCommandHandler(\"dm\",DMteleport) --DMteleport funkciónk parancshoz kötése. A \"dm\" helyére írjuk be a parancsot, amit játékban kell majd alkalmazni. Példa a játékban: /dm 1 -> Elteleportál az 1. zónába
Megírjuk egy zónából való kilépést, amely a várakozóba rak vissza
 
function ExitDM(thePlayer,command)
if dmID ~= 0 then
dmID = 0
takeAllWeapons(thePlayer)
setElementModel(thePlayer,50)
setElementPosition(thePlayer,spawnX, spawnY, spawnZ)
setElementInterior (thePlayer,11)
else
outputChatBox(DMSzovegek[6], thePlayer)
end
end
addCommandHandler(\"q\",ExitDM)

 
function ExitDM(thePlayer,command) --Parancs funkció létrehozása
if dmID ~= 0 then --Ha a DM ID-nk nem egyezik a Várakozóéval (0)
dmID = 0 --Beállítjuk a DM ID-t a Várakozó ID-re
takeAllWeapons(thePlayer) --Fegyverek elvétele
setElementModel(thePlayer,50) --Játékos alap skin visszaállítása
setElementPosition(thePlayer,spawnX, spawnY, spawnZ) --Játékost a Várakozóba spawnoljuk
setElementInterior (thePlayer,11) Játékos Interior ID-ét beírjuk
addCommandHandler(\"q\",ExitDM) --A DM zónákból való kilépési parancsunk a \"/q\" lesz
Halál utáni cselekményre írjunk egy funkciót ( Ha meghalunk a várakozóba kerüljünk fegyver nélkül stb)
 

function Halal()
dmID = 0
takeAllWeapons(source)
spawnPlayer(source,spawnX,spawnY,spawnZ, 0,50)
setElementInterior(source,11)
end
addEventHandler(\"onPlayerWasted\", root, Halal)

 
function Halal() --Funkció létrehozása és elnevezése
dmID = 0 --Várakozó ID beállítása
takeAllWeapons(source) --Fegyverek elvétele a játékostól
spawnPlayer(source,spawnX,spawnY,spawnZ, 0,50) --Játékos spawnolása az várakozóba
setElementInterior(source,11) --Játékos interiorának módosítása
addEventHandler(\"onPlayerWasted\", root, Halal) --Ha a játékosunk meghal (\"onPlayerWasted\") akkor elõhívja a \"Halal\" funkciót amit az elõbb írtunk meg
Teljes szerver scriptünk:
 
local dmID
local spawnX, spawnY, spawnZ, interior =     502.3310,-70.6820,998.7570,11
local DMSzovegek = {\"Üdvözöllek a szerveren\",\"Spawn hely: DM1\",\"Spawn hely: DM2\",\"Rossz DM helyszín (1 vagy 2)\",\"Jelenleg DM zónában vagy\",\"Nem vagy DM zónában\"}
 
function Csatlakozas()
spawnPlayer(source, spawnX, spawnY, spawnZ, 0,50)
setElementInterior (source,interior)
fadeCamera(source,true)
setCameraTarget(source, source)
outputChatBox(DMSzovegek[1], source)
dmID = 0
end
addEventHandler(\"onPlayerJoin\", getRootElement(), Csatlakozas)
function DMteleport(thePlayer,command,DM_ID)
if dmID == 0 then
local DM_IDs = tonumber(DM_ID)
if DM_IDs == 1 then
   dmID = 1
   takeAllWeapons (thePlayer)
   setElementPosition(thePlayer,-1394.20,987.62,1023.96)
   setElementInterior (thePlayer,15)
   setElementModel(thePlayer,287)
   giveWeapon(thePlayer,31, 500)
   giveWeapon(thePlayer,8, 1)
   outputChatBox(DMSzovegek[2], thePlayer)
elseif DM_IDs == 2 then
   dmID = 2
   takeAllWeapons (thePlayer)
   setElementPosition(thePlayer,-1394.20,987.62,1023.96)
   setElementInterior (thePlayer,15)
   setElementModel(thePlayer,286)
   giveWeapon(thePlayer,30, 500)
   giveWeapon(thePlayer,8, 1)
   outputChatBox(DMSzovegek[3], thePlayer)
else
   outputChatBox(DMSzovegek[4], thePlayer)
end
else
outputChatBox(DMSzovegek[5], thePlayer)
end
end
addCommandHandler(\"dm\",DMteleport)
function ExitDM(thePlayer,command)
if dmID ~= 0 then
dmID = 0
takeAllWeapons(thePlayer)
setElementModel(thePlayer,50)
setElementPosition(thePlayer,spawnX, spawnY, spawnZ)
setElementInterior (thePlayer,11)
else
outputChatBox(DMSzovegek[6], thePlayer)
end
end
addCommandHandler(\"q\",ExitDM)
function Halal()
dmID = 0
takeAllWeapons(source)
spawnPlayer(source,spawnX,spawnY,spawnZ, 0,50)
setElementInterior(source,11)
end
addEventHandler(\"onPlayerWasted\", root, Halal)

 
--Készítsük el a meta.xml fájlt. Megnyitun kegy új üres szöveget és elmentjük a \"DMNEV\" mappánkba meta.xml-nek, ezt mindig jegyzettömbbel kell majd módosítani.
Következõket írjuk bele:
 

<meta>
<info author=\"neved\" type=\"gamemode\" name=\"Tutorial DM\"/>
<script src=\"script_s.lua\" type=\"server\"></script>
</meta>

 


Következõ leírás: DM alapozás II.

http://sampforum.hu/index.php?topic=37551.0
 

Tartalma:
-Kliens script létrehozása (skinek, hangok cseréje)
Képek (kliens script elkészítésével és a fájlok hozzáadásával)
 

\"mta_tut_1.jpg\"  \"mta_tut_2.jpg\"  \"mta_tut_3.jpg\"
« Utoljára szerkesztve: 2013. január 26. - 17:50:06 írta mr_rich »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal