Skocz do zawartości

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
Nowy Plugin

Bomb Hound Eye - Bomb Marker

nowy plugin

Najlepsza odpowiedź psilocybe, 04.12.2014 17:51

@up,

 

Racja, tak by było :D Tyle ile na serwerze graczy razy niewiadomo ile Thinków = crash serwera :)

 

Teraz jest po prostu task z flagą "b", uruchamia go drop bomby a usuwa pickup i działa jak należy :)

 

Już ogarnąłem to co chciałem na ten moment. Dzięki za pomoc.

 

Plugin wrzucę na listę, jak by ktoś potrzebował ;)

 

CLOSE.

Przejdź do postu


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
12 odpowiedzi w tym temacie

#1 psilocybe

    Toasty!

  • Power User

Reputacja: 252
Wszechwidzący

  • Postów:524
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:PL
Offline

Napisano 04.12.2014 11:54

Witam, zachciało mi się napisać plugin który będzie pomagał w odnalezieniu leżącej paki.

 

Pomyslałem że to będzie proste. Bynajmniej :D

 

Użyłem eventu BombDrop oraz efektu Hound Eye z HL (TE_BEAMCYLINDER) :)

 

Problem w tym że w evencie BombDrop pierwsze trzy argumenty to nie jak myślałem origin paki, lecz origin gracza w momencie dropnięcia paki.

 

No i puszcza mi sprite'a z miejsca gdzie stałem podczas dropu zamiast od środeczka paki :(

 

 

1. Jak pobrać origin leżącej na ziemi paki?

 

2. Jak zapętlić "puszczanie" BEAMCYLINDER np. co 3 sekundy, dopóki paka nie zostanie podniesiona (BombPickup)

 

Prosił bym o przykłady jak pobrać origin entów (leżąca paka jest entem?) oraz przykłady Tasków, jak to ugryźć? Bo chyba taskiem będziemy "puszczać" efekt?

 

 

Z góry dzięki za pomoc, liczę na Was :)

#include <amxmodx>

new gSprBeam

public plugin_init()
{
	register_plugin("Houndeye Bomb", "0.1", "psilocybe")
	register_event("BombDrop", "bomb_drop", "b", "4=0")
}

public plugin_precache()
{
	gSprBeam = precache_model("sprites/white.spr")
}

public bomb_drop()
{
	client_print(0, print_chat, "X: %d, Y: %d, Z: %d", read_data(1), read_data(2), read_data(3)); // sprawdzalem czy pobiera wpolrzedne

	message_begin( MSG_BROADCAST, SVC_TEMPENTITY, {0,0,0} );
	write_byte( TE_BEAMCYLINDER );
	write_coord( read_data(1) );
	write_coord( read_data(2) );
	write_coord( read_data(3) );
	write_coord( read_data(1) );
	write_coord( read_data(2) + 5 );
	write_coord( read_data(3) + 150 );
	write_short( gSprBeam );
	write_byte( 0 ); // startframe
	write_byte( 0 ); // framerate
	write_byte( 200 ); // life
	write_byte( 10 ); // width
	write_byte( 255 ); // noise
	write_byte( 255 ); // r, g, b
	write_byte( 10 ); // r, g, b
	write_byte( 10 ); // r, g, b
	write_byte( 180 ); // brightness
	write_byte( 2 ); // speed
	message_end();
}

Ps. Gdyby ktoś był w stanie wyciągnąć efekt HoundEye z HL to było by za***iście, chodzi o to że pieski puszczały kilka kółeczek gdy szczekały i na pewno nie było tasków :D

 

Wykład nt. HoundEye'ów:

 

:D


  • +
  • -
  • 0

Dołączona grafika

Dołączona grafika


#2 ^Szeregowy^

    Wszechwidzący

  • Zbanowany

Reputacja: 67
Pomocny

  • Postów:238
  • GG:
  • Imię:Damian
  • Lokalizacja:Płock
Offline

Napisano 04.12.2014 12:35

Orgin Podlozonej

 

public bomb_planted( planter )

{
new Float:origin[3];
get_user_origin(planter, origin)
}

 

lub z fakemeta:

public bomb_planted( planter )
{
new Float:origin[3];
pev(planter, pev_origin, origin)
}

 
 
Orgin Lezacej
 
new c4 = -1

while((c4 = find_ent_by_model(c4, "grenade", "sciezka_do_modelu_paki")))
{
new Float:origin[3];
get_user_origin(c4, origin)
}

 

Bądź w fakemecie

[sma]
new c4 = -1
while((c4 = find_ent_by_model(c4, "grenade", "sciezka_do_modelu_paki")))
{
new Float:origin[3];
pev(c4, pev_origin, origin)
}

 

 
 
Co do samego śledzenia, jest to dosyć proste do zrealizowania. Na początku rundy śledzisz do kogo trafia paka:
 
register_event("WeapPickup", "event_got_bomb", "be", "1=6")
 
Event ładnie zwraca id gracza, który dostaje bombę. Później przelatujesz po jego "inventory" i dopadasz bombę. Gdy ją znajdziesz, zapisujesz id enta do zmiennej globalnej i później przez cały czas pobierasz pozycję tego enta. 

 

A tu masz rozwiązanie prostrze i znajdujące wszystkie niepodłożone bomby na mapie:
[sma]
new ent=-1, Float:origin[3];



while((ent = find_ent_by_class(ent, "weapon_c4"))){

    pev(ent, pev_origin, origin);

    

}



ent=-1;

while((ent = find_ent_by_model(ent, "weaponbox", "models/w_backpack.mdl"))){

    pev(ent, pev_origin, origin);

    

}


Użytkownik ^Szeregowy^ edytował ten post 04.12.2014 12:40

ZNAJOMOŚĆ AMXX [%]

JAILBREAK[90%]2cp5bgj.jpg

COD MOD[70%]f5krm.jpg

PAINTBALL[40%]15f3vhc.jpg

ZOMBIE MOD[10%]1zp32m9.jpg

POZOSTAŁE[5%]34fldsg.jpg


#3 psilocybe

    Toasty!

  • Autor tematu
  • Power User

Reputacja: 252
Wszechwidzący

  • Postów:524
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:PL
Offline

Napisano 04.12.2014 13:52

Wkleiłeś jakiś wyrwany z pluginu kod, poświęcił byś choć minute i edytował mój kod, pokazał w jakim evencie i kiedy mam pobrać origin tego enta.

 

Nie mam pojęcia jak się teraz za to zabrać. :(


  • +
  • -
  • 0

Dołączona grafika

Dołączona grafika


#4 ^Szeregowy^

    Wszechwidzący

  • Zbanowany

Reputacja: 67
Pomocny

  • Postów:238
  • GG:
  • Imię:Damian
  • Lokalizacja:Płock
Offline

Napisano 04.12.2014 13:54

To sa funkcje z pluginu xD 


Użytkownik ^Szeregowy^ edytował ten post 04.12.2014 13:54

ZNAJOMOŚĆ AMXX [%]

JAILBREAK[90%]2cp5bgj.jpg

COD MOD[70%]f5krm.jpg

PAINTBALL[40%]15f3vhc.jpg

ZOMBIE MOD[10%]1zp32m9.jpg

POZOSTAŁE[5%]34fldsg.jpg


#5 ^Szeregowy^

    Wszechwidzący

  • Zbanowany

Reputacja: 67
Pomocny

  • Postów:238
  • GG:
  • Imię:Damian
  • Lokalizacja:Płock
Offline

Napisano 04.12.2014 13:56

 

#include <amxmodx>

#include <amxmisc>

#include <fakemeta>



#define PLUGIN "New Plug-In"

#define VERSION "1.0"

#define AUTHOR "NIE ZNANY"



#define DROP 87123



new id_paki;

public plugin_init() {

register_plugin(PLUGIN, VERSION, AUTHOR)



register_logevent("logSpawBomb", 3, "2=Spawned_With_The_Bomb");

register_logevent("logSpawBomb", 3, "2=Got_The_Bomb");



register_logevent("logDropBomb", 3, "2=Dropped_The_Bomb");



register_logevent("logPlantBomb", 3, "2=Planted_The_Bomb");



register_forward(FM_PlayerPostThink, "fwPlayerPostThink");

}



public logSpawBomb()

{

remove_task(DROP);

id_paki = engfunc(EngFunc_FindEntityByString, -1, "classname", "weapon_c4");

}



public logDropBomb()

{

set_task(0.1, "taskDrop", DROP);

}



public taskDrop()

{

id_paki = fm_find_ent_by_model(-1, "weaponbox", "models/w_backpack.mdl");

}



public logPlantBomb()

{

id_paki = 0;

}



public fwPlayerPostThink(id)

{

if(!is_user_alive(id))

return;



if(!pev_valid(id_paki))

return;



new Float:PakaOrigin[3];

pev(id_paki, pev_origin, PakaOrigin);

//tu dalej kod na wyświetalnie tego co chcesz ...

}



stock fm_find_ent_by_model(index, const classname[], const models[])

{

new ent = index, model[32];

while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", classname)))

{

pev(ent, pev_model, model, 31);

if(equal(model, models))

return ent;

}

return 0;

}


Użytkownik ^Szeregowy^ edytował ten post 04.12.2014 13:57

ZNAJOMOŚĆ AMXX [%]

JAILBREAK[90%]2cp5bgj.jpg

COD MOD[70%]f5krm.jpg

PAINTBALL[40%]15f3vhc.jpg

ZOMBIE MOD[10%]1zp32m9.jpg

POZOSTAŁE[5%]34fldsg.jpg


#6 psilocybe

    Toasty!

  • Autor tematu
  • Power User

Reputacja: 252
Wszechwidzący

  • Postów:524
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:PL
Offline

Napisano 04.12.2014 14:58

Dobra kolego, pomogłeś tym postem :)

 

