Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

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.

  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[ROZWIĄZANE] Zapisywanie origin i przenoszenie sie do niego


Najlepsza odpowiedź R3X, 23.02.2014 14:19

Zawsze przenosisz do 0,0,0, ponieważ

set_user_origin(id, origin)

w tym miejscu używasz lokalnej tablicy origin[3], a globalna origin[33][3] nigdy nie otrzymuje położenia żadnego gracza.

 

 

Nie potrzebujesz lokalnej tablicy, możesz wpisać od razu do globalnej:

get_user_origin(ofiara, origin[id])//pobieranie pozycji
origin[id][1] += 20;

a potem

set_user_origin(id, origin[id])

Jednak [1] += 20 nie gwarantuje, że to będzie za plecami wybranego gracza. Musisz wiedzieć gdzie gracz patrzy i do originu dodać wektor przeciwny do znormalizowane wektoru wzroku, pomnożonego przez odległość (np. 20)

 

Jako, że fakemeta rulez:

new Float:fVec[3];
pev( ofiara, pev_v_angle, fVec ); 
fVec[2] = -fVec[2];

//Znormalizowany wektor przeciwny do wektora wzroku
angle_vector( fVec, ANGLEVECTOR_FORWARD, fVec );

//przedłużony do 20 jednostek
fVec[0] *= 20.0;
fVec[1] *= 20.0;
fVec[2] *= 20.0;

taki fVec musisz dodać do origin[3], i bedziesz mial 20 jednostek za plecami

Przejdź do postu


  • Zamknięty Temat jest zamknięty
11 odpowiedzi w tym temacie

#1 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 625
Wszechmogący

  • Postów:1510
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 23.02.2014 10:42

Problem jest następujący:

Zrobiłem perk, który ma za zadanie po użyciu zapisać pozycję gracza namierzonego, a potem przenieść się o 20 jednostek za jego plecy

Testowałem plugin na dust2_long, ale za każdym razem przenosi mnie w to samo miejsce "pod ziemię"

kod:

@@EDIT

Na lidlu znowóż teleportuje mnie lekko pod zmienie, tułów wystaje. I tak za każdym razem, bez względu na pozycje gracza, którego namierzam

/* Plugin generated by AMXX-Studio */
 
#include <amxmodx>
#include <amxmisc>
#include <codmod>
#include <fun>
 
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
 
new origin[33][3];
new znamie[33];
 
#define nazwa "Naznaczony"
#define opis "Uzyj aby naznaczyc przeciwnika, a potem teleportowac sie za niego"
 
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
 
cod_register_perk(nazwa, opis);
 
register_event("ResetHUD", "ResetHUD", "abe");
}
 
 
public cod_perk_used(id)
{
new ofiara, body;
new origin[3];
 
if(!is_user_alive(id))
return PLUGIN_CONTINUE;
 
 
if(!znamie[id])
{
get_user_aiming(id, ofiara, body)
get_user_origin(ofiara, origin)//pobieranie pozycji
origin[1] += 20;
znamie[id] = 1;
client_print(id, print_center, "Gracz naznaczony")
}
else
{
set_user_origin(id, origin)
client_print(id, print_center, "Teleport zakonczony")
} 
 
return PLUGIN_CONTINUE;
}
 
public ResetHUD(id)
{
znamie[id] = 0;
origin[id][0] = 0;
origin[id][1] = 0;
origin[id][2] = 0;
}

  • +
  • -
  • 0

#2 Droso

    Dawniej HubertTM

  • Support Team

Reputacja: 1279
Godlike

  • Postów:2371
  • Steam:steam
  • Imię:Hubert
  • Lokalizacja:Tomaszów Mazowiecki
Offline

Napisano 23.02.2014 11:47

bo origin pobiera się od środka gracza, więc musisz dodać do origin[2] += 50.0


  • +
  • -
  • 1

Piszę pluginy pod: AMX MOD X oraz SOURCE MOD!

Na zlecenie i bez zlecenia zresztą też!


#3 MAGNET

    SourceLearned ;)

  • Autor tematu
  • Moderator

Reputacja: 625
Wszechmogący

  • Postów:1510
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 23.02.2014 14:07

Niestety, za każdym razem teleportuje mnie pod mapę w to samo miejsce. Może jest problem z pobraniem originu, albo jego późniejsze zerowanie?


  • +
  • -
  • 0

#4 R3X

    Godlike

  • Przyjaciel

Reputacja: 2960
Godlike

  • Postów:4247
  • Lokalizacja:Nie
Offline

Napisano 23.02.2014 14:19   Najlepsza odpowiedź

Zawsze przenosisz do 0,0,0, ponieważ

set_user_origin(id, origin)

w tym miejscu używasz lokalnej tablicy origin[3], a globalna origin[33][3] nigdy nie otrzymuje położenia żadnego gracza.

 

 

Nie potrzebujesz lokalnej tablicy, możesz wpisać od razu do globalnej:

get_user_origin(ofiara, origin[id])//pobieranie pozycji
origin[id][1] += 20;

a potem

set_user_origin(id, origin[id])

Jednak [1] += 20 nie gwarantuje, że to będzie za plecami wybranego gracza. Musisz wiedzieć gdzie gracz patrzy i do originu dodać wektor przeciwny do znormalizowane wektoru wzroku, pomnożonego przez odległość (np. 20)

 

Jako, że fakemeta rulez:

new Float:fVec[3];
pev( ofiara, pev_v_angle, fVec ); 
fVec[2] = -fVec[2];

//Znormalizowany wektor przeciwny do wektora wzroku
angle_vector( fVec, ANGLEVECTOR_FORWARD, fVec );

//przedłużony do 20 jednostek
fVec[0] *= 20.0;
fVec[1] *= 20.0;
fVec[2] *= 20.0;

taki fVec musisz dodać do origin[3], i bedziesz mial 20 jednostek za plecami


Użytkownik undefined edytował ten post 23.02.2014 14:21

  • +
  • -
  • 3

#5 sebul

    Godlike

  • Junior Admin

Reputacja: 2016
Godlike

  • Postów:5411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 23.02.2014 14:31

Pomijając to co wyżej zostało napisane, to po "get_user_aiming" nigdzie nie sprawdzasz, czy gracz żyje, czy jest połączony.


  • +
  • -
  • 2
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
Generator tabeli expa - aż do 103600 poziomu

#6 MAGNET

    SourceLearned ;)

  • Autor tematu
  • Moderator

Reputacja: 625
Wszechmogący

  • Postów:1510
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 23.02.2014 15:09

Racja, zagapiłem się :)

Jednak chyba zrobiłem coś źle, bo przenosi mnie jeszcze niżej. 

Kod:

/* Plugin generated by AMXX-Studio */
 
#include <amxmodx>
#include <amxmisc>
#include <codmod>
#include <fakemeta>
#include <fun>
 
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
 
new znamie[33];
new origin[33][3];
 
#define nazwa "Naznaczony"
#define opis "Uzyj aby naznaczyc przeciwnika, a potem teleportowac sie za niego"
 
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
 
cod_register_perk(nazwa, opis);
 
register_event("ResetHUD", "ResetHUD", "abe");
}
 
 
public cod_perk_used(id)
{
new ofiara, body;
new Float:fVec[3];
 
if(!is_user_alive(id))
return PLUGIN_CONTINUE;
 
 
if(!znamie[id])
{
get_user_aiming(id, ofiara, body)
get_user_origin(ofiara, origin[id])//pobieranie pozycji
pev( ofiara, pev_v_angle, fVec ); 
fVec[2] = -fVec[2];
 
//Znormalizowany wektor przeciwny do wektora wzroku
angle_vector( fVec, ANGLEVECTOR_FORWARD, fVec );
 
//przedłużony do 20 jednostek
fVec[0] *= 20.0;
fVec[1] *= 20.0;
fVec[2] *= 20.0;
origin[id][0] += fVec[0]
origin[id][1] += fVec[1]
origin[id][2] += fVec[2]
znamie[id] = 1;
client_print(id, print_center, "Gracz naznaczony")
}
else
{
if(is_user_alive(ofiara))
{
set_user_origin(id, origin[id])
client_print(id, print_center, "Teleport zakonczony")
}
else client_print(id, print_center, "Gracz nie zyje")
} 
 
return PLUGIN_CONTINUE;
}
 
public ResetHUD(id)
{
znamie[id] = 0;
origin[id][0] = 0;
origin[id][1] = 0;
origin[id][2] = 0;
}

  • +
  • -
  • 0

#7 R3X

    Godlike

  • Przyjaciel

Reputacja: 2960
Godlike

  • Postów:4247
  • Lokalizacja:Nie
Offline

Napisano 23.02.2014 15:12

tak, żle; dodajesz inty do floatów, nie dostałeś ostrzeżeń przy kompilacji? tag mismatch


  • +
  • -
  • 0

#8 MAGNET

    SourceLearned ;)

  • Autor tematu
  • Moderator

Reputacja: 625
Wszechmogący

  • Postów:1510
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 23.02.2014 15:14

Nie, nie dostałem

@EDIT

Jak mam to dodać


  • +
  • -
  • 0

#9 K!113r

    Czempion

  • Power User

Reputacja: 385
Wszechpomocny

  • Postów:865
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Piotrków Tryb.
Offline

Napisano 23.02.2014 15:51

http://amxx.pl/dokum.../f1509/fvecivec

lub pobieraj i nadawaj położenie w float z engine lub fakemety


  • +
  • -
  • 0

DarkGL to mój autorytet.

skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować


#10 MAGNET

    SourceLearned ;)

  • Autor tematu
  • Moderator

Reputacja: 625
Wszechmogący

  • Postów:1510
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 23.02.2014 16:32

@Gwoździu

Floatround wystarczył ^^

 

Jak wytestuję to dam znać


  • +
  • -
  • 0

#11 MAGNET

    SourceLearned ;)

  • Autor tematu
  • Moderator

Reputacja: 625
Wszechmogący

  • Postów:1510
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 23.02.2014 20:16

Super dzięki wielce jesteście :D


  • +
  • -
  • 0

#12 GwynBleidD

    Godlike

  • Administrator

Reputacja: 1849
Godlike

  • Postów:3066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 24.02.2014 09:55

Plugin bez sensu... Rozumiem, że chcesz najpierw naznaczyć jakiegoś gracza, a później przy użyciu za każdym razem się za niego przenosić, tak?

 

Jeśli tak, to plugin zadziała inaczej... Zaznaczysz sobie pozycję gracza w momencie, gdy go naznaczasz i zawsze w to miejsce będzie Cię przenosić. powinieneś to zrobić tak:

 

Gdy znamie[id] == 0, sprawdzasz czy gracz używający itemu celuje na kogoś. Jeśli celuje, do znamie[id] zapisujesz id gracza na którego celuje i wyświetlasz komunikat "naznaczono".

 

Gdy znamie[id] != 0, sprawdzasz czy naznaczony gracz (jego id masz w znamie[id]) istnieje i żyje (jeśli nie istnieje lub nie żyje zerujesz znamie[id] i wyświetlasz komunikat), następnie pobierasz współrzędne naznaczonego gracza i przenosisz za jego plecy.

 

I nie używaj ResetHUD do zerowania. Poczytaj sobie czym on się różni, ile razy i kiedy się wykonuje i czego lepiej użyć do zerowania co rundę tego typu rzeczy.


  • +
  • -
  • 1
NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych