2Vam:
Булева алгебра - интересная вещь
|
Вещь конечно интересная, но тогда я попробую предложить свои наблюдения по работе оригинальной и функции твоего варианта...
func void B_MM_AssessEnemy_Sleep()
{
*PrintDebugNpc (PD_MST_FRAME, "B_MM_AssessEnemy_Sleep");
*
* *if
(C_BodyStateContains(self,BS_LIE)) \\ 1. Вариант
* *{
* * * * *if
(Npc_GetDistToNpc(self,other)<200) * * * * *{
* * * * * * * *B_MM_AssessEnemy();
* * * * *};
* *}
* *else \\ 2. Вариант
* *{
* * * * *B_MM_AssessEnemy();
* *};
};
1 Вариант. Для того чтобы срботала проерка
дистанции от игрока, self при этом должен
ЛЕЖАТЬ. в этом случае сработает вызов B_MM_AssessEnemy();
2 Вариант. B_MM_AssessEnemy(); срабатывает при невыполнении первого условия 1 Варианта.
func void B_MM_AssessEnemy_Sleep()
{
* * PrintDebugNpc (PD_MST_FRAME, "B_MM_AssessEnemy_Sleep");
* * if
(!C_BodyStateContains(self, BS_LIE) ||
(Npc_GetDistToNpc(self, other) < 200))
* * {
* * * * * B_MM_AssessEnemy();
* * };
};
Функция срабатывает если сработала проверка
дистанции от игрока или self
НЕ ЛЕЖИТ.Собственно различия.
В оригинальном варианте:
ВЫЗОВ B_MM_AssessEnemy();
1 Вариант
для
ЛЕЖАЧЕГО. возможен ТОЛЬКО при условии проверки
дистанции от игрока или
2 Вариант
для
НЕ ЛЕЖАЧЕГОВ твоем варианте
Вызов функции возможен и для
НЕ ЛЕЖАЧЕГО и при проверке
дистанции от игрокаА где же обязательное
ЛЕЖАНИЕ, которое должно быть выполнено вместе с проверкой
дистанции от игрока?
Алгебра алгеброй, а неувязочка на лицо! :)
Вот вариант
2HikeR: лишен этой неувязки!
func void B_MM_AssessEnemy_Sleep() { *PrintDebugNpc (PD_MST_FRAME, "B_MM_AssessEnemy_Sleep"); * * *if (C_BodyStateContains(self,BS_LIE) && Npc_GetDistToNpc(self,other)<200)) * *|| !C_BodyStateContains(self,BS_LIE) * *{ * * * * *B_MM_AssessEnemy(); * *}; };
|
Проверяются все условия, как это было в оригинальной функции.
P.S. Юзал булевую алгебру? :)