Register for your free account! | Forgot your password?

Go Back   elitepvpers > Popular Games > Metin2 > Metin2 Private Server > Metin2 PServer Guides & Strategies
You last visited: Today at 03:10

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[C++ und Quest] Pets verschwinden nicht nach Relog/Teleportation

Discussion on [C++ und Quest] Pets verschwinden nicht nach Relog/Teleportation within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.

Reply
 
Old 05/29/2016, 13:41   #16
 
I´m Raylee's Avatar
 
elite*gold: 105
Join Date: Jun 2015
Posts: 453
Received Thanks: 294
Nettes release!

Danke dir!

Best regards
Raylee
I´m Raylee is offline  
Old 05/29/2016, 17:13   #17
 
x"Kazuki's Avatar
 
elite*gold: 50
Join Date: Aug 2014
Posts: 508
Received Thanks: 201
Sehr schönes Release, kenne mich mit dem Code nicht sonderlich gut aus, aber bleibt der Boni vom gerufenen Pet auch nach dem Teleport? Also nicht das er sich dann immer wieder summiert?

Mit freundlichen Grüßen,
x"Kazuki
x"Kazuki is offline  
Old 05/29/2016, 17:23   #18
 
-Exploit's Avatar
 
elite*gold: 320
The Black Market: 154/1/0
Join Date: May 2015
Posts: 3,441
Received Thanks: 383
Danke funktioniert ohne Probleme


Quote:
Originally Posted by x"Kazuki View Post
Sehr schönes Release, kenne mich mit dem Code nicht sonderlich gut aus, aber bleibt der Boni vom gerufenen Pet auch nach dem Teleport? Also nicht das er sich dann immer wieder summiert?

Mit freundlichen Grüßen,
x"Kazuki
Das Pet wird neu gerufen wenn man sich Teleportiert, also bleiben die Bonis.
-Exploit is offline  
Thanks
1 User
Old 05/29/2016, 18:35   #19
 
DasSchwarzeT's Avatar
 
elite*gold: 399
Join Date: Sep 2011
Posts: 5,323
Received Thanks: 3,938
Quote:
Originally Posted by x"Kazuki View Post
Sehr schönes Release, kenne mich mit dem Code nicht sonderlich gut aus, aber bleibt der Boni vom gerufenen Pet auch nach dem Teleport? Also nicht das er sich dann immer wieder summiert?

Mit freundlichen Grüßen,
x"Kazuki
Mein Vorposter hat das schon ziemlich gut zusammengefasst. Das Pet wird ja einfach neu gerufen.. Also ist alles wie wenn man nach dem Teleportieren auf das Siegel klicken würde. Im Prinzip wird das einfach nur simuliert.
DasSchwarzeT is offline  
Old 05/31/2016, 07:32   #20
 
elite*gold: 0
Join Date: Dec 2013
Posts: 9
Received Thanks: 0
Helo,
Could you send me your working quest.

Because of my your system does not work.
uki0008 is offline  
Old 06/28/2017, 16:57   #21
 
elite*gold: 0
Join Date: Aug 2016
Posts: 4
Received Thanks: 0
Quote:
Originally Posted by DasSchwarzeT View Post
Moin,

hier der momentan beste Weg, den ich gefunden habe, dass das zuletzt gerufene Pet nach einem Relog/Teleportation wieder gerufen wird.
Eigentlich ginge es ohne C++ Part, allerdings schmiert der Core dann ab, wenn man ein Pet ruft, das Item weghandelt oder auf den Boden wirft und sich anschließend relogt.

Video:

Gallery 1

Als erstes öffnen wir die pet_system.quest und suchen nach:

Code:
pet.summon(mobVnum, petName, false)
darunter schreiben wir

Code:
pc.setqf("pet_vnum", mobVnum)
Nun suchen wir nach

Code:
pet.unsummon(mobVnum)
und schreiben darunter

Code:
pc.setqf("pet_vnum", 0)
Anschließend vor

Code:
when 38200.use [...] blabla
Code:
		when login with pc.getqf("pet_vnum") != 0 begin
			item.select(pc.getqf("pet_item_id"))
			pet.summon(pc.getqf("pet_vnum"), "'s Pet", false)
			
		end
einfügen.

Jetzt nach

Code:
local pet_info = pet_system.get_pet_info(item.vnum)
suchen

und darunter

Code:
pc.setqf("pet_item_id", item.get_id())
setzen.
Das war es in der Quest.

Sourcepart:

Wir öffnen die PetSystem.cpp und suchen nach

Code:
bool CPetActor::Update(DWORD deltaTime)
Und fügen über

Code:
this->Unsummon();
bzw

Code:
Unsummon();
(je nachdem wie euer Source aussieht, keine Ahnung wie es default ist)

das hier ein:

Code:
		m_pkOwner->SetQuestFlag("pet_system.pet_vnum", 0);
		m_pkOwner->SetQuestFlag("pet_item_id.pet_vnum", 0);

Sollte dann ca. so aussehen:
Code:
bool CPetActor::Update(DWORD deltaTime)
{
	bool bResult = true;

	if((this->GetSummonItemVID() != 0 && (NULL == ITEM_MANAGER::instance().FindByVID(this->GetSummonItemVID()) || ITEM_MANAGER::instance().FindByVID(this->GetSummonItemVID())->GetOwner() != this->GetOwner())))
	{
		m_pkOwner->SetQuestFlag("pet_system.pet_vnum", 0);
		m_pkOwner->SetQuestFlag("pet_item_id.pet_vnum", 0);
		this->Unsummon();
		return true;
	}

	if(this->IsSummoned() && HasOption(EPetOption_Followable))
	{
		bResult = bResult && this->_UpdateFollowAI();
	}

	return bResult;
}
Wichtig:

Eure pet_system.quest muss mit
Code:
quest pet_system begin
beginnen. Wenn sie anders beginnt müsst ihr beim Sourceschritt das
Code:
pet_system.
mit eurem Questnamen (Questname != Dateiname) austauschen.

Danke an:
Socialized für die Idee mit dem item_id speichern.



P.S: Die Lösung ist nicht sonderlich toll, wenn wer eine schönere hat immer her damit.
Do you can send mi this quest?
I need it
Dekert is offline  
Old 06/28/2017, 23:09   #22
 
DasSchwarzeT's Avatar
 
elite*gold: 399
Join Date: Sep 2011
Posts: 5,323
Received Thanks: 3,938
Quote:
Originally Posted by Dekert View Post
Do you can send mi this quest?
I need it
Code:
quest pet_system begin
    state start begin
        function get_pet_info(itemVnum)
            pet_info_map = {
            --  [ITEM VNUM] MOB_VNUM, DEFAULT NAME
                [53001]     = { 34001, gameforge.pet_system._010_say ,0},
                [53002]     = { 34002, gameforge.pet_system._020_say ,0},
				[53003]     = { 34003, gameforge.pet_system._030_say ,0},
				[53005]     = { 34004, gameforge.pet_system._040_say, 0},
				[53006]     = { 34009, gameforge.pet_system._050_say, 0},
                [53010]     = { 34008, gameforge.pet_system._060_say, 0},
                [53011]     = { 34007, gameforge.pet_system._070_say, 0},
                [53012]     = { 34005, gameforge.pet_system._080_say, 0},
                [53013]     = { 34006, gameforge.pet_system._090_say, 0},
                [53007]     = { 34010, gameforge.pet_system._100_say, 0},
                [53008]     = { 34011, gameforge.pet_system._110_say, 0},
                [53009]     = { 34012, gameforge.pet_system._120_say, 0},
				[53004]     = { 34017, gameforge.pet_system._200_say ,0},
				[53029]     = { 34030, gameforge.pet_system._210_say ,0},
				[53030]     = { 34031, gameforge.pet_system._220_say ,0},
				[53031]     = { 34032, gameforge.pet_system._230_say ,0},
				[53032]     = { 34033, gameforge.pet_system._250_say ,0},
				[53022]     = { 34025, gameforge.pet_system._260_say ,0},
                -- GF specials
                [38200]     = { 34006, gameforge.pet_system._090_say, 0},
                [38201]     = { 34006, gameforge.pet_system._090_say, 0},
				[53014]     = { 34013, " Henkerchen", 0},
				[53015]     = { 34014, " Henkerchen (gold)", 0},
				[53016]     = { 34015, gameforge.pet_system._150_say, 0},
            }

            itemVnum = tonumber(itemVnum)

            return pet_info_map[itemVnum]
        end
		function get_spawn_effect_file(idx)
			effect_table = {
				[0] = nil,
				[1] = "d:\\\\ymir work\\\\effect\\\\etc\\\\appear_die\\\\npc2_appear.mse",
			}
			return effect_table [idx]
		end
		when login with pc.getqf("pet_vnum") != 0 begin
			item.select(pc.getqf("pet_item_id"))
			pet.summon(pc.getqf("pet_vnum"), "'s Pet", false)
			
		end
        when 53022.use or 53004.use or 53031.use or 38200.use or 38201.use or 53007.use or 53013.use or 53012.use or 53011.use or 53010.use or 53006.use  or 53005.use or 53002.use or 53001.use or 53003.use or 53008.use or 53009.use or
			 53014.use or 53015.use  or 53016.use or 53017.use begin
            local pet_info = pet_system.get_pet_info(item.vnum)
			pc.setqf("pet_item_id", item.get_id())
			
            if null != pet_info then

                local mobVnum = pet_info[1]
                local petName = pet_info[2]
				local spawn_effect_file_name = pet_system.get_spawn_effect_file(pet_info[3])

                if true == pet.is_summon(mobVnum) then
					if spawn_effect_file_name != nil then
						pet.spawn_effect (mobVnum, spawn_effect_file_name)
					end
                    pet.unsummon(mobVnum)
					pc.setqf("pet_vnum", 0)
                else
                    if pet.count_summoned() < 1 then
                        pet.summon(mobVnum, petName, false)
						pc.setqf("pet_vnum", mobVnum)
                    else
                        syschat(gameforge.pet_system._030_chat)
                    end
					if spawn_effect_file_name != nil then
						pet.spawn_effect (mobVnum, spawn_effect_file_name)
					end
                end -- if pet.is_summon
            end  -- if null != pet_info
        end -- when
    end -- state
end -- quest
You still have to do the Source stuff.
DasSchwarzeT is offline  
Old 06/29/2017, 21:57   #23
 
elite*gold: 0
Join Date: Aug 2016
Posts: 4
Received Thanks: 0
Quote:
Originally Posted by DasSchwarzeT View Post
Code:
quest pet_system begin
    state start begin
        function get_pet_info(itemVnum)
            pet_info_map = {
            --  [ITEM VNUM] MOB_VNUM, DEFAULT NAME
                [53001]     = { 34001, gameforge.pet_system._010_say ,0},
                [53002]     = { 34002, gameforge.pet_system._020_say ,0},
				[53003]     = { 34003, gameforge.pet_system._030_say ,0},
				[53005]     = { 34004, gameforge.pet_system._040_say, 0},
				[53006]     = { 34009, gameforge.pet_system._050_say, 0},
                [53010]     = { 34008, gameforge.pet_system._060_say, 0},
                [53011]     = { 34007, gameforge.pet_system._070_say, 0},
                [53012]     = { 34005, gameforge.pet_system._080_say, 0},
                [53013]     = { 34006, gameforge.pet_system._090_say, 0},
                [53007]     = { 34010, gameforge.pet_system._100_say, 0},
                [53008]     = { 34011, gameforge.pet_system._110_say, 0},
                [53009]     = { 34012, gameforge.pet_system._120_say, 0},
				[53004]     = { 34017, gameforge.pet_system._200_say ,0},
				[53029]     = { 34030, gameforge.pet_system._210_say ,0},
				[53030]     = { 34031, gameforge.pet_system._220_say ,0},
				[53031]     = { 34032, gameforge.pet_system._230_say ,0},
				[53032]     = { 34033, gameforge.pet_system._250_say ,0},
				[53022]     = { 34025, gameforge.pet_system._260_say ,0},
                -- GF specials
                [38200]     = { 34006, gameforge.pet_system._090_say, 0},
                [38201]     = { 34006, gameforge.pet_system._090_say, 0},
				[53014]     = { 34013, " Henkerchen", 0},
				[53015]     = { 34014, " Henkerchen (gold)", 0},
				[53016]     = { 34015, gameforge.pet_system._150_say, 0},
            }

            itemVnum = tonumber(itemVnum)

            return pet_info_map[itemVnum]
        end
		function get_spawn_effect_file(idx)
			effect_table = {
				[0] = nil,
				[1] = "d:\\\\ymir work\\\\effect\\\\etc\\\\appear_die\\\\npc2_appear.mse",
			}
			return effect_table [idx]
		end
		when login with pc.getqf("pet_vnum") != 0 begin
			item.select(pc.getqf("pet_item_id"))
			pet.summon(pc.getqf("pet_vnum"), "'s Pet", false)
			
		end
        when 53022.use or 53004.use or 53031.use or 38200.use or 38201.use or 53007.use or 53013.use or 53012.use or 53011.use or 53010.use or 53006.use  or 53005.use or 53002.use or 53001.use or 53003.use or 53008.use or 53009.use or
			 53014.use or 53015.use  or 53016.use or 53017.use begin
            local pet_info = pet_system.get_pet_info(item.vnum)
			pc.setqf("pet_item_id", item.get_id())
			
            if null != pet_info then

                local mobVnum = pet_info[1]
                local petName = pet_info[2]
				local spawn_effect_file_name = pet_system.get_spawn_effect_file(pet_info[3])

                if true == pet.is_summon(mobVnum) then
					if spawn_effect_file_name != nil then
						pet.spawn_effect (mobVnum, spawn_effect_file_name)
					end
                    pet.unsummon(mobVnum)
					pc.setqf("pet_vnum", 0)
                else
                    if pet.count_summoned() < 1 then
                        pet.summon(mobVnum, petName, false)
						pc.setqf("pet_vnum", mobVnum)
                    else
                        syschat(gameforge.pet_system._030_chat)
                    end
					if spawn_effect_file_name != nil then
						pet.spawn_effect (mobVnum, spawn_effect_file_name)
					end
                end -- if pet.is_summon
            end  -- if null != pet_info
        end -- when
    end -- state
end -- quest
You still have to do the Source stuff.
Work. Thank you very much but now my quest for buff pets don't work.

Quest:


Can you help me?
Dekert is offline  
Reply


Similar Threads Similar Threads
Problem Boni verschwinden nach relog
12/11/2013 - Metin2 Private Server - 6 Replies
Servus say_title("VIP-System:") say("") say("Herzlichen Glückwunsch zu deinem neuen (VIP) - Status :)") affect.add_collect(apply.ATTBONUS_HUMAN, 15,60*60*24*365*60) affect.add_collect(apply.MAX_HP, 5000,60*60*24*365*60) affect.add_collect(apply.apply.CRITICAL_PCT, 5,60*60*24*365*60) affect.add_collect(apply.apply.PENERATE_PCT, 5,60*60*24*365*60) set_state(__COMPLETE__)
[Help]Items verschwinden nach Relog
02/20/2013 - Metin2 Private Server - 2 Replies
Hallo Com, Ich hab ein Problem undzwar verschwinden Items nach einem Relog hab kein reboot gemacht! Hab alles versucht aber es klappt nicht Für jede hilfreiche antwort gibt's ein THX Danke im Vorraus
Bioquest Bonis verschwinden nach relog ²
10/08/2011 - Metin2 Private Server - 5 Replies
Hallo Warum verschwinden meine BioquestBonis nach dem Relog?? Hier die Quest bioquest - Pastebin.com Jemand ne Ahnung?
Biobelohnungen verschwinden nach relog
10/04/2011 - Metin2 Private Server - 3 Replies
Servus Warum verschwinden die Biobelohnungen nach einem relog? keine Ahnung warum
[BUG]Das Verschwinden nach dem Relog
07/04/2011 - Metin2 Private Server - 8 Replies
Hallo liebe Elitepvp´ler Und zwar habe ich folgendes Problem: Nach dem Relog / Teleporten etc verschwinden jegliche Buffs und Anderes. Wenn ein GM einen Chatblock vergibt, verschwindet dieser, wenn er sich unsichtbar macht, wird er nach dem Relog sichtbar und bei den Spielern verschwindet jeder Buff Ausserdem, was sehr gravierend ist, die Bioquest-Belohnungen verschwinden auch! Ich bitte um Hilfe oder wenigstens Ansätze, woran es liegen könnte ! MfG - Koala



All times are GMT +2. The time now is 03:10.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.