Abend,
entschuldigung für den Doppelpost jetzt aber das Problem wurde gelöst.
Die vorhandene mta_mysql.so war wahrscheinlich mit einer Compilerversion compiliert worden, den das
System nicht gefallen hat.
Also haben wir fix das Ding selber compiliert und schwupp es geht.
Also wenn ich das Problem auch mal habt Einfach selber compilieren.
mfg
Beiträge von Phill
-
-
Abend,
so habse gesetzt und es wieder ausprobiert. Es kommt immer noch der "Speicherzugriffsfehler"
mfg -
Das ist ein 32 Bit Lenny.
mfg -
Morgen,
ich hatte mich längere Zeit hier nicht gemeldet da ich andere Probleme mitn Server hatte.
Nun bin ich wieder da, und will endlich meinen Mod anfangen der auch auf MySQL Basis laufen soll.
Die Version 1.0 wurde auf dem Debian erfolgreich Compiliert und funktioniert einwandfrei.
Dann habe ich das mta_mysql.so modul geladen und in der Conf angegeben.
Funktioniert so weit ohne Probleme.
Nun jedoch,
sobald ich eine MySQL Funktion nutze schmiert mir der Server ab.
Meist kommt "Speicherzugriffsfehler" oder einfach das hier:
b7bce000-b7bcf000 rw-p b7bce000 00:00 0
b7bcf000-b7c0f000 r-xp 00000000 08:01 2208958 /usr/lib/libldap_r-2.4.so.2.1.0
b7c0f000-b7c11000 rw-p 0003f000 08:01 2208958 /usr/lib/libldap_r-2.4.so.2.1.0...
...
...
b7c11000-b7c12000 rw-p b7c11000 00:00 0bfbb7000-bfbcc000 rw-p bffeb000 00:00 0 [stack]
AbgebrochenDas Modul wird auch richtig beim Serverstart mit geladen ohne Fehler.
Es tritt erst auf, wenn das Script eine MySQL Funktion nutzt.
Was kann ich da nun machen? Kennt jemand von euch das Problem damit?
mfg -
Hallo,
normalerweise wird wenn man triggerServerEvent das Playerobject mit übergeben wenn man keine Argumente anhängt.
Ich muss allerdings argumente anhängen, jedoch fehlt mir nun das PlayerObject in der entsprechenden Funktion.
Hab schon alles durchgetestet was mir eingefallen ist.
Hier mal der Code:
Client Script:
Dazu das Server script:Codefunction CheckUserLogin(username, password) ... end addEvent("SubmitLogin", true) addEventHandler("SubmitLogin", getRootElement(), CheckUserLogin)
So, wie bekomme ich das PlayerObject nun in die Funktion CheckUserLogin(username, password) ???
mfg -
-
Naja du musst doch nur das Feld auslesen und sagen
if feld == "" then
bla bla
end
sollte an sich reichen -
Sorry für den Doppelpost.
Also meine Version geht nun:Code
Alles anzeigenfunction CreateFahrzeugMenue() local X = 0.375 local Y = 0.375 local Width = 0.3 local Height = 0.25 local fwindow = guiCreateWindow ( X, Y, Width, Height, "FahrzeugMenue", true ) X = 0.0625 Y = 0.2 Width = 0.25 Height = 0.25 guiCreateLabel(X, Y, Width, Height, "Besitzer", true, fwindow) Y = 0.5 guiCreateLabel(X, Y, Width, Height, "Kennzeichen", true, fwindow) Y = 0.8 guiCreateLabel(X, Y, Width, Height, "Farbe", true, fwindow) Y = 1.1 X = 0.415 Y = 0.2 Width = 0.3 Height = 0.15 editBesitzer = guiCreateEdit(X, Y, Width, Height, "", true, fwindow) Y = 0.5 editKennzeichen = guiCreateEdit(X, Y, Width, Height, "", true, fwindow) Y = 0.8 Width = 0.1 editFarbe1 = guiCreateEdit(X,Y,Width,Height,"",true,fwindow) X = 0.55 editFarbe2 = guiCreateEdit(X,Y,Width,Height,"",true,fwindow) guiEditSetMaxLength(editBesitzer, 10) guiEditSetMaxLength(editKennzeichen, 6) guiEditSetMaxLength(editFarbe1,2) guiEditSetMaxLength(editFarbe2,2) X = 0.8 Y = 0.2 Width = 0.15 Height = 0.15 btnSelf = guiCreateButton(X, Y, Width, Height, "SELF", true, fwindow) X = 0.8 Y = 0.5 Width = 0.15 Height = 0.15 btnRandom = guiCreateButton(X, Y, Width, Height, "RANDOM", true, fwindow) X = 0.8 Y = 0.8 Width = 0.15 Height = 0.15 btnErzeugen = guiCreateButton(X, Y, Width, Height, "ERZEUGEN", true, fwindow) --showCursor(true) --guiWindowSetMovable ( fwindow, false ) --guiWindowSetSizable ( fwindow, false ) addEventHandler ( "onClientGUIClick", btnSelf, SelfEinschreibung) end --addEventHandler("onResourceStart", getRootElement(),CreateFahrzeugMenue) addEventHandler("onClientResourceStart", getRootElement(), function() CreateFahrzeugMenue() if (fwindow ~= nil) then guiSetVisible(fwindow, true) end showCursor(true) guiSetInputEnabled(true) end ) addCommandHandler("test",CreateFahrzeugMenue) function SelfEinschreibung(button) if button == "left" then local localPlayerName = getPlayerName(getLocalPlayer()) guiSetText(editBesitzer, localPlayerName) end end
Folgende Änderung:
Das heist onClientResourceStart und nicht onResourceStart (Denn du bist hier auf einem Client)
Und wie du das Fenster aufgerufen hattest war etwas unsauber.
Ansonsten geht es nun so weit.
mfg -
-
Zeige mal bitte den Quellcode den du dafür erstellt hast.
Sprich, Die Funktion wo das Fenster erstellt wird, die passendes EventHandler und die Button Funktion.
Damit kann man die Reihenfolge nachschauen ob alles auch stimmt und ich kann es evtl. selber mal testen wo der Fehler liegt.
mfg -
Probiere mal sowas erstmal:
guiSetText(editBesitzer,"TestName")
Wenn er das nicht machen sollte, dann weis er nicht auf welches Fenster er zugreifen soll.
Wenn er es allerdings macht, dann gibt es ein Problem bei getPlayerName(..)
Sag mal bescheid was von beidem zutrifft!
mfg -
Ah, da haben wir es ja auch schon.
Schau dir das hier mal an:Code
Alles anzeigenfunction CreateLoginWindow() local X = 0.375 local Y = 0.375 local Width = 0.25 local Height = 0.25 wdwLogin = guiCreateWindow(X, Y, Width, Height, "Login Fenster", true) X = 0.0825 Y = 0.2 Width = 0.25 Height = 0.25 guiCreateLabel(X, Y, Width, Height, "Username", true, wdwLogin) Y = 0.5 guiCreateLabel(X, Y, Width, Height, "Password", true, wdwLogin) X = 0.415 Y = 0.2 Width = 0.5 Height = 0.15 edtUser = guiCreateEdit(X, Y, Width, Height, "", true, wdwLogin) Y = 0.5 edtPass = guiCreateEdit(X, Y, Width, Height, "", true, wdwLogin) guiEditSetMaxLength(edtUser, 50) guiEditSetMaxLength(edtPass, 50) X = 0.415 Y = 0.7 Width = 0.25 Height = 0.2 btnLogin = guiCreateButton(X, Y, Width, Height, "Log In", true, wdwLogin) guiSetVisible(wdwLogin, true) addEventHandler("onClientGUIClick", btnLogin, clientSubmitLogin, false) end function clientSubmitLogin(button) if button == "left" then triggerServerEvent("SubmitLogin", getRootElement(), guiGetText(edtUser), guiGetText(edtPass)) guiSetInputEnabled(false) guiSetVisible(wdwLogin, false) showCursor(false) end end
Das soll zeigen, die Abfrage "onClientGUIClick" muss dort hinzugefügt werden, wo du das Fenster erstellst!!
Weil sonst weis der EventHandler nicht von welchem Fenster die Rede ist!mfg
-
Hi,
wo startets du den AddEventHandler?
Also wo hast du diese Zeile reingeschrieben? Das ist ja wichtig wegen dem Aufbau vom MTA.
Wenn du das an die falsche Stelle setzt, weis er nicht mehr wo das hin gehört.
mfg -
Hi,
schön das du dich für MTA und Lua entschieden hast und ein herzlichen Willkommen.
Etwas Talent wäre nicht schlecht ist aber zwingend nicht notwendig.
Um viel über Lua zu lernen wären gute Englisch kenntnisse sehr von Vorteil, da die meisten Tutorials, Foren, Chats auf Englisch sind.
Ein Anfang würde ich hier machen:
http://development.mtasa.com/index.php?title=Main_Page
Dann hier im Forum gibt es auch einige User die sich die Mühe gemacht haben, ein Tutorial gehschrieben haben:
http://forum.mta-sa.de/index.php?page=Board&boardID=16
Als Editor kannst du jeden nehmen, allerdings empfehle ich dir den Notepad++
http://notepad-plus.sourceforge.net/de/site.htm
Ansonsten, andere Scripts angucken die du im Netz findest und rumprobieren was du willst.
Wenn Fragen entstehen sollten, einfach uns hier fragen
mfg Phill -
Hallo,
und zwar habe ich ein Login Fenster geschrieben, und wenn man sich Fehlerhaft einloggt kommt ein Error Fenster und danach das Login Fenster erneut.
Meine Frage bezieht sich nun darauf ob der Aufbau richtig ist.
Sprich ich habe es getestet und es funktioniert auch soweit, allerdings weis ich jetzt nicht wegen Variablen Freigeben etc., ob sich das nicht überlaufen könnte.
Hier mal der Quellcode:
server.lua:Code
Alles anzeigenfunction joinHandler() triggerClientEvent ( "wdwLoginShow", getRootElement() ) MY_MYSQL_Connect() end function CheckUserLogin(username, password) if username == "user" then local x,y,z x = 1959.55 y = -1714.46 z = 10 spawnPlayer(client, x, y, z) fadeCamera(client, true) outputChatBox("Willkommen auf meinem Testserver", client) else outputChatBox("Deine Angaben sind falsch!", client) triggerClientEvent ( "wdwLoginError", getRootElement() ) end end function MY_MYSQL_Connect() local handler = mysql_connect("localhost", "root", "", "database") -- Establish the connection if ( not handler ) then -- The connection failed outputDebugString("Unable to connect to the MySQL server") else mysql_close(handler) -- Close the connection end end addEventHandler("onPlayerJoin", getRootElement(), joinHandler) addEvent("SubmitLogin", true) addEventHandler("SubmitLogin", getRootElement(), CheckUserLogin)
client.luaCode
Alles anzeigenfunction CreateLoginWindow() local X = 0.375 local Y = 0.375 local Width = 0.25 local Height = 0.25 wdwLogin = guiCreateWindow(X, Y, Width, Height, "Login Fenster", true) X = 0.0825 Y = 0.2 Width = 0.25 Height = 0.25 guiCreateLabel(X, Y, Width, Height, "Username", true, wdwLogin) Y = 0.5 guiCreateLabel(X, Y, Width, Height, "Password", true, wdwLogin) X = 0.415 Y = 0.2 Width = 0.5 Height = 0.15 edtUser = guiCreateEdit(X, Y, Width, Height, "", true, wdwLogin) Y = 0.5 edtPass = guiCreateEdit(X, Y, Width, Height, "", true, wdwLogin) guiEditSetMaxLength(edtUser, 50) guiEditSetMaxLength(edtPass, 50) X = 0.415 Y = 0.7 Width = 0.25 Height = 0.2 btnLogin = guiCreateButton(X, Y, Width, Height, "Log In", true, wdwLogin) guiSetVisible(wdwLogin, true) addEventHandler("onClientGUIClick", btnLogin, clientSubmitLogin, false) end function CreateErrorWindow() local X = 0.375 local Y = 0.375 local Width = 0.25 local Height = 0.25 wdwError = guiCreateWindow(X, Y, Width, Height, "Error", true) X = 0.415 Y = 0.7 Width = 0.25 Height = 0.2 btnOK = guiCreateButton(X, Y, Width, Height, "Log In", true, wdwError) addEventHandler("onClientGUIClick", btnOK, clientSubmitError, false) end function clientSubmitError(button) if button == "left" then guiSetVisible(wdwError, false) --triggerClientEvent ( "wdwLoginShow", getRootElement() ) triggerEvent( "wdwLoginShow", getRootElement() ) end end function clientSubmitLogin(button) if button == "left" then triggerServerEvent("SubmitLogin", getRootElement(), guiGetText(edtUser), guiGetText(edtPass)) guiSetInputEnabled(false) guiSetVisible(wdwLogin, false) showCursor(false) end end addEvent("wdwLoginShow", true); addEventHandler ( "wdwLoginShow", getRootElement (), function() CreateLoginWindow() if (wdwLogin ~= nil) then guiSetVisible(wdwLogin, true) end showCursor(true) guiSetInputEnabled(true) end ) addEvent("wdwLoginError", true) addEventHandler ( "wdwLoginError", getRootElement (), function() CreateErrorWindow() if (wdwError ~= nil) then guiSetVisible(wdwError, true) end showCursor(true) guiSetInputEnabled(true) end )
Kann ich das verbessern oder reicht das so und könnte es verwenden? -
Hauptsache ist das es jetzt funktioniert
danke -
Sry für den doppelpost.
Das Problem hat sich erledigt. Und zwar war der Eintrag falsch.
Es musste:
<module file="mta_mysql.dll" />
sein.
Hauptsache es funktioniert jetzt
mfg -
Abend,
in der Meta? In dem Wiki Eintrag steht drinne das man das Modul in der mtaserver.conf reinschreiben muss und das dies reicht.
Muss ich da in meinem Mod in der meta.xml etwas angeben?
edit:
Um es gleich so zu machen:
Hier Auszug aus der mtaserver.confCode<!-- Specifies the module(s) which are loaded with the server. To load several modules, add more <module> parameter(s). Optional parameter. --><module src="mta_mysql" />
Und aus meiner meta.xmlCode<meta> <info author="Phill" type="gamemode" name="Phills World" description="Mein erster Server" /> <module src="mta_mysql" /> <script src="server/script.lua" /> <script src="client/gui.lua" type="client" /> </meta>
Liegt da ein Fehler? -
Abend,
entschuldigt bitte das ich dieses ältere Thema herausgesucht habe, allerdings habe ich das gleiche Problem bei dem mysql_connect.
Wie hast du das Problem gelöst?
Habe das Modul neu heruntergeladen und die dll neu eingesetzt + und in der Config auch.
Was ist der Fehler?
mfg -
Achso ok danke.
Was ich gleich hier noch möchte ist zu MySQL.
Gibt es da eine Befehlsreferenz, welche Befehle es hier in Lua gibt? Bzw. explizit für MTA.
Weil für Windows liegt die libmysql.dll ja mit im Server Ordner drinne.
mfg Phill