04:22
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 1
  • 1
Модератор форума: AXE, PrettySweetie  
Переход с Pawn на Lua. Часть 3
PrettySweetieДата: Суббота, 16.04.2011, 15:25 | Сообщение # 1
Местный
Группа: Продвинутые
Сообщений: 704
Награды: 19
Город: Нериак
Репутация: 1221
Замечания: 0%
Статус:
Переход с Pawno на Lua. Часть 3 — синтаксические различия.

Lua и PAWN – это совершенно разные языки, а значит и синтаксис у них разный. Давайте разберем несколько примеров различия.

Функции

Как мы все знаем, в PAWN используется примерно такая конструкция:

Code

#include <a_samp>     

forward что-то();

public что-то()    
{    
    код
}    

В Lua это дело будет выглядеть так:

Code

function что-то()
    код
end

Что изменилось?
1. нету include
2. нету forward
3. заместо public используется function
4. нету ; (хотя можно и использовать)
5. нету { и }, а заместо этого, для закрытия функции, используется end

Условия

Просто if в PAWN:

Code

if что то        
{    
    код
}    

А вот if в Lua:

Code
    
if что то then
    код
end

Что изменилось? Правильно, добавился then.

Else в PAWN:

Code

if
{    
    что то
}    
else if
{    
    что то
}    

в Lua:

Code

if что то then
    код
elseif что то then
    код
end

Что изменилось?
1. elseif в Lua пишется слитно
2. if не надо закрывать

Цикл
Обычная конструкция похожа, поэтому мы и посмотрим на наиболее часто нужную вещь, то есть на получение всех игроков.
PAWN:

Code

for(new i = 0; i < MAX_PLAYERS; i++)    
{    
    код
}    
где:    
i - переменная,    
1 < MAX_PLAYERS - выход из цикла.     

Lua:

Code

for theKey,thePlayer in ipairs(getElementsByType ( "player" ) ) do
    код
end

Вот что значит...
...theKey – ид игрока
...thePlayer – сам игрок
...getElementByType ( “player” ) - получение всех элементов типа «игрок»
...ipairs – незнаю, мб получить что то из этого, в общем надо профессионалов спрашивать.

Кстати, вот еще что можно получить с помошью getElementsByType:

"player" - игрок
"ped" - NPC
"vehicle" — транспортное средство
"object" - обьект
"pickup" - пикап
"marker" - чекпоинт
"blip" — иконка на карте
И еще несколько вещей, которые вы можете посмотреть на вики.

Еще различия:
в Lua ~=, а в PAWN != (спасибо за подсказку ZZiGGi), например:

Code

if a ~= 0 then
     a = 0
end

в Lua для комментариев используется -- и вроде еще что то, я не помню

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

P.S. Этот, и все остальные мои уроки написанны так, как я понимаю Lua и как мне удобно в нем работать

Ссылки:
getElementsByType
Русская документация по Lua




Сообщение отредактировал Wolf_War - Суббота, 16.04.2011, 22:17
DomodedovskiySuslikДата: Суббота, 16.04.2011, 15:33 | Сообщение # 2
Группа: Продвинутые
Сообщений: 751
Награды: 5
Город: Домодедово
Репутация: 607
Замечания: 0%
Статус:
То есть. Иногда написание кода не такое муторное как в PAWNO?


InterpolДата: Суббота, 16.04.2011, 15:44 | Сообщение # 3
Мастер джэдай
Группа: I'm V.I.P.
Сообщений: 5358
Награды: 77
Город: НеБаку
Репутация: 3795
Замечания: 20%
Статус:
DomodedovskiySuslik, не иногда, а часто


Kirill_ShvaryovДата: Суббота, 16.04.2011, 15:56 | Сообщение # 4
Уважаемый человек
Группа: I'm V.I.P.
Сообщений: 845
Награды: 46
Город: Novorossiysk
Репутация: 1036
Замечания: 0%
Статус:
И вправду по легче будет =) .. но всё же PAWNO более привык уже к нему.


Мои работы :
Дополнительный город SA
Заправка около Чиллиада
Тропический остров
Парк развлечений
Стадион
Спортивный комплекс
Мото-фристайл(инт)
Мотосалон (0.3e)
GTA S.A.City


[url=http://www.radikal.ru]

Закажи карту на : gtamap-studio.ru
PrettySweetieДата: Суббота, 16.04.2011, 16:06 | Сообщение # 5
Местный
Группа: Продвинутые
Сообщений: 704
Награды: 19
Город: Нериак
Репутация: 1221
Замечания: 0%
Статус:
Quote (DomodedovskiySuslik)
То есть. Иногда написание кода не такое муторное как в PAWNO?

Да, но не всегда, взять к примеру хотя бы клиентские и серверные скрипты, с которыми я долго не мог совладать.



ImperealДата: Суббота, 16.04.2011, 16:19 | Сообщение # 6
Мастер джэдай
Группа: I'm V.I.P.
Сообщений: 2677
Награды: 51
Город: Санкт-Петербург
Репутация: 1868
Замечания: 100%
Статус:
DomodedovskiySuslik, Я не долго разбирался в ЛУА,но почувствовал неудобство от того что тот же скрипт регистрации нужно писать 2 скриптами,один на клиентской другой на серверной части.
Wolf_War, молодец,так как многим пригодиться,мне 3 месяца назад было очень нужно,может в будущем ещё понадобиться!



Прощай самп-рус =Р
toneysixДата: Суббота, 16.04.2011, 19:54 | Сообщение # 7
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
Функция pairs() уникальная функция в lua, которая экспортирует ключ, значение из таблиц (массивов). Следует различать pairs() с ipairs(), так как ipairs() выдает индекс, а не название ключа, а значение остается прежним, например:
table= { numbers = 123, text = "I Love MTA" } -- Создаем новую таблицу под названием table и записываем два ключа со значениями.
for key,value in pairs(table) do print(key,value) end
Выведет:
numbers 123
text I Love MTA

Тот же пример, только с функцией ipairs():
for key,value in ipairs(table) do print(key,value) end
Выведет:
Ничего, так как нет индексов.
А теперь к примеру:
table = { } -- создаем пустую таблицу.
table[1] = 1245
table[2] = "TEXT"
for key,value in ipairs(table) do print(key,value) end
Выведет:
1 1245
2 TEXT

P.S:
Разберем код:
for theKey,thePlayer in ipairs(getElementsByType ( "player" ) ) do
при запуске цикла, создаются две переменной theKey, thePlayer, далее функция getElementsByType возвращает таблицу с игроками, где первое значение индекс, второе значение ник игрока, который записывается в переменные theKey и thePlayer, цикл будет существовать до тех пор, пока не экспортируем все значения из таблицы, которая вернула функция getElementsByType .
Да кстати, хочу сделать ещё такое замечание, мне кажется ты приводишь слишком примитивные примеры, к примеру MAX_PLAYERS это просто директива препроцессора, константа, макрос, который заменяется при компиляции, соответственно, цикл будет работать, пока i будет меньше, чем MAX_PLAYERS, в данном случаи в lua при использовании функции getElementsByType с аргументом player она возвращает таблицу, и цикл будет работать, пока не запишет все данные из таблицы в переменные. Если же действовать по принципу идентичности с сэмпом с тем циклом, можно сделать так:
for i = 1,100 do действие end
То есть отсчет от одного до ста.



Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru

Сообщение отредактировал toneysix - Суббота, 16.04.2011, 20:41
PrettySweetieДата: Суббота, 16.04.2011, 20:38 | Сообщение # 8
Местный
Группа: Продвинутые
Сообщений: 704
Награды: 19
Город: Нериак
Репутация: 1221
Замечания: 0%
Статус:
toneysix, спасибо за дополнение :)


ZiGGiДата: Суббота, 16.04.2011, 21:07 | Сообщение # 9
Мастер джэдай
Группа: Продвинутые
Сообщений: 2652
Награды: 34
Город: St. Petersburg
Репутация: 2102
Замечания: 20%
Статус:
Quote (Wolf_War)
в Lua ~=, а в павно не помню что, напомните, ну это не равно

Quote (Wolf_War)
if a ~= 0 then
a = 0
end

Code
if(a != 0)
{
      a = 0;
}

ps не Pawno, а Pawn...



Бложе
[indent]Мой блог
Уроки по Pawn
[/indent]

Open-GTO
[indent]Блог разработчиков
GitHub: https://github.com/Open-GTO/Open-GTO
Сборки мода с сервером тут
[/indent]


Сообщение отредактировал ZZiGGi - Суббота, 16.04.2011, 21:10
PrettySweetieДата: Суббота, 16.04.2011, 22:15 | Сообщение # 10
Местный
Группа: Продвинутые
Сообщений: 704
Награды: 19
Город: Нериак
Репутация: 1221
Замечания: 0%
Статус:
Quote (ZZiGGi)
ps не Pawno, а Pawn...

да я знаю, ну коли уж начал писать в названии уроков Pawno, то придется и дальше писать. А за подсказку спасибо, сейчас изменю



Al_CaponeДата: Воскресенье, 17.04.2011, 13:39 | Сообщение # 11
Новенький
Группа: Пользователи
Сообщений: 52
Награды: 0
Город: Степное
Репутация: 0
Замечания: 0%
Статус:
После end навернго должна стоять точка?
ZiGGiДата: Воскресенье, 17.04.2011, 13:43 | Сообщение # 12
Мастер джэдай
Группа: Продвинутые
Сообщений: 2652
Награды: 34
Город: St. Petersburg
Репутация: 2102
Замечания: 20%
Статус:
Quote (Al_Capone)
После end навернго должна стоять точка?

нет, это не паскаль ;)



Бложе
[indent]Мой блог
Уроки по Pawn
[/indent]

Open-GTO
[indent]Блог разработчиков
GitHub: https://github.com/Open-GTO/Open-GTO
Сборки мода с сервером тут
[/indent]
VantageДата: Суббота, 28.05.2011, 21:30 | Сообщение # 13
Уважаемый человек
Группа: Пользователи
Сообщений: 974
Награды: 8
Город: -=Los Santos The Best=-
Репутация: 467
Замечания: 80%
Статус:
Quote (ZZiGGi)
нет, это не паскаль

А в начале увидел что то знакомое от паскаля)



..



Мои работы:
[GM]Ls:Rus TDM v1.0 | [GM]Ls:Rus TDM v1.2 | [GM]Ls:Rus TDM v1.3(1%)[blink]|[/blink]
[FS]Rampa

AirKiteДата: Пятница, 08.07.2011, 00:46 | Сообщение # 14
Долгожитель
Группа: I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус:
Quote (DomodedovskiySuslik)
То есть. Иногда написание кода не такое муторное как в PAWNO?

Quote (Interpol)
DomodedovskiySuslik, не иногда, а часто

На мой взгляд всегда.

toneysix, полностью согласен.



[1337GAMES] Easy RP
(SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)


Jabber: airkite@qip.ru
[Addon] QuickBinder
[FS] Online Players Record
  • Страница 1 из 1
  • 1
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua