• Уважаемый Гость.
    - Прежде чем создать свою тему, пожалуйста, попробуй воспользоваться этим -> ПОИСКОМ !!!
    - После решения Вашего вопроса (проблемы) - нажмите "Лучший ответ", на сообщении, которое его решило. За игнорирование этого действия - Вы получите соответствующее предупреждение. Мы - стараемся Вам помочь. Уделите 10 секунд - чтобы нажать кнопку. (Если у Вас нет такой возможности - укажите в последнем своем сообщении какой ответ Вы считаете лучшим. Наши модераторы сделают это за Вас)
    ЗАПРЕЩЕНО:
    - Cоздавать темы с названиями "Помогите", "Плиз", "Ошибка", "Не могу найти", "Хелп" и тому подобное;
    - Cоздавать темы без детального описания того, что нужно исправить.
    - Cоздавать темы из одного скриншота.
    За игнор правил форума - Ваша тема будет удалена, а Вы получите системное предупреждение.

Почему не появляется курсор при выбора скина на Textdraw'е.

Риктик

Ученик
Привет, у меня проблема при выборе скина. У меня не появляется курсор, то есть я не могу выбрать скин никак и завершить регистрацию.
Пробовал уже с SelectTextDraw но ничего не помогло. Прикрепил на всякий случай архив с сервером и БД, надеюсь поможете решить проблему..sImpossibleLook
Заранее спасибо ❤
new.pwn:
C:
#include <a_samp>
#include <a_mysql>

// MySQL и другие данные
#include <server_data/mysql_config.pwn> // Настройки MySQL
#include <server_data/enum_info.pwn> // player_info, temp_info и т.д.
#include <server_data/defines.pwn> // Цвет, диалоги и т.д.

new PlayerText:TD_SELECTSKIN[MAX_PLAYERS][13]; // Текстдрав выбора скина при регистрации

main()
{
    print("\n----------------------------------");
    print(" UAMP - DEVELOPMENT BUILD SERVER");
    print("----------------------------------\n");
}

public OnGameModeInit()
{
    #include <server_funcs/onGameModeInit.pwn>
}

public OnGameModeExit()
{
    return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
    if(temp_info[playerid][isLogin] == true)
    {
        SpawnPlayer(playerid);
    }
    return 1;
}

public OnPlayerConnect(playerid)
{
    #include <server_funcs/onPlayerConnect.pwn>
}

public OnPlayerDisconnect(playerid, reason)
{
    #include <server_funcs/onPlayerDisconnect.pwn>
}

public OnPlayerSpawn(playerid)
{
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    return 1;
}

public OnVehicleSpawn(vehicleid)
{
    return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
    return 1;
}

public OnPlayerText(playerid, text[])
{
    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    if(temp_info[playerid][isLogin] == false)
    {
        return 0;
    }
    return 0;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
    return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
    return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
    return 1;
}

public OnRconCommand(cmd[])
{
    return 1;
}

public OnPlayerRequestSpawn(playerid)
{
    return 1;
}

public OnObjectMoved(objectid)
{
    return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
    return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
    return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
    return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
    return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
    return 1;
}

public OnPlayerExitedMenu(playerid)
{
    return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
    return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    #include <server_funcs/onPlayerKeyStateChange.pwn>
}

public OnRconLoginAttempt(ip[], password[], success)
{
    return 1;
}

public OnPlayerUpdate(playerid)
{
    return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
    return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
    return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
    return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    #include <server_funcs/onDialogResponse.pwn>
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
    return 1;
}

public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
{
    SetPlayerPosFindZ(playerid, fX, fY, fZ);
    return 1;
}

public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
{
    #include <server_funcs/onPlayerClickPlayerTextDraw.pwn>
}

