i have found a plugin for adminmod, which i really need in amxx, but i dont know how to configure it for amxx.
Code:
#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>
#include <plugin>
new STRING_VERSION[MAX_DATA_LENGTH] = "1.1";
new g_sMap[MAX_DATA_LENGTH]="";
/* Check whether vault.ini exists */
is_vaultfile_set(){
new vault[MAX_DATA_LENGTH];
getstrvar("admin_vault_file",vault,MAX_DATA_LENGTH);
if(streq(vault,"0") || strlen(vault)==0){
if(getvar("admin_debug")>0){
log("[BK_RES] No vault file defined.");
}
return 0;
}
return 1;
}
/* Define vault.ini */
define_vaultfile(){
new sPath[MAX_DATA_LENGTH];
getstrvar("amv_default_config_dir",sPath,MAX_DATA_LENGTH);
snprintf(sPath,MAX_DATA_LENGTH,"%s/vault.ini",sPath);
setstrvar("admin_vault_file",sPath);
reload();
if(getvar("admin_debug")>0){
log("[BK_RES] Defined vault.ini myself.");
}
}
/* Let's check, whether we should only refresh one map or all */
moremaps(sMapsFile[]){
if(strlen(g_sMap)!=0){
return 1;
}
else{
get_vaultdata("BK_RES_MAPS",sMapsFile,MAX_DATA_LENGTH);
/* This shouldn't happen and would spam the logs a bit, but better than an endless loop in the for-loop */
if(!fileexists(sMapsFile)){
log("[BK_RES] Defined mapsfile does not exist. Check admin_res_maps!");
return 0;
}
}
return filesize(sMapsFile,lines);
}
/* Just append the data of one file to another */
add_res_data(sMap[],sMap2[]){
new iLines;
new i;
new sLine[MAX_DATA_LENGTH];
if(fileexists(sMap)){
iLines=filesize(sMap,lines);
for(i=1;i<=iLines;i++){
readfile(sMap,sLine,i,MAX_DATA_LENGTH);
writefile(sMap2,sLine,-1);
}
return 1;
}
return 0;
}
/* Adding file to res-file, executed by external plugins */
public res_add(HLCommand,HLData,HLUserName,UserIndex){
new sMapsFile[MAX_DATA_LENGTH];
new sMap[MAX_DATA_LENGTH];
new sMapRes[MAX_DATA_LENGTH];
new sLine[MAX_DATA_LENGTH];
new iLines;
new i;
/* sLine should now include the new res file entry */
convert_string(HLData,sLine,MAX_DATA_LENGTH);
/* Now we check whether the file exists at all */
if(!fileexists(sLine)){
snprintf(sLine,MAX_TEXT_LENGTH,"[BK_RES] File %s does not exist on server.",sLine);
log(sLine);
return PLUGIN_HANDLED;
}
/* Let's check, whether we should only refresh one map or all */
iLines=moremaps(sMapsFile);
if(!iLines){
return PLUGIN_HANDLED;
}
/* Adding entry to res file */
for(i=1;i<=iLines;i++){
if(strlen(g_sMap)!=0){
strcpy(sMap,g_sMap,MAX_DATA_LENGTH);
}
else{
readfile(sMapsFile,sMap,i,MAX_DATA_LENGTH);
}
if(strlen(sMap)!=0){
snprintf(sMapRes,MAX_DATA_LENGTH,"maps/%s.res",sMap);
writefile(sMapRes,sLine,-1);
}
}
return PLUGIN_HANDLED;
}
/* This function is for adding map specific data and/or default data to the res file(s). */
public res_refresh(HLCommand,HLData,HLUserName,UserIndex){
new sMap[MAX_DATA_LENGTH];
new sMapDefault[MAX_DATA_LENGTH];
new sMapsFile[MAX_DATA_LENGTH];
new sMapRes[MAX_DATA_LENGTH];
new sPath[MAX_DATA_LENGTH];
new iLines;
new i;
/* Let's check, whether we should only refresh one map or all */
iLines=moremaps(sMapsFile);
/* exit, if there is something wrong */
if(!iLines){
return PLUGIN_HANDLED;
}
getstrvar("amv_default_config_dir",sPath,MAX_DATA_LENGTH);
snprintf(sMapDefault,MAX_DATA_LENGTH,"%s/res/default.res",sPath);
for(i=1;i<=iLines;i++){
if(strlen(g_sMap)!=0){
strcpy(sMap,g_sMap,MAX_DATA_LENGTH);
}
else{
readfile(sMapsFile,sMap,i,MAX_DATA_LENGTH);
}
if(strlen(sMap)!=0 && sMap[0]!='/' && sMap[0]!='#' && sMap[0]!=';'){
/* We like to add any map specific data to the res file */
snprintf(sMapRes,MAX_DATA_LENGTH,"maps/%s.res",sMap); //The res file
snprintf(sMap,MAX_DATA_LENGTH,"%s/res/%s.res",sPath,sMap); //The map specific res file
add_res_data(sMap,sMapRes);
/* Of course, we also want to add some default data for all maps, if it exists */
add_res_data(sMapDefault,sMapRes);
}
}
strinit(g_sMap);
log("[BK_RES] Res files created!");
return PLUGIN_HANDLED;
}
/* Starting the recreation of the res files for all maps or a specific map */
public admin_res_refresh(HLCommand,HLData,HLUserName,UserIndex){
new sMap[MAX_DATA_LENGTH];
new iLines,i;
new sMapsFile[MAX_DATA_LENGTH];
/* sMap should now include the map to be renewed or nothing */
convert_string(HLData,sMap,MAX_DATA_LENGTH);
/* Let's check, whether we should only refresh one map or all */
iLines=moremaps(sMapsFile);
/* exit, if there is something wrong */
if(!iLines){
return PLUGIN_HANDLED;
}
/* Delete those files we want to recreate at first*/
for(i=1;i<=iLines;i++){
if(strlen(sMap)!=0){
strcpy(g_sMap,sMap,MAX_DATA_LENGTH);
}
else{
readfile(sMapsFile,sMap,i,MAX_DATA_LENGTH);
}
if(strlen(sMap)!=0 && sMap[0]!='/' && sMap[0]!='#' && sMap[0]!=';'){
snprintf(sMap,MAX_DATA_LENGTH,"maps/%s.res",sMap);
if(fileexists(sMap)){
deletefile(sMap);
}
}
strinit(sMap);
}
/* Ok let's see, which plugin has something to tell ;-) */
plugin_exec("res_refresh","");
return PLUGIN_HANDLED;
}
/* Defining the file with the maps for which res files should be created */
public admin_res_maps(HLCommand,HLData,HLUserName,UserIndex){
new sMapsFile[MAX_DATA_LENGTH];
new sText[MAX_TEXT_LENGTH];
/* Here we have most probably the maps file */
convert_string(HLData,sMapsFile,MAX_DATA_LENGTH);
/* At first we check, if a map is specified. If it isn't, we would return the current value */
if(!strlen(sMapsFile)){
get_vaultdata("BK_RES_MAPS",sMapsFile,MAX_DATA_LENGTH);
snprintf(sText,MAX_TEXT_LENGTH,"Maps file is: %s",sMapsFile);
selfmessage(sText);
return PLUGIN_HANDLED;
}
/* Secondly, we check whether the specified file exists. If it does exist, we would change the the setting and return the new value */
if(fileexists(sMapsFile)){
set_vaultdata("BK_RES_MAPS",sMapsFile);
snprintf(sText,MAX_TEXT_LENGTH,"Maps file is now: %s",sMapsFile);
selfmessage(sText);
return PLUGIN_HANDLED;
}
/* If everything fails, the file is non-existant, so we inform the user that he/she made a mistake */
snprintf(sText,MAX_TEXT_LENGTH,"ERROR: Specified maps file %s does not exist!",sMapsFile);
selfmessage(sText);
return PLUGIN_HANDLED;
}
/* Init the plugin */
public plugin_init() {
new sMaps[MAX_DATA_LENGTH];
/* Plugin Registrierung */
plugin_registerinfo("BK Res","Managing Res-Files",STRING_VERSION);
plugin_registercmd("res_refresh","res_refresh",ACCESS_CONFIG,"");
plugin_registercmd("res_add","res_add",ACCESS_CONFIG,"");
plugin_registercmd("admin_res_refresh","admin_res_refresh",ACCESS_CONFIG,"admin_res_refresh [mapname]: Regenerates res-files of all or a certain map.");
plugin_registercmd("admin_res_maps","admin_res_maps",ACCESS_CONFIG,"admin_res_maps <maplist>: Defines the file including the maps for which res-files should be created.");
/* vault.ini check und ggf. definieren */
if(!is_vaultfile_set()){
define_vaultfile();
}
/* Install plugin with initial values */
if(!get_vaultdata("BK_RES_MAPS",sMaps,MAX_DATA_LENGTH)){
getstrvar("mapcyclefile",sMaps,MAX_DATA_LENGTH);
set_vaultdata("BK_RES_MAPS",sMaps);
set_vaultnumdata("BK_RES_NO",0);
if(getvar("admin_debug")>0){
log("[BK_RES] Installed! Using mapcycle for res file creation.");
}
}
return PLUGIN_CONTINUE;
}
/EDIT: oh, you have to copy and paste the links, cause the provider allows no extern linking..