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

Jak napisać nowy achievement do ExpMod by Striker

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 25.04.2013 12:25

Witam ! :giggle:

 

Dzisiaj pokażę wam jak napisać nowy achievement do expmoda by striker

http://amxx.pl/topic/88605-expmod-by-striker-mcpr0/

W tym poradniku będę używać najnowszej wersji, czyli 1.9.7 fixed


Ok, co będzie potrzebne ?

 

Plik .inc expmod_achievements
AMXX Pawn Studio ( Bądź jakiś inny edytor np. tekstowy)
Kompilator

Ok zaczynamy !:

 

1. Dopisujemy nowe include a mianowicie:


#include <expmod_achievements>


czyli nasz kod powinien wyglądać już tak:

#include <amxmodx>
#include <amxmisc>
#include <expmod_achievements>

#define PLUGIN "Nazwa pluginu"
#define VERSION "1.0"
#define AUTHOR "Autor"

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

}



2. Tworzymy wszystkie zmienne globalne, jakie bedziemy używać w tym achievemencie

//Jest to przykładowe
new const szNameI[] = "Nazwa Poziomu I"; // Np Killer I
new const szNameII[] = "Nazwa Poziomu II"; // Np Killer II
new const szNameIII[] = "Nazwa Poziomu III"; // Np Killer II

new const szDescI[] = "Opis Poziomu I"; //Np Zabij 10 wrogów
new const szDescII[] = "Opis Poziomu II"; //Np Zabij 15 Wrogów
new const szDescIII[] = "Opis Poziomu III"; //Np Zabij 20 Wrogów

new szAwardI = 100; //Nagroda za osiągnięcie 1 poziomu tego osiągnięcia
new szAwardII = 500; // -- || -- 2 -- || --
new szAwardIII = 2500; // -- || -- 3 -- || --

new szLvlI = 0; // Od którego poziomu bedzie aktywowany Poziom I tego osiągnięcia
new szLvlII = 70; // -- || -- Poziom 2 -- || --
new szLvlIII = 160; // -- || -- Poziom 3 -- || --

new szNeedI = 10; // Ile czego potrzeba zeby zrobic cos z szDescI[] tutaj w tym przypadku będzie to 10 wrogów
new szNeedII = 15; // -- || --
new szNeedIII = 20; // -- || -

new enabled[33][3]; // Tworzy zmienną która będzie przechowywać wartości czy dany poziom jest aktywny i gracz może wykonywać tę osiągnięcie
new ach[3]; // id 3 poziomów achievementa


Wiem, że to wygląda strasznie, ale naprawdę jest proste :)

3. Rejestrujemy ten achievement

Do plugin_init dajemy


ach[0] = exp_register_achI(szNameI, szDescI, szLvlI, szAwardI, szNeedI)
ach[1] = exp_register_achII(szNameII, szDescII, szLvlII, szAwardII, szNeedII)
ach[2] = exp_register_achIII(szNameIII, szDescIII, szLvlIII, szAwardIII, szNeedIII)


Czyli nasz cały dotychczasowy kod powinien wyglądać tak:


#include <amxmodx>
#include <amxmisc>
#include <expmod_achievements>

#define PLUGIN "ExpMod Achievement Killer"
#define VERSION "1.0"
#define AUTHOR "PaTrIcKx"

new const szNameI[] = "Nazwa Poziomu I"; // Np Killer I
new const szNameII[] = "Nazwa Poziomu II"; // Np Killer II
new const szNameIII[] = "Nazwa Poziomu III"; // Np Killer II

new const szDescI[] = "Opis Poziomu I"; //Np Zabij 10 wrogów
new const szDescII[] = "Opis Poziomu II"; //Np Zabij 15 Wrogów
new const szDescIII[] = "Opis Poziomu III"; //Np Zabij 20 Wrogów

new szAwardI = 100; //Nagroda za osiągnięcie 1 poziomu tego osiągnięcia
new szAwardII = 500; // -- || -- 2 -- || --
new szAwardIII = 2500; // -- || -- 3 -- || --

new szLvlI = 0; // Od którego poziomu bedzie aktywowany Poziom I tego osiągnięcia
new szLvlII = 70; // -- || -- Poziom 2 -- || --
new szLvlIII = 160; // -- || -- Poziom 3 -- || --

new szNeedI = 10; // Ile czego potrzeba zeby zrobic cos z szDescI[] tutaj w tym przypadku będzie to 10 wrogów
new szNeedII = 15; // -- || --
new szNeedIII = 20; // -- || -

new enabled[33][3]; // Tworzy zmienną która będzie przechowywać wartości czy dany poziom jest aktywny i gracz może wykonywać tę osiągnięcie
new ach[3]; // id 3 poziomów achievementa



public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)

ach[0] = exp_register_achI(szNameI, szDescI, szLvlI, szAwardI, szNeedI)
ach[1] = exp_register_achII(szNameII, szDescII, szLvlII, szAwardII, szNeedII)
ach[2] = exp_register_achIII(szNameIII, szDescIII, szLvlIII, szAwardIII, szNeedIII)




4. Sprawdzamy, czy gracz ma odblokowany achievment:

public achievement_enabled(id, achid, achlvl)
{
if(achid == ach[0] && achlvl == 1) // Jezeli wyslane id achievmenta jest równe naszemu zarejestrowanemu i poziom jest równy 1 to gracz może wykonywać Poziom I
enabled[id][0] = 1;
if(achid == ach[1] && achlvl == 2) // Itd.
enabled[id][1] = 1;
if(achid == ach[2] && achlvl == 3)
enabled[id][2] = 1;
}

public achievement_disabled(id, achid, achlvl)
{
if(achid == ach[0] && achlvl == 1) // Jezeli wyslane id achievmenta jest równe naszemu zarejestrowanemu i poziom jest równy 1 to gracz nie może wykonywać Poziomu I
enabled[id][0] = 0;
if(achid == ach[1] && achlvl == 2 && enabled[id][0] == 0) // itd.
enabled[id][1] = 0;
if(achid == ach[2] && achlvl == 3 && enabled[id][1] == 0)
enabled[id][2] = 0;
}


5. Reszta kodu.

Nasza reszta kody w tym tutku. To wychwycenie zabicie gracza przez naszego "id" i sprawdzenie jaki Poziom wykonuje danego achievemntu, po czym dodanie postępu.

do plugin_init


register_event("DeathMsg", "DeathMsg", "a");



i na końcu kodu:

public DeathMsg()
{
new atakujacy = read_data(1) // Id naszego "id" czyli atakującego który zabił kogoś
new id = read_data(2) // Id zabitego

if(!is_user_connected(atakujacy) || is_user_hltv(atakujacy)) // Jeżeli gracz nie jest połączony ( atakujący ) albo jest HLTV to przerwij
return PLUGIN_CONTINUE

if(atakujacy != id && get_user_team(atakujacy) != get_user_team(id)) // Jeżeli atakujący nie zabił siebie i zabił członka innej dróżyny
{
if(enabled[atakujacy][0] == 1) // Jeżeli wykonuje Poziom I
exp_set_achievement_progress(atakujacy, ach[0], 1, exp_get_achievement_progress(atakujacy, ach[0], 1)+1) // Ustaw postęp: atakującemu, id achievementa, poziom tego achievementa, postęp ( pobierz postęp, i dodaj 1 )
else if(enabled[atakujacy][1] == 1) // Itd..
exp_set_achievement_progress(atakujacy, ach[1], 2, exp_get_achievement_progress(atakujacy, ach[1], 2)+1) // Itd
else if(enabled[atakujacy][2] == 1)
exp_set_achievement_progress(atakujacy, ach[2], 3, exp_get_achievement_progress(atakujacy, ach[2], 3)+1)
}
return PLUGIN_CONTINUE
}

6. Skompilowanie i dodanie do plugins-expmod.ini



WAŻNE!

 

Teraz jest w prawdzie najważniejsze. Więc zrób "prawie" dokładnie to co ja:

przypuśćmy, że nazwałeś ten ach : expmod_ach_nowy.amxx

Pytanie: Gdzie go dodać ?

Odpowiedź: Masz takie coś w plugins-expmod:


expmod_ach_knife_master.amxx debug ; Nazwa achievementa odpowiada za achievement, tzn knife_master - zabij z noża
expmod_ach_glock_master.amxx debug ; Zabij z Glocka X wrogów
expmod_ach_usp_master.amxx debug ; Zabij z USP X wrogów
expmod_ach_p228_master.amxx debug ; itd...
expmod_ach_deagle_master.amxx debug ; ...
expmod_ach_elite_master.amxx debug
expmod_ach_fiveseven_master.amxx debug
expmod_ach_xm1014_master.amxx debug
expmod_ach_m3_master.amxx debug
expmod_ach_tmp_master.amxx debug
expmod_ach_mac10_master.amxx debug
expmod_ach_mp5_master.amxx debug
expmod_ach_ump45_master.amxx debug
expmod_ach_p90_master.amxx debug
expmod_ach_famas_master.amxx debug
expmod_ach_galil_master.amxx debug
expmod_ach_scout_master.amxx debug
expmod_ach_ak47_master.amxx debug
expmod_ach_m4a1_master.amxx debug
expmod_ach_sg552_master.amxx debug
expmod_ach_aug_master.amxx debug
expmod_ach_sg550_master.amxx debug
expmod_ach_g3sg1_master.amxx debug
expmod_ach_m249_master.amxx debug
expmod_ach_he_master.amxx debug ; Zabij z granata
expmod_ach_headshot.amxx debug ; Zabij HeadShotem
expmod_ach_killer.amxx debug ; Zabij
expmod_ach_stzelanie_w_powietrzu.amxx debug ; Zabij w powietrzu
expmod_ach_stzelanie_kleczac.amxx debug ; Zabij klęcząc
expmod_ach_saper.amxx debug ; Rozbrój pakę
expmod_ach_bomberman.amxx debug ; Podsadź pakę
expmod_ach_nalogowiec.amxx debug ; Zadaj dmg
expmod_ach_bohater.amxx debug ; Uratowanie hostów


w pliku Uwaga.txt widnieje taka informacja:


Dodawając achievement, zawsze dodawaj go na końcu.
Tak samo z mi[..]...

A więc na końcu czyli
po

expmod_ach_nalogowiec.amxx        debug ; Zadaj dmg
expmod_ach_bohater.amxx            debug ; Uratowanie hostów

dajemy

expmod_ach_nowy.amxx           debug ; Debug nie jest obowiązkowe

To zapobiegnie pewnego rodzaju bugom, złym zapisom, wczytaniom i nie wiadomo czemu jescze ;P

7. Zapisujemy, wrzucamy na serwa i sprwadzamy nasze cudo :)
 

To Tyle w tym poradniku, zapewne wiem, że jest nie przejrzyście i estetycznie za co Przepraszam. Jak jest nie zrozumiałe proszę o napisanie tego w komentarzu a postaram się napisać go od nowa, tak aby było przejrzyście i zrozumiale.


Poradnik by PaTrIcKx firmy SGT Comapny Group © Spółka z ograniczoną odpowiedzialnością
na potrzeby amxx.pl


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