Риктик
Ученик
Привет, у меня проблема при выборе скина. У меня не появляется курсор, то есть я не могу выбрать скин никак и завершить регистрацию.
Пробовал уже с SelectTextDraw но ничего не помогло. Прикрепил на всякий случай архив с сервером и БД, надеюсь поможете решить проблему..
Заранее спасибо
new.pwn:
onDialogResponse.pwn:
enum_info.pwn:
onPlayerKeyStateChange.pwn:
onPlayerDisconnect.pwn:
playerfunc.pwn:
mysql_config.pwn:
onPlayerConnect.pwn:
onPlayerClickPlayerTextDraw.pwn:
Пробовал уже с SelectTextDraw но ничего не помогло. Прикрепил на всякий случай архив с сервером и БД, надеюсь поможете решить проблему..

Заранее спасибо
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>
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;
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};
C:
if(newkeys & KEY_CROUCH)
{
if(temp_info[playerid][isClickTextDrawShow] == true)
{
SelectTextDraw(playerid, 0x6b6b6bAA);
}
}
return 1;
C:
ClearTemp(playerid);
return 1;
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);
}
C:
new MySQL: dbHandle;
#define MYSQL_HOST "localhost"
#define MYSQL_USER "root"
#define MYSQL_PASS ""
#define MYSQL_BASE "uamp_db"
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;
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;
Вложения
-
1.6 MB Просмотры: 4
