BodyState - sprawdzanie wykonywanej "czynności" 5387 0

O temacie

Autor inż. Avallach

Zaczęty 29.01.2011 roku

Wyświetleń 5387

Odpowiedzi 0

inż. Avallach

inż. Avallach

Administrator
Czego pragniesz?
posty7319
Propsy4615
Nagrody
ProfesjaProgramista
  • Administrator
  • Czego pragniesz?
Bardzo ciekawe efekty może dawać odpowiednie korzystanie z funkcji Npc_GetBodyState. Zwraca ona niejako "czynność" wykonywaną w danej chwili przez NPC. Oto ich lista:
Spoiler
BS_STAND
BS_WALK
BS_SNEAK
BS_RUN
BS_SPRINT
BS_SWIM
BS_CRAWL
BS_DIVE
BS_JUMP
BS_CLIMB
BS_FALL
BS_SIT
BS_LIE
BS_INVENTORY
BS_ITEMINTERACT
BS_MOBINTERACT
BS_MOBINTERACT_INTERRUPT
BS_TAKEITEM
BS_DROPITEM
BS_THROWITEM
BS_PICKPOCKET
BS_STUMBLE
BS_UNCONSCIOUS
BS_DEAD
BS_AIMNEAR
BS_AIMFAR
BS_HIT
BS_PARADE
BS_CASTING
BS_PETRIFIED
BS_CONTROLLING
BS_MOD_HIDDEN
BS_MOD_DRUNK
BS_MOD_NUTS
BS_MOD_BURNING
BS_MOD_CONTROLLED
BS_MOD_TRANSFORMED
Przykładowo, można wykorzystać BS_PARADE w warunku, aby kiedy npc/gracz ma wyciągniętą tarczę i w tym momencie się nią zasłania (ctrl+strzałka w tył, można tak chodzić trochę powoli) to jest odporny na strzały. Albo że w miarę jak napina łuk, siła strzału rośnie. Zastosowań jest mnóstwo.

Funkcją która zwraca aktualny stan lub jego sumę z "nakładkami" jest Npc_GetBodyState. Jednak normalnie lepiej używać wykorzystującej ją skryptowej, C_BodyStateContains.
Spoiler
func int C_BodyStateContains (var C_NPC slf, var int bodystate)
{
if ((Npc_GetBodyState(slf)&(BS_MAX|BS_FLAG_INTERRUPTABLE|BS_FLAG_FREEHANDS)) == (bodystate&(BS_MAX|BS_FLAG_INTERRUPTABLE|BS_FLAG_FREEHANDS)))
{ return TRUE; }
else
{ return FALSE; };
};


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry