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!!
_________________
Der schwarze Ritter triumphiert immer...
WING-Clan