Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Funkcja kill w queście


Rekomendowane odpowiedzi

Opublikowano

Siema, może miał ktoś problem z tym iż funkcja kill w quescie wykonywała mu się 2x

Dodam tylko tyle że jeśli zabiję moba jest ok, funkcja wykonuje się 1x natomiast jak zabiję gracza funkcja wykonuje się 2x

 

Quest wygląda bardzo prosto gdyż użyłem go do testu:

quest test_killa begin
	state start begin
		when kill begin
			chat("Zabiłeś coś ")
		end
	end
end

Używam game 4k

Funkcja kill w source wygląda raczej normalnie:

	void CQuestManager::Kill(unsigned int pc, unsigned int npc)
	{
		//m_CurrentNPCRace = npc;
		PC * pPC;

		sys_log(0, "CQuestManager::Kill QUEST_KILL_EVENT (pc=%d, npc=%d)", pc, npc);

		if ((pPC = GetPC(pc)))
		{
			if (!CheckQuestLoaded(pPC))
				return;

			/* [hyo] ¸÷ kill˝Ă Áßşą Ä«żîĆĂ ŔĚ˝´ °ü·ĂÇŃ ĽöÁ¤»çÇ×
			   quest scriptżˇ when 171.kill begin ... µîŔÇ ÄÚµĺ·Î ŔÎÇĎż© ˝şĹ©¸łĆ®°ˇ Ăł¸®µÇľú´ő¶óµµ
			   ąŮ·Î returnÇĎÁö ľĘ°í ´Ů¸Ą °Ë»çµµ ĽöÇŕÇϵµ·Ď şŻ°ćÇÔ. (2011/07/21)
			*/   
			// call script
			m_mapNPC[npc].OnKill(*pPC);

			LPCHARACTER ch = GetCurrentCharacterPtr();
			LPPARTY pParty = ch->GetParty();
			LPCHARACTER leader = pParty ? pParty->GetLeaderCharacter() : ch;

			if (leader)
			{
				m_pCurrentPartyMember = ch;

				if (m_mapNPC[npc].OnPartyKill(*GetPC(leader->GetPlayerID())))
					return;

				pPC = GetPC(pc);
			}

			if (m_mapNPC[QUEST_NO_NPC].OnKill(*pPC))
				return;

			if (leader)
			{
				m_pCurrentPartyMember = ch;
				m_mapNPC[QUEST_NO_NPC].OnPartyKill(*GetPC(leader->GetPlayerID()));
			}
		}
		else
			sys_err("QUEST: no such pc id : %d", pc);
	}

8910814572903361049127.png

Opublikowano

tak jest na to diff na naprawę :) rozumiem że game 34k?

Nie, jak pisałem w temacie używam game 4k, ale daj difa pod 34k bo nie mogę znaleźć to spróbuję sb przepisać.

8910814572903361049127.png

Opublikowano

Ok, już sobie poradziłem:

xxx
Hey!
 
In questmanager.cpp you need to edit this line:
 
m_mapNPC[npc].OnKill(*pPC);
to this:
 
if(npc > 0)
{
	m_mapNPC[npc].OnKill(*pPC);
}
All the quest functions will work, but when you use 'when kill begin', it will good just for pc. It won't work with mobs. 
Examples:
when 101.kill begin  -> for mob
when kill with npc.get_race() == 101 begin -> for mob
when kill begin -> for pc
when kill with npc.is_pc() begin -> for pc
 
They all counts once per kill.
 
Kind regards

Jeśli nie można dawać linków do obcych for to go usuńcie:

8910814572903361049127.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...