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

[INC] Tutor API

Статьи или фрагменты кода для новичков и уже опытных скриптеров по AMXX.

Модератор: Chuvi

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

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

[INC] Tutor API

Сообщение Retro-kolt Lincoln » 27 апр 2012, 23:23

Автор: Вы должны зарегистрироваться, чтобы видеть ссылки.
Источник: Вы должны зарегистрироваться, чтобы видеть ссылки.
Версия: Alpha
Статью писал: Вы должны зарегистрироваться, чтобы видеть ссылки.

Предисловие:
В этой статье мы рассмотрим использование тутор сообщений из кондишен зеро с помощью API от Вы должны зарегистрироваться, чтобы видеть ссылки.

Основные функции:
* Создание тутор сообщений используя различные стили.
* Возможность выставлять длительность сообщения, так же можно сделать чтобы сообщение не пропадало, то есть перманентные сообщения.
* Возможность писать сообщения в любой кодировке на русском, хоть в Ansi хоть в UTF-8, русский текст не когда не исказится.
* Выставление надёжности сообщение, при обычной надёжности сообщение будет отправляется с аргументом MSG_ONE_UNRELIABLE, при максимальной надёжности с MSG_ONE.
* Сообщения поддерживают любые аргументы.
* Хорошая поддержка ML
* Установлен лимит символов для сообщения, при слишком большой длине сообщения сервер не будет вылетать.

Установка:
Распакуйте содержимое архива в ГЛАВНУЮ папку с сервером. Скомпилируйте исходник TutorAPI.sma и пропишите его в plugins.ini.

Natives:
Код: Выделить всё
native TutorShow(iEntity = 0, iType = TutorTypeDefault, Float:fTime = 0.0, iSound = TutorSoundNone, const iMessage[], any:...); 

Описание:
Показывает тутор сообщение игроку/игрокам.

Аргументы:
| Название | Тип | По умолчанию | Описание
----------------------------------------------------------------------------------------
| iEntity | Целочисленное | 0 | Индекс игрока которому показывать сообщение (0 - всем)
| iType | Целочисленное | TutorTypeDefault | Стиль сообщения (смотрите стили выше)
| fTime | Дробное | 0.0 | Время показа тутор сообщения (0.0 - бесконечно)
| iSound | Целочисленное | TutorSoundNone | Звук при сообщении (смотрите звуки выше)
| iMessage | Целочисленное | отсутствует | Сообщение
| ... | отсутствует | отсутствует | Аргументы к сообщению

Примеры:
Код: Выделить всё
TutorShow(0, TutorTypeScenario, 0.0, TutorSoundTaskComplete, "You are complete your %d task!", 5);
TutorShow(id, TutorTypeHint, 5.0, TutorSoundTutorMsg, "To buy weapon press ^"B^" key"); 


Код: Выделить всё
native TutorClose(iEntity = 0); 

Описание:
Закрывает тутор у игрока/игроков.

Аргументы:
| Название | Тип | По умолчанию | Описание
----------------------------------------------------------------------------------------
| iEntity | Целочисленное | 0 | Индекс игрока которому надо закрыть сообщение (0 - всем)

Примеры:
Код: Выделить всё
TutorClose(id);
TutorClose(0); 


Код: Выделить всё
native TutorReliable(bool:bReliable); 

Описание:
Изменяет надёжность сообщений тутора, а также звуков. Если не знаете зачем это, не используйте !!!

Аргументы:
| Название | Тип | По умолчанию | Описание
----------------------------------------------------------------------------------------
| bReliable | Булевая | false | Надёжность

Примеры:
Код: Выделить всё
TutorReliable(false);
TutorReliable(true); 


Использование:
Откройте ваш плагин который вы будете модифицировать и добавьтев него после ваших инклудов:
Код: Выделить всё
#include <TutorAPI>       

После используйте нужные нативы которые написаны выше.

Пример использования:
Код: Выделить всё
#include <amxmodx>
#include <TutorApi>
 
#define PLUGIN  ""
#define VERSION ""
#define AUTHOR  ""
 
public plugin_init
()
{
        register_plugin(PLUGIN, VERSION, AUTHOR)
        register_clcmd("say /rs", "rs")
}
 
public rs
(id)
{
        new players[32]
        get_user_name(id, players, 31)
        
        if 
(is_user_connected(id))
        {
                set_user_frags(id, 0)
                cs_set_user_deaths(id, 0)
        
                TutorShow
(0, TutorTypeDefault, 5.0, TutorSoundTutorMsg, "%s обновил свой счёт!", players)
        }
        
        return PLUGIN_HANDLED
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Retro-kolt Lincoln 28 апр 2012, 13:54, всего редактировалось 8 раз(а).
Аватара пользователя
Retro-kolt Lincoln
 
Сообщения: 1283
Зарегистрирован: 28 авг 2010, 19:16
Благодарил (а): 321 раз.
Поблагодарили: 581 раз.
Опыт программирования: Больше трех лет
Языки программирования: ╚►Counter-Strike 1.6

Re: [INC] Tutor API

Сообщение Plrip » 10 июл 2012, 21:06

чё то форум лагает

Status:
Аватара пользователя
Plrip
Скриптер
 
Сообщения: 2903
Зарегистрирован: 03 дек 2011, 19:33
Откуда: Ukraine
Благодарил (а): 237 раз.
Поблагодарили: 603 раз.
Языки программирования: Counter-Strike 1.6
X-Ray
Killing-Floor [low]

Re: [INC] Tutor API

Сообщение Plrip » 10 июл 2012, 21:50

[pawn]
  1. #include <amxmodx>

  2. #include <amxmisc>

  3. #include <TutorAPI>

  4.  

  5. new g_Ping[33]

  6. new g_Samples[33]

  7.  

  8. public plugin_init()

  9. {

  10.   register_plugin("High Ping Kicker (WON)","0.16.2","OLO/shadow")

  11.   register_concmd("amx_hpk","cmdHpk",ADMIN_KICK,"- configures high_ping_kicker plugin")

  12.   register_cvar("amx_hpk_ping","100")

  13.   register_cvar("amx_hpk_check","12")

  14.   register_cvar("amx_hpk_tests","5")

  15.   register_cvar("amx_hpk_delay","60")

  16.  

  17.   if ( get_cvar_num( "amx_hpk_check" ) < 5 ) set_cvar_num( "amx_hpk_check" , 5 )

  18.   if ( get_cvar_num( "amx_hpk_tests" ) < 3 ) set_cvar_num( "amx_hpk_tests" , 3 )

  19. }

  20.  

  21. public client_disconnect(id)

  22.   remove_task( id )

  23.  

  24. public client_putinserver(id)

  25. {    

  26.   g_Ping[id] = 0

  27.   g_Samples[id] = 0

  28.  

  29.   if ( !is_user_bot(id) )

  30.   {

  31.     new param[1]

  32.     param[0] = id

  33.     set_task( 10.0 , "showWarn" , id , param , 1 )

  34.    

  35.     if (get_cvar_num("amx_hpk_tests") != 0) {

  36.        set_task( float(get_cvar_num("amx_hpk_delay")), "taskSetting", id, param , 1)

  37.     }

  38.     else {      

  39.        set_task( float(get_cvar_num( "amx_hpk_tests" )) , "checkPing" , id , param , 1 , "b" )

  40.    }

  41.    

  42.   }

  43. }

  44.  

  45. public showWarn(param[])

  46.    TutorShow(param[0], TutorTypeScenario, 5.0, TutorSoundTutorMsg, "Игроки с пингом выше %d будут удалены с сервера!", 0, get_cvar_num( "amx_hpk_ping" ));

  47.  

  48. public taskSetting(param[]) {

  49.    new name[32]

  50.    get_user_name(param[0],name,31)

  51.    set_task( float(get_cvar_num( "amx_hpk_tests" )) , "checkPing" , param[0] , param , 1 , "b" )

  52. }

  53.  

  54. kickPlayer( id )

  55. {

  56.    new name[32],authid[32]

  57.    get_user_name(id,name,31)

  58.    get_user_authid(id,authid,31)

  59.  

  60.    TutorShow(0, TutorTypeScenario, 5.0, TutorSoundTutorMsg, "Игрок %s удалён с сервера из-за высокого пинга!", 0, name);

  61.  

  62.    client_cmd(id,"echo ^"Извените у Вас высокий пинг, попробуйте позднее..^";disconnect")

  63.    remove_task(id)

  64.    log_amx("Highpingkick: ^"%s<%d><%s>^" was kicked due highping (Average Ping ^"%d^")",

  65.     name,get_user_userid(id),authid,(g_Ping[id] / g_Samples[id]))

  66.  

  67. }

  68.  

  69. public checkPing(param[])

  70. {

  71.   new id = param[ 0 ]

  72.  

  73.   if ( get_user_flags(id) & ADMIN_IMMUNITY ) return

  74.  

  75.   new p, l

  76.  

  77.   get_user_ping( id , p , l )

  78.  

  79.   g_Ping[ id ] += p

  80.   ++g_Samples[ id ]

  81.  

  82.   if ( (g_Samples[ id ] > get_cvar_num( "amx_hpk_tests" )) && (g_Ping[id] / g_Samples[id] > get_cvar_num( "amx_hpk_ping" ))  )    

  83.     kickPlayer(id)

  84. }

  85.  

  86.  

  87. public cmdHpk(id,level,cid){

  88.   if (!cmd_access(id,level,cid,1))

  89.     return PLUGIN_HANDLED

  90.    

  91.   new ping[5]

  92.   new check_arr[5]

  93.   new tests_arr[5]

  94.   new delay_arr[5]

  95.   read_argv(1,ping,4)

  96.   read_argv(2,check_arr,4)

  97.   read_argv(3,tests_arr,4)

  98.   read_argv(4,delay_arr,4)

  99.  

  100.   new check = str_to_num(check_arr)

  101.   new tests = str_to_num(tests_arr)

  102.   new delay = str_to_num(delay_arr)

  103.  

  104.  

  105.   if ( check < 5 ) check = 5

  106.   if ( tests < 3 ) tests = 3

  107.  

  108.  

  109.   if (read_argc() > 1){

  110.     set_cvar_string("amx_hpk_ping",ping)

  111.   }

  112.   if (read_argc() > 2) {

  113.    set_cvar_num("amx_hpk_check",check)

  114.   }

  115.   if (read_argc() > 3) {

  116.    set_cvar_num("amx_hpk_tests",tests)

  117.   }

  118.   if (read_argc() > 4) {

  119.      set_cvar_num("amx_hpk_delay",delay)

  120. }

  121.  

  122.   console_print(id,"Syntax: amx_hpk <ping to get kicked> <checks before kicks> <time between checks> <delay before first check in sec.>")

  123.   console_print(id,"Current High_Ping_Kicker Settings:")

  124.   console_print(id,"Maxping: %d  Time between checks: %d Checkcount: %d Delay: %d",get_cvar_num("amx_hpk_ping"),get_cvar_num("amx_hpk_check"),get_cvar_num("amx_hpk_tests"),get_cvar_num("amx_hpk_delay"))

  125.   return PLUGIN_HANDLED    

  126. }
[/pawn]

Status:
Аватара пользователя
Plrip
Скриптер
 
Сообщения: 2903
Зарегистрирован: 03 дек 2011, 19:33
Откуда: Ukraine
Благодарил (а): 237 раз.
Поблагодарили: 603 раз.
Языки программирования: Counter-Strike 1.6
X-Ray
Killing-Floor [low]

Re: [INC] Tutor API

Сообщение Plrip » 10 июл 2012, 23:18

/*================================================================================

----------------------
-*- [ZP] Main Menu -*-
----------------------

This plugin is part of Zombie Plague Mod and is distributed under the
terms of the GNU General Public License. Check ZP_ReadMe.txt for details.

================================================================================*/

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#define LIBRARY_BUYMENUS "zp50_buy_menus"
#include <zp50_buy_menus>
#define LIBRARY_ZOMBIECLASSES "zp50_class_zombie"
#include <zp50_class_zombie>
#define LIBRARY_HUMANCLASSES "zp50_class_human"
#include <zp50_class_human>
#define LIBRARY_ITEMS "zp50_items"
#include <zp50_items>
#define LIBRARY_ADMIN_MENU "zp50_admin_menu"
#include <zp50_admin_menu>
#include <zp50_colorchat>
#include <dhudmessage>

#define TASK_WELCOMEMSG 100

// CS Player PData Offsets (win32)
const OFFSET_CSMENUCODE = 205

// Menu keys
const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0

#define flag_get(%1,%2) (%1 & (1 << (%2 & 31)))
#define flag_get_boolean(%1,%2) (flag_get(%1,%2) ? true : false)
#define flag_set(%1,%2) %1 |= (1 << (%2 & 31))
#define flag_unset(%1,%2) %1 &= ~(1 << (%2 & 31))

new g_ChooseTeamOverrideActive

new cvar_buy_custom_primary, cvar_buy_custom_secondary, cvar_buy_custom_grenades

public plugin_init()
{
register_plugin("[ZP] Main Menu", ZP_VERSION_STRING, "ZP Dev Team")

register_event("HLTV", "event_round_start", "a", "1=0", "2=0")

register_clcmd("chooseteam", "clcmd_chooseteam")

register_clcmd("say /zpmenu", "clcmd_zpmenu")
register_clcmd("say zpmenu", "clcmd_zpmenu")

// Menus
register_menu("Main Menu", KEYSMENU, "menu_main")
}

public plugin_natives()
{
set_module_filter("module_filter")
set_native_filter("native_filter")
}
public module_filter(const module[])
{
if (equal(module, LIBRARY_BUYMENUS) || equal(module, LIBRARY_ZOMBIECLASSES) || equal(module, LIBRARY_HUMANCLASSES) || equal(module, LIBRARY_ITEMS) || equal(module, LIBRARY_ADMIN_MENU))
return PLUGIN_HANDLED;

return PLUGIN_CONTINUE;
}
public native_filter(const name[], index, trap)
{
if (!trap)
return PLUGIN_HANDLED;

return PLUGIN_CONTINUE;
}

public plugin_cfg()
{
cvar_buy_custom_primary = get_cvar_pointer("zp_buy_custom_primary")
cvar_buy_custom_secondary = get_cvar_pointer("zp_buy_custom_secondary")
cvar_buy_custom_grenades = get_cvar_pointer("zp_buy_custom_grenades")
}

// Event Round Start
public event_round_start()
{
// Show main menu message
remove_task(TASK_WELCOMEMSG)
set_task(2.0, "task_welcome_msg", TASK_WELCOMEMSG)
}

// Welcome Message Task
public task_welcome_msg()
{
zp_colored_print(0, "***^x04Zombie Plague %s^x01***", ZP_VERSION_STR_LONG)
//zp_colored_print(0, "%L", LANG_PLAYER, "NOTICE_INFO1")
set_dhudmessage(0, 255, 0, -1.0, 0.8, 0, 6.0, 12.0)
show_dhudmessage(0, "%L", LANG_PLAYER, "NOTICE_INFO1")
}

public clcmd_chooseteam(id)
{
if (flag_get(g_ChooseTeamOverrideActive, id))
{
show_menu_main(id)
return PLUGIN_HANDLED;
}

flag_set(g_ChooseTeamOverrideActive, id)
return PLUGIN_CONTINUE;
}

public clcmd_zpmenu(id)
{
show_menu_main(id)
}

public client_putinserver(id)
{
flag_set(g_ChooseTeamOverrideActive, id)
}

// Main Menu
show_menu_main(id)
{
static menu[250]
new len

// Title
len += formatex(menu[len], charsmax(menu) - len, "\yZombie Plague %s^n^n", ZP_VERSION_STR_LONG)

// 1. Buy menu
if (LibraryExists(LIBRARY_BUYMENUS, LibType_Library) && (get_pcvar_num(cvar_buy_custom_primary)
|| get_pcvar_num(cvar_buy_custom_secondary) || get_pcvar_num(cvar_buy_custom_grenades)) && is_user_alive(id))
len += formatex(menu[len], charsmax(menu) - len, "\r1.\w %L^n", id, "MENU_BUY")
else
len += formatex(menu[len], charsmax(menu) - len, "\d1. %L^n", id, "MENU_BUY")

// 2. Extra Items
if (LibraryExists(LIBRARY_ITEMS, LibType_Library) && is_user_alive(id))
len += formatex(menu[len], charsmax(menu) - len, "\r2.\w %L^n^n^n", id, "MENU_EXTRABUY")
else
len += formatex(menu[len], charsmax(menu) - len, "\d2. %L^n^n^n", id, "MENU_EXTRABUY")

// 5. Help
len += formatex(menu[len], charsmax(menu) - len, "\r5.\w %L^n^n", id, "MENU_INFO")

// 9. Admin menu
if (LibraryExists(LIBRARY_ADMIN_MENU, LibType_Library) && is_user_admin(id))
len += formatex(menu[len], charsmax(menu) - len, "\r9.\w %L", id, "MENU_ADMIN")
else
len += formatex(menu[len], charsmax(menu) - len, "\d9. %L", id, "MENU_ADMIN")

// 0. Exit
len += formatex(menu[len], charsmax(menu) - len, "^n^n\r0.\w %L", id, "MENU_EXIT")

// Fix for AMXX custom menus
set_pdata_int(id, OFFSET_CSMENUCODE, 0)
show_menu(id, KEYSMENU, menu, -1, "Main Menu")
}

// Main Menu
public menu_main(id, key)
{
// Player disconnected?
if (!is_user_connected(id))
return PLUGIN_HANDLED;

switch (key)
{
case 0: // Buy Menu
{
// Custom buy menus enabled?
if (LibraryExists(LIBRARY_BUYMENUS, LibType_Library) && (get_pcvar_num(cvar_buy_custom_primary)
|| get_pcvar_num(cvar_buy_custom_secondary) || get_pcvar_num(cvar_buy_custom_grenades)))
{
// Check whether the player is able to buy anything
if (is_user_alive(id))
zp_buy_menus_show(id)
else
zp_colored_print(id, "%L", id, "CANT_BUY_WEAPONS_DEAD")
}
else
zp_colored_print(id, "%L", id, "CUSTOM_BUY_DISABLED")
}
case 1: // Extra Items
{
// Items enabled?
if (LibraryExists(LIBRARY_ITEMS, LibType_Library))
{
// Check whether the player is able to buy anything
if (is_user_alive(id))
zp_items_show_menu(id)
else
zp_colored_print(id, "%L", id, "CANT_BUY_ITEMS_DEAD")
}
else
zp_colored_print(id, "%L", id, "CMD_NOT_EXTRAS")
}
case 4: // Help Menu
{
show_help(id)
}
case 8: // Admin Menu
{
if (LibraryExists(LIBRARY_ADMIN_MENU, LibType_Library) && is_user_admin(id))
zp_admin_menu_show(id)
else
zp_colored_print(id, "%L", id, "NO_ADMIN_MENU")
}
}

return PLUGIN_HANDLED;
}

// Help MOTD
show_help(id)
{
static motd[1024]
new len

len += formatex(motd[len], charsmax(motd) - len, "%L", id, "MOTD_INFO11", "Zombie Plague Mod", ZP_VERSION_STR_LONG, "ZP Dev Team")
len += formatex(motd[len], charsmax(motd) - len, "%L", id, "MOTD_INFO12")

show_motd(id, motd)
}

Status:
Аватара пользователя
Plrip
Скриптер
 
Сообщения: 2903
Зарегистрирован: 03 дек 2011, 19:33
Откуда: Ukraine
Благодарил (а): 237 раз.
Поблагодарили: 603 раз.
Языки программирования: Counter-Strike 1.6
X-Ray
Killing-Floor [low]

Re: [INC] Tutor API

Сообщение OleZhoK » 15 июл 2012, 23:22

Столько удалённых сообщений, так что ктонить скажет в чём может быть дело?
Аватара пользователя
OleZhoK
 
Сообщения: 15
Зарегистрирован: 23 ноя 2011, 00:44
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.

Re: [INC] Tutor API

Сообщение Plrip » 16 июл 2012, 11:22

OleZhoK писал(а):Столько удалённых сообщений, так что ктонить скажет в чём может быть дело?

здесь сообщения не отправляются

Status:
Аватара пользователя
Plrip
Скриптер
 
Сообщения: 2903
Зарегистрирован: 03 дек 2011, 19:33
Откуда: Ukraine
Благодарил (а): 237 раз.
Поблагодарили: 603 раз.
Языки программирования: Counter-Strike 1.6
X-Ray
Killing-Floor [low]

Re: [INC] Tutor API

Сообщение OleZhoK » 16 июл 2012, 20:43

Ну ты только как я понял поменял кодировку на UTF8 без БОМ. Я уже описывал в постах выше "10 июл 2012, 16:13" что не работает это. Может это зависить от того что уменя зaпрещён выбор языка и в vault.ini стоит ланг "ru".
Аватара пользователя
OleZhoK
 
Сообщения: 15
Зарегистрирован: 23 ноя 2011, 00:44
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.

Re: [INC] Tutor API

Сообщение Plrip » 16 июл 2012, 23:03

OleZhoK, я сам ставил это и у меня работало

Status:
Аватара пользователя
Plrip
Скриптер
 
Сообщения: 2903
Зарегистрирован: 03 дек 2011, 19:33
Откуда: Ukraine
Благодарил (а): 237 раз.
Поблагодарили: 603 раз.
Языки программирования: Counter-Strike 1.6
X-Ray
Killing-Floor [low]

Re: [INC] Tutor API

Сообщение OleZhoK » 17 июл 2012, 20:27

Можешь заскринить? Что только не делал не робит и всё..
Аватара пользователя
OleZhoK
 
Сообщения: 15
Зарегистрирован: 23 ноя 2011, 00:44
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.

Re: [INC] Tutor API

Сообщение Plrip » 17 июл 2012, 23:49

OleZhoK писал(а):Можешь заскринить? Что только не делал не робит и всё..

без Б
вот смотри
Безымянный.jpg

Status:
Аватара пользователя
Plrip
Скриптер
 
Сообщения: 2903
Зарегистрирован: 03 дек 2011, 19:33
Откуда: Ukraine
Благодарил (а): 237 раз.
Поблагодарили: 603 раз.
Языки программирования: Counter-Strike 1.6
X-Ray
Killing-Floor [low]

Re: [INC] Tutor API

Сообщение OleZhoK » 18 июл 2012, 20:20

Ужас, пробовал на 2х серверах на компе, на дедике на лине. Незнаю что делать, скажите может моды какие нужно дополнительные к этой биде или что-то инное?
Аватара пользователя
OleZhoK
 
Сообщения: 15
Зарегистрирован: 23 ноя 2011, 00:44
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.

Пред.След.

Вернуться в Статьи / фрагменты кода

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

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