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

    • Jose
      By Jose
      Добрый день, хочу рассказать про хостинг игровых серверов https://hostfy.ru
       
      • Игровой сервер в один клик!
      • Панель управления сервером;
      • Базу данных MySQL
      • Системы управления банами: AmxBans, СS:Bans, SourceBans;
      • Системы статистики сервера: CsStats, AStats;
      • Надежную защиту от DDOS-атак;
      • Пополнение баланса без комиссии! 0%
      • CS GO
      • CS 1.6
      • CS: Source
      • CS: Source v34
      • GTA: SAMP
      • GTA: CRMP
      • GTA: RAGE MP
      • Minecraft
       
      У нас Вы можете заказать хостинг игровых серверов множества игр, по самым адекватным ценам в интернете.
       
       
       
    • Mason
      By Mason
      Всем привет задаюсь один вопросом как сделать так чтобы отображалось московское время в тексте в маппинге
      SetDynamicObjectMaterialText(mapping, 0, "%d:%d", 130, "Tahoma", 190, 0, 0xFFFFFFFFFF00FF00, 0, 1); Как сделать так чтобы в тексте было время по москве?