Jump to content
  • Chmurka
  • Boróweczka
  • Jabłuszko
  • Limonka
  • Czekoladka
  • Węgielek

Search the Community

Showing results for tags 'plugin'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Nasze Sprawy
    • Nowości
    • Dyskusje
    • Propozycje
    • Przywitaj się!
  • Sourcemod Scripting
    • Artykuły, poradniki, tutoriale
    • Pytania na temat kodowania
    • Problem z kodem pluginu
    • Prośby o przerobienie pluginu
    • Gotowe funkcje
    • Koduj z Magnetem
  • Konfiguracja pluginów
    • Artykuły, poradniki i tutoriale
    • Szukam pluginu
    • Duże modyfikacje
    • Zbiór pluginów
    • Extensions
    • Gotowe paczki serwerowe
  • Konfiguracja serwera
    • Artykuły, poradniki, tutoriale
    • Pytania
    • Problemy
    • Ochrona
    • Metamod
  • Counter-Strike: Global Offensive
    • Nowości
    • Artykuły, poradniki, tutoriale
    • Pytania
    • Problemy
    • Pliki
    • Wasza twórczość
    • Publikacje serwerów
  • Hostingi serwerów
    • Oferty firm
    • Opinie o hostingach
    • Pytania
  • Plac zabaw
    • Luźne rozmowy
    • Szukam ekipy
    • Rynek
    • Opinie o ludziach
    • RoundSoundy
  • Archiwum
    • Przestarzałe tematy
    • Kosz

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


O mnie

