Klasa Mnich - posiada Teleport
brains..?
03.01.2012
Witam
Jest duzo pytan o klase z teleportem wiec tutaj ją zamieszczam.
Mini Tutorial
1. Aby zmienić czas pomiędzy użyciem Teleportu nalezy zmienic 10 na dowolną liczbe:
2.Aby zmieić odległość teleportacji nalezy edytować 999 na dowolną liczbe:
Przepraszam za błędy ortograficzen, J.Polski nie jest moją mocną stroną.
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ą.
Załączone pliki
Użytkownik BRAINS...? edytował ten post 05.01.2012 14:38
Goliath
03.01.2012
Wywal z plugin_init:
Bo będzie wywalać błędy w logach. BTW, tablica ma_klase jest niepotrzebna.
register_event("DeathMsg", "DeathMsg", "ade");
Bo będzie wywalać błędy w logach. BTW, tablica ma_klase jest niepotrzebna.
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?
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
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
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 ??
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.)
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.)
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
=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
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
Mam nadzieję, że zrozumiałeś to co chciałem Ci przekazać/poprosić
Użytkownik Ranny Ptaszek edytował ten post 04.01.2012 14:26
Mam nadzieję, że zrozumiałeś to co chciałem Ci przekazać/poprosić
Użytkownik Ranny Ptaszek edytował ten post 04.01.2012 14:26
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
Ranny Ptaszek
04.01.2012
Nie wiem jak ci to wytłumaczyć, ale chciałbym coś w stylu odliczania na środku ekranu
brains..?
04.01.2012
Łap z odliczaniem
Użytkownik Rozumek124 edytował ten post 04.01.2012 19:06
Załączone pliki
Użytkownik Rozumek124 edytował ten post 04.01.2012 19:06
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
Pietras11
05.01.2012
Doszedłem do tego nie wiedziałem że to takie proste ale + dam za odp.
brains..?
05.01.2012
Lap sma ;D
Jak cos nie bedzie dzialac to pisz
#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
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
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
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
Użytkownik BRAINS...? edytował ten post 06.01.2012 10:49
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
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