Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 8 из 8
  1. #1
    Аватар для tester1
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.01.2018
    Сообщений
    4
    Репутация:
    0 ±

    перевести код на r41

    Всем привет, помогите пожалуйста перевести данный код на mysql r41 всяко пробовал, но ни как не получается, проблема возникает с циклом, никак не хочет загружать данные из бд..

    Код:
    loadVehicles( playerid )
    {
    
    	p_vehicles[ playerid ] = 0;
    
    	new str[256];
    	format(str, sizeof(str), "SELECT * FROM `personal_car` WHERE `OWNER` = '%s'", u_name[ playerid ]); // LIMIT 1
    	new Result:v_result = sql_query(v_db, str, QUERY_CACHED);
    
    	if(v_result)
    	{
    		new Float: x, Float: y, Float: z, Float: a;
    		for (new j = 0, rows = sql_num_rows(v_result); j < rows; ++j)
    		{
    			j = getFreeSlot();
    			if( j == MAX_CARS + 1 ) break;
    			sql_get_field_assoc(v_result, "OWNER", v_system[ j ][ v_owner ]);
    			v_system[ j ][ v_id ] = sql_get_field_assoc_int(v_result, "VEHICLE_ID");
    			x = sql_get_field_assoc_float( v_result, "POS_X");
    			y = sql_get_field_assoc_float( v_result, "POS_Y");
    			z = sql_get_field_assoc_float( v_result, "POS_Z");
    			a = sql_get_field_assoc_float( v_result, "POS_A");
                v_system[ j ][ v_color ][ 0 ] = sql_get_field_assoc_int(v_result, "COLOR_1");
                v_system[ j ][ v_color ][ 1 ] = sql_get_field_assoc_int(v_result, "COLOR_2");
                v_system[ j ][ v_paintjob ] = sql_get_field_assoc_int(v_result, "PAINTJOB");
    			v_system[ j ][ v_car ] = CreateVehicle( v_system[ j ][ v_id ], x, y, z, a, v_system[ j ][ v_color ][ 0 ], v_system[ j ][ v_color ][ 1 ], 999999);
    			p_vehicles[ playerid ]++;
    			sql_next_row(v_result);
    		}
    	}
    	sql_free_result(v_result);
    }

  2. #2
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±
    Код:
    LoadVehicles(playerid)
    {
    	p_vehicles[playerid] = 0;
    	new str[49+(-2+MAX_PLAYER_NAME)+1];
    	format(str, sizeof(str), "SELECT * FROM `personal_car` WHERE `OWNER` = '%s'", u_name[playerid]);//форматируем запрос
    	mysql_tquery(v_db, str, "OnLoadVehicles", "i", playerid);//отправляем его и получаем результат в OnLoadVehicles
    	return true;
    }
    forward OnLoadVehicles(playerid);
    public OnLoadVehicles(playerid)
    {
    	if(!cache_num_rows())//если результата нет, пропускаем код
    		return true;
    	new Float:x, Float:y, Float:z, Float:a;
    	for(new j = cache_num_rows()-1; j != -1; --j)
    	{
    		if(j == MAX_CARS+1)
    			break;
    		cache_get_value_name(j, "OWNER", v_system[j][v_owner], MAX_PLAYER_NAME);
    		cache_get_value_name_int(j, "VEHICLE_ID", v_system[j][v_id]);
    		cache_get_value_name_float(j, "POS_X", x);
    		cache_get_value_name_float(j, "POS_Y", y);
    		cache_get_value_name_float(j, "POS_Z", z);
    		cache_get_value_name_float(j, "POS_A", a);
    		cache_get_value_name_int(j, "COLOR_1", v_system[j][v_color][0]);
    		cache_get_value_name_int(j, "COLOR_2", v_system[j][v_color][1]);
    		cache_get_value_name_int(j, "PAINTJOB", v_system[j][v_paintjob]);
    		v_system[j][v_car] = CreateVehicle( v_system[ j ][ v_id ], x, y, z, a, v_system[ j ][ v_color ][ 0 ], v_system[ j ][ v_color ][ 1 ], 999999);
    		p_vehicles[ playerid ]++;
    	}
    	return true;
    }
    Как-то вот так вот.
    Последний раз редактировалось Elrmrnt-Kritik; 03.01.2018 в 19:30.

  3. Пользователь сказал cпасибо:
    tester1 (03.01.2018)
  4. #3
    Аватар для tester1
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.01.2018
    Сообщений
    4
    Репутация:
    0 ±
    А можно ли как нибудь выполнить все в одном паблике, не разбивая на два?

  5. #4
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Цитата Сообщение от tester1 Посмотреть сообщение
    А можно ли как нибудь выполнить все в одном паблике, не разбивая на два?
    Можно, но зачем тебе это? Что от этого изменится?

  6. #5
    Аватар для tester1
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.01.2018
    Сообщений
    4
    Репутация:
    0 ±
    Цитата Сообщение от StevenH Посмотреть сообщение
    Можно, но зачем тебе это? Что от этого изменится?
    Просто у меня много подобных участков кода, и не хотелось бы все разделять, это много времени займет, сам тупо пробовал дабавлять запрос в OnLoadVehicles но почему то ничего не работало, хотелось бы посмотреть, как должно быть..

  7. #6
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Цитата Сообщение от tester1 Посмотреть сообщение
    Просто у меня много подобных участков кода, и не хотелось бы все разделять, это много времени займет, сам тупо пробовал дабавлять запрос в OnLoadVehicles но почему то ничего не работало, хотелось бы посмотреть, как должно быть..
    В плане производительности, данный вариант который тебе скинули выше, будет быстрее работать. Но если уж так хочется в одном месте, испольуй кэширование (cache)

  8. Пользователь сказал cпасибо:
    tester1 (04.01.2018)
  9. #7
    Аватар для Kucklovod00
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.12.2017
    Сообщений
    36
    Репутация:
    0 ±
    Цитата Сообщение от StevenH Посмотреть сообщение
    В плане производительности, данный вариант который тебе скинули выше, будет быстрее работать. Но если уж так хочется в одном месте, испольуй кэширование (cache)
    Кэширование вроде работает только с однопоточным запросом (query), а в коде выше используется многопоточный.

  10. #8
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Kucklovod00 Посмотреть сообщение
    Кэширование вроде работает только с однопоточным запросом (query), а в коде выше используется многопоточный.
    mysql_(t/p)query - это всё кэширование. Разница лишь в принципах обработки запроса плагином и не более.
    А StevenH именно про однопоточные запросы и говорил, ибо других вариантов и нет
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •