silenthunter
May 20 2010, 12:02
подскажите, пожалуйста, можно ли скормить тексты(диалоги, интерфейс, описания предметов) с кириллицей буржуйской версии К:ГПК (age of pirates 2 city of abandoned ships)? если да, то в какой кодировке?
dolphin_sv
May 20 2010, 14:39
Собственно не понятна суть проблемы... Я делаю Историю пирата на age of pirates 2 city of abandoned ships, проблем с кирилицей никаких проблем нет. Вместо английскиого текста пиши русский и все.
silenthunter
May 20 2010, 14:57
Цитата(dolphin_sv @ May 20 2010, 14:39)
Собственно не понятна суть проблемы... Я делаю Историю пирата на age of pirates 2 city of abandoned ships, проблем с кирилицей никаких проблем нет. Вместо английскиого текста пиши русский и все.
а я вот пробовал не меняя кодировки файла - в игре кракозябры вместо кириллицы. впрочем с другими (UTF-8, UTF-8 без BOM, 1251 и еще парой) кодировками тоже самое.
может в редакторе дело? редактировал в Notepad++, в PSPad, в редакторе, прилепленом к ТоталКоммандеру(AkelPad кажется называется).
dolphin_sv
May 20 2010, 15:27
Не знаю, пользовался и Notepad++ и AkelPad и Notepad и SynPlus - проблем не было. Сейчас ползуюсь в Visual Studio 2008, т.к. с ним привычнее... Кодировку никогда не менял.
silenthunter
May 20 2010, 19:52
разобрался таки. собака зарыта в текстурах и инихах шрифтов в ресурсах. Если кто-то на эти же грабли попадется. нужны инихи
resource/ini/fonts_rus.ini
resource/ini/fonts.ini
и текстуры
resource/textures/fonts/
из русской версии игры.
dolphin_sv
May 20 2010, 19:57
Ну так это ж само собой, первым делом надо было сделать... Я думал у тебя после этого неверно отображались шрифты, почему и удивился.
Black Angel
May 29 2010, 21:51
Подскажите пожалуйста как записать в коде проверку на то что идет битва в море или на нас напали?на суше это аларм,а вот в море как?Проще говоря как определить в бою ли я или нет?Не на суше,а в море.
Проверяй возможен или нет выход на глобальную карту. Если невозможен - то в бою
dolphin_sv
May 30 2010, 12:46
Хм... Вообще-то - если не возможен выход, значит рядом где-то есть вражеские корабли или вражеский форт, а это еще не значит, что корабль с кем-то воюет.
Можно попробовать проверить залогиненых капитанов, если у одного из них lastballcharacter - это ГГ или его компаньон и наоборот, если у ГГ или его компаньона есть кто-то в lastballcharacter - значит ГГ с кем-то воюет.
lastballcharacter очищается при логине корабля в море.
Black Angel
May 30 2010, 12:51
это не мой случай чтобы так делать.У меня при переходе из глобалки в море bDisableMapEnter не хочет работать правильно.
Для примера,вот кусок кода
Код
int i = sti(ch.ship.crew.quantity);
bool ok = Whr_IsNight() && !bDisableMapEnter;
if(i <= 2 || ok)
{
}
else
{
SendMessage(&Sailors, "lis", AI_MESSAGE_ADD_SHIP, ship,RealShips[Index].name);
}
Из кода видно, что если команды меньше 2 человек людишек с корабля убрать(те которые по вантам ползают),ночью если нет битвы они спят,а если есть битва то бегают и выпоняют свои действия.У меня выходит вот что: при малой команде человечков нет(как и должно быть),ночью добросовестно спят,а вот во время ночного боя появляться не хотят.В чем косяк?
Warship
May 31 2010, 07:24
Переменной bDisableMapEnter значение присваивается в обработчике события SHIP_CHECK_RELOAD_ENABLE - Ship_CheckMainCharacter(), т.е. обновления корабля ГГ.
А Вы, насколько я понял, юзаете это значение в обработчике события SHIP_CREATE - Ship_Walk_Create(), т.е. при создании корабля, когда игра понятия не имеет, что там у Вас в этой переменной содержится (значение в ней не актуально, ибо осталось с "прошлого" раза).
Вот и лезут непонятки
Как тут реализовать - хз. Можно было бы попробовать пройтись по всем залогиненным кораблям, определить, кто точит на нас зубы, вычислить минимальное расстояние между кораблем ГГ и кораблем противника и сравнить его с необходимым расстоянием для выхода в море (константа).
Но так тоже не выйдет: координаты кораблям ставятся тоже явно после их создания (т.е. после рассылки и обработки события SHIP_CREATE, от которого мы крутимся).
Можно проверить, сработает-ли сообщение
SendMessage(&Sailors, "lis", AI_MESSAGE_ADD_SHIP, ship, RealShips[Index].name);
Когда корабли уже залогинены (что-то мне подсказывает, что не сработает), и вот тогда уже и проверять и посылать его, если нужно.
Но в любом случае, Вам не удастся таким-же макаром "выгнать" матросов на палубу, если вдруг ночью к вашему кораблю подойдет корабль противника.
Имхо, лучше отложить до лучших времен, без двига - нереализуемо.
P.S. Ваш код плохо читаем.
Black Angel
May 31 2010, 10:36
хочется всего лишь на всего чтобы если на глобалки сторожевой патруль напал и мы переходим в море - матросы появились бы(это я про ночное время суток говорю).Влюбом случае сцена перегружается а значит должно и обновиться все окружаещее.А вот корабль перегрузился а мотросов не выставил.Он загружает старое значение переменой(тогдашней когда было до военых действий?)?
Пока Акелла выдаст двиг(она колдует уже 2 месяца над этим мероприятием) мои дети в универ поступят,а интерес к даному двигу пропадет, тк есть пару интересных двигов с графикой по лучше.
P.S.В смысле плохо читаем?
Посмотри файл shipWalk.с попробуй или поискать где вызываются его методы, или вручную вызывай их когда тебе надо.
Warship
May 31 2010, 11:18
Нави, он, насколько я понял, и смотрит как-раз shipWalk.c
Но другое дело, что там обработчики событий просто не знают, кто там для ГГ враг, кто друг.
Поэтому да, только вызывать вручную (даже не вызывать - вначале логику придется переписать, там ж на событиях все), где-нить в процедуре Ship_Add2Sea().
===
Цитата(Black Angel @ May 31 2010, 18:36)
P.S.В смысле плохо читаем?
Ваш код легко можно заменить на:
Код
int crewQty = sti(ch.ship.crew.quantity);
bool ok = !Whr_IsNight() || bDisableMapEnter;
if(crewQty > 2 && ok)
{
SendMessage(&Sailors, "lis", AI_MESSAGE_ADD_SHIP, ship,RealShips[Index].name);
}
Где на первую строку можно вообще не смотреть, ибо из названия переменной все понятно. Вот это и имел ввиду.
Black Angel
May 31 2010, 19:33
Цитата(Warship @ May 31 2010, 12:18)
Нави, он, насколько я понял, и смотрит как-раз shipWalk.c
Но другое дело, что там обработчики событий просто не знают, кто там для ГГ враг, кто друг.
Поэтому да, только вызывать вручную (даже не вызывать - вначале логику придется переписать, там ж на событиях все), где-нить в процедуре Ship_Add2Sea().
===
Ваш код легко можно заменить на:
Код
int crewQty = sti(ch.ship.crew.quantity);
bool ok = !Whr_IsNight() || bDisableMapEnter;
if(crewQty > 2 && ok)
{
SendMessage(&Sailors, "lis", AI_MESSAGE_ADD_SHIP, ship,RealShips[Index].name);
}
Где на первую строку можно вообще не смотреть, ибо из названия переменной все понятно. Вот это и имел ввиду.
Ну да,я и имел в виду shipWalk.c и функцию в этом файле Ship_Walk_Create().
Ааа! А я думал про другое.Каждый задает название переменой как ему удобно.
а если AIsea.c подинклудить?
а почему там обработчики событий не знают, кто там для ГГ враг, кто друг?
А в sea.c этот обработчики событий есть?
Warship
Jun 1 2010, 01:19
Цитата(Black Angel @ Jun 1 2010, 03:33)
а почему там обработчики событий не знают, кто там для ГГ враг, кто друг?
Сори, я не это хотел сказать. Имел ввиду, что именно значение bDisableMapEnter не актуально.
Почему:
Значение этой переменной обновляется (1 раз в секунду, вроде) когда ГГ уже в море, когда оно прогружено.
А матросы на палубе создаются во время прогрузки. Т.е. раньше того, как значение переменной изменится.
Вообще, использование bDisableMapEnter при загрузке тебе ничего не даст.
Нужно копать в сторону обхода всех кораблей (когда они созданы и у них уже есть координаты, но когда еще не вышли с фэйдера) и проверять на врага и расстояние и посылать вот это сообщение на создание матросов на палубе (в Ship_Walk_Create() только закомментить).
Black Angel
Jun 1 2010, 02:01
Цитата(Warship @ Jun 1 2010, 02:19)
Сори, я не это хотел сказать. Имел ввиду, что именно значение bDisableMapEnter не актуально.
Почему:
Значение этой переменной обновляется (1 раз в секунду, вроде) когда ГГ уже в море, когда оно прогружено.
А матросы на палубе создаются во время прогрузки. Т.е. раньше того, как значение переменной изменится.
Вообще, использование bDisableMapEnter при загрузке тебе ничего не даст.
Нужно копать в сторону обхода всех кораблей (когда они созданы и у них уже есть координаты, но когда еще не вышли с фэйдера) и проверять на врага и расстояние и посылать вот это сообщение на создание матросов на палубе (в Ship_Walk_Create() только закомментить).
А если проверить на отношение к игроку это прокатить должно(чисто теоретически)?А то я во многих местах идет толька эта единственая проверка bDisableMapEnter и больше других почему то нет...
Warship
Jun 1 2010, 05:58
Я ж и говорю, проверять нужно все корабли на отношение (и расстояние).
И проверять нужно уже после прогрузки кораблей. Хотя, можно попробовать проверять и в Ship_Walk_Create(), но там на расстояние не проверить точно, ибо не инициализировано оно еще тогда.
Если враг и близко - посылать вот энто сообщение, чтобы матросня на палубу вылезла.
Сама по себе проверка if(bDisableMapEnter) {} вполне нормальная, просто именно в этом случае она не поможет.
Цитата
Сори, я не это хотел сказать. Имел ввиду, что именно значение bDisableMapEnter не актуально.
да это нафиг не надо
человек хочет чтобы они всегда бегали... а следовательно пусть принудительно вызывает эти методы... или смотрит шип_логин... там возможно условие стоит, выставлять команду или нет.
Black Angel
Jun 1 2010, 17:49
2 Warship после загрузки кораблей бесполезно ставить проверку,они загрузятся без матросни тк ночь и все спокойно.Проверку надо делать до загрузки но после инициализации.
В sеа.с тоже не знает что такое бдисайблмапентер.Где ж это ставить в каком файле?
2 navvy как раз надо чтобы в мирное время суток ночью их не было а в военое время были всегда.
Цитата
2 navvy как раз надо чтобы в мирное время суток ночью их не было а в военое время были всегда.
Ну значит ищи где они вообще выставляются, смотри какие там проверки стоят, и ставь свои... если bDisableMapEnter там еще не выставлен, значит пиши свои, как и говорил Варшип... проверкой враждебных кораблей в радиусе атаки.
Black Angel
Jun 6 2010, 23:46
Подскажите как включить все файрплайсы на коробле?
и еще вопрос - почему когда я пишу:
Код
string kLocator = LAi_FindFreeRandomLocator("goto");
ChangeCharacterAddressGroup(sld, "Shore57", "goto", kLocator);
игра падает в этом месте?
В ерор логе нет ничего.Почему так?
З.Ы. Скрипты кгпк патча 1.2.4
Цитата
игра падает в этом месте?
а ты уверен, что находишься в локации Shore57?
Black Angel
Jun 7 2010, 10:23
Цитата(navy @ Jun 7 2010, 07:53)
а ты уверен, что находишься в локации Shore57?
абсолютно.Сначало гружу гг потом перегружаю локацию,потом пишу те строки и игра падает.И в чем косяк не знаю.
вот код в котором это используется:
Код
for (i=1; i<6; i++)
{
sTemp = "pirate_" + i;
sld = GetCharacter(NPC_GenerateCharacter(sTemp, sTemp, "man", "man", 15, PIRATE, 1, true));
LAi_SetWarriorType(sld);
LAi_SetStayType(sld);
LAi_warrior_DialogEnable(sld, true);
LAi_SetLoginTime(sld, 0.0, 24.0);
LAi_SetHP(sld, 250.0, 250.0);
sld.BreakTmplAndFightGroup = true;
string kLocator = LAi_FindFreeRandomLocator("goto");
ChangeCharacterAddressGroup(sld, "Shore57", "goto", kLocator );
LAi_group_MoveCharacter(sld, "EnemyFight");
}
а вот если записать вот так:
Код
ChangeCharacterAddressGroup(sld, "Shore57", "goto", "goto"+i);
то все работает нормально,только создаваемые боты все время находятся местами в двоем в одной локаторе.
Смотри код ГПК, там где абордаж, там раскидываются враги по локаторам.
dolphin_sv
Jun 7 2010, 20:19
ПОпробуй так:
PlaceCharacter(sld, "goto", "random_must_be");
Black Angel
Jun 8 2010, 21:34
2 dolphin_sv
Спасибо огромное!Работает отлично!Сам бы никогда до такого не додумался
Подскажите пожалуйста где ошибка?
Код
void after_abordage()
{
SetEventHandler(SHIP_ACTIVATE_FIRE_PLACE, "Ship_ActivateFirePlace", 0);
ref rShipObject;
int iNumFirePlaces = 10;
SendMessage(pchar, "le", MSG_SHIP_GET_NUM_FIRE_PLACES, &iNumFirePlaces);
for (i=0; i<=iNumFirePlaces; i++)
{
PostEvent(SHIP_ACTIVATE_FIRE_PLACE, rand(300), "ialsfl", pchar, pchar, i, "ship_onfire", 3, -1);
PostEvent(SHIP_FIRE_DAMAGE, rand(300), "lllf", pchar, pchar, i, 3);
}
}
Black Angel
Jun 13 2010, 23:40
Почему когда пишу так:
Код
ref rCharacter = &Characters[iAbordageCharacter];
aref rShipObject = GetRealShip( sti(rCharacter.ship.type) );
Ship_SetExplosion(rCharacter, rShipObject);
в Ship_SetExplosion на строчку
PostEvent(SHIP_ACTIVATE_FIRE_PLACE, rand(300), "ialsfl", rShipObject, rCharacter, 1, "ship_onfire", 330, -1);
не подается тот самый корабль(ничего не происходит).А когда обращаюсь из BattleInterface.с всё работает нормально.
В чем причина?
Когда пишу вместо rCharacter pchar то вот такая картина:
Нажмите для просмотра прикрепленного файлаа когда стоит rCharacter то вот такая картина:
Нажмите для просмотра прикрепленного файла
по твоим кускам кода не понятно ничего... принцип тот же, смотри как уже сделано, и делай так же
ALexusB
Jun 15 2010, 09:47
код вида
string kLocator = LAi_FindFreeRandomLocator("goto");
можно просто не найти локатор, потому и сделан был флаг "мас_би" в
PlaceCharacter(sld, "goto", "random_must_be");
Визуально НПС гуляют, но имеют приписку к локатору, а их конечное число и все заняты.
В случае гото можно пихать на один локатор толпы, потом разбредутся. Главное что б локатор был вне поля зрения (сзади ГГ). Так сделан абордаж на суше - место респавна.
В вот в таверне сидячие места будут с наложениями уже, потому там нужно убедится, что место есть в принципе (опять же в коде есть примеры с рассадкой ПГГ и пьяни с офами).
Black Angel
Jun 15 2010, 11:07
2 ALexusB
Спасибо за разъяснения
Цитата(navy @ Jun 15 2010, 07:54)
по твоим кускам кода не понятно ничего... принцип тот же, смотри как уже сделано, и делай так же
Еслибы в коде имелись рабочие примеры...там они закоменченые и не жизнеспособные-падает игрушка при их использовании.
Вот весь воид:
Код
void Ship_SetExplosion(ref rCharacter, ref rShipObject)
{
SendMessage(rShipObject, "le", MSG_SHIP_GET_NUM_FIRE_PLACES, &iNumFirePlaces);
PostEvent(SHIP_ACTIVATE_FIRE_PLACE, rand(300), "ialsfl", rShipObject, rCharacter, 1, "ship_onfire", 330, -1);
PostEvent(SHIP_BRANDER_DETONATE, 800, "l", sti(rCharacter.index));
PlaySound("Sea Battles\Vzriv_fort_001.wav");
Ship_SetTaskNone(SECONDARY_TASK, sti(rCharacter.index));
}
И при подаче на 2 строчку из AIAbordage.c из воида void Return2SeaAfterAbordage() со строчек кода
Код
ref rCharacter = &Characters[iAbordageCharacter];
aref rShipObject;
Ship_SetExplosion(rCharacter, rShipObject);
не находит rShipObject.При попытке присвоить что либо вразумительное либо падает игра либо опять таки ничего не происходит.
А когда заменяю на
Ship_SetExplosion(
pchar, rShipObject);
то происходит то что мне нужно.В чем ошибка?
Еще вопрос,как насильно уронить мачту?
1. у тебя rShipObject не инициализирован, следовательно вылет
2. если поискать по коду месседж SHIP_ACTIVATE_FIRE_PLACE, то можно найти куски рабочие, и ты можешь сравнить и поискать рабочий вариант
Black Angel
Jun 15 2010, 15:44
Цитата(navy @ Jun 15 2010, 12:57)
1. у тебя rShipObject не инициализирован, следовательно вылет
2. если поискать по коду месседж SHIP_ACTIVATE_FIRE_PLACE, то можно найти куски рабочие, и ты можешь сравнить и поискать рабочий вариант
1.а как его инициализировать?Простите за тупой вопрос,но я раньше с этим не сталивался...
2.искал.Написано тож самое.
dolphin_sv
Jun 15 2010, 19:52
Инициализация переменной = указание значения по умлочанию (начального значения)
Напр.:
int i=0;
Инициализация переменной i;
int i;
описание переменной i;
Короче, у тебя при передаче rShipObject = nil, т.е. ничему, отсюда вылет.
Black Angel
Jun 15 2010, 23:13
Цитата(dolphin_sv @ Jun 15 2010, 20:52)
Инициализация переменной = указание значения по умлочанию (начального значения)
Напр.:
int i=0;
Инициализация переменной i;
int i;
описание переменной i;
Короче, у тебя при передаче rShipObject = nil, т.е. ничему, отсюда вылет.
ааа...ну в общето привык что это называется присвоением
И она не вылетае,а ничего не происходит.
Даже если и пишу
ref rShipObject = GetRealShip( sti(rCharacter.ship.type) );
все равно ничего не происходит.
dolphin_sv
Jun 15 2010, 23:23
Присваивание - это операция, инициализация - это действие
т.е. в данном случае знак "=" это операция присваивания, а cовокупность объявления типа, имени переменной и операции присваивания - это инициализация.
Black Angel
Jun 15 2010, 23:28
Цитата(dolphin_sv @ Jun 16 2010, 00:23)
Присваивание - это операция, инициализация - это действие
т.е. в данном случае знак "=" это операция присваивания, а cовокупность объявления типа переменной и операции присваивания - это инициализация.
Спасибо,теперь понял эту неуловимую разницу
А по коду ничего никто не знает?
Особенно про мачту меня очень интересуе,т.к. в коде ни примера ни объяснения как этим пользоваться...
попробуй поставить так
PostEvent(SHIP_ACTIVATE_FIRE_PLACE, rand(10), "ialsfl", rCharacter, rCharacter, 1, "ship_onfire", 330, -1);
Black Angel
Jun 16 2010, 12:16
Цитата(navy @ Jun 16 2010, 07:53)
попробуй поставить так
PostEvent(SHIP_ACTIVATE_FIRE_PLACE, rand(10), "ialsfl", rCharacter, rCharacter, 1, "ship_onfire", 330, -1);
на выходе вылет без ошибок.Просто вылет и все.
Применяя на ГГ все нормально работает,а как применяю на НПС падает.Причем сразу после закрытия окошечка абордаж падает.
Для того чтобы было ясно чего я хочу добиться в конечном результате -тонущий взрывающийся и горящий корабль с рандомно падающей мачтой после абордажа.Судно топят подрывом порохового погреба.
У меня судно тонет,взрывается,но почему то не горит.Ну и с мачтой я не знаю вообще ничего что да как с ней.
Кто подскажет?
Ну значит ищи рабочие варианты... Смотри готовые вызовы, анализируй. Скорее всего ты вызываешь этот метод не там или не на того чара.
Вылет без ошибок? А систем лог что говорит?
Black Angel
Jun 17 2010, 07:58
Цитата(navy @ Jun 17 2010, 07:48)
Ну значит ищи рабочие варианты... Смотри готовые вызовы, анализируй. Скорее всего ты вызываешь этот метод не там или не на того чара.
Вылет без ошибок? А систем лог что говорит?
ерор лог чист,как слеза младенца.Систем лог при вылете ругается на шип.срр.Я так понимаю это двиг и ругается он на файрплейс.
На счет чара на того,т.к.в теслог выписывает все об затопленом чаре(ид,хипы,корабль,вооруж и пр.)
вызываю,как я писал выше в аибордаж.с
а если я папку програм пришлю посмотрите?
если он ругается, значит надо смотреть, что ему не нравится... как я уже сказал, либо чар не тот, либо у него нет корабля, либо корабль не тот... смотри готовые примеры где файрплейс нормально отрабатывает.
папку мне не надо слать.. разбираться времени нет...
ALABAMA
Jun 17 2010, 18:43
Вопрос по камере в ПКМ и КВЛ: как сделать,что бы при переходе в след. локацию вид от 1го лица не сбрасывался на вид от 3го?
Black Angel
Jun 17 2010, 23:07
Цитата(ALABAMA @ Jun 17 2010, 19:43)
Вопрос по камере в ПКМ и КВЛ: как сделать,что бы при переходе в след. локацию вид от 1го лица не сбрасывался на вид от 3го?
скриптово сомневаюсь что это возможно...скорее всего надо двиг править...
Камерой вроде можно управлять. Значит делаешь в конце пергрузки в локу строчку с установкой камеры... по идее может отработать, если двиг не сбрасывает ее в самом конце
dolphin_sv
Jun 18 2010, 08:12
При переустановке режима камеры цепляешь атрибут, который хранит положение камеры. После загрузки перса в локацию проверяешь атрибут и выставляешь камеру в соответствии со значением. Если, как сказал Нави, камера все равно сбрасывается, делаешь вызов квестового прерывания, например: DoQuestCheckDelay("CheckCamera", 0.5);
case "CheckCamera":
// проверка режима
// установка камеры в нужный режим
break;
ALABAMA
Jun 18 2010, 14:31
Благодарю вас,джентльмены,бум пробовать!
samovar
Jun 18 2010, 16:55
Подскажите кто знает !
Лог ,,error,, выкидывает:
COMPILE ERROR - file: globals.c; line: 101
Invalid array (Nations) size
просмотрел все файлы: каталогов nation и characters.
Где и как прописана эта матрица ???
Да и по логике ,,К-3,, и ,,Сундук...,, нации одинаковы.
Может ошибка в синтаксисе прёд на код ?
Спасибо ! За любую помощь !
где-то ты вызываешь нацию, которой нет, т.е. задаешь индекс массива слишком большой.
samovar
Jun 19 2010, 01:33
Цитата(navy @ Jun 18 2010, 19:20)
где-то ты вызываешь нацию, которой нет, т.е. задаешь индекс массива слишком большой.
Немножко уточню.
Скрипты из аддона ,,Сундук Мертвеца,, я не изменял.
Нации в К-3 и в Сундуке одинаковы т.е. сюрприза такого не ждал.
Простая задача запустить игру с открытыми скриптами
Лог одинаков на обоих движках (2.5 и 2.8) и при чтении 1го файла (seadogs.c).
С матрицами наций незнаком, отсюда вопрос -где смотреть и как искать ?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.