by Fili:P

Plugin, jest edytowanym systemem achów, dzięki niemu sami w prosty sposób możemy pisać questy na nasz serwer. Działa na zapisie nvault. Jest przeróbką mojego pluginu: amxx.pl/topic/71853-achievements/
Mam nadzieję że wam się spodoba. Nie będę go raczej rozwijał, jedynie naprawiał bugi jeżeli takowe zaistnieją i być może jeśli będę dysponował dobrym i pewnym zapisem sql to oczywiście dodam go do tego pluginu.

W tej wersji mamy do dyspozycji tylko 1 cvar:
quest_display_gz 1 // standardowo 1, czy ma wyświetlać informację o ukończeniu questa ? (1 tak, 0 nie) quest_maxgot 2 // standardowo 2, ile mozna miec przyjetych questow na raz //cvary do sql: quest_sql_host "localhost" // host do bazy danych quest_sql_login "root" // login do bazy danych quest_sql_password "" // haslo do bazy danych quest_sql_dbname "quests" // nazwa bazy danych

NVault lub SQLx
HamSandwich
ColorChat
Aby włączyć zapis SQL w lini 12 zamieniamy:
//#define SQL
Na:
#define SQL
Oraz kompilujemy ponownie.

say /quest
say_team /quest
Wyświetla menu główne questów.

native quest_get_progress(id, quest_id); // zwraca postep w zadaniu
native quest_get_status(id, quest_id); // zwraca czy zadanie zostalo ukonczone (1 lub 0)
native quest_get_name(quest_id, const var[], len); // zwraca nazwe zadania do tablicy (max. dlugosc nazwy: 31 znaków (32-1))
native quest_get_desc(quest_id, const var[], len); // zwraca opis zadania do tablicy (max. dlugosc opisu: 255 znaków (256-1))
native quest_get_target(quest_id); // zwraca cel zadania (liczbe int)
native quest_get_max(); // zwraca ilosc dodanych zadan
native quest_set_name(quest_id, const quest_name[]); // ustawia nazwe zadaniu
native quest_set_desc(quest_id, const quest_desc[]); // ustawia opis zadaniu
native quest_set_target(quest_id, quest_target); // ustawia cel zadania
native quest_set_progress(id, quest_id, value); // ustawia postep w zadaniu
native quest_set_status(id, quest_id, value); // ustawia czy zadanie jest ukonczone (1 lub 0)
native register_quest(const quest_name[], const quest_desc[], quest_target, const quest_reward[]); // rejestruje nowe zadanie
native quest_reset_status(id, quest_id); // resetuje postep w zadaniu
native quest_add_status(id, quest_id, value); // dodaje do obecnego postepu w zadaniu wartosc 3 argumentu

forward quest_give_reward(pid, qid);
Wywoływany w momencie zaliczenia misji, dzięki niemu możemy dawać nagrodę za wykonanie misji.
forward quest_user_accept(id, qid);
Wywoływany w momencie kiedy gracz przyjmuje zadanie
forward quest_user_abandon(id, qid);
Wywoływany w momencie kiedy gracz rezygnuje z zadania.

20 luty 2012r : Ideyntyfikator zadania to uchwyt od register_quest. Biblioteka z natywami nazywa się quests.
22 luty 2012r : Od wersji 1.1 możemy przyjmować zadania, rezygnować z nich oraz przeglądać zaliczone zadania. Planuję jeszcze max. 2 aktualizacje (PA i SQL). Według mnie pod względem wizualnym wygląda to nieźle. Pomysły na nowe forwardy i natywy mile widziane. Od teraz register_quest ma nowy arguent, jest to string, w którym wpisujemy nazwę nagrody, lecz samą nagrodę musimy dawać ręcznie w quest_give_reward.
23 luty 2012r : arex92 zmotywował mnie swoim komentarzem i od dnia dzisiejszego mamy do wyboru zapis sql lub nvault, webstats postaram się zrobić do końca tygodnia.
23 luty 2012r : zamieniłem ostatni argument natywu register_quest na niewymagany.
Tworzenie questów
Tutaj opiszę jak tworzymy nowe questy.
Na początku musimy zarejestrować quest najlepiej zrobić to w plugin_init.
new g_QuestHandle1;
public plugin_init()
{
// ...
g_QuestHandle1 = register_quest("Mój quest", "Opis questu", 12, "Nagroda za quest");
}
Zmienna g_QuestHandle1 jest uchwytem do naszego zadania.
Za pomocą funkcji register_quest dodajemy nowe zadanie. Jej pierwszy argument to nazwa zadania, drugi to opis zadania, trzeci to cel zadania, ostatni czwarty nie jest wymagany możemy go nie uwzględniać jest to nazwa nagrody za ukończenie zadania. W tym momencie zadanie jest niemożliwe do ukończenia. Teraz w odpowiednim momencie musimy zwiększać wartość stanu zadania za pomocą quest_add_status. Przykład:
quest_add_status(g_QuestHandle1, 1);
Rejestracja nagrody:
public quest_give_reward(id, qid)
{
if(qid==g_QuestHandle1 && id)
{
// tutaj dodajemy nagrodę za zadanie o id g_QuestHandle1
}
}
Przykładowe zadanie:
#include <amxmodx>
#include <quests>
#include <cstrike>
#include <hamsandwich>
new qHandle1;
public plugin_init(){
register_plugin("Przykladowy quest", "1.0", "Fili:P");
RegisterHam(Ham_TakeDamage, "player", "ham_td", 1);
qHandle1 = register_quest("Niszczyciel", "Zadaj 10000 obrazen wrogom", 10000, "1000$");
}
public ham_td(this, idinflict, idattacker, Float:damage, damagebits)
{
if(this == idattacker)
return 1;
if(get_user_team(this) == get_user_team(idattacker))
return 1;
if(!idattacker)
return 1;
quest_add_status(idattacker, qHandle1, floatround(damage));
return 1;
}
public quest_give_reward(id, qid)
{
if(qid == qHandle1 && id)
cs_set_user_money(id, cs_get_user_money(id)+1000, 1);
}
Zakazuje kopiowania treści na inne witryny bez mojej zgody!




