[SERVICE] Die Questkontrolle

10/07/2013 19:51 slipknot009#9091
Guten Abend

Ich habe da ein kleines problem undzwar ich habe die quest für den 500kk Goldbarren in meinen server eingefügt das er anklickbarr ist und mir das yang gibt

Problem hierbei ist das wenn ich 2-50 Goldbarren im invantar habe sie mit 1 klick alle aufeinmal verschwinden und mir trotzdem nur500kk geben pls help

[TABLE][/quest goldbarren begin
state start begin
when login begin
send_letter("Goldbarren")
end
when button or info begin
if pc.get_money() < 500000000 then
chat("Du hast nicht genügend Yang")
send_letter("Goldbarren")
return
end
pc.give_item2(80005)
pc.change_money(-500000000)
send_letter("Goldbarren")
end
when 80005.use begin
if (pc.get_gold()+500e6)>2e9-1 then
chat("Du würdest den Yangbug bekommen")
return
else
pc.change_gold(500e6)
end
pc.remove_item(item.vnum,80005)
end
end
end ]
10/07/2013 21:08 Chip'#9092
Quote:
Originally Posted by slipknot009 View Post
Guten Abend

Ich habe da ein kleines problem undzwar ich habe die quest für den 500kk Goldbarren in meinen server eingefügt das er anklickbarr ist und mir das yang gibt

Problem hierbei ist das wenn ich 2-50 Goldbarren im invantar habe sie mit 1 klick alle aufeinmal verschwinden und mir trotzdem nur500kk geben pls help

[TABLE][/quest goldbarren begin
state start begin
when login begin
send_letter("Goldbarren")
end
when button or info begin
if pc.get_money() < 500000000 then
chat("Du hast nicht genügend Yang")
send_letter("Goldbarren")
return
end
pc.give_item2(80005)
pc.change_money(-500000000)
send_letter("Goldbarren")
end
when 80005.use begin
if (pc.get_gold()+500e6)>2e9-1 then
chat("Du würdest den Yangbug bekommen")
return
else
pc.change_gold(500e6)
end
pc.remove_item(item.vnum,80005)
end
end
end ]
versuch es mal mit
item.remove()
oder
pc.remove_item(ID,ANZAHL)
10/08/2013 00:19 .He3o Cry#9093
Quote:
Originally Posted by slipknot009 View Post
Guten Abend

Ich habe da ein kleines problem undzwar ich habe die quest für den 500kk Goldbarren in meinen server eingefügt das er anklickbarr ist und mir das yang gibt

Problem hierbei ist das wenn ich 2-50 Goldbarren im invantar habe sie mit 1 klick alle aufeinmal verschwinden und mir trotzdem nur500kk geben pls help

[TABLE][/quest goldbarren begin
state start begin
when login begin
send_letter("Goldbarren")
end
when button or info begin
if pc.get_money() < 500000000 then
chat("Du hast nicht genügend Yang")
send_letter("Goldbarren")
return
end
pc.give_item2(80005)
pc.change_money(-500000000)
send_letter("Goldbarren")
end
when 80005.use begin
if (pc.get_gold()+500e6)>2e9-1 then
chat("Du würdest den Yangbug bekommen")
return
else
pc.change_gold(500e6)
end
pc.remove_item(item.vnum,80005)
end
end
end ]
Hier deine Quest :)

PHP Code:
quest goldbarren begin
    state start begin
        when login begin
            send_letter
("Goldbarren")
        
end
        
        when button 
or info begin
            
if pc.get_money() <= 499999999 then
                chat
("Du hast nicht genügend Yang")
                
send_letter("Goldbarren")
            elseif 
pc.get_money() >= 500000000 then
                chat
("Goldbarren erhalten")
                
pc.give_item2(800051)
                
pc.change_money(-500000000)
                
send_letter("Goldbarren")
            
end
        end
        
        when 80005.
use begin
            say_title
("Möchtest du den Barren einlösen?")
            
say("")
            
local s select ("Ja""Nein")
            
            if 
== and pc.count_item(80005) and pc.get_gold()<=1499999999 then
                pc
.change_money(500000000)
                
pc.remove_item(80005)
            elseif 
