fteqw icon indicating copy to clipboard operation
fteqw copied to clipboard

"nextmap" command

Open paulogagliardi opened this issue 5 months ago • 0 comments

Hey! I am trying to implement the "nextmap" command in a FFA FTEQW server (to go automatically to the next map in the rotation). But, in compilation the code below is giving errors:

" nextmapping.qc:12: error: Unknown value "read_file". nextmapping.qc:29: warning Q106: Assignment to const nextmapping.qc:3: const float g_mapCycleLength = 0 is defined here nextmapping.qc:29: warning Q106: Assignment to constant g_mapCycleLength nextmapping.qc:3: const float g_mapCycleLength = 0 is defined here at global scope, nextmapping.qc:69: error: redeclaration of function body voting.qc:18: const void(entity, string) ChatMessage_Parse is defined here nextmapping.qc:114: error: incompatible redeclaration voting.qc:18: const void(entity, string) ChatMessage_Parse is defined here "

--- code init --- // This will store the maps loaded from the file string g_mapCycle[405]; float g_mapCycleLength = 0;

// Function to load maps from the mapcycle.txt file void LoadMapCycle(void) { string mapCycleContent; float mapIndex = 0;

// Load the file content into a string
mapCycleContent = read_file("mapcycle.txt");

if (!mapCycleContent) {
    qw_bprint(PRINT_CHAT, "Erro: Não foi possível carregar mapcycle.txt\n");
    return;
}

// Tokenize the content by newline or space, assuming each map is on a new line
float numMaps = tokenize(mapCycleContent);

// Store each map in the g_mapCycle array
for (float i = 0; i < numMaps; i++) {
    g_mapCycle[mapIndex] = argv(i);
    mapIndex++;
}

// Set the total number of maps
g_mapCycleLength = mapIndex;

qw_bprint(PRINT_CHAT, sprintf("%d mapas carregados de mapcycle.txt\n", g_mapCycleLength));

}

// Function to switch to the next map in the cycle void NextMap(void) { // Get the current map name string currentMap = serverkey("mapname");

// Find the current map's index in the rotation
float currentIndex = -1;
for (float i = 0; i < g_mapCycleLength; i++) {
    if (g_mapCycle[i] == currentMap) {
        currentIndex = i;
        break;
    }
}

// If the current map was found, load the next one
if (currentIndex != -1) {
    float nextIndex = currentIndex + 1;

    // If we're at the end of the cycle, go back to the first map
    if (nextIndex >= g_mapCycleLength) {
        nextIndex = 0;
    }

    // Change to the next map
    localcmd(sprintf("map %s\n", g_mapCycle[nextIndex]));
    qw_bprint(PRINT_CHAT, sprintf("Carregando o próximo mapa: %s\n", g_mapCycle[nextIndex]));
} else {
    qw_bprint(PRINT_CHAT, "Mapa atual não encontrado no ciclo. Não foi possível carregar o próximo mapa.\n");
}

}

// Modify ChatMessage_Parse to include the nextmap command void ChatMessage_Parse(entity sayingEnt, string commandString) { float isMap = 0; if (whichpack(strcat("maps/", commandString, ".bsp"))) { isMap = 1; }

float args = tokenize(commandString);

switch (argv(0)) {
case "sim":
    self = sayingEnt;
    Vote_Cmd_VoteYes();
    break;
case "nao":
    self = sayingEnt;
    Vote_Cmd_VoteNo();
    break;
case "rtv":
    qw_bprint(PRINT_CHAT, sprintf("Rock The Vote solicitado por %s\n", sayingEnt.netname));
    break;
case "timeleft":
    string msg;
    string timestring;
    float timeleft;
    timeleft = cvar("timelimit") - (time / 40);
    timestring = Util_TimeToString(timeleft);
    msg = sprintf("nos temos %s minutos restando\n", timestring);
    qw_sprint(sayingEnt, PRINT_CHAT, msg);
    break;
case "callvote":
    Vote_Cmd_CallVote(commandString);
    break;
case "votehelp":
    Vote_Help(sayingEnt);
    break;
case "nextmap":
    NextMap();
    break;
default:
    if (isMap) {
        qw_bprint(PRINT_CHAT, sprintf("%s foi indicado por %s\n", commandString, sayingEnt.netname));
    }
    break;
}

} --- code end ---

Please, can you help me?

paulogagliardi avatar Sep 21 '24 23:09 paulogagliardi