Luke_Parker
Новичок
Здравствуйте. Видимо, никто не замечал баг с выдачей звезд, так как не были заданы вопросы, например, "Вроде, дал 6 звезд, а в /wanted показывает 9. Как исправить?". Ладно, приступим сначала к рассмотрению команды /su, я взял ее из PIv5.0, так как в своем моде этот баг давно исправил, а искать rls не стал:
Тут, вроде, все нормально, но заметить, что здесь есть public SetPlayerCriminal, в котором мы не знаем, что происходит. Давайте рассмотрим его:
Тут, как вы видите, тоже дают звезды, поэтому у вас вместо того, чтобы дать 6 звезд, дает 9. Чтобы исправить данный баг, я подумал, что лучше удалить выдачу звезд в команде, а не public'е. Получается такой вид команды:
А public SetPlayerCriminal замените на этот:
Автор: Luke_Parker.
Данный мануал для rls.
PHP:
if(strcmp(cmd, "/suspect", true) == 0 || strcmp(cmd, "/su", true) == 0)
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "::: Введите: (/su)spect [id] [преступление]");
giveplayerid = ReturnUser(tmp);
if (PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pLeader] == 1 || PlayerInfo[playerid][pMember] == 10 || PlayerInfo[playerid][pLeader] == 10 || PlayerInfo[playerid][pMember] == 21 || PlayerInfo[playerid][pLeader] == 21 || PlayerInfo[playerid][pMember] == 2 || PlayerInfo[playerid][pLeader] == 2)
{
if(IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
if(PlayerInfo[giveplayerid][pJailed] == 0)
{
if(WantedPoints[giveplayerid] >= 6) return SendClientMessage(playerid, COLOR_GREY, "У данного игрока уже 6 уровней розыска!");
if (IsACop(giveplayerid)) return SendClientMessage(playerid, COLOR_GRAD2, "Вы не можете давать розыск законникам!");
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result)) return SendClientMessage(playerid, COLOR_WHITE, "::: Введите: (/su)spect [id] [преступление]");
//if(WantedPoints[giveplayerid] == 0) { WantedPoints[giveplayerid] = 1; }
//else { WantedPoints[giveplayerid]++; }
//WantedPoints[giveplayerid];
WantedPoints[giveplayerid]++;
PlayerInfo[giveplayerid][pZvezdi]+=1;
SetPlayerCriminal(giveplayerid,playerid, result);//
return 1;
}
else
{
SendClientMessage(playerid, COLOR_GRAD2, "Этот Человек в тюрьме!");
}
}
}
else
{
SendClientMessage(playerid, COLOR_GREY, "[Ошибка] Человек не найден!");
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD2, "Вы не член Полиция/ФБР!");
}
return 1;
}
PHP:
public SetPlayerCriminal(playerid,declare,reason[])
{
if(logs == 1)
{
printr("SetPlayerCriminal");
}
if(IsPlayerConnected(playerid))
{
PlayerInfo[playerid][pCrimes] += 1;
new turned[MAX_PLAYER_NAME];
new turner[MAX_PLAYER_NAME];
new turnmes[128];
new wantedmes[128];
new points = WantedPoints[playerid];
strmid(PlayerCrime[playerid][pAccusedof], reason, 0, strlen(reason), 255);
GetPlayerName(playerid, turned, sizeof(turned));
if (declare == 255)
{
format(turner, sizeof(turner), "Неизвестный");
strmid(PlayerCrime[playerid][pVictim], turner, 0, strlen(turner), 255);
}
else
{
if(IsPlayerConnected(declare))
{
GetPlayerName(declare, turner, sizeof(turner));
strmid(PlayerCrime[playerid][pVictim], turner, 0, strlen(turner), 255);
strmid(PlayerCrime[declare][pBplayer], turned, 0, strlen(turned), 255);
strmid(PlayerCrime[declare][pAccusing], reason, 0, strlen(reason), 255);
}
}
if(!IsACop(playerid) || !IsAArm(playerid))
{
if(PlayerInfo[playerid][pZvezdi] <=6)
{
format(turnmes, sizeof(turnmes), "Вы совершили преступление: [ %s ]. Сообщает: %s.",reason,turner);
SetPlayerWantedLevel(playerid,WantedLevel[playerid] += 1);
WantedLevel[playerid] += 1;
PlayerInfo[playerid][pZvezdi] +=1;
SendClientMessage(playerid, COLOR_LIGHTRED, turnmes);
}
if(points > 0)
{
new yesno;
if(points == 1) { WantedLevel[playerid] = 1; yesno = 1; WantedTime[playerid] = 300; }
else if(points == 2) { WantedLevel[playerid] = 2; yesno = 1; WantedTime[playerid] = 600; }
else if(points == 3) { WantedLevel[playerid] = 3; yesno = 1; WantedTime[playerid] = 900; }
else if(points == 4) { WantedLevel[playerid] = 4; yesno = 1; WantedTime[playerid] = 1200; }
else if(points == 5) { WantedLevel[playerid] = 5; yesno = 1; WantedTime[playerid] = 1500; }
else if(points >= 6) { WantedLevel[playerid] = 6; yesno = 1; WantedTime[playerid] = 1800; }
if(WantedLevel[playerid] >= 1){ }
if(yesno)
{
format(wantedmes, sizeof(wantedmes), "Ваш уровень розыска: %d", WantedLevel[playerid]);
SendClientMessage(playerid, COLOR_YELLOW, wantedmes);
SetPlayerWantedLevel(playerid, WantedLevel[playerid]);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(PlayerInfo[i][pMember] == 1 ||PlayerInfo[i][pLeader] == 1 || PlayerInfo[i][pMember] == 10 ||PlayerInfo[i][pLeader] == 10 || PlayerInfo[i][pMember] == 2 ||PlayerInfo[i][pLeader] == 2 || PlayerInfo[i][pMember] == 3 || PlayerInfo[i][pLeader] == 3 || PlayerInfo[i][pMember] == 19 || PlayerInfo[i][pLeader] == 19 || PlayerInfo[i][pMember] == 21 || PlayerInfo[i][pLeader] == 21)
{
format(cbjstore, sizeof(turnmes), "Рация: Cообщает: %s. Преступление: %s. Подозреваемый: %s",turner,reason,turned);
SendClientMessage(i, 0xFEBC41AA, cbjstore);
}
}
}
}
}
}
}
return 1;
}
PHP:
if(strcmp(cmd, "/suspect", true) == 0 || strcmp(cmd, "/su", true) == 0)
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "::: Введите: (/su)spect [id] [преступление]");
giveplayerid = ReturnUser(tmp);
if (PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pLeader] == 1 || PlayerInfo[playerid][pMember] == 10 || PlayerInfo[playerid][pLeader] == 10 || PlayerInfo[playerid][pMember] == 21 || PlayerInfo[playerid][pLeader] == 21 || PlayerInfo[playerid][pMember] == 2 || PlayerInfo[playerid][pLeader] == 2)
{
if(IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
if(PlayerInfo[giveplayerid][pJailed] == 0)
{
if(WantedPoints[giveplayerid] >= 6) return SendClientMessage(playerid, COLOR_GREY, "У данного игрока уже 6 уровней розыска!");
if (IsACop(giveplayerid)) return SendClientMessage(playerid, COLOR_GRAD2, "Вы не можете давать розыск законникам!");
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result)) return SendClientMessage(playerid, COLOR_WHITE, "::: Введите: (/su)spect [id] [преступление]");
SetPlayerCriminal(giveplayerid,playerid, result);
return 1;
}
else
{
SendClientMessage(playerid, COLOR_GRAD2, "Этот Человек в тюрьме!");
}
}
}
else
{
SendClientMessage(playerid, COLOR_GREY, "[Ошибка] Человек не найден!");
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD2, "Вы не член Полиция/ФБР!");
}
return 1;
}
PHP:
public SetPlayerCriminal(playerid,declare,reason[])
{
if(logs == 1)
{
printr("SetPlayerCriminal");
}
if(IsPlayerConnected(playerid))
{
PlayerInfo[playerid][pCrimes] += 1;
new turned[MAX_PLAYER_NAME];
new turner[MAX_PLAYER_NAME];
new turnmes[128];
new wantedmes[128];
new points = WantedPoints[playerid];
strmid(PlayerCrime[playerid][pAccusedof], reason, 0, strlen(reason), 255);
GetPlayerName(playerid, turned, sizeof(turned));
if (declare == 255)
{
format(turner, sizeof(turner), "Неизвестный");
strmid(PlayerCrime[playerid][pVictim], turner, 0, strlen(turner), 255);
}
else
{
if(IsPlayerConnected(declare))
{
GetPlayerName(declare, turner, sizeof(turner));
strmid(PlayerCrime[playerid][pVictim], turner, 0, strlen(turner), 255);
strmid(PlayerCrime[declare][pBplayer], turned, 0, strlen(turned), 255);
strmid(PlayerCrime[declare][pAccusing], reason, 0, strlen(reason), 255);
}
}
if(!IsACop(playerid) || !IsAArm(playerid))
{
if(PlayerInfo[playerid][pZvezdi] <=6)
{
format(turnmes, sizeof(turnmes), "Вы совершили преступление: [ %s ]. Сообщает: %s.",reason,turner);
SetPlayerWantedLevel(playerid,WantedLevel[playerid] += 1);
WantedLevel[playerid] += 1;
WantedPoints[playerid] += 1;
PlayerInfo[playerid][pZvezdi] +=1;
SendClientMessage(playerid, COLOR_LIGHTRED, turnmes);
}
if(points > 0)
{
new yesno;
if(points == 1)
{
WantedLevel[playerid] = 1;
yesno = 1;
WantedTime[playerid] = 300;
}
else if(points == 2)
{
WantedLevel[playerid] = 2;
yesno = 1;
WantedTime[playerid] = 600;
}
else if(points == 3)
{
WantedLevel[playerid] = 3;
yesno = 1;
WantedTime[playerid] = 900;
}
else if(points == 4)
{
WantedLevel[playerid] = 4;
yesno = 1;
WantedTime[playerid] = 1200;
}
else if(points == 5)
{
WantedLevel[playerid] = 5;
yesno = 1;
WantedTime[playerid] = 1500;
}
else if(points >= 6)
{
WantedLevel[playerid] = 6;
yesno = 1;
WantedTime[playerid] = 1800;
}
if(WantedLevel[playerid] >= 1)
{
}
if(yesno)
{
format(wantedmes, sizeof(wantedmes), "Ваш уровень розыска: %d", WantedLevel[playerid]);
SendClientMessage(playerid, COLOR_YELLOW, wantedmes);
SetPlayerWantedLevel(playerid, WantedLevel[playerid]);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(PlayerInfo[i][pMember] == 1 ||PlayerInfo[i][pLeader] == 1 || PlayerInfo[i][pMember] == 10 ||PlayerInfo[i][pLeader] == 10 || PlayerInfo[i][pMember] == 2 ||PlayerInfo[i][pLeader] == 2 || PlayerInfo[i][pMember] == 3 || PlayerInfo[i][pLeader] == 3 || PlayerInfo[i][pMember] == 19 || PlayerInfo[i][pLeader] == 19 || PlayerInfo[i][pMember] == 21 || PlayerInfo[i][pLeader] == 21)
{
format(cbjstore, sizeof(turnmes), "Рация: Сообщает: %s. Преступление: %s. Подозреваемый: %s",turner,reason,turned);
SendClientMessage(i, 0xFEBC41AA, cbjstore);
}
}
}
}
}
}
}
return 1;
}
Данный мануал для rls.
