Witam wszystkich!
W tym tutku pokaże jak stworzyc prostą misję.
Do ExpMod'a ( http://amxx.pl/topic...-striker-mcpr0/ )
Co będzie potrzebne ?
1.Plik <expmod_mission>
2.Trochę czasu wolnego
3.Pomysłu - Dobrego
Wstęp
Na początku musimy dodać bibliotekę
#include <amxmodx>
#include <expmod_mission>
Znajdziemy je w wersji 1.9
Teraz musimy stworzyć zmienne:
new misja; // do niej będzie zwracane id misji
new enabled[33] // tutaj będziemy sprawdzać czy gracz ma włączoną misje - Wybrał ją
new nazwa[] = "Nazwa naszej misji" // Tutaj podajemy nazwę misji
new opis[] = "Zabij 5 wrogów" // Tutaj podajemy opis misji
new wymagany_lvl = 10 // Wymagany poziom
new nagroda = 1000 // Nagroda w postaci expa
new ile_czego = 5 // Ile czego - czyli 5 wrogów
Następnie dodajemy do plugin_init() natyw rejestrujący misję:
exp_register_mission(nazwa, opis, wymagany_lvl, nagroda, ile_czego)
Zwraca ona ID misji
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
misja = exp_register_mission(nazwa, opis, wymagany_lvl, nagroda, ile_czego)
}
Teraz użyjemy forwardów, które reagują na wybranie, anulowanie i ukończenie misji.
public mission_selected(id, misjaid) // Wysyła id gracza, który wybrał misję, wysyłając id misji 'misjaid'
public mission_completed(id, misjaid) // Wysyła id gracza, który ukończył, bądź anulował misje, wysyłając id misji 'misjaid'
No to ok, teraz musimy sprawdzić czy gracz wybrał misję, którą zarejestrowaliśmy, jeżeli tak, to
enabled[id] = 1;
Czyli :
public mission_selected(id, misjaid)
if(misja == misjaid)
enabled[id] = 1;
public mission_completed(id, misjaid)
if(misja == misjaid)
enabled[id] = 0;
Teraz pozostało nam tylko dodanie eventu DeathMsg i ustawienie postępu za zabicie.
czyli w plugin_init(), dodajemy event :
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
misja = exp_register_mission(nazwa, opis, wymagany_lvl, nagroda, ile_czego)
register_event("DeathMsg", "DeathMsg", "a");
}
i resztę kodu tzn. Sprawdzenie czy gracz ma misję i ustalenie mu postępu poprzez natyw:
exp_set_user_mission_progress(id, wartosc).
Aby pobrać jaki ma postęp, użyjmy natywu :
exp_get_user_mission_progress(id)
Teraz tylko funkcja death i sprawdzenie czy ma misję.
public DeathMsg()
{
new atakujacy = read_data(1);
new obronca = read_data(2);
if(!is_user_connected(atakujacy) || !is_user_connected(obronca))
return PLUGIN_CONTINUE
if(atakujacy != obronca && is_user_connected(atakujacy) && get_user_team(atakujacy) != get_user_team(obronca))
{
if(enabled[atakujacy] == 1) { // Tutaj jest sprawdzane czy ma misje
exp_set_user_mission_progress(atakujacy, exp_get_user_mission_progress(atakujacy)+1)
}
}
return PLUGIN_CONTINUE
}
No i to wszystko, tutaj cały kod :
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <expmod_mission>
#define PLUGIN "ExpMod Mission ^" Nazwa Misji^""
#define VERSION "1.0"
#define AUTHOR "PaTrIcKx"
new misja;
new enabled[33]
new nazwa[] = "Nazwa Misji"
new opis[] = "Zabij 5 wrogow"
new wymagany_lvl = 10
new nagroda = 1000
new ile_czego = 5
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
misja = exp_register_mission(nazwa, opis, wymagany_lvl, nagroda, ile_czego)
register_event("DeathMsg", "DeathMsg", "a");
}
public mission_selected(id, misjaid)
if(misja == misjaid)
enabled[id] = 1;
public mission_completed(id, misjaid)
if(misjaid == misja)
enabled[id] = 0
public DeathMsg()
{
new atakujacy = read_data(1);
new obronca = read_data(2);
if(!is_user_connected(atakujacy) || !is_user_connected(obronca))
return PLUGIN_CONTINUE
if(atakujacy != obronca && is_user_connected(atakujacy) && get_user_team(atakujacy) != get_user_team(obronca))
{
if(enabled[atakujacy == 1]) {
exp_set_user_mission_progress(atakujacy, exp_get_user_mission_progress(atakujacy)+1)
}
}
return PLUGIN_CONTINUE
}
Ok, zrobiliśmy własną misję, Brawo!
Teraz pozostaje jedna kwestia : Gdzie go dać do plugins.ini, plugins-expmod.ini.
Odpowiedź brzmi : w plugins-expmod.ini
No ok ale dam sobie do plugins.ini co się stanie ?
Misja zostanie wczytana jako pierwsza, i w menu misji wyglądać to będzie tak :
1. Nazwa Misji [10 lvl] 2. Rozbojnik [3 lvl] [...]
Ale też jest jeden problem : Zapis.
Jeżeli jakiś gracz wykonał misję Rozbojnik i ma 15 lvl. To misję "Nazwa Misji", będzie miał zablokowaną a Rozbójnik Odblokowaną.
Ponieważ jak gracz wchodzi to wczytują się dane.
No i będą bugi.
Dlatego misje zawsze dodawać do plugins-expmod.ini w polu " Misje ".
Tutaj jest lista misji :
;Misje expmod_mission_rozbojnik.amxx debug ; 3 lvl expmod_mission_profesjonalista.amxx debug ; 6 lvl expmod_mission_zamachowiec.amxx debug ; 9 lvl expmod_mission_saper.amxx debug ; 9 lvl expmod_mission_szybkiwsciekly.amxx debug ; 14 lvl expmod_mission_na_wojnie.amxx debug ; 17 lvl expmod_mission_handlarz_dmg.amxx debug ; 21 lvl expmod_mission_fanatyk.amxx debug ; 26 lvl expmod_mission_killer.amxx debug ; 34 lvl expmod_mission_lowca_glow.amxx debug ; 40 lvl expmod_mission_sprawny_team.amxx debug ; 50 lvl expmod_mission_niewidzialny.amxx debug ; 60 lvl expmod_mission_malykaliber.amxx debug ; 79 lvl expmod_mission_jakdziecko.amxx debug ; 100 lvl expmod_mission_maleniebezpieczne.amxx debug ; 115 lvl expmod_mission_misjonarz.amxx debug ; 130 lvl expmod_mission_ostatni_samuraj.amxx debug ; 149 lvl expmod_mission_leon_zawodowiec.amxx debug ; 170 lvl expmod_mission_assasin.amxx debug ; 190 lvl
Jeżeli chcecie mieć chronologicznie ustawione misje, musicie ją ustawić względem poziomów.
Czyli w tym przpadku :
expmod_mission_saper.amxx debug ; 9 lvl expmod_mission_nowa_misja.amxx ; 10 lvl expmod_mission_szybkiwsciekly.amxx debug ; 14 lvl
Lecz nie ma tego dobrego, jeżeli wpakujesz swoją misję tak jak tutaj, albo gdzieś w środku lub na początku to trzeba usunąc zapis misji z folderu :
addons/amxmodx/Zapis_v2/expmod_mission.txt
Ale jest jedno wyjście, dodanie misji na samym końcu tj. :
expmod_mission_leon_zawodowiec.amxx debug ; 170 lvl expmod_mission_assasin.amxx debug ; 190 lvl expmod_mission_nowa_misja.amxx ; 10 lvl
Lecz wtedy będzie nie będie chronologicznie i nie będziesz musiał resetować.
Szczerze ? Nie ma to zadnegoo znaczenia, tylko wpływa na wizualność ;S
Myślę, że wszystko opisałem dobrze i nie będziecie mieć problemów. W razie czego, proszę pisać jako post !
Poradnik by PaTrIcKx, kopiowanie dozwolone, tylko po dopisania autora