По битовому сдвигу -
kennydalglish - 03.07.2015
Добрый день, уважаемые посетители sa-mp.com!
PHP код:
enum
{
GANG_ID_BALLAS, // = 0
GANG_ID_VAGOS,
GANG_ID_GROVE,
GANG_ID_AZTECAS,
GANG_ID_RIFA,
__LAST_GANG_ID // = 5, значение будет использовано далее
}
enum(+=2)
{
REL_SHIFT_BALLAS, // биты 0-1
REL_SHIFT_VAGOS, // = 2, биты 2-3
REL_SHIFT_GROVE, // = 4, биты 4-5
REL_SHIFT_AZTECAS, // ...
REL_SHIFT_RIFA // ... 8-9
};
enum
{
GANG_REL_NEGATIVE,
GANG_REL_NEUTRAL,
GANG_REL_POSITIVE
};
PHP код:
new gang_relationships[__LAST_GANG_ID];
PHP код:
const GANG_REL_MASK = 0b11111111_11111111_11111111_11111100;
PHP код:
case 11103: //Rifa
{
if(!response) return 0; //Ballas
if(PlayerInfo[playerid][p_leaders] == 12)
{
if(ismysqlnull(inputtext))
return SPD(playerid, 11103, DIALOG_STYLE_INPUT, " ","С какой бандой вы желаете заключить союз\n\nRifa\n\
Grove\n\
Aztec\n\
Vagos", "Ок", "Отмена");
}
if(PlayerInfo[playerid][p_leaders] == 13)
{
if(ismysqlnull(inputtext))
return SPD(playerid, 11103, DIALOG_STYLE_INPUT, " ","С какой бандой вы желаете заключить союз\n\nRifa\n\
Grove\n\
Ballas\n\
Aztec", "Ок", "Отмена");
}
//Grove
if(PlayerInfo[playerid][p_leaders] == 15)
{
if(ismysqlnull(inputtext))
return SPD(playerid, 11103, DIALOG_STYLE_INPUT, " ","С какой бандой вы желаете заключить союз\n\nRifa\n\
Aztec\n\
Ballas\n\
Vagos", "Ок", "Отмена");
}
//Aztec
if(PlayerInfo[playerid][p_leaders] == 17)
{
if(ismysqlnull(inputtext))
return SPD(playerid, 11103, DIALOG_STYLE_INPUT, " ","С какой бандой вы желаете заключить союз\n\nRifa\n\
Grove\n\
Ballas\n\
Vagos", "Ок", "Отмена");
}
//Rifa
if(PlayerInfo[playerid][p_leaders] == 18)
{
if(ismysqlnull(inputtext))
return SPD(playerid, 11103, DIALOG_STYLE_INPUT, " ","С какой бандой вы желаете заключить союз\n\nAztec\n\
Grove\n\
Ballas\n\
Vagos", "Ок", "Отмена");
}
if( PlayerInfo[playerid][p_leaders] == 12 ||
PlayerInfo[playerid][p_leaders] == 13 ||
PlayerInfo[playerid][p_leaders] == 15 ||
PlayerInfo[playerid][p_leaders] == 17 ||
PlayerInfo[playerid][p_leaders] == 18)
{
new
string_band_union[46],
my_orgazantion[8];
switch(PlayerInfo[playerid][p_members])
{
case 12: my_orgazantion = "ballas";
case 13: my_orgazantion = "vagos";
case 15: my_orgazantion = "grove";
case 17: my_orgazantion = "aztecas";
case 18: my_orgazantion = "rifa";
}
for(new interator_name_band; interator_name_band < sizeof(name_diplamation); interator_name_band ++)
{
printf("inputtext: %s | name_diplamation[interator_name_band][e_Name]: %s", inputtext, name_diplamation[interator_name_band][e_Name]);
if(strcmp(inputtext, name_diplamation[interator_name_band][e_Name], false) != 0)
{
print("1) Работает");
continue;
}
print("2) Работает");
new i_gang_id = GetGangID(name_diplamation[interator_name_band][e_Value]);
new player_gang_id = GetGangID(PlayerInfo[playerid][p_members]);
// ID другой банды - в переменной i
new shift_val = i_gang_id + i_gang_id;
gang_relationships[player_gang_id] &= GANG_REL_MASK << shift_val;
gang_relationships[player_gang_id] |= GANG_REL_POSITIVE << shift_val;
shift_val = player_gang_id + player_gang_id;
gang_relationships[i_gang_id] &= GANG_REL_MASK << shift_val;
gang_relationships[i_gang_id] |= GANG_REL_POSITIVE << shift_val;
print("3) Работает");
//sting_debbag[0] = EOS;
// strcat(save_union_band_one_to_array[playerid], name_band_for_diplamation[interator_name_band]);
// strcat(save_union_band_two_to_array[playerid], my_orgazantion);
// format(sting_debbag, sizeof(sting_debbag), "Cоюз | После | SetPVarString | name_band_one: %s | name_band_two: %s", save_union_band_one_to_array[playerid], save_union_band_two_to_array[playerid]);
//SendClientMessageToAll(-1, sting_debbag);
SPD(playerid,22201,DIALOG_STYLE_INPUT," ","Введите в поле ID Лидера Банды","Ок","Отмена");
format(string_band_union, sizeof(string_band_union), "Вы предложили союз банде %s", name_diplamation[interator_name_band][e_Name]);
SendClientMessage(playerid, COLOR_NEWS, string_band_union);
print("4) Работает");
}
}
}
PHP код:
GetGangID(family_id)
{
switch(family_id)
{
case 12:
return GANG_ID_BALLAS;
case 13:
return GANG_ID_VAGOS;
case 17:
return GANG_ID_AZTECAS;
case 18:
return GANG_ID_RIFA;
}
return -1;
}
PHP код:
if(strcmp(cmd, "/debbuging", true) == 0)
{
new string_debbag[30];
format(string_debbag, sizeof(string_debbag), "%d | %d | %d | %d", gang_relationships[GANG_ID_AZTECAS],
gang_relationships[GANG_ID_VAGOS],
PlayerInfo[playerid][p_members],
PlayerInfo[playerid][p_leaders]);
SendClientMessageToAll(-1, string_debbag);
}
Логи:
PHP код:
[17:20:50] 8 | 128 | 13 | 13
И собственно сам вопрос: 8 и 128 бита это нормально?
Заранее спасибо!
Re: По битовому сдвигу -
po61 - 03.07.2015
Код:
new shift_val = i_gang_id + i_gang_id;
gang_relationships[player_gang_id] &= GANG_REL_MASK << shift_val;
gang_relationships[player_gang_id] |= GANG_REL_POSITIVE << shift_val;
shift_val = player_gang_id + player_gang_id;
gang_relationships[i_gang_id] &= GANG_REL_MASK << shift_val;
gang_relationships[i_gang_id] |= GANG_REL_POSITIVE << shift_val;
Какая-то путаница: сначала i_gang_id умножается на 2, потом изменяется gang_relationships у player_gang_id, после player_gang_id умножается на 2 и в самом конце изменяется gang_relationships у i_gang_id.
Все ли верно?
P.S. Думаю 128 - нормально, 8 - нет
Re: По битовому сдвигу -
kennydalglish - 04.07.2015
128 - не верно, а 8 - верно, в чем дело может быть?
Re: По битовому сдвигу -
po61 - 04.07.2015
Quote:
Originally Posted by kennydalglish
128 - не верно, а 8 - верно, в чем дело может быть?
|
Ну да, ошибся, но все же может поменять присвоение местами?
UPD: Понял что так и было задумано
Re: По битовому сдвигу -
kennydalglish - 04.07.2015
Все ещё актуально)
Re: По битовому сдвигу -
kennydalglish - 09.07.2015
АП, до сих пор не могу разобраться почему, 128 бит
Re: По битовому сдвигу -
kennydalglish - 23.07.2015
Залогировал значения, но ошибки не вижу.
PHP код:
20:46:14] inputtext: Los Santos Vagos | name_diplamation[interator_name_band][e_Name]: The Ballas
[20:46:14] 1) Работает
[20:46:14] inputtext: Los Santos Vagos | name_diplamation[interator_name_band][e_Name]: Los Santos Vagos
[20:46:14] 2) Работает
[20:46:14] i_gang_id: 1 | player_gang_id: 3
[20:46:14] 1) shift_val: 2
[20:46:14] 1) gang_relationships[player_gang_id]: 0
GANG_REL_MASK: -4
shift_val: 2
[20:46:14] 2) gang_relationships[player_gang_id]: 8
GANG_REL_MASK: -4
shift_val: 2
[20:46:14] 2) shift_val: 6
[20:46:14] 1) gang_relationships[i_gang_id]: 0
GANG_REL_MASK: -4
shift_val: 6
[20:46:14] 2) gang_relationships[i_gang_id]: 128
GANG_REL_MASK: -4
shift_val: 6
[20:46:14] 3) Работает
[20:46:14] 4) Работает
[20:46:14] inputtext: Los Santos Vagos | name_diplamation[interator_name_band][e_Name]: Grove Street
[20:46:14] 1) Работает
[20:46:14] inputtext: Los Santos Vagos | name_diplamation[interator_name_band][e_Name]: Varios Los Aztecas
[20:46:14] 1) Работает
[20:46:14] inputtext: Los Santos Vagos | name_diplamation[interator_name_band][e_Name]: The Rifa
[20:46:14] 1) Работает
Код:
PHP код:
for (new interator_name_band; interator_name_band < sizeof(name_diplamation); interator_name_band++)
{
printf("inputtext: %s | name_diplamation[interator_name_band][e_Name]: %s", inputtext, name_diplamation[interator_name_band][e_Name]);
if (strcmp(inputtext, name_diplamation[interator_name_band][e_Name], false) != 0)
{
print("1) Работает");
continue;
}
print("2) Работает");
new i_gang_id = GetGangID(name_diplamation[interator_name_band][e_Value]);
new player_gang_id = GetGangID(PlayerInfo[playerid][p_members]);
printf("i_gang_id: %d | player_gang_id: %d", i_gang_id, player_gang_id);
// ID другой банды - в переменной i
new shift_val = i_gang_id + i_gang_id;
printf("1) shift_val: %d", shift_val);
gang_relationships[player_gang_id] &= GANG_REL_MASK << shift_val;
printf("1) gang_relationships[player_gang_id]: %d \n GANG_REL_MASK: %d \n shift_val: %d", gang_relationships[player_gang_id], GANG_REL_MASK, shift_val);
gang_relationships[player_gang_id] |= GANG_REL_POSITIVE << shift_val;
printf("2) gang_relationships[player_gang_id]: %d \n GANG_REL_MASK: %d \n shift_val: %d", gang_relationships[player_gang_id], GANG_REL_MASK, shift_val);
shift_val = player_gang_id + player_gang_id;
printf("2) shift_val: %d", shift_val);
gang_relationships[i_gang_id] &= GANG_REL_MASK << shift_val;
printf("1) gang_relationships[i_gang_id]: %d \n GANG_REL_MASK: %d \n shift_val: %d", gang_relationships[i_gang_id], GANG_REL_MASK, shift_val);
gang_relationships[i_gang_id] |= GANG_REL_POSITIVE << shift_val; // Судя по всему ошибка в этой строке
printf("2) gang_relationships[i_gang_id]: %d \n GANG_REL_MASK: %d \n shift_val: %d", gang_relationships[i_gang_id], GANG_REL_MASK, shift_val);
print("3) Работает");
SPD(playerid, 22201, DIALOG_STYLE_INPUT, " ", "Введите в поле ID Лидера Банды", "Ок", "Отмена");
format(string_band_union, sizeof(string_band_union), "Вы предложили союз банде %s", name_diplamation[interator_name_band][e_Name]);
SendClientMessage(playerid, COLOR_NEWS, string_band_union);
print("4) Работает");
}
Re: По битовому сдвигу -
kennydalglish - 27.07.2015
Никто не может помочь? (:
Re: По битовому сдвигу -
kennydalglish - 06.08.2015
Вообщем тему можно подснос, все равно результата не будет.
Re: По битовому сдвигу -
Logofero - 06.08.2015
Зачем придумывать использовать биты для простых команд? Что за выдумывание сложной жизни

Используйте bool or int переменные и выполняйте те же задачи, но с другим алгоритмом.
PS: А вообще задайте тот же вопрос, но в англоязычном разделе, там чаще появляются знатоки.