Narzędzia, skrypty, problemy techniczne - Wersja do druku +- Drużyna Spolszczenia (http://druzynaspolszczenia.pl) +-- Dział: Gothic - modyfikacje (http://druzynaspolszczenia.pl/forumdisplay.php?fid=11) +--- Dział: Gothic - programy/texture-pack (http://druzynaspolszczenia.pl/forumdisplay.php?fid=26) +--- Wątek: Narzędzia, skrypty, problemy techniczne (/showthread.php?tid=2894) |
RE: Narzędzia, skrypty, problemy techniczne - Erwin - 14.02.2020 Dzięki, to jest trochę bardziej skomplikowane, to sobie później przejrzę. Mam jeszcze jedno pytanko. Mam taką funkcję: func void WERK_S1() { Wld_PlayEffect("Spellfx_Armyofdarkness", hero, hero, 1, 50, DAM_FIRE, FALSE ); }; i chciałbym, żeby to zadawało obrażenia bohaterowi. Efekt się odpala, ale żadnych obrażeń bohater nie dostaje. Co tu jest źle? RE: Narzędzia, skrypty, problemy techniczne - N1kX - 14.02.2020 Добавь func void WERK_S1() { Wld_PlayEffect("Spellfx_Armyofdarkness", hero, hero, 1, 50, DAM_FIRE, FALSE ); //damage hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] - 50; }; RE: Narzędzia, skrypty, problemy techniczne - Erwin - 14.02.2020 Działa Tyle, że to odejmuje bohaterowi punkty życia, zawsze tyle samo, a da się zrobić żeby zamiast tego zabierania hp było uderzenie np od ognia za 50 punktów, tak jak chciałem to wcześniej wpisać, czy tylko Spacerem? RE: Narzędzia, skrypty, problemy techniczne - N1kX - 14.02.2020 С использованием Ikarus+Lego Или делать урон зону в Spacer var C_NPC global_fired_npc_self; func void FireDamage() { global_fired_npc_self.attribute[ATR_HITPOINTS] = global_fired_npc_self.attribute[ATR_HITPOINTS] - 50; if((global_fired_npc_self.aivar[AIV_VictoryXPGiven] == FALSE) && (global_fired_npc_self.attribute[ATR_HITPOINTS] <= 0)) { B_GivePlayerXP(global_fired_npc_self.level * XP_PER_VICTORY); global_fired_npc_self.aivar[AIV_VictoryXPGiven] = TRUE; if (FF_Active(FireDamage)) { FF_Remove(FireDamage); }; }; }; func void WERK_S1() { Wld_PlayEffect("VOB_BURN",slf,slf,0,0,0,FALSE); if(!FF_Active(FireDamage)) { global_fired_npc_self = Hlp_GetNpc(slf); FF_ApplyOnceExt(FireDamage, 1000, 3); }; }; RE: Narzędzia, skrypty, problemy techniczne - Erwin - 14.02.2020 To już chyba za trudne dla mnie. Wrócę do tej "mikstury modlitwy" na razie i to będę przeglądał. Dzięki Znalazłem taką stronkę z dźwiękami z Gothica, może komuś się przyda. https://soundofgothic.pl/ (20.02.2020, 09:02:05)Erwin napisał(a): Co do tych skrzyń i pułapek w nich zawartych, to ja widzę to tak: N1kX, wiesz może, czy jest jakaś funkcja do skryptu, żeby po śmierci określonego potwora, otworzyła się brama? N1kX, вы не знаете, есть ли функция для сценария, чтобы после смерти определенного монстра ворота открылись? RE: Narzędzia, skrypty, problemy techniczne - N1kX - 24.02.2020 Разместить в мире циклический триггер, который будет вызывать функцию, в которой будет проверятся смерть нужного НПС Как только НПС будет мертв, послать сигнал Wld_SendTrigger нужному объекту. Не знаю, есть ли подобный урон на польском. У нас есть. https://worldofplayers.ru/threads/31401/#post-438902 RE: Narzędzia, skrypty, problemy techniczne - Erwin - 24.02.2020 A mógłbyś mi podać jakąś funkcję do sprawdzenia śmierci tego NPC, bo ja nie znam się za bardzo na skryptach? RE: Narzędzia, skrypty, problemy techniczne - N1kX - 24.02.2020 Ну в циклическую функцию можно вот что добавить func void B_CYCLE_FUNCTION() { if(hero.attribute[ATR_HITPOINTS_MAX] == 0) //Проверка, загружен ли ГГ в мир игры. Если игра еще не загрузила ГГ в игру, значение максимальной жизни ГГ будет равно 0 и вызов триггера будет происходить до выполнения своих нужных функций. Это проверка необходима, т.к. если ГГ еще не загружен в игру и функция начнет полную отработку, возможен вылет из игры. { Wld_SendTrigger("CYCLE_TRIGGER"); //Вызов триггера c именем CYCLE_TRIGGER для зацикливания всей функции. return; //Выход из функции. }; //Если ГГ уже загружен в игру, дальше идет полная отработка цикла, куда можно вставлять множество своих нужных функций... //для примера проверим смерть волка var C_NPC npc; npc = Hlp_GetNpc(PEPES_YWolf1); //если наш волк мертв if(Npc_IsDead(npc)) { //запускаем подъем ворот Wld_SendTrigger("LEBEDKA"); }; Wld_SendTrigger("CYCLE_TRIGGER"); //Вызов триггера c именем CYCLE_TRIGGER для зацикливания всей функции. }; Но я бы посоветовал сделать по-другому (не доверяю я функции Npc_IsDead) В zs_dead.d добавить проверку //если убитый монстр равен нашему монстру if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(WolfMIS)) { //он убит K_WolfKilled= TRUE; }; func void B_CYCLE_FUNCTION() { if(hero.attribute[ATR_HITPOINTS_MAX] == 0) //Проверка, загружен ли ГГ в мир игры. Если игра еще не загрузила ГГ в игру, значение максимальной жизни ГГ будет равно 0 и вызов триггера будет происходить до выполнения своих нужных функций. Это проверка необходима, т.к. если ГГ еще не загружен в игру и функция начнет полную отработку, возможен вылет из игры. { Wld_SendTrigger("CYCLE_TRIGGER"); //Вызов триггера c именем CYCLE_TRIGGER для зацикливания всей функции. return; //Выход из функции. }; //Если ГГ уже загружен в игру, дальше идет полная отработка цикла, куда можно вставлять множество своих нужных функций... //для примера проверим смерть волка //если наш НПС мертв if(K_WolfKilled == TRUE) { //запускаем подъем ворот Wld_SendTrigger("LEBEDKA"); }; Wld_SendTrigger("CYCLE_TRIGGER"); //Вызов триггера c именем CYCLE_TRIGGER для зацикливания всей функции. }; RE: Narzędzia, skrypty, problemy techniczne - Erwin - 24.02.2020 O właśnie Dzięki. Akurat coś tam próbowałem z tą funkcją Npc_IsDead robić i nie bardzo to wychodziło. Jak napiszę sobie potrzebny skrypt, to jeszcze tu wrzucę do sprawdzenia Do pliku ZS_Dead w folderze: \_Work\data\Scripts\Content\AI\Human\ZS_Human dodałem: if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(ORC_8537_SHAMAN)) { K_ShamanKilled= TRUE; }; a to dodałem do startup func void B_CYCLE_FUNCTION() { if(hero.attribute[ATR_HITPOINTS_MAX] == 0) { Wld_SendTrigger("CYCLE_TRIGGER"); return; }; if(K_ShamanKilled == TRUE) { Wld_SendTrigger("TEST1"); }; Wld_SendTrigger("CYCLE_TRIGGER"); }; i przy odpalaniu pokazuje mi błąd: U: PAR:Syntax error: IF ( line 102 ) - linia 102, to ta na czerwono. Mógłbyś N1kX spojrzeć? A i dodałem do func void INIT_STRAND () w startup B_CYCLE_FUNCTION(); i tą funkcję przeniosłem ze startup, bo w poradniku pisało żeby tak nie robić, ale dalej mam ten błąd. Masakra, jak człowiek nie zna teorii i podstaw skryptów do Gothica Ten błąd 102 to jednak był tu: f(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(ORC_8537_SHAMAN)) w tej linijce, bo jak przeniosłem funkcję ze startup, to tam nawet takiej linijki 102 nie było. Zrobiłem to jeszcze raz wg pierwszej wersji i napisałem taki skrypt: func void B_CYCLE_FUNCTION() { if(hero.attribute[ATR_HITPOINTS_MAX] == 0) { Wld_SendTrigger("CYCLE_TRIGGER"); return; }; var C_NPC npc; npc = Hlp_GetNpc(ORC_8537_SHAMAN); if(Npc_IsDead(npc)) { Wld_SendTrigger("TEST1"); Wld_SendTrigger("CYCLE_TRIGGER"); }; }; no i jest prawie dobrze, prawie, bo po śmierci orka-szamana brama się w kółko otwiera i zamyka. Pewnie dlatego, że dany NPC jest martwy uruchamia się brama i od nowa ten zapętlony trigger, a że NPC jest dalej martwy, to cała akcja się powtarza. RE: Narzędzia, skrypty, problemy techniczne - N1kX - 25.02.2020 func void B_CYCLE_FUNCTION() { if(hero.attribute[ATR_HITPOINTS_MAX] == 0) { Wld_SendTrigger("CYCLE_TRIGGER"); return; }; var C_NPC npc; npc = Hlp_GetNpc(ORC_8537_SHAMAN); var int Test1; if(Npc_IsDead(npc) && (Test1 == FALSE)) { Wld_SendTrigger("TEST1"); Test1 = true; }; Wld_SendTrigger("CYCLE_TRIGGER"); }; RE: Narzędzia, skrypty, problemy techniczne - Erwin - 25.02.2020 Działa znakomicie Dzięki za cierpliwość RE: Narzędzia, skrypty, problemy techniczne - N1kX - 25.02.2020 Кстати я обнаружил совсем нелепую ошибку, это в заметку Посмотрим триггер смены локации в Хоиринсе в Долину Предков, у него есть ошибка [% oCTriggerChangeLevel:zCTrigger:zCVob 24577 247] pack=int:0 presetName=string: bbox3DWS=rawFloat:6335.02734 326.856812 -24783.8125 6733.29932 718.856812 -24312.6328 trafoOSToWSRot=raw:0000803f0000008000000000000000000000803f0000000000000080000000800000803f trafoOSToWSPos=vec3:6728.29932 557.856812 -24317.6328 vobName=string:GONEWLOCATION visual=string: showVisual=bool:1 visualCamAlign=enum:0 visualAniMode=enum:0 visualAniModeStrength=float:0 vobFarClipZScale=float:1 cdStatic=bool:0 cdDyn=bool:1 staticVob=bool:1 dynShadow=enum:0 zbias=int:0 isAmbient=bool:0 [visual % 0 0] [] [ai % 0 0] [] triggerTarget=string: flags=raw:07 filterFlags=raw:12 respondToVobName=string: numCanBeActivated=int:-1 retriggerWaitSec=float:0 damageThreshold=float:0 fireDelaySec=float:0 levelName=string:TOWERWORLD/TOWERWORLD.ZEN startVobName=string:START_TOWERWORLD [] В Windows путь указывается через другой знак слеша \, а не через / Правильнее будет levelName=string:TOWERWORLD\TOWERWORLD.ZEN Такая же нелепая ошибка есть в 3 картах долины предков + насчитал 5 триггеров. Пример карты Ошибка, которая может быть в игре будет следующей: Например пропадает указатель положения ГГ на карте, или мир может быть неправильно инициализирован и т.п. Подозреваю, что все эти недочеты допустили авторы Глобал мода. / используется только в браузере и в среде Интернет или сетевые протоколы \ используется в ОС, в программах RE: Narzędzia, skrypty, problemy techniczne - Erwin - 25.02.2020 No ciekawe. Zauważyłem, że u siebie też mam ten błąd. Mój roboczy plik startowy do świata: [INFO] Title=Gothic II: Night of the Raven Version=2.6 Authors=Piranha Bytes Webpage=http://www.piranha-bytes.com Description=!<symlink>GothicGame.rtf Icon=GothicStarter.exe [FILES] VDF=GothicGame.mod Game=Content\Gothic FightAI=Content\Fight Menu=System\Menu Camera=System\Camera Music=System\Music SoundEffects=System\SFX ParticleEffects=System\ParticleFX VisualEffects=System\VisualFX OutputUnits=OU [SETTINGS] Player=PC_HERO World=addon/ADDONWORLD.zen [OPTIONS] show_Info=0 show_InfoX=800 show_InfoY=7200 show_Version=1 show_VersionX=6500 show_VersionY=7200 show_Focus=1 show_FocusItm=1 show_FocusMob=1 show_FocusNpc=1 show_FocusBar=1 force_Subtitles=0 force_Parameters= [OVERRIDES] INTERNAL.extendedMenu=1 Jakimś cudem mi to działało. RE: Narzędzia, skrypty, problemy techniczne - N1kX - 08.03.2020 Нашел интересную программу. Она умеет показывать в папке файлы с их кодировку. Теперь будет удобнее искать неправильные файлы. Криво работает только... RE: Narzędzia, skrypty, problemy techniczne - Erwin - 08.03.2020 N1kX, a da się Vobbildera otworzyć Yandex'em? Obecnie muszę tego typu katalogi otwierać Internet Explorer, bo tam mogę włączyć ActiveX. Ewentualnie Chrome, bo tam jest jakaś nakładka, ale jest to niewygodne. |