←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Umarli - pobieranie wartości

  • +
  • -
KariiO - zdjęcie KariiO 25.12.2011

public moc(id)
{
	set_hudmessage(220, 30, 30, -1.0, 0.40, 0, 3.0, 2.0, 0.2, 0.3, 5)
	
	if(smiertelne[id]==0)
	{
		show_hudmessage(id, "Smiertelnych obrazen mozesz uzyc raz na runde !")
		return PLUGIN_HANDLED
	}

	new lezacy = find_dead_body(id)

	
	if (lezacy == -1 || lezacy == 0)
		return PLUGIN_HANDLED
	
	if (is_user_alive(lezacy))
	{
		show_hudmessage(id, "Smiertelne obrazenia musza byc pobrane od martwego gracza !")
		return PLUGIN_HANDLED
	}
  
	new index1, bodypart1
	get_user_aiming(id,index1,bodypart1)
	if (index1==0)
	{
		show_hudmessage(id, "Smiertelne obrazenia zadzialaja gdy bd. mial wroga na celowniku !")
		return PLUGIN_HANDLED
	}
	
	UTIL_Damage(id,index1,0.0+last_hit[lezacy],DMG_SLASH,0,"world") //obraznie
	client_print(id,print_chat,"Zadales %i smiertelnych obrazen wrogowi!",last_hit[lezacy])
	smiertelne[id]--
	
	new Float:forigin[3], origin[3]
	pev(lezacy,pev_origin,forigin)	
	FVecIVec(forigin,origin)
	
	
	new origin2[3]
	get_user_origin(index1,origin2)
	
	
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
	write_byte (TE_BEAMPOINTS)
	write_coord(origin[0])
	write_coord(origin[1])
	write_coord(origin[2]+8)
	write_coord(origin2[0])
	write_coord(origin2[1])
	write_coord(origin2[2]+8)
	write_short(sprite_lgt);
	write_byte(1) // framestart
	write_byte(1) // framerate
	write_byte(10) // life
	write_byte(200) // width
	write_byte(200) // noise
	write_byte(255) // r, g, b (red)
	write_byte(0) // r, g, b (TUTOR_TUTOR_GREEN)
	write_byte(0) // r, g, b (blue)
	write_byte(100) // brightness
	write_byte(5) // speed
	message_end()
	
	return PLUGIN_HANDLED
	
}

stock find_dead_body(id)
{
	static Float:origin[3]
	pev(id, pev_origin, origin)
	
	new ent
	static classname[32]	
	while((ent = fm_find_ent_in_sphere(ent, origin, get_pcvar_float(cvar_revival_dis))) != 0)
	{
		pev(ent, pev_classname, classname, 31)
		if(equali(classname, "fake_corpse") && fm_is_ent_visible(id, ent))
			return ent
	}
	return 0
}
Funkcja miała pobierać od najbliższego zmarłego(trupa) ostatnie obrazenia(last_hit) i zadawać je wrogowi(temu co mamy go na celowniku), jakieś pomysły dlaczego nie działa ?
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 26.12.2011

a tekst ze zadales tyle i tyle obrazen sie wyswietla ??

zamiast util... uzyj change_health
Odpowiedz

  • +
  • -
KariiO - zdjęcie KariiO 28.12.2011

Jest pewien problem bo nic nie pokazuje :P
Możesz jak inaczej znaleźć najbliższego trupa ?
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 28.12.2011

Jest pewien problem bo nic nie pokazuje :P
Możesz jak inaczej znaleźć najbliższego trupa ?

Pewnie nie tworzysz "fake_corpse", więc jak ma znaleźć tego trupa?
Odpowiedz

  • +
  • -
KariiO - zdjęcie KariiO 28.12.2011

Jest pewien problem bo nic nie pokazuje :P
Możesz jak inaczej znaleźć najbliższego trupa ?

Pewnie nie tworzysz "fake_corpse", więc jak ma znaleźć tego trupa?

Deathmsg:
set_task(0.5, "task_check_dead_flag", vid)
down:
public task_check_dead_flag(id)
{
    if(!is_user_connected(id))
        return
    
    if(pev(id, pev_deadflag) == DEAD_DEAD)
        create_fake_corpse(id)
    else
        set_task(0.5, "task_check_dead_flag", id)
}
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 28.12.2011

To jest do diablo? Jeśli tak, to "find_dead_body(id)" na pewno nie jest tutaj problemem, więc musisz go szukać gdzie indziej.
Odpowiedz

  • +
  • -
KariiO - zdjęcie KariiO 28.12.2011

if (lezacy == -1 || lezacy == 0)
                return PLUGIN_HANDLED
Zastanawia mnie czy dobrze zrobiłem ten warunek...
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 28.12.2011

Daj może tam
if(!pev_valid(lezacy))
Odpowiedz

  • +
  • -
MarWit - zdjęcie MarWit 28.12.2011

Daj to co sebul ew.

if(!(1 <= lezacy <= get_maxplayers()) || is_user_alive(lezacy))
return PLUGIN_CONTINUE
Odpowiedz

  • +
  • -
KariiO - zdjęcie KariiO 28.12.2011

