PDA

Просмотр полной версии : Требуется помощь: Ошибка в TurnDamage



kabjans
12.02.2010, 02:05
Хотел вернуть "TurnDamage" в CivIVCol, но получил такой error message при компиляции:

CvUnit.cpp

Line: 802
Message: error C2664: 'CvUnit::changeDamage' : cannot convert parameter 2 from 'PlayerTypes' to 'CvUnit *'|

[code]

NeseryozniyVET
12.02.2010, 02:40
<div class='quotetop'>Цитата(kabjans * 12.2.2010, 0:03) 324841</div>
cannot convert parameter 2 from &#39;PlayerTypes&#39; to &#39;CvUnit *&#39;|

802: changeDamage(GC.getFeatureInfo(eFeature).getTurnDamage(), NO_PLAYER);[/b]
Неможет конвертировать второй параметр из &#39;PlayerTypes&#39; в &#39;CvUnit *&#39;
NO_PLAYER это PlayerTypes
Просмотри параметры для PlayerTypes цывы и колонизации.

pashaintel
12.02.2010, 09:20
Видимо,вместо NO_PLAYER нужно прописать юнита,который получает повреждение. Посмотри использование changeDamage в колонизации методом поиска.

kabjans
12.02.2010, 11:19
<div class='quotetop'>Цитата(NeseryozniyVET * 12.2.2010, 2:38) 324842</div>

<div class='quotetop'>Цитата(kabjans * 12.2.2010, 0:03) 324841
cannot convert parameter 2 from &#39;PlayerTypes&#39; to &#39;CvUnit *&#39;|

802: changeDamage(GC.getFeatureInfo(eFeature).getTurnDamage(), NO_PLAYER);[/b]
Неможет конвертировать второй параметр из &#39;PlayerTypes&#39; в &#39;CvUnit *&#39;
NO_PLAYER это PlayerTypes
Просмотри параметры для PlayerTypes цывы и колонизации.
[/b][/quote]
А можно по-подробнее. В Циве 3250 ссылок на PlayerTypes, в Колонизации - 1903. В каком файле и что собственно смотреть?

<div class='quotetop'>Цитата(Пашок * 12.2.2010, 9:18) 324850</div>

Видимо,вместо NO_PLAYER нужно прописать юнита,который получает повреждение. Посмотри использование changeDamage в колонизации методом поиска.
[/b]
Вряд ли это возможно. Ведь идея вернуть "TurnDamage" в Колонизацию связана с тем, что каждый юнит, попавший на определенную клетку, получает повреждение. К примеру, корабль, попавший в шторм на море теряет несколько процентов прочности. Или сухопутный юнит, оказавшийся в пустыне или болоте, также теряет силу. И как в таком случает прописывать юниты? Они же совершенно различные.

Кроме того в Колонизации changeDamage относится к случаю боестолкновения, когда есть атакующий юнит и соответственно есть защищающийся юнит. Например changeDamage(iAttackerDamage, pDefender). Случая, когда юнит получает повреждения от самого факта нахождения на "опасной" клетке там, естественно нет.

NeseryozniyVET пишет, что это означает "cannot convert parameter 2 from &#39;PlayerTypes&#39; to &#39;CvUnit *&#39; = Не может конвертировать второй параметр из &#39;PlayerTypes&#39; в &#39;CvUnit *&#39;".

