←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Wywolanie funkcji po dotnieciu innego gracza

KillerBee - zdjęcie KillerBee 26.11.2013

witam

 

mam oto taki kod (uzywam hamsandwich)

public DotykGracza(ent, id) {
	if(!pev_valid(ent) || !pev_valid(id)) return HAM_IGNORED;

	if(is_user_alive(id) && is_user_alive(ent)) {
		if(get_user_team(id) == 2 && get_user_team(ent) == 1) {
			// kod
		}
		if(get_user_team(id) == 1 get_user_team(ent) == 1) {
			// kod
		}
	}
	return HAM_IGNORED;
}

public Cos(id, pid) {
	// kod
}

chce do tego dorobic ze jak TT dotknie innego TT to wlacza mu sie pasek od paki (bartime) i gdy odejdzie od niego znika i nie wykona sie funkcja Cos(id, pid)

bartime zeby trwal 4 sekundy i zeby po tym czasie wykonala sie funkcja Cos(id, pid)

 

id - indeks gracza dotykajacego

pid - index gracza dotykanego

Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 26.11.2013

set_task / remove_task ( wraz z sprawdzaniem pozycji )

Odpowiedz

  • +
  • -
Droso - zdjęcie Droso 26.11.2013



#define CZAS 2.0

public DotykGracza(ent, id) {
	if(!pev_valid(ent) || !pev_valid(id)) 
		return HAM_IGNORED;
	
	new data[2];
	data[0] = id;
	data[1] = ent;
	
	if(is_user_alive(id) && is_user_alive(ent)) {
		if(get_user_team(id) == 1 && get_user_team(ent) == 1) {
			if(!task_exists(6000+id)){
				
				set_task(CZAS , "Cos", 6000+id, data, 2);
				createBarTime(id, CZAS, 0);
				
			}
			
			
			if(task_exists(5000+id))
				remove_task(5000+id);
			
			set_task(0.1, "UsuwajEfekt", 5000+id, data, 2);
		}
	}
	return HAM_IGNORED;
}



public Cos(data[2]) {
	new id = data[0];
	new pid = data[1];
	
	if(task_exists(5000+id))
		remove_task(5000+id);
	
	// twoj kod
	client_print(id, 3, "xD");
}

public UsuwajEfekt(data[2]){
	new id = data[0];
	
	if(is_user_connected(id))
		createBarTime(id, 1.0, 100);
		
	if(task_exists(6000+id))
	remove_task(6000+id);
}


stock createBarTime(id, Float:fTime, startprogress = 0){
	static barTime2;
	
	if(!barTime2) barTime2 = get_user_msgid("BarTime2");
	
	message_begin( id ? MSG_ONE : MSG_ALL, barTime2, _, id)
	write_short( floatround( fTime ) );
	write_short( startprogress );
	message_end(); 
	
}

Ale, lepsze będzie tak jak napisał Dark pobieranie odległości między graczami :P

Odpowiedz

KillerBee - zdjęcie KillerBee 26.11.2013

patrzac na twoj kod to gdy nawet odejdzie pasek jak i funkcja sie wykona

 

DarkGL moge prosic o przyklad? nie mam zielonego pojecia jak to moge zrobic

Odpowiedz

  • +
  • -
Droso - zdjęcie Droso 26.11.2013

patrzac na twoj kod to gdy nawet odejdzie pasek jak i funkcja sie wykona

 

DarkGL moge prosic o przyklad? nie mam zielonego pojecia jak to moge zrobic

Nope? Przetestuj?

 

Tylko, że dotyk między graczami występuje wtedy kiedy jeden biegnie w drugiego lub stoją na sobie.

Odpowiedz