Skocz do zawartości
Opublikowano

Siemanko, banalny quest w sumie, lecz siedze ponad godzine z chatem gpt, i rozkminiamy dlaczego u mnie to nie dziala haha

image.png.7cedc1a5b278909b68108e92c43f437a.png

 

Probówalem naprawde na z 10 roznych sposób i to co sie dowiedzialem, czy moze inaczej, to co wydaje mi sie ze dziala to napewno notice_all bo juz mam uzytą te linijke w innym skrypcie z lvlup info, wiec ona chyba jest dobrze napisana, nastepnie zauwazylem ze piszac when kill na koncu musi byc with, nie dokonca jestem pewny ale z moich testów chyba wlasnie tak.

Jakby skrypt wyglada poprawnie chyba ze naprawde zrobilem gdzies glupote. nie wiem

Ktos cos?

Featured Replies

Opublikowano

Wydaje mi sie, ze lepiej to zrobic w char_battle. Za chwile zedytuje post
edit delta mnie wyprzedzil xd

Edytowane przez mvstyk

Opublikowano

To lepiej w C++

w common -> service.h / commonDefines.h

dodaj:
 

#define ENABLE_KILL_NOTICE


Wejdz w game -> char_battle.cpp

Znajdź:

        pkAttacker->SetQuestNPCID(GetVID());
        quest::CQuestManager::instance().Kill(pkAttacker->GetPlayerID(), GetRaceNum());
        CHARACTER_MANAGER::instance().KillLog(GetRaceNum());


Dodaj pod:

#ifdef ENABLE_KILL_NOTICE
    const int bossVnumMAP[27] = {
        2492, 2495, 2307, 2306,
        2597, 2598, 1093, 691,
        1304, 1192, 1901, 2091,
        2206, 2191, 2291, 2092,
        792, 4091, 4092, 4095,
        3690, 3691, 3590, 3591,
        3490, 3491, 5002
    };

    for (int i = 0; i < _countof(bossVnumMAP); i++)
    {
        if (GetRaceNum() == bossVnumMAP[i])
        {
            const CMob * pkMob = CMobManager::instance().Get(bossVnumMAP[i]);

            if (pkMob)
            {
                char szNotice[512+1];
                if (SEX_MALE == GET_SEX(pkAttacker))
                    snprintf(szNotice, sizeof(szNotice), "%s zabił %s na CH%d",  pkAttacker->GetName(), pkMob->m_table.szLocaleName, g_bChannel);
                else
                    snprintf(szNotice, sizeof(szNotice), "%s zabiła %s na CH%d",  pkAttacker->GetName(), pkMob->m_table.szLocaleName, g_bChannel);
                BroadcastNotice(szNotice);
            }
        }
    }
#endif

 

Opublikowano
  • Autor
23 minuty temu, Delta napisał(a):

To lepiej w C++

w common -> service.h / commonDefines.h

dodaj:
 

#define ENABLE_KILL_NOTICE


Wejdz w game -> char_battle.cpp

Znajdź:

        pkAttacker->SetQuestNPCID(GetVID());
        quest::CQuestManager::instance().Kill(pkAttacker->GetPlayerID(), GetRaceNum());
        CHARACTER_MANAGER::instance().KillLog(GetRaceNum());


Dodaj pod:

#ifdef ENABLE_KILL_NOTICE
    const int bossVnumMAP[27] = {
        2492, 2495, 2307, 2306,
        2597, 2598, 1093, 691,
        1304, 1192, 1901, 2091,
        2206, 2191, 2291, 2092,
        792, 4091, 4092, 4095,
        3690, 3691, 3590, 3591,
        3490, 3491, 5002
    };

    for (int i = 0; i < _countof(bossVnumMAP); i++)
    {
        if (GetRaceNum() == bossVnumMAP[i])
        {
            const CMob * pkMob = CMobManager::instance().Get(bossVnumMAP[i]);

            if (pkMob)
            {
                char szNotice[512+1];
                if (SEX_MALE == GET_SEX(pkAttacker))
                    snprintf(szNotice, sizeof(szNotice), "%s zabił %s na CH%d",  pkAttacker->GetName(), pkMob->m_table.szLocaleName, g_bChannel);
                else
                    snprintf(szNotice, sizeof(szNotice), "%s zabiła %s na CH%d",  pkAttacker->GetName(), pkMob->m_table.szLocaleName, g_bChannel);
                BroadcastNotice(szNotice);
            }
        }
    }
#endif

 

Siema, wszedlem w char_battle.cpp i nie moge znalezc tego co wpisales.

 

image.png.e5795d07f3775b3ac96e02708047581d.png

image.png

Opublikowano
7 minut temu, eksyyy napisał(a):

Siema, wszedlem w char_battle.cpp i nie moge znalezc tego co wpisales.

 

image.png.e5795d07f3775b3ac96e02708047581d.png

image.png


To znajdź w :
 

void CHARACTER::Reward(bool bItemDrop)


a dokładnie tego szukaj:

        if (!number(0, 9))
        {
            if (pkAttacker->GetPoint(POINT_KILL_HP_RECOVERY))
            {
                int iHP = pkAttacker->GetMaxHP() * pkAttacker->GetPoint(POINT_KILL_HP_RECOVERY) / 100;
                pkAttacker->PointChange(POINT_HP, iHP);
                CreateFly(FLY_HP_SMALL, pkAttacker);
            }

            if (pkAttacker->GetPoint(POINT_KILL_SP_RECOVER))
            {
                int iSP = pkAttacker->GetMaxSP() * pkAttacker->GetPoint(POINT_KILL_SP_RECOVER) / 100;
                pkAttacker->PointChange(POINT_SP, iSP);
                CreateFly(FLY_SP_SMALL, pkAttacker);
            }
        }
    }


I dodaj to NAD:

 

#ifdef ENABLE_KILL_NOTICE
    const int bossVnumMAP[27] = {
        2492, 2495, 2307, 2306,
        2597, 2598, 1093, 691,
        1304, 1192, 1901, 2091,
        2206, 2191, 2291, 2092,
        792, 4091, 4092, 4095,
        3690, 3691, 3590, 3591,
        3490, 3491, 5002
    };

    for (int i = 0; i < _countof(bossVnumMAP); i++)
    {
        if (GetRaceNum() == bossVnumMAP[i])
        {
            const CMob * pkMob = CMobManager::instance().Get(bossVnumMAP[i]);

            if (pkMob)
            {
                char szNotice[512+1];
                if (SEX_MALE == GET_SEX(pkAttacker))
                    snprintf(szNotice, sizeof(szNotice), "%s zabił %s na CH%d",  pkAttacker->GetName(), pkMob->m_table.szLocaleName, g_bChannel);
                else
                    snprintf(szNotice, sizeof(szNotice), "%s zabiła %s na CH%d",  pkAttacker->GetName(), pkMob->m_table.szLocaleName, g_bChannel);
                BroadcastNotice(szNotice);
            }
        }
    }
#endif
Opublikowano
  • Autor
9 minut temu, Delta napisał(a):


To znajdź w :
 

void CHARACTER::Reward(bool bItemDrop)


a dokładnie tego szukaj:

        if (!number(0, 9))
        {
            if (pkAttacker->GetPoint(POINT_KILL_HP_RECOVERY))
            {
                int iHP = pkAttacker->GetMaxHP() * pkAttacker->GetPoint(POINT_KILL_HP_RECOVERY) / 100;
                pkAttacker->PointChange(POINT_HP, iHP);
                CreateFly(FLY_HP_SMALL, pkAttacker);
            }

            if (pkAttacker->GetPoint(POINT_KILL_SP_RECOVER))
            {
                int iSP = pkAttacker->GetMaxSP() * pkAttacker->GetPoint(POINT_KILL_SP_RECOVER) / 100;
                pkAttacker->PointChange(POINT_SP, iSP);
                CreateFly(FLY_SP_SMALL, pkAttacker);
            }
        }
    }


I dodaj to NAD:

 

#ifdef ENABLE_KILL_NOTICE
    const int bossVnumMAP[27] = {
        2492, 2495, 2307, 2306,
        2597, 2598, 1093, 691,
        1304, 1192, 1901, 2091,
        2206, 2191, 2291, 2092,
        792, 4091, 4092, 4095,
        3690, 3691, 3590, 3591,
        3490, 3491, 5002
    };

    for (int i = 0; i < _countof(bossVnumMAP); i++)
    {
        if (GetRaceNum() == bossVnumMAP[i])
        {
            const CMob * pkMob = CMobManager::instance().Get(bossVnumMAP[i]);

            if (pkMob)
            {
                char szNotice[512+1];
                if (SEX_MALE == GET_SEX(pkAttacker))
                    snprintf(szNotice, sizeof(szNotice), "%s zabił %s na CH%d",  pkAttacker->GetName(), pkMob->m_table.szLocaleName, g_bChannel);
                else
                    snprintf(szNotice, sizeof(szNotice), "%s zabiła %s na CH%d",  pkAttacker->GetName(), pkMob->m_table.szLocaleName, g_bChannel);
                BroadcastNotice(szNotice);
            }
        }
    }
#endif

Dodalem i lipa ;/

 

image.png.07d413deb6bc63cac959fb8cfa0b54e2.png

Opublikowano
4 minuty temu, eksyyy napisał(a):

Dodalem i lipa ;/

 

image.png.07d413deb6bc63cac959fb8cfa0b54e2.png


Dodałeś napewno do commonDefines? skoro masz martysame

przywołałeś moba np. o id: 2492 a potem /weak i dobijasz moba, nie masz żadnego komunikatu?

Opublikowano
  • Autor

Dokladnie tak, robie przywoluje bossa daje weak i zbijam, brak komunikatu. 

 

image.png.9215db057cafc470ddee8c98f730e1d7.png

Opublikowano

jesli powyzej ci nie dziala to masz tutaj taki jaki ja uzywam:

wkle w char_battlej:

#ifdef ENABLE_BOSS_NOTIFICATIONS
		const auto BOSS_VNUMS =
		{   
			1304, 1901, 2091, 2206,
			591, 691, 2191, 792, 2306,
			2307, 2492, 3191, 3596, 3790
		};

		for (const auto& raceID : BOSS_VNUMS)
		{
			if (!CMobManager::instance().Get(raceID))
			{
				break;
			}

			if (GetRaceNum() == raceID)
			{
				char buf[256];
				if (SEX_MALE == GET_SEX(pkKiller))
					snprintf(buf, sizeof(buf), "[CH%d] %s pokonał bossa %s", g_bChannel, pkKiller->GetName(), this->GetMobTable().szLocaleName);
				else
					snprintf(buf, sizeof(buf), "[CH%d] %s pokonała bossa %s", g_bChannel, pkKiller->GetName(), this->GetMobTable().szLocaleName);
				SendNotice(buf);
				break;
			}
		}
#endif


nad: 

 

		// BOSS_KILL_LOG
		if (GetMobRank() >= MOB_RANK_BOSS && pkKiller && pkKiller->IsPC())
		{
			char buf[51]{};
			snprintf(buf, sizeof(buf), "%d %ld", g_bChannel, pkKiller->GetMapIndex());
			if (IsStone())
				LogManager::instance().CharLog(pkKiller, GetRaceNum(), "STONE_KILL", buf);
			else
				LogManager::instance().CharLog(pkKiller, GetRaceNum(), "BOSS_KILL", buf);
		}
		// END_OF_BOSS_KILL_LOG


image.png.e013201772a7efe2613eb2f735587e2e.png

Opublikowano
  • Autor
8 minut temu, mvstyk napisał(a):

jesli powyzej ci nie dziala to masz tutaj taki jaki ja uzywam:

wkle w char_battlej:

#ifdef ENABLE_BOSS_NOTIFICATIONS
		const auto BOSS_VNUMS =
		{   
			1304, 1901, 2091, 2206,
			591, 691, 2191, 792, 2306,
			2307, 2492, 3191, 3596, 3790
		};

		for (const auto& raceID : BOSS_VNUMS)
		{
			if (!CMobManager::instance().Get(raceID))
			{
				break;
			}

			if (GetRaceNum() == raceID)
			{
				char buf[256];
				if (SEX_MALE == GET_SEX(pkKiller))
					snprintf(buf, sizeof(buf), "[CH%d] %s pokonał bossa %s", g_bChannel, pkKiller->GetName(), this->GetMobTable().szLocaleName);
				else
					snprintf(buf, sizeof(buf), "[CH%d] %s pokonała bossa %s", g_bChannel, pkKiller->GetName(), this->GetMobTable().szLocaleName);
				SendNotice(buf);
				break;
			}
		}
#endif


nad: 

 

		// BOSS_KILL_LOG
		if (GetMobRank() >= MOB_RANK_BOSS && pkKiller && pkKiller->IsPC())
		{
			char buf[51]{};
			snprintf(buf, sizeof(buf), "%d %ld", g_bChannel, pkKiller->GetMapIndex());
			if (IsStone())
				LogManager::instance().CharLog(pkKiller, GetRaceNum(), "STONE_KILL", buf);
			else
				LogManager::instance().CharLog(pkKiller, GetRaceNum(), "BOSS_KILL", buf);
		}
		// END_OF_BOSS_KILL_LOG


image.png.e013201772a7efe2613eb2f735587e2e.png

 

Nic ;/

 

image.png.6c87cb128bc1f3df0e626b40d294605c.png

Opublikowano

To musisz najwyrazniej cos zle robic, obie wersje powinny dzialac bez problemu.
Sprawdz czy napewno dodales #define i moze popatrz w logach czy czegos nie ma

Edytowane przez mvstyk

Opublikowano

@eksyyysprawdź w mob_proto type potwora, i policz sobie jakie type ma boss wgl, bo widać że system nie łapie że zabiłeś bossa.

Opublikowano
  • Autor
6 minut temu, mvstyk napisał(a):

To musisz najwyrazniej cos zle robic, obie wersje powinny dzialac bez problemu.
Sprawdz czy napewno dodales #define i moze popatrz w logach czy czegos nie ma

1. define ENABLE_KILL_NOTICE --> dodane

 

 

image.png.9215db057cafc470ddee8c98f730e1d7.png

 

2. wklejone tak jak pisales. 

 

 

Opublikowano
  • Autor
1 minutę temu, Bamboo napisał(a):

@eksyyysprawdź w mob_proto type potwora, i policz sobie jakie type ma boss wgl, bo widać że system nie łapie że zabiłeś bossa.

haha, a jak to policzyc? pierwsze slysze, przy zakladce type kazdy ma 0 wpisane 😄 a jeszcze nie liczylem nigdy:D

Opublikowano

@eksyyy image.png.c0f12dcc887268046cbe4953115dba4d.png W LENGHT MASZ TO  i liczysz PAWN 0 S_PAWN 1 i np BOSS u mnie jest 5 czyli type ustawiasz na 5 i wtedy powinno pokazywać 

 

 

#edit 

 

Sorry, nie widziałem tego systemy ale widzę ze on tutaj jest po VNUM bossa XD więc cofam co pisałem XD

 

#ifdef ENABLE_BOSS_NOTIFICATIONS
		const auto BOSS_VNUMS =
		{   
			1304, 1901, 2091, 2206,
			591, 691, 2191, 792, 2306,
			2307, 2492, 3191, 3596, 3790
		};

 

ustawiłeś sobie ID Moba po którym ma się wyświetlać wgl te info ? 

Edytowane przez Bamboo

Opublikowano
6 minut temu, Bamboo napisał(a):

@eksyyy image.png.c0f12dcc887268046cbe4953115dba4d.png W LENGHT MASZ TO  i liczysz PAWN 0 S_PAWN 1 i np BOSS u mnie jest 5 czyli type ustawiasz na 5 i wtedy powinno pokazywać 

 

 

#edit 

 

Sorry, nie widziałem tego systemy ale widzę ze on tutaj jest po VNUM bossa XD więc cofam co pisałem XD

 

#ifdef ENABLE_BOSS_NOTIFICATIONS
		const auto BOSS_VNUMS =
		{   
			1304, 1901, 2091, 2206,
			591, 691, 2191, 792, 2306,
			2307, 2492, 3191, 3596, 3790
		};

 

ustawiłeś sobie ID Moba po którym ma się wyświetlać wgl te info ? 


BOSS to bedzie rank 4 nie 5 xd

Opublikowano
  • Autor
7 minut temu, Bamboo napisał(a):

@eksyyy image.png.c0f12dcc887268046cbe4953115dba4d.png W LENGHT MASZ TO  i liczysz PAWN 0 S_PAWN 1 i np BOSS u mnie jest 5 czyli type ustawiasz na 5 i wtedy powinno pokazywać 

No to tera jaja sie odjeblay

Nie moge go uderzyc XDDD jak NPC stoi

 image.png.a9643cc6392dbe763f232837dd6f3299.png

Edytowane przez eksyyy

Opublikowano
6 minut temu, eksyyy napisał(a):

No to tera jaja sie odjeblay

Nie moge go uderzyc XDDD jak NPC stoi

 image.png.a9643cc6392dbe763f232837dd6f3299.png

po co type zmieniac xd
image.png.7bc75a974b63f27d522d9952e370890a.png


tutaj masz co odpowiada type:

image.png.4eb958f89ccf80955b04b6570c082367.png

Edytowane przez mvstyk

Opublikowano

przez przypadek dalem cytat zamiast edycji xd

Edytowane przez mvstyk

Opublikowano
  • Autor
3 minuty temu, mvstyk napisał(a):

 

Juz ustawilem od nowa type 0 bo on to mi bossa freezuje 😄

Kurde niby taka pierdola a ile jebania, czemu to nie dziala XD

Edytowane przez eksyyy

Opublikowano
  • Programista
3 godziny temu, Delta napisał(a):

To lepiej w C++

Nóż mi się w kieszeni otwiera kiedy słysze takie pierdy, bo z jakiej racji lepiej?

Rozwiązania które podajecie działają na stałych tablicach, powodzenia przy wprowadzaniu np. apdejtu i omyłkowym pominięciu nowego vnum potwora.

 

questlua_npc.cpp

ALUA(npc_get_rank)
{
  LPCHARACTER npc = CQuestManager::instance().GetCurrentNPCCharacterPtr();

  if (!npc)
    return 0;

  lua_pushnumber(L, npc->GetMobRank());
  return 1;
}

// ...

void
RegisterNPCFunctionTable()
{
  luaL_reg npc_functions[] = {
    // ...
    { "get_rank", npc_get_rank },
    { nullptr, nullptr }
  };
}

 

queścior:

define MOB_RANK_PAWN 0
define MOB_RANK_S_PAWN 1
define MOB_RANK_KNIGHT 2
define MOB_RANK_S_KNIGHT 3
define MOB_RANK_BOSS 4
define MOB_RANK_KING 5

quest boss_kill begin
	state start begin
		when kill with not npc.is_pc() begin
			if npc.get_rank() == MOB_RANK_BOSS then
				notice_all("Gracz " .. pc.get_name() .. " pokonał " .. npc.get_name() .. "!")
			end
		end
	end
end

Edytowane przez Thorek

Opublikowano
27 minut temu, Bamboo napisał(a):

@eksyyy image.png.c0f12dcc887268046cbe4953115dba4d.png W LENGHT MASZ TO  i liczysz PAWN 0 S_PAWN 1 i np BOSS u mnie jest 5 czyli rankustawiasz na 4 i wtedy powinno pokazywać 

 

 

#edit 

 

Sorry, nie widziałem tego systemy ale widzę ze on tutaj jest po VNUM bossa XD więc cofam co pisałem XD

#edit mój błąd pisałem na szybko przepraszam

 

27 minut temu, Bamboo napisał(a):
#ifdef ENABLE_BOSS_NOTIFICATIONS
		const auto BOSS_VNUMS =
		{   
			1304, 1901, 2091, 2206,
			591, 691, 2191, 792, 2306,
			2307, 2492, 3191, 3596, 3790
		};

 

ustawiłeś sobie ID Moba po którym ma się wyświetlać wgl te info ? 

 

Opublikowano

Akurat pełna zgoda z @Thorek do takich zastosowań quest jest idealny. Też nie rozumiem dlaczego wszystko robić w cpp.

Opublikowano
  • Autor
25 minut temu, Thorek napisał(a):

Nóż mi się w kieszeni otwiera kiedy słysze takie pierdy, bo z jakiej racji lepiej?

Rozwiązania które podajecie działają na stałych tablicach, powodzenia przy wprowadzaniu np. apdejtu i omyłkowym pominięciu nowego vnum potwora.

 

questlua_npc.cpp

ALUA(npc_get_rank)
{
  LPCHARACTER npc = CQuestManager::instance().GetCurrentNPCCharacterPtr();

  if (!npc)
    return 0;

  lua_pushnumber(L, npc->GetMobRank());
  return 1;
}

// ...

void
RegisterNPCFunctionTable()
{
  luaL_reg npc_functions[] = {
    // ...
    { "get_rank", npc_get_rank },
    { nullptr, nullptr }
  };
}

 

Gdzie to dokladnie wkleic, pod jakias konkretna linijke?

 

 

 

Edytowane przez eksyyy

Opublikowano
  • Autor
21 minut temu, Sevence napisał(a):

Akurat pełna zgoda z @Thorek do takich zastosowań quest jest idealny. Też nie rozumiem dlaczego wszystko robić w cpp.

 

@Thorek

 

Wgralem linijke w ten sposob do questlua_npc_cpp

 

image.png.0a512df8359c6a01317484e433d0948e.png

Nastepnie quest

 

 image.png.e99e1c0c2c2a9bab2e97d2b5d41b6b0e.png

 

Taki komunikat w konsoli

 

 image.png.e2a9161be3c53adb3729e4805c51b950.png

 

Edytowane przez eksyyy

Opublikowano

Masz w tej linii 2x begin usuń jedno. 

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.