AMX MOD X
Пятница, 19.04.2024, 13:13:20



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

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

  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Нубский вопрос, но...
Нубский вопрос, но...
ArchДата: Суббота, 02.12.2006, 04:46:35 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 6
Репутация: 1
Статус: Не в сети
...хотелось бы получить квалифицированный ответ (помимо RTFM) smile

Есть задумка - написать плаг (cs 1.6, патч 21, мод amxx), который при юзании прицела в снайперках показывал бы кратность зума и расстояние до цели.
Существует ли такой плаг или похожие? Если нет - то не будет ли любезен многоуважаемый джинн smile дать кусок рабочего кода, описывающий видимый конструктивный минимум?

P.S: Да, я знаю, что это наглость - просить за меня сделать 90% работы, но чем чёрт не шутит... smile На самом деле буду рад любой помощи smile


While all answers are replies, not all replies are answers.

Сообщение отредактировал Arch - Суббота, 02.12.2006, 04:52:12
 
AlModДата: Суббота, 02.12.2006, 11:06:39 | Сообщение # 2
Сонный кодер
Группа: Админы
Сообщений: 600
Репутация: 27
Статус: Не в сети
Есть такая фигня в АМХХ: origin - местоположение игорка в пространстве
Code
get_user_origin(id,origin[3],mode=0)

Необходим инклуд <fun>

при моде = 0 - координаты игрока, при моде = 3 (по-моему) - точка, куда он смотрит.

Потом

Code
get_distance(orig1[3],orig2[3])

Возвращает расстояние

Ну а кратность зума можно определить количеством кликов поль АльтФайру biggrin


 
VENДата: Суббота, 02.12.2006, 12:35:27 | Сообщение # 3
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Для get_user_origin fun не нужен, он идет с core, ты путаешь с set_user_origin
 
AlModДата: Суббота, 02.12.2006, 13:05:39 | Сообщение # 4
Сонный кодер
Группа: Админы
Сообщений: 600
Репутация: 27
Статус: Не в сети
Но в принципе то верно )

 
ArchДата: Суббота, 02.12.2006, 18:46:13 | Сообщение # 5
Рядовой
Группа: Пользователи
Сообщений: 6
Репутация: 1
Статус: Не в сети
Решил начать хотя бы просто с постоянного выведения дистанции HUD. Закопался в референс, и уже третий час пытаюсь хоть что-то понять... wacko Млин... вот что значит забить на математику в школе... weep

Насколько сообразил мой кривой мозжечок, начать надо так:

#include <amxmodx>

Затем - что? public plugin_init? Если да, то хм, получается так:

public plugin_init()
{
new g_plorig = get_user_origin(32,origin[3],mode=0)
new g_aimorig = get_user_origin(32,origin[3],mode=3)
get distance(g_plorig[3],g_aimorig[3])
}

Только что-то мне говорит, что plugin_init тут ни при чём...
Собственно, следующий тупой вопрос: а что дальше?


While all answers are replies, not all replies are answers.
 
VENДата: Суббота, 02.12.2006, 18:57:52 | Сообщение # 6
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Э-э-э, да тебе нужно сначала основы усвоить.
У меня с нуля тебя "поднять" терпения не хватит.
Читай оригинальные мануалы, что не понятно - спрашивай.

http://wiki.amxmodx.org/index.php/Category:Scripting_%28AMX_Mod_X%29 - scripting

Сообщение отредактировал VEN - Суббота, 02.12.2006, 18:59:17
 
ArchДата: Суббота, 02.12.2006, 19:16:10 | Сообщение # 7
Рядовой
Группа: Пользователи
Сообщений: 6
Репутация: 1
Статус: Не в сети
Я там с утра пасусь. И на http://www.amxmodx.org/doc/ ещё пасусь активно. Только проблема в том, что непонятно вообще ничего. sad
Вся беда в том, что как считать - я понимаю, это элементарно. Кривое (точнее, наоборот, прямое, но не с моей user side) представлениe типа string - тоже усвоил. Операторы if-then-else проблемы вообще никогда не представляли. А вот как строить функции, к чему привязывать переменные и константы, когда и зачем это надо делать - уже лес непролазный. Мозги уже кипят, а сатори всё нет и нет...

P.S: html/cs/js/vbs - это я могу понять. Даже xml и php местами ясно. mrc, tcl - понимаю отлично. Вот функция, вот приём, вот рабочий пример к ним. Делаю своё, смотрю - ага, оно.
Похоже, я понимаю, чем скриптование от программирования отличается - наличием исчерпывающего справочного руководства, предусматривающего пошаговое построение программы... smile


While all answers are replies, not all replies are answers.

Сообщение отредактировал Arch - Суббота, 02.12.2006, 19:25:52
 
VENДата: Суббота, 02.12.2006, 19:20:17 | Сообщение # 8
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Давай постепенно. Что конкретно не понятно?
Задавай конкретные вопросы для конкретного случая - попытаюсь ответить.
Не бойся задавать много или простые вопросы.
Вариант "не понятно все" не пройдет. :]
 
ArchДата: Суббота, 02.12.2006, 19:53:35 | Сообщение # 9
Рядовой
Группа: Пользователи
Сообщений: 6
Репутация: 1
Статус: Не в сети
Умгу, тогда щас попробую сформулировать что-нибудь "начальное"... только вопросы будут, наверное, не простые, а глупые.
Так...
1. Чтобы хоть что-то понимать, надо как можно быстрее организовать вывод в консоль. Делается это через console_print(id,сообщение). Значит, если я хотю, чтобы скрипт по набору команды говорил hello world, надо:
#include <amxmodx>
new const helloworld[] = "Hello world"
public plugin_init()
{
register_clcmd("hwrl",console_print(id,helloworld))
}
Так?

