Ir para conteúdo

Posts Recomendados

Eae galera xtibiaanna!

 

Desenvolvi o evento OpenContainer para sair da configs do actions afinal e necessario especificar o id do item e isto limita muito,

 

Vá em creatureevents.cpp e procure

else if(tmpStr == "preparedeath")
m_type = CREATURE_EVENT_PREPAREDEATH;
e coloque isto embaixo :
else if(tmpStr == "opencontainer")
m_type = CREATURE_EVENT_OPENCONTAINER;
Continuando procure:
case CREATURE_EVENT_PREPAREDEATH:
return "onPrepareDeath";
E coloque seguidamente:
case CREATURE_EVENT_OPENCONTAINER:
return "onOpenContainer";
Continuado creatureevents.cpp procure:
case CREATURE_EVENT_KILL:
return "cid, target, lastHit";

E coloque embaixo:

case CREATURE_EVENT_OPENCONTAINER:
return "cid, item";

EMBAIXO DA FUNÇÃO

uint32_t CreatureEvent::executeOutfit(Creature* creature, const Outfit_t& old, const Outfit_t& current)

Coloque:

uint32_t CreatureEvent::executeOpenContainer(Player* player, Container* container)
{
//onOpenContainer(cid, container)
if(m_interface->reserveEnv())
{
ScriptEnviroment* env = m_interface->getEnv();
if(m_scripted == EVENT_SCRIPT_BUFFER)
{
std::stringstream scriptstream;
 
scriptstream << "local cid = " << env->addThing(player) << std::endl;
env->streamThing(scriptstream, "item", container, env->addThing(container));
 
scriptstream << m_scriptData;
bool result = true;
if(m_interface->loadBuffer(scriptstream.str()))
{
lua_State* L = m_interface->getState();
result = m_interface->getGlobalBool(L, "_result", true);
}
 
m_interface->releaseEnv();
return result;
}
else
{
#ifdef __DEBUG_LUASCRIPTS__
char desc[35];
sprintf(desc, "%s", player->getName().c_str());
env->setEventDesc(desc);
#endif
 
env->setScriptId(m_scriptId, m_interface);
env->setRealPos(player->getPosition());
 
lua_State* L = m_interface->getState();
m_interface->pushFunction(m_scriptId);
 
lua_pushnumber(L, env->addThing(player));
LuaScriptInterface::pushThing(L, container, env->addThing(container));
bool result = m_interface->callFunction(2);
m_interface->releaseEnv();
return result;
}
}
else
{
std::cout << "[Error - CreatureEvent::executeThink] Call stack overflow." << std::endl;
return 0;
}
}

Agora em creatureevents.h procure:

uint32_t executePrepareDeath(Creature* creature, DeathList deathList);

Embaixo coloque:

uint32_t executeOpenContainer(Player* player, Container* container);

Procure em creatureevents.h:

CREATURE_EVENT_DEATH,

Coloque embaixo:

CREATURE_EVENT_OPENCONTAINER,

Vá em action.cpp e procure:

if(Container* container = item->getContainer())
{
if(container->getCorpseOwner() && !player->canOpenCorpse(container->getCorpseOwner())
&& g_config.getBool(ConfigManager::CHECK_CORPSE_OWNER))
return RET_YOUARENOTTHEOWNER;

Coloque emabaixo:

bool deny = false;
CreatureEventList talkEvents = player->getCreatureEvents(CREATURE_EVENT_OPENCONTAINER);
for(CreatureEventList::iterator it = talkEvents.begin(); it != talkEvents.end(); ++it)
{
if(!(*it)->executeOpenContainer(player, container)) {
deny = true;
        }
}
Editado por caotic
Link para o comentário
https://xtibia.com/forum/topic/229390-onopencontainercid-item/
Compartilhar em outros sites

n faltou dizer exatamente aonde por a ultima parte ali? ;x achu q pulasse uma coisa kk'

e seria bom da um exemplo de como usar.. e mostrar como fica a tag tb xD

 

de resto, ta brincando bastante nas sources heim? kk'

Link para o comentário
https://xtibia.com/forum/topic/229390-onopencontainercid-item/#findComment-1617991
Compartilhar em outros sites

n faltou dizer exatamente aonde por a ultima parte ali? ;x achu q pulasse uma coisa kk'

e seria bom da um exemplo de como usar.. e mostrar como fica a tag tb xD

 

de resto, ta brincando bastante nas sources heim? kk'

 

Porque o ipb sempre retira uma parte do meu post ehaueh'.

 

Exemplo:

Bloqueia o player de abrir um container especifico.

function onOpenContainer(cid, item)
local container = {1212, 2555, 2922, 2292}
local deny = true
for i=1, #container do
 
if item.itemid == container[i] then
deny = false
end
 
end
return deny 
end
Editado por caotic
Link para o comentário
https://xtibia.com/forum/topic/229390-onopencontainercid-item/#findComment-1617995
Compartilhar em outros sites

  • 3 weeks later...

da pra faze, por acaso, um @autoloot PXG system?

nomeando os itens para n usar scanContainer()* (n lembro o nome da func)...

o Smix fez um parecido, mais pelo que testei ele só puxa o primeiro item o "for" n funcionando com a programação q ele fez, e ele tbm fez pela source assim ñ usando a function scanContainer()...

consegui consertar usando a function q ja tem no server, mais fico muito limitado com bugg e muito lagg... por isso removi do meu server... mais tem como usar essa programação?

Link para o comentário
https://xtibia.com/forum/topic/229390-onopencontainercid-item/#findComment-1624885
Compartilhar em outros sites

da pra faze, por acaso, um @autoloot PXG system?

nomeando os itens para n usar scanContainer()* (n lembro o nome da func)...

o Smix fez um parecido, mais pelo que testei ele só puxa o primeiro item o "for" n funcionando com a programação q ele fez, e ele tbm fez pela source assim ñ usando a function scanContainer()...

consegui consertar usando a function q ja tem no server, mais fico muito limitado com bugg e muito lagg... por isso removi do meu server... mais tem como usar essa programação?

 

da sim e so verificar se um corpse e percorrer os itens.

Editado por caotic
Link para o comentário
https://xtibia.com/forum/topic/229390-onopencontainercid-item/#findComment-1625092
Compartilhar em outros sites

×
×
  • Criar Novo...