Question

good1luuck
Новичок

добрый день, крч у меня баг при выходе с рекона таков, если админ вошёл в слежку находясь в интерьере мэрии например, то при выходе его тпшит не в инту мэрии а в рандомную инту и вирт мир, хотя это всё записывается, исправил это всё 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;
    }


 

Edited by good1luuck

Share this post


Link to post

7 answers to this question

  • 0
good1luuck
Новичок

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

Share this post


Link to post
  • 0
DAYREK
SENIOR

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

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

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

Share this post


Link to post
  • 0
Raccido
Освоившийся

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

 

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

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

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

Share this post


Link to post
  • 0
DAYREK
SENIOR

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

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

 

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

Share this post


Link to post
  • 0
hokageud
Завсегдатый

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

Share this post


Link to post
  • 0
Cawfee
Великий Гуру

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

Спойлер

new public var = 0;
new public stock var = 0;
new public const var = 0
new public const stock var = 0;
public var = 0;
public const var = 0;
public const stock var = 0;
static stock var = 0;
static const stock var = 0;
new stock var = 0;
stock var = 0;
const stock var = 0;

stock func() {}
static func() {}
static stock func {}
public func() {}
public stock func() {} // только так нельзя

 

 

Share this post


Link to post
  • 0
good1luuck
Новичок

@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]
;

 

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • ВасилийСталин
      By ВасилийСталин
      VERDICT PROJECT - V:ACE
       
      Соревновательный проект на платформе SA-MP, вдохновлённый духом Counter-Strike: тактические перестрелки, честный рейтинг и ванильное PVP.
      В разработке, не используются ресурсы, из открытых источников. Всё строится с нуля, собственный игровой мод, полностью кастомный интерфейс и игровой лаунчер.
      Что мы разрабатываем:
       
      - Рейтинговый режим с подбором по ELO. Равные соперники, честные матчи, путь от новичка до вершины таблицы.
      - Полностью кастомный интерфейс (CEF): меню, лобби, магазин и статистика такого уровня, какого на SA-MP почти не встретишь.
      - Легионеры - уникальные оперативники с индивидуальным дизайном и редкостью, открываются через боевой пропуск или чёрные ячейки (кейсы).
      - Скины на оружие и кейсы - коллекционная система в духе CS. -> В активной разработке
      - Киберспортивные команды: теги, ростеры, матчи команда против команды.
      - Тренировка аима, система рангов, ежедневные награды и не только.
       
      Продуманный баланс и внимание к деталям ванильного сражения - то, ради чего мы за это взялись.
      Проект уже на серьёзной стадии разработки. Мы открываем сообщество раньше официального анонса, чтобы первые скриншоты, новости и дата старта достались тем, кто был с нами с самого начала. Мы всегда рады открытой критике, или советам - сделаем игру лучше для всех!
      Подписывайтесь, чтобы не пропустить официальное заявление о запуске и первые материалы проекта.
       
      Группа VK: https://vk.ru/verdictcs
      Официальная почта: verdictproject@mail.ru
    • Kevin_McCarthy
      By Kevin_McCarthy
      🔒 ОТКРЫТИЕ НАБОРА НА ЗАКРЫТОЕ БЕТА-ТЕСТИРОВАНИЕ (ЗБТ)!
      Друзья! Мы выходим на самый ответственный этап разработки Brilliant RP. Проект уже практически готов к полноценному запуску, но перед тем как открыть двери для всех игроков, нам нужно тщательно проверить каждую систему, каждую работу и каждую строчку кода.
      Именно поэтому мы объявляем о старте Закрытого Бета-Тестирования!
      🏆 ТОП-3 ТЕСТЕРА ПОЛУЧАТ КРУТЫЕ ПРИЗЫ!
      Мы высоко ценим время и вклад каждого участника. Тестеры, которые проявят наибольшую активность, найдут больше всего уникальных багов и подробно опишут их в нашей Google-форме, получат ценные награды:
      🥇 1 МЕСТО: 3000 рублей на кошелек, 100.000$ игровой валюты, и Diamond VIP на 30 дней
      🥈 2 МЕСТО: 2000 рублей на кошелек, 75.000$ игровой валюты, и Diamond VIP на 30 дней
      🥉 3 МЕСТО: 1000 рублей на кошелек, 50.000$ игровой валюты, и Diamond VIP на 30 дней
      📝 Как стать участником ЗБТ?
      Заполни заявку на участие: 👉 https://vk.ru/gtasamp_brilliantrp
      Дождись одобрения.
    • OOLOAIS
      By OOLOAIS
      Ищу скрипт для самп/crmp который может скопировать акссесуары с аризоны/родины пж помогите