Вопросы

@Cawfee Здравствуйте. Не могли бы помочь? Взял с Аризоны крмп команду на увольнение гос.служащих, она доступна лишь Правительству и ФСБ, подогнал в другой серв крмп, и при вводе /demoute пишет что она доступна лишь ФСБ и Правительству. 

Даже ставил != вместо == в строке if(PI[playerid][pMember] == TEAM_FBI || PI[playerid][pMember] == TEAM_MERIA) return SendClientMessage(playerid,COLOR_RED, "Доступно только ФСБ и Правительству!");

 

Спойлер

CMD:demoute(playerid, params[])
{
    if(PI[playerid][pMember] == TEAM_FBI || PI[playerid][pMember] == TEAM_MERIA) return SendClientMessage(playerid,COLOR_RED, "Доступно только ФСБ и Правительству!");
    if(PI[playerid][pRank] < 3return SendClientMessage(playerid,COLOR_RED, "Ваш ранг слишком мал");
    //if(PlayerInfo[playerid][pLeader] == 0) return SendClientMessage(playerid,COLOR_RED, "Отказано в доступе! (Доступно только лидеру)");
    if(!IsPlayerConnected(playerid) ||  PlayerLogged[playerid]) return false;
    new id,string[200],reason[100];
    if(sscanf(params,"us[100]",playerid,reason)) return SendClientMessage(playerid,COLOR_RED, "Используйте: /demoute [id] [причина]");
    if(!ProxDetectorS(5.0, playerid, 1)) return SendClientMessage(playerid,COLOR_RED, "Вы далеко от игрока!");
    if(playerid == playerid) return SendClientMessage(playerid,COLOR_RED, "Вы можете уволить только гос.служащих!");
    /*if(PI[playerid][pLeader] > 0 ) return SendClientMessage(playerid,COLOR_RED, "Вы не можете уволить лидера");*/
    if(IsACop(playerid))
    {
        if(IsPlayerAttachedObjectSlotUsed(playerid, 8))RemovePlayerAttachedObject(playerid, 7);
    }
    PI[playerid][pMember] = 0;
    PI[playerid][pDCTime]=0;
    SendClientMessage(id,COLOR_WHITE,">> {FF6347} Местом спавна автоматически назначен ЖД Вокзал. Изменить место спавна >> /setspawn!");
    PI[playerid][pRank] = 0;
    UpdatePlayerData(playerid, "Rank", PI[playerid][pRank]);
    pSportZal[playerid]=0;
    TeamDuty[playerid] = false;
    format(string,sizeof(string),"{FFFFFF}%s выгнал вас из организации.\nПричина: %s",GetName(playerid), reason);
    SendClientMessage(id,COLOR_LIGHTBLUE,string);
    format(string,sizeof(string),"Вы выгнали %s. Причина: %s",GetName(playerid), reason);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
    format(string,sizeof(string),"[D]%s[%d] Уволил %s, Причина: %s",GetName(playerid),playerid,GetName(playerid), reason);
    SetPlayerColor(playerid,0xFDFCFC15);
    ResetPlayerWeaponsAC(playerid);
    SetPlayerArmour(playerid, 0);
    return true;
}

 

 

Отредактировано пользователем Cawfee

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

Вынес ваш вопрос и все его обсуждения в отдельную тему.

Поделиться сообщением


Ссылка на сообщение

46 ответов на этот вопрос

  • 0

@Caracal2222, следующей строкой вы назначаете игрока руководителем организации:

PI[неважно][pLeader] = PI[неважно][pMember] = fractionid;

А снимаете следующей строкой:

PI[неважно][pMember] = 0;

Не замечаете, что вы устанавливаете две переменные, а сбрасываете одну? И после этого удивляетесь, что вы по-прежнему числитесь в организации.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee Это из кода что выслал огромный или в самой команде demoute ?

Поделиться сообщением


Ссылка на сообщение
  • 0

@Caracal2222, мы решаем проблему с командой demoute, а не с обработчиками диалогов, связанных с выдачей прав лидера.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee Да это так, но вы просто писали скинуть диалоги, я и думал что еще речь об этом пока что. Я не знаю что там должно быть, если бы я писал мод то мб и знал какие там используются, говорил что я команду взял просто и переделал под свой, поменяв лишь переменные на те что используются у меня. Дабы избавиться от ошибок.  Что тогда делать, раз не та строчка

Отредактировано пользователем Caracal2222

Поделиться сообщением


Ссылка на сообщение
  • 0

@Caracal2222, я нигде не говорил этого:

7 минут назад, Caracal2222 сказал:

раз не та строчка

 

Я сказал следующее:

13 минут назад, Cawfee сказал:

вы устанавливаете две переменные, а сбрасываете одну

 

При выдаче прав лидера вы записываете значение новой организации в две переменные (pLeader и pMember), а при увольнении из организации аннулируете только pMember. Как насчет того, чтобы аннулировать pLeader?

Уточню. pMember содержит информацию о том, в какой организации состоит игрок, а pLeader - информацию о том, в какой организации игрок является лидером. При назначении игрока лидером организации в pMember и pLeader вы фактически занесли значение номера фракции. При увольнении игрока через demoute вы сбросили только значение pMember, но не тронули pLeader. В итоге игрок так и остался лидером организации. Именно эту ситуацию вы и описали здесь:

Цитата

на деле игрок остается в дпс, пока его через setleader не снимут 

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee ЧТо тогда нужно подправить ? Или добавить к Member - pLeader ? 

@Cawfee PI[playerid][pMember]  && PI[playerid][pLeader] !=0 тип того или что

Поделиться сообщением


Ссылка на сообщение
  • 0

@Caracal2222, я уже сказал, что нужно сделать. Глагол аннулировать предполагает присвоить значение 0.

 

7 минут назад, Cawfee сказал:

Как насчет того, чтобы аннулировать pLeader?

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee Добавить получается тоже самое, но вместо pMember - pLeader и также значение 0 ?

Отредактировано пользователем Caracal2222

Поделиться сообщением


Ссылка на сообщение
  • 0

@Caracal2222,

Только что, Caracal2222 сказал:

вместо pMember - pLeader

 

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

 

PI[id][pMember] = 0;
PI[id][pLeader] = 0;

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee Ну я и имел ввиду это. Сделал так и теперь все ровно. Но вот пока не перезайдет или не переспавнишь игрока (spawn 1 к примеру), костюм не пропадет с игрока,так и будет в дпс форме 

@Cawfee И все же текст почему выводится лишь тому кого увольняют, использовав ее выходит так,буд-то бы игрок(лидер) сам себя уволил. Прописал от имени Dima к примеру и на ак Pasha пришло в чате Pasha выгнал вас из организации с причиной и чуть ниже Вы выгнали Pasha с причиной 

Отредактировано пользователем Caracal2222

Поделиться сообщением


Ссылка на сообщение
  • 0

@Caracal2222 , я вам уже ответил насчет одежды.

 

Цитата

а почему одежда должна была измениться, если это не заложено в логике данной команды?


Если вы добавите функцию изменения одежды игрока, тогда она и изменится. Изменить можно через SetPlayerSkin.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee Я дополнил текст после сообщения об одежде

Поделиться сообщением


Ссылка на сообщение
  • 0

@Caracal2222, тогда жду от вас следующую информацию.

  1. Код команды из вашего мода (возьмите и скопируйте из мода, а не ссылайтесь на сообщения выше).
  2. Идентификатор аккаунта с именем Dima.
  3. Идентификатор аккаунта с именем Pasha.
  4. С какими параметрами вы вводите команду и на каком аккаунте.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee Вот что есть на данный момент, я добавил SetSkin при увольнении. 

2.Дима имеет например id на сервере 0, а Паша имеет id 1

От лица Dima (0 id) ввожу в чате /demoute 1 (Pasha) Причина 1(к примеру), после идет сообщение на аккаунт с ID 1 (Pasha)  о том что Pasha  выгнал вас из организации, ниже тоже самое но уже Вы выгнали Pasha. Хотя должно писаться так на аккаунте с ID 1 (Pasha): Dima выгнал вас из организации. Причина. А на ID 0 (Dima): Вы выгнали Pasha.Причина 

CMD:demoute(playerid, params[])
{
    if(PI[playerid][pMember] != TEAM_FBI && PI[playerid][pMember] != TEAM_MERIA) return SendClientMessage(playerid,COLOR_RED, "Доступно только ФСБ и Правительству!");
    if(PI[playerid][pRank] < 3return SendClientMessage(playerid,COLOR_RED, "Ваш ранг слишком мал");
    //if(PlayerInfo[playerid][pLeader] == 0) return SendClientMessage(playerid,COLOR_RED, "Отказано в доступе! (Доступно только лидеру)");
    new id,string[200],reason[100];
    if(sscanf(params,"us[100]",playerid,reason)) return SendClientMessage(playerid,COLOR_RED, "Используйте: /demoute [id] [причина]");
    if(!IsPlayerConnected(id) || !PlayerLogged[id]) return false;
    if(!ProxDetectorS(5.0, playerid, 1)) return SendClientMessage(playerid,COLOR_RED, "Вы далеко от игрока!");
    //if(playerid == playerid) return SendClientMessage(playerid,COLOR_RED, "Вы можете уволить только гос.служащих!");
    /*if(PI[id][pLeader] > 0 ) return SendClientMessage(playerid,COLOR_RED, "Вы не можете уволить лидера");*/
    if(IsACop(playerid))
    {
        if(IsPlayerAttachedObjectSlotUsed(playerid, 8))RemovePlayerAttachedObject(playerid, 7);
    }
    PI[playerid][pMember] = 0;
    PI[playerid][pLeader] = 0;
    PI[playerid][pDCTime]=0;
    SendClientMessage(playerid,COLOR_WHITE,">> {FF6347} Местом спавна автоматически назначен ЖД Вокзал. Изменить место спавна >> /setspawn!");
    PI[playerid][pRank] = 0;
    UpdatePlayerData(playerid, "Rank", PI[playerid][pRank]);
    pSportZal[playerid]=0;
    TeamDuty[playerid] = false;
    format(string,sizeof(string),"{FFFFFF}%s выгнал вас из организации.\nПричина: %s",GetName(playerid), reason);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
    format(string,sizeof(string),"Вы выгнали %s. Причина: %s",GetName(playerid), reason);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
    //format(string,sizeof(string),"[D]%s[%d] Уволил %s, Причина: %s",GetName(playerid),playerid,GetName(playerid), reason);
    SetPlayerColor(playerid,0xFDFCFC15);
    ResetPlayerWeaponsAC(playerid);
    SetPlayerArmour(playerid, 0);
    SetPlayerSkin(playerid, 299);
    return true;
}

 

Отредактировано пользователем Caracal2222

Поделиться сообщением


Ссылка на сообщение
  • 0

@Caracal2222, во всех командах, приведенных выше, вывод текста осуществлялся следующим образом:

format(string,sizeof(string),"{FFFFFF}%s выгнал вас из организации.\nПричина: %s",GetName(playerid), reason);
SendClientMessage(id,COLOR_LIGHTBLUE,string);
format(string,sizeof(string),"Вы выгнали %s. Причина: %s",GetName(id), reason);
SendClientMessage(playerid,COLOR_LIGHTBLUE,string);

Вы же сделали это следующим образом, никому не сообщив, и теперь требуете здесь объяснений, почему у вас не работает.

format(string,sizeof(string),"{FFFFFF}%s выгнал вас из организации.\nПричина: %s",GetName(playerid), reason);
SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
format(string,sizeof(string),"Вы выгнали %s. Причина: %s",GetName(playerid), reason);
SendClientMessage(playerid,COLOR_LIGHTBLUE,string);

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee То что выше, где id указано у меня не работает. Тк такого нет с ID в самом моде, используется playerid соответственно я поменял на playerid,во вторых с этими изменениями (playerid) я и кидал 

@Cawfee Щас попробую вернуть исходное  с ID значениями  format(string,sizeof(string),"{FFFFFF}%s выгнал вас из организации.\nПричина: %s",GetName(playerid), reason); SendClientMessage(id,COLOR_LIGHTBLUE,string); format(string,sizeof(string),"Вы выгнали %s. Причина: %s",GetName(id), reason); SendClientMessage(playerid,COLOR_LIGHTBLUE,string);

Отредактировано пользователем Caracal2222

Поделиться сообщением


Ссылка на сообщение
  • 0

@Caracal2222, ну, конечно, вы убрали ото всюду переменную id, а теперь говорите, что ее нет. @Sleash изначально вам дал полностью рабочий код, который вы испортили везде, где только можно, и теперь ждете, что это заработает.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee Все может быть. Вернул исход 

format(string,sizeof(string),"{FFFFFF}%s выгнал вас из организации.\nПричина: %s",GetName(playerid), reason);
SendClientMessage(id,COLOR_LIGHTBLUE,string);
format(string,sizeof(string),"Вы выгнали %s. Причина: %s",GetName(id), reason);
SendClientMessage(playerid,COLOR_LIGHTBLUE,string);

Теперь от лица Dima(0 id) идет так в чате: Дима выгнал вас из организации, а на ID 1 (Pash) высвечивается в чате: Вы выгнали Dima 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee Настроил как надо, куча времени убил. Теперь надпись Уволил и Вы уволили появляется так как положено. Есть другой вопрос, хоть и нельзя новый вопрос в старом задавать, но все же, у меня при регистрации выдаются автоматом все лицензии(водительские, воздушные и тд), я уже не знаю что еще делать, но я нашел pLic там где указано 1 вместо 0, заменил на 0 и они все равно выдаются во время регистрации ака, как отключить можно ?

Поделиться сообщением


Ссылка на сообщение
  • 0

@Caracal2222, отключить можно путем нахождения фрагмента кода, связанного с выдачей лицензий, и его изменения. Где у вас этот фрагмент и как он выглядит я не знаю. Если не найдете в коде, смотрите в базе данных (возможно, лицензии вписаны как значение по умолчанию).

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee Хорошо, попробую поискать. А с sampvoice помочь сможете ? По нему я другой вопрос открыл 

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • fresko241
      От fresko241
      Привет, я только обучаюсь разработке. Хочу узнать у меня есть радио, музыка играет. Но как можно сделать чтобы музыка играла только в машине и слышна была и людям которые возле нее.


       
      CMD:radio(playerid,params[])
      {
              ShowPlayerDialog(playerid,150,DIALOG_STYLE_LIST,"Включить радио","[1] Кайф ты поймала\n[2] Седая ночь\n[3] Руки вверх ай яй яй\n[4] Radio ZaycevFM\n","Выбрать","Отмена");
      }
      CMD:radiostop(playerid,params[])
      {
              if(!IsValidObject(3)) return SendClientMessage(playerid,0xff0000AA,"Вы не включали радио");
          RemovePlayerAttachedObject(playerid, 3);
          StopAudioStreamForPlayer(playerid);
          SendClientMessage(playerid,0xff0000AA,"Вы сняли наушники и выключил плеер.");
          return 1;
      }