Просмотр полной версии : Вопросы по питону
NeseryozniyVET
07.10.2009, 01:17
1) Можно ли в питоне создавать масив, число элементов которого зависит от переменной ? Например, если переменная равна 3 - создается масив из трех элементов, если 5 - то из пяти.
2) У многих элементов интерфейса (кнопки, надписи) есть такой параметр как WidgetTypes.. (WidgetTypes.WIDGET_GENERAL , WidgetTypes.WIDGET_PLOT_LIST). Я так понял это указатель на функцию или код, который выполняется при контакте с данным элементом. Вопрос: в каком файле описание этих WidgetTypes и как создать свой собственный WidgetTypes?
1. Можно, просто создаешь массив с параметром len(твоя переменная). К примеру одномерный массив a = array(len(x))
2. Сам параметр Widget отвечает за идентификацию элемента интерфейса, т.е. позволяет минимизировать размеры скриптов и не прописывать отдельные сценарии для каждого элемента интерфейса. Соотвественно WidgetTypes отвечает за определенный тип идентификаторов.
Вот посмотри тут в мануале есть некоторое пояснение этого параметра:
NeseryozniyVET
07.10.2009, 14:05
<div class='quotetop'>Цитата(Gesse * 7.10.2009, 7:11) 309662</div>
1. Можно, просто создаешь массив с параметром len(твоя переменная). К примеру одномерный массив a = array(len(x))
[/b]
Значит такой код должен работать без проблем ?
[code]
x = 6
a = array(len(x))
i = 0
while (i < x):
NeseryozniyVET
07.10.2009, 19:57
Такой код вообще не работает :boo:
Можешь более подробный пример привести
Так причем...
Я не так объяснил... вообщем извинияюсь спешил... попутал :)
Пример приведенный выше работает если есть модуль Numeric, если нет то правильный пример одномерного массива будет выглядеть так:
[code]
a = 5
i = 0
x = [0]
while (i <= a):
NeseryozniyVET
11.10.2009, 01:15
Нашел более простой вариант
[code]
a = ля ля ля
pV = [[]] * a
for i in range(a):
Ну я привел первый который пришел в голову :)
Хальк Юсдаль
17.10.2009, 12:45
Не совсем в тему идущего обсуждения, но в тему названия. Как, а вернее где в CvCivicsScreen.py изменить размер шрифта которым отображаются цивики? Или это меняется где-то ещё?
NeseryozniyVET
17.10.2009, 15:43
<div class='quotetop'>Цитата(Хальк Юсдаль * 17.10.2009, 11:45) 311012</div>
Не совсем в тему идущего обсуждения, но в тему названия. Как, а вернее где в CvCivicsScreen.py изменить размер шрифта которым отображаются цивики? Или это меняется где-то ещё?[/b]screen.setLabel("", "Background", u"<font=3>" + gc.getCivicOptionInfo(i).getDescription().upper() + u"</font>", CvUtil.FONT_CENTER_JUSTIFY, fX + self.HEADINGS_WIDTH/2, self.HEADINGS_TOP + self.TEXT_MARGIN, 0, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
И так в каждом screen.setLabel, screen.setText и т.д. Шрифт изменяется от font=1 до font=4. Если шрифт не задавать то по умолчанию будет 2.
Для цивиков есть интересный вариант http://forums.civfanatics.com/downloads.ph...le&id=13457 (http://forums.civfanatics.com/downloads.php?do=file&id=13457)
Хальк Юсдаль
17.10.2009, 18:05
Спасибо большое.
<div class='quotetop'>Цитата</div>
Для цивиков есть интересный вариант http://forums.civfanatics.com/downloads.ph...le&id=13457[/b]
Интересная штука, насколько я помню в WoC используется именно этот вариант.
Но просто я сейчас перевожу один интересный мод. А там 6 колонок цивиков, соответвенно русский перевод не влезает толком. Так что переделывал. Пока что получился вот этот вариант. Цвет интерфейса мой, он не из мода, для самого мода наделаю скринов с обычной расцветкой.
http://s47.radikal.ru/i115/0910/1d/b6feff380d93t.jpg (http://radikal.ru/F/s47.radikal.ru/i115/0910/1d/b6feff380d93.jpg.html)
Что нибудь посоветуйте по поводу доработки этого экрана. Панель с содержанием оставить внизу, или приподнять? И как изменить положение той полосы, на которой кнопка Выход находится? Или она в фон входит, хм.
NeseryozniyVET
17.10.2009, 19:17
Полоса:
screen.addPanel( "TechBottomPanel", u"", u"", True, False, 0, 713, self.W_SCREEN, 55, PanelStyles.PANEL_STYLE_BOTTOMBAR )
Надписи "Выход" и "Отменить":
self.Y_EXIT = 726
self.Y_CANCEL = 726
Хальк Юсдаль
17.10.2009, 23:27
Спасибо большое, теперь хоть буду знать как изменять размер и расположение этих элементов.
И ещё вопрос, если отображаемый текст находиться в самом питоновском файле, его можно как нибудь заменить на ссылку ведущую на обычный. Просто иначе многое там останеться непереведенным. Например.
szCost = localText.getText("TXT_STEALTH_DIPLOMACY_COST", (costEspionage, costGold,))
screen.addMultilineText( self.getNextWidgetName(), "Graciously Return All Hostages We're Holding for Free " + szCost, self.SDBUTTON_X + 52, self.SDBUTTON_Y, 400, 80, WidgetTypes.WIDGET_GENERAL, -1, -1, CvUtil.FONT_LEFT_JUSTIFY)
if ((iGold<costGold)or(iEspionagePointsAgainst<costEspionage)):
screen.setLabel(self.getNextWidgetName(), "Background", local
NeseryozniyVET
18.10.2009, 00:02
szCost = localText.getText("TXT_KEY_ТВОЙ_ТЕКСТ", ())
szCost += localText.getText("TXT_STEALTH_DIPLOMACY_COST", (costEspionage, costGold,))
screen.addMultilineText( self.getNextWidgetName(), szCost, self.SDBUTTON_X + 52, self.SDBUTTON_Y, 400, 80, WidgetTypes.WIDGET_GENERAL, -1, -1, CvUtil.FONT_LEFT_JUSTIFY)
Хальк Юсдаль
26.10.2009, 01:22
В общем отчасти помог предыдущий пример, теперь знаю, как ссылку на текст ставить. Спасибо за пример.
Но возникла проблема. В строчке
sTitle = "The" + gc.getPlayer(CyGame().getActivePlayer()).getCivilizationAdjective(0) + " government has executed hostages!"
Я хочу заменить "The" и " government has executed hostages!" на ссылки на текст.
Для этого я сделал.
szCostr = localText.getText("TXT_KEY_CVHOS_PY_1", ())
szCostr1 = localText.getText("TXT_KEY_CVHOS_PY_2", ())
И поместил в предыдущую строку.
sTitle = szCostr + gc.getPlayer(CyGame().getActivePlayer()).getCivilizationAdjective(0) + szCostr1"
Но интерфейс в таких условиях вообще не работает. Причем он перестает работать, как только я помещаю в файл эти две строки
szCostr = localText.getText("TXT_KEY_CVHOS_PY_1", ())
szCostr1 = localText.getText("TXT_KEY_CVHOS_PY_2", ())
Куда бы я их не ставил, результат один, исчезает интерфейс. Так как все-таки добиться замены обычного текста ссылкой на текст?
[spoiler]
[code]## Sid Meier's Civilization 4
## Copyright Firaxis Games 2005
from CvPythonExtensions import *
import PyHelpers
import CvUtil
import ScreenInput
import CvScreenEnums
import string
PyPlayer = PyHelpers.PyPlayer
PyInfo = PyHelpers.PyInfo
# globals
gc = CyGlobalContext()
ArtFileMgr = CyArtFileMgr()
localText = CyTranslator()
class CvHostageSplash:
NeseryozniyVET
26.10.2009, 01:47
sTitle = szCostr + gc.getPlayer(CyGame().getActivePlayer()).getCivilizationAdjective(0) + szCostr1"
Убери двойной апостраф в конце строчки (")
Хальк Юсдаль
26.10.2009, 01:55
<div class='quotetop'>Цитата</div>
sTitle = szCostr + gc.getPlayer(CyGame().getActivePlayer()).getCivilizationAdjective(0) + szCostr1"Убери двойной апостраф в конце строчки (")[/b]
Убрал но никакого положительного эффекта. Интерфейс пропадает именно, когда я добавляю.
szCostr = localText.getText("TXT_KEY_CVHOS_PY_1", ())
szCostr1 = localText.getText("TXT_KEY_CVHOS_PY_2", ())
P.S. 400 пост. Ну да ладно скоро будет 500, тогда и сделаю его ценным.
NeseryozniyVET
26.10.2009, 14:03
Проверил у себя - все работает.
Может ошибка в текстовом xml файле или питон коде?
Виложи питон код и xml файл.
Хальк Юсдаль
26.10.2009, 17:00
Вот ссылка на мод, что я русифицирую. Некоторые файлы были изменены мной, но это касается только текста, все работает.
http://rghost.ru/558077
Питон код я выкладывал под спойлером. Файл CvHostageSplash.py
XML WLBO_Rus_Pyth.xml
NeseryozniyVET
26.10.2009, 19:53
Сделал. У меня работал
sTitle = localText.getText("TXT_KEY_CVHOS_PY_1", ()) + gc.getPlayer(CyGame().getActivePlayer()).getCivilizationAdjective(0) + localText.getText("TXT_KEY_CVHOS_PY_2", ())
Хальк Юсдаль
26.10.2009, 21:10
Ура. Ура. Ура. Заработало, знать бы ещё почему у меня подобное не работало, из-за кавычек лишних наверное.
Хальк Юсдаль
26.10.2009, 21:54
Даблпост, ну да ладно.
Такой вопрос. Идет подобный код.
[code]
NeseryozniyVET
26.10.2009, 22:15
<div class='quotetop'>Цитата(Хальк Юсдаль * 26.10.2009, 21:54) 312125</div>[quote][code]
Хальк Юсдаль
26.10.2009, 22:28
<div class='quotetop'>Цитата</div>
Где она задается надо смотреть в файле, а ты не указал его названия.[/b] :huh1:
Файл CvTerrorismInfo.py.
<div class='quotetop'>Цитата</div>
"=" означает присвоить значение
"==" сравнить два значения
Ты просто сравниваешь две строчки, и если они одинаковые выполняется некий код.[/b]
Это я уже узнал. Мне интересно. А сравнение в отношении текста будет работать также успешно, как присвоение с текстами. То есть.
Test == localText.getText("TXT_ODIN", ())): будет работать, также как Test == "odin" ?
NeseryozniyVET
26.10.2009, 23:08
1)
if (MainPlayer.getTerroristType() == -1):
....sFloatingText = "None"
else:
....sFloatingText = MainPlayer.getTerroristName(eplayer)
Сразу над твоим примером
2) Должен работать
NeseryozniyVET
31.10.2009, 15:46
Если с помощью функции open("имя файла", 'r') пытаешся открыть файл для чтения, все идет нормально. Но если етого файла еще нет, то происходит збой.
Как перед откритием файла проверить существует ли он?
NeseryozniyVET, а ты не можешь доработать вот это
Автоматизация разведки воздушными юнитами, будьте в курсе событий вокруг империи (http://www.civfanatics.ru/forum/index.php?showtopic=7392) (там питон)
чтобы управление было не через "шифт+А" и "шифт+R", а кнопками?
NeseryozniyVET
02.11.2009, 19:56
<div class='quotetop'>Цитата(Snake_B * 2.11.2009, 12:16) 312712</div>
NeseryozniyVET, а ты не можешь доработать вот это
Автоматизация разведки воздушными юнитами, будьте в курсе событий вокруг империи (http://www.civfanatics.ru/forum/index.php?showtopic=7392) (там питон)
чтобы управление было не через "шифт+А" и "шифт+R", а кнопками?[/b]Будет свободное время -- гляну что там можна сделать.
NeseryozniyVET
02.11.2009, 19:56
<div class='quotetop'>Цитата(Snake_B * 2.11.2009, 12:16) 312712</div>
NeseryozniyVET, а ты не можешь доработать вот это
Автоматизация разведки воздушными юнитами, будьте в курсе событий вокруг империи (http://www.civfanatics.ru/forum/index.php?showtopic=7392) (там питон)
чтобы управление было не через "шифт+А" и "шифт+R", а кнопками?[/b]Будет свободное время -- гляну что там можна сделать.
Ой! Как так получилось?
<div class='quotetop'>Цитата</div>
NeseryozniyVET, а ты не можешь доработать вот это
Автоматизация разведки воздушными юнитами, будьте в курсе событий вокруг империи (там питон)
чтобы управление было не через "шифт+А" и "шифт+R", а кнопками?[/b]
Я сейчас доделываю этот модик: "шифт+С" будет отменять разведку. Пока без кнопок всё работает - на клавишах. Мод очень удобный, код весь в одном файле, работает и в Финал Фронтире, например. Имхо, для реальной игры - то, что надо.
<div class='quotetop'>Цитата(Igor3 * 15.12.2009, 19:04) 318018</div>
<div class='quotetop'>Цитата
NeseryozniyVET, а ты не можешь доработать вот это
Автоматизация разведки воздушными юнитами, будьте в курсе событий вокруг империи (там питон)
чтобы управление было не через "шифт+А" и "шифт+R", а кнопками?[/b]
Я сейчас доделываю этот модик: "шифт+С" будет отменять разведку. Пока без кнопок всё работает - на клавишах. Мод очень удобный, код весь в одном файле, работает и в Финал Фронтире, например. Имхо, для реальной игры - то, что надо.
[/b][/quote]
уже хорошо... по моему крайне желательно следущее:
1. кнопки управления
2.<strike> отмена автоматизации юнита</strike>
3. ошибка питона - чуть ли не каждый ход появляется, возможно какой то юнит был удален (сбит) или он был использован для бомб.удара...
Я доделал мод-авторазведку. Мод очень удобный, код весь в одном файле, не разбросан и в файле, работает и в Финал Фронтире, например. Имхо, для реальной игры - то, что надо.
WHEN UNIT IS SELECTED: shift+A will add unit to the autorecon queue, shift+C will remove unit from the autorecon queue.
If airunit is rebased, it's remove from autorecon queue.
Shift+R will execute all recon missions queued up in this manner.
Можно заценить..!!! :bayan:
Все биржи упали...Президент прервал свою поездку по Африке.. :win: Планета Немезида решила не тревожить больше землян в 2012 году, владеющих технологией авторазведки... :shock:
<div class='quotetop'>Цитата(Igor3 * 18.12.2009, 3:18) 318359</div>
Я доделал мод-авторазведку. Мод очень удобный, код весь в одном файле, не разбросан и в файле, работает и в Финал Фронтире, например. Имхо, для реальной игры - то, что надо.
WHEN UNIT IS SELECTED: shift+A will add unit to the autorecon queue, shift+C will remove unit from the autorecon queue.
If airunit is rebased, it's remove from autorecon queue.
Shift+R will execute all recon missions queued up in this manner.
Можно заценить..!!! :bayan:
Все биржи упали...Президент прервал свою поездку по Африке.. :win: Планета Немезида решила не тревожить больше землян в 2012 году, владеющих технологией авторазведки... :shock:
[/b]
<div class='quotetop'>Цитата</div>
а чё по русски не судьба было написать... :whistle:
дальше развивать будешь? ну там кнопки и т.п...
> If airunit is rebased, it's remove from autorecon queue.
при удалении, сбитии юнита ошибок не будет?[/b]
так... пишем ошибки....
1. При пустом списке (не внесен ни один самолет, нажимаем Shift+R -> окно ошибки.
2. Если выбран самолет добавленный в список и Shift+R -> окно ошибки (если тот которые не добавлен в список авторазведки, то всё срабатывает, хм... правда тоже через раз)
п.с. и желательно сделать не много по другому... нажимаешь shift+A (в переспективе надеюсь кнопку), появляется бинокль (миссия разведки) нажимаешь куда надо её выполнить и она сохраняется (чтобы не выбирать второй раз и не нажимать)
п.п.с. "If airunit is rebased, it's remove from autorecon queue." - возможно стоит сделать такое же при нажатии любой кнопки у этого самолета (выбрали другое задание, отменили старое)
Давай наверно будем обсуждать в этой теме... (http://www.civfanatics.ru/forum/index.php?showtopic=7392)
1. и 2. - нет с такой баготнёй не сталкивался. Может кеш не почищен? Или фалов много не стандартных?
Да, перейдём в другую ветку.
NeseryozniyVET
18.12.2009, 16:59
Что означают фигурные скобки?
self.autorecon = {}
<div class='quotetop'>Цитата(NeseryozniyVET * 18.12.2009, 17:59) 318452</div>
Что означают фигурные скобки?
self.autorecon = {}
[/b]
создается пустой "словарь".... я так понимаю что то вроде динамического массива...
Supremator
04.01.2010, 17:04
Кто - нибудь может совместить эти 2 файла.
С пометкой 1 - это терраформинг.
[attachmentid=6045]
Хальк Юсдаль
05.01.2010, 16:40
Кажись тут просто добавление части кода позволит их объединить, все таки изменения идут в разных частях. Так что просто добавил его, не проверял, так что не ручаюсь за работу. Но посмотри, по идее должно работать.
[attachmentid=6049]
Supremator
05.01.2010, 23:00
Спасибо, но изменяет только холмы.
Даже деревья не растут.
Хальк Юсдаль
06.01.2010, 02:35
<div class='quotetop'>Цитата</div>
Спасибо, но изменяет только холмы.Даже деревья не растут.[/b]
А до объединения росли?
Supremator
06.01.2010, 11:04
<div class='quotetop'>Цитата(Хальк Юсдаль * 6.1.2010, 1:33) 320635</div>
<div class='quotetop'>Цитата
Спасибо, но изменяет только холмы.Даже деревья не растут.[/b]
А до объединения росли?
[/b][/quote]
Не росли.
Спасибо за помощь, но я оставил только то что работает (возведение холмов).
NeseryozniyVET
12.02.2010, 00:55
Можно ли при работе с текстами вставлять в строку пробел (пустое место) определенной длинны в пикселях? (Для того чтоб сделать табличный вид табла очков пользуюсь пробелами (4 пикселя) и минусами (5 пикселей), но в некоторых случаях такой метод применятьт нельзя: разница в 1-3, 6, 7 и 11 пикселей)
NeseryozniyVET
06.04.2010, 18:15
Как изменить максимальную ширину и максимальную высоту текста подсказок (в левой части экрана).
Координаты менять научился, а вот с размерами никак :no:
Вопросики есть....
в RevolutionDCM.... есть такой вот код:
[code]
NeseryozniyVET
05.06.2010, 02:28
<div class='quotetop'>Цитата(Snake_B * 4.6.2010, 23:20) 337682</div>
пишет про ошибку в первой строке... т.е. предположительно "owner.getName"...
это стандартная функция?[/b]Скорей всего неопределен owner. Это должен быть указатель на игрока. Определяется разными методами.
А лучше лог вышли.
<div class='quotetop'>Цитата(NeseryozniyVET * 5.6.2010, 1:28) 337685</div>
<div class='quotetop'>Цитата(Snake_B * 4.6.2010, 23:20) 337682
пишет про ошибку в первой строке... т.е. предположительно "owner.getName"...
это стандартная функция?[/b]Скорей всего неопределен owner. Это должен быть указатель на игрока. Определяется разными методами.
[/b][/quote]
да нет... там как получается... вот конкретно эта ошибка...
если имена лидеров на русском, она появляется, если на английском, то всё в порядке...
она происходит при образовании новой цивилизации... видимо для нового лидера выбирается имя и с русскими символами ни как...
по идее такое же должно делаться при создании колонии... знать бы ещё где эта функция...
NeseryozniyVET
05.06.2010, 02:35
Ну так питон кирилицу нелюбит, надо в каракули переводить.
<div class='quotetop'>Цитата(NeseryozniyVET * 5.6.2010, 1:35) 337687</div>
Ну так питон кирилицу нелюбит, надо в каракули переводить.
[/b]
дык понятное дело что каракули... в том то и дело, что с каракулями ошибка...
<div class='quotetop'>Цитата(NeseryozniyVET * 5.6.2010, 1:28) 337685</div>
А лучше лог вышли.[/b]
всё... ошибки по питону кончились... :.V.:
Powered by vBulletin® Version 4.1.9 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot