[GOTHIC 2 NK] Problem z kopaniem rudy 4655 4

O temacie

Autor Sevil

Zaczęty 21.07.2018 roku

Wyświetleń 4655

Odpowiedzi 4

Sevil

Sevil

Użytkownicy
posty3
Profesjabrak
  • Użytkownicy
Cześć wszystkim.

Mam problem z kopaniem rudy, otóż wzorowałem się na tych tematach + tym co jest w skryptach samego Gothica

https://themodders.org/index.php?topic=23954.0 <- Temat Gravier'a
https://themodders.org/index.php?topic=16949.msg1032218#msg1032218 <- Temat Toworish'a

Wstawiam kod żeby ktoś mógł zweryfikować czy jest ok.

Plik OreMining.d
Spoiler
FUNC INT B_MagicOreMob_Target ()
{
if Hlp_StrCmp (Npc_GetNearestWP (self), "XARDAS_MINING_TEST") && (MagicOreMob_01_Amount_MAX > MagicOreMob_01_Amount)
{
MagicOreMob_01_Amount = (MagicOreMob_01_Amount + 1);
return TRUE;
};

return FALSE;
};

FUNC VOID OreMining_S1 ()
{
var C_NPC her; her = Hlp_GetNpc(PC_Hero);

if  (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(her))
{
self.aivar[AIV_INVINCIBLE] = TRUE;
PLAYER_MOBSI_PRODUCTION = MOBSI_OREMINING;
Ai_ProcessInfos (her);
};
};

INSTANCE PC_OreMining_End (C_Info)
{
npc = PC_Hero;
nr = 999;
condition = PC_OreMining_End_Condition;
information = PC_OreMining_End_Info;
permanent = TRUE;
description = DIALOG_ENDE;
};

FUNC INT PC_OreMining_End_Condition ()
{
if (PLAYER_MOBSI_PRODUCTION == MOBSI_OREMINING)
{
return TRUE;
};
};

FUNC VOID PC_OreMining_End_Info ()
{
Remains_Count = 0;

B_ENDPRODUCTIONDIALOG ();
};

INSTANCE PC_OreMining_Hour (C_Info)
{
npc = PC_Hero;
nr = 2;
condition = PC_OreMining_Hour_Condition;
information = PC_OreMining_Hour_Info;
permanent = TRUE;
description = "Odłup trochę.";
};

FUNC INT PC_OreMining_Hour_Condition ()
{
if (PLAYER_MOBSI_PRODUCTION == MOBSI_OREMINING)
{
return TRUE;
};
};

var int MagicOreCounter;

FUNC VOID PC_OreMining_Hour_Info ()
{
Learn_mining_by_doing = (Learn_mining_by_doing + 1);

if (Learn_mining_by_doing == 10)
{
B_Upgrade_Hero_DigChance (2);
}
else if (Learn_mining_by_doing == 15)
{
B_Upgrade_Hero_DigChance (3);
}
else if (Learn_mining_by_doing == 20)
{
B_Upgrade_Hero_DigChance (5);
};

var int CurrentChance;
CurrentChance = Hlp_Random (100);

var int MultiNugget;
MultiNugget = Hlp_Random (10);

if (B_MagicOreMob_Target() == TRUE)
{
if (CurrentChance <= Hero_DigChance)
{
if (MagicOreCounter >= 20)
&& (MultiNugget >= 8)
{
CreateInvItems (hero, ItMi_Nugget, 3);
PrintScreen ("Odpadły 3 kawałki rudy!", -1, -1, FONT_ScreenSmall, 2);
Remains_Count = 0;
}
else if (MagicOreCounter >= 7)
&& (MultiNugget >= 5)
{
CreateInvItems (hero, ItMi_Nugget, 2);
PrintScreen ("Odpadły 2 kawałki rudy!", -1, -1, FONT_ScreenSmall, 2);
Remains_Count = 0;
MagicOreCounter = (MagicOreCounter + 1);
}
else
{
CreateInvItems (hero, ItMi_Nugget, 1);
PrintScreen ("Odpadł 1 kawałek rudy!", -1, -1, FONT_ScreenSmall, 2);
Remains_Count = 0;
MagicOreCounter = (MagicOreCounter + 1);
};
}
else
{
PrintScreen ("Kawałki złota zasypują okolicę...", -1, -1, FONT_ScreenSmall, 2);
Remains_Count = (Remains_Count + 1);
};
}
else
{
PrintScreen ("Nic nie zostało.", -1, -1, FONT_ScreenSmall, 2);
B_ENDPRODUCTIONDIALOG ();
};
};

INSTANCE PC_OreMining_HardDig (C_Info)
{
npc = PC_Hero;
nr = 997;
condition = PC_OreMining_HardDig_Condition;
information = PC_OreMining_HardDig_Info;
permanent = TRUE;
description = "Mocno uderz.";
};

FUNC INT PC_OreMining_HardDig_Condition ()
{
if (PLAYER_MOBSI_PRODUCTION == MOBSI_OREMINING)
&& (Remains_Count >= 2)
&& (Knows_HardDig == TRUE)
{
return TRUE;
};
};

FUNC VOID PC_OreMining_HardDig_Info()
{
var int HardDigChance;
HardDigChance = Hlp_Random (100);

if (HardDigChance < 5)
{
PrintScreen ("Nic...", -1, -1, FONT_ScreenSmall, 2);
}
else
{
Snd_Play ("RAVENS_EARTHQUAKE3");
Wld_PlayEffect("FX_EarthQuake",  self, self, 0, 0, 0, FALSE );

if (HardDigChance >= 85)
{
CreateInvItems (hero, ItMi_Nugget, 3);
PrintScreen ("Odpadły 3 kawałki rudy!", -1, -1, FONT_ScreenSmall, 2);
}
else if (HardDigChance >= 50)
{
CreateInvItems (hero, ItMi_Nugget, 2);
PrintScreen ("Odpadły 2 kawałki rudy!", -1, -1, FONT_ScreenSmall, 2);
}
else
{
CreateInvItems (hero, ItMi_Nugget, 1);
PrintScreen ("Odpadł 1 kawałek rudy!", -1, -1, FONT_ScreenSmall, 2);
};
};

Remains_Count = 0;
};

INSTANCE PC_OreMining_Chance (C_Info)
{
npc = PC_Hero;
nr = 998;
condition = PC_OreMining_Chance_Condition;
information = PC_OreMining_Chance_Info;
permanent = TRUE;
description = "(Ocena zdolności)";
};

FUNC INT PC_OreMining_Chance_Condition ()
{
if (PLAYER_MOBSI_PRODUCTION == MOBSI_OREMINING)
{
return TRUE;
};
};

FUNC VOID PC_OreMining_Chance_Info()
{
var string ConcatText;

if (Hero_DigChance < 20)
{
ConcatText = ConcatStrings ("nieopierzony żółtodziób (", IntToString (Hero_DigChance));
}
else if (Hero_DigChance < 40)
{
ConcatText = ConcatStrings ("przeciętny kopacz (" , IntToString (Hero_DigChance));
}
else if (Hero_DigChance < 55)
{
ConcatText = ConcatStrings ("doświadczony kopacz (", IntToString (Hero_DigChance));
}
else if (Hero_DigChance < 75)
{
ConcatText = ConcatStrings ("urodzony kopacz ( ", IntToString (Hero_DigChance));
}
else if (Hero_DigChance < 90)
{
ConcatText = ConcatStrings ("piekielnie dobry kopacz ( ", IntToString (Hero_DigChance));
}
else if (Hero_DigChance < 98)
{
ConcatText = ConcatStrings ("mistrz kopania ( ", IntToString (Hero_DigChance));
}
else
{
ConcatText = ConcatStrings ("guru kopaczy ( ", IntToString (Hero_DigChance));
};

ConcatText = ConcatStrings (concatText, " procent)");

PrintScreen (concatText, -1, -1, FONT_ScreenSmall,2);
};

