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
 

Owner123 - zdjęcie

Owner123

Rejestracja: 12.10.2009
Aktualnie: Nieaktywny
Poza forum Ostatnio: 18.12.2011 18:32
*----

#173309 Co i jak get_user_aiming

Napisane przez Owner123 w 22.09.2010 13:36

Jeśli chcesz przechwycić osobę, na która ktoś obecnie celuje używasz to poprzez np. say /aiming.
Np:

#include <amxmodx>
#include <amxmisc>

public plugin_init()
{
register_plugin("New Plugin", "1.0.0", "Owner")
register_clcmd("amx_aimslap", "cmdAiming");
}

public cmdAiming(id)
{
new bid, body;
get_user_aiming(id, bid, body);

if(body == HIT_HEAD)
user_kill(bid);
else
user_slap(bid, 0);
}


Można również, tak jak napisał Knopers, użyć prethinka:
#include <amxmodx>
#include <fakemeta>
new g_iAiming[33][2];

public plugin_init()
{
register_plugin("New Plugin", "1.0.0", "Owner")
register_clcmd("amx_aimslap", "cmdAiming");
register_forward(FM_PlayerPreThink, "fwPlayerPreThink");
}

public fwPlayerPreThink(id)
get_user_aiming(id, g_iAiming[id][0], g_iAiming[id][1]);

public cmdAiming(id)
{
if(g_iAiming[id][1] == HIT_HEAD)
user_kill(g_iAiming[id][0]);
else
user_slap(g_iAiming[id][0], 0);
}

Metoda druga jest bardziej precyzyjna, ponieważ pomimo tego że na kogoś celujemy, funkcja nie zawsze prawidłowo wykryje. Niestety takie rozwiązanie kosztuje, może zżerać więcej zasobów serwera.
  • +
  • -
  • 1


#173123 Zmienna przechowująca pięć rzeczy.

Napisane przez Owner123 w 21.09.2010 16:14

new g_aTablica[33][5];
new g_iItemNum[33];

AwardItem(id, itemnum = 0)
{
//aby nie dostać Index out of bounds
if(g_iItemNum[id] >= 5)
return;

//jakis switch z 20 itemami

// zdobywa item o jakimś id
g_aTablica[id][g_iItemNum[id]] = itemnum;
//inkrementujemy zmienną kontrolną
g_iItemNum[id]++;

return;
}

DropItem(id)
{
//resetujemy zmienne dotyczące itemów

//teraz nie mamy żadnego itemu, wiec resetujemy
g_iItemNum[id] = 0;

//resetujemy również naszą tablice z id itemow
for(new i = 0; i < 5; i++)
g_aTablica[id][i] = 0;
}


Ew. można wywalić switcha za to zrobić tablice gracza z 20 elementami (po 1 dla kazdego itemu)
new g_aTablica[33][20];
new g_iItemNum[33];

AwardItem(id, itemnum = 0)
{
//aby nie dostać Index out of bounds
if(g_iItemNum[id] >= 5)
return;

// zdobywa item o jakimś id
g_aTablica[id][itemnum] = 1;
//inkrementujemy zmienną kontrolną
g_iItemNum[id]++;

return;
}

DropItem(id)
{
//teraz nie mamy żadnego itemu, wiec resetujemy
g_iItemNum[id] = 0;

//resetujemy również naszą tablice z id itemow
for(new i = 0; i < 20; i++)
g_aTablica[id][i] = 0;
}

  • +
  • -
  • 1


#173116 Zmienna przechowująca pięć rzeczy.

Napisane przez Owner123 w 21.09.2010 15:50

Zmienna przechowująca ilość itemów.
id itemów przechowuję g_aTablica[id]
  • +
  • -
  • 1


#173113 Zmienna przechowująca pięć rzeczy.

Napisane przez Owner123 w 21.09.2010 15:35

new g_aTablica[33][5];
new g_iItemNum[33];

AwardItem(id, itemnum = 0)
{
//aby nie dostać Index out of bounds
if(g_iItemNum[id] >= 5)
return;

// zdobywa item o jakimś id
g_aTablica[id][g_iItemNum[id]] = itemnum;
//inkrementujemy zmienną kontrolną
g_iItemNum[id]++;

return;
}

  • +
  • -
  • 1


#173092 Zmienna przechowująca pięć rzeczy.

Napisane przez Owner123 w 21.09.2010 14:52

new aTablica[33][5];

for(new i = 0; i < 5; i++)
{
if(!aTablica[id][i])
return i;
}

Można tak, a można jeszcze dorobić kolejną zmienną i ją inkrementować przy dostaniu itemu i jeśli zmienna == 5 resetujemy ją i jedziemy od nowa, bądź blokujemy danie kolejnego itemu.
Druga metoda jest zdecydowanie optymalniejsza.
  • +
  • -
  • 1


#173089 Rakiety,Dynamity, I Miny w sklepie Z ogranicznikiem

Napisane przez Owner123 w 21.09.2010 14:45

To:
  if (ilosc_rakiet_gracza[id] <= 1 || ilosc_dynamitow_gracza[id] <= 1 || ilosc_min_gracza[id] <= 1 )
{
ColorChat(id,RED,"[SKLEP]^x01 Masz Juz rakiete, albo dynamit, lub mine. Zuzyj rakiety, albo dynamity, lub miny i dopiero kup. Nie mozesz miec wszystkiego na raz");
}

Można dodać przed switchem i zrobić w nim return PLUGIN_CONTINUE.
Do tego pomyliłeś operatory, powinno być >= a nie <= bo wtedy wychodzi coś zupełnie innego.
  • +
  • -
  • 1


#173072 Zmienna przechowująca pięć rzeczy.

Napisane przez Owner123 w 21.09.2010 13:57

new aTablica[33][5];
Użycie:
aTablica[id][0] = 1;
  • +
  • -
  • 1


#168284 odpychanie (velocity)

Napisane przez Owner123 w 05.09.2010 09:49

stock get_velocity_from_origin( ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3] )
{
new Float:fEntOrigin[3];
entity_get_vector( ent, EV_VEC_origin, fEntOrigin );

// Velocity = Distance / Time

new Float:fDistance[3];
fDistance[0] = fEntOrigin[0] - fOrigin[0];
fDistance[1] = fEntOrigin[1] - fOrigin[1];
fDistance[2] = fEntOrigin[2] - fOrigin[2];

new Float:fTime = ( vector_distance( fEntOrigin,fOrigin ) / fSpeed );

fVelocity[0] = fDistance[0] / fTime;
fVelocity[1] = fDistance[1] / fTime;
fVelocity[2] = fDistance[2] / fTime;

return ( fVelocity[0] && fVelocity[1] && fVelocity[2] );
}


// Sets velocity of an entity (ent) away from origin with speed (speed)

stock set_velocity_from_origin( ent, Float:fOrigin[3], Float:fSpeed )
{
new Float:fVelocity[3];
get_velocity_from_origin( ent, fOrigin, fSpeed, fVelocity )

entity_set_vector( ent, EV_VEC_velocity, fVelocity );

return ( 1 );
}


Używasz set_velocity_from_origin na encie który ma być odepchnięty i wsio ;)
  • +
  • -
  • 3


#166163 Prośba o napisanie "Random next map"

Napisane przez Owner123 w 30.08.2010 18:03

Łap:
#include <amxmodx>

new cvar_mapcyclefile;

public plugin_init()
{
register_plugin("Random Map", "1.0.0", "Owner");
fnRandomMap();
cvar_mapcyclefile = get_cvar_pointer("mapcyclefile");
}

fnRandomMap()
{
new szMapFile[32];
get_pcvar_string(cvar_mapcyclefile, szMapFile, charsmax(szMapFile));

new szText[32], iChars;
read_file(szMapFile, random(file_size(szMapFile, 1)), szText, charsmax(szText), iChars);

new szAlreadyMap[32];
get_mapname(szAlreadyMap, charsmax(szAlreadyMap));

if(equal(szAlreadyMap, szText))
fnRandomMap();

server_cmd("amx_nextmap %s", szText);
}

  • +
  • -
  • 1


#164851 Precache Blocker

Napisane przez Owner123 w 28.08.2010 11:26

Jakby nie patrzeć, z tego co napisałeś i tak robimy osobne precache i tak:D Dlatego tutaj nie powinno się cokolwiek gryźć z moim pluginem.
  • +
  • -
  • 1


#164841 Precache Blocker

Napisane przez Owner123 w 28.08.2010 11:00

Powiedz mi jak zrobić w pliku *.res precache do folderu valve a będziesz wielki :|
  • +
  • -
  • 1


#164835 Precache Blocker

Napisane przez Owner123 w 28.08.2010 10:33

Jak jakiś plugin korzysta z modeli HL powinien mieć jego osobne precache.
  • +
  • -
  • 1


#164518 Precache Blocker

Napisane przez Owner123 w 27.08.2010 13:29

Hmm, może jak odkryje jak blokować precache pojedynczych plików to może się przyda :D na razie pracuje nad dodaniem blokady dla czegoś większego, co zauważalnie odciąży serwer :)

28 sierpień 2010 - 08:41:
Wydana nowa wersja ! Teraz jeszcze mniej obciążenia procesora !!
  • +
  • -
  • 1


#164406 Precache Blocker

Napisane przez Owner123 w 27.08.2010 08:15

Właśnie tu jest problem że nie ma coś takiego jak CShield lub CBaseShield. Wszystkie precache związane z tarczą, są zawarte w precache pistoletów.

Co do obciążenia, gdy tryb SAFE jest wyłączony, różnica powinna być widoczna.

@Olowek, obciąża, uwierz mi :) Gdy to wszystko jest ładowane, te wszystkie bronie etc. to serwer ma nieco łatwiej bo jak np. wszystko jest odpalone, ma mniej roboty i wtedy serwer może być wydajniejszy.
  • +
  • -
  • 2


#164330 Precache Blocker

Napisane przez Owner123 w 26.08.2010 22:18

Precache Blocker v1.1.0 by Owner

Dołączona grafika
Dzięki temu pluginowi, zablokujesz ładowanie niepotrzebnych rzeczy. Np. na serwerach ZMI, nie używa się hostów, paki, dzięki temu pluginowi bez problemu odciążysz procesor z tych kilku(set) zbędnych ładowań.
Obecnie do zablokowania jest:
AWP,
AutoKampa CT i TT,
M249 (Krowa),
Paka, Hosty,
HalfLife =)

Plugin wymaga dodatkowego modułu Orpheu.

Dołączona grafika

Ściagamy i instalujemy moduł Orpheu. Do pobrania stąd: Module: Orpheu2.3a - AlliedModders

Folder orpheu z precache_blocker.rar wrzucamy do addons/amxmodx/configs. Edit.Nowa sygnatura !

Reszta przebiega standardowo.

Dołączona grafika

fakemeta
orpheu

Dołączona grafika

Blokadę danej rzeczy dokonujemy przy użyciu cvarów(podane niżej).
W pluginie można włączyć tryb SAFE. Jest tryb który zabezpiecza się, przed ewentualnymi błędami. Np. zablokowano hosty, a grana jest mapa typu cs_, crash gwarantowany !
Aby włączyć tryb SAFE, otwieramy precache_block.sma i szukamy:
//#define SAFE

i zamieniamy to na:
#define SAFE


Dołączona grafika

precache_c4 - [0|1] - blokada precache paki gdy mapa nie jest de_*
precache_hostage - [0|1] - bloakada precache hostów gdy nie ma mapy cs_*
precache_awp - [0|1] - blokada precache Awp.
precache_sg550/g3sg1 - [0|1] - blokada precache autokampy CT/TT
precache_m249 - [0|1] - blokada precache m249 (krowy)
precache_hl - [0|1] - blokada precache związanego z HalfLife. Obecnie jest zablokowane ok. 90% wszystkiego.

Dołączona grafika


Changelog

v 1.0.0 :
- Wydanie pluginu
v 1.1.0 :
- Zmiana systemu usuwania precache bomby/hostów.
- Dodanie cvara precache_hl.

Załączone pliki


  • +
  • -
  • 4