| 
 | 
Здравствуйте, гость ( Вход | Регистрация )
|   | 
| 
 | 
|  17.3.2011, 0:06 
				 Сообщение
					#1
					
				
			 | |
|  Продвинутый участник     Группа: Пользователи Сообщений: 157 Регистрация: 19.1.2010 Из: Волгоград Пользователь №: 5 756 Спасибо сказали: 77 раз  | 
				Столкнулся с тем, что из файла не загружается таблица. Создал тестовый скрипт и тестовый файл с данными. При старте скрипта теоретически в переменную Players должна загрузиться таблица из файла test_file.dat. В Оп-чат выводится сообщение об успешной загрузке файла. При подключении юзера добавляется пункт в меню (команда !f), по этой команде выводится содержимое переменной-таблицы Players. Но этого не происходит. :( Прикрепляю архив со скриптом и файлом с данными. Помогите найти ошибку. 
	Прикрепленные файлы
	
 | 
|  | |
|  17.3.2011, 1:06 
				 Сообщение
					#2
					
				
			 | |
|  Активный участник    Группа: Пользователи Сообщений: 85 Регистрация: 19.3.2009 Из: Россия, Хабаровский край, г.Комсомольск-на-Амуре Пользователь №: 2 652 Спасибо сказали: 39 раз  | 
				Сделай глобальной таблицу: Код Players = {} | 
|  | |
|  17.3.2011, 1:25 
				 Сообщение
					#3
					
				
			 | |
|  Белый Волк          Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз  | 
				Ещё добавлю...чтоб при загрузке файла в Опчат показало, сколько записей в таблице, нужно чтение числа записей организовать так: Код function OnStartup() if loadfile(filename) then dofile(filename) local n = 0 for i in pairs(Players) do n = n + 1 end Core.SendToOpChat("Loaded "..filename.." Всего в списке = "..n) end end Иначе у тебя будет по нулям. И то же самое сделай в ЧатАрривал, там у тебя тоже есть вывод числа записей. Только к чему вместе с названием файла и весь путь до него? Ты же знаешь его название, так пропиши его в этом сообщении напрямую, или переменную в начале скрипта обозначь с этим названием (без пути), например, так: Код local fname = "test_file.dat"и при отправлении в Опчат пиши это слово - "fname" вместо "filename" А то выглядит несуразно: Цитата [04:21:49] <_OpChat_> Loaded D:/SOFT/INTERNET/P2P/HUBS/PtokaX_0411_IndyHub/scripts/test_file.dat Всего = 2 Вывод таблицы перекрой так, чтоб весь список был в одном сообщении. Например, так: Код     if cmd == "!f" then local n = 0 for i in pairs(Players) do n = n + 1 end local list = "\nСписок Players. Всего в списке = "..n.."\n" for i,v in pairs(Players) do list = list.."\t"..i.."\n" end Core.SendToUser(tUser, list.."Конец списка Players") end В результате получишь в Опчат это: Цитата [04:50:01] <_OpChat_> Loaded test_file.dat Всего в списке = 2 В чате таблица так: Код [04:43:03]  Список Players. Всего в списке = 2 Волотька TIMON Конец списка Players | 
|  | |
|  17.3.2011, 2:15 
				 Сообщение
					#4
					
				
			 | |
|  Продвинутый участник     Группа: Пользователи Сообщений: 157 Регистрация: 19.1.2010 Из: Волгоград Пользователь №: 5 756 Спасибо сказали: 77 раз  | 
				Экспериментально выяснил, что вместо  Код local Players = {}работает Код Players = {}т.е. без local. Kingston правильно сказал. Осталось понять почему? Ведь если я определяю в скрипте переменную без local, то она должна быть доступна в других скриптах? Нет? Иначе у тебя будет по нулям.Изначально таблица пуста, поэтому нет смысла пробегать циклом. Даже если таблица из файла не пустая, то я знаю сколько в ней элементов и есть ли в ней "пустышки", ведь я создавал этот тестовый скрипт и тестовый файл с данными специально наиболее простым, дабы исключить все другие помехи.  Это был не тест на сообразительность.   | 
|  | |
|  17.3.2011, 2:31 
				 Сообщение
					#5
					
				
			 | |
|  Белый Волк          Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз  | 
				Ни одна переменная не вылезет к другим скриптам. Глобал - относительно пространства именно одного конкретного скрипта. В Птоке. | 
|  | |
|  17.3.2011, 2:35 
				 Сообщение
					#6
					
				
			 | |
|  Продвинутый участник     Группа: Пользователи Сообщений: 157 Регистрация: 19.1.2010 Из: Волгоград Пользователь №: 5 756 Спасибо сказали: 77 раз  | 
				Тогда смысл в "local" в скрипте? П.С. просто затормозило мафию на несколько дней.   | 
|  | |
|  17.3.2011, 7:28 
				 Сообщение
					#7
					
				
			 | |
|  Абсолютный новичок Группа: Пользователи Сообщений: 6 Регистрация: 7.9.2009 Пользователь №: 4 380 Спасибо сказали: 1 раз  |  | 
|  | |
|  17.3.2011, 8:43 
				 Сообщение
					#8
					
				
			 | |
|  Активный участник    Группа: Пользователи Сообщений: 85 Регистрация: 19.3.2009 Из: Россия, Хабаровский край, г.Комсомольск-на-Амуре Пользователь №: 2 652 Спасибо сказали: 39 раз  | 
				дальше скрипта переменные и фукции никуда не выйдут и доступ к к функциям и переменным одного скрипта из другого не будет, если первый скрипт не загружен. локальные переменные заданные в функциях не доступны другим функциям и наоборот, получается. а смысл в оптимизации http://mydc.ru/index.html?showtopic=1018&a...post&p=7538 | 
|  | |
|  17.3.2011, 9:57 
				 Сообщение
					#9
					
				
			 | |
|  RusHub team lead               Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз  | 
				Функция dofile загружает дополнительный lua код в текущий скрипт, и этой функции доступно только глобальное окружение скрипта. В свою очередь, если в загружаемом функцией dofile файле объявляется глобальная переменная, а в самом скрипте определена такая же переменная но локально, то локальная переменная имеет выше приоритет, чем глобальная, при этом функция dofile не имеет доступа к локальной переменной. Отсюда получаем, что dofile загружает в глобальную переменную Players, а скрипт будет брать локальную переменную Players. Для того чтобы обратиться к глобальной переменной нужно обращаться к ней через таблицу _G. То есть в данном случае просмотреть содержимого ГЛОБАЛЬНОЙ переменной Players возможно следующим образом: Код for i,v in pairs(_G.Players) do | 
|  | |
|   | 
 Похожие темы
 Похожие темы
| Тема | Ответов | Автор | Просмотров | Последнее сообщение | |
|---|---|---|---|---|---|
|  | авторегистрация не работает | 8 | dsd10 | 14 405 | 7.11.2012, 22:41 Посл. сообщение: Vizunchik | 
|  | как удалить что хаб работает на версии | 5 | absent | 11 152 | 12.2.2011, 14:49 Посл. сообщение: Saymon21 | 
|  | Не работает хаб | 52 | Demest | 51 631 | 16.8.2010, 8:31 Посл. сообщение: Артём | 
|  | От: Не работает хаб От темы с ID: 3758 | 0 | Delia | 5 108 | 11.8.2010, 21:27 Посл. сообщение: Delia | 
|  |  почему не работает этот скрипт переделайте его что бы он работал скрипт переделайте | 4 | Artem26 | 9 796 | 26.5.2010, 17:54 Посл. сообщение: Артём | 
|  |  Не работает скрипт. | 1 | Invisible | 7 484 | 15.1.2010, 7:24 Посл. сообщение: Wildcdu | 
|  |  Поиск не работает ! | 1 | ShadoWx | 6 265 | 26.9.2009, 10:13 Посл. сообщение: Maximum | 
|  |  Помогите Скрипт Не Работает API 2 | 2 | Артём | 7 578 | 20.12.2008, 17:01 Посл. сообщение: Артём | 
|  |  Не Работает =\ | 4 | LeoSP | 10 006 | 17.11.2008, 19:30 Посл. сообщение: LeoSP | 
|  |  Помогите Скрипт Не Работает Скрипт не работает | 13 | Артём | 18 837 | 11.11.2008, 18:44 Посл. сообщение: Артём | 
|   | Сейчас: 1.11.2025, 2:10 |