Рекомендованные сообщения



11 posts in this topic

Здравствуйте, у меня на сервере движок ZC_MD, sscanf. 

На днях сделал команду, но она работает не правильно. При выдаче блокировке в оффлайне указывает не верную причину и кол-во дней.

 

Спойлер

CMD:offban(playerid,params[])
{
    if(Login[playerid]==0) return false;
    if(PInfo[playerid][pAdmin] < 3) return false;
    if(!IsPlayerConnected(playerid)) return false;
    new name[24], days, banreason[20];
    if(sscanf(params, "s[32]s()", name, days, banreason)) return SCM(playerid,COLOR_VLADISLAVTIROFLISH, "Èñïîëüçóéòå: /offbarn [Íèê èãðîêà] [Ïðè÷èíà]");
      SetPVarString(playerid,"OffBanReason", banreason); // Ïðèñâàâàåì ïðè÷èíó ê PVar
       SetPVarInt(playerid,"OffBanDay", days); // Ïðèñâàèâàåì äíè ê PVar
    if(PInfo[params[0]][pAdmin] >= PInfo[playerid][pAdmin]) return SCM(playerid,COLOR_RED, "Âû íå ìîæåòå çàáëîêèðîâàòü àäìèíèñòðàòîðа!");
    format(Text, 200,"SELECT `pName` FROM `users` WHERE `pName` = '%s'", name);
    mysql_function_query(ConnectBD, Text, true, "CheckOffBan","dss", playerid, banreason);
    return true;
}

 

Помогите.

 

Edited by odosenok
Причина: занес код в соответствующий тег.

Share this post


Link to post
Share on other sites

@Vladislavmap191 функцию CheckOffBan скиньте

Share this post


Link to post
Share on other sites
Спойлер

forward CheckOffBan(playerid, string[], banreason[]);
public CheckOffBan(playerid, string[], banreason[])
{
    new rows[2];
    cache_get_data(rows[0], rows[1]);
    if(rows[0])
    {
        new reason[32];
        GetPVarString(playerid,"OffBanReason",reason,sizeof(reason)); // Достаём причину из PVar
        GetPVarInt(playerid,"OffBanDay");
        format(Text, 456, "UPDATE `users` SET `BDAYS` = '%d', `pBan` = '1', `pBanReason` = '%s', `pBanWho` = '%s' WHERE `pName` = '%s'", GetPVarInt(playerid,"OffBanDay"), reason, PInfo[playerid][pName] ,string);
        QueryEmpty(ConnectBD, Text);
        format(Text, 256, "UPDATE `users` SET `GIVEBAN` = CURDATE() WHERE `pName` = '%s'", string);
        QueryEmpty(ConnectBD, Text);
        format(Text, 256, "UPDATE `users` SET `GIVEDBAN` = CURDATE() WHERE `pName` = '%s'", string);
        QueryEmpty(ConnectBD, Text);
        format(Text, 256, "UPDATE `users` SET `LOSTBAN` = (CURDATE() + INTERVAL '%d' DAY) WHERE `pName` = '%s'", GetPVarInt(playerid,"OffBanDay"), string);
        QueryEmpty(ConnectBD, Text);
        format(Text, 256, "UPDATE `users` SET `BDAYS`=DATEDIFF(`LOSTBAN`, `GIVEDBAN`) WHERE `pName` = '%s'", string);
        QueryEmpty(ConnectBD, Text);
        format(Text, 128, "Администратор %s[%d] забанил игрока %s на %d дней в оффлайне. Причина: %s", PInfo[playerid][pName],playerid, string, GetPVarInt(playerid,"OffBanDay"), reason);
        SendClientMessageToAll(0xFF6347AA,Text);
        format(Text,sizeof(Text),"[OFF-BAN] Администратор %s[%d] забанил игрока %s на %d дней в оффлайне. Причина: %s",PInfo[playerid][pName],playerid, string, GetPVarInt(playerid,"OffBanDay"),reason);
         DeletePVar(playerid,"OffBanReason"); // Удаляем PVar
        DeletePVar(playerid,"OffBanDay"); // Удаляем PVar
    }
    else
    {
        SCM(playerid, -1,"Аккаунт игрока не найден!");
    }
    return 1;
}

 

 

Edited by odosenok
Причина: занес код в соответствующий тег

Заметка от Jawn , создано

Просмотрите внимательно тему с руководством по публикации большого кода.

Share this post


Link to post
Share on other sites

@Vladislavmap191 предпоследнюю строчку в команде /offban замените: 

mysql_function_query(ConnectBD, Text, true, "CheckOffBan","dss", playerid, name, banreason);

 

Share this post


Link to post
Share on other sites

Теперь он пишет, то что аккаунты на найдены. Хотя они есть.

Share this post


Link to post
Share on other sites

