Ich habe die folgende Beschreibung von Bitmaskenwerte:Überprüfen Sie, ob ein Bitmaskenwert in der Summe vieler bitmask enthaltenen Werte
// 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
Hier ist ein Beispiel für die Verwendung des bitmask:
SC_ENDURE, 21
die obigen Mittel:
SC_ENDURE: cannot be removed by death and dispel and considered as buff. (16 + 4 + 1 = 21)
Ich habe eine CSV-Liste (zB getrimmt), um zu überprüfen, die wie folgt aussieht:
SC_PROVOKE, 32
SC_ENDURE, 21
SC_HIDING, 4
SC_CLOAKING, 6
SC_TWOHANDQUICKEN, 24
SC_CONCENTRATION, 16
SC_ENCHANTPOISON, 16
SC_ORCISH, 2
Was ich tun möchte, ist die Liste durchlaufen alle Effekte aus, die als Buff 16
in einer Liste betrachtet werden und die anderen in eine separate Liste.
Verwenden Sie das obige Beispiel; Wie überprüfen Sie, ob 16
in der Summe der Bitmasken 21
existiert?
Das ist, was ich bisher versucht (mit meinem Mangel an Wissen über bitmask) verbunden ist und kein Glück:
<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);
Der Code habe ich versucht, alle Effekte in $buff_list
setzt, ich bin nicht sicher, ob ich mache ich das richtig.
Ah! ! Ich war so nah. Perfekt, danke für die Erklärung, ich verstehe es jetzt. – Latheesan