|
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. И третий баг, иногда НПС вообще держит в руках "пустое место", т.е. пригрывает анимацию без предмета в руках.
|