Skikov napisał(a):
chciałbym przesunąć nie tylko sam efekt wizualny ale miejsce, od którego rozchodzi się fala uderzeniowa i to w obie strony (do przodu i do tyłu (nie w jednym))
Może nie wyraziłem się dość jasno mówiąc że tego nie da się zrobić. Fala uderzeniowa rozchodzi się dokładnie od miejsca w które trafi pocisk i zawsze będzie "omijać" obiekty statyczne i żaden skrypt tego nie zmieni. To zachowanie jest określone w kodzie samej gry.
Proponowałem takie obejście: po trafieniu w miejsce, pocisk spawnuje pociski tego samego typu dookoła. Jednak robiłem właśnie próby i nic z tego nie wyszło.
Wygląda na to, że jedyne rozwiązanie to zrobić bunkier jako pojazd, ponieważ fala uderzeniowa nie omija pojazdów. Jeśli chcesz przykład jak to zrobić, podejrzyj sobie fabrykę w Battle of Britain.
Zapalnikiem zbliżeniowym w pociskach przeciwlotniczych steruje komenda
ObjectTemplate.ExplodeNearEnemyDistance dla typu Projectile. Zwróć uwagę na nazwę - Pocisk będzie eksplodował tylko jeśli znajdzie się w pobliżu pojazdu i tylko jeśli w pojeździe ktoś będzie siedział (dlatego m.in. flaki nie wybuchają "chmurką" jak pociski przelatują blisko budynków, lub jak strzelasz w pusty samolot.
Przykład z T72 to też coś innego. Albo w skutek zaniedbania twórców, albo celowo, lufa T72 nie posiada kolizji! Broń w BF działa tak, że podczas pocisk spawnuje się zawsze w tym samym miejscu względem lufy (zazwyczaj trochę z przodu żeby np. czołg w ruchu nie trafił sam siebie). Kiedy czołg strzela przez ścianę bunkra, pocisk spawnuje się z przodu lufy. Ale zauważ że to nie pocisk przenika przez ścianę, tylko lufa czołgu - bo to ona nie ma kolizji. Więc w efekcie sam pocisk spawnuje się już wewnątrz bunkra, a nie na zewnątrz. To nie jest żadne przenoszenie punktu obrażeń, tylko zwykły błąd w siatce kolizji czołgu.
Pisząc kod w bf, trzeba wiedzieć, że każda komenda działa tylko dla niektórych typów. Na przykład ObjectTemplate.setInputToFire (która najczęściej określa który przycisk myszy aktywuje broń) została przewidziana dla typu FireArms, czyli dla broni. Gdybyś chciał użyć tej komendy w przypadku silnika (typ Engine), to - cokolwiek nie wpiszesz - nie zadziała, bo niby czym silnik ma strzelać? Tak samo nie zadziała dla typu Projectile (pocisk), bo pocisk nie strzela tylko jest wystrzeliwany.
Więc ten kod to typowy przypadek braku świadomości typów.
Zakładam, że mlrsrocket jest obiektem typu Projectile, czyli pociskiem
Dwie ostatnie linijki to poprawne polecenia dla typu Projectile, przedostatnia określa zasięg eksplozji, ostatnia siłę z jaką eksplozja rozrzuca wszystko dookoła.
Pierwsza linijka jest poprawną komendą, ale dla typu Engine (silnik) i określa - w dużym skrócie - moc silnika.
Druga linijka natomiast jest pleceniem dla typu FireArms (broń) i określa prędkość wylotową pocisku.
Żeby ten kod działał, musisz znaleźć nazwy silnika rakiety oraz broni która wystrzeliwuje tą rakietę (to nie to samo co nazwa pojazdu (PCO).)
Poprawny kod będzie miał podobną postać:
Kod:
ObjectTemplate.active mlrsrocket
ObjectTemplate.radius 30
ObjectTemplate.ForceOnExplosion 30
ObjectTemplate.active SilnikRakietyMLRS
ObjectTemplate.setTorque 100.0
ObjectTemplate.active BronStrzelajacaRakietamiMLRS
ObjectTemplate.velocity 250
Poza tym podsunę jeszcze komendę dla typu Projectile - ObjectTemplate.GravityModifier CRD_NONE/x/0/0
Za x podstaw dowolną liczbę, a BF będzie przez tą liczbę mnożył siłę grawitacji która działa na rakietę. To powinno pomóc w trajektorii. Korzystając z parametru CRD (
poczytaj o nim tutaj) możesz losować ten parametr dla każdej nowo-wystrzelonej rakiety, co da trochę rozrzutu
_________________
Przez te całe mody mam więcej godzin przegranych w BF1942 Debug niż w normalną wersję gry...