←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Funkcja Zamrożenia.

Zablokowany

  • +
  • -
Złotówka - zdjęcie Złotówka 06.09.2010

Witam

Mam pytanie, jak by wyglądała funkcja, dzięki której można zamrozić z pistoletu wroga na3 sekundy ?
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 06.09.2010

Wg mnie taka na wpół okrągła, wpadająca w błękit, mieniąca się w kolorach tęczy jak ją wystawisz na słońce.


-------------
Gracz się nie może się ruszyć, kiedy ustawisz mu szybkość bliską zera (np. 0.001). Dróg do osiągnięcia tego jest wiele, np
fun + set_user_maxspeed
fakemeta + set_pev(id, pev_maxspeed, 0.001)

Jak ma go zamrozić też w powietrzu to w prethinku zeruj mu prędkość
set_pev(id, pev_velocity, Float:{0.0, 0.0, 0.0});
Odpowiedz

  • +
  • -
Złotówka - zdjęcie Złotówka 06.09.2010

Ok, wszystko ładnie pięknie a jak zrobić funkcje w prethinku, żeby zamrażało go przy strzale z pistoletu na 3 sekundy ?
Użytkownik Znak Zapytania? edytował ten post 06.09.2010 18:22
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 06.09.2010

new Float:gfFrost[33]
w tej tablicy będzie czas upłynięcia zamrożenia

strzał z pistoletu to Ham_TakeDamage ze sprawdzeniem czy atakujący używa pistoletu (get_user_weapon(attacker))

jak będzie miał to daj
gfFrost[id] = get_gametime()+3.0


prethink łapiesz fakemeta register_forward(FM_PlayerPreThink); lub forwardem z engine

w nim sprawdzasz

if(get_gametime() < gfFrost[id])
jeśli prawda to gracz ma być zamrożony


przy spawnie resetuj zamrożenie
gfFrost[id] = get_gametime()


#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define PISTOLS ((1<<CSW_GLOCK18)|(1<<CSW_USP)|(1<<CSW_P228)|(1<<CSW_DEAGLE)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN))

new Float:gfFrost[33];

public plugin_init(){
	register_forward(FM_PlayerPreThink, "fwPreThink", 1);

	RegisterHam(Ham_TakeDamage, "player", "fwTakeDamage", 1);
	RegisterHam(Ham_Spawn, "player", "fwSpawn", 1);
}
public fwPreThink(id){
	if(get_gametime() < gfFrost[id]){
		set_pev(id, pev_velocity, Float:{0.0, 0.0, 0.0});
	}
}

public fwSpawn(id){
	gfFrost[id] = get_gametime();
}

public fwTakeDamage(id, inf, attacker){
	if(is_user_connected(attacker)){
		new wid = get_user_weapon(attacker);
		if(PISTOLS & (1<<wid)){
			gfFrost[id] = get_gametime() + 3.0;
		}
	}
}
Odpowiedz

Reprezentant - zdjęcie Reprezentant 06.09.2010

nie chce podwazac odpowiedzi mistrza ;-D ale przeciez mag ma to chyba w standardzie wystarczy wyszukac:

if((attacker_id!=id)&&player_class[attacker] == Mag)
{
if(weapon == CSW_GLOCK18 || weapon == CSW_USP || weapon == CSW_P228 || weapon == CSW_DEAGLE || weapon == CSW_ELITE || weapon == CSW_FIVESEVEN)
{
agi=(BASE_SPEED / 2)
set_speedchange(id)
if(DemageTake[id]==0)
{
DemageTake[id]=1
set_task(11.0, "funcReleaseVic", id)
set_task(11.0, "funcReleaseVic2", id)
set_task(2.0, "funcDemageVic", id+GLUTON)
}
}
}

agi=(BASE_SPEED / 2)
ta linijka odpowiada za to na ile ma dzielic predkosc ofiary.. to jest z orginalu diablo ale radze uzyc latki
[5.9l] Moce pistoletowe wybranych klas nie działają
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 06.09.2010

nie znam dobrze diablomoda, autor zapytał o funkcję zamrażania to napisałem jak to można zrobić :D jeśli jest to w standardzie tym lepiej dla niego
Odpowiedz

  • +
  • -
Złotówka - zdjęcie Złotówka 07.09.2010

Ok, dzięki jakoś sobie dam rade w razie czego jeszcze tutaj napisze, więc proszę nie zmykać tematu, Dla obu leci Reput.
Odpowiedz
Zablokowany