Поэтому возможно решение надо искать в том, что выдает Build log. А именно в этой фразе:
<div class='quotetop'>Цитата</div>
"Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast"[/b]
Я тут поискал на интернете, что значат "reinterpret_cast", "C-style cast" и "function-style cast". Тут (http://www.cppreference.com/wiki/keywords/reinterpret_cast) нашел, к примеру это:

<div class='quotetop'>Цитата</div>[quote]reinterpret_cast
Syntax:

[code]

NeseryozniyVET
12.02.2010, 11:36
PlayerTypes - это игрок, в питон кодах обычно обозначается переменной ePlayer и является целым числом (> -1, NO_PLAYER = -1).
Параметры игрока в SDK описуются в файле CvPlayer.h и CvPlayer.cpp

kabjans
12.02.2010, 15:06
В \Sid Meier&#39;s Civilization 4\Beyond the Sword\CvGameCoreDLL\CvPlayer.cpp понятие "Damage" встречается лишь
- при взятии или защите города (void CvPlayer::acquireCity) и
- при получении Goody (bool CvPlayer::canReceiveGoody).
Даже упоминания о получения повреждений от нахождении на клетке там нет.

В Колонизации ситуация практически аналогичная.

NeseryozniyVET
12.02.2010, 17:34
Посмотри описание функции changeDamage(int, ePlayer); Найди какиe параметры ePlayer она использует, и посмотри есть ли они в CyPlayer.h

pashaintel
12.02.2010, 20:28
kabjans!! Никого не слушай и не трать время попусту. Итак,компилятор выдал тебе:
Message: error C2664: &#39;CvUnit::changeDamage&#39; : cannot convert parameter 2 from &#39;PlayerTypes&#39; to &#39;CvUnit *&#39;|
Это значит,что он не может конвертировать &#39;PlayerTypes&#39; в &#39;CvUnit *&#39;. То есть вместо игрока должен быть указан юнит (CvUnit *).
Если ты пишешь свой код в CvUnit.cpp, попробуй переписать вот так:


changeDamage(GC.getFeatureInfo(eFeature).getTurnDamage(), this);
Если это не будет работать, выложи здесь свой код поподробнее.

P.S. Ты абсолютно прав в том,что в колонизации <div class='quotetop'>Цитата</div>
changeDamage относится к случаю боестолкновения, когда есть атакующий юнит и соответственно есть защищающийся юнит. Например changeDamage(iAttackerDamage, pDefender).[/b] В своём собственном посте ты описал правильную подачу этой функции. То есть ,для того,чтобы она работала нужно указать два параметра: количественное значение ущерба и юнит,который этот ущерб получает. И поверь,этой функции абсолютно по барабану, от какого <div class='quotetop'>Цитата</div>
факта [/b] она работает. Главное,указать ущерб и юнита,который его получает.

kabjans
12.02.2010, 20:46
<div class='quotetop'>Цитата(Пашок * 12.2.2010, 20:26) 324899</div>

kabjans!! Никого не слушай и не трать время попусту. Итак,компилятор выдал тебе:
Message: error C2664: &#39;CvUnit::changeDamage&#39; : cannot convert parameter 2 from &#39;PlayerTypes&#39; to &#39;CvUnit *&#39;|
Это значит,что он не может конвертировать &#39;PlayerTypes&#39; в &#39;CvUnit *&#39;. То есть вместо игрока должен быть указан юнит.
Если ты пишешь свой код в CvUnit.cpp, попробуй переписать вот так:


changeDamage(GC.getFeatureInfo(eFeature).getTurnDamage(), this);
Если это не будет работать, выложи здесь свой код поподробнее.
[/b]
Спасибо, Пашок!

Твой код


changeDamage(GC.getFeatureInfo(eFeature).getTurnDamage(), this);
позволил компилировать дальше. :applau2:

Дошел до CyPlot.cpp и снова ошибка, что для меня нормально. Сейчас разбираться буду с ней.

Последние известия с фронта:

Скомпилировал! 0 errors 0 warmings.

ОГРОМНОЕ СПАСИБО!!! :worthy:

Можно продолжать работу дальше.

pashaintel
12.02.2010, 21:10
поздравления :applau2: !
Ты сначала этот то код проверь,работает или нет :secret:

kabjans
12.02.2010, 21:17
<div class='quotetop'>Цитата(Пашок * 12.2.2010, 21:08) 324904</div>

поздравления :applau2: !
Ты сначала этот то код проверь,работает или нет :secret:
[/b]
Пока это только голая CvGameCoreDLL.dll. Сейчас собираю XML и ART части. Лишь когда они будут готовы, можно будет запустить и проверить работоспособность (запустится ли) и правильность функционирования.

pashaintel
12.02.2010, 21:18
<div class='quotetop'>Цитата(kabjans * 12.2.2010, 20:15) 324906</div>

<div class='quotetop'>Цитата(Пашок * 12.2.2010, 21:08) 324904

поздравления :applau2: !
Ты сначала этот то код проверь,работает или нет :secret:
[/b]
Пока это только голая CvGameCoreDLL.dll. Сейчас собираю XML и ART части. Лишь когда они будут готовы, можно будет запустить и проверить работоспособность (запустится ли) и правильность функционирования.
[/b][/quote]
Удачи :bye:

kabjans
12.02.2010, 22:06
Ввел шторм для пробы. Загнал каравеллу в точку шторма.

Далее хроника с места события.

ход......состояние каравеллы
0...................3/3
1...................2.4/3
2...................2.1/3
3................... 1.8/3
4...................1.5/3
5...................1.2/3

Шторм отступил на соседнюю клетку и на каравелле открыли по этому случаю бочонок рома. Надо поторопиться и успеть к ним в кают компанию, пока они весь ром не выпили без меня. :win:

Еще раз ОГРОМНОЕ СПАСИБО за помощь!

pashaintel
12.02.2010, 22:42
:bayan: Пришли,пожалуйста,бутылочку бандеролью :biglol: , только ценной,а то на почте выпьют :boo:, у них там тоже функция changeDamage неплохо работает

kabjans
12.02.2010, 23:22
Снимки шторма

http://img715.imageshack.us/img715/8459/stormj.th.jpg (http://img715.imageshack.us/img715/8459/stormj.jpg)

и рифов из Колонизации.

http://img175.imageshack.us/img175/8488/reefs.th.jpg (http://img175.imageshack.us/img175/8488/reefs.jpg)

Павел I
13.02.2010, 12:12
Рифы мне не очень нравятся)

