←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Operacje na graczu

  • +
  • -
Merciless - zdjęcie Merciless 29.07.2013

Witam . Chciałbym się dowiedzieć jak po nacelowaniu na gracza mogę na nim operować np.pobrać jego pozycje/zmienić pozycje ale tylko wtedy gdy na niego celuje, nie na najbliższych graczy tak jak działa to find_sphere_class

 

@edit

 

Doszedłem już do tego, lecz mam następny problem, nie umiem dla gracza nadać swojej pozycji

    new target,body
    get_user_aiming(id, target, body); // tutaj chodzi o nacelowanego gracza
    
    new Poz[2][3]; // pozycje 
    new Float: wektorPoz[2][3]; // pozycje wektorów
                
    get_user_origin(id, Poz[0]); // tutaj pobiera moją pozycje x,y,z
    
    entity_get_vector(target, EV_VEC_origin, wektorPoz[1]); // tutaj pobiera wektor nacelowanego
    entity_get_vector(id, EV_VEC_origin, wektorPoz[0]); // tutaj pobiera mój wektor

    get_user_origin(target, Poz[1]); // tutaj pobiera pozycje nacelowanego x,y,z

    entity_set_vector(target, EV_VEC_velocity, wektorPoz[0]); // tutaj dla nacelowanego nadaje mój wektor

Nie wiem czy dobrze podpisałem ale piszę tak jak to rozumiem. Po nacelowaniu na gracza i wpisaniu odpowiedniej komendy gracz leci w kąt xD, próbowałem też bez pobierania wektorów, na samych pozycjach, lecz to w ogóle nie działa.

 

Znalazłem jeszcze funkcje entity_set_origin, lecz do tego trzeba mieć zmienną float a takiej zmiennej nie wsadzę do get_user_origin, nie wiem też czy da się float przekonwertować na zwykłą zmienną


Użytkownik Merciless edytował ten post 29.07.2013 13:00
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 29.07.2013

A więc to zależy jak chcesz zrobić można na dwa sposoby(pewnie jest ich więcej ale nie mam zamiaru rozmyślać nad innymi):

 

 

1)W think'u gracza sprawdzać funkcją "get_user_aiming" czy gracz na kogoś patrzy (samo sprawdzanie jest bardzo nie wydajne już lepiej sprawdzić czy po naciśnięciu przycisku ktoś na kogoś patrzy), ta funkcja zwraca poprzez referencję id gracza na którego patrzymy (2 argument) a jak masz id gracza to możesz już robić z gracze co chcesz (no prawie)

 

2) Zarejestrowanie eventu "StatusValue" i sprawdzanie czy argument nr.1 równa się 2. Coś takiego:





register_event("StatusValue","Aiming","be","1=2")

A teraz funkcja:





public Aiming(id)
{
	new id2 = read_data(2)
	//id == gracz patrzący
	//id2 == gracz na którego się patrzy
}

Jeśli nie wiesz jak posługiwać się otrzymanym id to pisz a pomogę

 

// Mogłeś szybciej edytować :D napisz co chcesz zrobić po nacelowaniu w gracza to pokażę ci przykład

 


Użytkownik BlackPerfum edytował ten post 29.07.2013 13:05
Odpowiedz

  • +
  • -
Merciless - zdjęcie Merciless 29.07.2013

Chciałbym zrobić przyciągnęcie gracza do mnie, czyli to do czego zmierzałem, nadanie graczowi moich koordów xD

 

W tej funkcji aiming mogę wrzucić swój kod i przez komende odpalać?

 

Dziwna sprawa wynikła po dodaniu tego eventu, jeżeli bot na mnie naceluje to lecę do niego xD, a jeżeli ja na niego naceluje to leci w kąt jak dotychczas

 


Użytkownik Merciless edytował ten post 29.07.2013 13:22
Odpowiedz

Yakashi - zdjęcie Yakashi 29.07.2013

moze to cos ci pomoze

 

http://amxx.pl/topic...gnes-militarny/

Odpowiedz

  • +
  • -
Merciless - zdjęcie Merciless 29.07.2013

Niestety nie bardzo to ogarniam

Odpowiedz

  • +
  • -
Merciless - zdjęcie Merciless 29.07.2013

Przepraszam za doubla ale chciałbym zadać kolejne pytanie dotyczące lasera a niestety nie mogę edytować posta. Zrobiłem taki laser, którym strzela się do gracza

    new target,body;
    new pozycja[3];
    get_user_aiming(id, target,body);
    get_user_origin(target, pozycja);
    
    message_begin( MSG_BROADCAST, SVC_TEMPENTITY, pozycja );
    write_byte(TE_BEAMENTPOINT)
    write_short(id)
    write_coord(pozycja[0])
    write_coord(pozycja[1])
    write_coord(pozycja[2])
    write_short(sprajt)
    write_byte(0)
    write_byte(10)
    write_byte(1)
    write_byte(5)
    write_byte(0)
    write_byte(255)
    write_byte(0)
    write_byte(0)
    write_byte(255)
    write_byte(0)
    message_end();
    set_user_health(target, get_user_health(target) - 1);
    
    if(get_user_health(target) <= 80)
    {
        remove_task(target);
    }

Zadaniem jest nacelować na gracza i wpisać odpowiednią komende aby wystrzelić laser do gracza, pytania są następujące. Czy mogę ten efekt utrzymywać do tej pory aż dla gracza nie zostanie np. 30 hp mimo tego iż starciłbym go ze swego celownika to wiązka pozostałaby ode mnie do niego do czasu aż tych hp nie straci? Próbowałem zrobić utrzymywanie tej akcji laseru taskiem, lecz teraz to w ogóle nie widać tego laseru.


Użytkownik Merciless edytował ten post 29.07.2013 19:22
Odpowiedz

  • +
  • -
K!113r - zdjęcie K!113r 29.07.2013

Nie lepsza byłaby wiadomość łącząca 2 byty (graczy)?
Niestety nie zalinkuje bo na telefonie jestem, ale jest lista na amxmodx.org

I wtedy przedłużać tę wiadomość taskiem
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 30.07.2013

Pisałem że pomogę więc postaram się ci pomóc (co do wektorów)

 

Przedstawię ci jak by wyglądał kod dzięki któremu gracz po nacelowaniu na innego gracza i naciśnięciu "e"

(dokładnie to po użyciu komendy "+use") przyciągnie do siebie gracza (w którego nacelował oczywiście :D)

Dodam jeszcze iż nie ograniczałem możliwości graczom oraz nie ma tu zbyt wielu zabezpieczeń gdyż to ma być wzór a nie gotowiec.

 

PreThink gracza:

Spoiler
Teraz przyciąganie:
Spoiler
Wszystko opisane ale jak czegoś nie rozumiesz to pisz a co do lasera to niece mi się myśleć dlatego poczytaj sobie na necie o "SVC_TEMPENTITY" ;D

 

Odpowiedz

  • +
  • -
Merciless - zdjęcie Merciless 30.07.2013

dzięki bardzo, rozumiem o co tutaj chodzi xD. A co do tego SVC_TEMPENTITY i innych rzeczy SVC_ gdzie mogę znaleźć opis tych rzeczy i jakiś tutorial?

Odpowiedz