Nie wiem czemu ale w funkcji od wskrzeszania nekromanty był jeszcze taki myk i może dlatego bez niego nie działa :
new lezacyx = find_dead_body(id)

    new lezacyx = pev(lezacyx, pev_owner)
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 28.12.2011

Nie wiem czemu ale w funkcji od wskrzeszania nekromanty był jeszcze taki myk i może dlatego bez niego nie działa :

new lezacyx = find_dead_body(id)

    new lezacyx = pev(lezacyx, pev_owner)

A nawet na 100% to trzeba dodać, ale zrób nową zmienną
new lezacy = find_dead_body(id);
new lezacyid = pev(lezacy, pev_owner);
Odpowiedz

  • +
  • -
KariiO - zdjęcie KariiO 28.12.2011

public zadaj_smiertelnex(id)
{
	set_hudmessage(220, 30, 30, -1.0, 0.40, 0, 3.0, 2.0, 0.2, 0.3, 5)
	
	if(smiertelne[id]==0)
	{
		show_hudmessage(id, "Smiertelnych obrazen mozesz uzyc raz na runde !")
		return PLUGIN_HANDLED
	}
	if(player_class[id]!=Wampir) return PLUGIN_HANDLED
	
	new lezacyx = find_dead_body(id)

	new lezacy = pev(lezacyx, pev_owner)

	
	if(!(1 <= lezacy <= get_maxplayers()) || is_user_alive(lezacy))
	{
		show_hudmessage(id, "Blad !")
			return PLUGIN_CONTINUE
	}
	
	new index1, bodypart1
	get_user_aiming(id,index1,bodypart1)
	if (index1==0)
	{
		show_hudmessage(id, "Smiertelne obrazenia zadzialaja gdy bd. mial wroga na celowniku !")
		return PLUGIN_HANDLED
	}
	
	new obrazenia = floatround(last_hit[lezacy],floatround_ceil)

	change_health(index1,-obrazenia,id,"world")

	client_print(id,print_chat,"Zadales %i smiertelnych obrazen wrogowi!",obrazenia)
	smiertelne[id]--
	
	new Float:forigin[3], origin[3]
	pev(lezacy,pev_origin,forigin)	
	FVecIVec(forigin,origin)
	
	
	new origin2[3]
	get_user_origin(index1,origin2)
	
	
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
	write_byte (TE_BEAMPOINTS)
	write_coord(origin[0])
	write_coord(origin[1])
	write_coord(origin[2]+8)
	write_coord(origin2[0])
	write_coord(origin2[1])
	write_coord(origin2[2]+8)
	write_short(sprite_lgt);
	write_byte(1) // framestart
	write_byte(1) // framerate
	write_byte(10) // life
	write_byte(200) // width
	write_byte(200) // noise
	write_byte(255) // r, g, b (red)
	write_byte(0) // r, g, b (TUTOR_TUTOR_GREEN)
	write_byte(0) // r, g, b (blue)
	write_byte(100) // brightness
	write_byte(5) // speed
	message_end()
	
	return PLUGIN_HANDLED
	
}
Tak wygląda teraz kod.

Ten kod /\ działa jakby co :)

Można zamknąć.
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 28.12.2011

public zadaj_smiertelnex(id)
{
set_hudmessage(220, 30, 30, -1.0, 0.40, 0, 3.0, 2.0, 0.2, 0.3, 5)

if(!smiertelne[id])
{
show_hudmessage(id, "Smiertelnych obrazen mozesz uzyc raz na runde !")
return PLUGIN_HANDLED
}
if(player_class[id]!=Wampir) return PLUGIN_HANDLED

new lezacyx = find_dead_body(id)

if(!pev_valid(lezacyx))
return PLUGIN_HANDLED

new lezacy = pev(lezacyx, pev_owner)

if(!is_user_connected(lezacy) || is_user_alive(lezacy))
{
show_hudmessage(id, "Blad !")
return PLUGIN_CONTINUE
}

new index1, bodypart1
get_user_aiming(id,index1,bodypart1)
if (!is_user_alive(index1))
{
show_hudmessage(id, "Smiertelne obrazenia zadzialaja gdy bd. mial wroga na celowniku !")
return PLUGIN_HANDLED
}

new obrazenia = floatround(last_hit[lezacy],floatround_ceil)

change_health(index1,-obrazenia,id,"world")

client_print(id,print_chat,"Zadales %i smiertelnych obrazen wrogowi!",obrazenia)
smiertelne[id]--

new origin[3], origin2[3]
get_user_origin(lezacy,origin)
get_user_origin(index1,origin2)


message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte (TE_BEAMPOINTS)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2]+8)
write_coord(origin2[0])
write_coord(origin2[1])
write_coord(origin2[2]+8)
write_short(sprite_lgt);
write_byte(1) // framestart
write_byte(1) // framerate
write_byte(10) // life
write_byte(200) // width
write_byte(200) // noise
write_byte(255) // r, g, b (red)
write_byte(0) // r, g, b (TUTOR_TUTOR_GREEN)
write_byte(0) // r, g, b (blue)
write_byte(100) // brightness
write_byte(5) // speed
message_end()

return PLUGIN_HANDLED
}

Tak powinno być dobrze.
Odpowiedz