Zna ktoś sposób na przyciąganie gracza do jakiegoś punktu ? najlepiej aby było to w miare "realne"
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
Przyciaganie
Temat rozp. kyku, 24.02.2010 23:17
7 odpowiedzi w tym temacie
#1
Napisano 24.02.2010 23:17
#2
Napisano 24.02.2010 23:42
Przyciąganie w sensie ?
Coś w stylu magnesu od którego można uciec czy linka od której nie da się uciec ?
More info plz
Coś w stylu magnesu od którego można uciec czy linka od której nie da się uciec ?
More info plz
#3
Napisano 25.02.2010 00:10
Pobierasz współrzędne gracza, współrzędne punktu do którego gracz jest przyciągany, obliczasz różnicę tych wektorów, a następnie dodajesz do predkości poruszania się gracza odpowiedni iloczyn tej wartości co pewien odcinek czasu (co da efekt przyspieszania), a przy pewnej granicznej predkosci ustawiać konkretna wartosc (nie ma sensu przyspieszac gracza w nieskonczonosc).
Oto opis sposobu na dosc realne przyciaganie gracza :F
Oto opis sposobu na dosc realne przyciaganie gracza :F
#4
Napisano 25.02.2010 01:21
na razie zrobilem, ze zmniejsza sie predkosc.
jest jakis sposob aby gracza "wpychalo" do srodka tego punktu? Probowalem za pomoca velocity_by_aim(...), entity_set_vector(...) ale jedyne co udalo mi sie osiagnac to latanie jak na noclipie
jest jakis sposob aby gracza "wpychalo" do srodka tego punktu? Probowalem za pomoca velocity_by_aim(...), entity_set_vector(...) ale jedyne co udalo mi sie osiagnac to latanie jak na noclipie
#include <amxmodx> #include <amxmisc> #include <engine> #include <fun> #define PLUGIN "New Plugin" #define VERSION "1.0" #define AUTHOR "Author" new bool: byl[33]; new pos[3]; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd("say /magnes", "przyciagaj"); } public client_putinserver(id) byl[id] = false; public przyciagaj(id){ get_user_origin(id, pos); client_print(id, print_chat, "Pozycja zapisana."); } public client_PreThink(id){ if(pos[0] && is_user_alive(id)){ new ppos[3],odleglosc; get_user_origin(id, ppos); odleglosc = get_distance(ppos, pos); if(odleglosc<250 && get_user_maxspeed(id) != float(odleglosc)){ set_user_maxspeed(id, float(odleglosc)) byl[id] = true; } else if(byl[id]){ byl[id] = false; set_user_maxspeed(id, 1.0); } } }tutaj kod
#5
Napisano 25.02.2010 18:55
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
new pos[33][3];
public plugin_init() {
register_plugin("Magnes", "1.0", "Owner")
register_forward(FM_PlayerPreThink, "fwPlayerPreThink")
register_clcmd("say /magnes", "Start")
}
public Start(id)
{
get_user_origin(id, pos[id])
client_print(id, print_chat, "Pozycja zapisana")
}
public fwPlayerPreThink(id)
{
if(pos[id][0] && is_user_alive(id))
{
new endpos[33][3]
get_user_origin(id, endpos[id], 3)
new Float:end[33][3]
end[id][0] = (float(endpos[id][0]) - float(pos[id][0]))
end[id][1] = (float(endpos[id][1]) - float(pos[id][1]))
end[id][2] = (float(endpos[id][2]) - float(pos[id][2]))
new Float:velocity[33]
velocity[id] = end[id][0] * end[id][0] + end[id][1] * end[id][1] + end[id][2] * end[id][2]
set_pev(id, pev_velocity, velocity[id])
}
}
No mi się udało coś takiego uzyskać
Prędkość jest ogromna i do tego nie chce wyrzucać w górę :F
A i do tego nie wypycha mnie w strone punktu ... tylko w jego kierunku :F
Użytkownik Owner123 edytował ten post 25.02.2010 18:57
#6
Napisano 25.02.2010 20:21
z tego co pamiętam to jeszcze
end[id][2] = - end[id][2];
#7
Napisano 27.02.2010 23:03
Ja znalazłem 2 sposoby.
1. Przyciąga równomiernie jeżeli dystans mniejszy niż 900.
2. Siła przyciągania zależna jest od dystansu. Kiedy się oddalamy szybko spada. Kiedy jesteśmy w punkcie przyciągania bardzo trudno się wydostać i powstają "turbulencje".
Mnie bardziej przypadła wersja pierwsza ;]
1. Przyciąga równomiernie jeżeli dystans mniejszy niż 900.
#include <amxmodx> #include <engine> new Float:przyciaganie[3] public plugin_init() { register_plugin("Przyciaganie", "0.0", "Peyote") register_clcmd("say /przyciaganie", "zaznacz") } public client_PreThink(id) { new Float:origin[3] new Float:velocity[3] entity_get_vector(id, EV_VEC_origin, origin) new Float:distance = get_distance_f(origin,przyciaganie) entity_get_vector(id, EV_VEC_velocity, velocity) if(distance < 900.0) { for(new i=0;i<=2;i++) { velocity[i] += (origin[i] > przyciaganie[i])?-7.0:7.0 } entity_set_vector(id, EV_VEC_velocity, velocity) } } public zaznacz(id) { entity_get_vector(id, EV_VEC_origin, przyciaganie) }
2. Siła przyciągania zależna jest od dystansu. Kiedy się oddalamy szybko spada. Kiedy jesteśmy w punkcie przyciągania bardzo trudno się wydostać i powstają "turbulencje".
#include <amxmodx> #include <engine> new Float:przyciaganie[3] public plugin_init() { register_plugin("Przyciaganie", "0.0", "Peyote") register_clcmd("say /przyciaganie", "zaznacz") } public client_PreThink(id) { new Float:origin[3] new Float:velocity[3] entity_get_vector(id, EV_VEC_origin, origin) new Float:distance = get_distance_f(origin,przyciaganie) entity_get_vector(id, EV_VEC_velocity, velocity) for(new i=0;i<=2;i++) { velocity[i] += ((origin[i] > przyciaganie[i])?-1000.0:1000.0) / distance } entity_set_vector(id, EV_VEC_velocity, velocity) } public zaznacz(id) { entity_get_vector(id, EV_VEC_origin, przyciaganie) }
Mnie bardziej przypadła wersja pierwsza ;]
#8
Napisano 28.02.2010 00:17
no no
działa super, dzięki.
działa super, dzięki.
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych