Witam. Jak mogę pobrać obszar dookoła mnie w X promieniu (może być 300) i sprawdzić, czy są w nim wrogowie i jeżeli są, to zadać dmg, ale tak, abym za 10 sekund mógł znów tego użyć i tak w kółko, dziękuję.
Do DiabloMod'a.
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.
|
Guest Message by DevFuse
Pobranie obszaru i koordw gracza.
Temat rozp.
zwiru24
, 11.10.2010 19:55
10 odpowiedzi w tym temacie
#1
Napisano 11.10.2010 19:55
#2
Napisano 11.10.2010 21:52
//id=gracz zadający obrażenia new const Float:fDistance = 300.0; new Float:fOrigin[3]; //położenie skąd szukasz //np. //pev(id, pev_origin, fOrigin) new ent = find_ent_in_sphere(-1,fOrigin,fDistance); while(ent){ if(is_user_alive(ent) && id != ent){ //zrób damage`a //najlepiej ExecuteHam(Ham_TakeDamage, ...) } ent = find_ent_in_sphere(ent, fOrigin,fDistance); }
#3
Napisano 12.10.2010 13:54
Okej, czy taka funkcja będzie działać? Będzie ona zabijać przeciwnika i pokazywać na nim sprite?
Ofc. Wywołanie jest w PreThinku i model sprite jest w precache.
Ofc. Wywołanie jest w PreThinku i model sprite jest w precache.
public funkcjaxx(id)
{
new const Float:fDistance = 300.0;
new Float:fOrigin[3];
new entOrigin[3];
new Float:obrazenia = 80.0+player_intelligence[id]/2
pev(id, pev_origin, fOrigin)
new ent = find_ent_in_sphere(-1,fOrigin,fDistance)
while(ent){
if(is_user_alive(ent) && id != ent){
ExecuteHam(Ham_TakeDamage, ent, 0, id, obrazenia, 1);
pev(ent, pev_origin, entOrigin)
message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte( 0 );
write_coord( entOrigin[0] );
write_coord( entOrigin[1] );
write_coord( entOrigin[2] + 400 );
write_coord( entOrigin[0] );
write_coord( entOrigin[1] );
write_coord( entOrigin[2] );
write_short( light );
write_byte( 1 ); // startframe
write_byte( 5 ); // framerate
write_byte( 20 ); // life
write_byte( 30 ); // width
write_byte( 255 ); // noise
write_byte( 255 ); // r, g, b
write_byte( 255 ); // r, g, b
write_byte( 255 ); // r, g, b
write_byte( 200 ); // brightness
write_byte( 200 ); // speed
message_end();
emit_sound( 0 ,CHAN_ITEM, thunder_sound, 1.0, ATTN_NORM, 0, PITCH_NORM );
}
ent = find_ent_in_sphere(ent, fOrigin,fDistance);
}
}
#4
Napisano 12.10.2010 14:55
prethink to złe miejsce na tego typu operacje, lepiej puść taska 0.5s z flagą "b"
#5
Napisano 12.10.2010 15:05
Gdzie i w jakim miejscu? A to nie będzie zamulać serwera? Przecież będzie się funkcja powtarzać co pół sekundy? W którym miejscu tego taska? Ten task z wywołaniem wciśnięcia klawiasza, tak?
#6
Napisano 12.10.2010 16:10
przecież prethink jest wykonywany tyle razy ile gracz ma FPSów ;D zwykle nie mniej niż 30 razy na sekundę
możesz puścić taska w connect a zatrzymać w disconnect
albo puścić w spawn i zatrzymać przy śmierci
zawsze możesz też puścić w plugin init i nie zatrzymywać wcale (słabo )
możesz puścić taska w connect a zatrzymać w disconnect
albo puścić w spawn i zatrzymać przy śmierci
zawsze możesz też puścić w plugin init i nie zatrzymywać wcale (słabo )
#7
Napisano 12.10.2010 22:29
Niestety, to co napisałem na górze źle działa.
1. Jest dźwięk.
2. Nie widać efektu na przeciwniku.
3. Zabiera całe hp, a nie 80 hp.
Może ktoś pomóc?
Dodano 14 październik 2010 - 00:37:
Odświeżam!
Błędy te co wyżej i jak dodać do tego, aby można było użyć co 10 sekund?
1. Jest dźwięk.
2. Nie widać efektu na przeciwniku.
3. Zabiera całe hp, a nie 80 hp.
Może ktoś pomóc?
Dodano 14 październik 2010 - 00:37:
Odświeżam!
Błędy te co wyżej i jak dodać do tego, aby można było użyć co 10 sekund?
public funkcjaxx(id)
{
new const Float:fDistance = 300.0;
new Float:fOrigin[3];
new entOrigin[3];
new Float:obrazenia = 80.0+player_intelligence[id]/2
pev(id, pev_origin, fOrigin)
new ent = find_ent_in_sphere(-1,fOrigin,fDistance)
while(ent){
if(is_user_alive(ent) && id != ent){
ExecuteHam(Ham_TakeDamage, ent, 0, id, obrazenia, 1);
pev(ent, pev_origin, entOrigin)
message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte( 0 );
write_coord( entOrigin[0] );
write_coord( entOrigin[1] );
write_coord( entOrigin[2] + 400 );
write_coord( entOrigin[0] );
write_coord( entOrigin[1] );
write_coord( entOrigin[2] );
write_short( light );
write_byte( 1 ); // startframe
write_byte( 5 ); // framerate
write_byte( 20 ); // life
write_byte( 30 ); // width
write_byte( 255 ); // noise
write_byte( 255 ); // r, g, b
write_byte( 255 ); // r, g, b
write_byte( 255 ); // r, g, b
write_byte( 200 ); // brightness
write_byte( 200 ); // speed
message_end();
emit_sound( 0 ,CHAN_ITEM, thunder_sound, 1.0, ATTN_NORM, 0, PITCH_NORM );
}
ent = find_ent_in_sphere(ent, fOrigin,fDistance);
}
}
#8
Napisano 14.10.2010 07:30
pisałem Ci: przenieś to z prethinka do set_task => set_task - funkcje czasowe - Nieoficjalny polski support AMX Mod X
#9
Napisano 14.10.2010 12:27
public funkcjaxx(id)
{
new const Float:fDistance = 300.0;
new Float:fOrigin[3];
new entOrigin[3];
new Float:obrazenia = 80.0+player_intelligence[id]/2
pev(id, pev_origin, fOrigin)
new ent = find_ent_in_sphere(-1,fOrigin,fDistance)
while(ent){
if(is_user_alive(ent) && id != ent){
ExecuteHam(Ham_TakeDamage, ent, 0, id, obrazenia, 1);
pev(ent, pev_origin, entOrigin)
message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte( 0 );
write_coord( entOrigin[0] );
write_coord( entOrigin[1] );
write_coord( entOrigin[2] + 400 );
write_coord( entOrigin[0] );
write_coord( entOrigin[1] );
write_coord( entOrigin[2] );
write_short( light );
write_byte( 1 ); // startframe
write_byte( 5 ); // framerate
write_byte( 20 ); // life
write_byte( 30 ); // width
write_byte( 255 ); // noise
write_byte( 255 ); // r, g, b
write_byte( 255 ); // r, g, b
write_byte( 255 ); // r, g, b
write_byte( 200 ); // brightness
write_byte( 200 ); // speed
message_end();
emit_sound( 0 ,CHAN_ITEM, thunder_sound, 1.0, ATTN_NORM, 0, PITCH_NORM );
}
ent = find_ent_in_sphere(ent, fOrigin,fDistance);
}
}
public uzyj_mocy(id)
{
new button2 = get_user_button(id)
if (button2 & IN_USE && on_knife[id] && button[id]==0 && (player_class[id]==Lilith)){
button[id] = 1;
funkcjaxx(id)
}
}
client_connect:
set_task(0.1, "uzyj_mocy",id+TASK_MOC,_,_,"b")
client_disconnect:
remove_task(TASK_MOC+id)
Na górze:
#define TASK_MOC 666
Teraz będzie działać?
Użytkownik zwiru24 edytował ten post 14.10.2010 12:28
#10
Napisano 14.10.2010 13:30
Ty chcesz żeby to automatycznie działało co ileś czy tylko jak ktoś coś naciśnie?
#11
Napisano 14.10.2010 15:16
public uzyj_mocy(id)
{
new button2 = get_user_button(id)
if (button2 & IN_USE && on_knife[id] && button[id]==0 && (player_class[id]==Lilith)){
button[id] = 1;
funkcjaxx(id)
}
}
Jak ktoś na nożu wciśnie E i funkcja zadziała, pokaże się efekt, dźwięk i zabierze obrażenia, to żeby móc znów użyć (Nóż+E) musi odczekać 10 sekund.
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych