Как да направя плъгин да взима информация от .ini файл
-
User12
Извън линия - Потребител
- Мнения: 321
- Регистриран на: 25 Яну 2018, 22:39
- Местоположение: Сливен
- Се отблагодари: 40 пъти
- Получена благодарност: 17 пъти
- Обратна връзка:
Как да направя плъгин да взима информация от .ini файл
Добър вечер от мен , интересувам се от това как да направя плъгина да чете информация от конфигурационен файл ? Мога да го направя със Cvars и от там да се настройват данните , но искам да пробвам и с конфг. файл , може ли да ме насочите към някой урок (ако има такъв) или да ми кажете коя функция да ползвам и разбира се с малко разяснение
-
TheRedShoko
Извън линия - Модератор
- Мнения: 1016
- Регистриран на: 06 Окт 2016, 07:42
- Местоположение: Бургас
- Се отблагодари: 5 пъти
- Получена благодарност: 84 пъти
Как да направя плъгин да взима информация от .ini файл
Трябва да прочетеш всеки ред от файла, да го разбиеш, за да извлечеш ключ - стойност и после да си запазиш стойността. Пример може да видиш в плъгините на Крома, той обикновенно така си пази конфигурациите.
-
OciXCrom
Извън линия - Администратор
- Мнения: 7206
- Регистриран на: 06 Окт 2016, 19:20
- Местоположение: /resetscore
- Се отблагодари: 117 пъти
- Получена благодарност: 1295 пъти
- Обратна връзка:
Как да направя плъгин да взима информация от .ini файл
Както каза колегата, най-добре е да погледнеш някой от моите плъгини и да се опиташ да разбереш частта за четенето на файла.
За прост .ini файл който съдържа само настройки и нищо повече, предлагам ти да погледнеш плъгина JailBreak Simon Counter.
Нещата които трябва да гледаш в кода са enum _:Settings, g_eSettings и ReadFile().
За .ini файл с различни раздели за настройки и за добавяне на неща в масив, погледни ранк системата.
Препоръчвам ти да опиташ сам и ако някъде не можеш да се оправиш, качи кода който си написал до момента за да ти обясним къде са ти грешките.
За прост .ini файл който съдържа само настройки и нищо повече, предлагам ти да погледнеш плъгина JailBreak Simon Counter.
Нещата които трябва да гледаш в кода са enum _:Settings, g_eSettings и ReadFile().
За .ini файл с различни раздели за настройки и за добавяне на неща в масив, погледни ранк системата.
Препоръчвам ти да опиташ сам и ако някъде не можеш да се оправиш, качи кода който си написал до момента за да ти обясним къде са ти грешките.
-
User12
Извън линия - Потребител
- Мнения: 321
- Регистриран на: 25 Яну 2018, 22:39
- Местоположение: Сливен
- Се отблагодари: 40 пъти
- Получена благодарност: 17 пъти
- Обратна връзка:
Как да направя плъгин да взима информация от .ini файл
Като начало създавам няколко , реда с различни настройки за конфигурационния файл.OciXCrom™ написа: ↑28 Юли 2018, 15:13 Както каза колегата, най-добре е да погледнеш някой от моите плъгини и да се опиташ да разбереш частта за четенето на файла.
За прост .ini файл който съдържа само настройки и нищо повече, предлагам ти да погледнеш плъгина JailBreak Simon Counter.
Нещата които трябва да гледаш в кода са enum _:Settings, g_eSettings и ReadFile().
За .ini файл с различни раздели за настройки и за добавяне на неща в масив, погледни ранк системата.
Препоръчвам ти да опиташ сам и ако някъде не можеш да се оправиш, качи кода който си написал до момента за да ти обясним къде са ти грешките.
[16] - Тук 16 ще рече , че създавам настройката да държи 15 символа ? Или греша .
Код за потвърждение: Избери целия код
enum _:Extras
{
AdminHP[16]
AdminArmor[16]
AdminBanHP[16]
AdminBanArmor[16]
UserHP[16]
UserArmor[16]
}
Код за потвърждение: Избери целия код
new g_eExtras[Extras]
Код за потвърждение: Избери целия код
ReadFile(bReload = false)
{
new iFilePointer = fopen(g_szFileName, "rt")
if(iFilePointer)
{
new szData[128], szValue[96], szKey[32], szNum[5], szLeft[5], szRight[5]
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
if(equal(szKey, "TIMER_COMMAND"))
{
copy(g_eSettings[TIMER_COMMAND], charsmax(g_eSettings[TIMER_COMMAND]), szValue)
g_iCmdLen[CMD_TIMER] = strlen(szValue)
}
else if(equal(szKey, "STOP_COMMAND"))
{
copy(g_eSettings[STOP_COMMAND], charsmax(g_eSettings[STOP_COMMAND]), szValue)
g_iCmdLen[CMD_STOP] = strlen(szValue)
}
-
OciXCrom
Извън линия - Администратор
- Мнения: 7206
- Регистриран на: 06 Окт 2016, 19:20
- Местоположение: /resetscore
- Се отблагодари: 117 пъти
- Получена благодарност: 1295 пъти
- Обратна връзка:
Как да направя плъгин да взима информация от .ini файл
Да.
Редовете във файла се четат 1 по 1. Тъй като в кода се ползва цикъл, всички редове ще бъдат прочетени 1 по 1 благодарение на fgets(iFilePointer, szData, charsmax(szData)) - този код взима текущия ред от файла и го запазва в променливата szData.
Код за потвърждение: Избери целия код
strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
Лявата част от съобщението се запазва в променливата szKey, а дясната в szValue.
Съответно, ако редът във файла е написан така: NASTROIKA = STOINOST, променливата szKey ще получи текста NASTROIKA, а szValue ще получи текста STOINOST.
Винаги когато не си сигурен за какво служи дадена функция и/или как се ползва, консултирай се с API-то: strtok
Код за потвърждение: Избери целия код
trim(szKey)
trim(szValue)
Код за потвърждение: Избери целия код
if(!szValue[0])
continue
Код за потвърждение: Избери целия код
if(equal(szKey, "NQKAKVA_NASTROIKA")
copy(g_eSettings[NQKAKVA_NASTROIKA], charsmax(g_eSettings[NQKAKVA_NASTROIKA]), szValue)
В случая ползваме copy тъй като искаме да сложим същата стойност като текст. Ако настройката държи число вместо текст, можеш да превърнеш текста в число по този начин:
Код за потвърждение: Избери целия код
if(equal(szKey, "NQKAKVA_NASTROIKA"))
g_eSettings[NQKAKVA_NASTROIKA] = str_to_num(szValue)
-
User12
Извън линия - Потребител
- Мнения: 321
- Регистриран на: 25 Яну 2018, 22:39
- Местоположение: Сливен
- Се отблагодари: 40 пъти
- Получена благодарност: 17 пъти
- Обратна връзка:
Как да направя плъгин да взима информация от .ini файл
До тук го направих така ама мисля ,че пропускам редове в кода , искам да разбера кое ще ми трябва и кое не целта ми е от ини файла да чете цифри .
Код за потвърждение: Избери целия код
ReadFile(bReload = false)
{
new iFilePointer = fopen(g_szFileName, "rt")
if(iFilePointer)
{
new szData[128], szValue[96], szKey[32], szNum[5], szLeft[5], szRight[5]
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
if(equal(szKey, "AdminWeapon"))
{
copy(g_eExtras[AdminWeapon], charsmax(g_eExtras[AdminWeapon]), szValue)
}
else if(equal(szKey, "AdminWeapon1"))
{
copy(g_eExtras[AdminWeapon1], charsmax(g_eExtras[AdminWeapon1]), szValue)
}
else if(equal(szKey, "AdminWeapon2"))
{
copy(g_eExtras[AdminWeapon2], charsmax(g_eExtras[AdminWeapon2]), szValue)
}
}
}
}
fclose(iFilePointer)
}
}
-
JackEyedJones
Извън линия - Потребител
- Мнения: 399
- Регистриран на: 10 Сеп 2018, 17:26
- Местоположение: Plovdiv, Bulgaria, Europe, Entire World
- Се отблагодари: 4 пъти
- Получена благодарност: 69 пъти
- Обратна връзка:
Как да направя плъгин да взима информация от .ini файл
Преди време си бях направил един шаблонен файл за четене от .ini вслучай, че забравя последователностите.
Вътре е даден пример когато се чете числова стойност, текстова стойност и пример за регистрация на команди от файл.
Ако закръгляш стойността с десетична точка . се използва str_to_float(szValue), съответно ако е цяло число/цифра str_to_num(szValue)
Накратко, szKey ти е отляво на равенството (=) в strtok, а szValue ти е отдясно. Не е нужно създаване на допълнителни string-ове за лява и дясна част. szData[160] ти съхранява цялата информация във файла - от първия до последния ред.
Нататък е както е написал Ocixa.
Вътре е даден пример когато се чете числова стойност, текстова стойност и пример за регистрация на команди от файл.
Ако закръгляш стойността с десетична точка . се използва str_to_float(szValue), съответно ако е цяло число/цифра str_to_num(szValue)
Накратко, szKey ти е отляво на равенството (=) в strtok, а szValue ти е отдясно. Не е нужно създаване на допълнителни string-ове за лява и дясна част. szData[160] ти съхранява цялата информация във файла - от първия до последния ред.
Нататък е както е написал Ocixa.
-
- Подобни теми
- Отговори
- Преглеждания
- Последно мнение
-
- 7 Отговори
- 2186 Преглеждания
-
Последно мнение от Zaeka321
-
- 2 Отговори
- 508 Преглеждания
-
Последно мнение от pendimonium
-
- 3 Отговори
- 1030 Преглеждания
-
Последно мнение от illusion
-
- 18 Отговори
- 6086 Преглеждания
-
Последно мнение от gadinkata
-
- 3 Отговори
- 1237 Преглеждания
-
Последно мнение от impossible
-
- 2 Отговори
- 264 Преглеждания
-
Последно мнение от 731
-
- 0 Отговори
- 1332 Преглеждания
-
Последно мнение от gadinkata
Кой е на линия
Потребители разглеждащи този форум: 0 регистрирани и 6 госта