Problem z monologiem 14731 56

O temacie

Autor Orion

Zaczęty 10.05.2013 roku

Wyświetleń 14731

Odpowiedzi 56

Orion

Orion

Użytkownicy
posty41
  • Użytkownicy

Orion

Problem z monologiem
#20 2013-05-15, 18:23(Ostatnia zmiana: 2013-05-15, 18:24)
Dzięki, znalazłem w C:\Program Files\Piranha Bytes\Gothic\_Work\Data\Anims\MDS_MOBSI plik BSANVIL_OC.MDS, jednak nie widzę tam żadnych treści z tym związanych.
Oto treść:
Spoiler
Model ("BSANVIL_OC")
{

meshAndTree ("BSANVIL_OC.asc")
aniEnum
{
ani ("s_S0" 1 "s_S0" 0.0 0.0 M. "BSANVIL_OC_USE.asc" F 3 3)
ani ("t_S0_2_S1" 1 "s_S1" 0.0 0.0 M. "BSANVIL_OC_USE.asc" F 4 9)
ani ("s_S1" 1 "s_S1" 0.0 0.0 M. "BSANVIL_OC_USE.asc" F 10 47)
{
*eventSFX (30 "Forge_Anvil")
*eventPFX (30   1 "ANVIL_SPARKS" "BIP01 PFX_SPARK")
*eventSFX (38 "Forge_Anvil")
}
ani ("t_S1_2_S0" 1 "s_S0" 0.0 0.0 M. "BSANVIL_OC_USE.asc" R 4 9)
}
}
W którym miejscu jest opisana zmiana Rozgrzanej stali na Rozgrzane ostrze?
 

Orion

Orion

Użytkownicy
posty41
  • Użytkownicy
Mam jeszcze jedno pytanie. Gdzie znajdę pliki o rozszerzeniu .asc? Skąd mam je wypakować? (Przepraszam za podwójnego posta, ale chciałem, aby ktoś zauważył zmianę w temacie.)
 

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Są w folderze _compiled... w wersji skompilowanej, zdekompilować je może gothic sourcer.
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny

Orion

Orion

Użytkownicy
posty41
  • Użytkownicy
O które _compiled chodzi? Jest kilka takich folderów.
 

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
anims/_compiled
Dekompilujesz plik MDS, jest o tym tutorial na forum.
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny

Orion

Orion

Użytkownicy
posty41
  • Użytkownicy

Orion

Problem z monologiem
#25 2013-05-15, 22:39(Ostatnia zmiana: 2013-05-15, 22:45)
W tym folderze nie mam plików MDS, tylko pliki MAN, MDM, MDH. Pliki MDS mam w folderach _Work\Data\Anims, _Work\Data\Anims\MDS_OVERLAY, _Work\Data\Anims\MDS_MOBSI, ale ich jest dużo, i nie wiem, którego wybrać.

Ok, dzięki, już mam.
 

Orion

Orion

Użytkownicy
posty41
  • Użytkownicy
Mam taki problem: mój skrypt działa, ale działają jeszcze skrypty z oryginału. Wygląda to tak, że mam monolog w grze, ale przy korzystaniu z niego samoistnie przerabia mi jedną rozgrzaną stal na rozgrzane ostrze. Próbowałem sam sobie z tym poradzić, zobaczyłem jak to jest w Mrocznych Tajemnicach. Tam korzystając z monologu kowadła nie przerabia nam niczego na rozgrzane ostrze, więcej usunąłem pliki BSANVIL_OC.MDH, BSANVIL_OC-S-S0.MAN itd. z folderu Anims, bo nie znalazłem ich rozpakowując DM_Anim.mod, ale nic się nie zmieniło, więc pytam teraz - jak usunąć możliwość automatycznego przerabiania rozgrzanej stali na rozgrzane ostrze na kowadle?
 

Orion

Orion

Użytkownicy
posty41
  • Użytkownicy

Orion

Problem z monologiem
#27 2013-05-20, 08:28(Ostatnia zmiana: 2013-05-20, 08:30)
No to napiszę prosto z mostu. Czy ktoś ma jakiś pomysł, jak mam zrobić tak, aby podczas korzystania z kowadła wyświetlała nam się rozgrzana stal w prawej ręce, ale nie zabierało nam jej, i nie dawało rozgrzanego ostrza? Ustawiając inne rzeczy na UseWithItem w Spacerze, nasz bohater korzysta z innego itemu w prawej ręce, a gdy usunąłem skryptu rozgrzanego ostrza, to zabierało nam kawałek rozgrzanej stali i nie dawało nic, ale mi chodzi o to, że postać ma trzymać w ręce rozgrzaną stal, ale jej nie zużywać, i nie dostawać rozgrzanego ostrza. Jeżeli usunę skrypty rozgrzanej stali, albo w UseWithIItem nie dam nic, to postać będzie miała prawą rękę pustą, a w lewej będzie młot. Wiem, że takie coś jest możliwe, ponieważ tak jest w Mrocznych Tajemnicach, problem w tym, że od dwóch tygodni próbuję to zrobić, i nie wiem jak.
Jeżeli ktoś uzna to za przydatne, to oto pliki, które odkopałem w GothicVDFS, plik .asc mam z Gothic Sourucer'a.

BSANVIL_OC.MDS (C:\Program Files\Piranha Bytes\Gothic\_Work\Data\Anims\MDS_MOBSI)
Spoiler
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Last Changes:
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


Model ("BSANVIL_OC")
{

meshAndTree ("BSANVIL_OC.asc")
aniEnum
{
ani ("s_S0" 1 "s_S0" 0.0 0.0 M. "BSANVIL_OC_USE.asc" F 3 3)
ani ("t_S0_2_S1" 1 "s_S1" 0.0 0.0 M. "BSANVIL_OC_USE.asc" F 4 9)
ani ("s_S1" 1 "s_S1" 0.0 0.0 M. "BSANVIL_OC_USE.asc" F 10 47)
{
*eventSFX (30 "Forge_Anvil")
*eventPFX (30   1 "ANVIL_SPARKS" "BIP01 PFX_SPARK")
*eventSFX (38 "Forge_Anvil")
}
ani ("t_S1_2_S0" 1 "s_S0" 0.0 0.0 M. "BSANVIL_OC_USE.asc" R 4 9)
}
}
BSANVIL_OC.ASC (C:\Program Files\GothicSourcer V3.10\Gothic Projects\Anims\asc_bsanvil_oc)
Spoiler
*3DSMAX_ASCIIEXPORT 110
*COMMENT "[ GothicSourcer v3.10 ] - August 2006"
*SCENE {
*SCENE_FILENAME "BSANVIL_OC.MAX"
*SCENE_FIRSTFRAME 0
*SCENE_LASTFRAME 100
*SCENE_FRAMESPEED 25
*SCENE_TICKSPERFRAME 192
*SCENE_BACKGROUND_STATIC 0 0 0
*SCENE_AMBIENT_STATIC 0.2 0.2 0.2
}
*MATERIAL_LIST {
*MATERIAL_COUNT 1
*MATERIAL 0 {
*MATERIAL_NAME "Compound Material #1"
*MATERIAL_CLASS "Multi/Sub-Object"
*NUMSUBMTLS 2
*SUBMATERIAL 0 {
*MATERIAL_NAME "MATERIAL #5"
*MATERIAL_CLASS "Standard"
*MATERIAL_AMBIENT 0.341176 0.356863 0.345098
*MATERIAL_DIFFUSE 0.341176 0.356863 0.345098
*MATERIAL_SPECULAR 0.9 0.9 0.9
*MATERIAL_SHINE 0.1
*MATERIAL_SHINESTRENGTH 0
*MATERIAL_TRANSPARENCY 0
*MATERIAL_WIRESIZE 1
*MATERIAL_SHADING Blinn
*MATERIAL_XP_FALLOFF 0
*MATERIAL_SELFILLUM 0
*MATERIAL_FALLOFF In
*MATERIAL_XP_TYPE Filter
*MAP_DIFFUSE {
*MAP_NAME "Map #1-1"
*MAP_CLASS "Bitmap"
*MAP_SUBNO 1
*MAP_AMOUNT 1
*BITMAP "MOMEMETALS01.TGA"
*MAP_TYPE Screen
*UVW_U_OFFSET 0
*UVW_V_OFFSET 0
*UVW_U_TILING 1
*UVW_V_TILING 1
*UVW_ANGLE 0
*UVW_BLUR 1
*UVW_BLUR_OFFSET 0
*UVW_NOUSE_AMT 1
*UVW_NOISE_SIZE 1
*UVW_NOISE_LEVEL 1
*UVW_NOISE_PHASE 0
*BITMAP_FILTER Pyramidal
}
}
*SUBMATERIAL 1 {
*MATERIAL_NAME "MATERIAL #1"
*MATERIAL_CLASS "Standard"
*MATERIAL_AMBIENT 0.2 0.145098 0.113725
*MATERIAL_DIFFUSE 0.2 0.145098 0.113725
*MATERIAL_SPECULAR 0.9 0.9 0.9
*MATERIAL_SHINE 0.1
*MATERIAL_SHINESTRENGTH 0
*MATERIAL_TRANSPARENCY 0
*MATERIAL_WIRESIZE 1
*MATERIAL_SHADING Blinn
*MATERIAL_XP_FALLOFF 0
*MATERIAL_SELFILLUM 0
*MATERIAL_FALLOFF In
*MATERIAL_XP_TYPE Filter
*MAP_DIFFUSE {
*MAP_NAME "Map #1-2"
*MAP_CLASS "Bitmap"
*MAP_SUBNO 1
*MAP_AMOUNT 1
*BITMAP "MOWOWOODS01.TGA"
*MAP_TYPE Screen
*UVW_U_OFFSET 0
*UVW_V_OFFSET 0
*UVW_U_TILING 1
*UVW_V_TILING 1
*UVW_ANGLE 0
*UVW_BLUR 1
*UVW_BLUR_OFFSET 0
*UVW_NOUSE_AMT 1
*UVW_NOISE_SIZE 1
*UVW_NOISE_LEVEL 1
*UVW_NOISE_PHASE 0
*BITMAP_FILTER Pyramidal
}
}
}
}
*HELPEROBJECT {
*NODE_NAME "Bip01 Anvil"
*NODE_TM {
*NODE_NAME "Bip01 Anvil"
*TM_ROW0 2.08616e-007 1 -5.96046e-008
*TM_ROW1 -5.96046e-008 2.08616e-007 1
*TM_ROW2 1 -5.96046e-008 2.08616e-007
*TM_ROW3 3e-006 -75 -3e-006
*TM_POS 3e-006 -75 -3e-006
*TM_ROTAXIS -0.57735 -0.57735 -0.57735
*TM_ROTANGLE 2.09439
*TM_SCALE 1 1 1
*TM_SCALEAXIS 0 0 0
*TM_SCALEAXISANG 0 0 0
}
}
*HELPEROBJECT {
*NODE_NAME "Bip01 Pfx_Spark"
*NODE_PARENT "Bip01 Anvil"
*NODE_TM {
*NODE_NAME "Bip01 Pfx_Spark"
*TM_ROW0 1 -8.88154e-016 -3.55269e-015
*TM_ROW1 -3.55269e-015 1 -8.88154e-016
*TM_ROW2 -8.88154e-016 -3.55269e-015 1
*TM_ROW3 -15.9324 -66.9912 101.029
*TM_POS -15.9324 -66.9912 101.029
*TM_ROTAXIS 0 0 0
*TM_ROTANGLE 0
*TM_SCALE 1 1 1
*TM_SCALEAXIS 0 0 0
*TM_SCALEAXISANG 0 0 0
}
}
*HELPEROBJECT {
*NODE_NAME "ZS_POS0"
*NODE_PARENT "Bip01 Anvil"
*NODE_TM {
*NODE_NAME "ZS_POS0"
*TM_ROW0 -1 -1.27952e-006 8.76346e-015
*TM_ROW1 1.27952e-006 -1 -2.19045e-015
*TM_ROW2 -8.88154e-016 -3.55269e-015 1
*TM_ROW3 -2.91738e-012 -7.37744 97.7178
*TM_POS -2.91738e-012 -7.37744 97.7178
*TM_ROTAXIS -1.96883e-015 1.43579e-015 -1
*TM_ROTANGLE 3.14159
*TM_SCALE 1 1 1
*TM_SCALEAXIS 0 0 0
*TM_SCALEAXISANG 0 0 0
}
}
*HELPEROBJECT {
*NODE_NAME "ZS_POS1"
*NODE_PARENT "Bip01 Anvil"
*NODE_TM {
*NODE_NAME "ZS_POS1"
*TM_ROW0 1 -8.88154e-016 -3.55269e-015
*TM_ROW1 -3.55269e-015 1 -8.88154e-016
*TM_ROW2 -8.88154e-016 -3.55269e-015 1
*TM_ROW3 -38.3383 -141.993 97.7178
*TM_POS -38.3383 -141.993 97.7178
*TM_ROTAXIS 0 0 0
*TM_ROTANGLE 0
*TM_SCALE 1 1 1
*TM_SCALEAXIS 0 0 0
*TM_SCALEAXISANG 0 0 0
}
}
*GEOMOBJECT {
*NODE_NAME "zm_Frill"
*NODE_PARENT "Bip01 Anvil"
*NODE_TM {
*NODE_NAME "zm_Frill"
*TM_ROW0 2.08616e-007 1 -5.96046e-008
*TM_ROW1 -5.96046e-008 2.08616e-007 1
*TM_ROW2 1 -5.96046e-008 2.08616e-007
*TM_ROW3 3e-006 -75 -3e-006
*TM_POS 3e-006 -75 -3e-006
*TM_ROTAXIS -0.57735 -0.57735 -0.57735
*TM_ROTANGLE 2.09439
*TM_SCALE 1 1 1
*TM_SCALEAXIS 0 0 0
*TM_SCALEAXISANG 0 0 0
}
*MATERIAL_REF 0
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 48
*MESH_NUMFACES 64
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 -47.4812 -45.9403 57.1008
*MESH_VERTEX 1 -17.1529 -115.72 57.1223
*MESH_VERTEX 2 -17.9404 -33.6505 -4e-006
*MESH_VERTEX 3 13.911 -54.5623 88.838
*MESH_VERTEX 4 -56.089 -53.2477 88.838
*MESH_VERTEX 5 -53.9657 -89.2654 67.4479
*MESH_VERTEX 6 18.7158 -94.5623 88.838
*MESH_VERTEX 7 -83.4565 -71.5111 81.8299
*MESH_VERTEX 8 -52.4056 -63.2806 81.4944
*MESH_VERTEX 9 -52.8647 -83.4165 74.9923
*MESH_VERTEX 10 45.1182 -73.4504 80.7602
*MESH_VERTEX 11 16.967 -64.9882 73.7918
*MESH_VERTEX 12 14.4241 -85.1023 78.7592
*MESH_VERTEX 13 -2.29291 -84.6508 68.9634
*MESH_VERTEX 14 -37.541 -64.5342 69.5495
*MESH_VERTEX 15 9.53998 -89.1861 54.9796
*MESH_VERTEX 16 23.0606 -74.1378 54.7761
*MESH_VERTEX 17 -46.2246 -101.935 -4e-006
*MESH_VERTEX 18 10.3439 -101.935 4.43282e-013
*MESH_VERTEX 19 -45.4539 -59.6594 56.3142
*MESH_VERTEX 20 -57.9404 -73.6505 -5e-006
*MESH_VERTEX 21 -51.2842 -93.2477 88.838
*MESH_VERTEX 22 22.0596 -73.6505 -9.99999e-007
*MESH_VERTEX 23 16.0343 -92.3953 67.3773
*MESH_VERTEX 24 -45.6876 -102.509 54.3481
*MESH_VERTEX 25 9.08729 -46.4417 54.059
*MESH_VERTEX 26 -54.5152 -57.7693 67.7813
*MESH_VERTEX 27 -46.46 -88.4882 55.7001
*MESH_VERTEX 28 15.4848 -60.8992 68.7734
*MESH_VERTEX 29 -37.2929 -83.2257 68.9553
*MESH_VERTEX 30 10.5461 -60.3573 55.1002
*MESH_VERTEX 31 -2.54096 -65.9592 69.2308
*MESH_VERTEX 32 14.6422 -73.7986 84.3747
*MESH_VERTEX 33 -46.2246 -45.3663 -5e-006
*MESH_VERTEX 34 10.3439 -45.3662 -2e-006
*MESH_VERTEX 35 -17.9404 -113.651 -2e-006
*MESH_VERTEX 36 10.8809 -103.01 56.2827
*MESH_VERTEX 37 -52.5557 -72.6668 86.321
*MESH_VERTEX 38 -19.5101 -35.7201 54.3793
*MESH_VERTEX 39 -56.9394 -73.6103 55.7061
*MESH_VERTEX 40 -52.0663 -73.3157 70.7331
*MESH_VERTEX 41 15.1317 -74.0053 68.7856
*MESH_VERTEX 42 14.3332 -85.0008 73.2168
*MESH_VERTEX 43 -52.7738 -83.2932 80.5347
*MESH_VERTEX 44 14.7923 -65.0897 79.3342
*MESH_VERTEX 45 -50.2309 -63.4039 75.952
*MESH_VERTEX 46 -16.9394 -75.7201 54.0742
*MESH_VERTEX 47 -17.9404 -73.6505 -3e-006
}
*MESH_FACE_LIST {
*MESH_FACE 0: A: 5 B: 26 C: 28 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 1: A: 4 B: 21 C: 6 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 2: A: 6 B: 3 C: 4 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 3: A: 28 B: 23 C: 5 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 4: A: 43 B: 37 C: 7 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 5: A: 45 B: 40 C: 7 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 6: A: 41 B: 10 C: 42 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 7: A: 32 B: 10 C: 44 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 8: A: 15 B: 13 C: 29 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 9: A: 31 B: 30 C: 19 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 10: A: 19 B: 14 C: 31 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 11: A: 29 B: 27 C: 15 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 12: A: 5 B: 21 C: 4 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 13: A: 21 B: 5 C: 23 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 14: A: 3 B: 6 C: 23 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 15: A: 23 B: 6 C: 21 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 16: A: 4 B: 26 C: 5 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 17: A: 26 B: 4 C: 3 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 18: A: 14 B: 19 C: 27 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 19: A: 23 B: 28 C: 3 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 20: A: 3 B: 28 C: 26 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 21: A: 27 B: 29 C: 14 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 22: A: 15 B: 30 C: 31 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 23: A: 31 B: 13 C: 15 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 24: A: 12 B: 10 C: 32 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 25: A: 37 B: 8 C: 7 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 26: A: 40 B: 9 C: 7 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 27: A: 11 B: 10 C: 41 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 28: A: 42 B: 10 C: 12 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 29: A: 9 B: 43 C: 7 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 30: A: 44 B: 10 C: 11 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 31: A: 8 B: 45 C: 7 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 32: A: 2 B: 0 C: 38 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 33: A: 2 B: 33 C: 0 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 34: A: 46 B: 38 C: 0 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 35: A: 22 B: 34 C: 25 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 36: A: 20 B: 24 C: 39 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 37: A: 18 B: 16 C: 36 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 38: A: 35 B: 18 C: 36 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 39: A: 47 B: 33 C: 2 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 40: A: 47 B: 17 C: 20 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 41: A: 20 B: 17 C: 24 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 42: A: 47 B: 34 C: 22 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 43: A: 18 B: 22 C: 16 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 44: A: 17 B: 1 C: 24 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 45: A: 46 B: 36 C: 16 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 46: A: 22 B: 25 C: 16 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 47: A: 46 B: 16 C: 25 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 48: A: 47 B: 20 C: 33 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 49: A: 33 B: 20 C: 39 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 50: A: 47 B: 2 C: 34 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 51: A: 34 B: 2 C: 38 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 52: A: 47 B: 35 C: 17 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 53: A: 17 B: 35 C: 1 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 54: A: 35 B: 36 C: 1 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 55: A: 46 B: 1 C: 36 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 56: A: 34 B: 38 C: 25 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 57: A: 46 B: 25 C: 38 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 58: A: 33 B: 39 C: 0 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 59: A: 46 B: 0 C: 39 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 60: A: 46 B: 39 C: 24 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 61: A: 46 B: 24 C: 1 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 62: A: 47 B: 18 C: 35 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
*MESH_FACE 63: A: 47 B: 22 C: 18 AB: 1 BC: 1 CA: 1     *MESH_SMOOTHING 1 *MESH_MTLID 1
}
*MESH_NUMTVERTEX 55
*MESH_TVERTLIST {
*MESH_TVERT 0 0.766129 0.577957 0
*MESH_TVERT 1 0.55899 0.577957 0
*MESH_TVERT 2 0.55899 0.912333 0
*MESH_TVERT 3 0.766129 0.912333 0
*MESH_TVERT 4 0.575996 0.593942 0
*MESH_TVERT 5 0.503947 0.738039 0
*MESH_TVERT 6 0.648045 0.738039 0
*MESH_TVERT 7 0.720094 0.882137 0
*MESH_TVERT 8 0.792142 0.738039 0
*MESH_TVERT 9 0.792143 0.738039 0
*MESH_TVERT 10 0.720094 0.593942 0
*MESH_TVERT 11 0.575996 0.882137 0
*MESH_TVERT 12 0.75 0.015513 0
*MESH_TVERT 13 0.65625 0.241946 0
*MESH_TVERT 14 0.34375 0.241946 0
*MESH_TVERT 15 0.25 0.015513 0
*MESH_TVERT 16 0.43602 0.276837 0
*MESH_TVERT 17 0.43602 0.474465 0
*MESH_TVERT 18 0.633648 0.474465 0
*MESH_TVERT 19 0.828027 0.495973 0
*MESH_TVERT 20 0.828026 0.265988 0
*MESH_TVERT 21 0.386784 0.265988 0
*MESH_TVERT 22 0.386784 0.495973 0
*MESH_TVERT 23 0.633648 0.276837 0
*MESH_TVERT 24 0.511108 0.241946 0
*MESH_TVERT 25 0.604858 0.015513 0
*MESH_TVERT 26 0.252903 0.015513 0
*MESH_TVERT 27 0.346653 0.241946 0
*MESH_TVERT 28 0.128744 0.011814 0
*MESH_TVERT 29 0.18916 0.24753 0
*MESH_TVERT 30 0.128744 0.24753 0
*MESH_TVERT 31 0.18916 0.011814 0
*MESH_TVERT 32 0.880896 0.625604 0
*MESH_TVERT 33 0.880896 0.541513 0
*MESH_TVERT 34 0.940357 0.566143 0
*MESH_TVERT 35 0.00791 0.011814 0
*MESH_TVERT 36 0.068327 0.011814 0
*MESH_TVERT 37 0.068327 0.24753 0
*MESH_TVERT 38 0.249577 0.011814 0
*MESH_TVERT 39 0.309994 0.24753 0
*MESH_TVERT 40 0.249577 0.24753 0
*MESH_TVERT 41 0.430827 0.011814 0
*MESH_TVERT 42 0.491244 0.24753 0
*MESH_TVERT 43 0.430827 0.24753 0
*MESH_TVERT 44 0.37041 0.011814 0
*MESH_TVERT 45 0.940357 0.685065 0
*MESH_TVERT 46 0.964987 0.625604 0
*MESH_TVERT 47 0.309994 0.011814 0
*MESH_TVERT 48 0.821435 0.566143 0
*MESH_TVERT 49 0.796805 0.625604 0
*MESH_TVERT 50 0.491244 0.011814 0
*MESH_TVERT 51 0.37041 0.24753 0
*MESH_TVERT 52 0.821435 0.685065 0
*MESH_TVERT 53 0.00791 0.24753 0
*MESH_TVERT 54 0.880896 0.709695 0
}
*MESH_NUMTVFACES 64
*MESH_TFACELIST {
*MESH_TFACE 0 0 1 2
*MESH_TFACE 1 1 0 3
*MESH_TFACE 2 3 2 1
*MESH_TFACE 3 2 3 0
*MESH_TFACE 4 4 5 6
*MESH_TFACE 5 7 8 6
*MESH_TFACE 6 9 6 10
*MESH_TFACE 7 5 6 11
*MESH_TFACE 8 12 13 14
*MESH_TFACE 9 13 12 15
*MESH_TFACE 10 15 14 13
*MESH_TFACE 11 14 15 12
*MESH_TFACE 12 16 17 18
*MESH_TFACE 13 19 20 21
*MESH_TFACE 14 18 17 16
*MESH_TFACE 15 21 22 19
*MESH_TFACE 16 18 23 16
*MESH_TFACE 17 20 19 22
*MESH_TFACE 18 24 25 26
*MESH_TFACE 19 16 23 18
*MESH_TFACE 20 22 21 20
*MESH_TFACE 21 26 27 24
*MESH_TFACE 22 26 25 24
*MESH_TFACE 23 24 27 26
*MESH_TFACE 24 4 6 5
*MESH_TFACE 25 5 11 6
*MESH_TFACE 26 8 10 6
*MESH_TFACE 27 7 6 9
*MESH_TFACE 28 10 6 4
*MESH_TFACE 29 10 4 6
*MESH_TFACE 30 11 6 7
*MESH_TFACE 31 11 7 6
*MESH_TFACE 32 28 29 30
*MESH_TFACE 33 28 31 29
*MESH_TFACE 34 32 33 34
*MESH_TFACE 35 35 36 37
*MESH_TFACE 36 38 39 40
*MESH_TFACE 37 41 42 43
*MESH_TFACE 38 44 41 43
*MESH_TFACE 39 32 34 33
*MESH_TFACE 40 32 45 46
*MESH_TFACE 41 38 47 39
*MESH_TFACE 42 32 48 49
*MESH_TFACE 43 41 50 42
*MESH_TFACE 44 47 51 39
*MESH_TFACE 45 32 52 49
*MESH_TFACE 46 35 37 53
*MESH_TFACE 47 32 49 48
*MESH_TFACE 48 32 46 34
*MESH_TFACE 49 31 38 40
*MESH_TFACE 50 32 33 48
*MESH_TFACE 51 36 28 30
*MESH_TFACE 52 32 54 45
*MESH_TFACE 53 47 44 51
*MESH_TFACE 54 44 43 51
*MESH_TFACE 55 32 54 52
*MESH_TFACE 56 36 30 37
*MESH_TFACE 57 32 48 33
*MESH_TFACE 58 31 40 29
*MESH_TFACE 59 32 34 46
*MESH_TFACE 60 32 46 45
*MESH_TFACE 61 32 45 54
*MESH_TFACE 62 32 52 54
*MESH_TFACE 63 32 49 52
}
}
}
*HELPEROBJECT {
*NODE_NAME "Dummy"
*NODE_PARENT "Bip01 Pfx_Spark"
*NODE_TM {
*NODE_NAME "Dummy"
*TM_ROW0 -1 0 0
*TM_ROW1 0 -1 0
*TM_ROW2 0 0 1
*TM_ROW3 -23.8985 -62.9867 151.543
*TM_POS -23.8985 -62.9867 151.543
*TM_ROTAXIS 0 0 -1
*TM_ROTANGLE 3.14159
*TM_SCALE 1 1 1
*TM_SCALEAXIS 0 0 0
*TM_SCALEAXISANG 0 0 0
}
}
BSNVIL_OC_USE.ASC (C:\Program Files\GothicSourcer V3.10\Gothic Projects\Anims\asc_bsanvil_oc)
Spoiler
*3DSMAX_ASCIIEXPORT 110
*COMMENT "[ GothicSourcer v3.10 ] - August 2006"
*SCENE {
*SCENE_FILENAME "BSANVIL_OC_USE.MAX"
*SCENE_FIRSTFRAME 3
*SCENE_LASTFRAME 47
*SCENE_FRAMESPEED 25
*SCENE_TICKSPERFRAME 192
*SCENE_BACKGROUND_STATIC 0 0 0
*SCENE_AMBIENT_STATIC 0.2 0.2 0.2
}
*HELPEROBJECT {
*NODE_NAME "Bip01 Anvil"
*NODE_TM {
*NODE_NAME "Bip01 Anvil"
*TM_ROW0 2.08616e-007 1 -5.96046e-008
*TM_ROW1 -5.96046e-008 2.08616e-007 1
*TM_ROW2 1 -5.96046e-008 2.08616e-007
*TM_ROW3 3e-006 -75 -3e-006
*TM_POS 3e-006 -75 -3e-006
*TM_ROTAXIS -0.57735 -0.57735 -0.57735
*TM_ROTANGLE 2.09439
*TM_SCALE 1 1 1
*TM_SCALEAXIS 0 0 0
*TM_SCALEAXISANG 0 0 0
}
}
*HELPEROBJECT {
*NODE_NAME "Bip01 Pfx_Spark"
*NODE_PARENT "Bip01 Anvil"
*NODE_TM {
*NODE_NAME "Bip01 Pfx_Spark"
*TM_ROW0 1 -8.88154e-016 -3.55269e-015
*TM_ROW1 -3.55269e-015 1 -8.88154e-016
*TM_ROW2 -8.88154e-016 -3.55269e-015 1
*TM_ROW3 -15.9324 -66.9912 101.029
*TM_POS -15.9324 -66.9912 101.029
*TM_ROTAXIS 0 0 0
*TM_ROTANGLE 0
*TM_SCALE 1 1 1
*TM_SCALEAXIS 0 0 0
*TM_SCALEAXISANG 0 0 0
}
}
*HELPEROBJECT {
*NODE_NAME "ZS_POS0"
*NODE_PARENT "Bip01 Anvil"
*NODE_TM {
*NODE_NAME "ZS_POS0"
*TM_ROW0 -1 -1.27952e-006 8.76346e-015
*TM_ROW1 1.27952e-006 -1 -2.19045e-015
*TM_ROW2 -8.88154e-016 -3.55269e-015 1
*TM_ROW3 -2.91738e-012 -7.37744 97.7178
*TM_POS -2.91738e-012 -7.37744 97.7178
*TM_ROTAXIS -1.96883e-015 1.43579e-015 -1
*TM_ROTANGLE 3.14159
*TM_SCALE 1 1 1
*TM_SCALEAXIS 0 0 0
*TM_SCALEAXISANG 0 0 0
}
}
*HELPEROBJECT {
*NODE_NAME "ZS_POS1"
*NODE_PARENT "Bip01 Anvil"
*NODE_TM {
*NODE_NAME "ZS_POS1"
*TM_ROW0 1 -8.88154e-016 -3.55269e-015
*TM_ROW1 -3.55269e-015 1 -8.88154e-016
*TM_ROW2 -8.88154e-016 -3.55269e-015 1
*TM_ROW3 -38.3383 -141.993 97.7178
*TM_POS -38.3383 -141.993 97.7178
*TM_ROTAXIS 0 0 0
*TM_ROTANGLE 0
*TM_SCALE 1 1 1
*TM_SCALEAXIS 0 0 0
*TM_SCALEAXISANG 0 0 0
}
}

W folderze C:\Program Files\Piranha Bytes\Gothic\_Work\Data\Anims\_compiled znajdują się:
 BSANVIL_OC.MDH
BSANVIL_OC.MDL
BSANVIL_OC.MDM
BSANVIL_OC-S_S0.MAN
BSANVIL_OC-S_S1.MAN
BSANVIL_OC-T_S0_2_S1.MAN
BSANVIL_OC-T_S1_2_S0.MAN
Nie da się ich otworzyć w Notepad++, bo wyskakują liczby, cyfry normalne, i takie na czarnym tle, nie da się tego tu skopiować.
(No da się, ale te pliki nie wyglądają na pliki do odczytu przez tego typu program.)

Czy ma ktoś pomysł jak mogę poradzić sobie z tym kowadłem? Bo przez dwa tygodnie nie udało mi się, a sporo rzeczy wypróbowałem.
 

Orion

Orion

Użytkownicy
posty41
  • Użytkownicy
Mam też inny pomysł, chodzi o to, że w skryptach kowalstwa z MT jest taki dopisek:
func void smith()
{
//Edit By Fenix
self.aivar[AIV_INVINCIBLE] = FALSE;
/////////////////
PrintScreen("Właśnie wykułeś miecz.",-1,-1,"font_old_20_white.tga",3);
MOBUSE = 0;
PrintGlobals(PD_ITEM_MOBSI);
Npc_SendPassivePerc(hero,PERC_ASSESSENTERROOM,NULL,hero);
};
Mam na myśli dokładnie te dwie linijki:
PrintGlobals(PD_ITEM_MOBSI);
Npc_SendPassivePerc(hero,PERC_ASSESSENTERROOM,NULL,hero);
Czy ktoś wie za co one odpowiadają? Mam taką małą nadzieję, że właśnie za "zneutralizowanie" zamiany rozgrzaneej stali na ostrze.

Tutaj jest cały skrypt z MT:
Spoiler

//**************************************************************
// Made by Shergar   *
//**************************************************************
//Edit By Fenix

var int str_improve;

func string NotEnoughtAttribute (var C_NPC slf, var int Att_Str, var int Att_Dex)
{
var string msg;

var int HowManySkillsAreMissing;
HowManySkillsAreMissing = 0;

var int Str_Mis;
var int Dex_Mis;

var string msg_Str;
if (slf.attribute[ATR_STRENGTH] < Att_Str)
{
HowManySkillsAreMissing += 1;
msg_Str = ConcatStrings (" Siły: ",IntToString (Att_Str-slf.attribute[ATR_STRENGTH]));
};

var string msg_Dex;
if (slf.attribute[ATR_DEXTERITY] < Att_Dex)
{
HowManySkillsAreMissing += 1;
msg_Dex = ConcatStrings (" Zręczności: ",IntToString (Att_Dex-slf.attribute[ATR_DEXTERITY]));
};

msg = "Brakuje ci";
msg = ConcatStrings (msg,msg_Str);

if (HowManySkillsAreMissing >= 2)
{
msg = ConcatStrings (msg,"i");
};

msg = ConcatStrings (msg,msg_Dex);

//(hero.attribute[ATR_STRENGTH] >= 60) && (hero.attribute[ATR_DEXTERITY] >= 40)

return msg;
};

func void smith()
{
//Edit By Fenix
self.aivar[AIV_INVINCIBLE] = FALSE;
/////////////////
PrintScreen("Właśnie wykułeś miecz.",-1,-1,"font_old_20_white.tga",3);
MOBUSE = 0;
PrintGlobals(PD_ITEM_MOBSI);
Npc_SendPassivePerc(hero,PERC_ASSESSENTERROOM,NULL,hero);
STR_IMPROVE = STR_IMPROVE + 1;
if(STR_IMPROVE == 10)
{
Npc_ChangeAttribute(self,ATR_STRENGTH,1);
PrintScreen("Siła + 1",-1,-1,"FONT_OLD_20_WHITE.TGA",3);
};
if(STR_IMPROVE == 20)
{
Npc_ChangeAttribute(self,ATR_STRENGTH,2);
PrintScreen("Siła + 2",-1,-1,"FONT_OLD_20_WHITE.TGA",3);
};
if(STR_IMPROVE == 30)
{
Npc_ChangeAttribute(self,ATR_STRENGTH,3);
PrintScreen("Siła + 3",-1,-1,"FONT_OLD_20_WHITE.TGA",3);
};
if(STR_IMPROVE == 50)
{
Npc_ChangeAttribute(self,ATR_STRENGTH,4);
PrintScreen("Siła + 4",-1,-1,"FONT_OLD_20_WHITE.TGA",3);
};
if(STR_IMPROVE == 100)
{
Npc_ChangeAttribute(self,ATR_STRENGTH,5);
PrintScreen("Siła + 5",-1,-1,"FONT_OLD_20_WHITE.TGA",3);
};
if(STR_IMPROVE == 500)
{
Npc_ChangeAttribute(self,ATR_STRENGTH,10);
PrintScreen("Siła + 10",-1,-1,"FONT_OLD_20_WHITE.TGA",3);
};
if(STR_IMPROVE == 1000)
{
Npc_ChangeAttribute(self,ATR_STRENGTH,20);
PrintScreen("Siła + 20",-1,-1,"FONT_OLD_20_WHITE.TGA",3);
};
if(STR_IMPROVE == 10000)
{
Npc_ChangeAttribute(self,ATR_STRENGTH,30);
PrintScreen("Siła + 30",-1,-1,"FONT_OLD_20_WHITE.TGA",3);
};
};

func void smithery_s1()
{
var C_Npc him;
var C_Npc rocker;
MOBUSE = SMITHERY_USING;
him = Hlp_GetNpc(PC_Hero);
rocker = Hlp_GetNpc(PC_Rockefeller);
if((Hlp_GetInstanceID(self) == Hlp_GetInstanceID(him)) || (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(rocker)))
{
self.aivar[AIV_INVINCIBLE] = TRUE;
AI_ProcessInfos(him);
};
};


instance NOSMITH1(C_Info)
{
npc = PC_Hero;
nr = 999;
condition = nosmith1_condition;
information = nosmith1_info;
important = 0;
permanent = 1;
description = "Nie potrafisz użyć kowadła.";
};


func int nosmith1_condition()
{
if (MOBUSE == SMITHERY_USING) && (Npc_GetTalentSkill(hero, NPC_TALENT_SMITH) == 0)
{
return 1;
};
};

func void nosmith1_info()
{
AI_StopProcessInfos (self);
MOBUSE = 0;
self.aivar[AIV_INVINCIBLE] = FALSE;
};


instance NOSMITH(C_Info)
{
npc = PC_Hero;
nr = 999;
condition = nosmith_condition;
information = nosmith_info;
important = 0;
permanent = 1;
description = "Odejdź od kowadła.";
};


func int nosmith_condition()
{
if (MOBUSE == SMITHERY_USING) && (Npc_GetTalentSkill(hero, NPC_TALENT_SMITH) >= 1)
{
return 1;
};
};

func void nosmith_info()
{
AI_StopProcessInfos (self);
MOBUSE = 0;
self.aivar[AIV_INVINCIBLE] = FALSE;
};

//Edit By Fenix
instance FeSMITH(C_Info)
{
npc = PC_Hero;
condition = FeSMITH_condition;
information = FeSMITH_info;
important = 0;
permanent = 1;
description = "Przekłuj wszystkie rozgrzane pręty.";
};


func int FeSMITH_condition()
{
if (MOBUSE == SMITHERY_USING) && (Npc_GetTalentSkill(hero, NPC_TALENT_SMITH) > 0) && (NPC_HasItems(hero,ItMiSwordrawhot)>=1)
{
return 1;
};
};

func void FeSMITH_info()
{
CreateInvItems(hero,ItMiSwordbladehot,NPC_HasItems(hero,ItMiSwordrawhot));

Npc_RemoveInvItems(hero,ItMiSwordrawhot,NPC_HasItems(hero,ItMiSwordrawhot));

AI_StopProcessInfos (self);
MOBUSE = 0;
self.aivar[AIV_INVINCIBLE] = FALSE;
};
///////////////

instance FIRSTSWORD(C_Info)
{
npc = PC_Hero;
condition = firstsword_condition;
information = firstsword_info;
important = 0;
permanent = 1;
description = "Wykuj długi miecz.";
};


func int firstsword_condition()
{
if (MOBUSE == SMITHERY_USING) && (Npc_GetTalentSkill(hero, NPC_TALENT_SMITH) >= 1)
{
return 1;
};
};

func void firstsword_info()
{
if (Npc_HasItems(hero,ItMiSwordblade) >= 1) && (Npc_HasItems(hero,ItMw_1H_Sledgehammer_01) >= 1) && (Npc_HasItems(hero,ItMiSwordraw) >= 2)
{
if (hero.attribute[ATR_STRENGTH] >= 60) && (hero.attribute[ATR_DEXTERITY] >= 40)
{
AI_StopProcessInfos (self);
Npc_RemoveInvItems(hero,ItMiSwordblade,1);
Npc_RemoveInvItems(hero,ItMiSwordraw,2);
CreateInvItems(hero,goodlongsword,1);
B_GiveXP(XP / 5);
smith();
}
else
{
AI_StopProcessInfos (self);
PrintScreen(NotEnoughtAttribute(hero,60,40),-1,-1,"font_old_20_white.tga",6);
MOBUSE = 0;
};
}
else
{
AI_StopProcessInfos (self);
PrintScreen("Nie masz wszystkich komponentów.",-1,-1,"font_old_20_white.tga",3);
MOBUSE = 0;
};
};


instance GOODSWORD(C_Info)
{
npc = PC_Hero;
condition = goodsword_condition;
information = goodsword_info;
important = 0;
permanent = 1;
description = "Wykuj jednoręczny miecz z magicznej rudy.";
};


func int goodsword_condition()
{
if (MOBUSE == SMITHERY_USING) && (Npc_GetTalentSkill(hero, NPC_TALENT_SMITH) >= 1)
{
return 1;
};
};

func void goodsword_info()
{
if (Npc_HasItems(hero,ItMiSwordblade) >= 1) && (Npc_HasItems(hero,ItMw_1H_Sledgehammer_01) >= 1) && (Npc_HasItems(hero,ItMiNugget) >= 100) && (Npc_HasItems(hero,ItMiSwordraw) >= 1)
{
if (hero.attribute[ATR_STRENGTH] >= 60) && (hero.attribute[ATR_DEXTERITY] >= 60)
{
AI_StopProcessInfos (self);
Npc_RemoveInvItems(hero,ItMiSwordblade,1);
Npc_RemoveInvItems(hero,ItMiNugget,100);
Npc_RemoveInvItems(hero,ItMiSwordraw,1);
CreateInvItems(hero,magicoresword,1);
B_GiveXP(XP / 4);
smith();
}
else
{
AI_StopProcessInfos (self);
PrintScreen(NotEnoughtAttribute(hero,60,60),-1,-1,"font_old_20_white.tga",6);
MOBUSE = 0;
};
}
else
{
AI_StopProcessInfos (self);
PrintScreen("Nie masz wszystkich komponentów.",-1,-1,"font_old_20_white.tga",3);
MOBUSE = 0;
};
};


instance SM_GOODSWORD2H(C_Info)
{
npc = PC_Hero;
condition = sm_goodsword2h_condition;
information = sm_goodsword2h_info;
important = 0;
permanent = 1;
description = "Wykuj dwuręczny miecz z magicznej rudy.";
};


func int sm_goodsword2h_condition()
{
if (MOBUSE == SMITHERY_USING) && (Npc_GetTalentSkill(hero, NPC_TALENT_SMITH) >= 3)
{
return 1;
};
};

func void sm_goodsword2h_info()
{
if (Npc_HasItems(hero,ItMiSwordblade) >= 3) && (Npc_HasItems(hero,ItMw_1H_Sledgehammer_01) >= 1) && (Npc_HasItems(hero,ItMiNugget) >= 200) && (Npc_HasItems(hero,ItMiSwordraw) >= 2)
{
if (hero.attribute[ATR_STRENGTH] >= 80) && (hero.attribute[ATR_DEXTERITY] >= 80)
{
AI_StopProcessInfos (self);
Npc_RemoveInvItems(hero,ItMiSwordblade,2);
Npc_RemoveInvItems(hero,ItMiNugget,200);
Npc_RemoveInvItems(hero,ItMiSwordraw,2);
CreateInvItems(hero,magicoresword2h,1);
B_GiveXP(XP / 2);
smith();
}
else
{
AI_StopProcessInfos (self);
PrintScreen(NotEnoughtAttribute(hero,80,80),-1,-1,"font_old_20_white.tga",6);
MOBUSE = 0;
};
}
else
{
AI_StopProcessInfos (self);
PrintScreen("Nie masz wszystkich komponentów.",-1,-1,"font_old_20_white.tga",3);
MOBUSE = 0;
};
};


instance SM_AXE1H(C_Info)
{
npc = PC_Hero;
condition = sm_axe1h_condition;
information = sm_axe1h_info;
important = 0;
permanent = 1;
description = "Wykuj dobry jednoręczny topór.";
};


func int sm_axe1h_condition()
{
if (MOBUSE == SMITHERY_USING) && (Npc_GetTalentSkill(hero, NPC_TALENT_SMITH) >= 2)
{
return 1;
};
};

func void sm_axe1h_info()
{
if (Npc_HasItems(hero,ItMiSwordblade) >= 2) && (Npc_HasItems(hero,ItMw_1H_Sledgehammer_01) >= 1) /*&& (Npc_HasItems(hero,ItMiNugget) >= 100)*/ && (Npc_HasItems(hero,ItMiSwordraw) >= 2)
{
if (hero.attribute[ATR_STRENGTH] >= 60) && (hero.attribute[ATR_DEXTERITY] >= 50)
{
AI_StopProcessInfos (self);
Npc_RemoveInvItems(hero,ItMiSwordblade,2);
//Npc_RemoveInvItems(hero,ItMiNugget,100);
Npc_RemoveInvItems(hero,ItMiSwordraw,2);
CreateInvItems(hero,axe1h,1);
B_GiveXP(XP / 4);
smith();
}
else
{
AI_StopProcessInfos (self);
PrintScreen(NotEnoughtAttribute(hero,60,50),-1,-1,"font_old_20_white.tga",6);
MOBUSE = 0;
};
}
else
{
AI_StopProcessInfos (self);
PrintScreen("Nie masz wszystkich komponentów.",-1,-1,"font_old_20_white.tga",3);
MOBUSE = 0;
};
};


instance SM_AXE2H(C_Info)
{
npc = PC_Hero;
condition = sm_axe2h_condition;
information = sm_axe2h_info;
important = 0;
permanent = 1;
description = "Wykuj dobry dwuręczny topór.";
};


func int sm_axe2h_condition()
{
if (MOBUSE == SMITHERY_USING) && (Npc_GetTalentSkill(hero, NPC_TALENT_SMITH) >= 3)
{
return 1;
};
};

func void sm_axe2h_info()
{
if (Npc_HasItems(hero,ItMiSwordblade) >= 3) && (Npc_HasItems(hero,ItMw_1H_Sledgehammer_01) >= 1) && (Npc_HasItems(hero,ItMiNugget) >= 200) && (Npc_HasItems(hero,ItMiSwordraw) >= 4)
{
if (hero.attribute[ATR_STRENGTH] >= 80) && (hero.attribute[ATR_DEXTERITY] >= 70)
{
AI_StopProcessInfos (self);
Npc_RemoveInvItems(hero,ItMiSwordblade,3);
Npc_RemoveInvItems(hero,ItMiNugget,200);
Npc_RemoveInvItems(hero,ItMiSwordraw,4);
CreateInvItems(hero,axe2h,1);
B_GiveXP(XP / 2);
smith();
}
else
{
AI_StopProcessInfos (self);
PrintScreen(NotEnoughtAttribute(hero,80,70),-1,-1,"font_old_20_white.tga",6);
MOBUSE = 0;
};
}
else
{
AI_StopProcessInfos (self);
PrintScreen("Nie masz wszystkich komponentów.",-1,-1,"font_old_20_white.tga",3);
MOBUSE = 0;
};
};


var int noname;

instance SM_NONAME_SWORD2H(C_Info)
{
npc = PC_Hero;
condition = sm_noname_sword2h_condition;
information = sm_noname_sword2h_info;
important = 0;
permanent = 1;
description = "Wykuj własny miecz dwuręczny.";
};


func int sm_noname_sword2h_condition()
{
if (MOBUSE == SMITHERY_USING) && (Npc_GetTalentSkill(hero, NPC_TALENT_SMITH) >= 4 )
{
return 1;
};
};

func void sm_noname_sword2h_info()
{
if (Npc_HasItems(hero,ItMiSwordblade) >= 6) && (Npc_HasItems(hero,ItMw_1H_Sledgehammer_01) >= 1) && (Npc_HasItems(hero,ItMiNugget) >= 5000) && (Npc_HasItems(hero,ItMiSwordraw) >= 10)
{
if (hero.attribute[ATR_STRENGTH] >= 100) && (hero.attribute[ATR_DEXTERITY] >= 100)
{
AI_StopProcessInfos (self);
Npc_RemoveInvItems(hero,ItMiSwordblade,6);
Npc_RemoveInvItems(hero,ItMiNugget,5000);
Npc_RemoveInvItems(hero,ItMiSwordraw,10);
CreateInvItems(hero,noname_sword2h,1);
B_GiveXP(XP * 15);
smith();
NONAME = NONAME + 1;
}
else if (hero.attribute[ATR_STRENGTH] < 100) && (hero.attribute[ATR_DEXTERITY] < 100)
{
AI_StopProcessInfos (self);
PrintScreen(NotEnoughtAttribute(hero,100,100),-1,-1,"font_old_20_white.tga",6);
MOBUSE = 0;
}
else if(NONAME > 0)
{
AI_StopProcessInfos (self);
PrintScreen("Możesz wykuć tylko jeden osobisty oręż.",-1,-1,"font_old_20_white.tga",3);
MOBUSE = 0;
};
}
else
{
AI_StopProcessInfos (self);
PrintScreen("Nie masz wszystkich komponentów.",-1,-1,"font_old_20_white.tga",3);
MOBUSE = 0;
};
};


instance SM_NONAME_SWORD1H(C_Info)
{
npc = PC_Hero;
condition = sm_noname_sword1h_condition;
information = sm_noname_sword1h_info;
important = 0;
permanent = 1;
description = "Wykuj własny jednoręczny miecz.";
};


func int sm_noname_sword1h_condition()
{
if (MOBUSE == SMITHERY_USING) && (Npc_GetTalentSkill(hero, NPC_TALENT_SMITH) >= 4)

{
return 1;
};
};

func void sm_noname_sword1h_info()
{
if (Npc_HasItems(hero,ItMiSwordblade) >= 4) && (Npc_HasItems(hero,ItMw_1H_Sledgehammer_01) >= 1) && (Npc_HasItems(hero,ItMiNugget) >= 3000) && (Npc_HasItems(hero,ItMiSwordraw) >= 8)
{
if (hero.attribute[ATR_STRENGTH] >= 90) && (hero.attribute[ATR_DEXTERITY] >= 100)
{
AI_StopProcessInfos (self);
Npc_RemoveInvItems(hero,ItMiSwordblade,4);
Npc_RemoveInvItems(hero,ItMiNugget,3000);
Npc_RemoveInvItems(hero,ItMiSwordraw,8);
CreateInvItems(hero,noname_sword1h,1);
B_GiveXP(XP * 10);
smith();
NONAME = NONAME + 1;
}
else if (hero.attribute[ATR_STRENGTH] < 90) && (hero.attribute[ATR_DEXTERITY] < 100)
{
AI_StopProcessInfos (self);
PrintScreen(NotEnoughtAttribute(hero,90,100),-1,-1,"font_old_20_white.tga",6);
MOBUSE = 0;
}
else if(NONAME > 0)
{
AI_StopProcessInfos (self);
PrintScreen("Możesz wykuć tylko jeden osobisty oręż.",-1,-1,"font_old_20_white.tga",3);
MOBUSE = 0;
};
}
else
{
AI_StopProcessInfos (self);
PrintScreen("Nie masz wszystkich komponentów.",-1,-1,"font_old_20_white.tga",3);
MOBUSE = 0;
};
};


instance SM_NONAME_AXE(C_Info)
{
npc = PC_Hero;
condition = sm_noname_axe_condition;
information = sm_noname_axe_info;
important = 0;
permanent = 1;
description = "Wykuj własny dwuręczny topór.";
};


func int sm_noname_axe_condition()
{
if (MOBUSE == SMITHERY_USING) && (Npc_GetTalentSkill(hero, NPC_TALENT_SMITH) >= 4)

{
return 1;
};
};

func void sm_noname_axe_info()
{
if (Npc_HasItems(hero,ItMiSwordblade) >= 8) && (Npc_HasItems(hero,ItMw_1H_Sledgehammer_01) >= 1) && (Npc_HasItems(hero,ItMiNugget) >= 8000) && (Npc_HasItems(hero,ItMiSwordraw) >= 16)
{
if (hero.attribute[ATR_STRENGTH] >= 80) && (hero.attribute[ATR_DEXTERITY] >= 70)
{
AI_StopProcessInfos (self);
Npc_RemoveInvItems(hero,ItMiSwordblade,8);
Npc_RemoveInvItems(hero,ItMiNugget,8000);
Npc_RemoveInvItems(hero,ItMiSwordraw,16);
CreateInvItems(hero,noname_axe,1);
B_GiveXP(XP * 20);
smith();
NONAME = NONAME + 1;
}
else if (hero.attribute[ATR_STRENGTH] < 80) && (hero.attribute[ATR_DEXTERITY] < 70)
{
AI_StopProcessInfos (self);
PrintScreen(NotEnoughtAttribute(hero,80,70),-1,-1,"font_old_20_white.tga",6);
MOBUSE = 0;
}
else if(NONAME > 0)
{
AI_StopProcessInfos (self);
PrintScreen("Możesz wykuć tylko jeden osobisty oręż.",-1,-1,"font_old_20_white.tga",3);
MOBUSE = 0;
};
}
else
{
AI_StopProcessInfos (self);
PrintScreen("Nie masz wszystkich komponentów.",-1,-1,"font_old_20_white.tga",3);
MOBUSE = 0;
};
};

instance SM_URIZIEL_1H(C_Info)
{
npc = PC_Hero;
condition = SM_URIZIEL_1H_condition;
information = SM_URIZIEL_1H_info;
important = 0;
permanent = 1;
description = "Przekuj Uriziel w miecz jednoręczny (25000 bryłek rudy).";
};


func int SM_URIZIEL_1H_condition()
{
if (Npc_HasItems(hero,Mythrilklinge02) >= 1)
&& (MOBUSE == SMITHERY_USING) && (Npc_GetTalentSkill(hero, NPC_TALENT_SMITH) >= 4)

{
return 1;
};
};

func void SM_URIZIEL_1H_info()
{
if (Npc_HasItems(hero,ItMw_1H_Sledgehammer_01) >= 1) && (Npc_HasItems(hero,ItMiNugget) >= 25000)
{
if (hero.attribute[ATR_STRENGTH] >= 120) && (hero.attribute[ATR_DEXTERITY] >= 100)
{
AI_StopProcessInfos (self);
Npc_RemoveInvItems(hero,ItMiNugget,25000);
Npc_RemoveInvItems(hero,Mythrilklinge02,1);
CreateInvItems(hero,uriziel_1h,1);
B_GiveXP(XP * 50);
smith();
}
else if (hero.attribute[ATR_STRENGTH] < 120) && (hero.attribute[ATR_DEXTERITY] < 100)
{
AI_StopProcessInfos (self);
PrintScreen(NotEnoughtAttribute(hero,120,100),-1,-1,"font_old_20_white.tga",6);
MOBUSE = 0;
};
}
else
{
AI_StopProcessInfos (self);
PrintScreen("Nie masz wszystkich komponentów.",-1,-1,"font_old_20_white.tga",3);
MOBUSE = 0;
};
};

 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Problem z monologiem
#29 2013-05-20, 21:37(Ostatnia zmiana: 2013-05-20, 21:38)
Lol, mogłeś odgadnąć po nazwie. PrintGlobals służy tylko do debugowania, Npc_SendPassivePerc wysyła perceptiona, z tym że tego raczej nie powinno tu być. Ta zmiana itemu gdzieś była określona, albo w mds, albo w Spacerze, albo w skryptach. Musisz źle szukać. Proponuję wyszukać tekstowo w skryptach i mds identyfikator ostrza i zobaczyć czy nie pojawia się właśnie w poszukiwanej przez ciebie funkcji.

Orion

Orion

Użytkownicy
posty41
  • Użytkownicy
Dzięki za pomoc z monologiem, już wszystko działa. Teraz mam drugi problem i nie chcę zakładać nowego tematu, więc napiszę tutaj.
Chciałem zrobić zmienne ekwipunku jak to jest w Gothic II, czyli, że zestawy ekwipunku są opisane w jednym pliku, a w plikach NPC wstawiamy tylko, że ma je odczytać.
Mój skrypt nie działa, próbowałem go naprawić, ale czego bym nie zmienił, i tak wyskakuje błąd.

Oto skrypt z Gothic II: (plik B_CreateAmbientInv.d)
Spoiler
// ******************
// B_CreateAmbientInv
// ******************

//Hier stehen die Hilfsfunktionen zum befüllen der NPCs

func void B_CreateAmbientInv_VLK (var int InventorySet)
{
if InventorySet ==1
{
CreateInvItems (self, ItPl_Blueplant, 1);
CreateInvItems (self, ItMi_SilverRing, 1);
CreateInvItems (self, ItFo_Water, 1);
CreateInvItems (self, ItMi_gold, 5);
}
else if InventorySet ==2
{
CreateInvItems (self, ItPl_Planeberry, 1);
CreateInvItems (self, ItFo_Apple, 1);
CreateInvItems (self, ItFo_Fish, 1);
CreateInvItems (self, ItFo_Beer, 1);
CreateInvItems (self, ItMi_gold, 1);
}
else if InventorySet ==3
{
CreateInvItems (self, ItFo_Fish, 1);
CreateInvItems (self, ItFo_Bread, 1);
CreateInvItems (self, ItMi_Flask, 1);
CreateInvItems (self, ItMi_gold, 17);
}
else if InventorySet ==4
{
CreateInvItems (self, ItFo_Bread, 1);
CreateInvItems (self, ItFo_Water, 1);
CreateInvItems (self, ItFoMuttonRaw, 1);
CreateInvItems (self, ItMi_gold, 17);
}
else if InventorySet ==5
{
CreateInvItems (self, ItFo_Apple, 1);
CreateInvItems (self, ItFo_Cheese, 1);
CreateInvItems (self, ItFo_Bread, 1);
CreateInvItems (self, ItMi_gold, 13);
}
else if InventorySet ==6
{
CreateInvItems (self, ItFo_Apple, 1);
CreateInvItems (self, ItFo_Cheese, 1);
CreateInvItems (self, ItPo_Health_01, 1);
CreateInvItems (self, ItMi_gold, 11);
}
else if InventorySet ==0
{
CreateInvItems (self, ItPl_Planeberry, 1);
CreateInvItems (self, ItFo_Apple, 1);
CreateInvItems (self, ItFo_Beer, 1);
CreateInvItems (self, ItMi_gold, 12);
};
};
func void B_CreateAmbientInv_BAU (var int InventorySet)
{
if InventorySet ==1
{
CreateInvItems (self, ItPl_Forestberry, 1);
CreateInvItems (self, ItFo_Water, 1);
CreateInvItems (self, ItFo_Milk, 1);
CreateInvItems (self, ItMi_gold, 12);
}
else if InventorySet ==2
{
CreateInvItems (self, ItPl_Forestberry, 1);
CreateInvItems (self, ItPl_Planeberry, 1);
CreateInvItems (self, ItFo_Apple, 1);
CreateInvItems (self, ItFo_Cheese, 1);
CreateInvItems (self, ItMi_gold, 10);
}
else if InventorySet ==3
{
CreateInvItems (self, ItFo_Apple, 1);
CreateInvItems (self, ItFo_Cheese, 1);
CreateInvItems (self, ItPo_Health_01, 1);
CreateInvItems (self, ItMi_gold, 17);
}
else if InventorySet ==4
{
CreateInvItems (self, ItPl_Blueplant, 1);
CreateInvItems (self, ItFoMuttonRaw, 1);
CreateInvItems (self, ItFo_Bread, 1);
CreateInvItems (self, ItMi_gold, 14);
}
else if InventorySet ==5
{
CreateInvItems (self, ItPl_Forestberry, 1);
CreateInvItems (self, ItFo_Bread, 1);
CreateInvItems (self, ItFoMuttonRaw, 1);
CreateInvItems (self, ItMi_gold, 13);
}
else if InventorySet ==6
{
CreateInvItems (self, ItPl_Forestberry, 1);
CreateInvItems (self, ItMi_Joint, 1);
CreateInvItems (self, ItFo_Cheese, 1);
CreateInvItems (self, ItPl_Planeberry, 1);
CreateInvItems (self, ItMi_gold, 11);
}
else if InventorySet ==0
{
CreateInvItems (self, ItPl_Planeberry, 1);
CreateInvItems (self, ItFo_Apple, 1);
CreateInvItems (self, ItFo_Cheese, 4);
CreateInvItems (self, ItFo_Beer, 1);
};
};
func void B_CreateAmbientInv_NOV (var int InventorySet)
{
if InventorySet ==1
{
CreateInvItems (self, ItPl_Forestberry, 1);
CreateInvItems (self, ItFo_Water, 3);
CreateInvItems (self, ItPl_Blueplant, 1);
CreateInvItems (self, ItFo_Fish, 1);
}
else if InventorySet ==2
{
CreateInvItems (self, ItFoMuttonRaw, 1);
CreateInvItems (self, ItFo_Cheese, 1);
CreateInvItems (self, ItMi_Flask, 1);
CreateInvItems (self, ItMi_gold, 15);
}
else if InventorySet ==3
{
CreateInvItems (self, ItFo_Apple, 3);
CreateInvItems (self, ItFo_Cheese, 2);
CreateInvItems (self, ItFo_Beer, 2);
CreateInvItems (self, ItMi_Sulfur, 1);
}
else if InventorySet ==4
{
CreateInvItems (self, ItPl_Blueplant, 1);
CreateInvItems (self, ItFo_Bread, 1);
CreateInvItems (self, ItFo_Water, 1);
CreateInvItems (self, ItMi_Coal, 1);
CreateInvItems (self, ItMi_gold, 13);
}
else if InventorySet ==5
{
CreateInvItems (self, ItFo_Bread, 2);
CreateInvItems (self, ItFoMuttonRaw, 1);
CreateInvItems (self, ItFo_Fish, 1);
CreateInvItems (self, ItMi_gold, 14);
}
else if InventorySet ==6
{
CreateInvItems (self, ItPl_Forestberry, 1);
CreateInvItems (self, ItFo_Fish, 1);
CreateInvItems (self, ItFo_Bread, 1);
CreateInvItems (self, ItPo_Mana_01, 1);
CreateInvItems (self, ItMi_gold, 12);
}
else if InventorySet ==0
{
CreateInvItems (self, ItPl_Planeberry, 3);
CreateInvItems (self, ItFo_Apple, 1);
CreateInvItems (self, ItFo_Cheese, 1);
CreateInvItems (self, ItFo_Beer, 1);
};
};
func void B_CreateAmbientInv_SLD (var int InventorySet)
{
if InventorySet ==1
{
CreateInvItems (self, ItFoMutton, 1);
CreateInvItems (self, ItPl_Mushroom_01, 1);
CreateInvItems (self, ItMi_gold, 17);
}
else if InventorySet ==2
{
CreateInvItems (self, ItPl_Health_Herb_01, 1);
CreateInvItems (self, ItFo_Booze, 2);
CreateInvItems (self, ItFo_Sausage, 1);
}
else if InventorySet ==3
{
CreateInvItems (self, ItFo_Stew, 1);
CreateInvItems (self, ItMi_Joint, 2);
CreateInvItems (self, ItMi_gold, 16);
}
else if InventorySet ==4
{
CreateInvItems (self, ItFo_Stew, 1);
CreateInvItems (self, ItFo_Booze, 1);
CreateInvItems (self, ItMi_gold, 15);
}
else if InventorySet ==5
{
CreateInvItems (self, ItFo_Sausage, 1);
CreateInvItems (self, ItFoMuttonRaw, 1);
CreateInvItems (self, ItMi_gold, 11);
}
else if InventorySet ==6
{
CreateInvItems (self, ItFo_Booze, 1);
CreateInvItems (self, ItPl_Planeberry, 1);
CreateInvItems (self, ItFo_FishSoup, 1);
CreateInvItems (self, ItMi_gold, 19);
}
else if InventorySet ==0
{
CreateInvItems (self, ItPl_Mushroom_02, 3);
CreateInvItems (self, ItFo_Booze, 1);
CreateInvItems (self, ItMi_gold, 10);
CreateInvItems (self, ItFoMutton, 2);
};
};
func void B_CreateAmbientInv_KDF (var int InventorySet)
{
if InventorySet ==1
{
CreateInvItems (self, ItFoMutton, 1);
CreateInvItems (self, ItMi_Quartz, 1);
CreateInvItems (self, ItMi_Coal, 1);
CreateInvItems (self, ItMi_gold, 33);
}
else if InventorySet ==2
{
CreateInvItems (self, ItPo_Mana_02, 1);
CreateInvItems (self, ItMi_Sulfur, 1);
CreateInvItems (self, ItMi_Flask, 1);
CreateInvItems (self, ItMi_gold, 36);
}
else if InventorySet ==3
{
CreateInvItems (self, ItMi_SilverRing, 1);
CreateInvItems (self, ItPl_Mushroom_01, 1);
CreateInvItems (self, ItPl_Planeberry, 1);
CreateInvItems (self, ItMi_Rockcrystal, 1);
CreateInvItems (self, ItMi_gold, 30);
}
else if InventorySet ==4
{
CreateInvItems (self, ItFo_Sausage, 1);
CreateInvItems (self, ItPo_Health_03, 1);
CreateInvItems (self, ItFo_Booze, 1);
CreateInvItems (self, ItMi_gold, 36);
}
else if InventorySet ==5
{
CreateInvItems (self, ItPl_Health_Herb_01, 1);
CreateInvItems (self, ItPl_Mushroom_01, 1);
CreateInvItems (self, ItPl_Mana_Herb_01, 1);
CreateInvItems (self, ItMi_gold, 39);
}
else if InventorySet ==6
{
CreateInvItems (self, ItFo_Booze, 1);
CreateInvItems (self, ItMi_Sulfur, 1);
CreateInvItems (self, ItPl_Blueplant, 1);
CreateInvItems (self, ItMi_gold, 34);
}
else if InventorySet ==0
{
CreateInvItems (self, ItPl_Mushroom_02, 1);
CreateInvItems (self, ItMi_Quartz, 1);
CreateInvItems (self, ItMi_Pitch, 1);
CreateInvItems (self, ItMi_gold, 35);
};
};
func void B_CreateAmbientInv_MIL (var int InventorySet)
{
if InventorySet ==1
{
CreateInvItems (self, ItFoMutton, 3);
CreateInvItems (self, ItPl_Mushroom_01, 1);
CreateInvItems (self, ItFo_Stew, 1);
CreateInvItems (self, ItMi_gold, 15);
}
else if InventorySet ==2
{
CreateInvItems (self, ItPo_Health_01, 1);
CreateInvItems (self, ItPl_Health_Herb_01, 3);
CreateInvItems (self, ItFoMutton, 1);
CreateInvItems (self, ItMi_gold, 17);
}
else if InventorySet ==3
{
CreateInvItems (self, ItPl_Mushroom_01, 1);
CreateInvItems (self, ItPl_Health_Herb_01, 1);
CreateInvItems (self, ItMi_gold, 25);
}
else if InventorySet ==4
{
CreateInvItems (self, ItPl_Mushroom_01, 1);
CreateInvItems (self, ItFo_Sausage, 1);
CreateInvItems (self, ItMi_gold, 30);
}
else if InventorySet ==5
{
CreateInvItems (self, ItFo_Booze, 3);
CreateInvItems (self, ItFo_FishSoup, 1);
CreateInvItems (self, ItMi_gold, 14);
}
else if InventorySet ==6
{
CreateInvItems (self, ItPl_Health_Herb_01, 1);
CreateInvItems (self, ItFo_FishSoup, 1);
CreateInvItems (self, ItPl_Mushroom_02, 1);
CreateInvItems (self, ItMi_gold, 26);
}
else if InventorySet ==0
{
CreateInvItems (self, ItPl_Mushroom_02, 1);
CreateInvItems (self, ItFo_Booze, 1);
CreateInvItems (self, ItFo_Sausage, 3);
CreateInvItems (self, ItMi_gold, 25);
};
};
func void B_CreateAmbientInv_DJG (var int InventorySet)
{
if InventorySet ==1
{
CreateInvItems (self, ItFo_Wine, 1);
CreateInvItems (self, ItPl_Mana_Herb_01, 1);
CreateInvItems (self, ItFoMuttonRaw, 1);
CreateInvItems (self, ItAt_WolfFur, 1);
CreateInvItems (self, ItMi_gold, 39);
}
else if InventorySet ==2
{
CreateInvItems (self, ItFo_Milk, 1);
CreateInvItems (self, ItMi_Joint, 1);
CreateInvItems (self, ItPl_Health_Herb_02, 1);
CreateInvItems (self, ItMi_gold, 46);
}
else if InventorySet ==3
{
CreateInvItems (self, ItFo_Bacon, 1);
CreateInvItems (self, ItPl_Speed_Herb_01, 1);
CreateInvItems (self, ItAt_BugMandibles, 1);
CreateInvItems (self, ItMi_gold, 45);
}
else if InventorySet ==4
{
CreateInvItems (self, ItFoMutton, 1);
CreateInvItems (self, ItPl_SwampHerb, 1);
CreateInvItems (self, ItFo_Bacon, 1);
CreateInvItems (self, ItMi_gold, 44);
}
else if InventorySet ==5
{
CreateInvItems (self, ItFo_Stew, 1);
CreateInvItems (self, ItPl_Health_Herb_02, 1);
CreateInvItems (self, ItMi_Joint, 1);
CreateInvItems (self, ItMi_gold, 43);
}
else if InventorySet ==6
{
CreateInvItems (self, ItPo_Health_02, 1);
CreateInvItems (self, ItFo_Booze, 2);
CreateInvItems (self, ItFo_Wine, 1);
CreateInvItems (self, ItMi_gold, 46);
}
else if InventorySet ==0
{
CreateInvItems (self, ItFo_Sausage, 1);
CreateInvItems (self, ItFoMuttonRaw, 2);
CreateInvItems (self, ItAt_SheepFur, 1);
CreateInvItems (self, ItMi_gold, 41);
};
};
func void B_CreateAmbientInv_PAL (var int InventorySet)
{
if InventorySet ==1
{
CreateInvItems (self, ItFo_Wine, 1);
CreateInvItems (self, ItFo_Bacon, 1);
CreateInvItems (self, ItPl_Speed_Herb_01, 1);
CreateInvItems (self, ItMi_Pitch, 1);
CreateInvItems (self, ItMi_gold, 44);
}
else if InventorySet ==2
{
CreateInvItems (self, ItFo_Booze, 1);
CreateInvItems (self, ItFo_Milk, 1);
CreateInvItems (self, ItMi_Rockcrystal, 1);
CreateInvItems (self, ItPl_Mana_Herb_02, 1);
CreateInvItems (self, ItMi_gold, 42);
}
else if InventorySet ==3
{
CreateInvItems (self, ItFo_Bacon, 1);
CreateInvItems (self, ItPl_Mana_Herb_01, 2);
CreateInvItems (self, ItMi_Sulfur, 1);
CreateInvItems (self, ItPl_Dex_Herb_01, 1);
CreateInvItems (self, ItMi_gold, 23);
}
else if InventorySet ==4
{
CreateInvItems (self, ItMi_Rockcrystal, 1);
CreateInvItems (self, ItMi_SilverRing, 1);
CreateInvItems (self, ItMi_Pitch, 1);
CreateInvItems (self, ItPl_Health_Herb_03, 1);
CreateInvItems (self, ItMi_gold, 46);
}
else if InventorySet ==5
{
CreateInvItems (self, ItFo_Stew, 1);
CreateInvItems (self, ItPl_Health_Herb_02, 1);
CreateInvItems (self, ItMi_Rockcrystal, 1);
CreateInvItems (self, ItMi_gold, 43);
}
else if InventorySet ==6
{
CreateInvItems (self, ItPo_Health_02, 1);
CreateInvItems (self, ItPl_Speed_Herb_01, 2);
CreateInvItems (self, ItMi_Coal, 1);
CreateInvItems (self, ItMi_gold, 37);
}
else if InventorySet ==0
{
CreateInvItems (self, ItFo_Sausage, 1);
CreateInvItems (self, ItMi_Coal, 1);
CreateInvItems (self, ItPl_Health_Herb_02, 1);
CreateInvItems (self, ItMi_gold, 40);
};
};
func void B_CreateAmbientInv_DMT (var int InventorySet)
{
if (InventorySet == 1)
{
CreateInvItems (self, ItPo_Mana_01, 1);
CreateInvItems (self, ItMi_Pitch, 1);
CreateInvItems (self, ItMi_gold, 42);
}
else if (InventorySet == 2)
{
CreateInvItems (self, ItPo_Mana_02, 1);
CreateInvItems (self, ItMi_gold, 35);
CreateInvItems (self, ItMi_Aquamarine, 1);
}
else if (InventorySet == 3)
{
CreateInvItems (self, ItMi_Sulfur, 1);
CreateInvItems (self, ItMi_gold, 23);
CreateInvItems (self, ItPo_Mana_01, 1);
}
else if (InventorySet == 4)
{
CreateInvItems (self, ItMi_Rockcrystal, 1);
CreateInvItems (self, ItPo_Health_01, 1);
CreateInvItems (self, ItMi_gold, 46);
}
else if (InventorySet == 5)
{
CreateInvItems (self, ItMi_Quartz, 1);
CreateInvItems (self, ItMi_gold, 43);
CreateInvItems (self, ItPo_Health_02, 1);
}
else if (InventorySet == 6)
{
CreateInvItems (self, ItPo_Speed, 1);
CreateInvItems (self, ItMi_Coal, 1);
CreateInvItems (self, ItMi_gold, 37);
}
else if (InventorySet == 0)
{
CreateInvItems (self, ItMi_Rockcrystal, 1);
CreateInvItems (self, ItPo_Health_01, 1);
CreateInvItems (self, ItMi_gold, 40);
};
};
func void B_CreateAmbientInv_STRF (var int InventorySet)
{
if InventorySet ==1
{
CreateInvItems (self, ItPl_Planeberry, 1);
}
else if InventorySet ==2
{
CreateInvItems (self, ItFo_Apple, 1);
}
else if InventorySet ==3
{
CreateInvItems (self, ItFo_Beer, 1);
}
else if InventorySet ==4
{
CreateInvItems (self, ItFo_Cheese, 1);
}
else if InventorySet ==5
{
CreateInvItems (self, ItFo_Water, 1);
}
else if InventorySet ==6
{
CreateInvItems (self, ItPl_Forestberry, 1);
}
else if InventorySet ==0
{
CreateInvItems (self, ItFo_Bread, 1);
};
};

