dodaj to w public newRound()
client_cmd(0, "spk misc/bplanted.wav")
To równanie zostało stworzone przy pomocy kodu LaTeX:
Edytor LaTeX online: CodeCogs.com/latex/eqneditor.php
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
shajba. nie posiada znajomych
Napisane przez qrNt w 29.09.2015 07:59
Napisane przez Asiap w 29.09.2015 12:39
Napisane przez psilocybe w 21.01.2015 14:38
Witam, dziś opiszę proces podmiany dźwięków w modelach, na potrzeby serwerów Counter Strike 1.6.
Spora część użytkowników ma problem z tym zagadnieniem więc postanowiłem w końcu opisać to dokładniej.
Jest to mój pierwszy poradnik.
Będzie nam potrzebne:
Halflife Model Viewer 1.3 (w paczce)
GUI Studio (w paczce)
MDL Decompiler (w paczce)
Notepad++ (Do pobrania z oficjalnej strony: link)
HLMV13+decompiler.rar 609,59 KB 250 Ilość pobrań
1. Rozpakuj archiwum z załącznika.
2. Uruchom hlmv.exe (folder ../hlmv13_setup/hlmv.exe)
3. Wchodzimy w Menu > Tools > Configure Tools
Pokaże nam się okienko, gdzie podajemy ścieżki do kompilatora i dekompilatora (folder ../GUI StudioMDL 1.0/)
Wskazujemy pliki, klikamy OK i możemy przystąpić do dekompilacji modelu.
Uwaga: Przed dekompilacją modelu, warto stworzyć osobny folder dla każdego przerabianego modelu ponieważ dekompilator tworzy sporo plików, nie chcemy bałaganu.
Np. Tworzymy folder Ak47 i kopiujemy do niego model który będziemy dekompilować.
4. Wchodzimy w Menu > Tools > Decompile Model...
Wyskoczy okienko gdzie wskazujemy nasz model, pamiętajcie że zawsze będzie to model v_, ja wybrałem orygianlny v_ak47.mdl
Klikamy OK, po chwili w folderze obok v_ak47.mdl pokaże się sporo plików
Nas interesuje tylko jeden plik, ten z rozszerzeniem *.qc - w tym przypadku będzie to v_ak47.qc
5. Otwieramy plik *.qc programem Notepad++ - teraz następuje właściwa edycja dźwięków przypisanych do danego modelu.
Odnajdujemy w pliku *.qc (z reguły na końcu) fragment z sekwencjami, w moim przypadku wygląda on tak:
// 6 animation sequence(s) $sequence "idle1" "idle1" fps 30 $sequence "reload" "reload" fps 37 { event 5004 13 "weapons/ak47_clipout.wav" } { event 5004 57 "weapons/ak47_clipin.wav" } $sequence "draw" "draw" fps 30 { event 5004 11 "weapons/ak47_boltpull.wav" } $sequence "shoot1" "shoot1" fps 20 { event 5001 0 "22" } $sequence "shoot2" "shoot2" fps 20 { event 5001 0 "22" } $sequence "shoot3" "shoot3" fps 20 { event 5001 0 "22" }
Uwaga: Treść pliku *.qc może znacznie różnić się od przykładu, szczególnie w przypadku niestandardowych modeli, jednak zasada edycji pozostaje taka sama.
Zajmiemy się dźwiękami strzałów, ponieważ jak widać do sekwencji "shoot1" "shoot2" i "shoot3" nie ma przypisanych dźwięków "po ścieżce", zamiast tego mamy tajemnicze "22"
Zmieniamy:
$sequence "shoot1" "shoot1" fps 20 { event 5001 0 "22" } $sequence "shoot2" "shoot2" fps 20 { event 5001 0 "22" } $sequence "shoot3" "shoot3" fps 20 { event 5001 0 "22" }
Na:
$sequence "shoot1" "shoot1" fps 20 { event 5004 0 "weapons/new_sounds/ak47_strzal.wav" } $sequence "shoot2" "shoot2" fps 20 { event 5004 0 "weapons/new_sounds/ak47_strzal.wav" } $sequence "shoot3" "shoot3" fps 20 { event 5004 0 "weapons/new_sounds/ak47_strzal.wav" }
Co zmieniliśmy? Poza podaniem ścieżki do *.wav zamiast "22", zmieniamy event 5001 na 5004
Uwagi: -W przypadku sekwencji 'event 5004' czyli np. "draw", gdzie mamy podaną ścieżkę do dźwięku, zmieniamy tylko ścieżkę
-Liczba pomiędzy event 5004 a ścieżką to opóźnienie odegrania dźwięku w ms, nie polecam zmieniać
-Nowe dźwięki warto umieszczać w podfolderze np. cstrike/sound/weapons/new_sounds/..
6. Po zakończeniu edycji pliku *.qc zapisujemy zmiany i wracamy do Half-life Model Viewer
Wchodzimy w Menu > Tools > Compile Model... i wskazujemy nasz edytowany plik *.qc
Pokaże się okienko kompilatora:
Jeżeli wszystko jest w porządku zobaczymy tekst:
[Opening QC file - C:\Users\amxx\Desktop\v_ak47\v_ak47.qc] [QC loaded O.K!]
Klikamy przycisk Compile
Jeżeli wszystko jest ok to po chwili na dole zobaczymy tekst:
[Compiler execution completed]
Co oznacza że model skompilował się poprawnie, a w folderze którym był plik *.qc mamy swój nowy plik *.mdl (poprzedni został nadpisany)
7. Instalacja nowego modelu i dźwięków.
Do podmiany modeli na serwerach polecam plugin GHW Weapon Replacement
Przykładowy model z podmienionymi dźwiękami oraz instrukcją: M4A1 z dźwiękami CS:GO
Uwagi:
-Pamiętajcie że nowe dźwięki muszą być w formacie *.wav oraz odpowiednio zresamplowane:
Channel(s) : 1 channel Sampling rate : 22.05 KHz Bit depth : 8 bits
-Warto zachować porządek w folderach, nowe modele wrzucajcie np. do /cstrike/models/new_models/.. dźwięki do /cstrike/sound/weapons/new_sounds/..
-Podmienione dźwięki będziemy słyszeć poprawnie ale inni gracze nasze strzały usłyszą już normalne (nie da się tego obejść w żaden sposób jeżeli chodzi o HLDS)
Jeżeli czegoś brakuje, proszę pisać. Pozdrawiam i powodzenia w edycji.
Napisane przez xXxBoy4GirlxXx w 22.01.2015 21:06
Proszę, lecz za Lajka się nie obrażę!
https://mega.co.nz/#!vdozwY5Z!Sk-oyuGZJKz69r2Kwm83wkmEbixzV78y5Fd8sxQ8HmU
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
Napisane przez Ogen Dogen w 23.02.2015 01:15
Od niedawna pojawił się problem z AMXBans po stronie www uniemożliwiający normalne korzystanie z jego funkcji. Po kliknięciu w którykolwiek odnośnik otwiera się dodatkowa karta z stroną GM-Community.
Rozwiązanie tego problemu jest bardzo proste.
Wchodzimy w katalog gdzie zainstalowany jest AMXBans a następnie do pliku : (według ścieżki)
/templates/nazwa_twojego_stylu/js/amxbans.js.php
Otwieramy go dowolnym edytorem tekstu i usuwamy lub komentujemy kod na końcu pliku :
/* Version checker */ $(function(){ var chkver = document.createElement("script"); chkver.type = "text/javascript"; chkver.async = true; chkver.src = "//version.gm-community.net/amxbans.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(chkver, s); }); function setLastVersion(ver) { if (parseFloat($('#version').text()) < ver) { $('#version').addClass('MustUpdate').append(' <a href="http://gm-community.net/thread.1851"><img src="../../images/generic/information.png" alt="Download" /></a>'); } }
Zapisujemy i wysyłamy na serwer. Gotowe.
Napisane przez Lazzurowy w 08.01.2015 20:54
Pobrałem paczke Cod Mod Ultimate by NERO . Po wejsciu na serwer i wpisaniu sklep pojawia się Bonusy za Dolary nizej Bonusy za monety niby fajnie ale po wejściu, w które kolwiek z tych sklepów nie ma żadnego skutku. Nic sie nie włącza ;c Próbowałem wgrywać systemmonet_sklep od z różnych teamtów i kappa. Ale zawsze obojętnie który sklep wgram w menu jest Cod Ultimate czyli jakby ten sklep był wpisany w silnik czy whatever. Nwm jakieś propozycje co jest nie tak ? Pisać
Napisane przez Wielkie Jol w 26.12.2014 11:57
Losowanie VIP'a/SVIP'a w X rundzie w zależności od liczby graczy na serwerze
Jako, że święta już trwają, doszedłem do wniosku, że dam się ponieść Magii Świąt i udostępnię jeden z pluginów, który zrobiłem kiedyś.
Polega on na tym, że w X rundzie ( wybranej przez nas ) odbywa się losowanie na vipa w zależności od liczby graczy. Może to być VIP lub SVIP.
Ja na swoim serwerze przykładowo miałem vipa od 15 osób, zaś svipa od 28 i losowanie w 3 rundzie ( takie też są wartości podstawowe ).
Vip przyznawany jest na okres jednej mapy ( aktualnej ), 30s przed jej końcem jest zabierany.
Jeżeli zostanie wylosowana osoba z vipem, wtedy losowanie przepada na tą mapę.
Oczywiście podane są informacje, kto wylosował vipa w hud i say poprzez moduł colorchat.
Co 120 sekund jest informacja o tym, że taki plugin istnieje i będzie losowany vip co mapę.
Domyślnie VIP - ADMIN_LEVEL_H ( flaga t )
Domyślnie SVIP - ADMIN_LEVEL_G ( flaga s )
Ważne - przyznawana jest flaga od vipa/svipa a nie svip/vip!
Dodałem drugą wersję, losowanie tylko na jedną flagę ( nie na dwie ) - załącznik losowanievip
Jedyne co musisz zrobić to wrzucić plugin na serwer, no i w zależności od vipa jakiego używasz ( a zakładam, że vipa z vipgeneratora, będzie trzeba w nim dokonać trochę zmian, gdyż ten z generatora przyznaję vipa tylko raz, no a skoro w moim pluginie vip jest przyznawany w 3 rundzie to mamy problem ) - bo co ważne, przyznawana jest sama flaga, na którą zwykle są vipy.
Niedługo dodam post, w którym wytłumaczę co trzeba zrobić.
#define LOSOWANIE_VIP_OD 15 #define LOSOWANIE_VIP_DO_SVIP_OD 28 #define LOSOWANIE_W_KTOREJ_RUNDZIE 3 #define FLAGA_VIP ADMIN_LEVEL_H #define FLAGA_SVIP ADMIN_LEVEL_G
Mamy 5 takich "definicje" na górze pluginu, które jasno opisują, która za co odpowiada ( zmieniamy tylko liczbę )!
Przy flaga_vip podajemy naszą flagę vipowska (domyślnie T)
Przy flaga_Svip podajemy naszą flagę svipowską ( domyślnie S)
Kompatybilność z vipem z generatora
Przypadek nr 1. Nie mamy w vipie żadnego dodatku dla gracza uruchamiającego się w X rundzie
1. Dodajemy jedną zmienną, która będzie się nazywała przykładowo: gRunda;
2. Dodajemy do plugins_init() ten oto kod
register_logevent("Poczatek_Rundy", 2, "1=Round_Start")
3. Na samym dole kodu dajemy taką o to funkcję
public Poczatek_Rundy(){ if(++gRunda == 3){ for(new i=1; i<=32; i++){ if(is_user_connected(i) && !g_Vip[i] && get_user_flags(i) & ADMIN_LEVEL_H) g_Vip[i] = true; } } }
Przypadek nr 2. Mamy w vipie dodatek, który uruchamia się dla gracza od X rundy.
Zamieniamy w funkcji public event_new_round()
Podmieniamy ++gRound na taki oto kod:
if(++gRound == 4){ // dajmy flage po rundzie, w ktorej zostal rozlosowany vip, czyli jezeli masz losowanie w 3, tutaj daj 4. for(new i=1; i<=32; i++){ if(is_user_connected(i) && !g_Vip[i] && get_user_flags(i) & ADMIN_LEVEL_H) // tutaj wlasna flaga dowolna dla vipa ( ADMIN_LEVEL_H) g_Vip[i] = true; } } }
Wesołych Świąt!
Napisane przez Klakier w 26.12.2014 11:55
Napisane przez GwynBleidD w 07.09.2014 10:20
Napisane przez BeMM w 11.06.2014 21:31
Napisane przez Scorpion Flail w 11.06.2014 20:58
Napisane przez Shaxu w 26.04.2014 20:43
Widzę że po dwóch latach wciąż jest ten sam problem.
Wtedy też długo się głowiłem i sam postanowiłem działać
Proszę trzymaj sklep za same monety ( daj znak czy działa )
Napisane przez radim w 16.10.2011 20:42
public PokazInformacje(id) { id -= ZADANIE_POKAZ_INFORMACJE; if(!is_user_connected(id)) { remove_task(id+ZADANIE_POKAZ_INFORMACJE); return PLUGIN_CONTINUE; } if(!is_user_alive(id)) { new target = pev(id, pev_iuser2); if(!target) return PLUGIN_CONTINUE; set_hudmessage(255, 255, 255, 0.6, -1.0, 0, 0.0, 0.3, 0.0, 0.0, 2); ShowSyncHudMsg(id, SyncHudObj, "Klasa : %s^nDoswiadczenie : %i / %i^nPoziom : %i^nPerk : %s", nazwy_klas[klasa_gracza[target]], doswiadczenie_gracza[target], PobierzDoswiadczeniePoziomu(poziom_gracza[target]), poziom_gracza[target], nazwy_perkow[perk_gracza[target]]); return PLUGIN_CONTINUE; } set_hudmessage(0, 255, 0, 0.02, 0.23, 0, 0.0, 0.3, 0.0, 0.0); ShowSyncHudMsg(id, SyncHudObj, "[Klasa : %s]^n[Doswiadczenie : %i / %i]^n[Poziom : %i]^n[Perk : %s]", nazwy_klas[klasa_gracza[id]], doswiadczenie_gracza[id], PobierzDoswiadczeniePoziomu(poziom_gracza[id]), poziom_gracza[id], nazwy_perkow[perk_gracza[id]]); return PLUGIN_CONTINUE; }Jedno HUD czyli:
set_hudmessage(255, 255, 255, 0.6, -1.0, 0, 0.0, 0.3, 0.0, 0.0, 2); ShowSyncHudMsg(id, SyncHudObj, "Klasa : %s^nDoswiadczenie : %i / %i^nPoziom : %i^nPerk : %s", nazwy_klas[klasa_gracza[target]], doswiadczenie_gracza[target], PobierzDoswiadczeniePoziomu(poziom_gracza[target]), poziom_gracza[target], nazwy_perkow[perk_gracza[target]]);wyświetla informację o graczu, którego oglądamy gdy nie żyjemy.
set_hudmessage(0, 255, 0, 0.02, 0.23, 0, 0.0, 0.3, 0.0, 0.0); ShowSyncHudMsg(id, SyncHudObj, "[Klasa : %s]^n[Doswiadczenie : %i / %i]^n[Poziom : %i]^n[Perk : %s]", nazwy_klas[klasa_gracza[id]], doswiadczenie_gracza[id], PobierzDoswiadczeniePoziomu(poziom_gracza[id]), poziom_gracza[id], nazwy_perkow[perk_gracza[id]]);wyświetla informacje o naszej klasie, perku, doświadczeniu i poziomie, gdy żyjemy.
new hp = get_user_health(id);nad:
set_hudmessage(0, 255, 0, 0.02, 0.23, 0, 0.0, 0.3, 0.0, 0.0); ShowSyncHudMsg(id, SyncHudObj, "[Klasa : %s]^n[Doswiadczenie : %i / %i]^n[Poziom : %i]^n[Perk : %s]", nazwy_klas[klasa_gracza[id]], doswiadczenie_gracza[id], PobierzDoswiadczeniePoziomu(poziom_gracza[id]), poziom_gracza[id], nazwy_perkow[perk_gracza[id]]);2.) Dodajemy napis aby się wyświtlał, czyli zamieniamy to:
ShowSyncHudMsg(id, SyncHudObj, "[Klasa : %s]^n[Doswiadczenie : %i / %i]^n[Poziom : %i]^n[Perk : %s]", nazwy_klas[klasa_gracza[id]], doswiadczenie_gracza[id], PobierzDoswiadczeniePoziomu(poziom_gracza[id]), poziom_gracza[id], nazwy_perkow[perk_gracza[id]]);na:
ShowSyncHudMsg(id, SyncHudObj, "[Klasa : %s]^n[Doswiadczenie : %i / %i]^n[Poziom : %i]^n[Perk : %s]^n[Zdrowie : %d]", nazwy_klas[klasa_gracza[id]], doswiadczenie_gracza[id], PobierzDoswiadczeniePoziomu(poziom_gracza[id]), poziom_gracza[id], nazwy_perkow[perk_gracza[id]]);3.) Ostatnim krokiem jest dodanie "hp" na koniec linijki czyli zamieniamy:
ShowSyncHudMsg(id, SyncHudObj, "[Klasa : %s]^n[Doswiadczenie : %i / %i]^n[Poziom : %i]^n[Perk : %s]^n[Zdrowie : %d]", nazwy_klas[klasa_gracza[id]], doswiadczenie_gracza[id], PobierzDoswiadczeniePoziomu(poziom_gracza[id]), poziom_gracza[id], nazwy_perkow[perk_gracza[id]]);na:
ShowSyncHudMsg(id, SyncHudObj, "[Klasa : %s]^n[Doswiadczenie : %i / %i]^n[Poziom : %i]^n[Perk : %s]^n[Zdrowie : %d]", nazwy_klas[klasa_gracza[id]], doswiadczenie_gracza[id], PobierzDoswiadczeniePoziomu(poziom_gracza[id]), poziom_gracza[id], nazwy_perkow[perk_gracza[id]], hp);
public PokazInformacje(id) { id -= ZADANIE_POKAZ_INFORMACJE; if(!is_user_connected(id)) { remove_task(id+ZADANIE_POKAZ_INFORMACJE); return PLUGIN_CONTINUE; } if(!is_user_alive(id)) { new target = pev(id, pev_iuser2); if(!target) return PLUGIN_CONTINUE; set_hudmessage(255, 255, 255, 0.6, -1.0, 0, 0.0, 0.3, 0.0, 0.0, 2); ShowSyncHudMsg(id, SyncHudObj, "Klasa : %s^nDoswiadczenie : %i / %i^nPoziom : %i^nPerk : %s", nazwy_klas[klasa_gracza[target]], doswiadczenie_gracza[target], PobierzDoswiadczeniePoziomu(poziom_gracza[target]), poziom_gracza[target], nazwy_perkow[perk_gracza[target]]); return PLUGIN_CONTINUE; } new hp = get_user_health(id); set_hudmessage(0, 255, 0, 0.02, 0.23, 0, 0.0, 0.3, 0.0, 0.0); ShowSyncHudMsg(id, SyncHudObj, "[Klasa : %s]^n[Doswiadczenie : %i / %i]^n[Poziom : %i]^n[Perk : %s]^n[Zdrowie : %d]", nazwy_klas[klasa_gracza[id]], doswiadczenie_gracza[id], PobierzDoswiadczeniePoziomu(poziom_gracza[id]), poziom_gracza[id], nazwy_perkow[perk_gracza[id]], hp); return PLUGIN_CONTINUE; }
new hp = get_user_health(target);nad
set_hudmessage(255, 255, 255, 0.6, -1.0, 0, 0.0, 0.3, 0.0, 0.0, 2); ShowSyncHudMsg(id, SyncHudObj, "Klasa : %s^nDoswiadczenie : %i / %i^nPoziom : %i^nPerk : %s", nazwy_klas[klasa_gracza[target]], doswiadczenie_gracza[target], PobierzDoswiadczeniePoziomu(poziom_gracza[target]), poziom_gracza[target], nazwy_perkow[perk_gracza[target]]); return PLUGIN_CONTINUE;2) Zamieniamy tą linijkę:
ShowSyncHudMsg(id, SyncHudObj, "Klasa : %s^nDoswiadczenie : %i / %i^nPoziom : %i^nPerk : %s", nazwy_klas[klasa_gracza[target]], doswiadczenie_gracza[target], PobierzDoswiadczeniePoziomu(poziom_gracza[target]), poziom_gracza[target], nazwy_perkow[perk_gracza[target]]);na tą:
ShowSyncHudMsg(id, SyncHudObj, "Klasa : %s^nDoswiadczenie : %i / %i^nPoziom : %i^nPerk : %s^nZdrowie : %d", nazwy_klas[klasa_gracza[target]], doswiadczenie_gracza[target], PobierzDoswiadczeniePoziomu(poziom_gracza[target]), poziom_gracza[target], nazwy_perkow[perk_gracza[target]], hp);3) Caly public z HP w HUD gdy żyjemy i gdy kogoś oglądamy powinien wyglądać tak:
public PokazInformacje(id) { id -= ZADANIE_POKAZ_INFORMACJE; if(!is_user_connected(id)) { remove_task(id+ZADANIE_POKAZ_INFORMACJE); return PLUGIN_CONTINUE; } if(!is_user_alive(id)) { new target = pev(id, pev_iuser2); new hp = get_user_health(target); if(!target) return PLUGIN_CONTINUE; set_hudmessage(255, 255, 255, 0.6, -1.0, 0, 0.0, 0.3, 0.0, 0.0, 2); ShowSyncHudMsg(id, SyncHudObj, "Klasa : %s^nDoswiadczenie : %i / %i^nPoziom : %i^nPerk : %s^n Zdrowie : %d", nazwy_klas[klasa_gracza[target]], doswiadczenie_gracza[target], PobierzDoswiadczeniePoziomu(poziom_gracza[target]), poziom_gracza[target], nazwy_perkow[perk_gracza[target]], hp); return PLUGIN_CONTINUE; } new hp = get_user_health(id); set_hudmessage(0, 255, 0, 0.02, 0.23, 0, 0.0, 0.3, 0.0, 0.0); ShowSyncHudMsg(id, SyncHudObj, "[Klasa : %s]^n[Doswiadczenie : %i / %i]^n[Poziom : %i]^n[Perk : %s]^n[Zdrowie : %d]", nazwy_klas[klasa_gracza[id]], doswiadczenie_gracza[id], PobierzDoswiadczeniePoziomu(poziom_gracza[id]), poziom_gracza[id], nazwy_perkow[perk_gracza[id]], hp); return PLUGIN_CONTINUE; }
Napisane przez CzarnaDupa w 05.04.2014 20:29
Napisane przez Ogen Dogen w 06.04.2014 12:30
set_task(600.0, "reklama", _, _, _, "b");
Odwołujesz się do funkcji "reklama" która nie istnieje , przez to plugin głupieje.
L 04/05/2014 - 20:23:53: [HAMSANDWICH] Function fwSpawn_Grawitacja not found. L 04/05/2014 - 20:23:53: [HAMSANDWICH] Function TakeDamage not found.
I z tego co widzę to masz ten sam problem w reszcie klas