JA

[7.92] Randomizer Grounds.

Por Jackson Zani, 24 de mai. de 2007 em Linguagens de Programação

12
2.5k
24 de maio de 2007 às 14:46

Não recomendo usar isso para mapas grandes(acima de 30mb), recomando usar programas. porque dependendo o tamanho do mapa demora + para abrir o servidor, porque irá randomizar todos os tiles, mais como tem pessoas que gostam de randomizar pelo servidor aqui vai o code:

 

Em game.cpp adicione no final

short Game::checkItemGroundType(uint16_t itemid)
{	
if(itemid >= 4608 && itemid <= 4625 || itemid >= 4664 && itemid <= 4666 || itemid == 4820)
return GROUND_WATER;

else if(itemid >= 708 && itemid <= 711)
return GROUND_TAR;

else if(itemid >= 4691 && itemid <= 4712 || itemid >= 4749 && itemid <= 4755 || itemid == 4758)
return GROUND_SWAMP;

else if(itemid >= 598 && itemid <= 601)
return GROUND_LAVA;  

else
return 0; 
}

short Game::checkItemGroundTypeRandomizer(uint16_t itemid)
{
if(itemid >= 4608 && itemid <= 4625 || itemid >= 4664 && itemid <= 4666)
return GROUND_WATER;

else if(itemid >= 708 && itemid <= 711)
return GROUND_TAR;

else if(itemid >= 4691 && itemid <= 4712 || itemid >= 4749 && itemid <= 4755 || itemid == 4758)
return GROUND_SWAMP;

else if(itemid >= 598 && itemid <= 601)
return GROUND_LAVA;

else if(itemid >= 4405 && itemid <= 4438)
return GROUND_MOUNTAIN1;

else if(itemid >= 4439 && itemid <= 4455)
return GROUND_MOUNTAIN2;

else if(itemid == 4566 || itemid >= 4570 && itemid <= 4579 || itemid == 4595)
return GROUND_ROCKS;

else if(itemid >= 4526 && itemid <= 4541 || itemid >= 4567 && itemid <= 4569 || itemid == 4756)
return GROUND_GRASS;

else if(itemid >= 5405 && itemid <= 5410)
return GROUND_UNDERWATER;

else
return 0; 
}

 

Em game.h abaixo de:

void changeLight(const Creature* creature);

 

Adicione:

short checkItemGroundType(uint16_t itemid);
short checkItemGroundTypeRandomizer(uint16_t itemid);

 

Vá para const79.h, abaixo de:

enum SquareColor_t {
SQ_COLOR_NONE = 256,
SQ_COLOR_BLACK = 0,
};

 

Adicione:

enum GroundType_t {
GROUND_WATER = 1,
GROUND_LAVA = 2,
GROUND_SWAMP = 3,
GROUND_TAR = 4,
GROUND_MOUNTAIN1 = 5,
GROUND_MOUNTAIN2 = 6,
GROUND_ROCKS = 7,
GROUND_GRASS = 8,
GROUND_UNDERWATER = 9,
};

 

 

Agora em iomapotbm.cpp abaixo de:

case OTBM_ATTR_ITEM:
					{
						Item* item = Item::CreateItem(propStream);
						if(!item){
							map->setLastError(LOADMAPERROR_FAILEDTOCREATEITEM, nodeTile);
							return false;
						}

 

Adicione:

if(g_config.getString(ConfigManager::RANDOMIZE_GROUND) == "yes" && g_game.checkItemGroundTypeRandomizer(item->getID()) != 0 && item->getActionId() == 0 && item->getUniqueId() == 0){
									randomizeGround(item);
							}

 

No final de iomapotbm.cpp adicione:

void IOMapOTBM::randomizeGround(Item* item)
{

  uint16_t percent = 1;
  GroundType_t type;
  switch(g_game.checkItemGroundTypeRandomizer(item->getID())){
	case GROUND_WATER:
		if(g_config.getNumber(ConfigManager::WATER_PERCENT) > 0)
			percent = 100/g_config.getNumber(ConfigManager::WATER_PERCENT);
		else
			percent = 0;
		type = GROUND_WATER;
		break;
	case GROUND_LAVA:
		if(g_config.getNumber(ConfigManager::LAVA_PERCENT) > 0)
			percent = 100/g_config.getNumber(ConfigManager::LAVA_PERCENT);
		else
			percent = 0;
		type = GROUND_LAVA;
		break;
	case GROUND_SWAMP:
		if(g_config.getNumber(ConfigManager::SWAMP_PERCENT) > 0)
			percent = 100/g_config.getNumber(ConfigManager::SWAMP_PERCENT);
		else
			percent = 0;
		type = GROUND_SWAMP;
		break;
	case GROUND_TAR:
		if(g_config.getNumber(ConfigManager::TAR_PERCENT) > 0)
			percent = 100/g_config.getNumber(ConfigManager::TAR_PERCENT);
		else
			percent = 0;
		type = GROUND_TAR;
		break;
	case GROUND_MOUNTAIN1:
		if(g_config.getNumber(ConfigManager::MOUNTAIN_PERCENT) > 0)
			percent = 100/g_config.getNumber(ConfigManager::MOUNTAIN_PERCENT);
		else
			percent = 0;
		type = GROUND_MOUNTAIN1;
		break;
	case GROUND_MOUNTAIN2:
		if(g_config.getNumber(ConfigManager::MOUNTAIN_PERCENT) > 0)
			percent = 100/g_config.getNumber(ConfigManager::MOUNTAIN_PERCENT);
		else
			percent = 0;
		type = GROUND_MOUNTAIN2;
		break;
	case GROUND_ROCKS:
		if(g_config.getNumber(ConfigManager::ROCKS_PERCENT) > 0)
			percent = 100/g_config.getNumber(ConfigManager::ROCKS_PERCENT);
		else
			percent = 0;
		type = GROUND_ROCKS;
		break;
	case GROUND_GRASS:
		if(g_config.getNumber(ConfigManager::GRASS_PERCENT) > 0)
			percent = 100/g_config.getNumber(ConfigManager::GRASS_PERCENT);
		else
			percent = 0;
		type = GROUND_GRASS;
		break;
	case GROUND_UNDERWATER:
		if(g_config.getNumber(ConfigManager::UNDERWATER_PERCENT) > 0)
			percent = 100/g_config.getNumber(ConfigManager::UNDERWATER_PERCENT);
		else
			percent = 0;
		type = GROUND_UNDERWATER;
		break;
}

  if(percent == 0)
	return;

  int x = random_range(1,percent);
  short y = 0;
  int toID = 0;

if(x == 1){
	if(type == GROUND_WATER){
		y = random_range(1,21);
		  if(y >= 1 && y <= 18)
			toID = 4607+y;
		  else if(y >= 19 && y <= 21)
			toID = 4645+y;
	}
	else if(type == GROUND_LAVA){
		y = random_range(1,4);
			toID = 597+y;
	}
	else if(type == GROUND_SWAMP){
		y = random_range(1,30);
		  if(y >= 1 && y <= 22)
			toID = 4690+y;
		  else if(y >= 23 && y <= 29)
			toID = 4726+y;
		  else if(y == 30)
			toID = 4758;
	}
	else if(type == GROUND_TAR){
		y = random_range(1,4);
			toID = 707+y;
	}
	else if(type == GROUND_MOUNTAIN1){
		y = random_range(1,34);
			toID = 4404+y;
	}
	else if(type == GROUND_MOUNTAIN2){
		y = random_range(1,17);
			toID = 4438+y;
	}
	else if(type == GROUND_ROCKS){
		y = random_range(1,12);
		  if(y == 1)
			toID = 4566;
		  else if(y >= 2 && y <= 11)
			toID = 4568+y;
		  else if(y == 12)
			toID = 4595;
	}
	else if(type == GROUND_GRASS){
		y = random_range(1,20);
		  if(y >= 1 && y <= 16)
			toID = 4525+y;
		  else if(y >= 17 && y <= 19)
			toID = 4550+y;
		  else if(y == 20)
			toID = 4756;
	}
	else if(type == GROUND_UNDERWATER){
		y = random_range(1,6);
			toID = 5404+y;
	}

  item->setID(toID);
}
}

 

Em iomapotbm.h, abaixo de:

virtual bool loadHouses(Map* map);

 

Adicione:

void randomizeGround(Item* item);

 

Agora em item.cpp abaixo de:

else if(_type == ITEM_DUSTBIN){
		newItem = new TrashHolder(_type /*, NM_ME_PUFF*/);
	}

 

Adicione:

else if(g_game.checkItemGroundType(_type) != 0){
	   MagicEffectClasses effect_type; 
		switch(g_game.checkItemGroundType(_type)){ 
				case GROUND_TAR:
					effect_type = NM_ME_PUFF;
				break;
				case GROUND_WATER:
					effect_type = NM_ME_LOSE_ENERGY;
				break;
				case GROUND_SWAMP:
					effect_type = NM_ME_POISON_RINGS;
				break;
				case GROUND_LAVA:
					effect_type = NM_ME_HITBY_FIRE;
				break;
		}
		newItem = new TrashHolder(_type, effect_type);
	}

 

Agora em tile.cpp abaixo de:

else if(iiType.isTar())
						continue;

 

Adicione:

else if(g_game.checkItemGroundType(iitem->getID()) != 0)
						continue;

 

Agora em configmanager.cpp adicione

m_confString[RANDOMIZE_GROUND] = getGlobalString(L, "randomize_ground", "no");
m_confInteger[WATER_PERCENT] = getGlobalNumber(L, "water_percent", 10);
m_confInteger[LAVA_PERCENT] = getGlobalNumber(L, "lava_percent", 10);
m_confInteger[SWAMP_PERCENT] = getGlobalNumber(L, "swamp_percent", 10);
m_confInteger[TAR_PERCENT] = getGlobalNumber(L, "tar_percent", 10);
m_confInteger[MOUNTAIN_PERCENT] = getGlobalNumber(L, "mountain_percent", 10);
m_confInteger[ROCKS_PERCENT] = getGlobalNumber(L, "rocks_percent", 10);
m_confInteger[GRASS_PERCENT] = getGlobalNumber(L, "grass_percent", 10);

 

Em configmanager.h adicione nos strings

RANDOMIZE_GROUND,

 

Agora nos integer adicione

WATER_PERCENT,
	LAVA_PERCENT,
	SWAMP_PERCENT,
	TAR_PERCENT,
	MOUNTAIN_PERCENT,
	ROCKS_PERCENT,
	GRASS_PERCENT,
	UNDERWATER_PERCENT,

 

Pronto de rebuild all, ctrl+f11 e adicione isso no config.lua:

--------------------------------------------------------------------
---------- Randomize Ground Configs ------------
--------------------------------------------------------------------

-- Randomize Ground? (yes/no)
randomize_ground = "no"

-- Water Percent
water_percent = 70

-- Lava Percent
lava_percent = 10

-- Swamp Percent
swamp_percent = 50

-- Tar Percent
tar_percent = 10

-- Mountain Percent
mountain_percent = 50

-- Rocks Percent
rocks_percent = 60

-- Grass Percent
grass_percent = 80

-- Underwater Ground Percent
underwater_percent = 70

 

Espero ter ajudado, qualquer dúvida só perguntar.

 

Code desenvolvido pelo nosso amigo Zorzin.

 

Abraços.

Editado Maio 29 por Jackson Zani

dyegodbD
24 de maio de 2007 às 17:22

Como assim randomizer? =O isso afeta em q no jogo? =/

24 de maio de 2007 às 18:29
Como assim randomizer? =O isso afeta em q no jogo? =/

 

 

Não afeta nada, muito pelo contrário melhora tudo os tiles, ou pisos como você deseja chamar,

Ele randomiza, invês de ficar igual, mas se seu mapa for maior de 30mb ele vai demorar pra abrir só.

 

Tem programa que faiz isso hehe.

 

Abraços ^^

pheniqsP
24 de maio de 2007 às 18:47

Parece ser muito bom.

Você poderia dar o nome do programa?

dyegodbD
24 de maio de 2007 às 19:40
Não afeta nada, muito pelo contrário melhora tudo os tiles, ou pisos como você deseja chamar,

Ele randomiza, invês de ficar igual, mas se seu mapa for maior de 30mb ele vai demorar pra abrir só.

 

Tem programa que faiz isso hehe.

 

Abraços ^^

 

Ta mas então ele dexa mais leve mas sem altera graficos neh? ;D Eu entendi agora? ;D

 

A e outra cosia... tm como vc arrumar os beds? acho que tem algo errado no code pq aki n funfa =O, ams eu n sei neh, eu n entendo nd de codes ASKOPAKSOS

24 de maio de 2007 às 20:51
Ta mas então ele dexa mais leve mas sem altera graficos neh? ;D Eu entendi agora? ;D

 

A e outra cosia... tm como vc arrumar os beds? acho que tem algo errado no code pq aki n funfa =O, ams eu n sei neh, eu n entendo nd de codes ASKOPAKSOS

 

Sim, não é que deixa mais leve, deixa pesado pra abrir o server, intão ele demora, mais isso nao danifica dentro do jogo, eu arrumarei os beds, é que eu tinha postado os mais atualizados mais tiraram hehehe.. eu posto denovo amanha.

 

Abraços!

dyegodbD
24 de maio de 2007 às 23:56

atah agora tendi ;D shdihsahd, ta vo fica esperando ;D vlws mesmo Zani

Wey.CtbaW
25 de maio de 2007 às 00:07

Nossa cara, obrigadão, tava em procura desse malditinho código e não achava...Nem sei randomizar os mapas manualmente...Muito trabalho...

3 meses depois...
torpseT
16 de agosto de 2007 às 22:23

Q Q EH INTEGER?? Q ARQUIVO EH ONDE EH BOTO ISSO Q TENK IR NO INTEGER???

 

BOm COde mais n sei o q eh INteger =( explica plxx

16 de agosto de 2007 às 23:17
Q Q EH INTEGER?? Q ARQUIVO EH ONDE EH BOTO ISSO Q TENK IR NO INTEGER???

 

BOm COde mais n sei o q eh INteger =( explica plxx

 

E ai Torpse seguinte,

 

No Configmanager tem 2 tipos de função a primeira é String, que é tipo "yes" ou "no", agora os Integer são números,

No configmanager.h lá é separado essas funções por isso eu falei ;}

 

Primeiros vem as Strings, e mas pra baixo tem as Integer, ai segue oque eu falei ai no code :)

 

Abraços, espero ter ajudado

torpseT
17 de agosto de 2007 às 08:07

Ooo vlew kra otimo code obrigado por responder so novo aqui no ot em questao de responde hehehe SO teu Fan xD

 

abraços, Balneario EH NOIS \o/

 

 

Ajudo mUito deu certo obrigado mesmo tu tem futuro xD

2 meses depois...
19 de outubro de 2007 às 20:00

Aew cara otimo codigo

mas tipow fui tentar colokar nu meu vo 8.0 e nun funfa

tu sabe se tem q muda algo?

se tive adapta eli pra 8.0

 

abraços