Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 20

Тема: Дома

  1. #1
    Аватар для Skyline
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.01.2014
    Адрес
    Россия
    Сообщений
    304
    Репутация:
    2 ±

    Дома

    Здравствуйте, подскажите пожалуйста, при продаже дома игроку, не обновляется информация, не обновляются иконки у игроков сразу, текст с ником владельца такой же остается. Иконка после продажи где находится его дом так же остается у игрока который продал дом.

    Само действие купли/продажи:

    PHP код:
    new houseid pInfo[playerid][pHouse] = pInfo[sellpl][pHouse];
            
    pInfo[sellpl][pHouse] = HouseInfo[houseid][hOwner][0] = 0;
            
    strmid(HouseInfo[pInfo[playerid][pHouse]][hOwner], pInfo[playerid][pName], 0strlen(pInfo[playerid][pName]), 255);

            
    format(stringsizeof(string), "UPDATE `accounts` SET `house` = '0' WHERE `id` = '%i'"pInfo[sellpl][pHouse], pInfo[sellpl][pID]);
            
    mysql_tquery(mysql_connect_IDstring"""");
            
            
    format(stringsizeof(string), "UPDATE `accounts` SET `house` = '%d' WHERE `id` = '%i'"pInfo[playerid][pHouse], pInfo[playerid][pID]);
            
    mysql_tquery(mysql_connect_IDstring"""");

            
    format(stringsizeof(string), "UPDATE `house` SET `owner` = '%s', `owned` = '1' WHERE `id` = '%i'",pInfo[playerid][pName], HouseInfo[houseid][hID]-1);
            
    mysql_tquery(mysql_connect_IDstring"""");

            
    UpdateHouse(houseid);

            
    DeletePVar(playerid"SellHouse_Currency"); 
    PHP код:
    stock UpdateHouse(houseid)
    {
        if(!(
    <= houseid sizeof(HouseInfo)))
            return 
    0;

        static const 
    h_null[] = "{FFDEAD}ID: {FFFFFF}[%d]\n{FFDEAD}Владелец: {FFFFFF}Нет\n{FFDEAD}Стоимость: {FFFFFF}%d\n{FFDEAD}Уровень: {FFFFFF}%d";
        static const 
    h_not_null[] = "{FFDEAD}ID: {FFFFFF}[%d]\n{FFDEAD}Владелец: {FFFFFF}%s\n{FFDEAD}Уровень: {FFFFFF}%d";

        new 
    h_buff[sizeof(h_null) + ((3-2) + (24-2) + (20-2) + (5-2))];
        
    DestroyDynamicMapIcon(HouseInfo[houseid][hMapicon]);
        
    DestroyPickup(HouseInfo[houseid][hPickup]);
        
    Delete3DTextLabel(HouseInfo[houseid][hText]);
        if(!
    HouseInfo[houseid][hOwned])
        {
            
    format(h_buffsizeof(h_buff), h_nullHouseInfo[houseid][hID], HouseInfo[houseid][hPrice],HouseInfo[houseid][hLevel]);
            
    HouseInfo[houseid][hPickup] = CreatePickup(12731HouseInfo[houseid][henter_pos_x], HouseInfo[houseid][henter_pos_y], HouseInfo[houseid][henter_pos_z], -1);
            
    HouseInfo[houseid][hText]  = Create3DTextLabel(h_buff0x008080FFHouseInfo[houseid][henter_pos_x], HouseInfo[houseid][henter_pos_y], HouseInfo[houseid][henter_pos_z], 70);
            
    HouseInfo[houseid][hMapicon] = CreateDynamicMapIcon(HouseInfo[houseid][henter_pos_x], HouseInfo[houseid][henter_pos_y], HouseInfo[houseid][henter_pos_z], 31COLOR_WHITE0, -1, -1100.0);
        }
        else
        {
            
    format(h_buffsizeof(h_buff), h_not_nullHouseInfo[houseid][hID], HouseInfo[houseid][hOwner],HouseInfo[houseid][hLevel]);
            
    HouseInfo[houseid][hPickup] = CreatePickup(12721HouseInfo[houseid][henter_pos_x], HouseInfo[houseid][henter_pos_y], HouseInfo[houseid][henter_pos_z], -1);
            
    HouseInfo[houseid][hText]  = Create3DTextLabel(h_buff0xFFFFFFHouseInfo[houseid][henter_pos_x], HouseInfo[houseid][henter_pos_y], HouseInfo[houseid][henter_pos_z], 7.00);
        }
        return 
    1;

    Данные при логировании записываются верные, не знаю почему не обновляется ничего:
    Код HTML:
    [14:51:28] UPDATE `accounts` SET `house` = '0' WHERE `id` = '0'
    [14:51:28] UPDATE `accounts` SET `house` = '3' WHERE `id` = '24'
    [14:51:28] UPDATE `house` SET `owner` = 'Kentavr', `owned` = '1' WHERE `id` = '4'

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    У тебя вот в этом запросе ошибка. Точнее в форматировании (смотри на число спецификаторов и количество переменных)
    PHP код:
            format(stringsizeof(string), "UPDATE `accounts` SET `house` = '0' WHERE `id` = '%i'"pInfo[sellpl][pHouse], pInfo[sellpl][pID]); 
            
    mysql_tquery(mysql_connect_IDstring""""); 
    Как я понимаю, ID владельца дома находится в sellpl. Можно сделать так:
    PHP код:
    new houseid pInfo[playerid][pHouse] = pInfo[sellpl][pHouse]; 
    pInfo[sellpl][pHouse] = HouseInfo[houseid][hOwner][0] = 0

    format(HouseInfo[houseid][hOwner], MAX_PLAYER_NAMEpInfo[playerid][pName]); 

    format(stringsizeof(string), "UPDATE accounts AS owner, accounts AS buyer SET buyer.house = owner.house, owner.house = 0 WHERE owner.id = %i AND buyer.id = %i"pInfo[sellpl][pID], pInfo[playerid][pID]); 
    mysql_tquery(mysql_connect_IDstring""""); 

    format(stringsizeof(string), "UPDATE house SET owner = '%s', owned = 1 WHERE id = %i",pInfo[playerid][pName], HouseInfo[houseid][hID]-1); 
    mysql_tquery(mysql_connect_IDstring""""); 

    UpdateHouse(houseid); 

    DeletePVar(playerid"SellHouse_Currency"); 
    Сократив число запросов.

    И это норма, что в аккаунт покупателя записывается 3-ий ID, а в таблице домов обновляется дом под ID 4?
    Последний раз редактировалось DeimoS; 14.05.2017 в 16:29.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    31.01.2014
    Адрес
    Россия
    Сообщений
    304
    Репутация:
    2 ±
    В том то и дело, запросом все обновляется в таблице, ник игрока меняется, а в игре ничего.

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

    Цитата Сообщение от DeimoS Посмотреть сообщение

    format(string, sizeof(string), "UPDATE accounts AS owner, accounts AS buyer SET buyer.house = owner.house, owner.house = 0 WHERE owner.id = %i AND buyer.id = %i", pInfo[sellpl][pID], pInfo[playerid][pID]);
    Я впервые вижу форму подобных запросов, ничего не понял конечно тут

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

    Сейчас сделал как ты написал, в логах:
    Код HTML:
    [15:56:17] UPDATE accounts AS owner, accounts AS buyer SET buyer.house = owner.house, owner.house = 0 WHERE owner.id = 21 AND buyer.id
    [15:56:17] UPDATE house SET owner = 'Kentavr', owned = 1 WHERE id = 4
    В таблице:
      Открыть/закрыть


    В игре - ничего не изменилось.

  5. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Skyline Посмотреть сообщение
    Я впервые вижу форму подобных запросов, ничего не понял конечно тут
    В MySQL гораздо больше функционала, чем обычно используют в SA-MP. В SA-MP вообще MySQL используют как какой-то непонятный набор функций который, как говорят, позволяет оптимизировать мод. И часто используют крайне неправильно
    (БД и мод - это, по сути, два разных сервера, которые могут выполнять кучу разных функций на своей стороне и лишь потом обмениваться результатами. Но сейчас большинство используют БД как обычное хранилище информации, ограничиваясь записью/чтением, делая все те операции, что легко сделать посредством SQL, на стороне мода. Это как купить автомобиль чтоб в итоге приходить в гараж и пользоваться лишь зеркалами).
    На деле же SQL даже сложнее Pawn будет :) И его так же нужно изучать, дабы работать с ним правильно. Благодаря углубленному изучению можно не только сделать работу с данными реально оптимизированней, но и упростить себе жизнь, ибо возможностей там хватает.

    Касаемо лейблов можно прочесть тут.
    Касаемо того, что в пределах одного запроса можно работать с неограниченным числом таблиц - это нужно теорию читать.
    Касаемо того, где можно найти теорию по MySQL - эт сюда. Можно, конечно, и на русском кучу статей найти в гугле, но за качество информации в них никто ответа не держит.

    Цитата Сообщение от Skyline Посмотреть сообщение
    Сейчас сделал как ты написал, в логах:
    Код HTML:
    [15:56:17] UPDATE accounts AS owner, accounts AS buyer SET buyer.house = owner.house, owner.house = 0 WHERE owner.id = 21 AND buyer.id
    [15:56:17] UPDATE house SET owner = 'Kentavr', owned = 1 WHERE id = 4
    В таблице:
      Открыть/закрыть


    В игре - ничего не изменилось.
    Ну значит дело либо в UpdateHouse, либо в ID, который ты туда передаёшь. Проверь сначала последнее, путём логирования ID дома при начале продажи и потом уже смотри какой ID приходит в функцию. Скорее всего просто где-то отнял/забыл отнять единицу (не понимаю кто вообще придумал так делать. Идиотская реализация) и обновляется не тот дом, что нужно
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  6. Пользователь сказал cпасибо:
    Skyline (14.05.2017)
  7. #5
    Аватар для Skyline
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.01.2014
    Адрес
    Россия
    Сообщений
    304
    Репутация:
    2 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    В MySQL гораздо больше функционала, чем обычно используют в SA-MP. В SA-MP вообще MySQL используют как какой-то непонятный набор функций который, как говорят, позволяет оптимизировать мод. И часто используют крайне неправильно
    (БД и мод - это, по сути, два разных сервера, которые могут выполнять кучу разных функций на своей стороне и лишь потом обмениваться результатами. Но сейчас большинство используют БД как обычное хранилище информации, ограничиваясь записью/чтением, делая все те операции, что легко сделать посредством SQL, на стороне мода. Это как купить автомобиль чтоб в итоге приходить в гараж и пользоваться лишь зеркалами).
    На деле же SQL даже сложнее Pawn будет :) И его так же нужно изучать, дабы работать с ним правильно. Благодаря углубленному изучению можно не только сделать работу с данными реально оптимизированней, но и упростить себе жизнь, ибо возможностей там хватает.

    Касаемо лейблов можно прочесть тут.
    Касаемо того, что в пределах одного запроса можно работать с неограниченным числом таблиц - это нужно теорию читать.
    Касаемо того, где можно найти теорию по MySQL - эт сюда. Можно, конечно, и на русском кучу статей найти в гугле, но за качество информации в них никто ответа не держит.



    Ну значит дело либо в UpdateHouse, либо в ID, который ты туда передаёшь. Проверь сначала последнее, путём логирования ID дома при начале продажи и потом уже смотри какой ID приходит в функцию. Скорее всего просто где-то отнял/забыл отнять единицу (не понимаю кто вообще придумал так делать. Идиотская реализация) и обновляется не тот дом, что нужно
    Скорее всего в UpdateHouse, потому что ID верный. Что именно в UpdateHouse, к сожалению не пойму)
    Ладно спасибо, тему закрыть тогда.
    Последний раз редактировалось Skyline; 14.05.2017 в 21:54.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Skyline Посмотреть сообщение
    Скорее всего в UpdateHouse, потому что ID верный. Что именно в UpdateHouse, к сожалению не пойму)
    Ладно спасибо, тему закрыть тогда.
    Покажи весь код продажи дома вместе с UpdateHouse
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    31.01.2014
    Адрес
    Россия
    Сообщений
    304
    Репутация:
    2 ±
    Команда покупки:
    PHP код:
    CMD:buyhouse(playeridparams[])
    {
        if(!
    player_is_authorized{playerid})
            return 
    SendClientMessage(playeridCOLOR_GREY, !"Вы не авторизировались.");
            
        new 
    house = -1;
        for(new 
    0TOTALHOUSEh++)
        {
            if(!
    IsPlayerInRangeOfPoint(playerid2.0HouseInfo[h][henter_pos_x],HouseInfo[h][henter_pos_y], HouseInfo[h][henter_pos_z]) && HouseInfo[h][hOwned] == 0)
                continue;

            if(
    HouseInfo[h][hOwned] == 1)
                return 
    SendClientMessage(playerid,COLOR_GREY,!"Этот дом уже куплен.");
            
    house h;
        }
        if(
    house == -1)
            return 
    SendClientMessage(playerid,COLOR_GREY,!"Ты не рядом с иконкой дома.");

        if(
    pInfo[playerid][pHouse] > 0)
            return 
    SendClientMessage(playerid,COLOR_GREY,!"У вас уже есть дом.");

        if(
    pInfo[playerid][pLevel] < HouseInfo[house][hLevel])
            return 
    SendClientMessage(playerid,COLOR_GREY,!"У вас маленький уровень.");

        if(
    pInfo[playerid][pMoney] < HouseInfo[house][hPrice])
            return 
    SendClientMessage(playerid,COLOR_GREY,!"У вас не хватает денег.");
            
        
    strmid(HouseInfo[house][hOwner], pInfo[playerid][pName], 0strlen(pInfo[playerid][pName]), 255);
        
    pInfo[playerid][pMoney] -= HouseInfo[house][hPrice];
        
    GivePlayerMoney(playerid, -HouseInfo[house][hPrice]);

        
    SetPlayerInterior(playerid,HouseInfo[house][hInt]);
        
    SetPlayerPos(playerid,HouseInfo[house][hexit_pos_x],HouseInfo[house][hexit_pos_y],HouseInfo[house][hexit_pos_z]);
        
    SetPlayerVirtualWorld(playerid,house+50);
        
    HouseCar[house] = CreateVehicle(HouseInfo[house][hHouse_Car],HouseInfo[house][hcar_pos_x],HouseInfo[house][hcar_pos_y],HouseInfo[house][hcar_pos_z],HouseInfo[house][hcar_pos_angle],HouseInfo[house][hCar_Color_1],HouseInfo[house][hCar_Color_2], -1);
        
    HouseInfo[house][hOwned] = 1;
        
    pInfo[playerid][pHouse] = house+1;
        
    SendClientMessage(playeridCOLOR_WHITE, !"Поздравляем с покупкой дома.");

        new 
    string[50];
        
    format(stringsizeof(string), "UPDATE accounts SET house = '%d' WHERE id = %i",pInfo[playerid][pHouse]+1pInfo[playerid][pID]);
        
    mysql_tquery(mysql_connect_IDstring"""");
        
        
    UpdateHouse(house);
        
    SaveHouse(house);
        return 
    true;

    Команда продажи:
    PHP код:
    CMD:sellhouse(playeridparams[])
    {
        if(!
    player_is_authorized{playerid})
            return 
    SendClientMessage(playeridCOLOR_GREY, !"Вы не авторизировались.");

        if(
    pInfo[playerid][pHouse] == 0)
            return 
    SendClientMessage(playeridCOLOR_GREY, !"У тебя нет дома.");

        if(
    isnull(params))
        {
            new 
    house pInfo[playerid][pHouse]-1;
            static const 
    fmt_str[] = "Ты точно хочешь продать дом штату за $%d? Введи /accept sh для подтверждения или /cancel sh для отмены.";
            new 
    string[sizeof(fmt_str) - 25];
            
    format(stringsizeof stringfmt_strHouseInfo[house][hPrice]);
            
    SendClientMessage(playeridCOLOR_LBLUEstring);
            
    Prodaga{playerid} = true;
        }
        else
        {
            new 
    giveplayerid,
                
    currency,
                
    price,
                
    money[25];

            if(
    sscanf(params"uci"giveplayeridcurrencyprice))
                return 
    SendClientMessage(playeridCOLOR_GREY, !"/sellhouse [id] [$/M/D] [Цена]");

            if(
    giveplayerid == INVALID_PLAYER_ID)
                return 
    SendClientMessage(playeridCOLOR_GREY, !"Указан неверный ID игрока.");

            if(
    pInfo[giveplayerid][pHouse] != 0)
                return 
    SendClientMessage(playeridCOLOR_GREY, !"У этого игрока есть дом.");

            if(
    HouseInfo[pInfo[playerid][pHouse]][hLevel] > pInfo[giveplayerid][pLevel])
                return 
    SendClientMessage(playeridCOLOR_GREY, !"Уровень игрока не позволяет ему купить ваш дом.");

            if(
    pInfo[giveplayerid][pMoney] < price)
                return 
    SendClientMessage(playeridCOLOR_GREY, !"У игрока нет данной суммы.");

            if(
    GetPVarType(giveplayerid"SellHouse_Currency") != PLAYER_VARTYPE_NONE)
                return 
    SendClientMessage(playeridCOLOR_GREY, !"Данному игроку уже сделали предложение по продаже дома.");

            
    ConvertNumber(pricemoney);

            switch(
    currency)
            {
                case 
    '$':
                {
                    if(!(
    <= price <= cellmax))
                        return 
    SendClientMessage(playeridCOLOR_GREY, !"Цена от $1.");

                    static const 
    fmt_str[] = "Игрок %s предложил вам купить дом за $%s. Для покупки введите /accept house";
                    new 
    string[sizeof(fmt_str) - MAX_PLAYER_NAME 25];
                    
    format(stringsizeof stringfmt_strpInfo[playerid][pName], money);
                    
    SendClientMessage(giveplayeridCOLOR_YELLOWstring);
                    
    SetPVarInt(giveplayerid"SellHouse_Currency"'$');

                    
    format(stringsizeof string,"Ты предложил купить дом игроку %s за $%s.",pInfo[giveplayerid][pName], money);
                    
    SendClientMessage(playerid,COLOR_YELLOW,string);

                }
                case 
    'м''М''m''M':
                {
                    if(!(
    100 <= price <= cellmax))
                        return 
    SendClientMessage(playeridCOLOR_GREY, !"Цена от 100 материалов.");

                    static const 
    fmt_str[] = "Игрок %s предложил вам купить дом за %s материалов. Для покупки введите /accept house";
                    new 
    string[sizeof(fmt_str) - MAX_PLAYER_NAME 25];
                    
    format(stringsizeof stringfmt_strpInfo[playerid][pName], money);
                    
    SendClientMessage(giveplayeridCOLOR_YELLOWstring);
                    
    SetPVarInt(giveplayerid"SellHouse_Currency"'M');

                    
    format(stringsizeof string,"Ты предложил купить дом игроку %s за %s материалов.",pInfo[giveplayerid][pName], money);
                    
    SendClientMessage(playerid,COLOR_YELLOW,string);
                }
                case 
    'd''D':
                {
                    if(!(
    <= price <= cellmax))
                        return 
    SendClientMessage(playeridCOLOR_GREY, !"Цена от 1 грамма наркотиков");

                    static const 
    fmt_str[] = "Игрок %s предложил вам купить дом за %s грамм нарко. Для покупки введите /accept house";
                    new 
    string[sizeof(fmt_str) - MAX_PLAYER_NAME 25];
                    
    format(stringsizeof stringfmt_strpInfo[playerid][pName], money);
                    
    SendClientMessage(giveplayeridCOLOR_YELLOWstring);
                    
    SetPVarInt(giveplayerid"SellHouse_Currency"'D');

                    
    format(stringsizeof string,"Ты предложил купить дом игроку %s за %s грамм нарко.",pInfo[giveplayerid][pName], money);
                    
    SendClientMessage(playerid,COLOR_YELLOW,string);
                }
            }
            
    SetPVarInt(giveplayerid"BUYHOME"playerid);
            
    SetPVarInt(giveplayerid"BUYCENA"price);
        }
        return 
    true;

    Подтверждение покупки:
    PHP код:
       if(strcmp(accept"house"true) == 0)
        {
            if(
    GetPVarType(playerid"BUYHOME") == PLAYER_VARTYPE_NONE)
                return 
    SendClientMessage(playeridCOLOR_GREY, !"Вам не кто не предлогал купить дом.");

            new 
    price GetPVarInt(playerid"BUYCENA"),
                
    sellpl GetPVarInt(playerid,"BUYHOME");
            
    DeletePVar(playerid,"BUYHOME");
            
    DeletePVar(playerid,"BUYCENA");

            if(
    pInfo[playerid][pMoney] < price)
                return 
    SendClientMessage(playeridCOLOR_GREY, !"У вас недостаточно средств.");

            if(
    pInfo[playerid][pMats] < price)
                return 
    SendClientMessage(playeridCOLOR_GREY, !"У вас недостаточно материалов.");
                
            if(
    pInfo[playerid][pDrugs] < price)
                return 
    SendClientMessage(playeridCOLOR_GREY, !"У вас недостаточно наркотиков.");

            switch(
    GetPVarInt(playerid"SellHouse_Currency"))
            {
                case 
    '$':
                {
                    
    format(string,sizeof string"Вы купили дом у игрока %s за %d$.",pInfo[sellpl][pName], price);
                    
    SendClientMessage(playeridCOLOR_LBLUEstring);
                    
    format(string,sizeof string ,"Вы продали дом игроку %s за %d$.",pInfo[playerid][pName],price);
                    
    SendClientMessage(sellplCOLOR_LBLUEstring);

                    
    pInfo[playerid][pMoney] -= price;
                    
    pInfo[sellpl][pMoney] += price;
                }
                case 
    'M':
                {
                    
    format(string,sizeof string"Вы купили дом у игрока %s за %d материалов.",pInfo[sellpl][pName], price);
                    
    SendClientMessage(playeridCOLOR_LBLUEstring);
                    
    format(string,sizeof string ,"Вы продали дом игроку %s за %d материалов.",pInfo[playerid][pName],price);
                    
    SendClientMessage(sellplCOLOR_LBLUEstring);

                    
    pInfo[playerid][pMats] -= price;
                    
    pInfo[sellpl][pMats] += price;
                }
                case 
    'D':
                {
                    
    format(string,sizeof string"Вы купили дом у игрока %s за %d грамм нарко.",pInfo[sellpl][pName], price);
                    
    SendClientMessage(playeridCOLOR_LBLUEstring);
                    
    format(string,sizeof string ,"Вы продали дом игроку %s за %d грамм нарко.",pInfo[playerid][pName],price);
                    
    SendClientMessage(sellplCOLOR_LBLUEstring);

                    
    pInfo[playerid][pDrugs] -= price;
                    
    pInfo[sellpl][pDrugs] += price;
                }
            }
            new 
    houseid pInfo[playerid][pHouse] = pInfo[sellpl][pHouse];
            
    pInfo[sellpl][pHouse] = HouseInfo[houseid][hOwner][0] = 0;

            
    format(HouseInfo[houseid][hOwner], MAX_PLAYER_NAMEpInfo[playerid][pName]);

            
    format(stringsizeof(string), "UPDATE accounts AS owner, accounts AS buyer SET buyer.house = owner.house, owner.house = 0 WHERE owner.id = %i AND buyer.id = %i"pInfo[sellpl][pID], pInfo[playerid][pID]);
            
    mysql_tquery(mysql_connect_IDstring"""");
            
    printf(string);

            
    format(stringsizeof(string), "UPDATE house SET owner = '%s', owned = 1 WHERE id = %i",pInfo[playerid][pName], HouseInfo[houseid][hID]-1);
            
    mysql_tquery(mysql_connect_IDstring"""");
            
    printf(string);

            
    UpdateHouse(pInfo[playerid][pHouse]);

            
    DeletePVar(playerid"SellHouse_Currency");
        } 
    UpdateHouse
    PHP код:
    stock UpdateHouse(houseid)
    {
        if(!(
    <= houseid sizeof(HouseInfo)))
            return 
    0;

        static const 
    h_null[] = "{FFDEAD}ID: {FFFFFF}[%d]\n{FFDEAD}Владелец: {FFFFFF}Нет\n{FFDEAD}Стоимость: {FFFFFF}%d\n{FFDEAD}Уровень: {FFFFFF}%d";
        static const 
    h_not_null[] = "{FFDEAD}ID: {FFFFFF}[%d]\n{FFDEAD}Владелец: {FFFFFF}%s\n{FFDEAD}Уровень: {FFFFFF}%d";

        new 
    h_buff[sizeof(h_null) + ((3-2) + (24-2) + (20-2) + (5-2))];
        
    DestroyDynamicMapIcon(HouseInfo[houseid][hMapicon]);
        
    DestroyPickup(HouseInfo[houseid][hPickup]);
        
    Delete3DTextLabel(HouseInfo[houseid][hText]);
        if(!
    HouseInfo[houseid][hOwned])
        {
            
    format(h_buffsizeof(h_buff), h_nullHouseInfo[houseid][hID], HouseInfo[houseid][hPrice],HouseInfo[houseid][hLevel]);
            
    HouseInfo[houseid][hPickup] = CreatePickup(12731HouseInfo[houseid][henter_pos_x], HouseInfo[houseid][henter_pos_y], HouseInfo[houseid][henter_pos_z], -1);
            
    HouseInfo[houseid][hText]  = Create3DTextLabel(h_buff0x008080FFHouseInfo[houseid][henter_pos_x], HouseInfo[houseid][henter_pos_y], HouseInfo[houseid][henter_pos_z], 70);
            
    HouseInfo[houseid][hMapicon] = CreateDynamicMapIcon(HouseInfo[houseid][henter_pos_x], HouseInfo[houseid][henter_pos_y], HouseInfo[houseid][henter_pos_z], 31COLOR_WHITE0, -1, -1100.0);
        }
        else
        {
            
    format(h_buffsizeof(h_buff), h_not_nullHouseInfo[houseid][hID], HouseInfo[houseid][hOwner],HouseInfo[houseid][hLevel]);
            
    HouseInfo[houseid][hPickup] = CreatePickup(12721HouseInfo[houseid][henter_pos_x], HouseInfo[houseid][henter_pos_y], HouseInfo[houseid][henter_pos_z], -1);
            
    HouseInfo[houseid][hText]  = Create3DTextLabel(h_buff0xFFFFFFHouseInfo[houseid][henter_pos_x], HouseInfo[houseid][henter_pos_y], HouseInfo[houseid][henter_pos_z], 7.00);
        }
        return 
    1;


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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ну смотри. При покупке дома ты делаешь следующее:
    PHP код:
    pInfo[playerid][pHouse] = house+1
    При том, что обновление происходит так
    PHP код:
    UpdateHouse(house); 
    А при продаже ты делаешь так:
    PHP код:
    UpdateHouse(pInfo[playerid][pHouse]); 
    Всё ещё уверен, что ID указан верно?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  11. #9
    Аватар для Skyline
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.01.2014
    Адрес
    Россия
    Сообщений
    304
    Репутация:
    2 ±
    Сейчас сделал, все ID записываются, выводит все верно, но название изменяется все так же, только после рестарта..
    Код HTML:
    [10:44:19] UPDATE accounts SET house = '3' WHERE id = 24
    [10:44:19] UPDATE accounts SET house = '0' WHERE id = 21
    [10:44:19] UPDATE house SET owner = 'Kentavr' WHERE id = 3
    [10:44:19] 3
    Изменил на:
    PHP код:
    UpdateHouse(HouseInfo[houseid][hID]-1); 
    При логировании данным образом, изменяется тоже нужный ID.

    Я уже не знаю за что цепляться :D ID везде верный записывается, ник записывается, но как говорится, не проигрывается сразу) Все происходит только после рестарта.
    Последний раз редактировалось Skyline; 15.05.2017 в 11:48.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    А с чего ты так уверен, что ID дома на сервере идентичен ID дома в таблице?
    Не нужно ни к чему цепляться. Нужно просто логировать и смотреть какие данные появляются на входе и к каким данным ты обращаешься на выходе.

    Короче, залогируй загрузку дома по принципу
    PHP код:
    printf("%i) %s"id_домавладелец); 
    Продай дом и скинь логи вместе с кодом загрузки домов
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

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

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

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

Ваши права

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