Skocz do zawartości

Rozwiązane przez Sevence

Przejdź do rozwiązania

Featured Replies

Opublikowano
  • Rozwiązanie

Problem polega na tym, że switch sprawdza jedynie pierwszy znak z arg1, więc każda liczba dwucyfrowa jest traktowana tylko na podstawie pierwszego znaku. Jeśli próbujesz przejść na mapę 11, kod wczytuje tylko 1. Wystarczy zmienić sposób, w jaki numer mapy jest odczytywany. Zamiast odczytywać tylko pierwszy znak, musisz zamienić cały numer na liczbę, aby poprawnie rozróżniać wszystkie numery map.

 

Zaktualizowałem dla ciebie ten kod, sprawdź teraz.

ACMD(do_teleport_map)
{
	const char *teleport;
	char arg1[256], arg2[256];

	teleport = two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
	int map_number = atoi(arg1);

	switch (map_number)
	{
		case 0:
			ch->WarpSet(409600 + 59700, 896000 + 68200, 1);
			break;

		case 1:
			ch->WarpSet(307200 + 45900, 819200 + 63700, 4);
			break;

		case 2:
			ch->WarpSet(921600 + 48000, 204800 + 73600, 3);
			break;

		case 3:
			ch->WarpSet(819200 + 44700, 204800 + 41200, 6);
			break;

		case 4:
			ch->WarpSet(0 + 55700, 102400 + 55500, 2);
			break;

		case 5:
			ch->WarpSet(102400 + 43100, 204800 + 35200, 5);
			break;

		case 6:
			ch->WarpSet(256000 + 76900, 665600 + 80000, 7);
			break;

		case 7:
			ch->WarpSet(204800 + 83200, 486400 + 53900, 13);
			break;

		case 8:
			ch->WarpSet(358400 + 76400, 153600 + 60600, 8);
			break;

		case 9:
			ch->WarpSet(51200 + 47800, 563200 + 7900, 21);
			break;

		case 10:
			ch->WarpSet(153600, 1203200, 23);
			break;

		case 11:
			ch->WarpSet(1301400, 3103800, 26);
			break;
	}
}

 

  • Sevence zmienił(a) tytuł na Problem z teleportacją na mapy z indexem powyżej 9
Opublikowano
  • Autor
24 minuty temu, Sevence napisał(a):

Problem polega na tym, że switch sprawdza jedynie pierwszy znak z arg1, więc każda liczba dwucyfrowa jest traktowana tylko na podstawie pierwszego znaku. Jeśli próbujesz przejść na mapę 11, kod wczytuje tylko 1. Wystarczy zmienić sposób, w jaki numer mapy jest odczytywany. Zamiast odczytywać tylko pierwszy znak, musisz zamienić cały numer na liczbę, aby poprawnie rozróżniać wszystkie numery map.

 

Zaktualizowałem dla ciebie ten kod, sprawdź teraz.

ACMD(do_teleport_map)
{
	const char *teleport;
	char arg1[256], arg2[256];

	teleport = two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
	int map_number = atoi(arg1);

	switch (map_number)
	{
		case 0:
			ch->WarpSet(409600 + 59700, 896000 + 68200, 1);
			break;

		case 1:
			ch->WarpSet(307200 + 45900, 819200 + 63700, 4);
			break;

		case 2:
			ch->WarpSet(921600 + 48000, 204800 + 73600, 3);
			break;

		case 3:
			ch->WarpSet(819200 + 44700, 204800 + 41200, 6);
			break;

		case 4:
			ch->WarpSet(0 + 55700, 102400 + 55500, 2);
			break;

		case 5:
			ch->WarpSet(102400 + 43100, 204800 + 35200, 5);
			break;

		case 6:
			ch->WarpSet(256000 + 76900, 665600 + 80000, 7);
			break;

		case 7:
			ch->WarpSet(204800 + 83200, 486400 + 53900, 13);
			break;

		case 8:
			ch->WarpSet(358400 + 76400, 153600 + 60600, 8);
			break;

		case 9:
			ch->WarpSet(51200 + 47800, 563200 + 7900, 21);
			break;

		case 10:
			ch->WarpSet(153600, 1203200, 23);
			break;

		case 11:
			ch->WarpSet(1301400, 3103800, 26);
			break;
	}
}

 

 

Jesteś świetny, męczę się nad tą teleportacja od 3 dni. Działa elegancko, mogę ruszyć dalej. 

 

Dziekuje Ci bardzo z całego serduszka

  • Sevence zablokował(a) ten temat
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.