Форум

Страница 1 из 11
Модератор форума: dr40 
Форум | www.SAMP-TEAM.com » Wiki SA-MP » Вопросы по скриптингу » Сообщение в чат при вводе команды
Сообщение в чат при вводе команды
Помогите пожалуйста чуть переделать команду /mute, чтобы при их использовании было все видно игрокам.
Вот команда:
Код

else if(strcmp(cmd, "/mute", true) == 0)
  {
   if (PINFO[playerid][pAdminLVL] < 1) return SendMe(playerid, CGRADD, YouCanNot);
   tmp = strtok(cmdtext, idx);
   if(!strlen(tmp)) return SendMe(playerid, 0x00D900C8, "- Подсказка:{FFFFFF} /mute [ID] [минуты]");
   new mtime;
   giveplayerid = ReturnUser(tmp);
   if (!IsPlayerConnected(giveplayerid)) return SendMe(playerid, CGRADD, NotFoundID);
   if(gPlayerLogged[giveplayerid] == false) return SendMe(playerid, CGRADD, NoLogin);
   if(PINFO[giveplayerid][pMuted] == false)
   {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) return SendMe(playerid, 0x00D900C8, "- Подсказка:{FFFFFF} /mute [ID] [минуты]");
    mtime = strval(tmp);
    if(GetPlayerState(giveplayerid) != 1 && GetPlayerState(giveplayerid) != 2 && GetPlayerState(giveplayerid) != 3) return SendMe(playerid, CGRADD, NoLogin);
    PINFO[giveplayerid][pMuted] = true;
    PINFO[giveplayerid][pMuteTime] = mtime*60;
    format(string, sizeof(string), "%s получил(a) молчанку от администратора %s на %i минут(ы), причина: %s.",GN(giveplayerid) ,GN(playerid));
    SendClientMessageToAll(COLOR_LIGHTRED, string);
    SendMes(giveplayerid, -1, "Вы получили молчанку на %i мин. Молчанка снимется автоматически по истечению времени.",mtime);
   }
   else
   {
    format(string, sizeof(string), "Администратор %s снял молчанку у %s. ",GN(playerid),GN(giveplayerid));
    SendClientMessageToAll(COLOR_LIGHTRED, string);
    PINFO[giveplayerid][pMuted] = false;
    PINFO[giveplayerid][pMuteTime] = 0;
   }
   return true;
  }

Нужно сюда добавить причину, по которой дали молчанку, чтобы в чате писалось "%s получил(a) молчанку от администратора %s на %i минут(ы), причина: %s.", и еще, кога время молчанки прошло, в чат всем писалось типа "%s теперь может разговаривать!";
02.08.2014 в 03:58
Для подобных команд советую пользоваться zcmd+sscanf, т.к. будет меньше возни с переменными.

Где-то вверху к переменным:

Код
new mTimer[MAX_PLAYERS];


Код


else if(strcmp(cmd, "/mute", true) == 0)  
   {  
    if(PINFO[playerid][pAdminLVL] < 1) return SendMe(playerid, CGRADD, YouCanNot);  
    tmp = strtok(cmdtext, idx);  
    tmp2 = strtok(cmdtext, idx);  
    if(!strlen(tmp)) return SendMe(playerid, 0x00D900C8, "- Подсказка:{FFFFFF} /mute [ID] [минуты] [причина]");  
    if(!strlen(tmp2)) return SendMe(playerid, 0x00D900C8, "- Подсказка:{FFFFFF} /mute [ID] [минуты] [причина]");  
    new mtime;  
    giveplayerid = ReturnUser(tmp);  
    if(!IsPlayerConnected(giveplayerid)) return SendMe(playerid, CGRADD, NotFoundID);  
    if(gPlayerLogged[giveplayerid] == false) return SendMe(playerid, CGRADD, NoLogin);  
    if(PINFO[giveplayerid][pMuted] == false)  
    {  
     tmp = strtok(cmdtext, idx);  
     tmp2 = strtok(cmdtext, idx);  
     mtime = strval(tmp);  
     mreasn = tmp2;
     if(GetPlayerState(giveplayerid) != 1 && GetPlayerState(giveplayerid) != 2 && GetPlayerState(giveplayerid) != 3) return SendMe(playerid, CGRADD, NoLogin);  
     PINFO[giveplayerid][pMuted] = true;  
     PINFO[giveplayerid][pMuteTime] = mtime*60000;  
     mTimer[giveplayerid] = SetTimer("unmute",PINFO[giveplayerid][pMuteTime],false);
     format(string, sizeof(string), "%s получил(a) молчанку от администратора %s на %i минут(ы), причина: %s.",GN(giveplayerid) ,GN(playerid),mtime,mreasn);  
     SendClientMessageToAll(COLOR_LIGHTRED, string);  
     SendMes(giveplayerid, -1, "Вы получили молчанку на %i мин. Молчанка снимется автоматически по истечению времени.",mtime);  
    }  
    else  
    {  
     format(string, sizeof(string), "Администратор %s снял молчанку у %s. ",GN(playerid),GN(giveplayerid));  
     SendClientMessageToAll(COLOR_LIGHTRED, string);  
     PINFO[giveplayerid][pMuted] = false;  
     PINFO[giveplayerid][pMuteTime] = 0;  
     KillTimer(mTimer[giveplayerid]);
    }  
    return true;  
   }  



Куда-то вниз, желательно к таймерам

Код


forward unmute();
public unmute()
{
//сообщение о том, что игрок может писать в чат
PINFO[giveplayerid][pMuted] = false;  
PINFO[giveplayerid][pMuteTime] = 0;  
return 1;
}



Пробуй компилировать, если не будет хватать переменных, просто создай их.
02.08.2014 в 12:49
Я так и не понял. Можно было создать переменную для строчки..Пример
Код
result[64];

А там уже всё понятно
02.08.2014 в 12:57
Кстати. Мой совет.. Как я учился по этим командам..
Я брал команду допустим /warn и менял переменные biggrin
02.08.2014 в 13:00
Да, было много ошибок, поставил пару new
(new tmp[256];
new tmp2[256];
new mreasn[256];
new giveplayerid;)
, но все равно несколько ошибок есть:
Код

C:\Users\D\Desktop\Average\gamemodes\TRP.pwn(26556) : warning 219: local variable "tmp" shadows a variable at a preceding level
C:\Users\D\Desktop\Average\gamemodes\TRP.pwn(26559) : warning 219: local variable "giveplayerid" shadows a variable at a preceding level
C:\Users\D\Desktop\Average\gamemodes\TRP.pwn(38933) : error 017: undefined symbol "giveplayerid"
C:\Users\D\Desktop\Average\gamemodes\TRP.pwn(38934) : error 017: undefined symbol "giveplayerid"
Pawn compiler 3.2.3664     Copyright (c) 1997-2006, ITB CompuPhase

2 Errors.

И еще: попробовал вот это: format(string, sizeof(string),0xC2A2DAAA "[RP]American: %s теперь может разговаривать!",plnameee, i);добавить в
Код

forward unmute();  
public unmute()  
{  
//сообщение о том, что игрок может писать в чат  
  PINFO[giveplayerid][pMuted] = false;   
  PINFO[giveplayerid][pMuteTime] = 0;   
return 1;  
}

, так еще ошибки есть.. Как это можно туда добавить? smile
02.08.2014 в 14:57
Если так, то таймер нужно немного переделать

Код


else if(strcmp(cmd, "/mute", true) == 0)   
    {   
     if(PINFO[playerid][pAdminLVL] < 1) return SendMe(playerid, CGRADD, YouCanNot);   
     tmp = strtok(cmdtext, idx);   
     tmp2 = strtok(cmdtext, idx);   
     if(!strlen(tmp)) return SendMe(playerid, 0x00D900C8, "- Подсказка:{FFFFFF} /mute [ID] [минуты] [причина]");   
     if(!strlen(tmp2)) return SendMe(playerid, 0x00D900C8, "- Подсказка:{FFFFFF} /mute [ID] [минуты] [причина]");   
     new mtime;   
     giveplayerid = ReturnUser(tmp);   
     if(!IsPlayerConnected(giveplayerid)) return SendMe(playerid, CGRADD, NotFoundID);   
     if(gPlayerLogged[giveplayerid] == false) return SendMe(playerid, CGRADD, NoLogin);   
     if(PINFO[giveplayerid][pMuted] == false)   
     {   
      tmp = strtok(cmdtext, idx);   
      tmp2 = strtok(cmdtext, idx);   
      mtime = strval(tmp);   
      mreasn = tmp2;  
      if(GetPlayerState(giveplayerid) != 1 && GetPlayerState(giveplayerid) != 2 && GetPlayerState(giveplayerid) != 3) return SendMe(playerid, CGRADD, NoLogin);   
      PINFO[giveplayerid][pMuted] = true;   
      PINFO[giveplayerid][pMuteTime] = mtime*60000;   
      mTimer[giveplayerid] = SetTimerEx("unmute",PINFO[giveplayerid][pMuteTime],false,"i",giveplayerid);  
      format(string, sizeof(string), "%s получил(a) молчанку от администратора %s на %i минут(ы), причина: %s.",GN(giveplayerid) ,GN(playerid),mtime,mreasn);   
      SendClientMessageToAll(COLOR_LIGHTRED, string);   
      SendMes(giveplayerid, -1, "Вы получили молчанку на %i мин. Молчанка снимется автоматически по истечению времени.",mtime);   
     }   
     else   
     {   
      format(string, sizeof(string), "Администратор %s снял молчанку у %s. ",GN(playerid),GN(giveplayerid));   
      SendClientMessageToAll(COLOR_LIGHTRED, string);   
      PINFO[giveplayerid][pMuted] = false;   
      PINFO[giveplayerid][pMuteTime] = 0;   
      KillTimer(mTimer[giveplayerid]);  
     }   
     return true;   
    }   



Код


forward unmute(giveplayerid);   
public unmute(giveplayerid)   
{   
   new unmtstr[192],gpname[32];
   GetPlayerName(giveplayerid,gpname,sizeof(gpname));
   format(unmtstr,sizeof(unmtstr),"{C2A2DA} "[RP]American: %s теперь может разговаривать!",gpname);
   SendClientMessageToAll(-1,unmtstr);
   PINFO[giveplayerid][pMuted] = false;    
   PINFO[giveplayerid][pMuteTime] = 0;    
   KillTimer(mTimer[giveplayerid]);
return 1;   
}  

02.08.2014 в 15:42
Спасибо, получилось. Теперь вот: обычно на сервах при заходке двигателя машины, он сразу заводится, а как сделать чтобы он рандомно завелся/не завелся? Вот, например, сажусь в машину, завожу двигатель, в близкий чат пишет "%s повернул ключ и пытается завести двигатель, потом рандомно выберает завелся/не завелся ли двигатель, и пишет также в чат: %s завел двигатель/У %s не получилось завести двигатель. Кстати еще когда здоровье машины меньше 20%, то при попытке завести двигатель всегда писало "У %s не получилось завести двигатель". Как это все сделать? smile
P.S. И еще, если машина ударилась о какое-либо препятствие, то чтобы отключался двигатель с сообщением в чат: Машина повреждена, двигатель отключен
02.08.2014 в 17:49
http://www.samp-team.com/forum/50-7879-1#38452
Вот там глянь)
Насчет машины.. при 20%
Код

new Float:Vehp;
new veh = GetPlayerVehicleID(playerid);
GetVehicleHealth(veh,Vehp);
if(Vehp < 450) // Не помню сколько HP у машины когда она дымит   
{
        SendClientMessage(playerid, COLOR_WHITE, "Не удалось завести двигатель"); // COLOR_WHITE - Замени на свой цвет,или же код цвета поставь)
        EngineState[carid] = false; // Насчет этого не знаю какая у тебя там система
}
02.08.2014 в 17:53
Лучше скинь команду /en, ну или какая она у тебя там чтобы завести двигатель
02.08.2014 в 18:14
Пример простого рандомного включения двигателя
Код

if(random(3) == 2))//если число из рандома совпадает с числом 2, тоесть двигатель будет включатся в 33% случае вероятности
{
//включение двигателя с сообщением   
}
else //вывод сообщения, что двигатель не завелся
02.08.2014 в 18:34
Форум | www.SAMP-TEAM.com » Wiki SA-MP » Вопросы по скриптингу » Сообщение в чат при вводе команды
Страница 1 из 11
Поиск: