Chciałem w tym temacie zaprezentować, jak ustawić danej klase x(+int) obrażeń z danej broni. (Nie znalazłem takowego w tym dziale ;_; )
1. Na sam początek dodajemy:
#include <hamsandwich>
i pod includami:
#define DMG_BULLET (1<<1)
i zmienna:
new bool:ma_klase[33];
2. do plugin_init() dodajemy:
RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
3*. Jeśli nie masz to dodaj:
public cod_class_enabled(id) ma_klase[id] = true; public cod_class_disabled(id) ma_klase[id] = false;
4. 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(get_user_team(this) != get_user_team(idattacker) && get_user_weapon(idattacker) == CSW_BRON && damagebits & DMG_BULLET) cod_inflict_damage(idattacker, this, 5.0, 0.1, idinflictor, damagebits); } return HAM_IGNORED; }
CSW_BRON - BRON zmieniasz na nazwę swojej broni np. CSW_M4A1
W powyższym kodzie przyjrzyj się temu:
cod_inflict_damage(idattacker, this, 5.0, 0.1, idinflictor, damagebits);
5.0 oznacza ile obrażeń będziemy zadawali. W tym przypadku jest to 5(+int). Jeśli zmienimy np. na 50.0 to będziemy zadawać 50(+int) obrażeń więcej.
0.1 Jest to współczynnik/mnożnik tego, jak nasza inteligencja będzie się przekładała na obrażenia. Np.
0.1 - 10int = 1 DMG 0.2 - 5int = 1 DMG 0.15 - 6.(3)int = 1 DMG 0.14 - 7.14int = 1 DMG 0.066666 - 15int = 1 DMG 0.05 - 20int = 1 DMG
Sposób przeliczania tego jest bardzo prosty (nauczył mnie go dzisiaj rano Vasto_Lorde[btw. dzięki ]), otóż 1(jeden) dzielimy przez tyle ile chcemy inteligencji na 1 DMG. Np.
1/20 = 0.05 ( / zastępuje znak dzielenia ( patrz kod powyżej. Co wyszło ?) 1/15 = 0.66666
Łatwo sprawdzić na kalkulatorze
5. A więc nasz finalny kod będzie wyglądał tak:
/* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <codmod> #include <hamsandwich> #define DMG_BULLET (1<<1) new bool:ma_klase[33]; new const nazwa[] = "TEST"; new const opis[] = "Zadajesz 5(+int) obrazen z xxx"; new const bronie = 1<<CSW_M3; new const zdrowie = 20; new const kondycja = 40; new const inteligencja = 50; new const wytrzymalosc = 60; public plugin_init() { register_plugin(nazwa, "1.0", "Drizzt"); cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc); RegisterHam(Ham_TakeDamage, "player", "TakeDamage"); } public cod_class_enabled(id) ma_klase[id] = true; public cod_class_disabled(id) ma_klase[id] = false; 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(get_user_team(this) != get_user_team(idattacker) && get_user_weapon(idattacker) == CSW_BRON && damagebits & DMG_BULLET) cod_inflict_damage(idattacker, this, 5.0, 0.1, idinflictor, damagebits); } return HAM_IGNORED; }
To chyba wszystko jasne
Dziękuję za uwagę. Gdyby ktoś czegoś nie rozumiał, będę wyjaśniał.