←  Gotowe funkcje

AMXX.pl: Support AMX Mod X i SourceMod

»

SDKHooks 2.0.0

  • +
  • -
Nomaf - zdjęcie Nomaf 20.08.2011

SDKHooks


Dołączona grafika

SDKHooks to biblioteka z bardzo dobrymi funkcjami, umożliwiającymi o wiele lepsze pisanie pluginów. Praktycznie każda większa modyfikacja wymaga SDKHooks to działania, więc warto zawczasu wyposażyć się w te potężne narzędzie skryptera. Jest ono dostępne dla Windows'a i Linux'a oraz Mac'a, ale jego nie będę wrzucał, bo i tak nikt nie zakłada na tym serwerów :)

Dołączona grafika

Zawartość archiwum wrzucamy do /nazwa_gry/.

Dołączona grafika

Aby skorzystać z biblioteki, należy na początku pluginu dać:
#include <sdkhooks>

Podstawowy hook (możemy go wpisać praktycznie, gdzie chcemy):
SDKHook(entity, SDKHookType:type, SDKHookCB:callback)


1 parametr to byt (id, index, client, ent, entity czy co tam wymyślimy)
2 parametr to typ hook'a. Dostępne są:
Spoiler

3 parametr to natomiast nazwa funkcji, która będzie się wykonywała przy hook'u. Możliwości:
Spoiler


Przykładowy kod (zwiększa ilość hp o 1 po zadaniu obrażeń):
public OnClientPutInServer(client)
{
SDKHook(client, SDKHook_OnTakeDamagePost, OnTakeDamagePost);
}

public OnTakeDamagePost(victim, attacker, inflictor, Float:damage, damagetype)
{
SetUserHealth(attacker, GetUserHealth(attacker) + 1)

return Plugin_Changed
}


Dołączona grafika

Windows:
Załączony plik  sdkhooks-2.0.0-hg127-windows.zip   732,85 KB   360 Ilość pobrań

Linux:
Załączony plik  sdkhooks-2.0.0-hg127-linux.tar.gz   523,11 KB   342 Ilość pobrań

Poradnik stworzony przez: Nomaf dla AMXX.pl - Support AMX Mod X
Kopiowanie bez mojej zgody jest zakazane!


Użytkownik Nomaf edytował ten post 20.08.2011 12:37
Odpowiedz

  • +
  • -
Fili:P - zdjęcie Fili:P 22.08.2011

To zapewne takie GoldSrc-owe, fake lub orpheu ?
Odpowiedz

  • +
  • -
Nomaf - zdjęcie Nomaf 22.08.2011

Bardziej bym powiedział hamsandwich + fakemeta.
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 22.08.2011

mi to przypomina bardziej register_forwad/_event/logevent :D
Odpowiedz

  • +
  • -
Droso - zdjęcie Droso 19.09.2015

Taka uwaga jak już cos rejestrujemy (rejestruje w większości w OnClientPutInServer)

 

to przy rozłączeniu gracza musi zrobić unhooka, bo inaczej później mogą być problemy.

Więc przykład powinien wyglądać tak:

public OnClientPutInServer(client)
{
SDKHook(client, SDKHook_OnTakeDamagePost, OnTakeDamagePost);
}

public OnTakeDamagePost(victim, attacker, inflictor, Float:damage, damagetype)
{
    SetUserHealth(attacker, GetUserHealth(attacker) + 1)
    
    return Plugin_Changed
}

public OnClientDisconnect(client)
{   

       SDKUnhook(client, SDKHook_OnTakeDamagePost, OnTakeDamagePost);
 
}

Użytkownik Droso edytował ten post 21.09.2015 16:43
Odpowiedz

  • +
  • -
Linux' - zdjęcie Linux' 19.09.2015


Taka uwaga jak już cos rejestrujemy (rejestruje w większości w OnClientPutInServer)

to przy rozłączeniu gracza musi zrobić unhooka, bo inaczej później mogą być problemy.
Więc przykład powinien wyglądać tak:

public OnClientPutInServer(client){SDKHook(client, SDKHook_OnTakeDamagePost, OnTakeDamagePost);}public OnTakeDamagePost(victim, attacker, inflictor, Float:damage, damagetype){	SetUserHealth(attacker, GetUserHealth(attacker) + 1)		return Plugin_Changed}public OnClientDisconnect(client){      if(IsClientInGame(client))   {	   SDKUnhook(client, SDKHook_OnTakeDamagePost, OnTakeDamagePost);   }}


Droso jak najbardziej ale sprawdzanie czy gracz jest podlaczony jest zbedna. Funkcja disconnect wykonuje sie przed rozlaczeniem gracza z serwera wiec gracz zawsze bedzie podlaczony. Poza tym obawiam sie, ze nawet gdyby tak nie bylo to to nie zadziala. Sama funkcja clientingame nie dokonca dobrze sprawdza czy gracz jest na serwerze wiec lepiej uzyc stocka.
Odpowiedz

  • +
  • -
Droso - zdjęcie Droso 19.09.2015


Droso jak najbardziej ale sprawdzanie czy gracz jest podlaczony jest zbedna. Funkcja disconnect wykonuje sie przed rozlaczeniem gracza z serwera wiec gracz zawsze bedzie podlaczony.

Wiem o tym, że jest to przed rozłączeniem gracza, sam dodaje IsClientInGame, bo tak kiedyś zobaczyłem w przykładzie, że tak powinno się robić, więc teraz nie wiem czy to jest słuszne hm.

 


Poza tym obawiam sie, ze nawet gdyby tak nie bylo to to nie zadziala. Sama funkcja clientingame nie dokonca dobrze sprawdza czy gracz jest na serwerze wiec lepiej uzyc stocka.

Nigdy nie miałem problemów, podasz więcej info na pw? A co do stocka chodzi o

stock bool:IsValidClient(client)
{
	return bool:(client >= 1 && client <= MaxClients && IsClientConnected(client) && IsClientInGame(client));
}

?

Odpowiedz