Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Вырубается сервер.

Статус
В этой теме нельзя размещать новые ответы.

© HovinE

Умник
Сегодня добавил команду /recon (без ошибок).
Начал тестировать команду с напарником, что вышло: Только начал спекать за ним, как тут отрубается сервер!
В логи ничего не пишет, ошибок повторюсь нет.

Дефайны:
PHP:
#define ADMIN_SPEC_TYPE_NONE	0
#define ADMIN_SPEC_TYPE_PLAYER	1
#define ADMIN_SPEC_TYPE_VEHICLE	2
Переменные:
PHP:
new Spectate[MAX_PLAYERS];
new Menu:reconmenu;
new Toogle[MAX_PLAYERS];
new gSpectateID[MAX_PLAYERS];
new gSpectateType[MAX_PLAYERS];
Форварды:
PHP:
forward Menu();
Код команды /recon:
PHP:
if(PlayerInfo[playerid][pAdmin] == 0) return true;
new specid;
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Информиция: /recon [id]");
specid = ReturnUser(tmp);
if(specid == playerid) return SendClientMessage(playerid, COLOR_WHITE, "[Ошибка] Вы ввели свой ID.");
if(PlayerInfo[specid][pAdmin] > PlayerInfo[playerid][pAdmin]) return true;
if(!IsPlayerConnected(specid)) return SendClientMessage(playerid, COLOR_WHITE, "Игрок - оффлайн.");
if(GetPlayerState(specid) == PLAYER_STATE_SPECTATING && gSpectateID[specid] != INVALID_PLAYER_ID)
{
    GetPlayerName(gSpectateID[specid], sendername, sizeof(sendername));
    format(string, sizeof(string), " Этот игрок наблюдает за [%d]%s!",gSpectateID[specid], sendername);
    SendClientMessage(playerid, COLOR_GREY, string);
    return 1;
}
if(GetPlayerState(specid) != 1 && GetPlayerState(specid) != 2 && GetPlayerState(specid) != 3) return SendClientMessage(playerid, COLOR_RED, "Игрок не вступил в игру !");
StartSpectate(playerid, specid);
Spectate[playerid] = specid;
ShowMenuForPlayer(reconmenu,playerid);
return true;
Код команды /recoff:
PHP:
if(PlayerInfo[playerid][pAdmin] == 0) return true;
new specid;
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
    if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING)
    StopSpectate(playerid);
    return 1;
}
specid = ReturnUser(tmp);
StopSpectate(specid);
format(string, sizeof(string), " Вы отключили [%d]%s из режима слежения!",gSpectateID[specid], sendername);
SendClientMessage(playerid, COLOR_GREY, string);
return true;
Код public OnPlayerSelectedMenuRow:
PHP:
new Menu:Current = GetPlayerMenu(playerid); // НА САМОМ ДЕЛЕ КОД ПОСТРОЕН ЛЕСЕНКОЙ!!!
if(Current == reconmenu)
{
    new string[150];
    GetPlayerName(Spectate[playerid], giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername, sizeof(sendername));
    switch(row)
    {
    case 0:
    {
    if(Toogle[Spectate[playerid]] == 0)
    {
    TogglePlayerControllable(Spectate[playerid], 0);
    format(string, sizeof(string), "%s был заморожен Администратором %s.",giveplayer ,sendername);
    SendAdminMessage(COLOR_GREY, string);
    ShowMenuForPlayer(reconmenu,playerid);
    Toogle[Spectate[playerid]] = 1;
    }
    else
    {
    TogglePlayerControllable(Spectate[playerid], 1);
    format(string, sizeof(string), "%s был разморожен Администратором %s",giveplayer ,sendername);
    SendAdminMessage(COLOR_GREY, string);
    ShowMenuForPlayer(reconmenu,playerid);
    Toogle[Spectate[playerid]] = 0;
    }
    }
    case 1:
    {
    format(string, sizeof(string), "Игрок %s | На GM test Администратором %s",giveplayer, sendername);
    SendAdminMessage(COLOR_GREY, string);
    new Float:boomx, Float:boomy, Float:boomz;
    GetPlayerPos(Spectate[playerid],boomx, boomy, boomz);
    CreateExplosion(boomx, boomy , boomz, 5, 2);
    ShowMenuForPlayer(reconmenu,playerid);
    }
    case 2:
    {
    new Float:slx, Float:sly, Float:slz;
    GetPlayerName(Spectate[playerid], giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername, sizeof(sendername));
    SetPlayerHealth(Spectate[playerid], 130);
    GetVehiclePos(GetPlayerVehicleID(Spectate[playerid]), slx, sly, slz);
    SetVehiclePos(GetPlayerVehicleID(Spectate[playerid]), slx, sly, slz+550);
    PlayerPlaySound(Spectate[playerid], 1130, slx, sly, slz+5);
    format(string, sizeof(string), "AdmCmd: %s был подкинут администратором %s",giveplayer ,sendername);
    SendAdminMessage(COLOR_GREY, string);
    ShowMenuForPlayer(reconmenu,playerid);
    }
    case 3:
    {
    new playersip[150];
    GetPlayerIp(Spectate[playerid],playersip,sizeof(playersip));
    format(string, sizeof(string), "[%s] IP: %s",giveplayer,playersip);
    SendClientMessage(playerid,COLOR_GREY,string);
    ShowMenuForPlayer(reconmenu,playerid);
    }
    case 4:
    {
    new Float:shealth;
    new Float:slx, Float:sly, Float:slz;
    GetPlayerHealth(Spectate[playerid], shealth);
    SetPlayerHealth(Spectate[playerid], shealth-5);
    GetPlayerPos(Spectate[playerid], slx, sly, slz);
    SetPlayerPos(Spectate[playerid], slx, sly, slz+5);
    PlayerPlaySound(Spectate[playerid], 1130, slx, sly, slz+5);
    ShowMenuForPlayer(reconmenu,playerid);
    }
    case 5:
    {
    new mess[64];
    format(mess, 64, "/getstats %d",Spectate[playerid]);
    OnPlayerCommandText(playerid,mess);
    ShowMenuForPlayer(reconmenu,playerid);
    }
    case 6:
    {
    StartSpectate(playerid, Spectate[playerid]);
    ShowMenuForPlayer(reconmenu,playerid);
    }
    case 7:
    {
    StopSpectate(playerid);
    Spectate[playerid] = 255;
    PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0);
    }
    }
}
return true;
Код меню:
PHP:
public Menu()
{
    reconmenu = CreateMenu("Recon", 1, 25.0, 160.0, 100.0 );
    AddMenuItem(reconmenu,0,"Freeze");
    AddMenuItem(reconmenu,0,"GMtest");
    AddMenuItem(reconmenu,0,"VehSlap");
    AddMenuItem(reconmenu,0,"Getip");
    AddMenuItem(reconmenu,0,"Slap");
    AddMenuItem(reconmenu,0,"Stats");
    AddMenuItem(reconmenu,0,"Update");
    AddMenuItem(reconmenu,0,"Re Off");
}
Код старта:
PHP:
stock StartSpectate(playerid, specid) // НА САМОМ ДЕЛЕ КОД ПОСТРОЕН ЛЕСЕНКОЙ!!!
{
    for(new x=0; x<GetMaxPlayers(); x++)
    {
    if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && gSpectateID[x] == playerid)
    {
    AdvanceSpectate(x);
    }
    }
    if(IsPlayerInAnyVehicle(specid))
    {
    SetPlayerInterior(playerid,GetPlayerInterior(specid));
    SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(specid));
    TogglePlayerSpectating(playerid, 1);
    PlayerSpectateVehicle(playerid, GetPlayerVehicleID(specid));
    gSpectateID[playerid] = specid;
    gSpectateType[playerid] = ADMIN_SPEC_TYPE_VEHICLE;
    }
    else
    {
    SetPlayerInterior(playerid,GetPlayerInterior(specid));
    SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(specid));
    TogglePlayerSpectating(playerid, 1);
    PlayerSpectatePlayer(playerid, specid);
    gSpectateID[playerid] = specid;
    gSpectateType[playerid] = ADMIN_SPEC_TYPE_PLAYER;
    }
    new ping = GetPlayerPing(specid);
    new Float:health;
    new Float:armour;
    GetPlayerHealth(specid, health);
    new string[356], name[24];
    GetPlayerName(specid,name,sizeof(name));
    SetTimer("SpectatorOb", 1000, 0);
    format(string,356,"~n~~n~~n~~n~~n~~n~~n~~n~~n~~w~Nick [%s] - ID [%d]~n~HP [%.0f] - AR: [%.1f] - PING: [%d]", name,specid,health,armour,ping);
    GameTextForPlayer(playerid,string,10000,3);
    return 1;
}
Код стоп:
PHP:
stock StopSpectate(playerid)
{
    TogglePlayerSpectating(playerid, 0);
    gSpectateID[playerid] = INVALID_PLAYER_ID;
    gSpectateType[playerid] = ADMIN_SPEC_TYPE_NONE;
    GameTextForPlayer(playerid,"~n~~n~~n~~n~~n~~n~~n~~n~~w~Spectator Mode Off",3000,3);
    return 1;
}
Дополнение:
PHP:
stock AdvanceSpectate(playerid) // НА САМОМ ДЕЛЕ КОД ПОСТРОЕН ЛЕСЕНКОЙ!!!
{
    if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING && gSpectateID[playerid] != INVALID_PLAYER_ID)
    {
    for(new x = gSpectateID[playerid]+1; x <= GetMaxPlayers(); x++)
    {
    if(x == MAX_PLAYERS) x = 0;
    if(IsPlayerConnected(x) && x != playerid)
    {
    if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && gSpectateID[x] != INVALID_PLAYER_ID || (GetPlayerState(x) != 1 && GetPlayerState(x) != 2 && GetPlayerState(x) != 3)) continue;
    else
    {
    StartSpectate(playerid, x);
    break;
    }
    }
    }
    }
    return true;
}
Помогите пожалуйста, буду искренне благодарен, а так же признателен!
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу