[URL] https://amxx.pl/topic/71853-achievements/
![[Image: amxxopis.png]](http://img207.imageshack.us/img207/2500/amxxopis.png)
Cześć, zaprezentuje wam system achievementów, niestety jedynie z zapisem
nvault, ponieważ sql-a jeszcze nie zrozumiałem. Jeśli jest ktoś chętny to może
pomóc w zapisie sql. Starałem się napisać ten plugin jak najbardziej
optymalnie. W przyszłych wersjach postaram się dodać natywy i być może
forwardy, aby każdy achievement był w oddzielnym pliku lub, aby wszystkie
achievenemty były w jednym oddzielnym pliku.

Standardowa.
![[Image: amxxmoduly.png]](http://img534.imageshack.us/img534/112/amxxmoduly.png)
Nvault,
HamSandwich,
Colorchat.
![[Image: amxxcmd.png]](http://img15.imageshack.us/img15/8023/amxxcmd.png)
say /ach
say_team /ach
Wyświetla menu ze statusem achievementów, po wyborze itemu w menu pojawia się
jego opis i obecny stan.
![[Image: amxxcvary.png]](http://img715.imageshack.us/img715/4153/amxxcvary.png)
ach_display_gz 0/1 - standardowo 1, jeśli 0 to po zdobyciu acha nie wyświetla "Gratulacje %s! Zdobyłeś osiągnięcie %s!", jest stworzone, ponieważ forwardem możemy robić to sami ( forward nie testowany ).
![[Image: amxxinne.png]](http://img214.imageshack.us/img214/4930/amxxinne.png)
W obecnej wersji nie ma cvarów, bo nie widziałem takiej konieczności. Pierwszy
raz pracował z tak dużą ilością (jak na mnie) zdarzeń silnika gry. Możliwe że
zamiast używać Fakemety HamSandiwch i CSX wystarczyło użyć samej kanapki, lecz
jeśli tak to w przyszłej wersji. Póki co mamy do dyspozycji 11 osiągnięć
oczywiście dodam więcej. Dodawanie achievementów jest o tyle fajne, iż nawet
na nvault nie jest wymagane resetowanie zapisu ani edytowanie go co dodanie
osiągnięcia. Sprawdzenie czy osiągniecie jest zaliczone występuję jedynie w
HamSpawn. Mam nadzieję, że spodoba wam się mój plugin. Proszę pisać komentarze
przede wszystkim z uzasadnieniem.
![[Image: amxxnatywy.png]](http://img810.imageshack.us/img810/8978/amxxnatywy.png)
native ach_get_index(const name[]);
native ach_get_stance(id, ach_id); // pobiera czy gracz zaliczył acha czy nie 0/1
native ach_get_status(id, ach_id); // pobiera postęp w achu
native ach_get_name(ach_id, const var[], len); // pobiera nazwe acha
native ach_get_desc(ach_id, const var[], len); // pobiera opis acha
native ach_get_target(ach_id); // pobiera cel acha (wymagany postep)
native ach_get_max(); // pobiera ilosc stworzonych achow
native ach_set_stance(id, ach_id, value); // ustawia stan acha
native ach_set_status(id, ach_id, value); // ustawia postep w acha
native ach_add(const ach_name[], const ach_desc[], ach_target);
native ach_reset_status(id, ach_id); // resetuje postep acha (ustawia na 0) przydatne jezeli robimy achy typu w rundzie
native ach_add_status(id, ach_id, value); // dodaje x punktów do obecnej wartosci postepu acha
![[Image: amxxforwardy.png]](http://img85.imageshack.us/img85/7667/amxxforwardy.png)
forward ach_give_reward(pid, aid); // wywolywany kiedy gracz otrzymuje info o ukończeniu acha ( możemy mu tu dać nagrode ).
forward ach_load_post( id ); // wywolywany po wczytaniu danych, aby bezpiecznie operowac w client_authorized <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/smile.png' class='bbc_emoticon' alt=':)' />
forward ach_save_pre( id, save_in ); // wywoływany przed zapisem danych, dobrze jest tu zmienić na przykład wartość postępu, aby nie kolidować z systemem
forward ach_save_post( id, save_in ); // wywolywany po zapisie danych.
save_in może mieć 2 wartości:
#define SAVE_IN_DISCONNECT 1
#define SAVE_IN_DEATH 2
Wartość 1 jest wywoływana przy wyjściu z serweru, a 2 przy śmierci gracza. Oczywiście przy wyjściu z serwera nie wywołuje się ach_save_post, bo to nie miałoby sensu.
Oświadczam wam, że pracuje teraz nad nową wersją.

* 1.0.0
Podstawowa wersja.
* 1.0.0b łatka i dodanie kilku achów
Dodana łatka
Dodanie kilku achów
* 1.0.1
Dodanie 4 natywów
Możliwość dostawania w nagrodę za ukończenie acha xp-a w nowym cod modzie
Łatka [dzięki torrent]
* 1.0.1b
Wymagany moduł engine
Naprawa acha "Żywy lampion"
Naprawa acha "Pan śmierci"
Nowy cvar
Forward wywoływany podczas otrzymania acha ( nie testowany )
* 1.0.1c
Łatka zapisu
* 1.0.2
Dodanie natywów
Dodanie forwardu
* 1.1.0
Użycie tablic dynamicznych (dzięki DarkGL i Muzzi za pomoc przy tablicach)
Dodanie natywów
Usunięcie achów, ponieważ możemy je tworzyć sami jak klasy do coda
* 1.1.1
Optymalizacja.
Dodanie 3 nowych forwardów.
Usunięcie kilku zbędnych natywów.
![[Image: amxxdodatki.png]](http://img267.imageshack.us/img267/2066/amxxdodatki.png)
Przykładowy kod z użyciem forwardu:
#include <amxmodx>
#include <achievements>
public plugin_init() {
register_plugin("test", "1.0", "Fili:P")
}
public ach_give_reward(pid, aid)
{
client_print(pid, print_chat, "Zaliczyles acha!");
}
Przykładowy kod tworzący acha w oddzielnym pluginie:
#include <amxmodx>
#include <achievements>
new g_HandleAch;
public plugin_init() {
register_plugin("achy", "1.0", "Fili:P")
g_HandleAch = ach_add("Staly bywalec", "Wejdz 1000 razy na serwer", 1000);
}
public client_putinserver(id)
{
ach_add_status(id, g_HandleAch, 1);
}
_**Radze opozniac taskiem funkcje, ktore bd w chwili wejscia na serwer**_
Projekt nie będzie już rozwijany, chyba że zrozumiem sqlx. Mogą występować
błędy kiedy usuwamy achy.
Zakazuje kopiowania treści na inne witryny bez mojej zgody!
![[Image: amxxdownload.png]](http://img526.imageshack.us/img526/4844/amxxdownload.png)
Wersja 1.1.0:
[
[**achievements.sma**](https://amxx.pl/index.php?app=core&modul...h_id=31786
"Pobierz załącznik") **9,82 KB** 511 Ilość pobrań
[
![[Image: amxx.gif]](http://amxx.pl/public/style_extra/mime_types/amxx.gif)
"Pobierz plik AMXX")
[
[**achievements.inc**](https://amxx.pl/index.php?app=core&modul...h_id=30285
"Pobierz załącznik") **804 bajtów** 448 Ilość pobrań
Wersja 1.1.1:
[
[**achievements.inc**](https://amxx.pl/index.php?app=core&modul...h_id=47413
"Pobierz załącznik") **1,02 KB** 562 Ilość pobrań
[
[**achievements.sma**](https://amxx.pl/index.php?app=core&modul...h_id=47414
"Pobierz załącznik") **8,69 KB** 640 Ilość pobrań
[
![[Image: amxx.gif]](http://amxx.pl/public/style_extra/mime_types/amxx.gif)
"Pobierz plik AMXX")
Załączniki:
achievements.inc
achievements.sma