|
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 с комментариями. И почему-то НПС не реагируют на убийство :'(. Хотя реагируют на оружие, магию и мобов. Отношения гильдий настроены правильно, если ударить НПС, все ближайшие люди из его гильдии кинутся его защищать, а вот убийство даже согильдийца оставляют без внимания.
|