Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding > Coding Tutorials
You last visited: Today at 18:06

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[MTA SA {LUA}] - Server erstellen bis zum Programmierung

Discussion on [MTA SA {LUA}] - Server erstellen bis zum Programmierung within the Coding Tutorials forum part of the General Coding category.

Reply
 
Old   #1
 
|R.o.x|'s Avatar
 
elite*gold: 164
Join Date: Feb 2010
Posts: 1,130
Received Thanks: 1,025
[MTA SA {LUA}] - Server erstellen bis zum Programmierung

Inhaltsverzeichnis
  • 1 Einleitung
  • 2 Server erstellen
  • 3 Gamemode erstellen
  • 3.1 Programme
  • 3.2 Die "meta.xml"
  • 3.3 Scripting
  • 3.4 Willkommen
  • 3.5 Verlassen
  • 3.6 Skin wechseln
  • 3.7 Das erste Kommando
  • 4 Debugging
  • 5 Map-Editor
  • 6 Ein Login mit GUI
  • 7 Objekte per Script einfügen
  • 8 Die Ressourcen
  • 9 Jobs hinzufügen
  • 10 Interior's
  • 11 Ein Klicksystem
  • 12 Ein Gatescript


Hey Leute.


1 Einleitung

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

--------------------------------------------------------------

2 Den Server erstellen

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 : <servername></servername> und ganz unten <resource />. 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"

--------------------------------------------------------------

3 Eigener Gamemode

3.1 Programme

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^^.

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!

3.2 meta.xml

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 :
Code:
<meta>
	<info type="gamemode" author="EUERNAME" name="NameDesGamemodes" version="0.9.3" />
</meta>
3.3 Das SCRIPTEN

3.3.(1) Auskommentieren

Wie in jeder Sprache kann man auch in LUA Zeilen und Texte auskommentieren.
Die beiden Commands zum auskommentieren sind wirklich simple. Es gibt nur :
Code:
-- TEXT
Code:
 --[[ TEXT ]]


3.4 Willkommen

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 "<meta></meta>"-Tags :
Code:
<script src="willkommen.lua" />
Jetzt speichern wir und gehen in unseren SciTe. Dort müssen wir nun das Script erstellen.
Dazu schreiben wir diesen Code rein :
PHP Code:
function willkommen() -- erstellt eine Funktion namens "willkommen"
    
local x -- erstellt die Variable "x" und teilt ihr den Wert 0 zu
    local y 
-- das gleiche nur "y"
    
local z -- "z"
        
local name getPlayerName(source) -- speichert den Namen des Spielers in eine Variable
    spawnPlayer
(sourcexyz) -- positioniert (spawntden Spieler zu der Position (bei uns 0,0,0)
    
fadeCamera(sourcetrue) -- die Kamera wird angezeigt
    setCameraTarget
(sourcesource) -- 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 
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.

3.5 Verlassen

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 Code:
function verlassen()

    
local name getPlayerName(source) -- selbes wie oben

    outputChatBox
(''..name..' hat den Server verlassen!')  -- selbes wie oben

end
addEventHandler
("onPlayerQuit"getRootElement(), verlassen
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.

3.6 Anderer Skin

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 :

Ihr habt den Skin? Dann fügen wir in der Funktion "Willkommen" dies anstatt dem Command "spawnplayer" ein.
PHP Code:
spawnPlayer(sourcexyz07) -- spawnt ihn bei x,y,zDrehung 0° und SKINID 
Macht das gleiche mit dem restart und testet.
So sieht das Script am Ende aus :


3.7 Das erste Kommando

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 Code:
function changeskin thePlayercommandplayerskinid ) -- Eine Funktion wo 4 Variablen angehängt sindthePlayer und command sind einfach nur 2 eigentlich unwichtige Variablenplayer und skinid sind die hauptsächlichenwas heißt der Command lautet "/changeskin player skinid"
        
if player and tonumber(skinidthen -- wenn player und skinid eingetippt wurden
        local playerid 
getPlayerFromNameplayer ) -- speichert den namen in eine variable
        
if playerid then -- wenn sie erfolgreich gespeichert wurde
            setElementModel 
playeridskinid ) -- ä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 "..getPlayerNamethePlayer ).." geändert"playerid) -- ausgeben für den geänderten Spieler
        
else
            
outputChatBox("Der angegebene Spieler existiert nicht!",thePlayer) -- falls der spieler nicht gefunden wirdgebe das aus
        end
        
else
        
outputChatBox("BENUTZUNG: /changeskin [Spieler] [Skin-ID]",thePlayer) -- falls einer der beiden Variablen fehltgebe das aus
        end
end
addCommandHandler
("changeskin"changeskin) -- binde den Command /changeskin an die funktion "changeskin" 
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.

--------------------------------------------------------------

4 Das Debugging

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 :
Code:
<group name="Admin">
        <acl name="Moderator" />
        <acl name="SuperModerator" />
        <acl name="Admin" />
        <acl name="RPC" />
Da drunter fügt ihr diese Zeile ein :
Code:
<object name="user.Wasim" />
Den Namen Wasim ersetzt ihr mit eurem Benutzernamen. Jetzt speichert ihr und schließt sie (!). Danach könnt ihr wieder die Konsole starten und start [ORDNERNAME] eingeben. Jetzt geht ihr ins Spiel und schreibt /login [PASSWORT]. Jetzt sollte eine Nachricht erscheinen wo steht, dass ihr jetzt in den Adminpanel könnt. Das brauchen wir zuerst nicht zu beachten. Wir tippen nun "/debugscript 3" ein, und schauen ob irgendwelche Fehler da sind. Wenn nicht könnt ihr weiterscripten.

--------------------------------------------------------------

5 Der MapEditor

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.
Code:
<map src="NAME.map" dimension="0" />
Jetzt startet ihr euren Gamemode, und solltet das Auto sehen

--------------------------------------------------------------

6 Ein Login mit GUI

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 :
  1. GUI-Scripting/Designing
  2. Server & Client "triggern"
  3. Events
  4. Buttons

Wir fangen erstmal mit dem GUI-Scripting/Designing an. Dazu gibt es ein sehr hilfreiches Tool/Resource namens "guieditor" (). 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 :
Code:
<script src="login.lua" [B]type="client"[/B] />
Also wir öffnen diese mit unserem SciTe und folgen dieses Schritten.
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 Code:
--[[ LOGIN-Script
bei 
|R.o.x|
]]
x,guiGetScreenSize() -- Bildschirmauflösung speichern

LoginWin 
guiCreateWindow(x/150,y/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 LoginWinfalse ) -- macht es unsichtbar




local localPlayer 
getLocalPlayer ( )

function 
windowHandler( )
    
outputChatBox"--LOGIN FENSTER BY |R.o.x|--"getLocalPlayer() )
    
outputChatBox"-------LOG DICH EIN------"getLocalPlayer() )
    
setElementDatagetLocalPlayer(), "LoggedIn"false ) -- speichert das man nicht eingeloggt ist
    local playername 
getPlayerName(localPlayer) -- speichert name

    guiSetText
(LoginUsername"")
    
guiSetText(EditRegisterUsername"")

    
guiSetSelectedTab(TabPanelTabLogin)

    
guiSetText(LoginUsernameplayername)
    
guiSetText(EditRegisterUsernameplayername)

    
guiSetVisible LoginWintrue ) -- 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 buttonstate ) -- wenn button geklickt wurde
    
if (button == "left" and state == "up"then
        
if (source == BtnActionthen
            
if (guiGetSelectedTab(TabPanel) == TabLoginthen
                triggerServerEvent 
"onLogin"getRootElement(), localPlayerguiGetText(LoginUsername), guiGetText(LoginPassword) ) -- TRIGGERT DAS SERVER EVENT!
            else
                
triggerServerEvent "onRegister"getRootElement(), localPlayerguiGetText(EditRegisterUsername), guiGetText(EditRegisterPassword), guiGetText(EditRegisterEmail)  )
            
end
        end
    end
end
addEventHandler
"onClientGUIClick"BtnActiononClickBtnfalse ) -- Event wenn Button angeklickt wird