P.S: Про "всё непонятно" - знаю по собственному опыту обучения народа мирковским скриптам, это просто крик души был smile


While all answers are replies, not all replies are answers.
 
VENДата: Суббота, 02.12.2006, 21:07:33 | Сообщение # 10
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Советую почитать инклуды - у тебя синтаксис неправильный.
Открыли amxmodx\scripting\include\amxmodx.inc и видим:

/* Registers function which will be called from client console. */
native register_clcmd(const client_cmd[],const function[],flags=-1, info[]="");

client_cmd - клиент команда, которая будет вызывать функцию function
flags - требуемый уровень доступа (опционален)
info - описание команды (опционально)

function будет вызываться с прототипом (id, level, cid), где id - индекс (номер игрока), level - уровень доступа команды, cid - индекс команды

Рекомендую почитать скрипты в amxmodx\scripting\, чтение помогает понять иногда лучше чем описание.

Сообщение отредактировал VEN - Суббота, 02.12.2006, 21:09:30
 
ArchДата: Воскресенье, 03.12.2006, 02:43:46 | Сообщение # 11
Рядовой
Группа: Пользователи
Сообщений: 6
Репутация: 1
Статус: Не в сети
Спасибо за терпение, я, кажется, разобрался в элементарщине smile
А теперь - другой вопрос: могу ли я объявлять внутриязыковые алиасы по примеру css в html (а лучше - по примеру mirc), не создавая новых функций вместе со всем багажом? Скажем, я хочу, чтобы в переменных не надо было задавать длину, а тип всегда расценивался как string.
К примеру, мне нужна внутриязыковая функция, которая сведёт задание переменной к простому выражению set foo "bar", создавая переменную foo, содержащую bar типа string. При этом обработка процесса тоже должна протекать без моего участия - т.е., к примеру, если эта переменная уже есть, то она будет перезаписана вне зависимости от содержания...

Или я слишком много хочу, и надо создавать собственный скриптовый язык на основе имеющегося программного? Плагин, который позволит облегчить написание плагинов?..

Да, попутно ещё вопросы: как заставить функцию пользоваться переменной, а не константой, в качестве аргумента?
Например, тот же client_print требует id, type, const message. Что нужно сделать, чтобы получить аналог, работающий на var? Поможет ли загоняние в константу содержимого переменной, которое будет получено в результате предшествующих операций, или я неправильно понимаю структуру языка? И ещё - какой id соответствует id вызвавшего срабатывание скрипта?


While all answers are replies, not all replies are answers.

Сообщение отредактировал Arch - Воскресенье, 03.12.2006, 03:03:43
 
VENДата: Воскресенье, 03.12.2006, 11:38:32 | Сообщение # 12
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Рекомендую почитать http://www.compuphase.com/pawn/pawn-lang.pdf
Это исчерпывающий guide, позволяет быстро и эффективно освоить Pawn.
Без него люди месяцами и даже годами "плавают" в темноте или полумраке.

Code
как заставить функцию пользоваться переменной, а не константой, в качестве аргумента?
В заголовках/прототипах функций const атрибут используют, чтобы сказать нам о том, что посланный массив не изменится в теле самой функции.

Почему я сказал "массив" а не "строка"?
Все дело в том, что строка - это массив ASCII символов: string[] = {'h', 'i', '^0'}
Мы имеем 3 символа как три элемента массива.
ASCII символов может быть представлен как число.
Поэтому строка может быть представлена как последовательность чисел.
Т.е. string[] = {'h', 'i', '^0'} то же самое, что и string[] = {104, 105, 0}
В Pawn нулевой char '^0' равен 0 и указывает конец строки.
^ - контрол char, используется для указания спец. символов и т.п.
Например: ^n - новая строка, ^t - табуляция, ^" - кавычка и т.д.
Контрол char можно изменять в скрипте: #pragma ctrlchar char

В Pawn массивы передаются из функцию в функцию по ссылке (by reference (byref)).
Т.е мы можем передать массив и изменить его. const атрибут гарантирует неизменность массива в теле данной функции.
int/bool/float по умолчанию не передаются byref (т.е. как бы копируются), но можно форсировать byref и для них: func(&int), func(&Float:f), func(&bool:b)

Важно понимать, что технически все данные int/float/bool/char "слеплены из одного и того же теста" - cell. Поэтому чтобы отличать их, в Pawn существуют тэги (Float, bool и т.д.). Можно использовать свои тэги, например: mytag:var
Т.о. имеется возможность изменять тип, например:
new bool:b // содали булевую b
new var = _:b // создали целую var и присвоили значение b
new bool:b2 = bool:var // создали булевую b2 и присвоили значение var, т.е. b

Quote
И ещё - какой id соответствует id вызвавшего срабатывание скрипта?
Не понял вопроса.

Сообщение отредактировал VEN - Воскресенье, 03.12.2006, 11:48:17
 
AlModДата: Воскресенье, 03.12.2006, 16:57:07 | Сообщение # 13
Сонный кодер
Группа: Админы
Сообщений: 600
Репутация: 27
Статус: Не в сети
Не хотелось бы критиковать, но у нас статья есть на сайте как раз про это! angry

 
VENДата: Воскресенье, 03.12.2006, 18:13:01 | Сообщение # 14
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Тут речь несколько о другом.
 
JohnJДата: Вторник, 05.12.2006, 23:20:06 | Сообщение # 15
Лейтенант
Группа: Скриптеры
Сообщений: 65
Репутация: 4
Статус: Не в сети
вот про это не понял
new var = _:b // создали целую var и присвоили значение b
что за _:?
а что будет, если просто new var = b?
 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Нубский вопрос, но...
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

AMX Mod X Russian Community © 2006-2024