#include <server_publics/mysql.pwn>
#include <server_publics/playerfunc.pwn>
onDialogResponse.pwn:
C:
// OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
switch(dialogid)
{
    case DLG_REGISTER:
    {
        if(!response)
        {
            ClearInfo(playerid); // Чистим информацию о игроке и кикаем
        }
        if(strlen(inputtext) <= 6 || strlen(inputtext) > 15)
        {
            SCM(playerid, COLOR_CANCEL, "[Помилка] Пароль повинен бути довжиною від 6 символів до 15 символів");
            new string[256];
            format(string, sizeof(string),
            "{ffffff}Ласкаво просимо на проєкт UAMP!\n\
            Акаунт {d13232}%s {ffffff}не зареєстрований\n\
            Для того, щоб зареєструватися, введіть пароль для вашого облікового запису.\n\
            \n\
            ~ Використовуйте латинські символи та цифри.", player_info[playerid][name]);
            return SPD(playerid, DLG_REGISTER, DSP, "{4287f5}Реєстрація | Введення пароля", string, "Далі", "Скасування");
        }
        for(new i = 0; i < strlen(inputtext); i++)
        {
            switch(inputtext[i])
            {
                case 'А'..'Я', 'а'..'я', ' ':
                {
                    SCM(playerid, COLOR_CANCEL, "[Помилка] Пароль містить неприпустимі символи");
                    new string[256];
                    format(string, sizeof(string),
                    "{ffffff}Ласкаво просимо на проєкт UAMP!\n\
                    Акаунт {d13232}%s {ffffff}не зареєстрований\n\
                    Для того, щоб зареєструватися, введіть пароль для вашого облікового запису.\n\
                    \n\
                    ~ Використовуйте латинські символи та цифри.", player_info[playerid][name]);
                    return SPD(playerid, DLG_REGISTER, DSP, "{4287f5}Реєстрація | Введення пароля", string, "Далі", "Скасування");
                }
            }
        }
        format(player_info[playerid][pass], 65, "%s", inputtext);
        SPD(playerid, DLG_REGISTER_CHECKPASS, DSP, "{4287f5}Реєстрація | Повторіть пароль", "{ffffff}Повторіть введений вами пароль у полі ниже:", "Далі", "Отмена");
    }

    case DLG_REGISTER_CHECKPASS:
    {
        if(!response)
        {
            ClearInfo(playerid); // Чистим информацию о игроке и кикаем
        }
        if(strcmp(player_info[playerid][pass], inputtext) != 0)
        {
            SCM(playerid, COLOR_CANCEL, "[Помилка] Паролі не збігаються");
            return SPD(playerid, DLG_REGISTER_CHECKPASS, DSP, "{4287f5}Реєстрація | Повторіть пароль", "{ffffff}Повторіть введений вами пароль у полі ниже:", "Далі", "Скасування");
        }
        player_info[playerid][pass][0] = EOS;
        new gHash[11];
        for(new i; i < 10; i++)
        {
            gHash[i] = random(79) + 47;
        }
        gHash[10] = 0;
        SHA256_PassHash(inputtext, gHash, player_info[playerid][pass], 65);
        format(player_info[playerid][hash], 11, "%s", gHash);

        SPD(playerid, DLG_REGISTER_GENDER, DSM, "{4287f5}Реєстрація | Вибір статі", "{ffffff}Будь ласка, виберіть стать вашого ігрового персонажа.", "Хлопець", "Дівчина");
    }

    case DLG_REGISTER_GENDER:
    {
        if(response)
        {
            player_info[playerid][gender] = 1;
            SetSpawnInfo(playerid, 0, regSkins[temp_info[playerid][regSkinNum]], 209.4948, -34.2360, 1001.9297, 141.9921, 0, 0, 0, 0, 0, 0);
        }
        else
        {
            player_info[playerid][gender] = 2;
            SetSpawnInfo(playerid, 0, regSkinsWoman[temp_info[playerid][regSkinNum]], 209.4948, -34.2360, 1001.9297, 141.9921, 0, 0, 0, 0, 0, 0);
        }

        temp_info[playerid][regSkinNum] = 0;

        SetSpawnInfo(playerid, 0, regSkins[temp_info[playerid][regSkinNum]], 209.4948, -34.2360, 1001.9297, 141.9921, 0, 0, 0, 0, 0, 0);
        SpawnPlayer(playerid);
        SetPlayerVirtualWorld(playerid, playerid);
        SetPlayerInterior(playerid, 1);

        InterpolateCameraPos(playerid, 207.6505, -36.5705, 1001.8047, 207.6505, -36.5705, 1001.8047, 1000);
        InterpolateCameraLookAt(playerid, 209.4948, -34.2360, 1001.9297, 209.4948, -34.2360, 1001.9227, 1000);
        SetTimerEx("ChooseFreeze", 2000, false, "i", playerid);

        SCM(playerid, COLOR_VALIK, "[Інформація] Для відображення курсору натисніть \'H\'.");
        for(new i = 0; i < 22; i++)
        {
            PlayerTextDrawShow(playerid, TD_SELECTSKIN[playerid][i]);
        }
        SelectTextDraw(playerid, 0x6b6b6bAA);
        temp_info[playerid][isClickTextDrawShow] = true;
    }

    case DLG_AUTH:
    {
        if(!response)
        {
            ClearInfo(playerid); // Чистим информацию о игроке и кикаем
        }
        new tempPass[65];
        SHA256_PassHash(inputtext, player_info[playerid][hash], tempPass, 65);

        if(strcmp(tempPass, player_info[playerid][pass]) != 0)
        {
            SCM(playerid, COLOR_CANCEL, "[Помилка] Пароль невірний. Вас було відключено від сервера.");
            ClearInfo(playerid); // Чистим информацию о игроке и кикаем
        }
        SCM(playerid, COLOR_VALIK, "[Інформація] Успішна авторизація, приємної гри на проекті UAMP!");
        SetSpawnInfo(playerid, 0, player_info[playerid][skin], 2030.6315, 1344.6887, 10.8203, 27.8736, 0, 0, 0, 0, 0, 0);
        temp_info[playerid][isLogin] = true;
        
        SpawnPlayer(playerid);
        SetTimerEx("FreezePlayer", 200, false, "i", playerid);
    }
}
return 1;
enum_info.pwn:
C:
enum PLAYER_INFO
{
    name[MAX_PLAYER_NAME],
    pass[65],
    hash[11],
    skin,
    gender,
}
new player_info[MAX_PLAYERS][PLAYER_INFO];

enum TEMP_INFO
{
    bool:isLogin,
    bool:isClickTextDrawShow,
    regSkinNum,
}
new temp_info[MAX_PLAYERS][TEMP_INFO];

enum
{
    DLG_NONE,
    DLG_REGISTER,
    DLG_REGISTER_CHECKPASS,
    DLG_REGISTER_GENDER,
    DLG_AUTH,
}

// new regSkins[10] = {4, 5, 78, 79, 134, 135, 136, 137, 200, 212};
new regSkins[4] = {4, 5, 78, 79};
new regSkinsWoman[4] = {41, 56, 77, 151};
onPlayerKeyStateChange.pwn:
C:
if(newkeys & KEY_CROUCH)
{
    if(temp_info[playerid][isClickTextDrawShow] == true)
    {
        SelectTextDraw(playerid, 0x6b6b6bAA);
    }
}
return 1;
onPlayerDisconnect.pwn:
C:
ClearTemp(playerid);
return 1;
playerfunc.pwn:
C:
stock ClearInfo(playerid)
{
    player_info[playerid][name][0] = EOS;
    player_info[playerid][pass][0] = EOS;
    player_info[playerid][hash][0] = EOS;
    player_info[playerid][skin] = 0;
    player_info[playerid][gender] = 0;
    
    return Kick(playerid);
}

stock ClearTemp(playerid)
{
    player_info[playerid][name][0] = EOS;
    player_info[playerid][pass][0] = EOS;
    player_info[playerid][hash][0] = EOS;
    player_info[playerid][skin] = 0;
    player_info[playerid][gender] = 0;

    temp_info[playerid][isLogin] = false;
    temp_info[playerid][isClickTextDrawShow] = false;
    temp_info[playerid][regSkinNum] = 0;
}

stock LoadAccount(playerid)
{
    cache_get_value_name(0, "pass", player_info[playerid][pass], 65);
    cache_get_value_name(0, "hash", player_info[playerid][hash], 11);
    cache_get_value_name_int(0, "skin", player_info[playerid][skin]);
    cache_get_value_name_int(0, "gender", player_info[playerid][gender]);
}

forward FreezePlayer(playerid);
public FreezePlayer(playerid)
{
    TogglePlayerControllable(playerid, false);
    SetTimerEx("UnfreezePlayer", 3000, false, "i", playerid);
}

forward UnfreezePlayer(playerid);
public UnfreezePlayer(playerid)
{
    TogglePlayerControllable(playerid, true);
}

forward ChooseFreeze(playerid);
public ChooseFreeze(playerid)
{
    TogglePlayerControllable(playerid, false);
}
mysql_config.pwn:
C:
new MySQL: dbHandle;

#define MYSQL_HOST  "localhost"
#define MYSQL_USER  "root"
#define MYSQL_PASS  ""
#define MYSQL_BASE  "uamp_db"
onPlayerConnect.pwn:
C:
new query[128];
GetPlayerName(playerid, player_info[playerid][name], MAX_PLAYER_NAME);
mysql_format(dbHandle, query, sizeof(query), "SELECT * FROM `accounts` WHERE `name` = '%e'", player_info[playerid][name]);
mysql_tquery(dbHandle, query, "CheckAccountFromMySQL", "i", playerid);

