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
 

xfkgxldkgxdk - zdjęcie

xfkgxldkgxdk

Rejestracja: 19.05.2013
Aktualnie: Nieaktywny
Poza forum Ostatnio: 11.01.2020 20:00
-----

#543859 [ROZWIĄZANE] Jak ustawić auto bh tylko dla flagi t?

Napisane przez GwynBleidD w 19.05.2013 14:35

get_user_flags(id) & 524288 == 524288

Kto wymyślił taki bezsensowny i kompletnie nieczytelny zapis? Gdy przyjdzie to zmienić na inną flagę lub sprawdzić jaka flaga jest potrzebna, będziemy przeliczać wartość na binarną i liczyć który bit jest zaświecony, aby określić jaka to flaga? Dużo czytelniejszym zapisem jest:

get_user_flags(id) & ADMIN_LEVEL_H == ADMIN_LEVEL_H

Jeśli potrzebujemy sprawdzić kilka flag na raz, można to zrobić tak:

get_user_flags(id) & (ADMIN_LEVEL_H|ADMIN_LEVEL_C) == (ADMIN_LEVEL_H|ADMIN_LEVEL_C)

I od razu widać jaka to flaga... A na optymalności ABSOLUTNIE NIC nie tracimy, kod jest przeliczany na odpowiednią wartość na poziomie kompilacji (jeśli włączona jest optymalizacja, a domyślnie jest ona włączona) i w efekcie oba sposoby dają dokładnie taki sam efekt...

 

A co do kodu, wystarczy dodać warunek:

if(get_user_flags(id) & ADMIN_LEVEL_H != ADMIN_LEVEL_H)
    return PLUGIN_CONTINUE;

 

na początku PreThinka i funkcji wywoływanej przez task.


  • +
  • -
  • 1


#543849 [ROZWIĄZANE] Jak ustawić auto bh tylko dla flagi t?

Napisane przez sNH. w 19.05.2013 13:27

#include <amxmodx>

#include <engine>
 
#define FL_ONGROUND (1<<9)
#define FL_WATERJUMP (1<<11)
 
forward amxbans_admin_connect(id);
 
new bool:g_Vip[33];
 
public plugin_init(){
register_plugin("VIP Ultimate", "12.3.0.2", "benio101 & speedkill");
}
public client_authorized(id){
if(get_user_flags(id) & 524288 == 524288){
client_authorized_vip(id);
}
}
public client_authorized_vip(id){
g_Vip[id]=true;
}
public client_disconnect(id){
if(g_Vip[id]){
client_disconnect_vip(id);
}
}
public client_disconnect_vip(id){
g_Vip[id]=false;
}
public client_PreThink(id){
if(g_Vip[id] && is_user_alive(id)){
client_PreThinkVip(id);
}
}
public client_PreThinkVip(id){
entity_set_float(id, EV_FL_fuser2, 0.0);
 
if(entity_get_int(id, EV_INT_button) & 2){
new flags = entity_get_int(id, EV_INT_flags);
 
if(flags & FL_WATERJUMP || entity_get_int(id, EV_INT_waterlevel) >= 2 || !(flags & FL_ONGROUND)){
return PLUGIN_CONTINUE;
}
new Float:velocity[3];
entity_get_vector(id, EV_VEC_velocity, velocity);
 
velocity[2] += 250.0;
entity_set_vector(id, EV_VEC_velocity, velocity);
 
entity_set_int(id, EV_INT_gaitsequence, 6);
}
return PLUGIN_CONTINUE;
}
public amxbans_admin_connect(id){
client_authorized(id);
}

 

Generator vip


  • +
  • -
  • 1