Half-Life и Adrenaline Gamer форум

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

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




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: string to an array
СообщениеДобавлено: 12 апр 2011, 15:03 
Не в сети
Зарегистрирован:
12 апр 2011, 14:58
Последнее посещение:
12 янв 2014, 06:02
Сообщения: 50
i want to add 2 new native in dproto. get_user_provider and get_user_protocol and im stuck here. can someone please solve this? the problem right now is it can not detect get_user_provider properly. i dont know whats the problem

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

#define DP_AUTH_NONE       0
#define DP_AUTH_DPROTO      1
#define DP_AUTH_STEAM      2
#define DP_AUTH_STEAMEMU   3
#define DP_AUTH_REVEMU      4
#define DP_AUTH_OLDREVEMU   5
#define DP_AUTH_HLTV      6
#define DP_AUTH_SC2009      7
#define DP_AUTH_AVSMP      8

new pcv_dp_r_protocol, pcv_dp_r_id_provider
new g_protocol[33]
new g_provider[33][32]

public plugin_init()
{
   register_plugin("dproto testing", "1", "")

   pcv_dp_r_protocol = get_cvar_pointer ("dp_r_protocol")
   pcv_dp_r_id_provider = get_cvar_pointer ("dp_r_id_provider")
}

public plugin_natives()
{
   register_native("get_user_protocol", "native_get_user_protocol", 1)
   register_native("get_user_provider", "native_get_user_provider", 1)
}

public client_connect(id)
{
   if (!pcv_dp_r_protocol || !pcv_dp_r_id_provider)
   {
      log_amx ("cant find dp_r_protocol or dp_r_id_provider cvars")
      return PLUGIN_HANDLED
   }

   server_cmd("dp_clientinfo %d", id)
   server_exec()

   new proto = get_pcvar_num(pcv_dp_r_protocol)
   new authprov = get_pcvar_num(pcv_dp_r_id_provider)
   new auth_prov_str[32]
   new user_name[33]

   switch (authprov)
   {
      case DP_AUTH_NONE: copy(auth_prov_str, 32, "N/A")
      case DP_AUTH_DPROTO: copy(auth_prov_str, 32, "dproto")
      case DP_AUTH_STEAM: copy(auth_prov_str, 32, "Steam(Native)")
      case DP_AUTH_STEAMEMU: copy(auth_prov_str, 32, "SteamEmu")
      case DP_AUTH_REVEMU: copy(auth_prov_str, 32, "revEmu")
      case DP_AUTH_OLDREVEMU: copy(auth_prov_str, 32, "old revEmu")
      case DP_AUTH_HLTV: copy(auth_prov_str, 32, "HLTV")
      case DP_AUTH_SC2009: copy(auth_prov_str, 32, "SteamClient2009")
      case DP_AUTH_AVSMP: copy(auth_prov_str, 32, "AVSMP")
      default: copy(auth_prov_str, 32, "Erroneous")
   }

   get_user_name (id, user_name, 33)
   g_protocol[id] = proto
   g_provider[id] = auth_prov_str
   server_print("User %s (%d) uses protocol %d; SteamID assigned by %s", user_name, id, proto, auth_prov_str)

   return PLUGIN_HANDLED
}

public native_get_user_protocol(id)
{
   return g_protocol[id]
}

public native_get_user_provider(id)
{
   return g_provider[32][id]
}


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: string to an array
СообщениеДобавлено: 12 апр 2011, 16:10 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
26 мар 2024, 21:42
Сообщения: 6864
Код:
#include <amxmodx>
#include <amxmisc>

enum _:DP_AUTH
{
   DP_AUTH_NONE      = 0,
   DP_AUTH_DPROTO      = 1,
   DP_AUTH_STEAM      = 2,
   DP_AUTH_STEAMEMU   = 3,
   DP_AUTH_REVEMU      = 4,
   DP_AUTH_OLDREVEMU   = 5,
   DP_AUTH_HLTV      = 6,
   DP_AUTH_SC2009      = 7,
   DP_AUTH_AVSMP      = 8,
};

new const DP_PROV[][] =
{
   "N/A",
   "Dproto",
   "Native Steam",
   "SteamEmu",
   "RevEmu",
   "Old RevEmu",
   "HLTV",
   "SteamClient2009",
   "AVSMP",
   "FutureEmulator"
};

new pcv_dp_r_protocol, pcv_dp_r_id_provider;
new g_protocol[33];
new g_provider[33];

native get_user_protocol(id);
native get_user_provider(id, provider[] = "", provider_size = 0);

public plugin_natives()
{
   register_native("get_user_protocol", "native_get_user_protocol");
   register_native("get_user_provider", "native_get_user_provider");
}

public plugin_init()
{
   register_plugin("dproto testing", "1", "");

   register_clcmd("test", "clcmd_test");

   pcv_dp_r_protocol = get_cvar_pointer ("dp_r_protocol");
   pcv_dp_r_id_provider = get_cvar_pointer ("dp_r_id_provider");
}

public clcmd_test(id)
{
   new provider[33];
   server_print("---------------------------");
   server_print("%i", get_user_protocol(id));
   // First call type
   new auth = get_user_provider(id);
   // Second type call
   get_user_provider(id, provider, charsmax(provider));
   server_print("%i, %s", auth, provider);
   server_print("---------------------------");
}

public client_authorized(id)
{
   if (!pcv_dp_r_protocol || !pcv_dp_r_id_provider)
   {
      log_amx("Can't find dp_r_protocol or dp_r_id_provider cvars.");
      return PLUGIN_HANDLED;
   }

   server_cmd("dp_clientinfo %d", id);
   server_exec();
   new proto = get_pcvar_num(pcv_dp_r_protocol);
   new authprov = get_pcvar_num(pcv_dp_r_id_provider);

   new user_name[33];
   get_user_name (id, user_name, charsmax(user_name));

   g_protocol[id] = proto;
   g_provider[id] = authprov;
   if (g_provider[id] < DP_AUTH)
      server_print("User %s (%d) uses protocol %d; SteamID assigned by %s", user_name, id, proto, DP_PROV[g_provider[id]])
   else
      server_print("User %s (%d) uses protocol %d; SteamID assigned by %s%i", user_name, id, proto, DP_PROV[DP_AUTH], g_provider[id])

   return PLUGIN_HANDLED;
}

/// native get_user_protocol(id);
public native_get_user_protocol(plid, num)
{
   if (num != 1)
      return -1;

   new id = get_param(1);
   if (id < 1 || id > 32)
      return -1;

   return g_protocol[id];
}

/// native get_user_provider(id, provider[] = "", provider_size = 0);
public native_get_user_provider(plid, num)
{
   if (num != 3)
      return -1;

   new id = get_param(1);
   if (id < 1 || id > 32)
      return -1;

   new provider_size = get_param(3);
   if (provider_size > 0)
   {
      new provider[33];
      if (g_provider[id] < DP_AUTH)
      {
         copy(provider, provider_size, DP_PROV[g_provider[id]]);
      }
      else
      {
         format(provider, provider_size, "%s%i", DP_PROV[DP_AUTH], g_provider[id]);
      }
      set_string(2, provider, provider_size);
   }
   return g_provider[id];
}
Цитата:
User Lev (1) uses protocol 47; SteamID assigned by Dproto
Цитата:
---------------------------
47
1, Dproto
---------------------------

Main problem you had was in that AMXX functions can't have return type of an array. So you have to pass a buffer to fill it in (along with max buffer size).

Also it is not recommended to use native style 1:
Цитата:
NOTE: Style should always be 0. The "dJeyL" mode value of 1 is deprecated, since it is not properly compatible with any by-reference type.


Вложения:
Скачать плагин или Скачать исходник [dptest.sma - 2.93 КБ]
Скачиваний: 265
Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: string to an array
СообщениеДобавлено: 12 апр 2011, 23:36 
Не в сети
Зарегистрирован:
12 апр 2011, 14:58
Последнее посещение:
12 янв 2014, 06:02
Сообщения: 50
thanks for quick reply. here's 1 question. as im making another plugin that gonna use these 2 natives, i have to put this natives into a .inc, let say dproto.inc. what should i write to dproto.inc?

is this correct?

Код:
#if defined _dproto_included
   #endinput
#endif
#define _dproto_included

native get_user_protocol(id)
native get_user_provider(id)

EDIT: nevermind i think i got it. it should be

Код:
#if defined _dproto_included
   #endinput
#endif
#define _dproto_included

native get_user_protocol(id)
native get_user_provider(id, provider[] = "", provider_size = 0);

i was in hurry and i didnt notice you already wrote that in a comment. thanks Lev


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

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


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

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


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

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