Nowy B_ skrypt 2994 5

O temacie

Autor Pragasek

Zaczęty 19.01.2014 roku

Wyświetleń 2994

Odpowiedzi 5

Pragasek

Pragasek

Użytkownicy
posty334
Propsy39
ProfesjaSkrypter
  • Użytkownicy
Otóż napisałem NPC dialog w którym daje nam zadanie. Chciałbym aby gdy staniemy blisko danego waypointa on się przeteleportował koło nas dlatego napisałem ten skrypt :

// ***************************************************
//  B_NpcSurprise
// ***************************************************
var int NPC_Appear;
func int B_TeleportNpc()
{
if (Npc_GetDistToWP (other, "xxx") < 200)
{
if (Npc_Mission = TRUE)
{
AI_Teleport (NPC, "xxx");
Npc_ExchangeRoutine (NPC, "ATTACK");
Npc_Appear = TRUE;
};
};
}; 

Oczywiście w dialogu dałem zmienną która powinna uruchamiać ten skrypt w tym przypadku (if npc_mission = TRUE).  Ale niestety dany npc nie pojawia się gdy zbliżam się do waypointa. Czy powinienem dodać coś jeszcze w dialogu?

Oczywiście tam gdzie jest "xxx" i "npc" dałem waypointy i instancje npcka. Plik dodałem do Content/Story/B_Content i jest to do Gothica 2.

Mógłby ktoś pomóc? Byłbym wdzięczny! Z góry dzięki...

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
NPC musi być wstawiony w świecie. Jeśli chcesz, żeby NPC nie było nigdzie, ale był aktywny w grze, daj mu WP "TOT" (jest on we wszystkich światach Gothic'a 2) i potem go przywołuj tym skryptem. Jeśli zaś NPC ma się dopiero co pojawić, musisz użyć "Wld_InsertNpc (NPC, WP);".
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Pragasek

Pragasek

Użytkownicy
posty334
Propsy39
ProfesjaSkrypter
  • Użytkownicy
W tym rzecz, że npc jest powiedzmy w obozie, a gdy staniemy blisko danego waypointa chce aby teleportował się z obozu, do danego waypointa.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Czyli chcesz żeby to się stało poza dialogiem? Jeśli tak to musisz użyć do tego LeGo FrameFunctions, albo TickTock'a. Jeśli zaś chcesz, żeby to się działo tylko w dialogu, dajesz ten skrypt do dialogu.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Pragasek

Pragasek

Użytkownicy
posty334
Propsy39
ProfesjaSkrypter
  • Użytkownicy
Tak poza dialogiem. W takim razie dupa, bo w TickTock'ach to ja jestem zielony:L

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Cytuj
w dialogu dałem zmienną która powinna uruchamiać ten skrypt w tym przypadku (if npc_mission = TRUE).
Chyba chodziło ci o to że w funkcji dialogu dałeś wywołanie funkcji B_TeleportNpc jeśli jest spełniony warunek. Nie ma czegoś takiego jak "dawanie zmiennej w dialogu", "zmienna która uruchamia" ani "uruchamianie skryptu".

Jeśli tak, to dzieje się dokładnie to co zaprogramowałeś. W trakcie dialogu jest sprawdzane czy ktośtam jest przy waypoincie. Ponieważ nie jest, funkcja się kończy nic nie robiąc. Tyle.
Ty prawdopodobnie chcesz żeby ta funkcja była wywołana PO dialogu, nie w jego trakcie, na dodatek "ciągle". No to musisz ją wywołać czym innym. Pętle w stylu ticktocków czy frame functions by się sprawdziły, ale to overkill. Umieść po prostu na waypoincie trigger reagujący na dotyk, daj mu odpowiednią wielkość i ustaw żeby aktywowany odpalał twoją funkcję (i nie ma potrzeby dawania w niej dodatkowych warunków).

Ogólnie popełniasz ten sam banalny błąd co wiele osób które mają pierwszy raz styczność z programowaniem. Myślisz że jak zrobisz funkcję i dasz w niej jakiś warunek, to ona wywoła się sama z siebie kiedy ten warunek zostanie spełniony. Nie. Warunek może sprawić że kod się NIE wywoła. Nie może wywołać go "dodatkowo", nawet wtedy kiedy ty niczym go nie wywołujesz. Sposoby wywoływania funkcji masz podsumowane tutaj: http://themodders.org/index.php?topic=13208


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