Показать сообщение отдельно
Старый 01.05.2011, 15:29   #2439
JohaNBlack

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

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

2Dimus: Это я уже проверил, и некоторые имена изменил, тем более что я компилю через Соурсер, а он бы не допустил неверных имен.

Добавление от 05/01/11, в 14:28:40
Немного уменьшил скрипт:
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(4);
     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,ItFoBooze) == 0)
           {
                 CreateInvItem(self,ItFoBooze);
           };
           self.aivar[AIV_Food] = FOOD_Booze;
     }
     else if(random ==3)
     {
           if(Npc_HasItems(self,ItMiJoint_1) == 0)
           {
                 CreateInvItem(self,ItMiJoint_1);
           };
           self.aivar[AIV_Food] = FOOD_Joint;
     }
     
     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_Booze)
           {
           AI_UseItemToState(self,ItFoBooze,0);
           self.aivar[AIV_TAPOSITION] = ISINPOS;
           }      
           else if(self.aivar[AIV_Food] == FOOD_Joint)
           {
                 AI_UseItemToState(self,ItMiJoint_1,0);
                 self.aivar[AIV_TAPOSITION] = ISINPOS;
           };
     };
     if((Npc_GetStateTime(self) > 5) && (self.aivar[AIV_TAPOSITION] == ISINPOS))
     {
           if(self.aivar[AIV_Food] == FOOD_Apple)
           {
                 AI_PlayAni(self,"T_FOOD_RANDOM_1");
                 //AI_ContinueRoutine(self);
           }
           else if(self.aivar[AIV_Food] == FOOD_CHEESE)
           {
                 AI_PlayAni(self,"T_FOODHUGE_RANDOM_1");
                 //AI_ContinueRoutine(self);
           }
           else if(self.aivar[AIV_Food] == FOOD_Booze)
           {      
                 AI_PlayAni(self,"T_POTION_RANDOM_3");
                 AI_PlayAni(self,"T_POTION_RANDOM_1");
           }                        
           else if(self.aivar[AIV_Food] == FOOD_Joint)
           {
                 AI_PlayAni(self,"T_JOINT_RANDOM_1");
                 //AI_ContinueRoutine(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);
     };
};

Теперь НПС почему-то всегда держат в руке косяк FOOD_Joint, и то кусают его, то курят, то пьют из косяка.


Добавление от 05/01/11, в 15:44:33
У меня получилось! Вот скрипт:

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(4);
     randomAni = Hlp_Random(2);
     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,ItFoBooze) == 0)
           {
                 CreateInvItem(self,ItFoBooze);
           };
           self.aivar[AIV_Food] = FOOD_Booze;
     }
     else if(random == 3)
     {
           if(Npc_HasItems(self,ItMiJoint_1) == 0)
           {
                 CreateInvItem(self,ItMiJoint_1);
           };
           self.aivar[AIV_Food] = FOOD_Joint;
     };
     if(self.aivar[AIV_TAPOSITION] == NOTINPOS)
     {
           if(self.aivar[AIV_Food] == FOOD_Apple)
           {
                 AI_UseItemToState(self,ItFoApple,0);
                 self.aivar[AIV_TAPOSITION] = ISINPOS;
                 AI_PlayAni(self,"T_FOOD_RANDOM_1");
                 AI_wait(self,0.5);
                 return LOOP_END;
                 //AI_ContinueRoutine(self);
           }
           else if(self.aivar[AIV_Food] == FOOD_Cheese)
           {
                 AI_UseItemToState(self,ItFoCheese,0);
                 self.aivar[AIV_TAPOSITION] = ISINPOS;
                 AI_PlayAni(self,"T_FOODHUGE_RANDOM_1");
                 AI_wait(self,0.5);
                 return LOOP_END;
                 //AI_ContinueRoutine(self);
           }
           else if(self.aivar[AIV_Food] == FOOD_Booze)
           {
                 AI_UseItemToState(self,ItFoBooze,0);
                 self.aivar[AIV_TAPOSITION] = ISINPOS;
                 if(randomAni == 0)
                 {
                 AI_PlayAni(self,"T_POTION_RANDOM_3");
                 AI_PlayAni(self,"T_POTION_RANDOM_1");
                 }
                 else if(randomAni == 1)
                 {
                 AI_PlayAni(self,"T_POTION_RANDOM_3");
                 AI_PlayAni(self,"T_POTION_RANDOM_2");
                 }
                 else if(randomAni == 2)
                 {
                 AI_PlayAni(self,"T_POTION_RANDOM_3");
                 };
                 AI_wait(self,0.5);
                 return LOOP_END;
                 //AI_ContinueRoutine(self);
           }      
           else if(self.aivar[AIV_Food] == FOOD_Joint)
           {
                 AI_UseItemToState(self,ItMiJoint_1,0);
                 self.aivar[AIV_TAPOSITION] = ISINPOS;
                 AI_PlayAni(self,"T_JOINT_RANDOM_1");
                 AI_wait(self,0.5);
                 return LOOP_END;
                 
           };
     };
     //if((Npc_GetStateTime(self) > 1) && (self.aivar[AIV_TAPOSITION] == ISINPOS))
     //{
     //      if(self.aivar[AIV_Food] == FOOD_Apple)
           //{
                 
           //}
           //else if(self.aivar[AIV_Food] == FOOD_CHEESE)
           //{
                 
           //}
           //else if(self.aivar[AIV_Food] == FOOD_Booze)
           //{      
                 
           //}                        
           //else if(self.aivar[AIV_Food] == FOOD_Joint)
           //{
           
           //};
           //Npc_SetStateTime(self,0);
     //};
     AI_wait(self,1.5);
     return LOOP_CONTINUE;

};

func void ZS_StandAround_End()
{
     //AI_PlayAniBS(self,"T_POTION_RANDOM_2",BS_ITEMINTER ACT);
     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);
     };
};


Добавление от 05/01/11, в 15:49:07
И опять новый вопрос  :( Я использую скриптовую болванку от WSA с комментариями. И почему-то НПС не реагируют на убийство   :'(. Хотя реагируют на оружие, магию и мобов. Отношения гильдий настроены правильно, если ударить НПС, все ближайшие люди из его гильдии кинутся его защищать, а вот убийство даже согильдийца оставляют без внимания.
Ответить с цитированием