Repozytorium Mrucznik-RP-obiekty zostało stworzone, aby ułatwić wgrywanie na serwer obiektów (etc) za współpracą z osobami, z rangą mapper+.
W głównym folderze znajdziesz kilka podstawowych plików/folderów. Poniżej znajduje się ich przedstawienie:
- W pliku stare_obiekty.pwn załączone są obiekty z folderu stare_obiekty. Są to obiekty pisane w starym formacie, nie zaleca się ich edycji.
- W pliku nowe_obiekty.pwn załączone są pliki z folderu nowe_obiekty. Jest to nowy format, stworzony specjalnie pod mapę Mrucznik Role Play. Jeżeli chcesz dodać na serwer jakieś obiekty, kieruj się do tego pliku.
- W pliku 3dtexty znajdziesz wszelkie 3dtexty użyte na serwerze, możesz je swobodnie zmieniać, usuwać, dodawać nowe.
- W pliku actorsOnWorld znajdziesz wszystkich stworzonych actorów za pomocą nowego systemu. Wzorzec jak i objaśnienie znajduje się w tym pliku.
- W pliku locale znajdziesz definie PLOCAL, które możesz wykorzystać w kodzie.
- w pliku ikony znajdziesz wszelkie ikonki, które są dodane na mape (nie powiązując się z żadnym innym systemem)
- W pliku pickupy znajdziesz wszelkie pickupy, które są dodane na mapę (nie powiązując się z żadnym innym systemem)
- W pliku colandreas_removebuildings znajdziesz funkcje "CA_RemoveBuilding" z pluginu ColAndreas, które są odpowiednikiem "RemoveBuildingForPlayer".
Nazewnictwo, które powinniśmy stosować do zmiennych jest przedstawione przy obiekty_zmienne. Nie zaleca się odbiegania od tych norm i tworzenia miliona zmiennych. Przykład poprawnie stworzonych obiektów na exampleObjects.
Aby poprawnie wgrać obiekty na nasz serwer postępuj zgodnie z poniższymi krokami:
- Wejdź na swojego branch'a (bądź go utwórz (dopuszczalne jest także współpracowanie na 1 branchu (np. 2.5.6))), pobierz wszystkie zmiany za pomocą polecenia "git pull".
- Wejdź w folder nowe obiekty, wybierz podfolder (bądź stwórz nowy) - nazwa powinna być krótka i prosta.
- Stwórz pliki (w świeżo utworzonym folderze) na przykładzie ExampleObjects, nazywając je tak samo jak główny folder. Bądź jeżeli dotyczą poszczególnych części - nazwij je tak.
- Dodaj swoje obiekty jako plik .db, a także wewnątrz utworzonego pliku .pwn (zgodnie z Example). Pamiętaj! Format tworzenia obiektów powinien być jako "CreateDynamicObject(..)".
- W razie, gdy posiadasz obiekty, które nie zgadzają się z podanym wyżej formatem , skorzystaj z konwertera obiektów. Jako output wybierz "Icognito's Streamer Plugin". Jeżeli nie możesz sobie poradzić skontaktuj się z @Simeone, @Deduir,.
- Plik .db dodajemy w celu łatwiejszej (późniejszej) edycji interioru/exterioru, na przyszłe potrzeby. Wyciągamy go z naszego kreatora (TextureStudio). Jeżeli używasz innego kreatora - pomiń ten krok.
- Dodaj do pliku Nowe_Obiekty.pwn linijkę odpowiadającą za wczytanie twojego pliku .pwn, możesz to zrobić używając "#include ścieżka/aaa.pwn". Następnie umiejść linijkę wywołującą Init i Connect (wywołują się one w 2 różnych miejscach Gamemode).
- Dodajemy Init - ponieważ wykonuje się on przy wczytaniu naszego Gamemode.
- Dodajemy Connect - ponieważ wykonuje się on przy każdym zalogowaniu gracza na playerid
- Upewnij się, że w żadnym z plików nie pozostawiłeś błędnego kodowania (UTF-8 ETC), domyślnie powinno to być (ANSI/WINDOWS 1250)
- Jeżeli usuwałeś coś wykorzystując "RemoveBuildingForPlayer", dodaj odpowiadającą mu funkcję "CA_RemoveBuilding" z ColAndreas (https://github.com/Pottus/ColAndreas/wiki/Functions#ca_removebuilding) do pliku "colandreas_removebuildings.pwn".
- Sprawdź wszystko za pomocą specjalistycznego gamemode'a zamieszczonego w folderze "skrypt"
- UWAGA! Przy edycji jednego pliku, bądź dodaniu jednego interioru/exterioru od razu wrzucaj to na git'a stosując "git commit", jako opis ustawiaj to, co zmieniłeś. Pozwoli nam to zaoszczędzić czasu przy Review.
- UWAGA! Narzędzie edycji na stronie github.com zmienia domyślnie kodowanie na UTF-8! Nie korzystaj z tego!
Jeżeli masz problem z przygotowaniem swoich obiektów do wgrania zgłoś się do obecnego kierownika mapy - w celu wyjaśnień.
Zachęcamy do umieszczania dodatkowych plików w folderze (.md - opisy takie jak ten, .png - zrzuty ekranu interioru [...]).
Jeżeli chcesz umieścić w swoim interiorze / exteriorze bramę, należy wykorzystać funkcję "DodajBrame" w wywołaniu "Init". Schemat funkcji DodajBrame, wygląda następująco: DodajBrame(fobiekt, Float:fx1, Float:fy1, Float:fz1, Float:frx1, Float:fry1, Float:frz1, Float:fx2, Float:fy2, Float:fz2, Float:frx2, Float:fry2, Float:frz2, Float:fspeed, Float:frange, fuprtyp=0, fuprval=0, bool:flag=false);
- fobiekt - to obiekt, który chcemy ustawić jako bramę.
- fx1 - pozycja naszej bramy zamknięta X
- fy1 - pozycja naszej bramy zamknięta Y
- fz1 - pozycja naszej bramy zamknięta Z
- frx1 - pozycja naszej bramy zamknięta RX
- fry1 - pozycja naszej bramy zamknięta RY
- frz1 - pozycja naszej bramy zamknięta RZ
- fx1 - pozycja naszej bramy otwarta X
- fy1 - pozycja naszej bramy otwarta Y
- fz1 - pozycja naszej bramy otwarta Z
- frx1 - pozycja naszej bramy otwarta RX
- fry1 - pozycja naszej bramy otwarta RY
- frz1 - pozycja naszej bramy otwarta RZ
- fspeed - szybkość otwierania bramy
- frange - odległość w jakiej zadziała komenda /brama
- fuprtyp - TYP (BRAMA_UPR_TYPE_FRACTION, BRAMA_UPR_TYPE_FAMILY, BRAMA_UPR_TYPE_ALLPLAYERS, BRAMA_UPR_TYPE_BUSINESS)
- fuprval - wartość typu, jeżeli chcemy dopisać bramę dla frakcji nr 1 - ustawiamy to jako "1"
- flag - pozycja otwarta/zamknięta (domyślnie tego nie dopisywać)
- WAŻNE! Nie ustawiaj VirtualWorldu obiektu bramy jako -1, to samo z interiorem. Stosuj wartości stałe (0+)
- WAŻNE! VirtualWorld, który służy do sprawdzenia czy gracz jest OBOK tej bramy jest wyciągany z fobiekt
- Nie stosuj CreateDynamicObject w fobiekt, przypisuj do zmiennej CreateDynamicObject, a następnie wykorzystuj to linijkę poniżej w fobiekt.
Jeżeli chcesz stwworzyć bramę podwójną, użyj funkcji DualGateAdd.
DualGateAdd(
- object1,//Obiekt pierwszej bramy
- Float:fx1,//Pozycja pierwszej bramy X
- Float:fy1,//Pozycja pierwszej bramy Y
- Float:fz1, //Pozycja pierwszej bramy Z
- Float:frx1, //Pozycja pierwszej bramy rX
- Float:fry1, //Pozycja pierwszej bramy rY
- Float:frz1, //Pozycja pierwszej bramy rZ
- Float:fx2, //Pozycja pierwszej bramy po przesunięciu X
- Float:fy2, //Pozycja pierwszej bramy po przesunięciu Y
- Float:fz2, //Pozycja pierwszej bramy po przesunięciu Z
- Float:frx2, //Pozycja pierwszej bramy po przesunięciu RX
- Float:fry2, //Pozycja pierwszej bramy po przesunięciu rY
- Float:frz2, //Pozycja pierwszej bramy po przesunięciu rZ
- object2, //Obiekt pierwszej bramy
- Float:f2x1, //Pozycja drugiej bramy X
- Float:f2y1, //Pozycja drugiej bramy Y
- Float:f2z1, //Pozycja drugiej bramy Z
- Float:f2rx1, //Pozycja drugiej bramy rX
- Float:f2ry1, //Pozycja drugiej bramy rY
- Float:f2rz1, //Pozycja drugiej bramy rZ
- Float:f2x2, //Pozycja drugiej bramy po przesunięciu X
- Float:f2y2, //Pozycja drugiej bramy po przesunięciu Y
- Float:f2z2, //Pozycja drugiej bramy po przesunięciu Z
- Float:f2rx2, //Pozycja drugiej bramy po przesunięciu rX
- Float:f2ry2, //Pozycja drugiej bramy po przesunięciu rY
- Float:f2rz2, //Pozycja drugiej bramy po przesunięciu rZ
- Float:fspeed, // brama speed
- Float:frange, // brama range
- fuprtyp1=0, //Uprawnienia do bram
- fuprval1=0, //Value (wartość) uprawnień
- accessCard = 0, //Karta dostępu
- bool:flg=false);
- WAŻNE! Nie ustawiaj VirtualWorldu obiektu bramy jako -1, to samo z interiorem. Stosuj wartości stałe (0+)
- WAŻNE! VirtualWorld, który służy do sprawdzenia czy gracz jest OBOK tej bramy jest wyciągany z fobiekt
Aby dodać wejście powinieneś wykorzystać funkcję DodajWejscie, która została przedstawiona poniżej.
DodajWejscie(Float:fx1, Float:fy1, Float:fz1, Float:fx2, Float:fy2, Float:fz2, vw1=0, int1=0, vw2=0, int2=0, nazwain[]="", nazwaout[]="", wejdzUID=0, playerLocal=255, bool:specialCome=false);
fx1 - pozycja wejścia X fy1 - pozycja wejścia Y fz1 - pozycja wejścia Z fx2 - pozycja wyjścia X fy2 - pozycja wyjścia Y fz2 - pozycja wyjścia Z vw1 - Virtual World wejścia int1 - Interior wejścia vw2 - Virtual World wyjścia int2 - Interior wyjścia nazwain - nazwa interioru nazwa out - nazwa wyjścia z interioru wejdzUID - dodatkowy skrypt (domyślnie 0) playerLocal - ustawianie przy wejściu pLocalu (domyślnie użyj definicji PLOCAL_DEFAULT) specialCome - jeżeli wejścia są bardzo blisko siebie, a argument ten ustawiony jest na True - wtedy aby wejść będziemy musieli stać bardzo blisko fx1,fy1,fz1.
- Funkcja ta pozwala na dodanie automatyczne i wejścia i wyjścia.
- Jeżeli pozostawimy nazwain/nazwaout jako "" - wtedy w tym miejscu pojawi się ikonka "i".
- Przy dodawaniu specjalistycznego skryptu należy skontaktować się ze skrypterem, aby poszerzył wejdzUID.