Seçilen haritayı silme olayını yaptım fakat diğer dediğinizi daha bilgili birisi yaparsa daha iyi olur.
Kod:
#include <amxmodx>
#define CONFIG_FILE "addons/amxmodx/configs/istekmaps.ini"
#define TAG "^3[^4TAG^3]" // Renkli mesaj tagı
public plugin_init() {
register_plugin("Istek Harita", "1.0", "Red*");
register_clcmd("say /istekmap", "Cmd_IstekMap");
register_clcmd("say_team /istekmap", "Cmd_IstekMap");
register_clcmd("map_girin", "Cmd_IstekMapInput");
register_clcmd("say /istekharitalar", "Cmd_ListIstekHaritalar");
register_clcmd("say_team /istekharitalar", "Cmd_ListIstekHaritalar");
}
public Cmd_IstekMap(id) {
client_print_color(id, 0, "%s ^1Lutfen istediginiz harita adini yazin (^4mesaj kutusu acildi^1).", TAG);
client_cmd(id, "messagemode map_girin");
return PLUGIN_HANDLED;
}
public Cmd_IstekMapInput(id) {
new szMap[64];
read_args(szMap, charsmax(szMap));
remove_quotes(szMap);
if (!szMap[0]) {
client_print_color(id, 0, "%s ^1Harita adi girilmedi!", TAG);
return PLUGIN_HANDLED;
}
if (!File_ContainsMap(szMap)) {
new fp = fopen(CONFIG_FILE, "a");
if (fp) {
fprintf(fp, "%s^n", szMap);
fclose(fp);
}
client_print_color(id, 0, "%s ^1%s ^3haritasi kaydedildi!", TAG, szMap);
} else {
client_print_color(id, 0, "%s ^1%s ^3zaten listede var!", TAG, szMap);
}
return PLUGIN_HANDLED;
}
public Cmd_ListIstekHaritalar(id) {
if (!(get_user_flags(id) & ADMIN_RCON)) { // RCON yetkisi olmayanlar göremez
client_print_color(id, 0, "%s ^1Bu komutu kullanmak icin RCON yetkisine sahip olmalisiniz!", TAG);
return PLUGIN_HANDLED;
}
ShowIstekMapsMenu(id);
return PLUGIN_HANDLED;
}
public ShowIstekMapsMenu(id) {
new menu = menu_create("Istek Haritalar Listesi", "IstekMapsMenuHandler");
new szLine[64], fp = fopen(CONFIG_FILE, "r");
if (!fp) {
client_print_color(id, 0, "%s ^1Istek haritalar listesi bulunamadi!", TAG);
return;
}
new count = 0;
while (fgets(fp, szLine, charsmax(szLine))) {
trim(szLine);
if (szLine[0]) {
menu_additem(menu, szLine, szLine, 0);
count++;
}
}
fclose(fp);
if (count == 0) {
client_print_color(id, 0, "%s ^1Istek harita listesi bos!", TAG);
return;
}
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, menu, 0);
}
public IstekMapsMenuHandler(id, menu, item) {
if (item == MENU_EXIT) {
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new szInfo[64];
menu_item_getinfo(menu, item, _, szInfo, charsmax(szInfo));
if (RemoveMapFromFile(szInfo)) {
client_print_color(id, 0, "%s ^1%s ^3listeden kaldirildi!", TAG, szInfo);
} else {
client_print_color(id, 0, "%s ^1%s ^3silinirken hata olustu!", TAG, szInfo);
}
ShowIstekMapsMenu(id);
menu_destroy(menu);
return PLUGIN_HANDLED;
}
bool:RemoveMapFromFile(const szMap[]) {
new szLine[64], szContent[2048];
new fp = fopen(CONFIG_FILE, "r");
if (!fp) return false;
new bool:bDeleted = false, bool:isEmpty = true;
while (fgets(fp, szLine, charsmax(szLine))) {
trim(szLine);
if (!equal(szLine, szMap)) {
format(szContent, charsmax(szContent), "%s%s^n", szContent, szLine);
isEmpty = false;
} else {
bDeleted = true;
}
}
fclose(fp);
if (bDeleted) {
delete_file(CONFIG_FILE);
if (!isEmpty) {
new fpWrite = fopen(CONFIG_FILE, "w");
if (fpWrite) {
fprintf(fpWrite, "%s", szContent);
fclose(fpWrite);
}
}
}
return bDeleted;
}
bool:File_ContainsMap(const szMap[]) {
new szLine[64], fp = fopen(CONFIG_FILE, "r");
if (!fp) return false;
while (fgets(fp, szLine, charsmax(szLine))) {
trim(szLine);
if (equal(szLine, szMap)) {
fclose(fp);
return true;
}
}
fclose(fp);
return false;
}