Skocz do zawartości

Znajdź zawartość

Wyświetlanie wyników dla tagów 'prosty' .



Więcej opcji wyszukiwania

  • Wyszukaj za pomocą tagów

    Wpisz tagi, oddzielając je przecinkami.
  • Wyszukaj przy użyciu nazwy użytkownika

Typ zawartości


Kategorie

  • Error'y w kompilatorze
  • Warning'i w kompilatorze
  • Fatal error'y w kompilatorze

Forum

  • Go-Code.pl - Ogólne
    • Informacje
    • O serwisie
  • Sourcemod Scripting
    • Baza wiedzy
    • Masz problem?
    • Pytania na temat kodowania
  • Pluginy Sourcemod
    • Wszystko o pluginach
    • Duże modyfikacje
    • Dodatki
  • Konfiguracja serwera
    • Baza wiedzy
    • Pytania
    • Problemy
  • Counter-Strike: Global Offensive
    • Nowości
    • Artykuły, poradniki, tutoriale
    • Pytania
    • Problemy
  • Hostingi serwerów & WWW
    • Oferty firm
    • Opinie o hostingach
    • Pytania
  • Poza tematyką forum, OFF-TOPIC
    • Życie społeczności
    • Biznes
    • Zareklamuj swoją sieć/serwer
    • RoundSoundy
  • Archiwum
    • Przestarzałe tematy
    • Kosz

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Od tej daty

    Do tej daty


Ostatnia aktualizacja

  • Od tej daty

    Do tej daty


Filtruj po ilości...

Dołączył

  • Od tej daty

    Do tej daty


Grupa podstawowa


Imię


Lokalizacja


Zawód


O mnie


Strona WWW

