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

    • Novaro.Vaiper
      By Novaro.Vaiper
      Приветствую.

      Условия:

      - Если вы надежный человек
      - Можете выходить на связь [Говорить, скайп дискорд.]
      - Если вы продуктивный и пунктуальный

      Обязанности:
      - Просто написать мод с нуля. [Естественно для начала просто под основу. На Основе самый новых и полезных плагинов которые могут быть]
      - Мы должны с вами сообщиться, понравится друг другу в делом подходе к нашему делу. То есть мы должны вызывать самое главное, доверие друг у друга.

      К слову.


      Безусловно большим плюсом в нашей с вами кампании будет ваше портфолио проделанной работы.
      Мы можем найди вам помощника. Одна голова хорошо, а две еще лучше!
      Естественно оплата будет оплачена после работы. Примечание, выплата может быть осуществлена два раза в месяц. Горы не обещаю конечно, для начала поработаем. На первое время помогу материально в случае прогресса развития мода.
      На момент работы будут оплачен хостинг самого сервера, для того, что бы мы могли еще с вами тестировать наш с вами сервер.
      Что входит под сленгам "Под основу" Я хочу видеть:
      Регистрацию: Тз есть
      Фракции: Тз будет ! 

      Работа есть!
      Пишите по делу! https://vk.com/sailencer
    • KAIF
      By KAIF


      Просмотр файла [0.3.7]GTA RolePlay-
      Здравствуйте, хотел бы продать переделанный игровой мод всем знакомого проекта GTA RolePlay
      Фракции:
      1)Правительство
      2)ГИБДД
      3)Полиция Южного
      4)ФСБ
      5)ЦГБ-А
      6)Автошкола
      7)ВВС
      8)СМИ
      9)ОМОН
      10)опг.Тукаевские
      11)опг.Тяп-Ляп
      12)Чеченская Мафия
      13)Американская Мафия
      14)Якудза
      15)Русская Мафия
      16)Итальянская Мафия
      Добавлено/исправлено:
      1)Добавлен ВЕСЬ ОПТИМИЗИРОВАННЫЙ маппинг GTA ROLEPLAY.(2018-2019г)
      2)Добавлены организации мафий.
      3)Перенесены все чекпоинты как на GTA ROLEPLAY.
      4)Добавил в донат покупку военного билета.
      5)Изменил название рангов во фракциях как на GTA ROLEPLAY/
      6)Изменен логотип GTA ROLEPLAY
      7)Переделан весь GPS, изменены все координаты.
      В моде - 6 уровней администрации.(если хотите можете увелить кол-во админок)
      Имеется фуллдоступ, выдаётся в pawno.
      Так же в комплекте будет идти мод-пак к серверу.
      После покупки вы получите архив с модом, а в самом архиве будет текстовый файл с ссылкой на скачивание модпака.
      Добавил KAIF Добавлено 27.12.2020 Категория Моды Автор Kytip  
    • Sergey_Turner
      By Sergey_Turner
      Добрый вечер!
      Писал функцию для отображения над головой актёра текста, но столкнулся с такой проблемой. Он исчезает через 0.5 - 2 секунды, хотя установленное время 5 секунд. Ниже предоставляю код, кто знает решение прошу помочь, ибо я не понимаю.
      stock SetActorChatBubble(actorid, text[], color, Float:drawdistance, expiretime) { new Float:aPos[3]; GetActorPos(actorid, aPos[0], aPos[1], aPos[2]); Delete3DTextLabel(ActorInfo[actorid][ActorsText]), KillTimer(ActorInfo[actorid][aTimer]); ActorInfo[actorid][ActorsText] = Create3DTextLabel(text, color, aPos[0], aPos[1], aPos[2]+1.1, drawdistance, 0); ActorInfo[actorid][aTimer] = SetTimer("ClearActorChatBubble", expiretime * 1000, false, "d", actorid); } forward ClearActorChatBubble(actorid); public ClearActorChatBubble(actorid) { Delete3DTextLabel(ActorInfo[actorid][ActorsText]), KillTimer(ActorInfo[actorid][aTimer]); } enum actor_info { Text3D:ActorsText, aTimer } new Masha; new ActorInfo[MAX_ACTORS][actor_info]; Masha = CreateActor(11,832.6710,-510.1648,996.6475,91.7613); if(newkeys == KEY_WALK && IsPlayerInRangeOfPoint(playerid, 1.0, 832.6710,-510.1648,996.6475)) { SetActorChatBubble(Masha, "Текст", 0xC0C0C0FF, 10.0, 5); }  
    • Dworkin
      By Dworkin
      Привет. Мне тяжело дается понимание строк в pawn из за не динамических массивов.
      #include enum pInfo { pRangName[25] } new players[MAX_PLAYERS][pInfo]; new string[20]; main() { format(string, sizeof(string), "Салага"); printf(string); players[0][pRangName] = string; } выдает ошибку "error 047: array sizes do not match, or destination array is too small" на строку "players[0][pRangName] = string;"
      Я понимаю что в ошибке говорится что размер не совпадает, но не могу понять как это сделать в павне