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!