Как да си добавя[ini]файл,към избран плъгин

Ако имате затруднения при изработката/преработката на даден плъгин - пишете тук, ще се опитаме да ви помогнем!
Аватар
gadinkata
Извън линия
Потребител
Потребител
Мнения: 259
Регистриран на: 21 Мар 2018, 12:33
Местоположение: Враца
Се отблагодари: 25 пъти
Получена благодарност: 7 пъти
Обратна връзка:

Как да си добавя[ini]файл,към избран плъгин

Мнение от gadinkata » 23 Юни 2020, 02:01

Как може,да заместя, new const Prefix[5[] с new g_iCvars[Cvars]
Проверката,която използвам в кода,я давам за пример

Код за потвърждение: Избери целия код

if(Level[id] < 5-1)
	while(iExp[id] >= Levels[Level[id]])
		Level[id] += 1

Код за потвърждение: Избери целия код

new const Levels[MaxLevels] = 
{
0,  
100, 
500,
850
}

Код за потвърждение: Избери целия код

new const Prefix[MaxLevels][] =
{
"None",
"Learner",
"Officer",
"KiLLeR"
}

Код за потвърждение: Избери целия код

enum _:Cvars
iLevels[5],
iPrefix[5]
}
new Level[33], iExp[33]
new g_iCvars[Cvars]

//Това е кодът за readfile()който ще те от ini файла
		else if(equal(szKey, "iLevels"))
		{
			while(szValue[0] == 0 ? 0 : strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ','))
			{
				trim(szKey); trim(szValue)
				copy(g_iCvars[iLevels] ,charsmax(g_iCvars[iLevels]), szValue)
			}
		}
		else if(equal(szKey, "iPrefix"))
		{
			while(szValue[0] == 0 ? 0 : strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ','))
			{
				trim(szKey); trim(szValue)
				copy(g_iCvars[iPrefix] ,charsmax(g_iCvars[iPrefix]), szVKey)
			}
		}
В ini файла съм добавил, следното
iLevels = 0,500,1000,1500 по тоя начин който се опитвам да извлеча информацията,като го тествам ми изкарва "0"
iPrefux = none,first,fast,wast по тоя начин който се опитвам да извлеча информацията,като го тествам ми изкарва "wast"а не "none"

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

Как да си добавя[ini]файл,към избран плъгин

Мнение от mi0 » 23 Юни 2020, 02:40

gadinkata написа: 23 Юни 2020, 02:01

Код за потвърждение: Избери целия код

if(Level[id] < 5-1)
	while(iExp[id] >= Levels[Level[id]])
		Level[id] += 1
Тук има проблеми... Ако поради някаква причина xp-то му намалее? Ще е хубаво да го set-ваш level-а на 0 преди да влиза в този цикъл, а ако имаш повечко level-и, ще е хубаво да направиш малко по-силна логика, която да изчислява сегашното му ниво.
Също ще е добре да дадеш малко по-голяма част от readfile или по-точно самия loop през редовете. И моля не прави неща от сорта на -

Код за потвърждение: Избери целия код

while (bool1 ? false : bool2)
Проверявай за bool1 преди да стигне до while. Хем е по-четливо, хем няма да го пишеш по 20 пъти за всички "секции"(видях че това го има на доста места).
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

Аватар
gadinkata
Извън линия
Потребител
Потребител
Мнения: 259
Регистриран на: 21 Мар 2018, 12:33
Местоположение: Враца
Се отблагодари: 25 пъти
Получена благодарност: 7 пъти
Обратна връзка:

Как да си добавя[ini]файл,към избран плъгин

Мнение от gadinkata » 23 Юни 2020, 07:59

В момента се опитвам,да замествя/вкарам new const Levels[MaxLevels] = // iLevels[MaxLevels], new const Prefix[MaxLevels][] = // iPrefix[MaxLevels]
Кодът ми работи с new const Levels[MaxLevels] new const Prefix[MaxLevels][] искам да левелите и префикса да ги вкарам в ини файла

Код за потвърждение: Избери целия код

#define MaxLevels 11
enum _:Cvars

{
KnifeXP,
HeXP,
KillXP,
HeadshotXP,
SuciedeXP,
DhudAlive,
KillMsg,
SaveXp,
BPlanted,
BDefause,
BExplode,
iLevels[MaxLevels],
iPrefix[MaxLevels]
}

new g_iCvars[Cvars]

new const Levels[MaxLevels] = 
{
0,  
100, 
500,
850,
1250,
1555,
2000,
2750,
4000,
5000
}

new const Prefix[MaxLevels][] =
{
"None",
"Learner",
"Officer",
"KiLLeR",
"mAchInE",
"Ultra-Machine",
"TrYtoKillMe",
"Proffesional",
"Master",
"GODLIKE",
"GOD"
}

new Level[33], iExp[33]
new const g_vault_name[] = "aTmAx_Ranks"
new Trie:g_tSettings
readfile()

Код за потвърждение: Избери целия код

ReadFile()
{
new szFilename[256]
get_configsdir(szFilename, charsmax(szFilename))
add(szFilename, charsmax(szFilename), "/RankSystems.ini")

new iFilePointer = fopen(szFilename, "rt")

if(iFilePointer)
{
new szData[32],szKey[64],szValue[32]

while(!feof(iFilePointer))
{
fgets(iFilePointer, szData, charsmax(szData))
trim(szData)

switch(szData[0])
{
case EOS, ';', '#': continue
	default:
{
	strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
	trim(szKey); trim(szValue)
	
	if(!szValue[0]) continue
	
		TrieSetString(g_tSettings, szKey, szValue)
		
		if(equal(szKey, "KnifeXP"))
		{
			copy(g_iCvars[KnifeXP], charsmax(g_iCvars[KnifeXP]), szValue)
			g_iCvars[KnifeXP] = clamp(str_to_num(szValue))
		}
		else if(equal(szKey, "HeXP"))
		{
			copy(g_iCvars[HeXP], charsmax(g_iCvars[HeXP]), szValue)
			g_iCvars[HeXP] = clamp(str_to_num(szValue))
		}
		else if(equal(szKey, "KillXP"))
		{
			copy(g_iCvars[KillXP], charsmax(g_iCvars[KillXP]), szValue)
			g_iCvars[KillXP] = clamp(str_to_num(szValue))
		}
		else if(equal(szKey, "HeadshotXP"))
		{
			copy(g_iCvars[HeadshotXP], charsmax(g_iCvars[HeadshotXP]), szValue)
			g_iCvars[HeadshotXP] = clamp(str_to_num(szValue))
		}
		else if(equal(szKey, "SuciedeXP"))
		{
			copy(g_iCvars[SuciedeXP], charsmax(g_iCvars[SuciedeXP]), szValue)
			g_iCvars[SuciedeXP] = clamp(str_to_num(szValue))
		}
		else if(equal(szKey, "DhudAlive"))
		{
			copy(g_iCvars[DhudAlive] ,charsmax(g_iCvars[DhudAlive]), szValue)
			g_iCvars[DhudAlive] = clamp(str_to_num(szValue))
		}
		else if(equal(szKey, "KillMsg"))
		{
			copy(g_iCvars[KillMsg] ,charsmax(g_iCvars[KillMsg]), szValue)
			g_iCvars[KillMsg] = clamp(str_to_num(szValue))
		}
		else if(equal(szKey, "SaveXp"))
		{
			copy(g_iCvars[SaveXp] ,charsmax(g_iCvars[SaveXp]), szValue)
			g_iCvars[SaveXp] = clamp(str_to_num(szValue))
		}
		else if(equal(szKey, "BPlanted"))
		{
			copy(g_iCvars[BPlanted] ,charsmax(g_iCvars[BPlanted]), szValue)
			g_iCvars[BPlanted] = clamp(str_to_num(szValue))
		}
		else if(equal(szKey, "BDefause"))
		{
			copy(g_iCvars[BDefause] ,charsmax(g_iCvars[BDefause]), szValue)
			g_iCvars[BDefause] = clamp(str_to_num(szValue))
		}
		else if(equal(szKey, "BExplode"))
		{
			copy(g_iCvars[BExplode] ,charsmax(g_iCvars[BExplode]), szValue)
			g_iCvars[BExplode] = clamp(str_to_num(szValue))
		}
		else if(equal(szKey, "iLevels"))
		{
			while(szValue[0] != 0 && strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ','))
			{
				trim(szKey); trim(szValue)
				copy(g_iCvars[iLevels],charsmax(g_iCvars[iLevels]), szValue)
			}
		}
		else if(equal(szKey, "iPrefix"))
		{
			while(szValue[0] != 0 && strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ','))
			{
				trim(szKey); trim(szValue)
				copy(g_iCvars[iPrefix] ,charsmax(g_iCvars[iPrefix]), szValue)
			}
		}
	}
}
}
Знам, че ще кажете, че това преобразува текста в число, просто когато започнах да правя файла не можех да го подкарам, за това съм го писал така както съм го видял g_iCvars[KnifeXP] = clamp(str_to_num(szValue)), че в мойте случай може само с copy защото в моя код никъде не преобразувам числа в текст илу текст в числа

Аватар
JackEyedJones
Извън линия
Потребител
Потребител
Мнения: 399
Регистриран на: 10 Сеп 2018, 17:26
Местоположение: Plovdiv, Bulgaria, Europe, Entire World
Се отблагодари: 4 пъти
Получена благодарност: 69 пъти
Обратна връзка:

Как да си добавя[ini]файл,към избран плъгин

Мнение от JackEyedJones » 23 Юни 2020, 14:10

KnifeXP = 15
HeadshotXP = 30

Ако целите във файла да го направите така и разделител да ви е символа "=" принципа е грешен.
clamp поставя минимален и максимален диапазон на стойност и има два аргумента. Не само един. copy копира текстови стойности от една в друга променлива. Вслучая, щом след = ще има цифра/число се ползва str_to_num

Tip:

Код за потвърждение: Избери целия код

if(equal(szKey, "KnifeXP"))
   g_iCvars[KnifeXP] = str_to_num(szValue)

Аватар
gadinkata
Извън линия
Потребител
Потребител
Мнения: 259
Регистриран на: 21 Мар 2018, 12:33
Местоположение: Враца
Се отблагодари: 25 пъти
Получена благодарност: 7 пъти
Обратна връзка:

Как да си добавя[ini]файл,към избран плъгин

Мнение от gadinkata » 23 Юни 2020, 15:18

Това поставям, знам че не е правилно и мерси за инфото, но в момента ме затруднява това което постнах по горе, как да добавя след iLevels = 0,500, 100 и т. н същото и за iPrefix = None, Pro, Exzecuter как да го направя да го чете от ини файла едно по едно без запетайката...

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

Как да си добавя[ini]файл,към избран плъгин

Мнение от mi0 » 23 Юни 2020, 16:52

Код за потвърждение: Избери целия код

					else if(equal(szKey, "iLevels"))
					{
						while(szValue[0] != 0 && strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ','))
						{
							trim(szKey); trim(szValue)
							copy(g_iCvars[iLevels],charsmax(g_iCvars[iLevels]), szKey)
						}
					}
					else if(equal(szKey, "iPrefix"))
					{
						while(szValue[0] != 0 && strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ','))
						{
							trim(szKey); trim(szValue)
							copy(g_iCvars[iPrefix] ,charsmax(g_iCvars[iPrefix]), szKey)
						}
					}
Помисли за Counter и DynamicArray, ако не искаш да запазваш само по 1 prefix и 1 level.
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

Аватар
gadinkata
Извън линия
Потребител
Потребител
Мнения: 259
Регистриран на: 21 Мар 2018, 12:33
Местоположение: Враца
Се отблагодари: 25 пъти
Получена благодарност: 7 пъти
Обратна връзка:

Как да си добавя[ini]файл,към избран плъгин

Мнение от gadinkata » 23 Юни 2020, 18:26

Ето по тоя начин като на OciXCrom,но като гледам от неговия плъгин доста се обърквам,за това ви искам помоща да ми дадете някакви предложения/примери

Код за потвърждение: Избери целия код

ArrayPushCell(g_aLevels, g_iMaxLevels == 0 ? 0 : max(str_to_num(szValue), 0))
ArrayPushString(g_aRankNames, szKey)
g_iMaxLevels++
той по този начин,записва от ини файла в указател g_aLevels и g_aRankNames,ще ме затруднят условията,след това как да ги направя.
Защото той използва неговара xp библиотека,а аз просто като играч влезне му давам началните ранк и точки който са на пример Newbie = 0 и вече към тия нулу когато убие човек да му добави още 10 примерно и така става 10 хп че има....Но ще пробвам,ще извадя всичко което е свързано с това условие по горе и ще се пробвам

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

Как да си добавя[ini]файл,към избран плъгин

Мнение от mi0 » 23 Юни 2020, 20:29

https://forums.alliedmods.net/showthread.php?t=249602
И защо просто не използваш неговата система? Тя работи.
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

Аватар
gadinkata
Извън линия
Потребител
Потребител
Мнения: 259
Регистриран на: 21 Мар 2018, 12:33
Местоположение: Враца
Се отблагодари: 25 пъти
Получена благодарност: 7 пъти
Обратна връзка:

Как да си добавя[ini]файл,към избран плъгин

Мнение от gadinkata » 24 Юни 2020, 08:37

mi0 написа: 23 Юни 2020, 16:52

Код за потвърждение: Избери целия код

					else if(equal(szKey, "iLevels"))
					{
						while(szValue[0] != 0 && strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ','))
						{
							trim(szKey); trim(szValue)
							copy(g_iCvars[iLevels],charsmax(g_iCvars[iLevels]), szKey)
						}
					}
					else if(equal(szKey, "iPrefix"))
					{
						while(szValue[0] != 0 && strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ','))
						{
							trim(szKey); trim(szValue)
							copy(g_iCvars[iPrefix] ,charsmax(g_iCvars[iPrefix]), szKey)
						}
					}
По този ли начин да го взема от ини файла, и после да ползвам арай.
До колкото за ранк системата на окси, с нея съм, но искам да си.направя моя лична да не е претъпкана и както казах в началото сега се уча и за това пускам тези теми за да вземам примери и съвети

Код за потвърждение: Избери целия код

enum _:PrefixLevels
{
	iLevels
}

new const g_iRanks[11][PrefixLevels][1]
new const Prefix[MaxLevels][] =
{
"None",
"Learner",
"Officer",
"KiLLeR",
"mAchInE",
"Ultra-Machine",
"TrYtoKillMe",
"Proffesional",
"Master",
"GODLIKE",
"GOD"
}
readfile()
		else if(equal(szKey, "iLevels"))
		{

			g_iRanks[0][iLevels][0] = str_to_num(szValue)

		}
Проверка
if(Level[id] < MaxLevels-1)
	while(iExp[id] >= g_iRanks[0][iLevels][Level[id]])
	Level[id] += 1
Ini file setings
iLevels = 0,500,1000,1500,2000,2500,3000,3500,4000,4500
при добавяне на 1500 xp ми дава левел 1 и ранк prefix Learner

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Помощ в скриптирането”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 13 госта