Помощь - Поиск - Пользователи - Календарь
Полная версия: Для программистов
Форум студии Seaward.Ru > Форумы аддонов к играм ПКМ, КВЛ, ГПК > Модификации для игр на ядре Storm 2.x
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
silenthunter
подскажите, пожалуйста, можно ли скормить тексты(диалоги, интерфейс, описания предметов) с кириллицей буржуйской версии К:ГПК (age of pirates 2 city of abandoned ships)? если да, то в какой кодировке?
dolphin_sv
Собственно не понятна суть проблемы... Я делаю Историю пирата на age of pirates 2 city of abandoned ships, проблем с кирилицей никаких проблем нет. Вместо английскиого текста пиши русский и все.
silenthunter
Цитата(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
Не знаю, пользовался и Notepad++ и AkelPad и Notepad и SynPlus - проблем не было. Сейчас ползуюсь в Visual Studio 2008, т.к. с ним привычнее... Кодировку никогда не менял.
silenthunter
разобрался таки. собака зарыта в текстурах и инихах шрифтов в ресурсах. Если кто-то на эти же грабли попадется. нужны инихи
resource/ini/fonts_rus.ini
resource/ini/fonts.ini
и текстуры
resource/textures/fonts/
из русской версии игры.
dolphin_sv
Ну так это ж само собой, первым делом надо было сделать... Я думал у тебя после этого неверно отображались шрифты, почему и удивился.
Black Angel
Подскажите пожалуйста как записать в коде проверку на то что идет битва в море или на нас напали?на суше это аларм,а вот в море как?Проще говоря как определить в бою ли я или нет?Не на суше,а в море.
ugeen
Проверяй возможен или нет выход на глобальную карту. Если невозможен - то в бою
dolphin_sv
Хм... Вообще-то - если не возможен выход, значит рядом где-то есть вражеские корабли или вражеский форт, а это еще не значит, что корабль с кем-то воюет.

Можно попробовать проверить залогиненых капитанов, если у одного из них lastballcharacter - это ГГ или его компаньон и наоборот, если у ГГ или его компаньона есть кто-то в lastballcharacter - значит ГГ с кем-то воюет.

lastballcharacter очищается при логине корабля в море.
Black Angel
это не мой случай чтобы так делать.У меня при переходе из глобалки в море 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
Переменной bDisableMapEnter значение присваивается в обработчике события SHIP_CHECK_RELOAD_ENABLE - Ship_CheckMainCharacter(), т.е. обновления корабля ГГ.

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

Вот и лезут непонятки smile.gif

Как тут реализовать - хз. Можно было бы попробовать пройтись по всем залогиненным кораблям, определить, кто точит на нас зубы, вычислить минимальное расстояние между кораблем ГГ и кораблем противника и сравнить его с необходимым расстоянием для выхода в море (константа).
Но так тоже не выйдет: координаты кораблям ставятся тоже явно после их создания (т.е. после рассылки и обработки события SHIP_CREATE, от которого мы крутимся).

Можно проверить, сработает-ли сообщение
SendMessage(&Sailors, "lis", AI_MESSAGE_ADD_SHIP, ship, RealShips[Index].name);
Когда корабли уже залогинены (что-то мне подсказывает, что не сработает), и вот тогда уже и проверять и посылать его, если нужно.

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

Имхо, лучше отложить до лучших времен, без двига - нереализуемо.

P.S. Ваш код плохо читаем.
Black Angel
хочется всего лишь на всего чтобы если на глобалки сторожевой патруль напал и мы переходим в море - матросы появились бы(это я про ночное время суток говорю).Влюбом случае сцена перегружается а значит должно и обновиться все окружаещее.А вот корабль перегрузился а мотросов не выставил.Он загружает старое значение переменой(тогдашней когда было до военых действий?)?
Пока Акелла выдаст двиг(она колдует уже 2 месяца над этим мероприятием) мои дети в универ поступят,а интерес к даному двигу пропадет, тк есть пару интересных двигов с графикой по лучше.
P.S.В смысле плохо читаем?
navy
Посмотри файл shipWalk.с попробуй или поискать где вызываются его методы, или вручную вызывай их когда тебе надо.
Warship
Нави, он, насколько я понял, и смотрит как-раз shipWalk.c smile.gif
Но другое дело, что там обработчики событий просто не знают, кто там для ГГ враг, кто друг.

Поэтому да, только вызывать вручную (даже не вызывать - вначале логику придется переписать, там ж на событиях все), где-нить в процедуре 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
Цитата(Warship @ May 31 2010, 12:18) *

Нави, он, насколько я понял, и смотрит как-раз shipWalk.c smile.gif
Но другое дело, что там обработчики событий просто не знают, кто там для ГГ враг, кто друг.
Поэтому да, только вызывать вручную (даже не вызывать - вначале логику придется переписать, там ж на событиях все), где-нить в процедуре 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
Цитата(Black Angel @ Jun 1 2010, 03:33) *

а почему там обработчики событий не знают, кто там для ГГ враг, кто друг?

Сори, я не это хотел сказать. Имел ввиду, что именно значение bDisableMapEnter не актуально.

Почему:
Значение этой переменной обновляется (1 раз в секунду, вроде) когда ГГ уже в море, когда оно прогружено.
А матросы на палубе создаются во время прогрузки. Т.е. раньше того, как значение переменной изменится.

Вообще, использование bDisableMapEnter при загрузке тебе ничего не даст.
Нужно копать в сторону обхода всех кораблей (когда они созданы и у них уже есть координаты, но когда еще не вышли с фэйдера) и проверять на врага и расстояние и посылать вот это сообщение на создание матросов на палубе (в Ship_Walk_Create() только закомментить).
Black Angel
Цитата(Warship @ Jun 1 2010, 02:19) *

Сори, я не это хотел сказать. Имел ввиду, что именно значение bDisableMapEnter не актуально.

Почему:
Значение этой переменной обновляется (1 раз в секунду, вроде) когда ГГ уже в море, когда оно прогружено.
А матросы на палубе создаются во время прогрузки. Т.е. раньше того, как значение переменной изменится.

Вообще, использование bDisableMapEnter при загрузке тебе ничего не даст.
Нужно копать в сторону обхода всех кораблей (когда они созданы и у них уже есть координаты, но когда еще не вышли с фэйдера) и проверять на врага и расстояние и посылать вот это сообщение на создание матросов на палубе (в Ship_Walk_Create() только закомментить).

А если проверить на отношение к игроку это прокатить должно(чисто теоретически)?А то я во многих местах идет толька эта единственая проверка bDisableMapEnter и больше других почему то нет...
Warship
Я ж и говорю, проверять нужно все корабли на отношение (и расстояние). smile.gif И проверять нужно уже после прогрузки кораблей. Хотя, можно попробовать проверять и в Ship_Walk_Create(), но там на расстояние не проверить точно, ибо не инициализировано оно еще тогда.

Если враг и близко - посылать вот энто сообщение, чтобы матросня на палубу вылезла.

Сама по себе проверка if(bDisableMapEnter) {} вполне нормальная, просто именно в этом случае она не поможет.
navy
Цитата
Сори, я не это хотел сказать. Имел ввиду, что именно значение bDisableMapEnter не актуально.

да это нафиг не надо smile.gif человек хочет чтобы они всегда бегали... а следовательно пусть принудительно вызывает эти методы... или смотрит шип_логин... там возможно условие стоит, выставлять команду или нет.
Black Angel
2 Warship после загрузки кораблей бесполезно ставить проверку,они загрузятся без матросни тк ночь и все спокойно.Проверку надо делать до загрузки но после инициализации.
В sеа.с тоже не знает что такое бдисайблмапентер.Где ж это ставить в каком файле?
2 navvy как раз надо чтобы в мирное время суток ночью их не было а в военое время были всегда.
navy
Цитата
2 navvy как раз надо чтобы в мирное время суток ночью их не было а в военое время были всегда.

Ну значит ищи где они вообще выставляются, смотри какие там проверки стоят, и ставь свои... если bDisableMapEnter там еще не выставлен, значит пиши свои, как и говорил Варшип... проверкой враждебных кораблей в радиусе атаки.
Black Angel
Подскажите как включить все файрплайсы на коробле?
и еще вопрос - почему когда я пишу:
Код

string    kLocator = LAi_FindFreeRandomLocator("goto");
ChangeCharacterAddressGroup(sld, "Shore57", "goto", kLocator);

игра падает в этом месте?
В ерор логе нет ничего.Почему так?
З.Ы. Скрипты кгпк патча 1.2.4
navy
Цитата
игра падает в этом месте?

а ты уверен, что находишься в локации Shore57?
Black Angel
Цитата(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);

то все работает нормально,только создаваемые боты все время находятся местами в двоем в одной локаторе.
navy
Смотри код ГПК, там где абордаж, там раскидываются враги по локаторам.
dolphin_sv
ПОпробуй так:
PlaceCharacter(sld, "goto", "random_must_be");
Black Angel
2 dolphin_sv
Спасибо огромное!Работает отлично!Сам бы никогда до такого не додумался smile.gif

Подскажите пожалуйста где ошибка?
Код

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
Почему когда пишу так:
Код

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 то вот такая картина:
Нажмите для просмотра прикрепленного файла
navy
по твоим кускам кода не понятно ничего... принцип тот же, смотри как уже сделано, и делай так же
ALexusB
код вида
string kLocator = LAi_FindFreeRandomLocator("goto");

можно просто не найти локатор, потому и сделан был флаг "мас_би" в
PlaceCharacter(sld, "goto", "random_must_be");

Визуально НПС гуляют, но имеют приписку к локатору, а их конечное число и все заняты.
В случае гото можно пихать на один локатор толпы, потом разбредутся. Главное что б локатор был вне поля зрения (сзади ГГ). Так сделан абордаж на суше - место респавна.
В вот в таверне сидячие места будут с наложениями уже, потому там нужно убедится, что место есть в принципе (опять же в коде есть примеры с рассадкой ПГГ и пьяни с офами).
Black Angel
2 ALexusB
Спасибо за разъяснения smile.gif
Цитата(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);
то происходит то что мне нужно.В чем ошибка?
Еще вопрос,как насильно уронить мачту?
navy
1. у тебя rShipObject не инициализирован, следовательно вылет
2. если поискать по коду месседж SHIP_ACTIVATE_FIRE_PLACE, то можно найти куски рабочие, и ты можешь сравнить и поискать рабочий вариант
Black Angel
Цитата(navy @ Jun 15 2010, 12:57) *

1. у тебя rShipObject не инициализирован, следовательно вылет
2. если поискать по коду месседж SHIP_ACTIVATE_FIRE_PLACE, то можно найти куски рабочие, и ты можешь сравнить и поискать рабочий вариант

1.а как его инициализировать?Простите за тупой вопрос,но я раньше с этим не сталивался...
2.искал.Написано тож самое.
dolphin_sv
Инициализация переменной = указание значения по умлочанию (начального значения)

Напр.:

int i=0;

Инициализация переменной i;

int i;

описание переменной i;

Короче, у тебя при передаче rShipObject = nil, т.е. ничему, отсюда вылет.
Black Angel
Цитата(dolphin_sv @ Jun 15 2010, 20:52) *

Инициализация переменной = указание значения по умлочанию (начального значения)

Напр.:

int i=0;

Инициализация переменной i;

int i;

описание переменной i;

Короче, у тебя при передаче rShipObject = nil, т.е. ничему, отсюда вылет.

ааа...ну в общето привык что это называется присвоением smile.gif
И она не вылетае,а ничего не происходит.
Даже если и пишу
ref rShipObject = GetRealShip( sti(rCharacter.ship.type) );
все равно ничего не происходит.
dolphin_sv
Присваивание - это операция, инициализация - это действие smile.gif

т.е. в данном случае знак "=" это операция присваивания, а cовокупность объявления типа, имени переменной и операции присваивания - это инициализация.
Black Angel
Цитата(dolphin_sv @ Jun 16 2010, 00:23) *

Присваивание - это операция, инициализация - это действие smile.gif

т.е. в данном случае знак "=" это операция присваивания, а cовокупность объявления типа переменной и операции присваивания - это инициализация.

Спасибо,теперь понял эту неуловимую разницу smile.gif
А по коду ничего никто не знает?
Особенно про мачту меня очень интересуе,т.к. в коде ни примера ни объяснения как этим пользоваться...
navy
попробуй поставить так
PostEvent(SHIP_ACTIVATE_FIRE_PLACE, rand(10), "ialsfl", rCharacter, rCharacter, 1, "ship_onfire", 330, -1);
Black Angel
Цитата(navy @ Jun 16 2010, 07:53) *

попробуй поставить так
PostEvent(SHIP_ACTIVATE_FIRE_PLACE, rand(10), "ialsfl", rCharacter, rCharacter, 1, "ship_onfire", 330, -1);

на выходе вылет без ошибок.Просто вылет и все.
Применяя на ГГ все нормально работает,а как применяю на НПС падает.Причем сразу после закрытия окошечка абордаж падает.
Для того чтобы было ясно чего я хочу добиться в конечном результате -тонущий взрывающийся и горящий корабль с рандомно падающей мачтой после абордажа.Судно топят подрывом порохового погреба.
У меня судно тонет,взрывается,но почему то не горит.Ну и с мачтой я не знаю вообще ничего что да как с ней.
Кто подскажет?
navy
Ну значит ищи рабочие варианты... Смотри готовые вызовы, анализируй. Скорее всего ты вызываешь этот метод не там или не на того чара.
Вылет без ошибок? А систем лог что говорит?
Black Angel
Цитата(navy @ Jun 17 2010, 07:48) *

Ну значит ищи рабочие варианты... Смотри готовые вызовы, анализируй. Скорее всего ты вызываешь этот метод не там или не на того чара.
Вылет без ошибок? А систем лог что говорит?

ерор лог чист,как слеза младенца.Систем лог при вылете ругается на шип.срр.Я так понимаю это двиг и ругается он на файрплейс.
На счет чара на того,т.к.в теслог выписывает все об затопленом чаре(ид,хипы,корабль,вооруж и пр.)
вызываю,как я писал выше в аибордаж.с
а если я папку програм пришлю посмотрите?
navy
если он ругается, значит надо смотреть, что ему не нравится... как я уже сказал, либо чар не тот, либо у него нет корабля, либо корабль не тот... смотри готовые примеры где файрплейс нормально отрабатывает.
папку мне не надо слать.. разбираться времени нет...
ALABAMA
Вопрос по камере в ПКМ и КВЛ: как сделать,что бы при переходе в след. локацию вид от 1го лица не сбрасывался на вид от 3го?
Black Angel
Цитата(ALABAMA @ Jun 17 2010, 19:43) *

Вопрос по камере в ПКМ и КВЛ: как сделать,что бы при переходе в след. локацию вид от 1го лица не сбрасывался на вид от 3го?

скриптово сомневаюсь что это возможно...скорее всего надо двиг править...
navy
Камерой вроде можно управлять. Значит делаешь в конце пергрузки в локу строчку с установкой камеры... по идее может отработать, если двиг не сбрасывает ее в самом конце
dolphin_sv
При переустановке режима камеры цепляешь атрибут, который хранит положение камеры. После загрузки перса в локацию проверяешь атрибут и выставляешь камеру в соответствии со значением. Если, как сказал Нави, камера все равно сбрасывается, делаешь вызов квестового прерывания, например: DoQuestCheckDelay("CheckCamera", 0.5);

case "CheckCamera":
// проверка режима
// установка камеры в нужный режим
break;
ALABAMA
Благодарю вас,джентльмены,бум пробовать! wink.gif
samovar
Подскажите кто знает !

Лог ,,error,, выкидывает:
COMPILE ERROR - file: globals.c; line: 101
Invalid array (Nations) size

просмотрел все файлы: каталогов nation и characters.
Где и как прописана эта матрица ???

Да и по логике ,,К-3,, и ,,Сундук...,, нации одинаковы.
Может ошибка в синтаксисе прёд на код ?

Спасибо ! За любую помощь !
navy
где-то ты вызываешь нацию, которой нет, т.е. задаешь индекс массива слишком большой.
samovar
Цитата(navy @ Jun 18 2010, 19:20) *

где-то ты вызываешь нацию, которой нет, т.е. задаешь индекс массива слишком большой.

Немножко уточню.
Скрипты из аддона ,,Сундук Мертвеца,, я не изменял.
Нации в К-3 и в Сундуке одинаковы т.е. сюрприза такого не ждал.
Простая задача запустить игру с открытыми скриптами smile.gif
Лог одинаков на обоих движках (2.5 и 2.8) и при чтении 1го файла (seadogs.c).
С матрицами наций незнаком, отсюда вопрос -где смотреть и как искать ?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.