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
 

Wolen - zdjęcie

Wolen

Rejestracja: 15.07.2013
Aktualnie: Nieaktywny
Poza forum Ostatnio: 05.01.2015 22:40
-----

#643047 Bonusy za daną ilość zabić z danej broni.

Napisane przez Wolen w 12.06.2014 21:29

Zależy o co Ci dokładnie chodzi i co rozumiesz poprzez funkcję. Można napisać plugin, w którym będzie zmienna, która będzie zliczała zabicia gracza i po uzbieraniu xxx wykonywała jakąś rzecz, ale liczba będzie się resetowała po zmianie mapy, wyjściu z serwera etc. Rozwiń swoją myśl co dokładnie chcesz.


  • +
  • -
  • 1


#642890 Bieganie po mapie gdy jesteśmy na SPECT

Napisane przez Wolen w 11.06.2014 19:02

Mam takie pytanie co do autora gdzie respią sie spect'y?? Znaczy czyj resp :D

 

Wolen ja bym to jednak dopracował ;D

Pisałem to raczej w ramach lekkiego przypomnienia co i jak. Dawno nic nie pisałem, a znów mnie to tego pociągło :F. 

 

 

 

Mam takie pytanie co do autora gdzie respią sie spect'y?? Znaczy czyj resp :D

 

Wolen ja bym to jednak dopracował ;D

Ymm jeżeli dobrze pamiętam to jeżeli się było w TT i przeszło się na spect to na respie TT a jak było się w CT i przeszło się na spect to na respie CT . :)

Mógłbyś mi zrobić żeby nóż był jeżeli umiesz ? :)

 

W załączniku :>.

Załączone pliki


  • +
  • -
  • 1


#642880 Jak wypełnić pole flaga w sklepie by Gh0st

Napisane przez Wolen w 11.06.2014 18:21

to jak np: s - dodatkowy poziom G to mam dodać s czy G?

Jeśli masz premium na flagę "s" w tamtym polu dodaj "ADMIN_LEVEL_G" i powiedz nam czy działa. Jeśli nie będzie działało to znaczy, że nie masz premki na flagę "s". Oczywiście pamiętaj, aby zmienić mapę ;P!


  • +
  • -
  • 1


#642736 Jak zablokować UPS ?

Napisane przez Wolen w 10.06.2014 14:04

Wyłapać początek rundy, sprawdzić czy team gracza to CT, zabrać wszystkie bronie (np. dzięki "strip_user_weapons(id)") i dać nóż :f. 


  • +
  • -
  • -1


#642484 Bieganie po mapie gdy jesteśmy na SPECT

Napisane przez Wolen w 08.06.2014 18:54

Teraz powinno działać. Zapomniałem o średniku ;-;.

Jednak to nie to, zaraz poprawię i dam edit.

 

Poprawiona wersja w załączniku.

Załączone pliki


  • +
  • -
  • 1


#642461 Bieganie po mapie gdy jesteśmy na SPECT

Napisane przez Wolen w 08.06.2014 16:12

Spróbuj tego ;P.

Załączone pliki


  • +
  • -
  • 1


#642386 Bieganie po mapie gdy jesteśmy na SPECT

Napisane przez Wolen w 08.06.2014 06:53

Dawno nic nie szrabjowałem, ale spróbuj tego  :lol: .

 

Załączone pliki


  • +
  • -
  • 1


#565946 ConVary - SourceMod'owe odpowiedniki cvarów

Napisane przez Wolen w 22.08.2013 07:39

Wprowadzenie
-------------------------------------------------------------------------------------------------------------------------------------------------------
ConVary są dostępne poprzez uchwyty (handles). Są dwa sposoby, w jaki możemy uzyskać handle ConVar'a. Jeśli tworzysz ConVar, który już istnieje zostanie automatycznie wykorzystany ten, który był pierwszy. 
Uwaga: Uchwyty ConVarów są unikalne dla danego ConVara i nie ma potrzeby ich zwalniania, bądź usuwania.
 
 
 
 
Znajdowanie ConVarów
-------------------------------------------------------------------------------------------------------------------------------------------------------
Znajdowanie ConVarów jest bardzo proste. Na przykład, powiedzmy, że chcemy użyć mp_startmoney z Counter-Strike: Source. 

new Handle:g_hStartMoney
 
public OnPluginStart()
{
	g_hStartMoney = FindConVar("mp_startmoney")
}

Uwaga: FindConVar() zwróci INVALID_HANDLE jeśli ConVar nie zostanie znaleziony. Weź to pod uwagę, jeśli będziesz próbował czytać ConVar'y z innych pluginów.
 
 
 
Tworzenie ConVarów
-------------------------------------------------------------------------------------------------------------------------------------------------------
Prosty ConVar zawiera dwa parametry, nazwę oraz domyślną wartość. W każdym razie, dobrym pomysłem jest dodanie opisu ;).

new Handle:g_hEnabled
 
public OnPluginStart()
{
	g_hEnabled = CreateConVar("myplugin_enabled", "1", "Sets whether my plugin is enabled")
}

Możesz także określić ograniczone wartości. Na przykład, stwórzmy cvar o nazwie myplugin_ratio, którego wartość cvar'u nie może wynosić więcej niż 1.0 lub mniej niż 0.1 :).

new Handle:g_hEnabled
 
public OnPluginStart()
{
	g_hEnabled = CreateConVar("myplugin_ratio",
			"0.6",
			"Sets a vote ratio",
			_,	/* Flags will be discussed later */
			true,	/* Has a minimum */
			0.1,
			true,	/* Has a maximum */
			1.0)
}

Domyślna wartość może być dowolnego typu danych i nie ogranicza ona przyszłych typów, które mogą być stosowane. Niemniej jednak, minimalne i maksymalne ograniczenia należy zawsze interpretować jako wartości typu float. Jeśli tworzysz ConVar, który już istnieje, otrzymasz do niego uchwyt. Co więcej, sam handle będzie identyczny. Opis, domyślna wartość lub ograniczenia nie zostaną zmienione.

 

 

 

Używanie/Zmienianie ConVarów
-------------------------------------------------------------------------------------------------------------------------------------------------------

Zarządzanie ConVar'ami jest bardzo proste. Na przykład, powiedzmy, że chcemy zmienić mp_startmoney, ale zachowamy starą wartość i przywrócimy ją później. Ponowne wykorzystanie naszego kodu z FindConVar.

new g_oldmoney
 
SetStartMoney(newmoney)
{
	g_oldmoney = GetConVarInt(g_hStartMoney)
	SetConVarInt(g_hStartMoney, newmoney)
}
 
RestoreStartMoney()
{
	SetConVarInt(g_hStartMoney, g_oldmoney)
}

Choć istnieją różne funkcji dla typów wartości (float, string, et cetera), wewnętrzne dane są zawsze zapisywane w ten sam sposób. Na przykład ten kod działa:

public GetStartMoney()
{
	decl String:buffer[128]
 
	GetConVarString(g_hStartMoney, buffer, sizeof(buffer))
 
	return StringToInt(buffer)
} 

Choć mp_startmoney jest liczbą całkowitą, to może jeszcze zostać przywrócona jako ciąg.

 

 

 

Flagi
-------------------------------------------------------------------------------------------------------------------------------------------------------

ConVary mogą mieć liczbę flag do zmiany ich zachowania. Kilka ważnych flag to:

  • FCVAR_PROTECTED - Poufne informacje (nie powinny być narażone na klientów oraz logi).
  • FCVAR_NOTIFY - Klienci są powiadamiani o zmianach.
  • FCVAR_CHEAT - Może zostać tylko użyte jeśli sv_cheat wynosi 1.
  • FCVAR_REPLICATED - Ustawienia są przymusowe dla klientów <może tutaj być błąd w tłumaczeniu> (oryginał: Setting is forced to clients.)
UnsetCheatVar(Handle:hndl)
{
	new flags = GetConVarFlags(hndl)
	flags &= ~FCVAR_CHEAT
	SetConVarFlags(hndl, flags)
}
 
SetCheatVar(Handle:hndl)
{
	new flags = GetConVarFlags(hndl)
	flags |= FCVAR_CHEAT
	SetConVarFlags(hndl, flags)
}

W oryginale była jeszcze wzmianka o zmianie callback'ów, lecz postanowił, że skoro nie do końca to pojmuję nie będę tego tykał ^^, a więc to będzie na tyle :D.

 

Źródło: http://wiki.alliedmo...eMod_Scripting)

 


  • +
  • -
  • 5


#565523 Simple Spawn NoBlock

Napisane przez Wolen w 21.08.2013 08:22

opis

Po rozpoczęciu rundy plugin daje możliwość przechodzenia przez członków swojej drużyny. Czas przenikania jest regulowany cvar'em.

 

 

 

cvary

// Czy plugin jest włączony
// -
// Domyślnie: "1.0"
// Minimalnie: "0.000000"
// Maksymalnie: "1.000000"
sm_snb "1.0"

// Czy FF ma być dostępne podczas spawn'u? Jeśli masz wyłączone ff na serwerze ustaw 0
// -
// Domyślnie: "1.0"
// Minimalnie: "0.000000"
// Maksymalnie: "1.000000"
sm_snb_ff "0"

// Czas spawn noblock'a (w sekundach).
// -
// Domyślnie: "10.0"
// Minimalnie: "1.000000"
sm_snb_time "10.0"
 

Załączone pliki


  • +
  • -
  • 1


#565384 Hookowanie eventów (wyłapywanie wydarzeń)

Napisane przez Wolen w 20.08.2013 18:56

Witam was w moim pierwszym poradniku :). Temat ten będzie spolszczeniem, natomiast link do oryginału (w języku angielskim) zamieszczę na dole ;).

 

Funkcja "HookEvent"

-------------------------------------------------------------------------------------------------------------------------------------------------------

Na samym wstępie opiszę wam funkcję, którą będziemy używać do wyłapywania wydarzeń :D.

native HookEvent(const String:name[], EventHook:callback, EventHookMode:mode=EventHookMode_Post);

Parametry:

1. Pierwszy paramter jest to nazwa wydarzenia (Lista eventów do poszczególnych gier na silniku Source).

2. Drugi natomiast jest to nazwa wywołanej funkcji.

3. Opcjonalny tryb hook'a (o tym niżej :)).

 

 

 

Hookowanie wydarzeń

-------------------------------------------------------------------------------------------------------------------------------------------------------

 

Kiedy wyłapujemy jakieś wydarzenie, mamy do wyboru trzy "tryby":

  • Pre - Wyłapuje wydarzenie zanim zostanie zwolnione1.
  • Post - Wyłapuje wydarzenie zaraz po tym jak zostanie zwolnione.
  • Post_NoCopy - Wyłapuje wydarzenie, ale nie zapisuje o nim żadnych informacji.

Hookowanie wydarzeń używamy w jednym z następujących celów. Aby zorientować się, który tryb użyć, zobacz listę poniżej:

 

  • Blokowanie wydarzenia (Zapobieganie jego zwolnieniu)
    • Zawsze Pre  
  • Zmienianie wydarzenia (dokładniej jego paramterów ^^)
    • Zawsze Pre 
  • Działania w wydarzeniu (działania przed/pro zakończeniu wydarzenia)2
    • Pre jeśli twoje działanie musi mieć miejsce (lul, nie jestem tutaj pewien w tłumaczeniu xD) akcją silnika.
    • Post jeśli twoje działanie musi mieć miejsce po akcji silnika.
    • PostNoCopy jeśli twoje działanie jest Post i wymaga tylko nazwy wydarzenia.

​UWAGA! Nigdy nie potrzebuje unhook'owania eventu, kiedy plugin przestanie z niego korzystać. Zrobi się to samoczynnie. 

 

 

 

Blokowanie wydarzeń

-------------------------------------------------------------------------------------------------------------------------------------------------------

Blokowanie wydarzeń jest prostsze, niż myślisz ;)! Powiedzmy, że chcesz zablokować śmierć poprzez strzał w głowę.

public OnPluginStart()
{
    HookEvent("player_death", Event_PlayerDeath, EventHookMode_Pre)    //Rejestrujemy śmierć wraz z trybem "Pre"
}

public Action:Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
    if(GetEventBool(event, "Headshot"))    //Nasz if zostanie wywołany, jeśli śmierć jest wywołana strzałem w głowe
    {
    return Plugin_Handled    //Zwracamy Plugin_Handled, które blokuje funkcje
    }
    return Plugin_Continue   //Jeśli if się nie spełni przechodzimy dalej zwracając Plugin_Continue
}

Zmienianie wydarzenia

-------------------------------------------------------------------------------------------------------------------------------------------------------

Zmienianie wydarzenia również jest proste. Wydarzenia modyfikujemy w hook'u "pre". Na przykład, ustalmy, że chcemy usunąć headshot'a ze wszystkich eventów.

public OnPluginStart()
{
	HookEvent("player_death", Event_PlayerDeath, EventHookMode_Pre)    //Wyłapujemy event
}
 
public Action:Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
	SetEventBool(event, "headshot", false)    //Ustawiamy zmienną typu logicznego (o ile dobrze pamiętam, tak to się nazywało xd) headshot na false, czyli blokujemy możliwość zabicia strzałem w głowę.
	return Plugin_Changed
}

Upewnij się, że zwracasz Plugin_Changed zamiast Plugin_Continue, kiedy modyfikujemy event lub jego parametry.

 

 

 

Hook "post"

-------------------------------------------------------------------------------------------------------------------------------------------------------

Hooki z parametem post są domyślne i będą zwykle najczęściej używane. Na przykład, ustalmy, że chcemy "wydrukować" wiadomość do każdego gracza, że zginął:

public OnPluginStart()
{
	HookEvent("player_death", Event_PlayerDeath)    //Rejestrujemy event
}
 
public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
	decl String:weapon[64]    //Deklarujemy zmienną typu string 
	new victimId = GetEventInt(event, "userid")    //Tworzymy zmienną victimID oraz przypisujemy jej pobieranie id ofiary
	new attackerId = GetEventInt(event, "attacker")//Tworzymy zmienną attackerID oraz przypisujemy jej pobieranie id zabójcy
	new bool:headshot = GetEventBool(event, "headshot")    //Tworzymy zmienną typu logicznego oraz przypisujemy za zadanie pobieranie informacji o zabiciu z głowy
	GetEventString(event, "weapon", weapon, sizeof(weapon))    //Pobieramy nazwę broni krótko mówiąc :D
 
	decl String:name[64]    //Deklarujemy zmienną typu string
	new victim = GetClientOfUserId(victimId)    //Z tego co wyczytałem to funkcja getclientofuserid tłumaczy id user'a na prawdziwy index gracza. W tym przypadku otrzymamy id ofiary
	new attacker = GetClientOfUserId(attackerId)    //To co wyżej, z tym, że otrzymamy id zabójcy
	GetClientName(attacker, name, sizeof(name))    //Pobieramy nick zabójcy
 
	PrintToConsole(victim, "You were killed by \"%s\" (weapon \"%s\") (headshot \"%d\")", name, weapon, headshot)    //Tego już nie będę objaśniał. Jeśli znajdę czas znajdzie się to, w którymś z moich przyszłych poradników ^^.
}

Uwaga! Zwracaną wartością dla hooków post jest ignore, więc tag "Action" nie jest wymagany.

 

 

 

Hook "PostNoCopy"

-------------------------------------------------------------------------------------------------------------------------------------------------------

Na końcu, istnieją pewne hook'i, którym potrzebna jest tylko nazwa wydarzenia. PostNoCopy jest specjalnie zoptymalizowany do tego zadania. Podczas przechodzenia z Pre do Post,  SourceMod musi powielać wydarzenie i jego wszystkie pary klucz/wartość. PostNoCopy zapobiega tej sekwencji. 

Powiedzmy, że chcemy wiedzieć kiedy pewna sekwencja wydarzeń jest wywoływana. 

public OnPluginStart()
{
	HookEvent("game_newmap", GameEvents, EventHookMode_PostNoCopy)
	HookEvent("game_start", GameEvents, EventHookMode_PostNoCopy)
	HookEvent("game_end", GameEvents, EventHookMode_PostNoCopy)
	HookEvent("game_message", GameEvents, EventHookMode_PostNoCopy)
}
 
public GameEvents(Handle:event, const String:name[], bool:dontBroadcast)
{
	PrintToServer("Event has been fired (event \"%s\") (nobcast \"%d\")", name, dontBroadcast)
}

Należy pamiętam, że normalnie Hook'i Post nie wymaga wartości. Jednakże, parametr event zawsze powinien być równy INVALID_HANDLE. Zatem parametr name musi być stosowany zamiast GetEventName.

 

UWAGA! Mogą pojawić się w pewnych momentach błędy w tłumaczeniu lub inne drobne błędy. Może to wynikać z mojego lekkiego niedouczenia oraz dziur spowodowanych ch*jowym systemem nauki w szkołach. Krytyka mile widziana :) (bez przesady ^^). Za wszystkie błędy bardzo przepraszam :<.

 

 

Oryginał: www.wiki.alliedmods.net/Events_(SourceMod_Scripting)

 

1O co chodzi z tym zwolnione :D. W oryginale było fired, czyli zwolnione. Nie mogłem znaleźć jakiejś sensownej alternatywy, więc tłumacze to w sensie, że silnik przetrzymuje wydarzenie, a następnie je zwalnia :D.

2Nie jestem pewien tego tłumaczenia.

 

 


  • +
  • -
  • 7


#565290 Ciche chodzenie w sklepie, nie znika po zakończeniu rundy

Napisane przez Wolen w 20.08.2013 15:36

Wyłap event zakończenia rundy i tam ustaw footstep. Btw. 1 włącza kroki, 0 wyłącza :F

 

@edit

http://amxx.pl/topic/1680-eventy/

Ten temat Ci sie przyda :F


  • +
  • -
  • 1


#562810 AMX...Brak komend :/

Napisane przez Wolen w 12.08.2013 17:23

Dodaj mu jeszcze flagę "u" ^^.


  • +
  • -
  • 1


#562566 Hosting na serwer 11-13 slotowy AIM

Napisane przez Wolen w 11.08.2013 18:19

pukawka.pl Przy obecnej promocji do końca trwania serwera koszt 11 slotowego serwera wynosi 24.2zł w pakiecie lite ;).
  • +
  • -
  • 1


#562498 Problem z kompilacją Exp Mod

Napisane przez Wolen w 11.08.2013 13:17

Nie daje sobie ręki uciąć, że to będzie w pełni funkcjonować poprawnie, lecz się kompiluje. Jak coś nie będzie działać to pisz, może mi się uda wtedy poprawić ^^.

Załączone pliki


  • +
  • -
  • 1


#562490 Która to jest czesic assassina

Napisane przez Wolen w 11.08.2013 12:56

W tytule masz :X.

Assasin's Creed IV: Black Flag

 

Assassin's Creed IV: Black Flag data premiery gry na PC:

listopad 2013 ( światowa data premiery )

listopad 2013 ( data wydania w Polsce )

listopad 2013 ( premiera w USA )


  • +
  • -
  • -2