←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Online Admin + Offline

Locked

  • +
  • -
se7en's Photo se7en 26.02.2010

Witam

robie aktualnie taki prosty plugin ale sie zawiesilem w jednym miejscu.
nie będę tu pisal o moich postepach z pluginem, podam surowa wersje.
Aktualnie plugin pokazuje adminow Online:
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Zarzad Adminow"
#define VERSION "1.0"
#define AUTHOR "se7en"

#define CharsMax(%1) sizeof %1 - 1

#define MAX_GROUPS 7

new g_groupNames[MAX_GROUPS][] = {
   
   "Super HeadAdmin",
   "Vice HeadAdmin",
   "Super Admin",
   "Admin",
   "Slot",
   "VIP",
   "Znajomi"
}

new g_groupFlags[MAX_GROUPS][] = {
   
   "abcdefghijlmnoprstuw",  
   "abcdefghijlnoprstuw",  
   "abcdefghijkloprstu",     
   "bcdefghijklu",    
   "bz",   
   "qz",      
   "az"           
}

new g_groupFlagsValue[MAX_GROUPS];

public plugin_init() {
   
   register_plugin(PLUGIN, VERSION, AUTHOR);
   
   for(new i = 0 ; i < MAX_GROUPS ; i++)
      g_groupFlagsValue[i] = read_flags(g_groupFlags[i]);
   
   register_clcmd("admin", "cmdWho", -1, "");
   register_clcmd("say /admin", "cmdWho", -1, "");
   register_clcmd("say /admins", "cmdWho", -1, "");
   register_concmd("say /adm", "cmdWho", -1, "");
   register_concmd("admin", "cmdWho", -1, "");
}


public cmdWho(id)
{
   static sPlayers[32], iNum, iPlayer;
   static sName[32], sBuffer[1024];
   
   static iLen;
   iLen = formatex(sBuffer, sizeof sBuffer - 1, "<body bgcolor=#000000><font color=#7b68ee><pre>");
   iLen += formatex(sBuffer[iLen], CharsMax(sBuffer) - iLen,"<body bgcolor=^"black^" bgProperties=fixed><center><font color=#FFFFFF><pre>");
   
   
   get_players(sPlayers, iNum, "ch");
   
   for(new i = 0; i < MAX_GROUPS ; i++)
   {   
      iLen += formatex(sBuffer[iLen], CharsMax(sBuffer) - iLen, "<center><h5><font color=^"orange^">---------------<B>%s</B>---------------^n</font></h5></center>", g_groupNames[i]);
     
      for(new x = 0; x < iNum ; x++)
      {   
         iPlayer = sPlayers[x];
         
         if(get_user_flags(iPlayer) == g_groupFlagsValue[i])
         {
            get_user_name(iPlayer, sName, sizeof sName - 1);
            iLen += formatex(sBuffer[iLen], CharsMax(sBuffer) - iLen, "<center>%s^n</center>", sName);
         }
      }
   }
   show_motd(id, sBuffer, "Dzial Administracyjny");
   return 0;
}

no i teraz po wpisaniu /admin, automatycznie pokazuje mi osoby z danymi flagami w odpowiednim dziale, online.

i jak tu mam zrobic zeby pokazywalo WSZYSTKICH adminow w odpowiednich grupach (z dopiskiem Offline) , a przy adminach Online, mialby sie pokazywac tekst "Online".

huh nabroilem troche u siebie w plugsie wiec proszę was o pomoc :)
Quote

  • +
  • -
mgr inż. Pavulon's Photo mgr inż. Pavulon 26.02.2010

Żeby dorwać tych adminów offline to musiałbyś wczytać sobie users.ini
Tu przykładowa funkcja z admin.sma:
loadSettings(szFilename[])
{
new File=fopen(szFilename,"r");

if (File)
{
new Text[512];
new Flags[32];
new Access[32]
new AuthData[44];
new Password[32];

while (!feof(File))
{
fgets(File,Text,sizeof(Text)-1);

trim(Text);

// comment
if (Text[0]==';')
{
continue;
}

Flags[0]=0;
Access[0]=0;
AuthData[0]=0;
Password[0]=0;

// not enough parameters
if (parse(Text,AuthData,sizeof(AuthData)-1,Password,sizeof(Password)-1,Access,sizeof(Access)-1,Flags,sizeof(Flags)-1) < 2)
{
continue;
}

admins_push(AuthData,Password,read_flags(Access),read_flags(Flags));

AdminCount++;
}

fclose(File);
}

if (AdminCount == 1)
{
server_print("[AMXX] %L", LANG_SERVER, "LOADED_ADMIN");
}
else
{
server_print("[AMXX] %L", LANG_SERVER, "LOADED_ADMINS", AdminCount);
}

return 1;
}


Wystarczy teraz wszystkich adminów zapisać w jakiejś tabeli, potem przejść pętlą po nich, sprawdzić który online i wyświetlić.
Tyle że w users.ini nie masz nick'a admina. Nie wiem co dokładnie chcesz osiągnąć z tymi adminami offline. Możesz również stworzyć jakiś inny plik w którym będą wypisani wszyscy admini z nick'ami itp
Quote

  • +
  • -
se7en's Photo se7en 26.02.2010

no i wlasnie tak tez kombinowalem, posiadam amxbans wiec kombinowalem z admin_amxbans.sma ale to nie teges, albo wyswietla podwojnie (tzn se7en OFffline i se7en Online jako 2 wpisy...) albo wyswietla tylko offline ale nie trybi to i z offline i z online :/

dalbys rade przerobic cus takiego ? :]
Quote

  • +
  • -
mgr inż. Pavulon's Photo mgr inż. Pavulon 26.02.2010

Adminów masz na IP/nick/steamid ?
Quote

  • +
  • -
se7en's Photo se7en 26.02.2010

steam id w amxbans jednak chce by sie wyswietlalo po Nicku :)
Edited by se7en, 26.02.2010 14:15.
Quote

  • +
  • -
Mochi's Photo Mochi 28.02.2010

Ta, coś takiego zrobiłem.

"addons/amxmodx/configs/admins.ini ładujesz tu adminów "SID" "NICK" "FLAGI DO DANEJ GRUPY"
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Zarzad Adminow"
#define VERSION "1.0"
#define AUTHOR "se7en"

#define CharsMax(%1) sizeof %1 - 1

#define MAX_GROUPS 7

new g_groupNames[MAX_GROUPS][] = {
	
	"Super HeadAdmin",
	"Vice HeadAdmin",
	"Super Admin",
	"Admin",
	"Slot",
	"VIP",
	"Znajomi"
}

new g_groupFlags[MAX_GROUPS][] = {
	
	"abcdefghijlmnoprstuw",  
	"abcdefghijlnoprstuw",  
	"abcdefghijkloprstu",     
	"bcdefghijklu",    
	"bz",   
	"qz",      
	"az"           
}
new MAX_ADMINS,sid[33][32],nick[33][32],online[33],flags[33][42]

public plugin_init() {
	
	register_plugin(PLUGIN, VERSION, AUTHOR);
	register_clcmd("admin", "cmdWho", -1, "");
	register_clcmd("say /admin", "cmdWho", -1, "");
	register_clcmd("say /admins", "cmdWho", -1, "");
	register_concmd("say /adm", "cmdWho", -1, "");
	register_concmd("admin", "cmdWho", -1, "");
	load_admins()
}
public load_admins()
{
	new file[65],steam[32],name[32],flagi[42]
	format(file,64,"addons/amxmodx/configs/admins.ini")
	new line=0,  text[128],chars 
	do{ 
		line = read_file(file,line,text,127,chars) 
		parse(text,127,steam,31,name,31,flagi,41)
		sid[MAX_ADMINS]=steam
		nick[MAX_ADMINS]=name
		online[MAX_ADMINS]=is_online(steam)
		flags[MAX_ADMINS]=flagi
		MAX_ADMINS++
	} 
	while(line!=0)  
		
}
public client_connect(id) 
{
	if(is_user_admin(id))
	{
		new steam[32]
		get_user_authid(id,steam,31)
		for(new i=0;i<MAX_ADMINS;i++)
		{
			if(equal(steam,sid[i])) online[i]=1
		}
	}
}
public cmdWho(id)
{
	static sBuffer[1024];
	
	static iLen;
	iLen = formatex(sBuffer, sizeof sBuffer - 1, "<body bgcolor=#000000><font color=#7b68ee><pre>");
	iLen += formatex(sBuffer[iLen], CharsMax(sBuffer) - iLen,"<body bgcolor=^"black^" bgProperties=fixed><center><font color=#FFFFFF><pre>");
	
	
	//get_players(sPlayers, iNum, "ch");
	for(new i = 0; i < MAX_GROUPS ; i++)
	{   
		iLen += formatex(sBuffer[iLen], CharsMax(sBuffer) - iLen, "<center><h5><font color=^"orange^">---------------<B>%s</B>---------------^n</font></h5></center>", g_groupNames[i]);
		
		for(new x = 0; x < MAX_ADMINS ; x++)
		{  	
			if(equal(flags[x],g_groupFlags[i]))
			{
				iLen += formatex(sBuffer[iLen], CharsMax(sBuffer) - iLen, "<center>%s - %s ^n</center>", nick[x],(online[x] == 1) ? "ONLINE":"OFFLINE");
			}
		}
	}
	show_motd(id, sBuffer, "Dzial Administracyjny");
	return 0;
}
stock is_online(steam[])
{
	new gracze =get_playersnum()
	new authid[32]
	for(new i=1;i<gracze;i++)
	{
		get_user_authid(i,authid,31)
		if(equal(authid,steam)) return 1
	}
	return 0
}

Edited by Mochi, 28.02.2010 11:48.
Quote

  • +
  • -
Weed.'s Photo Weed. 02.03.2010

jesli mogl bym uzyc tego pluga na swoim serwie to prosil bym o edycje. zeby adminow nie czytalo z SId tylko z nicku poniewaz mam adminow na nick.
Quote
Locked