Blokujac sciezki typu
weapons/debris2.wav
nie blokujesz wybuchu lecz dzwieki typu uzycia granatu a to nie to samo. Dzwieki wybuchu np
weapons/explode4.wav
znajduja sie w folderze valve/sound i one odpowiadaja za dzwieki wybuchow lecz nie zablokujesz ich po stronie gracza (tak jak np dzwieku strzalu).
Jesli chcesz wywolac efekt sprite wybuchu, wstawiasz do funkcji wybuchu np taki kod
message_begin(MSG_BROADCAST, SVC_TEMPENTITY, iOrigin);
write_byte(TE_EXPLOSION);
write_coord(iOrigin[0]);
write_coord(iOrigin[1]);
write_coord(iOrigin[2]);
write_short(sprite_blast);
write_byte(32);
write_byte(20);
write_byte(0);
message_end();
iOrigin to jego pozycja, pobierasz ja np za pomoca funkcji pev(index, pev_origin, iOrigin). Sprite_blast to lokalizacja do sprite, ktory zostanie wyswietlony w trakcie tworzenia wybuchu. Do precache dodajesz np
sprite_blast = precache_model("sprites/dexplo.spr");
(oczywiscie pierw jeszcze trzeba utworzyc zmienna globalna, w tym wypadku sprite_blast).
Dalej jesli chodzi o zadane obrazenia, to po prostu sprawdzasz w petli czy gracz znajduje sie blizej niz okreslona odleglosc od pozycji enta (iorigin). Nizej przyklad
new Float:player_origin[3];
for(new i = 1; i <= max_players; i ++)
{
if(!is_user_alive(i))
continue;
pev(i, pev_origin, player_origin);
if(get_distance_f(iOrigin, player_origin) <= 50.0)
{
}
}
funkcja get_distance_f sluzy do odmierzania odleglosci miedzy pozycja x a y. W tym wypadku funkcja bedzie wykonywana jesli gracz znajdzie sie blizej niz 50 unitow w odleglosci enta.
Teraz w funkcji wykonujesz kod na obrazenia, ustawiasz stala wartosc jesli ma na stale zadawac np 40 dmg lub po prostu obrazenia (np 100-odleglosc). Spowoduje to taki sam efekt obrazen, jak wyglada to np z he. Do zadanych obrazen uzyj funkcji
ExecuteHam(Ham_TakeDamage, id, ent, ent, 40.0, 1);
Nie chcialo mi sie pisac z tego gotowego pluginu, ale mysle ze sie polapiesz. Poczytaj dokumentacje o funkcjach ktorych ci podalem i troche poradnikow na temat tworzenia bytow, to dasz sobie rade.