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
 

Hleb - zdjęcie

Hleb

Rejestracja: 17.12.2010
Aktualnie: Nieaktywny
Poza forum Ostatnio: 23.02.2017 11:14
*****

#525624 T-Rex w Counter-Strike 1.6

Napisane przez DarkGL w 17.03.2013 18:56



nagrane ponieważ wielu twierdziło że to fake ;)
  • +
  • -
  • 2


#353151 Szybkość reloadu

Napisane przez DarkGL w 24.01.2012 04:47

Plugin skraca reload o 1/2 autorem kodu jest ConnorMcLeod

Tutaj ustawiamy mnożnik dla szybkości reloadu ( im mniejszy tym szybciej )
#define RELOAD_RATIO 0.5

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN "Reload Speed"
#define AUTHOR "ConnorMcLeod"
#define VERSION "0.2.0"

#define RELOAD_RATIO 0.5

const NOCLIP_WPN_BS    = ((1<<2)|(1<<CSW_HEGRENADE)|(1<<CSW_SMOKEGRENADE)|(1<<CSW_FLASHBANG)|(1<<CSW_KNIFE)|(1<<CSW_C4))
const SHOTGUNS_BS    = ((1<<CSW_M3)|(1<<CSW_XM1014))

// weapons offsets
const m_pPlayer               = 41
const m_iId                    = 43
const m_flTimeWeaponIdle        = 48
const m_fInReload            = 54

const m_flNextAttack = 83

stock const Float:g_fDelay[CSW_P90+1] = {
	0.00, 2.70, 0.00, 2.00, 0.00, 0.55,   0.00, 3.15, 3.30, 0.00, 4.50, 
	2.70, 3.50, 3.35, 2.45, 3.30,   2.70, 2.20, 2.50, 2.63, 4.70, 
	0.55, 3.05, 2.12, 3.50, 0.00,   2.20, 3.00, 2.45, 0.00, 3.40
}
public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	new szWeapon[17]
	for(new i=1; i<=CSW_P90; i++)
	{
		if( !(NOCLIP_WPN_BS & (1<<i)) && get_weaponname(i, szWeapon, charsmax(szWeapon)) )
		{
			if( !(SHOTGUNS_BS & (1<<i)) )
			{
				RegisterHam(Ham_Weapon_Reload, szWeapon, "Weapon_Reload_Post", 1)
			}
		}
	}
}

public Weapon_Reload_Post(iEnt)
{    
	if( get_pdata_int(iEnt, m_fInReload, 4) )
	{
		new id = get_pdata_cbase(iEnt, m_pPlayer, 4)
		new Float:fDelay = g_fDelay[get_pdata_int(iEnt, m_iId, 4)] * RELOAD_RATIO
		set_pdata_float(id, m_flNextAttack, fDelay, 5)
		set_pdata_float(iEnt, m_flTimeWeaponIdle, fDelay + 0.5, 4)
	}
}

  • +
  • -
  • 12


#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  3482 Ilość pobrań

  • +
  • -
  • 87


#537002 0 HP Bug New

Napisane przez DarkGL w 24.04.2013 12:39

0 HP Bug

Naprawia bugi które ukazują się gdy gracz ma więcej hp niż 255 (zmiana sterowania itp.)

W przeciwieństwie do poprzednika działa na wszystkich modach i ze wszystkimi pluginami.

 

http://darkgl.amxx.p...4/0-hp-bug-new/

 

Wymagania:

Instalacja:

  • Wrzucasz i działa żadnych cvarow dopisujesz tylko do plugns.ini
  • Folder configs wrzucamy do folderu configs amxxa

 

Testowane na najnowszej wersji steam ( binarki 5999 ) + orpheu v2.5.1

 

Załączony plik  0_hp_bug_new.sma   1,67 KB  979 Ilość pobrań
  0_hp_bug_new.amxx

Załączony plik  configs.rar   719 bajtów  1108 Ilość pobrań


  • +
  • -
  • 13


#381801 Boty nie widzą niewidzialnych

Napisane przez DarkGL w 16.03.2012 20:05

opis
Standardowo boty strzelały nawet do osób wpełni niewidzialnych ten plugin to zmienia.
Gdy jesteśmy niewidzialni bot może nas po prostu nie zauważyć.Testowane na podbotach.

cvary
Nie ma

screenshot
http://www.youtube.com/watch?v=vUc5V0J-tU8

Boty nie widzą niewidzialnych | DarkGL Blog

download
Nowe : Załączony plik  botDontShotInv.sma   1,79 KB  1175 Ilość pobrań
  botDontShotInv.amxx
Stare: Załączony plik  botDontShotInv.sma   789 bajtów  477 Ilość pobrań
  botDontShotInv.amxx
  • +
  • -
  • 22


#548548 Foreach i Forrange implementacja pętli ułatwiających życie

Napisane przez DarkGL w 09.06.2013 02:38

http://darkgl.amxx.p...iajacych-zycie/
 
Często podczas prac nad pluginem w kodzie muszę „przeliterować” po elementach tablicy czy wszystkich graczach. Pisanie rozbudowanej pętli for jest meczące i nużące więc pomyślałem że foreach znane z php było by znacznym ułatwieniem.
 
http://php.net/manua...res.foreach.php
 
