AMX MOD X
Вторник, 23.04.2024, 12:52:38



Приветствую Вас Гость | RSS
[ Главная ] [ Создание menu. - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Создание menu. (выложите код, плз.)
Создание menu.
He_npeTДата: Среда, 19.09.2007, 03:34:51 | Сообщение # 1
Генерал-майор
Группа: Скриптеры
Сообщений: 292
Репутация: 7
Статус: Не в сети
Можыте пожалйсто написать и выложить код на создание menu слейдующего примера.

say /menu

Menu name
1. event1
2. event2
3. event3 *
4. event4 *

0. close.

То-есть при нажатие 2 ничего не будет (и menu не закроется).


My CS 1.6 Non-Steam AmXX Server! (HLSW) Play with steam - get autorslot

Сообщение отредактировал He_npeT - Среда, 19.09.2007, 03:40:45
 
AlModДата: Среда, 19.09.2007, 06:46:39 | Сообщение # 2
Сонный кодер
Группа: Админы
Сообщений: 600
Репутация: 27
Статус: Не в сети
ЧТобы писать разными цветами добавляй перед текстом
\y (жёлтый)
\r (красный)
\d (гашеный [серый])
\w (белый)

а чтобы ничего не происходило при нажатии на "2" просто не создавай kеу с флагом (1<<1)


 
He_npeTДата: Среда, 19.09.2007, 08:27:23 | Сообщение # 3
Генерал-майор
Группа: Скриптеры
Сообщений: 292
Репутация: 7
Статус: Не в сети
Ясно, осталось токо саму основу (что писать в plugin_init и event'e которое вызывает menu).

My CS 1.6 Non-Steam AmXX Server! (HLSW) Play with steam - get autorslot
 
slogicДата: Среда, 19.09.2007, 14:54:46 | Сообщение # 4
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
старая система: http://forums.alliedmods.net/showthread.php?t=14637
новая система: http://forums.alliedmods.net/showthread.php?t=46364
 
He_npeTДата: Среда, 19.09.2007, 21:28:44 | Сообщение # 5
Генерал-майор
Группа: Скриптеры
Сообщений: 292
Репутация: 7
Статус: Не в сети
Ясно. Последний вопрос, что зделать (написать) в switch(key)...case 9: чтобы закрыть menu?

===

Разобрался, но есть 1 беда. Как пропустить key (тоесть чтобы после 1 шло 3 к примеру. menu_addblank(menuid, 0) не помогает...)? Если что - пользуюсь новым вибом создания menu.


My CS 1.6 Non-Steam AmXX Server! (HLSW) Play with steam - get autorslot

Сообщение отредактировал He_npeT - Пятница, 21.09.2007, 12:24:04
 
X-factorДата: Суббота, 04.10.2008, 18:58:31 | Сообщение # 6
Лейтенант
Группа: Пользователи
Сообщений: 58
Репутация: 2
Статус: Не в сети
Всем привет!!!
У меня есть вопрос по созданию меню!!! Мне нада зделать так, как и в стандартном бан меню, но токо, что бы выполнялась команда не amx_ban or amx_banip, а моя команда (amx_anythink)!!! И чтобы в списке справа от ника ещё IP игрока писался!!!
Вот я на примере из плага plmenu.amxx зделал так
Code
#include <amxmodx>
#include <amxmisc>
#include <cstrike>

new g_menuPosition[33]
new g_menuPlayers[33][32]
new g_menuPlayersNum[33]
new g_menuOption[33]
new g_menuSettings[33]

new g_coloredMenus

public plugin_init()
{
  // Регистрируем плагин
  register_plugin("BanShotMenu","0.1","X-factor");
         register_clcmd("amx_bsmenu", "BanShotMenu", ADMIN_BAN, "- displays banshot menu")
         register_menucmd(register_menuid("BanShot Menu"), 1023, "actionBanShotMenu")
  g_coloredMenus = colored_menus()
  register_dictionary("common.txt")
  register_dictionary("admincmd.txt")
  register_dictionary("plmenu.txt")
}

public actionBanShotMenu(id, key)
{
  switch (key)
  {
   case 7:
   {
    /* BEGIN OF CHANGES BY MISTAGEE ADDED A FEW MORE OPTIONS */
     
    ++g_menuOption[id]
    g_menuOption[id] %= 7

    switch (g_menuOption[id])
    {
     case 0: g_menuSettings[id] = 0
     case 1: g_menuSettings[id] = 5
     case 2: g_menuSettings[id] = 10
     case 3: g_menuSettings[id] = 15
     case 4: g_menuSettings[id] = 30
     case 5: g_menuSettings[id] = 45
     case 6: g_menuSettings[id] = 60
    }

    displayBanShotMenu(id, g_menuPosition[id])
   }
   case 8: displayBanShotMenu(id, ++g_menuPosition[id])
   case 9: displayBanShotMenu(id, --g_menuPosition[id])
   default:
   {
    new player = g_menuPlayers[id][g_menuPosition[id] * 7 + key]
    new name[32], name2[32], authid[32], authid2[32]
    
    get_user_name(player, name2, 31)
    get_user_authid(id, authid, 31)
    get_user_authid(player, authid2, 31)
    get_user_name(id, name, 31)
     
    new userid2 = get_user_userid(player)

    log_amx("Ban: ^"%s<%d><%s><>^" ban and kick ^"%s<%d><%s><>^" (minutes ^"%d^")", name, get_user_userid(id), authid, name2, userid2, authid2, g_menuSettings[id])

    switch (get_cvar_num("amx_show_activity"))
    {
     case 2: client_print(0, print_chat, "%L", LANG_PLAYER, "ADMIN_BAN_2", name, name2)
     case 1: client_print(0, print_chat, "%L", LANG_PLAYER, "ADMIN_BAN_1", name2)
    }

/* ---------- check for Steam ID added by MistaGee --------------------  
    IF AUTHID == 4294967295 OR VALVE_ID_LAN OR HLTV, BAN PER IP TO NOT BAN EVERYONE */
     
    if (equal("4294967295", authid2)
     || equal("HLTV", authid2)
     || equal("STEAM_ID_LAN", authid2)
     || equal("STEAM_ID_PENDING", authid2)
     || equal("STEAM_154:88:666", authid2)
     || equal("STEAM_666:88:666", authid2)
     || equal("VALVE_ID_PENDING", authid2)
     || equali("VALVE_ID_LAN", authid2))
    {
     /* END OF MODIFICATIONS BY MISTAGEE */

     new ipa[32]
     get_user_ip(player, ipa, 31, 1)
      
     server_cmd("addip %d %s;writeip", g_menuSettings[id], ipa)
    }
    else
    {
     server_cmd("amx_banshot %d #%d kick;writeid", g_menuSettings[id], userid2)
    }

    server_exec()

    displayBanShotMenu(id, g_menuPosition[id])
   }
  }
   
  return PLUGIN_HANDLED
}

displayBanShotMenu(id, pos)
{
  if (pos < 0)
   return

  get_players(g_menuPlayers[id], g_menuPlayersNum[id])

  new menuBody[512]
  new b = 0
  new i
  new name[32]
  new start = pos * 7

  if (start >= g_menuPlayersNum[id])
   start = pos = g_menuPosition[id] = 0

  new len = format(menuBody, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "BANSHOT_MENU", pos + 1, (g_menuPlayersNum[id] / 7 + ((g_menuPlayersNum[id] % 7) ? 1 : 0)))
  new end = start + 7
  new keys = MENU_KEY_0|MENU_KEY_8

  if (end > g_menuPlayersNum[id])
   end = g_menuPlayersNum[id]

  for (new a = start; a < end; ++a)
  {
   i = g_menuPlayers[id][a]
   get_user_name(i, name, 31)

   if (is_user_bot(i) || access(i, ADMIN_IMMUNITY))
   {
    ++b
     
    if (g_coloredMenus)
     len += format(menuBody[len], 511-len, "\d%d. %s^n\w", b, name)
    else
     len += format(menuBody[len], 511-len, "#. %s^n", name)
   } else {
    keys |= (1<<b)
      
    if (is_user_admin(i))
     len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s \r*^n\w" : "%d. %s *^n", ++b, name)
    else
     len += format(menuBody[len], 511-len, "%d. %s^n", ++b, name)
  }
}
          
  if (g_menuSettings[id])
   len += format(menuBody[len], 511-len, "^n8. %L^n", id, "BAN_FOR_MIN", g_menuSettings[id])
  else
   len += format(menuBody[len], 511-len, "^n8. %L^n", id, "BAN_PERM")

  if (end != g_menuPlayersNum[id])
  {
   format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT")
   keys |= MENU_KEY_9
  }
  else
   format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT")

  show_menu(id, keys, menuBody, -1, "BanShot Menu")
}

public BanShotMenu(id, level, cid)
{
  if (!cmd_access(id, level, cid, 1))
   return PLUGIN_HANDLED

  g_menuOption[id] = 1
  g_menuSettings[id] = 5
  displayBanShotMenu(id, g_menuPosition[id] = 0)

  return PLUGIN_HANDLED
}

Я подумал, что эти строчки отвичают за выполнение команды при нажатии на цифру игрока:

Code
server_cmd("addip %d %s;writeip", g_menuSettings[id], ipa)
    }
    else
    {
     server_cmd("amx_banshot %d #%d kick;writeid", g_menuSettings[id], userid2)
    }

И я уже вписал вместо addbanid свою нужную команду amx_banshot, но мне кажется, что я неправильно зделал! Больше я в коде негде невижу подходящего места!
Ещё, как я уже говорил нада после ника ип что ба был! Наверно нада воспользоватся командой get_user_ip, ноя незнаю, как ее дальше описывать!!!
Помогите пожайлуста!!! И подскажите пожайлуста, где можна взять книгу по языку PAWN на русском языке!!!
 
PomanoBДата: Суббота, 04.10.2008, 20:00:35 | Сообщение # 7
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Команду ты поставил правильно
Что бы ип показывало надо получить его:
Code

new ipa[32]   
get_user_ip(player, ipa, 31, 1)

И потом в строчках вида
Code
format(menuBody[len], 511-len, "\d%d. %s^n\w", b, name)   

Поставить
Code

format(menuBody[len], 511-len, "\d%d. %s - IP: %s^n\w", b, name,ipa)

Насколько я знаю книги по Pawn на русском языке не существует :)
Есть раздел переведённых статей из Wiki - http://wiki.amxmodx.org/Category:Russian


http://romanov4400.mybrute.com

Сообщение отредактировал PomanoB - Суббота, 04.10.2008, 20:00:58
 
X-factorДата: Суббота, 04.10.2008, 20:39:09 | Сообщение # 8
Лейтенант
Группа: Пользователи
Сообщений: 58
Репутация: 2
Статус: Не в сети
PomanoB
О, я точно так же делал, но я видимо нетуда вписывал строки:
Code
new ipa[32]    
get_user_ip(player, ipa, 31, 1)

И при компиляции выбивало ошибки, что якобы неизвестный индентификатор player, потом я посмотрел выше в коде как плеер описуется зделал также:
Code
new player = g_menuPlayers[id][g_menuPosition[id] * 7 + key]
new ipa[32]
get_user_ip(player, ipa, 31, 1)

Теперь стало нехватать ";" и неизвесный идентификатор key!!!

Можеш точно написать, где именно вставлять код:

Code
new ipa[32]    
get_user_ip(player, ipa, 31, 1)
 
PomanoBДата: Суббота, 04.10.2008, 21:02:12 | Сообщение # 9
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
внутри цикла
Code

for (new a = start; a < end; ++a)    

и использовать надо индекс игрока не player (это я как пример привёл) а
Code
new ip2[32]    
get_user_ip(g_menuPlayers[id][a], ip2, 31, 1)

Кинь сюда полностью текст плагина только вложением
Так читать неудобно


http://romanov4400.mybrute.com

Сообщение отредактировал PomanoB - Суббота, 04.10.2008, 21:23:24
 
X-factorДата: Суббота, 04.10.2008, 21:30:47 | Сообщение # 10
Лейтенант
Группа: Пользователи
Сообщений: 58
Репутация: 2
Статус: Не в сети
PomanoB
Блин, выбивает ошибку argument type mismach (argument 2)
Я зделал так:
Code
for (new a = start; a < end; ++a)
  {
    
   new ip2
   i = g_menuPlayers[id][a]
   get_user_name(i, name, 31)
   get_user_ip(i, ip2, 31, 1)
    

   if (is_user_bot(i) || access(i, ADMIN_IMMUNITY))
   {
    ++b
     
    if (g_coloredMenus)
     len += format(menuBody[len], 511-len, "\d%d. %s^n\w", b, name, ip2)
    else
     len += format(menuBody[len], 511-len, "#. %s^n", name, ip2)
   } else {
    keys |= (1<<b)
      
    if (is_user_admin(i))
     len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s \r*^n\w" : "%d. %s *^n", ++b, name, ip2)
    else
     len += format(menuBody[len], 511-len, "%d. %s^n", ++b, name, ip2)
  }
}

В чём же проблема?
 
PomanoBДата: Суббота, 04.10.2008, 21:41:56 | Сообщение # 11
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
ты объявляешь ip не как массив надо
Code

new ip2[32]

прикрепи полный код, сделаю


http://romanov4400.mybrute.com

Сообщение отредактировал PomanoB - Суббота, 04.10.2008, 21:44:28
 
X-factorДата: Суббота, 04.10.2008, 21:56:09 | Сообщение # 12
Лейтенант
Группа: Пользователи
Сообщений: 58
Репутация: 2
Статус: Не в сети
Смотри мое первое сообщение! Там, где начинается со строк "Всем привет!!!" там мой полный код!!!

Добавлено (2008-10-04, 9:48 Pm)
---------------------------------------------
Да, точно пропустил [32]!!! Все получилось Спасибище тебе огромное!!!!!

Добавлено (2008-10-04, 9:56 Pm)
---------------------------------------------
Странно, но IP не полазывает!!! :( Как и раньше, только ник!!! :(

 
PomanoBДата: Суббота, 04.10.2008, 22:01:43 | Сообщение # 13
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Попробуй мой вариант
И там исправь ещё server_cmd
Там два случая есть
Или скажи мне параметры команды я исправлю

У меня мой вариант ип показывает

Прикрепления: banshot.sma (4.7 Kb)


http://romanov4400.mybrute.com

Сообщение отредактировал PomanoB - Суббота, 04.10.2008, 22:07:44
 
X-factorДата: Суббота, 04.10.2008, 22:26:26 | Сообщение # 14
Лейтенант
Группа: Пользователи
Сообщений: 58
Репутация: 2
Статус: Не в сети
PomanoB
А я ж незнал, что нада еще в эти иероглифи чтото добавлять!!!
Code
"\d%d. %s - IP:%s^n\w"

Я так понимая они означают символы букв и цифр?
 
PomanoBДата: Суббота, 04.10.2008, 22:30:35 | Сообщение # 15
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
%d, %f, %s, %c – специальные элементы, используемые для форматирования целого числа, дробного числа, строки и символа соответственно.

"Иероглифы" есть в моём первом посте
И читай
http://wiki.amxmodx.org/Ru_Fundamental_Basics_of_AMX_Mod_X_Scripting


http://romanov4400.mybrute.com
 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Создание menu. (выложите код, плз.)
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

AMX Mod X Russian Community © 2006-2024