Jestem już blisko :D

 

Aktualnie kod wygląda tak:

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>

new gSprBeam, id_paki
     
public plugin_init()
{
	register_plugin("Houndeye Bomb", "0.1", "psilocybe");
	register_logevent("logDropBomb", 3, "2=Dropped_The_Bomb");
	register_forward(FM_PlayerPostThink, "fwPlayerPostThink");
}

public plugin_precache()
{
	gSprBeam = precache_model("sprites/white.spr")
}

public logDropBomb()
{
	set_task(3.0, "taskDrop");
}

public taskDrop()
{
	id_paki = fm_find_ent_by_model(-1, "weaponbox", "models/w_backpack.mdl");
}

public fwPlayerPostThink(id)
{
	if(!is_user_alive(id))
	return;

	if(!pev_valid(id_paki))
	return;

	new Float:forigin[3], origin[3]
	pev(id_paki,pev_origin,forigin)	
	FVecIVec(forigin,origin)

	client_print(0, print_chat, "X: %d, Y: %d, Z: %d", origin[0], origin[1], origin[2]);

	message_begin( MSG_BROADCAST, SVC_TEMPENTITY, {0,0,0} );
	write_byte( TE_BEAMCYLINDER );
	write_coord( origin[0] );
	write_coord( origin[1] );
	write_coord( origin[2] );
	write_coord( origin[0] );
	write_coord( origin[1] + 5 );
	write_coord( origin[2] + 150 );
	write_short( gSprBeam );
	write_byte( 0 ); // startframe
	write_byte( 0 ); // framerate
	write_byte( 200 ); // life
	write_byte( 10 ); // width
	write_byte( 255 ); // noise
	write_byte( 255 ); // r, g, b
	write_byte( 10 ); // r, g, b
	write_byte( 10 ); // r, g, b
	write_byte( 180 ); // brightness
	write_byte( 2 ); // speed
	message_end();
}

stock fm_find_ent_by_model(index, const classname[], const models[])
{
new ent = index, model[32];
while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", classname)))
{
pev(ent, pev_model, model, 31);
if(equal(model, models))
return ent;
}
return 0;
}

No i przez PostThink chyba nie mogę wysyłać tego BEAM'a bo dzieje się coś takiego:

 

de_dust2_long00012.jpg

 

Tak co kilka sekund wywala setki BEAMów :D

 

