[SERVICE] Die Questerstellung

06/19/2015 07:07 rollback#2911
Quote:
Originally Posted by fabiwunn View Post
Funktioniert so auch nicht, wenn man nen Betrag eingibt sagen wir mal 4k dann kommt jedesmal nur:

Du kannst nur 500.000.000.000 Yang einzahlen, obwohl das Geld vorhanden ist
versuch mal die hier, hab ich grad neu geschrieben:

Code:
quest bank begin
	state start begin
		when 123456.chat."Bank öffnen" begin
			return bank.menu()
		end
		function menu()
			say(string.format("Aktuelles Guthaben: %s", pc.getqf("credit")))
			say("Was möchtest du machen?")
			local s = select("Yang einzahlen", "Yang abheben", "Abbrechen")
			if s == 3 then return end
			return bank.insert_menu(s)
		end
		function insert_menu(plus_minus)
			local currmoney = pc.getqf("credit")
			say(string.format("Aktuelles Guthaben: %s", currmoney))
			say(string.format("Wie viel möchtest du %s?", ({"einzahlen", "abheben"})[plus_minus]))
			local amount = tonumber(input())
			local newmoney = (amount and (plus_minus == 1 and currmoney+amount or currmoney-amount) or currmoney)
			if not amount then
				say("Du darfst nur Zahlen eingeben.")
				return bank.show_select_menu(plus_minus)
			elseif (newmoney-currmoney) > pc.get_gold() then
				say("Du hast nicht genug Yang, um so viel einzuzahlen.")
				return bank.show_select_menu(plus_minus)
			elseif pc.get_gold()+(currmoney-newmoney) >= 2000000000 then
				say("Du kannst nicht so viel Yang abheben.")
				return bank.show_select_menu(plus_minus)
			elseif newmoney > 500000000000 then
				say("Du darfst maximal 500.000.000.000 auf deinem Konto haben.")
				return bank.show_select_menu(plus_minus)
			elseif newmoney < 0 then
				say("Du darfst dein Konto nichts in Minus ziehen.")
				return bank.show_select_menu(plus_minus)
			end
			say(string.format("Möchtest du wirklich %s Yang %s?", amount, ({"einzahlen", "abheben"})[plus_minus]))
			local s = select("Ja", "Hauptmenü", "Zurück", "Abbrechen")
			if s == 2 then
				return bank.menu()
			elseif s == 3 then
				return bank.insert_menu(plus_minus)
			elseif s == 4 then
				return
			end
			if (newmoney-currmoney) > pc.get_gold() then
				return syschat("Versucht nicht zu schummeln!")
			end
			pc.change_gold(currmoney-newmoney)
			pc.setqf("credit", newmoney)
			syschat(string.format("Du hast erfolgreich %s Yang %s. Du hast nun %s Yang auf deinem Konto.", amount, ({"eingezahlt", "abgehoben"})[plus_minus], newmoney))
		end
		function show_select_menu(plus_minus)
			local s = select("Hauptmenü", "Zurück", "Abbrechen")
			if s == 1 then
				return bank.menu()
			elseif s == 2 then
				return bank.insert_menu(plus_minus)
			else
				return
			end
		end
	end
end
06/19/2015 08:42 Rofelmau#2912
oder du bleibst bei der anderen quests
PHP Code:
quest bank begin 
    state start begin 
         
        
--- Funktion für das abbuchen von Yang 
        
function player_get_yang() 
             
            
setdelay(0
            
say_title(''..mob_name(npc.get_race())..''
            
say('[ENTER]Dein Guthaben beträgt: '..pc.getqf('yang_guthaben')..' Yang.[ENTER]Wie viel Yang möchtest du abbuchen?[ENTER]'
             
            
local input_remove_yang tonumber(input()) if input_remove_yang 0 then return syschat('Ungültige eingabe, das abbuchen des Yang ist fehlgeschlagen.'end 
             
            
if (pc.get_gold()+input_remove_yang) > 2000000000 then 
                syschat
('Du kannst maximal nur 2kkk bei dir tragen!'
                return 
            
end 
             
            
if pc.getqf('yang_guthaben') < input_remove_yang then 
                syschat
('Auf deinem Konto befindet sich nicht die angegebene Summe!'
                return 
            
end 
             
            pc
.change_gold(input_remove_yang
            
pc.setqf('yang_guthaben',pc.getqf('yang_guthaben')-input_remove_yang
             
            
setdelay(0
            
say_title(''..mob_name(npc.get_race())..''
            
say('[ENTER]'..input_remove_yang..' wurden erfolgreich abgebucht.[ENTER]Kann ich dir weiterhin behilflich sein?[ENTER]'
             
            if 
select('Ja','Abbrechen') == 2 then return end 
            bank
.player_open_bank_menu() 
        
end 
         
        
--- Funktion für denn start dialog 
        
function player_open_bank_menu() 
            
say_title(''..mob_name(npc.get_race())..''
            
say('[ENTER]Ich biete dir die möglichkeit dein Yang aufzubewahren.[ENTER]Jedoch kann ich nur eine bestimmte Summe aufnehmen.[ENTER]Das limit beträgt derzeit 500.000.000.000 Yang.[ENTER]'
            
say_reward('Wie kann ich dir helfen?[ENTER]'
            
local bank_option_list select('Ich möchte Yang einzahlen','Ich möchte Yang abbuchen','Abbrechen'
            if 
bank_option_list == 1 then 
                bank
.player_insert_yang() 
                return 
            elseif 
bank_option_list == 2 then  
                bank
.player_get_yang() 
                return 
            elseif 
bank_option_list == 3 then return end 
        end 
         
        
--- Funktion für das einzahlen von Yang 
        
function player_insert_yang() 
             
            
setdelay(0
            
say_title(''..mob_name(npc.get_race())..''
            
say('[ENTER]Du möchtest also eine bestimmte Summe Yang einzahlen?[ENTER]Bitte gebe die gewünschte Summe ein:[ENTER]'
             
            
local input_yang tonumber(input()) if input_yang <= 0 then return syschat('Ungültige eingabe, das einzahlen von Yang ist fehlgeschlagen.'end 
             
            
if pc.get_gold() < input_yang then 
                syschat
('Tut mir leid, du besitzt nicht so viel Yang wie angegeben wurde.'
                return 
            
end 
             
            
if pc.getqf('yang_guthaben')+input_yang >= 500000000000 then 
                syschat
('Ich kann maximal nur 500.000.000.000 Yang aufbewahren!'
                return 
            
end 
             
            pc
.setqf('yang_guthaben'pc.getqf('yang_guthaben')+input_yang
            
pc.change_gold(- input_yang
             
            
say_title(''..mob_name(npc.get_race())..''
            
say('[ENTER]Ich habe erfolgreich '..input_yang..' Yang eingezahlt.[ENTER]Kann ich dir weiterhin behilflich sein?[ENTER]'
             
            if 
select('Ja','Abbrechen') == 2 then return end 
            bank
.player_open_bank_menu() 
        
end 
        when 123456.chat
.'Bank öffnen' begin 
            bank
.player_open_bank_menu() 
        
end 
    end 
end 
06/19/2015 09:04 rollback#2913
Quote:
Originally Posted by Rofelmau View Post
oder du bleibst bei der anderen quests
PHP Code:
quest bank begin 
    state start begin 
         
        
--- Funktion für das abbuchen von Yang 
        
function player_get_yang() 
             
            
setdelay(0
            
say_title(''..mob_name(npc.get_race())..''
            
say('[ENTER]Dein Guthaben beträgt: '..pc.getqf('yang_guthaben')..' Yang.[ENTER]Wie viel Yang möchtest du abbuchen?[ENTER]'
             
            
local input_remove_yang tonumber(input()) if input_remove_yang 0 then return syschat('Ungültige eingabe, das abbuchen des Yang ist fehlgeschlagen.'end 
             
            
if (pc.get_gold()+input_remove_yang) > 2000000000 then 
                syschat
('Du kannst maximal nur 2kkk bei dir tragen!'
                return 
            
end 
             
            
if pc.getqf('yang_guthaben') < input_remove_yang then 
                syschat
('Auf deinem Konto befindet sich nicht die angegebene Summe!'
                return 
            
end 
             
            pc
.change_gold(input_remove_yang
            
pc.setqf('yang_guthaben',pc.getqf('yang_guthaben')-input_remove_yang
             
            
setdelay(0
            
say_title(''..mob_name(npc.get_race())..''
            
say('[ENTER]'..input_remove_yang..' wurden erfolgreich abgebucht.[ENTER]Kann ich dir weiterhin behilflich sein?[ENTER]'
             
            if 
select('Ja','Abbrechen') == 2 then return end 
            bank
.player_open_bank_menu() 
        
end 
         
        
--- Funktion für denn start dialog 
        
function player_open_bank_menu() 
            
say_title(''..mob_name(npc.get_race())..''
            
say('[ENTER]Ich biete dir die möglichkeit dein Yang aufzubewahren.[ENTER]Jedoch kann ich nur eine bestimmte Summe aufnehmen.[ENTER]Das limit beträgt derzeit 500.000.000.000 Yang.[ENTER]'
            
say_reward('Wie kann ich dir helfen?[ENTER]'
            
local bank_option_list select('Ich möchte Yang einzahlen','Ich möchte Yang abbuchen','Abbrechen'
            if 
bank_option_list == 1 then 
                bank
.player_insert_yang() 
                return 
            elseif 
bank_option_list == 2 then  
                bank
.player_get_yang() 
                return 
            elseif 
bank_option_list == 3 then return end 
        end 
         
        
--- Funktion für das einzahlen von Yang 
        
function player_insert_yang() 
             
            
setdelay(0
            
say_title(''..mob_name(npc.get_race())..''
            
say('[ENTER]Du möchtest also eine bestimmte Summe Yang einzahlen?[ENTER]Bitte gebe die gewünschte Summe ein:[ENTER]'
             
            
local input_yang tonumber(input()) if input_yang <= 0 then return syschat('Ungültige eingabe, das einzahlen von Yang ist fehlgeschlagen.'end 
             
            
if pc.get_gold() < input_yang then 
                syschat
('Tut mir leid, du besitzt nicht so viel Yang wie angegeben wurde.'
                return 
            
end 
             
            
if pc.getqf('yang_guthaben')+input_yang >= 500000000000 then 
                syschat
('Ich kann maximal nur 500.000.000.000 Yang aufbewahren!'
                return 
            
end 
             
            pc
.setqf('yang_guthaben'pc.getqf('yang_guthaben')+input_yang
            
pc.change_gold(- input_yang
             
            
say_title(''..mob_name(npc.get_race())..''
            
say('[ENTER]Ich habe erfolgreich '..input_yang..' Yang eingezahlt.[ENTER]Kann ich dir weiterhin behilflich sein?[ENTER]'
             
            if 
select('Ja','Abbrechen') == 2 then return end 
            bank
.player_open_bank_menu() 
        
end 
        when 123456.chat
.'Bank öffnen' begin 
            bank
.player_open_bank_menu() 
        
end 
    end 
end 
Die Quest ist fehleranfällig da einige wichtige Abfragen fehlen und ist (meiner Meinung nach) nicht hübsch und unverständlich geschrieben und enhält redundante Funktionen.
06/19/2015 09:31 Rofelmau#2914
Hab die quest nicht geschrieben nur die Fehler die er genannt hat überarbeitet, für alles weitere verweise ich auf meinen Beitrag in questkontrolle
06/19/2015 11:54 .Karuzo#2915
Quote:
Originally Posted by It's me, 1093 View Post
Die Quest ist fehleranfällig da einige wichtige Abfragen fehlen und ist (meiner Meinung nach) nicht hübsch und unverständlich geschrieben und enhält redundante Funktionen.
Erstmal danke für die Kritik :)
Die Quest wurde extra in diesem Styl geschrieben, da sie nach meiner Erfahrung nach freundlicher ist für Anfänger.

Deswegen verwende ich hier auch 3 Funktionen (Hauptdialog,Auszahlen,Einzahlen).
Ich wüsste nicht was bei mir unverständlich ist, aber das ist ansichtssache.

Btw:

Hier habe ich dir nochmal meine gefixte Quest hochgeladen:


Mfg.
06/19/2015 12:14 rollback#2916
Quote:
Originally Posted by .CHKaruzo View Post
Erstmal danke für die Kritik :)
Die Quest wurde extra in diesem Styl geschrieben, da sie nach meiner Erfahrung nach freundlicher ist für Anfänger.

Deswegen verwende ich hier auch 3 Funktionen (Hauptdialog,Auszahlen,Einzahlen).
Ich wüsste nicht was bei mir unverständlich ist, aber das ist ansichtssache.

Btw:

Hier habe ich dir nochmal meine gefixte Quest hochgeladen:


Mfg.
Du musst prüfen, ob der in der Variable gespeicherte Wert nicht nil ist. Nil ist der Wert, wenn der User einen Buchstaben oder alles was keine Zahl ist eingibt, weil dann die Funktion tonumber() nicht funktioniert und nil zurückgibt.
Weil in LUA alles was nicht nil oder false true ist kannst du es einfach so abfragen:

Code:
if not input_yang then
06/19/2015 13:48 KΛIƬӨ#2917
Quote:
Originally Posted by It's me, 1093 View Post
Du musst prüfen, ob der in der Variable gespeicherte Wert nicht nil ist. Nil ist der Wert, wenn der User einen Buchstaben oder alles was keine Zahl ist eingibt, weil dann die Funktion tonumber() nicht funktioniert und nil zurückgibt.
Weil in LUA alles was nicht nil oder false true ist kannst du es einfach so abfragen:

Code:
if not input_yang then
Oder man fragt einfach den Type ab.

Code:
if type(input_yang) == 'string' then
06/19/2015 13:54 rollback#2918
Quote:
Originally Posted by DYSKaito View Post
Oder man fragt einfach den Type ab.

Code:
if type(input_yang) == 'string' then
eher:
Code:
if type(input_yang) != "number" then
weil man ja nicht abfragen möchte, ob es ein string ist, sondern, ob es keine zahl ist

Aber auch möglich, ja ;)
06/19/2015 14:53 [Remix]#2919
if not tonumber(input_yang) then

Den Datentyp abfragen ist hier völlig fehl am Platz.
06/19/2015 15:02 rollback#2920
Quote:
Originally Posted by [Remix] View Post
if not tonumber(input_yang) then

Den Datentyp abfragen ist hier völlig fehl am Platz.
input_yang ist bereits ein string der zu einer nummer formatiert wurde (tonumber(input()) weswegen ich auch bereits
Code:
if not input_yang then
geschrieben habe.
06/19/2015 15:06 [Remix]#2921
Quote:
Originally Posted by It's me, 1093 View Post
input_yang ist bereits ein string der zu einer nummer formatiert wurde (tonumber(input()) weswegen ich auch bereits
Code:
if not input_yang then
geschrieben habe.
Habe ich gesehen.
Wollte auch noch schreiben, dass du mal den Sinn von return verstehen solltest.
Ich denke ich weiß, wie es gedacht ist (bei der Bankquest oben) jedoch ist es in den jeweiligen Situationen total unnötig - in den meisten zumindest.
06/19/2015 15:11 rollback#2922
Quote:
Originally Posted by [Remix] View Post
Habe ich gesehen.
Wollte auch noch schreiben, dass du mal den Sinn von return verstehen solltest.
Ich denke ich weiß, wie es gedacht ist (bei der Bankquest oben) jedoch ist es in den jeweiligen Situationen total unnötig - in den meisten zumindest.
Mir ist der Sinn eines return durchaus bewusst. Allerdings ist es in LUA ohne weitere Probleme oder Performanceeinbußen so machbar und ist zumindest für mich so schöner zu lesen.
Mir ist klar, dass ein return im Normalfall einen Wert zurückgibt und an der Stelle die ausgeführte Methode verlässt.
06/19/2015 15:14 [Remix]#2923
Quote:
Originally Posted by It's me, 1093 View Post
Mir ist der Sinn eines return durchaus bewusst. Allerdings ist es in LUA ohne weitere Probleme oder Performanceeinbußen so machbar und ist zumindest für mich so schöner zu lesen.
Mir ist klar, dass ein return im Normalfall einen Wert zurückgibt und an der Stelle die ausgeführte Methode verlässt.
Wert wiedergeben => Arbeit.
Auch, wenn es ein void Wert ist.
06/19/2015 15:34 Yiv#2924
Quote:
Originally Posted by [Remix] View Post
Wert wiedergeben => Arbeit.
Auch, wenn es ein void Wert ist.
Wir leben nicht in einer Zeit, wo man noch auf sowas achten muss. Wenn man bspw. mit einem return eine verschachtelte if-Abfrage vermeiden kann und lieber mehrere if-Abfragen untereinander statt ineinander schreibt, dann kann man das ohne Bedenken machen ...
06/19/2015 15:41 [Remix]#2925
Quote:
Originally Posted by Yiv View Post
Wir leben nicht in einer Zeit, wo man noch auf sowas achten muss. Wenn man bspw. mit einem return eine verschachtelte if-Abfrage vermeiden kann und lieber mehrere if-Abfragen untereinander statt ineinander schreibt, dann kann man das ohne Bedenken machen ...
Code:
when 123456.chat."Bank öffnen" begin
		return bank.menu()
end
Da wurde wohl so eine Verschachtelung vermieden.
Und es geht nicht darum ob man auf sowas achten muss, oder nicht.
Es geht um Professionalität, was euch ein Fremdwort ist in Sachen Coding, wenn ihr so einen Mist verteidigt.