Supremator
13.02.2010, 15:23
Это похоже на астеройды.

kabjans
13.02.2010, 17:43
<div class='quotetop'>Цитата(Павел I * 13.2.2010, 12:10) 324962</div>

Рифы мне не очень нравятся)
[/b]
<div class='quotetop'>Цитата(Gx710 * 13.2.2010, 15:21) 324986</div>

Это похоже на астеройды.
[/b]
Правильно, это и есть астероиды. А те рифы, что я нашел, были сделаны из "меди". Они вообще розовыми появились на экране, как цветочная клумба. Смотрелось сие "чудо" просто ужасно. Поэтому я перепробовал массу вариантов и остановился на астероидах. Они более всего напоминают рифы.

Кстати, из шторма очень легко сделал "грозу". Это и для моря-океана, и для суши. Ходить под ней можно без минусов, но 5% TurnDamage есть. Плюс сейчас буду давать минусы к добыче ресурсов на клетках в случае начала шторма или грозы на ней.

kabjans
14.02.2010, 00:47
Нашел еще пару интересных возможностей в данном моде.

Во-первых, шторм на море у побережья может уменьшить отдачу еды с морских клеток, что абсолютно логично. Причем это можно очень просто менять самому в настройках. Я свел отдачу при шторме к нулю. Объяснение простое: шторм и корабли стоят у пирса.

Аналогично шторму ввел для суши и моря "дождь с грозой". Урон юнитам и недобор с клеток минимальный.

Во-вторых, в моде можно не только негативные явления природы типа шторма или грозы вводить, но и положительные. Я ввел для пробы "встречный ветер" (естественно без минусов по повреждению), который дает плюс 1 к скорости движения корабля. Все прекрасно работает.

Но тут возник вопрос.

При наведении мыши на клетку со штормом появляется красная надпись "Damage per Turn 15%".

Я не нашел источник, откуда она берется. Сама надпись - это TXT_KEY_PLOT_DAMAGE из CIV4GameText.....xml. Но откуда она идет?

Кроме того непонятно откуда идет именно красный цвет. Меня это интересует, потому что для "встречного ветра" я хотел бы ввести надпись зеленым цветом.

Кто-нибудь знает где копать? Поиск в питоне и xml файлах Цивилизации (искал по "TXT_KEY_PLOT_DAMAGE") ничего не дал. По идее из Питона команда должна идти, но там, хоть тресни, ее нет.

pashaintel
14.02.2010, 01:59
Посмотри в CvGameTextMgr.cpp

kabjans
14.02.2010, 02:15
<div class='quotetop'>Цитата(Пашок * 14.2.2010, 1:57) 325040</div>

Посмотри в CvGameTextMgr.cpp
[/b]
Нашел! Точно и там же цвет задается.

Там так дано:

[code]

pashaintel
14.02.2010, 02:22
<div class='quotetop'>Цитата(kabjans * 14.2.2010, 1:13) 325042</div>

<div class='quotetop'>Цитата(Пашок * 14.2.2010, 1:57) 325040

Посмотри в CvGameTextMgr.cpp
[/b]
Нашел! Точно и там же цвет задается.

Там так дано:

[code]

kabjans
14.02.2010, 02:29
<div class='quotetop'>Цитата(Пашок * 14.2.2010, 2:20) 325044</div>

<div class='quotetop'>Цитата(kabjans * 14.2.2010, 1:13) 325042

<div class='quotetop'>Цитата(Пашок * 14.2.2010, 1:57) 325040

Посмотри в CvGameTextMgr.cpp
[/b]
Нашел! Точно и там же цвет задается.

Там так дано:

Надо попробовать. По идее должно получиться, если с грамматикой ничего не наврал. У меня iDamage = -1 при "встречном ветре".
[/b][/quote]
В таком случае эта строка у тебя будет отображаться у каждой клетки,там где надо и там,где не надо.
[/b][/quote]
Почему? У меня получилось именно на клетке со "встречным ветром." Цвет зеленый и надпись та, что мне надо. На соседней, где шторм, там красная надпись. На других вообще без надписей.

Я проверил только на море, так как "встречного ветра" на суше у меня естественно нет.

http://img138.imageshack.us/img138/8103/tailwind.th.jpg (http://img138.imageshack.us/img138/8103/tailwind.jpg)

kabjans
14.02.2010, 21:18
Где-то на форуме при обсуждении одного из модов, представленных тут, вычитал фразу о том, что AI обходит опасные участки типа снегов. Причем сделано это не тупым запретом на проход по снегу, а AI именно знает, что там опасно, и поэтому обходит.

Целый час искал, читая форум, но никак не найти, где это было сделано. Кто-нибудь знает, в каком из модов это есть?

Заранее спасибо.

Хальк Юсдаль
14.02.2010, 22:05
<div class='quotetop'>Цитата(kabjans * 14.2.2010, 20:16) 325145</div>

Где-то на форуме при обсуждении одного из модов, представленных тут, вычитал фразу о том, что AI обходит опасные участки типа снегов. Причем сделано это не тупым запретом на проход по снегу, а AI именно знает, что там опасно, и поэтому обходит.
[/b]

Файл GlobalDefines.xml. Значение PATH_DAMAGE_WEIGHT изменяется на нужное, в данном случае 500000 кажется. Цифру эту опытным путем вывел васака.

P.S. Странно, текст сообщения при отправке удвоился.

kabjans
14.02.2010, 23:14
<div class='quotetop'>Цитата(Хальк Юсдаль * 14.2.2010, 22:03) 325158</div>

<div class='quotetop'>Цитата(kabjans * 14.2.2010, 20:16) 325145

Где-то на форуме при обсуждении одного из модов, представленных тут, вычитал фразу о том, что AI обходит опасные участки типа снегов. Причем сделано это не тупым запретом на проход по снегу, а AI именно знает, что там опасно, и поэтому обходит.
[/b]

Файл GlobalDefines.xml. Значение PATH_DAMAGE_WEIGHT изменяется на нужное, в данном случае 500000 кажется. Цифру эту опытным путем вывел васака.

P.S. Странно, текст сообщения при отправке удвоился.
[/b][/quote]
Большое спасибо, Хальк Юсдаль, за подсказку. Я совершенно точно помнил, что читал об этом на русском языке, а значит на нашем форуме, вот только где точно найти никак не мог. Сейчас поэкспериментирую на штормах и рифах....