MySQL Quest Schnittstelle

09/16/2015 09:32 AlphaGenY#16
Ich möchte das die quest einen ganz bestimmten Wert von der Datenbank abfragt von dem jeweiligen Spieler.
Und je nach dem Welcher Wert ist soll die Quest dann weiter arbeiten.
Also Wenn der Wert = 0 dann wird Option 1 ausgeführt
Wenn Wert = 1 dann wird Option 2 ausgeführt

Außerdem Will ich eine Auswahl in der Quest bei der man je Nach Auswahl einen bestimmten Wert vom jeweiligen Spieler ändert.

Es geht um eine bestimmte Zelle der Tabelle in Einer ausgewählten Spalte XY und in der Zeile von dem jeweiligen Account der eingeloggt ist :P

Ich hoffe man versteht was ich meine :D
09/16/2015 09:34 rollback#17
Gut, wenn du jetzt noch sagen kannst bei welchen Werten welche Option ausgeführt werden soll dann können wir dir besser helfen :D
09/16/2015 09:45 AlphaGenY#18
PHP Code:
            local s = select("Option1", "Option2")
                if 
1 == s then
                    mysql_query
("UPDATE account.account SET prem = 1 WHERE id = " .. pc.get_player_id() .. " LIMIT 1;")
                else
                    
mysql_query("UPDATE account.account SET prem = 2 WHERE id = " .. pc.get_player_id() .. " LIMIT 1;")
            
end 
das ist das mit der Auswahl bisher :D Es Soll in der spalte prem je nach aus Wahl der jeweilige Wert dem bestimmten Account zu gewiesen werden

und noch eine wo der ab gefragt wird aus der datenbank und je nach dem ob 1 oder 2 werden verschiedene texte im brief erscheinen und Items vergeben :P
09/16/2015 10:01 rollback#19
Den Teil deines Codes würde ich so schreiben:
Code:
local prem = ({1, 2})[select("Option 1", "Option 2", "Abbrechen")] or false
if not prem then return end

mysql_query("UPDATE account.account SET prem = " .. prem .. " WHERE id = " .. pc.get_account_id() .. " LIMIT 1;")
Das andere würde ich so machen:
Code:
local currPrem = tonumber(mysql_query("SELECT prem FROM account.account WHERE id = " .. pc.get_account_id() .. " LIMIT 1;")[1][1])
if not currPrem then
	syschat("Ein Fehler ist aufgetreten, bitte einem Teamler melden.")
	return
end

local premContent = ({
	[1] = {
		text = {
			"Prem = 1, Textzeile 1",
			"Textzeile 2",
			"Textzeile 3",
			"usw ..."
		},
		items = {
			{189, 1},--prem = 1, 1x giftschwert+9
			{27001, 200}--prem = 1, 200x roter trank
		}
	},
	[2] = {
		text = {
			"Prem = 2, Textzeile 1",
			"Textzeile 2",
			"Textzeile 3",
			"immernoch Prem 2, Textzeile 4",
			"usw ..."
		},
		items = {
			{186, 1},--prem = 2, 1x giftschwert+6
			{27001, 50}--prem = 2, 50x roter trank
		}
	}
})[currPrem]

if not premContent then
	syschat("Ein Fehler ist aufgetreten, bitte einem Teamler melden.")
	return
end

for _,v in ipairs(premContent.text) do
	say(v)
end

for _,v in ipairs(premContent.items) do
	pc.give_item2(v[1], v[2])
end
09/16/2015 10:46 AlphaGenY#20
Okay aber warum brauchst du kein say("") um Text auszugeben?
Ich möchte das der Text in einem Brief ersteint :D
Das sieht so anders aus als alles was ich sonst in quest verwende

Are you a wizard ? :o :D

EDIT : Ach das sind Variablen und der Befehl ist da unten :D

Kann ich das Abbrechen weg nehmen? Dann muss auch das false weg oder? Man soll eine Auswahl treffen müssen :D Ob man will oder nicht :P
09/16/2015 11:16 rollback#21
Du kannst einfach das Abbrechen wegnehmen, also so:

Code:
local prem = ({1, 2})[select("Option 1", "Option 2")] or false
aber das hier würde auch funktionieren:
Code:
local prem = select("Option 1", "Option 2")
die if abfrage darunter (if not prem then return end) kannst du auch wegnehmen, weil es ja keinen abbrechen button mehr gibt
09/16/2015 12:06 AlphaGenY#22
Als standartwert habe ich 0.
Wenn ein anderer Wert als 0 ist soll die auswahl übersprungen weil die dann ja schon von einem anderen character des selben accounts ausgeführt wurde.
und wenn 0 ist soll es zur auswhl kommen

danke für deine Hilfe bisher :) Machst du sowas beruflich? Kann ich dich auch mit meinem C++/C Code belästigen irgendwann ? :D

PHP Code:
    state gotoinfomation begin
        local currPrem 
= tonumber(mysql_query("SELECT prem FROM account.account WHERE id = " .. pc.get_account_id() .. " LIMIT 1;")[1][1])
        if 
currPrem ~= 0 then
            
return
        
end
        
        
else
            
local prem = ({1, 2})[select("Option 1", "Option 2")]
            
mysql_query("UPDATE account.account SET prem = " .. prem .. " WHERE id = " .. pc.get_account_id() .. " LIMIT 1;")
        
end
    end 
das ist mein Ansatz

Das ist der ganze Quatsch :P

PHP Code:
quest login_first begin
    state start begin
        when login 
or levelup with pc.get_level() == 1 begin
            set_state
( gotoinfomation )
        
end
    end
    
    state gotoinfomation begin
        when login begin
            local currprem 
= tonumber(mysql_query("SELECT prem FROM account.account WHERE id = " .. pc.get_account_id() .. " LIMIT 1;")[1][1])
            if 
currprem ~= 0 then
                
return
            
end
            
            
else
                
local prem = ({1, 2})[select("Option 1", "Option 2")]
                
mysql_query("UPDATE account.account SET prem = " .. prem .. " WHERE id = " .. pc.get_account_id() .. " LIMIT 1;")
            
                
local currprem = tonumber(mysql_query("SELECT prem FROM account.account WHERE id = " .. pc.get_account_id() .. " LIMIT 1;")[1][1])
                if 
not currprem then
                    syschat
("Ein Fehler ist aufgetreten, bitte einem Teamler melden.")
                    return
                
end

                local premContent 
= ({
                    [
1] = {
                        
text = {
                            
"prem = 1, Textzeile 1",
                            
"Textzeile 2",
                            
"Textzeile 3",
                            
"usw ..."
                        
}
                    },
                    [
2] = {
                        
text = {
                            
"prem = 2, Textzeile 1",
                            
"Textzeile 2",
                            
"Textzeile 3",
                            
"immernoch prem 2, Textzeile 4",
                            
"usw ..."
                        
}
                    }
                })[
currprem]

                if 
not premContent then
                    syschat
("Ein Fehler ist aufgetreten, bitte einem Teamler melden.")
                    return
                
end

                
for _,v in ipairs(premContent.text) do
                    
say(v)
                
end
            end
        end
    end
end 
09/16/2015 14:08 rollback#23
Machs mal so:

Code:
quest login_first begin
	state start begin
		
		function getCurrPrem()
			return tonumber(mysql_query("SELECT prem FROM account.account WHERE id = " .. pc.get_account_id() .. " LIMIT 1;")[1][1])
		end
		
		when login begin
			if login_first.getCurrPrem() ~= 0 then
				set_state("PREM_SET")
				return
			end
			timer("tStart", 0.1)
		end
		when tStart.timer begin
			local prem = ({1, 2})[select("Option 1", "Option 2")]
			mysql_query("UPDATE account.account SET prem = " .. prem .. " WHERE id = " .. pc.get_account_id() .. " LIMIT 1;")
		 
			local currprem = login_first.getCurrPrem()
			local premContent = ({
				[1] = {
					text = {
						"prem = 1, Textzeile 1",
						"Textzeile 2",
						"Textzeile 3",
						"usw ..."
					}
				},
				[2] = {
					text = {
						"prem = 2, Textzeile 1",
						"Textzeile 2",
						"Textzeile 3",
						"immernoch prem 2, Textzeile 4",
						"usw ..."
					}
				}
			})[currprem]
			
			if not premContent then
				syschat("Ein Fehler ist aufgetreten, bitte einem Teamler melden.")
				return
			end
			
			for _,v in ipairs(premContent.text) do
				say(v)
			end
		end
	end
	state PREM_SET begin
		when login with login_first.getCurrPrem() == 0 begin
			set_state("start")
		end
	end
end
09/16/2015 14:57 AlphaGenY#24
Calls undeclared functions !
ipairs

Geht leider nicht :/
09/16/2015 15:28 rollback#25
Einfach ipairs in die quest_functions eintragen
09/16/2015 16:20 thespeedyy#26
mysql_query("SELECT * FROM player.refine_proto WHERE id = (SELECT refine_set FROM player.item_proto WHERE vnum = "..vnum..");")

kannst du das auf 5.6 updaten? :(
09/16/2015 16:24 rollback#27
Du musst die funktion selbst updaten nicht die Query
09/16/2015 16:45 thespeedyy#28
aber game.mysql_query("SELECT * FROM player.refine_proto WHERE id = (SELECT refine_set FROM player.item_proto WHERE vnum = "..vnum..");")

funkt nicht :(
09/16/2015 16:49 AlphaGenY#29
Vielen vielen Dank! Es lebt :D

Das kann ich jetzt immer abändern wie ich es brauch :P

wie ich das in Kombination mit einem brief machen ? :P

aber das passt alles super ! Kann ich für viele Dinge Verwenden