Chat global

Chat
Loading the chat ...
Eventos Mob Automát...
 
Notifications
Clear all

Eventos Mob Automáticos

4 Posts
4 Usuários
3 Reactions
35 Visualizações
(@corleonneh)
Posts: 2
Apoiador Ativo
Topic starter
 

Salve

Mais um sistema que fiz a muito tempo para realizar eventos automáticos de mobs.

Servidor le o arquivo EventosMobManager.ini, salva nas variáveis, e fica verificando hora e minuto.

Conseguindo setar Field, Mob, duração, porcentagem.

Tem bastante coisa que pode melhorar, mas para quem se interessar já e algo.

Spoiler
EventMobManager.ini
[EventMob]
; Evento 0
Hora[0]=14
Minuto[0]=30
Field[0]=0
Porcentagem[0]=100
duracao[0]=60
monster[0]=1001

; Evento 1
Hora[1]=16
Minuto[1]=0
Field[1]=1
Porcentagem[1]=100
duracao[1]=30
monster[1]=1

; Evento 2
Hora[2]=18
Minuto[2]=0
Field[2]=2
Porcentagem[2]=75
duracao[2]=45
monster[2]=2

; Continue até Evento 24...
; Evento 24
Hora[24]=23
Minuto[24]=30
Field[24]=5
Porcentagem[24]=100
duracao[24]=60
monster[24]=3

 

Seta as variáveis, EventMob o nome dos Mobs q serão usados em eventos.

Spoiler
Onserver.cpp
// Procurar pela linha, e colocar as variaveis abaixo.
// extern int	Open_SODConfig(char* szFileName, void* lphCoreMonster, int* SodTax, char* szSodText, int* SodScoreDiv);


//EVENTO MOB

const int NumeroEventos = 25;
float EventosMob[NumeroEventos][6] = { 0.0f };


const char* EventMob[38][2] = {

	{"0", "	Rei Hopi Event 7x"},
	{"1", "	Rei Hopi Event 8x"},
	{"2", "	Rei Hopi Event 7x"},
	{"3", "	Rei Hopi Event 7x"},
	{ "4", "Rei Hopi Event 7x" },
	{ "5", "Rei Hopi Event 7x" }
};

const char* MapasEventos[][2] = {
	{"0", "Mata das Ac�cias"},
	{"1", "F. Bamboo"},
	{"2", "Jardim da Liberdade"},
	{"3", "Cidade de Ricarten"},
	{"4", "Ref�gio dos A."},
	{"5", "Castelo dos Perdidos"},
	{"6", "Vila Ruinen"},
	{"7", "Terra Maldita"},
	{"8", "Terra Esquecida"},
	{"9", "Cidade de Navisko"},
	{"10", "O�sis"},
	{"11", "C. B. A."},
	{"12", "Terra Proibida"},
	{"13", "C. A. 1"},
	{"14", "C. A. 2"},
	{"15", "C. A. 3"},
	{"16", "Sala do GM"},
	{"17", "F. dos Esp�ritos"},
	{"18", "F. das Ilus�es"},
	{"19", "Vale Tranquilo"},
	{"20", "E. dos Ventos"},
	{"21", "Cidade de Pillai"},
	{"22", "Templo Maldito 1"},
	{"23", "Templo Maldito 2"},
	{"24", "C. dos Cogumelos"},
	{"25", "Caverna das Abelhas"},
	{"26", "Santu�ro Sombrio"},
	{"27", "E. d. F. do Caos"},
	{"28", "Cora��o de Perum"},
	{"29", "Eura"},
	{"30", "S.o.D"},
	{"31", "Vale Galubia"},
	{"32", "Sala de Desafios"},
	{"33", "Castelo Aben�oado"},
	{"34", "Lago da Gan�ncia"},
	{"35", "Santuario Congelado"},
	{"36", "Covil do Kelvezu"},
	{"37", "Ilha Perdida"},
	{"38", "Templo Perdido"},
	{"39", "Mapa 2D"},
	{"40", "Torre sem Fim 1"},
	{"41", "Torre sem Fim 2"},
	{"42", "Templo Maldito 3"},
	{"43", "Torre sem Fim 3"},
	{"44", "Laborat�rio Secreto"},
	{"45", "Arma Antiga"},
	{"46", "Mina de Gelo 1"},
	{"47", "Arquip�lago Perdido"},
	{"48", "Covil do Eragon"},
	{"49", "Arena de Batalha"},
	{"50", "N�cleo de Ferro"},
	{"51", "Abismo do Mar"}
};

 