== and pc.get_gold()>=1500000000 then
                say
("Du Trägst zu viel Yang bei dir!")
                
say_reward("Versuche es wieder wenn du genug platz hast")
            
end
    
            
if == 2 then
                
return
            
end
        end
    end
end 
10/08/2013 02:03 Noa_#9094
Quote:
Originally Posted by Chip' View Post
Hay zusammen ich habe folgendes Problem wenn ich eine query ausführe via quest kommt folgender Fehler:

Rootname:/.../... # ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=UPDATE account set cash = cash+'10' WHERE id = '1'' at line 1

An der Quest wird es nicht direkt liegen, aber ich hoffe mal das trz jemand weiß wo das problem ist. Das problem tritt bei jeder query auf. Die habe ich schon getestet:
Code:
			--mysql_query("insert into account.account(login) VALUES ("..string.format("%q","Kekse")..");")
			--local q = mysql_query("UPDATE account.account set cash = cash+"..ins.." WHERE id = "..pc.get_account_id()..";")
			local q = mysql_query("UPDATE account.account set cash = cash+'"..ins.."' WHERE id = '"..pc.get_account_id().."';")
			--local q = mysql_query("UPDATE account.account set cash = cash+"..ins.." WHERE id = "..pc.get_account_id()..";")

Meine function
Code:
mysql_query = function(query)
    if not pre then
        local rt = io.open('CONFIG','r'):read('*all')
        pre,_= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4')
    end
    math.randomseed(os.time())
    local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{}
    --os.execute('mysql '..pre..' -e='..string.format('%q',query)..' > '..fi) -- für MySQL51
    os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- für MySQL55
    for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi);
    for i = 2, table.getn(t) do table.foreach(t[i],function(a,b)
        out[i-1]               = out[i-1] or {}
        out[i-1][a]            = tonumber(b) or b or 'NULL'
        out[t[1][a]]           = out[t[1][a]] or {}
        out[t[1][a]][i-1]      = tonumber(b) or b or 'NULL'
    end) end
    return out
end
Woran kann es liegen?
Kann mir jemand vllt via TeamViewer zeigen woran es liegt. Will ja aus den Fehler lernen :P
was hast du hiermit vor?
PHP Code:
mysql_query("insert into account.account(login) VALUES ("..string.format("%q","Kekse")..");"
10/08/2013 07:37 Mijago#9095
Quote:
Originally Posted by Chip' View Post
Hay zusammen ich habe folgendes Problem wenn ich eine query ausführe via quest kommt folgender Fehler:

Rootname:/.../... # ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=UPDATE account set cash = cash+'10' WHERE id = '1'' at line 1

An der Quest wird es nicht direkt liegen, aber ich hoffe mal das trz jemand weiß wo das problem ist. Das problem tritt bei jeder query auf. Die habe ich schon getestet:
Code:
--mysql_query("insert into account.account(login) VALUES ("..string.format("%q","Kekse")..");")
--local q = mysql_query("UPDATE account.account set cash = cash+"..ins.." WHERE id = "..pc.get_account_id()..";")
local q = mysql_query("UPDATE account.account set cash = cash+'"..ins.."' WHERE id = '"..pc.get_account_id().."';")
--local q = mysql_query("UPDATE account.account set cash = cash+"..ins.." WHERE id = "..pc.get_account_id()..";")

Meine function
Code:
mysql_query = function(query)
    if not pre then
        local rt = io.open('CONFIG','r'):read('*all')
        pre,_= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4')
    end
    math.randomseed(os.time())
    local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{}
    --os.execute('mysql '..pre..' -e='..string.format('%q',query)..' > '..fi) -- für MySQL51
    os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- für MySQL55
    for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi);
    for i = 2, table.getn(t) do table.foreach(t[i],function(a,b)
        out[i-1]               = out[i-1] or {}
        out[i-1][a]            = tonumber(b) or b or 'NULL'
        out[t[1][a]]           = out[t[1][a]] or {}
        out[t[1][a]][i-1]      = tonumber(b) or b or 'NULL'
    end) end
    return out
end
Woran kann es liegen?
Kann mir jemand vllt via TeamViewer zeigen woran es liegt. Will ja aus den Fehler lernen :P
ach du bist der , dem Kenan helfen wollte :p
Die fehlermeldung ist schon etwas älter, oder? Denn sie passt nicht zum aktuellem Code .
10/08/2013 17:32 Chip'#9096
Ja genau, das bin ich :D Ja kann sein das es der falsche Code ist, weiß schon nicht mehr was wir alles geändert haben xD
Einfach zukrass mit dem Fehler :D


Quote:
Originally Posted by ΞΠ∪Μ View Post
was hast du hiermit vor?
PHP Code:
mysql_query("insert into account.account(login) VALUES ("..string.format("%q","Kekse")..");"
War alles zum Testen, sind ja noch die -- davor hatte es in einer Quest drin, zum testen :D

Ging einfach nur darum alles mögliche zutesten.
Sinn und Zweck, gibt es bei der query nicht :P

Hab nun zum testen diese Quest genommen:
Code:
quest test begin
	state start begin
		when 20001.chat."SQL - Test" begin
			local q = mysql_query('SELECT * from player.player WHERE account_id = "..pc.get_account_id().."')
			say(q.name[1])
		end
	end
end
Und es kommt

Code:
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=SELECT * from player.player WHERE account_id = 1' at line 1
Also der ''gleiche'' Fehler
10/08/2013 18:23 slipknot009#9097
Tagchen epvp,

Ich habe immer noch das problem mit den goldbarren .. aber allerdings habe ich nur noch 1 problem undzwar

1. Wenn ich die goldbarren hole und 2 im invantar habe und mit rechtsklick draufklicke denn gehen sofort beide weg möchte aber nur das 1. weggeht pls help

[PHP][/quest goldbarren begin
state start begin
when login begin
send_letter("Goldbarren")
end

when button or info begin
if pc.get_money() <= 499999999 then
chat("Du hast nicht genügend Yang")
send_letter("Goldbarren")
elseif pc.get_money() >= 500000000 then
chat("Goldbarren erhalten")
pc.give_item2(80005, 1)
pc.change_money(-500000000)
send_letter("Goldbarren")
end
end

when 80005.use begin
say_title("Möchtest du den Barren einlösen?")
say("")
local s = select ("Ja", "Nein")

if s == 1 and pc.count_item(80005) and pc.get_gold()<=1499999999 then
pc.change_money(500000000)
pc.remove_item(80005, 1)
elseif s == 1 and pc.get_gold()>=1500000000 then
say("Du Trägst zu viel Yang bei dir!")
say_reward("Versuche es wieder wenn du genug platz hast")
end

if s == 2 then
return
end
end
end
end ]
10/08/2013 18:53 Chip'#9098
Quote:
Originally Posted by slipknot009 View Post
Tagchen epvp,

Ich habe immer noch das problem mit den goldbarren .. aber allerdings habe ich nur noch 1 problem undzwar

1. Wenn ich die goldbarren hole und 2 im invantar habe und mit rechtsklick draufklicke denn gehen sofort beide weg möchte aber nur das 1. weggeht pls help

Code:
quest goldbarren begin 
    state start begin 
        when login begin 
            send_letter("Goldbarren") 
        end 
         
        when button or info begin 
            if pc.get_money() <= 499999999 then 
                chat("Du hast nicht genügend Yang") 
                send_letter("Goldbarren") 
            elseif pc.get_money() >= 500000000 then 
                chat("Goldbarren erhalten") 
                pc.give_item2(80005, 1) 
                pc.change_money(-500000000) 
                send_letter("Goldbarren") 
            end 
        end 
         
        when 80005.use begin 
            say_title("Möchtest du den Barren einlösen?") 
            say("") 
            local s = select ("Ja", "Nein") 
             
            if s == 1 and pc.count_item(80005) and pc.get_gold()<=1499999999 then 
                pc.change_money(500000000) 
                pc.remove_item(80005, 1) 
            elseif s == 1 and pc.get_gold()>=1500000000 then 
                say("Du Trägst zu viel Yang bei dir!") 
                say_reward("Versuche es wieder wenn du genug platz hast") 
            end 
     
            if s == 2 then 
                return 
            end 
        end 
    end 
end
Die Quest geht( gerade getestet), vllt reload q vergessen ? kannst mich auch in Skype adden dann schauen wir mal


Falls du es ohne Questfenster haben willst.
Also wenn genug Yang vorhanden dann wird nen Barren erstellt wenn nicht kommt ne meldung im Chat.. Dann kannst du das hier nehmen.. Deine Quest bissel bearbeitet. Ist Userfreundlicher
Code:
quest goldbarren begin 
    state start begin 
        when login begin 
            send_letter("Goldbarren") 
        end 
         
        when button or info begin 
            if pc.get_money() <= 499999999 then 
                chat("Du hast nicht genügend Yang") 
                send_letter("Goldbarren") 
            elseif pc.get_money() >= 500000000 then 
                chat("Goldbarren erhalten") 
                pc.give_item2(80005, 1) 
                pc.change_money(-500000000) 
                send_letter("Goldbarren") 
            end 
        end 
         
        when 80005.use begin              
            if pc.count_item(80005) and pc.get_gold()<=1499999999 then 
                pc.change_money(500000000) 
                pc.remove_item(80005, 1) 
            elseif pc.get_gold()>=1500000000 then 
                chat("Du Trägst zu viel Yang bei dir!") 
                chat("Versuche es wieder wenn du genug platz hast") 
            end 
        end 
    end 
end
10/08/2013 18:56 slipknot009#9099
danke habe fehler gefunden sie hatt sich nicht vertragen gehabt mit einer von meinenen geschrieben quest danke dir ( euch allen ) ihr seit super
10/08/2013 22:36 brachmann#9100
Hallo zusammen ich habe mir eine Warpring-Quest geschrieben mit "local empire = pc.get_empire()" also wird beim Teleport ins Orktal-Anfang der Platz fürs jeweilige Reich bestimmt siehe Spoiler:
Wenn ich die Zuordnung der Reiche weglasse funktioniert die Quest
also ist es kein fehler mit END...

folgende Fehlermeldung kommt in putty:

qc in malloc(): error: allocation failed
Abort trap (core dumped)

Weiß jemand was ich falsch gemacht habe bzw was ich vergessen haben könnte?

LG Hainz
10/08/2013 22:49 Chip'#9101
Vllt ein end zuviel, oder mal die qc datei in dein questordner löschen und neu einfügen ( nicht vergessen wieder 777 rechte zugeben,... kannst dich auch via skype bei mir melden, werde morgen gegen 17-18uhr wieder da sein und kann dir helfen.

Achso, es kann trz ein end problem sein, da du ja mit if und elseif eine neue funktionsweise der quest hast.
10/08/2013 23:08 brachmann#9102
Es kann kein "end" fehler sein weil sobald der port-befehl angenommen, wurde die quest beendet ist. Sonst müsste ich auch bei:

if empire == 1 then
pc.warp(402100, 673900)

ein "end" setzten

Edit: an der qc liegt es auch nicht, habe ich eben gelöscht und neu reingemacht mit 777ner Rechten
10/08/2013 23:18 Chip'#9103
Quote:
Originally Posted by brachmann View Post
Es kann kein "end" fehler sein weil sobald der port-befehl angenommen, wurde die quest beendet ist. Sonst müsste ich auch bei:

if empire == 1 then
pc.warp(402100, 673900)

ein "end" setzten

Edit: an der qc liegt es auch nicht, habe ich eben gelöscht und neu reingemacht mit 777ner Rechten
So muss das aussehen
Code:
            if empire == 1 then
            pc.warp(402100, 673900)
                    elseif empire == 2 then
            pc.warp(270400, 739900)
                    elseif empire == 3 then
            pc.warp(321300, 808000)
            end
wie gesagt, kann dir das morgen mal via skype erklären, heute nicht mehr bin nun weg
10/08/2013 23:30 brachmann#9104
Danke hat geklappt Oo bin ein bissi erstaunt vllt auch einfach zu müde werde dich trotzdem in Skype adden hehe bin lernwillig

LG Hainz
10/08/2013 23:31 Chip'#9105
Ja kein ding, immer wieder gerne :P