По битовому сдвигу
#1

Добрый день, уважаемые посетители 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(playerid11103DIALOG_STYLE_INPUT"   ","С какой бандой вы желаете заключить союз\n\nRifa\n\
                                                                                                    Grove\n\
                                                                                                    Aztec\n\
                                                                                                    Vagos"
"Ок""Отмена");
    }
    if(
PlayerInfo[playerid][p_leaders] == 13)
    {
        if(
ismysqlnull(inputtext))
            return 
SPD(playerid11103DIALOG_STYLE_INPUT"   ","С какой бандой вы желаете заключить союз\n\nRifa\n\
                                                                                                    Grove\n\
                                                                                                    Ballas\n\
                                                                                                    Aztec"
"Ок""Отмена");
    }
                                      
//Grove
    
if(PlayerInfo[playerid][p_leaders] == 15)
    {
        if(
ismysqlnull(inputtext))
            return 
SPD(playerid11103DIALOG_STYLE_INPUT"   ","С какой бандой вы желаете заключить союз\n\nRifa\n\
                                                                                                    Aztec\n\
                                                                                                    Ballas\n\
                                                                                                    Vagos"
"Ок""Отмена");
    }
                                      
//Aztec
    
if(PlayerInfo[playerid][p_leaders] == 17)
    {
        if(
ismysqlnull(inputtext))
            return 
SPD(playerid11103DIALOG_STYLE_INPUT"   ","С какой бандой вы желаете заключить союз\n\nRifa\n\
                                                                                                    Grove\n\
                                                                                                    Ballas\n\
                                                                                                    Vagos"
"Ок""Отмена");
    }
                                      
//Rifa
    
if(PlayerInfo[playerid][p_leaders] == 18)
    {
        if(
ismysqlnull(inputtext))
            return 
SPD(playerid11103DIALOG_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 
12my_orgazantion "ballas";
            case 
13my_orgazantion "vagos";
            case 
15my_orgazantion "grove";
            case 
17my_orgazantion "aztecas";
            case 
18my_orgazantion "rifa";
        }
        for(new 
interator_name_bandinterator_name_band sizeof(name_diplamation); interator_name_band ++)
        {
            
printf("inputtext: %s | name_diplamation[interator_name_band][e_Name]: %s"inputtextname_diplamation[interator_name_band][e_Name]);
            if(
strcmp(inputtextname_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_unionsizeof(string_band_union), "Вы предложили союз банде %s"name_diplamation[interator_name_band][e_Name]);
            
SendClientMessage(playeridCOLOR_NEWSstring_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_debbagsizeof(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(-1string_debbag);

Логи:
PHP код:
[17:20:50128 13 13 
И собственно сам вопрос: 8 и 128 бита это нормально?
Заранее спасибо!
Reply
#2

Код:
            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 - нет
Reply
#3

128 - не верно, а 8 - верно, в чем дело может быть?
Reply
#4

Quote:
Originally Posted by kennydalglish
Посмотреть сообщение
128 - не верно, а 8 - верно, в чем дело может быть?
Ну да, ошибся, но все же может поменять присвоение местами?
UPD: Понял что так и было задумано
Reply
#5

Все ещё актуально)
Reply
#6

АП, до сих пор не могу разобраться почему, 128 бит
Reply
#7

Залогировал значения, но ошибки не вижу.
PHP код:
20:46:14inputtextLos Santos Vagos name_diplamation[interator_name_band][e_Name]: The Ballas
[20:46:141Работает
[20:46:14inputtextLos Santos Vagos name_diplamation[interator_name_band][e_Name]: Los Santos Vagos
[20:46:142Работает
[20:46:14i_gang_idplayer_gang_id3
[20:46:141shift_val2
[20:46:141gang_relationships[player_gang_id]: 
 GANG_REL_MASK
: -
 shift_val
2
[20:46:142gang_relationships[player_gang_id]: 
 GANG_REL_MASK
: -
 shift_val
2
[20:46:142shift_val6
[20:46:141gang_relationships[i_gang_id]: 
 GANG_REL_MASK
: -
 shift_val
6
[20:46:142gang_relationships[i_gang_id]: 128 
 GANG_REL_MASK
: -
 shift_val
6
[20:46:143Работает
[20:46:144Работает
[20:46:14inputtextLos Santos Vagos name_diplamation[interator_name_band][e_Name]: Grove Street
[20:46:141Работает
[20:46:14inputtextLos Santos Vagos name_diplamation[interator_name_band][e_Name]: Varios Los Aztecas
[20:46:141Работает
[20:46:14inputtextLos Santos Vagos name_diplamation[interator_name_band][e_Name]: The Rifa
[20:46:141Работает 
Код:
PHP код:
for (new interator_name_bandinterator_name_band sizeof(name_diplamation); interator_name_band++)
{
    
printf("inputtext: %s | name_diplamation[interator_name_band][e_Name]: %s"inputtextname_diplamation[interator_name_band][e_Name]);
    if (
strcmp(inputtextname_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_idplayer_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_MASKshift_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_MASKshift_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_MASKshift_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_MASKshift_val);
    print(
"3) Работает");
    
SPD(playerid22201DIALOG_STYLE_INPUT"   ""Введите в поле ID Лидера Банды""Ок""Отмена");
    
format(string_band_unionsizeof(string_band_union), "Вы предложили союз банде %s"name_diplamation[interator_name_band][e_Name]);
    
SendClientMessage(playeridCOLOR_NEWSstring_band_union);
    print(
"4) Работает");

Reply
#8

Никто не может помочь? (:
Reply
#9

Вообщем тему можно подснос, все равно результата не будет.
Reply
#10

Зачем придумывать использовать биты для простых команд? Что за выдумывание сложной жизни Используйте bool or int переменные и выполняйте те же задачи, но с другим алгоритмом.

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


Forum Jump:


Users browsing this thread: 1 Guest(s)