Originally Posted by .Philipp
Hallo epvp-Community,
das hier ist mein erster Post, nachdem ich am Wochenende mit dem Erstellen eines Hamachi-Servers begonnen habe. Habt bitte Verständnis :) Ich benutze die Daroo 2011er Serverfiles, falls es jemanden interessiert.
Als ich die Dropps anpassen wollte und in die mob_drop_item.txt geschaut habe, kam mir das schon zeimlich verwirrend vor und selbst als ich bei Drops 100% angegeben habe, kamen die nicht durchgängig. Habe dann alle Drops aus den Dateien entfernt und habe mich dran gesetzt, alle Drops per Quest zu veranlassen (siehe Spoiler). Die Quests funktioniert weitestgehend perfekt ( muss nicht auf Programmierfehler untersucht werden, sollte alles zumindest funktionell passen)
PHP Code:
quest drop begin
state start begin
when login or levelup begin
pc.setqf("lvl",pc.get_level())
pc.setqf("job",pc.get_job())
pc.setqf("normal",1) -- Drops aus (0) / an (1)
pc.setqf("alternativ",1)
end
when kill with not npc.is_pc() begin
local input_normal ={ -- Normaldrop-Liste
-- 1: Mob, 2: Item, 3: %, 4: Anzahl, 5: Dropart*, 6: Mindestlevel, 7: Maxlevel
-- *(1: Drop mit Name; 2: Drop ins Inventar)
{8001,30100,100,1,1,1,20}, -- 5 er Metin
{8002,30100,100,1,1,1,25}, -- 10 er Metin
{8003,30100,100,1,1,1,30}, -- 15 er Metin
{8004,30100,100,1,1,1,35}, -- 20 er Metin
{8005,30100,100,1,1,1,40}, -- 25 er Metin
{8006,30100,100,1,1,1,45}, -- 30 er Metin
{8007,30100,100,1,1,1,50}, -- 35 er Metin
{8008,30100,100,1,1,1,55}, -- 40 er Metin
{8009,30100,100,1,1,1,60}, -- 45 er Metin
{8010,30100,100,1,1,1,65}, -- 50 er Metin
{8011,30100,100,1,1,1,70}, -- 55 er Metin
{8012,30100,100,1,1,1,75}, -- 60 er Metin
{8013,30100,100,1,1,1,80}, -- 65 er Metin
{8014,30100,100,1,1,1,85}, -- 70 er Metin
{8024,30100,100,1,1,1,90}, -- 75 er Metin
{8025,30100,100,1,1,1,95}, -- 80 er Metin
{8026,30100,100,1,1,1,100}, -- 85 er Metin
{8027,30100,100,1,1,1,105}, -- 90 er Metin ///// verbuggt?! 8027
{1093,50082,100,1,1,1,99},
}
local input_alternativ ={ -- Alternativdrops-Liste
-- 1: Item, 2: %, 3: Anzahl, 4: Dropart*, 5: Mindestlevel, 6: Maxlevel
-- *(1: Drop mit Name; 2: Drop ins Inventar)
}
if pc.getqf("normal") == 1 then -- normale Drops
for i = 1,(table.getn(input_normal)),1 do
if [B]npc.get_race()[/B] == input_normal[i][1] then
if (pc.getqf("lvl") >= input_normal[i][6] and pc.getqf("lvl") <= input_normal[i][7]) then
local r = number(1,100000)
if r <= (input_normal[i][3]*1000) then
if input_normal[i][5] == 1 then
game.drop_item_with_ownership(input_normal[i][2], input_normal[i][4])
elseif input_normal[i][5] == 2 then
pc.give_item2(input_normal[i][2], input_normal[i][4])
end
end
end
end
end -- end for
end
if pc.getqf("alternativ") == 1 then -- alternative Drops
for n = 1,(table.getn(input_alternativ)),1 do
if (pc.getqf("lvl") >= input_alternativ[n][5] and pc.getqf("lvl") <= input_alternativ[n][6]) then
local r = number(1,100000)
if r <= (input_alternativ[n][2]*1000) then
if input_alternativ[n][4] == 1 then
game.drop_item_with_ownership(input_alternativ[n][1], input_alternativ[n][3])
elseif input_alternativ[n][4] == 2 then
pc.give_item2(input_alternativ[n][1], input_alternativ[n][3])
end
end
end
end -- end for
end
end -- when kill
end -- state drop
end
Die Quest soll aktuell eben bei allen Metins ein bestimmtes Item droppen und beim Sensenmann die Sensenmanntruhe.
Bei Metin 5-85 geht das einwandfrei, der 90er wird aber einfach nicht erkannt (mit npc.get_race()). Mit dem Sensenmann ist mir dann das gleiche passiert. Nach Benutzen der Suchfunktion bin ich auf ähnliche Probleme gestoßen, dass dies durch mehrere Quest hervorgerufen wird, die alle den Kill eines Mobs abfragen (z. B.: [Only registered and activated users can see links. Click Here To Register...]). Dort wird allerdings vorgeschlagen, mit verschiedener Syntax vorzugehen (z. B. vnum.kill, kill with npc.get_race() oder when kill ... if npc.get_race==vnum then), was in meinem Fall allerdings auch nicht weitergeholfen hat. Hab dann zum Test mal die DT quest rausgenommen, in dem der Tod des Sensenmanns mit when 1093.kill with pc.in_dungeon() ... abgefragt wird, dann gings beim Sensenmann. Quest mit 90er Metins hab ich keine gefunden.
Zusammengefasst:
1. Liegt es nun also daran, dass mehrere Quests das selbe Event abfragen?
2. Kann man das theoretisch durch wechseln der Befehle/Bedingungen beheben? Wenn ja, wie?
3. Ist es generell ratsam, alle Drops durch eine Quest zu regeln? Der Server muss bei jdedem gekillten Mob die Quest starten.
4. Wie kann ich die Quest optimieren, um ressourcenschonender zu werden? (Bei erfolgreichem If kann return eingefügt werden beispielsweise, stand schon auf meiner To Do-Liste :D) Schickt mir bitte keine fertigen Quests, sondern erklärt oder macht Beispiele, will ja keine Quest sondern was dabei lernen.
Außerdem droppen Metins gelegentlich, trotz leerer mob_drop_item und leerer common_drop_item (in diesem Fall eher belanglos), immer noch Geiststeine. Woran liegt das und wie kann man das fixen?
Danke schon mal im Voraus!
€: die DT-Quest war ein Release von epvp für die Daroo files, weil diese buggy war. In der war auch der 90er Metin mit "8027.kill" enthalten, wenn ich diese entferne gehen beide. Liegt also an der Quest bzw. am doppelten Aufrufen.
================================================== =======
Antwort an HowToPlayxD:
Versuch mal statt einfach nur return lieber say("...") o.ä. auszugeben, dann dürfte sich das Fenster auch so schließen.
Eine weitere Option ist (was eher in älteren Quets in meinem Client verwendet wird) mit "npc.unlock() return" oder mit setskin(NOWINDOW).
Am besten sollte es aber gehen, wenn du einfach ein say-Befehl ausgibst mit dem zu z. B. auch mitteilen kannst, dass die Map erst ab lvl. 110 betretbar ist.
|