Znaleziono 3 wyniki

  1. Cześć.. Szukam prostego pluginu rankinowego w miarę w porządku do "edycji", w którym jest możliwość ustawienia komend takich jak !top / !ranking Oczywiście za zabójstwo gracza, czy pkty za czas online na serwerze. Bez żadnych zbędnych statystyk zabójstw itp. Zna ktoś coś może? Z góry dziekuje
  2. Cześć, To jak na razie ostatni plugin, jaki chciałbym napisać do mojego serwera deathmatch. Prawie cały plugin skopiowałem od Magneta z drugiej części poradnika MySQL, ale dodałem trochę swoich rzeczy i chciałem obsłużyć !rank. Pokaże to na czacie wiadomość typu "*nick* is X/Y | [*points*]", gdzie X to miejsce posiadane przez gracza, a Y to liczba wszystkich graczy, którzy się kiedykolwiek połączyli. To mnie przerosło, więc przychodzę z prośbą o pomoc tutaj. Dodam, że w całym pluginie, który wyślę tylko "public Action ClientRanking(int client, int args) mnie interesuje, reszta jest obsłużona poprawnie. *komentarze dla mnie, nie zwracajcie uwagi* Oto plugin: #include <sourcemod> #include <multicolors> #define RANK_TAG "{green}[RANKING]{purple}" int kills[MAXPLAYERS]; int points[MAXPLAYERS]; Database DB; public void OnPluginStart() { RegConsoleCmd("sm_rank", ClientRanking); RegConsoleCmd("sm_top", TopRanking); HookEvent("player_death", PlayerDeath); } public void OnMapStart() { char error[128]; DB = SQL_Connect("Killer", true, error, sizeof(error)); if(DB == INVALID_HANDLE) { LogError("Could not connect: %s", error); return; } char buffer[1024]; Format(buffer, sizeof(buffer), "CREATE TABLE IF NOT EXISTS `Kills`(`steamid` INT NOT NULL PRIMARY KEY,`nick` VARCHAR(64),`kills` INT NOT NULL,`points` INT NOT NULL)"); if(!SQL_FastQuery(DB, buffer)) { SQL_GetError(DB, error, sizeof(error)); PrintToServer("Could not create a table, error: %s", error); } } public Action ClientRanking(int client, int args) { char buffer[1024]; Format(buffer, sizeof(buffer), "SELECT `points` FROM `Kills` ORDER BY `points` DESC;"); //char nameBuffer[MAX_NAME_LENGTH]; //int pointsBuffer; CPrintToChat(client, "%s {lightblue}%N{purple} is {olive}X{purple}/{darkred}Y{purple} | [{orchid}%d{purple} points]", RANK_TAG, client, points[client]); //OBSLUZYC, ZROBIC MENU WYLACZAJACE DZWIEKI (OVERLAYE ITP) } public Action PlayerDeath(Event e, const char[] n, bool b) { int client = GetClientOfUserId(e.GetInt("userid")); int attacker = GetClientOfUserId(e.GetInt("attacker")); kills[attacker]++; points[client]-=2; if(points[client]<0) points[client]=0; if(IsVip(attacker)) { points[attacker]+=6; } else { points[attacker]+=4; } } public void OnClientPutInServer(int client) { kills[client] = 0; points[client] = 0; if(IsFakeClient(client) || IsClientSourceTV(client)) return; int sid = GetSteamAccountID(client); char buffer[1024]; Format(buffer, sizeof(buffer), "SELECT `kills`,`points` FROM `Kills` WHERE `steamid`=%d", sid); DBResultSet query = SQL_Query(DB, buffer); if(query == null) // null or INVALID_HANDLE { char error[255]; SQL_GetError(DB, error, sizeof(error)); PrintToServer("Could not player's (%N) data download, error: %s", client, error); return; } if(!SQL_GetRowCount(query)) { Format(buffer, sizeof(buffer), "INSERT INTO `Kills` VALUES(%d, '%N', 0, 1000)", sid, client); if(!SQL_FastQuery(DB, buffer)) { char error[255]; SQL_GetError(DB, error, sizeof(error)); PrintToServer("Could not add new player (%N), error: %s", client, error); } return; } while(SQL_FetchRow(query)) { kills[client] = SQL_FetchInt(query, 0); points[client] = SQL_FetchInt(query, 1); } } public void OnClientDisconnect(int client) { char buffer[1024]; Format(buffer, sizeof(buffer), "UPDATE `Kills` SET `kills`=%d,`points`=%d WHERE `steamid`=%d", kills[client], points[client], GetSteamAccountID(client)); if(!SQL_FastQuery(DB, buffer)) { char error[255]; SQL_GetError(DB, error, sizeof(error)); PrintToServer("Could not update player's (%N) data, error: %s", client, error); } } public Action TopRanking(int client, int args) { Menu top = new Menu(TopRanking_Handler); top.SetTitle("TOP 10:"); char buffer[1024]; Format(buffer, sizeof(buffer), "SELECT `nick`,`points` FROM `Kills` ORDER BY `points` DESC LIMIT 10;"); DBResultSet query = SQL_Query(DB, buffer); char nameBuffer[MAX_NAME_LENGTH]; int pointsBuffer; while(SQL_FetchRow(query)) { pointsBuffer = SQL_FetchInt(query, 1); SQL_FetchString(query, 0, nameBuffer, sizeof(nameBuffer)); if (IsVip(client)) Format(buffer, sizeof(buffer), "[VIP] %s [%d]", nameBuffer, pointsBuffer); else Format(buffer, sizeof(buffer), "%s [%d]", nameBuffer, pointsBuffer); top.AddItem("", buffer); } top.Display(client, 120); return Plugin_Continue; } public int TopRanking_Handler(Menu top, MenuAction action, int client, int position) { if(action == MenuAction_End || action == MenuAction_Select) delete top; } //////////////////////////////////// BOOLS //////////////////////////////////// bool IsVip(int client) //or owner or admin { if(GetUserFlagBits(client) & ADMFLAG_CUSTOM1 || GetUserFlagBits(client) & ADMFLAG_CUSTOM2 || GetUserFlagBits(client) & ADMFLAG_CUSTOM3) return true; return false; }
  3. Przedstawiam drugą odsłonę pluginu, który pozwala w prosty sposób tworzyć własne osiągnięcia/misje na serwerze. Poprzednia wersja zawierała dużo niedociągnięć i była napisana po prostu brzydko. Liczę, że modyfikacja przypadnie do gustu osobom, które mają w planach stworzenie własnego systemu misji i szuka wygodnego rozwiązania 🙂. Jak to działa? Plugin daje dostęp do funkcji natywnych i forwardów, które pozwalają na tworzenie achievementów/misji i zarządzanie nimi z poziomu dowolnego pluginu. Dzięki temu możliwa jest rozbudowa istniejących już pluginów (np. modyfikacje CodMod, Jailbreak, czy jakikolwiek plugin sobie nie wymyślicie) i tworzenie bardzo ciekawych, nietuzinkowych wyzwań. Komendy: sm_ac sm_achievements sm_mission sm_missions Konfiguracja 1. Zawartość paczki wrzuć na serwer 2. Zdecyduj w jakiej bazie danych chcesz zapisywać informacje - MySQL czy SQLite? Zależnie od odpowiedzi, wklej do addons/sourcemod/configs/databases.cfg następującą konfigurację: Dla SQLite: "AchievementsGO" { "driver" "sqlite" "database" "AchievementsGO" } Dla MySQL: "AchievementsGO" { "driver" "mysql" "host" "HOST" // edytuj "database" "AchievementsGO" // edytuj (opcjonalnie) "user" "USER" // edytuj "pass" "HASLO" // edytuj //"timeout" "0" "port" "PORT" // edytuj, domyslnie 3306 } 3. Twórz 🙂 Jak stworzyć swój achievement/misję? Oto przykładowy plugin: Miejscem, gdzie rejestrujemy achievementy musi być być funkcja AGO_OnRegisterAchievements(). W niej korzystamy z AGO_AddAchievement, który posiada kilka argumentów: native bool AGO_AddAchievement(char[] Name, char[] Description, char[] Category, int Value, int temporaryID, Function functionCallback); Name - nazwa, Description - opis, Category - folder, od którego zostanie przypisane osiągnięcie. Pozwala to na organizowanie/grupowanie misji według własnych upodobań. Zotawiając to pole puste (""), osiągnięcie będzie po prostu bez żadnej kategorii, Value - jest to ilość punktów, która musi zostać osiągnięta, aby zadanie mogło zostać zaliczone. Może to reprezentować dowolną rzecz, np. liczbę wymaganych killi, liczbę kroków, które gracz musi wykonać itd., temporaryID - pomocniczy identyfikator, który pozwala na zidentyfikowanie osiągnięcia, kiedy zostanie ono zarejestrowane przez silnik i jego identyfikator trafi do callbacka. Musi on być unikalny jedynie w obrębie pojedyńczego pluginu, w którym implementujemy osiągnięcia, functionCallback - każdej misji przypisany jest niezależny identyfikator. Ten parametr to po prostu funkcja, do której ta informacja ma trafić. W poprzedniej wersji ID misji były po prostu przekazywane przez returna (np. int misjaX = AGO_AddAchievement....), jednak wymagało to mieszania zapytań synchronicznych i asynchronicznych - obecne rozwiązanie eliminuje ten problem. Mając już ID, przypisane do jakiejś zmiennej, możemy zająć się procesem dodawania punktów. Najczęściej stosowane będzie AGO_AddPoints (jak pokazano w przykładzie, w którym osiągnięcie "Mistrz pisania" można zdobyć, wpisując pięciokrotnie komendę !pkt), ale dostępnych jest parę funkcji, które podam poniżej: Plik AchievementsGO.inc (spolszczony): AchievementsGO.cfg: Na koniec screeny z mojego serwera, gdzie zacząłem tworzenie misji (serwer CodMod): Download: Repozytorium GitHub Bezpośredni download
×
×
  • Dodaj nową pozycję...