[C++] Tárgy ellenőrzés a csoport minden tagjának (+elvétel) questben

Indította Distraught, 2017-11-26, 17:36:04

2017-11-26, 17:36:04 Utolsó szerkesztés: 2018-10-13, 09:48:30 Szerző: Distraught
Sziasztok,
Ma írtam egy új funkciót, amivel pl. egy dungeonnál bemenetkor, le tudjuk ellenőriztetni, hogy minden csoporttagnak van-e a bizonyos tárgyból.
Lássunk is hozzá!
Nyissuk meg a party.h fájlt, majd keressünk rá: GetMemberMinLevel();
Alá másoljuk be ezt:

bool CheckItem(DWORD vnum, DWORD count);
void RemoveItem(DWORD vnum, DWORD count);

Mentsük el.

Nyissuk meg a party.cpp fájlt, adjuk hozzá a végére:

bool CParty::CheckItem(DWORD vnum, DWORD count)
{
for(itertype(m_memberMap) it = m_memberMap.begin(); it != m_memberMap.end(); ++it)
{
LPCHARACTER ch = it->second.pCharacter;
if(!ch)
continue;
if(ch->CountSpecifyItem(vnum) < count)
return false;
}
return true;
}

void CParty::RemoveItem(DWORD vnum, DWORD count)
{
for(itertype(m_memberMap) it = m_memberMap.begin(); it != m_memberMap.end(); ++it)
{
LPCHARACTER ch = it->second.pCharacter;
if(!ch)
continue;
ch->RemoveSpecifyItem(vnum, count);
}
}

Mentsük el.

Ezután nyissuk meg a questlua_party.cpp fájlt.
Adjuk hozzá az alábbi függvényeket:

int party_check_item(lua_State* L)
{
if(!lua_isnumber(L,1))
return 1;
DWORD vnum = lua_tonumber(L,1);
if(!lua_isnumber(L,2))
return 1;
DWORD count = lua_tonumber(L,2);

LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
if(!ch)
return 1;
LPPARTY pty = ch->GetParty();
if(!pty)
return 1;

if(pty->CheckItem(vnum,count))
lua_pushboolean(L,true);
else
lua_pushboolean(L,false);

return 0;
}

int party_remove_item(lua_State* L)
{
if(!lua_isnumber(L,1))
return 1;
DWORD vnum = lua_tonumber(L,1);
if(!lua_isnumber(L,2))
return 1;
DWORD count = lua_tonumber(L,2);

LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
if(!ch)
return 1;
LPPARTY pty = ch->GetParty();
if(!pty)
return 1;

pty->RemoveItem(vnum,count);

return 0;
}


A végén keresd meg:
{ "is_in_dungeon",   party_is_in_dungeon   },
Alá új sorba:

{"check_item",party_check_item},
{"remove_item",party_remove_item},


Ezután questben az alábbi módon tudod használni:
party.check_item(TÁRGYID,DARABSZÁM) az ellenőrzéshez
party.remove_item(TÁRGYID,DARABSZÁM) az elvételhez
egy igaz vagy hamis értéket fog visszaadni

Egy példa:

if party.check_item(72702,1) then
party.remove_item(72702,1)
d.join(207)
end

Ekkor megnézi, hogy minden tag leltárában van-e legalább egy darab 72702 ID-jű tárgy (jelen esetben szélcipő), és ha van, akkor elvesz mindenkitől egyet, majd beteleportálja őket.

Ha hasznodra válik, nyomj egy Thank you-t! :)
Ne másold máshova, vagy legalább jelöld, hogy tőlem származik!

C++ programmer at Gameloft