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
 

diablix - zdjęcie

diablix

Rejestracja: 22.01.2010
Aktualnie: Nieaktywny
Poza forum Ostatnio: 26.03.2020 17:08
****-

#575678 Tworzenie bytów o dowolnych kształtach

Napisane przez diablix w 05.10.2013 21:07

Pewnego dnia postanowiłem rozwiać wszelkie wątpliwości na temat tworzenia bytów o dowolnych kształtach, ponieważ chciałem w końcu stworzyć coś nowego używając amxxa, niż tylko marne bryły w kształcie sześcianów/prostopadłościanów.

 

Okazało się to możliwe i to w niemożliwie prosty sposób  :crazy:

SOLID_BSP

No, ale co dalej?

 

Cała magia polega na tym, że musimy stworzyć "pustą" mapę w VHE, tworząc na środku niej naszą bryłę. Jako jej teksturę ustawiamy CLIP.

Dodajemy dowolne "point entity", np info_null. Kompilujemy mapę, otrzymujemy plik .bsp.

 

Następnie musimy stworzyć swój własny model, o rozmiarach takich samych jak nasza bryła w pliku .bsp. Jak go stworzyć nie będę tłumaczyć, ponieważ mnie samego wyręczył znajomy.  :^D

 

Posiadając plik .bsp oraz .mdl wystarczy już tylko napisać plugin stawiający nasze dwa byty w jednym miejscu -

  • jeden posiadający model x.bsp + SOLID_BSP + MOVETYPE_PUSH (jest to jedyny movetype "wspołpracujący" z solid_bsp);
  • drugi posiadający model x.mdl 

I to tyle. Pierwszy byt będzie niewidoczny ale będzie odpowiadać za dotyk, drugi natomiast jest modelem zapewniającym "oteksturowanie" tego pierwszego - nie posiadającym dotyku.

 

Przykład w kodzie:

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <engine>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"

enum _:Wut{
	BSP,
	MDL
};

new g_sWut[Wut][0xE] = {
	"maps/x.bsp",
	"models/x.mdl"
};

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_concmd("stworz", "_Stworz");
}

public plugin_precache() {
	for(new i ; i < Wut ; i++) precache_model(g_sWut[i]);
}

public _Stworz(id){
	new Float:fOrigin[0x3];
	entity_get_vector(id, EV_VEC_origin, fOrigin);
	fOrigin[0x2]-=36.0;
	
	new iEnt = create_entity("func_wall");
	entity_set_origin(iEnt, fOrigin);
	entity_set_int(iEnt, EV_INT_movetype, 0x7); //MOVETYPE_PUSH
	entity_set_int(iEnt, EV_INT_solid, 0x4);
	entity_set_model(iEnt, g_sWut[BSP]);
	
	new iRendered = create_entity("info_target");
	entity_set_origin(iRendered, fOrigin);
	entity_set_model(iRendered, g_sWut[MDL]);
}

Kod ten stworzy byt(y) pod naszymi stopami.

 

Załączam przykładowy kod wraz z przykładowym modelem oraz plikiem .bsp.

 

 

Załączone pliki


  • +
  • -
  • 10


#413630 Obrażenia w zależności od dystansu

Napisane przez diablix w 23.05.2012 15:08

Przepisując quakemoda wpadłem na pomysł modyfikacji strzelby.
Celem jej było określenie bazowych obrażeń (jeszcze przed ustaleniem miejsca trafienia)
w zależności od odległości między ofiarą a atakującym.

_dmgR(Float:fOdleglosc, Float:fDamage, Float:fMnoznik, Float:fProcent){
new Float:fMaxDmg = fDamage*fMnoznik;
new Float:fIle, Float:fIloraz;

fIloraz = fProcent/0x64;

fIle = fMaxDmg - fOdleglosc*fIloraz;

if(fIle > fMaxDmg) fIle = fMaxDmg;

return floatround(floatmax(fIle, fDamage*random_float(0.1, 0.25)));
}


Przykładowe zastosowanie

new iDmg = _dmgR(entity_range(iPlayer, iTarget), 55.0, 2.0, 30.0); //Maksymalny dmg = 110 (fDamage*fMnoznik), fProcent = 30, obrazenia zostana obnizone o 30% dystansu


W przypadku ujemnych obrażeń (osiągnięty maksymalny dystans) obrażenia będą równe 10~25% parametru fDamage
  • +
  • -
  • 4


#379090 Respawn.

Napisane przez diablix w 11.03.2012 19:04

Na podstawie tego co DarkGL powiedział spróbuj tak


public naRespa(id){
static const sKlasy[][] = {
"info_player_deathmatch",
"info_player_start"
};

new Float:fPozycja[0x3], iEnt, iTr, iHull = pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN;
while ((iEnt = find_ent_by_class(iEnt, sKlasy[get_user_team(id)-0x1]))){
pev(iEnt, pev_origin, fPozycja);
engfunc(EngFunc_TraceHull, fPozycja, fPozycja, 0x0, iHull, id, iTr);

if(!get_tr2(iTr, TR_StartSolid) || !get_tr2(iTr, TR_AllSolid)){
set_pev(id, pev_origin, fPozycja);
engfunc(EngFunc_DropToFloor, id);
}
}
}

  • +
  • -
  • 1


#376932 [ROZWIĄZANE] Zwracanie i ustawianie armoru w fakemecie

Napisane przez diablix w 07.03.2012 20:48

pev_armortype

ARMOR_NONE = 0
ARMOR_KEVLAR = 1
ARMOR_VESTHELM = 2


  • +
  • -
  • 1


#376921 [HNS EasyBlock] Nowe funkcje na prośbę

Napisane przez diablix w 07.03.2012 20:30

#3

Nazwa funkcji: Latający dywan
Opis: Gracz kieruje bytem
Użyte pliki nagłówkowe: fakemeta.inc

Spoiler

  • +
  • -
  • 2


#376908 [HNS EasyBlock] Nowe funkcje na prośbę

Napisane przez diablix w 07.03.2012 20:18

#2

Nazwa funkcji: Czarna Dziura
Opis: Przyciąga jeden byt do drugiego z ustaloną siłą
Użyte pliki nagłówkowe: xs.inc, fakemeta.inc

Spoiler

  • +
  • -
  • 2


#376903 [HNS EasyBlock] Nowe funkcje na prośbę

Napisane przez diablix w 07.03.2012 20:11

#1

Nazwa funkcji: GPS
Opis: Stając na nim zostaje utworzona linia która wskazuje miejsce najbliższego przeciwnika
Użyte pliki nagłówkowe: fakemeta.inc

Spoiler

  • +
  • -
  • 2


#376901 [HNS EasyBlock] Nowe funkcje na prośbę

Napisane przez diablix w 07.03.2012 20:09

Gotowe bloczki dla serwerów HNS-EasyBlock

Wpadłem ostatnio na taki pomysł.
Z racji iż zajmuję się takimi serwerami od dobrych 2 lat co najmniej i wiele osób poszukuje nowych kodów do blockmakera/bcm'a,
zgodnie z umową którą zawarłem z Hiroshima będę tutaj na prośbę (albo jeżeli ktoś inny znajdzie czas i chęci :) ) wykonywał nowe funkcje dla bloczków
o które poprosicie albo sam wymyślę :)

Krótkie zasady w tym temacie
  • Nie wyrażamy swojej opinii o temacie
  • Prosimy o kod
  • Pytamy o instalację
  • Zgłaszamy nie działający kod

  • +
  • -
  • 1


#375981 [ROZWIĄZANE] Zmienne statyczne

Napisane przez diablix w 05.03.2012 19:27

I z tego co wiem statyczna zapamiętuje swoją wartość tylko raz i nie można jej modyfikować, ale mogę się mylić.

public cmdTest(id){
static test; test++;

client_print(id, 0x3, "%d", test);
}


Za każdym razem będzie o jeden więcej

1
2
3
4


  • +
  • -
  • 1


#375294 [ROZWIĄZANE] Admin chat (u@) na kolorowo

Napisane przez diablix w 04.03.2012 18:26

Plugin w załączniku.

Załączone pliki


  • +
  • -
  • 4


#355676 Dalszy rzut granatem

Napisane przez diablix w 30.01.2012 16:02

Ze względu na wiele prośb edytowałem pierwszy post i są dostępne dwie wersje :)
  • Zwykła - z czasem idealnym jak dla mnie;
  • Z dopiskiem _modifiable - posiadająca cvar;

  • +
  • -
  • 1


#355005 [ROZWIĄZANE] Ham_killed oraz DeathMsg

Napisane przez diablix w 28.01.2012 23:55

W Hamie możesz uwzględnić na jaką klase ma działać forward i czy zostanie on wywołany przed czy po śmierci (Pre/Post)
DeathMsg natomiast wywołuje się przy każdej śmierci.
  • +
  • -
  • 1


#355003 Dalszy rzut granatem

Napisane przez diablix w 28.01.2012 23:53

Dodałem screeny :)
  • +
  • -
  • 0


#354994 Dalszy rzut granatem

Napisane przez diablix w 28.01.2012 23:38

Dalszy rzut granatem 0.1
by diablix

opis
Przytrzymując rzut nasz granat poleci dalej.
Wygląda to dość ciekawie - wypełnia się pasek mocy czyli rzutu.
Osiągając maksymalną moc zmienia kolor na pomarańczowy :)

wymagane moduly
  • Fakemeta
  • Hamsandwich
instalacja
  • dalszy_rzut.amxx wrzucamy do cstrike/addons/amxmodx/plugins
  • dopisujemy dalszy_rzut.amxx na końcu pliku konfiguracyjnego plugins.ini zlokalizowanego w cstrike/addons/amoxmodx/configs
Zamieszczam screeny

Dołączona grafika
Dołączona grafika


download

Załączone pliki


  • +
  • -
  • 9


#353889 Rozróżnianie tekstu z odstępami

Napisane przez diablix w 26.01.2012 02:52

Krótki kodzik, wiele osób tego szukało więc zamieszczam :gwizd:

stock przygotujTekst(sTekst[], iLen){
for(new i = iLen-0x1 ; i ; i--){
if(sTekst[i] == ' ') sTekst[i] = EOS;

if(sTekst[i-0x1] != ' ') break;
}
}


Jak on dokładnie działa? Otóż przydaje się on gdy chcemy porównać dwa teksty które mogą się różnic ilością "spacji" na końcu tekstu.
Przydatne dla osób które tworzą własne lub modyfikują czyjeś pluginy.

Najprościej to będzie opisać w przykładowym zastosowaniu:


public sprawdzDwaTeksty(id){
new sTekst[0x2][0x10];

ArrayGetString(g_sNazwa, 0x1, sTekst[0x0], sizeof sTekst[]-0x1); // "Tekst"
ArrayGetString(g_sNazwa, 0x2, sTekst[0x1], sizeof sTekst[]-0x1); // "Tekst "

przygotujTekst(sTekst[0x0], sizeof sTekst[] - 0x1);
przygotujTekst(sTekst[0x1], sizeof sTekst[] - 0x1);

if(equal(sTekst[0x0], sTekst[0x1]))
log_amx("Dwa teksty zostaly DOKLADNIE porownane, ich tresc jest identyczna.");
}


U mnie się to naprzykład przydało w pluginie w którym gracz tworzył drużyny, aby nie mógł za nic ustawić takiej samej nazwy drużyny jak inna :)
  • +
  • -
  • 2