Sign in to follow this  
Followers 0
Guest stibs

Загружаем новости с сайта на сервер

1 post in this topic

Данная команда предназначена для загрузки и вывода новостей в диалог (например, у вас на сервере есть окно "Новости", куда вы записываете например, все обновления мода), но вот беда, к примеру, амх. файл вашего мода занимает 2мб, а вам нужно дописать мелкую новость в инфобокс, весьма проблематично дописать, скомпилировать, залить все это добро. Я предлагаю выход проще, заодно немного научимся пользоваться инклудом a_http для осуществления ниже написанного кода вам нужен: любой сайт с FTP, куда можно залить файл с новостями.

 

Ко всем #include добавляем:

#include <a_http>

Нужно создать огромный массив под текст новостей (это конечно затратно, но приходится)

Ко всем new:

new NewsText[2048 char];

Понимаю, что 2048 яйчеек это перебор, но по мере увеличения информации должен увеличиваться размер под нее.
Теперь, создайте файл с новостями (например News.txt) и залейте его к себе на хост (пример: http://myhost.ru/News.txt)
Теперь, нам нужно чтобы сервер за n-ный промежуток обновлял нашу стрингу с новостями файлом с хоста, для этого проделываем нехитрую операцию, создаем новый паблик, который будет обновлять наши новости:

forward CheckNews();
public CheckNews()
{
     HTTP(0,HTTP_GET,"http://myhost.ru/News.txt","","SetNewsString");
     return SetTimer("CheckNews",600000,false);
}

ПОЯСНЕНИЯ: 
HTTP(индекс = 0,тип запроса (HTTP_GET, HTTP_POST, HTTP_HEAD),адрес (URL),"",паблик ответа (Callback)); - пытаемся взять новости с сервера
SetTimer("CheckNews",600000,false); - через 10 минут делаем то же самое

В public OnGameModeInit добавляем:

CallLocalFunction("CheckNews","");

Теперь, нужно создать коллбэк, на который будет присылаться ответ от сервера:

forward SetNewsString(index, response_code, data[]);
public SetNewsString(index, response_code, data[])
{
    if(!data[0]) return print(!"[HTTP News]: Нет полученных данных!");
    strpack(NewsString,data);
    return 1;
}

В public OnPlayerCommandText

if(!strcmp(cmdtext,"/news",true))
{
    new tmp_news[2048];
    strunpack(tmp_news,NewsString);
    return ShowPlayerDialog(playerid,1500,"Новости",tmp_news,"Ок","Отмена");
}

Теперь, сервер каждые 10 минут будет записывать в массив NewsText текст который находится в файле News.txt на вашем сервере.

 

Автор: Владокс

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Joker_Rifa
      By Joker_Rifa
      Скачал мод аризоны и захотел поменять логотип, в павно везде заменил все слова Аризоны на свой. Хостнайме тоже изменил, но все равно не меняется логотип. Как обще поменять логотип на свой. Помогите пожалуйста 
    • Доналдо Фарекелка
      By Доналдо Фарекелка


      Просмотр файла Arizona RolePlay || Ser
      Приветствую, этот мод я нашёл на просторах интернета. 
      Скачал мод у автора:  Developer Stravinskiy
      Доработал мод: Donaldo_Farekelka
      Сливаю мод, потому что он у меня лежит полгода без дела.
      Предупреждаю! Мод сырой, багов стало меньше, но они есть.
      Мод: Баня, Подвал, В некоторых местах маппинг, система коронавируса, 9 лвл админок
      Не особо разбираюсь в модах но вроде бы:
      Dc_Cmd + mysql в папке; Админка выдаётся через mysql
      Если в архиве пароль - 12345 или 123
      То что я сделал:
       
      Добавил Доналдо Фарекелка Добавлено 13.04.2023 Категория Моды Автор shenol (vk.com/donaldo_farekelka)