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
 

Zdjęcie
Inny

[TUT] Nowa Misja do ExpModa

inny

  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
Brak odpowiedzi do tego tematu

#1 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1 435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 30.08.2012 10:03

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

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 






Również z jednym lub większą ilością słów kluczowych: inny

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych