Jump to content
L3K0T

C++ UPDATE 2 Moveitem para seu servidor - Bugs Fix - tfs 0.4 e tfs 0.3.6

Recommended Posts

26 minutos atrás, L3K0T disse:

EXPLICAÇÃO/RESUMO

Bom galera esse sistema foi fixado por mim e resolvi trazer pra vocês o UPDATE dele pra funcionar perfeitamente ao seu jogo, esse sistema tem a obrigação de parar players que jogam lixo na porta da sua casa. "somente dono, sub, e convidados podem jogar lixo ou mover items."

 

 

C++ SuperCoder 1.3 Baixar APK para Android - Aptoide

TUTORIAL BY L3K0T

1° abra seu creatureevents.cpp com o editor de sua preferencia. "eu uso notepad++"

 

ache:


case CREATURE_EVENT_PREPAREDEATH:
			return "cid, deathList";

em baixo coloca:


case CREATURE_EVENT_MOVEITEM:
			return "moveItem, frompos, topos, cid";

 

 

ache:


case CREATURE_EVENT_PREPAREDEATH:
			return "onPrepareDeath";

em baixo coloca:


case CREATURE_EVENT_MOVEITEM:
           return "onMoveItem";

 

ache:


else if(tmpStr == "preparedeath")
		m_type = CREATURE_EVENT_PREPAREDEATH;

em baixo coloca:


else if(tmpStr == "moveitem")
		m_type = CREATURE_EVENT_MOVEITEM;

 

 

ache:

 


bool CreatureEvents::playerLogout(Player* player, bool forceLogout)
{
	//fire global event if is registered
	bool result = true;
	for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it)
	{
		if((*it)->getEventType() == CREATURE_EVENT_LOGOUT && (*it)->isLoaded()
			&& !(*it)->executeLogout(player, forceLogout) && result)
			result = false;
	}

	return result;
}

em baixo coloca: ATENÇÃO PRA TFS 0.4 USE ESSE ABAIXO


uint32_t CreatureEvents::executeMoveItems(Creature* actor, Item* item, const Position& frompos, const Position& pos)
{

	for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it)
	{
		if((*it)->getEventType() == CREATURE_EVENT_MOVEITEM)
        {
			if(!(*it)->executeMoveItem(actor, item, frompos, pos))
				return 0;
		}
	}
	return 1;
}


uint32_t CreatureEvent::executeMoveItem(Creature* actor, Item* item, const Position& frompos, const Position& pos)
{

	if(m_interface->reserveEnv())
	{
		ScriptEnviroment* env = m_interface->getEnv();
		if(m_scripted == EVENT_SCRIPT_BUFFER)
		{
			env->setRealPos(pos);
			std::stringstream scriptstream;

			env->streamThing(scriptstream, "moveItem", item, env->addThing(item));
			env->streamPosition(scriptstream, "position", frompos, 0);

			env->streamPosition(scriptstream, "position", pos, 0);
			scriptstream << "local cid = " << env->addThing(actor) << std::endl;

			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(pos);

			lua_State* L = m_interface->getState();
			m_interface->pushFunction(m_scriptId);

			LuaInterface::pushThing(L, item, env->addThing(item));
			LuaInterface::pushPosition(L, frompos, 0);
			LuaInterface::pushPosition(L, pos, 0);

			lua_pushnumber(L, env->addThing(actor));
			bool result = m_interface->callFunction(4);
			m_interface->releaseEnv();
			return result;
		}
	}
	else
	{
		std::clog << "[Error - CreatureEvent::executeMoveItem] Call stack overflow." << std::endl;
		return 0;
	}
}

 

ATENÇÃO PRA TFS 0.3.6 USE ESSE ABAIXO


uint32_t CreatureEvents::executeMoveItems(Creature* actor, Item* item, const Position& frompos, const Position& pos)
{

	for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it)
	{
		if((*it)->getEventType() == CREATURE_EVENT_MOVEITEM)
        {
			if(!(*it)->executeMoveItem(actor, item, frompos, pos))
				return 0;
		}
	}
	return 1;
}


uint32_t CreatureEvent::executeMoveItem(Creature* actor, Item* item, const Position& frompos, const Position& pos)
{

	if(m_interface->reserveEnv())
	{
		ScriptEnviroment* env = m_interface->getEnv();
		if(m_scripted == EVENT_SCRIPT_BUFFER)
		{
			env->setRealPos(pos);
			std::stringstream scriptstream;

			env->streamThing(scriptstream, "moveItem", item, env->addThing(item));
			env->streamPosition(scriptstream, "position", frompos, 0);

			env->streamPosition(scriptstream, "position", pos, 0);
			scriptstream << "local cid = " << env->addThing(actor) << std::endl;

			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(pos);

			lua_State* L = m_interface->getState();
			m_interface->pushFunction(m_scriptId);

			LuaScriptInterface::pushThing(L, item, env->addThing(item));
			LuaScriptInterface::pushPosition(L, frompos, 0);
			LuaScriptInterface::pushPosition(L, pos, 0);

			lua_pushnumber(L, env->addThing(actor));
			bool result = m_interface->callFunction(4);
			m_interface->releaseEnv();
			return result;
		}
	}
	else
	{
		std::clog << "[Error - CreatureEvent::executeMoveItem] Call stack overflow." << std::endl;
		return 0;
	}
}

 

 

 agora em creatureevetns.h

 

Ache:


CREATURE_EVENT_PREPAREDEATH,

em baixo coloca:


CREATURE_EVENT_MOVEITEM,

 

ache:


uint32_t executePrepareDeath(Creature* creature, DeathList deathList);

em baixo coloca:


uint32_t executeMoveItem(Creature* actor, Item* item, const Position& frompos, const Position& pos);

 

ache:


bool playerLogout(Player* player, bool forceLogout);

em baixo coloca:

 


uint32_t executeMoveItems(Creature* actor, Item* item, const Position& frompos, const Position& pos);

 

3° agora em game.cpp

 

ache:

 


	if(!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere))
	{
		player->sendCancelMessage(RET_CANNOTTHROW);
		return false;
	}
	ReturnValue ret = internalMoveItem(player, fromCylinder, toCylinder, toIndex, item, count, NULL);
	if(ret == RET_NOERROR)
		return true;
	player->sendCancelMessage(ret);
	return false;
}

troque por:

 


	if(!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere))
	{
		player->sendCancelMessage(RET_CANNOTTHROW);
		return false;
	}
  
	if(!g_creatureEvents->executeMoveItems(player, item, mapFromPos, mapToPos))
		return false;
    
	ReturnValue ret = internalMoveItem(player, fromCylinder, toCylinder, toIndex, item, count, NULL);
	if(ret == RET_NOERROR)
		return true;

	player->sendCancelMessage(ret);
	return false;
}

feito isso é só compilar sua source no modo REDUILD pra que as funções funcione.

 

Agora no seu otserv vai em creturescripts, vai no arquivo login.lua e registra e event:


registerCreatureEvent(cid, "MoveItem")

em creaturescript .xml


<event type="moveitem" name="MoveItem" event="script" value="houseprotecao.lua"/>

script do houseprotecao.lua

 


function onMoveItem(moveItem, frompos, position, cid)
    if position.x == CONTAINER_POSITION then
        return true
    end

    local house = getHouseFromPos(position)
    if type(house) == 'number' then
        local owner = getHouseOwner(house)   
        if owner == 0 then
            return false, doPlayerSendCancel(cid, 'Desculpe, isso não é possivel.')
        end
  
        if owner ~= getPlayerGUID(cid) then
            local sub = getHouseAccessList(house, 0x101):explode('\n')
            local guest = getHouseAccessList(house, 0x100):explode('\n')
            local isInvited = false

            if (#sub > 0) and isInArray(sub, getCreatureName(cid)) then
                isInvited = true
            end
          
            if (#guest > 0) and isInArray(guest, getCreatureName(cid)) then
                isInvited = true
            end           
      
            if not isInvited then
                return false, doPlayerSendCancel(cid, 'Desculpe, isso não é possivel, pois você não está convidado')
            end
        end
    end
    return true
end

CRÉDITOS:

@L3K0T

Fir3element

Summ

 

 

 

 

 

 

Muito bom! Tá inspirado em mano kkk 


                                                                             1535210279_tumblr_o9b6yoxM1Z1tco8kto1_500(3).gif.f527686e19da738322c39555244decac.gif

                                                             Meus tópicos         

                                                         Se ajudei você deixe seu Rep! para fortalecer a amizade ^^

                                                                              Vamos ajudar o fórum a crescer mais.

                                                                          1641206641_gif-escudo-fla-3d(1).gif.a5d3c0c24824d5272a181aa91c5eda0c.gif

                                                                                                Mengão porra! . .

                                                                     tumblr_oxm8eriUeU1sqwgnro2_400.gif.22e347b2fc58fdfd88dbf84f4bdaa1bc.gif

                                                                                ----- NPC que vende informação -----

                                                                           -----Baú Que dá Outfit se tiver Level -----

                                                                     ----- [Npc] Que vende Stones (itens) por diamonds -----

 

 

                                                                       

                       

Share this post


Link to post
Share on other sites

Galera vo fazer o novo UPDATE moveitem2 - FEITO!

Edited by L3K0T (see edit history)

APOIE NOSSAS CAUSAS - IBEACIBEAC

SEJA UM APOIADOR E AJUDE ALGUÉM

Se você acha que meu trabalho merece uma ajuda nessa quarentena, então seja um apoiador fiel doehttps://streamlabs.com/l3k0t1

 

 CANAL YOUTUBE: https://www.youtube.com/channel/UCMP25Br519j7dD1FFEMzPgA?view_as=subscriber

Meu grupo no Discord: https://discord.gg/qMS5pm9

"Você tem um sonho? Não deixe os outros te derrubarem e lute por aquilo que você acredita" by L3K0T  

 

GENTILEZA GERA GENTILEZA

 

 

Share this post


Link to post
Share on other sites
1 hora atrás, Spooky Ghost disse:

@L3K0T o do depot tava dando erro na distro e dava pra colocar os items em cima, ai retirei o "2" do onmoveitem mas ai não acontece nada porem não da o erro, sabe o que pode ser?

 

  Ocultar conteúdo

image.thumb.png.32594919cdeb4af8d4d9690f8111dba4.png

 

pra por em cima é o itemmove2

 

local depottiles = {} --piso pra n jogar
local depots = {2589} --id dos dps
local group = 6 --id dos group 6 é todos.
  
local function checkIfThrow(pos,topos)
                    if topos.x == 0xffff then
                        return false
                    end
                local thing = getThingFromPos(pos)
                if isInArray(depottiles,thing.itemid) then
                            if not isInteste(topos,{x=pos.x-1,y=pos.y-1,z=pos.z},{x=pos.x+1,y=pos.y+1, z=pos.z}) then                   
                            return true
                        end   
                else   
                for i = 1, #depots do
                    if depots[i] == getTileItemById(topos,depots[i]).itemid or getTileInfo(topos).actionid == 7483 then
                        return true
                    end
                end
            end                               
    return false
end

function onMoveItem2(cid, item, count, toContainer, fromContainer, fromPos, toPos)
  
      if isPlayer(cid) then
        local pos = getThingPos(cid)
            if getPlayerGroupId(cid) > group then
                return true
        end
           
        if checkIfThrow({x=pos.x,y=pos.y,z=pos.z,stackpos=0},toPos) then
            doPlayerSendCancel(cid,"Não jogue lixo no depot!!")
            doSendMagicEffect(getThingPos(cid),CONST_ME_POFF)
            return false
        end
    end
  
  return true
end

  
  
  
  

<event type="moveitem2" name="MoveItem2" event="script" value="moveitem2.lua"/>

 

registerCreatureEvent(cid, "MoveItem2")

 

se vc tá em adm no moveitem2 ele passa então esse bloqueia até adm

 

 

Edited by L3K0T (see edit history)

APOIE NOSSAS CAUSAS - IBEACIBEAC

SEJA UM APOIADOR E AJUDE ALGUÉM

Se você acha que meu trabalho merece uma ajuda nessa quarentena, então seja um apoiador fiel doehttps://streamlabs.com/l3k0t1

 

 CANAL YOUTUBE: https://www.youtube.com/channel/UCMP25Br519j7dD1FFEMzPgA?view_as=subscriber

Meu grupo no Discord: https://discord.gg/qMS5pm9

"Você tem um sonho? Não deixe os outros te derrubarem e lute por aquilo que você acredita" by L3K0T  

 

GENTILEZA GERA GENTILEZA

 

 

Share this post


Link to post
Share on other sites

@L3K0T Então, o erro que da quando eu coloco "moveitem2" no xml:

 

[Error - CreatureEvent::configureEvent] No valid type for creature event.moveitem2
[Warning - BaseEvents::loadFromXml] Cannot configure an event

Eu tinha testado em um player normal por causa da verificação dos groups e jogou kk

Share this post


Link to post
Share on other sites
3 minutos atrás, Spooky Ghost disse:

@L3K0T Então, o erro que da quando eu coloco "moveitem2" no xml:

 


[Error - CreatureEvent::configureEvent] No valid type for creature event.moveitem2
[Warning - BaseEvents::loadFromXml] Cannot configure an event

Eu tinha testado em um player normal por causa da verificação dos groups e jogou kk

isso quer dizer que imoveitem2 não foi colocado na source direito, esqueceu algo :(  sequiser posso fazer pra vc só manda o arquivos

Edited by L3K0T (see edit history)

APOIE NOSSAS CAUSAS - IBEACIBEAC

SEJA UM APOIADOR E AJUDE ALGUÉM

Se você acha que meu trabalho merece uma ajuda nessa quarentena, então seja um apoiador fiel doehttps://streamlabs.com/l3k0t1

 

 CANAL YOUTUBE: https://www.youtube.com/channel/UCMP25Br519j7dD1FFEMzPgA?view_as=subscriber

Meu grupo no Discord: https://discord.gg/qMS5pm9

"Você tem um sonho? Não deixe os outros te derrubarem e lute por aquilo que você acredita" by L3K0T  

 

GENTILEZA GERA GENTILEZA

 

 

Share this post


Link to post
Share on other sites

 @L3K0T A base do meu servidor é um pouco antiga, e quando eu tava vasculhando as coisas lá eu via que tinha muita coisa incompleta, que suspeito que o dono da base devia ter removido, então você sabe se eu posso achar um tutorial aqui no TK ou me falar como posso fazer o procedimento? xD

Edited by Spooky Ghost (see edit history)

Share this post


Link to post
Share on other sites
1 minuto atrás, Spooky Ghost disse:

 @L3K0T A base do meu servidor é um pouco antiga, e quando eu tava vasculhando as coisas lá eu via que tinha muita coisa incompleta, que suspeito que o dono da base devia ter removido, então você sabe se eu posso achar um tutorial aqui no TK ou me falar como posso fazer o procedimento? xD

manda o creatureevet.cpp e .h e game.cpp eu posso colocar pra vc, agora n estou tão ocupada


APOIE NOSSAS CAUSAS - IBEACIBEAC

SEJA UM APOIADOR E AJUDE ALGUÉM

Se você acha que meu trabalho merece uma ajuda nessa quarentena, então seja um apoiador fiel doehttps://streamlabs.com/l3k0t1

 

 CANAL YOUTUBE: https://www.youtube.com/channel/UCMP25Br519j7dD1FFEMzPgA?view_as=subscriber

Meu grupo no Discord: https://discord.gg/qMS5pm9

"Você tem um sonho? Não deixe os outros te derrubarem e lute por aquilo que você acredita" by L3K0T  

 

GENTILEZA GERA GENTILEZA

 

 

Share this post


Link to post
Share on other sites

APOIE NOSSAS CAUSAS - IBEACIBEAC

SEJA UM APOIADOR E AJUDE ALGUÉM

Se você acha que meu trabalho merece uma ajuda nessa quarentena, então seja um apoiador fiel doehttps://streamlabs.com/l3k0t1

 

 CANAL YOUTUBE: https://www.youtube.com/channel/UCMP25Br519j7dD1FFEMzPgA?view_as=subscriber

Meu grupo no Discord: https://discord.gg/qMS5pm9

"Você tem um sonho? Não deixe os outros te derrubarem e lute por aquilo que você acredita" by L3K0T  

 

GENTILEZA GERA GENTILEZA

 

 

Share this post


Link to post
Share on other sites
9 minutos atrás, Spooky Ghost disse:

 @L3K0T Ajudaria muito kkk, não tenho conhecimento em C++

baixa ai e testa da rebuild na source se der eerro na compilação posta o erro

creatureevent.cpp game.cpp creatureevent.h @Spooky Ghost

Edited by L3K0T
compila ai (see edit history)

APOIE NOSSAS CAUSAS - IBEACIBEAC

SEJA UM APOIADOR E AJUDE ALGUÉM

Se você acha que meu trabalho merece uma ajuda nessa quarentena, então seja um apoiador fiel doehttps://streamlabs.com/l3k0t1

 

 CANAL YOUTUBE: https://www.youtube.com/channel/UCMP25Br519j7dD1FFEMzPgA?view_as=subscriber

Meu grupo no Discord: https://discord.gg/qMS5pm9

"Você tem um sonho? Não deixe os outros te derrubarem e lute por aquilo que você acredita" by L3K0T  

 

GENTILEZA GERA GENTILEZA

 

 

Share this post


Link to post
Share on other sites
Agora, Jeanfersonsp disse:

Sé faltou deixar os créditos do resto porque estas scripts/funções já existe a muito tempo e tem em todos os forums creio eu

os créditos já está no tópico e outra fiz correções :)  obg!!!


APOIE NOSSAS CAUSAS - IBEACIBEAC

SEJA UM APOIADOR E AJUDE ALGUÉM

Se você acha que meu trabalho merece uma ajuda nessa quarentena, então seja um apoiador fiel doehttps://streamlabs.com/l3k0t1

 

 CANAL YOUTUBE: https://www.youtube.com/channel/UCMP25Br519j7dD1FFEMzPgA?view_as=subscriber

Meu grupo no Discord: https://discord.gg/qMS5pm9

"Você tem um sonho? Não deixe os outros te derrubarem e lute por aquilo que você acredita" by L3K0T  

 

GENTILEZA GERA GENTILEZA

 

 

Share this post


Link to post
Share on other sites
21 minutos atrás, Spooky Ghost disse:

 @L3K0T Ajudaria muito kkk, não tenho conhecimento em C++

postei ali em cima só baixa


APOIE NOSSAS CAUSAS - IBEACIBEAC

SEJA UM APOIADOR E AJUDE ALGUÉM

Se você acha que meu trabalho merece uma ajuda nessa quarentena, então seja um apoiador fiel doehttps://streamlabs.com/l3k0t1

 

 CANAL YOUTUBE: https://www.youtube.com/channel/UCMP25Br519j7dD1FFEMzPgA?view_as=subscriber

Meu grupo no Discord: https://discord.gg/qMS5pm9

"Você tem um sonho? Não deixe os outros te derrubarem e lute por aquilo que você acredita" by L3K0T  

 

GENTILEZA GERA GENTILEZA

 

 

Share this post


Link to post
Share on other sites
Spoiler

/creatureevent.cpp: In member function `uint32_t CreatureEvent::executeMoveItem2(Player*, Item*, uint8_t, const Position&, const Position&, Item*, Item*, int16_t)':
../creatureevent.cpp:174: error: `LuaInterface' has not been declared

../creatureevent.cpp:174: error: `pushThing' was not declared in this scope

../creatureevent.cpp: In member function `uint32_t CreatureEvents::executeMoveItems(Creature*, Item*, const Position&, const Position&)':
../creatureevent.cpp:198: error: base operand of `->' has non-pointer type `std::pair<const std::string, CreatureEvent*>'

../creatureevent.cpp:200: error: base operand of `->' has non-pointer type `std::pair<const std::string, CreatureEvent*>'

../creatureevent.cpp: In member function `virtual bool CreatureEvent::configureEvent(xmlNode*)':
../creatureevent.cpp:347: error: expected primary-expression before "else"

../creatureevent.cpp:347: error: expected `;' before "else"

../creatureevent.cpp:354: error: expected primary-expression before "else"
../creatureevent.cpp:354: error: expected `;' before "else"

../creatureevent.cpp:356: error: expected primary-expression before "else"

../creatureevent.cpp:356: error: expected `;' before "else"

make.exe: *** [obj//creatureevent.o] Error 1

 

deu esses erros

Edited by Spooky Ghost (see edit history)

Share this post


Link to post
Share on other sites
12 minutos atrás, Spooky Ghost disse:
  Ocultar conteúdo


/creatureevent.cpp: In member function `uint32_t CreatureEvent::executeMoveItem2(Player*, Item*, uint8_t, const Position&, const Position&, Item*, Item*, int16_t)':
../creatureevent.cpp:174: error: `LuaInterface' has not been declared

../creatureevent.cpp:174: error: `pushThing' was not declared in this scope

../creatureevent.cpp: In member function `uint32_t CreatureEvents::executeMoveItems(Creature*, Item*, const Position&, const Position&)':
../creatureevent.cpp:198: error: base operand of `->' has non-pointer type `std::pair<const std::string, CreatureEvent*>'

../creatureevent.cpp:200: error: base operand of `->' has non-pointer type `std::pair<const std::string, CreatureEvent*>'

../creatureevent.cpp: In member function `virtual bool CreatureEvent::configureEvent(xmlNode*)':
../creatureevent.cpp:347: error: expected primary-expression before "else"

../creatureevent.cpp:347: error: expected `;' before "else"

../creatureevent.cpp:354: error: expected primary-expression before "else"
../creatureevent.cpp:354: error: expected `;' before "else"

../creatureevent.cpp:356: error: expected primary-expression before "else"

../creatureevent.cpp:356: error: expected `;' before "else"

make.exe: *** [obj//creatureevent.o] Error 1

 

deu esses erros

ai 

creatureevent.cpp


APOIE NOSSAS CAUSAS - IBEACIBEAC

SEJA UM APOIADOR E AJUDE ALGUÉM

Se você acha que meu trabalho merece uma ajuda nessa quarentena, então seja um apoiador fiel doehttps://streamlabs.com/l3k0t1

 

 CANAL YOUTUBE: https://www.youtube.com/channel/UCMP25Br519j7dD1FFEMzPgA?view_as=subscriber

Meu grupo no Discord: https://discord.gg/qMS5pm9

"Você tem um sonho? Não deixe os outros te derrubarem e lute por aquilo que você acredita" by L3K0T  

 

GENTILEZA GERA GENTILEZA

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Similar Content

    • By Guilherme
      Por: BananaFight > DragonElement
       

      Depois de ver muitos pedidos, Resolvi doar em nome da equipe DigiWo o código que muda a cor do nome dos monstros.

      Este é uma versão 1.0 que não serve mais para o DigiWo por ja termos um sistema mais avançado.
      Instalação
      Creature.cpp procure por
      if(healthPercent > 92) Embaixo você muda para
      if (m_name == "Banana Fight"){             m_informationColor = Color(0xB2, 0x22, 0x22);         }else{             m_informationColor = Color(0x00, 0xBC, 0x00);         } Acho que deu de entender o que tem que fazer,
      Adicionando Nomes
      Isto representa o nome do monstro/player que terá a cor do nome alterada. (Sim, vai ter que cadastrar nome por nome nesse sistema.)
      if (m_name == "Banana Fight") Para adicionar mais nomes é só seguindo a logica
      if (m_name == "Banana Fight"){             m_informationColor = Color(0xB2, 0x22, 0x22);         }else if (m_name == "Demon"){             m_informationColor = Color(0xFF, 0xFF, 0xFF);         }else{             m_informationColor = Color(0x00, 0xBC, 0x00);         } E para colorir o resto das porcentagens a mesma coisa
      else if(healthPercent > 60)     if (m_name == "Banana Fight"){             m_informationColor = Color(0xB2, 0x22, 0x22);         }else{         m_informationColor = Color(0x50, 0xA1, 0x50); } Só recomendo que não mecha no ultimo, pois se não souber mexer pode dar erro.
      else         m_informationColor = Color(0x85, 0x0C, 0x0C); Adicionando Cores
      Isto representa a porcentagem de hp que o player ou monstro vai estar
      m_informationColor = Color(0x00, 0xBC, 0x00); Para mudar a cor você edita aqui :
      Color(0x00, 0xBC, 0x00) As corer funcionam da seguinte maneira (RGB)
      00 BC 00 < Está é uma cor RGB Hexadecimal
      Aqui um link com uma tabela: http://shibolete.tripod.com/RGB.html
      Você tem que pegar a cor hexadecimal e dividir em 3 partes
      #FFFF00 > FF FF 00
      Ai é só você preencher, Color(0xFF, 0xFF, 0x00) com cada letra/numero.
      Exemplo Final
      void Creature::setHealthPercent(uint8 healthPercent)[/center] {     if(healthPercent > 92)         if (m_name == "Banana Fight"){             m_informationColor = Color(0xB2, 0x22, 0x22);         }else{             m_informationColor = Color(0x00, 0xBC, 0x00);         }     else if(healthPercent > 60)         if (m_name == "Banana Fight"){             m_informationColor = Color(0xB2, 0x22, 0x22);         }else{         m_informationColor = Color(0x50, 0xA1, 0x50);         }     else if(healthPercent > 30)         if (m_name == "Banana Fight"){             m_informationColor = Color(0xB2, 0x22, 0x22);         }else{         m_informationColor = Color(0xA1, 0xA1, 0x00);         }     else if(healthPercent > 8)         if (m_name == "Banana Fight"){             m_informationColor = Color(0xB2, 0x22, 0x22);         }else{         m_informationColor = Color(0xBF, 0x0A, 0x0A);         }     else if(healthPercent > 3)         if (m_name == "Banana Fight"){             m_informationColor = Color(0xB2, 0x22, 0x22);         }else{         m_informationColor = Color(0x91, 0x0F, 0x0F);         }     else         m_informationColor = Color(0x85, 0x0C, 0x0C);     m_healthPercent = healthPercent;     callLuaField("onHealthPercentChange", healthPercent);     if(healthPercent <= 0)         onDeath(); }
    • By rohfagundes
      Ola, tinha umas pessoas pedindo para eu mostrar aonde muda a cor do monstro
      então resolvi criar um tópico para mostrar, vamos la.
      na source do cliente
      va no arquivo creature.cpp
      procure por:
      void Creature::internalDrawOutfit(Point dest, float scaleFactor, bool animateWalk, bool animateIdle, Otc::Direction direction, LightView *lightView) dentro dessa funçao ache isso:
      g_painter->setColor(m_outfitColor); logo abaixo add isso:
      if (isMonster() && m_name == "Demon") g_painter->setColor(Color::orange); if (isMonster() && m_name == "Dragon") g_painter->setColor(Color::teal);  
      pronto 
      todos os demons e dragons vão estar com cor diferente
      imagem:

       
      ps: no tópico eu editei para pegar o nome do monstro
      pq no meu ele pega outra informação q n vai ter no ot de vcs
       
      edit:
      as cores disponíveis:
      const Color Color::alpha = 0x00000000U; const Color Color::white = 0xffffffff; const Color Color::black = 0xff000000; const Color Color::red = 0xff0000ff; const Color Color::darkRed = 0xff000080; const Color Color::green = 0xff00ff00; const Color Color::darkGreen = 0xff008000; const Color Color::blue = 0xffff0000; const Color Color::darkBlue = 0xff800000; const Color Color::pink = 0xffff00ff; const Color Color::darkPink = 0xff800080; const Color Color::yellow = 0xff00ffff; const Color Color::darkYellow = 0xff008080; const Color Color::teal = 0xffffff00; const Color Color::darkTeal = 0xff808000; const Color Color::gray = 0xffa0a0a0; const Color Color::darkGray = 0xff808080; const Color Color::lightGray = 0xffc0c0c0; const Color Color::orange = 0xff008cff;  
    • By L3K0T
      bom resolvi mexer um pouco com a rev 3884 e encontrei com um bug na que estou mexendo, que seria o seguinte, tudo que vc dar target ao cancelar vc toma DC, seja em monstros ou npc pra resolver segue essas alterações na source:
       
      protocollgame.cpp ache:
       
      void ProtocolGame::sendCancelTarget() { NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); msg->put<char>(0xA3); msg->put<uint32_t>(0); //? creatureId? } } altere para:
       
      void ProtocolGame::sendCancelTarget() { NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); msg->put<char>(0xA3); } } de rebuild e compile.. problema resolvido
    • By Guilherme
      Por: BananaFight > DragonElement
       
      Adaptação pra source 8.54+

      LEMBRE-SE, ISSO É NA SOURCE DO SERVIDOR

      Vamos ao código.


      protocolgame.h

      Embaixo de
      void AddShopItem(NetworkMessage_ptr msg, const ShopInfo item); Adicione

      void parseExtendedOpcode(NetworkMessage& msg); void sendExtendedOpcode(uint8_t opcode, const std::string& buffer); protocolgame.cpp

      Embaixo de

      uint32_t key[4] = {msg.GetU32(), msg.GetU32(), msg.GetU32(), msg.GetU32()}; enableXTEAEncryption(); setXTEAKey(key); Adicione

      // notifies to otclient that this server can receive extended game protocol opcodes if(operatingSystem >= CLIENTOS_OTCLIENT_LINUX) sendExtendedOpcode(0x00, std::string()); Embaixo de

      void ProtocolGame::AddShopItem(NetworkMessage_ptr msg, const ShopInfo item) { const ItemType& it = Item::items[item.itemId]; msg->AddU16(it.clientId); if(it.isSplash() || it.isFluidContainer()) msg->AddByte(fluidMap[item.subType % 8]); else if(it.stackable || it.charges) msg->AddByte(item.subType); else msg->AddByte(0x01); msg->AddString(item.itemName); msg->AddU32(uint32_t(it.weight * 100)); msg->AddU32(item.buyPrice); msg->AddU32(item.sellPrice); } Adicione

      void ProtocolGame::parseExtendedOpcode(NetworkMessage& msg) { uint8_t opcode = msg.GetByte(); std::string buffer = msg.GetString(); // process additional opcodes via lua script event addGameTask(&Game::parsePlayerExtendedOpcode, player->getID(), opcode, buffer); } void ProtocolGame::sendExtendedOpcode(uint8_t opcode, const std::string& buffer) { // extended opcodes can only be send to players using otclient, cipsoft's tibia can't understand them NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); msg->AddByte(0x32); msg->AddByte(opcode); msg->AddString(buffer); } } Embaixo de

      case 0x1E: // keep alive / ping response parseReceivePing(msg); break;
      Adicione

      case 0x32: // otclient extended opcode parseExtendedOpcode(msg); break; enums.h

      Embaixo de

      enum GuildLevel_t { GUILDLEVEL_NONE = 0, GUILDLEVEL_MEMBER, GUILDLEVEL_VICE, GUILDLEVEL_LEADER }; Substitua o OperatingSystem por este

      enum OperatingSystem_t { CLIENTOS_LINUX = 0x01, CLIENTOS_WINDOWS = 0x02, CLIENTOS_OTCLIENT_LINUX = 0x0A, CLIENTOS_OTCLIENT_WINDOWS = 0x0B, CLIENTOS_OTCLIENT_MAC = 0x0C, };/
      player.h

      Embaixo de
       

      void sendCreatureShield(const Creature* creature) Adicione

      void sendExtendedOpcode(uint8_t opcode, const std::string& buffer) {if(client) client->sendExtendedOpcode(opcode, buffer);} luascript.cpp

      Embaixo de

      void LuaScriptInterface::registerFunctions() { Adicione

      //doSendPlayerExtendedOpcode(cid, opcode, buffer) lua_register(m_luaState, "doSendPlayerExtendedOpcode", LuaScriptInterface::luaDoSendPlayerExtendedOpcode); Embaixo de

      SHIFT_OPERATOR(int32_t, LeftShift, <<) SHIFT_OPERATOR(int32_t, RightShift, >>) SHIFT_OPERATOR(uint32_t, ULeftShift, <<) SHIFT_OPERATOR(uint32_t, URightShift, >>) #undef SHIFT_OPERATOR Adicione
      int32_t LuaScriptInterface::luaDoSendPlayerExtendedOpcode(lua_State* L) { //doSendPlayerExtendedOpcode(cid, opcode, buffer) std::string buffer = popString(L); int opcode = popNumber(L); ScriptEnviroment* env = getEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) { player->sendExtendedOpcode(opcode, buffer); lua_pushboolean(L, true); } lua_pushboolean(L, false); return 1; } luascript.h

      Embaixo de

      virtual void registerFunctions(); Adicione

      static int32_t luaDoSendPlayerExtendedOpcode(lua_State* L); creatureevent.h
      .
      Substitua
      CREATURE_EVENT_PREPAREDEATH Por isso

      CREATURE_EVENT_PREPAREDEATH, CREATURE_EVENT_EXTENDED_OPCODE // otclient additional network opcodes Embaixo de
      uint32_t executePrepareDeath(Creature* creature, DeathList deathList); Adicione
      uint32_t executeExtendedOpcode(Creature* creature, uint8_t opcode, const std::string& buffer); creatureevent.cpp

      Embaixo de

      else if(tmpStr == "death") m_type = CREATURE_EVENT_DEATH; Adicione

      else if(tmpStr == "extendedopcode") m_type = CREATURE_EVENT_EXTENDED_OPCODE; Embaixo de

      case CREATURE_EVENT_DEATH: return "onDeath"; Adicione
      case CREATURE_EVENT_EXTENDED_OPCODE: return "onExtendedOpcode"; Embaixo de

      case CREATURE_EVENT_DEATH: return "cid, corpse, deathList"; Adicione
      case CREATURE_EVENT_EXTENDED_OPCODE: return "cid, opcode, buffer"; Embaixo de

      std::cout << "[Error - CreatureEvent::executeFollow] Call stack overflow." << std::endl; return 0; } } Adicione
      uint32_t CreatureEvent::executeExtendedOpcode(Creature* creature, uint8_t opcode, const std::string& buffer) { //onExtendedOpcode(cid, opcode, buffer) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(creature->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(creature) << std::endl; scriptstream << "local opcode = " << (int)opcode << std::endl; scriptstream << "local buffer = " << buffer.c_str() << std::endl; 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->setEvent(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(creature->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(creature)); lua_pushnumber(L, opcode); lua_pushlstring(L, buffer.c_str(), buffer.length()); bool result = m_interface->callFunction(3); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeRemoved] Call stack overflow." << std::endl; return 0; } } game.h

      Embaixo de


      int32_t getLightHour() {return lightHour;} void startDecay(Item* item); Adicione
      void parsePlayerExtendedOpcode(uint32_t playerId, uint8_t opcode, const std::string& buffer);
      game.cpp

      Embaixo de

      player->sendTextMessage(MSG_INFO_DESCR, buffer); }
      Adicione

      void Game::parsePlayerExtendedOpcode(uint32_t playerId, uint8_t opcode, const std::string& buffer) { Player* player = getPlayerByID(playerId); if(!player || player->isRemoved()) return; CreatureEventList extendedOpcodeEvents = player->getCreatureEvents(CREATURE_EVENT_EXTENDED_OPCODE); for(CreatureEventList::iterator it = extendedOpcodeEvents.begin(); it != extendedOpcodeEvents.end(); ++it) (*it)->executeExtendedOpcode(player, opcode, buffer); } /creaturescripts/creaturescrips.xml

      <event type="extendedopcode" name="ExtendedOpcode" event="script" value="extendedopcode.lua"/>
      /creaturescripts/extendedopcode.lua
      OPCODE_LANGUAGE = 1 function onExtendedOpcode(cid, opcode, buffer)         if opcode == OPCODE_LANGUAGE then          -- otclient language          if buffer == 'en' or buffer == 'pt' then                  -- example, setting player language, because otclient is multi-language...                  --doCreatureSetStorage(cid, CREATURE_STORAGE_LANGUAGE, buffer)          end         else          -- other opcodes can be ignored, and the server will just work fine...         end end Créditos : MaXwEllDeN 100% por adaptar o código
    • By L3K0T
      TUTORIAL - TELEPORTE SUMMON
      Introdução:
      Fala pessoal, hoje vim aqui liberar um código para que futuros criadores de pokemon não usem GLOBALEVENTS ou MOVEMENTS para teleportar seus pokemons a distancia... hoje irei ensinar a você não usar mais esses scripts que aonde da maioria da vezes crash o servidores em WINDOWS em testes.
       
      Sobre o Sistema:
      Esse sistema tem a função de teleportar seu pokemon a certos sqm, tipo assim, você tem um pokemon e a distancia dele é 7 sqm, ao passar os 7 sqm ele teleporta para você, seja em qualquer lugar até de baixo da terra ou lugares super longe (Não se preocupe o problema do pokemon Morrer com source novas será removido e assim ele não vai morrer)
       
       
       
      Creature.cp
      Tutorial:
      Vá em sua source procure por creature.cpp e abra com algum editor de texto e ache:
      if(!summons.empty()) { std::list<Creature*>::iterator cit; std::list<Creature*> despawnList; for(cit = summons.begin(); cit != summons.end(); ++cit) { const Position pos = (*cit)->getPosition(); if((std::abs(pos.z - newPos.z) > 2) || (std::max(std::abs(( newPos.x) - pos.x), std::abs((newPos.y - 1) - pos.y)) > 30)) despawnList.push_back((*cit)); } for(cit = despawnList.begin(); cit != despawnList.end(); ++cit) g_game.removeCreature((*cit), true); } Mude para:
      /*if(!summons.empty()) { std::list<Creature*>::iterator cit; std::list<Creature*> despawnList; for(cit = summons.begin(); cit != summons.end(); ++cit) { const Position pos = (*cit)->getPosition(); if((std::abs(pos.z - newPos.z) > 2) || (std::max(std::abs(( newPos.x) - pos.x), std::abs((newPos.y - 1) - pos.y)) > 30)) despawnList.push_back((*cit)); } for(cit = despawnList.begin(); cit != despawnList.end(); ++cit) g_game.removeCreature((*cit), true); }*/ Agora salve ctrl+s e feche.
       
      Monster.cpp
      Tutorial:
      Agora procure por Monster.cpp e ache:
      void Monster::onThink(uint32_t interval) abaixo de:
      if(teleportToMaster && doTeleportToMaster()) teleportToMaster = false; coloque:
      if(getMaster()){ if(!Position::areInRange<6,6,0>(getPosition(), getMaster()->getPosition())) doTeleportToMaster(); } salve ctrl+s e revompila no modo rebuilde não esqueça de habilitar as opções em config.lua
          -- Summons     maxPlayerSummons = 1     teleportAllSummons = true     teleportPlayerSummons = true  
      lembre se de remover qualquer scripts que teleporta seu pokemon a distancia.
      Créditos:
      By L3K0T
       
  • Recently Browsing   0 members

    No registered users viewing this page.


Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

Tibia King Recomenda

DokeHost - Soluções em Hospedagem

VPS Windows
VPS Linux
Servidor VPS
×
×
  • Create New...