CO

Passando Um Otserv Para 8.60

Por comedinhasss, 15 de jul. de 2010 em Tutoriais de Programação

otserv
tibia
script
54
26.3k
bernas30B
19 de agosto de 2010 às 19:51

continuo sem saber como alterar :( não sei onde editar

kwovanK
19 de agosto de 2010 às 21:31

alguem podia me confirma isso? :winksmiley02:

 

Não existe este bug em versões abaixo de 8.6.0.

 

continuo sem saber como alterar :( não sei onde editar

 

Precisa saber compilar um otserv para fazer isso.

1 mês depois...
comedinhasssC
07 de setembro de 2010 às 12:55

Topico atualizado...

Novas modificações para serem feitas...

 

Em npc.cpp:

Procure:

li.itemId = intValue;

 

Embaixo adicione:

const ItemType& it = Item::items[li.itemId];

 

Também procure:

if(readXMLInteger(tmpNode, "subtype", intValue))
li.subType = intValue;

 

Embaixo adicione:

else
{
if(it.stackable)
li.subType = 1;
else if(it.isFluidContainer() || it.isSplash())
li.subType = 0;
}

 

Em item.cpp:

Procure:

s << "(";
if(!it.runeSpellName.empty())
s << "\"" << it.runeSpellName << "\", ";

s << "Charges:" << subType <<")";

 

Embaixo adicione:

if(!it.runeSpellName.empty())
s << "(\"" << it.runeSpellName << "\")";

 

 

Em luascript.cpp:

Procure por:

	//getCreatureHealth(cid)
lua_register(m_luaState, "getCreatureHealth", LuaScriptInterface::luaGetCreatureHealth);

 

Substitua por:

		//getItemParent(uid)
lua_register(m_luaState, "getItemParent", LuaScriptInterface::luaGetItemParent);

 

Também procure por:

int32_t LuaScriptInterface::luaGetCreatureHealth(lua_State* L)
{
//getCreatureHealth(cid)
ScriptEnviroment* env = getEnv();
if(Creature* creature = env->getCreatureByUID(popNumber(L)))
	lua_pushnumber(L, creature->getHealth());
else
{
	errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
	lua_pushboolean(L, false);
}
return 1;
}

 

Substitua por:

int32_t LuaScriptInterface::luaGetItemParent(lua_State* L)
{
//getItemParent(uid)
ScriptEnviroment* env = getEnv();

Item* item = env->getItemByUID(popNumber(L));
if(!item)
{
	errorEx(getError(LUA_ERROR_ITEM_NOT_FOUND));
	lua_pushnil(L);
	return 1;
}

Item* container = item->getParent()->getItem();
pushThing(L, container, env->addThing(container));
return 1;
}

 

Em luascript.h:

Procure por:

static int32_t luaDoRemoveItem(lua_State* L);

 

Substitua por:

static int32_t luaGetItemParent(lua_State* L);

 

Arquivos para procurar e repassar:



Bom gente eu não gravei como era o antigo desse então procure uma frase e repasse

 

Em container.cpp:


Procure e repasse:

Cylinder* Container::__queryDestination(int32_t& index, const Thing* thing, Item** destItem,
uint32_t&)
{
if(index == 254 /*move up*/)
{
	index = INDEX_WHEREEVER;
	*destItem = NULL;

	Container* parentContainer = dynamic_cast<Container*>(getParent());
	if(parentContainer)
		return parentContainer;

	return this;
}
else if(index == 255 /*add wherever*/){
	index = INDEX_WHEREEVER;
	*destItem = NULL;
}
else if(index >= (int32_t)capacity()){
		/*
		if you have a container, maximize it to show all 20 slots
		then you open a bag that is inside the container you will have a bag with 8 slots
		and a "grey" area where the other 12 slots where from the container
		if you drop the item on that grey area
		the client calculates the slot position as if the bag has 20 slots
		*/
		index = INDEX_WHEREEVER;
	*destItem = NULL;
}

const Item* item = thing->getItem();
if(item == NULL){
	return this;
}

if(item->isStackable()){
	if(item->getParent() != this){
		//try find a suitable item to stack with
		uint32_t n = 0;
		for(ItemList::iterator cit = itemlist.begin(); cit != itemlist.end(); ++cit){
			if((*cit) != item && (*cit)->getID() ==  item->getID() && (*cit)->getItemCount() < 100){
				*destItem = (*cit);
				index = n;
				return this;
			}

			++n;
		}
	}
}

if(index != INDEX_WHEREEVER){
	Thing* destThing = __getThing(index);
	if(destThing)
		*destItem = destThing->getItem();

	Cylinder* subCylinder = dynamic_cast<Cylinder*>(*destItem);

	if(subCylinder){
		index = INDEX_WHEREEVER;
		*destItem = NULL;
		return subCylinder;
	}
}

return this;
}





Em item.cpp:

Procure e repasse:

void Item::setDefaultSubtype()
{
setItemCount(1);
const ItemType& it = items[id];
if(it.charges)
	setCharges(it.charges);
}

 

Em player.cpp:

Procure e repasse:

Cylinder* Player::__queryDestination(int32_t& index, const Thing* thing, Item** destItem,
uint32_t& flags)
{
if(index == 0 /*drop to capacity window*/ || index == INDEX_WHEREEVER){
	*destItem = NULL;

	const Item* item = thing->getItem();
	if(item == NULL){
		return this;
	}

	//find an appropiate slot
	std::list<Container*> containerList;
	for(int i = SLOT_FIRST; i < SLOT_LAST; ++i){
		Item* inventoryItem = inventory[i];

		if(inventoryItem == tradeItem){
			continue;
		}

		if(inventoryItem == tradeItem){
			continue;
		}

			if(inventoryItem){
				//try find an already existing item to stack with
			if(inventoryItem != item &&  item->isStackable() && inventoryItem->getID() ==  item->getID() && inventoryItem->getItemCount() < 100){
				*destItem = inventoryItem;
				index = i;
				return this;
			}
			//check sub-containers
			else if(Container* subContainer = inventoryItem->getContainer()){
				Cylinder* tmpCylinder = NULL;
				int32_t tmpIndex = INDEX_WHEREEVER;
				Item* tmpDestItem = NULL;

				tmpCylinder = subContainer->__queryDestination(tmpIndex, item, &tmpDestItem, flags);
				if(tmpCylinder &&  tmpCylinder->__queryAdd(tmpIndex, item, item->getItemCount(),  flags) == RET_NOERROR){
					index = tmpIndex;
					*destItem = tmpDestItem;
					return tmpCylinder;
				}

				containerList.push_back(subContainer);
			}
		}
		//empty slot
		else if(__queryAdd(i, item, item->getItemCount(), flags) == RET_NOERROR){
			index = i;
			*destItem = NULL;
			return this;
		}
	}

	//check deeper in the containers
	for(std::list<Container*>::iterator it = containerList.begin(); it != containerList.end(); ++it){
		for(ContainerIterator iit = (*it)->begin(); iit != (*it)->end(); ++iit){
			if(Container* subContainer = (*iit)->getContainer()){

				if(subContainer == tradeItem){
					continue;
				}

				Cylinder* tmpCylinder = NULL;
				int32_t tmpIndex = INDEX_WHEREEVER;
				Item* tmpDestItem = NULL;

				tmpCylinder = subContainer->__queryDestination(tmpIndex, item, &tmpDestItem, flags);
				if(tmpCylinder &&  tmpCylinder->__queryAdd(tmpIndex, item, item->getItemCount(),  flags) == RET_NOERROR){
					index = tmpIndex;
					*destItem = tmpDestItem;
					return tmpCylinder;
				}
			}
		}
	}
	return this;
}

Thing* destThing = __getThing(index);
if(destThing)
	*destItem = destThing->getItem();

Cylinder* subCylinder = dynamic_cast<Cylinder*>(destThing);

if(subCylinder){
	index = INDEX_WHEREEVER;
	*destItem = NULL;
	return subCylinder;
}
else
	return this;
}

 

Novo download:

Items.xml (8.6): Clique aqui

 

Novo script de potion...

ele esta em testes... se der erro eu volto no antigo

Editado Setembro 7 por comedinhasss

1 mês depois...
16 de outubro de 2010 às 02:15

O q vc quer dizer com repassar?

1 mês depois...
07 de novembro de 2010 às 12:25

comedinhasss

eu tenho uma duvida

tipo eu to com um problema no item.otb

tipo todas as vezes que eu adicino um novo item com nova id

eu abroo console e diz que o item.otb não é compativel

será que é erro no item editor ou se eu fizer isso ai resolve o meu problema ?

versão do ot:

uso espoca do Real Server 8.60

a versão do tfs eu não sei :/

 

Grato Pela Atenção !

Editado Novembro 7 por Relikia0102

3 semanas depois...
korggoK
27 de novembro de 2010 às 18:20

Vlw ae pelo tuto + REP pra tu ae ;P

Manow ajuda ae... compilei o tfs blz... nao deu erro!!! mais quando vai logar com o acc manager os itens dele cai td no chao e isso tbm acontece quando cria uma acc nova.. o que sera q deu errado alguem pode me ajuda?

 

Muito obrigado!!

Editado Novembro 29 por korggo

1 mês depois...
drakylucasD
12 de dezembro de 2010 às 11:45

ow cara você sabe como passa pa 8.62 ou 8.70 tb?

mudando a versao no resources.lua da debug =d

2 meses depois...
alecuritaA
06 de fevereiro de 2011 às 15:46

Como fasso para ver soucers do executavel??

nunca mexi nisso teria como dar uma ajuda?

3 meses depois...
RHCPR
05 de maio de 2011 às 17:33

link do items.xml off...

2 meses depois...
27 de julho de 2011 às 21:06

muito bom me ajudou muito

1 mês depois...
arkiresA
06 de agosto de 2011 às 13:24

cara arruma no topico ae isso aki

 

Em luascript.cpp:

Procure por:

//getCreatureHealth(cid)

lua_register(m_luaState, "getCreatureHealth", LuaScriptInterface::luaGetCreatureHealth);

 

 

 

Embaixo adicione:

 

//getItemParent(uid)

lua_register(m_luaState, "getItemParent", LuaScriptInterface::luaGetItemParent);

 

cendo que vc tem que substituir e não adiciona ok fora esse erro ta tudo certo ...

2 semanas depois...
AndruiA
17 de agosto de 2011 às 21:13

Onde ta essas Pasta esses arquivos pra Edita?!

aliadobooA
21 de agosto de 2011 às 03:28

/home/marlon/forgottenserver/luascript.cpp:1373: undefined reference to `LuaScriptInterface::luaGetCreatureHealth(lua_State*)'

collect2: ld returned 1 exit status

make[1]: *** [theforgottenserver] Error 1

make[1]: Leaving directory `/home/marlon/forgottenserver'

make: *** [all] Error 2

 

 

oq posso fazer ?

 

problema no acc mannager, items cai no chao

1 mês depois...
6525846
21 de setembro de 2011 às 10:51

kara vc ta tentando mudar a versão ou mudar o serv inteiro

 

olha , pra vc mudar só a versão , a unica coisa que vc tem que faser é trocar o EXE dele para um de 8.60

1 mês depois...
AdriezA
09 de outubro de 2011 às 05:02

fmz manos ??? mano os items do account manager e do primeiro char criado ta caindo no chao ta com erro essa parte flws fmz

 

player.cpp

 

Cylinder* Player::__queryDestination(int32_t& index, const Thing* thing, Item** destItem,
       uint32_t& flags)
{
       if(index == 0 /*drop to capacity window*/ || index == INDEX_WHEREEVER){
               *destItem = NULL;

               const Item* item = thing->getItem();
               if(item == NULL){
                       return this;
               }

               //find an appropiate slot
               std::list<Container*> containerList;
               for(int i = SLOT_FIRST; i < SLOT_LAST; ++i){
                       Item* inventoryItem = inventory[i];

                       if(inventoryItem == tradeItem){
                               continue;
                       }

                       if(inventoryItem == tradeItem){
                               continue;
                       }

                               if(inventoryItem){
                                       //try find an already existing item to stack with
                               if(inventoryItem != item && item->isStackable() && inventoryItem->getID() == item->getID() && inventoryItem->getItemCount() < 100){
                                       *destItem = inventoryItem;
                                       index = i;
                                       return this;
                               }
                               //check sub-containers
                               else if(Container* subContainer = inventoryItem->getContainer()){
                                       Cylinder* tmpCylinder = NULL;
                                       int32_t tmpIndex = INDEX_WHEREEVER;
                                       Item* tmpDestItem = NULL;

                                       tmpCylinder = subContainer->__queryDestination(tmpIndex, item, &tmpDestItem, flags);
                                       if(tmpCylinder && tmpCylinder->__queryAdd(tmpIndex, item, item->getItemCount(), flags) == RET_NOERROR){
                                               index = tmpIndex;
                                               *destItem = tmpDestItem;
                                               return tmpCylinder;
                                       }

                                       containerList.push_back(subContainer);
                               }
                       }
                       //empty slot
                       else if(__queryAdd(i, item, item->getItemCount(), flags) == RET_NOERROR){
                               index = i;
                               *destItem = NULL;
                               return this;
                       }
               }

               //check deeper in the containers
               for(std::list<Container*>::iterator it = containerList.begin(); it != containerList.end(); ++it){
                       for(ContainerIterator iit = (*it)->begin(); iit != (*it)->end(); ++iit){
                               if(Container* subContainer = (*iit)->getContainer()){

                                       if(subContainer == tradeItem){
                                               continue;
                                       }

                                       Cylinder* tmpCylinder = NULL;
                                       int32_t tmpIndex = INDEX_WHEREEVER;
                                       Item* tmpDestItem = NULL;

                                       tmpCylinder = subContainer->__queryDestination(tmpIndex, item, &tmpDestItem, flags);
                                       if(tmpCylinder && tmpCylinder->__queryAdd(tmpIndex, item, item->getItemCount(), flags) == RET_NOERROR){
                                               index = tmpIndex;
                                               *destItem = tmpDestItem;
                                               return tmpCylinder;
                                       }
                               }
                       }
               }
               return this;
       }

       Thing* destThing = __getThing(index);
       if(destThing)
               *destItem = destThing->getItem();

       Cylinder* subCylinder = dynamic_cast<Cylinder*>(destThing);

       if(subCylinder){
               index = INDEX_WHEREEVER;
               *destItem = NULL;
               return subCylinder;
       }
       else
               return this;
}

Editado Outubro 9 por Adriez