Ага. Только этот запрос не нужен при загрузке транспорта. Только при покупке или перепродаже.
Вид для печати
Получилось как-то так:
case DLG_ID_VEH_BUY: { if(response) { new if(player[playerid][p_money] < veh[i][v_price]) { SCM(playerid, COLOR_RED, !"[SERVER] У вас недостаточно денег, чтобы купить этот транспорт!"); } else { player[playerid][p_money]-=veh[i][v_price]; SavePlayer(playerid, "Money", player[playerid][p_money], "d"); new string[128+1]; format(string, sizeof(string), "UPDATE `vehicles` SET `ownerid` = '%d' WHERE `id` = '%d'", player[playerid][p_id], veh[i][v_id]); mysql_function_query(connect_mysql, string, false, "", ""); format(string, sizeof(string), "UPDATE `accounts` SET `vehid` = '%d' WHERE `id` = '%d'", veh[i][v_id], player[playerid][p_id]); mysql_function_query(connect_mysql, string, false, "", ""); } } else }
@_LoadVehs(playerid, vehicleid); @_LoadVehs(playerid, vehicleid) { new rows, fields; cache_get_data(rows, fields); if(rows) { new veh_id, veh_model, Float:veh_x, Float:veh_y, Float:veh_z, Float:veh_a, Float:veh_hp, veh_color1, veh_color2, veh_dmg1, veh_dmg2, veh_dmg3, veh_dmg4, veh_paintjob; veh_model = cache_get_field_content_int(0, "model"); veh_x = cache_get_field_content_float(0, "x"); veh_y = cache_get_field_content_float(0, "y"); veh_z = cache_get_field_content_float(0, "z"); veh_a = cache_get_field_content_float(0, "a"); veh_hp = cache_get_field_content_float(0, "hp"); veh_color1 = cache_get_field_content_int(0, "color1"); veh_color2 = cache_get_field_content_int(0, "color2"); veh_dmg1 = cache_get_field_content_int(0, "dmg1"); veh_dmg2 = cache_get_field_content_int(0, "dmg2"); veh_dmg3 = cache_get_field_content_int(0, "dmg3"); veh_dmg4 = cache_get_field_content_int(0, "dmg4"); veh_paintjob = cache_get_field_content_int(0, "paintjob"); if(veh_id != INVALID_VEHICLE_ID) return true; if(veh_paintjob > 0) ChangeVehiclePaintjob(veh_id, veh_paintjob-1); // 1, 2, 3 - нумерация винилов по порядку, 4 - отсутствие винил allvehs++; veh[veh_id][v_price] = ModelPrice[veh_model-400]; veh[veh_id][v_model] = veh_model; veh[veh_id][v_x] = veh_x; veh[veh_id][v_y] = veh_y; veh[veh_id][v_z] = veh_z; veh[veh_id][v_a] = veh_a; veh[veh_id][v_hp] = veh_hp; veh[veh_id][v_color1] = veh_color1; veh[veh_id][v_color2] = veh_color2; veh[veh_id][v_dmg1] = veh_dmg1; veh[veh_id][v_dmg2] = veh_dmg2; veh[veh_id][v_dmg3] = veh_dmg3; veh[veh_id][v_dmg4] = veh_dmg4; veh[veh_id][v_paintjob] = veh_paintjob; veh[veh_id][v_class] = cache_get_field_content_int(0, "class"); veh[veh_id][v_ownerid] = playerid; veh[veh_id][v_id] = vehicleid; } return true; }
{ if(newstate == PLAYER_STATE_DRIVER) { new if(IsABicycle(vehicleid) || IsAHelicopter(vehicleid)) { } for(new i; i < allvehs; i++) { if(vehicleid < i) continue; if(veh[vehicleid][v_id] == SALE_VEHICLE_ID) { static fmt_str[] = "{00C0FF}Желаете ли вы купить данный транспорт?\ \n\ \n{00C0FF}Модель:\t\t{F81414}%s\ \n{00C0FF}ID:\t\t{F81414}%d"; new string[sizeof(fmt_str)-4+4+20+1]; SPD(playerid, DLG_ID_VEH_BUY, DSM, !"{00C0FF}Покупка транспорта", string, !"{00C0FF}Да", !"{00C0FF}Нет"); } else { if(veh[vehicleid][v_ownerid] != playerid) } } } return true; }
Опять же, не вчитывался в код особо (то есть, могут быть и другие проблемы, помимо перечисленных).
Два запроса можно объединить в один:
new string[90+10+10+1]; "UPDATE vehicles AS v, accounts AS a SET a.vehid=v.id, v.ownerid=a.id WHERE v.id=%d AND a.id=%d", veh[i][v_id], player[playerid][p_id]); mysql_function_query(connect_mysql, string, false, "", "");
Для MySQL это будут всё те же 2 запроса, но сервер, при этом, меньше действий совершать будет.
И зачем в OnPlayerStateChange цикл?
Не мог бы ты объяснить смысл этого запроса? Как и где использовать "AS, v" и точки в запросах?
Когда писал сам не знал, а сейчас не обратил на это внимания
Вот так будет правильнее:
{ if(newstate == PLAYER_STATE_DRIVER) { new if(IsABicycle(vehicleid) || IsAHelicopter(vehicleid)) { engine_veh{vehicleid} = true; } if(veh[vehicleid][v_id] == SALE_VEHICLE_ID) { static fmt_str[] = "{00C0FF}Желаете ли вы купить данный транспорт?\ \n\ \n{00C0FF}Модель:\t\t{F81414}%s\ \n{00C0FF}ID:\t\t{F81414}%d"; new string[sizeof(fmt_str)-4+4+20+1]; SPD(playerid, DLG_ID_VEH_BUY, DSM, !"{00C0FF}Покупка транспорта", string, !"{00C0FF}Да", !"{00C0FF}Нет"); } else { if(veh[vehicleid][v_ownerid] != playerid) } } return true; }