Skocz do zawartości

Nowy szablon forum

mygo.pl

Stworzyliśmy dla Was nowy wygląd forum. Z pewnością znajdziesz rzeczy, które wg Ciebie mogą zostać zmienione - wspomnij o tym w specjalnym wątku.

Czytaj więcej

Jak założyć własną sieć

serwerów CS

Zastanawiasz się nad prowadzeniem własnej sieci serwerów? Przeczytaj podstawowe informacje, na które należy zwrócić uwagę, przy takim projekcie.

Czytaj więcej

Tworzymy spis sieci

dodaj swoją

Dodaj sieć do której należysz, pozwoli to na promocję i budowę ogólnopolskiej bazy sieci CS.

Czytaj więcej

Linux`

Użytkownik
  • Postów

    210
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    22

Odpowiedzi opublikowane przez Linux`

  1. W pliku project_events zamien

    public OnClientPutInServer(client)
    {
        // Forward event to all modules.
        new any:eventdata[1][1];
        eventdata[0][0] = client;
        
        EventMgr_Forward(g_EvOnClientPutInServer, eventdata, sizeof(eventdata), sizeof(eventdata[]), g_CommonDataType2);
    }
    
    public OnClientAuthorized(client)
    {
        // Forward event to all modules.
        new any:eventdata[1][1];
        eventdata[0][0] = client;
        
        EventMgr_Forward(g_EvOnClientAuthorized, eventdata, sizeof(eventdata), sizeof(eventdata[]), g_CommonDataType2);
    }

     

    na

    public OnClientAuthorized(client)
    {
        // Forward event to all modules.
        new any:eventdata[1][1];
        eventdata[0][0] = client;
    
        EventMgr_Forward(g_EvOnClientPutInServer, eventdata, sizeof(eventdata), sizeof(eventdata[]), g_CommonDataType2);
        EventMgr_Forward(g_EvOnClientAuthorized, eventdata, sizeof(eventdata), sizeof(eventdata[]), g_CommonDataType2);
    }

     

    a takze

     g_EvOnClientPutInServer =       EventMgr_CreateEvent("Event_OnClientPutInServer");      /** Client has joined the server. */

     

    na

    g_EvOnClientPutInServer =       EventMgr_CreateEvent("Event_OnClientAuthorized");      	/** Client has joined the server. */

     

    Funkcja SQLSys_OnClientPutInServer bedzie wykonywana wtedy co funkcja SQLSys_OnClientAuthorized, dzieki czemu w zadnym z pluginow modyfikacji nie bedzie wymagana zmiana kodu.

  2. Ten sam problem co z starym cmodzie. W csgo jest problem z funkcja putinserver, mimo iz gracz dolaczyl do gry to funkcja nie wykonuje sie w poprawny sposob. Zastap ja np na athorized lub connect, naprawi to blad z samowolnym dodawaniem poziomow. Natomiast jezeli chodzi o utrate danych, problem wynika najpewniej z czasu zapytania miedzy baza a serwerem.

  3. 2 godziny temu, MateuszCode napisał:

    Gdy wszystko wgrałem zkompilowany plugin muzyke

    
    [SM] Listing 18 plugins:
      01 "Fun Votes" (1.7.3-dev+5305) by AlliedModders LLC
      02 "Basic Votes" (1.7.3-dev+5305) by AlliedModders LLC
      03 "Basic Comm Control" (1.7.3-dev+5305) by AlliedModders LLC
      04 "Basic Info Triggers" (1.7.3-dev+5305) by AlliedModders LLC
      05 "Reserved Slots" (1.7.3-dev+5305) by AlliedModders LLC
      06 "Basic Commands" (1.7.3-dev+5305) by AlliedModders LLC
      07 "Fun Commands" (1.7.3-dev+5305) by AlliedModders LLC
      08 "Client Preferences" (1.7.3-dev+5305) by AlliedModders LLC
      09 "Basic Chat" (1.7.3-dev+5305) by AlliedModders LLC
      10 "Nextmap" (1.7.3-dev+5305) by AlliedModders LLC
      11 <Error> "codmod_stary_0.6.smx"
      12 "Player Commands" (1.7.3-dev+5305) by AlliedModders LLC
      13 "Admin File Reader" (1.7.3-dev+5305) by AlliedModders LLC
      14 "Admin Help" (1.7.3-dev+5305) by AlliedModders LLC
      15 "Anti-Flood" (1.7.3-dev+5305) by AlliedModders LLC
      16 "Basic Ban Commands" (1.7.3-dev+5305) by AlliedModders LLC
      17 "Admin Menu" (1.7.3-dev+5305) by AlliedModders LLC
      18 "Sound Commands" (1.7.3-dev+5305) by AlliedModders LLC
    Load Errors:
    codmod_stary_0.6.smx: Error detected in plugin startup (see error logs)

     

     

    Nie podlaczyles zapewne zapisu mysql do modyfikacji codmod. W nowej wersji codmoda zostalo to zabezpieczone tak, by pomimo braku podlaczonego zapisu plugin caly czas pozostawal wlaczony.

  4. 50 minut temu, naXe napisał:

    @Pukawka.pl, wiem tyle co Wy. Nikt mnie nawet nie poinformował ( czyt. bicek ) o sprzedaży forum, nowym właścicielu.

    Na MyGO wchodzę sporadycznie ( jestem od innych spraw ) i dowiedziałem się o tej sytuacji dopiero wczoraj, gdy kliknąłem "Nieprzeczytana zawartość".

     

    Nowy właściciel powinien cały 'zarząd' MyGO poinformować o tym, że przejmuje stery, przedstawić się, przedstawić swoje pomysły na dalszy rozwój.

    Żadnej wiadomości powitalnej nie dostałem i przypuszczam, że moderatorzy również.

     

    Nie jestem w stanie potwierdzić tego, że @macsch to nie @prohost ( bicek ). Jedynie co wyróżnia tych dwóch użytkowników ( w tej chwili pojęcie 'użytkownik' jest najbardziej trafne ) to sposób pisania postów.

    @macsch oraz @prohost korzystają z internetu mobilnego z sieci Play. Przypadeg? Nie sondze.

     

    Ale to też nie jest żadną gwarancją.

     

    Ja jeszcze moze tylko dodam, cos o tym "dowodzie" przelewu pieniedzy. Przelew zostal wyslany z tego samego banku, na jakim widnieje odbiorca przelewu (BRE Bank > MBANK = jedna spolka akcyjna). Zbieg okolicznosci?

  5. 1 godzinę temu, GoodGameBro napisał:

    Przecież to nie ingeruje w pliki gry. Zadaje to po prostu 200HP ze wszystkich broni + dodaje ikonke hs'a.

     

    Nie zupelnie. Plugin po prostu zmienia typ obrazen, jesli strzelimy np w noge to obrazenia zostaja zmienione jako strzal w glowe. Ban za to nie grozi, poniewaz nie jest to zadnego typu cheat lecz niestandardowy plugin ktory moze zostac zainstalowany na kazdym serwerze.

  6. 25 minut temu, Thisowsky I CSBETGO napisał:

    Moze tobie nie potrzebna. Chca poprawic te bledy, ktore zostaly zgloszone a ty juz. "KOLEJNA NIEPOTRZEBNA, KOLEJNA NIEPOTRZEBNA I KOLEJNA NIEPOTRZEBNA..."

     

    Sa poprawki, mniej i bardziej wazne. Poki co valve zajmuje sie tymi mniej waznymi o ile w ogole nimi bo jak narazie wiekszosc aktualizacji polega na dodawaniu nowych dodatkow. Czym innym jest nowe urozmaicenie a czym innym chlam dodawany na sile, tylko po to by bylo tego wszystkiego wiecej. Ale ty tego nie zrozumiesz.

  7. Woow, kolejna nikomu nie potrzebna aktualizacja. Z tego bublu ktory jest dodawany ucieszyc moga sie wylacznie dzieci, a ja sie pytam co z podstawowymi poprawkami bledow? Spam w konsoli, zanikajaca tabela statystyk podczas trzymania taba czy zawieszajacy sie kursor w menu gry. To sa tylko podstawy, lacznie naliczylem bledow kilkanascie jednak nie ma co liczyc na poprawe dopoki uradowana mlodziez bedzie kupowac nowe dodatki ze sklepow, poniewaz na tym valve najbardziej zarabia. Gra to wodorosty i chyba gdyby tylko nie to, ze calkiem calkiem na niej zarobilem czulbym sie oszukany po jej zakupie.

    • Super! 1
  8. @Pukawka.pl Pozwolę się wypowiedziec, co do części zarzutów wypowiadanych przez fevillo. Fakt faktem, ze sam raz miałem taki przypadek ze serwer który wyświetlał się jako mój, nie był tak naprawdę mój. Nie miałem nad nim żadnej kontroli,  jedynie widniał u mnie w panelu lecz zarzadzal nim ktoś inny. Bralem u państwa dziesiątki serwerów testowych lecz taka sytuacja zdarzyła mi się tylko raz. Z racji iz był to tesciak tylko na dwie godziny, nigdzie tego nie zglaszalem.

  9. [opis]
    W tym bardzo prostym tutorialu opiszę w jaki sposób możemy dodać darmowe doświadczenie graczom, jeżeli ci mają niższy poziom niż określony przez nas.
     
    Na początku otwieramy nasz silnik i szukamy w nim:
    public Action:OdrodzenieGracza(Handle:event, String:name[], bool:dontbroadcast)
    i pod:
    if(punkty_gracza[client])
    PrzydzielPunkty(client, 0);

     

    dodajemy:
    if(poziom_gracza[client] < X)
    {
    doswiadczenie_gracza[client] += Y;
    SprawdzPoziom(client);
    }

     

    następnie zamieniamy X na poziom, do którego gracz dostanie dodatkowe doświadczenie a także Y na ilość expa którą gracz ma dostać.
     
    Silnik wraz z paczką modyfikacji, można nabyć wyłącznie poprzez kontakt ze mną. Więcej o tym w sygnaturze
  10. [opis]
    Prosty plugin który dodaje nam w nowej rundzie doświadczenie gdy serwer znajduję się X osób. Wszystko wygodnie regulowane cvarami.
     
    [cvary]
    - Cod_fullserwer_ile 12 // Ile osób musi być online aby dodawało doświadczenie
    - Cod_fullserwer_exp 100 // ile ma dodawać expa
     
    [instalacja]
    - Standardowa, wrzucić pliki do poszczególnych folderów.
     
    Silnik wraz z paczką modyfikacji, można nabyć wyłącznie poprzez kontakt ze mną. Więcej o tym w sygnaturze.
     

    csgo.rar

  11. [opis]
    Jest to dość prosty plugin którego celem jest przeładowywanie domyślnego configu na config eventowy od godziny X do godziny Y. W configu eventowym podajemy inne wartości dla naszych cvarów dzięki czemu zyskujemy np dodatkowe doświadczenie. Plugin można bez problemów przenieść na inne modyfikacje jednak był pisany pod nowego coda więc pod niego jest ogłoszony.
     
    [cvary]
    - config_event_od_godziny, godzina od której trwa event.
    - config_event_do_godziny,  godzina do której trwa event.
     
    [konfiguracja]
    - W cfg/sourcemod/config_eventowy dodajemy domyślne cvary, z innych pluginów tylko zmieniamy ich wartości na czas trwania eventu.
    - By zmienić lokalizację domyślnych wartości cvarów, znajdz w kodzie ServerCommand("exec sourcemod/codmod"); i zmień nazwę configu codmod, na własną.
     
    [instalacja]
    - Standardowa, wystarczy wrzucić pliki do do szczególnych folderów.
     
    Silnik wraz z paczką modyfikacji codmod, można nabyć wyłącznie poprzez kontakt ze mną. Więcej o tym w sygnaturze.
     

    csgo conf.rar

  12. W tym prostym tutorialu pokaze w jaki sposob przypisac uzycie umiejetnosci klasy i itemu dla roznych komend, standardowo uzycie zostalo przypisane pod in_use.
     
    Na poczatku otwieramy nasz silnik i szukamy zmiennej oldbuttons[65], ktora usuwamy. Nastepnie przechodzimy do public OnPluginStart() i gdzies pod:
    RegConsoleCmd("reset", ResetujPunkty);

     

    dodajemy:
    RegConsoleCmd("useclass", UzyjKlase);
    RegConsoleCmd("useitem", UzyjItem);

     

    Nastepnie szukamy i usuwamy caly public:
    public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapons)

     

    a w jego miejsce wklejamy:
    public Action:UzyjKlase(client, args)
    {
    if(!IsPlayerAlive(client) || freezetime)
    return;
    
    new Function:target = GetFunctionByName(pluginy_klas[klasa_gracza[client]], "cod_class_skill_used");
    if(target != INVALID_FUNCTION)
    {
    Call_StartFunction(pluginy_klas[klasa_gracza[client]], target);
    Call_PushCell(client);
    Call_PushCell(klasa_gracza[client]);
    Call_Finish();
    }
    }
    public Action:UzyjItem(client, args)
    {
    if(!IsPlayerAlive(client) || freezetime)
    return;
    
    new Function:target = GetFunctionByName(pluginy_itemow[item_gracza[client]], "cod_item_used");
    if(target != INVALID_FUNCTION)
    {
    Call_StartFunction(pluginy_itemow[item_gracza[client]], target);
    Call_PushCell(client);
    Call_PushCell(item_gracza[client]);
    Call_Finish();
    }
    }

     

    Od teraz mozemy uzywac umiejetnosci klasy i itemu za pomoca komend: useclass oraz useitem.
     
    Silnik wraz z paczką modyfikacji, można nabyć wyłącznie poprzez kontakt ze mną. Więcej o tym w sygnaturze.
  13. W tym prostym tutorialu pokaże w jaki sposób zrobić by nasze zdobyte doświadczenie wyświetlane było w procentach.

     

    Na początku musimy znaleść:
    public Action:PokazInformacje(Handle:timer, any:client)

     

    następnie usuwamy go i w jego miejsce wrzucamy (wersja z samymi procentami):
    public Action:PokazInformacje(Handle:timer, any:client)
    {
        if(!IsValidClient(client))
            return;
    
        if(IsPlayerAlive(client))
        {
            new Float:fprocent = (float(doswiadczenie_gracza[client]-SprawdzDoswiadczenie(poziom_gracza[client]-1))/float(SprawdzDoswiadczenie(poziom_gracza[client])-SprawdzDoswiadczenie(poziom_gracza[client]-1)))*100.0;
            new Float:fdoswiadczenie = (fprocent < 0.0 || fprocent > 100.0)? 0.0: fprocent;
            PrintHintText(client, "<font color='#008000'>[Klasa: <b>%s</b>]\n[Xp: <b>%0.1f%%</b> | Lv: <b>%i</b>]\n[Item: <b>%s</b> [<b>%i%%</b>]]</font>", nazwy_klas[klasa_gracza[client]], fdoswiadczenie, poziom_gracza[client], nazwy_itemow[item_gracza[client]], wytrzymalosc_itemu_gracza[client]);
        }
        else
        {
            new spect = GetEntProp(client, Prop_Send, "m_iObserverMode");
            if(spect == 4 || spect == 5)
            {
                new target = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
                if(target != -1 && IsValidClient(target))
                {
                    new Float:fprocent = (float(doswiadczenie_gracza[target]-SprawdzDoswiadczenie(poziom_gracza[target]-1))/float(SprawdzDoswiadczenie(poziom_gracza[target])-SprawdzDoswiadczenie(poziom_gracza[target]-1)))*100.0;
                    new Float:fdoswiadczenie = (fprocent < 0.0 || fprocent > 100.0)? 0.0: fprocent;
                    PrintHintText(client, "<font color='#FFFFFF'>[Klasa: <b>%s</b>]\n[Xp: <b>%0.1f%%</b> | Lv: <b>%i</b>]\n[Item: <b>%s</b> [<b>%i%%</b>]]</font>", nazwy_klas[klasa_gracza[target]], fdoswiadczenie, poziom_gracza[target], nazwy_itemow[item_gracza[target]], wytrzymalosc_itemu_gracza[target]);
                }
            }
        }
    
        hud_task[client] = CreateTimer(REFRESH_HUD, PokazInformacje, client, TIMER_FLAG_NO_MAPCHANGE);
    }

     

    lub (wersja z zdobytym doświadczeniem oraz procentami):
    public Action:PokazInformacje(Handle:timer, any:client)
    {
        if(!IsValidClient(client))
            return;
    
        if(IsPlayerAlive(client))
        {
            new Float:fprocent = (float(doswiadczenie_gracza[client]-SprawdzDoswiadczenie(poziom_gracza[client]-1))/float(SprawdzDoswiadczenie(poziom_gracza[client])-SprawdzDoswiadczenie(poziom_gracza[client]-1)))*100.0;
            new Float:fdoswiadczenie = (fprocent < 0.0 || fprocent > 100.0)? 0.0: fprocent;
            PrintHintText(client, "<font color='#008000'>[Klasa: <b>%s</b>]\n[Xp: <b>%i</b> [<b>%0.1f%%</b>] | Lv: <b>%i</b>]\n[Item: <b>%s</b> [<b>%i%%</b>]]</font>", nazwy_klas[klasa_gracza[client]], doswiadczenie_gracza[client], fdoswiadczenie, poziom_gracza[client], nazwy_itemow[item_gracza[client]], wytrzymalosc_itemu_gracza[client]);
        }
        else
        {
            new spect = GetEntProp(client, Prop_Send, "m_iObserverMode");
            if(spect == 4 || spect == 5)
            {
                new target = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
                if(target != -1 && IsValidClient(target))
                {
                    new Float:fprocent = (float(doswiadczenie_gracza[target]-SprawdzDoswiadczenie(poziom_gracza[target]-1))/float(SprawdzDoswiadczenie(poziom_gracza[target])-SprawdzDoswiadczenie(poziom_gracza[target]-1)))*100.0;
                    new Float:fdoswiadczenie = (fprocent < 0.0 || fprocent > 100.0)? 0.0: fprocent;
                    PrintHintText(client, "<font color='#FFFFFF'>[Klasa: <b>%s</b>]\n[Xp: <b>%i</b> [<b>%0.1f%%</b>] | Lv: <b>%i</b>]\n[Item: <b>%s</b> [<b>%i%%</b>]]</font>", nazwy_klas[klasa_gracza[target]], doswiadczenie_gracza[target], fdoswiadczenie, poziom_gracza[target], nazwy_itemow[item_gracza[target]], wytrzymalosc_itemu_gracza[target]);
                }
            }
        }
    
        hud_task[client] = CreateTimer(REFRESH_HUD, PokazInformacje, client, TIMER_FLAG_NO_MAPCHANGE);
    }

     

    Silnik wraz z paczką modyfikacji, można nabyć wyłącznie poprzez kontakt ze mną. Więcej o tym w sygnaturze.

     

  14. W tym poradniku opiszę w jaki sposób dodać frakcję do nowego coda i to na aż dwa sposoby!

     

    [Sposob 1]:

    W pliku codmod.inc znajdujemy linijkę:
    native cod_register_class(const String:nazwa[], const String:opis[], const String:bronie[], inteligencja, zdrowie, obrazenia, wytrzymalosc, kondycja);

     

    zamieniamy ją na:
    native cod_register_class(const String:nazwa[], const String:opis[], const String:bronie[], inteligencja, zdrowie, obrazenia, wytrzymalosc, kondycja, const String:frakcja[]);

     

    Następnie otwieramy plik .sp naszego silnika i dodajemy nową zmienną globalną:
    new String:frakcje_klas[MAX_ILOSC_KLAS+1][64];

     

    Teraz w kodzie szukamy public ZarejestrujKlase(Handle:plugin, numParams) i w środku zamieniamy:
    if(numParams != 8)

     

    na:
    if(numParams != 9)

     

    oraz za:
    kondycja_klas[ilosc_klas] = GetNativeCell(8);

     

    dodajemy:
    GetNativeString(9, frakcje_klas[ilosc_klas], sizeof(frakcje_klas[]));

     

    Jeszcze musimy przerobić wybór klas, więc szukamy public Action:WybierzKlaseMenu(client) i usuwamy calą jego zawartośc a w jego miejsce dodajemy:
    public Action:WybierzKlaseMenu(client)
    {
    new Handle:menu = CreateMenu(WybierzKlaseMenu_Handler);
    SetMenuTitle(menu, "Wybierz Frakcje:");
    for(new i = 1; i <= ilosc_klas; i ++)
    {
    if(!StrEqual(frakcje_klas[i], "") && !is_in_previous(frakcje_klas[i], i))
    AddMenuItem(menu, frakcje_klas[i], frakcje_klas[i]);
    }
    
    DisplayMenu(menu, client, 250);
    }
    public WybierzKlaseMenu_Handler(Handle:classhandle, MenuAction:action, client, position)
    {
    if(action == MenuAction_Select)
    {
    new String:item[64];
    GetMenuItem(classhandle, position, item, sizeof(item));
    position ++;
    
    new String:menu_item[128];
    new String:numer_klasy[10];
    new Handle:menu = CreateMenu(WybierzKlase_Handler);
    SetMenuTitle(menu, "Wybierz Klase:");
    for(new i = 1; i <= ilosc_klas; i ++)
    {
    if(StrEqual(item, frakcje_klas[i]))
    {
    IntToString(i, numer_klasy, sizeof(numer_klasy));
    Format(menu_item, sizeof(menu_item), "%s (Lv: %i)", nazwy_klas[i], poziom_klasy_gracza[client][i]);
    AddMenuItem(menu, numer_klasy, menu_item);
    }
    }
    
    DisplayMenu(menu, client, 250);
    }
    else if(action == MenuAction_End)
    CloseHandle(classhandle);
    }
    public bool:is_in_previous(const String:frakcja[], from)
    {
        for(new i = from - 1; i >= 1; i --)
        {
            if(StrEqual(frakcje_klas[i], frakcja))
                return true;
        }
    
        return false;
    }

     

    Następnie szukamy public WybierzKlase_Handler(Handle:classhandle, MenuAction:action, client, position) i w środku zamieniamy:
    position ++;

     

    na:
    position = StringToInt(item);

     

    To będzie na tyle. A jak z dodawaniem nowych frakcji dla klas? Przy rejestracji nowej klasy przypisujemy frakcje dla klasy.

     

    [Sposob 2]:

    Otwieramy plik .sp naszego silnika i dodajemy nową zmienną globalną:
    new String:frakcje_klas[MAX_ILOSC_KLAS+1][64];

     

    Następnie szukamy public OnMapStart() i do środka dodajemy:
    new String:file[256];
    BuildPath(Path_SM, file, sizeof(file), "configs/frakcje.txt");
    new Handle:kv = CreateKeyValues("Frakcje");
    FileToKeyValues(kv, file);
    for(new i = 1; i <= ilosc_klas; i ++)
    {
    KvGetString(kv, nazwy_klas[i], frakcje_klas[i], sizeof(frakcje_klas[]));
    TrimString(frakcje_klas[i]);
    }
    
    CloseHandle(kv);

     

    Teraz w kodzie szukamy public ZarejestrujKlase(Handle:plugin, numParams) i za:
    kondycja_klas[ilosc_klas] = GetNativeCell(8);

     

    dodajemy:
    frakcje_klas[ilosc_klas] = "";

     

    Jeszcze musimy przerobić wybór klas, więc szukamy public Action:WybierzKlaseMenu(client) i usuwamy calą jego zawartośc a w jego miejsce dodajemy:
    public Action:WybierzKlaseMenu(client)
    {
        new Handle:menu = CreateMenu(WybierzKlaseMenu_Handler);
        SetMenuTitle(menu, "Wybierz Frakcje:");
        for(new i = 1; i <= ilosc_klas; i ++)
        {
            if(!StrEqual(frakcje_klas[i], "") && !is_in_previous(frakcje_klas[i], i))
                AddMenuItem(menu, frakcje_klas[i], frakcje_klas[i]);
        }
    
        DisplayMenu(menu, client, 250);
    }
    public WybierzKlaseMenu_Handler(Handle:classhandle, MenuAction:action, client, position)
    {
        if(action == MenuAction_Select)
        {
            new String:item[64];
            GetMenuItem(classhandle, position, item, sizeof(item));
            position ++;
    
            new String:menu_item[128];
            new String:numer_klasy[10];
            new Handle:menu = CreateMenu(WybierzKlase_Handler);
            SetMenuTitle(menu, "Wybierz Klase:");
            for(new i = 1; i <= ilosc_klas; i ++)
            {
                if(StrEqual(item, frakcje_klas[i]))
                {
                    IntToString(i, numer_klasy, sizeof(numer_klasy));
                    Format(menu_item, sizeof(menu_item), "%s (Lv: %i)", nazwy_klas[i], poziom_klasy_gracza[client][i]);
                    AddMenuItem(menu, numer_klasy, menu_item);
                }
            }
    
            DisplayMenu(menu, client, 250);
        }
        else if(action == MenuAction_End)
            CloseHandle(classhandle);
    }
    public bool:is_in_previous(const String:frakcja[], from)
    {
        for(new i = from - 1; i >= 1; i --)
        {
            if(StrEqual(frakcje_klas[i], frakcja))
                return true;
        }
    
        return false;
    }

     

    Następnie szukamy public WybierzKlase_Handler(Handle:classhandle, MenuAction:action, client, position) i w środku zamieniamy:
    position ++;

     

    na:
    position = StringToInt(item);

     

    To będzie na tyle. A jak z dodawaniem nowych frakcji dla klas? Tworzymy w configs/ plik o nazwie frakcje.txt i dodajemy nowe klasy oraz frakcje według poniższego przykładu.
    "Frakcje"
    {
    "Snajper" "Polacy"
    "Komandos" "Polacy"
    "Obronca" "Rosjanie"
    "Medyk" "Niemcy"
    }

     

    Pierw musimy wpisać nazwę klasy a następnie jej frakcje.
     
    Silnik wraz z paczką modyfikacji, można nabyć wyłącznie poprzez kontakt ze mną. Więcej o tym w sygnaturze.
  15. Pewnie kazdy wie co tutek prezentuje, edytowanie itemu na klasy oczywiscie.
    No to tak, najpierw musimy zamienic to (znajduje sie w OnPluginStart())
    cod_register_item(nazwa, opis, 0, 0);

     

    na:
    cod_register_class(nazwa, opis, bronie, inteligencja, zdrowie, obrazenia, wytrzymalosc, kondycja);

     

    Nad OnPluginStart() szukamy to:
    new const String:nazwa[] = "Nazwa";
    new const String:opis[] = "Opis";

     

    i zamieniamy na:
    new const String:nazwa[] = "Nazwa";
    new const String:opis[] = "Opis";
    new const String:bronie[] = "#weapon_mp7#weapon_glock";
    new const inteligencja = 0;
    new const zdrowie = 0;
    new const obrazenia = 0;
    new const wytrzymalosc = 10;
    new const kondycja = 0;

     

    Ok, to co tera pokaze nie trzeba robic, lecz uporządkuje nasze *.sp. To:
    ma_item

     

    na:
    ma_klase

     

    Teraz czas na robote, która jest już wymagana:
    public cod_item_enabled(client)

     

    zamieniamy na:
    public cod_class_enabled(client)

     

    oraz:
    public cod_item_disabled(client)

     

    trzeba zamienic na:
    public cod_class_disabled(client)

     

    a także:
    public cod_item_used(client)

     

    zamieniamy na:
    public cod_class_skill_used(client)

     

    Silnik wraz z paczką modyfikacji, można nabyć wyłącznie poprzez kontakt ze mną. Więcej o tym w sygnaturze.
  16. W tym tutorialu opisze w jak prosty sposób możemy ustawić bonusowe bronie w wybranym przez nas itemie. Na poczatku musimy posiadać gotowy item, następnie pod zmienną String:opis dodajemy:
    new const String:bronie[] = "#bronie";
     
    a następnie uzupełniamy. Wpisujemy nazwy broni, które muszą być poprzedzone #, by były prawidłowo zczytywane przez silnik. Teraz do public cod_item_enabled(client) dodajemy ustawianie nowych bonusowych broni:
    new String:weapons[256];
    cod_get_user_bonus_weapons(client, weapons, sizeof(weapons));
    
    new String:weapons2[256];
    Format(weapons2, sizeof(weapons2), "%s%s", weapons, bronie);
    
    cod_set_user_bonus_weapons(client, weapons2);
     
    oraz do public cod_item_disabled(client) resetowanie broni:
    new String:weapons[256];
    cod_get_user_bonus_weapons(client, weapons, sizeof(weapons));
    ReplaceString(weapons, sizeof(weapons), bronie, "");
    
    cod_set_user_bonus_weapons(client, weapons);

     

    I to by było na tyle, pożniej to kompilujemy i wrzucamy. Niżej gotowy kod itemu, który daje ak47 oraz he:
    #include <sourcemod>
    #include <sdkhooks>
    #include <sdktools>
    #include <cstrike>
    #include <codmod>
    
    new const String:nazwa[] = "Zestaw alkaida";
    new const String:opis[] = "Dostajesz ak47 oraz he";
    new const String:bronie[] = "#weapon_ak47#weapon_hegrenade";
    
    public OnPluginStart()
    {
    CreateConVar(nazwa, "1.0", "Linux`");
    cod_register_item(nazwa, opis, 0, 0);
    }
    public cod_item_enabled(client)
    {
    new String:weapons[256];
    cod_get_user_bonus_weapons(client, weapons, sizeof(weapons));
    
    new String:weapons2[256];
    Format(weapons2, sizeof(weapons2), "%s%s", weapons, bronie);
    
    cod_set_user_bonus_weapons(client, weapons2);
    }
    public cod_item_disabled(client)
    {
    new String:weapons[256];
    cod_get_user_bonus_weapons(client, weapons, sizeof(weapons));
    ReplaceString(weapons, sizeof(weapons), bronie, "");
    
    cod_set_user_bonus_weapons(client, weapons);
    }

     

    Silnik wraz z paczką modyfikacji, można nabyć wyłącznie poprzez kontakt ze mną. Więcej o tym w sygnaturze.

     
  17. Moze inaczej, faktycznie male sprostowanie sie nalezy . To nie tak, ze usluga jest zla lecz wydaje mi sie, a przynajmniej ja odczuwam takie wrazenie ze znacznie bardziej oplacalne bedzie wykupienie vpsa i tam ustawianie sie na nim. Do konca nie doczytalem jeszcze o tej ofercie stad tez wynika moja nie wiedza o tym co przedstawiciel napisal nizej.

×
×
  • Dodaj nową pozycję...