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
 

Maciejek. - zdjęcie

Maciejek.

Rejestracja: 06.03.2015
Aktualnie: Nieaktywny
Poza forum Ostatnio: 01.05.2016 19:51
-----

#710993 [ROZWIĄZANE] "Sprite" wystrzelone z broni - jak zrobić?

Napisane przez DarkGL w 28.08.2015 23:22

http://amxx.pl/topic...rk-palec-zeusa/
  • +
  • -
  • 2


#710877 [ROZWIĄZANE] "Sprite" wystrzelone z broni - jak zrobić?

Napisane przez Asiap w 27.08.2015 20:06

przykladowy plugin
 

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

new g_pSprite;

public plugin_precache()
{
	g_pSprite = engfunc(EngFunc_PrecacheModel, "sprites/nazwa_sprite.spr");
}

public plugin_init()
{
	register_plugin("Sprite Attack", "1.0", "asiap");

	new szName[24];
	for(new i = CSW_P228; i <= CSW_P90; i++)
	{
		if(!((1<<CSW_KNIFE|1<<CSW_HEGRENADE|1<<CSW_SMOKEGRENADE|1<<CSW_FLASHBANG|1<<CSW_C4) & 1<<i) && get_weaponname(i, szName, 23))
		{
			RegisterHam(Ham_Weapon_PrimaryAttack, szName, "WeaponPrimaryAttack", 1);
		}
	}
}

public WeaponPrimaryAttack(iEnt)
{
	if(!get_pdata_int(iEnt, 51, 4))
	{
		return;
	}

	static Float:vecOrigin[3];
	pev(get_pdata_cbase(iEnt, 41, 4), pev_origin, vecOrigin);

	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0);
	write_byte(TE_SPRITE);
	engfunc(EngFunc_WriteCoord, vecOrigin[0]);
	engfunc(EngFunc_WriteCoord, vecOrigin[1]);
	engfunc(EngFunc_WriteCoord, vecOrigin[2]);
	write_short(g_pSprite);
	write_byte(5);
	write_byte(255);
	message_end();
}

  • +
  • -
  • 1


#709676 AMXMODX/SourceMod Dekompilator

Napisane przez oeN. w 15.08.2015 13:48

CheQu, zostaw biednego Darka :X

 

W takim stanie jakim jest aktualnie dekompilator wiele nie zdziałamy żeby odczytać najważniejszą część pluginu, niestety. Wydaje mi się że łatwiej napisać plugin na podstawie tego w jaki sposób działa na serwerze ^D^


  • +
  • -
  • 1


#709504 AMXMODX/SourceMod Dekompilator

Napisane przez sharkowy w 14.08.2015 10:06

Czy to jest już szczyt możliwości, czy może jednak jest możliwa pełna dekompilacja pluginu amxx? do stanu takiego, jak przed kompilacją? :P


  • +
  • -
  • 1


#710645 [ROZWIĄZANE] "Sprite" wystrzelone z broni - jak zrobić?

Napisane przez Puchate w 25.08.2015 10:48

Moze podejrzyj jak wyglada sprawa w paintball modzie.


  • +
  • -
  • 1


#710529 Zmiana nicku czitera co sekunde, jak tego zapobiec ?

Napisane przez Asiap w 24.08.2015 06:04

#include <amxmodx>
#include <fakemeta>

new g_iMsgSayText;

public plugin_init()
{
	register_forward(FM_ClientUserInfoChanged, "ClientUserInfoChanged");

	g_iMsgSayText = get_user_msgid("SayText");
}

public ClientUserInfoChanged(id, szKey) {
	static iLastMsgTime[33], iFloodCounter[33];

	new szOldName[32], szNewName[32];
	get_user_name(id, szOldName, 31);
	engfunc(EngFunc_InfoKeyValue, szKey, "name", szNewName, 31)

	if(equal(szOldName, szNewName))
	{
		return FMRES_IGNORED;
	}

	if(get_systime() - iLastMsgTime[id] < 3) // 3 co ile sekund mozna zmieniac nick
	{
		if(++iFloodCounter[id] > 5) // 5 maksymalna liczba prob zmiany nicku
		{
			iLastMsgTime[id] = iFloodCounter[id] = 0;
			engfunc(EngFunc_SetClientKeyValue, id, szKey, "name", szOldName);
			return FMRES_IGNORED;
		}
	}
	else if(iFloodCounter[id])
	{
		--iFloodCounter[id];
	}

	iLastMsgTime[id] = get_systime();

	if(is_user_connected(id))
	{
		message_begin(MSG_BROADCAST, g_iMsgSayText);
		write_byte(id);
		write_string("#Cstrike_Name_Change");
		write_string(szOldName);
		write_string(szNewName);
		message_end();
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

  • +
  • -
  • 1


#710326 Połączenie z jedną i dwiema bazami jednocześnie oraz wyświetlanie błędów

Napisane przez R1d4r w 21.08.2015 23:58

Witam,
Można połączyć się z bazą danych za pomocą zdefiniowanych stałych tak jak w tym temacie: Współpraca PHP z MySQL. Ja wytłumaczę, jak prościej i przejrzyściej połączyć się z bazą danych, a potem jak dodawać kolejne połączenia do zupełnie innych baz danych i używanie mysql_query do nich.
Przykładowa tabela w bazie danych o nazwie `users`:
baza danych `users`.jpg

1. Połączenie z jedną bazą danych.
Na początku należy podać dane do połączenia z bazą (ja użyję tutaj zmiennej tablicowej)

<?php
/* Dane do polaczenia z MYSQL #1 */
$DBone['host'] = 'localhost'; // Nazwa host (zazwyczaj localhost)
$DBone['db'] = ''; // Nazwa bazy danych
$DBone['user'] = ''; // login do użytkownika, przez które chcesz łączyć się z bazą danych
$DBone['password'] = ''; // Hasło do użytkownika, przez które chcesz łączyć się z bazą danych

/* Łączenie się z bazą danych #1 */
$connectONE = @mysql_connect($DBone['host'], $DBone['user'] , $DBone['password'])
or die('Brak połączenia z serwerem MySQL #1.<br />Błąd: '.mysql_error());
$db_one = @mysql_select_db($DBone['db'] , $connectONE)
or die('Nie mogę połączyć się z bazą danych #1<br />Błąd: '.mysql_error());
?>

Wyjaśnienie:

$connectONE - zmienna, która ma za zadanie łączyć się z serwerem bazy danych.

$db_one - zmienna, która łączy się z bazą danych wcześniej podanego serwera bazy danych.

Nazwę hosta bazy danych można znaleźć u usługodawcy serwera baz danych. Nie musi być to localhost!

 

Często później po wczytaniu danych z bazy danych, nie wyświetlają się polskie znaki. Powodem jest tego brak ustawienia formatu danych pobieranych z serwera MySQL. W tym wypadku należy użyć po połączeniu się z bazami danych:

mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER_SET utf8_unicode_ci");

Tym sposobem wykonujemy zapytanie do bazy danych tak:

$zapytanie = mysql_query("SELECT * FROM users WHERE `id`='1'");
$pierwszy_uzytkownik = mysql_fetch_assoc($zapytanie);
echo $pierwszy_uzytkownik['nick'];

Powyższy kod wyświetli nick użytkownika o ID 1. W tym wypadku Metal.
 
2. Połączenie z dwiema bazą danych.
Nie jest to trude, wystarczy podwoić ten kod z pierwszego i pozmieniać zmienne tak, by nie były takie same. W innym wypadku będziemy się łączyli dwa razy do tej samej bazy danych, a to raczej zbędne. No to lecimy. :D
 

<?php
/* Dane do polaczenia z MYSQL #1 */
$DBone['host'] = 'localhost'; // Nazwa host (zazwyczaj localhost)
$DBone['db'] = ''; // Nazwa bazy danych
$DBone['user'] = ''; // login do użytkownika, przez które chcesz łączyć się z bazą danych
$DBone['password'] = ''; // Hasło do użytkownika, przez które chcesz łączyć się z bazą danych

/* Łączenie się z bazą danych #1 */
$connectONE = @mysql_connect($DBone['host'], $DBone['user'] , $DBone['password'])
or die('Brak połączenia z serwerem MySQL #1.<br />Błąd: '.mysql_error());
$db_one = @mysql_select_db($DBone['db'] , $connectONE)
or die('Nie mogę połączyć się z bazą danych #1<br />Błąd: '.mysql_error());

/* Dane do polaczenia z MYSQL #2 */
$DBtwo['host'] = 'localhost'; // Nazwa host (zazwyczaj localhost)
$DBtwo['db'] = ''; // Nazwa bazy danych
$DBtwo['user'] = ''; // login do użytkownika, przez które chcesz łączyć się z bazą danych
$DBtwo['password'] = ''; // Hasło do użytkownika, przez które chcesz łączyć się z bazą danych

/* Łączenie się z bazą danych #2 */
$connectTWO = @mysql_connect($DBtwo['host'], $DBtwo['user'] , $DBtwo['password'])
or die('Brak połączenia z serwerem MySQL #2.<br />Błąd: '.mysql_error());
$db_two = @mysql_select_db($DBtwo['db'] , $connectTWO)
or die('Nie mogę połączyć się z bazą danych #2<br />Błąd: '.mysql_error());
?>

 
Gdy już to mamy, należałoby spytać, jak wykonać zapytanie, żeby dało się zapisać takie samo dla 2 różnych baz danych. Odpowiedź jest bardzo prosta.

$zapytanie = mysql_query("SELECT * FROM users WHERE `id`='1'", $connectONE);
$pierwszy_uzytkownik = mysql_fetch_assoc($zapytanie);
echo $pierwszy_uzytkownik['nick'];


$zapytanie2 = mysql_query("SELECT * FROM users WHERE `id`='1'", $connectTWO);
$pierwszy_uzytkownik2 = mysql_fetch_assoc($zapytanie2);
echo $pierwszy_uzytkownik2['nick'];

Załóżmy, że na obu bazach danych jest ta sama tabela users w bazie danych, ten kod wyświetli nam ten sam tekst. Należy pamiętać, że formuła zapytania będzie po prostu taka: mysql_query("TREŚĆ ZAPYTANIA", $ZMIENNA);
$ZMIENNA oznacza tą zmienną, którą ustaliliśmy przy mysql_connect, która posłużyła do połączenia z danym serwerem bazy danych.
 
3. Zapytania do MySQL:
Wypiszę tu kilka najważniejszych zapytań, ponieważ nie wszyscy nowi mogą je znać.
 
SELECT * FROM `users` WHERE `nick`='Metal'

To zapytanie wyszuka linię w tablicy o nazwie `users` gdzie `nick` jest równy 'Metal'

UPDATE `users` SET `id`='1' WHERE `nick`='Metal'

To zapytanie zaktualizuję linię na id 1, gdzie nick jest równy 'Metal'.

INSERT INTO `users` SET `id`='1' AND `nick`='Metal' AND `hasło`='jakies_haslo' AND `email`='metal@' AND `lokalizacja`='Polska'

To zapytanie dodaje do bazy danych właśnie tą linię co jest podana na obrazku na samej górze. :)

4. Wyjaśnienia ogólne:
@ przed funkcjami (np. przy mysql_connect) - oznacza to, żeby użytkownikowi nie wyświetlało się nic o błędach.
echo - polecenie, które ma za zadanie wyświetlić to co jest między " lub zmienną. Na przykład: echo "Jakiś tekst"; wyswietli nam Jakiś tekst.
Tablice zmiennych - jest to jedna zmienna-matka, która posiada wiele swoich dzieci pod danymi index'ami. Używane są po to by ułatwić i usprawnić kod. $zmienna_matka['index'].
mysql_fetch_assoc - jest to polecenie, którego używa się do przypisywania do zmiennych tablicowych danej treści, która jest zawarta w danej linii w bazie danych. Na php.net można znaleźć definicję "Zapisuje wiersz wyniku w tablicy asocjacyjneję". Ja podaję taką, którą pojąć powinni zieloni w tym temacie.

AND - w zapytaniach może być stosowane zamiennie z przecinkiem(",").

5. Wyświetlanie błędów.
Często się zdarza tak, że mamy 10000 linijek kodu, a nie chce poprawnie działać kod. Nie możemy znaleźć błędu - czasem i tak bywa. Z pomocą nam przychodzą dwie linijki kodu, które trzeba dodać na początku pliku. Wyświetli nam on w której linijce jest błąd.

<?PHP
ini_set( 'display_errors', 'On' ); 
error_reporting( E_ALL );
?>

  • +
  • -
  • 2


#710380 Plugin podniosłeś Bombę

Napisane przez Asiap w 22.08.2015 14:42

maciejek co ty za glupoty wpisujesz 

w evencie WeapPickup jest dodany parametr 1 (bron) na 6 = CSW_C4 (bomba) wiec nie trzeba juz dodawac go w funkcji...

bombe moze podnosic tylko terrorysci wiec nie ma sensu sprawdzanai druzyny...


  • +
  • -
  • 1


#710234 Zamiana z sma na amx

Napisane przez NoLiFeR w 21.08.2015 02:06

1. Wchodzisz na strone 

http://amxx.pl/kompilator/

2. Klikasz na przycisk "Choose File"

 

3. Wchodzisz w odpowiednią lokalizacje, na twoim dysku, gdzie znajduje się plik sma

4. Klikasz czarny przycisk "Kompiluj"

 

5. Powinneś dostać komunikat "Twój plugin został skompilowany!"

 

6. Klikasz na niepozorny przycisk "POBIERZ"

 

7. Plik .amxx znajduje się na Twym dysku :)


  • +
  • -
  • 1


#710206 funkcja pod coś z tablicy

Napisane przez sebul w 20.08.2015 17:00

Prostych, przykładowych pluginów nie ma, bo tyle ile wymyślisz sobie mocy, tyle będzie tych "prostych", "przykładowych" pluginów.
  • +
  • -
  • 2


#710171 funkcja pod coś z tablicy

Napisane przez sebul w 20.08.2015 06:24

Cały temat http://amxx.pl/topic...xp-moda-nvault/
I teraz tylko rejestrujesz sobie jakieś eventy i dodajesz tam różne warunki, że w zależności od poziomu ktoś coś tam dostaje.
  • +
  • -
  • 1


#170080 Jak zrobic napis jak w BF2?

Napisane przez DarkGL w 11.09.2010 11:52

frajer pomyśl przed napisanie posta :|
new HUD[128]
format(HUD, 127,"[%s] Aktualny Exp: %d | Caly exp: %d",rangi[level[id]],player_xp[id],player_xp_all[id]);
message_begin(MSG_ONE, get_user_msgid("StatusText"), {0,0,0}, id);
			write_byte(0);
			write_string(HUD); 
			message_end();
ten format to tylko przykład
  • +
  • -
  • 4


#307758 Generator klas COD Mod

Napisane przez Gh0st w 14.10.2011 18:46

