Ein neues Thema erstellen  Auf das Thema antworten  [ 33 Beiträge ]  Gehe zu Seite 1 2 Nächste
Autor Nachricht
 Betreff des Beitrags: Default_access switch v1.0
BeitragVerfasst: 05.06.2002, 20:51 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
Hi,

ich schon wieder. Genau der, der die ganzen nutzlosen Plugins produziert. Heute darf ich Euch wieder mit einem Plugin dieser Sorte beehren.
Das Plugin ist dafür da den Server attraktiver zu machen, solange kein Admin online ist.
Wir hatten früher den default_access auf 1 gehabt. Damit war jedermann auf dem Server berechtigt Mapvotes und Kickvotes zu starten. Wenn wir dann online waren, war das ziemlich nervig. Daher wurde das abgestellt (default_access 1). Nun sind wir aber nicht immer online und man hätte doch gerne, dass sich die Stammspieler auch wehren können, wenn kein Admin da ist.
Genau hier setze ich an. Sobald ein Admin connected wird default_access auf 0 gesetzt und sobald der letzte verschwindet wieder zurück auf 1.
Also, damit Ihr Euch ein genaueres Bild machen könnt hier der Code:
Code:
/* Default access switch.
Changes default_access to 0, if admin is entering the server and back to 1 if the last admin disconnects. 
v1.0 by [WING]Black Knight, 5.6.2002 */

#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>
#define ACCESS_CONSOLE 131072

new STRING_VERSION[MAX_DATA_LENGTH] = "v1.0";

new admins=0;
new Message0[MAX_TEXT_LENGTH]="Admin online! admin_vote_kick, admin_vote_map and say rockthevote disabled";
new Message1[MAX_TEXT_LENGTH]="Admin offline! admin_vote_kick, admin_vote_map and say rockthevote enabled";

public default_entered(HLCommand, HLData){
	new WONID;
	new strUserIndex[MAX_TEXT_LENGTH];
	new UserIndex;
	new strName[MAX_NAME_LENGTH];
	new UserID;
	new Team;
	new Dead;
	new wert[MAX_TEXT_LENGTH];

	convert_string(HLData, strUserIndex, MAX_TEXT_LENGTH);
	UserIndex=strtonum(strUserIndex);
	playerinfo(UserIndex, strName, MAX_NAME_LENGTH, UserID, WONID, Team, Dead);
	if(access(ACCESS_RESERVE_SPOT,strName)) {
		if(admins==0){
			exec("default_access 0");
			say(Message0);
		}
		admins++;
	}
	else {
		getstrvar("default_access",wert, MAX_TEXT_LENGTH);
		if(streq(wert,"0")){
			message(strName,Message0);
		}
		else{
			message(strName,Message1);
		}
	}
	return PLUGIN_CONTINUE;
}

public default_disconnect(HLCommand, HLData){
	new WONID;
	new strUserIndex[MAX_TEXT_LENGTH];
	new UserIndex;
	new strName[MAX_NAME_LENGTH];
	new UserID;
	new Team;
	new Dead;

	convert_string(HLData, strUserIndex, MAX_TEXT_LENGTH);
	UserIndex=strtonum(strUserIndex);
	playerinfo(UserIndex, strName, MAX_NAME_LENGTH, UserID, WONID, Team, Dead);
	if(access(ACCESS_RESERVE_SPOT,strName)) {
		if(admins==1){
			exec("default_access 1");
			say(Message1);
		}
		admins--;
	}
	return PLUGIN_CONTINUE;
}

public plugin_init() {
	plugin_registerinfo("Default Access Switch","default_access switch while away",STRING_VERSION);
	plugin_registercmd("default_entered","default_entered",ACCESS_CONSOLE,"");
	plugin_registercmd("default_disconnect","default_disconnect",ACCESS_CONSOLE,"");

	exec("logd_reg 52 admin_command default_disconnect");
	exec("logd_reg 51 admin_command default_entered");

	return PLUGIN_CONTINUE;
}
Seht es mir nach, wenn das Plugin nicht superstrukturiert ist. Ich bin ja noch nicht so bewandert.

