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
 

ponczo95 - zdjęcie

ponczo95

Rejestracja: 19.01.2012
Aktualnie: Nieaktywny
Poza forum Ostatnio: 03.03.2013 15:38
-----

#485254 "Zrozumieć Plugin."

Napisane przez dasiek w 30.11.2012 21:26

Na wstępnie - nie jestem jakiś pr0 - jednak chciałbym wam przybliżyć pisanie pluginów przez ten poradnik ponieważ żeby zacząć cokolwiek robić trzeba to zrozumieć ;)
Pragnę wam przedstawić mój sposób rozumienia pisania pluginów. Co prawda może być w nim wiele sprzeczności, nie dopowiedzeń i innych badziewów ale chcę uniknąć pisania regułek definicji i innych sformułowań których 98% z was (w tym i ja) nie zrozumie...

Zacznijmy stwierdzeniem ze plugin to 'opisany zestaw czynności' które serwer wykonuje. Nie jasne?
Wyobraźmy Sobie że człowiek to taki 'serwer' i ma ochotę na zupę chińską w 5 minut (który jest pluginem). Więc bierze opakowanie z zupką otwiera ją , wlewa do jakiegoś tam garnka z wodą miesza, gotuje, wlewa do miski , bierze łyżkę i je. Na opakowaniu mamy zestaw takowych instrukcji co mamy wykonać zeby zrobić zupkę - które człowiek rozumie. Tak samo nasz plugin - gdy chcemy np dać graczowi hp za zabójstwo musimy opisać w pluginie takowe dodawanie.

Do scriptingu nie wiele nam potrzeba. Wystarczy dowolne narzędzie do edycji plików tekstowych (tak jak nontatnik , notepad++ etc) otwieramy plik i piszemy. Jak wiadomo - plugin na serwer ma rozszerzenie amxx. Ale nasze kody mają rozszerzenie sma których serwer nie rozumie. Etap zmiany pliku sma na amxx to kompilacja (nie komplikacjia, konfrontacja, konwencja czy inne stwierdzenia z tego forum) czyli zamiana naszego pluginu na taką postać którą zrozumie nasz serwer. Odwołując się do przykładu wyżej. Zupa chińska jak sama nazwa wskazuje jest po chińsku i nie wszyscy rozumieją ten język. Więc ludzie z biedry (tu jako kompilator) przetłumaczyli instrukcje robienia takowej zupki tak żeby każdy polak ją zrozumiał.i Wuola.

Czas na trochę teori (tak tak, obiecałem że jej nie będzie ale cuż - niektórych rzeczy inaczej się wyjaśnić nie da) opisanej Łopatologicznie.
Na początku ważna rzecz. Nasz plugin (w innych językach programowania jest ta sama bajka) musi działać (to wiadomo), być jak najkrótszy (Plugin dłuższy nie oznacza że jest lepszy ale o optymalizacji Kodu powiem potem) i być jak najszybszy (i nie chodzi tu o to żeby zamiast czegoś na 5 sekund dawać na 3 - chodzi o szybkie działanie - To też przybliżę potem).

Patrząc na sam początek widzimy biblioteki. Są one zbiorem konkrenych funkcji z których będziemy korzystać aby nasz plugin działał tak jak chcemy. Bardzo Trudno mi to opisać więc odwołam się do naszego smakowitego przykładu - Zapakowana zupa chińska. Aby cokolwiek z nią zrobić trzeba ją najpierw otworzyć. Więc zaglądamy do szuflady i tam znajdujemy nożyczki. Bierzemy je i przecinamy opakowanie. Gdy chcemy wsypać jej zawartość szukamy naczynia, więc bierzemy miskę i do niej wsypujemy makaron z niej. Przydało by się wstawić gorącą wodę na nią i zalać miskę , więc bierzemy czajnik z kuchenki , podchodzimy do kranu, nalewamy wodę do niego i wstawiamy. W tym przykładzie Kolejno szuflada, Szafka z miskami, Kuchenka i Kran to biblioteki a w nich znajdują się konkretne rzeczy. Nie rozumiecie? Trochę wyobraźni. To teraz trzasnę kodzik do "przygotowania zupy" to co już tu opisałem :)

Uświadamiamy naszemu pseudo "serwerowi" żeby przygotował się na skorzystanie z tych rzeczy

#include <szuflada>
#include <szafka>
#include <kuchenka>
#include <kran>

No dobra. Czas na funkcje.

Głowna funkcją w naszych pluginach będzie plugin_init() . Służy on tak naprawdę do przygotowania serwera na pewne wydarzenia i rzeczy. W nim rejestrujemy moment śmierci, Obrażeń, startu rundy, odrodzeniu gracza i wszystkiego innego co dzieje się na serwerze (a jest tego naprawdę dużo). Rejestracje omówię na podstawie - czyli rejestracji wpisanej rzeczy w kosnoli.
register_clcmd (żeby zrozumieć przetłumaczę - rejestruj_klientakomende) uświadamiamy nasz plugin żeby zwrócił uwagę gdy gracz wpisze coś w konsoli. Po otwarciu nawiasów wpisujemy to na co ma plugin zwrócić uwagę - przecinek - co ma wykonać (funckje) po wpisaniu tego (złapaniu momentu).
Tyle chyba o tym. Brak takiej funkcji nie spodoba się serwerowi i odmówi on posłuszeństwa (plugin nie będzie działał).

Drugą funkcją z której często będziecie korzystać to plugin_precache. Łopatologicznie - w nim przygotowujemy pliki z których będziemy korzystać w pluginie tj. modele, dźwięki, spr'y i inne. Bez takiego przygotowania plików plugin Nie będzie działał a nawet wyłączy nam serwer. Znasz uczucie kiedy robisz Sobie płatki na mleku, wsypujesz płatki do miski a okazuje się że nie ma mleka? "Nasz serwer czuje to samo!" kiedy chce skorzystać z modelu/dźwięku na któy nie był przygotowany.

Dobra - żeby nie było że jesteśmy sadystami. Serwer ma swoje ograniczenia Większość może zapytać - jak to ? Czemu? A temu. Sytuacja jest podobna jak święta lub rodzinne spotkania u babci. Siedzisz , nigdzie nie wyjdziesz a na dodatek słyszysz miłe babcine "Może coś jeszcze? Na pewno nie jesteś głodny?" i mimo wyraźnego i stanowczego "Oj nie babciu" dostajesz porcje "dla pułku wojska". Wedle świętej zasady "nie czyń drugiemu co Tobie nie miłe" dotyczącej również naszych serwerów i stanowisk pracy nie mścimy się na nim po babcinych obiadach. Im serwer ma więcej modeli/dźwięków/Sprów/Plików/wadów itp do obsłużenia tym woliej pracuje i gracze są niezadowoleni. Oczywiście nie dotyczy się tylko i wyłącznie plików obsługiwanych. Również zmienne ( o których później ) mają swoje ograniczenia. Wszystko starajmy się robić jak najprościej.

To lecimy ze zmiennymi. Po co one? Bez nich ciężko cokolwiek pisać (aczkolwiek - można) Są to "rzeczy" którymi operujemy w pluginie żeby ułatwić sobie (i naszemu serwerowi) życie. Nie jasne? To teraz spróbuje to wyjaśnić.
Przyjmijmy że interesuje nas Życie gracza. Naszym pluginem pytamy o to serwer.
My - "Siema Serwer. Słuchaj - rzuć informacją o życiu Gracza o ID 1" (przypominam że (prawie) wszystko bazuje na liczbach)
Serwer - "Ty Stary no ja nie wiem."
Co w takim razie? W dokumentacji znajdujemy że w pewnej bibliotece jest możliwość zapytania o życie gracza. Więc dajemy znać serwerowi.

My - "Serwer słuchaj - amxmodx wie ile Gracz 1 ma hp. Weź go zapytaj bo ja nie umiem"
Serwer - "Te amxmodx Ile gracz 1 ma hp"
amxmodx - "100!"
Serwer - "Ma 100 Hp "
My - "dzięki"

W tym momencie mamy 5 operacji. Każemy serwerowi pytać o daną rzecz bibliotekę serwer wykonuję tą operacje, operacja zwraca wynik, wynik jest przejmowany przez serwer i serwer przekazuje go nam. No dobra Wszystko fajnie tylko to dla nas nie korzystne gdy robimy kilka operacji.

My - "Serwer rzuć hp gracza 2"
Serwer - "amxmodx daj hp gracza 2"
amxmodx - "95"
Serwer - "95"
My - "dzięki."
--Wykonuje operacje--
My - "Daj znowu hp gracza 2 bo nie pamiętam"
Serwer - amxmodx-serwer-my
-- operacja --
My - "daj znowu"

Serwer-amxmodx-serwer-my

Nie długo? Nie łatwiej byłoby Stworzyć zmienną w której zapamietamy takowe Hp? Wtedy wykonamy tylko jedno zapytanie - wykorzystamy serwer raz i wszyscy będą zadowoleni.


My - "Serwer rzuć hp 3 - ja zapiszę sobie ją"
Serwer - "amxmodx daj hp 3ki"
amxmodx - "50"
Serwer - "50!"
My - zapisujemy 50 do zmiennej.


Pomaga to też zautomatyzować plugin. wyobraź Sobie - że do życia mamy dodać 5. i co szybciej wykonać? Stworzyć zmienną i do niej dodać 5 czy sprawdzić każdą mozliwą kombinacje? Odpowiedź wiadoma ;)

Wracając do Funkcji. Z nimi jest zasada podobna jak ze zmiennymi - ułatwiamy Sobie nimi życie. Nie we wszystkich miejscach możemy operować konkretnymi danymi (sprawdzenie zadanych obrażeń gracza przy jego Respie - chyba ze w odpowiednim momencie Zapiszemy ją do zmiennej) ale przede wszystkim by zmienić nasze 100 linijek w 20. Jak? z Grubsza wyjaśnię to na zasadzie dodawania kilku broni do gracza.

Jeśli nasz gracz "Zrobi coś!" ma dodawać mu 3 bronie i ammo do nich. Za to jak gracz zrobi "Co innego!" ma mu dodać tamte 3 bronie , ammo do nich i dodatkowe dwie. Jak to wygląda?

if(Zrobi coś)
{
//Dodaje Bron1//Dodaje Ammo2

//Dodaje Bron2
//Dodaje Ammo2
//Dodaje Bron3
//Dodaje Ammo4
}
if(Coś innego!)
{

//Dodaje Bron1//Dodaje Ammo2

//Dodaje Bron2
//Dodaje Ammo2
//Dodaje Bron3
//Dodaje Ammo4

//Dodaje Bron_dodatkową1//Dodaje Ammo_dodatkową2

//Dodaje Bron_dodatkową2
//Dodaje Ammo_dodatkową2
}


Działa? No zadziała. Ale to nie to. Wykonamy jedna rzecz dla obu i kiedy będziemy chcieli zmienić musimy to robic w dwóch miejscach. A gdybyśmy uświadomili serwerowi żeby wykonał jedną rzecz w której będzie dodawanie 3 broni a w "Cos innego!" dodali dodatkowe dwie? Wygląda to tak


public nasza_funkcja()
{

//Dodaje Bron1//Dodaje Ammo2

//Dodaje Bron2
//Dodaje Ammo2
//Dodaje Bron3
}
if(Zrobi coś)
{
nasza_funkcja();
}
if(Coś innego!)
{

nasza_funkcja();
//Dodaje Ammo4

//Dodaje Bron_dodatkową1//Dodaje Ammo_dodatkową2

//Dodaje Bron_dodatkową2
//Dodaje Ammo_dodatkową2
}

Jakim Cudem To działa? :blink: Otóż w momencie kiedy gracz "Zrobi Coś!" Dajemy znak serwerowi żeby Wykonał nasza_funkcja() a jak już wykona to żeby dalej Działał od momentu wywołania Funkcji. Czyli w "Coś Innego!" doda bronie i doda Dodatkową. Tworzenie funkcji jest nam potrzebne w wyłapaniu momentów (Eventów) na serwerze - a w niej dajemy obsługę. Tadam :)


Mam nadzieję ze w pewnym sensie "Rozjaśniłem" wam Sprawę z Kodowaiem. Poradnik ten będzie Uzupełniany w miarę potrzeb (jak będzie kilka osób które czegoś nie rozumieją proszę pisać - swoimi sławami będe to dodawał o ile będe miał o tym pojęcie:D )

Niedługo zrobie na nim porządki - pogrupuję Poradnik tak żeby był przejrzysty. ;)

