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

    Статус
    Оффлайн
    Регистрация
    07.03.2014
    Адрес
    Ярославль
    Сообщений
    57
    Репутация:
    4 ±

    Система личного транспорта.

    Всем привет. Пишу систему личного ТС с 0. (MqSql r34)
    Я наслышан, что ТС лучше начинать от ID 1. Это так, к слову.
    Всё было хорошо до того момента, когда игрок покупает транспорт.
    Суть проблемы такова:
    На сервере 3 машины (ID 1, ID 2, ID 3). Игрок покупает машину с ID 2, но после покупки, машина с ID 2 остается не проданной (3D-Text не меняется), а машина с ID 3 приобретает 3D-text купленной машины ID 2 (Владелец: Camelot\n ID: 2).
    Не уверен, что вы меня поняли, но суть самой проблемы должна быть понятна. Я уже 3-й день не могу понять. Может вы мне поможете...

     Загрузка и Сохранение
    PHP код:
    public OnGameModeInit()
    {
        
    mysql_function_query(cHandle,"SELECT * FROM `Cars`",true,"BuyCarsLoad","");
    }

    const 
    MAX_BUYCARS 3;
    enum cInfo veh,ID,Owner[20],Model,Level,Price,Clr1,Clr2,Float:X,Float:Y,Float:Z,Float:A,Float:Heal,Dmg1,Dmg2,Dmg3,Dmg4,PJob,Text3D:Text }
    new 
    carInfo[MAX_BUYCARS][cInfo], allCars;
    publicsBuyCarsLoad()
    {
        new 
    timewe GetTickCount();
        
    cache_get_data(rowsfields);
        if(!
    rows) return print("Error: Личный транспорт - Таблица пуста");
        for(new 
    carcar != rowscar++)
        {
            
    carInfo[car][ID] = getint(car"ID");
            
    carInfo[car][Model] = getint(car"Model");
            
    carInfo[car][Level] = getint(car"Level");
            
    carInfo[car][Price] = getint(car"Price");
            
    carInfo[car][Clr1] = getint(car"Clr1");
            
    carInfo[car][Clr2] = getint(car"Clr2");
            
    carInfo[car][X] = getpos(car"X");
            
    carInfo[car][Y] = getpos(car"Y");
            
    carInfo[car][Z] = getpos(car"Z");
            
    carInfo[car][A] = getpos(car"A");
            
    carInfo[car][Heal] = getpos(car"Heal");
            
    carInfo[car][Dmg1] = getint(car"Dmg1");
            
    carInfo[car][Dmg2] = getint(car"Dmg2");
            
    carInfo[car][Dmg3] = getint(car"Dmg3");
            
    carInfo[car][Dmg4] = getint(car"Dmg4");
            
    carInfo[car][PJob] = getint(car"PJob");
            
    getstr(car"Owner"carInfo[car][Owner], MAX_PLAYER_NAME);
            
    BuyCarsCreate(car), allCars++;
        }
        return 
    printf("Загружено личных машин: %i. Времени затрачено: (%i мс)",allCars,GetTickCount()-timewe);
    }
    stock BuyCarsCreate(car)
    {
        
    carInfo[car][veh] = CreateVehicle(carInfo[car][Model], carInfo[car][X], carInfo[car][Y], carInfo[car][Z], carInfo[car][A], carInfo[car][Clr1], carInfo[car][Clr2], 0);
        
    UpdateVehicleDamageStatus(carInfo[car][veh], carInfo[car][Dmg1], carInfo[car][Dmg2], carInfo[car][Dmg3], carInfo[car][Dmg4]);
        
    SetVehicleHealth(carInfo[car][veh], carInfo[car][Heal]);
        static const
             
    fmt1[] = "«Стоимость: %d\n«Уровень: %d»\nID: %d",
             
    fmt2[] = "{ccff00}Владелец: {FFFFFF}%s\n{ccff00}ID: {FFFFFF}%d";
        new 
    msg[sizeof(fmt2) - MAX_PLAYER_NAME 4];
        if(
    carInfo[car][PJob] > 0ChangeVehiclePaintjob(carInfo[car][veh], carInfo[car][PJob]-1);
        else if(!
    strcmp(carInfo[car][Owner], "No Name")) format(msgsizeof(msg), fmt1carInfo[car][Price], carInfo[car][Level], carInfo[car][ID]);
        else 
    format(msgsizeof(msg), fmt2carInfo[car][Owner], carInfo[car][ID]);
        
    carInfo[car][Text] = Create3DTextLabel(msg0xFF0000FF000.6150,1);
        return 
    Attach3DTextLabelToVehicle(carInfo[car][Text], carInfo[car][veh], 000.6);



     Покупка
    PHP код:
    public OnPlayerStateChange(playeridnewstateoldstate)
    {
        if(
    newstate == PLAYER_STATE_DRIVER)
        {
            for(new 
    carcar != allCarscar++)
            {
                if(
    GetPlayerVehicleID(playerid) != carInfo[car][veh]) continue;
                else if(!
    strcmp(carInfo[car][Owner], "No Name"))
                    
    SetPVarInt(playerid"BuyCarID"carInfo[car][ID]), Dialog(playerid123DIALOG_STYLE_MSGBOX"Покупка""Вы желаете приобрести данный транспорт?""Да""Нет");
                else if(
    strcmp(carInfo[car][Owner], "No Name") && PInfo[playerid][pAdmin] < 4)
                    return 
    RemovePlayerFromVehicle(playerid);
            }
        }
        return 
    true;
    }
    //OnDialogResponse
    case 123:
    {
        if(!
    response) return RemovePlayerFromVehicle(playerid);
        new 
    car GetPVarInt(playerid"BuyCarID");
        if(
    PInfo[playerid][pCarID] > 0
            return 
    Message(playerid, -1,"(Ошибка): У вас уже есть свой автомобиль!"), RemovePlayerFromVehicle(playerid);
        else if(
    sGetPlayerMoney(playerid) < carInfo[car][Price])
            return 
    Message(playerid, -1,"(Ошибка): У вас недостаточно денег для покупки автомобиля!"), RemovePlayerFromVehicle(playerid);
        else if(
    PInfo[playerid][pLevel] < carInfo[car][Level]) 
            return 
    Message(playerid, -1,"(Ошибка): У вас слишком маленький уровень для покупки автомобиля!"), CarUnFreeze(playerid);
        
    PInfo[playerid][pCarID] = car
        
    sGivePlayerMoney(playerid, -carInfo[car][Price]);
        
    strcat(carInfo[car][Owner], Nick(playerid), MAX_PLAYER_NAME);
        
    format(strsizeof(str), "{ccff00}Владелец: {FFFFFF}%s\n{ccff00}ID: {FFFFFF}%d"carInfo[car][Owner], car);
        
    Update3DTextLabelText(carInfo[car][Text], 0x0000FFFFstr);
        
    mysql_format(cHandlesql_playasizeof(sql_playa), "UPDATE `Cars` SET `Owner`='%s' WHERE `ID` = '%d'"carInfo[car][Owner], car);
        
    mysql_function_query(cHandlesql_playafalse"","");
        return 
    DeletePVar(playerid"BuyCarID");



    - - - Добавлено - - -

    Редактировать пост почему-то нельзя... Опечатка там. MySql r34.
    Сонный я уже. Не подумал о том, что вам будет сложно читать. Сократил код для читабельности.

     Код
    PHP код:
    const MAX_BUYCARS 3;
    enum cInfo veh,IDOwner[20], ModelPriceText3D:Text }
    new 
    carInfo[MAX_BUYCARS][cInfo], allCars;
    publicsBuyCarsLoad()
    {
        
    cache_get_data(rowsfields);
        if(!
    rows) return print("Error: Личный транспорт - Таблица пуста");
        for(new 
    carcar != rowscar++)
        {
            
    carInfo[car][ID] = getint(car"ID");
            
    carInfo[car][Model] = getint(car"Model");
            
    carInfo[car][Price] = getint(car"Price");
            
    getstr(car"Owner"carInfo[car][Owner], MAX_PLAYER_NAME);
            
    carInfo[car][veh] = CreateVehicle(carInfo[car][Model], 0000110);
            static const
               
    fmt1[] = "«Стоимость: %d\nID: %d",
               
    fmt2[] = "{ccff00}Владелец: {FFFFFF}%s\n{ccff00}ID: {FFFFFF}%d";
            new 
    msg[sizeof(fmt2) - MAX_PLAYER_NAME 4];
            else if(!
    strcmp(carInfo[car][Owner], "No Name")) format(msgsizeof(msg), fmt1carInfo[car][Price], carInfo[car][ID]);
            else 
    format(msgsizeof(msg), fmt2carInfo[car][Owner], carInfo[car][ID]);
            
    carInfo[car][Text] = Create3DTextLabel(msg0xFF0000FF000.6150,1);
            
    Attach3DTextLabelToVehicle(carInfo[car][Text], carInfo[car][veh], 000.6);
            
    allCars++;
        }
        return 
    printf("Загружено личных машин: %i. Времени затрачено: (%i мс)",allCars,GetTickCount()-timewe);
    }
    //Если игрок в машине, то...
    for(new carcar != allCarscar++)
    {
        if(
    getcar == carInfo[car][veh])
        {
            if(!
    strcmp(carInfo[car][Owner], "No Name"))
                
    SetPVarInt(playerid"BuyCarID"carInfo[car][ID]), Dialog(playerid123DIALOG_STYLE_MSGBOX"Покупка""Вы желаете приобрести данный транспорт?""Да""Нет");
            else if(
    strcmp(carInfo[car][Owner], "No Name")) return RemovePlayerFromVehicle(playerid);
        }
    }
    //Диалог покупки
    case 123
    {
        if(!
    response) return RemovePlayerFromVehicle(playerid);
        new 
    car GetPVarInt(playerid"BuyCarID");
        if(
    PInfo[playerid][pCarID] > 0
            return 
    Message(playeridCOLOR_RED,"(Ошибка): {FF6666}У вас уже есть свой автомобиль!"), CarUnFreeze(playerid);
        
    PInfo[playerid][pCarID] = car
        
    sGivePlayerMoney(playerid, -carInfo[car][Price]);
        
    strcat(carInfo[car][Owner], Nick(playerid), MAX_PLAYER_NAME);
        
    format(strsizeof(str), "{ccff00}Владелец: {FFFFFF}%s\n{ccff00}ID: {FFFFFF}%d"carInfo[car][Owner], car);
        
    Update3DTextLabelText(carInfo[car][Text], 0x0000FFFFstr);
        
    mysql_format(cHandlesql_playasizeof(sql_playa), "UPDATE `Cars` SET `Owner`='%s' WHERE `ID` = '%d'"carInfo[car][Owner], car);
        
    mysql_function_query(cHandlesql_playafalse"","");
        return 
    DeletePVar(playerid"BuyCarID");


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

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    При покупке транспорта вычитайте единицу от того ID'а транспорта, который выбрали, допустим вы покупаете второй, тогда купите первый.

  3. Пользователь сказал cпасибо:
    Camelot (15.08.2014)
  4. #3
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Закрыто.

 

 

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

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

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

Ваши права

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