Aller au contenu
Top-Metin2.org - Vous êtes à la recherche d'un serveur Metin 2 ? ×
×
×
  • Créer...
  • 0

Aide Quête


crelou

Question

Bonjour,

J'essaye de coder une quête mais je suis bloquer a un moment.

Je cherche a connaitre le sort que le personnage a en M1 et lui

upper en G1. Si quelqu'un sait comment faire, je suis preneur :)

 

Voici ma state qui seras utilisée

 

state recompense begin
	when __TARGET__.target.click or
		9001.chat."Skill G1" with pc.count_item(30251) == 1 and ??? begin
		target.delete("__TARGET__") 
	end
end

 

 

En postant ma demande d'aide, j'affirme avoir lu et accepté le règlement des demandes d'aides.

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 44
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans cette question

Messages recommandés

  • 0

Je pense avoir une idée, si je trouve, je la post


J'ai penser a ça mais aucun résultats, et je pense que c'est normal ^^ car je sais pas comment utiliser les 2

 

quest mama begin
state start begin
	when login or levelup with pc.level >= 22 begin
		set_state(information)
	end	
end
state information begin
	when letter begin
		send_letter("Skill G1")
		local v = find_npc_by_vnum(9001)

		if v!= 0 then
			target.vid("__TARGET__", v, "Skill G1")
		end
	end

	when button or info begin
		say_title("Skill G1")
			say("Allez voir le Marchand d'arme ")
	end

	when __TARGET__.target.click or
			9001.chat."Skill G1" with pc.count_item(30251) == 1 begin
		target.delete("__TARGET__")
		say(" Bravo ! Vous avez le joyau et vous avez")
		pc.remove_item(30102)
		say("accompli toutes les quêtes")
			if pc.has_master_skill () then
			pc.set_skill_level (30)
		end
	end
end
end

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Je veux une commande qui detecte le sort en M1

Exemple, Guerrier Corps à Corps, le joueur a monter son skill Aura en M1

Donc on le detecte via une quete, et on lui mets Aura en G1

Je cherche donc une commande permettant de faire ça, mais sans faire la difference de chaque sort Exemple, Quetes Skill P, je veux pas ça

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Lol, j'ai déjà essayé mon dieeu la galère, faut créer des fonctions et tout ça ou sinon c'est vraiment chiant et long. En gros il veut ça :

Voici vos skills qui sont actuellement M1, suivit d'un local où sont les skills et le joueur clique sur un des skills et il passe en G1.

 

Bonne chance pour les codeurs, perso' j'ai assez galéré donc je vais pas te la partager désolé ^^

Indice : soit vous créez une fonction et vous faites ça en total optimisation et rapidement soit vous faites ça rien qu'avec des "if" et vous en avez pour entre 600 et 1000 lignes de codage DIFFERENT et non pas copier coller.

Ou bien si vous êtes compétent, avec les "table.getn" etc etc.

Encore désolé crelou :x

Lien vers le commentaire
Partager sur d’autres sites

  • 0

D'accord, Bah sinon, je ferrais au plus simple.

Je fait un Dialogue avec 4 choix => 4 Personnages, puis 2 choix => Classe puis ils choisissent leurs sorts.

 

Un peu plus long, mais si il n'y a pas de commande, je vais pas en inventer une ^^

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Salut,

 

Tu peu créer ta propre commande, en t'aidant de la quête des pierres d'âmes.

 

La quête des pierres d'âmes contient une commande qui détecte toute compétences en G, il te faut juste te baser sur cette commande pour créer la tiennent qui détectera la compétence qui est en M, comme ça depuis ton item tu aura une liste de tes compétences en M.

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Ça marchera pas djloic vu que j'ai déjà essayé et de plus il ne comprendra rien.

C'est assez complexe, la fonction utilisée dans la pierre d'âme n'est ni dans le questlib ni dans le quest function... Elle doit sûrement être dans le game donc oublie cette fonction, trop difficile pour toi ^^

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Ne lockez pas le topic, sinon je devrais demander la réouverture !

 

D'ici une vingtaine de minutes je posterai la solution (je ne le fais pas maintenant car ça reste à peaufiner, ce message sert juste à dire qu'il ne faut pas lock)

 

 

Edit: Petit imprévu ! il va falloir attendre encore une quarantaine de minutes, laissez le topic ouvert !

 

 

Edit2: Voilà voilà, c'est fini !

 

Il reste quand même un petit bug, à la page où on choisis le skill qu'on veut UP, il y a le bouton "Annuler" qui est considéré comme un skill, lorsqu'on clic dessus ça nous envois sur la page de validation, mais ça n'a aucune incidence. En creusant un petit peu ce bug est réparable.

 

 

 

Pour commencer, mets ça dans ton questlib:

 

 

function BuildSkillMasterList(job, group)
local skill_vnum_list = {}
local skill_name_list = {}

if pc.get_skill_group() != 0 then
	local skill_list = special.active_skill_list[job+1][group]

	table.foreachi( skill_list,
		function(i, t)
			local lev = pc.get_skill_level(t)

			if lev == 20 then
				local name = locale.GM_SKILL_NAME_DICT[t]

				if name != nil then
					table.insert(skill_vnum_list, t)
					table.insert(skill_name_list, name)
				end
			end
		end
	)
end

table.insert(skill_vnum_list, 0)
table.insert(skill_name_list, locale.cancel)

return { skill_vnum_list, skill_name_list }
end

 

 

 

Puis ça dans ton quest_fonctions:

 

 

BuildSkillMasterList

 

 

 

 

Voilà la quête:

 

 

quest pnj_training_grandmaster_skill begin
   state start begin
when 20086.chat."Skill M1" with pc.count_item(30062) == 1 and pc.get_level() > 21 begin ---Modifie toutes ces données.
	say_title("Soulstone")

	if pc.get_skill_group() == 0 then
	say("Vous n'avez aucun pouvoir. "..pc.get_skill_group())
	return
    end

	if get_time() < pc.getqf("next_time") then -- and not is_test_server() then
	if pc.is_skill_book_no_delay() then
	    say("Vous pouvez mettre vos skill en G1.")
	    say("")
	    wait()
	    say_title("Soulstone")
	else
	    say("Vous devez attendre.")
	    return
	end
	end

    local result = BuildSkillMasterList(pc.get_job(), pc.get_skill_group())

    local vnum_list = result[1]
    local name_list = result[2]

    if table.getn(vnum_list) == 1 then
	say("Vous n'avez aucun pouvoir en M1")
	say("pouvant être upgrade en G1.")
	return
    end

    say("Choisissez votre pouvoir.")
    say("")

    local menu_list = {}
    table.foreach(name_list, function(i, name) table.insert(menu_list, name) end)
    table.insert(menu_list, "Quitter") 

    local s=select_table(menu_list)
    if table.getn(menu_list) == s then
	return
    end

    local skill_name=name_list[s]
    local skill_vnum=vnum_list[s]
    local skill_level = pc.get_skill_level(skill_vnum)
    local cur_alignment = pc.get_real_alignment()
    local need_alignment = 5+5*(skill_level-20) ---Points de grade nécessaires

    test_chat("Vos points de grade:"..cur_alignment)
    test_chat("Points de grade nécessaires:"..need_alignment)

    local title=string.format("%s maitre", skill_name, skill_level-20+1)

    say_title(title)
    say("Quand vous passez vos pouvoirs en G, ")
    say("vous perdez des points de grade !")
    say("")

    if cur_alignment<-19000+need_alignment then ---points de grade minimum pour pouvoir upgrade
	say_reward("Pas assez de points de grade.")
	return
    end

    if cur_alignment<0 then
	say_reward(string.format("Points de grade nécessaires: %d", need_alignment, need_alignment*2))
	need_alignment=need_alignment*2
    elseif cur_alignment		say_reward(string.format("Points de grade nécessaires:: %d", need_alignment))
	say_reward("Pas assez de points de grade.")
    else
	say_reward(string.format("Points de grade nécessaires: %d", need_alignment))
    end
    say("")

    local s=select("OK", "Quitter")	
    if s==2 then
	return
    end


    if cur_alignment>=0 and cur_alignment		say_title(string.format("%s ½T©w", title))
	say("Vous pouvez passer vos pouvoirs en P !")
	say("Réecrivez cette phrase pour pouvoir")
	say("passer vos pouvoirs en P: ")
	say_reward("PouvoirsP")
	say("")
	say("")
	local s=input()
	if s!="PouvoirP" then
	    return
	end
    end

    if get_time() < pc.getqf("next_time") then -- and not is_test_server() then
	if pc.is_skill_book_no_delay() then
	    pc.remove_skill_book_no_delay()
	else
	    say("Blah Blah Blah")
	    return
	end
    end

    pc.setqf("next_time", get_time()+time_hour_to_sec(number(0, 0))) ----Temps d'attente avant la prochaine utilisation