Faz a leitura do arquivo EventMobManager.ini.

Spoiler
OnServer.cpp
//Procurar pela linha, e colocar o codigo abaixo.
	//for (int x = 1; x <= 150; x++)
//	{
//		STRINGFORMAT(szBuf, "Nv[%d]", x);
//		LeIniStr("ExpConfig", szBuf, "Server\\Config\\ExpManager.ini", szBuf2);
//		Multiplicador[x] = atof(szBuf2);
//	}

//EVENT MOB
for (int x = 0; x <= (NumeroEventos - 1); x++)
	{
		STRINGFORMAT(szBuf, "Hora[%d]", x);
		LeIniStr("EventMob", szBuf, "Server\\Config\\EventMobManager.ini", szBuf2);
		EventosMob[x][0] = atof(szBuf2);
		//	ZeroMemory(szBuf, sizeof(szBuf));
		//	ZeroMemory(szBuf2, sizeof(szBuf2));

		STRINGFORMAT(szBuf, "Minuto[%d]", x);
		LeIniStr("EventMob", szBuf, "Server\\Config\\EventMobManager.ini", szBuf2);
		EventosMob[x][1] = atof(szBuf2);
		//	ZeroMemory(szBuf, sizeof(szBuf));
		//	ZeroMemory(szBuf2, sizeof(szBuf2));

		STRINGFORMAT(szBuf, "Field[%d]", x);
		LeIniStr("EventMob", szBuf, "Server\\Config\\EventMobManager.ini", szBuf2);
		EventosMob[x][2] = atof(szBuf2);
		//	ZeroMemory(szBuf, sizeof(szBuf));
		//	ZeroMemory(szBuf2, sizeof(szBuf2));

		STRINGFORMAT(szBuf, "Porcentagem[%d]", x);
		LeIniStr("EventMob", szBuf, "Server\\Config\\EventMobManager.ini", szBuf2);
		EventosMob[x][3] = atof(szBuf2);
		//	ZeroMemory(szBuf, sizeof(szBuf));
		//	ZeroMemory(szBuf2, sizeof(szBuf2));

		STRINGFORMAT(szBuf, "duracao[%d]", x);
		LeIniStr("EventMob", szBuf, "Server\\Config\\EventMobManager.ini", szBuf2);
		EventosMob[x][4] = atof(szBuf2);
		//	ZeroMemory(szBuf, sizeof(szBuf));
		//	ZeroMemory(szBuf2, sizeof(szBuf2));

		STRINGFORMAT(szBuf, "monster[%d]", x);
		LeIniStr("EventMob", szBuf, "Server\\Config\\EventMobManager.ini", szBuf2);
		EventosMob[x][5] = atof(szBuf2);
		//ZeroMemory(szBuf, sizeof(szBuf));
		//ZeroMemory(szBuf2, sizeof(szBuf2));


	}

Verifica os horários minutos, cria o evento. 

Spoiler
OnServer.cpp
//Procurar pelas linhas, colocar abaixo.
	// Eventos
	//	if (st.wDayOfWeek <= 7) {

//EVENT MOB
		for (int y = 0; y <= NumeroEventos; y++)
			{
				if (EventosMob[y][0] == st.wHour)
				{

					if (EventosMob[y][1] == st.wMinute && EventosMob[y][1] != wLastCheckMin) {

						int mob = EventosMob[y][5];

						const char* constPointer = EventMob[mob][1];

						char* modifiablePointer = new char[strlen(constPointer) + 1];
						strcpy(modifiablePointer, constPointer);


						if (modifiablePointer)
						{

							int Time = EventosMob[y][4];
							int Rate = EventosMob[y][3];
							//	int Time = 30;
							//	int Rate = 100;
							int Field = EventosMob[y][2];

							if (Time == 0) Time = 1;
							if (Rate == 0) Rate = 50;
							else if (Rate > 100) Rate = 100;

							smCHAR_INFO* lpChar = FindMonsterFromName(modifiablePointer);

							STG_AREA* lpStgArea = &StageArea[Field];

							if (lpChar)
							{

								if (lpStgArea && lpStgArea->Event_dwMonsterTime == 0)
								{
									lpStgArea->Event_lpChrMonster = lpChar;
									lpStgArea->Event_dwMonsterTime = dwPlayServTime + Time * 1000 * 60;
									lpStgArea->Event_MonsterPercentage = Rate * 10;

									SERVERCHAT->SendChatAllEx(EChatColor::CHATCOLOR_Global, "Evento ativo!!%s em %s, por %d minutos!!", modifiablePointer, MapasEventos[Field][1], Time);
									ZeroMemory(modifiablePointer, sizeof(modifiablePointer));
								}
								else if (lpStgArea && lpStgArea->Event_dwMonsterTime > 0)
								{

								}
							}
							else
							{

							}
						}
						else {

						}




					}
				}

			}

 

