Funkcja wykonuje się dwa razy 2735 9

O temacie

Autor

Zaczęty 17.01.2014 roku

Wyświetleń 2735

Odpowiedzi 9

gothic1210
  • Gość
Przy on_state funkcja wywołuje się 2 razy. Gdy naciskam ctrl i gdy go puszczam. Da się to zrobić jakimś innym sposobem? Mam skrypt wędkowania  odpalający funkcję przy używaniu wędki. Gdy trzymamy Ctrl to hero wykonuje animację, a gdy puszczamy kończy czynność, ale przy okazji wywołuje znowu skrypt.
Kod:
func void RYBACTWO_S1 ()
{

var C_NPC her; her = Hlp_GetNpc(PC_Hero);
var C_NPC rock; rock = Hlp_GetNpc(PC_Rockefeller);

//***ALT** if (Hlp_GetInstanceID (self)== Hlp_GetInstanceID (Hero)) // MH: geändert, damit kontrollierte NSCs nicht schlafen können!
if ( (Hlp_GetInstanceID(self)==Hlp_GetInstanceID(her))||(Hlp_GetInstanceID(self)==Hlp_GetInstanceID(rock)) )
{
if (Npc_GetDistToWP (hero, "POMOST") < 300) || (Npc_GetDistToWP (hero, "POMOST2") < 300) || (Npc_GetDistToWP (hero, "POMOST3") < 300) || (Npc_GetDistToWP (hero, "POMOST4") < 300) || (Npc_GetDistToWP (hero, "POMOST5") < 300)
|| (Npc_GetDistToWP (hero, "POMOST6") < 300) || (Npc_GetDistToWP (hero, "POMOST7") < 300) || (Npc_GetDistToWP (hero, "POMOST8") < 300) || (Npc_GetDistToWP (hero, "POMOST9") < 300) || (Npc_GetDistToWP (hero, "POMOST10") < 300)
 {
// print ("MONOLOG_DZIAŁA");
//wycięte
//monolog = Rybactwo;
//AI_ProcessInfos(hero);
//AI_PlayAni (hero, "Hum_Innos_A01.asc");
fishing_main_func ();
}
else
{
//print ("WARUNEK_ELSE_DZIAŁA");
PrintScreen ("Nie możesz tu łowić!", -1, -1, "Font_New_10_Red.TGA", 1);
};
};
};
Wcześniej skrypt odpalał monolo, ale teraz robię to inaczej. W tej funkcji fishing_main_func  () sprawdzane jest czy hero posiada przedmiot "przynęta" i, jeżeli go ma to rozpoczyna się losowanie złowionej ryby. Gracz puszcza Ctrl, pobierana jest druga "przynęta" i łowiona kolejna ryba. Tego właśnie buga chcę obejść.
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Pokaż wszystkie używane skrypty i powiedz jaki to Gothic. W przeciwnym wypadku, każdy odpisze Ci "To napraw ten problem.". Skąd mamy wiedzieć, co jest zrobione źle, jak nie wiemy jak jest napisany skrypt? 
 
: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.

gothic1210
  • Gość
Gothic 1. Spróbowałem nawet dodać bezpośrednio funkcję w to miejsce zamiast odwołania i dalej nic się nie zmieniło. Także twoje obawy, że w funkcji, której nie skopiowałem jest coś źle napisane były zbędne ; p
INSTANCE ItMi_Angel (C_Item)
{
name = "Wędka";

mainflag = ITEM_KAT_NONE;
flags = ITEM_MULTI;

value = 30;

visual = "Angel.3DS";
material = MAT_WOOD;

scemeName = "ANGEL";
on_state[0] = RYBACTWO_S1;
description = name;

TEXT[5] = NAME_Value;
COUNT[5] = value;
};
func void RYBACTWO_S1 ()
{

var C_NPC her; her = Hlp_GetNpc(PC_Hero);
var C_NPC rock; rock = Hlp_GetNpc(PC_Rockefeller);

//***ALT** if (Hlp_GetInstanceID (self)== Hlp_GetInstanceID (Hero)) // MH: geändert, damit kontrollierte NSCs nicht schlafen können!
if ( (Hlp_GetInstanceID(self)==Hlp_GetInstanceID(her))||(Hlp_GetInstanceID(self)==Hlp_GetInstanceID(rock)) )
{
if (Npc_GetDistToWP (hero, "POMOST") < 300) || (Npc_GetDistToWP (hero, "POMOST2") < 300) || (Npc_GetDistToWP (hero, "POMOST3") < 300) || (Npc_GetDistToWP (hero, "POMOST4") < 300) || (Npc_GetDistToWP (hero, "POMOST5") < 300)
|| (Npc_GetDistToWP (hero, "POMOST6") < 300) || (Npc_GetDistToWP (hero, "POMOST7") < 300) || (Npc_GetDistToWP (hero, "POMOST8") < 300) || (Npc_GetDistToWP (hero, "POMOST9") < 300) || (Npc_GetDistToWP (hero, "POMOST10") < 300)
 {
if (Npc_HasItems (hero, ItMi_bait_02) >=1)
{
Npc_RemoveInvItems (hero, ItMi_bait_02, 1);
Losowanie_fish2 = Hlp_Random (10);
if (Losowanie_fish2 == 1) || (Losowanie_fish2 == 7)
{
Print ("Złowiłeś płotkę!");
CreateInvItems (hero, ItFo_Fish6, 1);
};
if (Losowanie_fish2 == 2)
{
Print ("Złowiłeś pstrąga!");
CreateInvItems (hero, ItFo_Fish2, 1);
};
if (Losowanie_fish2 == 4) || (Losowanie_fish2 == 10)
{
Print ("Wyłowiłeś glona!");
CreateInvItems (hero, ItFo_Plants_Glon, 1);
};
if (Losowanie_fish2 == 4)
{
Print ("Nic nie złowiłeś!");
};
if (Losowanie_fish2 == 5) || (Losowanie_fish2 == 9)
{
Print ("Złowiłeś karasia!");
CreateInvItems (hero, ItFo_Fish4, 1);
};
if (Losowanie_fish2 == 6) || (Losowanie_fish2 == 8)
{
Print ("Walczysz z pstrągiem tęczowym!");
Losowanie_SuperFish = Hlp_Random (2);
if Losowanie_SuperFish
{
Print ("Udało się! Złowiłeś pstrąga tęczowego!");
CreateInvItems (hero, ItFo_Fish5, 1);
} else {
Print ("Ryba uciekła!");
};
};
}
else if (Npc_HasItems (hero, ItMi_bait_01) >=1)
{

Npc_RemoveInvItems (hero, ItMi_bait_01, 1);

Losowanie_fish4 = Hlp_Random (10); //100%
if (Losowanie_fish4 == 1) || (Losowanie_fish4 == 3)  || (Losowanie_fish4 == 6)  || (Losowanie_fish4 == 8) 
{
Print ("Złowiłeś płotkę!");
CreateInvItems (hero, ItFo_Fish6, 1);
};
if (Losowanie_fish4 == 2)  || (Losowanie_fish4 == 4) 
{
Print ("Wyłowiłeś glona!");
CreateInvItems (hero, ItFo_Plants_Glon, 1);
};
if (Losowanie_fish4 == 4)  || (Losowanie_fish4 == 5)  || (Losowanie_fish4 == 7) 
{
Print ("Nic nie złowiłeś!");
};
if (Losowanie_fish4 == 9) 
{
Print ("Walczysz z pstrągiem tęczowym!");
Losowanie_SuperFish = Hlp_Random (2);
if Losowanie_SuperFish
{
Print ("Udało się! Złowiłeś pstrąga tęczowego!");
CreateInvItems (hero, ItFo_Fish5, 1);
} else {
Print ("Ryba uciekła!");
};
};
};
}
else
{
PrintScreen ("Nie możesz tu łowić!", -1, -1, "Font_New_10_Red.TGA", 1);
};
};
};
To jest jakiś bug Gothica. Może w MDS da się to naprawić tak jak niby z dublującymi się przedmiotami?
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Spróbuj zmienić wszystkie hero, her, other i itp. na self. Może to pomóc. Raz mi się obiło o uszy, że używanie hero itp. w skryptach przedmiotów jest zbugowane, lecz nigdy nie wiedziałem, czy to prawda.
 
