Question

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

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

Share this post


Link to post
  • 0

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

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

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

Share this post


Link to post
  • 0

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

 

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

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

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

Share this post


Link to post
  • 0

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

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

 

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

Share this post


Link to post
  • 0

@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

@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

@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

    • August_Rothschild
      By August_Rothschild
      Всем привет , как заменять анимации в игре ? Имеется ввиду анимации танцев , как прочесть файлы с анимациями или как заменять определенную анимацию