- 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.(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" />
Dazu schreiben wir diesen Code rein :
PHP Code:
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
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)
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(source, x, y, z, 0, 7) -- spawnt ihn bei x,y,z, Drehung : 0° und SKINID : 7
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 ( 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"
--------------------------------------------------------------
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" />
Code:
<object name="user.Wasim" />
--------------------------------------------------------------
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" />
--------------------------------------------------------------
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 :
- 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" (). 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] />
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,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 Code:
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 )
--------------------------------------------------------------
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 ( MODEL, x, y, z, rx°, ry°, rz°, "SCHILD" )
Das nächste ist, die Farbe des Fahrzeugs :
PHP Code:
setVehicleColor ( VARIABLE, farbe1, farbe2, farbe3, farbe4 )
Hier eine Liste aller ID's :
Als nächstes den Paintjob :
PHP Code:
setVehiclePaintjob ( VARIABLE, ID )
Soll das Fahrzeug überhaupt respawnt werden? :
PHP Code:
toggleVehicleRespawn ( VARIABLE, true/false )
PHP Code:
setVehicleRespawnDelay ( VARIABLE, MILLISEKUNDEN)
PHP Code:
setVehicleRespawnPosition ( VARIABLE, x, y, z, rx, ry, rz ] )
--------------------------------------------------------------
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
Code:
start guieditor
Code:
/guiedit
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!", 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
--------------------------------------------------------------
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.
PHP Code:
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 )
Code:
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
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
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
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,z = getElementPosition(player)
x1,y1,z1 = getElementPosition(theGate)
if getDistanceBetweenPoints3D(x1,y1,z1,x,y,z) < 8 then
if downornot == false then
moveObject (theGate, 3000, 0,0,-10,0,0,0)
downornot = true
else
moveObject (theGate, 3000, 0,0,5,0,0,0)
downornot = false
end
end
end
addCommandHandler("g",moveGate)
WEITERES FOLGT NOCH
STAND : 16.04.2012 17.44 Uhr, nach MS Office 25 Seiten.