PDA

Просмотр полной версии : [Вопрос] TextDraw - не чего не происходит



Bady
07.04.2015, 19:43
При нажатии на TD не чего не происходит, как будто кликабельности нету даже.
А когда вызываешь 2 раз, то код работает, но есть 1 проблема с SelectTextDraw, он выделяет текст другим цвета от 1 TD и до того которого новёл.


new number_buff[1];
for(new t; t < sizeof(SecurityCodeNumber[]); t++)
{
if(playertextid == SecurityCodeNumber[t][playerid])
{
valstr(number_buff,SecurityCodeStr[playerid][t]);
strcat(SecurityCodeProverka[playerid], number_buff);
if(++number_of_clicks{playerid} >= 6)
{
if(strval(SecurityCodeProverka[playerid]) == pData[playerid][FullSuperKey])
{
SendClientMessage(playerid,COLOR_WHITE,"VERNO");
}
else SendClientMessage(playerid, COLOR_LIGHTRED, "Введите /q(uit) чтобы выйти"),Kick(playerid);
number_of_clicks{playerid} = 0;
SecurityCodeProverka[playerid][0] = 0;
}
break;
}
}



[17:49:45] [debug] Run time error 4: "Array index out of bounds"
[17:49:45] [debug] Accessing element at index 10 past array upper bound 9
[17:49:45] [debug] AMX backtrace:
[17:49:45] [debug] #0 001fe924 in Pin_Code (playerid=0) at C:\Users\Никита\Desktop\Route RP\gamemodes\new.pwn:30815
[17:49:45] [debug] #1 0004040c in public load_player (playerid=0) at C:\Users\Никита\Desktop\Route RP\gamemodes\new.pwn:6505

1.

stock Pin_Code(playerid)
{
new text_string[2];
for(new index_1; index_1 < sizeof(SecurityCodeNumber[]); index_1++)
{
SecurityCodeStr[playerid][index_1] = random(10); // Тут ошибка в crahdetecte
for(new index_2; index_2 < sizeof(SecurityCodeStr[]); index_2++)
{
if(index_1 == 0) break;
if(index_2 == index_1) continue;
if(SecurityCodeStr[playerid][index_1] == SecurityCodeStr[playerid][index_2])
{
SecurityCodeStr[playerid][index_1] = random(10);
index_2 = -1;
}
}
format(text_string,sizeof(text_string),"%d",SecurityCodeStr[playerid][index_1]);
PlayerTextDrawSetString(playerid, SecurityCodeNumber[index_1][playerid], text_string);
PlayerTextDrawShow(playerid, SecurityCodeNumber[index_1][playerid]);
PlayerTextDrawSetSelectable(playerid, SecurityCodeNumber[index_1][playerid], 1);
for(new i = 0; i < 15; i++) PlayerTextDrawShow(playerid, SecurityCode[playerid][i]);
SelectTextDraw(playerid, 0xFDFF40AA);
}
return 1;
}


2.

if(pData[playerid][EnableSuperKey] == 1)
{
if(strcmp(GetIP(playerid),pData[playerid][LastIP])) return Pin_Code(playerid); //Тут ошибка!
else
AccWriteString(player_name [ playerid ],"SuperKeyIP",GetIP(playerid));
}
Скрины:

https://pp.vk.me/c622718/v622718592/27938/ShAN9kHoFF8.jpghttps://pp.vk.me/c622718/v622718592/27942/AH1JigHd8QQ.jpghttps://pp.vk.me/c622718/v622718592/2794c/kLoyXPKh2Eo.jpg

wAx
09.04.2015, 12:19
при создании текстдрава, нужно указывать TextSize, Align = 2

Bady
09.04.2015, 15:20
при создании текстдрава, нужно указывать TextSize, Align = 2
Не чего не изменилось, только текст левее съехал!


SecurityCodeNumber[0][playerid] = CreatePlayerTextDraw(playerid,284.000000, 218.399993, "6");
PlayerTextDrawLetterSize(playerid,SecurityCodeNumber[0][playerid], 0.467999, 2.676445);
PlayerTextDrawAlignment(playerid,SecurityCodeNumber[0][playerid], 1);
PlayerTextDrawColor(playerid,SecurityCodeNumber[0][playerid], -1);
PlayerTextDrawSetShadow(playerid,SecurityCodeNumber[0][playerid], 0);
PlayerTextDrawSetOutline(playerid,SecurityCodeNumber[0][playerid], 1);
PlayerTextDrawBackgroundColor(playerid,SecurityCodeNumber[0][playerid], 51);
PlayerTextDrawFont(playerid,SecurityCodeNumber[0][playerid], 2);
PlayerTextDrawSetProportional(playerid,SecurityCodeNumber[0][playerid], 1);
PlayerTextDrawAlignment(playerid,SecurityCodeNumber[0][playerid], 2);

wAx
09.04.2015, 20:37
Alignment = 2, выставляй там где создавал свои тексдравы и подгоняй позицию, поставь PlayerTextDrawTextSize со значениями к примеру 20 20 и посмотри как будет работать, в общем экспериментируй и всё получится

Desulaid
09.04.2015, 20:44
Alignment = 2, выставляй там где создавал свои тексдравы и подгоняй позицию, поставь PlayerTextDrawTextSize со значениями к примеру 20 20 и посмотри как будет работать, в общем экспериментируй и всё получится

То есть область выделения TextDraw подбирается вручную?

wAx
09.04.2015, 20:55
То есть область выделения TextDraw подбирается вручную?

В IpleoMax можно сделать и автоматически, достаточно включить использование заднего бокса и подогнать его по размеру - после отключить. Но чтобы кликало ровно по тексту, нужно придать Align по центру.

Я всегда подбирал вручную, так надежнее, понятнее и быстрее =)

Bady
09.04.2015, 23:44
Alignment = 2, выставляй там где создавал свои тексдравы и подгоняй позицию, поставь PlayerTextDrawTextSize со значениями к примеру 20 20 и посмотри как будет работать, в общем экспериментируй и всё получится
А это тогда по твоему что? PlayerTextDrawAlignment(playerid,SecurityCodeNumber[0][playerid], 2);
Подгонял PlayerTextDrawTextSize под себя, не помогло!

wAx
10.04.2015, 18:05
А это тогда по твоему что? PlayerTextDrawAlignment(playerid,SecurityCodeNumber[0][playerid], 2);
Подгонял PlayerTextDrawTextSize под себя, не помогло!

Ну значит проблема в твоих знаниях о текстдравах, ведь именно TextSize не даёт нормально работать кликабельным ТД. Сожалею.

Bady
10.04.2015, 22:57
Ну значит проблема в твоих знаниях о текстдравах, ведь именно TextSize не даёт нормально работать кликабельным ТД. Сожалею.
На сколько я знаю TextSize это размер текста высота и ширина, не так ли?
О каких знаниях еще речь, я сделал со всеми тд TextSize поменялся размер и не чего не изменилось!
Логика тогда где, я сделал все что ты сказал и не чего не изменилось, сделаем вывод, ты сам не знаешь в чем причина и пытаешься скинуть всё на мои знания о TD

Bady
13.04.2015, 18:02
Подниму