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

Treść opublikowana przez Linux`

  1. Daj kod funkcji SQLSys_OnClientPutInServer, najpewniej bedzie to public OnClientPutInServer. Tak wiec wystarczy, ze zamienisz go na OnClientConnect lub OnClientAuthorized. Dane beda resetowane juz przy autoryzacji/podlaczeniu gracza wiec problem z tym, ze ktos wchodzi i na start ma jakis tam poziom bedzie juz rozwiazany.
  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. Linux`

    Licencja Shop-Engine

    To wykonaj to i opublikuj. Hejtowac kazdy moze ale cos zrobic to juz nie. .
  4. 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.
  5. 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?
  6. Zacznijmy od widelek ceny oraz dokladnego opisu co ma owy dodatek posiadac. Bez tego ani rusz, gdy to juz uzupelnisz mozesz dodac kontakt steam i jezeli zlecenie mnie zainteresuje to napewno sie odezwe .
  7. 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.
  8. 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.
  9. 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.
  10. Tworzysz zmienna globalna, hokujesz koniec rundy i ustawiasz ja na true. W momencie w ktorym chcesz to wylaczyc (np nowarunda, freezetime) hokujesz odpowiedni event i resetujesz zmienna. Pozniej dodajesz w wybranej funkcji odpowiedni warunek i to bedzie na tyle.
  11. Tak jak wyzej, strone musowo postawilbym na platnym hostingu www. Natomiast jesli chodzi o gry to podzielilbym to na co najmniej dwie maszyny. Przejrzyj oferte mintshost, powinna byc zadowalajaca.
  12. @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.
  13. [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
  14. [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
  15. [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
  16. 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.
  17. 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.
  18. 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.
  19. 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.
  20. 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.
  21. 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.
  22. Osobiscie odradzam ci te usluge. Znacznie lepszym i tanszym sposobem bedzie wykupienie vpsa i np zlecenie komus jego konfiguracji. Ceny chmury nie sa odpowiednie, co do ilosci ich zasobow.
  23. Hm problem tylko w tym, ze w skrzynce znajduja sie obecnie tylko dwie wiadomosci. Piszta steam http://steamcommunity.com/id/linux2006
  24. 1.6.3 znaczy pewnie cs source ns, madry wybor :). Jestem to w stanie napisac, nawet automat ale niestety tylko odplatnie. Edit: Na tej wersji sourcemod powinien dzialac bez problemu zapis kv, wiec wystarczy troche poradnikow by napisac prosty zapis do pliku w ktorym miescilby sie nick, kod itp.
×
×
  • Dodaj nową pozycję...