Русское сообщество по скриптингу

Пункт с двумя значениями

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Пункт с двумя значениями

Сообщение ELRI » 02 май 2018, 14:56

Хочу сделать в меню смену языка /rus /eng в 1 кнопке
Аватара пользователя
ELRI
 
Сообщения: 25
Зарегистрирован: 19 ноя 2017, 00:17
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше месяца
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: Пункт с двумя значениями

Сообщение Subb98 » 02 май 2018, 19:45

Код: Выделить всё
new bool:g_bLang[MAX_PLAYERS 1]; 
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Пункт с двумя значениями

Сообщение MrJunior » 02 май 2018, 20:30

Код: Выделить всё
if(g_bLang[id])
{
    
//
}
else
{
    
//
}
 
Аватара пользователя
MrJunior
Скриптер
 
Сообщения: 146
Зарегистрирован: 21 сен 2016, 19:46
Откуда: localhost
Благодарил (а): 3 раз.
Поблагодарили: 31 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn | Web | Lua

Re: Пункт с двумя значениями

Сообщение RevCrew » 02 май 2018, 20:40

Код: Выделить всё
public client_connect(idg_bLang[id] = false
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Пункт с двумя значениями

Сообщение panikajo » 02 май 2018, 21:37

А шо UFPS™ Auto Language уже изъяли из сети?

А еще типо раз
Вы должны зарегистрироваться, чтобы видеть ссылки. ... 9?p=874679


И 2

Код: Выделить всё
#include < amxmodx >
#include < amxmisc >
#include < hamsandwich >

// put a "//" before the line to instantly show menu on spawn
#define SPAWN_WAIT_TIME 6.0

// put a "//" before the line below to always ask every first spawn
#define DONT_ASK_AGAIN

const LANG_SIZE = 3;

new bool:g_bFirstSpawn[ 33 ];

new pCvar_Langs;

new Array:g_aLangs;
new Trie:g_tArrayIndex;
new g_iTotalLangs;

#if defined DONT_ASK_AGAIN
#include < nvault >
new g_hVault;
#endif

public plugin_init( )
{
   register_plugin( "Custom Lang Menu", "0.0.1", "Exolent" );
   
   register_dictionary
( "multilingual.txt" );
   register_dictionary( "languages.txt" );
   register_dictionary( "custom_lang_menu.txt" );
   
   register_clcmd
( "say /lang", "ShowLangMenu" );
   
   RegisterHam
( Ham_Spawn, "player", "FwdPlayerSpawnPost", 1 );
   
   pCvar_Langs 
= register_cvar( "amx_menu_langs", "en,lt" );
   
   g_aLangs 
= ArrayCreate( LANG_SIZE );
   g_tArrayIndex = TrieCreate( );
   
#if defined DONT_ASK_AGAIN
   g_hVault = nvault_open( "player_lang" );
#endif
}

public plugin_cfg( )
{
   LoadLangs( );
}

public plugin_end( )
{
   ArrayDestroy( g_aLangs );
   TrieDestroy( g_tArrayIndex );
   
#if defined DONT_ASK_AGAIN
   nvault_close( g_hVault );
#endif
}

#if defined DONT_ASK_AGAIN
public client_authorized( iPlayer )
{
   new szAuthid[ 35 ];
   get_user_authid( iPlayer, szAuthid, charsmax( szAuthid ) );
   
   new szLang
[ LANG_SIZE ];
   if( !nvault_get( g_hVault, szAuthid, szLang, charsmax( szLang ) ) )
   {
      g_bFirstSpawn[ iPlayer ] = true;
   }
   else
   
{
      set_user_info( iPlayer, "lang", szLang );
   }
}
#else
public client_connect( iPlayer )
{
   g_bFirstSpawn[ iPlayer ] = true;
}
#endif

public client_disconnect( iPlayer )
{
   g_bFirstSpawn[ iPlayer ] = false;
}

public FwdPlayerSpawnPost( iPlayer )
{
   if( is_user_alive( iPlayer )
   &&  g_bFirstSpawn[ iPlayer ] )
   {
      g_bFirstSpawn[ iPlayer ] = false;
      
#if defined SPAWN_WAIT_TIME
      set_task( SPAWN_WAIT_TIME, "ShowLangMenu", iPlayer );
#else
      ShowLangMenu( iPlayer );
#endif
   }
}

public ShowLangMenu( iPlayer )
{
   if( !g_iTotalLangs )
   {
      client_cmd( iPlayer, "amx_langmenu" );
   }
   else
   
{
      new szLang[ LANG_SIZE ];
      get_user_info( iPlayer, "lang", szLang, charsmax( szLang ) );
      
      new szTitle
[ 96 ];
      new iLen = formatex( szTitle, charsmax( szTitle ), "%L:", iPlayer, "CHOOSE_YOUR_LANG" );
      
      if
( TrieKeyExists( g_tArrayIndex, szLang ) )
      {
         iLen += formatex( szTitle[ iLen ], charsmax( szTitle ) - iLen, "^n%L: \w%L", iPlayer, "CURRENT", szLang, "LANG_NAME" );
      }
      
      new hMenu 
= menu_create( szTitle, "MenuLang" );
      
      new szItem
[ 64 ];
      
      for
( new i = 0; i < g_iTotalLangs; i++ )
      {
         ArrayGetString( g_aLangs, i, szLang, charsmax( szLang ) );
         
         formatex
( szItem, charsmax( szItem ), "%L", szLang, "LANG_NAME" );
         
         menu_additem
( hMenu, szItem, szLang );
      }
      
      formatex
( szItem, charsmax( szItem ), "\y%L", iPlayer, "OTHER" );
      
      menu_additem
( hMenu, szItem, "**" );
      
      menu_display
( iPlayer, hMenu );
   }
}

public MenuLang( iPlayer, hMenu, iItem )
{
   if( iItem == MENU_EXIT )
   {
      goto exit_menu;
   }
   
   new iAccess
, szLang[ LANG_SIZE ], hCallback;
   menu_item_getinfo( hMenu, iItem, iAccess, szLang, charsmax( szLang ), _, _, hCallback );
   
   if
( equal( szLang, "**" ) )
   {
      client_cmd( iPlayer, "amx_langmenu" );
   }
   else
   
{
      new szCurLang[ LANG_SIZE ];
      get_user_info( iPlayer, "lang", szCurLang, charsmax( szCurLang ) );
      
      new szLangName
[ 32 ];
      formatex( szLangName, charsmax( szLangName ), "%L", szLang, "LANG_NAME" );
      
      if
( !equal( szLang, szCurLang ) )
      {
         set_user_info( iPlayer, "lang", szLang );
         
         client_print
( iPlayer, print_chat, "[AMXX] %L", iPlayer, "SET_LANG_USER", szLangName );
         
#if defined DONT_ASK_AGAIN
         new szAuthid[ 35 ];
         get_user_authid( iPlayer, szAuthid, charsmax( szAuthid ) );
         nvault_set( g_hVault, szAuthid, szLang );
#endif
      }
      else
      
{
         client_print( iPlayer, print_chat, "[AMXX] %L", iPlayer, "ALREADY_YOUR_LANG", szLangName );
      }
   }
   
   exit_menu
:
   menu_destroy( hMenu );
}

LoadLangs( )
{
   new szCvarValue[ 128 ];
   get_pcvar_string( pCvar_Langs, szCvarValue, charsmax( szCvarValue ) );
   
   new szLang
[ LANG_SIZE ], iPos;
   
   while
( ( iPos = contain( szCvarValue, "," ) ) >= 0 )
   {
      copy( szLang, min( charsmax( szLang ), iPos ), szCvarValue );
      copy( szCvarValue, charsmax( szCvarValue ), szCvarValue[ iPos + 1 ] );
      
      if
( !TrieKeyExists( g_tArrayIndex, szLang )
      &&  lang_exists( szLang ) )
      {
         ArrayPushString( g_aLangs, szLang );
         TrieSetCell( g_tArrayIndex, szLang, g_iTotalLangs++ );
      }
   }
   
   if
( !TrieKeyExists( g_tArrayIndex, szCvarValue )
   &&  lang_exists( szCvarValue ) )
   {
      ArrayPushString( g_aLangs, szCvarValue );
      TrieSetCell( g_tArrayIndex, szCvarValue, g_iTotalLangs++ );
   }
}


custom_lang_menu.txt

[en]
CHOOSE_YOUR_LANG = Choose your language
CURRENT = Current
ALREADY_YOUR_LANG = %s is already your language!
OTHER = Other
[ru]
CHOOSE_YOUR_LANG = Выберите ваш язык
CURRENT = Текущий
ALREADY_YOUR_LANG = %s язык активирован!
OTHER = Другой...
Аватара пользователя
panikajo
 
Сообщения: 118
Зарегистрирован: 22 янв 2012, 19:15
Благодарил (а): 7 раз.
Поблагодарили: 1 раз.


Вернуться в Скриптинг

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

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