Sziasztok!
Felvetült itt a fórumon egy segítség kérőnél, hogy nem tudja Quest-ben ellenőrizni a Tolvaj kesztyű aktivitását, hogy az használatban van, vagy sem. Ezért ma írtam egy funkciót, ami nem csak a Tolvaj kesztyűt képes ellenőrizni, hanem sok mást is, amelyekről lentebb találsz információt.
A funkció be tétele:
#questlua_pc.cpp (Itt találod: /game/src/)
- Keresd meg ezt:
#include "stdafx.h"
- És helyezd közvetlen alá ezt:
#include <sstream>
#include "questlua.h"
- Keresd meg ezt:
int pc_is_dead(lua_State* L)
{
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
if ( ch != NULL )
{
lua_pushboolean(L, ch->IsDead());
return 1;
}
lua_pushboolean(L, true);
return 1;
}
- És helyezd közvetlen alá ezt:
int pc_is_unique_item(lua_State * L)
{
ostringstream s;
combine_lua_string(L, s);
std::string unique = s.str();
if(unique.empty())
{
lua_pushboolean(L, false);
return 1;
}
DWORD checkID = 0;
if(unique == "TEARDROP_OF_GODNESS") checkID = UNIQUE_ITEM_TEARDROP_OF_GODNESS;
else if(unique == "RING_OF_LANGUAGE") checkID = UNIQUE_ITEM_RING_OF_LANGUAGE;
else if(unique == "RING_OF_LANGUAGE_SAMPLE") checkID = UNIQUE_ITEM_RING_OF_LANGUAGE_SAMPLE;
else if(unique == "CAPE_OF_COURAGE") checkID = UNIQUE_ITEM_CAPE_OF_COURAGE;
else if(unique == "HALF_STAMINA") checkID = UNIQUE_ITEM_HALF_STAMINA;
else if(unique == "HIDE_ALIGNMENT_TITLE") checkID = UNIQUE_ITEM_HIDE_ALIGNMENT_TITLE;
else if(unique == "SKIP_ITEM_DROP_PENALTY") checkID = UNIQUE_ITEM_SKIP_ITEM_DROP_PENALTY;
else if(unique == "FASTER_ALIGNMENT_UP_BY_TIME") checkID = UNIQUE_ITEM_FASTER_ALIGNMENT_UP_BY_TIME;
else if(unique == "FASTER_ALIGNMENT_UP_BY_KILL") checkID = UNIQUE_ITEM_FASTER_ALIGNMENT_UP_BY_KILL;
else if(unique == "NO_BAD_LUCK_EFFECT") checkID = UNIQUE_ITEM_NO_BAD_LUCK_EFFECT;
else if(unique == "LARBOR_MEDAL") checkID = UNIQUE_ITEM_LARBOR_MEDAL;
else if(unique == "DOUBLE_EXP") checkID = UNIQUE_ITEM_DOUBLE_EXP;
else if(unique == "DOUBLE_ITEM") checkID = UNIQUE_ITEM_DOUBLE_ITEM;
else if(unique == "SAFEBOX_EXPAND") checkID = UNIQUE_ITEM_SAFEBOX_EXPAND;
else if(unique == "AUTOLOOT_GOLD") checkID = UNIQUE_ITEM_AUTOLOOT_GOLD;
else if(unique == "EMOTION_MASK") checkID = UNIQUE_ITEM_EMOTION_MASK;
else if(unique == "EMOTION_MASK2") checkID = UNIQUE_ITEM_EMOTION_MASK2;
if(checkID > 0){
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
lua_pushboolean(L, ch->IsEquipUniqueItem(checkID) ? true : false);
}else{
lua_pushboolean(L, false);
}
return 1;
}
- Keresd meg ezt:
{ "is_dead", pc_is_dead },
- És helyezd közvetlen alá ezt:
{ "is_unique_item", pc_is_unique_item },
#quest_functions:
- Keresd meg ezt:
pc.warp
És helyezd közvetlen alá ezt:
pc.is_unique_item
Így tudod majd használni:
pc.is_unique_item("AZONOSÍTÓ")
(Egy true vagy false, az-az igaz vagy hamis értékkel fog visszatérni.)
Fontos, hogy az azonosítót tegyük mindig két idézőjel közé, akár csak ahogyan fentebb és a példában látjátok.
A funkció használatára egy példa a questben:
if pc.is_unique_item("DOUBLE_ITEM") then --Így ellenőrzöm, hogy a Tolvaj kesztyű aktív-e a játékosnál, ha igaz, akkor nyilván a "Aktív a tolvaj kesztyű." üzenet fog megjelenni és ellenkező esetben pedig a másik.
say("Aktív a tolvaj kesztyű.")
else
say("Nem aktív a tolvaj kesztyű.")
end
További ellenőrizhető tárgy aktivitás azonosítók és a vonatkoztatásuk:
#Azonosító - Vonatkoztatás
TEARDROP_OF_GODNESS - Istennői könny
RING_OF_LANGUAGE - Nyelv gyűrű
RING_OF_LANGUAGE_SAMPLE - Nyelv gyűrű (Minta)
CAPE_OF_COURAGE - Bátorság köpeny
HALF_STAMINA - Ork makacsság
HIDE_ALIGNMENT_TITLE - Menekült köpeny
SKIP_ITEM_DROP_PENALTY - Lucy gyűrűje
FASTER_ALIGNMENT_UP_BY_TIME - Bölcs császár szimbóluma
FASTER_ALIGNMENT_UP_BY_KILL - Bölcs császár kesztyűje
NO_BAD_LUCK_EFFECT - Karma varázslat
LARBOR_MEDAL - Szorgalom medálja
DOUBLE_EXP - Tapasztalat gyűrű
DOUBLE_ITEM - Tolvaj kesztyű
SAFEBOX_EXPAND - Raktár láda
AUTOLOOT_GOLD - Harmadik kéz
EMOTION_MASK - Érzelem maszk
EMOTION_MASK2 - Érzelem maszk (Kettő van belőle)
Nos az azonosítókat azért tettem szöveges alapúra és nem integer, az-az számbelire, mert így könnyeben átlátható és felismerhető a Questeken belül.
A funkciót teszteltem, és tökéletesen működik!
Ha hasznát tudtátok venni, akkor nyomjatok egy Thank you-t! ;)
Ne másoljátok máshova, vagy legalább jelöljétek meg, hogy tőlem származik!
Pacsi!