Najpierw opis samych funkcji ( które są tak naprawdę makrodefinicjami )
  • foreach – „przeliterowuje” po całej tablicy i przypisuje wartość aktulnie używanego elementu do zdefiniowanej zmiennej
    dwa parametry
    • 1 – tablica po której ma literować
    • 2 – nazwa zmiennej do której będzie zapisywany aktualny element
  • forrange2 – wylicza kolejne wartości liczbowe i przypisuje je do zmiennej. Inspirowalem się funkcją range w php i python
    dwa parametry ( liczba po nazwie określa ilość parametrów )
    • 1 – nazwa zmiennej do które będzie zapisywana aktualna wartość
    • 2 – górny indeks do którego nastąpi odliczanie, odliczanie startuje od 0 do właśnie tego parametru – 1 z krokiem inkrementacyjnym równym 1 np. 0 , 1 , 2 , 3
  • forrange3 – to samo co funkcja wyżej
    Trzy parametry
    • 1 – nazwa zmiennej
    • 2 – dolny indeks od którego zacznie się odliczanie
    • 3 – górny indeks tak jak parametr 2 w funkcji forrange2
      Przykład dla dolnego indeksu równego 3. 3 , 4 , 5 , 6
  • forrange4 – To samo co funkcje wyżej
    Cztery parametry
    • 1- nazwa zmiennej
    • 2- dolny indeks tak jak w forrange3
    • 3 – górny indeks tak jak w forrange3
    • 4- krok inkrementacji np. możemy ustawić go na 10 więc liczby bedą się zwiększac o 10 co każdy krok
      Przykład 0 , 10 , 20 , 30 , 40 , 50
Definicje które trzeba dodać do pluginu
 
 
#define foreach(%1,%2) for( new iCurrentElement = 0 , %2 = %1[ 0 ]; iCurrentElement < sizeof %1 ; iCurrentElement++ , %2 = iCurrentElement < sizeof %1 ? %1[ iCurrentElement ] : 0 )
#define forrange4(%1,%2,%3,%4) for( new %1 = %2; %1 < %3 ; %1 += %4 )        

#define forrange3(%1,%2,%3) for( new %1 = %2; %1 < %3 ; %1 += 1 )
    
#define forrange2(%1,%2) for( new %1 = 0; %1 < %2 ; %1 += 1 )
 
Przykład użycia
 
#include <amxmodx>
#include <amxmisc>

#define PLUGIN    "New Plugin"
#define AUTHOR    "DarkGL"
#define VERSION    "1.0"

#define foreach(%1,%2) for( new iCurrentElement = 0 , %2 = %1[ 0 ]; iCurrentElement < sizeof %1 ; iCurrentElement++ , %2 = iCurrentElement < sizeof %1 ? %1[ iCurrentElement ] : 0 )

#define forrange4(%1,%2,%3,%4) for( new %1 = %2; %1 < %3 ; %1 += %4 )        

#define forrange3(%1,%2,%3) for( new %1 = %2; %1 < %3 ; %1 += 1 )
    
#define forrange2(%1,%2) for( new %1 = 0; %1 < %2 ; %1 += 1 )
    
public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    new testArray[] = { 1 , 2 , 3 , 4 };
    
    foreach( testArray , value ){
        log_amx( "each %d" , value );
    }
    
    log_amx( "Range 1" );
    
    forrange2( value , 5 ){
        log_amx( "range1 %d" , value );
    }
    
    log_amx( "Range 2" );
    
    forrange3( value , 1 , 5 ){
        log_amx( "range2 %d" , value );
    }
    
    log_amx( "Range 3" );
    
    forrange4( value , 0 , 100 , 10 ){
        log_amx( "range3 %d" , value );
    }
}
 
Zwracane wartości
 
[testFor.amxx] each 1
[testFor.amxx] each 2
[testFor.amxx] each 3
[testFor.amxx] each 4
[testFor.amxx] Range 1
[testFor.amxx] range1 0
[testFor.amxx] range1 1
[testFor.amxx] range1 2
[testFor.amxx] range1 3
[testFor.amxx] range1 4
[testFor.amxx] Range 2
[testFor.amxx] range2 1
[testFor.amxx] range2 2
[testFor.amxx] range2 3
[testFor.amxx] range2 4
[testFor.amxx] Range 3
[testFor.amxx] range3 0
[testFor.amxx] range3 10
[testFor.amxx] range3 20
[testFor.amxx] range3 30
[testFor.amxx] range3 40
[testFor.amxx] range3 50
[testFor.amxx] range3 60
[testFor.amxx] range3 70
[testFor.amxx] range3 80
[testFor.amxx] range3 90
 
Jak widać funkcje znacznie ułatwiają przeglądanie tablic po za tym kod wygląda lepiej.
na wstępie mówiłem o

po elementach tablicy czy wszystkich graczach

jak widać najlepiej zastosowac tu funkcje forrange3
 
 
forrange( currentPlayerID , 1 , 33 )
( zamiast stałej 33 można też wstawić pobieranie ilości slotów )
  • +
  • -
  • 17


#475259 [TuT] Jak naprawić perk Nano Kamizelka.

Napisane przez Pan PrO w 04.11.2012 19:53

Witam. W tym poradniku pokarzę wam jak naprawić perk Nano Kamizelka oraz dodać tę zdolność innym klasą.

1. Pod
new bool:freezetime = true;
dodajemy
new odpornosc_gracza[33];


2. w plugin_natives() na samym dole dodajemy


register_native("cod_get_user_odpornosc", "SprawdzOdpornosc", 1);
register_native("cod_set_user_odpornosc", "UstawOdpornosc", 1);


3. W UsunUmiejetnosci(id) na samym dole dodajemy
odpornosc_gracza[id] = 0;


4. Ten public znajdujący sie prawie na samym dole

public ZadajObrazenia(atakujacy, ofiara, Float:obrazenia, Float:czynnik_inteligencji, byt_uszkadzajacy, dodatkowe_flagi)
ExecuteHam(Ham_TakeDamage, ofiara, byt_uszkadzajacy, atakujacy, obrazenia+PobierzInteligencje(atakujacy, 1, 1, 1)*czynnik_inteligencji, /*1<<31 |*/ dodatkowe_flagi);


Zmieniamy na to

public ZadajObrazenia(atakujacy, ofiara, Float:obrazenia, Float:czynnik_inteligencji, byt_uszkadzajacy, dodatkowe_flagi)
{
if(!odpornosc_gracza[ofiara])
ExecuteHam(Ham_TakeDamage, ofiara, byt_uszkadzajacy, atakujacy, obrazenia+PobierzInteligencje(atakujacy, 1, 1, 1)*czynnik_inteligencji, /*1<<31 |*/ dodatkowe_flagi);
}


5. Na samym końcu .sma dodajemy to

public UstawOdpornosc(id, wartosc)
odpornosc_gracza[id] = wartosc;

public SprawdzOdpornosc(id)
return odpornosc_gracza[id];


Sposób użycia

W cod_perk_enabled lub cod_class_enabled dodajemy

cod_set_user_odpornosc(id, 1);


a w cod_perk_disabled lub cod_calss_disabled

cod_set_user_odpornosc(id, 0);



Naprawiona Nano Kamizelka

Załączony plik  codperk_nanokamizelka.sma   746 bajtów  392 Ilość pobrań
  codperk_nanokamizelka.amxx


Zakaz kopiowania na inne forum. Poradnik wykonany dla amxx.pl
  • +
  • -
  • 11


#414061 Deathrun Rangi [AMXX + SQL + WWW]

Napisane przez Gość w 24.05.2012 22:38

opis
Plugin Deathrun Rangi liczy skoki wykonane Bunny Hopem na serwerze.
Przekraczając kolejne progi wykonanych skoków, zdobywamy kolejne rangi.
Skacząc, w czasie rzeczywistym widzimy, ile mamy wykonanych skoków i jaką rangę.

Menu. Konfiguracja
W przystępnym Menu możemy zobaczyć statystyki oraz wymagania do rang.
Ponadto, dostępna jest konfiguracja opcji wyświetlania i powiadomień.

[warn='Zalecenie']Plugin idealny na serwery Deathrun, choć nadaje się do każdej rozgrywki[/warn]Statystyki. Online
Wszystkie statystyki, w tym top10, możemy obejrzeć zarówno w grze,
jak i online na serwerze WWW, wyszukując, sortując i filtrując wyniki.

[info='Pełna integracja']Plugin posiada 2 natywy oraz 2 forwardy (opisane niżej),
pozwalając na sukcesywną współpracę z innymi pluginami.[/info]Dodatki
Do pluginu udostępnione są 2 dodatki, wykorzystujące forwardy:
  • Muzyka wyświetlana w momencie zdobycia nowej rangi (muzyka załączona poniżej)
  • Informacja dla najlepszego gracza w rankingu (pluginy załączone są poniżej)
wymagane moduly
amxmodx
fakemeta
engine
sqlx

Baza danych SQL
Serwer z obsługą PHP*

*opcjonalnie dla statystyk online


cvary

// CVARy ogólne
amx_dr_rangi_speed 290 // minimalna prędkość wykonywanych skoków Bunny Hopem liczonych do rankingu
amx_dr_rangi_team 2 // drużyna, której Bunny Hop jest liczony (0 - wszyskie, 1 - tylko Terro, 2 - tylko CT, 3 - żadna)
amx_dr_rangi_show_best 1 // [0|1] czy pokazywać (1) najlepszego skoczka na serwerze, czy nie (0)
amx_dr_rangi_prefiks "[Deathrun_Rangi]" // prefiks pokazywany w informacjach na sayu

// CVARy jako dane do bazy danych, w której przechowujemy statystyki
amx_dr_rangi_host "localhost" // adres do bazy danych
amx_dr_rangi_user "root" // użytkownik bazy danych
amx_dr_rangi_pass "root" // hasło do bazy danych
amx_dr_rangi_db "db" // nazwa bazy danych


[error='Ostrzeżenie']W przypadku problemów z konfiguracją lub pytaniem
dotyczącym implementacji natywów bądź forwardów, załóż nowy temat.

Nie dość, że zachowasz przejrzystość w tym dziale, to prosząc o pomoc
w odpowiednim dziale, uzyskasz ją dużo szybciej i unikniesz ostrzeżenia.[/error]komendy
/rangi - pokazuje Menu Deathrun Rang, w którym można:
  • sprawdzić najlepszych skoczków na serwerze
  • sprawdzić swój własny ranking
  • opis rang i ich wymagania
  • ustawić miejsce wyświetlania informacji o skokach
  • ustawić, czy ranga ma się pokazywać przy ilości skoków
Forwardy:
dr_rangi_new_lvl(id) // Wbicie nowej rangi
dr_rangi_best_player(id) // Index gracz który ma najwięcej skoków ( warunek musi być on połączony ). Wywołanie co rundę.


Natywy:
get_user_jumps(id) // Zwraca ilość skoków gracza
get_user_rang(id) // Zwraca rangę gracza


screenshot
Dołączona grafika

instalacja
Plugin podstawowy Deathrun Rangi (wymagane):
  • Rangi_Deathrun.amxx kopiujemy do amxmodx/plugins (wymagane, podstawowe)
  • do amxmodx/plugins.ini dodajemy Rangi_Deathrun.amxx (wymagane, podstawowe)
  • do amxmodx/amxx.cfg dodajemy wyżej opisane cvary (ustawione wg własnych upodobań, wymagane, podstawowe)
Plugin dodatkowy, odgrywa muzyczkę przy awansie do nowej rangi (opcjonalnie):
  • lvl_up.mp3 kopiujemy do sound/misc (opcjonalnie, odgrywa muzyczkę przy awansie do nowej rangi)
  • Muzyka_na_wbicie_nowej_rangi.amxx kopiujemy do amxmodx/plugins (opcjonalnie, odgrywa muzyczkę przy awansie do nowej rangi)
  • do amxmodx/plugins.ini dodajemy Muzyka_na_wbicie_nowej_rangi.amxx (opcjonalnie, odgrywa muzyczkę przy awansie do nowej rangi)
Plugin dodatkowy, wyświetla informację o najlepszym graczu (opcjonalnie):
  • Best_Player.amxx kopiujemy do amxmodx/plugins (opcjonalnie, wyświetla informację o najlepszym graczu)
  • do amxmodx/plugins.ini dodajemy Best_Player.amxx (opcjonalnie, wyświetla informację o najlepszym graczu)
Opcjonalne pliki SMA dla programistów w celu przejrzenia kodu i ewentualnej modyfikacji (opcjonalnie):
  • Rangi_Deathrun.sma kopiujemy do amxmodx/scripting (opcjonalnie)
  • db.inl kopiujemy do amxmodx/scripting (opcjonalnie)
  • Deathrun_Rangi.inc kopiujemy do amxmodx/scripting/includes (opcjonalnie)
  • Muzyka_na_wbicie_nowej_rangi.sma kopiujemy do amxmodx/scripting (opcjonalnie, odgrywa muzyczkę przy awansie do nowej rangi)
  • Best_Player.sma kopiujemy do amxmodx/scripting (opcjonalnie, wyświetla informację o najlepszym graczu)
konfiguracja
Na serwer WWW kopiujemy zawartość folderu WWW (4 pliki)
z czego edytujemy jedynie plik Konfiguracja.php
Instrukcja znajduje się w środku ww. pliku.

[success='Dane SQL']Pamiętaj, aby pobierać dane na serwer WWW z tej samej bazy danych, do której statystyki zapisuje plugin Deathrun Rangi.
Upewnij się też, czy użytkownik bazy danych posiada dostęp do bazy danych zarówno z serwera gry, jak i serwera WWW.[/success]
Zmiana rang i wymagań
Aby zmienić rangi lub wymagania, należy edytować plik główny Rangi_Deathrun.sma
1. Znajdujemy linijkę new const g_Rangi[][] = i pod nią mamy nazwy kolejnych rang. Bez problemu możemy ich nazwy zmieniać, usuwać i dodawać nowe.
Należy jednak pamiętać, aby znajdowały się one w cudzysłowie i po każdej randze, porócz ostatniej, znajdował się przecinek, jak w oryginale.
2. Tak samo postępujemy z wymogami znajdującymi się poniżej linijki new const g_Wymogi[] =, gdzie kolejne od góry liczby odpowiadają kolejnym
rangom i wyrażają liczbę skoków wymaganą do zdobycia kolejnej rangi. należy pamiętać, by liczba rang była identyczna, jak liczba wymogów.
3. Na końcu zliczamy nową liczbę rang i aktualizujemy max_level z linijki 13.: #define max_level 16, zmieniając 16 na nową liczbę rang do zdobycia.
4. Gdy już wprowadzimy wszystkie zmiany, zapisujemy plik, kompilujemy lokalnie, aktualizujemy DeathrunRanking.amxx na serwerze i zmieniamy mapkę.
inne informacje
Autorzy: speedkill i benio101
Podziękowanie dla Fili:P za wycięcie muzyki
Język: polski
Wersja: 1.2.1

Changelog:
v. 1	  N Wersja inicjalizacyjna
v. 1.1	  $ Poprawiono obsługę błędów
	  $ Poprawiono numerację paginacji
v. 1.2	  + Dodanie numeracji miejsc
	  $ Poprawiono algorytm sortowania
	  $ Zoptymalizowano kod
	  $ Zmniejszono liczbę zapytań do bazy danych
	  + Dodano informację o liczbie wpisów w bazie danych
v. 1.2.1  ! Aktualizacja krytyczna
	  $ Zoptymalizowano kod
	  $ Dodano zabezpieczenie cvarów (FCVAR_PROCETED)

download

Załączony plik  Rangi_Deathrun.rar   121,93 KB  1327 Ilość pobrań
Załączony plik  Rangi_Deathrun.sma   10,59 KB  954 Ilość pobrań
  Rangi_Deathrun.amxx


#426314 Polskie końcówki wyrazów w zależności od wartości

Napisane przez Gość w 30.06.2012 18:10

Wstęp
Na pewno nieraz widzieliście napisy typu:
  • Koszt przesyłki wynosi 24 złotych
  • Na Twoim koncie jest 1 punktów
  • Sesja wygaśnie za 4 minut
Nie potrafiliście sobie z tym poradzić,
lub po prostu problem Was przerastał.

Mam dla Was wspaniałą nowinę:
Od dziś będziecie spać spokojnie!
Albowiem przedstawiam rozwiązanie.

Stock wybiera odpowiednią końcówkę na podstawie podanej wartości.

Mamy do czynienia z dwoma stockami:
  • dkoncowka() dla liczb całkowitych (integer, decimal)
  • fkoncowka() dla dla liczb zmiennoprzecinkowych (float)
Zastosowanie

dkoncowka(ile, czlon[], zero[], jeden[], dwa[]);
fkoncowka(Float:ile, czlon[], zero[], pol[], jeden[], dwa[]);


Opis
  • ile [liczba całkowita dla dkoncowka(), zmiennoprzecinkowa dla fkoncowka()] → wartość, na podstawie której wybierana będzie końcówka
  • czlon [ciąg znaków] → wbrew nazwie humanistycznej, początek wyrazu wyświetlanego, identyczny dla wszystkich kolejnych argumentów
  • zero [ciąg znaków] → końcówka, którą przyjmuje wyraz dla wartości ile równej 0, która dołączona do członu da pełny, odmieniony wyraz
  • pol [ciąg znaków] → końcówka, którą przyjmuje wyraz dla wartości ile równej 0.5, która dołączona do członu da pełny, odmieniony wyraz
  • jeden [ciąg znaków] → końcówka, którą przyjmuje wyraz dla wartości ile równej 1, która dołączona do członu da pełny, odmieniony wyraz
  • dwa [ciąg znaków] → końcówka, którą przyjmuje wyraz dla wartości ile równej 2, która dołączona do członu da pełny, odmieniony wyraz
Uwaga
Zmienna czlon służy zaoszczędzeniu czasu w używaniu funkcji, pozostawienie jej pustej i podanie pełnych odmian słów pozostałych zmiennych
w zupełności spełni swoje zadanie, choć zazwyczaj zwyczajnie przysporzy nam niepotrzebnego pisania kilkakrotnie początku tego samego wyrazu.

Przykłady
if(is_user_alive(id)){
new hp=get_user_health(id);
client_print(id,print_chat,"Masz %d %s zycia", hp, dkoncowka(hp, "punkt", "ow", "", "y"));
}

if(is_user_connected(id)){
new frags=get_user_frags(id);
if(frags)
client_print(id,print_chat,"Zdobyles %d %s", frags, dkoncowka(frags, "frag", "ow", "a", "i"));
else
client_print(id,print_chat,"Nie zdobyles jeszcze zadnego fraga");
}


Stocki do skopiowania
stock dkoncowka(ile, czlon[], zero[], jeden[], dwa[]){
new str[1024];
ile=abs(ile);
if(ile==1){
format(str,1023,"%s%s",czlon,jeden);
return str;
}
if((ile%10==2 || ile%10==3 || ile%10==4) && (!(ile%100==12 || ile%100==13 || ile%100==14))){
format(str,1023,"%s%s",czlon,dwa);
return str;
}
format(str,1023,"%s%s",czlon,zero);
return str;
}

stock fkoncowka(Float:ile, czlon[], zero[], pol[], jeden[], dwa[]){
new str[1024];
ile=floatabs(ile);
if(ile==1.0){
format(str,1023,"%s%s",czlon,jeden);
return str;
}
if(ile!=floatround(ile)){
format(str,1023,"%s%s",czlon,pol);
return str;
}
new num=floatround(ile);
if((num%10==2 || num%10==3 || num%10==4) && (!(num%100==12 || num%100==13 || num%100==14))){
format(str,1023,"%s%s",czlon,dwa);
return str;
}
format(str,1023,"%s%s",czlon,zero);
return str;
}


Stocki do pobrania
Załączony plik  koncowka.inc   1,02 KB  134 Ilość pobrań

Implementacja (koncowka.inc)
  • Kopiujemy stock do folderu scripting/include i dodajemy na początku kodu
    #include <koncowka>
    
  • Lub kopiujemy potrzebne stocki do naszego kodu



#429504 Najlepszy gracz mapy

Napisane przez Gość w 07.07.2012 12:07

Najlepszy gracz mapy
opis
Plugin pokazuje na 5 sekund przed końcem mapy nick
najlepszego gracza na środku ekranu zielonym hudem.

Najlepszy gracz typowany jest na podstawie wielu
czynników regulowanych do woli cvarami, tj.
  • zabiciami w głowę
  • zabiciami zwykłymi
  • zabiciami towarzyszy
  • zginięciami w głowę
  • zginięciami zwykłymi
  • samobójstwami
  • podkładaniami bomb
  • podłożeniami bomb
  • detonacjom bomb
  • rozbrajanym bombom
  • rozbrojonym bombom
  • ratowanym zakładnikom
  • uratowanym zakładnikom
Za każdy z ww. czynników możemy przyznać dowolną liczbę
punktów, które w przypadku zielonego koloru, dodawane są
do punktów pozytywnych, czerwonego zaś do negatywnych.

Mamy do wyboru dwie opcje:
  • Sumaryczną, która zwraca różnicę sumy punktów
    pozytywnych i punktów negatywnych dla każdego gracza
  • Sortowaną, która w pierwszej kolejności bierze pod uwagę
    sumę punktów pozytywnych, a w drugiej kolejności dopiero
    sumę punktów negatywnych dla każdego z graczy.
Aby mieć pewność, że wyłoniony zostanie jeden jedyny zwycięzca,
ostatnim kryterium, dla obu tych opcji, jest kryterium pierwszeństwa,
co oznacza, że w przypadku identycznych statystyk, zwycięzcą
zostanie gracz, który jako pierwszy zyskał pozytywne punkty.

Do tego mamy możliwość co rundę wyświetlać graczowi liczbę posiadanych punktów na koncie.

screenshot
2012-07-12_00003.jpg 2012-07-12_00004.jpg

wymagane moduly
amxmodx
amxmisc
hamsandwich
csx

cvary
ngm_frag_pts 2 // liczba pozytywnych punktów przyznawana za zwykłe zabójstwo
ngm_frag_hs_pts 3 // liczba pozytywnych punktów przyznawana za zabójstwo w głowę
ngm_tk_pts 3 // liczba pozytywnych punktów przyznawana za zabójstwo w głowę
ngm_zgon_pts 1 // liczba negatywnych punktów przyznawana za zostanie zabitym
ngm_zgon_hs_pts 2 // liczba negatywnych punktów przyznawana za zostanie zabitym w głowę
ngm_plant 1 // liczba pozytywnych punktów przyznawana za rozpoczęcie podkładania bomby
ngm_planted 2 // liczba pozytywnych punktów przyznawana za podłożenie bomby
ngm_explode 5 // liczba pozytywnych punktów przyznawana za zdetonowanie bomby
ngm_defuse 3 // liczba pozytywnych punktów przyznawana za rozpoczęcie rozbrajania bomby
ngm_defused 5 // liczba pozytywnych punktów przyznawana za rozbrajenie bomby
ngm_hostage 1 // liczba pozytywnych punktów przyznawana za rozpoczęcie ratowania zakładnika
ngm_resque 2 // liczba pozytywnych punktów przyznawana za uratowanie zakładnika
ngm_typ 0 // 0 - tryb sumowanych punktów, 1 - tryb punktów sortowanych
ngm_punkty 1 // 1 - pokazuje punkty, 0 - nie pokazuje punktów
ngm_samobojstwo 2 // liczba negatywnych punktów przyznawana za popełnienie samobójstwa / zabicie się


instalacja
Wersja dla końca mapy wraz z końcem czasu:
  • najlepszygraczmapy.amxx kopiujemy do amxmodx/plugins
  • do amxmodx/plugins.ini dodajemy najlepszygraczmapy.amxx
  • do amxmodx/amxx.cfg dodajemy powyższe cvary (ustawione wg własnych upodobań)
  • najlepszygraczmapy.sma kopiujemy do amxmodx/scripting (opcjonalnie)
Wersja z pozwoleniem na dokończenie rundy po końcu czasu:
  • najlepszygraczmapy_pdr.amxx kopiujemy do amxmodx/plugins
  • do amxmodx/plugins.ini dodajemy najlepszygraczmapy_pdr.amxx
  • do amxmodx/amxx.cfg dodajemy powyższe cvary (ustawione wg własnych upodobań)
  • najlepszygraczmapy_pdr.sma kopiujemy do amxmodx/scripting (opcjonalnie)
  • get_seconds_left.amxx kopiujemy do amxmodx/plugins (koniecznie!)
  • do amxmodx/plugins.ini dodajemy get_seconds_left.amxx (koniecznie!)
  • secondsleft.inc kopiujemy do amxmodx/scripting/include (opcjonalnie)
[warn='Uwaga']Dla wersji z pozwoleniem na dokończenie rundy po końcu czasu konieczne jest wgranie także pluginu get_seconds_left![/warn]
inne informacje
Autor: Benio101
Licencja: PAL (Uznanie autorstwa)
Wersja: 1.1
Język: Polski

Changelog
v. 1.0   07.07.12   N   Wydanie pluginu
   v. 1.1   12.07.12   +   {
	  Dodanie cvaru ngm_tk_pts, ktory dodaje negatywne punkty za TK
	  Dodanie wersji kompatybilnej z pluginami, pozwalajacymi dokonczyc runde na koniec czasu
   }

download
Wersja dla końca mapy wraz z końcem czasu:
Załączony plik  najlepszygraczmapy.sma   6,42 KB  748 Ilość pobrań
  najlepszygraczmapy.amxx

Wersja z pozwoleniem na dokończenie rundy po końcu czasu:
Załączony plik  najlepszygraczmapy_pdr.sma   7,1 KB  505 Ilość pobrań
  najlepszygraczmapy_pdr.amxx
Załączony plik  get_seconds_left.sma   1,96 KB  471 Ilość pobrań
  get_seconds_left.amxx
Załączony plik  secondsleft.inc   152 bajtów  483 Ilość pobrań



#430475 * Crysis 2 Multiplayer Mod *

Napisane przez Gość w 10.07.2012 15:08

Jeśli nie potrafisz wykonać podstawowej operacji, jaką jest kompilacja gotowego kodu, gotowymi narzędziami z dokładnym tutorialem, to co dopiero prowadzenie serwera i setki problemów, z którymi będziesz musiał sobie szybko poradzić, albo stracisz graczy.
Polecam Ci pokonać ten problem, zamiast liczyć na gotowca z gotowca, bo na nic o się nie zda. Jeśli poświęciłbyś tyle czasu, pracy i energii na rozwiązanie problemu, jaki poświęcasz na pisanie na forum, że nie potrafisz, dawno pomagałbyś innym na podstawie własnych doświadczeń. Uwierz mi, że jeśli tylko będziesz tak naprawdę chciał, to poradzisz sobie i szybciej osiągniesz oczekiwany cel, niż ciągle oczekując gotowych rozwiązań. A przy okazji będziesz potrafił w przyszłości powtórzyć czynność oraz podołać kolejnym zadaniom, co uczyni z Ciebie wartościowego, doświadczonego i zdolnego Administratora. Ale trzeba chcieć.