func void B_CreateAmbientInv_PIR (var int InventorySet)
{
if InventorySet ==1
{
CreateInvItems (self, ItPl_Planeberry, 1);
CreateInvItems (self, ITMW_1H_VLK_Sword,1);
CreateInvItems (self, ItFO_Addon_Grog,1);
CreateInvItems (self, ItPl_Health_Herb_02, 1);

}
else if InventorySet ==2
{
CreateInvItems (self, ItFo_Apple, 1);
CreateInvItems (self, ItFO_Addon_Grog,2);
CreateInvItems (self, ItMi_Gold,12);
CreateInvItems (self ,ItMi_Joint,3);
}
else if InventorySet ==3
{
CreateInvItems (self, ItFo_Beer, 1);
CreateInvItems (self ,ItPo_Health_01,1);
CreateInvItems (self ,ItMi_GoldRing,1);
}
else if InventorySet ==4
{
CreateInvItems (self, ItFo_Addon_Grog,2);
CreateInvItems (self, ItFo_Cheese, 1);
CreateInvItems (self ,itMi_Joint,1);
CreateInvItems (self ,ItMi_Gold,9);
}
else if InventorySet ==5
{
CreateInvItems (self, ItFo_Beer, 1);
CreateInvItems (self, ItFo_Addon_Rum,1);
CreateInvItems (self ,ItFo_Addon_Pfeffer_01,1);
}
else if InventorySet ==6
{
CreateInvItems (self ,ItMi_Gold, 23);
CreateInvItems (self, ItPl_Forestberry, 1);
CreateInvItems (self, ITMW_1H_VLK_Sword,1);
}
else if InventorySet ==0
{
CreateInvItems (self ,itFO_Fish,1);
CreateInvItems (self,ItFo_Addon_Grog,1);
CreateInvItems (self, ItFo_Bread, 1);
};
};

func void B_CreateAmbientInv_BDT (var int InventorySet)
{
if InventorySet ==1
{
CreateInvItems (self, ItPl_Planeberry, 1);
CreateInvItems (self, ITMW_1H_VLK_Sword,1);
CreateInvItems (self, Itke_Lockpick,2);
CreateInvItems (self, ItPl_Health_Herb_02, 1);

}
else if InventorySet ==2
{
CreateInvItems (self, ItFo_Apple, 1);
CreateInvItems (self, ItFO_Booze,2);
CreateInvItems (self ,ItMi_GoldNugget_Addon,1);
CreateInvItems (self ,ItMi_Joint,3);
}
else if InventorySet ==3
{
CreateInvItems (self, ItFo_Beer, 1);
CreateInvItems (self ,ItPo_Health_01,1);
CreateInvItems (self ,ItMi_SilverRing,1);
CreateInvItems (self, ItFO_Beer,2);
}
else if InventorySet ==4
{
CreateInvItems (self, ItKe_lockpick,1);
CreateInvItems (self, ItFo_Cheese, 1);
CreateInvItems (self ,itMi_Joint,1);
CreateInvItems (self ,ItMi_GoldNugget_Addon,1);
}
else if InventorySet ==5
{
CreateInvItems (self, ItFo_Beer, 1);
CreateInvItems (self, ItFo_Addon_Rum,1);
CreateInvItems (self ,ItFo_Fish,1);
CreateInvItems (self ,ItMi_GoldNugget_Addon,2);
}
else if InventorySet ==6
{
CreateInvItems (self ,ItMi_Gold, 23);
CreateInvItems (self, ItPl_Forestberry, 1);
CreateInvItems (self, ITMW_1H_VLK_Sword,1);
}
else if InventorySet ==0
{
CreateInvItems (self ,itFO_Fish,1);
CreateInvItems (self,ItFo_Addon_Grog,1);
CreateInvItems (self, ItFo_Bread, 1);
CreateInvItems (self, Itke_Lockpick, 3);
};
};


// Hier der NPC Befehl
func void B_CreateAmbientInv (var C_NPC slf)
{
var int Zufall;
Zufall = Hlp_Random (7);

if (slf.guild == GIL_VLK) { B_CreateAmbientInv_VLK (Zufall);}
else if (slf.guild == GIL_BAU) { B_CreateAmbientInv_BAU (Zufall); }
else if (slf.guild == GIL_NOV) { B_CreateAmbientInv_NOV (Zufall); }
else if (slf.guild == GIL_SLD) { B_CreateAmbientInv_SLD (Zufall); }
else if (slf.guild == GIL_KDF) { B_CreateAmbientInv_KDF (Zufall); }
else if (slf.guild == GIL_MIL) { B_CreateAmbientInv_MIL (Zufall); }
else if (slf.guild == GIL_DJG) { B_CreateAmbientInv_DJG (Zufall); }
else if (slf.guild == GIL_PAL) { B_CreateAmbientInv_PAL (Zufall); }
else if (slf.guild == GIL_DMT) { B_CreateAmbientInv_DMT (Zufall); }
else if (slf.guild == GIL_STRF) { B_CreateAmbientInv_STRF(Zufall); }
else if (slf.guild == GIL_PIR) { B_CreateAmbientInv_PIR(Zufall); }
else if (slf.guild == GIL_BDT) { B_CreateAmbientInv_BDT(Zufall); }
else { B_CreateAmbientInv_BAU (Zufall); };

};



Na samym dole skryptu znajduje się najważniejsza część.
Gdy chcemy, aby NPC miał jakiś zestaw ekwipunku, to dodajemy mu  w skrypcie:
B_CreateAmbientInv (self);
Mój skrypt wygląda tak: (plik z tym skryptem nazwałem  B_CreateAmbientInv.d, i umieściłem w Story\B, ten z GII jest w NPC Scripts, ale w GI nie ma takiego folderu)
Spoiler
func void B_CreateAmbientInv
{
CreateInvItems (self, ItFoApple, 7);
CreateInvItems (self, ItFoCheese, 3);
CreateInvItem  (self, Die_Gruft);
CreateInvItem  (self, ItAt_Swampshark_01);
CreateInvItem  (self, ItMw_2H_Sword_Heavy_01);
};
Jest to  mocno uproszczona wersja tego z GII. NPC dodaję ekwipunek tak  samo jak w GII, czyli wstawiam im w skrypt B_CreateAmbientInv.
Wyskakuje masa błędów, najważniejszy z nich to Unknown identifier, czyli nie przypisania do zmiennej. Wyskakuje mi ten błąd przy sprawdzaniu skryptów NPC. Chciałem ustalić taką zmienną, jednak w skryptach GII nie znalazłem innego pliku, w którym jest B_CreateAmbientInv, niż ten, który wkleiłem.
Ma ktoś pomysł jak to zrobić?
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Problem z monologiem
#31 2013-05-25, 10:47(Ostatnia zmiana: 2013-05-25, 10:48)
Mój skrypt nie działa, próbowałem go naprawić, ale czego bym nie zmienił, i tak wyskakuje błąd.
Wow, debugowanie metodą brute-force. Jestem pod wrażeniem.
Statystycznie rzecz biorąc jak będziesz robił to dość długo to w końcu ci się uda, może nawet po drodze wyjdzie ci parę dzieł Shakespeare#msg1085466a.

W nagłówku swojej funkcji nie podałeś jej argumentów (których nie ma, więc powinno być "()").

Orion

Orion

Użytkownicy
posty41
  • Użytkownicy

Orion

Problem z monologiem
#32 2013-05-25, 13:29(Ostatnia zmiana: 2013-05-25, 13:35)
To znaczy, że ma to wyglądać tak, że po func void B_CreateAmbientInv ma być w nawiasie var  int <nazwa argumentu>? Tylko co ma być argumentem w tym nawiasie? Coś po czym skrypt wykrył, że jakiś npc go używa? C_NPC, czy coś takiego?
 


Orion

Orion

Użytkownicy
posty41
  • Użytkownicy

Orion

Problem z monologiem
#34 2013-05-25, 13:50(Ostatnia zmiana: 2013-05-25, 13:57)
Wstawiłem () i wygląda to tak:
func void B_CreateAmbientInv ()
{
CreateInvItems (self, ItFoApple, 7);
CreateInvItems (self, ItFoCheese, 3);
CreateInvItem  (self, Die_Gruft);
CreateInvItem  (self, ItAt_Swampshark_01);
CreateInvItem  (self, ItMw_2H_Sword_Heavy_01);
};
Ale dalej wyskakuje błąd Unknown identifier: B_CreateAmbientInv, błąd jest w skrypcie NPC (w tym przypadku Orry'ego). Wstawiłem tam:
B_CreateAmbientInv (self);
EDIT:
Być może wyskakuje błąd, bo ta funkcja jest w złym pliku, zapisałem ją w C:\Program Files\Gothic\_Work\Data\Scripts\Content\Story\B\B_CreateAmbientInv.d
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Jakie ty masz pojęcie o skryptach? Zdefiniowałeś funkcję, która nie przyjmuje żadnych argumentów, a chcesz ją wywołać z jakimś argumentem. Zdecyduj się, jak ta funkcja ma wyglądać.

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Jest zła kolejność parsowania bądź w ogóle nie dodałeś tego pliku do Gothic.src. Dodaj go biorąc pod uwagę że wszystko do czego się odwołujesz, musi być na liście wcześniej niż miejsce z którego się odwołujesz.

Orion

Orion

Użytkownicy
posty41
  • Użytkownicy

Orion

Problem z monologiem
#37 2013-05-25, 15:38(Ostatnia zmiana: 2013-05-25, 17:20)
Avallach i Adanos, dzięki za trochę konstruktywnej krytyki (o pojęciu i Szekspirze), oraz za wytłumaczenie czym jest funkcja i do czego służy Gothic.src. Ekwipunek działa.
 

Orion

Orion

Użytkownicy
posty41
  • Użytkownicy
Odświeżam temat, ponieważ mam kolejny problem.
Nie wiem jak zrobić skrypt tak, aby usuwał wszystkie przedmioty w inwentarzu NPC.
W G2NK jest po prostu tak:
Npc_clearInventory
W Gothic I nie ma takiej funkcji, więc poszedłem dłuższą drogą, i postanowiłem stworzyć funkcję, która usuwa wszystkie te przedmioty, i wypisałem kilka przedmiotów, które mają zniknąć, i które NPC ma w inwentarzu. Więc napisałem np. :
Npc_RemoveInvItems (self , ItFoRice, Npc_HasItems (self, ItFoRice ));znalazłem takie wpisy w plikach GII, ale to nie działało. Potem wstawiłem:
Npc_RemoveInvItems (self , ItFoRice);ale tutaj trzeba wstawić określoną liczbę. Gdy wstawiłem liczbę mniejszą lub taką samą jak w inwentarzu NPC, to usuwało poprawnie:
Npc_RemoveInvItems (self, ItMiNugget, 220;ale nie usuwało wszystkiego, bo gdyby NPC miał więcej tych przedmiotów, to wciąż by ich kilka miał. Dlatego wstawiłem tam np. 1000, bo NPC nigdy by nie miał ich tak dużo, i zostałyby usunięte wszystkie. Ale to nie działa, gdy podamy liczbę większą od tej, którą ma NPC, więc po wstawieniu 1000 (NPC ma 250 bryłek) nic się nie działo, i NPC dalej miał wszystkie itemy.

Może mnie ktoś naprowadzić jak to zrobić?

PS. Gdy wstawiłem tam wartość ujemną, to skrypt dodawał przedmioty, ale nie zawsze, bo gdy NPC miał tylko jeden taki przedmiot, a ja wstawiłem -2, to usunęło przedmiot, i niczego nie dodało, ale gdy miałem 3 przedmioty, a wstawiłem -1000, to miałem 1003 przedmiotów.
PS.2. Gdy do CreateInvItems wstawiałem wartość ujemną, to gdy była mniejsza (np. -2), to dodawało jeden przedmiot, ale gdy było to -1000, to działo się coś dziwnego. Zostawał tylko jeden taki przedmiot, ale nie dało się go wyciągnąć z ekwipunku NPC (martwego lub pokonanego). Jednak dalej tam był, jak normalny przedmiot, tylko nie mogłem do dodać do swojego ewkipunku.
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Problem z monologiem
#39 2013-06-05, 11:17(Ostatnia zmiana: 2013-06-05, 11:22)
To przez to że przedmioty w eq mają taki atrybut jak "ilość". Jeśli jakiś item już jest w eq, a próbujesz dodać jakąś ilość takiego samego, to tak naprawdę są jedynie dodawane ilości. Ilość może być także ujemna. Wówczas dzieje się to co napisałeś na końcu. Przedmiot jest wyświetlany, bo znajduje się na liście, ale nie można z nim nic zrobić (bo go nie masz, właściwie "masz dług"). Zgaduję że jeśli masz np -5 bryłek rudy, a podniesiesz z ziemi 5 prawdziwych pojedynczych, to wyjdziesz na zero (wszystkie znikną). Prosta matematyka :D

Czyszczenie eq w g1 da się zrobić rekurencją.
func void Npc_ClearInventory (var c_npc npc)
{
Npc_ClearInventoryLoop(npc, 0);
}

func void Npc_ClearInventoryLoop (var c_npc npc, var int category)
{
int amount = Npc_GetInvItemBySlot (npc, category, 0);
if (amount)
{
NPC_RemoveInvItems (npc, Hlp_GetInstanceID (item), amount);
Npc_ClearInventoryLoop(npc, category);
}
else if (category < INV_CAT_MAX-1)
{
Npc_ClearInventoryLoop(npc, category+1);
};
};

Z tym że rozmiar stosu w maszynie Daedalusa jest mocno ograniczony i przy bardzo dużej ilości powtórzeń gra mogłaby crashować. Jednak w tym przypadku wydaje się to mało prawdopodobne.

Daj znać czy działa, jak tak to dodam do tutoriali, bo widzę że nic tam takiego nie ma, a jest to całkiem przydatne i nie takie oczywiste.


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