Показать сообщение отдельно
Старый 30.04.2011, 20:58   #2434
JohaNBlack

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

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

Прошу помощи. Имеется расписание НПС StandAround.

Cпойлер(щелкните, чтобы прочесть):
func void ZS_StandAround()
{
     Perception_Set_Normal();
     B_ResetAll(self);
     AI_SetWalkMode(self,NPC_WALK);
     if(!Npc_IsOnFP(self,"CAMPFIRE"))
     {
           
           AI_GotoWP(self,self.wp);
     };
     self.aivar[AIV_TAPOSITION] = NOTINPOS;
};

func int ZS_StandAround_Loop()
{
     var int randomAni;
     var int RandomAc;
     var int random;
     if(Npc_IsOnFP(self,"CAMPFIRE"))
     {
           AI_AlignToFP(self);
           if(self.aivar[AIV_TAPOSITION] == NOTINPOS_WALK)
           {
                 self.aivar[AIV_TAPOSITION] = NOTINPOS;
           };
     }
     else if(Wld_IsFPAvailable(self,"CAMPFIRE"))
     {
           AI_GotoFP(self,"CAMPFIRE");
           AI_Standup(self);
           AI_AlignToFP(self);
           self.aivar[AIV_TAPOSITION] = NOTINPOS_WALK;
     }
     else
     {
           AI_AlignToWP(self);
           if(self.aivar[AIV_TAPOSITION] == NOTINPOS_WALK)
           {
                 self.aivar[AIV_TAPOSITION] = NOTINPOS;
           };
     };
     random = Hlp_Random(11);
     if(random == 0)
     {
           if(Npc_HasItems(self,ItFoApple) == 0)
           {
                 CreateInvItem(self,ItFoApple);
           };
           self.aivar[AIV_Food] = FOOD_Apple;
     }
     else if(random == 1)
     {
           if(Npc_HasItems(self,ItFoCheese) == 0)
           {
                 CreateInvItem(self,ItFoCheese);
           };
           self.aivar[AIV_Food] = FOOD_Cheese;
     }
     else if(random == 2)
     {
           if(Npc_HasItems(self,ItFoFish) == 0)
           {
                 CreateInvItem(self,ItFoFish);
           };
           self.aivar[AIV_Food] = FOOD_Bacon;
     }
     else if(random == 3)
     {
           if(Npc_HasItems(self,ItFoMutton) == 0)
           {
                 CreateInvItem(self,ItFoMutton);
           };
           self.aivar[AIV_Food] = FOOD_Bread;
     }
     else if(random == 4)
     {
           if(Npc_HasItems(self,ItFoBooze) == 0)
           {
                 CreateInvItem(self,ItFoBooze);
           };
           self.aivar[AIV_Food] = FOOD_Booze;
     }
     else if(random == 5)
     {
           if(Npc_HasItems(self,ItFo_Potion_Water_01) == 0)
           {
                 CreateInvItem(self,ItFo_Potion_Water_01);
           };
           self.aivar[AIV_Food] = FOOD_Wine;
     }
     else if(random == 6)
     {
           if(Npc_HasItems(self,ItFoRice) == 0)
           {
                 CreateInvItem(self,ItFoRice);
           };
           self.aivar[AIV_Food] = FOOD_Rice;
     }
     else if(random == 7)
     {
           if(Npc_HasItems(self,ItMiJoint_1) == 0)
           {
                 CreateInvItem(self,ItMiJoint_1);
           };
           self.aivar[AIV_Food] = FOOD_Joint;
     }
     else if(random == 8)
     {
           if(Npc_HasItems(self,ItFo_Fishsoup) == 0)
           {
                 CreateInvItem(self,ItFo_Fishsoup);
           };
           self.aivar[AIV_Food] = FOOD_Fishsoup;
     }
     else if(random == 9)
     {
           self.aivar[AIV_Food] = FOOD_ANI_1;
     }
     else if(random == 10)
     {
           self.aivar[AIV_Food] = FOOD_ANI_2;
     };
     if(self.aivar[AIV_TAPOSITION] == NOTINPOS)
     {
           if(self.aivar[AIV_Food] == FOOD_Apple)
           {
           AI_UseItemToState(self,ItFoApple,0);
           self.aivar[AIV_TAPOSITION] = ISINPOS;
           }
           else if(self.aivar[AIV_Food] == FOOD_Cheese)
           {
           AI_UseItemToState(self,ItFoCheese,0);
           self.aivar[AIV_TAPOSITION] = ISINPOS;
           }
           else if(self.aivar[AIV_Food] == FOOD_Bacon)
           {
           AI_UseItemToState(self,ItFoFish,0);
           self.aivar[AIV_TAPOSITION] = ISINPOS;
           }
           else if(self.aivar[AIV_Food] == FOOD_Bread)
           {
           AI_UseItemToState(self,ItFoLoaf,0);
           self.aivar[AIV_TAPOSITION] = ISINPOS;
           };
           if(self.aivar[AIV_Food] == FOOD_Booze)
                 {
                 AI_UseItemToState(self,ItFoBooze,0);
                 self.aivar[AIV_TAPOSITION] = ISINPOS;
                 };      
           if(self.aivar[AIV_Food] == FOOD_Wine)
           {
           AI_UseItemToState(self,ItFo_Potion_Water_01,0 );
           self.aivar[AIV_TAPOSITION] = ISINPOS;
           };
           if(self.aivar[AIV_Food] == FOOD_Rice)
           {
                 AI_UseItemToState(self,ItFoRice,0);
                 self.aivar[AIV_TAPOSITION] = ISINPOS;
           };
           if(self.aivar[AIV_Food] == FOOD_Joint)
           {
                 AI_UseItemToState(self,ItMiJoint_1,0);
                 self.aivar[AIV_TAPOSITION] = ISINPOS;
           };
           if(self.aivar[AIV_Food] == FOOD_Fishsoup)
           {
                 AI_UseItemToState(self,ItFo_Fishsoup,0);
                 self.aivar[AIV_TAPOSITION] = ISINPOS;
           };
           if(self.aivar[AIV_Food] == FOOD_ANI_1)
           {
                 self.aivar[AIV_TAPOSITION] = ISINPOS;
           };
           if(self.aivar[AIV_Food] == FOOD_ANI_2)
           {
                 self.aivar[AIV_TAPOSITION] = ISINPOS;
           };
     };
     if((Npc_GetStateTime(self) > 5) && (self.aivar[AIV_TAPOSITION] == ISINPOS))
     {
           if(self.aivar[AIV_Food] == FOOD_Apple)
           {
                 AI_PlayAniBS(self,"T_FOOD_RANDOM_1",BS_ITEMINTERA CT);
                 AI_ContinueRoutine(self);
                 
           }
           else if((self.aivar[AIV_Food] == FOOD_Bacon) || (self.aivar[AIV_Food] == FOOD_Bread))
           {
                 AI_PlayAniBS(self,"T_MEAT_RANDOM_1",BS_ITEMINTERA CT);
                 AI_ContinueRoutine(self);
                 
           }
           else if((self.aivar[AIV_Food] == FOOD_Booze) || (self.aivar[AIV_Food] == FOOD_Wine))
           {
                 randomAni = Hlp_Random(5);
                       if(randomAni == 0)
                       {
                             AI_PlayAniBS(self,"T_POTION_RANDOM_3",BS_ITEMINTE RACT);
                             AI_PlayAniBS(self,"T_POTION_RANDOM_1",BS_ITEMINTE RACT);
                             AI_ContinueRoutine(self);
                             
                       }
                       else if(randomAni == 1)
                       {
                             AI_PlayAniBS(self,"T_POTION_RANDOM_1",BS_ITEMINTE RACT);
                             AI_PlayAniBS(self,"T_POTION_RANDOM_2",BS_ITEMINTE RACT);
                             AI_ContinueRoutine(self);
                             
                       }
                       else
                       {
                             AI_PlayAniBS(self,"T_POTION_RANDOM_1",BS_ITEMINTE RACT);
                             AI_ContinueRoutine(self);
                             
                       };
           }
           else if((self.aivar[AIV_Food] == FOOD_Rice) || (self.aivar[AIV_Food] == FOOD_Fishsoup))
           {
                 AI_PlayAni(self,"T_RICE_RANDOM_1");
                 AI_ContinueRoutine(self);
                 
           }
           else if((self.aivar[AIV_Food] == FOOD_Joint) )
           {
                 AI_PlayAniBS(self,"T_JOINT_RANDOM_1",BS_ITEMINTER ACT);
                 AI_ContinueRoutine(self);
                 
           }
           else
           {
                 AI_PlayAniBS(self,"T_FOODHUGE_RANDOM_1",BS_ITEMIN TERACT);
                 AI_ContinueRoutine(self);
                 
           };
           if(self.aivar[AIV_Food] == FOOD_ANI_1)
           {
                 B_Pee(self);
           };
           if(self.aivar[AIV_Food] == FOOD_ANI_2)
           {
                 B_Bored(self);
           };
           Npc_SetStateTime(self,0);
     };
     return LOOP_CONTINUE;

};

func void ZS_StandAround_End()
{
     AI_PlayAniBS(self,"T_POTION_RANDOM_2",BS_ITEMINTE RACT);
     if(self.aivar[AIV_Food] == FOOD_Apple)
     {
           AI_UseItemToState(self,ItFoApple,-1);
     };
     if(self.aivar[AIV_Food] == FOOD_Cheese)
     {
           AI_UseItemToState(self,ItFoCheese,-1);
     };
     if(self.aivar[AIV_Food] == FOOD_Bacon)
     {
           AI_UseItemToState(self,ItFoFish,-1);
     };
     if(self.aivar[AIV_Food] == FOOD_Bread)
     {
           AI_UseItemToState(self,ItFoMutton,-1);
     };
     if(self.aivar[AIV_Food] == FOOD_Booze)
     {
           AI_UseItemToState(self,ItFoBooze,-1);
     };
     if(self.aivar[AIV_Food] == FOOD_Wine)
     {
           AI_UseItemToState(self,ItFo_Potion_Water_01,-1);
     };
     if(self.aivar[AIV_Food] == FOOD_Rice)
     {
           AI_UseItemToState(self,ItFoRice,-1);
     };
     if(self.aivar[AIV_Food] == FOOD_Joint)
     {
           AI_UseItemToState(self,ItMiJoint_1,-1);
     };
};

Проблема в том, что НПС держит в руке к примеру яблоко, а проигрывается анимация куреия косяка. Или пьет из рыбы, кусает тарелку с ухой. Анимация каждый раз разная. Также, почему-то предметы не убираются из рук НПС, т.е. он всегда держит в руке вышеупоянутое яблоко, но то курит его, то ест двумя руками, то чешет им пах  ;D. И третий баг, иногда НПС вообще держит в руках "пустое место", т.е. пригрывает анимацию без предмета в руках.
Ответить с цитированием