←  Poradniki, Łatki oraz Pluginy

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
Klasa Mnich - posiada Teleport

  • +
  • -
brains..? - zdjęcie brains..? 03.01.2012

Witam


Jest duzo pytan o klase z teleportem wiec tutaj ją zamieszczam.



#include <amxmodx>
#include <codmod>
#include <fakemeta>
#include <xs>

new const nazwa[] = "Mnich";
new const opis[] = "Posiada teleport (Mozna uzyc co 10s)";
new const bronie = 1<<CSW_AK47 | 1<<CSW_FLASHBANG;
new const zdrowie = 0;
new const kondycja = 17;
new const inteligencja = 0;
new const wytrzymalosc = 6;


new bool:uzyl[33];


public plugin_init() {
register_plugin(nazwa, "1.0", "QTM_Peyote");

cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
register_event("ResetHUD", "ResetHUD", "abe");
}

public cod_class_enabled(id)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_H))
{
client_print(id, print_chat, "[Mnich] Nie masz uprawnien, aby uzywac tej klasy.")
return COD_STOP;
}

uzyl[id] = false;
return COD_CONTINUE;
}



public cod_class_skill_used(id)
{

if (!uzyl[id]==false)
{
client_print(id, print_center, "Teleport mozna uzywac co 10s");
return PLUGIN_CONTINUE;
}

if(uzyl[id] || !is_user_alive(id))
return PLUGIN_CONTINUE;

new Float:start[3], Float:view_ofs[3];
pev(id, pev_origin, start);
pev(id, pev_view_ofs, view_ofs);
xs_vec_add(start, view_ofs, start);

new Float:dest[3];
pev(id, pev_v_angle, dest);
engfunc(EngFunc_MakeVectors, dest);
global_get(glb_v_forward, dest);
xs_vec_mul_scalar(dest, 999.0, dest);
xs_vec_add(start, dest, dest);

engfunc(EngFunc_TraceLine, start, dest, 0, id, 0);

new Float:fDstOrigin[3];
get_tr2(0, TR_vecEndPos, fDstOrigin);

if(engfunc(EngFunc_PointContents, fDstOrigin) == CONTENTS_SKY)
return PLUGIN_CONTINUE;

new Float:fNormal[3];
get_tr2(0, TR_vecPlaneNormal, fNormal);

xs_vec_mul_scalar(fNormal, 50.0, fNormal);
xs_vec_add(fDstOrigin, fNormal, fDstOrigin);
set_pev(id, pev_origin, fDstOrigin);
uzyl[id] = true;
set_task ( 10.0, "ResetHUD", id )
set_task ( 10.0, "InfoTel", id )
}

public ResetHUD(id)
{
uzyl[id] = false;
}

public InfoTel(id)
{
client_print(id, print_center, "Mozesz uzyc Teleportacji");
}



Mini Tutorial :)

1. Aby zmienić czas pomiędzy użyciem Teleportu nalezy zmienic 10 na dowolną liczbe:

set_task ( 10.0, "ResetHUD", id )



2.Aby zmieić odległość teleportacji nalezy edytować 999 na dowolną liczbe:

xs_vec_mul_scalar(dest, 999.0, dest);





Przepraszam za błędy ortograficzen, J.Polski nie jest moją mocną stroną.
sharkowy (04.01.2012 13:49):
*.sma daj do załącznika.

Załączone pliki


Użytkownik BRAINS...? edytował ten post 05.01.2012 14:38
Odpowiedz

  • +
  • -
Goliath - zdjęcie Goliath 03.01.2012

Wywal z plugin_init:

register_event("DeathMsg", "DeathMsg", "ade");

Bo będzie wywalać błędy w logach. BTW, tablica ma_klase jest niepotrzebna.
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 03.01.2012

Nawet krótki kod, pewnie nie Ty pisałeś, ale testowałeś? Bo mam pytanie odnośnie tego co się dzieje, gdy ktoś próbuje teleportować się w jakiś ciasny korytarz? No i czy można zablokować się w ścianie?
Odpowiedz

System'ek - zdjęcie System'ek 03.01.2012

Mi działa.

Sebul, można się prze teleportować i nie zablokuje Cię w ciasnym korytarzy bo spadasz przed ścianą, a zablokować to udało mi się tylko raz na skrzynkach na dd2 na respie ct
Odpowiedz

Jeansy - zdjęcie Jeansy 03.01.2012

Ja już miałem tą klase wcześniej i mam takie pytanko czy w niej jest bug taki ze tylko można na wprost teleportowac się a w górę nie da się?? tzn w sensie bedziemy chcieli sie teleportowac gdzie wskażemy ccelownikiem np na góre i nas teleport-nie czy nie ??
Odpowiedz

  • +
  • -
Pietras11 - zdjęcie Pietras11 03.01.2012

Szukałem takiej klasy tylko można by zamiast ak dać m4 +
Odpowiedz

  • +
  • -
ToRRent - zdjęcie ToRRent 04.01.2012

moment, to działa tak że po użyciu gracza teleportuje do przodu o x unitów ale nie może pokonać ścian ?
czy to jest tak że gracz zostanie przeteleportowany tam gdzie miał celownik i w razie błędnego zaznaczenia trzeba jeszcze raz próbować teleportacji (jak w War3FT np.)
Odpowiedz

  • +
  • -
brains..? - zdjęcie brains..? 04.01.2012

Goliath Zapomnialem usunąć :)
=ToRRent= Gdy natrafisz przeszkode to zatrzymujesz się przed nią.
Tuptusiowy Dziala w pionie oraz poziomie.
sebul Klase testowalem, czasami mozna się zabkolokać na pochylniach
Użytkownik Rozumek124 edytował ten post 04.01.2012 14:13
Odpowiedz

  • +
  • -
Ranny Ptaszek - zdjęcie Ranny Ptaszek 04.01.2012

Najlepiej by było gdybyś dodał jakieś info na środku ekranu, np. 'Teleportacji możesz użyć za x sekund.', bo tak nie wiadomo kiedy można użyć tej teleportacji :D

Mam nadzieję, że zrozumiałeś to co chciałem Ci przekazać/poprosić ^^
Użytkownik Ranny Ptaszek edytował ten post 04.01.2012 14:26
Odpowiedz

  • +
  • -
brains..? - zdjęcie brains..? 04.01.2012

#include <amxmodx>
#include <codmod>
#include <fakemeta>
#include <xs>
new const nazwa[] = "Mnich";
new const opis[] = "Posiada teleport (Mozna uzyc co 10s)";
new const bronie = 1<<CSW_AK47 | 1<<CSW_FLASHBANG;
new const zdrowie = 0;
new const kondycja = 17;
new const inteligencja = 0;
new const wytrzymalosc = 6;

new bool:uzyl[33];

public plugin_init() {
register_plugin(nazwa, "1.0", "QTM_Peyote");

cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
register_event("ResetHUD", "ResetHUD", "abe");
register_event("InfoTel", "InfoTel", "abe");
}
public cod_class_enabled(id)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_H))
{
client_print(id, print_chat, "[Mnich] Nie masz uprawnien, aby uzywac tej klasy.")
return COD_STOP;
}

uzyl[id] = false;
return COD_CONTINUE;
}

public cod_class_skill_used(id)
{
if (!uzyl[id]==false)
{
client_print(id, print_center, "Teleport mozna uzywac co 10s");
return PLUGIN_CONTINUE;
}
if(uzyl[id] || !is_user_alive(id))
return PLUGIN_CONTINUE;

new Float:start[3], Float:view_ofs[3];
pev(id, pev_origin, start);
pev(id, pev_view_ofs, view_ofs);
xs_vec_add(start, view_ofs, start);
new Float:dest[3];
pev(id, pev_v_angle, dest);
engfunc(EngFunc_MakeVectors, dest);
global_get(glb_v_forward, dest);
xs_vec_mul_scalar(dest, 999.0, dest);
xs_vec_add(start, dest, dest);
engfunc(EngFunc_TraceLine, start, dest, 0, id, 0);

new Float:fDstOrigin[3];
get_tr2(0, TR_vecEndPos, fDstOrigin);

if(engfunc(EngFunc_PointContents, fDstOrigin) == CONTENTS_SKY)
return PLUGIN_CONTINUE;
new Float:fNormal[3];
get_tr2(0, TR_vecPlaneNormal, fNormal);

xs_vec_mul_scalar(fNormal, 50.0, fNormal);
xs_vec_add(fDstOrigin, fNormal, fDstOrigin);
set_pev(id, pev_origin, fDstOrigin);
uzyl[id] = true;
set_task ( 10.0, "ResetHUD", id )
set_task ( 10.0, "InfoTel", id )
}
public ResetHUD(id)
{
uzyl[id] = false;
}
public InfoTel(id)
{
client_print(id, print_center, "Mozesz uzyc Teleportacji");
}



Łap :) Dodalem pliki amxx oraz sma z Inforamcją o czasie do zalacznikow w temacie
Użytkownik Rozumek124 edytował ten post 04.01.2012 16:48
Odpowiedz

  • +
  • -
Ranny Ptaszek - zdjęcie Ranny Ptaszek 04.01.2012

Nie wiem jak ci to wytłumaczyć, ale chciałbym coś w stylu odliczania na środku ekranu :&
Odpowiedz

  • +
  • -
brains..? - zdjęcie brains..? 04.01.2012

Łap z odliczaniem ;)

Załączone pliki


Użytkownik Rozumek124 edytował ten post 04.01.2012 19:06
Odpowiedz

  • +
  • -
heroes - zdjęcie heroes 04.01.2012

Łap z odliczaniem ;)

zapodasz sma ?
Odpowiedz

  • +
  • -
Eustachy8 - zdjęcie Eustachy8 05.01.2012

Szukałem takiej klasy tylko można by zamiast ak dać m4 +

Szukałem takiej klasy tylko można by zamiast ak dać m4 +



to prościutkie, zamiast:
new const bronie = 1<<CSW_AK47 | 1<<CSW_FLASHBANG;
daj to
new const bronie = 1<<CSW_M4A1 | 1<<CSW_FLASHBANG;

Użytkownik Eustachy8 edytował ten post 05.01.2012 16:40
Odpowiedz

  • +
  • -
Pietras11 - zdjęcie Pietras11 05.01.2012

Doszedłem do tego nie wiedziałem że to takie proste :facepalm: ale + dam za odp.
Odpowiedz

  • +
  • -
Ranny Ptaszek - zdjęcie Ranny Ptaszek 05.01.2012

Łap z odliczaniem ;)



Można .sma?
Odpowiedz

  • +
  • -
brains..? - zdjęcie brains..? 05.01.2012

Lap sma ;D




#include <amxmodx>
#include <codmod>
#include <fakemeta>
#include <xs>
new const nazwa[] = "Mnich";
new const opis[] = "Posiada teleport (Mozna uzyc co 10s)";
new const bronie = 1<<CSW_AK47 | 1<<CSW_FLASHBANG;
new const zdrowie = 0;
new const kondycja = 17;
new const inteligencja = 0;
new const wytrzymalosc = 6;
new Odliczanie[33]
new bool:uzyl[33];

public plugin_init() {
register_plugin(nazwa, "1.0", "QTM_Peyote");
cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
register_event("ResetHUD", "ResetHUD", "abe");
}
public cod_class_enabled(id)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_H))
{
client_print(id, print_chat, "[Mnich] Nie masz uprawnien, aby uzywac tej klasy.")
return COD_STOP;
}
uzyl[id] = false;
return COD_CONTINUE;
}

public cod_class_skill_used(id)
{
if (!uzyl[id]==false)
{
client_print(id, print_center, "Teleport mozna uzywac co 10s");
return PLUGIN_CONTINUE;
}
if(uzyl[id] || !is_user_alive(id))
return PLUGIN_CONTINUE;
new Float:start[3], Float:view_ofs[3];
pev(id, pev_origin, start);
pev(id, pev_view_ofs, view_ofs);
xs_vec_add(start, view_ofs, start);
new Float:dest[3];
pev(id, pev_v_angle, dest);
engfunc(EngFunc_MakeVectors, dest);
global_get(glb_v_forward, dest);
xs_vec_mul_scalar(dest, 999.0, dest);
xs_vec_add(start, dest, dest);
engfunc(EngFunc_TraceLine, start, dest, 0, id, 0);
new Float:fDstOrigin[3];
get_tr2(0, TR_vecEndPos, fDstOrigin);
if(engfunc(EngFunc_PointContents, fDstOrigin) == CONTENTS_SKY)
return PLUGIN_CONTINUE;
new Float:fNormal[3];
get_tr2(0, TR_vecPlaneNormal, fNormal);
xs_vec_mul_scalar(fNormal, 50.0, fNormal);
xs_vec_add(fDstOrigin, fNormal, fDstOrigin);
set_pev(id, pev_origin, fDstOrigin);
uzyl[id] = true;
set_task ( 12.0, "ResetHUD", id )
set_task ( 12.0, "start", id )
}
public ResetHUD(id)
{
uzyl[id] = false;
}
public start(id)
{

Odliczanie[id] = 10 // nasza zmienna + czas ile ma odliczać do zera w tym przypadku 30sekund

if(task_exists(id + 3431))
{
remove_task(id + 3431)
}
set_task(1.0, "Koniec", id + 3431, _, _, "b")

return PLUGIN_CONTINUE
}
public Koniec(task_id)
{
new id = task_id - 3431

set_hudmessage(0, 255, 0, 0.03, 0.76, 2, 0.02, 1.0, 0.01)
show_hudmessage(id, "Za %d mozesz sie teleportowac", Odliczanie[id])

Odliczanie[id] -= 1

if(Odliczanie[id] <= 0)
{
if(task_exists(task_id))
{
remove_task(task_id)
}
}
}


Jak cos nie bedzie dzialac to pisz
Odpowiedz

  • +
  • -
Ranny Ptaszek - zdjęcie Ranny Ptaszek 05.01.2012

Wcześniejsza wersja .amxx działała lepiej. Tutaj mamy jakieś dwa odliczania, jeden na środku ekranu i bez żadnego odliczania, a po nim odliczanie z lewej strony (poprawne).

Oraz podczas kompilacji (normalnie się kompiluje, ale ja wolę beż zadnych tam errorów):

codclass_mnich.sma(63) : warning 209: function "cod_class_skill_used" should return a value
Odpowiedz

  • +
  • -
brains..? - zdjęcie brains..? 06.01.2012

#include <amxmodx>
#include <codmod>
#include <fakemeta>
#include <xs>
new const nazwa[] = "Mnich";
new const opis[] = "Posiada teleport (Mozna uzyc co 10s)";
new const bronie = 1<<CSW_AK47 | 1<<CSW_FLASHBANG;
new const zdrowie = 0;
new const kondycja = 17;
new const inteligencja = 0;
new const wytrzymalosc = 6;
new Odliczanie[33]
new bool:uzyl[33];

public plugin_init() {
register_plugin(nazwa, "1.0", "QTM_Peyote");
cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
register_event("ResetHUD", "ResetHUD", "abe");
}
public cod_class_enabled(id)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_H))
{
client_print(id, print_chat, "[Mnich] Nie masz uprawnien, aby uzywac tej klasy.")
return COD_STOP;
}
uzyl[id] = false;
return COD_CONTINUE;
}

public cod_class_skill_used(id)
{
if (!uzyl[id]==false)
{
return PLUGIN_CONTINUE;
}
if(uzyl[id] || !is_user_alive(id))
return PLUGIN_CONTINUE;
new Float:start[3], Float:view_ofs[3];
pev(id, pev_origin, start);
pev(id, pev_view_ofs, view_ofs);
xs_vec_add(start, view_ofs, start);
new Float:dest[3];
pev(id, pev_v_angle, dest);
engfunc(EngFunc_MakeVectors, dest);
global_get(glb_v_forward, dest);
xs_vec_mul_scalar(dest, 999.0, dest);
xs_vec_add(start, dest, dest);
engfunc(EngFunc_TraceLine, start, dest, 0, id, 0);
new Float:fDstOrigin[3];
get_tr2(0, TR_vecEndPos, fDstOrigin);
if(engfunc(EngFunc_PointContents, fDstOrigin) == CONTENTS_SKY)
return PLUGIN_CONTINUE;
new Float:fNormal[3];
get_tr2(0, TR_vecPlaneNormal, fNormal);
xs_vec_mul_scalar(fNormal, 50.0, fNormal);
xs_vec_add(fDstOrigin, fNormal, fDstOrigin);
set_pev(id, pev_origin, fDstOrigin);
uzyl[id] = true;
set_task ( 12.0, "ResetHUD", id )
set_task ( 12.0, "start", id )
}
public ResetHUD(id)
{
uzyl[id] = false;
}
public start(id)
{

Odliczanie[id] = 10 // nasza zmienna + czas ile ma odliczać do zera w tym przypadku 30sekund

if(task_exists(id + 3431))
{
remove_task(id + 3431)
}
set_task(1.0, "Koniec", id + 3431, _, _, "b")

return PLUGIN_CONTINUE
}
public Koniec(task_id)
{
new id = task_id - 3431

set_hudmessage(0, 255, 0, 0.03, 0.76, 2, 0.02, 1.0, 0.01)
show_hudmessage(id, "Za %d mozesz sie teleportowac", Odliczanie[id])

Odliczanie[id] -= 1

if(Odliczanie[id] <= 0)
{
if(task_exists(task_id))
{
remove_task(task_id)
}
}
}


Wersja z odliczaniem po lewej stronie.

A ten error oznacza (chyba), ze powinna zwracac jakąs wartosc ale nie moze zwrocic poniewac jest wykonywana caly czas petla ktora nigdy sie nie skonczy. Nalezalo by wprowadzic ograniczenie, ze mozna uzyc np teleportu 3 razy na runde to wtedy bedzie sma wolne od errorow ale tego jak na razie to nie potrafie xD
Użytkownik BRAINS...? edytował ten post 06.01.2012 10:49
Odpowiedz

  • +
  • -
Ranny Ptaszek - zdjęcie Ranny Ptaszek 06.01.2012

Nadal nie działa..

Po wciśnięciu teleportacji przenosi i od czasu do czasu się pojawi ten napis i nawet nie wiem jak ci to wytłumaczyć, tak jakby ten plugin liczy co innego, a to 'show_hudmessage(id, "Za %d mozesz sie teleportowac", Odliczanie[id])' jeszcze co innego..

Mógłbyś najpierw to sprawdzić? Bo chyba najlepiej byś się dowiedział jakie błędy popełniłeś :)
Użytkownik Ranny Ptaszek edytował ten post 06.01.2012 12:09
Odpowiedz