PDA

Просмотр полной версии : Вопросы по питону



NeseryozniyVET
07.10.2009, 01:17
1) Можно ли в питоне создавать масив, число элементов которого зависит от переменной ? Например, если переменная равна 3 - создается масив из трех элементов, если 5 - то из пяти.
2) У многих элементов интерфейса (кнопки, надписи) есть такой параметр как WidgetTypes.. (WidgetTypes.WIDGET_GENERAL , WidgetTypes.WIDGET_PLOT_LIST). Я так понял это указатель на функцию или код, который выполняется при контакте с данным элементом. Вопрос: в каком файле описание этих WidgetTypes и как создать свой собственный WidgetTypes?

Gesse
07.10.2009, 08:11
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:
Можешь более подробный пример привести

Gesse
08.10.2009, 14:55
Так причем...
Я не так объяснил... вообщем извинияюсь спешил... попутал :)
Пример приведенный выше работает если есть модуль 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):

Gesse
11.10.2009, 09:57
Ну я привел первый который пришел в голову :)

Хальк Юсдаль
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&#39;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&#39;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("имя файла", &#39;r&#39;) пытаешся открыть файл для чтения, все идет нормально. Но если етого файла еще нет, то происходит збой.
Как перед откритием файла проверить существует ли он?

Snake_B
02.11.2009, 13:16
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]Будет свободное время -- гляну что там можна сделать.

Ой! Как так получилось?

Igor3
15.12.2009, 18:04
<div class='quotetop'>Цитата</div>
NeseryozniyVET, а ты не можешь доработать вот это
Автоматизация разведки воздушными юнитами, будьте в курсе событий вокруг империи (там питон)
чтобы управление было не через "шифт+А" и "шифт+R", а кнопками?[/b]

Я сейчас доделываю этот модик: "шифт+С" будет отменять разведку. Пока без кнопок всё работает - на клавишах. Мод очень удобный, код весь в одном файле, работает и в Финал Фронтире, например. Имхо, для реальной игры - то, что надо.

Snake_B
15.12.2009, 18:20
<div class='quotetop'>Цитата(Igor3 * 15.12.2009, 19:04) 318018</div>

<div class='quotetop'>Цитата
NeseryozniyVET, а ты не можешь доработать вот это
Автоматизация разведки воздушными юнитами, будьте в курсе событий вокруг империи (там питон)
чтобы управление было не через "шифт+А" и "шифт+R", а кнопками?[/b]

Я сейчас доделываю этот модик: "шифт+С" будет отменять разведку. Пока без кнопок всё работает - на клавишах. Мод очень удобный, код весь в одном файле, работает и в Финал Фронтире, например. Имхо, для реальной игры - то, что надо.
[/b][/quote]

уже хорошо... по моему крайне желательно следущее:
1. кнопки управления
2.<strike> отмена автоматизации юнита</strike>
3. ошибка питона - чуть ли не каждый ход появляется, возможно какой то юнит был удален (сбит) или он был использован для бомб.удара...

Igor3
18.12.2009, 02:18
Я доделал мод-авторазведку. Мод очень удобный, код весь в одном файле, не разбросан и в файле, работает и в Финал Фронтире, например. Имхо, для реальной игры - то, что надо.

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&#39;s remove from autorecon queue.
Shift+R will execute all recon missions queued up in this manner.

Можно заценить..!!! :bayan:
Все биржи упали...Президент прервал свою поездку по Африке.. :win: Планета Немезида решила не тревожить больше землян в 2012 году, владеющих технологией авторазведки... :shock:

Snake_B
18.12.2009, 02:38
<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&#39;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&#39;s remove from autorecon queue.
при удалении, сбитии юнита ошибок не будет?[/b]

так... пишем ошибки....
1. При пустом списке (не внесен ни один самолет, нажимаем Shift+R -> окно ошибки.
2. Если выбран самолет добавленный в список и Shift+R -> окно ошибки (если тот которые не добавлен в список авторазведки, то всё срабатывает, хм... правда тоже через раз)

п.с. и желательно сделать не много по другому... нажимаешь shift+A (в переспективе надеюсь кнопку), появляется бинокль (миссия разведки) нажимаешь куда надо её выполнить и она сохраняется (чтобы не выбирать второй раз и не нажимать)

п.п.с. "If airunit is rebased, it&#39;s remove from autorecon queue." - возможно стоит сделать такое же при нажатии любой кнопки у этого самолета (выбрали другое задание, отменили старое)

Давай наверно будем обсуждать в этой теме... (http://www.civfanatics.ru/forum/index.php?showtopic=7392)

Igor3
18.12.2009, 03:07
1. и 2. - нет с такой баготнёй не сталкивался. Может кеш не почищен? Или фалов много не стандартных?
Да, перейдём в другую ветку.

NeseryozniyVET
18.12.2009, 16:59
Что означают фигурные скобки?

self.autorecon = {}

Snake_B
18.12.2009, 17:46
<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:

Snake_B
05.06.2010, 00:20
Вопросики есть....

в RevolutionDCM.... есть такой вот код:
[code]

NeseryozniyVET
05.06.2010, 02:28
<div class='quotetop'>Цитата(Snake_B * 4.6.2010, 23:20) 337682</div>
пишет про ошибку в первой строке... т.е. предположительно "owner.getName"...
это стандартная функция?[/b]Скорей всего неопределен owner. Это должен быть указатель на игрока. Определяется разными методами.
А лучше лог вышли.

Snake_B
05.06.2010, 02:31
<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
Ну так питон кирилицу нелюбит, надо в каракули переводить.

Snake_B
05.06.2010, 03:09
<div class='quotetop'>Цитата(NeseryozniyVET * 5.6.2010, 1:35) 337687</div>

Ну так питон кирилицу нелюбит, надо в каракули переводить.
[/b]

дык понятное дело что каракули... в том то и дело, что с каракулями ошибка...

Snake_B
05.06.2010, 14:32
<div class='quotetop'>Цитата(NeseryozniyVET * 5.6.2010, 1:28) 337685</div>

А лучше лог вышли.[/b]

всё... ошибки по питону кончились... :.V.: