• 0
Nister_Just

Textdraw - switch

Вопросы

Как сделать так, чтобы от 300 Textdraw закрывался и больше не открывался,а то большее 300 набирает и textdraw появляется! и.т.д остальные так же !

switch(pInfo[playerid][pHclass][0])
        {
            case 300: TextDrawHideForPlayer(playerid, TextClass_TD[0]);
            case 750: TextDrawHideForPlayer(playerid, TextClass_TD[1]);
            case 1500: TextDrawHideForPlayer(playerid, TextClass_TD[2]);
            case 2750: TextDrawHideForPlayer(playerid, TextClass_TD[3]);
            case 4500: TextDrawHideForPlayer(playerid, TextClass_TD[4]);
            case 8000: TextDrawHideForPlayer(playerid, TextClass_TD[5]);
        }

У меня получилось только вот так,а вот как это всё оптимизировать хз

if(pInfo[playerid][pHclass][0] >= 300) TextDrawHideForPlayer(playerid, TextClass_TD[0]);
         if(pInfo[playerid][pHclass][0] >= 750) TextDrawHideForPlayer(playerid, TextClass_TD[1]);
         if(pInfo[playerid][pHclass][0] >= 1500) TextDrawHideForPlayer(playerid, TextClass_TD[2]);
         if(pInfo[playerid][pHclass][0] >= 2750) TextDrawHideForPlayer(playerid, TextClass_TD[3]);
         if(pInfo[playerid][pHclass][0] >= 4500) TextDrawHideForPlayer(playerid, TextClass_TD[4]);
         if(pInfo[playerid][pHclass][0] >= 8000) TextDrawHideForPlayer(playerid, TextClass_TD[5]);

Такой способ не помогает!
Мне надо,чтобы после 300 TextDraw больше не появлялся и так остольные!

switch (pInfo[playerid][pHclass][0])
{
    case 300..749 : TextDrawHideForPlayer(playerid, TextClass_TD[0]);
    case 750..1499 : TextDrawHideForPlayer(playerid, TextClass_TD[1]);
    case 1500..2749 : TextDrawHideForPlayer(playerid, TextClass_TD[2]);
    case 2750..4499 : TextDrawHideForPlayer(playerid, TextClass_TD[3]);
    case 4500..7999 : TextDrawHideForPlayer(playerid, TextClass_TD[4]);
    case 8000..9999 : TextDrawHideForPlayer(playerid, TextClass_TD[5]);
}

 

Поделиться сообщением


Ссылка на сообщение

4 ответа на этот вопрос

  • 0
16 часов назад, Nister_Just сказал:

 


if(pInfo[playerid][pHclass][0] >= 300) TextDrawHideForPlayer(playerid, TextClass_TD[0]);
         if(pInfo[playerid][pHclass][0] >= 750) TextDrawHideForPlayer(playerid, TextClass_TD[1]);
         if(pInfo[playerid][pHclass][0] >= 1500) TextDrawHideForPlayer(playerid, TextClass_TD[2]);
         if(pInfo[playerid][pHclass][0] >= 2750) TextDrawHideForPlayer(playerid, TextClass_TD[3]);
         if(pInfo[playerid][pHclass][0] >= 4500) TextDrawHideForPlayer(playerid, TextClass_TD[4]);
         if(pInfo[playerid][pHclass][0] >= 8000) TextDrawHideForPlayer(playerid, TextClass_TD[5]);

 

 

Этот код работает как нужно?

Поделиться сообщением


Ссылка на сообщение
  • 0
1 час назад, odosenok сказал:

 

Этот код работает как нужно?

Да,работает отлично!

Поделиться сообщением


Ссылка на сообщение
  • 0

@Nister_Just, ну, если работает хорошо, зачем туда лезть?

 

Дело в том, что оптимизация в данном случае снизит читаемость кода, что, по-моему, гораздо важнее.

Спойлер

 


new pClass = pInfo[playerid][pHclass][0];
if (pClass >= 300) {
	TextDrawHideForPlayer(playerid, TextClass_TD[0]);
	if (pClass >= 750) {
		TextDrawHideForPlayer(playerid, TextClass_TD[1]);
		if (pClass >= 1500) {
			TextDrawHideForPlayer(playerid, TextClass_TD[2]);
			if (pClass >= 2750) {
				TextDrawHideForPlayer(playerid, TextClass_TD[3]);
				if (pClass >= 4500) {
					TextDrawHideForPlayer(playerid, TextClass_TD[4]);
					if (pClass >= 8000) {
						TextDrawHideForPlayer(playerid, TextClass_TD[5]);
					}
				}
			}
		}
	}
}

 

Спойлер

new pClass = pInfo[playerid][pHclass][0];
if (pClass >= 300) {
	TextDrawHideForPlayer(playerid, TextClass_TD[0]);
	if (pClass >= 750)
		TextDrawHideForPlayer(playerid, TextClass_TD[1]);
		if (pClass >= 1500)
			TextDrawHideForPlayer(playerid, TextClass_TD[2]);
			if (pClass >= 2750)
				TextDrawHideForPlayer(playerid, TextClass_TD[3]);
				if (pClass >= 4500)
					TextDrawHideForPlayer(playerid, TextClass_TD[4]);
					if (pClass >= 8000)
						TextDrawHideForPlayer(playerid, TextClass_TD[5]);
}

 

 

За счет внесенных выше изменений мы достигаем:

  • убраны лишние проверки. Если число меньше 300, не будем пробегать по значениям 750, 1500, 2750... Аналогично, если число меньше 2750, не будем пробегать по 4500, 8000.
  • уменьшено время работы с переменными. Дело в том, что массив pInfo создавался при запуске сервера, потому обращение к нему занимает больше времени (во-первых, обращение к массивам само по себе медленнее, во-вторых, массив находится "на дне" памяти. Это как колодец. Заполняется со дна и до верха. И черпать что-либо гораздо с самого верха, то есть с последних созданных переменных, нежели с самого низа, то есть переменных, созданных при старте сервера).

 

Учитывая второй абзац, я бы себе сделал так и не забивал голову:

Спойлер

 


new pClass = pInfo[playerid][pHclass][0];

if(pClass >= 300) TextDrawHideForPlayer(playerid, TextClass_TD[0]);
if(pClass >= 750) TextDrawHideForPlayer(playerid, TextClass_TD[1]);
if(pClass >= 1500) TextDrawHideForPlayer(playerid, TextClass_TD[2]);
if(pClass >= 2750) TextDrawHideForPlayer(playerid, TextClass_TD[3]);
if(pClass >= 4500) TextDrawHideForPlayer(playerid, TextClass_TD[4]);
if(pClass >= 8000) TextDrawHideForPlayer(playerid, TextClass_TD[5]);

 

 

Поделиться сообщением


Ссылка на сообщение
  • 0
15 минут назад, odosenok сказал:

@Nister_Just, ну, если работает хорошо, зачем туда лезть?

 

Дело в том, что оптимизация в данном случае снизит читаемость кода, что, по-моему, гораздо важнее.

  Пример (закрыть спойлер)

 



new pClass = pInfo[playerid][pHclass][0];
if (pClass >= 300) {
	TextDrawHideForPlayer(playerid, TextClass_TD[0]);
	if (pClass >= 750) {
		TextDrawHideForPlayer(playerid, TextClass_TD[1]);
		if (pClass >= 1500) {
			TextDrawHideForPlayer(playerid, TextClass_TD[2]);
			if (pClass >= 2750) {
				TextDrawHideForPlayer(playerid, TextClass_TD[3]);
				if (pClass >= 4500) {
					TextDrawHideForPlayer(playerid, TextClass_TD[4]);
					if (pClass >= 8000) {
						TextDrawHideForPlayer(playerid, TextClass_TD[5]);
					}
				}
			}
		}
	}
}

 

  Пример 2 (закрыть спойлер)


new pClass = pInfo[playerid][pHclass][0];
if (pClass >= 300) {
	TextDrawHideForPlayer(playerid, TextClass_TD[0]);
	if (pClass >= 750)
		TextDrawHideForPlayer(playerid, TextClass_TD[1]);
		if (pClass >= 1500)
			TextDrawHideForPlayer(playerid, TextClass_TD[2]);
			if (pClass >= 2750)
				TextDrawHideForPlayer(playerid, TextClass_TD[3]);
				if (pClass >= 4500)
					TextDrawHideForPlayer(playerid, TextClass_TD[4]);
					if (pClass >= 8000)
						TextDrawHideForPlayer(playerid, TextClass_TD[5]);
}

 

 

За счет внесенных выше изменений мы достигаем:

  • убраны лишние проверки. Если число меньше 300, не будем пробегать по значениям 750, 1500, 2750... Аналогично, если число меньше 2750, не будем пробегать по 4500, 8000.
  • уменьшено время работы с переменными. Дело в том, что массив pInfo создавался при запуске сервера, потому обращение к нему занимает больше времени (во-первых, обращение к массивам само по себе медленнее, во-вторых, массив находится "на дне" памяти. Это как колодец. Заполняется со дна и до верха. И черпать что-либо гораздо с самого верха, то есть с последних созданных переменных, нежели с самого низа, то есть переменных, созданных при старте сервера).

 

Учитывая второй абзац, я бы себе сделал так и не забивал голову:

  Пример (закрыть спойлер)

 



new pClass = pInfo[playerid][pHclass][0];

if(pClass >= 300) TextDrawHideForPlayer(playerid, TextClass_TD[0]);
if(pClass >= 750) TextDrawHideForPlayer(playerid, TextClass_TD[1]);
if(pClass >= 1500) TextDrawHideForPlayer(playerid, TextClass_TD[2]);
if(pClass >= 2750) TextDrawHideForPlayer(playerid, TextClass_TD[3]);
if(pClass >= 4500) TextDrawHideForPlayer(playerid, TextClass_TD[4]);
if(pClass >= 8000) TextDrawHideForPlayer(playerid, TextClass_TD[5]);

 

 

Этот только 1 ,а у меня 5

if(pInfo[playerid][pHclass][0] >= 300) TextDrawHideForPlayer(playerid, TextClass_TD[0]);
         if(pInfo[playerid][pHclass][0] >= 750) TextDrawHideForPlayer(playerid, TextClass_TD[1]);
         if(pInfo[playerid][pHclass][0] >= 1500) TextDrawHideForPlayer(playerid, TextClass_TD[2]);
         if(pInfo[playerid][pHclass][0] >= 2750) TextDrawHideForPlayer(playerid, TextClass_TD[3]);
         if(pInfo[playerid][pHclass][0] >= 4500) TextDrawHideForPlayer(playerid, TextClass_TD[4]);
         if(pInfo[playerid][pHclass][0] >= 6000) TextDrawHideForPlayer(playerid, TextClass_TD[5]);
         if(pInfo[playerid][pHclass][0] >= 8000) TextDrawHideForPlayer(playerid, TextClass_TD[6]);
         //-----------------------------
         if(pInfo[playerid][pHclass][1] >= 300) TextDrawHideForPlayer(playerid, TextClass_TD[7]);
         if(pInfo[playerid][pHclass][1] >= 850) TextDrawHideForPlayer(playerid, TextClass_TD[8]);
         if(pInfo[playerid][pHclass][1] >= 1650) TextDrawHideForPlayer(playerid, TextClass_TD[9]);
         if(pInfo[playerid][pHclass][1] >= 2500) TextDrawHideForPlayer(playerid, TextClass_TD[10]);
         if(pInfo[playerid][pHclass][1] >= 3750) TextDrawHideForPlayer(playerid, TextClass_TD[11]);
         if(pInfo[playerid][pHclass][1] >= 4600) TextDrawHideForPlayer(playerid, TextClass_TD[12]);
         if(pInfo[playerid][pHclass][1] >= 7000) TextDrawHideForPlayer(playerid, TextClass_TD[13]);
        //-----------------------------
        if(pInfo[playerid][pHclass][2] >= 50) TextDrawHideForPlayer(playerid, TextClass_TD[14]);
        if(pInfo[playerid][pHclass][2] >= 150) TextDrawHideForPlayer(playerid, TextClass_TD[15]);
        if(pInfo[playerid][pHclass][2] >= 450) TextDrawHideForPlayer(playerid, TextClass_TD[16]);
        if(pInfo[playerid][pHclass][2] >= 850) TextDrawHideForPlayer(playerid, TextClass_TD[17]);
        if(pInfo[playerid][pHclass][2] >= 1300) TextDrawHideForPlayer(playerid, TextClass_TD[18]);
        if(pInfo[playerid][pHclass][2] >= 2000) TextDrawHideForPlayer(playerid, TextClass_TD[19]);
        if(pInfo[playerid][pHclass][2] >= 4000) TextDrawHideForPlayer(playerid, TextClass_TD[20]);
        //-----------------------------
        if(pInfo[playerid][pHclass][3] >= 100) TextDrawHideForPlayer(playerid, TextClass_TD[21]);
        if(pInfo[playerid][pHclass][3] >= 500) TextDrawHideForPlayer(playerid, TextClass_TD[22]);
        if(pInfo[playerid][pHclass][3] >= 1000) TextDrawHideForPlayer(playerid, TextClass_TD[23]);
        if(pInfo[playerid][pHclass][3] >= 1530) TextDrawHideForPlayer(playerid, TextClass_TD[24]);
        if(pInfo[playerid][pHclass][3] >= 2500) TextDrawHideForPlayer(playerid, TextClass_TD[25]);
        if(pInfo[playerid][pHclass][3] >= 3200) TextDrawHideForPlayer(playerid, TextClass_TD[26]);
        if(pInfo[playerid][pHclass][3] >= 5000) TextDrawHideForPlayer(playerid, TextClass_TD[27]);
        //-----------------------------
        if(pInfo[playerid][pHclass][4] >= 40) TextDrawHideForPlayer(playerid, TextClass_TD[28]);
        if(pInfo[playerid][pHclass][4] >= 140) TextDrawHideForPlayer(playerid, TextClass_TD[29]);
        if(pInfo[playerid][pHclass][4] >= 280) TextDrawHideForPlayer(playerid, TextClass_TD[30]);
        if(pInfo[playerid][pHclass][4] >= 650) TextDrawHideForPlayer(playerid, TextClass_TD[31]);
        if(pInfo[playerid][pHclass][4] >= 1200) TextDrawHideForPlayer(playerid, TextClass_TD[32]);
        if(pInfo[playerid][pHclass][4] >= 1800) TextDrawHideForPlayer(playerid, TextClass_TD[33]);
        if(pInfo[playerid][pHclass][4] >= 3000) TextDrawHideForPlayer(playerid, TextClass_TD[34]);

Получается так

 

new ds = pInfo[playerid][pHclass][0];
		if(ds >= 300) TextDrawHideForPlayer(playerid, TextClass_TD[0]);
	 	if(ds >= 750) TextDrawHideForPlayer(playerid, TextClass_TD[1]);
	 	if(ds >= 1500) TextDrawHideForPlayer(playerid, TextClass_TD[2]);
	 	if(ds >= 2750) TextDrawHideForPlayer(playerid, TextClass_TD[3]);
	 	if(ds >= 4500) TextDrawHideForPlayer(playerid, TextClass_TD[4]);
	 	if(ds >= 6000) TextDrawHideForPlayer(playerid, TextClass_TD[5]);
	 	if(ds >= 8000) TextDrawHideForPlayer(playerid, TextClass_TD[6]);
	 	
	 	new ds1 = pInfo[playerid][pHclass][1];
	 	if(ds1 >= 300) TextDrawHideForPlayer(playerid, TextClass_TD[7]);
	 	if(ds1 >= 850) TextDrawHideForPlayer(playerid, TextClass_TD[8]);
	 	if(ds1 >= 1650) TextDrawHideForPlayer(playerid, TextClass_TD[9]);
	 	if(ds1 >= 2500) TextDrawHideForPlayer(playerid, TextClass_TD[10]);
	 	if(ds1 >= 3750) TextDrawHideForPlayer(playerid, TextClass_TD[11]);
	 	if(ds1 >= 4600) TextDrawHideForPlayer(playerid, TextClass_TD[12]);
	 	if(ds1 >= 7000) TextDrawHideForPlayer(playerid, TextClass_TD[13]);
		
		new ds2 = pInfo[playerid][pHclass][2];
		if(ds2 >= 50) TextDrawHideForPlayer(playerid, TextClass_TD[14]);
		if(ds2 >= 150) TextDrawHideForPlayer(playerid, TextClass_TD[15]);
		if(ds2 >= 450) TextDrawHideForPlayer(playerid, TextClass_TD[16]);
		if(ds2 >= 850) TextDrawHideForPlayer(playerid, TextClass_TD[17]);
		if(ds2 >= 1300) TextDrawHideForPlayer(playerid, TextClass_TD[18]);
		if(ds2 >= 2000) TextDrawHideForPlayer(playerid, TextClass_TD[19]);
		if(ds2 >= 4000) TextDrawHideForPlayer(playerid, TextClass_TD[20]);
		
		new ds3 = pInfo[playerid][pHclass][3];
		if(ds3 >= 100) TextDrawHideForPlayer(playerid, TextClass_TD[21]);
		if(ds3 >= 500) TextDrawHideForPlayer(playerid, TextClass_TD[22]);
		if(ds3 >= 1000) TextDrawHideForPlayer(playerid, TextClass_TD[23]);
		if(ds3 >= 1530) TextDrawHideForPlayer(playerid, TextClass_TD[24]);
		if(ds3 >= 2500) TextDrawHideForPlayer(playerid, TextClass_TD[25]);
		if(ds3 >= 3200) TextDrawHideForPlayer(playerid, TextClass_TD[26]);
		if(ds3 >= 5000) TextDrawHideForPlayer(playerid, TextClass_TD[27]);
        
        new ds4 = pInfo[playerid][pHclass][4];
        if(ds4 >= 40) TextDrawHideForPlayer(playerid, TextClass_TD[28]);
        if(ds4 >= 140) TextDrawHideForPlayer(playerid, TextClass_TD[29]);
        if(ds4 >= 280) TextDrawHideForPlayer(playerid, TextClass_TD[30]);
        if(ds4 >= 650) TextDrawHideForPlayer(playerid, TextClass_TD[31]);
        if(ds4 >= 1200) TextDrawHideForPlayer(playerid, TextClass_TD[32]);
        if(ds4 >= 1800) TextDrawHideForPlayer(playerid, TextClass_TD[33]);
        if(ds4 >= 3000) TextDrawHideForPlayer(playerid, TextClass_TD[34]);

 

