Giriş yap
En iyi yollayıcılar
Hello EMO | ||||
EMO | ||||
eMoStyLe | ||||
BesimBICER | ||||
GameKinG | ||||
Crysis | ||||
~>!.DεvιLρяιεsт.!<~ | ||||
MeTaL | ||||
TrueCrime | ||||
djhayal3t |
Istatistikler
Toplam 203 kayıtlı kullanıcımız varSon kaydolan kullanıcımız: crayzboy76
Kullanıcılarımız toplam 1186 mesaj attılar bunda 862 konu
Arama
Sosyal yer imi
Sosyal bookmarking sitesinde Emo, Emo nedir, Emo resimleri, Emo Kıyafetleri, Emo Sözleri, Emo Oyunları, EmoTurkey, Emo Nickler, Emo Avatarları, Punk, Punk Resimleri, Punk Avatarları, Rock, Rock Resimleri, Rock Avatarları, Msn Nickleri, Msn Avatarları, Müzik adresi saklayın ve paylaşın
Sosyal bookmarking sitesinde EMO Style ForumPro - Hos Geldiniz adresi saklayın ve paylaşın
Kimler hatta?
Toplam 3 kullanıcı online :: 0 Kayıtlı, 0 Gizli ve 3 Misafir Yok
Sitede bugüne kadar en çok 217 kişi C.tesi Tem. 29, 2017 1:46 am tarihinde online oldu.
En son konular
Reklam
[MTA SA {LUA}] - Server erstellen bis zum Programmierung
1 sayfadaki 1 sayfası
[MTA SA {LUA}] - Server erstellen bis zum Programmierung
[QUOTE=|R.o.x|;11286788][SIZE="4"]Inhaltsverzeichnis[/SIZE]
Hey Leute.
[SIZE="6"]1 Einleitung[/SIZE]
Ersteinmal eine kleine Einleitung :
MTA San Andreas ist wie bekanntlich "ein" Multiplayertool für GTA San Andreas.
Es gibt auch sa-mp, jedoch empfehle ich dies nicht, da es ehrlichgesagt wirklich sehr einfach zu hacken ist. Das scripten dort ist meiner Meinung nach einfacher, jedoch wie gesagt auch einfacher zu entschlüsseln. MTA San Andreas unterstützt keine cleo-scripts und ist durch eigene Codes einfacher zu benutzen.
Viele haben Probleme damit MTA SA zu benutzen, deswegen erstelle ich ein Tutorial, das ich nach und nach immer erweitern werde
--------------------------------------------------------------
[SIZE="6"]2 Den Server erstellen[/SIZE]
Zu aller erst gehen wir in den MTA SA Ordner. Dort sollten wir einen Ordner namens "server" finden. Diesen öffnen wir und gehen von dort aus nach mods->deathmatch. Die allgemeinen Einstellungen werden in der mtaserver.conf gespeichert. Diese öffnen wir mit einem Editor nach Wahl. Ich benutze den Editor "Ultra-Edit". Ihr könnt natürlich auch den Windows Editor als auch NotePad++ benutzen.
Der Inhalt dieser Datei sollte verändert werden. Über jeder Eigenschaft steht in grün (bei Textverarbeitungsprogrammen mit Syntaxhighlighting), was das bedeutet.
Die wichtigsten Einstellungen sind : und ganz unten . Servername erklärt sich von selbst, bei resource stehen die "RESOURCEN"(kommen später dazu) welche automatisch gestartet werden.
Wenn alles wie gewünscht bearbeitet wurde, starten wir im server-Ordner die Mta-Server.exe.
Manchmal kann das etwas länger dauern.
So sollte es am Ende aussehen. Jetzt startet ihr MTA SA, und geht bei "QUICK CONNECT" -> 127.0.0.1 ein.
Wie ihr seht funktioniert alles und ihr seit im Gamemode "Freeroam"
--------------------------------------------------------------
[SIZE="6"]3 Eigener Gamemode[/SIZE]
[SIZE="4"]3.1 Programme[/SIZE]
Also das scripting ist eine wichtige Grundlage in MTA SA. MTA SA benutzt die Scriptsprache "LUA". Ihr solltet für "LUA" einen geeigneten Editor haben, ich persönlich verwende einen sehr empfohlenen Editor ohne wirklichen Namen^^.
Downloads - luaforwindows - Installation of Lua for the Windows operating systems including many lua libraries. - Google Project Hosting
Dies downloadet ihr und startet dann "SciTe". Noch müsst ihr dort nichts machen. Wir gehen also in den server-Ordner -> mods -> deathmatch -> resources und erstellen dort einen Ordner mit dem Namen von eurem Gamemode. WICHTIG : NIEMALS LEERZEICHEN ODER SONDERZEICHEN!
[SIZE="4"]3.2 meta.xml[/SIZE]
Wenn ihr dies gemacht habt, müsst ihr eine Datei namens "meta.xml" erstellen.
Diese öffnet ihr mit irgendeinem Editor und schreibt dies als Inhalt :
[SIZE="4"]3.3 Das SCRIPTEN[/SIZE]
[SIZE="3"]3.3.(1) Auskommentieren[/SIZE]
Wie in jeder Sprache kann man auch in LUA Zeilen und Texte auskommentieren.
Die beiden Commands zum auskommentieren sind wirklich simple. Es gibt nur :
[SIZE="3"]3.4 Willkommen[/SIZE]
Wenn ihr soweit seit, erstellen wir ersteinmal ein sehr einfaches Script!
Dazu gehen wir erstmal wieder in unsere meta.xml. Da ergänzen wir zwischen den ""-Tags :
Dazu schreiben wir diesen Code rein :
[php]function willkommen() -- erstellt eine Funktion namens "willkommen"
local x = 0 -- erstellt die Variable "x" und teilt ihr den Wert 0 zu
local y = 0 -- das gleiche nur "y"
local z = 0 -- "z"
local name = getPlayerName(source) -- speichert den Namen des Spielers in eine Variable
spawnPlayer(source, x, y, z) -- positioniert (spawnt) den Spieler zu der Position (bei uns 0,0,0)
fadeCamera(source, true) -- die Kamera wird angezeigt
setCameraTarget(source, source) -- sie wird dem Spieler zugeteilt
outputChatBox(''..name..' ist dem Server beigetreten!') -- gibt eine Nachricht aus (mit einer Variable)
end
addEventHandler("onPlayerJoin", getRootElement(), willkommen) -- teilt der Funktion ein Event zu (wann es starten soll), bei uns wenn der Spieler den Server betritt[/php]
Das speichern wir nun als willkommen.lua in unseren Ordner. Jetzt schreiben wir in der Konsole (Mta Server.exe) "refresh". Dann sollte die Resource erkannt sein und wir schreiben "start [NAMEDESORDNERS]". Nun sollte der Gamemode gestartet sein. In MTA gehen wir nun in den Server und die Nachricht sollte ausgegeben werden.
[SIZE="3"]3.5 Verlassen[/SIZE]
Nun wollen wir aber auch das wenn man den Server verlässt eine Nachricht ausgegeben wird. Dazu öffnen wir wieder "willkommen.lua" und fügen das unter dem addEventHandler ein :
[php]function verlassen()
local name = getPlayerName(source) -- selbes wie oben
outputChatBox(''..name..' hat den Server verlassen!') -- selbes wie oben
end
addEventHandler("onPlayerQuit", getRootElement(), verlassen)[/php]
Dieses mal brauchen wir kein "refresh" sondern tippen einfach nur "restart [NAMEDESORDNERS]" ein, gehen in den Server und verlassen ihn wieder. Ihr solltet die 2. Nachricht nicht sehen, da ihr schon raus aus dem Server seit. Die anderen sehen die Nachricht jedoch.
[SIZE="3"]3.6 Anderer Skin[/SIZE]
Jetzt wollen wir aber das man beim hereinkommen nicht den Skin von CJ hat.
Dazu suchen wir uns erstmal die SKINID raus. Dazu gibt es eine sehr schöne Liste mit Bildern :
All Skins Page - Multi Theft Auto: Wiki
Ihr habt den Skin? Dann fügen wir in der Funktion "Willkommen" dies anstatt dem Command "spawnplayer" ein.
[php]spawnPlayer(source, x, y, z, 0, 7) -- spawnt ihn bei x,y,z, Drehung : 0° und SKINID : 7[/php]
Macht das gleiche mit dem restart und testet.
So sieht das Script am Ende aus :
[SIZE="3"]3.7 Das erste Kommando[/SIZE]
Ihr kennt wahrscheinlich die Commands, wie zum Beispiel "/login". Nun wollen wir ein eigenes erstellen.
Wir erstellen zuerst ein einfaches Kommando mit den Kentnissen die wir bis jetzt haben. Wir haben 3 Funktionen erstellt, wovon nur zwei hier nützlich sein könnten, undzwar den Skin ändern und was ausgeben ändern. Das heißt wir erstellen mit folgendem Script, dieses Kommando "/changeskin".
[php]function changeskin ( thePlayer, command, player, skinid ) -- Eine Funktion wo 4 Variablen angehängt sind. thePlayer und command sind einfach nur 2 eigentlich unwichtige Variablen. player und skinid sind die hauptsächlichen, was heißt der Command lautet "/changeskin player skinid"
if player and tonumber(skinid) then -- wenn player und skinid eingetippt wurden
local playerid = getPlayerFromName( player ) -- speichert den namen in eine variable
if playerid then -- wenn sie erfolgreich gespeichert wurde
setElementModel ( playerid, skinid ) -- ändere den Skin zu skinid
setElementData( playerid, "Skin", tonumber(skinid) ) -- speichert den Skin für immer
outputChatBox("Du hast den Skin von "..player.." den Skin geändert" ,thePlayer) -- ausgeben für den Spieler der den Command eingegeben hat
outputChatBox("Dein Skin wurde von "..getPlayerName( thePlayer ).." geändert", playerid) -- ausgeben für den geänderten Spieler
else
outputChatBox("Der angegebene Spieler existiert nicht!",thePlayer) -- falls der spieler nicht gefunden wird, gebe das aus
end
else
outputChatBox("BENUTZUNG: /changeskin [Spieler] [Skin-ID]",thePlayer) -- falls einer der beiden Variablen fehlt, gebe das aus
end
end
addCommandHandler("changeskin", changeskin) -- binde den Command /changeskin an die funktion "changeskin"
[/php]
Wir schreiben dies in unser willkommen.lua und restarten wie immer. Wenn alles läuft dann könnt ihr fortfahren. Wenn nicht postet euer Problem ins Topic.
--------------------------------------------------------------
[SIZE="6"]4 Das Debugging[/SIZE]
Beim Programmieren vor allem am Anfang, tauchen immerwieder Fehler auf. Diese Fehler sind meistens sehr schwer zu finden, deshalb gibt es hier ein nützliches Kommando namens "debugscript". Dieses Kommando zeigt uns im Spiel den Fehler und die Zeile an. Aber um diesen Command zu benutzen braucht man im Spiel Adminrechte. Um die Adminrechte hinzuzufügen müsst ihr ersteinmal einen Account anlegen. Das geht sehr einfach über die Konsole. Da geben wir einfach nur "addaccount [NAME] [PASSWORT] ein. Wenn wir das gemacht haben könnt ihr euch im Spiel mit dem Command "/login [PASSWORT]" einloggen. Jetzt seid ihr aber noch kein Admin. Um euch als Admin hinzuzufügen, geht in die acl.xml. WICHTIG : DIE MTA SERVER.EXE MUSS VOLLSTÄNDIG GESCHLOSSEN SEIN! Irgendwo solltet ihr das finden :
--------------------------------------------------------------
[SIZE="6"]5 Der MapEditor[/SIZE]
Glücklicherweise liefert MTA San andreas auch einen schönen Map Editor mit. Dieser ist sehr nützlich und auch einfach zu bedienen. Oben und unten werdet ihr ein paar Icons sehen, die nicht aktiviert sind. Um diese anklicken zu können, drückt ihr die Taste F. Wir drücken dieses Icon an :
Jetzt fangen wir an zu mappen. Wir werden bei den Koordinaten 0,0,0 gespawnt, das heißt wir bewegen uns dorthin. (Mit SHIFT beschleunigen)
Jetzt können wir dort ein paar Items platzieren. Ihr sucht euch irgendwas aus, ich ein Auto und platziert es dort. Jetzt speichert ihr die Map die Map mit DIESEM Symbol () Jetzt sucht ihr euch einen Namen aus und speichert. Ihr geht nun in den resources-Ordner und geht in den Ordner mit dem Namen euer Map. Diese Datei (.map) öffnet ihr und tut sie in euren Gamemode-Ordner. Jetzt fügen wir sie nurnoch in der meta.xml ein.
--------------------------------------------------------------
[SIZE="6"]6 Ein Login mit GUI[/SIZE]
So Leute Nun können wir mappen und ein paar Scripts erstellen. Nun wollen wir ein etwas schwierigeres Script erstellen (im Grunde sehr einfach). Die 4 Punkte die hier verwendet werden sind :
Wir fangen erstmal mit dem GUI-Scripting/Designing an. Dazu gibt es ein sehr hilfreiches Tool/Resource namens "guieditor" (Multi Theft Auto | Community). Wie man das benutzt bzw. installiert erkläre ich euch später. Zu aller erst legen wir eine Datei an. Ich nenne sie jetzt mal "login.lua". Dann tragen wir sie in unsere Meta ein. Dieses mal beachten :
Zu aller erst, plant man immer wie es aussehen soll! Ich habe es mir so vorgestellt :
Jetzt können wir anfangen zu scripten. Unser clientside script :
[php]--[[ LOGIN-Script
bei |R.o.x|
]]
x,y = guiGetScreenSize() -- Bildschirmauflösung speichern
LoginWin = guiCreateWindow(x/2 - 150,y/2 - 110,300,220,"Login",false) -- fenster erstellten und das "false" steht dafür das es nicht relativ ist
TabPanel = guiCreateTabPanel(17,30,261,152,false,LoginWin) -- erstellt die Tabs
TabLogin = guiCreateTab("Login",TabPanel) -- Der erste Tab "login"
LblUsername = guiCreateLabel(11,27,70,16,"Benutzername",false,TabLogin) -- erstellt Texte
LoginUsername = guiCreateEdit(76,26,171,21,"",false,TabLogin) -- erstellt Textbox
LblPassword = guiCreateLabel(11,60,70,16,"Passwort",false,TabLogin) -- Text
LoginPassword = guiCreateEdit(76,58,171,21,"",false,TabLogin) -- Textbox
guiEditSetMasked(LoginPassword,true)
TabRegister = guiCreateTab("Register",TabPanel) -- 2. Tab
LblRegisterUsername = guiCreateLabel(11,27,70,16,"Benutzername",false,TabRegister) -- text
EditRegisterUsername = guiCreateEdit(76,26,171,21,"",false,TabRegister) -- textbox
LblRegisterPassword = guiCreateLabel(11,60,70,16,"Passwort",false,TabRegister) -- text
EditRegisterPassword = guiCreateEdit(76,58,171,21,"",false,TabRegister) -- feld
guiEditSetMasked(EditRegisterPassword,true)
LblRegisterEmail = guiCreateLabel(35,92,35,16,"Email",false,TabRegister) -- text
EditRegisterEmail = guiCreateEdit(76,90,171,21,"",false,TabRegister) -- feld
BtnAction = guiCreateButton(182,188,95,19,"LOS",false,LoginWin) -- button
fadeCamera(false,0,0,0,0)
guiSetVisible ( LoginWin, false ) -- macht es unsichtbar
local localPlayer = getLocalPlayer ( )
function windowHandler( )
outputChatBox( "--LOGIN FENSTER BY |R.o.x|--", getLocalPlayer() )
outputChatBox( "-------LOG DICH EIN------", getLocalPlayer() )
setElementData( getLocalPlayer(), "LoggedIn", false ) -- speichert das man nicht eingeloggt ist
local playername = getPlayerName(localPlayer) -- speichert name
guiSetText(LoginUsername, "")
guiSetText(EditRegisterUsername, "")
guiSetSelectedTab(TabPanel, TabLogin)
guiSetText(LoginUsername, playername)
guiSetText(EditRegisterUsername, playername)
guiSetVisible ( LoginWin, true ) -- macht es sichtbar
guiBringToFront ( LoginWin )
guiSetInputEnabled(true)
showCursor ( true ) -- macht den Cursor sichtbar
guiBringToFront(LoginPassword)
end
addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()), windowHandler ) -- wird beim reinkommen direkt angezeigt
function onClickBtn ( button, state ) -- wenn button geklickt wurde
if (button == "left" and state == "up") then
if (source == BtnAction) then
if (guiGetSelectedTab(TabPanel) == TabLogin) then
triggerServerEvent ( "onLogin", getRootElement(), localPlayer, guiGetText(LoginUsername), guiGetText(LoginPassword) ) -- TRIGGERT DAS SERVER EVENT!
else
triggerServerEvent ( "onRegister", getRootElement(), localPlayer, guiGetText(EditRegisterUsername), guiGetText(EditRegisterPassword), guiGetText(EditRegisterEmail) )
end
end
end
end
addEventHandler( "onClientGUIClick", BtnAction, onClickBtn, false ) -- Event wenn Button angeklickt wird
function onEnterLogin ( button, state )
if (guiGetSelectedTab(TabPanel) == TabLogin) then
triggerServerEvent ( "onLogin", getRootElement(), localPlayer, guiGetText(LoginUsername), guiGetText(LoginPassword) )
else
triggerServerEvent ( "onRegister", getRootElement(), localPlayer, guiGetText(EditRegisterUsername), guiGetText(EditRegisterPassword), guiGetText(EditRegisterEmail) )
end
end
addEventHandler( "onClientGUIAccepted",LoginPassword, onEnterLogin,false)
addEventHandler( "onClientGUIAccepted",EditRegisterPassword, onEnterLogin,false)
function hideLoginWindow() -- Macht alles unsichtbar
guiSetInputEnabled(false)
guiSetVisible ( LoginWin, false )
showCursor ( false )
end
addEvent( "hideLoginWindow", true )
addEventHandler( "hideLoginWindow", getRootElement(), hideLoginWindow )
[/php]
Das war das Clientsidescript. Jetzt kommt das Server script :
[php]function onLogin ( player, user, pass )
local login = logIn ( thePlayer, user, pass )
if (login) then
if (client) then
spawnPlayer(client, 0, 0, 0)
fadeCamera(client, true)
setCameraTarget(client, client)
outputChatBox("Du hast dich eingeloggt! Viel Spaß!", client)
end
else
outputChatBox("Versuche es nochmal!",client)
end
end
addEvent( "onLogin", true )
addEventHandler( "onLogin", getRootElement(), onLogin )
function onRegister ( player, user, pass, email )
local account = addAccount( user, pass )
if ( account ) then
outputChatBox ( "Du bist nun registriert! Logge dich mit /login ein!", source )
else
outputChatBox ( "Fehler", source )
end
end
addEvent( "onRegister", true )
addEventHandler( "onRegister", getRootElement(), onRegister )[/php]
Beim serverside erkläre ich nichts, weil wenn ihr euch das vorher durchgelesen habt es selbstverständlich ist.
--------------------------------------------------------------
[SIZE="6"]7 Objekte per Script[/SIZE]
Viele werden sich fragen :
Wofür alles programmieren, wenn man einen MapEditor hat?
Aber der MapEditor hat auch nur bestimmte Funktionen, wie z.B. :
Sobald das Fahrzeug zerstört ist, ist es weg.
Sobald ein Pickup aufgenommen wurde, weg.
Um ein Fahrzeug zu erstellen gibt es ein einfaches Syntax :
[php]VARIABLE = createVehicle ( MODEL, x, y, z, rx°, ry°, rz°, "SCHILD" )[/php]
Es ist wirklich sehr einfach zu verwenden, und es ist z.B. für ein CarSystem sehr hilfreich. [highlight]Man beachtet : alles sind floats[/highlight]
Das nächste ist, die Farbe des Fahrzeugs :
[php]setVehicleColor ( VARIABLE, farbe1, farbe2, farbe3, farbe4 )[/php]
[highlight]Man beachtet : Die Farben sind Integers. Also sie werden per ID hinzugefügt![/highlight]
Hier eine Liste aller ID's :
Als nächstes den Paintjob :
[php]setVehiclePaintjob ( VARIABLE, ID )[/php]
[highlight]Man beachtet : Die ID's sind nicht vorgegeben. Jedes Auto hat gewisse Paintjobs. ID ist ein Integer![/highlight]
Soll das Fahrzeug überhaupt respawnt werden? :
[php]toggleVehicleRespawn ( VARIABLE, true/false )[/php]
Nach wievielen Millisekunden soll das Auto respawnt werden? :
[php]setVehicleRespawnDelay ( VARIABLE, MILLISEKUNDEN)[/php]
Wo soll es respawnt werden? :
[php]setVehicleRespawnPosition ( VARIABLE, x, y, z, rx, ry, rz ] )[/php]
Nochmal alle Codes für Fahrzeuge :
--------------------------------------------------------------
[SIZE="6"]8 Die Ressourcen[/SIZE]
Ressourcen sind manchmal Hilfetools oder ganze gamemodes für MTA. Man kann sie unter [URL="http://community.mtasa.com/index.php?p=resources&s=list&category=1"]MTA COMMUNITY[/URL] finden.
Es gibt einen gewissen hilfreichen Filter, auf der Seite :
Beim "Typ" kann man einstellen was man suchen will :
Die 4 Punkte sollten sich eigentlich von selbst erklären lassen.
Zunächst downloaden wir uns den [URL="http://community.mtasa.com/index.php?p=resources&s=details&id=141"]GUI Editor[/URL]. Dieser sollte uns helfen grafische Benutzeroberflächen zu erstellen. Das wichtige hierbei ist, dass wir die ZIP speichern!
Diese ZIP, kopieren oder verschieben wir in unser server\mods\deathmatch\resources-Verzeichnis. Jetzt geben wir in der Konsole (ganz wichtig)
So sollte es nun aussehen
--------------------------------------------------------------
[SIZE="6"]9 Jobs hinzufügen[/SIZE]
Nach Anfrage von [URL="http://www.elitepvpers.com/forum/members/3318138-ecstasy_x3.html"]Ecstasy_x3
[/URL], habe ich das hinzugefügt. Ich werde euch hier zeigen wie ihr Jobs hinzufügt. Als Beispiel habe ich einen Truckerjob genommen.
[php]function truckerJob(player,command) -- gibt euch den JOB "TRUCKER"
setElementData(player,"Job", 0)
if getElementData ( player, "Job" ) ~= 0 then
outputChatBox("Du hast bereits einen Job!", player, 255,0,0)
else
setElementData(player, "Job", 3)
outputChatBox("Du bist nun Truckerfahrer! Herzlichen Glückwunsch!", player,0,255,0)
end
end
addCommandHandler("job", truckerJob)
function truckerStart ( thePlayer )
local job = getElementData ( thePlayer, "Job" ) -- liest variable job aus
if ( job == 3 ) then -- wenn job = trucker ist
local ziel = math.random ( 1, 3 ) -- zufall, von 1-3.
truck = createVehicle ( 525, 2367.9216308594, 2754.8811035156, 12.500002861023, 0, 0, 180.75 ) -- Erstellt ein Fahrzeug
setElementDimension ( truck, 10 ) -- Teleportiert den Truck in Dimension 10! Dort sind keine anderen Autos, Objekte!
setElementDimension ( thePlayer, 10 ) -- euch auch
warpPedIntoVehicle ( thePlayer, truck) -- Teleportiert euch in den Wagen
if ( ziel == 1 ) then -- Wenn der Zufall 1 ist
marker1 = createMarker ( 2293.8217773438, 91.259262084961, 26.3359375, "checkpoint", 10, 255, 0, 0, 255, thePlayer ) -- .. erstelle Marker1
blip1 = createBlip ( 2293.8217773438, 91.259262084961, 26.3359375, 19, 2, 255, 0, 0, 255, 0, 99999.0, thePlayer ) -- .. erstelle Blip1 (Blip ist eine Markierung auf der Map)
elseif ( ziel == 2 ) then -- wenn 2
marker2 = createMarker ( 365.3349609375, 2541.84765625, 16.598960876465, "checkpoint", 10, 255, 0, 0, 255, thePlayer ) -- ..
blip2 = createBlip ( 365.3349609375, 2541.84765625, 16.598960876465, 19, 2, 255, 0, 0, 255, 0, 99999.0, thePlayer ) -- ..
elseif ( ziel == 3 ) then -- wenn 3
marker3 = createMarker ( -2264.2666015625, 2304.548828125, 5.5566072463989, "checkpoint", 10, 255, 0, 0, 255, thePlayer ) -- ..
blip3 = createBlip ( -2264.2666015625, 2304.548828125, 5.5566072463989, 19, 2, 255, 0, 0, 255, 0, 99999.0, thePlayer ) -- ..
end
setElementDimension ( blip1, 10 ) -- Alles in Dimension 10
setElementDimension ( blip2, 10 )
setElementDimension ( blip3, 10 )
setElementDimension ( marker1, 10 )
setElementDimension ( marker2, 10 )
setElementDimension ( marker3, 10 )
outputChatBox ( "Fahre zum Zielpunkt!", thePlayer, 0, 255, 0 ) -- Gebe Text in Farbe "Grün" für den Spieler aus
setVehicleEngineState ( truck, true ) -- Starte den Motor
else
outputChatBox ( "Du bist kein Trucker!", thePlayer, 255, 0, 0 ) -- wenn kein Trucker ist, gebe Text aus in "Rot"
end
end
addCommandHandler ( "truckerstart", truckerStart ) -- Wenn "/truckerstart" eingegeben wird, führe Funktion aus
function finishTrucker ( hitPlayer, matchingDimension )
if isElementWithinMarker(hitPlayer, marker1 ) then -- wenn Spieler in Marker ist
outputChatBox ( "Du hast die Mission erfolgreich erfüllt! Hier hast du 9000$!", hitPlayer )
removePedFromVehicle ( hitPlayer ) -- raus aus Fahrzeug
givePlayerMoney ( hitPlayer, 9000 ) -- gebe Geld
setElementDimension ( hitPlayer, 0 ) -- wieder in Dimension 0
setElementPosition ( hitPlayer, 2361.109375, 2778.4375, 10.8203125 )
setPedRotation ( hitPlayer, 90 )
end
if isElementWithinMarker(hitPlayer, marker2 ) then
outputChatBox ( "Du hast die Mission erfolgreich erfüllt! Hier hast du 9000$!", hitPlayer )
removePedFromVehicle ( hitPlayer )
givePlayerMoney ( hitPlayer, 9000 )
setElementDimension ( hitPlayer, 0 )
setElementPosition ( hitPlayer, 2361.109375, 2778.4375, 10.8203125 )
setPedRotation ( hitPlayer, 90 )
end
if isElementWithinMarker(hitPlayer, marker3 ) then
outputChatBox ( "Du hast die Mission erfolgreich erfüllt! Hier hast du 9000$!", hitPlayer )
removePedFromVehicle ( hitPlayer )
givePlayerMoney ( hitPlayer, 9000 )
setElementDimension ( hitPlayer, 0 )
setElementPosition ( hitPlayer, 2361.109375, 2778.4375, 10.8203125 )
setPedRotation ( hitPlayer, 90 )
end
end
addEventHandler ( "onMarkerHit", getRootElement(), finishTrucker ) -- wenn ein Marker berührt wird
[/php]
Alles ist erklärt. Das muss in eine .lua, und dann in die Meta.
--------------------------------------------------------------
[SIZE="6"]10 Interiors[/SIZE]
Was sind Interiors?
So jetzt wisst ihr was Interiors sind. Nun brauchen wir nur noch den Code dafür. Also wir nehmen das Police Department (LV HQ), platzieren dort eine Markierung mit einem Symbol auf der Map, und erstellen einen Marker im Typ "Corona".
[php]pdmarkeraussen = createMarker( -1605.5, 710, 13.5, "corona", 1, 255, 255, 0, getRootElement()) -- einen Marker außen
pdmarkerinnen= createMarker(246.6, 62.6, 1003.5, 'corona', 1.20000004, 225, 228, 0, 153, getRootElement()) -- und einen innen
setElementInterior(pdmarkerinnen, 6) -- der innere Marker soll im Innenraum mit ID 6 sein
setElementDimension(pdmarkerinnen, 0) -- die Dimension 0
function PDNachInnen(hitPlayer, matchingDimension)
if getPedOccupiedVehicle(hitPlayer) or getElementType(hitPlayer) == "vehicle" then
outputChatBox("Du kannst nicht mit einem Fahrzeug durch diese Tuer!") -- wird ausgegeben, wenn man in einem Fahrzeug ist
else
setElementPosition( hitPlayer, 247, 65, 1003.6599731445) -- teleportiere ihn auf diese Position (Interior 0)
setElementInterior( hitPlayer, 6) -- setze nun sein Interior auf 6
end
end
addEventHandler("onMarkerHit", pdmarkeraussen, PDNachInnen) -- wenn der marker "pdmarkeraussen" berührt wird, führe Funktion aus
function PDNachAussen(hitPlayer, matchingDimension)
setElementPosition(hitPlayer, -1605.3, 713.5, 13.4) -- position
setElementInterior(hitPlayer, 0) -- auf Interior 0
end
addEventHandler("onMarkerHit", pdmarkerinnen, PDNachAussen) -- das Gleiche andersherum
pdBlip = createBlip ( -1605.5, 710, 13.5, 30, 0, 0, 0, 255 )[/php]
Dieser Code ist relativ einfach zu verstehen, und auch sehr wenig. Was uns mehr interessiert :
Interiors :
Die Quelle für diese Liste, steht ja auf den kleinen Thumbnails dabei
--------------------------------------------------------------
[SIZE="6"]11 Ein Klicksystem[/SIZE]
Auf Anfrage von [URL="http://www.elitepvpers.com/forum/members/3780601-qmafia.html"]Qmafia[/URL], erkläre ich noch wie man ein Klicksystem erstellt.
Dies geht ganz einfach. Sobald der Spieler joint, setzen wir ihm einen "Bind" auf die Taste "m". Bei dieser soll der Cursor eingeblendet werden. Wenn man nun etwas anklickt soll ein Text erscheinen. Das tun wir alles Clientside(!):
[php]function showCurser()
bindKey("m", "down", function() -- wenn wir "m" drücken wird diese Funktion ausgeführt
if isCursorShowing() == true then
showCursor( false)
else
showCursor( true)
end
end)
end
addEventHandler("onClientResourceStart", getRootElement(), showCurser) -- beim Joinen die Funktion showCurser ausführen
function clickOnVehicle(button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedElement )
if isElement(clickedElement) then -- wenn clickedElement ein Element ist
if getElementType(clickedElement) == "vehicle" then -- und es ein Fahrzeug ist
outputChatBox("DU HAST EIN AUTO ANGEKLICKT!") -- text ausgeben
end
end
end
addEventHandler ( "onClientClick", getRootElement(), clickOnVehicle) -- wen man etwas anklickt[/php]
CREDITS : |R.O.X|
[SIZE="6"]WEITERES FOLGT NOCH[/SIZE]
STAND : 20.06.2011 17.44 Uhr, nach Open Office Writer 21 Seiten.[/QUOTE]
- [SIZE="3"]1 Einleitung[/SIZE]
- [SIZE="3"]2 Server erstellen[/SIZE]
- [SIZE="3"]3 Gamemode erstellen[/SIZE]
- 3.1 Programme
- 3.2 Die "meta.xml"
- [SIZE="3"]3.3 Scripting[/SIZE]
- 3.4 Willkommen
- 3.5 Verlassen
- 3.6 Skin wechseln
- 3.7 Das erste Kommando
- [SIZE="3"]4 Debugging[/SIZE]
- [SIZE="3"]5 Map-Editor[/SIZE]
- [SIZE="3"]6 Ein Login mit GUI[/SIZE]
- [SIZE="3"]7 Objekte per Script einfügen[/SIZE]
- [SIZE="3"]8 Die Ressourcen[/SIZE]
- [SIZE="3"]9 Jobs hinzufügen[/SIZE]
- [SIZE="3"]10 Interior's[/SIZE]
- [SIZE="3"]11 Ein Klicksystem[/SIZE]
Hey Leute.
[SIZE="6"]1 Einleitung[/SIZE]
Ersteinmal eine kleine Einleitung :
MTA San Andreas ist wie bekanntlich "ein" Multiplayertool für GTA San Andreas.
Es gibt auch sa-mp, jedoch empfehle ich dies nicht, da es ehrlichgesagt wirklich sehr einfach zu hacken ist. Das scripten dort ist meiner Meinung nach einfacher, jedoch wie gesagt auch einfacher zu entschlüsseln. MTA San Andreas unterstützt keine cleo-scripts und ist durch eigene Codes einfacher zu benutzen.
Viele haben Probleme damit MTA SA zu benutzen, deswegen erstelle ich ein Tutorial, das ich nach und nach immer erweitern werde
--------------------------------------------------------------
[SIZE="6"]2 Den Server erstellen[/SIZE]
Zu aller erst gehen wir in den MTA SA Ordner. Dort sollten wir einen Ordner namens "server" finden. Diesen öffnen wir und gehen von dort aus nach mods->deathmatch. Die allgemeinen Einstellungen werden in der mtaserver.conf gespeichert. Diese öffnen wir mit einem Editor nach Wahl. Ich benutze den Editor "Ultra-Edit". Ihr könnt natürlich auch den Windows Editor als auch NotePad++ benutzen.
Der Inhalt dieser Datei sollte verändert werden. Über jeder Eigenschaft steht in grün (bei Textverarbeitungsprogrammen mit Syntaxhighlighting), was das bedeutet.
Die wichtigsten Einstellungen sind :
Wenn alles wie gewünscht bearbeitet wurde, starten wir im server-Ordner die Mta-Server.exe.
Manchmal kann das etwas länger dauern.
So sollte es am Ende aussehen. Jetzt startet ihr MTA SA, und geht bei "QUICK CONNECT" -> 127.0.0.1 ein.
Wie ihr seht funktioniert alles und ihr seit im Gamemode "Freeroam"
--------------------------------------------------------------
[SIZE="6"]3 Eigener Gamemode[/SIZE]
[SIZE="4"]3.1 Programme[/SIZE]
Also das scripting ist eine wichtige Grundlage in MTA SA. MTA SA benutzt die Scriptsprache "LUA". Ihr solltet für "LUA" einen geeigneten Editor haben, ich persönlich verwende einen sehr empfohlenen Editor ohne wirklichen Namen^^.
Downloads - luaforwindows - Installation of Lua for the Windows operating systems including many lua libraries. - Google Project Hosting
Dies downloadet ihr und startet dann "SciTe". Noch müsst ihr dort nichts machen. Wir gehen also in den server-Ordner -> mods -> deathmatch -> resources und erstellen dort einen Ordner mit dem Namen von eurem Gamemode. WICHTIG : NIEMALS LEERZEICHEN ODER SONDERZEICHEN!
[SIZE="4"]3.2 meta.xml[/SIZE]
Wenn ihr dies gemacht habt, müsst ihr eine Datei namens "meta.xml" erstellen.
Diese öffnet ihr mit irgendeinem Editor und schreibt dies als Inhalt :
- Kod:
<meta>
<info type="gamemode" author="EUERNAME" name="NameDesGamemodes" version="0.9.3" />
</meta>
[SIZE="4"]3.3 Das SCRIPTEN[/SIZE]
[SIZE="3"]3.3.(1) Auskommentieren[/SIZE]
Wie in jeder Sprache kann man auch in LUA Zeilen und Texte auskommentieren.
Die beiden Commands zum auskommentieren sind wirklich simple. Es gibt nur :
- Kod:
-- TEXT
- Kod:
--[[ TEXT ]]
[SIZE="3"]3.4 Willkommen[/SIZE]
Wenn ihr soweit seit, erstellen wir ersteinmal ein sehr einfaches Script!
Dazu gehen wir erstmal wieder in unsere meta.xml. Da ergänzen wir zwischen den ""-Tags :
- Kod:
<script src="willkommen.lua" />
Dazu schreiben wir diesen Code rein :
[php]function willkommen() -- erstellt eine Funktion namens "willkommen"
local x = 0 -- erstellt die Variable "x" und teilt ihr den Wert 0 zu
local y = 0 -- das gleiche nur "y"
local z = 0 -- "z"
local name = getPlayerName(source) -- speichert den Namen des Spielers in eine Variable
spawnPlayer(source, x, y, z) -- positioniert (spawnt) den Spieler zu der Position (bei uns 0,0,0)
fadeCamera(source, true) -- die Kamera wird angezeigt
setCameraTarget(source, source) -- sie wird dem Spieler zugeteilt
outputChatBox(''..name..' ist dem Server beigetreten!') -- gibt eine Nachricht aus (mit einer Variable)
end
addEventHandler("onPlayerJoin", getRootElement(), willkommen) -- teilt der Funktion ein Event zu (wann es starten soll), bei uns wenn der Spieler den Server betritt[/php]
Das speichern wir nun als willkommen.lua in unseren Ordner. Jetzt schreiben wir in der Konsole (Mta Server.exe) "refresh". Dann sollte die Resource erkannt sein und wir schreiben "start [NAMEDESORDNERS]". Nun sollte der Gamemode gestartet sein. In MTA gehen wir nun in den Server und die Nachricht sollte ausgegeben werden.
[SIZE="3"]3.5 Verlassen[/SIZE]
Nun wollen wir aber auch das wenn man den Server verlässt eine Nachricht ausgegeben wird. Dazu öffnen wir wieder "willkommen.lua" und fügen das unter dem addEventHandler ein :
[php]function verlassen()
local name = getPlayerName(source) -- selbes wie oben
outputChatBox(''..name..' hat den Server verlassen!') -- selbes wie oben
end
addEventHandler("onPlayerQuit", getRootElement(), verlassen)[/php]
Dieses mal brauchen wir kein "refresh" sondern tippen einfach nur "restart [NAMEDESORDNERS]" ein, gehen in den Server und verlassen ihn wieder. Ihr solltet die 2. Nachricht nicht sehen, da ihr schon raus aus dem Server seit. Die anderen sehen die Nachricht jedoch.
[SIZE="3"]3.6 Anderer Skin[/SIZE]
Jetzt wollen wir aber das man beim hereinkommen nicht den Skin von CJ hat.
Dazu suchen wir uns erstmal die SKINID raus. Dazu gibt es eine sehr schöne Liste mit Bildern :
All Skins Page - Multi Theft Auto: Wiki
Ihr habt den Skin? Dann fügen wir in der Funktion "Willkommen" dies anstatt dem Command "spawnplayer" ein.
[php]spawnPlayer(source, x, y, z, 0, 7) -- spawnt ihn bei x,y,z, Drehung : 0° und SKINID : 7[/php]
Macht das gleiche mit dem restart und testet.
So sieht das Script am Ende aus :
[SIZE="3"]3.7 Das erste Kommando[/SIZE]
Ihr kennt wahrscheinlich die Commands, wie zum Beispiel "/login". Nun wollen wir ein eigenes erstellen.
Wir erstellen zuerst ein einfaches Kommando mit den Kentnissen die wir bis jetzt haben. Wir haben 3 Funktionen erstellt, wovon nur zwei hier nützlich sein könnten, undzwar den Skin ändern und was ausgeben ändern. Das heißt wir erstellen mit folgendem Script, dieses Kommando "/changeskin".
[php]function changeskin ( thePlayer, command, player, skinid ) -- Eine Funktion wo 4 Variablen angehängt sind. thePlayer und command sind einfach nur 2 eigentlich unwichtige Variablen. player und skinid sind die hauptsächlichen, was heißt der Command lautet "/changeskin player skinid"
if player and tonumber(skinid) then -- wenn player und skinid eingetippt wurden
local playerid = getPlayerFromName( player ) -- speichert den namen in eine variable
if playerid then -- wenn sie erfolgreich gespeichert wurde
setElementModel ( playerid, skinid ) -- ändere den Skin zu skinid
setElementData( playerid, "Skin", tonumber(skinid) ) -- speichert den Skin für immer
outputChatBox("Du hast den Skin von "..player.." den Skin geändert" ,thePlayer) -- ausgeben für den Spieler der den Command eingegeben hat
outputChatBox("Dein Skin wurde von "..getPlayerName( thePlayer ).." geändert", playerid) -- ausgeben für den geänderten Spieler
else
outputChatBox("Der angegebene Spieler existiert nicht!",thePlayer) -- falls der spieler nicht gefunden wird, gebe das aus
end
else
outputChatBox("BENUTZUNG: /changeskin [Spieler] [Skin-ID]",thePlayer) -- falls einer der beiden Variablen fehlt, gebe das aus
end
end
addCommandHandler("changeskin", changeskin) -- binde den Command /changeskin an die funktion "changeskin"
[/php]
Wir schreiben dies in unser willkommen.lua und restarten wie immer. Wenn alles läuft dann könnt ihr fortfahren. Wenn nicht postet euer Problem ins Topic.
--------------------------------------------------------------
[SIZE="6"]4 Das Debugging[/SIZE]
Beim Programmieren vor allem am Anfang, tauchen immerwieder Fehler auf. Diese Fehler sind meistens sehr schwer zu finden, deshalb gibt es hier ein nützliches Kommando namens "debugscript". Dieses Kommando zeigt uns im Spiel den Fehler und die Zeile an. Aber um diesen Command zu benutzen braucht man im Spiel Adminrechte. Um die Adminrechte hinzuzufügen müsst ihr ersteinmal einen Account anlegen. Das geht sehr einfach über die Konsole. Da geben wir einfach nur "addaccount [NAME] [PASSWORT] ein. Wenn wir das gemacht haben könnt ihr euch im Spiel mit dem Command "/login [PASSWORT]" einloggen. Jetzt seid ihr aber noch kein Admin. Um euch als Admin hinzuzufügen, geht in die acl.xml. WICHTIG : DIE MTA SERVER.EXE MUSS VOLLSTÄNDIG GESCHLOSSEN SEIN! Irgendwo solltet ihr das finden :
- Kod:
<group name="Admin">
<acl name="Moderator" />
<acl name="SuperModerator" />
<acl name="Admin" />
<acl name="RPC" />
- Kod:
<object name="user.Wasim" />
--------------------------------------------------------------
[SIZE="6"]5 Der MapEditor[/SIZE]
Glücklicherweise liefert MTA San andreas auch einen schönen Map Editor mit. Dieser ist sehr nützlich und auch einfach zu bedienen. Oben und unten werdet ihr ein paar Icons sehen, die nicht aktiviert sind. Um diese anklicken zu können, drückt ihr die Taste F. Wir drücken dieses Icon an :
Jetzt fangen wir an zu mappen. Wir werden bei den Koordinaten 0,0,0 gespawnt, das heißt wir bewegen uns dorthin. (Mit SHIFT beschleunigen)
Jetzt können wir dort ein paar Items platzieren. Ihr sucht euch irgendwas aus, ich ein Auto und platziert es dort. Jetzt speichert ihr die Map die Map mit DIESEM Symbol () Jetzt sucht ihr euch einen Namen aus und speichert. Ihr geht nun in den resources-Ordner und geht in den Ordner mit dem Namen euer Map. Diese Datei (.map) öffnet ihr und tut sie in euren Gamemode-Ordner. Jetzt fügen wir sie nurnoch in der meta.xml ein.
- Kod:
<map src="NAME.map" dimension="0" />
--------------------------------------------------------------
[SIZE="6"]6 Ein Login mit GUI[/SIZE]
So Leute Nun können wir mappen und ein paar Scripts erstellen. Nun wollen wir ein etwas schwierigeres Script erstellen (im Grunde sehr einfach). Die 4 Punkte die hier verwendet werden sind :
- GUI-Scripting/Designing
- Server & Client "triggern"
- Events
- Buttons
Wir fangen erstmal mit dem GUI-Scripting/Designing an. Dazu gibt es ein sehr hilfreiches Tool/Resource namens "guieditor" (Multi Theft Auto | Community). Wie man das benutzt bzw. installiert erkläre ich euch später. Zu aller erst legen wir eine Datei an. Ich nenne sie jetzt mal "login.lua". Dann tragen wir sie in unsere Meta ein. Dieses mal beachten :
- Kod:
<script src="login.lua" [B]type="client"[/B] />
Zu aller erst, plant man immer wie es aussehen soll! Ich habe es mir so vorgestellt :
Jetzt können wir anfangen zu scripten. Unser clientside script :
[php]--[[ LOGIN-Script
bei |R.o.x|
]]
x,y = guiGetScreenSize() -- Bildschirmauflösung speichern
LoginWin = guiCreateWindow(x/2 - 150,y/2 - 110,300,220,"Login",false) -- fenster erstellten und das "false" steht dafür das es nicht relativ ist
TabPanel = guiCreateTabPanel(17,30,261,152,false,LoginWin) -- erstellt die Tabs
TabLogin = guiCreateTab("Login",TabPanel) -- Der erste Tab "login"
LblUsername = guiCreateLabel(11,27,70,16,"Benutzername",false,TabLogin) -- erstellt Texte
LoginUsername = guiCreateEdit(76,26,171,21,"",false,TabLogin) -- erstellt Textbox
LblPassword = guiCreateLabel(11,60,70,16,"Passwort",false,TabLogin) -- Text
LoginPassword = guiCreateEdit(76,58,171,21,"",false,TabLogin) -- Textbox
guiEditSetMasked(LoginPassword,true)
TabRegister = guiCreateTab("Register",TabPanel) -- 2. Tab
LblRegisterUsername = guiCreateLabel(11,27,70,16,"Benutzername",false,TabRegister) -- text
EditRegisterUsername = guiCreateEdit(76,26,171,21,"",false,TabRegister) -- textbox
LblRegisterPassword = guiCreateLabel(11,60,70,16,"Passwort",false,TabRegister) -- text
EditRegisterPassword = guiCreateEdit(76,58,171,21,"",false,TabRegister) -- feld
guiEditSetMasked(EditRegisterPassword,true)
LblRegisterEmail = guiCreateLabel(35,92,35,16,"Email",false,TabRegister) -- text
EditRegisterEmail = guiCreateEdit(76,90,171,21,"",false,TabRegister) -- feld
BtnAction = guiCreateButton(182,188,95,19,"LOS",false,LoginWin) -- button
fadeCamera(false,0,0,0,0)
guiSetVisible ( LoginWin, false ) -- macht es unsichtbar
local localPlayer = getLocalPlayer ( )
function windowHandler( )
outputChatBox( "--LOGIN FENSTER BY |R.o.x|--", getLocalPlayer() )
outputChatBox( "-------LOG DICH EIN------", getLocalPlayer() )
setElementData( getLocalPlayer(), "LoggedIn", false ) -- speichert das man nicht eingeloggt ist
local playername = getPlayerName(localPlayer) -- speichert name
guiSetText(LoginUsername, "")
guiSetText(EditRegisterUsername, "")
guiSetSelectedTab(TabPanel, TabLogin)
guiSetText(LoginUsername, playername)
guiSetText(EditRegisterUsername, playername)
guiSetVisible ( LoginWin, true ) -- macht es sichtbar
guiBringToFront ( LoginWin )
guiSetInputEnabled(true)
showCursor ( true ) -- macht den Cursor sichtbar
guiBringToFront(LoginPassword)
end
addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()), windowHandler ) -- wird beim reinkommen direkt angezeigt
function onClickBtn ( button, state ) -- wenn button geklickt wurde
if (button == "left" and state == "up") then
if (source == BtnAction) then
if (guiGetSelectedTab(TabPanel) == TabLogin) then
triggerServerEvent ( "onLogin", getRootElement(), localPlayer, guiGetText(LoginUsername), guiGetText(LoginPassword) ) -- TRIGGERT DAS SERVER EVENT!
else
triggerServerEvent ( "onRegister", getRootElement(), localPlayer, guiGetText(EditRegisterUsername), guiGetText(EditRegisterPassword), guiGetText(EditRegisterEmail) )
end
end
end
end
addEventHandler( "onClientGUIClick", BtnAction, onClickBtn, false ) -- Event wenn Button angeklickt wird
function onEnterLogin ( button, state )
if (guiGetSelectedTab(TabPanel) == TabLogin) then
triggerServerEvent ( "onLogin", getRootElement(), localPlayer, guiGetText(LoginUsername), guiGetText(LoginPassword) )
else
triggerServerEvent ( "onRegister", getRootElement(), localPlayer, guiGetText(EditRegisterUsername), guiGetText(EditRegisterPassword), guiGetText(EditRegisterEmail) )
end
end
addEventHandler( "onClientGUIAccepted",LoginPassword, onEnterLogin,false)
addEventHandler( "onClientGUIAccepted",EditRegisterPassword, onEnterLogin,false)
function hideLoginWindow() -- Macht alles unsichtbar
guiSetInputEnabled(false)
guiSetVisible ( LoginWin, false )
showCursor ( false )
end
addEvent( "hideLoginWindow", true )
addEventHandler( "hideLoginWindow", getRootElement(), hideLoginWindow )
[/php]
Das war das Clientsidescript. Jetzt kommt das Server script :
[php]function onLogin ( player, user, pass )
local login = logIn ( thePlayer, user, pass )
if (login) then
if (client) then
spawnPlayer(client, 0, 0, 0)
fadeCamera(client, true)
setCameraTarget(client, client)
outputChatBox("Du hast dich eingeloggt! Viel Spaß!", client)
end
else
outputChatBox("Versuche es nochmal!",client)
end
end
addEvent( "onLogin", true )
addEventHandler( "onLogin", getRootElement(), onLogin )
function onRegister ( player, user, pass, email )
local account = addAccount( user, pass )
if ( account ) then
outputChatBox ( "Du bist nun registriert! Logge dich mit /login ein!", source )
else
outputChatBox ( "Fehler", source )
end
end
addEvent( "onRegister", true )
addEventHandler( "onRegister", getRootElement(), onRegister )[/php]
Beim serverside erkläre ich nichts, weil wenn ihr euch das vorher durchgelesen habt es selbstverständlich ist.
--------------------------------------------------------------
[SIZE="6"]7 Objekte per Script[/SIZE]
Viele werden sich fragen :
Wofür alles programmieren, wenn man einen MapEditor hat?
Aber der MapEditor hat auch nur bestimmte Funktionen, wie z.B. :
Sobald das Fahrzeug zerstört ist, ist es weg.
Sobald ein Pickup aufgenommen wurde, weg.
Um ein Fahrzeug zu erstellen gibt es ein einfaches Syntax :
[php]VARIABLE = createVehicle ( MODEL, x, y, z, rx°, ry°, rz°, "SCHILD" )[/php]
Es ist wirklich sehr einfach zu verwenden, und es ist z.B. für ein CarSystem sehr hilfreich. [highlight]Man beachtet : alles sind floats[/highlight]
Das nächste ist, die Farbe des Fahrzeugs :
[php]setVehicleColor ( VARIABLE, farbe1, farbe2, farbe3, farbe4 )[/php]
[highlight]Man beachtet : Die Farben sind Integers. Also sie werden per ID hinzugefügt![/highlight]
Hier eine Liste aller ID's :
Als nächstes den Paintjob :
[php]setVehiclePaintjob ( VARIABLE, ID )[/php]
[highlight]Man beachtet : Die ID's sind nicht vorgegeben. Jedes Auto hat gewisse Paintjobs. ID ist ein Integer![/highlight]
Soll das Fahrzeug überhaupt respawnt werden? :
[php]toggleVehicleRespawn ( VARIABLE, true/false )[/php]
Nach wievielen Millisekunden soll das Auto respawnt werden? :
[php]setVehicleRespawnDelay ( VARIABLE, MILLISEKUNDEN)[/php]
Wo soll es respawnt werden? :
[php]setVehicleRespawnPosition ( VARIABLE, x, y, z, rx, ry, rz ] )[/php]
Nochmal alle Codes für Fahrzeuge :
- Spoiler:
- setVehicleColor
- setVehicleDamageProof
- setVehicleDirtLevel
- setVehicleDoorState
- setVehicleDoorsUndamageable
- setVehicleEngineState
- setVehicleFrozen
- setVehicleFuelTankExplodable
- setVehicleIdleRespawnDelay
- setVehicleLandingGearDown
- setVehicleLightState
- setVehicleLocked
- setVehicleOverrideLights
- setVehiclePaintjob
- setVehiclePanelState
- setVehicleRespawnDelay
- setVehicleRespawnPosition
- setVehicleRotation
- setVehicleSirensOn
- setVehicleTurnVelocity
- setVehicleWheelStates
- spawnVehicle
- toggleVehicleRespawn
- getTrainDirection
- getTrainSpeed
- getVehicleHeadLightColor
- getVehicleModelFromName
- getVehicleNameFromModel
- getVehicleType
- isTrainDerailable
- isTrainDerailed
- isVehicleBlown
- isVehicleTaxiLightOn
- setTrainDerailable
- setTrainDerailed
- setTrainDirection
- setTrainSpeed
- setVehicleHeadLightColor
- setVehicleTaxiLightOn
- setVehicleColor
--------------------------------------------------------------
[SIZE="6"]8 Die Ressourcen[/SIZE]
Ressourcen sind manchmal Hilfetools oder ganze gamemodes für MTA. Man kann sie unter [URL="http://community.mtasa.com/index.php?p=resources&s=list&category=1"]MTA COMMUNITY[/URL] finden.
Es gibt einen gewissen hilfreichen Filter, auf der Seite :
Beim "Typ" kann man einstellen was man suchen will :
Die 4 Punkte sollten sich eigentlich von selbst erklären lassen.
Zunächst downloaden wir uns den [URL="http://community.mtasa.com/index.php?p=resources&s=details&id=141"]GUI Editor[/URL]. Dieser sollte uns helfen grafische Benutzeroberflächen zu erstellen. Das wichtige hierbei ist, dass wir die ZIP speichern!
Diese ZIP, kopieren oder verschieben wir in unser server\mods\deathmatch\resources-Verzeichnis. Jetzt geben wir in der Konsole (ganz wichtig)
- Kod:
refresh
- Kod:
start guieditor
- Kod:
/guiedit
So sollte es nun aussehen
--------------------------------------------------------------
[SIZE="6"]9 Jobs hinzufügen[/SIZE]
Nach Anfrage von [URL="http://www.elitepvpers.com/forum/members/3318138-ecstasy_x3.html"]Ecstasy_x3
[/URL], habe ich das hinzugefügt. Ich werde euch hier zeigen wie ihr Jobs hinzufügt. Als Beispiel habe ich einen Truckerjob genommen.
[php]function truckerJob(player,command) -- gibt euch den JOB "TRUCKER"
setElementData(player,"Job", 0)
if getElementData ( player, "Job" ) ~= 0 then
outputChatBox("Du hast bereits einen Job!", player, 255,0,0)
else
setElementData(player, "Job", 3)
outputChatBox("Du bist nun Truckerfahrer! Herzlichen Glückwunsch!", player,0,255,0)
end
end
addCommandHandler("job", truckerJob)
function truckerStart ( thePlayer )
local job = getElementData ( thePlayer, "Job" ) -- liest variable job aus
if ( job == 3 ) then -- wenn job = trucker ist
local ziel = math.random ( 1, 3 ) -- zufall, von 1-3.
truck = createVehicle ( 525, 2367.9216308594, 2754.8811035156, 12.500002861023, 0, 0, 180.75 ) -- Erstellt ein Fahrzeug
setElementDimension ( truck, 10 ) -- Teleportiert den Truck in Dimension 10! Dort sind keine anderen Autos, Objekte!
setElementDimension ( thePlayer, 10 ) -- euch auch
warpPedIntoVehicle ( thePlayer, truck) -- Teleportiert euch in den Wagen
if ( ziel == 1 ) then -- Wenn der Zufall 1 ist
marker1 = createMarker ( 2293.8217773438, 91.259262084961, 26.3359375, "checkpoint", 10, 255, 0, 0, 255, thePlayer ) -- .. erstelle Marker1
blip1 = createBlip ( 2293.8217773438, 91.259262084961, 26.3359375, 19, 2, 255, 0, 0, 255, 0, 99999.0, thePlayer ) -- .. erstelle Blip1 (Blip ist eine Markierung auf der Map)
elseif ( ziel == 2 ) then -- wenn 2
marker2 = createMarker ( 365.3349609375, 2541.84765625, 16.598960876465, "checkpoint", 10, 255, 0, 0, 255, thePlayer ) -- ..
blip2 = createBlip ( 365.3349609375, 2541.84765625, 16.598960876465, 19, 2, 255, 0, 0, 255, 0, 99999.0, thePlayer ) -- ..
elseif ( ziel == 3 ) then -- wenn 3
marker3 = createMarker ( -2264.2666015625, 2304.548828125, 5.5566072463989, "checkpoint", 10, 255, 0, 0, 255, thePlayer ) -- ..
blip3 = createBlip ( -2264.2666015625, 2304.548828125, 5.5566072463989, 19, 2, 255, 0, 0, 255, 0, 99999.0, thePlayer ) -- ..
end
setElementDimension ( blip1, 10 ) -- Alles in Dimension 10
setElementDimension ( blip2, 10 )
setElementDimension ( blip3, 10 )
setElementDimension ( marker1, 10 )
setElementDimension ( marker2, 10 )
setElementDimension ( marker3, 10 )
outputChatBox ( "Fahre zum Zielpunkt!", thePlayer, 0, 255, 0 ) -- Gebe Text in Farbe "Grün" für den Spieler aus
setVehicleEngineState ( truck, true ) -- Starte den Motor
else
outputChatBox ( "Du bist kein Trucker!", thePlayer, 255, 0, 0 ) -- wenn kein Trucker ist, gebe Text aus in "Rot"
end
end
addCommandHandler ( "truckerstart", truckerStart ) -- Wenn "/truckerstart" eingegeben wird, führe Funktion aus
function finishTrucker ( hitPlayer, matchingDimension )
if isElementWithinMarker(hitPlayer, marker1 ) then -- wenn Spieler in Marker ist
outputChatBox ( "Du hast die Mission erfolgreich erfüllt! Hier hast du 9000$!", hitPlayer )
removePedFromVehicle ( hitPlayer ) -- raus aus Fahrzeug
givePlayerMoney ( hitPlayer, 9000 ) -- gebe Geld
setElementDimension ( hitPlayer, 0 ) -- wieder in Dimension 0
setElementPosition ( hitPlayer, 2361.109375, 2778.4375, 10.8203125 )
setPedRotation ( hitPlayer, 90 )
end
if isElementWithinMarker(hitPlayer, marker2 ) then
outputChatBox ( "Du hast die Mission erfolgreich erfüllt! Hier hast du 9000$!", hitPlayer )
removePedFromVehicle ( hitPlayer )
givePlayerMoney ( hitPlayer, 9000 )
setElementDimension ( hitPlayer, 0 )
setElementPosition ( hitPlayer, 2361.109375, 2778.4375, 10.8203125 )
setPedRotation ( hitPlayer, 90 )
end
if isElementWithinMarker(hitPlayer, marker3 ) then
outputChatBox ( "Du hast die Mission erfolgreich erfüllt! Hier hast du 9000$!", hitPlayer )
removePedFromVehicle ( hitPlayer )
givePlayerMoney ( hitPlayer, 9000 )
setElementDimension ( hitPlayer, 0 )
setElementPosition ( hitPlayer, 2361.109375, 2778.4375, 10.8203125 )
setPedRotation ( hitPlayer, 90 )
end
end
addEventHandler ( "onMarkerHit", getRootElement(), finishTrucker ) -- wenn ein Marker berührt wird
[/php]
Alles ist erklärt. Das muss in eine .lua, und dann in die Meta.
--------------------------------------------------------------
[SIZE="6"]10 Interiors[/SIZE]
Was sind Interiors?
- Kod:
Interiors, sind ganz einfach übersetzt, Innenräume. Viele werden schon gesehen haben, wie man einfach zu einem Marker geht und dort dann in das Haus teleportiert wird.
So jetzt wisst ihr was Interiors sind. Nun brauchen wir nur noch den Code dafür. Also wir nehmen das Police Department (LV HQ), platzieren dort eine Markierung mit einem Symbol auf der Map, und erstellen einen Marker im Typ "Corona".
[php]pdmarkeraussen = createMarker( -1605.5, 710, 13.5, "corona", 1, 255, 255, 0, getRootElement()) -- einen Marker außen
pdmarkerinnen= createMarker(246.6, 62.6, 1003.5, 'corona', 1.20000004, 225, 228, 0, 153, getRootElement()) -- und einen innen
setElementInterior(pdmarkerinnen, 6) -- der innere Marker soll im Innenraum mit ID 6 sein
setElementDimension(pdmarkerinnen, 0) -- die Dimension 0
function PDNachInnen(hitPlayer, matchingDimension)
if getPedOccupiedVehicle(hitPlayer) or getElementType(hitPlayer) == "vehicle" then
outputChatBox("Du kannst nicht mit einem Fahrzeug durch diese Tuer!") -- wird ausgegeben, wenn man in einem Fahrzeug ist
else
setElementPosition( hitPlayer, 247, 65, 1003.6599731445) -- teleportiere ihn auf diese Position (Interior 0)
setElementInterior( hitPlayer, 6) -- setze nun sein Interior auf 6
end
end
addEventHandler("onMarkerHit", pdmarkeraussen, PDNachInnen) -- wenn der marker "pdmarkeraussen" berührt wird, führe Funktion aus
function PDNachAussen(hitPlayer, matchingDimension)
setElementPosition(hitPlayer, -1605.3, 713.5, 13.4) -- position
setElementInterior(hitPlayer, 0) -- auf Interior 0
end
addEventHandler("onMarkerHit", pdmarkerinnen, PDNachAussen) -- das Gleiche andersherum
pdBlip = createBlip ( -1605.5, 710, 13.5, 30, 0, 0, 0, 255 )[/php]
Dieser Code ist relativ einfach zu verstehen, und auch sehr wenig. Was uns mehr interessiert :
- Kod:
Wie kriege ich diese InteriorID raus?
Wie kriege ich das Blip Symbol raus?
Interiors :
Die Quelle für diese Liste, steht ja auf den kleinen Thumbnails dabei
- Spoiler:
- Spoiler:
--------------------------------------------------------------
[SIZE="6"]11 Ein Klicksystem[/SIZE]
Auf Anfrage von [URL="http://www.elitepvpers.com/forum/members/3780601-qmafia.html"]Qmafia[/URL], erkläre ich noch wie man ein Klicksystem erstellt.
Dies geht ganz einfach. Sobald der Spieler joint, setzen wir ihm einen "Bind" auf die Taste "m". Bei dieser soll der Cursor eingeblendet werden. Wenn man nun etwas anklickt soll ein Text erscheinen. Das tun wir alles Clientside(!):
[php]function showCurser()
bindKey("m", "down", function() -- wenn wir "m" drücken wird diese Funktion ausgeführt
if isCursorShowing() == true then
showCursor( false)
else
showCursor( true)
end
end)
end
addEventHandler("onClientResourceStart", getRootElement(), showCurser) -- beim Joinen die Funktion showCurser ausführen
function clickOnVehicle(button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedElement )
if isElement(clickedElement) then -- wenn clickedElement ein Element ist
if getElementType(clickedElement) == "vehicle" then -- und es ein Fahrzeug ist
outputChatBox("DU HAST EIN AUTO ANGEKLICKT!") -- text ausgeben
end
end
end
addEventHandler ( "onClientClick", getRootElement(), clickOnVehicle) -- wen man etwas anklickt[/php]
CREDITS : |R.O.X|
[SIZE="6"]WEITERES FOLGT NOCH[/SIZE]
STAND : 20.06.2011 17.44 Uhr, nach Open Office Writer 21 Seiten.[/QUOTE]
EMO- EMO Team
- Cinsiyet :
Burçlar :
Mesaj Sayısı : 184
Puan : 247543
Rep Puanı : 5
Doğum tarihi : 28/11/89
Kayıt tarihi : 18/05/11
Yaş : 34
Nerden : EMO world
İş/Hobiler : RCE Student / Game Hacking / Learn Beginner C#,C++,Delphi
Lakap : EMO
Similar topics
» 1453 Server Files 2.0
» cs 1.6 server list editor
» [Release]VMWare - KO Server
» 1351 Server Dosyaları + Client
» Counter Strike 1.6 Server List
» cs 1.6 server list editor
» [Release]VMWare - KO Server
» 1351 Server Dosyaları + Client
» Counter Strike 1.6 Server List
1 sayfadaki 1 sayfası
Bu forumun müsaadesi var:
Bu forumdaki mesajlara cevap veremezsiniz
Cuma Ağus. 29, 2014 8:33 am tarafından Hello EMO
» goldenchase.net maden yaparak para kazanma
Cuma Ağus. 29, 2014 8:18 am tarafından Hello EMO
» etichal hacker görsel egitim seti
Çarş. Ağus. 06, 2014 4:57 am tarafından Hello EMO
» KO TBL Source C#
Ptsi Ara. 09, 2013 6:36 am tarafından Hello EMO
» x86 Registers
C.tesi Ağus. 24, 2013 5:02 am tarafından Hello EMO
» [Tutorial] Pegando Address, Pointers de WYD
Çarş. Tem. 10, 2013 7:25 am tarafından Hello EMO
» [Tutorial] Pegando Address, Pointers de CS Metodo²
Çarş. Tem. 10, 2013 7:23 am tarafından Hello EMO
» [Tutorial] Aprendendo basico deASM OLLYDBG
Çarş. Tem. 10, 2013 7:22 am tarafından Hello EMO
» Basic C# DLL injector
Ptsi Tem. 08, 2013 7:48 am tarafından Hello EMO