Zaloguj się, aby obserwować  
Sqower

Plugin

Recommended Posts

Zna może ktoś taki plugin ?

Bez tytułu.png

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Jakie ma on zadanie?

Zlicza wygrane w 1v1 czy jak?

Jeżeli tak, to opiera się to jak widac na clan tag, czyli po prostu dodajesz clan tag (bodajże CS_SetClientClanTag) i ustawiasz to na zasadzie zmiennej, która zlicza wygrane.

Nie wiem jak dokładnie to działa, więc ciężko mi powiedzieć o jakie zliczanie chodzi

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Napisano (edytowany)

Ma to działać na zasadzie wygranej mapy coś typu mvp lecz tego nie usuwa 

Edytowano przez Sqower

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

No to tak, najpierw zliczasz fragi, następnie pod koniec mapy cs_win_panel_match uporządkowujesz.

Po wybraniu tego najlepszego, dodajesz mu ten "punkt" i zapisujesz.

Następnie w CS_SetClientClanTag wczytujesz po prostu te zmienną, w której zapisujesz te wygrane.

Najlepiej wtedy to sformatować i dopiero wtedy dodać do CS_SetClientClanTag

 

To tak mniej więcej.

Mam nadzieję, że dobrze zrozumiałem. Jeżeli nie, to zapewne ktoś mnie poprawi

  • Like 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

To mój autorski - nie znajdziesz w necie.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
4 godziny temu, live4net napisał:

To mój autorski - nie znajdziesz w necie.

A czy jest on w sprzedaży ? 

5 godzin temu, Qesik napisał:

No to tak, najpierw zliczasz fragi, następnie pod koniec mapy cs_win_panel_match uporządkowujesz.

Po wybraniu tego najlepszego, dodajesz mu ten "punkt" i zapisujesz.

Następnie w CS_SetClientClanTag wczytujesz po prostu te zmienną, w której zapisujesz te wygrane.

Najlepiej wtedy to sformatować i dopiero wtedy dodać do CS_SetClientClanTag

 

To tak mniej więcej.

Mam nadzieję, że dobrze zrozumiałem. Jeżeli nie, to zapewne ktoś mnie poprawi

Dzięki spróbuje :P

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Przed chwilą, Sqower napisał:

A czy jest on w sprzedaży ? 

Dzięki spróbuje :P

W wolnym czasie zrobię i wrzucę za free ale podaj na jakiej zasadzie ma tworzyć te win pod koniec mapy 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Przed chwilą, daffik napisał:

W wolnym czasie zrobię i wrzucę za free ale podaj na jakiej zasadzie ma tworzyć te win pod koniec mapy 

że ostatnia osoba co przeżyje dostaje wygraną i np by się zapisywało w bazie danych 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Napisano (edytowany)

Robione na szybko, ale możesz spróbować.

 

#include <sourcemod>
#include <sdktools>
#include <cstrike>

new Handle:DB = INVALID_HANDLE;
new String:Error[100];

public Plugin myinfo = {
    name = "(DF) Wins tag",
    author = "DaFFyy",
    description = "Show user alive rounds in tag",
    version = "1.0",
    url = "https://daffyy.xyz"
};

public OnPluginStart()
{
  DB = SQL_Connect("Last_Alive", true, Error, sizeof(Error));
  if(DB == INVALID_HANDLE)
  {
    PrintToServer("Cannot connect to MySQL Server: %s", Error);
    CloseHandle(DB);
  }
  else {
    new String:query[250];
    new Handle:queryH = SQL_Query(DB, query);
    Format(query, sizeof(query), "CREATE TABLE IF NOT EXISTS `Last_Alive` (steamid VARCHAR(32) primary key, wins INT(4))");

    if(queryH != INVALID_HANDLE) {
      PrintToServer("Utworzono tabele Last_Alive");
    }
  }
  HookEvent("player_death", Event_PlayerDeath);
  HookEvent("player_spawn", Event_PlayerSpawn);
}

public Action:Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
   new count, client;
   for (new i = 1; i <= MaxClients; i++)
   {
       if (IsClientInGame(i) && IsPlayerAlive(i))
       {
           client = i;
           count++;
       }
   }

   if (count == 1)
   {
       new String:query[200];
       new String:steamid[32];
       GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid), false);
       new Handle:queryH = SQL_Query(DB, query);

       Format(query, 200, "INSERT INTO Last_Alive (steamid,wins) VALUES ('%s','1') ON DUPLICATE KEY UPDATE wins = 'wins+1';", steamid);

       if(queryH == INVALID_HANDLE)
          {
            SQL_GetError(DB, Error, sizeof(Error));
            PrintToServer("[Last_Alive] MySQL Error: %s", Error);
          }
   }

   return Plugin_Handled;
}

public Action:Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
  new client = GetClientOfUserId(GetEventInt(event, "userid"));
  new String:query[150];
  new String:steamid[32];
  GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid), false);

  Format(query, sizeof(query), "SELECT wins FROM Last_Alive WHERE steamid = '%s';", steamid);

  new Handle:queryH = SQL_Query(DB, query);
  if(queryH != INVALID_HANDLE)
  {
    if(SQL_FetchRow(queryH))
    {
      new String:wins[32];
      char totalWins[32];
      SQL_FetchString(queryH, 0, wins, sizeof(wins));
      Format(totalWins, sizeof(totalWins), "[%d wins]", wins);
      CS_SetClientClanTag(client, totalWins);
    }
    else {
      Format(query, 200, "INSERT INTO Last_Alive (steamid,wins) VALUES ('%s','0');", steamid);

      if(queryH == INVALID_HANDLE)
         {
           SQL_GetError(DB, Error, sizeof(Error));
           PrintToServer("[Last_Alive] MySQL Error: %s", Error);
         }

    }
  }
}

 

w databases.cfg "Last_Alive"

Edytowano przez daffik
  • Like 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
1 godzinę temu, daffik napisał:

Robione na szybko, ale możesz spróbować.

 

#include <sourcemod>
#include <sdktools>
#include <cstrike>

new Handle:DB = INVALID_HANDLE;
new String:Error[100];

public Plugin myinfo = {
    name = "(DF) Wins tag",
    author = "DaFFyy",
    description = "Show user alive rounds in tag",
    version = "1.0",
    url = "https://daffyy.xyz"
};

public OnPluginStart()
{
  DB = SQL_Connect("Last_Alive", true, Error, sizeof(Error));
  if(DB == INVALID_HANDLE)
  {
    PrintToServer("Cannot connect to MySQL Server: %s", Error);
    CloseHandle(DB);
  }
  else {
    new String:query[250];
    new Handle:queryH = SQL_Query(DB, query);
    Format(query, sizeof(query), "CREATE TABLE IF NOT EXISTS `Last_Alive` (steamid VARCHAR(32) primary key, wins INT(4))");

    if(queryH != INVALID_HANDLE) {
      PrintToServer("Utworzono tabele Last_Alive");
    }
  }
  HookEvent("player_death", Event_PlayerDeath);
  HookEvent("player_spawn", Event_PlayerSpawn);
}

public Action:Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
   new count, client;
   for (new i = 1; i <= MaxClients; i++)
   {
       if (IsClientInGame(i) && IsPlayerAlive(i))
       {
           client = i;
           count++;
       }
   }

   if (count == 1)
   {
       new String:query[200];
       new String:steamid[32];
       GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid), false);
       new Handle:queryH = SQL_Query(DB, query);

       Format(query, 200, "INSERT INTO Last_Alive (steamid,wins) VALUES ('%s','1') ON DUPLICATE KEY UPDATE wins = 'wins+1';", steamid);

       if(queryH == INVALID_HANDLE)
          {
            SQL_GetError(DB, Error, sizeof(Error));
            PrintToServer("[Last_Alive] MySQL Error: %s", Error);
          }
   }

   return Plugin_Handled;
}

public Action:Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
  new client = GetClientOfUserId(GetEventInt(event, "userid"));
  new String:query[150];
  new String:steamid[32];
  GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid), false);

  Format(query, sizeof(query), "SELECT wins FROM Last_Alive WHERE steamid = '%s';", steamid);

  new Handle:queryH = SQL_Query(DB, query);
  if(queryH != INVALID_HANDLE)
  {
    if(SQL_FetchRow(queryH))
    {
      new String:wins[32];
      char totalWins[32];
      SQL_FetchString(queryH, 0, wins, sizeof(wins));
      Format(totalWins, sizeof(totalWins), "[%d wins]", wins);
      CS_SetClientClanTag(client, totalWins);
    }
    else {
      Format(query, 200, "INSERT INTO Last_Alive (steamid,wins) VALUES ('%s','0');", steamid);

      if(queryH == INVALID_HANDLE)
         {
           SQL_GetError(DB, Error, sizeof(Error));
           PrintToServer("[Last_Alive] MySQL Error: %s", Error);
         }

    }
  }
}

 

w databases.cfg "Last_Alive"

O stary dziękuje bardzo :P

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

 

Dnia 11.02.2018 o 22:16, daffik napisał:

Robione na szybko, ale możesz spróbować.

 

#include <sourcemod>
#include <sdktools>
#include <cstrike>

new Handle:DB = INVALID_HANDLE;
new String:Error[100];

public Plugin myinfo = {
    name = "(DF) Wins tag",
    author = "DaFFyy",
    description = "Show user alive rounds in tag",
    version = "1.0",
    url = "https://daffyy.xyz"
};

public OnPluginStart()
{
  DB = SQL_Connect("Last_Alive", true, Error, sizeof(Error));
  if(DB == INVALID_HANDLE)
  {
    PrintToServer("Cannot connect to MySQL Server: %s", Error);
    CloseHandle(DB);
  }
  else {
    new String:query[250];
    new Handle:queryH = SQL_Query(DB, query);
    Format(query, sizeof(query), "CREATE TABLE IF NOT EXISTS `Last_Alive` (steamid VARCHAR(32) primary key, wins INT(4))");

    if(queryH != INVALID_HANDLE) {
      PrintToServer("Utworzono tabele Last_Alive");
    }
  }
  HookEvent("player_death", Event_PlayerDeath);
  HookEvent("player_spawn", Event_PlayerSpawn);
}

public Action:Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
   new count, client;
   for (new i = 1; i <= MaxClients; i++)
   {
       if (IsClientInGame(i) && IsPlayerAlive(i))
       {
           client = i;
           count++;
       }
   }

   if (count == 1)
   {
       new String:query[200];
       new String:steamid[32];
       GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid), false);
       new Handle:queryH = SQL_Query(DB, query);

       Format(query, 200, "INSERT INTO Last_Alive (steamid,wins) VALUES ('%s','1') ON DUPLICATE KEY UPDATE wins = 'wins+1';", steamid);

       if(queryH == INVALID_HANDLE)
          {
            SQL_GetError(DB, Error, sizeof(Error));
            PrintToServer("[Last_Alive] MySQL Error: %s", Error);
          }
   }

   return Plugin_Handled;
}

public Action:Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
  new client = GetClientOfUserId(GetEventInt(event, "userid"));
  new String:query[150];
  new String:steamid[32];
  GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid), false);

  Format(query, sizeof(query), "SELECT wins FROM Last_Alive WHERE steamid = '%s';", steamid);

  new Handle:queryH = SQL_Query(DB, query);
  if(queryH != INVALID_HANDLE)
  {
    if(SQL_FetchRow(queryH))
    {
      new String:wins[32];
      char totalWins[32];
      SQL_FetchString(queryH, 0, wins, sizeof(wins));
      Format(totalWins, sizeof(totalWins), "[%d wins]", wins);
      CS_SetClientClanTag(client, totalWins);
    }
    else {
      Format(query, 200, "INSERT INTO Last_Alive (steamid,wins) VALUES ('%s','0');", steamid);

      if(queryH == INVALID_HANDLE)
         {
           SQL_GetError(DB, Error, sizeof(Error));
           PrintToServer("[Last_Alive] MySQL Error: %s", Error);
         }

    }
  }
}

 

w databases.cfg "Last_Alive"

Takie pytanko czy po dodaniu databases i pluginu muszę coś jeszcze zrobić bo wrzuciłem zrobiłem baze danych i nic 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
3 godziny temu, Sqower napisał:

 

Takie pytanko czy po dodaniu databases i pluginu muszę coś jeszcze zrobić bo wrzuciłem zrobiłem baze danych i nic 

 

 Format(query, sizeof(query), "CREATE TABLE IF NOT EXISTS `Last_Alive` (steamid VARCHAR(32) primary key, wins INT(4))");

Powinno utworzyć Ci tabele, sprawdź jeszcze raz czy poprawne dane dodałeś + zdalne połączenie.

 

Lub możesz zrobić zapytanie:

