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
 

Zdjęcie

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


Najlepsza odpowiedź GwynBleidD, 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.

Przejdź do postu


  • Zamknięty Temat jest zamknięty
3 odpowiedzi w tym temacie

#1 xfkgxldkgxdk

    Nowy

  • Nowy

Reputacja: 0
Nowy

  • Postów:2
Offline

Napisano 19.05.2013 13:22

/*
 *
 *	Author:		Cheesy Peteza
 *	Date:		22-Apr-2004 (updated 2-March-2005)
 *
 *
 *	Description:	Enable bunny hopping in Counter-Strike.
 *
 *	Cvars:
 *			bh_enabled		1 to enable this plugin, 0 to disable.
 *			bh_autojump		If set to 1 players just need to hold down jump to bunny hop (no skill required)
 *			bh_showusage		If set to 1 it will inform joining players that bunny hopping has been enabled
 *						and how to use it if bh_autojump enabled.
 *
 *	Requirements:	AMXModX 0.16 or greater
 *
 *
 */

#include <amxmodx>
#include <engine>

#define	FL_WATERJUMP	(1<<11)	// player jumping out of water
#define	FL_ONGROUND	(1<<9)	// At rest / on the ground

public plugin_init() {
	register_plugin("Super Bunny Hopper", "1.2", "Cheesy Peteza")
	register_cvar("sbhopper_version", "1.2", FCVAR_SERVER)

	register_cvar("bh_enabled", "1")
	register_cvar("bh_autojump", "1")
	register_cvar("bh_showusage", "1")
}

public client_PreThink(id) {
	if (!get_cvar_num("bh_enabled"))
		return PLUGIN_CONTINUE

	entity_set_float(id, EV_FL_fuser2, 0.0)		// Disable slow down after jumping

	if (!get_cvar_num("bh_autojump"))
		return PLUGIN_CONTINUE

// Code from CBasePlayer::Jump (player.cpp)		Make a player jump automatically
	if (entity_get_int(id, EV_INT_button) & 2) {	// If holding jump
		new flags = entity_get_int(id, EV_INT_flags)

		if (flags & FL_WATERJUMP)
			return PLUGIN_CONTINUE
		if ( entity_get_int(id, EV_INT_waterlevel) >= 2 )
			return PLUGIN_CONTINUE
		if ( !(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)	// Play the Jump Animation
	}
	return PLUGIN_CONTINUE
}

public client_authorized(id)
	set_task(30.0, "showUsage", id)

public showUsage(id) {
	if ( !get_cvar_num("bh_enabled") || !get_cvar_num("bh_showusage") )
		return PLUGIN_HANDLED

	if ( !get_cvar_num("bh_autojump") ) {
		client_print(id, print_chat, "[AMX] Bunny hopping is enabled on this server. You will not slow down after jumping.")
	} else {
		client_print(id, print_chat, "[AMX] Auto bunny hopping is enabled on this server. Just hold down jump to bunny hop.")
	}
	return PLUGIN_HANDLED
}


  • +
  • -
  • 0

#2 sNH.

    Czy MisieQ ukradł ciasteczko?

  • Power User

Reputacja: 299
Wszechwidzący

  • Postów:1 070
  • Steam:steam
  • Imię:Bartek
  • Lokalizacja:Ełk
Offline

Napisano 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

#3 xfkgxldkgxdk

    Nowy

  • Autor tematu
  • Nowy

Reputacja: 0
Nowy

  • Postów:2
Offline

Napisano 19.05.2013 13:36

Generator vip... Dzięki, że piszesz :D Do zamknięcia ;)


  • +
  • -
  • 0

#4 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 19.05.2013 14:35   Najlepsza odpowiedź

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.


Użytkownik GwynBleidD edytował ten post 19.05.2013 14:37

  • +
  • -
  • 1

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych