Jump to content

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


Recommended Posts

  • Replies 48
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

TUTORIAL BY L3K0T   EXPLICAÇÃO/RESUMO: Bom galera esse sistema foi fixado por mim e resolvi trazer pra vocês o UPDATE contendo 2 moveitem pra funcionar perfeitamente ao seu jogo, esses

Opa, já vou deixando meu rep porque parece bem interessante, hehe.

Muito bom! Tá inspirado em mano kkk 

Posted Images

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 -----

 

 

                                                                       

                       

Link to post
Share on other sites
  • Assistente

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

 

 

Link to post
Share on other sites
  • Assistente
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

 

 

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

Link to post
Share on other sites
  • Assistente
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

 

 

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)
Link to post
Share on other sites
  • Assistente
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

 

 

Link to post
Share on other sites
  • Assistente

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

 

 

Link to post
Share on other sites
  • Assistente
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

 

 

Link to post
Share on other sites
  • Assistente
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

 

 

Link to post
Share on other sites
  • Assistente
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

 

 

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)
Link to post
Share on other sites
  • Assistente
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

 

 

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.

  • Recently Browsing   0 members

    No registered users viewing this page.


  • Similar Content

    • By Tio Dootserv
      Preciso de ajuda. Na minha base o player não pode empurrar enquanto targeta. Eu quero que ele continue targetando, e empurre o alvo. Agradeço desde já.
      game.cpp
    • By FeeTads
      SALVE rapaziada do TK, esses dias vim pensando em novos scripts pro meu OT, e em um deles eu precisava que determinada area não contasse frag pro player que matasse outros, PORÉM eu precisava que os players que morressem nessa area ainda assim tivessem as penalidades da sua morte, procurei por ai, achei alguns scripts que apenas tiravam o SKULL e não realmente o FRAG do player, então decidi ir fuçar na source kkkkkkkkkkk, achei algumas coisas e montei um código funcional que NÃO conta frag em determinada area, com todas certeza esse script pode ser melhorado, pois peguei algumas funções do PathMatching pra ele funcionar 100%.
      vou disponibilizar o code aqui, e o que fazer pra determinada area não contar frag.

      SOURCE OTX 2, não sei se funciona em TFS.

      vá na pasta da sua source e procure pelo arquivo player.cpp

      procure pela função 
       
      bool Player::onKilledCreature(Creature* target, DeathEntry& entry)
      e abaixo de: (caso queira que warsystem de guilds não contem frag, cole acima de: )

       
      War_t enemy; if(targetPlayer->getEnemy(this, enemy)) { if(entry.isLast()) IOGuild::getInstance()->updateWar(enemy); entry.setWar(enemy); }
      cole o código:

       
      Position posi = target->getPosition(); AStarNodes nodes(posi.x, posi.y); int x1 = //POSIÇÃO X SUPERIOR ESQUERDA int y1 = //POSIÇÃO Y SUPERIOR ESQUERDA int x2 = //POSIÇÃO X INFERIOR DIREITA int y2 = //POSIÇÃO Y INFERIOR DIREITA //essas 4 posições formam o quadrado int z = //POS EM Z; for(int i = x1; i <= x2; i++){ for(int j = y1; j <= y2; j++){ if (posi.x == i && posi.y == j && posi.z == z){ return true; } } }
      após isso vá até a função:
       
      bool Player::addUnjustifiedKill(const Player* attacked, bool countNow)
      ABAIXO DE: 
       
      if(!g_config.getBool(ConfigManager::USE_FRAG_HANDLER) || hasFlag( PlayerFlag_NotGainInFight) || g_game.getWorldType() != WORLDTYPE_OPEN || hasCustomFlag(PlayerCustomFlag_NotGainUnjustified) || hasCustomFlag( PlayerCustomFlag_NotGainSkull) || attacked == this) return false;
      e cole o código quase parecido só que com UMA mudança.
       
      Position posi = attacked->getPosition(); //aki vai ser attacked-> em vez de target-> AStarNodes nodes(posi.x, posi.y); int x1 = //POSIÇÃO X SUPERIOR ESQUERDA int y1 = //POSIÇÃO Y SUPERIOR ESQUERDA int x2 = //POSIÇÃO X INFERIOR DIREITA int y2 = //POSIÇÃO Y INFERIOR DIREITA //essas 4 posições formam o quadrado int z = //POS EM Z; for(int i = x1; i <= x2; i++){ for(int j = y1; j <= y2; j++){ if (posi.x == i && posi.y == j && posi.z == z){ return true; } } }
      e pronto, só compilar a source novamente e não vai mais contar frag nessa area, porém todo o resto, como frag list, deathlist, warsystem etc... vai contar frag, porém frag pra redSkull e etc.. não irá contar.

      caso queira adicionar mais posições, por exemplo, castle24h, castelo 48h, basta duplicar o for com as posições corretas.

      TODO O SCRIPT é feito no arquivo player.cpp e nada mais.

      **Eu fiz sozinho as alterações e o simples código por isso vim disponibilizar sem algum crédito**
      100% funcional e testado por mim kkkk
    • By FeeTads
      salve rapaziada, do TK, esses tempos eu tava a procura de um autoloot bom e eficiente, e como vocês devem saber, o autoloot usado nos scripts .lua são bem "pesados"
      o @Naze fez um excelentíssimo trabalho e disponibilizou um script de autoloot na source, porém como a vida é dificil, ele tem alguns bugs de função e um deles é no 
      "remove autoloot" que quando o player digita "!autoloot remove, nome-do-item" nada acontece, eu decidi mexer e vim disponibilizar arrumado pra vcs.
      LEMBRANDO QUE 100% DOS CRÉDITOS SÃO AO @Naze porém se vc procurar no tópico dele ainda vai estar bugado, então resolvi deixar aqui certinho pra ajudar quem precisar.


      Link do tópico do naze: https://tibiaking.com/forums/topic/101086-otimizado-autoloot-in-sources-for-otx2-ou-menor/
       

      caso alguém ja utilize esse autoloot e esteja com o problema de remover items do autoloot
      só ir em player.cpp e trocar

      isso:
       
      void Player::removeAutoLoot(uint16_t id) { if(checkAutoLoot(id)) { return; } AutoLoot.remove(id); }
      por isso:
      void Player::removeAutoLoot(uint16_t id) { if(!checkAutoLoot(id)) return; for(std::list<uint16_t>::iterator it = AutoLoot.begin(); it != AutoLoot.end(); ++it) { if((*it) == id) { AutoLoot.erase(it); break; } } }
      todos os créditos ao Naze, não sei se alguém mais fez esse código, mas como peguei do link citado acima que é post dele deixo aqui o autoloot 100% funcional direto nas sources
    • By koyotestark
      Bom pessoal, a muito tempo venho tentando colocar isso em meu servidor e finalmente consegui e vou repassar isso pra vocês, não entendo muita coisa de programação, mas quando a gente não pode pagar tem que aprender a se virar.
       Com isso, quando vc botar em sua magia 
      setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
      ela vai dar dano de energy, porem vai aparecer efeito de sangue como physical tirar sangue como fisical, e a cor do hit tomado será o de energy liláz.
      >> Source que usei: [8.60] TFS 0.4 Rev3996 War & Cast
       
       Então vamos lá, primeiro que vamos precisar ter os codigos da distro pra compilar.
       Tambem é preciso de um programa para compilar [gerar o executavel do servidor]
       usei o: Stians Repack Dev-Cpp 0.2 - 64bit {meu sistema é 64 bits, entao tive que usar este.}
       Vamos lá, abra o Stians Repack Dev-Cpp 0.2 {Programa que usei} e encontre o "TheForgottenServer.dev" para abrir o projeto "caso nunca tenha feito isso antes.
       abra o game.cpp do lado esquerdo <<
       
       Feito isso, aperte CTRL + F para fazer uma pesquisa e procure por: case COMBAT_ENERGYDAMAGE:
      vai estar assim
       
      case COMBAT_ENERGYDAMAGE: { textColor = COLOR_PURPLE; magicEffect = MAGIC_EFFECT_ENERGY_DAMAGE; break; }  
       Você vai substituir por:
       
      case COMBAT_ENERGYDAMAGE: { Item* splash = NULL; switch(target->getRace()) { case RACE_BLOOD: textColor = COLOR_PURPLE; magicEffect = MAGIC_EFFECT_DRAW_BLOOD; splash = Item::CreateItem(ITEM_SMALLSPLASH, FLUID_BLOOD); break; default: break; } if(splash) { internalAddItem(NULL, target->getTile(), splash, INDEX_WHEREEVER, FLAG_NOLIMIT); startDecay(splash); } break; }  
       Observação, você "que nunca fez isso" deve pegar do case até  e a chave fechada } <<, este simbolo aqui
       Feito isso, aperte F9 para iniciar a compilação {Lembre-se antes de renomear, ou apagar a pasta Obj } se tudo correr bem, o executavel irá ser criado.
        OBS: Como citado acima, não sou programador, então não saberei responder caso ocorra algum erro. Mas tentarei
    • By stackcheese
      E aí guys, venho a um tempo vendo as datapacks que lançam diariamente e resolvi postar o sistema de setas no cast (não sei se alguém já postou algo relativo o_o) 

      para fazer esse sistema eu estou usando a última versão do OTX do github...  LINK PARA BAIXAR (otx do mattyx)
       
      maioria das pessoas já sabem o que é esse sistema, mas pra quem não sabe, é a possibilidade de alternar o cast apertando CTRL + QUALQUER ARROW, mesmo que já tenha em vários servers, algums ainda não tem então toma aí.
       
       
      em
      protocolgame.cpp
       
      procure por 
       
      void ProtocolGame::spectate(const std::string& name, const std::string& password) dentro das chaves após 
       
      player->client->addSpectator(this);  
      coloque:
       
      std::ostringstream ss; std::string value = "-1"; player->getStorage("broadcast_start", value); time_t ctime = time(NULL); uint32_t total = ctime - std::stoi(value); uint32_t hours, minutes, seconds; minutes = total / 60; seconds = total % 60; hours = minutes / 60; minutes = minutes % 60; ss << "Players watching " << player->getName() << ": " << (player->client->list().size()) << "\nBroadcast time: "; if (hours > 0) { ss << hours << " hour(s)"; } if (minutes > 0) { ss << minutes << " minute(s)"; } if (seconds > 0) { ss << seconds << " second(s)"; } ss << "\nYou can Switch channels by using CTRL + arrow keys!"; std::string msg = ss.str(); this->m_lastSwitch = time(NULL); this->sendTextMessage(MSG_INFO_DESCR, msg);  
      no final desse escopo após a }, adicione:
       
      void ProtocolGame::spectatorTurn(uint8_t direction) { std::vector<Player*> candidates; int index = 0; for (AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it) { if (!it->second->client->isBroadcasting()) { continue; } if (it->second->client->getPassword() != "") { continue; } if (it->second->client->banned(getIP())) { continue; } if (it->second == player) { index = candidates.size(); } candidates.push_back(it->second); } if (candidates.size() < 2) { return; } if (direction == 0 || direction == 1) { direction = uint8_t(1); } if (direction == 2 || direction == 3) { direction = uint8_t(-1); } if (index == 0 && direction == -1) { direction = uint8_t(0); } Player* _player = candidates[(index + direction) % candidates.size()]; if (!_player || player == _player) { return; } if (!_player || _player->isRemoved() || !_player->client->getOwner()) { return; } if ((time(NULL) - this->m_lastSwitch) < 1) { return; } this->m_lastSwitch = time (NULL); player->client->removeSpectator(this); player->unRef(); player = _player; player->addRef(); knownCreatureSet.clear(); player->sendCreatureAppear(player, this); player->sendContainers(this); if (PrivateChatChannel * channel = g_chat.getPrivateChannel(player)) chat(channel->getId()); player->client->addSpectator(this); }  
       
      agora em:
       
      void ProtocolGame::parsePacket(NetworkMessage &msg)  
      procure por:
       
      case 0xA1: parseCancelTarget(msg); break;  
      tenha certeza de estar dentro do escopo:
       
      if(m_spectator) { switch(recvbyte) {  
       
      então abaixo de "case 0xA1: parseCancelTarget(msg); break;" coloque:
       
       
      // Ctrl + Arrow case 0x6F: case 0x70: case 0x71: case 0x72: Dispatcher::getInstance().addTask( createTask(boost::bind(&ProtocolGame::spectatorTurn, this, recvbyte - 0x6F))); break;  
      feito, mas agora precisamos adicionar algumas coisas em
       
      protocolgame.h
       
      procure por:
       
      void chat(uint16_t channelId);  
      adicione abaixo:
       
      void spectatorTurn(uint8_t direction);  
       
      agora, lá no final do arquivo, procure por:
       
      Player* player;  
      coloque abaixo:
       
      time_t m_lastSwitch;  
      agora só compilar e testar
       
      apenas umas imagem mostrando que deu certo abaixo...
       
      caso der algum tipo de erro, fico a disposição para ajudar
       
      Opcional:
       
      mensagem MOTD (mensagem do dia) modificada igual abaixo:
       

       
       
       
      2: 
       
      informações de level / specs ativos na janela de login igual a imagem abaixo:


       
       
       
       
      é isso.

      quem fez esse sistema eu não sei, apenas peguei de uma source que tinha e coloquei explicado aqui, então de créditos eu coloco 1% eu @stackcheese por ter explicado como por hihi

       



×
×
  • Create New...

Important Information

Confirmação de Termo