Создание команды в чат
|
|
NiconNeo | Дата: Пятница, 21.05.2010, 21:26 | Сообщение # 1 |
..::[AdmiN]::..
Группа: Администраторы
Сообщений: 142
Статус: Offline
| Крюк "say" Посылает прикрепленной функции два значения: id (ID игрока, сказавшего фразу message), message (фраза, которую сказал игрок с ID id). Функция может иметь в себе return (return 1 для остановки функции и скрытия того, что сказал игрок с ID id).
Создать команду в чат очень просто. Для этого достаточно прикрепить функцию к крюку "say". А для того, чтобы создать команду, надо добавить в функцию это: if (message == "команда") then -- причем скобки ставить не обязательно отступ то, что выполнит команда end При этом скобки в операторах if, elseif, while, for и др. не обязательны. Итак, почему бы не сделать команду с параметрами? А вот это может решаться немного иным способом, чем вы себе представляли. И это тоже очень просто. Есть одна отличная функция totable(string, match). Стоп-стоп-стоп, ее нет в библиотеке LUA. Что делать? Нельзя об этом не сказать Просто напишите в начало скрипта этот код: function totable(t, match) local cmd = {} if type(match) == "string" then match = "[^"..match.."]+" end for word in string.gmatch(t, match) do table.insert(cmd, word) end return cmd end Итак, функцию, которая нам поможет мы знаем. Настал черед научиться ее использовать. Итак, рассмотрим пример. Code local itable = totable(message, ' ') -- разложим таблицу по словам (' ' - пробел) if itable[1] == '!usgn' then -- если команда - "!usgn" local p = tonumber(itable[2]) -- переводим строковый тип в числовой и сохраняем в p if p ~= nil and player(p, 'exists') then -- проверяем, верно ли указан ID игрока if player(p, 'usgn') > 0 then -- Залогиннен ли игрок в USGN? msg2(id, 'USGN of this player (ID '..p..') is '..player(p, 'usgn')) -- Если да, пишем его USGN. else msg2(id, 'This player (ID '..p..') is not logged in USGN system') -- Если нет, пишем это. end else msg2(id, 'Wrong usage or player doesn\'t exist!') end return 1 -- скрываем команду (рекомендуется) end Эта команда показывает USGN ID игрока, если он у него есть, иначе говорит, что у него нет USGN ID. Если игрока нет, тоже об этом говорит. Форма: !usgn <ID игрока>. Думаю, этот образец вам пригодится.
|
|
| |
qwerto | Дата: Понедельник, 02.08.2010, 21:57 | Сообщение # 2 |
2
Группа: Пользователи
Сообщений: 22
Статус: Offline
| Что тут не правельно??? if sample==nil then sample={} end sample.sayfuncs={} addhook("say","sample.sayfuncs.say") function sample.sayfuncs.say(p,txt) if (txt=="!speed") then parse("speedmod "..p.." 100") end
|
|
| |
NiconNeo | Дата: Понедельник, 02.08.2010, 21:59 | Сообщение # 3 |
..::[AdmiN]::..
Группа: Администраторы
Сообщений: 142
Статус: Offline
| Вообще тут все правильно, может ошибка в другом скрипте
|
|
| |
FaqAp | Дата: Вторник, 03.08.2010, 11:23 | Сообщение # 4 |
 1
Группа: Пользователи
Сообщений: 14
Статус: Offline
| тут отступпов нет
|
|
| |
qwerto | Дата: Вторник, 03.08.2010, 11:37 | Сообщение # 5 |
2
Группа: Пользователи
Сообщений: 22
Статус: Offline
| они есть тока в файр фокс не вставились,а как правильно поставить их?
|
|
| |
qwerto | Дата: Вторник, 03.08.2010, 11:38 | Сообщение # 6 |
2
Группа: Пользователи
Сообщений: 22
Статус: Offline
| вот
|
|
| |
NiconNeo | Дата: Вторник, 03.08.2010, 19:40 | Сообщение # 7 |
..::[AdmiN]::..
Группа: Администраторы
Сообщений: 142
Статус: Offline
| Quote (FaqAp) тут отступпов нет Отступы только для хорошей восприимчивости кода человеком. На выполнение сценария они не влияют Ой, беру свои слова назад. Ты в конце "end" не дописал один. Ты "if" завершил, а функцию - нет)) Я тупанул че-то )) Неудобно без отступов))
|
|
| |
qwerto | Дата: Вторник, 03.08.2010, 21:30 | Сообщение # 8 |
2
Группа: Пользователи
Сообщений: 22
Статус: Offline
| Спасибо всем!!!Теперь буду знать,а то я раньше не писал луа а только брал шаблоны.
|
|
| |