PDA

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



Danny Marcelo
11.05.2020, 06:41
Приветствую. У меня такой вопрос. В общем впервые перевёл мод с OnPlayerCommandText на dc_cmd. Все команды работали после моего удачного перевода, но я заметил что не работают нажатия клавиш и тут я вспомнил, что они связаны с командами, которые я перевёл. В общем в моде была вот такая команда: (на форум не влазиет, слишком огромная0)

https://pastebin.com/6V0gzBR4


Перевёл её на dc_cmd тоже, но это не дало нужного эффекта, подумал и решил попробовать весь код из этой команды запихнуть в паблик OnPlayerKeyStateChange.

https://pastebin.com/b6ec4iHP

В итоге всё скомпилировалось удачно, даже code size и другие параметры уменьшились, но когда зашёл на сервер чтобы проверить, просто впал в ступор. Сами клавиши работают, но вот ни одна команда не работает, так и ещё написав любой текст выдаёт вот это:

https://i.ibb.co/Rgt0WkL/image.jpg


К моду подключены такие плагины как crashdetect и nativecheker, но никаких ошибок в консоли нет, зато тот текст, который я вводил на сервере, в консоли выдаётся правильным. Кто сталкивался с такой проблемой? Как решить можно?

SteveStage
11.05.2020, 09:23
Ты хоть чекал свой пост с темной темой?

http://ihost.pro-pawn.ru/image.php?di=4PKF

Danny Marcelo
11.05.2020, 09:38
Ты хоть чекал свой пост с темной темой?

http://ihost.pro-pawn.ru/image.php?di=4PKF

Нет не проверял. У меня стандартная - светлая стоит.

SteveStage
11.05.2020, 09:39
Я постарался и перевел это нечитаемое убожество в более менее сносный вид:

if(newkeys == KEY_YES)
{
if(GetPVarInt(playerid,"sellzone") == 0) return SCM(playerid, COLOR_GRAD, "Вам не ничего не предлагали");
{
new price = GetPlayerOption1[playerid];
new idterr = GetPlayerOption[playerid];
new giverid = GetPlayerTransfer[playerid];
if(GetDistanceBetweenPlayers(playerid, giverid) > 20) return SCM(playerid, COLOR_GRAD, "Игрок слишком далеко от Вас");
if(Player[playerid][pMoney] < price) return SCM(playerid,COLOR_GRAD, "У Вас недостаточно денег");
if(Player[playerid][pMember] == 1)
{
GhettoMen[0]++;
UpdateStoreGrove();
}
if(Player[playerid][pMember] == 2)
{
GhettoMen[1]++;
UpdateStoreBallas();
}
if(Player[playerid][pMember] == 3)
{
GhettoMen[2]++;
UpdateStoreAztec();
}
if(Player[playerid][pMember] == 4)
{
GhettoMen[3]++;
UpdateStoreVagos();
}
if(Player[playerid][pMember] == 5)
{
GhettoMen[4]++;
UpdateStoreRifa();
}
if(Player[giverid][pMember] == 1)
{
GhettoMen[0]--;
UpdateStoreGrove();
}
if(Player[giverid][pMember] == 2)
{
GhettoMen[1]--;
UpdateStoreBallas();
}
if(Player[giverid][pMember] == 3)
{
GhettoMen[2]--;
UpdateStoreAztec();
}
if(Player[giverid][pMember] == 4)
{
GhettoMen[3]--;
UpdateStoreVagos();
}
if(Player[giverid][pMember] == 5)
{
GhettoMen[4]--;
UpdateStoreRifa();
}
Player[giverid][pMoney] += price;
Player[playerid][pMoney] -= price;
format(query, sizeof(query),"~r~-%d$",price);
GameTextForPlayer(playerid, query, 1000, 1);
format(query, sizeof(query),"Вы купили территорию для своей банды у лидера %s за {00cc00}%d$", Player[giverid][pName], price);
SCM(playerid, 0x0099FFAA, query);
format(query, sizeof(query),"%s принял Ваше предложение.", Player[playerid][pName]);
SCM(giverid, 0x00CC00AA, query);
format(query, sizeof(query),"%s купили территорию у банды %s", GetGangName(Player[playerid][pLeader]), GetGangName(GZInfo[idterr][gMemberZone]));
SendGhettoMessage(0xFF6600AA,query);
SendPlaySound(1139, 0.0, 0.0, 0.0);
GZInfo[idterr][gMemberZone] = Player[playerid][pLeader];
GangZoneStopFlashForAll(GZInfo[idterr][gID]);
GangZoneHideForAll(GZInfo[idterr][gID]);
GangZoneShowForAll(GZInfo[idterr][gID], GetGangZoneColor(idterr));
SaveZone(idterr);
GetPlayerTransfer[playerid] = INVALID_PLAYER_ID;
SetPVarInt(playerid,"sellzone",0);
GetPlayerOption[playerid] = 0;
GetPlayerOption1[playerid] = 0;
SetPVarInt(giverid,"yes",0);
SaveAll(playerid);
SaveAll(giverid); }
if(GetPVarInt(playerid, "sellsim") == 0) return SCM(playerid, COLOR_GRAD, "Вам не ничего не предлагали");
{
if(GetDistanceBetweenPlayers(playerid, GetPlayerTransfer[playerid]) > 6 ||
GetPlayerVirtualWorld(playerid) != GetPlayerVirtualWorld(GetPlayerTransfer[playerid]))
return SCM(playerid, COLOR_GRAD, "Игрок слишком далеко от Вас.");
new price = GetPlayerOption[playerid];
new giverid = GetPlayerTransfer[playerid];
Player[giverid][pMoney] += price;
Player[playerid][pMoney] -= price;
new PlayerID = GetPlayerTransfer1 [playerid];
Player[playerid][pPhone] = Player[PlayerID][pPhone];
Player[PlayerID][pPhone] = 0;
format(query, sizeof(query),"%s продал Вам SIM-карту с номером {FFFF00}%d {00CC00}за %d$", Player[playerid][pName],Player[playerid][pPhone],price); SCM(playerid, COLOR_GREEN, query); PlayerPlaySound(playerid, 1137, 0.0, 0.0, 0.0); format(query,sizeof(query), "Вы продали свою SIM-карту с номером {FFFF00}%d {00CC00}игроку %s за %d$",Player[playerid][pPhone],Player[playerid][pName],price); SCM(giverid, 0x00CC00AA, query); format(query, sizeof(query),"~r~-%d$",price);
GameTextForPlayer(playerid, query, 1000, 1);
if(Player[playerid][pPhone] == 1) Player[playerid][pPhone] = 0;
GetPlayerTransfer[playerid] = INVALID_PLAYER_ID;
GetPlayerOption[playerid] = 0;
SetPVarInt(playerid,"sellsim",0);
SetPVarInt(giverid,"yes",0);
SaveAll(playerid);
SaveAll(giverid);
}
if(GetPVarInt(playerid,"ticket") == 0) return SCM(playerid, COLOR_GRAD, "Вам не ничего не предлагали");
{
new summa = GetPlayerOption[playerid];
new giverid = GetPlayerTransfer[playerid];
if(GetDistanceBetweenPlayers(playerid, giverid) > 10 || GetPlayerVirtualWorld(playerid) != GetPlayerVirtualWorld(giverid))
return SCM(playerid, COLOR_GRAD, "Игрок слишком далеко от Вас.");
if(Player[playerid][pMoney] < summa) return SCM(playerid,COLOR_GRAD, "У Вас недостаточно денег.");
PlayerPlaySound(playerid, 17000, 0.0, 0.0, 0.0);
Player[giverid][pMoney] += summa;
Player[playerid][pMoney] -= summa;
format(query, sizeof(query),"~r~-%d$",summa);
GameTextForPlayer(playerid, query, 1000, 1);
format(query, sizeof(query),"Вы оплатили штраф на %d$ выписанный от сотрудника полиции %s",summa,Player[giverid][pName]);
SCM(playerid, 0x0099FFAA, query);
format(query, sizeof(query),"%s оплатил Ваш штраф.", Player[playerid][pName]);
SCM(giverid, 0x00CC00AA, query);
GetPlayerTransfer[playerid] = INVALID_PLAYER_ID;
SetPVarInt(playerid,"ticket",0);
GetPlayerOption[playerid] = 0;
SetPVarInt(giverid,"yes",0);
}
}
}

И зачем было так измываться над табуляцией? От сжатости кода производительность не зависит.

И как ты так сделал, что у тебя и return прямо в if, и код в блоке кода?

Danny Marcelo
11.05.2020, 09:48
С табуляцией всё нормально, это на форуме я с редактированием текста намудрил. Проблема не в этом коде, я пробовал закомментировать полностью public OnPlayerKeyStateChange, проблема не ушла от этого, самое странное, что больше то ничего в моде не менял, что это за ошибка странная? И гуглил, ничего не нашёл, может в dc_cmd что то упустил? Хотя по сути, до редактирования паблика с клавишами все команды работали.

Вот полностью данный паблик: https://pastebin.com/ULcSeWQe

SteveStage
11.05.2020, 09:52
[PHP и [COLOR надо заканчивать фигурной скобкой, у тебя сейчас вместо PHP кода обычный спойлер.

Danny Marcelo
11.05.2020, 10:03
[PHP и [COLOR надо заканчивать фигурной скобкой, у тебя сейчас вместо PHP кода обычный спойлер.

Всё, отредактировал, для удобства скинул на pastebin

SteveStage
11.05.2020, 11:04
Попробовал ситуацию воспроизвести - все нормально у меня:

cmd:kas(playerid)
{
new
str[5] = "aabc",
string[128+1];
format(string, sizeof(string), "%d$%s", 15, str);
SCM(playerid, 0x00C0FFAA, string);
return true;
}

http://ihost.pro-pawn.ru/image.php?di=7U7I

Значит дело точно не в коде отображения, а возможно в специфике dc_cmd.

Хотя то что все сработало - очевидно, ибо этот код вполне корректный.

- - - Добавлено - - -

Кстати, скиньте все свои дефайны и массивы из кода (вроде GetPlayerOption, GetPlayerOption1).

Возможно тут COLOR_GRAD1 - опечатка:

if(PlayerInfo[playerid][pMoney] < price) return SendClientMessage(playerid,COLOR_GRAD1, "У Вас недостаточно денег");

Danny Marcelo
11.05.2020, 11:34
Попробовал ситуацию воспроизвести - все нормально у меня:




cmd:kas(playerid)
{
&nbsp;&nbsp;&nbsp;&nbsp;new
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str[5] = "aabc",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string[128+1];
&nbsp;&nbsp;&nbsp;&nbsp;format (http://wiki.pro-pawn.ru/wiki/format)(string, sizeof(string), "%d$%s", 15, str);
&nbsp;&nbsp;&nbsp;&nbsp;SCM(playerid, 0x00C0FFAA, string);
&nbsp;&nbsp;&nbsp;&nbsp;return true;
}





http://ihost.pro-pawn.ru/image.php?di=7U7I

Значит дело точно не в коде отображения, а возможно в специфике dc_cmd.

Хотя то что все сработало - очевидно, ибо этот код вполне корректный.

- - - Добавлено - - -

Кстати, скиньте все свои дефайны и массивы из кода (вроде GetPlayerOption, GetPlayerOption1).

Возможно тут COLOR_GRAD1 - опечатка:




if(PlayerInfo[playerid][pMoney] < price) return SendClientMessage (http://wiki.pro-pawn.ru/wiki/SendClientMessage)(playerid,COLOR_GRAD1, "У Вас недостаточно денег");





В общем вернул OnPlayerKeyStateChange в исходное состояние (благо резервный мод на OnPlayerCommandText остался), перевёл команду эту странную на dc_cmd, команды заработали, а вот чат нет.
https://pastebin.com/F4RRmW0T

- - - Добавлено - - -



new GetPlayerOption[MAX_PLAYERS];
new GetPlayerOption1[MAX_PLAYERS];
new GetPlayerOption2[MAX_PLAYERS];




CMD:cancel(playerid){ if(GetPVarInt(playerid, "yes") == 0) return SCM(playerid, COLOR_GRAD, !"Нет активных предложений"); GetPlayerTransfer1[playerid] = INVALID_PLAYER_ID; GetPlayerTransfer[playerid] = INVALID_PLAYER_ID; GetPlayerOption[playerid] = INVALID_PLAYER_ID; GetPlayerOption1[playerid] = INVALID_PLAYER_ID; GetPlayerOption2[playerid] = INVALID_PLAYER_ID; GetPlayerTransfer1[yesid[playerid]] = INVALID_PLAYER_ID; GetPlayerTransfer[yesid[playerid]] = INVALID_PLAYER_ID; GetPlayerOption[yesid[playerid]] = INVALID_PLAYER_ID; GetPlayerOption1[yesid[playerid]] = INVALID_PLAYER_ID; GetPlayerOption2[yesid[playerid]] = INVALID_PLAYER_ID; new string[55]; f("%s отозвал(а) своё предложение", Player[playerid][pName]); SCM(GetPlayerTransfer[playerid], 0xFF6600AA, string); yesid[playerid] = INVALID_PLAYER_ID; SetPVarInt(playerid, "yes", 0); return 1;}


Ну остальные в коде, который скинул на pastebin, ну и в OnPlayerConnect обнуляется вот эта
GetPlayerOption1[playerid] = false;

Вот эти



GetPlayerTransfer
GetPlayerTransfer1


Используются в командах с нажатием клавиш "Y" "N"

SteveStage
11.05.2020, 12:54
new GetPlayerOption[MAX_PLAYERS];
new GetPlayerOption1[MAX_PLAYERS];
new GetPlayerOption2[MAX_PLAYERS];


Ну остальные в коде, который скинул на pastebin, ну и в OnPlayerConnect обнуляется вот эта
GetPlayerOption1[playerid] = false;

Эм, а как ты присваиваешь GetPlayerOption1 значение false, если при создании она не является boolean?

Danny Marcelo
11.05.2020, 13:31
Эм, а как ты присваиваешь GetPlayerOption1 значение false, если при создании она не является boolean?

Ну это всё в моде по дефолту было) Я так понимаю, данную переменную удалить? Ну даже в принципе пока что не до оптимизации, тут уже вопрос откуда берётся данный текст, который на скриншоте? Я все инклуды посмотрел, мод, именно вместо любых слов пишется этот бред в чате, при этом включил логирование в "server_log", там отображается нормальный текст, который должен был отправиться на сервер

Danny Marcelo
12.05.2020, 03:24
Проблема актуальна

Danny Marcelo
12.05.2020, 10:40
Я не знаю как, но проблема решилась сама - собой. Я пытался 2 дня исправить, делая разные манипуляции в моде, но решилось это в итоге непонятно за счёт чего. Если вдруг снова появиться данная проблема, я отпишусь в данной теме! Просьба модераторам в течении недели не закрывать тему, пока точно не подтвердится, что проблема исчезла. Спасибо.

Danny Marcelo
12.05.2020, 12:24
Нет, ошибка снова появилась, ещё и клавиши не работают, только команды. Я вообще не пойму в чем дело!

Danny Marcelo
13.05.2020, 11:16
Видимо никто не знает что это такое и как это исправлять https://cdn.jsdelivr.net/gh/joypixels/[email protected]/png/64/1f623.png

Danny Marcelo
13.05.2020, 14:06
Всё проблема решена. Оказывается когда я упаковывал строки, загнался и нечайно форматируемые строки тоже запаковал. Спасибо человеку с ником "Shvide" за помощь и то что заметил такую мелочь. Тему можете закрывать/удалять на ваше усмотрение.