Found 48 results

  1. Opis Plugin tworzy dodatkową rundę nożową po rozgrzewce(warmup) i przed rundami. Drużyna, która wygra tę rundę może wybrać po której stronie chce zaczynać mecz. Wybór odbywa się poprzez menu do głosowania. Cvary Changelog Download KnifeRound.7z knife_round.sp Inne Plugin jest przeze mnie wspierany, gdyby pojawiły się jakieś bugi lub sugestie chętnie pomogę/wysłucham jeśli napiszecie poniżej ? Support Aktualnie support tego pluginu jest prowadzony przez @Vasto_Lorde
  2. Usuwanie niepotrzebnego, zbędnego kodu z naszego projektu jest istotnym elementem dobrej opieki nad nim. Ale są ludzie, którzy powiedzą "Hej! Panie! Ja tu się namęczyłem z pisaniem tego kodu i NIE MA OPCJI żebym go teraz kasował nawet jeśli już go nie używam". Ten artykuł ma wszystkich upartych przekonać, dlaczego martwy kod trzeba zakopywać głęboko klawiszem backspace. Nad projektem może pracować więcej niż jedna osoba. A jeśli produkujesz oprogramowanie open-source, to kod będzie przeglądać o wiele więcej ludzi niż Twój zespół programistyczny. Jak dobrze wiemy kod jest przede wszystkim komunikacją między programistami, a to, że działa i spełnia swoje zadania jest sprawą drugorzędną. Obca osoba czytając martwy kod musi poświęcić dwa razy więcej czasu niż w przypadku kodu który jest w użytku ponieważ a) Musi zrozumieć jak działa b) Musi zrozumieć dlaczego ten kod nie jest używany i czy na pewno nie jest nigdzie używany i może go usunąć; Za każdym razem przeglądając kod po raz dziesiąty czy setny, ktoś spędzi dłuuugie sekundy myśląc sobie "ah, to tu jest martwy kod, moje oczy muszą go ominąć". Taki kod to po prostu hałas dla oczu. Niepotrzebny żwir na naszym asfalcie. Dlaczego na naszym płaskim, idealnym asfalcie jest wysypany żwir? To na pewno nie jest sposób w jaki chcemy produkować a tym bardziej przeglądać kod; Martwy kod jest martwy. Nie jest rozwijany. Został pozostawiony sam sobie kilka, kilkadziesiąt, kilkaset iteracji temu. Programista może użyć go bez wiedzy, że jest martwy. "Jest tam, więc czemu miałby być źle napisany?" Otóż nierozwijany kod zostawiony sam sobie może już nie spełniać obecnych standardów projektu, lub nawet jego autor mógł go nie dokończyć. Wtedy przy jego użyciu mogą wystąpić konsekwencje - bugi Jeśli używasz jakiegokolwiek systemu kontroli wersji kodu i to na Ciebie spada odpowiedzialność za utrzymanie i konserwację kodu (zachowując jednocześnie martwy kod w projekcie), to masz więcej linii kodu do przejrzenia, więcej odpowiedzialności na Twoich barkach oraz większe pole do popisu dla błędów w zarządzaniu kodem Konsekwencją chomikowania martwego kodu jest to, że ten kod się kumuluje. Normalnie, zachowuje się tylko najpotrzebniejsze rzeczy, tylko rzeczy używane, tylko rzeczy które spełniają jakąś rolę w naszym programie. Dlatego opiekujemy się nim, optymalizujemy go, refaktorujemy. W przeciwieństwie do martwego kodu. Ten, kumuluje się i zbiera, rosnąc diametralnie, a swoim rozmiarem zniechęca maksymalnie kogokolwiek, żeby zrobił co trzeba - przejrzał jeszcze raz kod, zrozumiał go i wyrzucił do kosza Nie martw się, że kod który napisałeś zostanie skasowany, bo nie jest już potrzebny. W dzisiejszych czasach praktycznie zawsze używa się systemu kontroli wersji (np. GIT). Twój kod, który kiedyś w swojej świetności działał idealnie, jest zakopany gdzieś w commitach. Nie ma powodu żeby za nim płakać. Z czasem, szansa na ponowne użycie nieużywanego kodu maleje. Nie musisz go trzymać w każdej iteracji. Odpuść, zrób przysługę sobie w przyszłości i skasuj go. Jeśli był naprawdę ważny i kiedyś zdarzy się sytuacja, gdzie będziesz potrzebował tego kodu, odkopiesz go z czeluści GITa. Tutaj widzę dobrą okazję na przedstawienie jednej z reguły tworzenia oprogramowania w trybie extreme programming: YAGNI (ang. You aren't gonna need it). Mówi nam ona o tym, że mamy pisać tylko i wyłącznie funkcjonalności których potrzebujemy teraz. Nie mamy przewidywać jakich funkcjonalności będziemy potrzebować. Skupiamy się na chwili obecnej. Można to też interpretować w drugą stronę - jeśli czegoś już nie potrzebujesz to skasuj to natychmiast Bibliografia https://stackoverflow.com/questions/15699995/why-unused-code-should-be-deleted https://en.wikipedia.org/wiki/You_aren't_gonna_need_it https://www.infoq.com/news/2017/02/dead-code/
  3. Opis Plugin dodaje kontakt na serwer Konfiguracja Kontakt możemy edytować w addons/sourcemod/configs/kontakt.txt Komendy sm_kontakt Instalacja Standardowa Download addons.7z kontakt.sp
  4. Siemka szukam pluginu albo coś na zmiane kwoty broni, na necie nie mogę jakoś znaleźć
  5. Witam szukam pluginiu aby CT szlyszalo TT i na odwrót. Do server.cfg dodalem sv_alltalk 1 i nie dziala ;/ w konsoli wyskakuje ze komenda jest dodana
  6. O Pluginie: Plugin umożliwia ustawienie własnej piosenki MVP. Komendy: !mvp - Główne menu. !testmvp - Puszczenie losowej muzyki z folderu z piosenkami. Instalacja: Plik .smx wrzucamy do: addons/sourcemod/plugins/ Plik .cfg wrzucamy do: addons/sourcemod/scripting/ Folder mvp_yamakashi wrzucamy do : csgo/sound/ Kod: Download: MVP Music.rar
  7. cześć szukam jakiegoś pluginu na usuwanie granatów po ich upuszczeniu na samym starcie ponieważ często mi się dublują i te które się nie mieszczą wypadają z eq ale nie dam też pluginu który usuwa bronie na start ponieważ korzystam z map które mają bronie "ułożone" na mapie i je też usunie
  8. O Pluginie: Plugin zabiera na koniec rundy nóż gracza aby uniknąć sytuacji opisanej w tym temacie: Kod: Instalacja: Plik .smx wrzucamy do: addons/sourcemod/plugins/ Plik .sp wrzucamy do: addons/sourcemod/scripting/ Download: KnifeFix.smx KnifeFix.sp Include potrzebny do kompilacji pliku: smlib.inc
  9. Witam tak jak w naziwe potrzebuje pluginu na opis vipa w hudzie !
  10. ktoś coś? chodzi tylko o sklep ct, wczoraj działał, ale działał w taki sposób, że kupywało się rzeczy "TT" zombie mimo, że pokazywało rzeczy CT Golden ak itp
  11. Przed tłumaczeniem sprawdź czy plugin nie ma pliku *.phrases.txt odpowiadającego za tłumaczenie tekstów. Poradnik na temat tłumaczenia w pliku phrases.txt znajdziesz tutaj. W przypadku, gdy plugin nie posiada tego pliku, a wyświetla graczowi jakieś informacje, będzie go trzeba przetłumaczyć. Można to zrobić na dwa sposoby. Pierwszy, którego tutaj nie omówię, to przerobienie pluginu tak, by korzystał z pliku phrases.txt. Drugi, to na sztywno zmienienie fraz wyświetlanych w innym języku na frazy w naszym języku. 1. Plugin Informacje o Serwerze. Linia 24: CPrintToChat(client, "{darkred}Server name :{default} %s", sBuffer) Linia 37: CPrintToChat(client, "{darkred}Server IP: {default}%d.%d.%d.%d:%d", pieces[0], pieces[1], pieces[2], pieces[3], port) Linia 72: CPrintToChat(client, "{DarkRed}Timeleft:{default} %s", sBuffer) Interesują nas zaznaczone na kolorowo frazy zamieszczone w cytacie. Wynik końcowy będzie następujący: Linia 24: CPrintToChat(client, "{darkred}Nazwa serwera :{default} %s", sBuffer) Linia 37: CPrintToChat(client, "{darkred}IP serwera: {default}%d.%d.%d.%d:%d", pieces[0], pieces[1], pieces[2], pieces[3], port) Linia 72: CPrintToChat(client, "{DarkRed}Czas do końca mapy:{default} %s", sBuffer) Jak można zauważyć, zmieniły się tylko angielskie wyrazy. Specjalne znaki takie jak {darkred} czy %d zostawiamy w spokoju, są to informacje potrzebne pluginowi w jaki sposób ma wyświetlić wiadomość. Po zmianach plik zapisujemy kompilujemy i wrzucamy na serwer 2. Plugin Block sm plugins Linia 34: SetFailState("Failed to find offset for ClientPrintf"); Linia 133: PrintToConsole(client, "\t\tNo chance\n"); Linia 75: BuildPath(Path_SM, g_sLogs, sizeof(g_sLogs), "logs/sbp-%s.log", sDate); Linia 95: else if(StrContains(sBuffer, "To see more, type \"sm plugins") != -1) Robimy właściwie to samo, uważając na znaki specjalne \t. Natomiast w liniach 75 oraz 95 NIC nie tłumaczymy! Musimy uważać tłumacząc w ten sposób pluginy, gdyż niekiedy angielski tekst w cytatach nie wyświetla się użytkownikom a jego zmiana może spowodować zepsucie pluginu! Wynik końcowy: Linia 34: SetFailState("Nie znaleziono offsetu dla ClientPrintf"); Linia 133: PrintToConsole(client, "\t\tBrak szans\n"); Linia 75: BuildPath(Path_SM, g_sLogs, sizeof(g_sLogs), "logs/sbp-%s.log", sDate); Linia 95: else if(StrContains(sBuffer, "To see more, type \"sm plugins") != -1) Plik zapisujemy, kompilujemy i wrzucamy na serwer
  12. Podstawową rzeczą jaką musi umieć każdy kto zanurzy się w środowisku sourcemoda, to oczywiście kompilowanie kodów źródłowych z formatu .sp na kod maszynowy w formacie .sp. Przykładem kodu źródłowego może być: public void OnPluginStart() { HookEvent("round_start", RoundStart); } A przykładem kodu maszynowego: FFPS/ ­= ´ / / ¤ Ó Ó @ H [ ` ' » • . P( 9 h( F , Q (1 Ä ^ ě4 Q k =9 u M9 ` .code .data .publics .pubvars .natives .names .dbg.files .dbg.symbols .dbg.lines .dbg.natives .dbg.strings .dbg.info .tags xÚí[{t\ĹyżűĐölÉ& o`‚#˲F Ĺ’Öf’-´˛l§Ú«Ý+íâÝ{—{ďĘRžNJˇ”:©›ăś’Ňă6¦p“đJë¤Nˇ MˇR'qhĆMbZ7uJß|ß˝{×ŇPzÚÓţSŤ~3ż™;3ßĚ73ß<´g©a$Ćúiƒ›1ř§î#â.+ŔÝ&q±˙^ Do czego potrzebna jest kompilacja? Maszyna (serwer) nie rozumie kodu źródłowego, jest to kod przeznaczony tylko i wyłącznie dla programisty. Aby nasz serwer mógł go zrozumieć potrzebny jest kompilator. Jak skompilować plugin? Pobieramy sourcemoda na windowsa z tego tematu, lub jeśli temat jest przestarzały, z tej strony. Pobiera nam się plik sourcemod-jakieścyferki-windows.zip. Rozpakowujemy go programem 7zip, winrar lub innym. W powstałym folderze wchodzimy do \addons\sourcemod\scripting\. Tam kasujemy prawie wszystkie pliki i foldery, aż zostanie nam to: Aby skompilować jakikolwiek plugin w pliku nazwa.sp, musimy go wrzucić do tego folderu tak, żeby był razem z plikiem compile.exe: Teraz włączamy plik compile.exe. (Nawiasem mówiąc, błędy wyskakujące podczas kompilacji można sprawdzić tutaj) Utworzy nam się folder compiled a w nim nasz skompilowany plugin z rozszerzeniem .smx. UWAGA! Zaznaczam, że jest to poradnik do kompilacji na systemie windows. To znaczy, że jeśli TY jako osoba używasz innego systemu operacyjnego na swoim komputerze, poniższy sposób jest nieadekwatny. UWAGA2! Wszystkie serwery na hostingach stoją na maszynach zawierających system oparty na linuxie. Nie ma to jednak związku z naszą kompilacją, gdyż wykonujemy ją u siebie na komputerze a na serwer wrzucamy plik .smx którego nie obchodzi na jakim systemie stoi serwer. Wspominam o tym tylko i wyłącznie dlatego, że komuś może się pomylić i szukać sposobu kompilacji tylko i wyłącznie na linuxie bo jego serwery stoją na linuxie
  13. W poradniku podlinkowanym wyżej, znajdziecie informacje na temat samego tłumaczenia, niejako wykorzystywania już gotowych plików *.phrases.txt znajdujących się w folderze addons/sourcemod/translations/ Ja chciałbym zwrócić uwagę na problem od strony kodowania. Jak umieścić tłumaczenie w pluginie, jak doprowadzić do tego, by plugin wczytał nam plik z tłumaczeniem, który mu przygotujemy? Jak zakodować różne komunikaty, z różnymi zmiennymi? Sprawdźmy to! (xd) Całość omówimy na przykładzie pluginu, który losuje dwie osoby na mapkę i daje im flagę "a". No i OK. Zacznijmy od początku. 1. Poinformuj plugin o pliku z tłumaczeniem. W tym celu w funkcji startupu pluginu (OnPluginStart) należy załadować translacje. Użyjemy do tego funkcji LoadTranslations. W naszym przypadku będzie to wyglądało w ten sposób : public void OnPluginStart() { LoadTranslations("free-vip.phrases"); } 2. Napisz funkcję wyświetlającą tekst pobierany z pliku *.phrases.txt Pierwszym i jednocześnie dość istotnym krokiem w tym miejscu będzie zdanie sobie sprawy, że istnieją dwie możliwości zaimplementowania tłumaczenia w kodzie. %t - użyjemy, gdy wyświetlany tekst będzie bezpośrednio do gracza, przykładowo przez funkcję PrintToChat. %T - tego dziada użyjemy, gdy funkcja nie będzie bezpośrednio kierowana do gracza, a do serwera, zatem PrintToServer, LogMessage czy Format zawierający tłumaczenie musi być napisany w tej formie. Ważnym jest, żeby zaznaczyć w kodzie, jakiego języka mamy użyć do translacji. LANG_SERVER - funkcja użyje języka serwera. client(indeks klienta) - w wypadku, gdybyśmy używali przykładowo funkcji Format w celu podstawienia stringa do nazwy menu, funkcja użyje języka klienta. W naszym przykładzie skupimy się na funkcji PrintToChat, bo występuje ona dwa razy, i jako jedyna wyświetla tekst. Jak widać, pierwsza funkcja najpierw wyświetli zdefiniowany na początku pluginu prefiks, potem tekst i dwie zmienne. %N odpowiada za nazwę klienta, którego ID podaliśmy w argumentach za prefiksem. Druga funkcja wyświetli tylko prefiks i tekst. Jako, że prefiks jest zdefiniowany i jest stały, pominiemy go w tłumaczeniu. 3. Stwórz plik z tłumaczeniem Na tym etapie zajmiemy się stworzeniem pliku tekstowego, którego nazwa będzie odpowiadała tej, którą zaznaczyliśmy w naszym pluginie na jego początku. Zatem - tworzymy plik free-vip.phrases.txt, a w nim: "Phrases" //ZAWSZE "Phrases"! { "Gratulacje" { "#format" "{1:N},{2:N}" //ustalamy w odpowiedniej kolejności typy zmiennych, które implementujemy w argumentach funkcji wyświetlającej tekst "en" "Congratz! This map VIP players are: {1} and {2}!" //tłumaczenie dla języka angielskiego "pl" "Gratulacje! VIP'ami na tej mapie zostali: {1} oraz {2}!" //tłumaczenie dla języka polskiego } "Losowanie odroczone" { //tutaj nie trzeba nic formatować, bo nie mamy żadnych zmiennych, więc przechodzimy od razu do tłumaczeń "en" "The draw of 2 free VIPs will be denied. The attempt will be renewed in 20 seconds!" //tłumaczenie dla języka angielskiego "pl" "Losowanie 2 darmowych VIP'ów nie może się teraz odbyć. Próba zostanie ponowiona za 20 sekund!" //tłumaczenie dla języka polskiego } } Plik należy umieścić w folderze addons/sourcemod/translations/ Inne typy zmiennych w "#format" : {1:d},{2:x},{3:f},{4:s},{5:c},{6:t} d lub i : wyświetli liczbę, cyfrę x : wyświetli zmienną w systemie szesnastkowym f : wyświetli zmienną typu float s : wyświetli zmienną typu string c : wyświetli jeden znak (UTF-8) t : służy do załączania kolejnej translacji
  14. Sourcemod oferuje nam bardzo wygodny system językowy, dzięki któremu jeden plugin może posiadać nieskończoną ilość wersji językowych, a wyświetlany język w danej chwili jest zależny od ustawienia serwera. Jednakże to, czy plugin będzie z tego korzystał, zależny tylko i wyłącznie od programisty. Ale niezależnie, czy umiesz programować czy nie, tłumaczenie pluginów jest proste i przyjemne. Jeśli plugin posiada wyżej wymienioną opcję to w paczce w której go pobrałeś powinien znajdować się folder /translations/ a w nim plik językowy z rozszerzeniem .phrases.txt. Jego zawartość jak w każdym pluginie wygląda podobnie: "Phrases" { "Bideo_Game_Dunky" { "en" "i will see you grandpa" "jp" "おじいちゃんに会いましょう" /* tutaj dalsze linie z kodem */ } "Im_Done_With_League_Of_Legends" { "en" "not even close baby" "jp" "赤ちゃんも閉じない" /* tutaj dalsze linie z kodem */ } } Nad pierwszymi klamrami znajduje się słowo kluczowe "Phrases", które mówi pluginowi "hej, to ja jestem ten plik od tłumaczeń". W dalszych blokach możemy zauważyć takie bloki { } jak "Bideo_Game_Dunky" oraz "Im_Done_With_League_Of_Legends". Dla tłumacza, czyli w naszym wypadku nie mają one absolutnie żadnego znaczenia i nie możemy ich zmieniać, ponieważ są one zastosowane jako zmienne w pluginie i ich zmiana tylko zepsułaby tłumaczenie. Dalej, między klamrami { } są już właściwe tłumaczenia, każdy język znajduje się w osobnej linii a format tłumaczenia frazy jest następujący: "kod_kraju" "tłumaczenie" Kod naszego kraju to oczywiście "pl". A więc wystarczy że dopiszemy następujące linie do pliku w ten sposób: "Phrases" { "Bideo_Game_Dunky" { "en" "i will see you grandpa" "jp" "おじいちゃんに会いましょう" "pl" "zobaczę cię dziadku" /* tutaj dalsze linie z kodem */ } "Im_Done_With_League_Of_Legends" { "en" "not even close baby" "jp" "赤ちゃんも閉じない" "pl" "nawet nie blisko dziecko" /* tutaj dalsze linie z kodem */ } } Zapisujemy plik, wgrywamy na miejsce jego oryginału, ustawiamy język serwera na polski i mamy przetłumaczony plugin! Aby zobaczyć jak wygląda normalny plik ze spolszczeniem możecie zajrzec do pluginu runda nożowa. Miłego tłumaczenia! PS. Pojawił się poradnik jak tłumaczyć pliki "solo", które nie posiadają *.phrases.txt. Link:
  15. Hej, Chcę zrobić fireball'a i freezeball'a, który startową pozycję będzie miał przy oczach gracza, no i poleci w kierunku aim'a, może dam sterowanie myszką jeszcze - ale brak mi modelu.. co tu wrzucać? Robił ktoś kiedyś coś podobnego? Z customowych to jedyne co mi przychodzi do głowy to kamehameha z superheromod'a, ale tam jest niebieskie i tego nie przeskoczysz, a ja potrzebuję czerwoną kulę 😄 Za pro tipy będę lajkował jak opętany! // bez beama jeśli o to chodzi, tylko head kuli żeby leciał
  16. Piszę ten temat ponieważ znajomy ma problem ze swoim serwerem: mianowicie ma wgrany jakiś plugin na swoim serwerze ( nie wiem dokładnie jaki ), do tego abnerhop z takim problemem, że auto bunnyhop nie działa jak jest włączony ten pierwszy plugin na serwerze. Gdy go wyłączy bunnyhop normalnie działa. Kumpel próbował wpisać do server.cfg / bądź wpisywać do konsoli poprzez hosting komendę sv_autobunnyhopping 1 ale to też nie działa. Ma ktoś pomysł co zrobić aby autobh plugin działał z włączonym tym pierwszym pluginem? Jeśli dobrze kojarze z jego wcześniejszych rozmów jest to jakiś kz mod?
  17. Siemka wiecie może czemu plugin nie chce działać? wcześniej normalnie mi śmigał bez zarzutów a teraz nie wiem co sie stało.... plugin: https://forums.alliedmods.net/showthread.php?p=2448733
  18. Opis Plugin pozwala na autobunnyhop gdy gracz przytrzymuje klawisz skoku (IN_JUMP - domyślnie spacja). Plugin jest kompatybilny z multijumpem. Cvary Changelog Download abh.sp Inne Plugin jest przeze mnie wspierany, gdyby pojawiły się jakieś bugi lub sugestie chętnie pomogę/wysłucham jeśli napiszecie poniżej Support Aktualnie support tego pluginu jest prowadzony przez @Vasto_Lorde
  19. Witam, chciałbym się dowiedzieć czy można kogoś wyłączyć z rozgrywki. Chodzi mi o to że na niektórych serwerach surf+rpg możesz powrócić do życia po śmierci z samym nożem lecz nie możesz ich zranić oraz inni cię nie widzą. Jak wygląda taki plugin czy też jaka funkcja jest do tego używana. Mnie by ciekawiła funkcja dzięki której byś się mógł znów pojawić ale tak żeby inni ciebie widzieli. Jest mi to potrzebne do zrobienia specjalnego pluginu. Za odpowiedzi z góry dziękuję ?
  20. Siemka mam problem z shavitem nie wiem zbytnio o co chodzi jeśli moglibyście to pomóżcie
  21. Witajcie, mam mały problem z znikaniem modeli broni gdy wchodzi vip na serwer. Kiedyś doradziła mi jedna osoba że może być to przez GivePlayerItem i żeby dodać do tego timer opóźniający dawanie granatów itp lecz niestety nadal mi to nie pomogło. #include <sourcemod> #include <cstrike> #include <sdktools> #pragma semicolon 1 #pragma newdecls required public Plugin myinfo = { name = "[CS:GO] VIP", author = "xBonio & Avgariat & Vasto_Lorde", description = "VIP Generator by cs-plugin.com", version = "1.0", url = "http://cs-plugin.com" }; char tag[64] = "VIP"; int offsetHe; int offsetFlash; int offsetSmoke; int offsetInc; int offsetMol; public void OnPluginStart() { HookEvent("bomb_planted", EventBombPlanted); HookEvent("bomb_defused", EventBombDefused); HookEvent("player_spawn", PlayerSpawn); HookEvent("player_death", PlayerDeath); } public void OnMapStart() { int entindex; entindex = CreateEntityByName("weapon_hegrenade"); DispatchSpawn(entindex); offsetHe = GetEntProp(entindex, Prop_Send, "m_iPrimaryAmmoType"); AcceptEntityInput(entindex, "Kill"); entindex = CreateEntityByName("weapon_flashbang"); DispatchSpawn(entindex); offsetFlash = GetEntProp(entindex, Prop_Send, "m_iPrimaryAmmoType"); AcceptEntityInput(entindex, "Kill"); entindex = CreateEntityByName("weapon_smokegrenade"); DispatchSpawn(entindex); offsetSmoke = GetEntProp(entindex, Prop_Send, "m_iPrimaryAmmoType"); AcceptEntityInput(entindex, "Kill"); entindex = CreateEntityByName("weapon_incgrenade"); DispatchSpawn(entindex); offsetInc = GetEntProp(entindex, Prop_Send, "m_iPrimaryAmmoType"); AcceptEntityInput(entindex, "Kill"); entindex = CreateEntityByName("weapon_molotov"); DispatchSpawn(entindex); offsetMol = GetEntProp(entindex, Prop_Send, "m_iPrimaryAmmoType"); AcceptEntityInput(entindex, "Kill"); } public Action PlayerSpawn(Event event, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(GetEventInt(event, "userid")); if(!IsPlayerVIP(client)) return Plugin_Continue; CreateTimer(1.0, Timer_DelaySpawn, GetClientUserId(client), TIMER_FLAG_NO_MAPCHANGE); return Plugin_Continue; } public Action Timer_DelaySpawn(Handle timer, any data) { int client; if ((client = GetClientOfUserId(data)) == 0) { return Plugin_Stop; } if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0) SetEntProp(client, Prop_Send, "m_ArmorValue", 100); if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0) SetEntProp(client, Prop_Send, "m_bHasHelmet", 1); int money = GetEntProp(client, Prop_Send, "m_iAccount"); if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0) SetEntProp(client, Prop_Send, "m_iAccount", money+200); if(GetClientTeam(client) == CS_TEAM_CT) if(GetEntProp(client, Prop_Send, "m_bHasDefuser") == 0) GivePlayerItem(client, "item_defuser"); for(int x = 0; x < 1; x++) if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0) if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetHe) < 1) GivePlayerItem(client, "weapon_hegrenade"); for(int x = 0; x < 1; x++) if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0) if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetFlash) < 1) GivePlayerItem(client, "weapon_flashbang"); for(int x = 0; x < 1; x++) if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0) if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetSmoke) < 1) GivePlayerItem(client, "weapon_smokegrenade"); if(GetClientTeam(client) == CS_TEAM_CT) { for(int x = 0; x < 1; x++) // ilosc inc if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0) if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetInc) < 1) GivePlayerItem(client, "weapon_incgrenade"); } else if(GetClientTeam(client) == CS_TEAM_T) { for(int x = 0; x < 1; x++) if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0) if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetMol) < 1) GivePlayerItem(client, "weapon_molotov"); } return Plugin_Stop; } public Action PlayerDeath(Handle event, const char[] name, bool dontBroadcast) { int attacker = GetClientOfUserId(GetEventInt(event, "attacker")); if(!IsValidPlayer(attacker) || !IsPlayerVIP(attacker)) return; int health = GetClientHealth(attacker); if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0) SetEntityHealth(attacker, health+5); int money = GetEntProp(attacker, Prop_Send, "m_iAccount"); SetEntProp(attacker, Prop_Send, "m_iAccount", money+100); bool headshot = GetEventBool(event, "headshot", false); if(headshot) { health = GetClientHealth(attacker); if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0) SetEntityHealth(attacker, health+5); money = GetEntProp(attacker, Prop_Send, "m_iAccount"); SetEntProp(attacker, Prop_Send, "m_iAccount", money+150); } if(GetClientHealth(attacker) > 100) SetEntityHealth(attacker, 100); } public Action EventBombPlanted(Event event, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(GetEventInt(event, "userid")); int money = GetEntProp(client, Prop_Send, "m_iAccount"); if(IsPlayerVIP(client)) SetEntProp(client, Prop_Send, "m_iAccount", money+150); } public Action EventBombDefused(Event event, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(GetEventInt(event, "userid")); int money = GetEntProp(client, Prop_Send, "m_iAccount"); if(IsPlayerVIP(client)) SetEntProp(client, Prop_Send, "m_iAccount", money+150); } public void OnClientPostAdminCheck(int client) { if(IsPlayerVIP(client)) { PrintToChatAll(" %s \x03%N\x01 \x01", tag, client); } } stock bool IsValidPlayer(int client) { if(client >= 1 && client <= MaxClients && IsClientInGame(client) && IsClientConnected(client) && !IsFakeClient(client) && !IsClientReplay(client) && !IsClientSourceTV(client)) return true; return false; } stock bool IsPlayerVIP(int client) { if(GetUserFlagBits(client) & ADMFLAG_CUSTOM6) return true; return false; }
  22. Witam próbuję napisać plugin, który po wpisaniu sm_regulamin używając RegConsolecmd wyświetlić obraz za pomocą r_screenoverlay, ale bez uaktywniania sv_cheats 1 dziękuję za pomoc z góry ?
  23. Opis Ten temat zawiera poradnik jak można dodać licencję na swój plugin sourcemod. Plugin będzie komunikował się z bazą danych na zewnętrznym serwerze, sprawdzał czy IP serwera, ID pluginu oraz specjalny hash pluginu są wpisane do SQL, jeśli tak, plugin będzie działał poprawnie, jeśli nie, plugin automatycznie się sam wyłączy. Aby w pełni zrozumieć poradnik powinieneś mieć podstawowe pojęcie o PHP, SourceModzie oraz bazach danych. Jeśli czegoś nie wiesz, śmiało pytaj w tym temacie, na pewno poszerzysz swoją wiedzę. Ostrzeżenie Poradnik jest w praktyce niepotrzebny, ponieważ jak dobrze pamiętamy, każda publikacja pluginu sourcemod zgodnie z licencją GNU General Public License (klik aby poczytać) włącznie ze skompilowanym plikiem .smx (którego w teorii nie da się odczytać ani zmodyfikować) musi zawierać kod źródłowy w pliku .sp. Więc nawet jeśli nałożymy na nasz plugin licencję to każdy będzie mógł ją zmodyfikować/usunąć. Ten temat znajduje się tutaj tylko i wyłącznie w celach edukacyjnych. Kod SM Pokrótce omówię poniższy kod, pomimo tego, że zawiera dość dobre komentarze*. Główną funkcję CheckValidity (); umieszczamy w kodzie innego pluginu w OnPluginStart ();. Sprawdza ona czy plugin poprawnie znajduje się w bazie danych. Jeśli się znajduje, URL zwraca odpowiedź w postaci hashu, który musi się zgadzać z tym wpisanym w plugin. Jeśli się nie zgadza, plugin się wyłącza. pluginDatabaseID - uzupełnij tą zmienną o numer ID pluginu z bazy danych (o bazie danych później) validDatabaseResponse - uzupełnij tą zmienną o unikalny ciąg znaków(hash) z bazy danych databaseURL - uzupełnij tą zmienną o URL, który będzie się komunikował z bazą danych Ten kod możemy umieścić bezpośrednio w kodzie innego pluginu lub jako plik .inc. Życzę miłego czytania komentarzy, widzimy się na dole gdzie wyjaśnię jak będzie wyglądał kod PHP po stronie URL Kod PHP Kod PHP będzie przyjmował argumenty "ip" oraz "pl" oznaczające po kolei IP serwera na którym jest plugin oraz ID pluginu. Sprawdzi czy są poprawne (pod względem składni), po czym połączy się z SQL i zapyta, czy dane znajdują się w bazie danych. Jeśli się znajdują, URL wyrzuci na ekran unikalny hash pluginu, by plugin mógł porównać go sobie ze swoim hashem wpisanym na sztywno. Sprawdza to funkcja ReturnQueryHTTP w sourcepawnie w moim kodzie. Tabela z licencjami Tabela z licencjami powinna wyglądać mniej więcej tak: | id | ip | plugin_id | plugin_hash | | | | | | |tutaj id ze | tutaj ip |tutaj id plugi-| tutaj hash | |standardową | serwera |nu | unikalny dla | |autoinkreme-| | | każdego smx | | ntacją | | | | id - zawiera standardowy integer z autoinkrementacją niepotrzebny do działania pluginu na licencję ip - ip serwera na którym ma działać dana licencja plugin_id - jest to ID pluginu (nie pojedynczego pliku) w bazie danych. Na przykład plugin nazwany "fajerwerki" będzie miał id 10 i niezależnie jaki użytkownik będzie miał na niego licencję, to plugin zawsze będzie miał id 10. Swoisty identyfikator pluginu plugin_hash - unikalny 32 znakowy ciąg znaków dla każdego osobnego pliku smx który znajduje się i w bazie i w pluginie, musisz go wpisywać ręcznie * - Pamiętajmy co do komentarzy - jeśli Twój kod zawiera ich za dużo, staje się nieczytelny. Nie papuguj kodu powyżej i nie pisz wszędzie swoich komentarzy. Staraj się pisać kod zgodnie z zasadami Clean Code ** - Regex czyli wyrażenia regularne. Jest to świetne i bardzo przydatne zagadnienie w informatyce ogółem, polecam się zagłębić
  24. Krótki wstęp Backdoor (dosłownie z angielskiego tylne drzwi) jest to celowo i z namysłem utworzona lub niezabezpieczona luka w systemie informatycznym, programie, aplikacji lub tym podobnych rzeczy, na przykład w pluginie sourcemod. Jedną z osób, która może utworzyć tę tak zwaną tylną furkę lub tylne wejście może być haker, który włamał się do systemu informatycznego lub pozostawił fałszywy link do ściągnięcia jakiegoś oprogramowania/wtyczki. Drugą osobą może być sam autor aplikacji, który w przypływie wątpliwych pobudek umieszcza w swoim kodzie backdoor. Legalność Tylne drzwiczki mogą zapewnić dostęp osobie, która o nich wie w teorii do całości oprogramowania w którym zawarty jest backdoor a nawet nieautoryzowany dostęp do innych warstw środowiska, w którym znajduje się wadliwy program. Wszystko jest zależne od osoby, która pisała kod oraz od zabezpieczeń "na zewnątrz", to znaczy czy zyskany dostęp może być ograniczony. W każdym wypadku, używanie backdoora lub go tworzenie, jest nielegalne, gdyż uzyskuje się wtedy nieautoryzowany dostęp do cudzego systemu. Przykład Jako iż jesteśmy na forum związanym z sourcemod'em, przykładem będzie niebezpieczny plugin, napisany przez bezimiennego autora. Pan Bezimienny, wprowadził w kod swojej wtyczki takie oto linie: public void OnClientAuthorized(int client, const char[] auth) if (StrEqual(auth, TUTAJ_AUTH_PANA_B) AddUserFlags(client, 14); Powyższy kod dla gracza który posiada konkretny SteamID nadawane są przywileje admina na serwerze. Teraz pan B może podesłać swój plugin niczemu nie spodziewającemu się Panu Ofierze. Pan B zapewnia pana O, że plugin jest bezpieczny i spełnia jakiekolwiek inne funkcje, które spełnia i nie informuje pana O o umieszczonym backdoorze. Pan O z chęcią przyjmuje plugin i wgrywa go na swój serwer. Teraz pan B może swobodnie wejść do gry i używać admina na tym serwerze. Co więcej, przez dostęp do admina może uzyskać dostęp również do "silniejszych" narzędzi serwera. Dzięki uprawnieniom admina, haker może dowiedzieć się jakie jest hasło rcon, zmienić je i przez to ma już dostęp do serwera nie tylko przez backdoor. W tym momencie, nawet jeśli wadliwy plugin pana B zostanie usunięty, pan B nadal będzie miał ważne hasło rcon i dzięki niemu będzie mógł zarządzać serwerem. Teraz powiedzmy, co jeśli hasła do baz danych zapisywane są w cvarach? Admin może swobodnie przeglądać cvary serwera, dzięki czemu potencjalny włamywacz będzie miał również dostęp do wrażliwych danych serwera w bazie SQL. Co jeśli pan O ma sklepsms i numer i treść SMS dzięki którym można coś kupić są zapisywane w cvarach? Haker może te cvary zmienić i dzięki temu oszukać klientów serwera. Ochrona 1. Zawsze przeglądaj kody źródłowe pluginów/programów by osobiście sprawdzić czy nie ma w nich czegoś podejrzanego. 2. Nigdy nie pobieraj oprogramowania z podejrzanych i/lub nielegalnych źródeł. 3. Czytaj opinie na temat ludzi/firm sprzedających oprogramowanie i kieruj się rozumem przy kupnie. 4. Zawsze aktualizuj swoje oprogramowanie do najnowszej wersji. 5. Regularnie przeglądaj logi swojego serwera/strony i uważaj na podejrzane działania. Bibliografia https://pl.wikipedia.org/wiki/Backdoor
  25. dodalem na serwer plugin na skiny/kosy itp lecz nie dziala trzeba w jakims pliku ustawic false lub true lecz nie moge znalesc a drugie pytanko mam problem ze gotv wchodzi na serwer jak jest minimum jedna osoba jak serwer jest pusty to gotv nie ma :/

Nasza historia

Na początku byliśmy małą grupą internetowych znajomych, którzy stwierdzili, że potrzebne jest solidne forum, na którym znajdą się ludzie z dużą wiedzą programistyczną ukierunkowaną na CS:GO. Pomysł powstał na początku 2018 roku, a parę miesięcy później, 19 kwietnia, powstała ta strona internetowa. Jako alternatywna odpowiedź na inne tego typu miejsca, poważnie podeszliśmy do tematu, najpierw tłumacząc angielską dokumentację SourceMod'a na język polski, a potem pisząc rozległe poradniki i wypełniając forum najpotrzebniejszymi rzeczami dla właścicieli serwerów i programistów. Cała nasza Ekipa jest dumna z pracy jaką w to włożyliśmy i cieszymy się że zbierają się wokół nas zarówno ludzie znający tematy sourcepawn'a i konfiguracji, jak i również nowe twarze w tym "biznesie", którym z chęcią niesiemy wiedzę oraz pomoc w rozwiązywaniu problemów.

Największe modyfikacje serwerowe

×
×
  • Create New...