/reload_event_mob faz a releitura do arquivo EventMobManager.ini sem precisar reiniciar servidor.

Spoiler
ServerCommand.cpp
//EVENTO MOB
	else if (ChatCommand("/reload_event_mob", pszBuff))
	{
		ZeroMemory(Multiplicador, sizeof(Multiplicador));

		char szBuf[50] = { 0 };
		char szBuf2[50] = { 0 };


		for (int x = 0; x <= (NumeroEventos - 1); x++)
		{
			STRINGFORMAT(szBuf, "Hora[%d]", x);
			LeIniStr("EventMob", szBuf, "Server\\Config\\EventMobManager.ini", szBuf2);
			EventosMob[x][0] = atof(szBuf2);
			//	ZeroMemory(szBuf, sizeof(szBuf));
			//	ZeroMemory(szBuf2, sizeof(szBuf2));

			STRINGFORMAT(szBuf, "Minuto[%d]", x);
			LeIniStr("EventMob", szBuf, "Server\\Config\\EventMobManager.ini", szBuf2);
			EventosMob[x][1] = atof(szBuf2);
			//	ZeroMemory(szBuf, sizeof(szBuf));
			//	ZeroMemory(szBuf2, sizeof(szBuf2));

			STRINGFORMAT(szBuf, "Field[%d]", x);
			LeIniStr("EventMob", szBuf, "Server\\Config\\EventMobManager.ini", szBuf2);
			EventosMob[x][2] = atof(szBuf2);

			//	ZeroMemory(szBuf, sizeof(szBuf));
			//	ZeroMemory(szBuf2, sizeof(szBuf2));

			STRINGFORMAT(szBuf, "Porcentagem[%d]", x);
			LeIniStr("EventMob", szBuf, "Server\\Config\\EventMobManager.ini", szBuf2);
			EventosMob[x][3] = atof(szBuf2);

			//	ZeroMemory(szBuf, sizeof(szBuf));
			//	ZeroMemory(szBuf2, sizeof(szBuf2));

			STRINGFORMAT(szBuf, "duracao[%d]", x);
			LeIniStr("EventMob", szBuf, "Server\\Config\\EventMobManager.ini", szBuf2);
			EventosMob[x][4] = atof(szBuf2);

			//	ZeroMemory(szBuf, sizeof(szBuf));
				//ZeroMemory(szBuf2, sizeof(szBuf2));

			STRINGFORMAT(szBuf, "monster[%d]", x);
			LeIniStr("EventMob", szBuf, "Server\\Config\\EventMobManager.ini", szBuf2);
			EventosMob[x][5] = atof(szBuf2);
			//	ZeroMemory(szBuf, sizeof(szBuf));
				//ZeroMemory(szBuf2, sizeof(szBuf2));
			//	cout << "mob " << EventosMob[x][5] << endl;

		}

		SERVERCHAT->SendChat(pcUser, CHATCOLOR_Error, "> Evento carregado!");
		}

 
Postado : 05/12/2025 7:38 pm
Prad, ViGo and Lou reacted
Lou
 Lou
(@lou)
Posts: 84
Guia Valioso
 

ficou dahora parabéns meu mano !


 
Postado : 05/12/2025 7:47 pm
(@datway)
Posts: 49
Conselheiro
 

Esse é o cara do momento! Dev braba demais mano, parabéns.


 
Postado : 05/12/2025 8:03 pm
tacolayt
(@tacolayt)
Posts: 42
Conselheiro
 

Parabens meu mano ! 


 
Postado : 05/12/2025 8:35 pm
Compartilhar:

Anúncio