Ja chcę puszczać jeden BEAM co 3 sekundy :) Jak to zrobić teraz?


  • +
  • -
  • 0

Dołączona grafika

Dołączona grafika


#7 ^Szeregowy^

    Wszechwidzący

  • Zbanowany

Reputacja: 67
Pomocny

  • Postów:238
  • GG:
  • Imię:Damian
  • Lokalizacja:Płock
Offline

Napisano 04.12.2014 15:39

taskem xD


Użytkownik ^Szeregowy^ edytował ten post 04.12.2014 15:41

ZNAJOMOŚĆ AMXX [%]

JAILBREAK[90%]2cp5bgj.jpg

COD MOD[70%]f5krm.jpg

PAINTBALL[40%]15f3vhc.jpg

ZOMBIE MOD[10%]1zp32m9.jpg

POZOSTAŁE[5%]34fldsg.jpg


#8 psilocybe

    Toasty!

  • Autor tematu
  • Power User

Reputacja: 252
Wszechwidzący

  • Postów:524
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:PL
Offline

Napisano 04.12.2014 15:40

Spoko że mogę edytować :D

 

Wyrzuciłem PostThink, dałem task podczas dropu i puszcza ładnie Beam'a po 3.3s od dropnięcia paki ale tylko raz :D

 

Pytanie: Jak zapętlić set_task(3.0, "beamTask"); a później usunąć w evencie BombPickup? Nie ogarniam tasków :D Mogę to zrobić "na pałę" ale nie o to chodzi :P

 

Aktualnie działający plugin:

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>

new gSprBeam, id_paki
     
public plugin_init()
{
	register_plugin("Houndeye Bomb", "0.1", "psilocybe");
	register_logevent("logDropBomb", 3, "2=Dropped_The_Bomb");
}

public plugin_precache()
{
	gSprBeam = precache_model("sprites/white.spr")
}

public logDropBomb()
{
	set_task(0.3, "taskDrop");
}

public taskDrop()
{
	id_paki = fm_find_ent_by_model(-1, "weaponbox", "models/w_backpack.mdl");
	set_task(3.0, "beamTask");
}

public beamTask()
{
	if(!pev_valid(id_paki))
	return;

	new Float:forigin[3], origin[3]
	pev(id_paki,pev_origin,forigin)	
	FVecIVec(forigin,origin)

	client_print(0, print_chat, "X: %d, Y: %d, Z: %d", origin[0], origin[1], origin[2]);

	message_begin( MSG_BROADCAST, SVC_TEMPENTITY, {0,0,0} );
	write_byte( TE_BEAMCYLINDER );
	write_coord( origin[0] );
	write_coord( origin[1] );
	write_coord( origin[2] );
	write_coord( origin[0] );
	write_coord( origin[1] + 5 );
	write_coord( origin[2] + 150 );
	write_short( gSprBeam );
	write_byte( 0 ); // startframe
	write_byte( 0 ); // framerate
	write_byte( 200 ); // life
	write_byte( 10 ); // width
	write_byte( 255 ); // noise
	write_byte( 255 ); // r, g, b
	write_byte( 10 ); // r, g, b
	write_byte( 10 ); // r, g, b
	write_byte( 180 ); // brightness
	write_byte( 2 ); // speed
	message_end();
}

stock fm_find_ent_by_model(index, const classname[], const models[])
{
new ent = index, model[32];
while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", classname)))
{
pev(ent, pev_model, model, 31);
if(equal(model, models))
return ent;
}
return 0;
}

  • +
  • -
  • 0

Dołączona grafika

Dołączona grafika


#9 ^Szeregowy^

    Wszechwidzący

  • Zbanowany

Reputacja: 67
Pomocny

  • Postów:238
  • GG:
  • Imię:Damian
  • Lokalizacja:Płock
Offline

Napisano 04.12.2014 15:45

 

public nazwa(id) 

{

id-=291 << id wymysl

)

 

i potem tam gdzie wylaczasz

 

if(task_exists(id+291))

remove_task(id+291); 

 


Użytkownik ^Szeregowy^ edytował ten post 04.12.2014 15:46

ZNAJOMOŚĆ AMXX [%]

JAILBREAK[90%]2cp5bgj.jpg

COD MOD[70%]f5krm.jpg

PAINTBALL[40%]15f3vhc.jpg

ZOMBIE MOD[10%]1zp32m9.jpg

POZOSTAŁE[5%]34fldsg.jpg


#10 wiwi249

    Wszechobecny

  • Użytkownik

Reputacja: 150
Profesjonalista

  • Postów:440
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Tarnobrzeg
Offline

Napisano 04.12.2014 16:01

po prostu odsyłaj się do beamTask z jakimś id, jak napisane jest wyżej.

Zróbmy jakieś id dla tego tasku, np. 98765.

set_task(3.0, "beamTask", 98765)

Tą linijkę sobie wrzuć zarówno tam, gdzie masz taskDrop i na końcu funkcji beamTask tak samo, wtedy się zapętli.

Następnie w evencie podniesienia bomby, po prostu sprawdzasz czy istnieje task o takim id i jeśli tak, to go usuwasz.

if(task_exists(98765))
   remove_task(98765)

  • +
  • -
  • 1

Wykonuję strony internetowe, zlecenia AMXX i HLDS - w tym pisanie pluginów, ogarnianie serwerów, edycja i tworzenie modeli.

Potrzebujesz czegoś? Pisz!

 

"śpieszmy się pisać posty, tak szybko banują..." ~ sebul


#11 psilocybe

    Toasty!

  • Autor tematu
  • Power User

Reputacja: 252
Wszechwidzący

  • Postów:524
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:PL
Offline

Napisano 04.12.2014 16:07

Za dużo palę chyba :D

 

Rzuciłem okiem na to:

 

http://amxx.pl/topic...unkcje-czasowe/

 

No i napisałem podobnie jak wyżej :P Zapętliłem taska, dodałem event BombPickup i w nim remove_task :P

 

Plugin działa jak chciałem, pozostało dopracować Beam'a i będzie super :D

 

Dopracuję to wrzucę na listę pluginów, bo szukałem podobnej wtyczki i nie znalazłem :)

 

Dzięki za pomoc. Proszę jeszcze nie zamykać ;)


  • +
  • -
  • 0

Dołączona grafika

Dołączona grafika


#12 wiwi249

    Wszechobecny

  • Użytkownik

Reputacja: 150
Profesjonalista

  • Postów:440
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Tarnobrzeg
Offline

Napisano 04.12.2014 16:13

Noo, osobiście uważam trochę bez sensu robić takie efekty, które są dla wszystkich, na bazie postThinka, bo to jest funkcja dotycząca jednego gracza, a masz wyraźnie wypisane przy robieniu HoundEye, że ma to być MSG_BROADCAST, czyli ma być widoczna dla wszystkich graczy. W sumie to to chyba by się wykonywało przy każdym thinku każdego gracza, czyli HoundEye'ów robiłoby się tyle, ile jest na serwerze graczy. Musiałbym sprawdzić.


  • +
  • -
  • 0

Wykonuję strony internetowe, zlecenia AMXX i HLDS - w tym pisanie pluginów, ogarnianie serwerów, edycja i tworzenie modeli.

Potrzebujesz czegoś? Pisz!

 

"śpieszmy się pisać posty, tak szybko banują..." ~ sebul


#13 psilocybe

    Toasty!

  • Autor tematu
  • Power User

Reputacja: 252
Wszechwidzący

  • Postów:524
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:PL
Offline

Napisano 04.12.2014 17:51   Najlepsza odpowiedź

@up,

 

Racja, tak by było :D Tyle ile na serwerze graczy razy niewiadomo ile Thinków = crash serwera :)

 

Teraz jest po prostu task z flagą "b", uruchamia go drop bomby a usuwa pickup i działa jak należy :)

 

Już ogarnąłem to co chciałem na ten moment. Dzięki za pomoc.

 

Plugin wrzucę na listę, jak by ktoś potrzebował ;)

 

CLOSE.


  • +
  • -
  • 0

Dołączona grafika

Dołączona grafika






Również z jednym lub większą ilością słów kluczowych: nowy plugin

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

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