[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
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"
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 :
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 = 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
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(source, x, y, z, 0, 7) -- spawnt ihn bei x,y,z, Drehung : 0° und SKINID : 7
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 ( 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"
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.
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 :
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.
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
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] />
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 :
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
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 )
Das war das Clientsidescript. Jetzt kommt das Server script :
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 )
Beim serverside erkläre ich nichts, weil wenn ihr euch das vorher durchgelesen habt es selbstverständlich ist.
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 :
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
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
Alles ist erklärt. Das muss in eine .lua, und dann in die Meta.
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.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
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
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)
CREDITS : |R.O.X|
WEITERES FOLGT NOCH
STAND : 16.04.2012 17.44 Uhr, nach MS Office 25 Seiten.
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 (;
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.
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
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
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
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?
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
@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"
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
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.
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