1 post in this topic

Sleash
Завсегдатый

Значит, решил сделать прикjлюху для сервера: сбор мешков с деньгами, но дабы не ставить чекпоинты и т.д. реализовал через TextDraw.

Скриншоты:

Спойлер

RUbynCN.thumb.jpg.b7d931736cb643915c366b9d69ab5900.jpgOmRIlof.thumb.jpg.c0c7248238f490c6671c49209a9a3f75.jpg

Собственно каждые полсекунды текстдрав местоположения игрока обновляется на карте-тексдраве.
Можно использовать с множествами применениями, допустим /find или как я - сбор предметов и хи отметки на карте.
Теперь приступим к коду:
forward и первые переменные:

forward QuestMapUpdate(playerid);

new Text:map;
new Text:playeronmap[MAX_PLAYERS];
new bool:onmap[MAX_PLAYERS];
new mapupdatetimer[MAX_PLAYERS];

После чего переменные координат расположения и размеров карты, и размеры "иконки" игрока (Они есть для того, что бы кто-то мог редактировать это):

new Float:raspX = 320.0// КООРДИНАТЫ ПО ОСИ X
new Float:raspY = 112.0// КООРДИНАТЫ ПО ОСИ Y
new Float:razmX = 320.0// ШИРИНА КАРТЫ (РАЗМЕР)
new Float:razmY = 224.0// ВЫСОТА КАРТЫ (РАЗМЕР)
new Float:razmpomX = 8.0// ШИРИНА ИКОНКИ ИГРОКА НА КАРТЕ (РАЗМЕР)
new Float:razmpomY = 8.0// ВЫСОТА ИКОНКИ ИГРОКА НА КАРТЕ (РАЗМЕР)

После чего загрузка самого тексдрава, кидаем в OnGameModeInit:

public OnGameModeInit()
{
    map = TextDrawCreate(raspX, raspY, "samaps:map");
        TextDrawFont(map, 4);
        TextDrawLetterSize(map, 0.6000002.000000);
        TextDrawTextSize(map, razmX, razmY);
        TextDrawSetOutline(map, 1);
        TextDrawSetShadow(map, 0);
        TextDrawAlignment(map, 2);
        TextDrawColor(map, 0xFFFFFF50);
        TextDrawBackgroundColor(map, 0);
        TextDrawBoxColor(map, 0);
        TextDrawUseBox(map, 1);
        TextDrawSetProportional(map, 1);
        TextDrawSetSelectable(map, 0);
}

Дальше сама команда (и да, по-стандарту, если что переделать на CMD не сложно в данном случае):

public OnPlayerCommandText(playerid, cmdtext[])
{
        if(strcmp(cmd, "/map"true) == 0)
        {
                if(!onmap[playerid])
                {
                        new Float:px,Float:py,Float:pz,Float:tx,Float:ty,Float:zavX,Float:zavY;
                        GetPlayerPos(playerid,px,py,pz);
                        zavX = 3000 / (razmX / 2);
                        zavY = 3000 / (razmY / 2);
                        tx = (raspX + ( razmX / 2)) + ( px / zavX ) - (razmpomX / 2);
                        ty = (raspY + ( razmY / 2)) - ( py / zavY ) - (razmpomY / 2);
                        TextDrawShowForPlayer(playerid, map);
                        playeronmap[playerid] = TextDrawCreate(tx, ty, "hud:radar_light");
                        TextDrawFont(playeronmap[playerid], 4);
                        TextDrawLetterSize(playeronmap[playerid], 0.6000002.000000);
                        TextDrawTextSize(playeronmap[playerid], razmpomX, razmpomY);
                        TextDrawSetOutline(playeronmap[playerid], 1);
                        TextDrawSetShadow(playeronmap[playerid], 0);
                        TextDrawAlignment(playeronmap[playerid], 1);
                        TextDrawColor(playeronmap[playerid], 0xFFFFFFFF);
                        TextDrawBackgroundColor(playeronmap[playerid], 0);
                        TextDrawBoxColor(playeronmap[playerid], 0);
                        TextDrawUseBox(playeronmap[playerid], 0);
                        TextDrawSetProportional(playeronmap[playerid], 1);
                        TextDrawSetSelectable(playeronmap[playerid], 0);
                        TextDrawShowForPlayer(playerid, playeronmap[playerid]);
                        mapupdatetimer[playerid] = SetTimer("QuestMapUpdate",500,true,"d",playerid);
                        onmap[playerid] = true;
                }
                else
                {
                        KillTimer(mapupdatetimer[playerid]);
                        TextDrawHideForPlayer(playerid, map);
                        TextDrawDestroy(playeronmap[playerid]);
                        onmap[playerid] = false;
                }
        }
}

Собственно сам паблик обновления месторасположения игрока:

public QuestMapUpdate(playerid)
{
    new Float:px,Float:py,Float:pz,Float:tx,Float:ty,Float:zavX,Float:zavY;
        GetPlayerPos(playerid,px,py,pz);
        zavX = 3000 / (razmX / 2);
        zavY = 3000 / (razmY / 2);
        tx = (raspX + ( razmX / 2)) + ( px / zavX ) - (razmpomX / 2);
        ty = (raspY + ( razmY / 2)) - ( py / zavY ) - (razmpomY / 2);
        TextDrawDestroy(playeronmap[playerid]);
        playeronmap[playerid] = TextDrawCreate(tx, ty, "hud:radar_light");
        TextDrawFont(playeronmap[playerid], 4);
        TextDrawLetterSize(playeronmap[playerid], 0.6000002.000000);
        TextDrawTextSize(playeronmap[playerid], razmpomX, razmpomY);
        TextDrawSetOutline(playeronmap[playerid], 1);
        TextDrawSetShadow(playeronmap[playerid], 0);
        TextDrawAlignment(playeronmap[playerid], 1);
        TextDrawColor(playeronmap[playerid], 0xFFFFFFFF);
        TextDrawBackgroundColor(playeronmap[playerid], 0);
        TextDrawBoxColor(playeronmap[playerid], 0);
        TextDrawUseBox(playeronmap[playerid], 1);
        TextDrawSetProportional(playeronmap[playerid], 1);
        TextDrawSetSelectable(playeronmap[playerid], 0);
        TextDrawShowForPlayer(playerid, playeronmap[playerid]);
}

И отключение всего при дисконнекте игрока:

public OnPlayerDisconnect(playerid, reason)
{
        TextDrawHideForPlayer(playerid,map);
        TextDrawDestroy(playeronmap[playerid]);
        KillTimer(mapupdatetimer[playerid]);
}

 

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

    • Татарников Георгий
      By Татарников Георгий
      🔎 Ищем маппера в проект GTA SA (SA-MP)
      В развивающийся проект GTA San Andreas (SA-MP) требуется маппер.
      🧩 Задачи:
      Создание и доработка карт (интерьеры / экстерьеры)
      Работа с объектами GTA SA
      Оптимизация маппинга под онлайн
      💰 Оплата:
      На первое время — сдельная оплата (за конкретные работы / объекты / зоны)
      В перспективе — переход на фиксированную зарплату при постоянном сотрудничестве
      📌 Требования:
      Опыт маппинга GTA SA (SA-MP)
      Умение работать с Map Editor / MTA Map Editor (или аналогами)
      Понимание оптимизации (объекты, стриминг, FPS)
      Ответственность и соблюдение сроков
      ➕ Будет плюсом:
      Опыт работы в командах
      Портфолио или примеры работ (скрины / видео / .map)
      Идеи и инициативность
      🤝 Мы предлагаем:
      Адекватное ТЗ без «сделай красиво, сам не знаю как»
      Оплату без задержек
      Возможность долгосрочного сотрудничества
      Участие в развитии проекта с нуля
      📩 Связь:
      Пишите в ЛС / Telegram / Discord
      (ТГ @foxune777)
    • Nimalin⁵²
      By Nimalin⁵²
      Всем привет. Я часто использую моды по типу: Adrenaline RP, Russia RP и подобный калл. И из этого говна по выкачке денег, я хотел сделать конфетку, но каждый раз падал лицом в грязь. Начинал я с организаций, так как по мне это самая важная часть на RP серверах. Я бывало хотел создать новую организацию, но не знал как. Полазив в Базе Данных, в моде, я не нашел, как же тут создать фракцию. Поэтому прошу помощи скиньте пожалуйста решение этой задачки.