Każdy plugin obciąża serwer. Nawet taki, który nic nie robi... Jak wrzucisz takich 500 pluginów to serwer zauważalnie zwolni, mimo że nic nie robią, tylko są
Witamy w Nieoficjalnym polskim support'cie AMX Mod X
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.
|
silva
Rejestracja: 03.10.2013Aktualnie: Nieaktywny
Poza forum Ostatnio: 09.12.2019 00:32
Statystyki
- Grupa: Użytkownik
- Całość postów: 182
- Odwiedzin: 7 242
- Tytuł: Profesjonalista
- Wiek: Wiek nie został ustalony
- Urodziny: Data urodzin nie została podana
-
Płeć
Mężczyzna
-
Lokalizacja
Podkarpacie
Narzędzia użytkownika
Ostatnio byli
#613777 Najlepszy gracz rundy
Napisane przez GwynBleidD w 09.02.2014 02:06
#613576 Jailbreak Pack Shop
Napisane przez 0-0-0 w 08.02.2014 17:05
Plugin dodaje sklep w którym możemy kupić rózne ulepszenia na serwer typu jailbreak.
W sklepie płacimy JBPackami które zdobywamy zabijając ct/tt. Jbpacki zapisywane są do bazy danych.
Sklep jest otwarty tylko przez 60 sekund po rozpoczęciu rundy (możliwość zmiany cvarem).
Screenshot
Komendy
say /sklep say_team /sklep Dla administratora (flaga A) jb_packgive <nazwa gracza <ilosc jbpacków>
Cvary
db_host //ip bazy danych db_user //nazwa uzytkownika db_pass //haslo db_database //nazwa bazy danych
jb_maxjp "30" //maksymalna ilosc jb packow jb_tt "1" //+jb packow za zabicie tt jb_ct "2" //+jb packow za zabicie ct jb_hs "1" //+jb packow za zabicie z headshotem jb_czas "60" //przez ile sklep ma byc czynny po rozpoczeciu rundy jb_zapis "1" //typ zapisu - 1 = sql, 2 = nvault jb_hud "0" //0 - off, 1 - status, 2 - hud
Natywy
get_user_jbpack(id) //zwraca ilosc jb packow gracza set_user_jbpack(id, wartosc) //ustawia ilosc jb packow graczowi
Instalacja
Instalacja standardowa
Jeżeli chcemy zmienić prefix edytujemy .sma
#define prefix "Sklep"
Download
jailbreak_jbpack.sma 13,55 KB 540 Ilość pobrań
jailbreak_jbpack.amxx
Najnowsza wersja z hudem:
#9646 Eventy
Napisane przez Miczu w 02.07.2008 15:13
Ps. podam tylko sprawdzone metody i nie będę przytaczal jakie sa bledne metody (szczegolnie nowa runda jest pare metod w tym 1 bledna, czesto stosowana).
Start mapy
plugin_init() { //code }Powyzsza funkcja jest tylko wywolywana po zmianie mapy (na samym jej poczatku).
Koniec mapy
plugin_end ( ) { //code }Powyzsza funkcja jest wywolywana przy zmianie mapy lub prawidlowym zamknieciu serwera. Prawdopodobnie nie wychwyci crasha.
Nowa Runda
#include <amxmodx> #include <amxmisc> public plugin_init() { register_event("HLTV", "Nowa_Runda", "a", "1=0", "2=0") } public Nowa_Runda() { //code }Nowa runda tym sposobem omija pierwsza runde - pierwsza po zmianie mapy.
#mozliwe problemy gdy w tym evencie np: operacje na graczu typu danie broni(potwierdzone)...
Poczatek Rundy
Poczatek rudny to jak sie freeze skonczy - mozna sie ruszac ;-)
#include <amxmodx> #include <amxmisc> public plugin_init() { register_logevent("Poczatek_Rundy", 2, "1=Round_Start") } public Poczatek_Rundy() { //code }
Koniec Rundy
Przeciwnik zabity/Bomba wybuchla/Bomba zostala rozbrojona/zakladnicy uwolnieni/minol czas rudny
#include <amxmodx> #include <amxmisc> public plugin_init() { register_logevent("Koniec_Rundy", 2, "1=Round_End") } public Koniec_Rundy() { //code }
Damage - obrazenia
#include <amxmodx> #include <amxmisc> public plugin_init() { register_event("Damage", "Damage", "b", "2!=0") } public Damage(id) { new vid = read_data(0) // vid == id new damage = read_data(2) new Origins[3] // Wspolrzedne gracza, granatu, obiektu wywolujacego obrazenia Origins[0] = read_data(4) Origins[1] = read_data(5) Origins[2] = read_data(6) new kid = get_user_attacker(id) // Gracz atakujacy //code }
DeathMsg - ktos umarl
#include <amxmodx> #include <amxmisc> public plugin_init() { register_event("DeathMsg", "DeathMsg", "a") } public DeathMsg() { new kid = read_data(1) //zabojca new vid = read_data(2) // ofiara new hs = read_data(3) // HeadShot (1 == true) new weapon[64] read_data(4,weapon,63) //krotka nazwa broni (bez weapon_ / CSW_ ) //code }kid i vid sa sobie rowne gdy zabije cie wlasna bron (granat) lub np. admin uzyje slay'a...
kid == 0 gdy np. spadniesz z wysokiej wysokosci...
CurWeapon - obecna bron
Wykrywa zmiane broni - takze gdy sie sawnujesz dostajesz nowa bron i funkcja tez jest wywolana.
#include <amxmodx> #include <amxmisc> public plugin_init() { register_event("CurWeapon","CurWeapon","be", "1=1") } public CurWeapon(id) { new wid = read_data(2) // Id broni new ammo = read_data(3) // liczba naboi w magazynku //code }
Noz, granaty itp. maja ammo = -1
Info-bronie
Z testow wynika, ze w/w event jest tez wywolywany po wystrzeleniu naboju (ammo sie zmienia) lub po przeladowaniu.
Podniesienie broni
Podniesie broni a takze kupienie. Na starcie rundy sie uruchomi gdy dostajemy noz i pistolet (2 razy). Jest wywolywany takze gdy kupimy cos, ale nie bedziemy mieli tego w rekach (np. granat).
#include <amxmodx> #include <amxmisc> public plugin_init() { register_event("WeapPickup", "WeapPickup", "b") } public WeapPickup(id) { new wid = read_data(1) // id broni //code }
Nie liczy podniesienia Shilda oraz kupienia defa, noktowizora czy kamizelki
Podniesienie amunicji
Jak kupujemy amunicje to clip daje nam wartosc ile nam przybylo. Jesli podniesiemy M4A1 co ma 24 w broni i 90 w zapasie to clip bedzie mial wartosc 90, a nie 114. Jak drop'niemy i podniesiemy wlasna bron to event nie zostanie wywolany.
#include <amxmodx> #include <amxmisc> public plugin_init() { register_event("AmmoPickup", "AmmoPickup", "b") } public AmmoPickup(id) { new aid = read_data(1) //id amunicji new clip = read_data(2) //ilosc naboi //code }
Amunicja
Aktualny stan amunicji w 'zapasie'. Jak kupujemy ammo to clip ma laczna wartosc naboi w magazynku. Jak podniesiemy po kims bron np. AK 25 i 90 w zapasie to clip wynosi 90.
Na poczatku rundy wszystkie typy naboi za wyjatkiem tych do ktorych mamy bron sa zerowane. Jak kupujemy granaty to clip ma wartosc rowna ilosci danego typu np. flash max 2...
#include <amxmodx> #include <amxmisc> public plugin_init() { register_event("AmmoX", "AmmoX", "b") } public AmmoX(id) { new aid = read_data(1) new clip = read_data(2) client_print(id,print_chat,"id %d aid %d clip %d",id,aid,clip) //code }
Wejscie na server
Juz widzisz mape ;-)
public client_putinserver(id){ //code }
Polaczenie z serwerem
Czyli gdy np. w konsoli napiszesz connect IP:PORT
public client_connect(id) { //code }
Rozlaczenie sie z serwerem
public client_disconnect(id) { //code }
Health - Zycie
#include <amxmodx> #include <amxmisc> public plugin_init() { register_event("Health", "Health", "be") } public Health(id) { new health = read_data(1) //code }
Money - zmiana w kasie
#include <amxmodx> #include <amxmisc> public plugin_init() { register_event("Money", "Money", "be") } public Money(id) { new Money = read_data(1) //code }
TeamInfo - informacjie o Teamie
Ogolny wyglad eventu:
#include <amxmodx> #include <amxmisc> public plugin_init() { register_event("TeamInfo","team_assign","a") } public team_assign() { new id = read_data(1) new Team[32] read_data(2,Team,31) //UNASSIGNED //TERRORIST //CT //SPECTATOR }
Ale trzeba sie tu pilnowac! Z moich badan wynika ze event jest wywolywany za kazdym spawnem i dodatkowo przy wyborze z menu teamu.
Jesli chcemy wykrywac autentyczna zmiane druzyny musimy zastosowac taki zabieg (chyba najoptymalniej i do tego czysto):
#include <amxmodx> #include <amxmisc> public plugin_init() { register_event("TeamInfo","team_assign","a") } public team_assign() { static old_team[33] new tid new id = read_data(1) new Team[32] read_data(2,Team,31) //UNASSIGNED //TERRORIST //CT //SPECTATOR if(equal(Team,"UNASSIGNED")) tid = 0 else if(equal(Team,"TERRORIST")) tid = 1 else if(equal(Team,"CT")) tid = 2 else if(equal(Team,"SPECTATOR")) tid = 3 if(old_team[id]==tid) return PLUGIN_CONTINUE //jesli druzyna sie nie zmienila to przerywamy event old_team[id] = tid //zapisujemy nowy team /*code //koniec code */ return PLUGIN_CONTINUE // skoro juz uzylismy returna to musimy tez na koniec go dac }
=================================================
Eventy wywolane przez:
register_logeventnie maja parametru id - a mowiac inaczej jak dodamy parametr id, to bedzie mial wartosc 0
=================================================
Flagi do eventow:
"a" - Global Event - wysylany do all graczy (mozliwy jest brak mozliwosci podpiecia id do eventu np. DeathMsg)
"b" - Event sent to a single target - do konkretnego gracza (zwiazany z pojedynczym graczem - demage)
"c" - Send only once when repeated to other players - tylko raz gdy jest powtarzany u innych graczy.
"d" - Only if sent to a dead player - tylko u martwych graczy
"e" - Only if sent to an alive player - tylko u zywych graczy ( przed wersja 1.80 jest bug, wiec i tak wypada sprawdzac is_user_alive(id) )
PS. Jak będę mial czas to dodam wiecej
PS2. Jak cos nie dziala to dajcie znac, bo nie wszystko mialem czas sprawdzic przed daniem na forum.
PS3. Jestem autorem tego poradnika i wolno tylko kopiowac za moja zgoda... Nie [you] nie mozesz kopiowac!
#579819 Generator klas- dodatki.
Napisane przez Hleb w 22.10.2013 21:24
#506360 WeaponsMod
Napisane przez glut w 25.01.2013 10:55
WeaponsMod
Udostępniam go dopiero teraz, ponieważ marnuje się na dysku a obiecałem.
Mod polega na zabijaniu przeciwników i zdobywaniu doświadczenia.
Czym większy level tym lepsza bron + 2 HP oraz wytrzymałości za poziom. (101 poziomów)
Zaczynamy z Glock18, a kończymy z M4A1,AK47,DEAGLE i wszystkie granaty.
Wpisz /menu aby zobaczyć MenuModa
Wpisz /sklep aby otworzyć sklep
Dla stałych graczy jest także vip. Ma on 2x większe doświadczenie za zabójstwo podłożenie paki itd....
SaveXP "1" // Czy exp ma sie zapisywac wm_kill "60" // ile expa za killa wm_kill_hs "80" // ile expa za killa hs wm_xp_paka "100" // ile expa za podlozenie i rozbrojenie wm_winner "50" // ile expa za wygrana runde
podstawowe
amxmodx amxmisc nvault fun strike enginepluginu
colorchat weapon
opis.txt do folderu cstrike
.sma do scripting
.amxx do plugins
Należy odblokować plugin restmenu.amxx w plugins.ini
I na serwerze zablokować wszystkie bronie
Wejdź na serwerze w amxmodmenu i ogranicz bronie...
Jeżeli ktoś chciałby do innego pluginu dodać dawanie expa w WeaponsModzie to proszę oto stock (Dziękuje benio101) za udostępnienie na swoim blogu) Jak mówiłem przyda mi się w miejscu
id -- id gracza(logiczne)
ammount -- ilosc
stock weaponsmod_give_xp(id, amount){
if(callfunc_begin("Give_Xp", "weaponsmod.amxx")==1){
callfunc_push_int(id);
callfunc_push_int(amount);
callfunc_end();
}
}
[success='Aktualizacje']Mod będzie aktualizowany proszę o propozycje[/success]
[info='Podziękowania']Dziękuje wszystkim za pomoc speedkill // za Pomoc w optymalizacji kodu i drobnych poprawkach + testy
benio101 // bez niego nie zaczął bym na pewno pisać pluginów
wiele wiele więcej ludzi // Za wsparcie i tyle dodatniej reputy [/info]
[info='ChangeLog']v1.0 -- Wydanie 10:55 25.01.2013
v1.1 -- Skrócenie kodu 13:24 29.01.2013
v1.2 -- Skrócenie jeszcze bardziej (^.^)
v1.3 -- Poprawa cały czas info że straciłeś lvl
v1.4 -- Poprawa zapisu Nvualt (Orgizmo dzięki za info)[/info]
Załączone pliki
-
opis + include.rar 2,28 KB 121 Ilość pobrań
-
weaponsmod.sma 18,17 KB 81 Ilość pobrań
weaponsmod.amxx -
weaponsmod1.3.sma 18,02 KB 76 Ilość pobrań
weaponsmod1.3.amxx -
weaponsmod1.4.sma 18,18 KB 122 Ilość pobrań
weaponsmod1.4.amxx
#547894 Diablo Mod 5.9l | edycja by góruś
Napisane przez góruś w 05.06.2013 21:35
Witam, mam dziś dla was moją edycje Diablo Mod. Oddaję ją z racji iż leży i się marnuję, a ja już z niej raczej nie będe korzystał, kiedyś było parę ofert za nie, wiele osób pytało mnie, czy jest gdzieś podobne w internecie. Stworzone ono została około 3 lata temu, ale wciąż ma swój urok i klimat przy expie około 10x.
Przejdę do rzeczy, w diablo znajdują się 3 rodzaje frakcji i 24 klasy, a dokładniej:
Herosi:
- Mag
- Mnich
- Paladyn
- Zabójca
- Nekromanta
- Barbarzyńca
- Ninja
- Łowca
Potwory:
- Andriel
- Duriel
- Mefisto
- Diablo
- Baal
- Izual
- Starożytny
- Nihlathak
Premium:
- Duch
- Pirat
- Złodziej
- Anioł
- Demon
- Saper
- Wampir
- Magik
Tak jak wcześniej wspomniałem, na serwerze jest około 180 itemów, nie pamiętam czy wszystkie są sprawne, w razie czego proszę zgłaszać w tym temacie, a poprawię. Dokładny opis klas i itemów znajdziecie w pliku .sma, bo nie ma sensu pisać posta o takiej długości.
Oprócz tego, znajdziecie w nim takie rzeczy jak:
- Sklep
- Energie - przychodzi co 5 sekund
- VIP
- Sklep vip
- Sklep za energie
- Sklep za słoto
- Poprawione wszystkie bugi
- FIX z mysql
9 statystyk:
- Inteligencja
- Siła
- Zręczność
- Zwinność
- Niewidzialność
- Skoczność
- Kasa
- Armor
- Regeneracja
Cvary
diablo_xpbonus 6 //Ilość expa za zabicie (standardowo ustawione na 7) diablo_xpbonus2 15 //Ilość expa za wykonania celu mapy (standardowo ustawione na 75) diablo_xpbonus3 10 //Okresla ile dosw. dostajesz za wygranie rundy przez twoj team diablo_durability 5 //Okresla ilosc tracenia jakosci za każdym razem,kiedy uderzy cie przeciwnik SaveXp 1 //1/0 zapisywanie doświadczenia diablo_dmg_exp 100 //za ile zabranego hp wrogowi dostaje sie 1 exp (domyslnie 20, 0 - off) diablo_sql_host localhost //host diablo_sql_user root //użytkownik bazy danych diablo_sql_pass root //hasło diablo_sql_database dbmod //nazwa bazy danych diablo_sql_table diablo_ //nazwa tabeli diablo_sql_save 0 // 0 - nick | 1 - IP | 2 - sid
Standardowa
Modele - ze standardowego diablo
Załączone pliki
-
DiabloGorus.sma 374,48 KB 459 Ilość pobrań
DiabloGorus.amxx -
chr_engine.inc 16,27 KB 290 Ilość pobrań
-
colorchat.inc 1,73 KB 263 Ilość pobrań
#610155 RoundSound by muchomorek
Napisane przez muchomorek w 28.01.2014 11:36
Witam dzisiaj zaprezentuję wam moją pierwszą paczkę roundsound więc proszę nie bić
Paczka zawiera największe Hity radio ESKA.
Ilość utworów: 10
Długość: od 15 do 18 sek.
Format; .mp3
Playlista:
1. Eminem - Monster ft. Rihanna 2. Avicii - Hey Brother 3. Lawson - Juliet 4. Martin Garrix & Jay Hardway - Wizard 5. RED LIPS feat. Roch -To co nam było 6. Fly Project - Toca Toca 7. Kim Cesarion - Undressed 8. Afrojack feat. Spree Wilson - The Spark 9. Pitbull feat. Ke$ha - Timber 10. Zedd feat. Hayley Williams of Paramore - Stay The Night
Download: http://www12.zippysh...76882/file.html
lub
Download: http://speedy.sh/2Kh...-muchomorek.rar
Miłego słuchania i zapraszam do oceny
#603284 Skrypty do pisania klas
Napisane przez RasiaQ w 09.01.2014 07:21
@up
Odporność na miny:
Biblioteki:
#include <hamsandwich> #include <fakemeta>
Zmienna:
new ma_klase[33];
W plugin_init() dodajemy:
RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
Jeśli nie mamy, to dodajemy:
public cod_class_enabled(id) { ma_klase[id] = true; } public cod_class_disabled(id) { ma_klase[id] = false; }
I na koniec .sma
public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits) { if(!ma_klase[this]) return HAM_IGNORED; new classname[10] pev(idinflictor, pev_classname, classname, 9); if(equal(classname, "mine")) return HAM_SUPERCEDE; return HAM_IGNORED; }
Nie sprawdzałem, ale zobacz.
HP za fraga:
Biblioteki:
#include <fun>
Zmienne
new ma_klase[33]; new MaxHP = xxxx; //Ile gracz moze miec maksymalnie HP
W plugin_init() rejestrujemy:
register_event("DeathMsg", "DeathMsg", "a");
Jeśli nie mamy, to dodajemy:
public cod_class_enabled(id) { ma_klase[id] = true; } public cod_class_disabled(id) { ma_klase[id] = false; }
I na koniec .sma
public DeathMsg() { new killer=read_data(1); new victim=read_data(2); if(is_user_alive(killer) && ma_klase[killer] && get_user_team(killer) != get_user_team(victim)) { Dajhp(killer, victim); } } public Dajhp(kid, vid) { set_user_health(kid, min(get_user_health(kid)+XX, MaxHP)); //Za XX wstawiamy ile HP ma dostać za fraga }
#593291 Skrypty do pisania klas
Napisane przez RasiaQ w 14.12.2013 15:43
Mógłbyś dodać jeszcze kilka rzeczy np.
No-recoil
Biblioteki:
#include <fakemeta>
Zmienne:
new ma_klase[33];
W plugin_init() rejestrujemy:
register_forward(FM_PlayerPreThink, "PreThink"); register_forward(FM_UpdateClientData, "UpdateClientData", 1)
Jeśli nie mamy, to dodajemy:
public cod_class_enabled(id) { ma_klase[id] = true; } public cod_class_disabled(id) { ma_klase[id] = false; }
I na koniec .sma
public PreThink(id) { if(ma_klase[id]) set_pev(id, pev_punchangle, {0.0,0.0,0.0}) } public UpdateClientData(id, sw, cd_handle) { if(ma_klase[id]) set_cd(cd_handle, CD_PunchAngle, {0.0,0.0,0.0}) }
Szansa na pojawienie się u wroga
Biblioteki:
#include <hamsandwich> #include <cstrike>
Zmienne:
new ma_klase[33];
W plugin_init() rejestrujemy:
RegisterHam(Ham_Spawn, "player", "Spawn", 1);
Jeśli nie mamy, to dodajemy:
public cod_class_enabled(id) { ma_klase[id] = true; } public cod_class_disabled(id) { ma_klase[id] = false; }
I na koniec .sma
public Spawn(id) { if(!is_user_alive(id)) return; if(!ma_klase[id]) return; if(random_num(1,5) == 1) { new CsTeams:team = cs_get_user_team(id); cs_set_user_team(id, (team == CS_TEAM_CT)? CS_TEAM_T: CS_TEAM_CT); ExecuteHam(Ham_CS_RoundRespawn, id); cs_set_user_team(id, team); } }
Ubranie wroga
Biblioteki:
#include <fakemeta>
Zmienne:
new ma_klase[33];
W plugin_init() rejestrujemy:
register_event("CurWeapon","CurWeapon","be", "1=1");
Jeśli nie mamy, to dodajemy
public cod_class_enabled(id) { ma_klase[id] = true; } public cod_class_disabled(id) { ma_klase[id] = false; }
I na koniec .sma
public CurWeapon(id) { new team = get_user_team(id) if(ma_klase[id] && team == 1) { cs_set_user_model(id, "sas"); } if(ma_klase[id] && team == 2) { cs_set_user_model(id, "arctic"); } return PLUGIN_CONTINUE; }
Widzisz wrogów na radarze
Biblioteki:
#include <engine>
Zmienne:
new ma_klase[33];
I pod zmiennymi:
new g_msgHostageAdd, g_msgHostageDel;
W plugin_init() rejestrujemy:
g_msgHostageAdd = get_user_msgid("HostagePos"); g_msgHostageDel = get_user_msgid("HostageK"); set_task (2.0,"radar_scan",_,_,_,"b");
Jeśli nie mamy, to dodajemy:
public cod_class_enabled(id) { ma_klase[id] = true; } public cod_class_disabled(id) { ma_klase[id] = false; }
I na koniec .sma:
public radar_scan(id) { new PlayerCoords[3]; for (new id=1; id<=32; id++) { if((!is_user_alive(id))||(!ma_klase[id])) continue; for (new i=1;i<=32;i++) { if(!is_user_alive(i) || get_user_team(i) == get_user_team(id)) continue; get_user_origin(i, PlayerCoords) message_begin(MSG_ONE_UNRELIABLE, g_msgHostageAdd, {0,0,0}, id) write_byte(id) write_byte(i) write_coord(PlayerCoords[0]) write_coord(PlayerCoords[1]) write_coord(PlayerCoords[2]) message_end() message_begin(MSG_ONE_UNRELIABLE, g_msgHostageDel, {0,0,0}, id) write_byte(i) message_end() } } }
#518667 Motto Plugin ala Tekstowy niesmiertelnik.
Napisane przez Droso w 23.02.2013 15:54
Jeśli chcesz urozmaicić serwer o dodatkowy bajer typu ala tekstowy nieśmiertelnik to oto on .
[Plugin] Pozwala on graczowi ustawić swoje motto przewodnie, które zostanie pokazane osobie, którą zabije.
Wyświetla się taki ColorChat (ss).
Swoje motto ustawiam przez komendę /motto.
/motto - Pozwala wpisać swoje motto.
Jeśli ktoś chce mieć też motto w HUD, albo żeby przy Spawnie pokazywało informację, że nie masz motta:
//#define SHOW_INFO 1 // usun // na poczatku aby plugin pokazywal info o komendzie /motto //#define HUD_MOTTO 1 // usun // na poczatku aby motto u zabitego pokazywalo tez w HUDOczywiście zmieniamy to w .sma i kompilujemy wrzucamy i gramy.
W pluginie umieściłem mały Anty-Bluzg, żeby zmniejszyć liczbę bluźnierstw.
CVARÓW - brak.
Warto wspomnieć, że po wpisaniu /motto pojawi się jakby na górze Say, ale pod nazwą motto, dalej chyba nie muszę tłumaczyć.
Załączone pliki
-
MottoPlugin.sma 2,37 KB 238 Ilość pobrań
MottoPlugin.amxx
#592675 Diablo Mod v9 Demonic by FORMOZA
Napisane przez FORMOZA w 12.12.2013 18:52
Witam,
Chciałbym wam przedstawić własną przeróbkę Diablo Moda z oryginalnego diablo Mortena ( nie wiem czy ktoś kojarzy go ale jak coś to tutaj https://forums.allie...ad.php?p=173021 ostatnia aktualizacja 10/01/2008)
W Diablo Demonic jest\są:
- 154 itemy +25 zmiennych itemów ( w tym jeden do testów ale wyłączony ze zdobywania ) Opisy są w oddzielnym pluginie można sprawdzić
- 19 Klas:
Klasy premium: Ariel, tylko nóż, niewidzialny i szybki Arachnid, mniej widoczny 1\1 z AWP Klasy Zwykłe: Sorcerer - Wieksze obrazenia itemami, Posiada Fireball Paladin - Bonus do Hp Monk - Dostaje wiecej doswiadczenia Assassin - Szybki, nie slychac jego krokow Barbarian - Zwraca Hp po zabiciu Necromancer - Zwraca zadane mu obrazenia. Potrafi wskrzeszac Ninja - Niewidzialny, ma tylko noz Amazonka - Ma kusze Mefisto - Ma dlugi noz, mniejsza widocznosc,+10hp Diablo - Dostaje Losowa bron na start Szkielet - Ma obrazenia zalezne od inteligence Dragonan - Odporny przed natychmiastowym zabiciem przez itemy Duchowny - 5-35hp,1/2 z AWP, Malo widoczny Lizardmen - Ma 1/2 Szans na respawn Juka - Ma 1/10 z kazdej broni Savages - Moze teleportowac sie nozem, int zwiesza odleglosc Meer - Multijump zalezny od inteligencji, posiada totem leczacy Terathan - Natychmiastowe zabicie z HE, bonus do inteligencji, kevlar na start Ophidian - Za przezycie ma 5000$ i losowy item, jesli go nie ma
W przyszłości:
- Dodanie standardowego systemu monet ( już zrobiony ale postanowiłem jeszcze go nie udostępniać w tej wersji) +(Dodany jako oddzielny plugin sys_coins.sma w wersji 0.5 Alpha do własnej edycji i testów )
- Dodanie systemu grup ( po części zrobiony, ale nie dodany w tej wersji ) +(Dodany jako oddzielny plugin sys_groups.sma i do diablo_addgr.sma w wersji 1.0 RC do własnej edycji i testów )
- Usprawnienie kodu (W trakcie realizacji )
- Dodanie opisu klas do pluginu items_desc.amxx +(Dodany plugin z opisami klas w wersji v2 item_desc_v2.sma)
- Zmiana modelu dragontaila na sprite
- Poprawa ewentualnych bugów, i informowanie mnie o nich za co dziękuje +(Naprawione działanie 1 itemu "Scroll Of Transcendence" )
- Myślę, że modyfikacja będzie rozwijana
- Utworzenie paczki perków do coda, z funkcjami nowych itemów tego Diablo Mod-a v9 ( Zastrzegam sobie prawo, do wyłącznego utworzenia ich ) +(W trakcie tworzenia perków 30%)
Na pytania chętnie odpowiem, oceniajcie
Ps. Wiem, że nie dorównam Diablo Darka
Załączone pliki
-
items_desc.sma 27,1 KB 351 Ilość pobrań
items_desc.amxx -
dbmod.sma 321,31 KB 432 Ilość pobrań
dbmod.amxx -
Diablo Install_9.zip 1,2 MB 1175 Ilość pobrań
-
sys_coins.sma 5,76 KB 329 Ilość pobrań
sys_coins.amxx -
sys_groups.sma 3,11 KB 338 Ilość pobrań
sys_groups.amxx -
item_desc_v2.sma 30,51 KB 328 Ilość pobrań
item_desc_v2.amxx -
diablo_addgr.sma 322,62 KB 507 Ilość pobrań
diablo_addgr.amxx
#594209 Perki powiększające magazynki
Napisane przez Hleb w 17.12.2013 22:02
Perki te opracowano na podstawie pluginu Weapon MaxClip 0.3.0 autorstwa ConnorMcLeod
http://forums.allied...ad.php?p=728613
dlatego autora tego pluginu dopisuję też jako autora tychże perków.
Przedstawiam wam perki umożliwiające posiadanie w broniach więcej magazynków.
Perki zostały sklasyfikowe w/g typów broni (pistolety, SMG, strzelby, karabiny szturmowe, karabiny snajperskie). Pominięty został M249, ponieważ ma tyle magazynków, ze stworzenie perku dla NIEGO uznałem za zbędny. Stąd ten podział, ponieważ trudno wyobrazić sobie np. AWP z 50 nabojami , albo deagla z 50 nabojami, albo m4 z "tylko" 31 nabojami .
Perk dla Pistoletów
Nazwa: Krótki Magazynek
Opis: Dostajesz krótki magazynek, dzięki czemu masz dodatkowe 5-13 naboi w pistoletach.
Perk dla Strzelb
Nazwa: Kuta Komora Strzelby (brak pomysłu na nazwę )
Opis: Komora strzelby jest kuta, dzięki czemu pomieścisz dodatkowe 7-13 naboi w strzelbach.
Perk dla SMG
Nazwa: Długi Magazynek
Opis: Dostajesz długi magazynek, dzięki czemu masz dodatkowe 10-30 naboi w smg.
Perk dla Karabinów Szturmowych
Nazwa: Magazynek Bębnowy
Opis: Dostajesz magazynek bębnowy, dzięki czemu masz dodatkowe 30-60 naboi w karabinach szturmowych.
Perk dla Karabinów Snajperskich
Nazwa: Kwadratowy Magazynek (też brak pomysłu na nazwę )
Opis: Dostajesz kwadratowy magazynek, dzięki czemu masz dodatkowe 5-15 naboi w karabinach snajperskich.
Perki powyższe (zwłaszcza te przeznaczone dla strzelb) zostały testowanie pod kątem
-dropu perku w sytuacji, gdy w ammo było więcej magazynku niż miało domyślnie.
-zmiany klasy na inną (inna bron z tej samej klasyfikacji).
-errorlogów
Gdy zmienimy klase na inna, tym samym broń na inna z tej samej klasyfikacji, otrzymamy broń z domyślnym magazynkiem, jednakże możemy przeładować do ilosci dodanej przez perk.
Po za tym, nie wykryłem nic niepokojącego, oczywiście jeśli WY wykryjecie błędy, piszcie.
Zalecam zwiększenie bpammo, wystarczy zedytować pewną tablicę globalną w silniku CODa, a mianowicie
new const maxAmmo[31] = {0, 52, 0, 90, 1, 31, 1, 100, 90, 1, 120, 100, 100, 90, 90, 90, 100, 120, 30, 120, 200, 31, 90, 120, 90, 2, 35, 90, 90,0, 100};
.
Nie zrobię klasy z dodatkowym ammo, bo jak wiadomo, każdy ma różny gust, jeden by chciał np M4A1 z dodatkowymi 40 nabojami, a drugi deagle z dodatkowymi 13 nabojami.
Pistolety
codperk_maxclip_pistol.sma 5,89 KB 215 Ilość pobrań
codperk_maxclip_pistol.amxx
Strzelby
codperk_maxclip_shotgun.sma 8,91 KB 209 Ilość pobrań
codperk_maxclip_shotgun.amxx
SMG
codperk_maxclip_smg.sma 5,57 KB 199 Ilość pobrań
codperk_maxclip_smg.amxx
Karabiny Szturmowe
codperk_maxclip_rifle.sma 5,95 KB 216 Ilość pobrań
codperk_maxclip_rifle.amxx
Karabiny Snajperskie
codperk_maxclip_sniper.sma 5,58 KB 190 Ilość pobrań
codperk_maxclip_sniper.amxx
#492337 Skrypty do pisania klas
Napisane przez MAGNET w 21.12.2012 21:39
Witam
Jest to mój pierwszy post w tym dziale, wiec proszę o wyrozumiałość
Krotki wstęp:
Ostatnio miałem problem z szukaniem skryptów do pisania klas, wiec zapisywałem je sobie w jednym miejscu. Tak wyszło sporo dodatkow do klas, które postanowiłem opublikować w całości.
W przyszłości też będę robił podobne tematy
A więc zaczynajmy:
1.Przerabianie klasy na premium:
Biblioteki:
#include <engine>
#include <ColorChat>
Szukamy publica:
public cod_class_enabled(id)
ma_klase[id] = true;
I zmieniamy go na:
public cod_class_enabled(id)
{
ColorChat(id, RED, "^x04Klasa^x03 %s^x04 By^x01 amxx.pl", nazwa); //Gdy gracz nie ma flagi wyświetli mu komunikat
if(!(get_user_flags(id) & ADMIN_LEVEL_H)) //FLAGA
{
ColorChat(id, RED, "^x03[%s]^x04 Jest^x03 klasa premium", nazwa) //Znowu info ze przykładowa klasa jest PREMIUM
return COD_STOP;
}
ma_klase[id] = true;
return COD_CONTINUE;
}
2. Niewidzialność postaci:
Do bibliotek dodajemy:
#include <engine>
Potem w zmiennych:
new ma_klase[33];
i w publikach dodajemy takie cos:
public cod_class_enabled(id)
{
set_rendering(id,kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 1); ///tu zmieniasz stopien niewidzialnosci
ma_klase[id] = true;
}
public cod_class_disabled(id)
{
set_rendering(id,kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 255);
ma_klase[id] = false;
}
3. Grawitacja:
Biblioteki:
#include <fun>
Zmienne:
new ma_klase[33];
I jak nie mamy tych 2 publicow to dodajemy(a jak mamy to podmieniamy):
public cod_class_enabled(id){
ma_klase[id] = true;
set_user_gravity(id, 0.5)///Tutaj wartość jaką chcecie(1.0 - normalny skok)
}
public cod_class_disabled(id)
{
ma_klase[id] = false;
set_user)gravity(id) = false;
}
4. Multijump:
Biblioteki:
#include <fakemeta>
Zmienne:
new skoki[33];
new ma_klase[33];
Rejestrujemy:
register_forward(FM_CmdStart, "fwCmdStart_MultiJump");
Dodajemy publiki cod_class_enabled/disabled, jesli ich nie macie:
public cod_class_enabled(id)
{
ma_klase[id] = true;
}
public cod_class_disabled(id)
{
ma_klase[id] = false;
}
I na koncu sma:
public fwCmdStart_MultiJump(id, uc_handle)
{
if(!is_user_alive(id) || !ma_klase[id])
return FMRES_IGNORED;
new flags = pev(id, pev_flags);
if((get_uc(uc_handle, UC_Buttons) & IN_JUMP) && !(flags & FL_ONGROUND) && !(pev(id, pev_oldbuttons) & IN_JUMP) && skoki[id])
{
skoki[id]--;
new Float:velocity[3];
pev(id, pev_velocity,velocity);
velocity[2] = random_float(265.0,285.0);
set_pev(id, pev_velocity,velocity);
}
else if(flags & FL_ONGROUND)
skoki[id] = 3;///Tu zmieniamy ilosc skokow
return FMRES_IGNORED;
}
5. BH
Biblioteki:
#include <fakemeta>
Zmienne:
new ma_klase[33];
Rejestrujemy:
register_forward(FM_PlayerPreThink, "fwPrethink_AutoBH");
Jak nie mamy cod_class_enabled_disabled, to dodajemy:
public cod_class_enabled(id)
{
ma_klase[id] = true;
}
public cod_class_disabled(id)
{
ma_klase[id] = false;
}
I na koncu sma:
public fwPrethink_AutoBH(id)
{
if(!ma_klase[id])
return PLUGIN_CONTINUE
if (pev(id, pev_button) & IN_JUMP) {
new flags = pev(id, pev_flags)
if (flags & FL_WATERJUMP)
return FMRES_IGNORED;
if ( pev(id, pev_waterlevel) >= 2 )
return FMRES_IGNORED;
if ( !(flags & FL_ONGROUND) )
return FMRES_IGNORED;
new Float:velocity[3];
pev(id, pev_velocity, velocity);
velocity[2] += 250.0;
set_pev(id, pev_velocity, velocity);
set_pev(id, pev_gaitsequence, 6);
}
return FMRES_IGNORED;
}
6. Cichy bieg:
Rejestrujemy bibliotekę:
#include <fun>
jak przedtem - enabled/disabled
public cod_class_enabled(id){
set_user_footsteps(id, 1);}
{
public cod_class_disabled(id){
set_user_footsteps(id, 0);}
7. Exp za fraga:
Biblioteki:
#include <fun>
Zmienne:
new bool:ma_klase[33];
Rejestrujemy:
register_event("DeathMsg", "Death", "ade");
cod_class_enabled/disabled, tak jak przedtem
I na koncu sma:
public Death(id) //Oto nasz event
{
new attacker = read_data(1);
if(!is_user_connected(attacker))
return PLUGIN_CONTINUE;
if(!ma_klase[attacker])
return PLUGIN_CONTINUE;
if(get_user_team(id) != get_user_team(attacker))
cod_set_user_xp(id, cod_get_user_xp(id)+20); //wartosc 20 zmieniamy (Tyle dodatkowego expa)
return PLUGIN_CONTINUE;
8. Unlimited multijump:
Biblioteki:
#include <fakemeta>
Zmienne:
[sma[new bool:ma_klase[33]
new skoki[33];[/sma]
Rejestrujemy:
register_forward(FM_CmdStart, "fwCmdStart_MultiJump");
cod_class_enabled/disabled:
public cod_class_enabled(id, wartosc)
{
skoki[id] = -1
ma_klase[id] = true;
}
public cod_class_disabled(id)
{
skoki[id] = 0
ma_klase[id] = false;
}
I na koncu sma:
public fwCmdStart_MultiJump(id, uc_handle)
{
if(!is_user_alive(id) || !ma_klase[id])
return FMRES_IGNORED;
new flags = pev(id, pev_flags);
if((get_uc(uc_handle, UC_Buttons) & IN_JUMP) && !(flags & FL_ONGROUND) && !(pev(id, pev_oldbuttons) & IN_JUMP) && skoki[id])
{
skoki[id]--;
new Float:velocity[3];
pev(id, pev_velocity,velocity);
velocity[2] = random_float(265.0,285.0);
set_pev(id, pev_velocity,velocity);
}
else if(flags & FL_ONGROUND)
skoki[id] = -1;
return FMRES_IGNORED;
}
9. Nie zabiera dmg po upadku:
Biblioteki:
#include <engine>
pod includami:
#define FALL_VELOCITY 350.0
Zmienne:
new bool:ma_klase[33];
new bool:falling[33];
cod_class_enabled/disabled jak przedtem
I na koncu sma:
public client_PreThink(id) {
if(ma_klase[id] && is_user_alive(id) && is_user_connected(id))
{
if(entity_get_float(id, EV_FL_flFallVelocity) >= FALL_VELOCITY) {
falling[id] = true;
}
else
{
falling[id] = false;
}
}
}
public client_PostThink(id) {
if(ma_klase[id] && is_user_alive(id) && is_user_connected(id))
{
if(falling[id]) {
entity_set_int(id, EV_INT_watertype, -3);
}
}
10. Niewidzialnosc, gdy sie nie ruszasz:
#include <engine>
#include <fakemeta>
Zmienne:
new ma_klase[33];
W plugin_init:
register_forward(FM_CmdStart, "CmdStart");
Jeśli nie mamy, to dodajemy
public cod_class_enabled(id)
{
ma_klase[id] = true;
}
public cod_class_disabled(id)
{
ma_klase[id] = false;
set_rendering(id,kRenderFxGlowShell,0,0,0 ,kRenderTransAlpha, 255);
}
I na koniec .sma
public CmdStart(id, uc)
{
if(!is_user_alive(id))
return FMRES_IGNORED;
if(ma_perk[id])
{
new Float:fmove, Float:smove;
get_uc(uc, UC_ForwardMove, fmove);
get_uc(uc, UC_SideMove, smove);
if(fmove == 0.0 && smove == 0.0)
set_rendering(id,kRenderFxGlowShell,0,0,0 ,kRenderTransAlpha, 10); // tu ustawiamy niewidke za te 10
else
set_rendering(id,kRenderFxGlowShell,0,0,0 ,kRenderTransAlpha, 255);
}
return FMRES_IGNORED;
}
by sharkowy
11. 1/x na odbicie pocisku:
Biblioteki:
#include <hamsandwich>
Zmienne:
new bool:ma_klase[33];
Rejestrujemy:
RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
enabled/disabled jak przedtem
I na koncu sma:
public TakeDamage(this, idinflictor, idattacker, Float:damage,
damagebits)
{
if(!is_user_connected(idattacker))
return HAM_IGNORED;
if(!ma_klase[this])
return HAM_IGNORED;
if(random(10))//tu zmieniasz 10 (teraz jest 1/10)
return HAM_IGNORED;
cod_inflict_damage(this, idattacker, damage, 0.0, idinflictor,
damagebits);
return HAM_SUPERCEDE;
}
12. Lina spidermana:
Biblioteki:
#include <fakemeta>
#include <cstrike>
#include <engine>
#include <codmod>
#include <xs>
Pod includami:
#define PLUGIN "Spiderman"
#define VERSION "1.0"
#define AUTHOR "RPK. Shark & cypis"///to ich autorstwa
#define message_begin_f(%1,%2,%3,%4) engfunc(EngFunc_MessageBegin,
%1, %2, %3, %4)
#define write_coord_f(%1) engfunc(EngFunc_WriteCoord, %1)
Zmienne:
//Cvars
new pThrowSpeed, pSpeed, pWidth, pSound, pColor
new pInterrupt, pHookSky, pOpenDoors, pPlayers
new pUseButtons, pHostage, pWeapons, pInstant, pHookNoise
// Sprite
new sprBeam
// Players hook entity
new Hook[33]
// MaxPlayers
new gMaxPlayers
// some booleans
new bool:gHooked[33]
new bool:canThrowHook[33]
// Player Spawn
new bool:gRestart[33] = {false, ...}
new bool:gUpdate[33] = {false, ...}
Rejestrujemy:
register_event("HLTV", "round_bstart", "a", "1=0", "2=0")
register_event("TextMsg", "Restart", "a",
"2=#Game_will_restart_in")
register_clcmd("fullupdate", "Update")
register_event("ResetHUD", "ResetHUD", "b")
pThrowSpeed = register_cvar("sv_hookthrowspeed", "1000")
pSpeed = register_cvar("sv_hookspeed", "300")
pWidth = register_cvar("sv_hookwidth", "32")
pSound = register_cvar("sv_hooksound", "1")
pColor = register_cvar("sv_hookcolor", "1")
pPlayers = register_cvar("sv_hookplayers", "0")
pInterrupt = register_cvar("sv_hookinterrupt", "0")
pHookSky = register_cvar("sv_hooksky", "0")
pOpenDoors = register_cvar("sv_hookopendoors", "1")
pUseButtons = register_cvar("sv_hookusebuttons", "1")
pHostage = register_cvar("sv_hookhostflollow", "1")
pWeapons = register_cvar("sv_hookpickweapons", "1")
pInstant = register_cvar("sv_hookinstant", "0")
pHookNoise = register_cvar("sv_hooknoise", "0")
register_forward(FM_Touch, "fwTouch")
gMaxPlayers = get_maxplayers()
Potem publika:
public plugin_precache()
{
// Hook Model
engfunc(EngFunc_PrecacheModel, "models/rpgrocket.mdl")
// Hook Beam
sprBeam = engfunc(EngFunc_PrecacheModel,
"sprites/zbeam4.spr")
// Hook Sounds
engfunc(EngFunc_PrecacheSound, "weapons/xbow_hit1.wav") //
good hit
engfunc(EngFunc_PrecacheSound, "weapons/xbow_hit2.wav") //
wrong hit
engfunc(EngFunc_PrecacheSound, "weapons/xbow_hitbod1.wav")
// player hit
engfunc(EngFunc_PrecacheSound, "weapons/xbow_fire1.wav")
// deploy
}
new ma_klasa[33];
cod_class_enabled/disabled jak przedtem
I na koncu sma:
public client_PreThink(id)
{
if(is_user_alive(id))
{
if(ma_klasa[id])
{
if(pev(id, pev_button) & IN_USE)
{
if(canThrowHook[id] &&
!gHooked[id])
{
throw_hook(id)
}
return PLUGIN_HANDLED
}
else
del_hook(id)
}
}
return PLUGIN_HANDLED
}
public del_hook(id)
{
// Remove players hook
if (!canThrowHook[id])
remove_hook(id)
return PLUGIN_HANDLED
}
public round_bstart()
{
for (new i = 1; i <= gMaxPlayers; i++)
{
if (is_user_connected(i))
{
if(!canThrowHook[i])
remove_hook(i)
}
}
}
public Restart()
{
for (new id = 0; id < gMaxPlayers; id++)
{
if (is_user_connected(id))
gRestart[id] = true
}
}
public Update(id)
{
if (!gUpdate[id])
gUpdate[id] = true
return PLUGIN_CONTINUE
}
public ResetHUD(id)
{
if (gRestart[id])
{
gRestart[id] = false
return
}
if (gUpdate[id])
{
gUpdate[id] = false
return
}
if (gHooked[id])
{
remove_hook(id)
}
}
public fwTouch(ptr, ptd)
{
if (!pev_valid(ptr))
return FMRES_IGNORED
new id = pev(ptr, pev_owner)
// Get classname
static szPtrClass[32]
pev(ptr, pev_classname, szPtrClass, charsmax(szPtrClass))
if (equali(szPtrClass, "Hook"))
{
static Float:fOrigin[3]
pev(ptr, pev_origin, fOrigin)
if (pev_valid(ptd))
{
static szPtdClass[32]
pev(ptd, pev_classname, szPtdClass,
charsmax(szPtdClass))
if (!get_pcvar_num(pPlayers) &&
/*equali(szPtdClass, "player")*/ is_user_alive(ptd))
{
// Hit a player
if (get_pcvar_num(pSound))
emit_sound(ptr,
CHAN_STATIC, "weapons/xbow_hitbod1.wav", 1.0, ATTN_NORM, 0,
PITCH_NORM)
remove_hook(id)
return FMRES_HANDLED
}
else if (equali(szPtdClass,
"hostage_entity"))
{
// Makes an hostage follow
if (get_pcvar_num(pHostage) &&
get_user_team(id) == 2)
{
//cs_set_hostage_foll(ptd,
(cs_get_hostage_foll(ptd) == id) ? 0 : id)
// With the use function
we have the sounds!
dllfunc(DLLFunc_Use, ptd,
id)
}
if (!get_pcvar_num(pPlayers))
{
if(get_pcvar_num(pSound))
emit_sound(ptr,
CHAN_STATIC, "weapons/xbow_hitbod1.wav", 1.0, ATTN_NORM, 0,
PITCH_NORM)
remove_hook(id)
}
return FMRES_HANDLED
}
else if (get_pcvar_num(pOpenDoors) &&
equali(szPtdClass, "func_door") || equali(szPtdClass,
"func_door_rotating"))
{
// Open doors
// Double doors tested in de_nuke
and de_wallmart
static szTargetName[32]
pev(ptd, pev_targetname,
szTargetName, charsmax(szTargetName))
if (strlen(szTargetName) > 0)
{
static ent
while ((ent =
engfunc(EngFunc_FindEntityByString, ent, "target", szTargetName))
> 0)
{
static
szEntClass[32]
pev(ent,
pev_classname, szEntClass, charsmax(szEntClass))
if
(equali(szEntClass, "trigger_multiple"))
{
dllfunc(DLLFunc_Touch, ent, id)
goto
stopdoors // No need to touch anymore
}
}
}
// No double doors.. just touch it
dllfunc(DLLFunc_Touch, ptd, id)
stopdoors:
}
else if (get_pcvar_num(pUseButtons) &&
equali(szPtdClass, "func_button"))
{
if (pev(ptd, pev_spawnflags) &
SF_BUTTON_TOUCH_ONLY)
dllfunc(DLLFunc_Touch,
ptd, id) // Touch only
else
dllfunc(DLLFunc_Use, ptd,
id) // Use Buttons
}
}
// If cvar sv_hooksky is 0 and hook is in the sky
remove it!
new iContents = engfunc(EngFunc_PointContents,
fOrigin)
if (!get_pcvar_num(pHookSky) && iContents ==
CONTENTS_SKY)
{
if(get_pcvar_num(pSound))
emit_sound(ptr, CHAN_STATIC,
"weapons/xbow_hit2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
remove_hook(id)
return FMRES_HANDLED
}
// Pick up weapons..
if (get_pcvar_num(pWeapons))
{
static ent
while ((ent =
engfunc(EngFunc_FindEntityInSphere, ent, fOrigin, 15.0)) > 0)
{
static szentClass[32]
pev(ent, pev_classname,
szentClass, charsmax(szentClass))
if (equali(szentClass,
"weaponbox") || equali(szentClass, "armoury_entity"))
dllfunc(DLLFunc_Touch,
ent, id)
}
}
// Player is now hooked
gHooked[id] = true
// Play sound
if (get_pcvar_num(pSound))
emit_sound(ptr, CHAN_STATIC,
"weapons/xbow_hit1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
// Make some sparks :D
message_begin_f(MSG_BROADCAST, SVC_TEMPENTITY,
fOrigin, 0)
write_byte(9) // TE_SPARKS
write_coord_f(fOrigin[0]) // Origin
write_coord_f(fOrigin[1])
write_coord_f(fOrigin[2])
message_end()
// Stop the hook from moving
set_pev(ptr, pev_velocity, Float:{0.0, 0.0, 0.0})
set_pev(ptr, pev_movetype, MOVETYPE_NONE)
//Task
if (!task_exists(id + 856))
{
static TaskData[2]
TaskData[0] = id
TaskData[1] = ptr
gotohook(TaskData)
set_task(0.1, "gotohook", id + 856,
TaskData, 2, "b")
}
}
return FMRES_HANDLED
}
public hookthink(param[])
{
new id = param[0]
new HookEnt = param[1]
if (!is_user_alive(id) || !pev_valid(HookEnt) ||
!pev_valid(id))
{
remove_task(id + 890)
return PLUGIN_HANDLED
}
static Float:entOrigin[3]
pev(HookEnt, pev_origin, entOrigin)
// If user is behind a box or something.. remove it
// only works if sv_interrupt 1 or higher is
if (get_pcvar_num(pInterrupt))
{
static Float:usrOrigin[3]
pev(id, pev_origin, usrOrigin)
static tr
engfunc(EngFunc_TraceLine, usrOrigin, entOrigin,
1, -1, tr)
static Float:fFraction
get_tr2(tr, TR_flFraction, fFraction)
if (fFraction != 1.0)
remove_hook(id)
}
// If cvar sv_hooksky is 0 and hook is in the sky remove
it!
new iContents = engfunc(EngFunc_PointContents, entOrigin)
if (!get_pcvar_num(pHookSky) && iContents == CONTENTS_SKY)
{
if(get_pcvar_num(pSound))
emit_sound(HookEnt, CHAN_STATIC,
"weapons/xbow_hit2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
remove_hook(id)
}
return PLUGIN_HANDLED
}
public gotohook(param[])
{
new id = param[0]
new HookEnt = param[1]
if (!is_user_alive(id) || !pev_valid(HookEnt) ||
!pev_valid(id))
{
remove_task(id + 856)
return PLUGIN_HANDLED
}
// If the round isnt started velocity is just 0
static Float:fVelocity[3]
fVelocity = Float:{0.0, 0.0, 1.0}
// If the round is started and player is hooked we can set
the user velocity!
if (gHooked[id])
{
static Float:fHookOrigin[3], Float:fUsrOrigin[3],
Float:fDist
pev(HookEnt, pev_origin, fHookOrigin)
pev(id, pev_origin, fUsrOrigin)
fDist = vector_distance(fHookOrigin, fUsrOrigin)
if (fDist >= 30.0)
{
new Float:fSpeed = get_pcvar_float(pSpeed)
fSpeed *= 0.52
fVelocity[0] = (fHookOrigin[0] -
fUsrOrigin[0]) * (2.0 * fSpeed) / fDist
fVelocity[1] = (fHookOrigin[1] -
fUsrOrigin[1]) * (2.0 * fSpeed) / fDist
fVelocity[2] = (fHookOrigin[2] -
fUsrOrigin[2]) * (2.0 * fSpeed) / fDist
}
}
// Set the velocity
set_pev(id, pev_velocity, fVelocity)
return PLUGIN_HANDLED
}
public throw_hook(id)
{
// Get origin and angle for the hook
static Float:fOrigin[3], Float:fAngle[3],Float:fvAngle[3]
static Float:fStart[3]
pev(id, pev_origin, fOrigin)
pev(id, pev_angles, fAngle)
pev(id, pev_v_angle, fvAngle)
if (get_pcvar_num(pInstant))
{
get_user_hitpoint(id, fStart)
if (engfunc(EngFunc_PointContents, fStart) !=
CONTENTS_SKY)
{
static Float:fSize[3]
pev(id, pev_size, fSize)
fOrigin[0] = fStart[0] +
floatcos(fvAngle[1], degrees) * (-10.0 + fSize[0])
fOrigin[1] = fStart[1] +
floatsin(fvAngle[1], degrees) * (-10.0 + fSize[1])
fOrigin[2] = fStart[2]
}
else
xs_vec_copy(fStart, fOrigin)
}
// Make the hook!
Hook[id] = engfunc(EngFunc_CreateNamedEntity,
engfunc(EngFunc_AllocString, "info_target"))
if (Hook[id])
{
// Player cant throw hook now
canThrowHook[id] = false
static const Float:fMins[3] = {-2.840000,
-14.180000, -2.840000}
static const Float:fMaxs[3] = {2.840000, 0.020000,
2.840000}
//Set some Data
set_pev(Hook[id], pev_classname, "Hook")
engfunc(EngFunc_SetModel, Hook[id],
"models/rpgrocket.mdl")
engfunc(EngFunc_SetOrigin, Hook[id], fOrigin)
engfunc(EngFunc_SetSize, Hook[id], fMins, fMaxs)
//set_pev(Hook[id], pev_mins, fMins)
//set_pev(Hook[id], pev_maxs, fMaxs)
set_pev(Hook[id], pev_angles, fAngle)
set_pev(Hook[id], pev_solid, 2)
set_pev(Hook[id], pev_movetype, 5)
set_pev(Hook[id], pev_owner, id)
//Set hook velocity
static Float:fForward[3], Float:Velocity[3]
new Float:fSpeed = get_pcvar_float(pThrowSpeed)
engfunc(EngFunc_MakeVectors, fvAngle)
global_get(glb_v_forward, fForward)
Velocity[0] = fForward[0] * fSpeed
Velocity[1] = fForward[1] * fSpeed
Velocity[2] = fForward[2] * fSpeed
set_pev(Hook[id], pev_velocity, Velocity)
// Make the line between Hook and Player
message_begin_f(MSG_BROADCAST, SVC_TEMPENTITY,
Float:{0.0, 0.0, 0.0}, 0)
if (get_pcvar_num(pInstant))
{
write_byte(1) // TE_BEAMPOINT
write_short(id) // Startent
write_coord_f(fStart[0]) // End pos
write_coord_f(fStart[1])
write_coord_f(fStart[2])
}
else
{
write_byte(8) // TE_BEAMENTS
write_short(id) // Start Ent
write_short(Hook[id]) // End Ent
}
write_short(sprBeam) // Sprite
write_byte(1) // StartFrame
write_byte(1) // FrameRate
write_byte(600) // Life
write_byte(get_pcvar_num(pWidth)) // Width
write_byte(get_pcvar_num(pHookNoise)) // Noise
// Colors now
if (get_pcvar_num(pColor))
{
if (get_user_team(id) == 1) // Terrorist
{
write_byte(255) // R
write_byte(0) // G
write_byte(0) // B
}
#if defined _cstrike_included
else if(cs_get_user_vip(id)) // vip for
cstrike
{
write_byte(0) // R
write_byte(255) // G
write_byte(0) // B
}
#endif // _cstrike_included
else if(get_user_team(id) == 2) // CT
{
write_byte(0) // R
write_byte(0) // G
write_byte(255) // B
}
else
{
write_byte(255) // R
write_byte(255) // G
write_byte(255) // B
}
}
else
{
write_byte(255) // R
write_byte(255) // G
write_byte(255) // B
}
write_byte(192) // Brightness
write_byte(0) // Scroll speed
message_end()
if (get_pcvar_num(pSound) &&
!get_pcvar_num(pInstant))
emit_sound(id, CHAN_BODY,
"weapons/xbow_fire1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_HIGH)
static TaskData[2]
TaskData[0] = id
TaskData[1] = Hook[id]
set_task(0.1, "hookthink", id + 890, TaskData, 2,
"b")
}
else
client_print(id, print_chat, "Can't create hook")
}
public remove_hook(id)
{
//Player can now throw hooks
canThrowHook[id] = true
// Remove the hook if it is valid
if (pev_valid(Hook[id]))
engfunc(EngFunc_RemoveEntity, Hook[id])
Hook[id] = 0
// Remove the line between user and hook
if (is_user_connected(id))
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY,
{0,0,0}, id)
write_byte(99) // TE_KILLBEAM
write_short(id) // entity
message_end()
}
// Player is not hooked anymore
gHooked[id] = false
return 1
}
// Stock by Chaosphere
stock get_user_hitpoint(id, Float:hOrigin[3])
{
if (!is_user_alive(id))
return 0
static Float:fOrigin[3], Float:fvAngle[3],
Float:fvOffset[3], Float:fvOrigin[3], Float:feOrigin[3]
static Float:fTemp[3]
pev(id, pev_origin, fOrigin)
pev(id, pev_v_angle, fvAngle)
pev(id, pev_view_ofs, fvOffset)
xs_vec_add(fOrigin, fvOffset, fvOrigin)
engfunc(EngFunc_AngleVectors, fvAngle, feOrigin, fTemp,
fTemp)
xs_vec_mul_scalar(feOrigin, 8192.0, feOrigin)
xs_vec_add(fvOrigin, feOrigin, feOrigin)
static tr
engfunc(EngFunc_TraceLine, fvOrigin, feOrigin, 0, id, tr)
get_tr2(tr, TR_vecEndPos, hOrigin)
//global_get(glb_trace_endpos, hOrigin)
return 1
}
stock statusMsg(id, szMsg[], {Float,_}:...)
{
static iStatusText
if (!iStatusText)
iStatusText = get_user_msgid("StatusText")
static szBuffer[512]
vformat(szBuffer, charsmax(szBuffer), szMsg, 3)
message_begin((id == 0) ? MSG_ALL : MSG_ONE, iStatusText,
_, id)
write_byte(0) // Unknown
write_string(szBuffer) // Message
message_end()
return 1
}
13. Dodatkowe dmg:
Biblioteki:
#include <hamsandwich>
Pod includami:
#define DMG_BULLET (1<<1)
Rejestrujemy:
RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
I na koncu sma:
public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
if(!is_user_connected(idattacker))
return HAM_IGNORED;
if(!ma_klase[idattacker])
return HAM_IGNORED;
if(get_user_team(this) != get_user_team(idattacker) && get_user_weapon(idattacker) == CSW_AK47 && damagebits & DMG_BULLET)
cod_inflict_damage(idattacker, this, 5.0, 0.0, idinflictor, damagebits);
return HAM_IGNORED;
}
CSW_AK47 - tutaj sobie zmieniamy na jaką broń chcemy
cod_inflict_damage(idattacker, this, 5.0, 0.0, idinflictor, damagebits);
Wartość 5.0 to dodatkowe dmg, a 0.0 to współczynnik inteligencji. Przykład: Współczynnik = 0.5 - 2int = 1dmg
14. 1/x z wybranej broni:
Biblioteki:
#include <hamsandwich>
Pod includami:
#define DMG_BULLET (1<<1)
Rejestrujemy:
RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
I na koniec sma:
public TakeDamage(this, idinflictor, idattacker, Float:damage,
damagebits)
{
if(!is_user_connected(idattacker))
return HAM_IGNORED;
if(!ma_klase[idattacker])
return HAM_IGNORED;
if(damagebits & DMG_BULLET)
{
new weapon = get_user_weapon(idattacker);
if(weapon == CSW_BRON && damage > 20.0 &&
random_num(1,2) == 1)
cod_inflict_damage(idattacker, this,
float(get_user_health(this))-damage+1.0, 0.0, idinflictor,
damagebits);
}
return HAM_IGNORED;
}
CSW_BRON zmieniasz na twoja np. CSW_AK47
A szansa na zabicie (1,2) tutaj zmieniamy 2 (Teraz jest 1/2)
15. Teleport:
Biblioteki:
#include <fakemeta>
#include <xs>
Zmienne:
new bool:uzyl[33];
Rejestrujemy:
register_event("ResetHUD", "ResetHUD", "abe");
cod_class_enabled:
uzyl[id] = false;
return COD_CONTINUE;
I na koncu sma:
public cod_class_skill_used(id)
{
if (!uzyl[id]==false)
{
client_print(id, print_center, "Teleport mozna uzywac co 20s");
return PLUGIN_CONTINUE;
}
if(uzyl[id] || !is_user_alive(id))
return PLUGIN_CONTINUE;
new Float:start[3], Float:view_ofs[3];
pev(id, pev_origin, start);
pev(id, pev_view_ofs, view_ofs);
xs_vec_add(start, view_ofs, start);
new Float:dest[3];
pev(id, pev_v_angle, dest);
engfunc(EngFunc_MakeVectors, dest);
global_get(glb_v_forward, dest);
xs_vec_mul_scalar(dest, 999.0, dest);
xs_vec_add(start, dest, dest);
engfunc(EngFunc_TraceLine, start, dest, 0, id, 0);
new Float:fDstOrigin[3];
get_tr2(0, TR_vecEndPos, fDstOrigin);
if(engfunc(EngFunc_PointContents, fDstOrigin) == CONTENTS_SKY)
return PLUGIN_CONTINUE;
new Float:fNormal[3];
get_tr2(0, TR_vecPlaneNormal, fNormal);
xs_vec_mul_scalar(fNormal, 50.0, fNormal);
xs_vec_add(fDstOrigin, fNormal, fDstOrigin);
set_pev(id, pev_origin, fDstOrigin);
uzyl[id] = true;
set_task ( 20.0, "ResetHUD", id )///Tu zmieniamy co ile teleport
set_task ( 10.0, "InfoTel", id )
}
public ResetHUD(id)
{
uzyl[id] = false;
}
public InfoTel(id)
{
client_print(id, print_center, "Ok, teleportuj sie :)");
}
Radar (Widzisz wrogow):
Zmienne:
new g_msgHostageAdd, g_msgHostageDel;
new bool:ma_klase[33]
Rejestrujemy:
g_msgHostageAdd = get_user_msgid("HostagePos");
g_msgHostageDel = get_user_msgid("HostageK");
set_task (2.0,"radar_scan",_,_,_,"b");
I na koncu sma:
public radar_scan(id)
{
new PlayerCoords[3];
for (new id=1; id<=32; id++)
{
if((!is_user_alive(id))||(!ma_klase[id])) continue;
for (new i=1;i<=32;i++)
{
if(!is_user_alive(i) || get_user_team(i) == get_user_team(id))
continue;
get_user_origin(i, PlayerCoords)
message_begin(MSG_ONE_UNRELIABLE, g_msgHostageAdd, {0,0,0}, id)
write_byte(id)
write_byte(i)
write_coord(PlayerCoords[0])
write_coord(PlayerCoords[1])
write_coord(PlayerCoords[2])
message_end()
message_begin(MSG_ONE_UNRELIABLE, g_msgHostageDel, {0,0,0}, id)
write_byte(i)
message_end()
}
}
}
16. Model gracza w zaleznosci od teamu
Rejestrujemy:
RegisterHam(Ham_Spawn, "player", "Odrodzenie", 1);
na koncu sma:
public Odrodzenie(id)
if(get_user_team(id) == 1)
{
//MODEL DLA TT (Tu podajemy sciezke)
}
else if(get_user_team(id) == 2)
{
//MODEL DLA CT (Tu tez)
}
17. Zmiana stroju CT/TT z broniami:
Zmienne:
new Ubrania_CT[4][]={"sas","gsg9","urban","gign"};
new Ubrania_Terro[4][]={"arctic","leet","guerilla","terror"};
Rejestrujemy:
register_event("CurWeapon","CurWeapon","be", "1=1");
Na koncu sma:
public CurWeapon(id)
{
new weapon = read_data(2);
new num = random_num(0,3);
if(ma_klase[id] && weapon == CSW_M4A1)
{
cs_set_user_model(id, Ubrania_CT[num]);
}
if(ma_klase[id] && weapon == CSW_AK47)
{
cs_set_user_model(id, Ubrania_Terro[num]);
}
return PLUGIN_CONTINUE;
}
M4A1 to bron CT, a AK47 to bron TT i możemy sobie pozmieniać jak chcemy
18. No-Recoil
#include <fakemeta>
Zmienne:
new ma_klase[33];
W plugin_init() rejestrujemy:
register_forward(FM_PlayerPreThink, "PreThink");
register_forward(FM_UpdateClientData, "UpdateClientData", 1)
Jeśli nie mamy, to dodajemy:
public cod_class_enabled(id)
{
ma_klase[id] = true;
}
public cod_class_disabled(id)
{
ma_klase[id] = false;
}
I na koniec .sma:
public PreThink(id)
{
if(ma_klase[id])
set_pev(id, pev_punchangle, {0.0,0.0,0.0})
}
public UpdateClientData(id, sw, cd_handle)
{
if(ma_klase[id])
set_cd(cd_handle, CD_PunchAngle, {0.0,0.0,0.0})
}
19. Szansa na pojawienie się u wroga
#include <hamsandwich>
#include <cstrike>
Zmienne:
new ma_klase[33];
W plugin_init() rejestrujemy:
RegisterHam(Ham_Spawn, "player", "Spawn", 1);
Jeśli nie mamy, to dodajemy:
public cod_class_enabled(id)
{
ma_klase[id] = true;
}
public cod_class_disabled(id)
{
ma_klase[id] = false;
}
I na koniec .sma
public Spawn(id)
{
if(!is_user_alive(id))
return;
if(!ma_klase[id])
return;
if(random_num(1,5) == 1)
{
new CsTeams:team = cs_get_user_team(id);
cs_set_user_team(id, (team == CS_TEAM_CT)? CS_TEAM_T: CS_TEAM_CT);
ExecuteHam(Ham_CS_RoundRespawn, id);
cs_set_user_team(id, team);
}
}
20. Ubranie Wroga
#include <cstrike>
Zmienne:
new bool: ma_klase[33];
new CT_Skins[4][] = {"sas","gsg9","urban","gign"};
new Terro_Skins[4][] = {"arctic","leet","guerilla","terror"};
codclass_enabled/disabled:
public cod_class_enabled(id)
{
ZmienUbranie(id, 0);
ma_klase[id] = true;
}
public cod_class_disabled(id)
{
ZmienUbranie(id, 1);
ma_klase[id] = false;
}
Na koniec:
public ZmienUbranie(id,reset)
{
if (!is_user_connected(id))
return PLUGIN_CONTINUE;
if (reset)
cs_reset_user_model(id);
else
{
new num = random_num(0,3);
cs_set_user_model(id, (get_user_team(id) == 1)? CT_Skins[num]: Terro_Skins[num]);
}
return PLUGIN_CONTINUE;
}
21. Widzisz wrogów na radarze
#include <engine>
Zmienne:
new ma_klase[33];
new g_msgHostageAdd, g_msgHostageDel;
W plugin_init() rejestrujemy:
g_msgHostageAdd = get_user_msgid("HostagePos");
g_msgHostageDel = get_user_msgid("HostageK");
set_task (2.0,"radar_scan",_,_,_,"b");
Jeśli nie mamy, to dodajemy:
public cod_class_enabled(id)
{
ma_klase[id] = true;
}
public cod_class_disabled(id)
{
ma_klase[id] = false;
}
I na koniec .sma:
public radar_scan(id)
{
new PlayerCoords[3];
for (new id=1; id<=32; id++)
{
if((!is_user_alive(id))||(!ma_klase[id])) continue;
for (new i=1;i<=32;i++)
{
if(!is_user_alive(i) || get_user_team(i) == get_user_team(id)) continue;
get_user_origin(i, PlayerCoords)
message_begin(MSG_ONE_UNRELIABLE, g_msgHostageAdd, {0,0,0}, id)
write_byte(id)
write_byte(i)
write_coord(PlayerCoords[0])
write_coord(PlayerCoords[1])
write_coord(PlayerCoords[2])
message_end()
message_begin(MSG_ONE_UNRELIABLE, g_msgHostageDel, {0,0,0}, id)
write_byte(i)
message_end()
}
}
}
22. Klasa od poziomu
Zmienna: i cod_class_enabled/disabled { public cod_class_disabled(id) W miejsce xx wpisujemy lvl od którego klasa ma być dostępna
new ma_klase[33];
public cod_class_enabled(id)
new dostepna = xx;
new level = cod_get_user_level(id);
if(level < dostepna)
{
client_print(id, print_chat, "[%s]Klasa dostepna od %i poziomu.", nazwa, dostepna)
return COD_STOP;
}
ma_klase[id] = true;
client_print(id, print_chat, "Wybrales klase %s", nazwa)
return COD_CONTINUE;
}
{
ma_klase[id] = false;
}
23. Nieśmiertelność
#include <fun>
Stałe: Zmienne: new bool:ma_klase[33]; Rejestrujemy: register_event("ResetHUD", "ResetHUD", "abe");
Dodajemy: { I na koniec .sma: {
#include <ColorChat>
#define CZAS_GODMOD 5 //ILE SEKUND MA TRWAC NIESMIERTELNOSC
new bool:wykorzystal[33];
new msg_bartime;
msg_bartime = get_user_msgid("BarTime");
public cod_class_enabled(id)
ma_klase[id] = true;
ResetHUD(id);
}
public cod_class_disabled(id)
{
ma_klase[id] = false;
}
public cod_class_skill_used(id)
if(!is_user_alive(id))
return;
if(wykorzystal[id])
{
ColorChat(id, RED, "Wykorzystales juz swoja niesmiertelnosc.");
return;
}
wykorzystal[id] = true;
set_user_godmode(id, 1);
set_user_rendering(id, kRenderFxGlowShell, 255, 0, 0);
set_task(CZAS_GODMOD.0, "WylaczGod", id);
message_begin(MSG_ONE, msg_bartime, _, id)
write_short(CZAS_GODMOD)
message_end()
}
public WylaczGod(id)
{
if(!is_user_connected(id)) return;
set_user_godmode(id, 0);
set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0);
}
public ResetHUD(id)
{
wykorzystal[id] = false;
}
#590799 Nazwy nieistniejących sieci?
Napisane przez M4RV1N w 06.12.2013 11:54
#589996 Paczka 200 roundsoundów by Silva
Napisane przez Zabijaka Gryps w 01.12.2013 14:28
Łapcie mój reupload na zippyshare.com. Jest to oryginalna paczuszka autora tematu wrzucona przeze mnie na hosting, gdzie plik będzie dostępny darmowo dla wszystkich.
http://www28.zippysh...90720/file.html
- AMXX.pl: Support AMX Mod X i SourceMod
- → Przeglądanie profilu: Reputacja: silva
- Regulamin