Skocz do zawartości
  • Chmurka
  • Boróweczka
  • Jabłuszko
  • Limonka
  • Czekoladka
  • Węgielek
mm-dd-yyyy

Jak dodawac eventy do kodu SourcePawn ? :)

Polecane posty

Napisano (edytowany)

Czesc , przychodze do was z pytaniem dopiero zaczynam z SourcePawnem nie zaczynam dopiero z programowaniem bo mam juz stycznosc z innymi jezykami takimi jak C++ , Pytanie: Jak dodawac eventy korzystam z kanalu @MAGNET'a ktory wszystko dokladnie tlumaczy , Gdy pisze kod zaczynam od 

#include <sourcemod>
  
  public void OnPluginStart() {
  		RegConsoleCmd("sm_win", DaneWin "Pokazuje komunikat na srodku ekranu Monitora)
  }
  itd ....
 Jak dodac te Eventy z dokumentacji SourceMod ? ? ?

Glownie chodzi mi o to jak dodawac te eventy i skladac to , przepraszam za ortografie , ale moja klawiatura odmawia mi posluszenstwa po dwoch latach.

Edytowano przez mm-dd-yyyy
  • Kocham to! 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Musisz w OnPluginStart zrobić hook`a np.

HookEvent("round_end", Event_RoundEnd);


Później się musisz do tego odnieść.

 

public Action Event_RoundEnd(Event event, const char[] name, bool dontBroadcast)
{
	// Twój kod
}

W taki sposób dodałeś event. 
 

  • Lubię to! 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Aha czyli rozumujac ,.... (tak kazdy event zapisuje ale kazdy jest inny) (round_end) w zaleznosci od eventa tak ?

 

Znasz jakies poradniki dotyczace sourcemoda oprocz @MAGNET'a ?

Przez Vasto_Lorde,

Łącze posty ^^

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Tu masz spis eventów CS:GO -> https://wiki.alliedmods.net/Counter-Strike:_Global_Offensive_Events
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!
Masz tam napisane wszystko co możesz z tego eventu wziąć. np. W player_death możesz wyciągnąć ID osoby, która umarła oraz osoby, która zabiła.
 

int victim = GetClientUserId(event.GetInt("userid")); // Osoba, która została zabita
int attacker = GetClientUserId(event.GetInt("attacker")); // Osoba, która zabiła

 

  • Lubię to! 2

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Każdy event z linku który Brum Brum podał wyżej odpowiada za inne wydarzenie, które można przechwycic i wyciągnąc z niego informacje. Nie jestem pewien czy dokładnie o to Ci chodziło - musisz doprecyzować

 

Na marginesie - błędów w ortografii się nie doszukałem, ale interpunkcja zostawia dużo do życzenia. Nie potrafię rozgryźć o czym piszesz. I nie jest to kwestia złej klawiatury. Niby głupie kropki i przecinki, a jak dużo zmieniają... 😄

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Hej! Pomimo tego, że temat został wytłumaczony, to myślę, że da się ten temat jeszcze co nieco rozszerzyć lub opowiedzieć o nim inaczej. Zaczynam:
 

Znasz już C++, to dobrze, jednakże tutaj jako że piszemy pluginy do gry, wygląda to lekko inaczej. W prostych programach w C i językach podobnych, wszystko dzieje się liniowo. To znaczy, podajemy na wejściu jakiś zestaw danych, przetwarzamy je, program się kończy. W SourcePawnie natomiast, bardzo upraszczając i zniekształcając trochę, mamy wiele wątków i zdarzeń które mogą się się wydarzyć w różnych odstępach czasowych spowodowane różnymi "włącznikami" płynącymi z gry. Mam tu na myśli właśnie Eventy/Zdarzenia o których mówisz w temacie. Nie można ustawić wszystkim graczom 200HP na samym początku działania pluginu bo... nie ma wtedy żadnych graczy. Trzeba to zrobić za każdym razem gdy się odrodzą. Już tłumaczę z kodem:
 

//Tutaj mamy bardzo ładną funkcję uaktywniającą się gdy plugin zaczyna działać na serwerze
public void OnPluginStart() {}

//Tutaj mamy bardzo ładną funkcję przyjmującą jako argument ID klienta
//Dzięki temu możemy używać zmiennej "client" w obrębie tej funkcji
//Funkcja jak widzimy działa dla danego klienta, ustawiając mu 200 HP
public void GivePlayerHP(int client) {
	SetEntityHealth(client, 200);
}

 

SetEntityHealth
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! oraz OnPluginStart
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! są już zamieszczone w SourceModzie i kompilator/gra wiedzą do czego one służą. Natomiast nie wiedzą kiedy ma się wykonać GivePlayerHP. Musimy "złapać" moment w którym gracz się rodzi i wtedy włączyć dla niego tą funkcję. Tutaj wkraczamy z Rejestracją/Hookowaniem/"Zaczepianiem" Funkcji/Eventów/Zdarzeń. Taka czynność odbywa się prawie zawsze w OnPluginStart (czasami w OnMapStart). 

 

public void OnPluginStart() {
	//Tutaj właśnie Hookujemy Event, zdarzenie "player_spawned"
	//I przekazujemy pluginowi, że funkcja Event_PlayerSpawned
	//Będzie odpowiedzialna za obsługę tego zdarzenia
	HookEvent("player_spawned", Event_PlayerSpawned);
}

public void GivePlayerHP(int client) {
	SetEntityHealth(client, 200);
}

//Tutaj jest funkcja obsługująca Event spawnu gracza, posiadająca
//Określone zmienne które przyjmuje, na ten moment nie trzeba ich
//Znać, ale jest obowiązkowe by funkcja je przyjmowała
public Action Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast) {
	//Tutaj możemy bez przeszkód wykonać naszą funkcję GivePlayerHP... Ale...
	//Nie mamy ID gracza! Możemy je pozyskać w ten sposób
	int client = GetClientOfUserId(event.GetInt("userid"));
	
	//Dzięki temu w zmiennej client mamy ID klienta dla którego wywołała się 
	//Ta funkcja. I możemy już użyć naszej funkcji:
	GivePlayerHP(client);
}

 

Tutaj dokumentacja HookEvent
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!. Pamiętaj, że funkcja Event_PlayerDeath będzie wywoływana dla każdego gracza. Powyższy kod pokazuje jak powiązać dane zdarzenie z akcją jaką chcemy wykonać. Prawie zawsze zachodzi związek przyczynowo skutkowy w SourceModzie: Rejestracja zdarzenia -> Oczekiwanie na aktywację zdarzenia (czy to przez komendę gracza czy rozgrywkę gry) -> wykonanie kodu związanego z danym zdarzeniem przy jego aktywacji.

 

Spis wszystkich Eventów, które możesz zarejestrować poprzez HookEvent tak jak podał @Brum Brum możesz znaleźć na tej stronie
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!
. Natomiast jeśli jeszcze chciałbyś poczytać o rejestracji Eventów, polecam ten o tu tę stronę
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

 

Oczywiście HookEvent to nie jedyny sposób na rejestrację zdarzeń. Istnieją jeszcze SDKHooks
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!, które oferują jeszcze inne zdarzenia do zhookowania.

 

 

Jakbyś miał jeszcze jakieś pytania w tym temacie, pytaj 😛

  • Lubię to! 1
  • Kocham to! 3
Przez MAGNET,

1000 lajkuf dla tego pana!

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.

×