Та, проблема е явно в кода за "reset"- ване на LVL и XP (който посочвам тук накрая). Плъгина наистина "reset"- ва LVL и XP, но последния придобит Flag си остава(проверено) за играча, въпреки че играча започва отначало цялата ранксистема . Може ли да се допълни и тази функция, т.е. да нулира, или да маха всички придобивани флагове от ранксистемата при започване отначалото ?
Благодаря.
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <crxranks>
#define RESET_DELAY 1.0
new g_iMaxLevels
public plugin_init()
{
register_plugin("CRXRanks: Reset on Last Level", "1.0", "OciXCrom")
g_iMaxLevels = crxranks_get_max_levels()
}
public crxranks_user_level_updated(id, iLevel)
{
if(iLevel == g_iMaxLevels)
set_task(RESET_DELAY, "reset_user_xp", id)
}
public reset_user_xp(id)
crxranks_give_user_xp(id, crxranks_get_user_xp(id) * -1)
.... и след това допълнение, се замислих дали пък преработката не би трябвало да се отнася пряко към събплъгина CRXRanks: Flags Per Level - и ако е "да" ето и неговия код( съжалявам ако така пуснатата заявка я усложнявам, но пък аз не разбирам чак толкова много от тия неща... - за което се извинявам)
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <amxmisc>
#include <crxranks>
#define PLUGIN_VERSION "1.1"
new Trie:g_tFlags, g_pStrict
public plugin_init()
{
register_plugin("CRXRanks: Flags Per Level", PLUGIN_VERSION, "OciXCrom")
register_cvar("CRXRanksFPL", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
g_pStrict = register_cvar("crxransk_fpl_strict", "0")
g_tFlags = TrieCreate()
ReadFile()
}
public plugin_end()
TrieDestroy(g_tFlags)
ReadFile()
{
new szConfigsName[256], szFilename[256]
get_configsdir(szConfigsName, charsmax(szConfigsName))
formatex(szFilename, charsmax(szFilename), "%s/RankSystemFlags.ini", szConfigsName)
new iFilePointer = fopen(szFilename, "rt")
if(iFilePointer)
{
new szData[64], szValue[32], szMap[32], szKey[32], bool:bRead = true, iSize
get_mapname(szMap, charsmax(szMap))
while(!feof(iFilePointer))
{
fgets(iFilePointer, szData, charsmax(szData))
trim(szData)
switch(szData[0])
{
case EOS, '#', ';': continue
case '-':
{
iSize = strlen(szData)
if(szData[iSize - 1] == '-')
{
szData[0] = ' '
szData[iSize - 1] = ' '
trim(szData)
if(contain(szData, "*") != -1)
{
strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '*')
copy(szValue, strlen(szKey), szMap)
bRead = equal(szValue, szKey) ? true : false
}
else
{
static const szAll[] = "#all"
bRead = equal(szData, szAll) || equali(szData, szMap)
}
}
else continue
}
default:
{
if(!bRead)
continue
strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
trim(szKey); trim(szValue)
if(!szValue[0])
continue
TrieSetCell(g_tFlags, szKey, read_flags(szValue))
}
}
}
fclose(iFilePointer)
}
}
public client_putinserver(id)
crxranks_user_level_updated(id, crxranks_get_user_level(id), true)
public crxranks_user_level_updated(id, iLevel, bool:bLevelUp)
{
if(!bLevelUp)
return
new szLevel[8], iLevelFlags, iUserFlags = get_user_flags(id)
if(get_pcvar_num(g_pStrict))
{
num_to_str(iLevel, szLevel, charsmax(szLevel))
if(TrieGetCell(g_tFlags, szLevel, iLevelFlags))
{
if((iUserFlags & iLevelFlags) != iLevelFlags)
set_user_flags(id, iLevelFlags)
}
return
}
for(new i; i <= iLevel; i++)
{
num_to_str(i, szLevel, charsmax(szLevel))
if(TrieGetCell(g_tFlags, szLevel, iLevelFlags))
{
if((iUserFlags & iLevelFlags) != iLevelFlags)
set_user_flags(id, iLevelFlags)
}
}
}