PDA

Просмотр полной версии : [Прочее] Текстдравы



Sarah
24.04.2019, 14:04
Всем привет
Не могу разобраться с проблемой, захожу на сервер и пишу /inv, открывается инвентарь и все нормально, нажимаю на кнопку закрытия (в моем случае это просто бокс), все закрывается, снова пишу /inv и инвентарь открывается и сразу закрывается, снова пишу /inv и все нормально открывается, в чем проблема не пойму
Также, когда открываю инвентарь командой /inv и пишу снова, чтобы закрыть, ничего не происходит, в чем проблема я так и не понял =(

https://pastebin.com/khUwkSKP

DeimoS
24.04.2019, 14:53
Во-первых, все подобные вычисления

413.6+(42.5*inv)
лучше рассчитать заранее, занести в массив и уже из массива доставать, а не заставлять сервер каждый раз рассчитывать значения, которые всегда будут одинаковые.

Во-вторых, crashdetect что-нибудь говорит? И как логирование срабатывает? Ну "-1"/"-2" появляются когда надо или нет?

Sarah
24.04.2019, 15:06
На счет логирования, после того, как открыл инвентарь и снова пишу /inv - выводится лог от том что инвентарь открылся (-2), но при этом 2 слой его не накладывается.


то что в server.log


[12:55:31] [debug] #0 005a6328 in HidePlayerStats (playerid=0) at C:\Users\User\Desktop\SGL-RP\gamemodes\ind.pwn:36960
[12:55:31] [debug] #1 00144eec in public ac_OnPlayerClickTextDraw (playerid=0, Text:clickedid=65535) at C:\Users\User\Desktop\SGL-RP\gamemodes\ind.pwn:16856
[12:55:31] [debug] #2 00020914 in public OnPlayerClickTextDraw (playerid=0, Text:clickedid=65535) at C:\Users\User\Desktop\SGL-RP\pawno\include\anticheat.inc:2219

HidePlayerStats - https://pastebin.com/8cgDjBVu

DeimoS
24.04.2019, 15:12
for(new i; i < sizeof(stata_PTD); i++) PlayerTextDrawHide(playerid, stata_PTD[playerid][i]);
на
for(new i; i < sizeof(stata_PTD[]); i++) PlayerTextDrawHide(playerid, stata_PTD[playerid][i]);
И в следующий раз кидай полный лог. Там выше причину ошибки пишет.


При вводе /inv никаких ошибок в лог не показывает?

Sarah
24.04.2019, 15:19
Полный лог после исправления:

[14:16:10] Server password has been removed.
[14:16:10] [!] Подключение к базе успешно [!]
[14:16:11] -> Экономика успешно загружена 0 ms
[14:16:11] -> Загружено 31 баннеров | 1 ms
[14:16:11] -> Семьи не загружены
[14:16:11] -> Склад мафий загружен
[14:16:11] -> Фракционные склады загружены (29 шт)
[14:16:11] -> Загружено <20> заправочных станций!
[14:16:11] -> Business | Загружено: 60 | Time: 5 (ms)
[14:16:11] -> LoadProperty | Загружено 1264 | Time: 107 (ms)
[14:16:11] -> GZLogoInfo | Загружено: 38 | Time: 1 (ms)
[14:16:11] -> LoadFractions | Загружено 27 | Время: 1 (ms)
[14:16:11] -> LoadGangZone | Загружено: 104 | Time: 4 (ms)
[14:16:11] -> Мебель загружена <4946 шт>
[14:16:11] -> Автоярмарка загружена <24 шт авто.>
[14:16:11] -> Выборы не загружены
[14:16:11] -> Запреты загружены успешно
[14:16:11] -> Донат статистика не загружена
[14:16:11] [profiler] Attached profiler to gamemodes/ind
[14:16:11] [profiler] Started profiling gamemodes/ind
[14:16:11] Number of vehicle models: 91
[14:16:11] [Pawn.CMD] n_PC_RegAlias: alias 'inv' is occupied
[14:16:11] [Pawn.CMD] n_PC_RegAlias: command 'vipchat' not found
[14:16:11] 18 - uploaded fractions
[14:16:17] [connection] incoming connection: 109.252.11.107:13251 id: 0
[14:16:17] [join] Elon_Musk has joined the server (0:109.252.11.107)
[14:16:30] [warning] client exceeded 'messageslimit' 109.252.11.107:13251 (501) Limit: 500/sec
[14:16:41] [part] Elon_Musk has left the server (0:0)
[14:16:41] [mysql] 1054, Unknown column 'kick' in 'field list', , UPDATE `admin` SET `kick` = '0', `ban` = '0', `mute` = '0', `pm` = '0', `warn` = '0', `jail` = '0' WHERE `Name` = 'Elon_Musk' LIMIT 1, 1


На счет 'kick' - это нужно будет поправить, но, наверно, это не связано с текстдравами
И сейчас как исправил, прописал /inv, инвентарь открылся, нажал на кнопку закрытия if(clickedid == Text:inventory_td[2]) и больше инвентарь не открывается через /inv

И вот тут может лучше делать PlayerTextDrawDestroy?

for(new i; i < sizeof(stata_PTD[]); i++) PlayerTextDrawHide(playerid, stata_PTD[playerid][i]);

DeimoS
24.04.2019, 15:24
[Pawn.CMD] n_PC_RegAlias: alias 'inv' is occupied


CMD:inv(playerid, params[]) {
if(GetPVarInt(playerid, "Show_Inv")) {
hide_inv(playerid);
SendClientMessage(playerid, -1, "-1");
} else {
show_inv(playerid);
SendClientMessage(playerid, -1, "-2");
}
return true;
}

Sarah
24.04.2019, 15:31
Пишу /inv - все открывается, нажимаю на 'ESC' все закрывается и курсор также пропадает. Пишу снова /inv и закрываю уже на кнопку и курсор остается и PVar не удаляется, так как команда снова не работает и лог тоже не выводится (я про -2)

[14:28:10] Server password has been removed.
[14:28:10] [!] Подключение к базе успешно [!]
[14:28:10] -> Экономика успешно загружена 0 ms
[14:28:10] -> Загружено 31 баннеров | 1 ms
[14:28:10] -> Семьи не загружены
[14:28:10] -> Склад мафий загружен
[14:28:10] -> Фракционные склады загружены (29 шт)
[14:28:10] -> Загружено <20> заправочных станций!
[14:28:10] -> Business | Загружено: 60 | Time: 6 (ms)
[14:28:10] -> LoadProperty | Загружено 1264 | Time: 105 (ms)
[14:28:10] -> GZLogoInfo | Загружено: 38 | Time: 1 (ms)
[14:28:10] -> LoadFractions | Загружено 27 | Время: 1 (ms)
[14:28:10] -> LoadGangZone | Загружено: 104 | Time: 4 (ms)
[14:28:10] -> Мебель загружена <4946 шт>
[14:28:10] -> Автоярмарка загружена <24 шт авто.>
[14:28:10] -> Выборы не загружены
[14:28:10] -> Запреты загружены успешно
[14:28:10] -> Донат статистика не загружена
[14:28:10] [profiler] Attached profiler to gamemodes/ind
[14:28:10] [profiler] Started profiling gamemodes/ind
[14:28:10] Number of vehicle models: 91
[14:28:10] [Pawn.CMD] n_PC_RegAlias: alias 'inv' is occupied
[14:28:10] [Pawn.CMD] n_PC_RegAlias: command 'vipchat' not found
[14:28:10] 18 - uploaded fractions
[14:28:15] [connection] incoming connection: 109.252.11.107:6176 id: 0
[14:28:15] [join] Elon_Musk has joined the server (0:109.252.11.107)
[14:28:30] [warning] client exceeded 'messageslimit' 109.252.11.107:6176 (569) Limit: 500/sec

DeimoS
24.04.2019, 15:40
-2 у тебя только при вводе команды и будет выводиться, ибо ты в команде вывод сделал.

Логируй действие кнопок: смотри какой ID передаётся в паблик и под каким ID хранится текстдрав закрытия

Sarah
24.04.2019, 15:44
PVar лучше удалять или просто ставить значение 0?
И где его удалять в самой функции закрытия или перед/после закрытия уже?

DeimoS
24.04.2019, 15:52
Удалять.

В самой функции. Просто чтоб не дублировать удаление. На работоспособность не повлияет это, ибо у тебя удаление происходит уже после проверки значения pVar.

И да, я бы лучше сделал обычный массив. А ещё лучше - использовать inventory_ptd. Ну добавить обнуление

for(new i; i < MAX_SLOT_INV; i++) {
PlayerTextDrawDestroy(playerid, inventory_ptd[playerid][i]);
inventory_ptd[playerid][i] = PlayerText:0;
}
И уже когда нужно проверить, показан ли инвентарь, делать проверку:

if(inventory_ptd[playerid][0])
{
//Показан
}
else
{
//Не показан
}