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. Z tego co pamiętam, podobnie się dzieje po wspinaniu na drabinki. Musisz sprawdzać grawitacje przy podskoku gracza, jeżeli jest inna to ustawiać na nowo. Czyli

     

    HookEvent("player_jump", SkokiGracza);

     

    public Action:SkokiGracza(Handle:event, String:name[], bool:dontbroadcast)
    {
        new client = GetClientOfUserId(GetEventInt(event, "userid"));
        if(!IsValidClient(client))
            return;

        if(GetEntityGravity(client) != 0.5)
            SetEntityGravity(client, 0.5);
    }

    • Super! 1
  2. new account = GetEntProp(attacker, Prop_Send, "m_iAccount");

     

    zamien na

    new account = GetEntData(attacker, FindSendPropOffs("CCSPlayer", "m_iAccount"));

     

    oraz

    SetEntProp(attacker, Prop_Send, "m_iAccount", account);

    SetEntProp(attacker, Prop_Send, "m_iAccount", max);

     

    na

    SetEntData(attacker, FindSendPropOffs("CCSPlayer", "m_iAccount"), account);

    SetEntData(attacker,  FindSendPropOffs("CCSPlayer", "m_iAccount"), max);

     

     

    • Super! 1
  3. 6 godzin temu, Ilovenoobs napisał:

    I znaleźliście już jakieś rozwiązanie? Bo u mnie problem występuje nadal >.<

    Jest sens próbować reinstalla?

     

    Jaka dystrybucja linuxa? To samo pytanie dla autora.

     

    Jeszcze można spróbować usunąć całkowicie steamcmd, wszystkie z nim powiązane foldery itp i na nowo go wrzucić i spróbować sprawdzić spójność plików.

  4. Mam kilka porad które bym wykonał.

     

    1. Sprawdz scieżkę do serwerów, jeżeli foldery posiadają jakąś niestandardową nazwe (_, ę, ą itp) to ją usun dla testu.

    2. Spróbuj przenieść jeden serwer do innej scieżki a następnie spróbuj zaaktualizować i włączyć.

    3. Dla testu zmień port serwera i spróbuj uruchomic.

     

    Jeszcze możesz podesłać swoją linie startową serwerów.

  5. W tym prostym poradniku opisze w jaki sposób dodamy możliwość podnoszenia wszystkich broni dla wybranej przez nasz klasy bądź itemu. Na początku musimy mieć stworzoną naszą klasę lub item, następnie otwieramy nasz silnik modyfikacji i szukamy:

    	public Action:WeaponCanUse(client, weapon)
    	{
    	    if(!GetConVarInt(cvar_blokada_broni))
    	        return Plugin_Continue;
    	    if(!IsValidClient(client) || !IsPlayerAlive(client))
    	        return Plugin_Continue;
    	

     

    teraz pod tym musimy dodać omijanie funkcji dla wybranego warunku, więc dla klasy dodajemy:

    	if(StrEqual(nazwy_klas[klasa_gracza[client]], "Nazwa Klasy"))
    	    return Plugin_Continue;
    	

     

    bądź itemu:

    	if(StrEqual(nazwy_itemow[item_gracza[client]], "Nazwa Itemu"))
    	    return Plugin_Continue;
    	

     

    • Super! 1
  6. W tym prostym poradniku opisze w jaki sposób dodamy item znany z amxx, nanosuit.

     

    Tak więc na początku tworzymy prosty item, bez żadnych umiejętności, czyli:

    #include <sourcemod>
    #include <sdkhooks>
    #include <sdktools>
    #include <cstrike>
    #include <codmod>
    
    new const String:nazwa[] = "Nanosuit";
    new const String:opis[] = "Posiadasz odpornosc na umiejetnosci wszystkich klas oraz itemow";
    
    public OnPluginStart()
    {
        CreateConVar(nazwa, "1.0", "Linux`");
        cod_register_item(nazwa, opis, 0, 0);
    }
    

    Następnie musimy otworzyć wszystkie nasze klasy bądż itemy (w zależności od tego na co chcemy mieć odporność) i dodać odpowiedni warunek, nad wykonaniem wybranej funkcji:

    if(cod_get_user_item(ofiara) == cod_get_itemid("Nanosuit"))
    

    oczywiście zamiast indexu (ofiara) wpisujemy id naszej ofiary a następnie blokujemy funkcje (return, continue, return Plugin_Continue), wszystko w zależności od tego gdzie dodajemy warunek. Niżej przykładowa klasa Komandos z odpornością na item:

    #include <sourcemod>
    #include <sdkhooks>
    #include <sdktools>
    #include <cstrike>
    #include <codmod>
    
    new const String:nazwa[] = "Komandos";
    new const String:opis[] = "Posiada natychmiastowe zabicie z noza (+ppm)";
    new const String:bronie[] = "#weapon_deagle";
    new const inteligencja = 0;
    new const zdrowie = 40;
    new const obrazenia = 0;
    new const wytrzymalosc = 0;
    new const kondycja = 60;
    
    new bool:ma_klase[65];
    public OnPluginStart()
    {
        CreateConVar(nazwa, "1.0", "Linux`");
        cod_register_class(nazwa, opis, bronie, inteligencja, zdrowie, obrazenia, wytrzymalosc, kondycja);
    }
    public OnClientPutInServer(client)
    {
        SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
    }
    public OnClientDisconnect(client)
    {
        SDKUnhook(client, SDKHook_OnTakeDamage, OnTakeDamage);
    }
    public cod_class_enabled(client)
    {
        ma_klase[client] = true;
    }
    public cod_class_disabled(client)
    {
        ma_klase[client] = false;
    }
    public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
    {
        if(!IsValidClient(victim) || !IsValidClient(attacker))
            return Plugin_Continue;
    
        if(!ma_klase[attacker] || GetClientTeam(victim) == GetClientTeam(attacker))
            return Plugin_Continue;
    
        if(cod_get_user_item(victim) == cod_get_itemid("Nanosuit"))
            return Plugin_Continue;
    
        new String:weapon[32];
        GetClientWeapon(attacker, weapon, sizeof(weapon));
        if(StrEqual(weapon, "weapon_knife") && damagetype & DMG_SLASH && GetClientButtons(attacker) & IN_ATTACK2)
        {
            new obrazenia_gracza = GetClientHealth(victim)+1;
            cod_inflict_damage(victim, attacker, 0, obrazenia_gracza);
        }
    
        return Plugin_Changed;
    }
    

    Oczywiście tym sposobem, możemy również dodać odporność na rakiety, miny itp. A w wypadku odporności na klasę funkcja będzie wyglądać tak:

    if(cod_get_user_class(ofiara) == cod_get_classid("Nazwa Klasy"))
    

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

  7. W tym bardzo prostym poradniku postaram się opisać jak w prosty sposób możemy rejestrować klasy bądź itemy w wybranej przez nas kolejności. Potrzebne jest to nam wtedy gdybyśmy chcieli by np klasy wyświetlały się w menu wedle naszego widzi misie.

    No więc na początek musimy otworzyć naszą klasę lub item a następnie szukamy:

    public OnPluginStart()

    i zamieniamy, dla klasy:

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

    bądź itemu:

    cod_register_item(nazwa, opis, 0, 0);

    na:

    CreateTimer(0.1, RegisterStart, 0);

    i niżej dodajemy, dla klasy:

    public Action:RegisterStart(Handle:timer)
    {
        cod_register_class(nazwa, opis, bronie, inteligencja, zdrowie, obrazenia, wytrzymalosc, kondycja);
    }

    bądź itemu:

    public Action:RegisterStart(Handle:timer)
    {
        cod_register_item(nazwa, opis, 0, 0);
    }

    i to na tyle. Od teraz nasza klasa lub item będzie rejestrowany wedle naszej kolejności ustalanej czasowo. Następny czas tasku itemu lub klasy, w zależności od tego co rejestrowaliśmy ustalamy o 0.1 większy. By ten sposób działał poprawnie musimy tym sposobem zarejestrować wszystkie itemy bądź klasy.

     

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

  8. W tym prostym poradniku opisze w jaki sposób tworzyć nowe klasy oraz itemy do nowego coda.

    1. Tworzenie Klas


    Pierw musimy zarejestrować nową klasę więc do:
    public OnPluginStart()

    dodajemy:

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

    a następnie wypełniamy prawidłowo, więc gdzieś na górze wrzucamy:

    new const String:nazwa[] = "Nazwa";
    new const String:opis[] = Opis";
    new const String:bronie[] = "#Bron";
    new const inteligencja = 0;
    new const zdrowie = 0;
    new const obrazenia = 0;
    new const wytrzymalosc = 0;
    new const kondycja = 0;

    I to by było na tyle, jeżeli chodzi o prostą klasę. Ale gdybyśmy chcieli by po wybraniu przez nas klasy wykonywała się jakaś wybrana przez nas funkcja to służą do tego forwardy znajdujące się w silniku. Niżej przykładowy kod klasy wraz z opisem:

    #include <sourcemod>
    #include <sdkhooks>
    #include <sdktools>
    #include <cstrike>
    #include <codmod>
    
    new const String:nazwa[] = "Strzelec Wyborowy";                // nazwa klasy
    new const String:opis[] = "Moze podnosic na zmiane m4a1 oraz ak47";        // opis klasy
    new const String:bronie[] = "#weapon_m4a1#weapon_ak47#weapon_glock";        // bronie na liście muszą być poprzedzone # by były zczytywane poprawnie
    new const inteligencja = 0;                            // punkty inteligencji na start
    new const zdrowie = 10;                            // punkty zdrowia na start (100+punkty klasy-gracza-bonusowe)
    new const obrazenia = 0;                            // punkty obrazen na start
    new const wytrzymalosc = 20;                  // punkty wytrzymalosci na start
    new const kondycja = -38;                        // punkty kondycji na start
    
    public OnPluginStart()
    {
        CreateConVar(nazwa, "1.0", "Linux`");
        cod_register_class(nazwa, opis, bronie, inteligencja, zdrowie, obrazenia, wytrzymalosc, kondycja);
    }
    public cod_class_enabled(client)
    {
            // wywolywany forward przy zmianie klasy na wybrana
    }
    public cod_class_disabled(client)
    {
            // wywolywany forward przy zmianie klasy na inna
    }
    public cod_class_skill_used(client)
    {
            // wywolywany forward przy uzyciu umiejetnosci klasy (in_use)
    }



    2. Tworzenie Itemów


    Pierw musimy zarejestrować nowy item więc do:
    public OnPluginStart()

    dodajemy:

    cod_register_item(nazwa, opis, 0, 0); // te dwa zera po opisie itemu oznaczaja jego min i max wartosc, liczby te mozemy wykorzystac jezeli chcemy np zrobic 1/x na wywolanie okreslonej funkcji

    a następnie wypełniamy prawidłowo, więc gdzieś na górze wrzucamy:

    new const String:nazwa[] = "Samouczek";      // nazwa itemu
    new const String:opis[] = "Instrukcja obslugi"; // opis itemu

    I to by było na tyle, jeżeli chodzi o prosty item. Ale gdybyśmy chcieli by po zdobyciu przez nas itemu wykonywała się jakaś wybrana przez nas funkcja to służą do tego forwardy znajdujące się w silniku. Niżej przykładowy kod itemu wraz z opisem:

    #include <sourcemod>
    #include <sdkhooks>
    #include <sdktools>
    #include <cstrike>
    #include <codmod>
    
    new const String:nazwa[] = "Nazwa";
    new const String:opis[] = "Opis";
    
    public OnPluginStart()
    {
        CreateConVar(nazwa, "1.0", "Linux`");
        cod_register_item(nazwa, opis, 0, 0);
    }
    public cod_item_enabled(client)
    {
        // wywolywany forward przy zdobyciu itemu
    }
    public cod_item_disabled(client)
    {
        // wywolywany forward przy wyrzuceniu itemu
    }
    public cod_item_used(client)
    {
        // wywolany forward przy uzyciu umiejetnosci itemu (in_use)
    }



    Powyższy kod wystarczy skopiować do notatnika a następnie przekompilować i wrzucić do plugins by cieszyć się nową klasą lub itemem.


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

  9. Posiadam na sprzedaż paczkę nowego coda do csgo.

     

    W paczce znajduję się, razem 60 pluginów:

    	- Codmod silnik modyfikacji
    	- Codmod include modyfikacji
    	- Codmod admin cmd
    	- Codmod cod menu
    	- Codmod cod sklep
    	- Codmod wymiana itemów
    	- Codmod oddawanie itemów
    	- Codmod klasy, 12 sztuk
    	- Codmod itemy, 42 sztuki
    

     

     

    Sposób instalacji paczki oraz lista silnikowych cvarów:

    	- Wrzucić paczkę do folderu csgo/ a nastepnie dodać do sourcemod/configs/databases.cfg:
    	"codmod_lvl_sql"
    	{
    	    "driver"        "mysql"
    	    "host"        "hosting"
    	    "database"    "database"
    	    "user"        "user"
    	    "pass"        "pass"
    	}
    	- Cod_max_level 200        // maksymalny limit poziomu: 0 - wyl
    	- Cod_level_ratio 35        // predkosc zdobywania doswiadczenia: im mniej tym szybciej
    	- Cod_max_intelligence 30        // limit inteligencji w statystykach
    	- Cod_max_health 50        // limit zdrowia w statystykach
    	- Cod_max_damage 40        // limit obrazen w statystykach
    	- Cod_max_stamina 60        // limit wytrzymalosci w statystykach
    	- Cod_max_trim 80            // limit kondycji w statystykach
    	- Cod_points_level 2        // co ile poziomow punkt dla statystyk gracza
    	- Cod_xp_killhs 15            // doswiadczenie za zabojstwo w hs: 0 - wyl
    	- Cod_xp_kill 10            // doswiadczenie za zabojstwo: 0 - wyl
    	- Cod_xp_damage 1        // ilosc xp za 20 obrazen: 0 - wyl
    	- Cod_xp_winround 25        // doswiadczenie za wygrana runde: 0 - wyl
    	- Cod_xp_objectives 50        // doswiadczenie za wykonane cele mapy: 0 - wyl
    	- Cod_weapons_blocking 1        // czy blokowac podnoszenie broni: 0 - nie, 1 - tak
    	- Cod_time_save 30        // czas, co ktory bedzie nadpisywac dane: 0 - wyl
    	- Cod_type_save 1            // na co zapisywac dane: 0 - nick, 1 - steamid
    	- Cod_item_stamina 20        // co ile odejmowac wytrzymalosc itemu podczas smierci: 0 - wyl
    	- Cod_item_max_stamina 100    // maksymalna wytrzymalosc itemu: 0 - wyl
    

     

    Coś o silniku:
    Silnik jest wierną kopią nowego coda z amxx. W środku znajduję się 18 cvarów dzięki którym możemy zmieniać ustawienia modyfikacji w dowolny przez nas sposób bez konieczności ponownej kompilacji pluginu. Klasy, itemy oraz inne dodatki zostały rozbite na osobne pluginy, użyte do tego zostały natywy. Dzięki takiemu rozwiązaniu, osoby nawet z małym doświadczeniem z zakresu sourcemod poradzą sobie z dalszym rozwojem modyfikacji. Cały kod nowego coda został praktycznie napisany od nowa a ponadto w znacznym stopniu zoptymalizowany w porównaniu do starej wersji silnika.

     

    Coś o klasach, itemach i innych dodatkach:
    Klasy, itemy i inne dodatki zostały w dużo większym stopniu rozwinięte niż wyglądało to w starym codzie. W paczce znajdziemy takie moce jak: apteczki, rakiety, miny, zdalnie odpalane ładunki, beczki z chemikaliami, oślepianie wroga, wymianę i oddawanie itemów oraz wiele wiele więcej.

     

    Gdyby zaszła potrzeba wydania aktualizacji na skutek jakiś błędów, osoby które zakupią paczkę otrzymają za darmo poprawioną wersję. Wkrótce również rozpoczynam wydawanie nowej serii poradników dzięki którym będzie można rozwijać modyfikacje w dowolnie wybrany przez siebie sposób.

     

    Cena paczki: 130zł
    Sposób płatności: przelew
    Kontakt: http://steamcommunity.com/id/linux2006

     

  10. 1 godzinę temu, }{amp napisał:

    Silnik sourcemod nie ingeruje w pliki gry gracza, więc jest to niemożliwe.

     

    Bindowanie, to nie ingeracja w pliki gracza. Poza tym blokada bindów, nie występuje po stronie serwera lecz gier steam. Gry posiadają zablokowane poszczególne komendy w konsoli, które są wywoływane po stronie serwera.

     

     

    1 godzinę temu, Marcus napisał:

    Tak by nie przeszło?:

    
    /* Plugin Template generated by Pawn Studio */
    
    #include <sourcemod>
    
    public Plugin:myinfo = 
    {
    	name = "New Plugin",
    	author = "Marcus",
    	description = "<- Description ->",
    	version = "1.0",
    	url = "<- URL ->"
    }
    
    public OnClientPutInServer(Client)
    {
    	ClientCommand(Client, "bind F6 say testt")
    }

    P.S Nie da się czy nie jest to zalecane (ingerencja w pliki gracza)? Nie sprawdzałem kodu tego pluginu, ale według tego co pisze autor tematu wychodzi, że wymusza bind na dany klawisz:

     

     

    Tak, to będzie działać jednak wyłącznie na graczach z scrackowaną wersją gry (non steam).

     

    Niestety, nie można wywołać bindowania na graczach steam, bez zmodyfikowania ich plików gry. Jednak są sposoby na obejście tego, możesz przypisać użycie funkcji na poszczególny klawisz bądź komendę. Lub w ostateczności jeżeli musisz wymuszać określone ustawienia po stronie gracza to możesz zrobić to w ten sposób, że ustawiasz graczom do pobrania specjalnie spreparowany config serwerowy i blokujesz im wejście do drużyny, do czasu przeładowania go.

×
×
  • Dodaj nową pozycję...