Als Admin gilt, wer das Recht für einen reservierten Slot hat. Ich glaube, dass ich das wichtigste bedacht habe.
Wer noch Fragen hat oder Bugs findet, bitte melden.

BTW, ich habe LogD verwendet, da mir die AdminMod Funktionen zu unsicher sind. Die werden nicht immer ausgeführt. Ob das jetzt ein allgemeines oder nur ein spezielles Problem ist, weiß ich nicht. So geht's jedenfalls.

_________________
Der schwarze Ritter triumphiert immer...
WING-Clan


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 06.06.2002, 10:24 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
Mir ist heute morgen noch dazu eingefallen, dass diese Vorgehensweise dazu wunderbar dient, Admins zu announcen !

Dieser Wunsch wurde ja schon oft in Plugin Request geäussert. Jetzt kann man ja schnell noch ein :
[SNIP]
Code:
new Msg[MAX_TEXT_LENGTH];
snprintf(Msg,MAX_TEXT_LENGTH,"Der Admin %s hat gerade das Spiel betreten",strName);
typesay(Msg,12,255,255,255);
.....
[/SNIP]
in den if(access....) einbauen und vielleicht noch eine schönen Sound

[SNIP]
Code:
/* eigene Funktion, um bei allen Spielern einen Sound abzuspielen*/
public playsoundall(sound[])
{
	new maxplayers = maxplayercount();
	new Name[MAX_NAME_LENGTH];
	new i;

	for(i=1; i<=maxplayers; i++)
	{
		if(playerinfo(i, Name, MAX_NAME_LENGTH) == 1)
		{
			playsound(Name, sound);
		}
	}
}

/*und diese kleine Befehlszeile noch nach dem typesay von oben eintragen:*/

....
playsoundall(misc/hibabe.wav);
[/SNIP]
Das selbe dann jetzt nochmal beim default_dissconnect und fertig :-)

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags: Re: Default_access switch v1.0
BeitragVerfasst: 06.06.2002, 13:26 
HLDS Team
Benutzeravatar

Registriert: 26.11.2001, 01:00
Beiträge: 676
nur schnell mal ne newbie frage:
"admins++" heißt doch +1 oder? warum schreibt man dann nicht +1?
Was gibt es denn noch für Befehle?
== entspricht gleich
>= größer gleich
> größer
<= kleiner gleich
< kleiner
+ - / * = weis ja jeder,
&& = und ?
|| = oder ?
was gibt es noch für wichtige?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 06.06.2002, 15:31 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
Hmm,

ich würde den Code nicht für das Ankündigen von Admins verwenden. Die werden nämlich sonst nach jedem Mapwechsel nochmal angekündigt.

_________________
Der schwarze Ritter triumphiert immer...
WING-Clan


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 06.06.2002, 15:55 

Registriert: 11.04.2002, 04:36
Beiträge: 188
Wohnort: hannover
ist ja schon toll das ganze.
aber kann das mal einer von euch als ein ganzes plugin sma erstellen?
ich habe nämlich überhaupt kein plan von der ganzen programiererei.
bitte,bitte :cry:


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 06.06.2002, 16:20 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
!= nicht gleich

aber ist doch ok. wenn sie auch nach mapchange announced werden. Dann weiss jeder, was Sache ist :-)

Können wir nachher ja mal in GV bequatschen.

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 07.06.2002, 23:20 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
Nochmal zurück zu meinem Plugin.

Leider hat es nicht besonders zuverlässig funktioniert. Ich musste daher auf eine sicherere Methode ausweichen. Nimmt mehr Rechenzeit in Anspruch, aber läuft bisher zuverlässig.
Code:
/* Default access switch.
Changes default_access to 0, if admin is entering the server and back to 1 if the last admin disconnects. 
v1.1 by [WING]Black Knight, 6.6.2002 */

#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>
#define ACCESS_CONSOLE 131072

new STRING_VERSION[MAX_DATA_LENGTH] = "v1.1";

public default_entered(HLCommand, HLData){
	new strName[MAX_NAME_LENGTH];
	new UserIndex;
	new strUserIndex[MAX_TEXT_LENGTH];

	convert_string(HLData, strUserIndex, MAX_TEXT_LENGTH);
	UserIndex=strtonum(strUserIndex);
	playerinfo(UserIndex, strName, MAX_NAME_LENGTH);

	pruef(strName);

	return PLUGIN_CONTINUE;
}

public pruef(strName[]){
	new maxplayers = maxplayercount();
	new admins=0;
	new Message0[MAX_TEXT_LENGTH]="Admin online! admin_vote_kick, admin_vote_map and say rockthevote disabled";
	new Message1[MAX_TEXT_LENGTH]="Admin offline! admin_vote_kick, admin_vote_map and say rockthevote enabled";
	new wert[MAX_TEXT_LENGTH];
	new i;

	for(i=1; i<=maxplayers; i++) {
		strinit(strName);
		if(playerinfo(i,strName,MAX_NAME_LENGTH)==1) {
			if(access(ACCESS_BAN,strName)!=0) {
				admins++;
			}
		}
	}
	getstrvar("default_access",wert, MAX_TEXT_LENGTH);
	if(admins==1){
		if(streq(wert,"1")){
			exec("default_access 0");
			say(Message0);
		}
		else{
			message(strName,Message0);
		}
	}
	else if(admins==0){
		if(streq(wert,"0")){
			exec("default_access 1");
			say(Message1);
		}
		else{
			message(strName,Message1);
		}
	}
	else{
		if(streq(wert,"0")){
			message(strName,Message0);
		}
		else{
			message(strName,Message1);
		}
	}
}

public plugin_init() {
	plugin_registerinfo("Default Access Switch","default_access switch while away",STRING_VERSION);
	plugin_registercmd("default_entered","default_entered",ACCESS_CONSOLE,"");

	exec("logd_reg 52 admin_command default_entered");
	exec("logd_reg 51 admin_command default_entered");

	return PLUGIN_CONTINUE;
}

_________________
Der schwarze Ritter triumphiert immer...
WING-Clan


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.06.2002, 02:03 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
wie gesagt, finde ich die 1000tnstel Sekunde an Rechenzeit mehr, nicht so schlimm... :lol:

Aber es laüft bisher ohne Pobs!

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.06.2002, 10:06 
AM.de Team
Benutzeravatar

Registriert: 22.10.2001, 01:00
Beiträge: 839
Vielleicht hat es nicht "zuverlaessig" funktioniert, weil Du es einfach falsch geschrieben hast. Wenn Du die Version verwendest, die Du hier gepostet hast, dann wundert mich nicht, wenn das nicht tut. Kuck Dir das noch mal in Ruhe an. Du setzt default_access genau an den falschen Stellen.

Zu der Behauptung, dass plugin_connect() und plugin_disconnect() nicht immer ausgefuehrt werden, haette ich gerne ein Log. Das kann man ja z.B. mit einem Testplugin seperat schreiben lassen.


Und zu guter letzt: +, -, *, /, &&, +=, usw. sind keine Befehle sondern Operatoren.

_________________
There are no stupid questions, only stupid people.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.06.2002, 10:34 
HLDS Team
Benutzeravatar

Registriert: 26.11.2001, 01:00
Beiträge: 676
ja, mein ich ja ;)


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.06.2002, 11:38 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
Hmmm, daRope bringt mich wieder ins grübeln.
Zitat:
BTW, ich habe LogD verwendet, da mir die AdminMod Funktionen zu unsicher sind. Die werden nicht immer ausgeführt.
Das bezieht sich eigentlich nur auf plugin_disconnect. plugin_connect funktioniert einwandfrei, ist aber für meine Anwendung ungeeignet. Ich werde mal sehen, dass ich die Tage eine Logfunktion für plugin_disconnect einbaue.

Irgendwie kann ich aber den Logikfehler in v1.0 nicht finden. Eine wichtige Sache habe ich dabei vergessen. default_access muss standardmäßig auf 1 gesetzt sein.
Code:
default_entered:
Überprüfe, ob Spieler reservierten Slot hat. {
  Wenn ja, überprüfe, ob die Anzahl der Admins derzeit Null ist. {
    Wenn ja, schalte die erweiterten Rechte ab (default_access 0), da jetzt Admin online.
    Gib es allgemein bekannt.
  }
  Erhöhe die Anzahl der Admins um 1
}
Hat er keinen reservierten Slot {
  Lese die Variable default_access aus
  Überprüfe, ob diese 0 ist {
    Informiere den Connectenden, dass die erweiterten Rechte abgeschaltet sind.
  }
  Ist default_access nicht 0 {
    Informiere den Connectenden, dass die erweiterten Rechte angeschaltet sind.
  }
}

default_disconnect:
Überprüfe, ob der das Spiel Verlassende einen reservierten Slot hat {
  Wenn ja, überprüfe, ob er der letzte Admin ist (admins==1) {
    Wenn ja, schalte die erweiterten Rechte an.
    Gib es öffentlich bekannt.
  }
  Erniedrige die Zahl der Admins um einen (also 0)
}
Jetzt finde ich irgendwie aber den Logikfehler nicht. Ein Problem könnte sein, dass nach dem Mapwechsel die Admins in zu kurzer Reihenfolge ins Spiel kommen, dass diese Routine nicht nachkommt. Andererseits hat das default_disconnect die If-Schleife bei Personen OHNE reservierten Slot durchlaufen. Das könnte darauf hindeuten, dass das playerinfo zu spät war und der Spieler nicht mehr vorhanden war. Aber eigentlich hatten Sir Drink a lot und ich das durchgetestet und keine Probleme feststellen können. Im Testlauf ging es einwandfrei. Nur in der echten Praxis läuft es nicht so, wie es soll.

_________________
Der schwarze Ritter triumphiert immer...
WING-Clan


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.06.2002, 13:03 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
hm...

ich habe mir gerade gedacht, wozu man eigentlich den Zähler braucht.

Man kann das getstrvar mit in die Schleife einbauen und man braucht den Zähler gar nicht.

Oder sehe ich das falsch.

Oder noch anders....wofür mit getstrvar default_access auslesen?

Einfach nur 0 setzen, wenn es ein Admin ist. Wenn der Admin wieder den Server verlässt, auf 1 setzen.

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.06.2002, 14:52 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
Und woher weißt Du, ob nicht noch andere Admins online sind?

_________________
Der schwarze Ritter triumphiert immer...
WING-Clan


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.06.2002, 15:52 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
wenn man doch eine Schleife über alle Spieler macht und einer den Access-Level hat, kann man admin=1 setzen und ein break; machen.

Dann fragt man admin ab. Bei 1 ist ein Admin da bei !1 kein Admin...

beim Disconnect macht man das selbe und bei !1 kann man ein Typesay an alle Spieler ausgeben.

Ich schicke es Dir nachher mal über ICQ zu.

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.06.2002, 16:50 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
Dann schau Dir mal v1.1 an. Aber genau diese Schleife wollte ich verhindern.

_________________
Der schwarze Ritter triumphiert immer...
WING-Clan


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.06.2002, 17:25 

Registriert: 11.04.2002, 04:36
Beiträge: 188
Wohnort: hannover
JA JA WOLLTE DA NICHT JEMAND MAL ALLES ZUSAMMEN BAUEN DAMIT SON LEIE UND NICHTSKAPIERER DAS PLUGIN EINFACH NUTZEN KANN? :D


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.06.2002, 17:46 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
Kleiner Bugfix gefunden von Sir Drink a lot, der das alles GAAAAANZ anders gemacht hätte :wink: :
Code:
/* Default access switch.
Changes default_access to 0, if admin is entering the server and back to 1 if the last admin disconnects. 
v1.1 by [WING]Black Knight, 6.6.2002 */

#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>
#define ACCESS_CONSOLE 131072

new STRING_VERSION[MAX_DATA_LENGTH] = "v1.1";

public default_entered(HLCommand, HLData){
	new strName[MAX_NAME_LENGTH];
	new UserIndex;
	new strUserIndex[MAX_TEXT_LENGTH];

	convert_string(HLData, strUserIndex, MAX_TEXT_LENGTH);
	UserIndex=strtonum(strUserIndex);
	playerinfo(UserIndex, strName, MAX_NAME_LENGTH);

	pruef(strName);

	return PLUGIN_CONTINUE;
}

public pruef(strName[]){
	new maxplayers = maxplayercount();
	new admins=0;
	new Message0[MAX_TEXT_LENGTH]="Admin online! admin_vote_kick, admin_vote_map and say rockthevote disabled";
	new Message1[MAX_TEXT_LENGTH]="Admin offline! admin_vote_kick, admin_vote_map and say rockthevote enabled";
	new wert[MAX_TEXT_LENGTH];
	new strName2[MAX_TEXT_LENGTH];
	new i;

	for(i=1; i<=maxplayers; i++) {
		strinit(strName2);
		if(playerinfo(i,strName,MAX_NAME_LENGTH)==1) {
			if(access(ACCESS_BAN,strName2)!=0) {
				admins++;
			}
		}
	}
	getstrvar("default_access",wert, MAX_TEXT_LENGTH);
	if(admins==1){
		if(streq(wert,"1")){
			exec("default_access 0");
			say(Message0);
		}
		else{
			message(strName,Message0);
		}
	}
	else if(admins==0){
		if(streq(wert,"0")){
			exec("default_access 1");
			say(Message1);
		}
		else{
			message(strName,Message1);
		}
	}
	else{
		if(streq(wert,"0")){
			message(strName,Message0);
		}
		else{
			message(strName,Message1);
		}
	}
}

public plugin_init() {
	plugin_registerinfo("Default Access Switch","default_access switch while away",STRING_VERSION);
	plugin_registercmd("default_entered","default_entered",ACCESS_CONSOLE,"");

	exec("logd_reg 52 admin_command default_entered");
	exec("logd_reg 51 admin_command default_entered");

	return PLUGIN_CONTINUE;
}

_________________
Der schwarze Ritter triumphiert immer...
WING-Clan


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.06.2002, 18:35 

Registriert: 11.04.2002, 04:36
Beiträge: 188
Wohnort: hannover
da is immer noch kein sound dabei


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.06.2002, 18:41 
AM.de Team
Benutzeravatar

Registriert: 22.10.2001, 01:00
Beiträge: 839
Zitat:
Ich werde mal sehen, dass ich die Tage eine Logfunktion für plugin_disconnect einbaue.
"Die Tage" is'n bisschen spaet.

Warum verwendest Du getstrvar() um eine numerische Variable auszulesen?

In Deiner Schleife wuerde ich auf (admins > 1) statt (admins == 1) testen.

_________________
There are no stupid questions, only stupid people.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.06.2002, 20:05 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
Zitat:
"Die Tage" is'n bisschen spaet.
OK, OK! Ich mach es ja gleich. Nur nicht hetzen... sonst muss ich schon wieder ein Bugfix nachschieben. :wink:
Zitat:
Warum verwendest Du getstrvar() um eine numerische Variable auszulesen?
Weil ich getvar() übersehen habe. :( Sorry, mach ich gleich in Ordnung.
Zitat:
In Deiner Schleife wuerde ich auf (admins > 1) statt (admins == 1) testen.
Kann man machen. Wäre vielleicht günstiger, falls bei HL etwas schief läuft. Mach ich. Außerdem hat SDal noch einen guten Vorschlag gemacht. Vielleicht gibt es nachher noch eine neue Version. Danke für die Hinweise.

_________________
Der schwarze Ritter triumphiert immer...
WING-Clan


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 33 Beiträge ]  Gehe zu Seite 1 2 Nächste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de
Original Design von "[ Half-Life Admin Mod © Alfred Reynolds 2000-2003 ] - [ site design by Jägermeister ]"