Główna : pomysły

Nr  Opis  Stan  Zgłaszający  Przypisany do  Dodano 
75  soc_funkcje  zamknięty   Alandar    30.1.2005 0:56 




Komentarze:

Autor  Treść 
Alandar 
30.1.2005 1:14 
Własnie pogadałem sobie z nowym graczem, i oczywiście usłyszałem, że wszystko ładnie pięknie, ale czegoś mu brakuje. Brakuje życia w naszym świecie. Wiem, mamy progi, można nimi bardzo wiele zrobić, ale nie znajdzie teraz ludzi, którzy zajęliby się wszystkimi mobamu dopisując im progi. Jedną z możliwości jest napisanie takich progów-szablonów, które byłyby dość ogólne, i możnaby je zastosować do wielu mobów. Innym pomysłem są soc_funkcje. Coś na kształt spec_funkcji, tylko nie do walki, a własnie do interakcji z graczami i ogólnego ożywienia świata. Wydaje mi się, że byłoby to optymalniejsze rozwiązanie, niż oprogowanie każdego moba, nawet podobnymi progami. 
Lam 
30.1.2005 9:19 
Mówiąc spec_funkcje zapewne masz na myśli specjalności. Niektóre z nich są właśnie tym, co opisujesz - schematem zachowań mobów z daną specjalnością. Nikt Ci nigdy nie bronił pisania większej ich ilości, ale nigdy tego nie robiłeś. Co inni mogą na to poradzić? :)

Weź pod uwagę, że dopóki taką specjalność piszesz dla konkretnego lub tylko kilku mobów, może być lepsza od proga (masz większą swobodę działania). Ale jeśli 200 mobów miałoby się zachowywać tak samo, nadal nie będziesz widział w nich ani krztyny życia. Porównaj spec_parrot i spec_guard. Pierwsza robi wrażenie interakcji z mobem i jego odmienności od szarej masy innych mobów, druga ani trochę, może poza pierwszym jej zauważeniem. Tworząc pierwszą dla jednego moba Ulryk nie miał takich problemów jak Ty i zrobił coś, co wpływa na grywalność gry. Żadne specjalności, które będą używane przez wiele mobów nie stworzą takiego wrażenia. To właśnie mają dawać progi, które umożliwiają stworzenie innej "osobowości" każdemu mobowi. Wystarczy prosty greet_prog, ale inny dla każdego. 
Lam 
30.1.2005 21:31 
Hej, obraziłeś się? Nie chciałem osłabić Twojego zapału :) Pisz to, o ile masz dość zapału! 
Alandar 
31.1.2005 21:30 
Co Wy z tym obrażaniem? :P Nie jest ze mną tak źle :)
A co do tematu.
Nie zgadzam się z tym, że jeśli napisze się sensowną liczbę szablonów takich soc_funkcji (a, można to nazywać "specjaności socjalne" :) ) (20-30 myślę, że byłoby już rozsądną liczbą) i na dodatek wprowadziło w nich jeszcze niewielką losowość to mogłoby to naprawdę ożywić świat. A upieram się przy czymś odmiennym od specjalności tradycyjnych, ponieważ mam wrażenie, że specjalność może być tylko jedna (ale nie chciało mi się tego sprawdzać głębiej, przyznaję).
Ja takie specjaności socjalne wyobrażam sobie dość... modułowo :)
Jedna taka SS odpowiadałaby za powitania, reakcją na wejście gracza, ew. na to jak ktoś się zechce z mobem przywitać. I tak mogłyby być SS powitania uprzejmego, zalotnego, gburowatego itp. Inna z kolei za jakąś inicjatywę moba, czyli zachowania raczej losowe.
Hmm... możnaby nawet posunąć się dalej i po prostu ustalać "charakter" moba. Żeby uniknąć powtarzania sie tego, można wprowadzić kilka wersji każdego charakteru i przy odnawianiu wersja by się losowała.
Oczywiście jak zwykle pozostaje problem kto i kiedy to napisze, ale w tej chwili staram się udowodnić, że takie rozwiązanie ma sens. I to większy, niż "prosty greet_prog".
Bo na pewno prędzej znajdzie się ktoś, kto przeleci po wszystkich mobach i zdecyduje jaki charakter im nadać, niż będzie wymyślał ilestam greet_progów. 
Alandar 
31.1.2005 21:32 
Jak zwykle zaplątałem się w za długim zdaniu.
Zamienić "Nie zgadzam się z tym" na "Uważam" :D 
Lam 
1.2.2005 0:16 
Powiem Ci prawdę - to, co Ty chcesz nazywać specjalnościami socjalnymi jest zaimplementowane jako:
- specjalności - faktycznie jedna naraz, chociaż można to zmienić w 10 minut, po prostu nie było potrzeby wcześniej;
- flagi zachowania (act flags), wiele naraz, ich kombinacje mocno odróżniają od siebie moby, ale jest ich za mało (czy pisałeś coś, że 30 wystarczy? ;)), po prostu łatwo powiedzieć "to jest agresywny, tchórzliwy mob, który nie będzie mnie ścigał, jeśli mu ucieknę" i nie widzieć w nim żadnego życia. Gdyby w całym mudzie dwa moby były agresywne, sama agresywność robiłaby wrażenie życia.

Pojmij to, tak czy inaczej planujesz pisać predefiniowane progi. Jeśli każdej z tych specjalności będzie używać jednocyfrowa liczba mobów, będzie to robiło wrażenie. Jeśli jednak będzie to większa liczba, stworzysz jedynie schematy, których i tak mamy bardzo dużo (np. moby, które nie są strażnikami ganiają za tobą, a jeśli mogą mówić, co zależy od rasy i wpływów, krzyczą losowe teksty - ja to pisałem i wcale nie uważam, aby to tworzyło jakikolwiek klimat po kilku godzinach gry, kiedy widzisz to z ust kilkunastu mobów, a przyznasz chyba, że jest to specjalność socjalna, włączana flagą+rasą). Ostatecznie będziesz musiał stworzyć takich specjalności z 500, żeby tchnąć zauważalne życie (definiowane dla potrzeb tej rozprawy jako odmienność od maszynowej automatyki, schematyczności i przewidywalności) we wszystkie z naszych przeszło 5000 mobów. Co w rezultacie od stworzenia tego jako progów i wczytywanie je przez in_file_prog (albo i nie) różni się jedynie prędkością wykonywania (na korzyść specjalności) i stabilnością (na korzyść progów), o ile nie zachodzi konieczność zrobienia czegoś bardziej zaawansowanego niż możliwości progów (tak jak spec_parrot).

To co mnie skłania ku progom (oprócz stabilności) to przykład. Progi mają naprawdę duże możliwości, ale autorom zawsze się przyda biblioteka progów, z których by mogli kopiować i wklejać do swoich arcydzieł. To jest inwestycja w przyszłość.

Sensowna wydaje się propozycja umożliwienia posiadania kilku specjalności przez moby. Czy życzysz sobie ujrzeć to w kodzie?

Również omawialiśmy już temat sposobu zwiększenia ilości flag zachowania, ale nie przypominam sobie, abyśmy doszli do jednego ostatecznego rozwiązania. To temat na odrębną dyskusję, i tak wrobimy w to Ulryka, więc póki co skoncentrujmy się na specjalnościach.

Teraz sprawa implementacji: aktualne specjalności (jest ich raptem kilka) mają określone punkty wejścia z różnych miejsc kodu, gdzie za każdym razem jest sprawdzana każda specjalność moba, która musi zareagować na zaistniałą sytuację. Gdybyś chciał pisać ich większą liczbę, należałoby wprowadzić system zdarzeń i wyzwalaczy podobny do tego z progów. Byłaby to lista funkcji, które reagują na wypowiadane w pomieszczeniu słowa, lista funkcji, które są wywoływane, kiedy ktoś wchodzi, wychodzi itd., potem na ich bazie każdy mob budowałby listę zdarzeń, na które reaguje wraz z listą funkcji do wykonania w przypadku każdej sytuacji (może ich być wiele dla każdego moba), no i pozostaje tylko sprawdzić, czy ktoś chce zareagować, a jeśli tak, to jak. Jest to sporo pisania, a przypomnę, że progi to wszystko mają...

Może więc zaimplementować to jako predefiniowane progi zapisane w kodzie? Zamiast:
greet_prog 100~
'Witam cię serdecznie, $NW!
~
coś takiego:
predefined_prog witanie_serdeczne greet_prog 100~
co nie różniłoby się specjalnie od czegoś takiego:
greet_prog 100~
mpwitanieserdeczne
~
gdzie witanie_serdeczne to zarejestrowana nazwa wbudowanego proga, czyli nazwa takiej właśnie funkcji, która by dostawała te wszystkie argumenty, co dowolny wyzwalacz. Nie powinno być problemu z makrem, które by pozwalało szybko deklarować funkcję tak, aby sprawdzała parametry podawane funkcji (np. brak wymaganego $t). Takie rozwiązanie byłoby o niebo prostsze w implementacji, bo korzystałoby z istniejącej infrastruktury zdarzeń i wyzwalaczy, którą i tak mamy, a dodawało jedynie funkcje mogące zastępować całe progi (nie różniące się prawie niczym od wbudowanych poleceń progów mp*). Sporą wadą zaś jest mało przejrzysta dla kompletnych laików składnia oraz wymóg, że musiałoby się to znajdować między progami. Wady te znikłyby, gdyby obsługiwała to Klacz (dostawałbyś listę takich progów z krótkimi opisami i robił co chciał).

To chyba wszystko, co miałem do powiedzenia w temacie. Nadal uważam, że pewne rzeczy najlepiej robić progami, inne trzeba specjalnościami, a rzeczy określające zachowanie sporych grup mobów flagami, kiedy ustalimy sposób rozszerzenia ich ilości :) Dobranoc :) 
Ulryk 
1.2.2005 9:05 
Lam:
Wydawało mi się, że doszliśmy do porozumienia z flagami. Mieliśmy zwiększyć rozmiar zmiennej, aby uniknąć problemów z kompatybilnością makr.

Alandar:
Lam wymienił kilka niedogodności związanych z twoim pomysłem. Problem tak na prawdę jest bardziej złożony. Chcąc implementować różne zachowania bezpośrednio w kodzie musiałoby być tego faktycznie bardzo dużo. W takiej mnogości funkcji na pewno napotkałbyś na problemy z niedostateczną infrastrukturą obecnych specjalności. Braki wspomnianych przez Lama wyzwalaczy, ograniczenie do jednej specjalności, czy brak zmiennych. Oczywiście, nie ma problemu z napisaniem tego wszystkiego, ale...

Dublował byś kawał kodu, być może nie dokładnie, ale na pewno jego funkcjonalność. Nie ma sensu poświęcać tyle wysiłku na napisanie czegoś, co już jest dostępne.

Progi mają dużą moc. Chcesz tworzyć szablony, rób je w progach w odrębnych plikach. Później wystarczy dołączyć je do moba i już masz oczekiwany efekt.

Lam:
Czy in_file_progi da się odpalać rekurencyjnie? Czyli zamieścić go w doczepianym do krainy progu? 
Lam 
30.3.2005 9:13 
Już się da. Uznajemy to za rozwiązanie wystarczające i zamykamy pomysł. Oczywiście nadal potrzeba kogoś, kto by takie "ożywiacze" pisał, ale możliwości robienia szablonów są całkiem duże. 




Główna : pomysły