Skocz do zawartości

Znajdź zawartość

Wyświetlanie wyników dla tagów 'NOWY]' .



Więcej opcji wyszukiwania

  • Wyszukaj za pomocą tagów

    Wpisz tagi, oddzielając je przecinkami.
  • Wyszukaj przy użyciu nazwy użytkownika

Typ zawartości


Forum

  • Tworzenie i konfiguracja serwerów
    • Pytania ogólne
    • Problemy
    • Artykuły i instrukcje
    • Ochrona serwera gry
    • Statystyki serwerów gier
  • Pluginy, mody i dodatki
    • Pytania ogólne
    • Mody
    • Pluginy
    • Gotowe paczki SM
    • Pliki
  • Scripting
    • Artykuły
    • Pytania ogólne
    • Problemy
    • Prośby
    • Modyfikacje
  • Counter-Strike: Global Offensive
    • Nowości
    • Artykuły
    • Pytania
    • Fragmovie
    • Klan szuka graczy
    • Gracz szuka klanu
    • Publikacja serwerów
  • GameHosting
    • Informacje od firm hostingowych
    • Oferty
    • Opinie o firmach hostingowych
    • Pytania
    • Informacje i pomoc techniczna
  • Pozostałe
    • Piaskownica
    • Poszukuję załogi
    • Rynek
    • MYGO.pl

Szukaj wyników w...

Znajdź wyniki, które...


Data utworzenia

  • Od tej daty

    Do tej daty


Ostatnia aktualizacja

  • Od tej daty

    Do tej daty


Filtruj po ilości...

Dołączył

  • Od tej daty

    Do tej daty


Grupa podstawowa


Imię:


Skąd:


Zawód:


Steam:

Znaleziono 26 wyników

  1. Pobralem coda z amxx nowego ktorego dodal linux, i grajac klasa wsparcie ogniowe nie moge uzyc rakiety, nie zmienialem w niej nic
  2. Witam , jak zrobic aby klasa byla premium, probowalem tak: No ale nie dziala, jakas alternatywa ? Bo po kliknieciu wlacza sie napis Aby zagrac ta klasa kup premium (wpisz /sklepsms) ! i klasa tez, ale nie ma zadnych umiejetnosci tylko bronie i staty
  3. Witam, posiadamy na serwerze paczkę Linuxa` COD Nowy, która posiada przedmiot Buty Szturmowego sprawiający, że nie słychać naszych kroków. Dodałem funkcjonalność tego przedmiotu do nowo utworzonej klasy i na serwerze testowym postawionym na moim komputerze, gdzie sprawdzam sobie wszystkie zmiany i testuje przed wypuszczeniem na serwer właściwy, wszystko śmiga (sprawdzane z innymi graczami, nie jest tak że tylko ja się sam nie słyszałem i to stwierdzam). Problem jest jednak taki, że na serwerze właściwym zarówno po wrzuceniu bezpośrednio .smx skompilowanego u mnie jak i skompilowaniu tam .sp osobno (na serwerze właściwym przez FTP) kroki słychać. Z racji, że u mnie działa dokładnie ten sam .smx a tam nie to domyślam się, że problem leży po stronie konfiguracji serwera i różnic na moim a na właściwym. Są jakieś komendy które blokują wyłączenie kroków danego klienta? Nie jestem w stanie tego zrozumieć, bo same Buty Szturmowego wyciszają kroki zarówno u mnie na testowym jak i na serwerze właściwym, ale klasa zrobiona na jego podstawie wg poradnika działa tylko u mnie :( Ocenzurowane jak to działa, bo paczka Linuxa` jest płatna i nie chciałbym wrzucać jak to wygląda całe, a nie ma go na Steamie żeby się skontaktować i zapytać o zgodę (w razie uzyskania zgody to wrzucę całość, ale nie wydaje mi się żeby to było aż tak istotne). ... - cenzura :D #include <sourcemod> #include <codmod> #include <sdktools> #include <sdkhooks> ... // zmienne do statystyk i czy klient posiada umiejętność klasy czy już wykorzystał (tutaj akurat nie ma aktywnej umiejętności, zawsze jest tak, że nie słychać) public Plugin:myinfo = { name = nazwa, author = "Linux`", description = "Cod Klasa", version = "1.0", url = "http://steamcommunity.com/id/linux2006" }; public OnPluginStart() { ... // rejestrowanie klasy AddNormalSoundHook(DzwiekiGracza); } public OnClientPutInServer(client) { if ... // sprawdzanie czy jest fake clientem SendConVarValue(client, FindConVar("sv_footsteps"), "0"); } public ... // klasa jest włączona { ... // zmienna, że klient gra daną klasą } public ... // klasa jest wyłączona { ... // zmienna, że klient nie gra daną klasą } public Action:DzwiekiGracza(clients[64], &numclients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags) { if ... // sprawdzanie czy jest fake clientem return Plugin_Continue; if ... // sprawdzanie warunków wypuszczenia dźwięku do innych graczy { if // sprawdzanie, czy ma umiejętność (tak jak pisałem wyżej zawsze ją ma) EmitSoundToAll(sample, entity); return Plugin_Handled; } return Plugin_Continue; }
  4. Czołem :) ma ktoś pomysł jak zrobić item z którym plantujemy 1s i defujemy 1s? Z góry dzięki :)
  5. Witam, posiadam nowy COD MOD, na którym mam plugin gameme i po wpisaniu na czacie rank lub top10 nic się nie wyświetla, a w kodzie pluginu nie ma tych komend, aby były zablokowane. Proszę o pomoc.
  6. Jak w nazwie tematu, jak dodać do każdej klasy kevlar+hełm? Proszę o pomoc.
  7. Tak jak w temacie. Da się zmienić domyślny model gracza? Np. Na model kury?
  8. Tak jak w temacie. Wie ktoś jak to zrobić? :)
  9. Cześć :) Chciałbym się dowiedzieć czy jest możliwość żeby plugin https://forums.alliedmods.net/showthread.php?p=2276217 działał tylko na jednej klasie? Z góry dzięki :)
  10. Cześć :) a pytanie takie jak w temacie. Jak na itemie bądź klasie zrobić ogranicznik rozrzutu?
  11. Jak zrobić żeby pod zbindowanym klawiszem (np. E) klasa miała nieśmiertelność?
  12. Jak zrobić item który na początku rundy będzie miał szansę (załóżmy 1/8) na teleportacje na respa przeciwnika? Z góry dzięki.
  13. Jak ukryć model broni gdy klasa jest niewidzialna? Chciałbym zrobić klasę która przy kucaniu na nóżu jest całkowicie niewidzialna razem z bronią. Da się tak zrobić? Pomógł by ktoś? Z góry dzięki.
  14. Cześć :) Orientuje się może ktoś jak zrobić żeby postać stawała się niewidzialna na chwilę (załóżmy na 2 sekundy) po otrzymaniu obrażeń? Z góry dzięki
  15. W tym prostym poradniku opisze w jaki sposób tworzyć nowe klasy oraz itemy do nowego coda. 1. Tworzenie Klas 2. Tworzenie Itemów 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.
  16. 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;
  17. [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
  18. [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
  19. Linux`

    [CoD Nowy] Config Eventowy

    [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
  20. 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.
  21. 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.
  22. 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.
  23. 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.
  24. 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.
  25. 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.
×