Skocz do zawartości
grasmanek94

[Plugin][GameMode][Windows] Gamer_Z eXtreme Party 24/7 - projekt 'open-source serwer' - gamemod w C++!

Rekomendowane odpowiedzi


900x200_BLACK_WS.png
Gamer_Z eXtreme Party 24/7 - czyli w skrócie: eXe24

-------------------------------------------------------------------------
GitHub: github.com/grasmanek94/eXe
-------------------------------------------------------------------------


Prace nad tym GameMod-em typu DeathMatch zaczeły się w czerwcu 2014.
Prace na poważnie nad projektem ruszyły w październiku 2014, awięc zanotowano to jako date rozpoczęcia projektu.

Zdecydowałem aby udostępnić kod źródłowy serwera i być jedynym aktywnym serwerem open-source na scenie SA-MP*.

GameMode jest głównie pisany w C++. Niektóre biblioteki i części kodu są pisane w C.

Cechy GameMode-a:
  • Rejestracja & Login
  • Mafie (gangi)
  • Domki
  • Zabawy
  • Areny DM
  • Spawn wszystkich pojazdów dla wszystkich
  • Automatyczne ustalanie wersji podczas kompilacji (używając datę i ilość commitów z github)
  • Osiągnięcia
  • Ukryte monety do znalezienia
  • Zaawansowane statystyki graczy
  • System Specowania
  • Tylko najbardziej potrzebne komendy adminów
  • AntiCheat
  • Naprawy/Zapobieganie crashów sa-mp
  • Własny system komend
  • Włąsny system dialogów
  • łatwe ustawianie dostępu i warunków używania na poziomie komendy
  • Użycie jakiegokolwiek systemu baz danych** za pomocą C++ ODB zrobione przez CodeSynthesis
  • Wielojęzykowość - Na razie tylko język Polski oraz język Angielski jest dostępny.
  • System wyścigów
  • Aktywacja konta poprzez e-mail
  • Rangi/Zezwolenia (user, vip, mod, admin, etc)
  • Łatwe w użyciu UI
  • Ban na host
  • Własny system banów
  • Monitoring Wydajności
  • SentryGuns
  • Lotto
  • Sklep Broni
  • Limitowana Amunicja
  • Odpowiednie kolorowanie pojazdów (nie bylejakie / losowe)
  • Wszystkie prawdziwe pozycje spawnów pojazdów z GTA:SA (w obecnej chwili limitowane do 950)
  • Trochę stuntów
  • Wbudowany Streamer Plugin
  • Wszystkie Skiny
  • Wszystkie Animacje
  • Wszystkie Pojazdy
  • Użycie systemu SQLite3
  • Hashing Whirlpool
  • Wbudowany MapAndreas (gotowy do użycia / nie używany)
  • Oraz wiele więcej!
Żadnych screenów lub wideo, ale jesteś mile widziany na testy na naszym oficjalnym serwerze.
GameMode jest aktywnie rozbudowywany oraz kontrybucje są mile widziane!

____________________________________

Wymagania do skompilowania GM-a:

- Visual Studio 2013 lub nowsze
- msysgit
- 2,0 GB wolnego miejsca na dysku

____________________________________

* - Raczej żadnych innych istniejących/aktywnych serwerów z własnym GameMod-em open-source nie mogę znaleźć.
** - wymaga to edycje GameMode-a oraz dodanie odpowiednich bibliotek ODB, headersów oraz plików source (oraz wszystko inne co potrzebne).

____________________________________

UWAGA: To nie jest 'kolejny prościutki' gamemod. Jeśli chcesz aby GameMod się poprawnie skompilował wymagane jest sklonowanie repo git oraz musisz mieć zainstalowane wszystko co potrzebne na swojej maszynie na windowsie.

Jeśli nadal nie rozumiesz oco chodzi:
Nie da się tego GameMode-a skompilować za pomocą 'pawncc'.

Jeśli nie wiesz co to 'pawncc':
Nie da się skompilować tego GameMode-a za pomocą PAWNO (jeśli spróbujesz..), więc nie pytaj o pomoc w tej sprawie.

Jeśli nie wiesz co to znaczy "skompilować"... eh:
Nie przerobisz tego kodu na AMX.

(co musiałem powiedzieć powiedziałem, doświadczenia z wydania ostatniego GameMode w C++)


____________________________________

Dlaczego wystawiamy aktywny i działający serwer jako open-source?
  • Zdobycie doświadczenia:
    • jak wpływa projekt open source z aktywnym serwerem i aktywnym dev-team na scene sa-mp?
    • Co to przynosi dla serwera?
    • Co to przynosi dla sceny sa-mp?
    • Jak scena zareaguje?
Nikt się takiego czegoś nie podjął. Ja się podejme - wole zdobyć doświadczenie i intelektualne zadowolenie niż jakiekolwiek korzyści materialne.
Na dodatek nie pomagam tylko Sobie i serwerowi, ale także wszystkim.

Więc mój serwer może teraz przyjąć reputacje jako wspomagający rozwój sceny sa-mp :)
Oraz staramy się dawać dobry przykład i pokazać co to poważny i koleżeński serwer. Edytowane przez grasmanek94

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zasady licencji Opern Suorce, + chęć rozwinięcia programowania cpp dla samp + być moze ktoś skusi się pomóc pisać GM + pawno juz idzie powoli do lamusa -( aktualizacje od Kalcora (obiekty) )* 37

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie rozumiem tylko po co to robisz :o

Zdobycie doświadczenia - jak wpływa projekt open source z aktywnym serwerem i aktywnym dev-team na scene sa-mp? Co to przynosi dla serwera? Co to przynosi dla sceny sa-mp? Jak scena zareaguje? Itp, itp. Nikt się takiego czegoś nie podjął. Ja się podejme, ja wole zdobyć doświadczenie i intelektualne zadowolenie niż jakiekolwiek korzyści materialne. Na dodatek nie pomagam tylko Sobie ale także wszystkim. Więc mój serwer może teraz przyjąć reputacje jako wspomagający rozwój sceny sa-mp :) Na dodatek nie wysyłam ludzi aby się reklamowali na czyichs serwerach (jak to niektóe robią) - poprostu staramy się dawać dobry przykład i pokazać co to poważny i koleżeński serwer.

Edytowane przez grasmanek94

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

for (int i = 1; i < 48; ++i) p_HasWeapon[playerid][i] = false;

Ktoś w tych czasach używa pętli do resetowania tablic? Chyba łatwiejszy sposób

 

new bool:freeArray[48];
p_HasWeapon[playerid] = freeArray;

 

Mnóstwo takich niepotrzebnych pętli, też kopiowane tablic

 

for (int i = 0; i < 48; ++i) p_WeaponEnabled[playerid][i] = g_WeaponEnabled[i];
//-> p_WeaponEnabled[playerid] = g_WeaponEnabled

 

Nie wiem jak to wygląda w C++, ale powinno dać radę skoro można i w PAWN. Jeszcze to zauważyłem

 

if (allowed == 1) g_WeaponEnabled[weaponid] = true;
else g_WeaponEnabled[weaponid] = false;

Można przekształcić w

 

g_WeaponEnabled[weaponid] = (allowed == 1);

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
for (int i = 1; i < 48; ++i) p_HasWeapon[playerid][i] = false;

Ktoś w tych czasach używa pętli do resetowania tablic? Chyba łatwiejszy sposób

 

new bool:freeArray[48];
p_HasWeapon[playerid] = freeArray;

 

Mnóstwo takich niepotrzebnych pętli, też kopiowane tablic

 

for (int i = 0; i < 48; ++i) p_WeaponEnabled[playerid][i] = g_WeaponEnabled[i];
//-> p_WeaponEnabled[playerid] = g_WeaponEnabled

 

Nie wiem jak to wygląda w C++, ale powinno dać radę skoro można i w PAWN. Jeszcze to zauważyłem

 

if (allowed == 1) g_WeaponEnabled[weaponid] = true;
else g_WeaponEnabled[weaponid] = false;

Można przekształcić w

 

g_WeaponEnabled[weaponid] = (allowed == 1);

W C++ nie ma czegoś takiego jak new. Poza tym przy takich rzeczach nie opłaca bawienia się w tworzenie zmiennych zamiast tych pętli w c++ nie robi to takich duzych roznic. Poza tym w c++ zmienne domyślnie nie mają wartości 0 jak w przypadku PAWN. Poza tym - anti cheat jest z przed kilku lat. 

Edytowane przez mrdrifter.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@BaLL - Podane przez Ciebie rozwiązanie tworzy piękny memory leak i potencjalny problem z losowymi danymi (nowa tablica nie jest zainicjalizowana), aczkolwiek poprawnie wskazujesz na problem w kodzie dlatego też wykonałem odpowiednie zmiany - https://github.com/grasmanek94/eXe/commit/e6a17111e84891d8bd51c36d4cf2eba6d99bbc63

 

Jeżeli jeszcze gdzieś widzisz problem pisz tutaj lub na https://github.com/grasmanek94/eXe/issues

Edytowane przez eider

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Za dużo kodu do analizy, mam swój kod do poprawy i optymalizacji. Tak jak pisałem - nie znam się na C++ i nie wiem jak to wygląda, takiego kodu używam w PAWN, to chyba nic złego.

// To po co komentujesz, skoro się na tym nie znasz?

Edytowane przez Shiny

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×