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

    Статус
    Оффлайн
    Регистрация
    15.01.2016
    Адрес
    Приморье, Спасск-Дальний
    Сообщений
    165
    Репутация:
    7 ±

    Загрузка координат спавна фракций[MYSQL]

    Всем привет, ребят. У меня проблема, не понятного рода.

    Вначале в двух словах, затем код. Записал в БД координаты спавна, интерьера и виртуального мира для банды Grove Street Gang. Переписал сам код спавна, ибо он был очень огромен.

    Далее, думаю зайду проверю, захожу и спавнюсь по координатам 0.000 0.000 0.000. При включении сервера вывожу координаты через printf, все окей, координаты ровные, но как доходит до OnPlayerSpawn координаты по неизвестным причинам обнуляются. Проверял с помощью printf.

    Собственно код спавна:
    PHP код:
        if(pInfo[playerid][pMember] != 0)
        {
            new 
    fracid pInfo[playerid][pMember];
            
    SetPlayerSkin(playeridpInfo[playerid][pSkin]);
            
    SetPlayerPos(playeridfInfo[fracid][fSpawnX], fInfo[fracid][fSpawnY], fInfo[fracid][fSpawnZ]);
            
    SetPlayerFacingAngle(playeridfInfo[fracid][fSpawnA]);
            
    SetPlayerInterior(playeridfInfo[fracid][fSpawnInt]);
            
    SetPlayerVirtualWorld(playeridfInfo[fracid][fVirtWorld]);
            
    printf("%f %f %f"fInfo[fracid][fSpawnX], fInfo[fracid][fSpawnY], fInfo[fracid][fSpawnZ]);
        } 
    Код загрузки и сохранения:
    PHP код:
    fpublic LoadFraction()
    {
        
    Max_Frac 0;

        new
            
    rows,
            
    fields,
            
    time GetTickCount();
        
    cache_get_data(rowsfields);

        if(!
    rows) return printf("[ERROR LOADING FRACTION]: Не удалось загрузить.");

        for(new 
    0rowsf++)
        {
            
    fInfo[f][fID] = cache_get_field_content_int(f"ID"mysql_connBD);
            
    cache_get_field_content(f"LEADER"fInfo[f][fLeader], mysql_connBD24);
            
    cache_get_field_content(f"NAME"fInfo[f][fName], mysql_connBD36);
            
    fInfo[f][fSpawnX] = cache_get_field_content_float(f"SPAWNX"mysql_connBD);
            
    fInfo[f][fSpawnY] = cache_get_field_content_float(f"SPAWNY"mysql_connBD);
            
    fInfo[f][fSpawnZ] = cache_get_field_content_float(f"SPAWNZ"mysql_connBD);
            
    fInfo[f][fSpawnA] = cache_get_field_content_float(f"SPAWNA"mysql_connBD);
            
    fInfo[f][fSpawnInt] = cache_get_field_content_int(f"SPAWNINT"mysql_connBD);
            
    fInfo[f][fVirtWorld] = cache_get_field_content_int(f"VIRTWORLD"mysql_connBD);
            
    Max_Frac++;
        }
        
    printf("[Фракций загружено]: <%d>. [Время загрузки]: <%d>"Max_FracGetTickCount()-time);
        return 
    true;
    }

    stock SaveFraction()
    {
        static const
            
    mysql_f[] = "UPDATE `fraction` SET\
                                `LEADER` = '%s',\
                                `NAME` = '%s' WHERE `ID` = '%d'"
    ;
        new 
    mysql_f_size[sizeof(mysql_f) + ((MAX_PLAYER_NAME-2) + (36-2) + (2-2))];
         
    format(mysql_f_sizesizeof mysql_f_sizemysql_ffInfo[Max_Frac][fLeader], fInfo[Max_Frac][fName], fInfo[Max_Frac][fID]);
         
    mysql_function_query(mysql_connBDmysql_f_sizefalse"""");

    И все. В моде ни черта нет связанное с координатами спавна.

    Забыл упомянуть, если изменить на циферки, то спавнит на указанное место.
    Последний раз редактировалось BadPawn; 18.02.2016 в 20:49.

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

    Статус
    Оффлайн
    Регистрация
    15.01.2016
    Адрес
    Приморье, Спасск-Дальний
    Сообщений
    165
    Репутация:
    7 ±
    PHP код:
    SetPlayerPos(playeridfInfo[fracid][fSpawnX], fInfo[fracid][fSpawnY], fInfo[fracid][fSpawnZ]); 
    Судя по дебагу, он мне говорит: выход за пределы массива.

    PHP код:
    [04:04:32] [debugRun time error 4"Array index out of bounds"
    [04:04:32] [debug]  Accessing element at index 1 past array upper bound 0
    [04:04:32] [debugAMX backtrace:
    [
    04:04:32] [debug#0 0000d39c in public OnPlayerSpawn (playerid=0) at D:\new.pwn:476 
    - - - Добавлено - - -

    Дебаг исправил, но координаты все-равно обнуляются. о-о

    к максимальному кол-ву фракций забыл +1(гражданские) добавить.

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

    Кхм.... Странная фигня происходит в загрузке фракций.

    В цикле с помощью printf выводит координаты точно, как в бд, но за пределом массива по нолям.

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



    Первые координаты внутри цикла, а следующие после.

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

    Статус
    Оффлайн
    Регистрация
    15.01.2016
    Адрес
    Приморье, Спасск-Дальний
    Сообщений
    165
    Репутация:
    7 ±
    Понял в чем проблема.

    переменная Max_Frac криво работает почему-то, странно. Если Max_Frac изменить на единицу, все нормально.

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

    Проверяю через printf оба варинта:

    Вывод общего кол-ва загруженных фракций:
    PHP код:
    printf("%d"Max_Frac); 
    И вывод загруженного интерьера у фракции 0(которой не существует):
    PHP код:
    printf("%d"fInfo[0][fSpawnInt]); 

    Фракция под номером 1 хранится в 0. Кхм.... Ваще срастить не могу.

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

    Статус
    Оффлайн
    Регистрация
    15.01.2016
    Адрес
    Приморье, Спасск-Дальний
    Сообщений
    165
    Репутация:
    7 ±
    Меняю в цикле загрузку с единицы — вообще не загружает.

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

    Статус
    Оффлайн
    Регистрация
    15.01.2016
    Адрес
    Приморье, Спасск-Дальний
    Сообщений
    165
    Репутация:
    7 ±
    как я понял, нужно разбираться самому. закройте топ плз

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

    Статус
    Оффлайн
    Регистрация
    15.01.2016
    Адрес
    Приморье, Спасск-Дальний
    Сообщений
    165
    Репутация:
    7 ±
    исправил короче, может кому интересно. )))

    PHP код:
    fpublic LoadFraction()
    {
        
    Max_Frac 0;

        new
            
    frac,
            
    fields,
            
    time GetTickCount();
        
    cache_get_data(fracfieldsmysql_connBD);

        if(!
    frac) return printf("[ERROR LOADING FRACTION]");


        new
            
    1;
        while(
    Max_Frac frac)
        {
            
    fInfo[f][fID] = cache_get_field_content_int(Max_Frac"ID"mysql_connBD);
            
    cache_get_field_content(Max_Frac"LEADER"fInfo[f][fLeader], mysql_connBD24);
            
    cache_get_field_content(Max_Frac"NAME"fInfo[f][fName], mysql_connBD36);
            
    fInfo[f][fSpawnX] = cache_get_field_content_float(Max_Frac"SPAWNX"mysql_connBD);
            
    fInfo[f][fSpawnY] = cache_get_field_content_float(Max_Frac"SPAWNY"mysql_connBD);
            
    fInfo[f][fSpawnZ] = cache_get_field_content_float(Max_Frac"SPAWNZ"mysql_connBD);
            
    fInfo[f][fSpawnA] = cache_get_field_content_float(Max_Frac"SPAWNA"mysql_connBD);
            
    fInfo[f][fSpawnInt] = cache_get_field_content_int(Max_Frac"SPAWNINT"mysql_connBD);
            
    fInfo[f][fVirtWorld] = cache_get_field_content_int(Max_Frac"VIRTWORLD"mysql_connBD);
              
    f++, Max_Frac++;
        }
        
    printf("[Фракций загружено]: <%d>. [Время загрузки]: <%d>"Max_FracGetTickCount()-time);
        return 
    true;

    проблема заключалась в том, что загрузка начиналась с 0(new f = 0;), а только в конце цикла плюсуется переменная, но дальше загружать нечего, ибо в бд одна фракция, поэтому цикл и останавливался.
    Последний раз редактировалось BadPawn; 20.02.2016 в 10:16. Причина: +

 

 

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

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

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

Ваши права

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