Konu

#1
Merhabalar

Gündüz ve gece belirli saatler arasında haritaları sırasıyla açacak plugin aramaktayım. Şuanki sunucularda hazır kurulu gelen nextmap.amxx (Sma bulamadım) haritaları sırasıyla açıyor bunu geliştirip gece 12:00 - 09:00 arası yaptığım gece map listesini sırayla açaçak. Şimdiden yardımlarınız için teşekkür ediyorum.
#3
(25-05-2024, 22:24)Lynchk Adlı Kullanıcıdan Alıntı: https://www.webailesi.com/konu-saate-gor...mesi-21743
Belli saatler girerek yapabilirsin.

100 e yakın gece mapı var hepsini tektek yazmak uğraştırır. Sunucumda gungame mod kurulu oyuncu kazandıktan el sonu sıradaki map hangisiyse otomatik olarak onu açıyor nextmap mantığıyla

Smayı buldum 

Kod:
// vim: set ts=4 sw=4 tw=99 noet:
//
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
// Copyright (C) The AMX Mod X Development Team.
//
// This software is licensed under the GNU General Public License, version 3 or higher.
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
//     https://alliedmods.net/amxmodx-license

//
// NextMap Plugin
//

#include <amxmodx>

// WARNING: If you comment this line make sure
// that in your mapcycle file maps don't repeat.
// However the same map in a row is still valid.
#define OBEY_MAPCYCLE

new g_nextMap[32]
new g_mapCycle[32]
new g_pos
new g_currentMap[32]

// pcvars
new g_mp_friendlyfire, g_mp_chattime
new g_amx_nextmap

public plugin_init()
{
    register_plugin("NextMap", AMXX_VERSION_STR, "AMXX Dev Team")
    register_dictionary("nextmap.txt")
    register_event("30", "changeMap", "a")
    register_clcmd("say nextmap", "sayNextMap", 0, "- displays nextmap")
    register_clcmd("say currentmap", "sayCurrentMap", 0, "- display current map")

    g_amx_nextmap = register_cvar("amx_nextmap", "", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY)
    g_mp_chattime = get_cvar_pointer("mp_chattime")
    g_mp_friendlyfire = get_cvar_pointer("mp_friendlyfire")
    if( g_mp_friendlyfire )
    {
        register_clcmd("say ff", "sayFFStatus", 0, "- display friendly fire status")
    }

    get_mapname(g_currentMap, charsmax(g_currentMap))

    new szString[40], szString2[32], szString3[8]
    
    get_localinfo("lastmapcycle", szString, charsmax(szString))
    parse(szString, szString2, charsmax(szString2), szString3, charsmax(szString3))
    
    get_cvar_string("mapcyclefile", g_mapCycle, charsmax(g_mapCycle))

    if (!equal(g_mapCycle, szString2))
        g_pos = 0    // mapcyclefile has been changed - go from first
    else
        g_pos = str_to_num(szString3)

    readMapCycle(g_mapCycle, g_nextMap, charsmax(g_nextMap))
    set_pcvar_string(g_amx_nextmap, g_nextMap)
    formatex(szString, charsmax(szString), "%s %d", g_mapCycle, g_pos)    // save lastmapcycle settings
    set_localinfo("lastmapcycle", szString)
}

getNextMapName(szArg[], iMax)
{
    new len = get_pcvar_string(g_amx_nextmap, szArg, iMax)
    
    if (ValidMap(szArg)) return len
    len = copy(szArg, iMax, g_nextMap)
    set_pcvar_string(g_amx_nextmap, g_nextMap)
    
    return len
}

public sayNextMap()
{
    new name[32]
    
    getNextMapName(name, charsmax(name))
    client_print(0, print_chat, "%L %s", LANG_PLAYER, "NEXT_MAP", name)
}

public sayCurrentMap()
{
    client_print(0, print_chat, "%L: %s", LANG_PLAYER, "PLAYED_MAP", g_currentMap)
}

public sayFFStatus()
{
    client_print(0, print_chat, "%L: %L", LANG_PLAYER, "FRIEND_FIRE", LANG_PLAYER, get_pcvar_num(g_mp_friendlyfire) ? "ON" : "OFF")
}

public delayedChange(param[])
{
    if (g_mp_chattime) {
        set_pcvar_float(g_mp_chattime, get_pcvar_float(g_mp_chattime) - 2.0)
    }
    engine_changelevel(param)
}

public changeMap()
{
    new string[32]
    new Float:chattime = g_mp_chattime ? get_pcvar_float(g_mp_chattime) : 10.0;    // mp_chattime defaults to 10 in other mods
    
    if (g_mp_chattime) {
        set_pcvar_float(g_mp_chattime, chattime + 2.0)        // make sure mp_chattime is long
    }
    new len = getNextMapName(string, charsmax(string)) + 1
    set_task(chattime, "delayedChange", 0, string, len)    // change with 1.5 sec. delay
}

new g_warning[] = "WARNING: Couldn't find a valid map or the file doesn't exist (file ^"%s^")"

stock bool:ValidMap(mapname[])
{
    if ( is_map_valid(mapname) )
    {
        return true;
    }
    // If the is_map_valid check failed, check the end of the string
    new len = strlen(mapname) - 4;
    
    // The mapname was too short to possibly house the .bsp extension
    if (len < 0)
    {
        return false;
    }
    if ( equali(mapname[len], ".bsp") )
    {
        // If the ending was .bsp, then cut it off.
        // the string is byref'ed, so this copies back to the loaded text.
        mapname[len] = '^0';
        
        // recheck
        if ( is_map_valid(mapname) )
        {
            return true;
        }
    }
    
    return false;
}

#if defined OBEY_MAPCYCLE
readMapCycle(szFileName[], szNext[], iNext)
{
    new b, i = 0, iMaps = 0
    new szBuffer[32], szFirst[32]

    if (file_exists(szFileName))
    {
        while (read_file(szFileName, i++, szBuffer, charsmax(szBuffer), b))
        {
            if (!isalnum(szBuffer[0]) || !ValidMap(szBuffer)) continue
            
            if (!iMaps)
                copy(szFirst, charsmax(szFirst), szBuffer)
            
            if (++iMaps > g_pos)
            {
                copy(szNext, iNext, szBuffer)
                g_pos = iMaps
                return
            }
        }
    }

    if (!iMaps)
    {
        log_amx(g_warning, szFileName)
        copy(szNext, iNext, g_currentMap)
    }
    else
        copy(szNext, iNext, szFirst)
    g_pos = 1
}

#else

readMapCycle(szFileName[], szNext[], iNext)
{
    new b, i = 0, iMaps = 0
    new szBuffer[32], szFirst[32]
    
    new a = g_pos

    if (file_exists(szFileName))
    {
        while (read_file(szFileName, i++, szBuffer, charsmax(szBuffer), b))
        {
            if (!isalnum(szBuffer[0]) || !ValidMap(szBuffer)) continue
            
            if (!iMaps)
            {
                iMaps = 1
                copy(szFirst, charsmax(szFirst), szBuffer)
            }
            
            if (iMaps == 1)
            {
                if (equali(g_currentMap, szBuffer))
                {
                    if (a-- == 0)
                        iMaps = 2
                }
            } else {
                if (equali(g_currentMap, szBuffer))
                    ++g_pos
                else
                    g_pos = 0
                
                copy(szNext, iNext, szBuffer)
                return
            }
        }
    }
    
    if (!iMaps)
    {
        log_amx(g_warning, szFileName)
        copy(szNext, iNext, g_currentMap)
    }
    else
        copy(szNext, iNext, szFirst)
    
    g_pos = 0
}
#endif

Son Düzenleme: 25-05-2024, 22:39, Düzenleyen: Xau.
#4
İstek konusu, @Lynchk adlı kullanıcı tarafından 24 saat içinde çözülmüştür.
İsteği çözdüğü için Lynchk Adlı kullanıcıya 1 rep puanı ve 1 yardım etme puanı otomatik olarak verilmiştir.
Lynchk Adlı kullanıcı sizin dışınızda toplam 878 kişiye yardım etmiştir.

Herhangi bir konuda hata olduğunu düşünüyorsanız destek sistemi üzerinden iletişim kurabilirsiniz.

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task
Kayıt Ol