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
Zna ktoś sposób na przyciąganie gracza do jakiegoś punktu ? najlepiej aby było to w miare "realne"
#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: 1
0 użytkowników, 1 gości, 0 anonimowych


Dodatki SourceMod



Temat jest zamknięty









