Hallo Leute!
In dieser Beta-Version gibt es den Befehl menu(...).
Jetzt wollte ich das doch mal ausprobieren und habe mal ein Menü entwickelt.
Es handelt sich um ein Retribution-Menü.
Die Befehle werden in einem Array gespeichert. Zur Zeit sind:
new MenuCommand[MENUID][]={"ban","bury","kick","llama","slap","slay","unbury","unllama"};
vorhanden.
Die menu(...)-Funktion in dieser Beta-Version aktiviert man, in dem man amv_enable_beta "menu1" in seine adminmod.cfg schreibt. Bzw. (listen)server.cfg
Das Plugin reagiert auf die chateingabe "menu" und zeigt die Commando-Menüauswahl. Danach wählt man den Spieler aus, auf den man den Command anwenden möchte.
Wer also die Beta 42 sein eigen nennt, kann es ja mal ausprobieren.
Besonders interessiert mich, ob es zu Problemen kommt, wenn 2 Admins gleichzeitig das Menü aufrufen.
Gruß,
Sir Drink a lot
------Hier mal der Code----
Code:
/*Adminmod Menü, (c) Sir Drink a lot*/
/*v1.0 :Retribution only*/
#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>
new String_Version[]="14.09.02";
/*Hier Anzahl der Befehle eintragen -- maximale Zahl = 9*/
#define MENUID 8
/*Hier Befehle eintragen-- max. 9 Stück...0 ist Abbruch -- bitte alles kleinschreiben*/
new MenuCommand[MENUID][]={"ban","bury","kick","llama","slap","slay","unbury","unllama"};
/*Arrays zur Auswertung, anhand des UserIndex des Admins werden hoffentlich Fehlauswahlen verhindert*/
new MenuID[MAX_PLAYERS];
new SelectedPlayerLoop[MAX_PLAYERS]={1,1,...};
new SelectedMenuCommand[MAX_PLAYERS]={0,0,...};
new SelectedPlayer[MAX_PLAYERS];
/*Menu 1: MenüCommandos Slay,Slap,Bury etc.*/
public admin_menu(UserIndex,User[]){
new Text[512];
new Command[MAX_TEXT_LENGTH];
new i;
new a=1;
new keys=0;
snprintf(Text,MAX_TEXT_LENGTH,"Commands:^n");
for(i=0;i<MENUID;i++){
snprintf(Command,MAX_TEXT_LENGTH,"^n%i. %s",i+1,MenuCommand[i]);
strcat(Text,Command,MAX_TEXT_LENGTH);
a+=a;
keys=a-1;
}
strcat(Text,"^n^n0. Cancel",MAX_TEXT_LENGTH);
keys+=512;
menu(User,Text,keys);
MenuID[UserIndex]=1;
return 0;
}
/*Menu 2: Spielerauswahl*/
public playerselection(User[],UserIndex,Command[]){
new Text[512];
new Name[MAX_NAME_LENGTH];
new PlayerOutput[MAX_TEXT_LENGTH];
new player=playercount();
new i;
new keys=0;
new l=0;
new a=1;
snprintf(Text,MAX_TEXT_LENGTH,"%s:^n",Command);
for(i=SelectedPlayerLoop[UserIndex];i<=player;i++){
l++;
playerinfo(i,Name,MAX_NAME_LENGTH);
snprintf(PlayerOutput,MAX_TEXT_LENGTH,"^n%i. %s",l,Name);
strcat(Text,PlayerOutput,MAX_TEXT_LENGTH);
a+=a;
keys=a-1;
if(l==5 && player>=SelectedPlayerLoop[UserIndex]+5){
strcat(Text,"^n^n9. Next",MAX_TEXT_LENGTH);
keys+=256;
break;
}
}
strcat(Text,"^n^n0. Cancel",MAX_TEXT_LENGTH);
keys+=512;
menu(User,Text,keys);
MenuID[UserIndex]=2;
return 0;
}
/*Auswertung der Menüauswahl*/
public menuselect(HLCommand,HLData,HLUserName,UserIndex){
new Data[MAX_DATA_LENGTH];
new User[MAX_NAME_LENGTH];
convert_string(HLData,Data,MAX_DATA_LENGTH);
convert_string(HLUserName,User,MAX_NAME_LENGTH);
if(MenuID[UserIndex]==1){
SelectedMenuCommand[UserIndex]=strtonum(Data);
if(SelectedMenuCommand[UserIndex]==10){
SelectedMenuCommand[UserIndex]=0;
MenuID[UserIndex]=0;
SelectedPlayerLoop[UserIndex]=1;
SelectedPlayer[UserIndex]=0;
}else{
playerselection(User,UserIndex,MenuCommand[SelectedMenuCommand[UserIndex]-1]);
}
}else if(MenuID[UserIndex]==2){
SelectedPlayer[UserIndex]=strtonum(Data);
if(SelectedPlayer[UserIndex]==9){
SelectedPlayerLoop[UserIndex]=SelectedPlayerLoop[UserIndex]+5;
playerselection(User,UserIndex,MenuCommand[SelectedMenuCommand[UserIndex]-1]);
}else if(SelectedPlayer[UserIndex]==10){
SelectedMenuCommand[UserIndex]=0;
MenuID[UserIndex]=0;
SelectedPlayerLoop[UserIndex]=1;
SelectedPlayer[UserIndex]=0;
}else{
if(SelectedPlayerLoop[UserIndex]>5){
SelectedPlayer[UserIndex]=SelectedPlayerLoop[UserIndex]+SelectedPlayer[UserIndex]-1;
}
treatment(User,UserIndex);
}
}
return PLUGIN_CONTINUE;
}
/*Wenn Spieler ausgewählt, entsprechend der MenüCommandos behandeln*/
public treatment(User[],UserIndex){
new Player[MAX_NAME_LENGTH];
new Command[MAX_DATA_LENGTH];
if(playerinfo(SelectedPlayer[UserIndex],Player,MAX_NAME_LENGTH)){
snprintf(Command, MAX_DATA_LENGTH, "admin_%s", MenuCommand[SelectedMenuCommand[UserIndex]-1]);
plugin_exec(Command,Player);
}
SelectedMenuCommand[UserIndex]=0;
MenuID[UserIndex]=0;
SelectedPlayerLoop[UserIndex]=1;
SelectedPlayer[UserIndex]=0;
return PLUGIN_HANDLED;
}
public SayCommand(HLCommand,HLData,HLUserName,UserIndex) {
new Data[MAX_DATA_LENGTH];
new UserName[MAX_NAME_LENGTH];
convert_string(HLData,Data,MAX_DATA_LENGTH);
convert_string(HLUserName,UserName,MAX_NAME_LENGTH);
strstripquotes(Data);
if (strcmp(Data,"menu")==0) {
admin_menu(UserIndex,UserName);
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public plugin_init(){
plugin_registerinfo("Adminmod-Menu","Beispiel eines Adminmod Menues",String_Version);
plugin_registercmd("admin_menu", "admin_menu", ACCESS_BAN, "admin_menu");
plugin_registercmd("menuselect","menuselect",ACCESS_ALL);
plugin_registercmd("say","SayCommand",ACCESS_ALL);
return PLUGIN_CONTINUE;
}
_________________
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