@Vladislavmap191 теперь в конце команды перед return добавить следующую строку: 

printf("DEBUG /offban: Name: %s, Reason: %s, Days: %d", name, banreason, days); 

После на сервере введите команду, а логи скиньте сюда. 

Share this post


Link to post
Share on other sites
Спойлер

13:23:39] sscanf warning: Strings without a length are deprecated, please add a destination size.
[13:23:39] sscanf warning: Unknown format specifier '(', skipping.
[13:23:39] sscanf warning: Unknown format specifier ')', skipping.
[13:23:39] sscanf warning: Format specifier does not match parameter count.
[13:23:39] DEBUG /offban: Name: 0, Reason: , Days: 51
[13:23:43] [chat] [Artem_Makeyvskiy]: анименчик
[13:24:04] [chat] [Vlad_Naumov]: он afk
[13:24:06] [chat] [Artem_Makeyvskiy]: почему когда тебя не было сервер был назван типо ОБТ
[13:24:21] [chat] [Vlad_Naumov]: Сори пж я серьёзн себе хотел дать хп
[13:24:48] [chat] [Vlad_Naumov]: Извиняешь?
[13:25:02] [chat] [Artem_Makeyvskiy]: уйди
[13:25:03] [chat] [Vlad_Naumov]: Баг?
[13:25:11] [chat] [Vlad_Naumov]: Отойдика
[13:25:22] [chat] [Artem_Makeyvskiy]: я на самый верх залазил
[13:25:24] [chat] [Vlad_Naumov]: Это не баг.

 

Edited by Vladislavmap191

Share this post


Link to post
Share on other sites
if(sscanf(params, "s[24]ds[20]", name, days, banreason)) return SCM(playerid,COLOR_VLADISLAVTIROFLISH, "Èñïîëüçóéòå: /offbarn [Íèê èãðîêà] [Ïðè÷èíà]");

замените свою строку этой в команде /offban

Share this post


Link to post
Share on other sites

@DEST Спасибо большое, проблема решилась. Можешь еще помочь с выдачей варна оффлайн?

Спойлер

CMD:offwarn(playerid,params[])
{
    if(Login[playerid]==0) return false;
    if(PInfo[playerid][pAdmin] < 3) return false;
    if(!IsPlayerConnected(playerid)) return false;
    new banreason[20];
    if(sscanf(params, "s[32]s()", params[0],banreason)) return SCM(playerid,COLOR_VLADOS , "Èñïîëüçóéòå: /offwarn [Íèê èãðîêà] [Ïðè÷èíà]");
    if(PInfo[params[0]][pAdmin] >= PInfo[playerid][pAdmin]) return SCM(playerid,COLOR_RED, "Âû íå ìîæåòå ïðèìåíèòü ýòî äåéñòâèå ê àäìèíèñòðàòîðó!");
    format(Text, 200,"SELECT `pName` FROM `users` WHERE `pName` = '%s'", params[0]);
    mysql_function_query(ConnectBD, Text, true, "CheckOffBan","dss", playerid, banreason);
    return true;
}

 

Share this post


Link to post
Share on other sites

@Vladislavmap191 Для каждого вопроса - новая тема. Если эта проблема решена, пометьте сообщение, которое Вам помогло галочкой и создайте новую тему для нового вопроса. 

Выдержка из правил форума: 

Цитата

2.8. Если вы нашли ответ на свой вопрос, рекомендуется поощрить автора лучшего ответа поднятием репутации, а также обязательно пометить ответ на вопрос лучшим. 

 

Share this post


Link to post
Share on other sites

Спасибо, проблема решилась. Можно закрывать тему.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • .037
      By .037
      в чём может быть проблема? Передаю строку через PR_String, и получаю с клиента бред
      CMD:TestData(playerid, params[]){ new msg[] = "Code_Test"; new BitStream:bs = BS_New(); BS_WriteInt8(bs,30); BS_WriteFloat(bs,0.9); BS_WriteFloat(bs,23.4); BS_WriteString(bs, msg, sizeof msg); PR_SendRPC(bs, playerid, 179); BS_Delete(bs); return 1; } [05:57:27] RPC - Длина  30 | 0.900000 | 23.400000 | I*(!@dp
      И всегда текст разный 

      Хотя принимаю всё нормально:

       
      bool CALLBACK Hok_RPC_BYTE(stRakNetHookParams *params) { if (params->packetId == 179) { SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "Кастомный RPC работает!!!"); byte nameLen; float test; float test1; char szPlayerName[100]; params->bitStream->ResetReadPointer(); params->bitStream->Read(nameLen); params->bitStream->Read(test); params->bitStream->Read(test1); params->bitStream->Read(szPlayerName, 100); params->bitStream->ResetReadPointer(); SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "RPC - Длина %d | %f | %f | %s", nameLen, test , test1, szPlayerName); } return true; };