CREATE TABLE IF NOT EXISTS `Last_Alive` (
  `steamid` varchar(32) NOT NULL AUTO_INCREMENT,
  `wins` int(4) NOT NULL,
  PRIMARY KEY (`steamid`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;

Nie wiem czy działa,  pisane z telefonu :>

Edytowano przez SeeQ

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
2 godziny temu, tellek napisał:

Auto increment na steamid? XD

"Nie wiem czy działa,  pisane z telefonu"

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

W wielu przypadkach najpierw jest wykonywane zapytanie z pustą zmienną, a dopiero wtedy w zmiennej jest zapisywana kwerenda. Przykład:

 else {
    new String:query[250];
    new Handle:queryH = SQL_Query(DB, query);
    Format(query, sizeof(query), "CREATE TABLE IF NOT EXISTS `Last_Alive` (steamid VARCHAR(32) primary key, wins INT(4))");

Takich miejsc jest więcej, trzeba je wszystkie poprawić (najpierw Format, a dopiero potem SQL_Query.

 

Dodatkowo int jest wczytywany z bazy jako string, a następnie próbuje się go wyświetlić jako int (%d) - nie ma szans to zadziałać. Trzeba użyć SQL_FetchInt.

 

 

Po zmianie tych rzeczy, powinno działać, jednak aby plugin działał dobrze i był napisany optymalnie, należy:

 

1. Zmienić wszystkie zapytania na TQuerry

2. Zapisywać dane zamiast na steamid to na accountID

3. Dodać znacznik czasu, który umożliwiałby kasowanie starych rekordów

4. Użyć nową składnie

5. Trzymać spójny kod - w niektórych kwerendach rozmiar stringa podczas formatowania jest na sztywno ustalony na 200 bajtów, a w niektórych jest użyta funkcja sizeof()

6. Po co odczytywać dane przy każdym spawnie? Co rundę daje to ilość zapytań (w dodatko slow-querry) równy liczbie graczy.

7. Dodanie funkcji, która w przypadku nieznalezienia odpowiedniego wpisu w pliku databases.cfg, wykorzystuje wpis default.

8. ClanTag najlepiej ustawiań po dołączeniu do teamu (zmianie teamu też).

9. Sprawdzanie przy zapytaniu czy połączenie z mysql nie zostało zerwane.

 

@daffik Jeśli nie rozumiesz, którejś z moich propozycji zmianie w kodzie, to pytaj - wytłumaczę Ci, dlaczego tak będzie lepiej. Dałem Ci za free lekcję, więc mam nadzieję, że nie będziesz atakować jak ostatnio gdy komuś pomogłem. Jak poprawisz swój plugin, nie zapomnij wspomnieć o mnie w autorach :)

 

Uprzedzając pytanie odpowiem, że swojego autorskiego pluginu nie udostępniam, ponieważ po to piszę autorskie pluginy na moje serwery, aby się wyróżniały. Nie publikuję ich, żeby nie ułatwiać innym kopiowanie moich pomysłów. Forum służy do pomagania, przy czym pomoc nie zawsze oznacza wrzucenie gotowego rozwiązania (chociaż wielu by tak oczekiwało). Dzielenie się wiedzą, również jest formą pomocy.

  • Like 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
1 godzinę temu, SeeQ napisał:

"Nie wiem czy działa,  pisane z telefonu"

Dawanie autoincrementa do steamid nie jest kwestia "pisania z telefonu", a raczej wiedzy, albo jej brakiem.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Utwórz konto lub zaloguj się, aby skomentować

Musisz być użytkownikiem, aby dodać komentarz

Utwórz konto

Zarejestruj nowe konto na forum. To jest łatwe!

Zarejestruj nowe konto

Zaloguj się

Masz już konto? Zaloguj się.

Zaloguj się

Zaloguj się, aby obserwować  

  • Kto przegląda   0 użytkowników

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

  • Podobna zawartość

    • Przez Umino
      Opis: Zlecę konfigurację pluginu, więcej infa dam na pw. Cena: Zależy ile będzie chciał ktoś za taką konfigurację. Płatność: Przelew Kontakt: PW
    • Przez g
      Witajcie mam pytanko posiada z Was ktoś ten plugin?
       
      Witaj na serwerze sieci:   --===--  --===-- --===-- --===-- --===--   
      IP:    
      Mapa:
      Pozostały Czas: 
       
      Coś w tym stylu
    • Przez Smagosz
      Witam czy istnieje gdzieś jakiś plugin który daje wszystkim nie tylko teammate anty flasha? Potrzebuje go na mapę z 1hp ale duża ilość decoy sprawia że ludzie mają małą ilość FPS.
    • Przez Sqower
      Kupie plugin menu dla vipa na flage o w którym będzie do wyboru respawn po zginieciu (i żeby po zginieciu nie dało się wybrać respa trzeba wcześniej) grawitacja zmniejszona oraz speed i żeby dało się wybrać 1 na roundę
       
      Proszę pisać priv co do ceny 
    • Przez GULLSON
      Witam,
      Szukam plugin u który będzie odtwarzał jakiś krótki dźwięk(5-6sek) przy wejściu gracza na serwer.