PDA

Просмотр полной версии : [Вопрос] Проверка



#Johnson
13.03.2019, 12:34
Не работает данная проверка:

if(!(0 <= listitem <= 5))
{
new string[46 + 31 + 2 +1];
format(string, sizeof(string), "Вас назначили руководить организацией %s.", GetFracNames[pInfo[giveplayerid][pName]]);
SendClientMessage(giveplayerid, -1, string);

pInfo[giveplayerid][pFracSkin] = GetLeaderSkin[pInfo[giveplayerid][pGender]][pInfo[giveplayerid][pMember]];
AccWriteInt(pInfo[giveplayerid][pName], "FracSkin", pInfo[giveplayerid][pFracSkin]);
SetPlayerSkin(giveplayerid, pInfo[giveplayerid][pFracSkin]);
//SetPlayerColor(giveplayerid, GetPlayerToTeamColor[pInfo[giveplayerid][pMember]]);
}
отвечает за то что если игрок выбрал пункт диалога от 0 до 5 (case 0..5), то выдается определенное сообщение и ф-ии.

P.S. Подскажите как еще можно лучше усовершенствовать код.
Полный код :

case DIALOG_MAKELEADER:
{
if(!response) return 1;
new
giveplayerid = GetPVarInt(playerid,"PlayerLeader"),
frac;

switch(listitem)
{
case 0: frac = FGOVERMENT; //Департамент
case 1: frac = FARMY; //Армия
case 2: frac = FARMY; //Здравохранение
case 3: frac = FSMI; //СМИ
case 4: frac = FSMI; //Полиция
case 5: frac = FFBI; //FBI
case 6:
{
SetPVarInt(playerid,"section_makeleader", 4);
ShowPlayerDialog(playerid, 14, DIALOG_STYLE_LIST, "Мафии:", "\
1. Русская Мафия.\n\
2. La Cosa Nostra.\n\
3. Yakuza.", "Назначить", "Отмена");
}
case 7:
{
SetPVarInt(playerid,"section_makeleader", 5);
ShowPlayerDialog(playerid, 14, DIALOG_STYLE_LIST, "Банды:", "\
1. Grove Street.\n\
2. The Ballas.\n\
3. The Rifa.\n\
4. Varios Los Aztecas.\n\
5. Los-Santos Vagos.", "Назначить", "Отмена");
}
}
if(!(0 <= listitem <= 5))
{
new string[46 + 31 + 2 +1];
format(string, sizeof(string), "Вас назначили руководить организацией %s.", GetFracNames[pInfo[giveplayerid][pName]]);
SendClientMessage(giveplayerid, -1, string);

pInfo[giveplayerid][pFracSkin] = GetLeaderSkin[pInfo[giveplayerid][pGender]][pInfo[giveplayerid][pMember]];
AccWriteInt(pInfo[giveplayerid][pName], "FracSkin", pInfo[giveplayerid][pFracSkin]);
SetPlayerSkin(giveplayerid, pInfo[giveplayerid][pFracSkin]);
//SetPlayerColor(giveplayerid, GetPlayerToTeamColor[pInfo[giveplayerid][pMember]]);
}
pInfo[giveplayerid][pLeader] = frac, AccWriteInt(pInfo[giveplayerid][pName], "Leader", frac);
return pInfo[giveplayerid][pMember] = frac, AccWriteInt(pInfo[giveplayerid][pName], "Member", frac);
}

UnO
13.03.2019, 12:55
Условие

if(!(0 <= listitem <= 5))
сработает, если listitem будет либо больше 5, либо меньше 0.

Чтобы получилось как ты хочешь, следует убрать оттуда унарный не (!)

if(0 <= listitem <= 5)

DeimoS
13.03.2019, 13:01
if(!(0 <= listitem <= 5))
на

if(0 <= listitem <= 5)


Ну разве что как-то так
case DIALOG_MAKELEADER:
{
if(!response) return 1;
new
giveplayerid = GetPVarInt(playerid,"PlayerLeader"),
frac,
player_name[MAX_PLAYER_NAME];

strcat(player_name, pInfo[giveplayerid][pName]);


switch(listitem)
{
case 0..5:
{
static const frac_list[] =
{
FGOVERMENT,
FARMY,
FARMY,
FSMI,
FSMI,
FFBI
};
frac = frac_list[listitem];
new string[46 + 31 + 2 +1];
format(string, sizeof(string), "Вас назначили руководить организацией %s.", GetFracNames[player_name]);
SendClientMessage(giveplayerid, -1, string);

new skin = pInfo[giveplayerid][pFracSkin] = GetLeaderSkin[pInfo[giveplayerid][pGender]][pInfo[giveplayerid][pMember]];
AccWriteInt(player_name, "FracSkin", skin);
SetPlayerSkin(giveplayerid, skin);
}
case 6:
{
SetPVarInt(playerid, "section_makeleader", 4);
ShowPlayerDialog(playerid, 14, DIALOG_STYLE_LIST, "Мафии:", "\
1. Русская Мафия.\n\
2. La Cosa Nostra.\n\
3. Yakuza.", "Назначить", "Отмена");
}
case 7:
{
SetPVarInt(playerid, "section_makeleader", 5);
ShowPlayerDialog(playerid, 14, DIALOG_STYLE_LIST, "Банды:", "\
1. Grove Street.\n\
2. The Ballas.\n\
3. The Rifa.\n\
4. Varios Los Aztecas.\n\
5. Los-Santos Vagos.", "Назначить", "Отмена");
}
}
AccWriteInt(player_name, "Leader", (pInfo[giveplayerid][pLeader] = frac));
AccWriteInt(player_name, "Member", (pInfo[giveplayerid][pMember] = frac));
return 1;
}
Хотя это больше визуальные исправления. Код и без того вполне нормальный

#Johnson
13.03.2019, 13:24
if(!(0 <= listitem <= 5))
на

if(0 <= listitem <= 5)


Ну разве что как-то так
case DIALOG_MAKELEADER:
{
if(!response) return 1;
new
giveplayerid = GetPVarInt(playerid,"PlayerLeader"),
frac,
player_name[MAX_PLAYER_NAME];

strcat(player_name, pInfo[giveplayerid][pName]);


switch(listitem)
{
case 0..5:
{
static const frac_list[] =
{
FGOVERMENT,
FARMY,
FARMY,
FSMI,
FSMI,
FFBI
};
frac = frac_list[listitem];
new string[46 + 31 + 2 +1];
format(string, sizeof(string), "Вас назначили руководить организацией %s.", GetFracNames[player_name]);
SendClientMessage(giveplayerid, -1, string);

new skin = pInfo[giveplayerid][pFracSkin] = GetLeaderSkin[pInfo[giveplayerid][pGender]][pInfo[giveplayerid][pMember]];
AccWriteInt(player_name, "FracSkin", skin);
SetPlayerSkin(giveplayerid, skin);
}
case 6:
{
SetPVarInt(playerid, "section_makeleader", 4);
ShowPlayerDialog(playerid, 14, DIALOG_STYLE_LIST, "Мафии:", "\
1. Русская Мафия.\n\
2. La Cosa Nostra.\n\
3. Yakuza.", "Назначить", "Отмена");
}
case 7:
{
SetPVarInt(playerid, "section_makeleader", 5);
ShowPlayerDialog(playerid, 14, DIALOG_STYLE_LIST, "Банды:", "\
1. Grove Street.\n\
2. The Ballas.\n\
3. The Rifa.\n\
4. Varios Los Aztecas.\n\
5. Los-Santos Vagos.", "Назначить", "Отмена");
}
}
AccWriteInt(player_name, "Leader", (pInfo[giveplayerid][pLeader] = frac));
AccWriteInt(player_name, "Member", (pInfo[giveplayerid][pMember] = frac));
return 1;
}
Хотя это больше визуальные исправления. Код и без того вполне нормальный

Спасибо.
Была ошибка: GetFracNames[player_name]);, исправил GetFracNames[strlen(player_name)]);

DeimoS
13.03.2019, 13:28
Была ошибка: GetFracNames[player_name]);, исправил GetFracNames[strlen(player_name)]);

Эмм, покажи массив GetFracNames. Что-то тут не так.
Если там перечислены названия фракций, то должно было быть так изначально:

GetFracNames[frac]

#Johnson
13.03.2019, 13:52
Эмм, покажи массив GetFracNames. Что-то тут не так.
Если там перечислены названия фракций, то должно было быть так изначально:

GetFracNames[frac]
Мой косяк, там должно быть не pName, а pMember. Ошибся когда писал.
Только есть 1 проблема.

static const GetFracNames[14][] =
{
"Администрация президента",
"Управление Министерством Обороны",
"Министерство Здравоохранения",
"Средство Массовой Информации",
"Управление Внутренних Дел",
"Федеральное Бюро Расследований",
"Русская Мафия",
"La Cosa Nostra",
"Yakuza",
"Grove Street",
"The Ballas",
"The Rifa",
"Varios Los Aztecas",
"Los-Santos Vagos"
};
При назначении на любую организацию, пишет что назначил в 1 орг (Администрация президента )

DeimoS
13.03.2019, 14:37
frac = frac_list[listitem];
должна быть выше

GetFracNames[frac]

#Johnson
14.03.2019, 12:45
спасибо. закройте тему