ZAKAZ KOPIOWANIA! Poradnik ma prawo być tylko tu i na moim blogu.
  • +
  • -
  • 49


#487930 Diablo Mod Core 1.1.0 PL

Napisane przez DarkGL w 07.12.2012 20:22

Diablo Mod Core 1.1.0 PL by DarkGL

Diablo Mod Core jest całkowicie nowym silnikiem Diablo Mod'a napisanym przezemnie jakiś czas temu ( dawno ^^ )

Dzięki zastosowaniu Forwardów i Natywów uzyskujemy łatwą możliwość rozbudowy moda bez zmian w głównym silnikiem
co przekłada się na możliwość łatwiejszej rozbudowy naszego serwera ( klas , itemów itp. )

Posiada on w sobie funkcje które nie są zaimplementowane w oryginalnej wersji diablomoda a które po prostu muszą być na serwerze DiabloMod

Co możemy znaleźć w silniku
  • Klasy i itemy to odzielne pluginy
  • System zarządzania renderem gracza
  • Nowy system zapisu sql
  • Dynamiczny zapis sql ( klasy mogą być dowolnie dodawane i usuwane )
  • Wbudowane anty kopiowanie leveli
  • Możliwość zapisu na steamid , nick , mieszane ( steamid dla steam i nick dla ns )
  • Prefixy w say
  • Większe możliwości konfiguracji
  • Poprawiony kod kuszy , granatów na ziemi i rzucanych nozy
  • Zestaw natywów i forwardów do rozbudowy moda
  • Wbudowany anty 0 HP Bug
  • Lista itemów
  • Kod jest znacznie lepszy od wersji diablo Micza
  • Dodatkowe opcje w menu rozdawania punktów
  • Informacje o awansie gracza w say
  • Poprawiony wygląd motd
  • Nowy system itemów
  • Wbudowana nowa wymiana itemami
  • Komendy na dawanie itemów i expa
  • Menu moda
  • Szybkie rozdawanie statystyk
  • Obsługa botów
  • Komenda /exp
  • Dwie nowe statystyki Pancerz i Szczescie
  • Event Diablo
  • System frakcji
  • Komendy /daj i /oddaj
  • Ustawianie nazwy gry
  • Zabezpieczenie przeciwko nabijaniu expa ( wymagana ilość graczy na serwerze ustawiane cvarem )
  • Krótkie komendy
  • Damage jest teraz modyfikowane w lepszy sposób niż poprzez event Damage
  • Wytrzymałość itemu
  • Event Diablo jest to tryb w którym wybierany jest jeden gracz i staje się on "Diablo" reszta graczy musi go zabić jeśli to się uda otrzymają oni dodatkowy exp. Oczywiście Diablo ma ułatwienia tzn. dużą ilość hp , fireballe , ma on też inny model
  • I jeszcze kilka innych rzeczy :)
Lista komend
Takie komendy jak
  • /czary
  • /skille
  • /exp
  • /menu
  • /wymiana
  • /wymien
  • /item
  • /przedmiot
  • /klasy
  • /klasa
  • /reset
  • /drop
  • /rune
  • /daj
  • /komendy
  • /event
Krótkie komendy
  • /k
  • /r
  • /d
  • /p
  • /i
  • /g
  • /ru
  • /w
  • /p
  • /h
  • /ko
  • /m
10_screenshots_2012-01-25_00005.jpg

Opisy klas
http://amxx.pl/topic...549-opisy-klas/

Jak napisałem wcześniej siłą tego moda jest możliwość konfiguracji więc teraz zajmiemy się tym

Najpierw konfiguracja w sma

#define HUD_TEXT ""
#define SQL_TABLE "diablo_nowe_klasy"
#define MAX_LEN_NAME 128
#define MAX_LEN_DESC 256
#define MAX_LEN_NAME_PLAYER 64
#define MAX_LEN_FRACTION 128
#define MAX 32
#define MAX_LEVEL 200
#define MAX_SKILL 100
#define BASE_SPEED 250.0
#define TASK_DEATH 100
#define TASK_RENDER 200
#define THROW_KNIFE_MODEL "models/diablomod/w_throwingknife.mdl"
#define THROW_KNIFE_CLASS "throwing_knife"
#define CLASS_NAME_CORSPE "fakeCorpse"
#define XBOW_ARROW "xbow_arrow"
#define TIME_HUD 1.0
#define GAME_DESCRIPTION "Diablo Mod"
#define ADMIN_FLAG_GIVE ADMIN_IMMUNITY
#define HELP_TASK_ID 91321
#define DIABLO_EVENT_SOUND "sound/diablo_taunt.mp3"
jest tego trochę ale najważniejsze dla nas to

HUD_TEXT
w którym ustawiamy czy jakiś tekst ma się wyświetlić nad hudem z informacjami gracza ( klasa etc. )
możemy tu dodać np. "Forum Serwera www.xyz.pl"

SQL_TABLE
Nazwa tabeli w sql

MAX
Ilość slotów dzięki tej opcji oszczędzimy pamięć serwerowi a i mod będzie działał lepiej

MAX_LEVEL
Maksymalny level

MAX_SKILL
Maksymalny poziom skilli ( umiejętności zręczność etc. )

ADMIN_FLAG_GIVE
Flaga którą musi mieć admin aby używać komend na dawanie Expa i Itemów

#define BOTY
//#define DEBUG
#define DEBUG_LOG "addons/amxmodx/logs/debug.log"
#define BOTY
zakomentuwujemy jeśli nie mamy botów na serwerze
usuwamy komentarz jeśli mamy ( komentarz czyli // )

#define DEBUG
Tryb debug dostajemy więcej informacji co aktualnie robi mod używane raczej tylko jeśli coś nie działa
jeśli wszystko jest ok lepiej to zakomentować

Możemy znaleźć jeszcze coś takiego

#define PREFIX_SAY "^x04[ DiabloMOD ]^x01"
jest to prefix jaki mają wiadomości wysyłane przez mod

Cvary
//sql
diablo_host host
diablo_user user
diablo_pass pass
diablo_db db
//typ zapisu 1 - nick 2 - steam id 3 - steamid lub nick zalezy czy gracz ma steam czy nie
diablo_save_type 3
//sredni level dla nowego gracza
diablo_avg 1
//ustawienia maga
flashlight_custom 1
flashlight_drain 1.0
flashlight_charge 0.5
flashlight_radius 8
flashlight_decay 90
//minimalna ilosc graczy aby dostawac exp
diablo_player_num 2
//ilosc dmg aby dostac 1 exp'a
diablo_dmg_exp 20
//xpbonus
diablo_xpbonus 5
/xpbonus2
diablo_xpbonus2 100
//ustawienia nekromanty czas odradzania
diablo_revival_time 3
//hp po ozywieniu ( + inteligencja wskrzeszajacego )
diablo_revival_health 25
//minimalny dystans od zwlok
diablo_revival_distance 70.0
//szybkosc rzuconego noza
diablo_knife_speed 1000
//dmg zadawane przez rzucony noz
diablo_knife 80.0
//dmg strzaly z kuszy
diablo_arrow 120.0
//mnoznik dla inteligencji przy obliczaniu dmg
diablo_arrow_multi 2.0
//szybkosc strzaly z kuszy
diablo_arrow_speed 1500
//ilosc wytrzymalosci itemu zabieranej przy zginieciu
diablo_durability 10
//koszt expa w rune
diablo_exp_price 14500
//koszt losowego przedmiotu w rune
diablo_random_price 9000
//koszt ulepszenia w rune
diablo_upgrade_price 5000
//koszt w /daj
diablo_price_daj 5000
//event on/off
diablo_event 1
//ilosc wymaganych dropow
diablo_drop_need 100
//hp diablo ( mnozone przez ilosc graczy )
diablo_diablo_hp 1000
//ilosc xp rozdzielane na tych ktozy zabija diablo
diablo_event_exp 10000
//kamera przy diablo 1 - widok zza plecow
diablo_camera 1
//ilosc punktow do rozdania za lvl
diablo_points 2
//ile hp za jeden punkt sily
diablo_strength_power 2
//ile reduckji za jeden punkt zrecznosci
diablo_reduce_power 0.03
//Miejsce wyświetlania informacji o klasie itemie etc. 0 - standardowy lewy dolny róg 1 - informacja hud ( podobnie jak w cod mod )
diablo_hud_mode 1
Cvary ustawiamy w pliku diablomod.cfg

Komendy admina
  • amx_giveexp - daje exp graczowi Użycie amx_giveexp <nick> <ile>
  • amx_giveitem - daje item graczowi Użycie amx_giveitem <nick> <iditemu>
Komendy techniczne
  • diablomod_version - zwraca używana wersję diablomoda
Opis komend
  • /klasy - otwiera listę klas
  • /klasa - otwiera menu klas do wyboru
  • /reset - resetuje rozdane punkty umiejętności
  • /drop - wyrzuca aktualnie posiadany przedmiot
  • /item - opis aktualnie posiadanego przedmiotu
  • /przedmiot - takie samo działanie jak /item
  • /gracze - lista graczy wraz z ich levelami i klasami
  • /czary - twoje statystyki
  • /skille - tak jak /czary
  • /rune - menu gdzie można kupić różne rzeczy
  • /wymiana - wymiana itemami
  • /wymien - tak jak /wymiana
  • /daj - oddaj item za kasę
  • /pomoc - krotka notatka o modzie
  • /komendy - ta lista
  • /exp - informacje o stanie twojego expa
  • /menu - menu moda
  • diablomod_version - wersja diablomoda używana na serwerze
Najważniejsza zmiana to umieszczenie item i klas w odzielnnych pluginach nowe pluginy dopisujemy do plugins-diablomod.ini w folderze configs
Jeżeli ktoś jest zainteresowany tworzeniem nowych itemów , klas lub dodatków radzę zapoznać się z dostepnymi sma i plikiem diablo_nowe.inc gdzie znajdziecie opis natywów i forwardów.

Natywy
  • rejestruje klase
    diablo_register_class(const szNazwa[],const iHealth,const szOpis[] = "" , iFlags = FLAG_ALL , const szFraction[] = "");
  • zwraca klase gracza
    diablo_get_user_class(id);
  • nazwe klasy pobiera
    diablo_get_class_name(classID , Return[] , len);
  • zwraca level
    diablo_get_user_level(id);
  • zwraca exp
    diablo_get_user_exp(id);
  • zwraca points
    diablo_get_user_points(id);
  • zwraca punkty agi
    diablo_get_user_agi(id);
  • zwraca punkty str
    diablo_get_user_str(id);
  • zwraca punkty dex
    diablo_get_user_dex(id);
  • zwraca punkty int
    diablo_get_user_int(id);
  • czy klasa gracza to klasa z tego pluginu
    diablo_is_class_from(id);
  • ustawia rendering graczowi
    diablo_set_user_render(id, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16 , Float:fTime = 0.0 )
  • diablo_add_extra_str( id , iIle );
  • diablo_add_extra_int( id , iIle );
  • diablo_add_extra_agi( id , iIle );
  • diablo_add_extra_dex( id , iIle );
  • czy ma taka klase
    diablo_is_this_class(id,szClass[]);
  • dodawanie speed graczowi
    diablo_set_speed(id,Float:fAmount);
  • ustawianie speed
    diablo_add_speed(id,Float:fAmount);
  • pobranie speed
    Float:diablo_get_speed(id)
  • pobranie dodatkowe speed
    Float:diablo_get_speed_extra(id);
  • diablo_reset_speed( id );
  • zadanie dmg
    diablo_damage(iVictim,iKiller,Float:fDamage,DiabloDamageBits:damageBits);
  • zabij
    diablo_kill(iVictim,iKiller,DiabloDamageBits:damageBits);
  • zadanie dmg w zasiegu
    diablo_create_explode(iKiller,Float:fOrigin[3],Float:fDamage,Float:fDist,bool:bExplode);
  • dodaje hp
    diablo_add_hp(id,iHp);
  • czy jest freezetime
    diablo_is_freezetime();
  • uruchom write hud
    diablo_write_hud_(id);
  • diablo_get_xpbonus();
  • diablo_get_xpbonus2();
  • daje xp
    diablo_add_xp(id,ile);
  • zabiera xp
    diablo_take_xp(id,ile);
  • dodaje noze
    diablo_add_knife(id,iIle);
  • diablo_set_user_grav(id,Float:fGrav);
  • diablo_add_user_grav(id,Float:fGrav);
  • Float:diablo_get_user_grav(id)
  • diablo_reset_grav( id );
  • diablo_give_user_trap(id,bool:give = true);
  • diablo_give_user_bow(id,bool:give = true);
  • diablo_show_hudmsg( id , Float:fTime , const szMessage[] , any:... );
  • diablo_render_cancel( id );
  • diablo_display_icon( id , enable , szNameIcon[] , red , green , blue );
  • diablo_display_fade( id,duration,holdtime,fadetype,red,green,blue,alpha );
  • diablo_give_xp( id , ile );
  • diablo_add_max_hp( id , ile );
  • diablo_register_item( Name[] , durability = 250 );
  • diablo_screen_shake( id , amplitude , duration , frequency );
  • diablo_set_max_hp( id , ile );
  • diablo_get_max_hp( id );
Forwardy
  • gdy klasa zostanie wybrana
    diablo_class_enabled(id);
  • gdy klasa zostanie zmieniona
    diablo_class_disabled(id);
  • przy zmianie broni
    diablo_weapon_deploy(id,wpnID,weaponEnt);
  • czyszczenie wewnetrznych zmiennych klasy
    diablo_clean_data(id);
  • ustawianie wewnetrznych zmiennych klasy
    diablo_set_data(id);
  • prethink gracza
    diablo_preThink(id);
  • diablo_preThinkItem(id);
  • posthink gracza
    diablo_postThink(id);
  • podczas zmiany renderu wysylany do wszystkich pluginów
    diablo_render_change(id);
  • zwracasz czas call cast 0.0 powoduje zatrzymanie
    Float:diablo_cast_time(id,Float:standardTime );
  • call cast wykonany niech plugin dziala
    diablo_call_cast(id);
  • ustawiania speed
    diablo_speed_change(id);
  • przy spaawnie klasy
    diablo_class_spawned(id);
  • przy zabiciu klasy
    diablo_class_killed(id);
  • przy exp killu zwracaj 0 jak nic nie robisz
    diablo_kill_xp(id,iIle);
  • przy exp damage 0 jak nic nie robisz
    diablo_exp_damage(id,iIle);
  • przy uzyciu skillu klasy
    diablo_class_skill_used(id);
  • when cast stop can return diablo_stop
    diablo_cast_stop(id);
  • can move when cast
    diablo_cast_move(id);
  • write hud
    diablo_hud_write(id,szMessage[],iLen);
  • damage
    diablo_damage_taken_post(iKiller,iVictim,iDamage);
  • diablo_damage_taken_pre(iKiller , iVictim , &Float:fDamage );
  • zmiana damage klasy dostaje
    diablo_damage_class_taken(iVictim,iAttacker,&Float:fDamage,damageBits);
  • zmiana damage klasy zadaje
    diablo_damage_class_do(iVictim,iAttacker,&Float:fDamage,damageBits);
  • gracz zespawnowany
    diablo_player_spawned(id);
  • diablo_user_change_class( id , class )
  • diablo_death(iKiller , killerClass , iVictim , victimClass );
  • diablo_item_give( id , szRet[] , iLen );
  • diablo_item_reset( id );
  • diablo_item_drop( id );
  • diablo_item_info( id , szMessage[] , iLen , bool:bList );
  • diablo_upgrade_item( id );
  • diablo_item_set_data( id );
  • diablo_damage_item_taken(iVictim,iAttacker,&Float:fDamage,damageBits);
  • diablo_damage_item_do(iVictim,iAttacker,&Float:fDamage,damageBits);
  • diablo_item_skill_used( id );
  • diablo_item_player_spawned( id );
  • gravity zmieniona
    diablo_grav_change(id);
  • diablo_new_round();
  • wymiana itemami
    diablo_copy_item( iFrom , iTo );
W paczce znajdziemy też dwa dodatkowe pluginy ( znajdują się one w folderze dodatki )
  • Diablo Questy
  • Exp od godzinny
Działają one tak samo jak te opublikowane już na forum więc nie będę się rozpisywał o konfiguracji

Instalacja odbywa się poprzez wrzucenie plików z paczki na serwer

Jeżeli doceniasz ilość pracy włożoną w ten mod nie usuwaj drobnej informacji o autorze wyświetlanej graczowi , dla osób które chcą to ukryć podpowiadam linijka 4719
Zapraszam też na DarkGL Blog | Programowanie Python , Pawn , C++ i Webdeveloping oraz Kanał użytkownika GitzZz14 - YouTube ewentualnie DarkGL3 - YouTube ;)

TutorialeZałączony plik  Diablo Mod Core.rar   6,91 MB  4186 Ilość pobrań

  • +
  • -
  • 87


#487947 Diablo Mod Core 1.1.0 PL

Napisane przez DarkGL w 07.12.2012 21:17

To była najpóźniej pisana część nie miałem już motywacji żeby wymyslec to lepiej więc dostosowalem stary kod i wprowadzilem kilka zmian

  • +
  • -
  • 2


#82522 Admin_Screen edit by caxixi

Napisane przez feever w 14.09.2009 09:59

Admin_Screen
( edit by caxixi )

najnowsza wersja v1.5



1.0 - nie dzialalo :P
1.1 - poprawiłem błędy , dodałem plik z logami zmieniłem komunikat , dodałem IP
1.2 - to samo co 1.1 + steam ID w logach i komunikacie
1.3 - auto ban , zielony kolor tekstu , info w konsoli , cvary z edycja adresu forum
1.4 - poprawa działaniaa bana ( w 1.3 działał wadliwie tylko kickał w połączeniu z minibansami) dodałem "utrudnienia" dla czitów , poprawiłem opis , poprawiłem cvar z adresem
1.5 - jednoczesne fotki u admina i gracza, działający ban pod minibans/amxbans jaki i bez (konfigurowane cvarami), takie tam drobne błędy
1.5blackedit - robi 1000 fotek graczowi w 2 minuty - no i 2 giga miejsca poszło się ...

Dołączona grafika
Admin_Screen3v15.amxx wklej do /cstrike/addons/amxmodx/plugins
Admin_Screen3v15.sma wklej do /cstrike/addons/amxmodx/scripting

lub

blackedit.amxx wklej do /cstrike/addons/amxmodx/plugins
blackedit.sma wklej do /cstrike/addons/amxmodx/scripting

Wpisz do plugins.ini (w zależności od wersji)

Admin_Screen3v15.amxx ; do robienia fotek

lub

blackedit.amxx ; do robienia fotek


Wpisz na samym początku do clcmds.ini (dzięki temu będziesz mógł robić ss przez amxmodmenu):

"Zrob screeny" "amx_screen #%userid% 5" "b" "u"


Dołączona grafika

amx_screen_forum "www.nazwaforum.eu" // adres forum
amx_screen_ban 1 // 0 - kill 1 -perm obsluga amx_bans, minibans 2- perm bez amxbans
amx_screen_adminss 1 // 0 - fotki tylko u gracza 1- fotki u gracza i admina


cvary dopisac do amxx.cfg


Dołączona grafika

amx_screen
amx_screen "caxixi" 5


lub

amx_1000 - robi 1000 fotek
amx_1000 "caxixi"



lub po dodaniu wpisu do clcmds.ini
amxmodmenu --> komendy klienta (8) --> nick - zrobi sie 5 fotek


Dołączona grafika
Dodatkowy plik z logami screenlog.txt ( /cstrike/addons/amxmodx/logs )

LL 08/13/2009 - 21:10:08: name: "::^caxixi^::" | IP: "88.xxx.xxx.xxx" | STEAMID: STEAM_ID_LAN | admin: "::^caxixi^::"


Dołączona grafika
1.5

Jak to działa?

Plugin tworzy zdjęcia ekranu u gracza, przed zrobieniem fotki plugin włącza netgraph u gracza obniża fps do 20, wyłącza odświeżanie ekranu i dopiero robi fotkę, przez co niektóre niewykrywalne czity czasem nie wyrabiają i pozostają widoczne lub robi sie tylko 1-2 fotki zamiast 5.

W tej wersji dodałem jednoczesne fotki u gracza jak i admina :) admin patrzy na gracza z włączonym ESP i robi mu fotki, ułatwi to wykrywanie przeróbek jak i unikniecie niepotrzebnych oskarżeń graczy.
Fotki dla admina można wyłaczyć, wszystko konfigurowane cvarem.

amx_screen_adminss 1 // 0 - fotki tylko u gracza 1- fotki u gracza i admina


Poprawilem typ dawanego bana !!! Poprzednio zawsze banował na IP, teraz wystarczy ustawić odpowienio cvara.

amx_screen_ban 1 // 0 - kill 1 -perm obsluga amx_bans, minibans 2- perm bez amxbans



blackedit
To samo co 1.5 + dodałem możliwość zrobienia 1000 fotek dla gracza :) wystarczy wpisać komendę:

amx_1000 - robi 1000 fotek


Dołączona grafika
W załączniku :)

Załączone pliki


  • +
  • -
  • 40


#401863 Paczka PaintBall by szelbi [Aktualizacja 01.11.13]

Napisane przez szelbi w 26.04.2012 07:00

Opis


Chciałbym przedstawić wam paczkę PaintBall mojego autorstwa z kilkoma przerobionymi przeze mnie pluginami :)

Wersja AMXX - 1.8.1 [Linux]

Pluginy


Spoiler


Cvary


Spoiler


Mapy


Spoiler


Dodatkowe informacje


Paczka jest w pełni gotowa do użycia! Wystarczy wgrać i cieszyć się grą! :)

Download


~ Paczka PaintBall (metamod-P + AMXX 1.8.1 + dproto) [45,5 MB]
http://hostuje.net/file.php?id=be45bcb065a5024f903beeea2aad971e
Paczka waży tyle ze względu na znajdujące się w niej mapy.

Link nie działa? Napisz do mnie na PW!

Czekam na wasze opinie! :)

  • +
  • -
  • 34


#74946 Ranga

Napisane przez R3X w 31.07.2009 15:47

Ranga

Jest to zoptymalizowany, łatwiejszy w konfiguracji plugin Sn!ffera. Dodałem też opcję top10 i cvar do informacji na HUD.

Źródło na który oparty jest plugin: Ranga - Nieoficjalny polski support AMX Mod X

Komendy w czacie
/top10
pokazuje top10
/rank
pokazuje informacje dot. rangi i statystyk
/rangi
pokazuje listę rang
Konfiguracja

Cvary
rangi_maxname "Nazwa"
domyślnie "Reszta jest milczeniem"
Ranga gracza, który przekroczył wszystkie podane progi fragów
rangi_hud 0|1
domyślnie 0
Zmień na 1 jeśli chcesz pokazywać graczowi info na HUD non-stop, 0- tylko komenda
rangi_top10 0|1
domyślnie 1
Zmień na 0 jeśli chcesz wyłączyć opcję Top10
rangi_list 0|1
domyślnie 1
Zmień na 0 jeśli chcesz wyłączyć opcję Listy rang

Rangi
Plik amxmodx/configs/rangi.ini zawiera listę rang i progów fragów w systemie:

"Nazwa rangi" "górny próg"

Cytując oryginalną zawartość tego pliku:

"Wiesniak" 29
"Lama" 59

Wieśniak jest pierwszy, więc nie ma dolnego progu, górny ustawiamy na 29 stąd gracze z fragami mniejszymi 29 mają rangę wieśniak.

Kolejna jest lama, której dolny próg wynosi (górny poprzedniego + 1) => 29+1=30, górny próg ustawiamy na 59 stąd gracze z fragami 30-59 mają rangę lama.

itd

Ważne: progi muszą być wpisane w kolejności rosnącej!

Maksymalna ilość wpisów (rang) to domyślnie 20, można zmienić w sobie kodzie:
#define LEVELS 20

Załączone pliki

  • Załączony plik  rangi.rar   14,49 KB  4856 Ilość pobrań

  • +
  • -
  • 16


#76329 Automatic knife duel

Napisane przez mjordan93 w 08.08.2009 13:06

AutomaticKnifeDuel + Sound

Moja poprawiona wersja sound'ow AKD
Edytowalem soundy :D na lepsze moim zdaniem a zreszta ocencie sami ^^

Załączone pliki


  • +
  • -
  • 2


#376700 [ROZWIĄZANE] Plugin na ochronę 5 sek. po starcie rundy

Napisane przez axelunio w 07.03.2012 15:41

http://amxx.pl/topic...on-pl-by-dudix/
  • +
  • -
  • 2


#5445 2. Nasza pierwsza mapa

Napisane przez Abes Mapper w 10.05.2008 02:26

Jesli masz juz skonfigurowany program(VHE 3.5 PL), gotowy do uzycia i jesli masz oczywiscie checi mozesz stworzyc swoja pierwsza mape.
Zaczynamy:
Uruchamiamy Valve Hammer Editor 3.5 PL. Po załadowaniu naciskamy CTRL+n lub wybieramy z menu Plik - Nowy. Otworzony zostanie nowy projekt Map1. To będzie nasza pierwsza mapka. Klikamy na Kreator obiektów zaznaczone na screenie cyfrą 1.

Dołączona grafika

Chcemy zrobić prostokąt w związku z tym w menu bocznym dotyczącym obiektów powinno być zaznaczone w Kategorii obiektów - Prymitywny (2.) oraz Typ obiektu - Blok (3.). Kategoria obiektów służy do wybierania prefabów (gotowych obiektów) bądź do wskazania edytorowi, że sami tworzymy obiekt i to jest właśnie tryb Prymitywny. Natomiast Tyb obiektu jak sugeruje nazwa służy do wybierania obiektu który chcemy wstawić na mapę. Do wyboru mamy: Blok, Klin, Cylinder, Szpic, Łuk. Obiekt zaczniemy tworzyć w górnym okienku w widoku góra. Klikamy raz LPM (lewy przycisk myszki) i trzymając go rozciągamy tak by powstał prostokąt podobny do tego na rysunku.

Dołączona grafika

Teraz w rzucie Przód wyciągniemy masz prostokąt w górę i w dól za pomocą środkowych uchwytów.

Uwaga! Aby można było lepiej i dokładniej rozciągać jak i przemieszczać różne obiekty, dodatkowo przytrzymujemy lewy ALT.

Dołączona grafika

Dołączona grafika

Te kreskowane linie na obwodzie prostokąta oznaczają, że obiekt jeszcze nie jest stworzony - to jest dopiero zarys, więc jeżeli zarys jest taki jaki nam odpowiada, to akceptujemy go klawiszem Enter. Teraz nasz obiekt wygląda tak

Dołączona grafika

A jeżeli chcemy go pooglądać z każdej strony to urzywamy do tego celu Kamery (1.) i okienka Kamera (2.)
(Również po naciśnięciu klawisza "Z" możemy się poruszać po mapie w podglądzie 3D)

Dołączona grafika

Kamerą poruszamy sie tak jakbyśmy grali w CSa, czyli klawiszami w,s,a,d oraz kirując myszką. A rolka w myszce służy jako zoom (działa również w ekienkach do edycji obiektów). Aby poruszać się kamerą należy cały czas trzymać LPM i z tak wciśniętym klawiszem poruszamy się używając klawiszy w,s,a,d oraz rolki. Kamera umieszczona na początku jest wewnątrz obiektu, więc należy się z niego wydostać. Gdy juz bedziemy na zewnatrz obiektu, a ten obiekt nie bedzie pokryty tekstura tylko bedzie widoczny sam szkielet, wystarczy kliknac na Kamera(oznaczony cyfra 2. na poprzednim rysunku) i wybrac 3D tekstura.

Dołączona grafika

W takiej pozycji na razie możemy zostawić kamerą. Teraz zrobimy wyżłobienie, tak aby prostokąt w środku był pusty i stworzył nam pomieszczenie. W tym celu zaznaczomy nasz prostokąt (podświetli się na czerwono)

Dołączona grafika

Podświetlony obiekt można edytować, więc naciskamy CTRL+h bądź z menu Narzędzia - Pomieszczenie. Otworzy się nam okienko w którym podajemy grubość ścianki

Dołączona grafika

W naszym przypadku możemy zostawić 32. Zatwierdzamy przyciskiem OK. Pomieszczenie gotowe. Teraz możemy do niego wjechać kamerą.

Dołączona grafika

Sami przyznacie, że na ścianach przydałyby się lepsze tektury, więc zamieńmy je. Zaznaczamy nasz obiekt, podświetla się cały na czerwono, klikamy na Teksturowanie (1.)

Dołączona grafika

Otworzy sie okienko z właściwościami tekstury, w nim wybieramy przycisk Przeglądaj... (2.) Owiera się okno z wszystkimi teksturami wybieramy poprzez kliknięcie (dwuklik )np. taką (3.):

Dołączona grafika

Po wyborze w okienku z właściwościami będzie wybrana przez nas tekstura (1.). Teraz by pojawiła się na ścianach należy nacisnąć przycisk Zastosuj (2.)

Dołączona grafika

OK. Aby zobaczyć jak naprawdę wygląda tekstura na ścianie naciśnij przycisk Ukryj maskę (3.). O teksutowaniu powinieneś jeszcze wiedzieć, że niektóre tekstury są specjalnego znaczenia.

Teksurę taką można z reguły poznać po początku nazwy. I tak znaki te oznaczają:
!nazwa_tekstury - woda (tekstura faluje)
-0nazwa_tekstury - tekstura losowo będzie się rozrzucać na obiekcie
{nazwa_tekstury - tekstura której niebieskie tło będzie niewidoczne
+0nazwa_tekstury - tekstura animowana (np przycisk windy) kolejną klatką animacji jest tektura z nazwą +Anazwa_tekstury
~nazwa_tekstury - tekstura świecąca
AAATRIGGER - niewidoczna tekstura używana tylko do obiektów funkcyjnych np. drabin
SKY - teksura nieba
i inne których znajomość nie jest nam przydatna na tym etapie tworzenia.
Teraz postaramy się zmienić teksturę na każdej ze ścian. Najpierw musimy rozgrupować nasz obiekt. Zaznaczamy nasz prostokąt i klikamy na ikonkę Rozklej zaznaczone obiekty

Dołączona grafika

Teraz klikając na każdej ze ścian upewniamy się że są rozdzielone. Teraz na mapie mamy 6 obiektów tworzących nasza mapę. Mapa musi być pomieszczeniem zamkniętym, więc uważajmy by nie przesunąć jakiejś ściany. Bo w przeciwnym razie mapa się nie skompiluje tzn nie będzie jej można użyć do gry.
Zamieńmy teraz tekturę sufutu na niebo. W tym celu zaznaczamy sufit (1.). Obiekty można zaznaczać w okienku Kamera.

Dołączona grafika

Klikamy na Teksturowanie (2.) W okienku z właściwościami tektury wyszukujemy (przycisk Przeglądaj (3.)) teksturę SKY, i naklejamy (przycisk Zastosuj (4.)). Po tym zabiegu na suficie mamy niebo.

Dołączona grafika

Podobnie postepujemy dla kazdej ze scian, wybierajac i naklejajac na scianach tekstury skal a na podlozu naklejajac teksture ziemi. Po tych zabiegach nasza mapka powinna tak wygladac.

Dołączona grafika

Mapa jest juz gotowa, żeby działała brakuje jeszcze bytów graczy, czyli po prostu ponktów startowych dla CT i Terro. Dokonujemy tego za pomocą ikonki z żaróweczką (1.)

Dołączona grafika

czyli za pośrednictwem Kreatora bytów. W bocznym menu wybieramy Objekt (2.) info_player_start (3.) Podobnie jak przy tworzeniu prymitywu (prostokąta) położenie bytu po ulożeniu na mapie

Dołączona grafika

zatwierdzamy klawiszem Enter. Dopóki nie naciśniemy Entera możemy dowolnie przesuwać byt. Po akceptacji Enterem na mapie znajduje się już punkt startowy CT.

Dołączona grafika

Teraz wstawmy przeciwnika do przeciwnego rogu. Robimy dokładnie tak samo z tą różnicą, że byt Terro nazywa się info_player_deathmatch.

Dołączona grafika

Ważne jest aby byty obudwu playerów znajdowały się nad ziemią tzn wisiały w powietrzu. W przeciwnym przypadku niemoglibyśmy się poruszać grając już na gotowej mapie.

Mapa jest już prawie gotowa, ostatnią rzeczą jest dodanie światła.

Jeżeli mapa ma niebo dodajemy (1.) byt light_enviroment (2.). Umieszczamy go pod sufitem na środku.

Dołączona grafika

Po zbliżeniu się kamerą do tego bytu zobaczymy słoneczko.

Dołączona grafika

Zaznaczamy Selektorem obiektów (1.) nasze słoneczko (2.) i naciskamy ALT(lewy)+Enter bądż z menu Mapa - Właściwości obiektu otworzy się nam okienko z właściwościami naszego bytu (takie właściwości posiada praktycznie każdy byt).
My zmienimy tylko kolor i natężenie światła. Jest atrybut jaskrawość (3.). Jeżeli używasz angielskich .fgd to atrybut będzie się nazywać Brightness.

Dołączona grafika

Trzy pierwsze cyfry (1.) oznaczają kolor, można go zmienić wpisując inne cyfry, bądź co jest prostrze skorzystać z przycisku Wybierz kolor. Wieramy np lekko żółty. Ostatnia cyfra (2.) oznacza natężenie światła. Możemy zostawić wartość 200. Także dobrze by ustawić kierunek i kąt padania słońca. Dlatego wybieramy "Nachylenie(Kąt)" (5.) i wpisujemy np.: -30 lub -40
Potem kierunek padania (patrząc na widok od góry) pokazuje nam biała kreska w czarnym kole (4.). Tą kreskę można przemieszczać o 360 stopni.

Dołączona grafika

Ok, mapka gotowa. Teraz wystarczy ją tylko skompilować lecz najpierw trzeba ją zapisać. Na górze naciskamy na "Plik" a następnie wybieramy "Zapisz jako..." i zapisujemy najlepiej bezpośrednio do C: lub tak aby ścieżka nie zawierała spacji. Teraz możeby przystąpić do kompilacji naciskając F9 bądź ikonki (1.) bądź menu Plik - Uruchom

Dołączona grafika

Zaznaczamy jeszcze parametry kompilatorów na normalnie, na górze w pasku wpisujemy "-game cstrike" a niżej zaznaczamy "Nie uruchamiaj gry" i klikamy OK. Otworzy się okienko z zapisem przebiegu kompilacji

Dołączona grafika

a po chwili (jeżeli nie będzie błędów w kompilacji) zrobi się nasza pierwsza mapa.
Tak wygląda w CS:

Dołączona grafika

Natomiast, jesli po kompilacji nie zostanie utworzony plik *.bsp nalezy zrobic tak:

Właczamy kompilacje przyciskiem F9 bądz z menu Plik -> Uruchom.
Pojawi się okienko z parametrami kompilacji. Okienko może się róznić od tego poniżej, jednak na pewno zawierać będzie podobne parametry. Dodam jeszcze, że to okienko jest przy kompilacji zaawansowanej więc jak masz okienko z normalna (normal) kompilacja to przełącz na zaawansowaną (ekspert)

Dołączona grafika

Objaśnienie poszczegulnych cyferek:
1 - kompilator struktury, obiektów i tekstur mapy (musi być włączony)
2 - kompilator .bsp (musi być włączony)
3 - kompilator odpowiedzialny za optymalizację mapy (nie musi być włączony jeśli mapę chcesz tylko sprawdzić w grze)
4 - kompilator odpowiedzialny za światło (jak nie będzie włączony to nie będzie cieni na mapie i efektów światła)
5 - ptaszek w tym miejscu sprawi, że gotowa mapka będzie kopiowana do katalogu "map" w grze
6 - a ten przycisk uruchamia proces kompilacji
Proces kompilacji w zależości od posiadanego sprzętu i złożoności mapy może trwać nawet kilka godzin, więc czasem nie musimy właczać wszystkich kompilatorów, zwłaszcza jak chcemy tylko sprawdzić budowę mapy np. wielkość pomieszczenia, schody itp. W takim wypadku wystarczy włączyć tylko 2 pierwsze.
Podczas kompilacji pojawi się okienko raportujące proces kompilacji. Jeżeli pojawi się jakiś błąd to na pewno będzie w nim informacja o tym błędzie. To dzięki temu raportowi (plik .log) wiesz co się dzieje i gdzie wystąpił problem. Problem nie jest trudno znalezc, wystarczy poszukac napisu Error lub Warning

Więcej tutoriali na VHE Center
Autor: AHA Andrzej Hrycyk
  • +
  • -
  • 9


#178873 Gun Xp Mod 2.0 PL - Zapis na nick

Napisane przez ProMil w 10.10.2010 18:57

To nie jest bug mądralo..
Jeżeli wybrałeś tryb Zombie_Swarm to nie pograsz w TT.

#define ZOMBIE_INFECTION
Tylko TT

#define NORMAL_MOD
TT i CT

@Naprawa buga z nickiem.
  • +
  • -
  • 5