У меня есть следующие спецификации значений битовых масок:Проверьте значение битового содержатся в сумме многих битовой маски значение
// Structure of Database:
// SC_NAME, flag
//
// flag 1 - SC cannot be removed by death.
// 2 - SC cannot be saved.
// 4 - SC cannot be reset by dispell.
// 8 - SC cannot be reset by clearance.
// 16 - SC considered as buff and be removed by Hermode and etc.
// 32 - SC considered as debuff and be removed by Gospel and etc.
// 64 - SC cannot be reset when MADO Gear is taken off.
// 128 - SC cannot be reset by 'sc_end SC_ALL' and status change clear.
// 256 - SC can be visible for all players
Вот пример использование битовые:
SC_ENDURE, 21
Вышеуказанные средства:
SC_ENDURE: cannot be removed by death and dispel and considered as buff. (16 + 4 + 1 = 21)
У меня есть список CSV (обрезанный, например), чтобы проверить, что выглядит следующим образом:
SC_PROVOKE, 32
SC_ENDURE, 21
SC_HIDING, 4
SC_CLOAKING, 6
SC_TWOHANDQUICKEN, 24
SC_CONCENTRATION, 16
SC_ENCHANTPOISON, 16
SC_ORCISH, 2
То, что я хочу сделать, это пройти через список выбора все эффекты, которые считаются нагишом 16
в один список а остальные - в отдельный список.
Использование приведенного выше примера; как вы проверяете, если 16
существует в сумме бит-масок 21
?
Это то, что я пытался до сих пор (с моим отсутствием знаний о битовой маске) и не имея какие-либо удач:
<pre>
<?php
$buff_list = [];
$not_buffs = [];
if (($handle = fopen("data.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
list ($effect_code, $bitmask_value) = $data;
$effect_code = trim($effect_code);
$bitmask_value = (int)trim($bitmask_value);
if (16 | $bitmask_value) {
$buff_list[] = $effect_code;
} else {
$not_buffs[] = $effect_code;
}
}
fclose($handle);
}
print_r($buff_list);
echo "<hr>";
print_r($not_buffs);
Код я пытался это положить все эффекты в $buff_list
, я не уверен, если я я делаю это правильно.
Ах! ! Я был так близко. Отлично, спасибо за объяснение, я понял это сейчас. – Latheesan