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

    Статус
    Оффлайн
    Регистрация
    01.06.2014
    Сообщений
    131
    Репутация:
    0 ±

    Загрузка домов

    Добрый вечер, создал систему создания домов на сервере, но они не загружаются из базы данных. Чет не дописал где-то((
    Выручайте.

    PHP код:
    new HOME
    PHP код:
    mysql_tquery(database,"SELECT * FROM `houses`","LoadHouses",""); 
    PHP код:
    publics LoadHouses()
    {
        new 
    rows,string[126];
        
    cache_get_row_count(rows);
        for(new 
    0HOMEi++)
        {
            
    cache_get_value_name_int(i,"ID",HouseInfo[i][hID]);
            
    cache_get_value_name_int(i,"Owner",HouseInfo[i][hOwner]);
            
    cache_get_value_name_float(i,"Enter1",HouseInfo[i][hEnter][0]);
            
    cache_get_value_name_float(i,"Enter2",HouseInfo[i][hEnter][1]);
            
    cache_get_value_name_float(i,"Enter3",HouseInfo[i][hEnter][2]);
            
    cache_get_value_name_float(i,"Exit1",HouseInfo[i][hEnter][0]);
            
    cache_get_value_name_float(i,"Exit2",HouseInfo[i][hEnter][1]);
            
    cache_get_value_name_float(i,"Exit3",HouseInfo[i][hEnter][2]);
            if(
    HouseInfo[i][hOwned] == 0)
            {
                
    format(string,sizeof(string),"{00FF00}Дом №%d\n{33CCFF}Класс: {FFFF00}Нет\n{33CCFF}Уровень: {FFFF00}Нет\n{33CCFF}Цена: {FFFF00}$0",i);
                
    HouseInfo[i][hMIcon] = CreateDynamicMapIcon(HouseInfo[i][hEnter][0],HouseInfo[i][hEnter][1],HouseInfo[i][hEnter][2],31,0xFFFFFFAA,0,-1,-1,400.0);
                
    HouseInfo[i][hPickup][0] = CreateDynamicPickup(1273,23,HouseInfo[i][hEnter][0],HouseInfo[i][hEnter][1],HouseInfo[i][hEnter][2],-1);
                
    HouseInfo[i][hPickup][1] = CreateDynamicCP(HouseInfo[i][hEnter][0],HouseInfo[i][hEnter][1],HouseInfo[i][hEnter][2],1.0,-1,-1,-1,3.0);
            }
            else if(
    HouseInfo[i][hOwned] == 1)
            {
                
    format(string,sizeof(string),"{00FF00}Дом №%d\n{33CCFF}Класс: {FFFF00}Нет\n{33CCFF}Владелец: {00FF00}Нет",i);
                
    HouseInfo[i][hMIcon] = CreateDynamicMapIcon(HouseInfo[i][hEnter][0],HouseInfo[i][hEnter][1],HouseInfo[i][hEnter][2],32,0xFFFFFFAA,0,-1,-1,400.0);
                
    HouseInfo[i][hPickup][0] = CreateDynamicPickup(19522,23,HouseInfo[i][hEnter][0],HouseInfo[i][hEnter][1],HouseInfo[i][hEnter][2],-1);
                
    HouseInfo[i][hPickup][1] = CreateDynamicCP(HouseInfo[i][hEnter][0],HouseInfo[i][hEnter][1],HouseInfo[i][hEnter][2],1.0,-1,-1,-1,3.0);
            }
            
    HouseInfo[i][hLabel] = Create3DTextLabel(string,0xFFFFFFFF,HouseInfo[i][hEnter][0],HouseInfo[i][hEnter][1],HouseInfo[i][hEnter][2]+1,20.0,0,1);
        }
        
    printf("Загружено [%i] домов.",HOME);
        return 
    1;

    PHP код:
    stock UpdateHouse(id)
    {
        new 
    string[126];
        
    DestroyDynamicPickup(HouseInfo[id][hPickup][0]);
        if(
    HouseInfo[id][hOwned] == 0)
        {
            
    format(string,sizeof(string),"{00FF00}Дом №%d\n{33CCFF}Класс: {FFFF00}Нет\n{33CCFF}Уровень: {FFFF00}Нет\n{33CCFF}Цена: {FFFF00}$0",id);
            
    HouseInfo[id][hMIcon] = CreateDynamicMapIcon(HouseInfo[id][hEnter][0],HouseInfo[id][hEnter][1],HouseInfo[id][hEnter][2],31,0xFFFFFFAA,0,-1,-1,400.0);
            
    HouseInfo[id][hPickup][0] = CreateDynamicPickup(1273,23,HouseInfo[id][hEnter][0],HouseInfo[id][hEnter][1],HouseInfo[id][hEnter][2],-1);
            
    HouseInfo[id][hPickup][1] = CreateDynamicCP(HouseInfo[id][hEnter][0],HouseInfo[id][hEnter][1],HouseInfo[id][hEnter][2],1.0,-1,-1,-1,3.0);
        }
        else if(
    HouseInfo[id][hOwned] == 1)
        {
            
    format(string,sizeof(string),"{00FF00}Дом №%d\n{33CCFF}Класс: {FFFF00}Нет\n{33CCFF}Владелец: {00FF00}Нет",id);
            
    HouseInfo[id][hMIcon] = CreateDynamicMapIcon(HouseInfo[id][hEnter][0],HouseInfo[id][hEnter][1],HouseInfo[id][hEnter][2],32,0xFFFFFFAA,0,-1,-1,400.0);
            
    HouseInfo[id][hPickup][0] = CreateDynamicPickup(19522,23,HouseInfo[id][hEnter][0],HouseInfo[id][hEnter][1],HouseInfo[id][hEnter][2],-1);
            
    HouseInfo[id][hPickup][1] = CreateDynamicCP(HouseInfo[id][hEnter][0],HouseInfo[id][hEnter][1],HouseInfo[id][hEnter][2],1.0,-1,-1,-1,3.0);
        }
        
    Update3DTextLabelText(HouseInfo[id][hLabel],0xFFFFFFFF,string);

    PHP код:
    CMD:addhouse(playerid,params[])
    {
        new 
    Float:X,Float:Y,Float:Z;
        new 
    Float:EX,Float:EY,Float:EZ,int;
        if(
    Player[playerid][pAdmin] != 10 && Player[playerid][pAdmin] != 11 || AdminDuty[playerid] == 0)return NoRights(playerid,!"[ОШИБКА] {FFFFFF}Недостаточно прав для использования команды.");
        if(
    sscanf(params,"d",params[0]))return SendClientMessage(playerid,0x00BFFFAA,"[КОМАНДЫ] {FFFFFF}/addhouse [Класс].");
        if(
    params[0] > || params[0] < 1)return NoRights(playerid,!"[ОШИБКА] {FFFFFF}Доступное значение класса дома от 1 до 6.");
        switch(
    params[0])
        {
            case 
    1:
            {
                
    EX 243.7219;
                
    EY 304.7986;
                
    EZ 999.1484;
                
    int 1;
            }
            case 
    2:{}
            case 
    3:{}
            case 
    4:{}
            case 
    5:{}
            case 
    6:{}
            case 
    7:
            {
            
            }
        }
        
    GetPlayerPos(playerid,X,Y,Z);
        
    HouseInfo[HOME][hID] = HOME;
        
    HouseInfo[HOME][hInt] = int;
        
    HouseInfo[HOME][hEnter][0] = X;
        
    HouseInfo[HOME][hEnter][1] = Y;
        
    HouseInfo[HOME][hEnter][2] = Z;
        
    HouseInfo[HOME][hExit][0] = EX;
        
    HouseInfo[HOME][hExit][1] = EY;
        
    HouseInfo[HOME][hExit][2] = EZ;
        
    HouseInfo[HOME][hPickup] = CreateDynamicPickup(1273,23,HouseInfo[HOME][hEnter][0],HouseInfo[HOME][hEnter][1],HouseInfo[HOME][hEnter][2],-1);
        
        new 
    string[500];
        
    format(string,sizeof(string),"INSERT INTO `houses` (`Interior` ,`Enter1`,`Enter2`,`Enter3`,`Exit1`,`Exit2`,`Exit3`)\
        VALUES (%i,'%f','%f','%f','%f','%f','%f')"
    ,int,X,Y,Z,EX,EY,EZ);
        
    mysql_query(database,string,false);
        
        
    UpdateHouse(HOME);
        
    HOME++;
        return 
    1;


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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    1. publics LoadHouses()
    2. {
    3. new rows,string[126];
    4. cache_get_row_count(rows);
    5. for(new i = 0; i < HOME; i++)
    6. {

    на
    1. publics LoadHouses()
    2. {
    3. new string[126];
    4. cache_get_row_count(HOME);
    5. for(new i = 0; i < HOME; i++)
    6. {


    И да, гораздо практичнее совместить ID дома из базы и ID ячейки из массива.
    Сделать это просто:
    1) Создаёшь итератор с размером MAX_HOUSES.
    2) При создании дома делаешь так:
    1. new house_id = Iter_Free(/*Итератор домов*/);
    2. if(house_id == ITER_NONE)
    3. {
    4. //Лимит домов исчерпан
    5. return 1;
    6. }
    7. // Код создания
    8. new string[500];
    9. format(string,sizeof(string),"INSERT INTO `houses` (ID,`Interior` ,`Enter1`,`Enter2`,`Enter3`,`Exit1`,`Exit2`,`Exit3`) VALUES (%i,%i,'%f','%f','%f','%f','%f','%f')",house_id, int,X,Y,Z,EX,EY,EZ);
    10. mysql_query(database,string,false); // В запросе выше указываем значение для поле "ID", равное значению house_id.
    11. Iter_Add(/*Итератор домов*/, house_id);


    3) А уже при загрузке делать так:
    1. for(new i = 0, idx; i < HOME; i++)
    2. {
    3. cache_get_value_name_int(i,"ID", idx);
    4. if(!(0 <= idx < MAX_HOUSES))// Проверяем, "вмещается" ли ID дома в массив и если нет, то сообщаем об этом
    5. {
    6. printf("ID дома %d невалиден", idx);
    7. continue;
    8. }// А если да, то теперь переменную "i" используем как номер строки, из которого будем грузить данные из кэша
    9. // А "idx" уже используем в массиве HouseInfo
    10. cache_get_value_name_int(i, "Owner", HouseInfo[idx][hOwner]);
    11. cache_get_value_name_float(i, "Enter1", HouseInfo[idx][hEnter][0]);
    12. // И т.п.


    Теперь, при работе с домами, не нужно будет запускать каких-то циклов и сверять ID, записанный у игрока, с переменной hID. Достаточно сразу взять записанный ID у игрока и использовать его как индекс ячейки при обращении к массиву HouseInfo.



    И да, советую использовать только строчные символы в названиях ячеек в БД. Тогда и риск опечатки будет ниже, и не нужно будет помнить порядок размера символов в названии.
    Последний раз редактировалось DeimoS; 04.06.2019 в 13:02.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    01.06.2014
    Сообщений
    131
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    1. publics LoadHouses()
    2. {
    3. new rows,string[126];
    4. cache_get_row_count(rows);
    5. for(new i = 0; i < HOME; i++)
    6. {

    на
    1. publics LoadHouses()
    2. {
    3. new string[126];
    4. cache_get_row_count(HOME);
    5. for(new i = 0; i < HOME; i++)
    6. {


    И да, гораздо практичнее совместить ID дома из базы и ID ячейки из массива.
    Сделать это просто:
    1) Создаёшь итератор с размером MAX_HOUSES.
    2) При создании дома делаешь так:
    1. new house_id = Iter_Free(/*Итератор домов*/);
    2. if(house_id == ITER_NONE)
    3. {
    4. //Лимит домов исчерпан
    5. return 1;
    6. }
    7. // Код создания
    8. new string[500];
    9. format(string,sizeof(string),"INSERT INTO `houses` (ID,`Interior` ,`Enter1`,`Enter2`,`Enter3`,`Exit1`,`Exit2`,`Exit3`) VALUES (%i,%i,'%f','%f','%f','%f','%f','%f')",house_id, int,X,Y,Z,EX,EY,EZ);
    10. mysql_query(database,string,false); // В запросе выше указываем значение для поле "ID", равное значению house_id.
    11. Iter_Add(/*Итератор домов*/, house_id);


    3) А уже при загрузке делать так:
    1. for(new i = 0, idx; i < HOME; i++)
    2. {
    3. cache_get_value_name_int(i,"ID", idx);
    4. if(!(0 <= idx < MAX_HOUSES))// Проверяем, "вмещается" ли ID дома в массив и если нет, то сообщаем об этом
    5. {
    6. printf("ID дома %d невалиден", idx);
    7. continue;
    8. }// А если да, то теперь переменную "i" используем как номер строки, из которого будем грузить данные из кэша
    9. // А "idx" уже используем в массиве HouseInfo
    10. cache_get_value_name_int(i, "Owner", HouseInfo[idx][hOwner]);
    11. cache_get_value_name_float(i, "Enter1", HouseInfo[idx][hEnter][0]);
    12. // И т.п.


    Теперь, при работе с домами, не нужно будет запускать каких-то циклов и сверять ID, записанный у игрока, с переменной hID. Достаточно сразу взять записанный ID у игрока и использовать его как индекс ячейки при обращении к массиву HouseInfo.



    И да, советую использовать только строчные символы в названиях ячеек в БД. Тогда и риск опечатки будет ниже, и не нужно будет помнить порядок размера символов в названии.
    Не загружаются дома на серве.
    Последний раз редактировалось Dimon_Fanat; 04.06.2019 в 21:26.

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

    Статус
    Оффлайн
    Регистрация
    01.06.2014
    Сообщений
    131
    Репутация:
    0 ±
    Сделал как показано, и получилась вот такое.

    PHP код:
    C:\Users\Dima\Desktop\MySql R41-4\gamemodes\newproject.pwn(2213) : error 017undefined symbol "idx"
    C:\Users\Dima\Desktop\MySql R41-4\gamemodes\newproject.pwn(2215) : error 017undefined symbol "idx"
    C:\Users\Dima\Desktop\MySql R41-4\gamemodes\newproject.pwn(2216) : error 017undefined symbol "idx"
    C:\Users\Dima\Desktop\MySql R41-4\gamemodes\newproject.pwn(2218) : error 017undefined symbol "idx"
    C:\Users\Dima\Desktop\MySql R41-4\gamemodes\newproject.pwn(4096) : error 017undefined symbol "ITER_NONE"
    Pawn compiler 3.10.8              Copyright (c1997-2006ITB CompuPhase


    5 Errors

      Открыть/закрыть
    PHP код:
    new HOME;
    new 
    Iterator:HousesServ<MAX_HOUSES>; 
    PHP код:
    CMD:addhouse(playerid,params[])
    {
        new 
    Float:X,Float:Y,Float:Z;
        new 
    Float:EX,Float:EY,Float:EZ,int;
        if(
    Player[playerid][pAdmin] != 10 && Player[playerid][pAdmin] != 11 || AdminDuty[playerid] == 0)return NoRights(playerid,!"[ОШИБКА] {FFFFFF}Недостаточно прав для использования команды.");
        if(
    sscanf(params,"d",params[0]))return SendClientMessage(playerid,0x00BFFFAA,"[КОМАНДЫ] {FFFFFF}/addhouse [Класс].");
        if(
    params[0] > || params[0] < 1)return NoRights(playerid,!"[ОШИБКА] {FFFFFF}Доступное значение класса дома от 1 до 6.");
        switch(
    params[0])
        {
            case 
    1:
            {
                
    EX 243.7219;
                
    EY 304.7986;
                
    EZ 999.1484;
                
    int 1;
            }
            case 
    2:{}
            case 
    3:{}
            case 
    4:{}
            case 
    5:{}
            case 
    6:{}
            case 
    7:
            {
            
            }
        }
        
    GetPlayerPos(playerid,X,Y,Z);
        
    HouseInfo[HOME][hID] = HOME;
        
    HouseInfo[HOME][hInt] = int;
        
    HouseInfo[HOME][hEnter][0] = X;
        
    HouseInfo[HOME][hEnter][1] = Y;
        
    HouseInfo[HOME][hEnter][2] = Z;
        
    HouseInfo[HOME][hExit][0] = EX;
        
    HouseInfo[HOME][hExit][1] = EY;
        
    HouseInfo[HOME][hExit][2] = EZ;
        
    HouseInfo[HOME][hPickup] = CreateDynamicPickup(1273,23,HouseInfo[HOME][hEnter][0],HouseInfo[HOME][hEnter][1],HouseInfo[HOME][hEnter][2],-1);
        
        new 
    string[500];
        new 
    house_id Iter_Free(HousesServ);
        if(
    house_id == ITER_NONE)
        {
            
    NoRights(playerid,!"[ОШИБКА] {FFFFFF}Превышен лимит домов на сервере.");
            return 
    1;
        }
        
    format(string,sizeof(string),"INSERT INTO `houses` (ID,`Interior` ,`Enter1`,`Enter2`,`Enter3`,`Exit1`,`Exit2`,`Exit3`)\
        VALUES (%i,%i,'%f','%f','%f','%f','%f','%f')"
    ,house_id,int,X,Y,Z,EX,EY,EZ);
        
    mysql_query(database,string,false);
        
    Iter_Add(HousesServhouse_id);
        
        
    UpdateHouse(HOME);
        
    HOME++;
        return 
    1;

    PHP код:
    publics LoadHouses()
    {
        new 
    string[126];
        
    cache_get_row_count(HOME);
        for(new 
    0idx HOMEi++)
        {
            
    cache_get_value_name_int(i,"ID",idx);
            if(!(
    <= idx MAX_HOUSES))
            {
                
    printf("ID дома %d невалиден"idx);
                continue;
            }
            
    //cache_get_value_name_int(i,"Owner",HouseInfo[i][hOwner]);
            
    cache_get_value_name_float(i,"Enter1",HouseInfo[i][hEnter][0]);
            
    cache_get_value_name_float(i,"Enter2",HouseInfo[i][hEnter][1]);
            
    cache_get_value_name_float(i,"Enter3",HouseInfo[i][hEnter][2]);
            
    cache_get_value_name_float(i,"Exit1",HouseInfo[i][hEnter][0]);
            
    cache_get_value_name_float(i,"Exit2",HouseInfo[i][hEnter][1]);
            
    cache_get_value_name_float(i,"Exit3",HouseInfo[i][hEnter][2]);
            if(
    HouseInfo[i][hOwned] == 0)
            {
                
    format(string,sizeof(string),"{00FF00}Дом №%d\n{33CCFF}Класс: {FFFF00}Нет\n{33CCFF}Уровень: {FFFF00}Нет\n{33CCFF}Цена: {FFFF00}$0",i);
                
    HouseInfo[i][hMIcon] = CreateDynamicMapIcon(HouseInfo[i][hEnter][0],HouseInfo[i][hEnter][1],HouseInfo[i][hEnter][2],31,0xFFFFFFAA,0,-1,-1,400.0);
                
    HouseInfo[i][hPickup][0] = CreateDynamicPickup(1273,23,HouseInfo[i][hEnter][0],HouseInfo[i][hEnter][1],HouseInfo[i][hEnter][2],-1);
                
    HouseInfo[i][hPickup][1] = CreateDynamicCP(HouseInfo[i][hEnter][0],HouseInfo[i][hEnter][1],HouseInfo[i][hEnter][2],1.0,-1,-1,-1,3.0);
            }
            else if(
    HouseInfo[i][hOwned] == 1)
            {
                
    format(string,sizeof(string),"{00FF00}Дом №%d\n{33CCFF}Класс: {FFFF00}Нет\n{33CCFF}Владелец: {00FF00}Нет",i);
                
    HouseInfo[i][hMIcon] = CreateDynamicMapIcon(HouseInfo[i][hEnter][0],HouseInfo[i][hEnter][1],HouseInfo[i][hEnter][2],32,0xFFFFFFAA,0,-1,-1,400.0);
                
    HouseInfo[i][hPickup][0] = CreateDynamicPickup(19522,23,HouseInfo[i][hEnter][0],HouseInfo[i][hEnter][1],HouseInfo[i][hEnter][2],-1);
                
    HouseInfo[i][hPickup][1] = CreateDynamicCP(HouseInfo[i][hEnter][0],HouseInfo[i][hEnter][1],HouseInfo[i][hEnter][2],1.0,-1,-1,-1,3.0);
            }
            
    HouseInfo[i][hLabel] = Create3DTextLabel(string,0xFFFFFFFF,HouseInfo[i][hEnter][0],HouseInfo[i][hEnter][1],HouseInfo[i][hEnter][2]+1,20.0,0,1);
        }
        
    printf("Загружено [%i] домов.",HOME);
        return 
    1;



    Чет запутался совсем.

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

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

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    01.06.2014
    Сообщений
    131
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Во-первых, если хочешь использовать мой вариант, то ещё раз внимательно перепрочти все комментарии. Сейчас у тебя неправильно.
    Во-вторых, смотри логи MySQL и если ошибок нет - логируй вызов паблика LoadHouses/значение HOME после cache_get_row_count и т.п.
    Честно скажу, я впервые с итераторами работаю.

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

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

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

    Steve Pavlina

  8. #8
    Аватар для Dimon_Fanat
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.06.2014
    Сообщений
    131
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну учись :) Либо делай так, как умеешь.
    Или предлагаешь мне научить тебя работать с итераторами, пересказав тебе статьи из интернета?)
    Нее, учить точно не нужно)

 

 

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

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

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

Ваши права

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