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

    Статус
    Оффлайн
    Регистрация
    18.05.2014
    Сообщений
    30
    Репутация:
    1 ±

    Проблема с сохранением домов.

    Итак... Когда покупаю дом, все остальные иконки домов перемещаются на иконку того что я купил и у всех тех домов я становлюсь владельцем...

    Команда покупки:
    PHP код:
    CMD:buyhouse(playerid,params[])
    {
        
    //if(!IsPlayerLogged(playerid)) return SendMes(playerid,COLOR_WHITE," Необходимо авторизоваться");
        
    if(PlayerInfo[playerid][pHouseKey] != -1) return SendMes(playerid,COLOR_B," У вас уже есть дом. Введите /sellhouse, чтобы его продать");
        for(new 
    1<= TOTALHOUSESh++)
        {
            if(
    IsPlayerInRangeOfPoint(playerid,2.0,HouseInfo[h][hEnterX],HouseInfo[h][hEnterY],HouseInfo[h][hEnterZ]))
            {
                if(
    HouseInfo[h][hOwned] == 1SendMes(playerid,COLOR_B,"В этом доме уже кто-то проживает");
                if(
    PlayerInfo[playerid][pCash] < HouseInfo[h][hPrice]) return SendMes(playerid,COLOR_B," У вас недостаточно денег на покупку дома");
                
    PlayerInfo[playerid][pHouseKey] = h;
                
    HouseInfo[h][hOwned] = 1;
                
    HouseInfo[h][hHel] = 0;
                
    HouseInfo[h][hTakings] = 50*(HouseInfo[h][hClass]+1)*2;
                
    strmid(HouseInfo[h][hOwner], PlayerInfo[playerid][pNames], 0strlen(PlayerInfo[playerid][pNames]), 255);
                
    PlayerInfo[playerid][pCash] -= HouseInfo[h][hPrice];
                
    GivePlayerMoney(playerid,PlayerInfo[playerid][pCash]);
                
    SetPlayerPos(playerid,HouseInfo[h][hExitX],HouseInfo[h][hExitY],HouseInfo[h][hExitZ]);
                
    SetPlayerInterior(playerid,HouseInfo[h][hInt]);
                
    SetPlayerVirtualWorld(playerid,h+50);
                
    SendMes(playerid,COLOR_B," Поздравляем с покупкой!");
                
    Update3DTexts();
                
    OnHouseSave(h);
                break;
            }
        }
        return 
    true;

    PHP код:
    public OnHouseSave(houseid)
    {
        new 
    string[32],query[256];
        
    format(string,sizeof(string),"UPDATE `"TABLE_HOUSES"` SET "),strcat(query,string);
        
    format(string,sizeof(string),"`hOwned` = '%i', ",HouseInfo[houseid][hOwned]),strcat(query,string);
        
    format(string,sizeof(string),"`hOwner` = '%s', ",HouseInfo[houseid][hOwner]),strcat(query,string);
        
    format(string,sizeof(string),"`hEnterX` = '%f', ",HouseInfo[houseid][hEnterX]),strcat(query,string);
        
    format(string,sizeof(string),"`hEnterY` = '%f', ",HouseInfo[houseid][hEnterY]),strcat(query,string);
        
    format(string,sizeof(string),"`hEnterZ` = '%f', ",HouseInfo[houseid][hEnterZ]),strcat(query,string);
        
    format(string,sizeof(string),"`hExitX` = '%f', ",HouseInfo[houseid][hExitX]),strcat(query,string);
        
    format(string,sizeof(string),"`hExitY` = '%f', ",HouseInfo[houseid][hExitY]),strcat(query,string);
        
    format(string,sizeof(string),"`hExitZ` = '%f', ",HouseInfo[houseid][hExitZ]),strcat(query,string);
        
    format(string,sizeof(string),"`hLevel` = '%i', ",HouseInfo[houseid][hLevel]),strcat(query,string);
        
    format(string,sizeof(string),"`hPrice` = '%i', ",HouseInfo[houseid][hPrice]),strcat(query,string);
        
    format(string,sizeof(string),"`hLock` = '%i', ",HouseInfo[houseid][hLock]),strcat(query,string);
        
    format(string,sizeof(string),"`hTakings` = '%i', ",HouseInfo[houseid][hTakings]),strcat(query,string);
        
    format(string,sizeof(string),"`hInt` = '%i', ",HouseInfo[houseid][hInt]),strcat(query,string);
        
    format(string,sizeof(string),"`hHel` = '%i', ",HouseInfo[houseid][hHel]),strcat(query,string);
        
    format(string,sizeof(string),"`hClass` = '%i' ",HouseInfo[houseid][hClass]),strcat(query,string);
        
    format(string,sizeof(string),"WHERE `hID` = '%i'",HouseInfo[houseid][hID]),strcat(query,string);
        
    mysql_function_query(MYSQL_ARG,query,false,"","");
        return 
    true;


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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Если SendMes функция, а не макрос - советую от неё избавиться.
    Покажите Update3DTexts
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  3. #3
    Аватар для GodFather
    Пользователь

    Статус
    Оффлайн
    Регистрация
    18.05.2014
    Сообщений
    30
    Репутация:
    1 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Если SendMes функция, а не макрос - советую от неё избавиться.
    Покажите Update3DTexts
    PHP код:
    stock Update3DTexts()
    {
        new 
    string[128];
        for(new 
    idx 1idx <= TOTALHOUSESidx++)
        {
            new 
    klass[2];
            
    DestroyDynamicMapIcon(HouseInfo[idx][hIconID]);
            
    DestroyPickup(HouseInfo[idx][hPickupID]);
            
    Delete3DTextLabel(HouseInfo[idx][hTextID]);
            if(
    HouseInfo[idx][hOwned] == 0)
            {
                
    HouseInfo[idx][hPickupID] = CreatePickup(127323HouseInfo[idx][hEnterX], HouseInfo[idx][hEnterY], HouseInfo[idx][hEnterZ],-1);
                
    HouseInfo[idx][hIconID] = CreateDynamicMapIcon(HouseInfo[idx][hEnterX], HouseInfo[idx][hEnterY], HouseInfo[idx][hEnterZ], 31COLOR_WHITE0, -1, -1100.0);
                switch(
    HouseInfo[idx][hClass])
                {
                case 
    0klass "E";
                case 
    1klass "D";
                case 
    2klass "C";
                case 
    3klass "B";
                case 
    4klass "A";
                case 
    5klass "S";
                }
                
    format(string,sizeof(string),"Номер дома: %i\nЦена: %i долларов\nКласс: %s",idx,HouseInfo[idx][hPrice],klass);
                
    HouseInfo[idx][hTextID] = Create3DTextLabel(string,COLOR_SEND,HouseInfo[idx][hEnterX], HouseInfo[idx][hEnterY], HouseInfo[idx][hEnterZ],20.0,0,1);
            }
            else
            {
                
    HouseInfo[idx][hPickupID] = CreatePickup(127223HouseInfo[idx][hEnterX], HouseInfo[idx][hEnterY], HouseInfo[idx][hEnterZ],-1);
                
    HouseInfo[idx][hIconID] = CreateDynamicMapIcon(HouseInfo[idx][hEnterX], HouseInfo[idx][hEnterY], HouseInfo[idx][hEnterZ], 32COLOR_WHITE0, -1, -1100.0);
                switch(
    HouseInfo[idx][hClass])
                {
                case 
    0klass "E";
                case 
    1klass "D";
                case 
    2klass "C";
                case 
    3klass "B";
                case 
    4klass "A";
                case 
    5klass "S";
                }
                
    format(string,sizeof(string),"Номер дома: %i\nВладелец: %s\nКласс: %s",idx,HouseInfo[idx][hOwner],klass);
                
    HouseInfo[idx][hTextID] = Create3DTextLabel(string,COLOR_LIGHTRED,HouseInfo[idx][hEnterX], HouseInfo[idx][hEnterY], HouseInfo[idx][hEnterZ],20.0,0,1);
            }
        }

    SendMes - Макрос.

  4. #4
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    Попробуй заменить команду /buyhouse на вариант предложенный ниже.
    P.S Это всего лишь вариант, поэтому сохрани старый вариант команды

    PHP код:
    CMD:buyhouse(playerid,params[]) 

        
    //if(!IsPlayerLogged(playerid)) return SendMes(playerid,COLOR_WHITE," Необходимо авторизоваться"); 
        
    if(PlayerInfo[playerid][pHouseKey] != -1) return SendMes(playerid,COLOR_B," У вас уже есть дом. Введите /sellhouse, чтобы его продать"); 
        for(new 
    1<= TOTALHOUSESh++) 
        { 
            if(
    IsPlayerInRangeOfPoint(playerid,2.0,HouseInfo[h][hEnterX],HouseInfo[h][hEnterY],HouseInfo[h][hEnterZ])) 
            { 
                if(
    HouseInfo[h][hOwned] == 1SendMes(playerid,COLOR_B,"В этом доме уже кто-то проживает"); 
                if(
    PlayerInfo[playerid][pCash] < HouseInfo[h][hPrice]) return SendMes(playerid,COLOR_B," У вас недостаточно денег на покупку дома"); 
                
    PlayerInfo[playerid][pHouseKey] = h
                
    HouseInfo[h][hOwned] = 1
                
    HouseInfo[h][hHel] = 0
                
    HouseInfo[h][hTakings] = 50*(HouseInfo[h][hClass]+1)*2
                
    strmid(HouseInfo[h][hOwner], PlayerInfo[playerid][pNames], 0strlen(PlayerInfo[playerid][pNames]), 255); 
                
    PlayerInfo[playerid][pCash] -= HouseInfo[h][hPrice]; 
                
    GivePlayerMoney(playerid,PlayerInfo[playerid][pCash]); 
                
    SetPlayerPos(playerid,HouseInfo[h][hExitX],HouseInfo[h][hExitY],HouseInfo[h][hExitZ]); 
                
    SetPlayerInterior(playerid,HouseInfo[h][hInt]); 
                
    SetPlayerVirtualWorld(playerid,h+50); 
                
    SendMes(playerid,COLOR_B," Поздравляем с покупкой!"); 
                
    OnHouseSave(h); 
                
    DestroyDynamicMapIcon(HouseInfo[h][hIconID]);
                
    DestroyPickup(HouseInfo[h][hPickupID]);
                
    Delete3DTextLabel(HouseInfo[h][hTextID]);
                
    HouseInfo[h][hPickupID] = CreatePickup(127223HouseInfo[h][hEnterX], HouseInfo[h][hEnterY], HouseInfo[h][hEnterZ],-1);
                
    HouseInfo[h][hIconID] = CreateDynamicMapIcon(HouseInfo[h][hEnterX], HouseInfo[h][hEnterY], HouseInfo[h][hEnterZ], 32COLOR_WHITE0, -1, -1100.0);
                switch(
    HouseInfo[h][hClass])
                {
                case 
    0klass "E";
                case 
    1klass "D";
                case 
    2klass "C";
                case 
    3klass "B";
                case 
    4klass "A";
                case 
    5klass "S";
                }
                
    format(string,sizeof(string),"Номер дома: %i\nВладелец: %s\nКласс: %s",idx,HouseInfo[h][hOwner],klass);
                
    HouseInfo[h][hTextID] = Create3DTextLabel(string,COLOR_LIGHTRED,HouseInfo[h][hEnterX], HouseInfo[h][hEnterY], HouseInfo[h][hEnterZ],20.0,0,1);
                break; 
            } 
        } 
        return 
    true


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

    Статус
    Оффлайн
    Регистрация
    18.05.2014
    Сообщений
    30
    Репутация:
    1 ±
    Цитата Сообщение от wAx Посмотреть сообщение
    Попробуй заменить команду /buyhouse на вариант предложенный ниже.
    P.S Это всего лишь вариант, поэтому сохрани старый вариант команды

    PHP код:
    CMD:buyhouse(playerid,params[]) 

        
    //if(!IsPlayerLogged(playerid)) return SendMes(playerid,COLOR_WHITE," Необходимо авторизоваться"); 
        
    if(PlayerInfo[playerid][pHouseKey] != -1) return SendMes(playerid,COLOR_B," У вас уже есть дом. Введите /sellhouse, чтобы его продать"); 
        for(new 
    1<= TOTALHOUSESh++) 
        { 
            if(
    IsPlayerInRangeOfPoint(playerid,2.0,HouseInfo[h][hEnterX],HouseInfo[h][hEnterY],HouseInfo[h][hEnterZ])) 
            { 
                if(
    HouseInfo[h][hOwned] == 1SendMes(playerid,COLOR_B,"В этом доме уже кто-то проживает"); 
                if(
    PlayerInfo[playerid][pCash] < HouseInfo[h][hPrice]) return SendMes(playerid,COLOR_B," У вас недостаточно денег на покупку дома"); 
                
    PlayerInfo[playerid][pHouseKey] = h
                
    HouseInfo[h][hOwned] = 1
                
    HouseInfo[h][hHel] = 0
                
    HouseInfo[h][hTakings] = 50*(HouseInfo[h][hClass]+1)*2
                
    strmid(HouseInfo[h][hOwner], PlayerInfo[playerid][pNames], 0strlen(PlayerInfo[playerid][pNames]), 255); 
                
    PlayerInfo[playerid][pCash] -= HouseInfo[h][hPrice]; 
                
    GivePlayerMoney(playerid,PlayerInfo[playerid][pCash]); 
                
    SetPlayerPos(playerid,HouseInfo[h][hExitX],HouseInfo[h][hExitY],HouseInfo[h][hExitZ]); 
                
    SetPlayerInterior(playerid,HouseInfo[h][hInt]); 
                
    SetPlayerVirtualWorld(playerid,h+50); 
                
    SendMes(playerid,COLOR_B," Поздравляем с покупкой!"); 
                
    OnHouseSave(h); 
                
    DestroyDynamicMapIcon(HouseInfo[h][hIconID]);
                
    DestroyPickup(HouseInfo[h][hPickupID]);
                
    Delete3DTextLabel(HouseInfo[h][hTextID]);
                
    HouseInfo[h][hPickupID] = CreatePickup(127223HouseInfo[h][hEnterX], HouseInfo[h][hEnterY], HouseInfo[h][hEnterZ],-1);
                
    HouseInfo[h][hIconID] = CreateDynamicMapIcon(HouseInfo[h][hEnterX], HouseInfo[h][hEnterY], HouseInfo[h][hEnterZ], 32COLOR_WHITE0, -1, -1100.0);
                switch(
    HouseInfo[h][hClass])
                {
                case 
    0klass "E";
                case 
    1klass "D";
                case 
    2klass "C";
                case 
    3klass "B";
                case 
    4klass "A";
                case 
    5klass "S";
                }
                
    format(string,sizeof(string),"Номер дома: %i\nВладелец: %s\nКласс: %s",idx,HouseInfo[h][hOwner],klass);
                
    HouseInfo[h][hTextID] = Create3DTextLabel(string,COLOR_LIGHTRED,HouseInfo[h][hEnterX], HouseInfo[h][hEnterY], HouseInfo[h][hEnterZ],20.0,0,1);
                break; 
            } 
        } 
        return 
    true

    Попробовал ваш вариант:
    - Дом купился
    - Теперь паблик сохранения домов дома не сохраняет
    - Исправился тот баг или нет я теперь сказать не могу, потому что после покупки сначала в БД менялись координаты, все на один, и владелец тоже, а теперь в БД ничего не меняется.

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

    Поставил в паблик сохранения домов printf с надписью "Дом номер %d сохранён" Паблик значит вызывается, но запрос в БД не отправляется...

  6. #6
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    Мой вариант никак не затрагивает ваш паблик сохранения.

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

    Статус
    Оффлайн
    Регистрация
    18.05.2014
    Сообщений
    30
    Репутация:
    1 ±
    Цитата Сообщение от wAx Посмотреть сообщение
    Мой вариант никак не затрагивает ваш паблик сохранения.
    Знаю, знаю... Но... я ничего кроме добавления принта с ним не делал... И до этого он работал. Что то я совсем уже запутался...

  8. #8
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    Скиньте логирование запроса, вставьте перед mysql_function_query в вашем паблике сохранения, строку:
    PHP код:
    printf(query); 
    и скиньте результат сюда.

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

    Статус
    Оффлайн
    Регистрация
    18.05.2014
    Сообщений
    30
    Репутация:
    1 ±
    Одну минуту.

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

    PHP код:
    [17:24:14UPDATE `houseSET `hOwned` = '1', `hOwner` = 'Matty_Diamond', `hEnterX` = '2498.550048', `hEnterY` = '-1642.260009', `hEnterZ` = '14.113100', `hExitX` = '140.281005', `hExitY` = '1365.920043', `hExitZ` = '1083.859985', `hLevel` = '0', `hPrice` = '11', `
    Увеличить массив query?

  10. #10
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    Цитата Сообщение от GodFather Посмотреть сообщение
    Одну минуту.

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

    PHP код:
    [17:24:14UPDATE `houseSET `hOwned` = '1', `hOwner` = 'Matty_Diamond', `hEnterX` = '2498.550048', `hEnterY` = '-1642.260009', `hEnterZ` = '14.113100', `hExitX` = '140.281005', `hExitY` = '1365.920043', `hExitZ` = '1083.859985', `hLevel` = '0', `hPrice` = '11', `
    Увеличить массив query?
    Правильный ответ

 

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

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

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

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

Ваши права

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