Показать сообщение отдельно
Старый 29.09.2007, 17:30   #1824
B_Wolf

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

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. Юзал булевую алгебру? :)
Ответить с цитированием