#include <playerTD/regSkin.inc>

return 1;
onPlayerClickPlayerTextDraw.pwn:
C:
if(playertextid == TD_SELECTSKIN[playerid][4]) // Кнопка ">"
{
    temp_info[playerid][regSkinNum]++;
    if(temp_info[playerid][regSkinNum] > 4)
    {
        temp_info[playerid][regSkinNum] = 0;
    }
    if(player_info[playerid][gender] == 1)
    {
        SetPlayerSkin(playerid, regSkins[temp_info[playerid][regSkinNum]]);
    }
    else
    {
        SetPlayerSkin(playerid, regSkinsWoman[temp_info[playerid][regSkinNum]]);
    }
}
if(playertextid == TD_SELECTSKIN[playerid][5]) // Кнопка "<"
{
    temp_info[playerid][regSkinNum]--;
    if(temp_info[playerid][regSkinNum] < 0)
    {
        temp_info[playerid][regSkinNum] = 4;
    }
    if(player_info[playerid][gender] == 1)
    {
        SetPlayerSkin(playerid, regSkins[temp_info[playerid][regSkinNum]]);
    }
    else
    {
        SetPlayerSkin(playerid, regSkinsWoman[temp_info[playerid][regSkinNum]]);
    }
}
if(playertextid == TD_SELECTSKIN[playerid][12] || playertextid == TD_SELECTSKIN[playerid][12]) // Кнопка "SELECT"
{
    new query[256];
    if(player_info[playerid][gender] == 1)
    {
        player_info[playerid][skin] = regSkins[temp_info[playerid][regSkinNum]];

        mysql_format(dbHandle, query, sizeof(query), "INSERT INTO `accounts` (`name`, `pass`, `hash`, `gender`, `skin`) VALUES ('%e','%e','%e', '%d', '%d')",
        player_info[playerid][name], player_info[playerid][pass], player_info[playerid][hash], player_info[playerid][gender], regSkins[temp_info[playerid][regSkinNum]]);

        mysql_format(dbHandle, query, sizeof(query), "UPDATE `accounts` SET `skin` = '%d' WHERE `name` = '%e'", regSkins[temp_info[playerid][regSkinNum]], player_info[playerid][name]);
        // SetPlayerSkin(playerid, regSkins[temp_info[playerid][regSkinNum]]);
    }
    else
    {
        player_info[playerid][skin] = regSkinsWoman[temp_info[playerid][regSkinNum]];

        mysql_format(dbHandle, query, sizeof(query), "INSERT INTO `accounts` (`name`, `pass`, `hash`, `gender`, `skin`) VALUES ('%e','%e','%e', '%d', '%d')",
        player_info[playerid][name], player_info[playerid][pass], player_info[playerid][hash], player_info[playerid][gender], regSkins[temp_info[playerid][regSkinNum]]);

        mysql_format(dbHandle, query, sizeof(query), "UPDATE `accounts` SET `skin` = '%d' WHERE `name` = '%e'", regSkinsWoman[temp_info[playerid][regSkinNum]], player_info[playerid][name]);
        // SetPlayerSkin(playerid, regSkinsWoman[temp_info[playerid][regSkinNum]]);
    }
    mysql_tquery(dbHandle, query, "", "");
    SetSpawnInfo(playerid, 0, player_info[playerid][skin], 2030.6315, 1344.6887, 10.8203, 27.8736, 0, 0, 0, 0, 0, 0);
    SetPlayerVirtualWorld(playerid, 0);
    SetPlayerInterior(playerid, 0);
    SpawnPlayer(playerid);
    FreezePlayer(playerid);
    CancelSelectTextDraw(playerid);

    temp_info[playerid][isClickTextDrawShow] = false;
    temp_info[playerid][regSkinNum] = 0;
    temp_info[playerid][isLogin] = true;

    for(new i = 0; i < 22; i++)
    {
        PlayerTextDrawHide(playerid, TD_SELECTSKIN[playerid][i]);
    }
    SCM(playerid, COLOR_VALIK, "[Інформація] Реєстрація пройшла успішно. Приємної гри на проекті UAMP!");
}
return 0;
 

Вложения

Сверху Снизу