Full profesjonal. :)
Ładne ułożenie wogóle, estetyka no i skrypt. dałbym 2 plusy ale się nie da ^^
  • +
  • -
  • 1


#436926 Tworzenie wlasnego EXP MOD'A nvault

Napisane przez sebul w 27.07.2012 12:31

#include <amxmodx>
#include <amxmisc>
#include <nvault>


new const CLASSES[][] = {
"None",
"Dog",
"Cat",
"Horse",
"Cow"
}

new const LEVELS[] = {
0,
100,
200,
400,
800,
1600,
3200
}

new PlayerXP[33], PlayerLevel[33], PlayerClass[33];
new XP_Kill, XP_Knife, XP_Hs, SaveXP, g_vault;

public plugin_init() {
register_plugin("XpMod", "1.0", "Fxfighter");

register_event("DeathMsg", "eDeath", "a");

SaveXP = register_cvar("SaveXP", "1");
XP_Kill = register_cvar("XP_per_kill", "20");
XP_Hs = register_cvar("XP_hs_bonus", "20");
XP_Knife = register_cvar("XP_knife_bonus", "20");
g_vault = nvault_open("animod");

register_clcmd("say /class", "ChangeClass");
register_clcmd("say_team /class", "ChangeClass");
register_clcmd("say /xp", "ShowHud");
register_clcmd("say_team /xp", "ShowHud");
}

public eDeath() {
new attacker = read_data(1);
new iVictim = read_data(2);

if(!is_user_connected(attacker) || !is_user_connected(iVictim))
return;

if(attacker == iVictim) // mozna tez dodac sprawdzanie druzyn
return;

new headshot = read_data(3);
new weaponname[32];
read_data(4, weaponname, 31);

if(equal(weaponname, "grenade")) {
format(weaponname, 31, "weapon_he%s", weaponname);
}
else if(!equal(weaponname, "weapon_", 7))
format(weaponname, 31, "weapon_%s", weaponname);

new weapon = get_weaponid(weaponname);

PlayerXP[attacker] += get_pcvar_num(XP_Kill);

if(headshot)
PlayerXP[attacker] += get_pcvar_num(XP_Hs);

if(weapon == CSW_KNIFE)
PlayerXP[attacker] += get_pcvar_num(XP_Knife);

new bool:zdobyl, bool:stracil;
while(PlayerXP[attacker] >= LEVELS[PlayerLevel[attacker]])
{
++PlayerLevel[attacker];
zdobyl = true;
}
while(PlayerXP[attacker] < LEVELS[PlayerLevel[attacker]])
{
--PlayerLevel[attacker];
stracil = true;
}
if(stracil) {
client_print(attacker, print_chat, "Spadles do %i poziomu!", PlayerLevel[attacker]);
}
else if(zdobyl) {
client_print(attacker, print_chat, "Awansowales do %i poziomu!", PlayerLevel[attacker]);
}
ShowHud(attacker);
SaveData(attacker);
}

public ShowHud(id) {
set_hudmessage(255, 0, 0, 0.75, 0.01, 0, 6.0, 15.0);
show_hudmessage(id, "Level: %i^nXP: %i^nClass: %s", PlayerLevel[id], PlayerXP[id], CLASSES[PlayerClass[id]]);

return PLUGIN_HANDLED;
}

public ChangeClass(id) {
new menu = menu_create("Class Menu", "Class_Handle");

new ile = sizeof(CLASSES);
for(new i=1; i<ile; ++i)
menu_additem(menu, CLASSES[i]);

menu_display(id, menu);

return PLUGIN_HANDLED;
}

public Class_Handle(id, menu, item) {
if(item++ == MENU_EXIT) {
menu_destroy(menu);
return PLUGIN_HANDLED;
}

if(PlayerClass[id] != item) {
PlayerClass[id] = item;
client_print(id, print_chat, "You are now a %s", CLASSES[item]);
}
else {
client_print(id, print_chat, "You are alredy a %s", CLASSES[item]);
}

menu_destroy(menu);
return PLUGIN_HANDLED;
}

public client_authorized(id) {
PlayerXP[id] = 0;
PlayerLevel[id] = 1;
PlayerClass[id] = 0;

if(get_pcvar_num(SaveXP) == 1)
LoadData(id);
}

public client_disconnect(id) {
if(get_pcvar_num(SaveXP) == 1)
SaveData(id);

PlayerXP[id] = 0;
PlayerLevel[id] = 1;
PlayerClass[id] = 0;
}

public SaveData(id) {
if(g_vault == INVALID_HANDLE)
return;

new AuthID[32]; get_user_authid(id, AuthID, 31);

new vaultkey[64], vaultdata[128];
format(vaultkey, 63, "%s-Mod", AuthID);
format(vaultdata, 127, "%i %i", PlayerXP[id], PlayerLevel[id]);
nvault_set(g_vault, vaultkey, vaultdata);
}

public LoadData(id) {
if(g_vault == INVALID_HANDLE)
return;

new AuthID[32]; get_user_authid(id, AuthID, 31);

new vaultkey[64], vaultdata[128];
format(vaultkey, 63, "%s-Mod", AuthID);
if(nvault_get(g_vault, vaultkey, vaultdata, 127)) {
new playerxp[11], playerlevel[11];
parse(vaultdata, playerxp, 10, playerlevel, 10);

PlayerXP[id] = str_to_num(playerxp);
PlayerLevel[id] = str_to_num(playerlevel);
}
}

Według mnie, tak powinna wyglądać całość (mniej niż 200 linijek :D).
  • +
  • -
  • 12


#435900 Tworzenie wlasnego EXP MOD'A nvault

Napisane przez sebul w 24.07.2012 19:02

Dużo błędów i niedociągnięć, ale wiem, że to nie Twój kod, więc nie można mieć do Ciebie żadnych uwag, choć wypadało by poprawić kod przed taką publikacją.
  • +
  • -
  • 3