function onEnterLogin buttonstate 
    if (
guiGetSelectedTab(TabPanel) == TabLoginthen
        triggerServerEvent 
"onLogin"getRootElement(), localPlayerguiGetText(LoginUsername), guiGetText(LoginPassword) )
    else
        
triggerServerEvent "onRegister"getRootElement(), localPlayerguiGetText(EditRegisterUsername), guiGetText(EditRegisterPassword), guiGetText(EditRegisterEmail)  )
    
end
end
addEventHandler
"onClientGUIAccepted",LoginPasswordonEnterLogin,false)
addEventHandler"onClientGUIAccepted",EditRegisterPasswordonEnterLogin,false)

function 
hideLoginWindow() -- Macht alles unsichtbar
    guiSetInputEnabled
(false)
    
guiSetVisible LoginWinfalse )
    
showCursor false )
end
addEvent
"hideLoginWindow"true )
addEventHandler"hideLoginWindow"getRootElement(), hideLoginWindow 
Das war das Clientsidescript. Jetzt kommt das Server script :

PHP Code:
function onLogin playeruserpass )
local login logIn thePlayeruserpass )
    if (
loginthen

        
if (clientthen
            spawnPlayer
(client000)
            
fadeCamera(clienttrue)
            
setCameraTarget(clientclient)
            
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 playeruserpassemail )
    
local account addAccountuserpass )
        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 
Beim serverside erkläre ich nichts, weil wenn ihr euch das vorher durchgelesen habt es selbstverständlich ist.


--------------------------------------------------------------

7 Objekte per Script

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 Code:
VARIABLE createVehicle MODELxyzrx°ry°rz°"SCHILD" 
Es ist wirklich sehr einfach zu verwenden, und es ist z.B. für ein CarSystem sehr hilfreich. Man beachtet : alles sind floats

Das nächste ist, die Farbe des Fahrzeugs :
PHP Code:
setVehicleColor VARIABLEfarbe1farbe2farbe3farbe4 
Man beachtet : Die Farben sind Integers. Also sie werden per ID hinzugefügt!
Hier eine Liste aller ID's :


Als nächstes den Paintjob :
PHP Code:
setVehiclePaintjob VARIABLEID 
Man beachtet : Die ID's sind nicht vorgegeben. Jedes Auto hat gewisse Paintjobs. ID ist ein Integer!

Soll das Fahrzeug überhaupt respawnt werden? :
PHP Code:
toggleVehicleRespawn VARIABLEtrue/false 
Nach wievielen Millisekunden soll das Auto respawnt werden? :
PHP Code:
setVehicleRespawnDelay VARIABLEMILLISEKUNDEN
Wo soll es respawnt werden? :
PHP Code:
setVehicleRespawnPosition VARIABLExyzrxryrz ] ) 
Nochmal alle Codes für Fahrzeuge :

--------------------------------------------------------------

8 Die Ressourcen

Ressourcen sind manchmal Hilfetools oder ganze gamemodes für MTA. Man kann sie unter 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 . 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)
Code:
refresh
ein. Die neue Ressource sollte erkannt werden. Jetzt geben wir
Code:
start guieditor
ein. So nun gehen wir auf den Server und tippen
Code:
/guiedit
ein, oder drücken ganz einfach SHIFT+G.

So sollte es nun aussehen

--------------------------------------------------------------

9 Jobs hinzufügen

Nach Anfrage von , habe ich das hinzugefügt. Ich werde euch hier zeigen wie ihr Jobs hinzufügt. Als Beispiel habe ich einen Truckerjob genommen.

PHP Code:
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!"player255,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 == then -- wenn job trucker ist
            local ziel 
math.random 1) -- zufallvon 1-3. 
            truck 
createVehicle 5252367.92163085942754.881103515612.50000286102300180.75 ) -- Erstellt ein Fahrzeug
            setElementDimension 
truck10 ) -- Teleportiert den Truck in Dimension 10Dort sind keine anderen AutosObjekte!
            
setElementDimension thePlayer10 ) -- euch auch
            warpPedIntoVehicle 
thePlayertruck) -- Teleportiert euch in den Wagen
                
if ( ziel == then -- Wenn der Zufall 1 ist
                    marker1 
createMarker 2293.821777343891.25926208496126.3359375"checkpoint"1025500255thePlayer ) -- .. erstelle Marker1
                    blip1 
createBlip 2293.821777343891.25926208496126.335937519225500255099999.0thePlayer ) -- .. erstelle Blip1 (Blip ist eine Markierung auf der Map)
                elseif ( 
ziel == then -- wenn 2
                    marker2 
createMarker 365.33496093752541.8476562516.598960876465"checkpoint"1025500255thePlayer ) -- ..
                    
blip2 createBlip 365.33496093752541.8476562516.59896087646519225500255099999.0thePlayer ) -- ..
                elseif ( 
ziel == then -- wenn 3
                    marker3 
createMarker ( -2264.26660156252304.5488281255.5566072463989"checkpoint"1025500255thePlayer ) -- ..
                    
blip3 createBlip ( -2264.26660156252304.5488281255.556607246398919225500255099999.0thePlayer ) -- ..
                
end
                setElementDimension 
blip110 ) -- Alles in Dimension 10
                setElementDimension 
blip210 )
                
setElementDimension blip310 )
                
setElementDimension marker110 )
                
setElementDimension marker210 )
                
setElementDimension marker310 )

            
outputChatBox "Fahre zum Zielpunkt!"thePlayer0255) -- Gebe Text in Farbe "Grün" für den Spieler aus
            setVehicleEngineState 
trucktrue ) -- Starte den Motor
        
else
            
outputChatBox "Du bist kein Trucker!"thePlayer2550) -- wenn kein Trucker istgebe Text aus in "Rot"
        
end
end
addCommandHandler 
"truckerstart"truckerStart ) -- Wenn "/truckerstart" eingegeben wirdführe Funktion aus

function finishTrucker hitPlayermatchingDimension )
if  
isElementWithinMarker(hitPlayermarker1 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 
hitPlayer9000 ) -- gebe Geld
        setElementDimension 
hitPlayer) -- wieder in Dimension 0
        setElementPosition 
hitPlayer2361.1093752778.437510.8203125 )
        
setPedRotation hitPlayer90 )
end
if  isElementWithinMarker(hitPlayermarker2 then
        outputChatBox 
"Du hast die Mission erfolgreich erfüllt! Hier hast du 9000$!"hitPlayer )
        
removePedFromVehicle hitPlayer )
        
givePlayerMoney hitPlayer9000 )
        
setElementDimension hitPlayer)
        
setElementPosition hitPlayer2361.1093752778.437510.8203125 )
        
setPedRotation hitPlayer90 )
end
if  isElementWithinMarker(hitPlayermarker3 then
        outputChatBox 
"Du hast die Mission erfolgreich erfüllt! Hier hast du 9000$!"hitPlayer )
        
removePedFromVehicle hitPlayer )
        
givePlayerMoney hitPlayer9000 )
        
setElementDimension hitPlayer)
        
setElementPosition hitPlayer2361.1093752778.437510.8203125 )
        
setPedRotation hitPlayer90 )
end
end
addEventHandler 
"onMarkerHit"getRootElement(), finishTrucker ) -- wenn ein Marker berührt wird 
Alles ist erklärt. Das muss in eine .lua, und dann in die Meta.

--------------------------------------------------------------

10 Interiors

Was sind Interiors?
Code:
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 Code:
pdmarkeraussen createMarker( -1605.571013.5"corona"12552550getRootElement()) -- einen Marker außen
pdmarkerinnen
createMarker(246.662.61003.5'corona'1.200000042252280153getRootElement()) -- und einen innen
setElementInterior
(pdmarkerinnen6) -- der innere Marker soll im Innenraum mit ID 6 sein
setElementDimension
(pdmarkerinnen0) -- die Dimension 0

function PDNachInnen(hitPlayermatchingDimension)

if 
getPedOccupiedVehicle(hitPlayer) or getElementType(hitPlayer) == "vehicle" then
outputChatBox
("Du kannst nicht mit einem Fahrzeug durch diese Tuer!") -- wird ausgegebenwenn man in einem Fahrzeug ist
else
setElementPositionhitPlayer247651003.6599731445) -- teleportiere ihn auf diese Position (Interior 0)
setElementInteriorhitPlayer6) -- setze nun sein Interior auf 6

end
end

addEventHandler
("onMarkerHit"pdmarkeraussenPDNachInnen) -- wenn der marker "pdmarkeraussen" berührt wirdführe Funktion aus




function PDNachAussen(hitPlayermatchingDimension)

setElementPosition(hitPlayer, -1605.3713.513.4) -- position
setElementInterior
(hitPlayer0) -- auf Interior 0

end

addEventHandler
("onMarkerHit"pdmarkerinnenPDNachAussen) -- das Gleiche andersherum

pdBlip 
createBlip ( -1605.571013.530000255 
Dieser Code ist relativ einfach zu verstehen, und auch sehr wenig. Was uns mehr interessiert :
Code:
Wie kriege ich diese InteriorID raus?
Wie kriege ich das Blip Symbol raus?
Ganz einfach. Dafür gibts wie bei allem, eine Liste
Interiors :
Die Quelle für diese Liste, steht ja auf den kleinen Thumbnails dabei
Blips :

--------------------------------------------------------------

11 Ein Klicksystem
Auf Anfrage von , 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 Code:
function showCurser()
bindKey("m""down", function() -- wenn wir "m" drücken wird diese Funktion ausgeführt
if isCursorShowing() == true then
    showCursor
false)
else
    
showCursortrue)
end
end
)
end
addEventHandler
("onClientResourceStart"getRootElement(), showCurser) -- beim Joinen die Funktion showCurser ausführen
function clickOnVehicle(buttonstateabsoluteXabsoluteYworldXworldYworldZclickedElement )
    if 
isElement(clickedElementthen -- 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 
--------------------------------------------------------------

12 Ein Gatescript

Auf Anfrage von :
Wir erstellen ein Tor (Position:0,0,5) und setzen eine Variable das er oben ist. Wenn wir /g eingeben dann prüfen wir ob wir uns nah genug am Tor befinden (8 Einheiten). Falls das Tor oben ist, setzen wir es in innerhalb von 3 Sekunden nach unten. Wenn nicht nach oben.
PHP Code:
theGate createObject(980,0,0,5,0,0,24)
local downornot false

function moveGate(player)
x,y,getElementPosition(player)
x1,y1,z1 getElementPosition(theGate)
        if 
getDistanceBetweenPoints3D(x1,y1,z1,x,y,z) < 8 then
            
if downornot == false then
                moveObject 
(theGate30000,0,-10,0,0,0)
                
downornot true
            
else
                
moveObject (theGate30000,0,5,0,0,0)
                
downornot false
            end
        end
end
addCommandHandler
("g",moveGate
CREDITS : |R.O.X|


WEITERES FOLGT NOCH


STAND : 16.04.2012 17.44 Uhr, nach MS Office 25 Seiten.
|R.o.x| is offline  
Thanks
48 Users
Old 06/21/2011, 16:36   #2
 
[D-E]Energy's Avatar
 
elite*gold: 3
Join Date: Mar 2011
Posts: 1,177
Received Thanks: 238
Nice, Danke
kannst du auch zeigen wie man Jobs macht?
z.B. LKW Fahrer?
Man muss zu einen Punkt fahren-->Da muss man LKW Holen-->Ab da weiter fahren-->Zu einen Punkt ankommen, dort aufladen,dafür z.b. 4000 $Bezahlen---> woandershin fahren (frei generiert (zu einer Firma)) dort abgeben,9000bezahlt bekommen -->Schritt 4 bis 5 Wiederholen.

Nach diesen Algorithmus soll das alles ablaufen (;
Wäre sehr nett (;
[D-E]Energy is offline  
Old 06/22/2011, 13:10   #3
 
|R.o.x|'s Avatar
 
elite*gold: 164
Join Date: Feb 2010
Posts: 1,130
Received Thanks: 1,025
So hinzugefügt
Viel Spaß

Achso. Was du selbst machen musst :
- die Blips und Marker beim Beenden löschen
- Den Truck löschen

Sonst ist alles gemacht
Sorry, aber mehr Zeit hatte ich nicht xD
|R.o.x| is offline  
Thanks
1 User
Old 06/22/2011, 16:50   #4
 
[D-E]Energy's Avatar
 
elite*gold: 3
Join Date: Mar 2011
Posts: 1,177
Received Thanks: 238
muss man den Job jetzt z.B in einen Arbeitsamt oder ähnlich annehmen?^^
[D-E]Energy is offline  
Old 06/22/2011, 17:15   #5
 
|R.o.x|'s Avatar
 
elite*gold: 164
Join Date: Feb 2010
Posts: 1,130
Received Thanks: 1,025
Nein, einfach /job eingeben. Dann hast du JobID 3.
Wenn du ein Arbeitsamt willst, erstelle einen Marker und gebe dann eine Nachricht aus und setze die JobID auf 3
Als nächster Part kommen "Interiors". Da zeige ich wie man begehbare Häuser scriptet.
|R.o.x| is offline  
Old 06/28/2011, 19:57   #6
 
voiD Art's's Avatar
 
elite*gold: 0
Join Date: Oct 2007
Posts: 693
Received Thanks: 45
Nicht schlecht
Du solltest aber auch noch nen bisschen mehr theoretisches zum Client-
und Serverseitigen erklären, da die meisten nicht wissen warum und wo was besser ist.

Der Rest ist nicht schlecht wobei man die Kommentare im Script nicht so leicht erkennt

Für Anfänger ganz nützlich, script auch schon ne weile in MTA


lg,
voiD
voiD Art's is offline  
Old 07/09/2011, 15:23   #7
 
elite*gold: 0
Join Date: Jul 2011
Posts: 1
Received Thanks: 1
Hallo,
kannst du auch noch sagen wie man Spieler als Punkte auf der Karte makiert??
Und noch ein Paar Jobs wären cool
Und dass wenn man in makieeungen läuft sich ein GUI Fenster öffnet!
Und wie man ein GUI Fenster programmiert! Also kostenlose autos, Skin ändern u.s.w

DANKE
maxxel9 is offline  
Thanks
1 User
Old 07/23/2011, 22:44   #8
 
|R.o.x|'s Avatar
 
elite*gold: 164
Join Date: Feb 2010
Posts: 1,130
Received Thanks: 1,025
Hey, lese dir mal alles durch, du solltest die einzelnen Teile finden
Also für die Spielerpunkte :
Blips
getElementPosition
-----
Du erstellst Blips, bei der Position vom Spieler, und schreibst die in das Event "OnResourceStart".

-----------
Markierungen sind ganz einfach :
onMarkerHit Event, GUI anzeigen auch ganz einfach
-----------
GUI Fenster ist doch erklärt oder? Punkt 6.
Ich führe alles in 2 Wochen weiter, bin grade in Ferien
|R.o.x| is offline  
Old 07/27/2011, 17:12   #9
 
elite*gold: 0
Join Date: Jun 2011
Posts: 2
Received Thanks: 0
Hey geiles tutorial hab nur ein problem sobald ich das willkommens panel gescriptet habe kann man das f1 cheat tool nicht mehr benutzen könntest du dafür vllt. auch ein tutorial machen?
TUSgvi1 is offline  
Old 07/30/2011, 19:54   #10
 
elite*gold: 0
Join Date: Jul 2011
Posts: 1
Received Thanks: 0
Ich hab ein Problem. Bei mir sagt der, nach dem ich das Willkommen-Scipt eingefügt habe:

ERROR: Coundn't find meta.xml file for recourse "NAME"

Als welche Datei soll ich "meta.xml" erstellen. Ich habe es jetzt als textdokument erstellt. Sorry, aber es ist für mich alles Neuland!
[GGR]Viper is offline  
Old 08/04/2011, 09:25   #11
 
StylezZxDmg's Avatar
 
elite*gold: 0
Join Date: Jun 2011
Posts: 353
Received Thanks: 64
Ich script auch schon eine ganze weile, und wer ein jobscript macht sollte es lieber clientside und serverside machen, da es ja sonst jeder klauen kann. Also mit triggerClient/ServerEbent. Nur so ein Tipp an Leute die scripten lernen bollen
StylezZxDmg is offline  
Old 08/05/2011, 18:32   #12
 
|R.o.x|'s Avatar
 
elite*gold: 164
Join Date: Feb 2010
Posts: 1,130
Received Thanks: 1,025
@Stylez ja das stimmt, füge ich auch noch ein.
@TusGVI ich kann deine Scripts nicht riechen, source wäre gut
@Viper kommt davon wenn man nur C&P macht. Lese es dir durch. Editor öffnen -> Speichern Unter.. -> Alle Formate -> NAME : "meta.xml"
|R.o.x| is offline  
Old 08/10/2011, 16:06   #13
 
elite*gold: 35
Join Date: Apr 2011
Posts: 52
Received Thanks: 3
Viel zu schwer zu machst einfach ein fertiges Script rein und erklärst die hälfte garnicht zb. mit dem einlog script ein fertiges ohne richtiger erklärung und das funkt nichtmal bei mir kommt da i-ein fehler mit http
esele is offline  
Old 08/11/2011, 14:40   #14
 
elite*gold: 0
Join Date: Apr 2011
Posts: 1,426
Received Thanks: 138
Wirklich gut erklärt
ProstylerXx is offline  
Old 08/11/2011, 19:14   #15
 
|R.o.x|'s Avatar
 
elite*gold: 164
Join Date: Feb 2010
Posts: 1,130
Received Thanks: 1,025
Quote:
Originally Posted by esele View Post
Viel zu schwer zu machst einfach ein fertiges Script rein und erklärst die hälfte garnicht zb. mit dem einlog script ein fertiges ohne richtiger erklärung und das funkt nichtmal bei mir kommt da i-ein fehler mit http
Lol Jeder einzele Command ist erklärt.
Um was wetten wir das du das Tutorial nicht durchgelesen hast, das Script kopiert und dann gewundert hast wieso es nicht funzt?

Ein Tipp :
Für scripten/programmmieren braucht man einen gewissen Teil an Verstand und Logik.
|R.o.x| is offline  
Reply


Similar Threads Similar Threads
C++ Programmierung
06/15/2011 - Kal Online - 29 Replies
Hallo ich habe da mal wieder eine bzw. gleich ein paar Fragen und würde mich freuen wenn mir dabei jemand helfen kann. Ich wollte fragen ob jemand weiß wie ich in C++ ein Pixelsearch angebe und einmal rechte und linke Maustase sowie ich eine Spacetaste schicke an kalonline. ich habe versucht mich mal mit google und tuts zu informieren jedoch finde ich dann zb das: for (int a=0; a<(dx*dy); a++) { if (*(COLORREF*)memory == RGB(suchende r,g,b)) {
DO programmierung
12/16/2010 - Browsergames - 10 Replies
hey hab mal eine frage in was ist do eigt programmiert? in C++?? könnte man eigt wenn man C++ lernt sowas selber erstellen oder so? also zb wenn man es sehr gut beherscht. hoffe ein erfahrender Programmierer antowrtet
Kal-Programmierung
11/26/2007 - Kal Online - 81 Replies
HuHu, ich "versuche" mal die Kal-Sektion zu verbessern jeder nder irgendwelche Code's für Kal hat kann sie hier mal posten, ihr könnt sie ja ruhig coden hat sogar noob schutz weil eh nicht jeder damit umgehn kann =) hehe Dieser eine Code der Hochgeladen wurde: ///////////////////////////////////////////////// ///////////////////// // ClientCore.cpp // -------------------------------------------------- ----------------- // Default Client Dll entrypoint....
Programmierung
07/15/2007 - Kal Online - 9 Replies
Hey alle zusammen bin neu hier. Wollte jetzt zu den Sommerferien das Programmieren anfangen und lernen wie man ein khi programmiert. :) Könnte mir da jemand helfen? BIG THX Ps:Wenn das gerade irgenndwie gegen die regeln verstöst bitte closen :S hoffe mal net. EDIT:Hab in der Tutorial abteilung nix gefunden



All times are GMT +2. The time now is 18:06.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.