AdminMod.de
https://www.adminmod.de/

HLTV Announcer v0.9
https://www.adminmod.de/viewtopic.php?t=2824
Seite 1 von 1

Autor:  [WING] Black Knight [ 03.05.2002, 23:22 ]
Betreff des Beitrags:  HLTV Announcer v0.9

Hallo alle miteinander.

Habe mich mal an ein eigenes umfangreicheres Skript gemacht. Leider nicht ganz bugfrei, aber vielleicht hat ja jemand eine Idee. Zunächst den Code:
Code:
/* Dieses Plugin kündigt einen HLTV-Server beim Connect
und auf Befehl an. Plugin von [WING]Black Knight 03.05.2002 */

#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>

new STRING_VERSION[MAX_DATA_LENGTH] = "0.9";

new hltvip[MAX_TEXT_LENGTH]="none";
new hltvname[MAX_TEXT_LENGTH]="none";

public admin_hltv() {
	if(!streq(hltvip,"none")) {
		new ausgabe[MAX_TEXT_LENGTH];
		snprintf(ausgabe, MAX_TEXT_LENGTH, "Der HLTV-Server %s^nist online auf:^n%s",hltvname,hltvip);
		typesay(ausgabe,10,68,153,125);
	} else {
		typesay("Kein HLTV-Server online!",3,181,40,44);
	}
	return PLUGIN_CONTINUE;
}

public plugin_connect(HLUserName, HLIP, UserIndex){
	new WONID;
	new strName[MAX_NAME_LENGTH];
	convert_string(HLUserName, strName, MAX_NAME_LENGTH);
	get_userWONID(strName, WONID);
	if (WONID==1448){
		strcpy(hltvname,strName,MAX_NAME_LENGTH);
		convert_string(HLIP, hltvip, MAX_TEXT_LENGTH);
		set_vaultdata("hltv_ip",hltvip);
		set_vaultdata("hltv_name",hltvname);
		set_timer("admin_hltv", 60, 0);		
	}
	return PLUGIN_CONTINUE;
}

public plugin_disconnect(HLUserName, UserIndex){
	new WONID;
	new strName[MAX_NAME_LENGTH];
	convert_string(HLUserName, strName, MAX_NAME_LENGTH);
	get_userWONID(strName, WONID);
	if (WONID==1448){
		typesay("Der HLTV ist jetzt offline",3,181,40,44);
		strcpy(hltvip,"none",MAX_TEXT_LENGTH);
		strcpy(hltvname,"none",MAX_NAME_LENGTH);
		set_vaultdata("hltv_ip",hltvip);
	}
	return PLUGIN_CONTINUE;
}

public nachmapchange(){
	new WONID;
	new Team;
	new i = 0;
	new SessionID;
	new Target[MAX_NAME_LENGTH];
	new maxplayers = maxplayercount();
	for(i=1; i<=maxplayers; i++) {
		if(playerinfo(i,Target,MAX_NAME_LENGTH,SessionID,WONID,Team)==1) {
			if (WONID==1448){
				strcpy(hltvname,Target,MAX_NAME_LENGTH);
				admin_hltv();
				return PLUGIN_CONTINUE;
			}
		}
	}
	set_vaultdata("hltv_ip","none");
	strcpy(hltvip,"none",MAX_TEXT_LENGTH);
	typesay("Kein HLTV-Server online!",3,181,40,44);
	return PLUGIN_CONTINUE;
}

public plugin_init() {
	plugin_registerinfo("HLTV Announcer plugin","Kuendigt HLTV an.",STRING_VERSION);
	plugin_registercmd("admin_hltv","admin_hltv",ACCESS_USERLIST,"admin_hltv : Zeigt an, wo der HLTV laeuft.");
	get_vaultdata("hltv_ip",hltvip,MAX_TEXT_LENGTH);
	if(!streq(hltvip,"none")) {
		get_vaultdata("hltv_name",hltvname,MAX_NAME_LENGTH);
		set_timer("nachmapchange", 60, 0);
	}
	return PLUGIN_CONTINUE;
}
Das Plugin erkennt einen HLTV beim Connecten und kündigt ihn eine Minute später mit IP und Port an. Die Informationen merkt er sich über zwei vault.ini Einträge auch über den Mapwechsel hinweg (War leider notwendig, da ich offensichtlich nur beim Connect an die IP herankomme. Wenn jemand eine andere Möglichkeit findet, bitte Bescheid sagen. Das würde den Code ungemein vereinfachen.). Soweit klappt das wunderbar.

Problem:
Wenn der HLTV zum ersten Mal auf den Server geht wird er von der plugin_connect Funktion nicht erkannt. Führe ich dann ein retry in der HLTV-Console durch, geht es. Das macht mich noch irre...

Ach ja, ich würde ja zu gern die die Plätze und die Verzögerung mit ausgeben lassen. Die Daten sind dem Gameserver (status) zwar bekannt, ich komme aber von AdminMod nicht an diese heran. Vielleicht klappt es ja bei einer zukünftigen AM Version. BTW, ein get_userIP wäre nicht schlecht. :wink:

Autor:  [WING] Black Knight [ 11.08.2002, 20:10 ]
Betreff des Beitrags: 

Digging in the dirt...

Und schon hab ich den alten Thread wieder gefunden. ;)

OK, die 0.9 Version war ziemlich verbugt. Ich habe jetzt eine bessere Funktion gebastelt, die mir zu meinem eigenen Erstaunen weder die IP vorenthält noch den Server zum abstürzen bringt.
Außerdem sollte diese Version den HLTV auch zuverlässig im LAN erkennen.
Nachteil derzeit ist die Verwendung von LogD, aber es geht nicht anders. Bei der Verwendung eines Timers schmierte mir der Server reprodzierbar ab.

Der HLTV wird angekündigt, sobald er einen Spectatorslot belegt und nach jedem Mapwechsel. Außerdem wird auch das Disconnecten gemeldet.
Als weitere Infos werden außerdem die Slots (+Belegung) sowie der Delay ausgegeben.

Die aktuellen HLTV-Daten lassen sich jederzeit durch Eingabe von admin_hltv wieder anzeigen.
Code:
/* Dieses Plugin kündigt einen HLTV-Server beim Connect
und auf Befehl an. Plugin von [WING]Black Knight 11.08.2002 */

#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>
#define ACCESS_CONSOLE 131072
#define IP_LENGTH 22
new STRING_VERSION[MAX_DATA_LENGTH] = "1.0";

new hltvip[MAX_TEXT_LENGTH]="none";
new hltvname[MAX_TEXT_LENGTH]="none";
new hltvspecs[MAX_TEXT_LENGTH]="0";
new hltvslots[MAX_TEXT_LENGTH]="0";
new hltvdelay[MAX_TEXT_LENGTH]="0";
new hltvips[MAX_PLAYERS][IP_LENGTH];
new hltvid=0;

public admin_hltv() {
	if(!streq(hltvip,"none")) {
		new ausgabe[MAX_TEXT_LENGTH];
		snprintf(ausgabe, MAX_TEXT_LENGTH, "%s online:^n%s^nSlots %s/%s, Delay %s s",hltvname,hltvip,hltvspecs,hltvslots,hltvdelay);
		typesay(ausgabe,10,68,153,125);
	} else {
		typesay("Kein HLTV-Server online!",3,181,40,44);
	}
	return PLUGIN_CONTINUE;
}

public plugin_connect(HLUserName, HLIP ,UserIndex) {
	new strHLIP[MAX_TEXT_LENGTH];
	
	convert_string(HLIP, strHLIP, MAX_TEXT_LENGTH);
	strcpy(hltvips[UserIndex],strHLIP,IP_LENGTH);

	return PLUGIN_CONTINUE;
}

public hltv_entered(HLCommand, HLData){
	new strUserIndex[MAX_DATA_LENGTH];
	new UserIndex;
	new strName[MAX_NAME_LENGTH];
	new hltvspecstest[MAX_TEXT_LENGTH]="";

	convert_string(HLData, strUserIndex, MAX_TEXT_LENGTH);
	UserIndex=strtonum(strUserIndex);
	playerinfo(UserIndex,strName,MAX_NAME_LENGTH);
	get_userinfo(strName,"hltv_specs", hltvspecstest, MAX_TEXT_LENGTH);

	if (strlen(hltvspecstest)!=0){
		hltvid=UserIndex;
		strcpy(hltvname,strName,MAX_NAME_LENGTH);
		if(streq(hltvip,"none")){
			strcpy(hltvip, hltvips[UserIndex],MAX_TEXT_LENGTH);
		}
		set_vaultdata("hltv_ip",hltvip);
		set_vaultdata("hltv_name",hltvname);	
		get_userinfo(hltvname, "hltv_specs", hltvspecs, MAX_TEXT_LENGTH);
		get_userinfo(hltvname, "hltv_slots", hltvslots, MAX_TEXT_LENGTH);
		get_userinfo(hltvname, "hltv_delay", hltvdelay, MAX_TEXT_LENGTH);
		admin_hltv();
	}
	return PLUGIN_CONTINUE;
}

public plugin_disconnect(HLUserName, UserIndex){
	if (hltvid==UserIndex){
		hltvid=0;
		typesay("Der HLTV ist jetzt offline!",3,181,40,44);
		strcpy(hltvip,"none",MAX_TEXT_LENGTH);
		strcpy(hltvname,"none",MAX_NAME_LENGTH);
		set_vaultdata("hltv_ip",hltvip);
	}
	strcpy(hltvips[UserIndex]," ",IP_LENGTH);
	return PLUGIN_CONTINUE;
}

public plugin_init() {
	plugin_registerinfo("HLTV Announcer plugin","Kuendigt HLTV an.",STRING_VERSION);
	plugin_registercmd("admin_hltv","admin_hltv",ACCESS_ALL,"admin_hltv : Zeigt an, wo der HLTV laeuft.");
	plugin_registercmd("hltv_entered","hltv_entered",ACCESS_CONSOLE,"");

	exec("logd_reg 51 admin_command hltv_entered");
	get_vaultdata("hltv_ip",hltvip,MAX_TEXT_LENGTH);
	set_vaultdata("hltv_ip","none");

	return PLUGIN_CONTINUE;
}
Die im Attachment beigelegten AMX-Dateien sind für die AM-Beta 2.50.42!!

Seite 1 von 1 Alle Zeiten sind UTC+01:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/