dziki_zachód

[NWN1] Skrypty i inne rzeczy potrzebne do stworzenia modułu.

Nie będę się z tobą kłócił o to czy chce mieć czy nauczyć się pisać skrypty.

U mnie te zmienne oGracz, eEfekt nie działają jak jeszcze nie zauważyłeś skrypty pisze się po angielsku, nie po polsku, a jak u ciebie działają zmienne oGracz, eEfekt to powiedz jak?

W skryptorium ten skrypt jest ze zmiennymi oGracz, oPrzedmiot, itd. a jak przeczytałeś już wcześniej u mnie one nie działają.

I jeszcze jedno po co wspominasz o matematyce skoro to wszystko wiadomo komputer cały czas wykonuje obliczenia.

A co do tego skryptu którego napisałem to dobrze mi go skompilowało, tylko nie wiem jak podać etykietę, wiem że znowu o coś proszę ale gdybyś mógł to napisz jak podać tą etykietę, resref, itd.

Myślę że napisałem już wszystko co chciałem.
Odpowiedz

Cytat

U mnie te zmienne oGracz, eEfekt nie działają jak jeszcze nie zauważyłeś skrypty pisze się po angielsku, nie po polsku, a jak u ciebie działają zmienne oGracz, eEfekt to powiedz jak?


a jaką masz wersję NWN?,podejrzewam najgorsze,chyba chińską,w takim razie proponuję wstawić bibliotekę liter łacińskich.Masz tu coś takiego http://neverwinter.ph...ghlight=#37294 i mam nadzieję,że rozwieje wszystkie Twoje wątpliwości.

Cytat

I jeszcze jedno po co wspominasz o matematyce skoro to wszystko wiadomo komputer cały czas wykonuje obliczenia.


bo cały komputer razem z wszystkimi programami jest oparty na cyfrówce,gdzie również nazywamy matematyką logiczną,więc jak nie znasz podstaw matematycznych,życzę Ci Wesołych świąt i dużo w Wiśle upłynie wody zanim coś skumasz.

Cytat

co do tego skryptu którego napisałem to dobrze mi go skompilowało, tylko nie wiem jak podać etykietę, wiem że znowu o coś proszę ale gdybyś mógł to napisz jak podać tą etykietę, resref, itd.


jak wyżej z tym linkiem,tam znajdziesz co Ci potrzeba.

Chyba czas podsumować,nie sądzę,że Aleksander bardzo skomplikowanie tłumaczy,tylko widzę problem gdzie indziej - nie u Aleksandra,bo inni nawet trudniejsze rzeczy pojęli bez takich problemów,pozdrawiam.
Odpowiedz

Cytat

U mnie te zmienne oGracz, eEfekt nie działają jak jeszcze nie zauważyłeś skrypty pisze się po angielsku, nie po polsku, a jak u ciebie działają zmienne oGracz, eEfekt to powiedz jak?


Fakt, przepraszam! Jestem w tym totalnym amatorem - krótko mówiąc, dopiero się uczę, jak ty. Ale widzę, ty już trochę więcej materiału opanowałeś, no i sam fakt, że zajmujesz się C++ znaczy, że stoisz na znacznie wyższym poziomie, niż ja. Jeszcze raz przepraszam. Mam takie pytanie, czy może zechciałbyś zostać moim mentorem? Bo Rigafilm niby się zna, ale przy tobie to nawet bóstwo skryptowe - Lew wymięka. Ale do rzeczy - zapomniałem o tym, że trzeba tą bibliotekę znaków europejskich ściągnąć, by móc pisać zmienne po polsku. http://www.dlldll.com...ang_deutsch%20(neu).dll_download.html"]Link[/url] - Nie wiem, chyba Rigafilm pomylił linki, tutaj masz działający link do biblioteki niemieckiej (która pozwala właśnie pisać zmienne w językach świętobliwej Unii Europejskiej).

Cytat

W skryptorium ten skrypt jest ze zmiennymi oGracz, oPrzedmiot, itd. a jak przeczytałeś już wcześniej u mnie one nie działają.


Drugi fakt, o tym nie pomyślałem, proszę o wybaczenie.

Cytat

A co do tego skryptu którego napisałem to dobrze mi go skompilowało, tylko nie wiem jak podać etykietę, wiem że znowu o coś proszę ale gdybyś mógł to napisz jak podać tą etykietę, resref, itd.


Aaa, tu tkwi problem. Tutaj z pomocą przychodzi kolejna biblioteka "tools.dll" Link

Te dwie biblioteki wystarczy wgrać do folderu z grą.

Cytat

Myślę że napisałem już wszystko co chciałem.

Bardzo jestem rad.
Odpowiedz
Mam problem z tym skryptem, o który prosiłem przepisałem go z tamtego tematu, ale niestety w grze wyświetla się błąd że jest wykonywanych za dużo poleceń, i ja się pytam jak to możliwe przy takim skrypcie:


void main ()

{
object oGracz = GetEnteringObject();
object oPrzedmiot = GetFirstItemInInventory(oGracz);
while(GetIsObjectValid(oPrzedmiot))
{
DestroyObject (oPrzedmiot);
}
int n;
oPrzedmiot = GetItemInSlot (n, oGracz);
while(n <= 14)
{
if(GetIsObjectValid(oPrzedmiot)) DestroyObject(oPrzedmiot);
n ++;
oPrzedmiot = GetItemInSlot(n, oGracz);
}
oPrzedmiot = CreateItemOnObject("lachmany", oGracz);
AssignCommand(oGracz, ActionEquipItem(oPrzedmiot, INVENTORY_SLOT_CHEST));
DestroyObject(OBJECT_SELF);
}


Ja już widziałem skrypty 100 razy dłuższe a tu przy takim krótkim skrypcie za dużo poleceń.
Proszę o to żeby ktoś powiedział jak to możliwe.
Skrypt zapisuje i kompiluje się bez żadnego błędu.


Aleksander możesz mi dokładnie powiedzieć o co chodziło ci z tym pytaniem czy zostanę twoim mentorem? (Jakby co to nie mówię nie, zastanowię się nad tym jak odpowiesz.)
Dzięki za te dwie biblioteki.
(Właśnie zastanawiam się czy nie wziąć się za tworzenie jeszcze czegoś oprócz skryptów i C++)
Odpowiedz
Wiesz, nigdy nie napisałem żadnego skryptu do NWN, ale zadam Ci jedno pytanie, które mnie nurtuje:
Jaka jest początkowa wartość zmiennej n?

Odpowiedz
Ja wiem, ja wiem, choć też nigdy nie pisałem skryptów do NvN.

Fałsz?



Sygnaturowy elementarz gifów awaryjnych - używać tylko w ekstremalnych przypadkach:

SPOILER







Jak masz w poście kaczeńcowyˆ dopisek, istnieje duża szansa, że jest on mojego autorstwa.

Odpowiedz
Hassan/Sosna,

Ja też nigdy nie pisałem skryptów, ale chyba mogę powiedzieć. Zmienne liczbowe bez definicji zawsze mają wartość 0, w sumie jak w większości języków.

Tomasz,

Cytat

Mam problem z tym skryptem, o który prosiłem przepisałem go z tamtego tematu, ale niestety w grze wyświetla się błąd że jest wykonywanych za dużo poleceń, i ja się pytam jak to możliwe przy takim skrypcie:


void main ()

{
object oGracz = GetEnteringObject();
object oPrzedmiot = GetFirstItemInInventory(oGracz);
while(GetIsObjectValid(oPrzedmiot))
{
DestroyObject (oPrzedmiot);
}
int n;
oPrzedmiot = GetItemInSlot (n, oGracz);
while(n <= 14)
{
if(GetIsObjectValid(oPrzedmiot)) DestroyObject(oPrzedmiot);
n ++;
oPrzedmiot = GetItemInSlot(n, oGracz);
}
oPrzedmiot = CreateItemOnObject("lachmany", oGracz);
AssignCommand(oGracz, ActionEquipItem(oPrzedmiot, INVENTORY_SLOT_CHEST));
DestroyObject(OBJECT_SELF);
}


Ja już widziałem skrypty 100 razy dłuższe a tu przy takim krótkim skrypcie za dużo poleceń.
Proszę o to żeby ktoś powiedział jak to możliwe.
Skrypt zapisuje i kompiluje się bez żadnego błędu.


O, mój kod, tylko pamiętaj, ja nigdy nie stawiam spacji po nazwie funkcji. Jak miło, że przerobiłeś go na całkowicie bezużyteczny ;-).

Wiem, może z nadmiaru wiedzy mogą ci się niektóre rzeczy mylić. W końcu widziałeś skrypty 100 razy dłuższe od kilkunastolinjkowego, więc będzie ponad 1000 linijek różnego skryptu.

Zapisuje się i kompiluje bez problemu, bo nie ma tu błędów, przynajmniej takich, jakich szuka ten programik. Znasz się na C++ i pewnie wielu, wielu innych językach programowania, o których te laiki z Microsoftu nie słyszały, więc zapewne zdajesz sobie sprawę, że dużo kłopotu przysporzyłoby napisanie takiego kompilatora, który sprawdzałby, czy skrypt działa, nie wiedząc, do czego on służy.

object oPrzedmiot = GetFirstItemInInventory(oGracz);<br />
while(GetIsObjectValid(oPrzedmiot))<br />
{<br />
    DestroyObject(oPrzedmiot);<br />
}

Spójrz, mistrzu, czy czegoś tu mentorowi nie brakuje?

object oPrzedmiot = GetFirstItemInInventory(oGracz);<br />
while(GetIsObjectValid(oPrzedmiot))<br />
{<br />
    DestroyObject(oPrzedmiot);<br />
    oPrzedmiot = GetNextItemInInventory(oGracz);<br />
}


To jeszcze można wybaczyć, właśnie tym, że byłeś rozproszony ogromem kodu, który przeglądałeś.

Cytat

Aleksander możesz mi dokładnie powiedzieć o co chodziło ci z tym pytaniem czy zostanę twoim mentorem? (Jakby co to nie mówię nie, zastanowię się nad tym jak odpowiesz.)


Co miałem na myśli? To, że skoro z taką łatwością płynie do ciebie wiedza programistyczna, to może będziesz moim skryptowym mentorem/nauczycielem/guru? Wiem, że o wiele proszę, ale błagam, zastanów się, ja nawet pojęty chłopok jest, nie przysporzę ci problemów.

Cytat

Dzięki za te dwie biblioteki.


Proszę cię bardzo za dwie biblioteki.

Cytat

(Właśnie zastanawiam się czy nie wziąć się za tworzenie jeszcze czegoś oprócz skryptów i C++)


Na pewno opanowałeś w stopniu wyżej jak mistrzowskim NWScript i C++, więc pewnie, bierz na ostrzał pozostałe języki, potem będziesz bezkonkurencyjny na tym rynku. ;-)
Odpowiedz
tomasz95

Aj,aj,aj,spóźniłem się,no nic może się uda.
Czy także mógłbyś zostać moim mentorem?,widzę,że Aleksander mnie ubiegł i masz zapewne dużo zajęć,a do tego jeszcze dochodzi sama nauka Aleksandra,ale tak sobie myślę,że możesz nas hurtowo obskoczyć - jedna lekcja,a dwóch/kilku uczniów (może jeszcze się więcej zgłosi?).Nie powinno być chyba tak strasznie,może ze mną faktycznie będziesz miał więcej problemów,bo uczę się topornie,choć bardzo szybko.
Muszę coś powiedzieć,w takim krótkim czasie opanować takie zaawansowane skrypty,naprawdę czapki z głów,bo ja jeszcze się nie odważyłem na takie skomplikowane skrypty,więc moja propozycja jest wciąż aktualna,pozdrawiam.
Odpowiedz


"Sposób wypowiadania się, oparty na zamierzonej niezgodności, najczęściej przeciwieństwie, dwóch poziomów wypowiedzi: dosłownego i ukrytego."

Proszę o upublicznienie lekcji.




Sygnaturowy elementarz gifów awaryjnych - używać tylko w ekstremalnych przypadkach:

SPOILER







Jak masz w poście kaczeńcowyˆ dopisek, istnieje duża szansa, że jest on mojego autorstwa.

Odpowiedz

Przejdź do cytowanego postu Użytkownik Aleksander dnia piątek, 21 września 2012, 19:54 napisał

Hassan/Sosna,

Ja też nigdy nie pisałem skryptów, ale chyba mogę powiedzieć. Zmienne liczbowe bez definicji zawsze mają wartość 0, w sumie jak w większości języków.


W c++ tak nie jest, dla pewności sprawdziłem, błędu nie wywali ale załóżmy że n przyjmie wartość 2132352395, co jakby nie spojrzeć jest większe od 14, więc while zostaje pominięty.

Odpowiedz
Często domyślną wartością dla niezadeklarowanej zmiennej jest nil, czyli brak, a w niektórych przypadkach kompilator interpretuje to wręcz jako fałsz. Albo po prostu zwraca błąd o niezadeklarowanej wartości zmiennej.



Sygnaturowy elementarz gifów awaryjnych - używać tylko w ekstremalnych przypadkach:

SPOILER







Jak masz w poście kaczeńcowyˆ dopisek, istnieje duża szansa, że jest on mojego autorstwa.

Odpowiedz
Sosna,

Nie rozumiem twojej wypowiedzi. Sam zacytowałeś fragment, a mimo to mówisz o jakiejś losowej wartości. To może podzielę ten cytat na części:

Cytat

Zmienne liczbowe bez definicji zawsze mają wartość 0


Cytat

w sumie jak w większości języków.


Nie chcę już wytłuszczać słów, na które wypadałoby zwrócić uwagę, ale chyba już widzisz, że twoja odpowiedź jest bez sensu. A jeszcze większe kłopoty ze zrozumieniem mam tego, że twoim zdaniem prawdopodobne jest, by pominięcie pętli świadczyło o 'zbyt dużej ilości poleceń'. Jeśli nie korzystałeś, to mogę cię zapewnić, że Aurora i NWN nie są to głupie programy, i komunikat o 'zbyt dużej ilości poleceń' jest równoznaczny z zapętleniem. A nawet ewentualnie niedziałająca pętla może się zapętlić? Pewnie, że nie. To jest prawie prawidłowe, w sumie powinno być <= 13, więc wykona się 14 razy, nie ma mowy o dużej ilości poleceń.

Może wytłumaczę, dlaczego właśnie tak. A właściwie nie trzeba tłumaczyć, wypowidałeś się w podobnych tematach, więc powinieneś zrozumieć:

int    INVENTORY_SLOT_HEAD      = 0;<br />
int    INVENTORY_SLOT_CHEST     = 1;<br />
int    INVENTORY_SLOT_BOOTS     = 2;<br />
int    INVENTORY_SLOT_ARMS      = 3;<br />
int    INVENTORY_SLOT_RIGHTHAND = 4;<br />
int    INVENTORY_SLOT_LEFTHAND  = 5;<br />
int    INVENTORY_SLOT_CLOAK     = 6;<br />
int    INVENTORY_SLOT_LEFTRING  = 7;<br />
int    INVENTORY_SLOT_RIGHTRING = 8;<br />
int    INVENTORY_SLOT_NECK      = 9;<br />
int    INVENTORY_SLOT_BELT      = 10;<br />
int    INVENTORY_SLOT_ARROWS    = 11;<br />
int    INVENTORY_SLOT_BULLETS   = 12;<br />
int    INVENTORY_SLOT_BOLTS     = 13;<br />
int    INVENTORY_SLOT_CWEAPON_L = 14;<br />
int    INVENTORY_SLOT_CWEAPON_R = 15;<br />
int    INVENTORY_SLOT_CWEAPON_B = 16;<br />
int    INVENTORY_SLOT_CARMOUR   = 17;

To jest fragment z "nwscript", głównego skryptu NWN. Jest więc poprawne, bo zaczyna się od 0 (int n; ), a kończy się na 13. pozycji. Dalszych już nie trzeba kasować, bo są to bronie naturalne i skóra.

Jedyny błąd jest taki, że Tomasz usunął jedną linijkę w pierwszej pętli (O czym już mówiłem), to powodowało właśnie zapętlenie:

object oPrzedmiot = GetFirstItemInInventory(oGracz);<br />
while(GetIsObjectValid(oPrzedmiot))<br />
{<br />
    DestroyObject(oPrzedmiot);<br />
}


W sumie można pomyśleć, że ta pętla wykona się raz, w końcu:

"oPrzedmiot = Pierwszy przedmiot w ekwipunku oGracza
dopóki oPrzedmiot istnieje
Zniszcz oPrzedmiot"

Tylko proszę jeszcze zwrócić uwagę, że to niszczenie rzeczy trochę trwa, a skrypt postępuje błyskawicznie. W rezultacie kilka ułamków sekund po uruchomieniu funkcji niszczącej przedmiot nadal może istnieć, więc pętla znów się powtórzy, i znów, i znów, i znów, może nie dochodzi do takiego typowego zapętlenia, ale gracz i tak się o tym nie przekona, bo "Brak odpowiedzi od aplikacji NWN".

Tomasz,