: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.

gothic1210
  • Gość
Ale wtedy skrypt nie będzie działał dla wszystkich NPC? To by było niepożądane.
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
A jakby było hero, a twój "sąsiad" z tego samego WP co Ty by łowił, to Ty byś dostawał ryby za jego łowienie.
 
: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.

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Cytuj
Raz mi się obiło o uszy, że używanie hero itp. w skryptach przedmiotów jest zbugowane, lecz nigdy nie wiedziałem, czy to prawda.
Nie zbugowane, tylko pozbawione sensu, chyba że chcesz żeby coś działo się z bohaterem gracza nawet jeśli to inny npc użyje przedmiotu / zrobi coś. A zwykle chcesz żeby działo się to z tym kto daną czynność wykonuje. Jeśli ma to być tylko hero, to dodaj warunek sprawdzający czy 
Npc_IsPlayer(self);

gothic1210
  • Gość
No macie rację, ale co z tego. Uprościłem ten skrypt żeby wam zobrazować lepiej. 
func void RYBACTWO_S1 ()
{
var C_NPC her;    her = Hlp_GetNpc(PC_Hero); 
   var C_NPC rock; rock = Hlp_GetNpc(PC_Rockefeller);
   
   //***ALT** if   (Hlp_GetInstanceID (self)== Hlp_GetInstanceID (Hero)) // MH: geändert, damit kontrollierte NSCs nicht schlafen können!
   if ( (Hlp_GetInstanceID(self)==Hlp_GetInstanceID(her))||(Hlp_GetInstanceID(self)==Hlp_GetInstanceID(rock)) ) 
   {   
if (Npc_GetDistToWP (hero, "POMOST") < 300) || (Npc_GetDistToWP (hero, "POMOST2") < 300) || (Npc_GetDistToWP (hero, "POMOST3") < 300) || (Npc_GetDistToWP (hero, "POMOST4") < 300) || (Npc_GetDistToWP (hero, "POMOST5") < 300)
|| (Npc_GetDistToWP (hero, "POMOST6") < 300) || (Npc_GetDistToWP (hero, "POMOST7") < 300) || (Npc_GetDistToWP (hero, "POMOST8") < 300) || (Npc_GetDistToWP (hero, "POMOST9") < 300) || (Npc_GetDistToWP (hero, "POMOST10") < 300)
 {
print ("napis");   

else

PrintScreen ("Nie możesz tu łowić!", -1, -1, "Font_New_10_Red.TGA", 1);
};
};
};


Widzicie, że napis wyświetlił się 2 razy? No i właśnie nie wiem jak to obejść. 
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
var int wedkowanieTrwa;
func void RYBACTWO_S1 ()
{
if (Npc_IsPlayer(self)) //ten warunek można wyrazić też na inne sposoby
{
if (wedkowanieTrwa)
{
wedkowanieTrwa = false;
}
else
{
wedkowanieTrwa = true;
if (Npc_GetDistToWP (hero, "POMOST" ) < 300) ||
   (Npc_GetDistToWP (hero, "POMOST2") < 300) ||
   (Npc_GetDistToWP (hero, "POMOST3") < 300) ||
   (Npc_GetDistToWP (hero, "POMOST4") < 300) ||
   (Npc_GetDistToWP (hero, "POMOST5") < 300) ||
   (Npc_GetDistToWP (hero, "POMOST6") < 300) ||
   (Npc_GetDistToWP (hero, "POMOST7") < 300) ||
   (Npc_GetDistToWP (hero, "POMOST8") < 300) ||
   (Npc_GetDistToWP (hero, "POMOST9") < 300) ||
   (Npc_GetDistToWP (hero, "POMOST10") < 300)
{
print ("napis");
//tu (i tylko tu) dajesz to co ma się ewentualnie dziać
}
else
{
PrintScreen ("Nie możesz tu łowić!", -1, -1, "Font_New_10_Red.TGA", 1);
};
};
};
};

gothic1210
  • Gość
Dzięki Avallach za pomoc. Teraz jest tak jak powinno. Można zamknąć temat. 
 


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