Szerző Téma: [C++] Tárgy ellenőrzés a csoport minden tagjának (+elvétel) questben  (Megtekintve 1217 alkalommal)

Nem elérhető Distraught

  • Professional
  • ***
  • Thank You
  • -Given: 102
  • -Receive: 310
  • Hozzászólások: 515
  • Segített: 262
  • GothBoiClique
    • Facebook
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!
« Utoljára szerkesztve: 2018-10-13, 09:48:30 írta Distraught »