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.
|
Maciejek.
Rejestracja: 06.03.2015Aktualnie: Nieaktywny
Poza forum Ostatnio: 01.05.2016 19:51
Statystyki
- Grupa: Użytkownik
- Całość postów: 128
- Odwiedzin: 3 586
- Tytuł: Zaawansowany
- Wiek: Wiek nie został ustalony
- Urodziny: Data urodzin nie została podana
-
Imię
Maciej
-
Płeć
Mężczyzna
-
Lokalizacja
Proszowice
-
Zainteresowania
Pytasz czy jaram?
AFKORS.
Kontakt
Narzędzia użytkownika
Ostatnio byli
#710993 [ROZWIĄZANE] "Sprite" wystrzelone z broni - jak zrobić?
Napisane przez DarkGL w 28.08.2015 23:22
#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(); }
#709676 AMXMODX/SourceMod Dekompilator
Napisane przez oeN. w 15.08.2015 13:48
#709504 AMXMODX/SourceMod Dekompilator
Napisane przez sharkowy w 14.08.2015 10:06
#710645 [ROZWIĄZANE] "Sprite" wystrzelone z broni - jak zrobić?
Napisane przez Puchate w 25.08.2015 10:48
#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; }
#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`:
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.
<?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 ); ?>
#710380 Plugin podniosłeś Bombę
Napisane przez Asiap w 22.08.2015 14:42
#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
#710206 funkcja pod coś z tablicy
Napisane przez sebul w 20.08.2015 17:00
#710171 funkcja pod coś z tablicy
Napisane przez sebul w 20.08.2015 06:24
I teraz tylko rejestrujesz sobie jakieś eventy i dodajesz tam różne warunki, że w zależności od poziomu ktoś coś tam dostaje.
#170080 Jak zrobic napis jak w BF2?
Napisane przez DarkGL w 11.09.2010 11:52
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
#307758 Generator klas COD Mod
Napisane przez Gh0st w 14.10.2011 18:46
#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 ).
#435900 Tworzenie wlasnego EXP MOD'A nvault
Napisane przez sebul w 24.07.2012 19:02
- AMXX.pl: Support AMX Mod X i SourceMod
- → Przeglądanie profilu: Reputacja: Maciejek.
- Regulamin