Вопросы

добрый день, крч у меня баг при выходе с рекона таков, если админ вошёл в слежку находясь в интерьере мэрии например, то при выходе его тпшит не в инту мэрии а в рандомную инту и вирт мир, хотя это всё записывается, исправил это всё publics'om и таймером, но как это сделать моментально, как и было, но без бага? при выходе с рекона вызывается stock setplayerspawn


код прикреплю ниже (это без фикса, как было, баг остаё
тся в силе)
 

CMD:recon(playerid,params[])
{
    if(!PlayerInfo[playerid][pAlcoInvenxua]) return 1;
    if(!strcmp(params[0],"off",true) && GetPlayerState(playerid) == 9) {
        TogglePlayerSpectatingEx(playerid,0);
        GameTextForPlayer(playerid,"~w~RECON ~r~OFF",3000,4);
        return true;
    }
    if(sscanf(params, "d", params[0])) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /re(con) [id]");
    if(!IsPlayerConnected(params[0]) || params[0] == playerid) return SendClientMessage(playerid,COLOR_GRAD1, "Ошибка: Игрока не существует или это Вы");
    if(FD(params[0]) && !FD(playerid)) return SendClientMessage(playerid,-1,"Запрещенно следить за этим человеком!");
    if(PlayerInfo[params[0]][pInv] > 0 && !FD(playerid)) return SendClientMessage(playerid, COLOR_GRAD1, "У игрока куплена функция 'скрытность'!");
    new playerState = GetPlayerState(params[0]);
    if(playerState == PLAYER_STATE_SPECTATING && gSpecID[params[0]] != INVALID_PLAYER_ID) return SendMes(playerid, COLOR_GRAD1, "Администратор следит за %s[%i]", PlayerInfo[gSpecID[params[0]]][pNames], gSpecID[params[0]]);
    if(playerState != 1 && playerState != 2 && playerState != 3return SendClientMessage(playerid, COLOR_GRAD1, "Игрок не вступил в игру");
    if(GetPlayerState(playerid) != 9)
    {
        GetPlayerPos(playerid, gPlayerPosition[playerid][0],gPlayerPosition[playerid][1],gPlayerPosition[playerid][2]);
        gPlayerInformation[playerid][0] = GetPlayerInterior(playerid);
        gPlayerInformation[playerid][1] = GetPlayerVirtualWorld(playerid);
    }
    gSpecID[playerid] = params[0];
    StartRecon(playerid, params[0]);
    UpdateRecon(playerid, params[0]);
    ShowMenuForPlayer(ReconPanel, playerid);
    for(new i; i < 7; i++) PlayerTextDrawShow(playerid, ReconPlayerText[playerid][i]);
    if(PlayerInfo[playerid][pAlcoInvenxua] < 5return true;
    return SendClientMessage(playerid, COLOR_GREY, "Для того, чтобы закочить слежку за игроком, введите: '/re off'");
}
stock SetPlayerInteriorEx(playerid, inter) {
    SetPlayerInterior(playerid, inter);
    PlayerInfo[playerid][pInt] = inter;
}
stock SetPlayerVirtualWorldEx(playerid, virt) {
    SetPlayerVirtualWorld(playerid, virt);
    PlayerInfo[playerid][pVirt] = virt;
}
stock TogglePlayerSpectatingEx(playerid, start) {
    SetPVarInt(playerid, "AntiSpecKick"5);
    if(!start) SetPlayerSpawn(playerid);
    TogglePlayerSpectating(playerid, start);

 

stock SetPlayerSpawn(playerid)
{
    if(gSpecID[playerid] != INVALID_PLAYER_ID)
    {
        gSpecID[playerid] = INVALID_PLAYER_ID;
        CancelSelectTextDraw(playerid);
        HideMenuForPlayer(ReconPanel, playerid);
        for(new i; i < 7; i++) PlayerTextDrawHide(playerid, ReconPlayerText[playerid][i]);
        new Float:z_coord = gPlayerPosition[playerid][2] - 1.0;
        SetSpawnInfoEx(playerid, gPlayerPosition[playerid][0], gPlayerPosition[playerid][1], z_coord, 0.0);
        SetPlayerInteriorEx(playerid, gPlayerInformation[playerid][0]);
        SetPlayerVirtualWorldEx(playerid, gPlayerInformation[playerid][1]);
        gSpecState[playerid] = INVALID_PLAYER_ID;
        return 1;
    }


 

Отредактировано пользователем good1luuck

Поделиться сообщением


Ссылка на сообщение

7 ответов на этот вопрос

  • 0

1. У тебя стоил виртулэальный мир 1!

2. С чего ты решил, что игрока должно тпшить в мэрию, где находится игрок? Он должен возвращаться на то место, откуда начал слежку за игроком. Для этого используется функция определения координат администратора и после объявляется сток, с этими данными. Используй сток для администратора и функцию определения координат администратора. GetPlayerPos.

В этом случае, его вернет на то место, откуда слежка была начата. А если администратор захочет тпхнуться к игроку, есть команда /goto (если она есть)

Поделиться сообщением


Ссылка на сообщение
  • 0

@Sergo_AlexeevМожешь помочь с античитом?

 

Заметка от Cawfee , создано

2.17. Запрещено флудить, оффтопить, заниматься флеймом. 

Устное предупреждение.

Поделиться сообщением


Ссылка на сообщение
  • 0

Но можешь сделать лучше!

Сделай сток с определением координат администратора, при вводе команды /recon сделай функцию определения координат игрока объявляя сток, сделай таблицу в базе данных или столбец и сделай функцию INSERT INTO для вноса координат администратора. После ввода команды /reconoff сделай функцию на проверку этих координат и объявляй сток для спавна по этим координатам, после чего обнуляй строку с координатами администратора. Вуаля!

 

Если хочешь готовое решение, тебе в стол заказов либо в готовые решения!

Поделиться сообщением


Ссылка на сообщение
  • 0

@Sergo_Alexeev бред, зачем это заносить в бд? можно использовать что-то подобное
new x,y,z;
GetPlayerPos(playerid, x,y,z);
SetPVarInt(playerid, "xpos", x);
SetPVarInt(playerid, "ypos", y);
SetPVarInt(playerid, "zpos", z);

Поделиться сообщением


Ссылка на сообщение
  • 0

@Sergo_Alexeev, предлагаю воздерживаться от употребления слова stock в качестве ключевого слова, объявляющего функцию. Здорово, что помогаете участникам форума, но не стоит людей погружать в мир своей же необразованности.

  открыть спойлер

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Sergo_Alexeev Ну, тпшить откуда начал слежку, я же говорю, если админ начнёт слежку где-то в мэрии, его не тпшит назад в мэрию, а в рандом вирт мир. И где у меня вирт мир стоит 1?

У меня и так есть запись координат.

 

        GetPlayerPos(playerid, gPlayerPosition[playerid][0],gPlayerPosition[playerid][1],gPlayerPosition[playerid][2]);
        gPlayerInformation[playerid][0] = GetPlayerInterior(playerid);
        gPlayerInformation[playerid][1] = GetPlayerVirtualWorld(playerid);
// СИСТЕМА СЛЕЖКИ
new Float:gPlayerPosition[MAX_PLAYERS][3],
    gPlayerInformation[MAX_PLAYERS][2],
    PlayerText:ReconPlayerText[MAX_PLAYERS][7],
    gSpecID[MAX_PLAYERS],
    gSpecState[MAX_PLAYERS]
;

 

Поделиться сообщением


Ссылка на сообщение
  • 0

исправил сам, надо было это в onplayerspawn поместить, тп на коры

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • RASTAMAN
      От RASTAMAN
      Для того чтобы дать пароль нужно быть администратором 10 lvl после того пишем в чат /passadm
       
      Система казино Система домов Система авто И многие другие системы!

      Особых багов не найдено.

      В моде присутствует 25 фракции.
      Есть Textdraw на спавне!
    • RASTAMAN
      От RASTAMAN
      Plantinum RolePlay
      Скачать файл Для того чтобы дать пароль нужно быть администратором 10 lvl после того пишем в чат /passadm
       
      Система казино Система домов Система авто И многие другие системы!

      Особых багов не найдено.

      В моде присутствует 25 фракции.
      Есть Textdraw на спавне!
      Добавил RASTAMAN Добавлено 10.10.2017 Категория Моды Автор неизвестен  
    • Michov Andr
      От Michov Andr
      Re:samp RP — проект в разработке
      Re:samp RP — это SA-MP в стиле RP-проект, который в данный момент находится в активной разработке. Мы создаём сервер с бонусной системой, где механики будут, и игроки смогут развивать свои персонажи, зарабатывать деньги и взаимодействовать с окружающим миром. Однако, главное — это ролевой процесс. Вы сами выбираете, хотите ли вы заниматься бизнесом и фармом или погружаться в глубокую ролевую игру. Всё зависит от того, какой путь вы хотите пройти.
      Мы стремимся к тому, чтобы на сервере не было скучного фарма и бесконечных рутинных задач. Всё будет сбалансировано так, чтобы каждый игрок мог выбрать свой стиль игры и наслаждаться процессом, будь то отыгрыш роли, развитие персонажа или участие в экономике.
      Что касается доната — на сервере будет доступна возможность покупки привилегий, включая покупку админки. Мы не планируем делать донат обязательным для прогресса, и он не будет влиять на геймплей, но те, кто хотят ускорить процесс или получить дополнительные возможности, смогут воспользоваться такими предложениями. Всё сделано так, чтобы не нарушать баланс и не превращать сервер в платный путь к успеху.
      Re:samp RP — это сервер, где каждый игрок может найти для себя интересное занятие и, главное, где всегда будет место для качественной ролевой игры. Мы не навязываем никаких обязательных механик, и все решения остаются за вами. Стартовый бонус, донат, админки — это всё дополнительные возможности, но не основа игры. 
      Discrod:https://discord.gg/ernRMjyEJy
       
             
      на логотип не смотрим да признаюсь взял с самп рп() но уж больно он норм)
    • djxxx
      От djxxx
      приветствую всех.
       
      Задался таким вопросом при добавлении одной системы на DIALOG_STYLE_TABLIST_HEADERS.
       
      Суть проблемы в том, что диалог не выравнивается под нужные показатели, а просто как будто находиться по середине, в диалоге используется \t, но они особо не помогают в решении, также не ровно.
       
      а если попытаться выравнивать большим количеством \t, оно компилируется но в игре происходят вылеты
       
      Код такой:
      DialogAdmShop ( playerid, DIALOG_EPOINTSHOP, DIALOG_STYLE_TABLIST_HEADERS, fmt_str, ""BR"номер\t"BR"наименование\t"BR"доступное действие\n"\ "{EB4C42}#1\t{FFFFFF}Виртуальная валюта\t{888888}нажмите для взаимодействия\n"\ "{EB4C42}#2\t{FFFFFF}Донат валюта\t{888888}нажмите для взаимодействия\n"\ "{EB4C42}#3\t{FFFFFF}Вип статусы\t{888888}нажмите для взаимодействия\n"\ "{EB4C42}#4\t{FFFFFF}Кейсы\t{888888}нажмите для взаимодействия\n"\ "{EB4C42}#5\t{FFFFFF}Уникальные аксессуары\t{888888}нажмите для взаимодействия", "Выбрать", "Закрыть" ); }  
      сток dialogadmshop:
      stock DialogAdmShop(playerid, dialogid, style, title[], text[], button[], button2[]) {   if(style == 5)   {      ShowPlayerDialog(playerid, 0, DIALOG_STYLE_LIST, "...", "...", "...", "");    }   ShowPlayerDialog(playerid, dialogid, style, title, text, button, button2);   return 1; }