|
You last visited: Today at 05:29
Advertisement
Eigene Quest "entbuggen"
Discussion on Eigene Quest "entbuggen" within the Metin2 Private Server forum part of the Metin2 category.
04/12/2015, 12:07
|
#1
|
elite*gold: 0
Join Date: Apr 2015
Posts: 22
Received Thanks: 2
|
Eigene Quest "entbuggen"
Hallo Com,
ich habe ein wenig rum probiert und diese Statistik quest entworfen:
Code:
quest kill begin
state start begin
when login begin
pc.setqf("pvm_kills", 0)
pc.setqf("Metin_kills", 0)
send_letter("Monster Statistik")
end
when kill begin
if npc.get_race() then
pc.setqf("pvm_kills", pc.getqf("pvm_kills")+1)
if npc.get_race() == 8001 or 8002 or 8003 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
end
end
end
when info or button begin
say_title("Statistik ab Login:")
say("Getötet Monster:")
say_reward("Du hast bis jetzt "..pc.getqf("pvm_kills").." Monster getötet.")
say_reward("Du hast bis jetzt "..pc.getqf("Metin_kills").." Metins zerstört.")
end
end
end
Die Quest soll folgendes machen:
Aufzählen wie viele Monster man getötet hat (funktioniert auch soweit)
und aufzählen wie viele Metins man zerstört hat. Das funktioniert irgendwie nicht. Manchmal wenn man einen Metin zerstört fügt er direkt 25 anstatt einen hinzu. Außerdem wäre schön wenn die Statistik irgendwie gespeichert wird und nicht wieder alles löscht wenn man aus logt ?
Kann mir wer hier helfen und den Code anpassen ?
Wäre euch sehr dankbar
Vielen Dank
Gruß
Geneesys
|
|
|
04/12/2015, 12:20
|
#2
|
elite*gold: 15
Join Date: Apr 2015
Posts: 135
Received Thanks: 97
|
PHP Code:
quest kill begin state start begin when login begin pc.setqf("pvm_kills", 0) pc.setqf("Metin_kills", 0) send_letter("Monster Statistik") end when kill begin if npc.get_race() then pc.setqf("pvm_kills", pc.getqf("pvm_kills")+1) else npc.get_race() == 8001 or 8002 or 8003 then pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1) end end end when info or button begin say_title("Statistik ab Login:") say("Getötet Monster:") say_reward("Du hast bis jetzt "..pc.getqf("pvm_kills").." Monster getötet.") say_reward("Du hast bis jetzt "..pc.getqf("Metin_kills").." Metins zerstört.") end end end
__________________________________________________ ____________________
Habe extra noch eine neue geschrieben, falls die von oben nicht geht.
PHP Code:
quest statistik begin state start begin when letter begin send_letter("Killstatistik") end when button or info begin say_title("Killstatistik") say("") say("Monster: "..(pc.getqf("Monster_Kills") or 0)) say("Metins: "..(pc.getquf("Metin_Kills") or 0)) say("") select("Ok") setskin(NOWINDOW) send_letter("Killstatistik") end when kill begin if npc.get_race() == 8001 or npc.get_race() == 8002 or npc.get_race() == 8003 then pc.setqf("Metin_Kills", pc.getqf("Metin_Kills")+1) else pc.setqf("Monster_Kills", pc.getqf("Monster_Kills")+1) end end end end
|
|
|
04/12/2015, 12:26
|
#3
|
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
|
Fehler1:
Du hast bei einem Metin kill auch die Pvm-Kills hochgesetzt (wolltest du das?)
Fehler2:
Du kannst folgende Abfrage nicht machen:
Code:
if npc.get_race() == 8001 or 8002 or 8003 then
stattdessen müsstest du folgendes machen:
Code:
if npc.get_race() == 8001 or npc.get_race() == 8002 or npc.get_race() == 8003 then
Ich habe stattdessen die in_list() Funktion eingesetzt. Die findest du hier:
Das nächste mal bitte in diesem Thread posten:
Code:
quest kill begin
state start begin
when login begin
pc.setqf("pvm_kills", 0)
pc.setqf("metin_kills", 0)
send_letter("Monster Statistik")
end
when info or button begin
say_title("Statistik ab Login:")
say("Getötet Monster:")
say_reward("Du hast bis jetzt "..pc.getqf("pvm_kills").." Monster getötet.")
say_reward("Du hast bis jetzt "..pc.getqf("metin_kills").." Metins zerstört.")
end
when kill with not npc.is_pc() begin
if in_list(npc.get_race(), {8001, 8002, 8003}) then
pc.setqf("metin_kills", pc.getqf("metin_kills")+1)
return
end
pc.setqf("pvm_kills", pc.getqf("pvm_kills")+1)
end
end
end
|
|
|
04/12/2015, 12:39
|
#4
|
elite*gold: 0
Join Date: Apr 2015
Posts: 22
Received Thanks: 2
|
Danke für die Antworten,
leider sagt er bei deinem Script immer: Calls undeclared function!: in_list
Ich habe meinen Code noch ein wenig bearbeitet und das mit den Metins auch gelöst. (Zwar nicht so schön wie euers - aber es geht )
Code:
quest kill begin
state start begin
when login begin
pc.setqf("pvm_kills", 0)
pc.setqf("Metin_kills", 0)
send_letter("Monster Statistik")
end
when kill begin
if npc.get_race() then
pc.setqf("pvm_kills", pc.getqf("pvm_kills")+1)
if npc.get_race() == 8001 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8002 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8003 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8004 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8005 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8006 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8007 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8008 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8009 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8010 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8011 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8012 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8013 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8014 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8024 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8025 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8026 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8027 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
end
end
end
when info or button begin
say_title("Getötet Monster und zerstörte Metin Steine:")
say(" ")
say("Statistik ab Login:")
say_reward("Monster getötet: "..pc.getqf("pvm_kills").."")
say_reward("Metins zerstört: "..pc.getqf("Metin_kills").."")
end
end
end
Könnt ihr mir nur noch helfen wie ich es schaffe das er die Werte speichert ? So das sie auch noch nach einem Relog noch angezeigt werden ?
Wäre euch echt dankbar!
Gruß
Geneesys
|
|
|
04/12/2015, 12:44
|
#5
|
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
|
Quote:
Originally Posted by geneesys
Danke für die Antworten,
leider sagt er bei deinem Script immer: Calls undeclared function!: in_list
Ich habe meinen Code noch ein wenig bearbeitet und das mit den Metins auch gelöst. (Zwar nicht so schön wie euers - aber es geht )
Code:
quest kill begin
state start begin
when login begin
pc.setqf("pvm_kills", 0)
pc.setqf("Metin_kills", 0)
send_letter("Monster Statistik")
end
when kill begin
if npc.get_race() then
pc.setqf("pvm_kills", pc.getqf("pvm_kills")+1)
if npc.get_race() == 8001 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8002 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8003 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8004 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8005 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8006 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8007 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8008 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8009 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8010 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8011 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8012 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8013 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8014 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8024 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8025 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8026 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
elseif npc.get_race() == 8027 then
pc.setqf("Metin_kills", pc.getqf("Metin_kills")+1)
end
end
end
when info or button begin
say_title("Getötet Monster und zerstörte Metin Steine:")
say(" ")
say("Statistik ab Login:")
say_reward("Monster getötet: "..pc.getqf("pvm_kills").."")
say_reward("Metins zerstört: "..pc.getqf("Metin_kills").."")
end
end
end
Könnt ihr mir nur noch helfen wie ich es schaffe das er die Werte speichert ? So das sie auch noch nach einem Relog noch angezeigt werden ?
Wäre euch echt dankbar!
Gruß
Geneesys
|
Code:
quest kill begin
state start begin
when login begin
send_letter("Monster Statistik")
end
when info or button begin
say_title("Statistik:")
say("Getötet Monster und zerstörte Metin Steine")
say_reward("Du hast bis jetzt "..pc.getqf("pvm_kills").." Monster getötet.")
say_reward("Du hast bis jetzt "..pc.getqf("metin_kills").." Metins zerstört.")
end
when kill with not npc.is_pc() begin
if in_list(npc.get_race(), {8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 8011, 8012, 8013, 8014, 8024, 8025, 8026, 8027}) then
pc.setqf("metin_kills", pc.getqf("metin_kills")+1)
return
end
pc.setqf("pvm_kills", pc.getqf("pvm_kills")+1)
end
end
end
die Questfunktion "in_list" findest du in dem Thread den ich oben verlinkt habe.
|
|
|
04/12/2015, 12:49
|
#6
|
elite*gold: 0
Join Date: Apr 2015
Posts: 22
Received Thanks: 2
|
HEy und danke für deine Antwort,
ich versteh nicht ganz was du mit in_list meinst o:
Auch das:
Code:
function in_list(compare, list)
for i = 1, table.getn(list) do
if compare == list[i] then return true end
end
return false
end
... hilft mir nicht so ganz weiter ? Muss ich das noch in mein Script einbauen ?
EDIT;
Okey ich "war" dumm Wenn ich den Wert jedes mal beim Login auf 0 setzte kann er das auch nicht behalten D:
Vielen Dank
|
|
|
04/12/2015, 12:53
|
#7
|
elite*gold: 5
Join Date: Mar 2015
Posts: 499
Received Thanks: 376
|
Quote:
Originally Posted by geneesys
HEy und danke für deine Antwort,
ich versteh nicht ganz was du mit in_list meinst o:
Auch das:
Code:
function in_list(compare, list)
for i = 1, table.getn(list) do
if compare == list[i] then return true end
end
return false
end
... hilft mir nicht so ganz weiter ? Muss ich das noch in mein Script einbauen ? Ist die In_List Funktion die, die das ganze "speichert" ?
Vielen Dank
|
Du gehst in die Questlib. Fügst die Funktion da ein. Du kennst dann in die Quest_Functions list und fügst in_list ein.
|
|
|
04/12/2015, 12:57
|
#8
|
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
|
Nein, die in_list Funktion ist einfach zur Verkürzung der Abfrage ... :
ohne in_list:
Code:
if npc.get_race() == 8001 or npc.get_race() == 8002 or npc.get_race() == 8003 or npc.get_race() == 8004 then
mit in_list:
Code:
if in_list(npc.get_race(), {8001, 8002, 8003, 8004}) then
Zum Einbauen:
im Questordner ist eine Datei namens "questlib.lua", die musst du einmal runterziehen und ganz unten den Code von der in_list Funktion einfügen.
Dann gibt es im Questordner eine Datei names "quest_functions", die musst du auch einmal runterziehen und egal wo (Hauptsache in einer eigenen Zeile) schreibst du "in_list" rein.
Dann beides wieder hochladen und die Quest neu kompilieren
edit:
Quote:
Originally Posted by geneesys
EDIT;
Okey ich "war" dumm Wenn ich den Wert jedes mal beim Login auf 0 setzte kann er das auch nicht behalten D:
Vielen Dank
|
Das habe ich ja auch oben schon geschrieben ...
Ich hoffe die benutzt jetzt nicht deine Quest mit den tausenden Abfragen ...
|
|
|
04/12/2015, 14:46
|
#9
|
elite*gold: 0
Join Date: Apr 2015
Posts: 22
Received Thanks: 2
|
Hat super funktioniert =) Danke dir!
Darf ich dich noch was fragen :P ?
Wenn ich nun noch eine Statistik einfügen möchte von aufgehobenen Gegenstände:
Wie genau stelle ich das an ?
Soweit meine Theorie o.o (nicht lachen)
Code:
quest kill begin
state start begin
when login begin
send_letter("Statistik")
end
when info or button begin
say_title("Getötet Monster und zerstörte Metin Steine:")
say(" ")
say(pc.get_name().." hat bereits folgendes erreicht:")
say(" ")
say_reward("Monster getötet: "..pc.getqf("pvm_kills").."")
say_reward("Metins zerstört: "..pc.getqf("metin_kills").."")
say_reward("Truhen gesammelt: "..pc.getqf("truhen_pick").."")
end
when kill with not npc.is_pc() begin
if in_list(npc.get_race(), {8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 8011, 8012, 8013, 8014, 8024, 8025, 8026, 8027}) then
pc.setqf("metin_kills", pc.getqf("metin_kills")+1)
return
end
pc.setqf("pvm_kills", pc.getqf("pvm_kills")+1)
end
when 50125.pick begin
pc.setqf("truhen_pick", pc.getqf("truhen_pick")+1)
end
end
end
Was läuft da falsch ._. ?
|
|
|
04/12/2015, 14:53
|
#10
|
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
|
Den Trigger "pick" habe ich selbst noch nie benutzt, sollte aber laut Jayzon so funktionieren ... welchen Gamecore hast du?
|
|
|
04/12/2015, 15:02
|
#11
|
elite*gold: 0
Join Date: Apr 2015
Posts: 22
Received Thanks: 2
|
Entschuldigung das ich immer neue fragen stellen muss.
Wo genau finde ich die Gamecore info ? Habe gerade mal unter CH-core1 in die Version.txt geschaut:
2089M
Hoffe das ist gemeint :P
Ansonsten:
Kann ich das auch ohne "pick" lösen ? Anmeckern tut mein Server das nicht aber er "counted" es auch nicht.
Gruß
Geneesys
|
|
|
04/12/2015, 15:16
|
#12
|
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
|
Ne anders wüsste ich nicht ...
|
|
|
04/12/2015, 15:19
|
#13
|
elite*gold: 0
Join Date: Apr 2015
Posts: 22
Received Thanks: 2
|
Das ist schade o:
Trotzdem hast mir sehr geholfen!
Vielen Dank noch mal =)
|
|
|
04/12/2015, 15:20
|
#14
|
elite*gold: 0
Join Date: Apr 2015
Posts: 26
Received Thanks: 32
|
Quote:
Originally Posted by definitely not Sensenmann
Code:
quest kill begin
state start begin
when login begin
send_letter("Monster Statistik")
end
when info or button begin
say_title("Statistik:")
say("Getötet Monster und zerstörte Metin Steine")
say_reward("Du hast bis jetzt "..pc.getqf("pvm_kills").." Monster getötet.")
say_reward("Du hast bis jetzt "..pc.getqf("metin_kills").." Metins zerstört.")
end
when kill with not npc.is_pc() begin
if in_list(npc.get_race(), {8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 8011, 8012, 8013, 8014, 8024, 8025, 8026, 8027}) then
pc.setqf("metin_kills", pc.getqf("metin_kills")+1)
return
end
pc.setqf("pvm_kills", pc.getqf("pvm_kills")+1)
end
end
end
die Questfunktion "in_list" findest du in dem Thread den ich oben verlinkt habe.
|
Code:
local r = npc.get_race()
if r >= 8001 and r <= 8027 then
-- .....
end
|
|
|
04/12/2015, 15:23
|
#15
|
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
|
Quote:
Originally Posted by Remix
Code:
local r = npc.get_race()
if r >= 8001 and r <= 8027 then
-- .....
end
|
er möchte nicht alle zwischen ..1 und ..27
|
|
|
All times are GMT +2. The time now is 05:29.
|
|