• 0
Sign in to follow this  
Followers 0
Nister_Just

Textdraw - switch

Question

Как сделать так, чтобы от 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]);
}

 

Share this post


Link to post

4 answers to this question

  • 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]);

 

 

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

Share this post


Link to post
  • 0
1 час назад, odosenok сказал:

 

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

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

Share this post


Link to post
  • 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]);

 

 

Share this post


Link to post
  • 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]);

 

Edited by Nister_Just

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Ruman
      By Ruman
      Приветствую! У меня вопрос, связанный с загрузкой игрового аккаунта, просто я делаю регистрацию свою по уроку но в этом уроке функции MySQL из версии R39. Естественно при нажатии F5 выдаёт это:
      D:\Users\Ruman\Desktop\Time RP\gamemodes\project.pwn(1373) : error 017: undefined symbol "cache_get_field_content_int" D:\Users\Ruman\Desktop\Time RP\gamemodes\project.pwn(1374) : error 017: undefined symbol "cache_get_field_content_int" Код:
      forward LoadAcc(playerid); public LoadAcc(playerid) {     player_info[playerid][ID] = cache_get_field_content_int(0, "id", dbHandle);     player_info[playerid][LEVEL] = cache_get_field_content_int(0, "level", dbHandle); } Просто мне нужна другая версия данной функции под R40.
       
      Спасибо тем, что всегда рад помочь! 
       
      P.S Просто с MySQL я вообще в целом не знаком, поэтому так много вопросов.
    • Ruman
      By Ruman
      Здравствуйте! У меня появился 1 вопрос, связанный с MySQL. Короче я тут делал кое-что в своей системе регистрации (иногда я делал по уроку системы регистрации) и когда я переписал одну строчку, то выдало мне это:
      D:\Users\Ruman\Desktop\Time RP\gamemodes\project.pwn(869) : error 017: undefined symbol "mysql_function_query" Короче если не ошибаюсь, то это связанно с загрузкой пароля из БД.
       
      Вот и строчки кода это самой функции:
      format(query1, sizeof(query1), "SELECT * FROM `users` WHERE `NAME` = '%s'", player_info[playerid][NAME]); mysql_function_query(dbHandle, query1, true, "LoadAcc", "i", playerid);  И когда я изменил строчку номер 2 то вроде не выдавало ошибок.
       
      Изменённая строчка:
      format(query1, sizeof(query1), "SELECT * FROM `users` WHERE `NAME` = '%s'", player_info[playerid][NAME]); // Не изменялась mysql_query(dbHandle, query1, true, "LoadAcc", "i",playerid); Версия MySQL: R40
       
      Скажите пожалуйста, а после измены оно будет работать так как именно задумано? (Загрузка пароля)
       
      +  не обижу!