if need_alignment>0 and pc.countitem(30062) > 0 then ----Modifie l'ID de l'item


	if pc.set_skill_level(skill_vnum,30) then
	    pc.change_alignment(5) ---Au cas où l'upgrade rate, rajouter 5 points de grade à une personne


	    say_title(string.format("%s ", title))
	    if 30 == pc.get_skill_level(skill_vnum) then
		say(string.format("%s est déjà parfait", skill_name))
	    else
		say(string.format("%s grown successfully", skill_name, skill_level-20+1+1))
	    end
	    say("")
	    say_reward("successfully!")
	    say_reward(string.format("Spent Host Killer Points: %d ", need_alignment))
	    say("")
	else
	    say_title(string.format("%s ", title))
	    say("Votre pouvoir est maintenant en G !")
	    say("")
	    say("")
		pc.removeitem("30062", 1) ----Modifie l'ID de l'item supprimé
	    pc.change_alignment(-number(need_alignment/1, need_alignment/1)) ----par défaut 3 et 2
	end
    end

    item.remove()
end
function BuildGrandMasterSkillList(job, group)
    GRAND_MASTER_SKILL_LEVEL = 20
    PERFECT_MASTER_SKILL_LEVEL = 30

    local skill_list = special.active_skill_list[job+1][group]
    local ret_vnum_list = {}
    local ret_name_list = {}

    -- test_chat(string.format("job=%d, group=%d", job, group))

    table.foreach(skill_list, 
    function(i, skill_vnum) 
	local skill_level = pc.get_skill_level(skill_vnum)

	-- test_chat(string.format("[%d]=%d", skill_vnum, skill_level))
	if skill_level >= GRAND_MASTER_SKILL_LEVEL and skill_level < PERFECT_MASTER_SKILL_LEVEL then

	    table.insert(ret_vnum_list, skill_vnum)
	    local name=locale.GM_SKILL_NAME_DICT[skill_vnum]
	    if name == nil then name=skill_vnum end
	    table.insert(ret_name_list, name)
	end
    end)
    return {ret_vnum_list, ret_name_list}


    --return {ret_vnum_list, ret_name_list}

end
   end
end

 

 

 

 

C'est la quête de base des pierres d'âme en anglais, je n'ai donc traduis que ce qui était utile dans notre cas. Je n'ai pas supprimé ce qui nous servait à rien pour ce que tu veux car je dois avouer que j'avais la flemme, c'est un détail !

 

J'explique donc la quête pour être sûr que c'est bien ce que tu veux:

 

 

Une personne ayant l'item "30062" dans son inventaire et étant supérieur au lvl 21 parle au PNJ "20086". Ce PNJ lui dit qu'il peut passer ses skills en G. Arrive la liste des skills étant en M1, définie par ça:

 

if lev == 20 then

 

 

 

La personne choisis son skill et est mise en garde qu'elle va perdre du grade (j'ai mis des indications dans la quête). Une fois validé, le skill passe en G1 puis l'item est supprimé.

 

Tu peux choisir le temps jusqu'à la prochaine fois que cette personne peut re-up un skill grâce à ça:

 

 

 

	    pc.setqf("next_time", get_time()+time_hour_to_sec(number(0, 0)))

 

 

C'est donc en heure. Par défaut à la place des "0" c'est "8" et "12", ça fait donc que la personne doit attendre entre 8H et 12H pour pouvoir upgrade à nouveau un skill.

 

C'est assez bordel, mais ça fonctionne !

 

 

Normalement tu as tout, ça ne devrait pas poser de problème si ce n'est le bouton "Annuler".

Lien vers le commentaire
Partager sur d’autres sites

Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.


Information importante

Conditions d’utilisation / Politique de confidentialité / Règles / Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.