Plik B_Upgrade_Hero_DigChance.d
Spoiler
FUNC VOID B_Upgrade_Hero_DigChance (var int value)
{
var string concatText;

concatText = ConcatStrings (PRINT_DLC_DIGCHANCE, IntToString(value));
concatText = ConcatStrings (concatText, ")");
PrintScreen (concatText, -1, 34, FONT_ScreenSmall, 2);

Hero_DigChance = (Hero_DigChance + value);

Snd_Play ("Geldbeutel");

};

No i teraz tak:
Zrobiłem dokładnie tak jak było opisane to w tych tematach co znalazłem.
Po kolei:
1. Wstawiałem zmienne tam gdzie być powinny czyli:
Hero_DigChance = 10; - w pliku Startup.d wewnątrz funkcji FUNC VOID STARTUP_NewWorld()
var int Hero_DigChance;
var int Remains_Count;
var int Knows_HardDig;
var int Learn_mining_by_doing;

var int MagicOreMob_01_Amount;

const int MagicOreMob_01_Amount_MAX =  5;

W Story_Globals.d na samym dole (Tak dodałem ENTER na końcu)

const int MOBSI_OREMINING = 8; - Pod pozostałymi MOBSI w pliku AI_Constants.d

const string DIALOG_DLC_MAGICORE_DESCRIPTION = "Co muszę wiedzieć o wydobyciu rudy?";
const string PRINT_DLC_DIGCHANCE = "Zwiększyła się umiejętność wydobywania rudy! (+";

W pliku Text.d też na końcu przed ENTEREM

STORY\B_Content\B_Upgrade_Hero_DigChance.d   -   W tym samym miejscu gdzie ścieżka do oryginalnego pliku

Wszystkie pliki są umieszczone w tych samych folderach.

2. Dodałem w spacerze interesującą mnie żyłę tak jak na obrazku, dodałem obok niej Waypointa Freepointa połączonego z innym aby była ścieżka (podobnie jak w AddonWorld.zen)
https://imgur.com/wKNnWKa

3. Zapisałem zena wczytałem żeby sprawdzić czy wszystko OK i jest.
4. Potem Naprawa skryptów
5. Na wszelki wypadek utworzyłem na nowo OU.BIN i OU.CSL Redefixem
6. Utworzyłem na nowo paczkę z modem
7. Odpaliłem nową grę i tu zaczyna się ten problem...

Po interakcji z rudą nic się nie wyświetla. Po prostu wygląda to tak jak bym nic nie zrobił. Znaczy kopać kopie (Animacja kopania itp.) ale nie działa to tak jak przy kopaniu złota czyli przy interakcji z Bryłą złota otwiera się dialog kopania.

Pomoże ktoś? Może ktoś już to ogarnął? Szukałem trochę w necie czy poza tymi dwoma tematami ktoś jeszcze nie próbował tego rozwiązać.
 

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Zaznacz swoją bryłę w Spacerze. Ma ona pole on_state_func. Wpisz tam drukiem: OREMINING

Zrobiłeś funkcję, ale musisz ja wywołać.
 

Sevil

Sevil

Użytkownicy
posty3
Profesjabrak
  • Użytkownicy
Ehh zrobiłem to przed napisaniem posta zresztą zaglądałeś do linka który zamieściłem?

https://imgur.com/wKNnWKa

Jest wpisana, ale i tak nie działa.
 

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
To jeszcze dwa pomysły :

Jesteś pewien, ze interakcji dokonujesz npc PC_Hero? Tylko PC_Hero może nawiązywać monologi.

Jesteś pewien, ze skrypty w ogóle są brane pod uwagę w czasie kompilacji ? Spróbuj celowo zrobić błąd w skryptach. Jak wywali to ok. Czasem tworzy się osobne pliki dla funkcji a potem zapomina dodać w gothic.src
 

Sevil

Sevil

Użytkownicy
posty3
Profesjabrak
  • Użytkownicy
Ok, już wiem co było nie tak...

Miałem ustawionego własnego PC_Hero z inną nazwą po prostu i to dlatego nie działało czyli to co zasugerowałeś jako jedna z przyczyn. Nawet nie wiedziałem, że to mogło być przyczyną problemu. Teraz już działa, zmieniłem z powrotem na domyślnego PC_Hero, wielkie dzięki za pomoc.

Można zamykać
 


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