Half-Life и Adrenaline Gamer форум

Всё об игре в Халф-Лайф и АГ
Текущее время: 19 апр 2024, 00:30

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: write info to a file
СообщениеДобавлено: 15 апр 2011, 19:35 
Не в сети
Зарегистрирован:
12 апр 2011, 14:58
Последнее посещение:
12 янв 2014, 06:02
Сообщения: 50
Hi all. I need help with this code. It gives false detection on g_InList if the steamid is not on line 1 inside names.ini file. Also, i think this code need more optimization and cvars for country name. This plugin is actually for dumping players name from certain country. I use "error" country because im testing it on my home server.

Код:
#include <amxmodx>
#include <amxmisc>
#include <geoip>

new name[33], authid[33], country[33], ip[33]
new bool:g_InList[33] = true
new filename[256]

public plugin_init()
{
   register_plugin("Dump LAN player name", "1.0", "")

   get_datadir(filename, 255)
   format(filename, 255, "%s/names.ini", filename)
   register_clcmd("say z", "check")
}

public check(id)
{
   client_print(id, print_chat, "InList: %s", ((g_InList[id] = true) ? "YES":"NO"))
}

public client_putinserver(id)
{
   get_user_name(id, name, 32)
   get_user_authid(id, authid, 32)
   get_user_ip(id, ip, 32)
   geoip_country(ip, country)

   check_steamid(id)

   if(!is_user_bot(id) && equali(country, "error") && !g_InList[id])
   {
      write_name(id)
   }
}

public write_name(id)
{
   new filepointer = fopen(filename,"a+")
   get_user_name(id, name, 32)
   get_user_authid(id, authid, 32)

   if(filepointer)
   {
      fprintf(filepointer,"%s^t//^t%s^n", authid, name)

      fclose(filepointer)
   }
}

public check_steamid(id)
{
   new filepointer = fopen(filename, "r")
   get_user_authid(id, authid, 32)

   if(filepointer)
   {
      new readdata[128], parsedsteamid[32]

      while(fgets(filepointer, readdata, 127))
      {
         parse(readdata, parsedsteamid, 32)

         if(equal(authid, parsedsteamid))
         {
            g_InList[id] = true
         }
         else
         {
            g_InList[id] = false
         }
         
         break
      }

      fclose(filepointer)
   }
}


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: write info to a file
СообщениеДобавлено: 15 апр 2011, 20:34 
Не в сети
Зарегистрирован:
01 июн 2010, 03:10
Последнее посещение:
08 авг 2011, 01:24
Сообщения: 386
Not really a help with algo, just wondering, won't that line
Код:
parse(readdata, parsedsteamid, 32)
cause a BOF, when writing to 32-byte long parsedsteamid? Shouldn't that variable be declared with 33b length?


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: write info to a file
СообщениеДобавлено: 15 апр 2011, 21:47 
Не в сети
Зарегистрирован:
12 апр 2011, 14:58
Последнее посещение:
12 янв 2014, 06:02
Сообщения: 50
Thanks pointing that out. I do typo alot when i was in hurry. :D

To be honest, this problem is really weird. The code seems correct. But why it wont detect steamid in other lines except line 1.


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: write info to a file
СообщениеДобавлено: 15 апр 2011, 23:27 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
18 апр 2024, 17:14
Сообщения: 6867
Код:
   get_user_ip(id, ip, 32, 1)
   geoip_country(ip, country)
You'd better use get_user_ip "without port". http://www.amxmodx.org/funcwiki.php?search=get_user_ip

Try to surround with quotes and split by a space:
Код:
fprintf(filepointer,"^"%s^" ^"%s^"^n", authid, name)

Also check that "fgets" get exactly one string by another from a file.


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: write info to a file
СообщениеДобавлено: 16 апр 2011, 01:12 
Не в сети
Зарегистрирован:
12 апр 2011, 14:58
Последнее посещение:
12 янв 2014, 06:02
Сообщения: 50
@Lev
I've tried all your seggestion but its still the same. I even rewrote the whole code and use read_file method but it still dont work


Вернуться к началу
 Профиль 
  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB