[SERVICE] Die Questkontrolle

09/14/2015 20:58 Ide.#11896
Quote:
Originally Posted by .Colossus. View Post
Code:
when 1901.kill with pc.get_level() <= 82 begin                -- max 10 level höher    
			if pc.getqf("bomben_anzahl") <= 0 then
				pc.setqf("bomben_anzahl", 66)
            end    
            pc.setqf("bomben_anzahl", pc.getqf("bomben_anzahl") - 1)
            game.drop_item_with_ownership(25040,1)                    -- 100% Segi 
            game.drop_item_with_ownership(70102,1)                    -- 100% Zen-Bohne
            game.drop_item_with_ownership(50077,1)                    -- 100% Truhe
            game.drop_item_with_ownership(1,200)
            if pc.getqf("bomben_anzahl") > 0 then
                game.drop_item_with_ownership(1,200)
            end
end
Habe es wie folgt gelöst:

PHP Code:


--------------------------------------------------------------------------------------------------------------------
                                     -- 
Neunschwanz Lv.72 -- 
--------------------------------------------------------------------------------------------------------------------
when kill with npc.get_race() == 1901 and pc.get_level() <= 82 begin    -- max 10 Level höher
            game
.drop_item_with_ownership(25040,1)                    -- 100Segi 
            game
.drop_item_with_ownership(70102,1)                    -- 100Zen-Bohne
            game
.drop_item_with_ownership(50077,1)                    -- 100Truhe
            
for 166do
                
game.drop_item_with_ownership(1,200)
            
end
end 
Für die Leute, die wissen wollen was genau passiert:

Code:
for i = 1, 66, 1 do
Dies ist eine Schleifenfunktion, sprich der darauf folgende Befehl/e, in meinem Fall:

Code:
game.drop_item_with_ownership(1,200)
wird 66x mal wiederholt. Wer jetzt einen zufälligen Yangdrop haben will (es gibt keine Begrenzung soweit ich weiß), löst das ganze mit folgendem Befehl:
Code:
number(200,400)
Der niedrigste Yangdrop beträgt in diesem Fall 200 und der höchste 400 Yang.

Zusammen gesetzt sieht das ganze wie folgt aus:

Code:
game.drop_item_with_ownership(1,number(200,400))
Hoffe damit konnte ich anderen weiterhelfen. :)
09/15/2015 14:14 rollback#11897
Quote:
Originally Posted by Ide. View Post
Habe es wie folgt gelöst:
Gut erklärt ;)

Ich würde die Abfrage, ob das Monster 10 Level höher ist generisch machen.
Dafür müsste folgendes in die Questlib:
Code:
local mob_levels = {}

for _,v in ipairs(game.mysql_query("SELECT vnum, level FROM player.mob_proto;")) do
	mob_levels[tonumber(v[1])] = tonumber(v[2])
end

function npc.get_level(vnum)
	return mob_levels[vnum or npc.get_race()]
end

function npc.get_level_difference(vnum)
	return math.abs(pc.get_level() - npc.get_level(vnum))
end
Die Quest könnte dann so aussehen:
Code:
when kill with npc.get_race() == 1901 and npc.get_level_difference() <= 10 begin    -- max 10 Level höher 
	game.drop_item_with_ownership(25040,1)                    -- 100% Segi  
	game.drop_item_with_ownership(70102,1)                    -- 100% Zen-Bohne 
	game.drop_item_with_ownership(50077,1)                    -- 100% Truhe 
	for i = 1, 66 do 
		game.drop_item_with_ownership(1,math.random(200, 400)) 
	end
end
ausserdem würde ich vielleicht das Level des Spielers / den Levelunterschied zum Monster bei der Größe der Yangklumpen mit einbeziehen.
09/16/2015 18:24 brrr Remix#11898
Quote:
Originally Posted by Seחsi View Post
Gut erklärt ;)

Ich würde die Abfrage, ob das Monster 10 Level höher ist generisch machen.
Dafür müsste folgendes in die Questlib:
Code:
local mob_levels = {}

for _,v in ipairs(game.mysql_query("SELECT vnum, level FROM player.mob_proto;")) do
	mob_levels[tonumber(v[1])] = tonumber(v[2])
end

function npc.get_level(vnum)
	return mob_levels[vnum or npc.get_race()]
end

function npc.get_level_difference(vnum)
	return math.abs(pc.get_level() - npc.get_level(vnum))
end
Die Quest könnte dann so aussehen:
Code:
when kill with npc.get_race() == 1901 and npc.get_level_difference() <= 10 begin    -- max 10 Level höher 
	game.drop_item_with_ownership(25040,1)                    -- 100% Segi  
	game.drop_item_with_ownership(70102,1)                    -- 100% Zen-Bohne 
	game.drop_item_with_ownership(50077,1)                    -- 100% Truhe 
	for i = 1, 66 do 
		game.drop_item_with_ownership(1,math.random(200, 400)) 
	end
end
ausserdem würde ich vielleicht das Level des Spielers / den Levelunterschied zum Monster bei der Größe der Yangklumpen mit einbeziehen.
solltest bei der npc.get_level funktion ein bisschen error handling betreiben
return mob_levels[vnum or npc.get_race()] or 0 würde besser sein falls der index nicht existiert
09/24/2015 11:13 I´m Raylee#11899
Hi :)
Kann mir jemand bitte bei dieser Quest helfen?

Ich kann diese Quest nicht compilen :/
Code:
quest levelup_notice begin
	state start begin
		when login or levelup begin
			local gm_allowed = true -- Ob bei GMs die Meldung auch kommt
			if not gm_allowed and pc.is_gm() then return end
			local level_list = {
				10,20,30,40,50,60,70,80,90,100
			}
			table.foreach(level_list, function(i)
				if pc.get_level() == level_list[i] then
					notice_all(string.format("Der Spieler %s hat soeben das Level %d erreicht!", pc.get_name(), level_list[i])) break
				end
			end)
		end
	end
end


Fehler:
09/24/2015 13:07 .Various#11900
Quote:
Originally Posted by I´m Raylee View Post
Hi :)
Kann mir jemand bitte bei dieser Quest helfen?

Ich kann diese Quest nicht compilen :/
Code:
quest levelup_notice begin
	state start begin
		when login or levelup begin
			local gm_allowed = true -- Ob bei GMs die Meldung auch kommt
			if not gm_allowed and pc.is_gm() then return end
			local level_list = {
				10,20,30,40,50,60,70,80,90,100
			}
			table.foreach(level_list, function(i)
				if pc.get_level() == level_list[i] then
					notice_all(string.format("Der Spieler %s hat soeben das Level %d erreicht!", pc.get_name(), level_list[i])) break
				end
			end)
		end
	end
end


Fehler:
Untested, sollte aber gehen:

Code:
quest levelup_notice begin
	state start begin
		when login or levelup begin
			local level_list = ({
				[10] = 10,	[20] = 20,	[30] = 30,	[40] = 40,	[50] = 50,	[60] = 60,	[70] = 70,	[80] = 80,	[90] = 90,	[100] = 100
			})[pc.get_level()]
			if level_list == nil then
				return
			else
				notice_all(string.format("Der Spieler %s hat soeben das Level %d erreicht!", pc.get_name(), level_list))
			end
		end
	end
end
09/24/2015 21:30 I´m Raylee#11901
Danke dir funktioniert super! :)
09/25/2015 18:12 MilkingCow#11902
Hab ein kleines Problem mit meiner give_basic_weapon.quest.
Queste erst seit gestern, und konnte den Fehler nicht finden.
Bin über jede Antwort erfreut :)

09/25/2015 19:04 zazadi#11903
Quote:
Originally Posted by MilkingCow View Post
Hab ein kleines Problem mit meiner give_basic_weapon.quest.
Queste erst seit gestern, und konnte den Fehler nicht finden.
Bin über jede Antwort erfreut :)

So sollte es denke ich mal gehen:
09/25/2015 19:32 MilkingCow#11904
Vielen Dank, werde ich testen.
09/27/2015 20:56 MilkingCow#11905
Ich nochmal^^
Bei der Quest ist noch ein Fehler drinne.
Hab noch ein paar mal durchgeschaut aber nichts gefunden.

Danke im vorraus :)
09/27/2015 22:41 Ide.#11906
Quote:
Originally Posted by MilkingCow View Post
Ich nochmal^^
Bei der Quest ist noch ein Fehler drinne.
Hab noch ein paar mal durchgeschaut aber nichts gefunden.

Danke im vorraus :)
Was wird denn als Fehler angegeben?

Update:

Ich habe mal drüber geschaut und war der Meinung das ein end falsch gesetzt war.
Teste mal folgendes:


Update²: Naverwy's Ausbesserung editiert.
09/27/2015 23:25 Nick#11907
Quote:
Originally Posted by Ide. View Post
Was wird denn als Fehler angegeben?

Update: Ich habe mal drüber geschaut und war der Meinung das ein end falsch gesetzt war.
Teste mal folgendes:

Der Name der Quest muss noch geändert werden, andernfalls können die Funktionen nicht aufgerufen werden.

Code:
quest give_basic_weapon begin
durch
Code:
quest eq begin
ersetzen. Der Name kann auch beibehalten werden, dafür müsste

Code:
eq.normal()
durch

Code:
give_basic_weapon.normal()
und

Code:
eq.maltasia()
durch

Code:
give_basic_weapon.maltasia()
ersetzt werden.

lg
09/27/2015 23:29 Ide.#11908
Quote:
Originally Posted by Naverwy View Post
Danke für's verbessern, hatte das Problem noch nie.
Bin aber dennoch der Meinung das auch ein end falsch gesetzt war...

Habe deins mal mit reineditiert. :)
09/28/2015 14:11 MilkingCow#11909
Quote:
Originally Posted by Naverwy View Post
Der Name der Quest muss noch geändert werden, andernfalls können die Funktionen nicht aufgerufen werden.

Code:
quest give_basic_weapon begin
durch
Code:
quest eq begin
ersetzen. Der Name kann auch beibehalten werden, dafür müsste

Code:
eq.normal()
durch

Code:
give_basic_weapon.normal()
und

Code:
eq.maltasia()
durch

Code:
give_basic_weapon.maltasia()
ersetzt werden.

lg
Vielen dank. Dachte ich kann das so verwenden wenn es aufgerufen wird.

Mfg

€: Habe die Quest getestet. Geht auch alles soweit. Aber sobald ich ein EQ wähle bleiben die schwarzen Ränder und es passiert nichts.
[Only registered and activated users can see links. Click Here To Register...]
09/28/2015 18:52 poXavincS#11910
Hello,

I have a give_basic_weapon.start question, but doesn't work ! I'll be mad soon

Code:
if pc . getqf ( "basic_weapon" ) == 0 then
	say ( pc.get_name() .. " İllüminati2'ye Hoşgeldin.") 
	say ( "" ) 
	say ("Karakterine uygun ekipmanlarını aldın" ) 
	say ( "") 
	say ( "" ) 
	say ("Katokamb, Şeytan Kulesi aktiftir,") 
	say ("70'den sonra seviye görevleri başlar") 
	say ("Server ne kolay ne de zordur, edit satışı yoktur.") 
	say ("[TL]Myth") 
	say ("[TL]REAL") 
	say ("ile iletişime geçebilirsiz") 
	say ( "" ) 
	if pc . get_job ( ) == 0 then --savasci
		pc . give_item2 ( "11269" , 1 )
		pc . give_item2 ( "109" , 1 )
		pc . give_item2 ( "3099" , 1 ) --buzlu uc
		pc . give_item2 ( "12249" , 1 ) --kask
		notice_all ( pc.get_name( .. " (Savaşçı) Yeni oyuncu ") 
	elseif pc . get_job ( ) == 1 then --ninja
		pc . give_item2 ( "1069" , 1 )  -- hancer
		pc . give_item2 ( "2099" , 1 ) --yay
		pc . give_item2 ( "8004" , 200 ) --ok
		pc . give_item2 ( "8004" , 200 ) --ok
		pc . give_item2 ( "8004" , 200 ) --ok
		pc . give_item2 ( "8004" , 200 ) --ok
		pc . give_item2 ( "11469" , 1 ) -- zırh
		notice_all ( pc.get_name( .. " (Ninja) Yeni Oyuncu ") 
	elseif pc . get_job ( ) == 2 then --sura
		pc . give_item2 ( "109" , 1 )
		pc . give_item2 ( "11669" , 1 )
		pc . give_item2 ( "12529" , 1 ) --kask
		notice_all ( pc.get_name( .. " (Sura) Yeni Oyuncu ") 
	elseif pc . get_job ( ) == 3 then --saman
		pc . give_item2 ( "7099" , 1 )
		pc . give_item2 ( "5059" , 1 )
		pc . give_item2 ( "5069" , 1 ) --50lv can
		pc . give_item2 ( "12669" , 1 )
		pc . give_item2 ( "11869" , 1 )
		notice_all ( pc.get_name( .. " (Şaman) Yeni Oyuncu ") 
	end 
	command ("level 48")
	-- iç item
	pc . give_item2 ( "14149" , 1 )
	pc . give_item2 ( "16149" , 1 )
	pc . give_item2 ( "17169" , 1 )
	pc . give_item2 ( "15169" , 1 )
	pc . give_item2 ( "13049" , 1 ) 
	pc . give_item2 ( "40002" , 1 )
	-- iç item

	--ay özütleri
	pc . give_item2 ( "72730" , 1 ) --oto mana
	pc . give_item2 ( "72726" , 1 ) --oto hp
	--ay özütleri

	horse . set_level ( 21 )
	horse . ride ()
	pc . give_item2 ( "71050" , 200 ) 
	pc . give_item2 ( "72702" , 1 ) 
	pc . give_gold ( "5000000" ) 
	pc . give_item2 ( 50052 )
	pc . changealignment ( 2500 ) 
	pc . setqf ( "basic_weapon" , 1 ) 
end
When If I did in GM account /reload q, is refresh object in all quest?

Thankl you for interest.