Отредактировано пользователем Nister_Just

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Узбек
      От Узбек
      Всем добрый вечер ребят! 
      Я начинающий, сегодня я вам сливаю команду 2(шт) на технические работы
      Ловите 
       
    • nazpol9
      От nazpol9
      Привет всем.

      У меня имеется мод для самп сервера и VPS с Ubuntu, на котором я пытаюсь его запустить.

      В чем суть проблемы: при запуске samp03svr, сервер запускается, но на версии 0.3.DL R-1. Когда я пытаюсь запустить этот же мод локально на Windows, сервер работает на версии 0.3.7 и я могу зайти на него без клиента 0.3.DL.

      Для решения этой проблемы я уже пробовал заменять инклуды и исполнительные файлы теми, что есть в архивах на официальном сайте сампа, перекомпилировал мод, и ничего не изменилось.
       
      #include <a_samp> #include <a_mysql> #include <foreach> #include <Pawn.RakNet> #include <streamer> #include <sscanf2> #include <float2> #include <crashdetect> #include <fmt> #include <a_http> #include <Pawn.CMD> #include <Pawn.Regex> #include <requests> #include <callbacks> #include <MD5> #include <mxdate> #include <TOTP> #include <gvar> #include <md-sort> #include <nex-ac> #include <weapon-config> #include <discord-connector> #include <3DTryg> #include <textdraw-streamer>  
      plugins crashdetect.so streamer.so textdraw-streamer.so sscanf.so pawnraknet.so pawncmd.so mysql.so requests.so profiler.so pawnregex.so TOTP.so gvar.so discord-connector.so

      Если у кого-то будут какие-либо догадки, прошу ими поделиться, если понадобится больше информации - я постараюсь её предоставить.
    • Talex
      От Talex
      Всем привет, сливаю первый мод!
      Информация о моде:

      — Основа Gamenix.
      — Мод переведен на Mysql R39, теперь ни каких слётов нет, мод работает стабильно с онлайном 160+.
      — Новый автосалон на TextDraw.
      — Система 3-х автомобилей (1 можно купить по дефолту, 2 и 3 за донат).
      — Автомобили у игроков теперь не пропадают (Id'ы авто сбивались, с номерами теперь тоже всё в порядке).
      — Оформление сервера полностью переработано, теперь оно более красивое.
      — Защита от копирования карты.
      — в меню сервера добавлен пункт визуальных настроек.
      — Номера на транспорт теперь можно приобрести в /donate.
      — Сделан новый красивый спидометр.
      — При получении номера, добавлен выбор региона.
      — Сделана система радаров и промокодов, создание прямо из игры.
      — Новый интерьер казино.
      — Магазин скинов теперь на TextDraw.
      — Автошкола полностью функционирует.
      — Добавлена информация после коннекта о последнем входе в собственный аккаунт.
      — Приватная защита от всех видов DDoS атак и DoS атак.                                                                                                                                    
      — пароль от АП (/alog) теперь у каждого администратора индивидуальный.
      — Изменено оформление самого мода
      Это не все изменения мода, их ещё очень много. все не упомнишь. 
      Автор мода: Неизвестен
      CUNBERS RP 8.4.3.rar