#441826 CSDM - zapamiętywanie tłumiku, burst mode

Napisane przez Gość w 06.08.2012 21:27

Przyznam, że zdawało się, że powinno działać, jednak problem jest w tym, że CSDM modyfikuje funkcję spawnu w dość nieudolny sposób i trzeba się do tego nieco inaczej zabrać.
W wolnym czasie, możliwe, że się za to zabiorę, bo będę musiał zainstalować to całe CSDM, a pisanie "na sucho" chyba się na nic nie zda w tym wypadku.


#443630 [ROZWIĄZANE] get_mapname, set_task

Napisane przez Gość w 10.08.2012 03:20

Ad.2. Funkcja task, poza nazwą funkcji do wykonania, wartością czasu i flagami, może przyjąć numer zadania.
Należy uważać, żeby nie stworzyć zadania o numerze innego, już istniejącego.

Numer zadania(opcjonalny 3. parametr funkcji) musi być unikalny ze względów technicznych pawna.
Wiele osób korzystało z tworzenia taska z identyfikatorem równym id gracza.
Szybko odeszli od tego fatalnego pomysłu, tworząc równie złe rozwiązanie, do numeru gracza dodawali pewną, unikalną liczbę,
następnie odejmując ją w momencie wykonywania zadania. Niestety, liczby te, o ile nie są oddalone o minimum maksymalną możliwą liczbę graczy na serwerze,
to mogą prowadzić do nieprzewidzianych skutków, ingerując w taski z innej funkcji, a następnie próbując dwukrotnie dodać, bądź odjąć zadanie,
co powoduje w nieprzewidzianych momentach, co nieokreślony i trudny do przewidzenia czas, losowe crashe serwera bez error logów.
Wystarczy popatrzeć na dział "Problemy z AMXX / Problemy z HLDS". Wiele z tych nierozwiązanych problemów polega na nieudolnym używaniu kodu typu:
#include <amxmodx>
#include <hamsandwich>
#include <fun>

#define TASK_YEAR 2012

#define TASK_FB 1337
#define TASK_HE 1991
#define TASK_SG 1111

public plugin_init(){
register_plugin("Bad task example", "0.1", "benio101");
RegisterHam(Ham_Spawn, "player", "ham_spawn", 1);
set_task(100.0,"gracz_roku",TASK_YEAR);
}
public ham_spawn(id){
if(is_user_alive(id)){
set_task(5.0,"fb",id+TASK_FB,_,_,"b");
set_task(10.0,"he",id+TASK_HE,_,_,"b");
set_task(20.0,"sg",id+TASK_SG,_,_,"b");
}
}

public gracz_roku(){
client_print(0,print_chat,"Graczem roku zostal Haxi0r! Gratulacje!");
}

public fb(id){
id-=TASK_FB;
if(is_user_alive(id)){
give_item(id,"item_flashbang");
} else {
remove_task(id+TASK_FB);
}
}

public he(id){
id-=TASK_HE;
if(is_user_alive(id)){
give_item(id,"item_hegrenade");
} else {
remove_task(id+TASK_HE);
}
}

public sg(id){
id-=TASK_SG;
if(is_user_alive(id)){
give_item(id,"item_smokegrenade");
} else {
remove_task(id+TASK_SG);
}
}
Stąd zalecam wysyłać parametry jako tablicę, wraz z podaniem jej wielkości, by zapobiec niespodziewanym crashom serwera bez errorlogów.
Dokładne informacje, jak przesyłać parametry znajdują się m.in. w tym dziale.

Jeśli w kodzie powyżej, poza oczywistym brakiem usunięcia tasku w przypadku końca rundy, nie widzisz innych błędów, to oznacza, że jesteś podatny na wyżej opisany przypadek.

Ad.1. Do porównania służy funkcja equal
if(equal(nazwa_mapy,"de_dust2"))



#436541 VIP Ultimate

Napisane przez Gość w 26.07.2012 15:03

VIP Ultimate
opis
Plugin VIP, dający osobom z określonymi flagami przywileje.

cvary
vip_hp 10 // <liczba dodawanego zycia na poczatku kazdej rundy>
vip_he 1 // <liczba dodawanych granatow HE na poczatku kazdej rundy>
vip_fb 0 // <liczba dodawanych Flashy na poczatku kazdej rundy>
vip_sg 0 // <liczba dodawanych Smoke Grenadow na poczatku kazdej rundy>
vip_defuse_kit 0 // czy dawac defuse kit na poczatku kazdej rundy <0|1>
vip_armor 50 // <liczba dodawanych punktow kamizelki na poczatku kazdej rundy>
vip_speed 150 // <liczba dodawanych punktow szybkosci>
vip_money 1000 // <liczba dodawanych dolarow na poczatku kazdej rundy>
vip_skoki 3 // <liczba mozliwych do wykonania skokow w powietrzu>
vip_napis 1 // czy w tabeli punktow ma widniec VIP przy nicku <0|1>
vip_girl_model_ct 1 // czy ustawiac model dla kobiety CT <0|1>
vip_girl_model_tt 1 // czy ustawiac model dla kobiety TT <0|1>
vip_admin_model_ct 1 // czy ustawiac model dla Admina CT <0|1>
vip_admin_model_tt 1 // czy ustawiac model dla Admina TT <0|1>
vip_vip_model_ct 1 // czy ustawiac model dla VIPa CT <0|1>
vip_vip_model_tt 1 // czy ustawiac model dla VIPa TT <0|1>
vip_vip_flag t // <flaga vipa|"">
vip_girl_flag p // <flaga dziewczyny|"">
vip_admin_flag d // <flaga admina|"">
vip_recharge 1 // czy dawac pelen magazynek za zabicie wroga <0|1>
vip_add_money 200 // <liczba dodatkowych pieniedzy za zwykle zabicie>
vip_add_hs_money 700 // <liczba dodatkowych pieniedzy za zabicie HeadShotem>
vip_money_limit 16000 // <limit pieniedzy>
vip_add_frags 0 // <liczba dodatkowych fragow za zwykle zabicie>
vip_add_hs_frags 0 // <liczba dodatkowych fragow za zabicie HeadShotem>
vip_add_hp 10 // <liczba dodatkowych punktow zycia za zwykle zabicie>
vip_add_hs_hp 30 // <liczba dodatkowych punktow zycia za zabicie HeadShotem>
vip_hp_limit 255 // <limit punktow zycia>
vip_armor_limit 511 // <limit punktow kamizelki>
vip_screen_flash 1 // czy wyswietlac zielone migniecie na poczatku rundy <0|1>
vip_powitanie_txt 1 // czy wyswietlac powitanie vipa na serwerze <0|1>
vip_powitanie_wav 1 // czy witac vipow emisja pliku wav <0|1>
vip_deagle 0 // ilosc magazynkow amunicji w deaglu <0|1-6>
vip_fiveseven 0 // ilosc magazynkow amunicji w fiveseven <0|1-6>
vip_m4 0 // ilosc magazynkow amunicji w m4a1 <0|1-4>
vip_ak 0 // ilosc magazynkow amunicji w ak47 <0|1-4>
vip_awp 0 // ilosc magazynkow amunicji w awp <0|1-4>
vip_krowa 0 // ilosc magazynkow amunicji w m249 <0|1-3>
vip_shotgun 0 // ilosc magazynkow amunicji w xm1014 <0|1-6>
vip_online_info 1 // czy pokazywac liste vipow online <0|1>
vip_info  // <nazwa pliku TXT z informacja o VIPie w formacie HTML|"">

wymagane moduly
amxmodx
cstrike
engine
fakemeta_util
fun
hamsandwich
colorchat

instalacja
Mamy do wyboru dwie wersje:
vip_ultimate.amxx, który działa niezależnie:
  • vip_ultimate.amxx kopiujemy do amxmodx/plugins
  • vip_ultimate.sma kopiujemy do amxmodx/scripting (opcjonalnie)
  • do pliku amxmodx/config/plugins.ini dodajemy linijkę vip_ultimate.amxx
oraz vip.amxx, który współpracuje z Grenade sack and limiterem, wymagając jednak jego obecności:
  • vip_ultimate.amxx kopiujemy do amxmodx/plugins
  • vip_ultimate.sma kopiujemy do amxmodx/scripting (opcjonalnie)
  • do pliku amxmodx/config/plugins.ini dodajemy linijkę vip_ultimate.amxx
Dla obydwu wersji, ewentualne modele z paczki RAR kopiujemy do katalogu cstrike/models/player

inne informacje
Autorzy: Benio101
Licencja: PAL (Uznanie autorstwa)
Wersja: 1.1
Język: Polski

download
Załączony plik  vip.sma   15,16 KB  1183 Ilość pobrań
  vip.amxx
Załączony plik  vip_ultimate.sma   15,2 KB  1659 Ilość pobrań
  vip_ultimate.amxx
Załączony plik  Vip_modele.rar   15,52 MB  1650 Ilość pobrań


PS. Plugin pisany dawno temu na własne potrzeby, ale oto post, który skłonił mnie na publikację:

Tak, zróbcie jeszcze 50 vipów... :facepalm:

Zostało jeszcze 49 ;)

[info='Plugin nie będzie rozwijany']W związku z tym, że już prawie gotowy VIP Generator zawiera wszystkie opcje zawarte w tym pluginie,
a także sporo więcej, to niniejszy plugin nie będzie rozwijany i żadne prace nad nim nie będą prowadzone.

Proszę nie liczyć na dodanie nowych opcji, tylko napisać do mnie na PW, jakie opcje przydadzą się Wam w VIP Generatorze.[/info]


#455871 VIP Generator

Napisane przez Gość w 05.09.2012 19:14

Szukałeś dla siebie pluginu VIPa, ale nie znalazłeś? A może czegoś Ci zawsze brakowało?
Od teraz możesz zapomnieć o takim problemie! VIP Generator zadebiutował na AMXX.pl

W związku z dużym zainteresowaniem pluginami "VIP"
Przygotowaliśmy dla Was obiecany
:arrow: Vip Generator

Wygeneruj sobie plugin VIP według własnych upodobań.
Dziesiątki ustawień, zarówno zwykłych, jak i warunkowych.

Macie jakieś propozycje, a może brakuje Wam istotnych ustawień?
Piszcie śmiało, a postaramy się dodać kolejne opcje do generatora.

Mam nadzieję, że generator przyniesie pożytek ;)

PS Generator dostępny jest także w głównym, górnym Menu
poprzez wybranie Dodatki → Dodatki AMXX → Generator VIP