Właściwie widzę jeszcze jeden teoretyczny powód. Powiedz, gdzie wstawiłeś ten skrypt? Nie wiem, czy mój mentor widzi, ale jest on dostosowany do wyzwalacza (DestroyObject(OBJECT_SELF)). Jak go wstawiłeś do OnEnter obszaru, to faktycznie może być zbyt dużo poleceń, w końcu ten skrypt będzie w takim razie usuwał inwentarz i wyposażenie każdego stworzenia na lokacji! Jak chcesz wstawić do OnEnter obszaru, to już mentor chyba będzie wiedział co napisać, będą dwa warunki.
Odpowiedz
A ja mogę się wtrącić?Cieszę się,że też inni zabierają głos wcale niezwiązani z NWN,bo zasada pisania wszędzie obowiązuje ta sama.
Moje jest takie zdanie,każdy program,lub skrypt,chociaż może być podobny powinien mieć swoje zastosowanie,zależnie gdzie się znajduje.Dlaczego?,bo np skrypt powinien być lekki,krótki i przyjemny,gdzie teraz widzę właśnie tendencję do komplikowania najprostszych rzeczy.Aleksander w "Skryptorium wyraźnie napisał,że ten skrypt powinien się znajdować na wyzwalaczu,nigdzie indziej,bo właśnie jak teraz ostatnio wspomniał,nie posiada filtrów/zabezpieczeń,żeby można zastosować w innym przypadku.Właśnie teraz duża grupa programistów pisze swoje kody tak skomplikowane i zabezpieczone,że nawet najprostsza aplikacja rozrasta się do niebotycznych rozmiarów,o wymaganiach nie wspomnę,więc się pytam - po co to wszystko?Czy to jakaś moda,a może jednak brak praktyki?,w końcu teraz maszyny i tak sobie dadzą radę - po co się męczyć.Powiem szczerze,tę tendencję zauważyłem od roku 2005/6 i nie wiem czemu ma służyć,a najgorsze jest to,że przybiera do absurdalnych wymiarów,np wg UE we wszystkich urządzeniach elektrycznych i elektronicznych muszą być zabezpieczenia,żeby w razie czego człowieka nie zabiło.Czy to nie absurd?,a przez to cena jakby nie było idzie do góry,bo niektóre zabezpieczenia muszą być bardzo wymyślne.Wniosek nasuwa się jeden,człowiek nie może zginąć od prądu,ale z głodu umrzeć chyba powinien.Podobna sprawa jest właśnie z programami,skryptami,itp,proszę mi powiedzieć,czym się tak znacząco różni najnowsza wersja jakiegoś tam programu,od tej sprzed 6/10 lat?.Tak samo się przedstawia sprawa ze skryptami,naprawdę widziałem sporo modułów do NWN,gdzie gra niemiłosiernie się cięła i wcale aż takie rozbudowane nie były,gdzie ta gra ma wymagania procesor 450 i pamięci 96,więc jaka to jest przyczyna?Ano właśnie jak już w swoim wywodzie wyżej napisałem.

tomasz95

Cytat

a już widziałem skrypty 100 razy dłuższe a tu przy takim krótkim skrypcie za dużo poleceń.
Proszę o to żeby ktoś powiedział jak to możliwe.


zrozum jedno,ja mogę Ci napisać i 5cio linijkowy skrypt,też będzie miał prawo wywalić,dlaczego?,patrz powyżej,bo widzę,że zatraciłeś umiejętność czytania między "skryptami",pozdrawiam.
Odpowiedz
Zacytowałem fragment wypowiedzi, do którego się następnie odniosłem. Zwróciłem uwagę, że zadeklarowano zmienną n nie przypisując jej wartości, co może być przyczyną, bądź jedną z przyczyn, problemu. Wspomniałem o c++, w którym zmienna n nie miałaby w tej sytuacji wartości 0 (czyli tej pożądanej), a inną (z tego co kojarzę losową, w każdym razie nie 0), co mogło spowodować błąd, zaznaczam jednak że są to tylko moje przypuszczenia, bo nie znam szczegółów tego konkretnego języka.

Odpowiedz
Dobra nie musicie już odpowiadać na tamto pytanie.

W sprawie zostania mentorem to napisze na prywatnej wiadomości.
Właściwie to jeszcze nie wiem przecież wszystkiego o skryptach w nwn, więc jeszcze zastanówcie się czy na pewno mam być tym mentorem.

Ostatnio niezbyt często zaglądam do nwn, więc nie będę tak często tutaj zaglądał.

I powstawiajcie jakieś skrypty z błędami dobra, spróbuję je naprawić tak aby działały.
Tylko żeby na początek były to jakieś drobne błędy.
Oczywiście nie musicie ich wstawiać, ale będzie to dla mnie taki że tak powiem trening.
Odpowiedz
Wiem, że straszny odkop robie, ale czy mogę gdzieś jeszcze dorwać ten samouczek od skryptowania? :>
Odpowiedz
← Neverwinter Nights

Skrypty i inne rzeczy potrzebne do stworzenia modułu. - Odpowiedź

Wczytywanie...