Помощь - Поиск - Пользователи - Календарь
Полная версия: Для программистов
Форум студии Seaward.Ru > Форумы аддонов к играм ПКМ, КВЛ, ГПК > Модификации для игр на ядре Storm 2.x
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
Alexad_D
Цитата(dolphin_sv @ Aug 17 2009, 23:24) *

Да понимаете, я уже вроде все просмотрел
//Добавим характеристики новым товарам

//наркоты
Goods[GOOD_KOKA].Name = "Koka";
Goods[GOOD_KOKA].Weight = 2;
Goods[GOOD_KOKA].Cost = 260;
Goods[GOOD_KOKA].Units = 1;
Goods[GOOD_KOKA].Swim.Time = 10;
//бабы
Goods[GOOD_WHORES].Name = "whores";
Goods[GOOD_WHORES].Weight = 2;
Goods[GOOD_WHORES].Cost = 220;
Goods[GOOD_WHORES].Units = 1;
Goods[GOOD_WHORES].Swim.Time = 5;
//стволы
Goods[GOOD_WEAPON].Name = "weopon";
Goods[GOOD_WEAPON].Weight = 2;
Goods[GOOD_WEAPON].Cost = 300;
Goods[GOOD_WEAPON].Units = 1;
1.gif Самое смешное..... я уже писал, что если в engine.ini - поставить debuginfo = 0 Игра стартует - как надо быть! Да он у меня и был отключен раньше.... И он мне, постольку-поскольку.... Просто наткнулся где-то что вот, типа, если что не так, то можно прочитать error.log - там все ошибки игры прописываются - полезно при модинге. А у меня очень много времени уходило на поиск ошибок. Вот я и полез...... мол буду дальше что делать, так время с экономлю, если что. 3.gif А тут такое..... Вот меня любопытство и забрало..... Почему так???!!!!
=========================================
Warship - Рабы были изначально и их вводил не я. Потому здесь и не приводил

Navy - Да скорее всего так оно и есть - вы правы, какая нибудь мелочевка. Потому что лог растет, а ошибки в нем записаны зациклено. Надо просто отвлечься, лог отключить и поплавать, понаблюдать за товарами может что и проясниться wink.gif
Большое спасибо всем кто откликнулся
Warship
А рабы как прописаны? Вы про них не забыли?
navy
Игра виснет так как файловые операции загружают двиг. Т.е. запись в эрор лог, потом норм старт.

размерность массива тут не при чем, как мне кажется... стоит внимательно посмотреть код. Как обычно может быть отсутсвие точи с запятой.

2пропер: в ините движения не делают. Только место положение начальное и начальный шаблон поведения. Стоять, ходить, сидеть и прочее.
Alexad_D
Так он именно это и хотел..... чтобы созданый им перс просто шлялся по городу Я ему в ЛС посоветовал задать персу начальный шаблон примерно как у патруля....

ch.Dialog.Filename = "patrol_dialog.c";
ch.location = "Oxbay_town";
ch.location.group = "goto";
ch.location.locator = "goto22";

LAi_SetPatrolType(ch);
LAi_SetLoginTime(ch, 00.0, 24.00);
LAi_SetHP(ch, 380.0, 380.0);
LAi_group_MoveCharacter(ch, "ENGLAND_SOLDIERS");
ch.greeting = "Gr_Patrol";

Значит работает раз молчит целый день 1.gif

========================================================
lol.gif А нет...... ему теперь надо чтобы тот первый подбегал и мочил его... Подскажите вы ему, кто может, а то я сам не делал, Боюсь неправильно насоветую а сесть и специально с этим разбираться времени нет.
navy
Блин, уже все разжевали!!! LAi_Actor ему в помощь.
Scatimon
По коду ПКМ есть хелпы, в тхт. Там все методы описаны че и как работает (и актерские поведения и остальные). Алексус выкладывал целую пачку сиих хелпов собраных в архив. По боевке - в ПКМ по сюжету есть примеры боевки и в актерах и просто по группам. Как факт могу подсказать что актерская битва это квест про Артуа Вуази или как-то так, там на пиратском острове это происходит. А груповых боевок кучма.
navy
Да и я выкладывал пример как сделать, чтобы НПС подходил к ГГ. Там только добавить боевку осталось.
Alexad_D
Кто подскажет в чем дело.....
//Tutorial
//alexad_d --> Смена старта игры
Locations[n].id = "Tutorial_Deck";
Locations[n].id.label = "";
Locations[n].image = "";
locations[n].type = "house";
Locations[n].filespath.models = "locations\inside\Doubleflour_house"; //номер в гостинице
Locations[n].models.always.locators = "LH_F2_l";
Locations[n].models.always.tavern = "LH_F2";
Locations[n].models.always.window = "LH_F2_w";
Locations[n].models.always.window.tech = "LocationWindows";
Locations[n].models.always.window.level = 51;
Locations[n].models.day.charactersPatch = "LH_F2_p";
Locations[n].models.night.charactersPatch = "LH_F2_p";
Locations[n].environment.weather = "false";
Locations[n].environment.sea = "false";
Locations[n].reload.l1.name = "";
Locations[n].reload.l1.go = "";
Locations[n].reload.l1.emerge = "";
n = n + 1;

Старт есть, (в номере гостиницы), но все с тормозами пока не пройдешь тутор и не выйдешь в сл. локацию. Если менять старт в сидогс или не будет тутора или дофига что переделывать. И еще забыл добавить - как-то уж больно ярко. Пробовал вариации со значениями в Locations[n].models.always.window.level - какая-то фигня получается
********************************************************************************
**************
Пропер! Ты возьми любой диалог - по его имени (через поиск) найди и посмотри все - что, где и как на него ссылается ну и делай аналогично.
Mr.proper
AlexusB дал в описаниях программирования пкм диалог как в к3 почти,а там в диалоге стоят номера 1,2 и т.д что не так?
Scatimon
Alexad_D: Тутор повязан значит на локу. Посмори по эрор логу где ошибка. А по поводу света:
Locations[n].environment.weather = "true";
И все норм станет. Менять айдишник старта нужно именно в сиадогсе. И вручную перебросить в твою локу тутор. Причем с заменой локаторов, в ней может не быть названий что были в каюте.
Alexad_D
Ну у меня была проблема с еррорлогом (при включенном висла игра), Но ради такого случая я ее переустановил начисто - логи пошли. Так теперь что мы имеем -
в квест локейшн меняем айди стартовой локации
//Tutorial
//Смена старта игры -->
Locations[n].id = "tutorial_deck"; <-- можно не менять
Locations[n].id.label = "";
Locations[n].image = "";
//Sound
locations[n].type = "house";
//Models
//Always
Locations[n].filespath.models = "locations\inside\Doubleflour_house";
Locations[n].models.always.locators = "LH_F2_l";
Locations[n].models.always.tavern = "LH_F2";
Locations[n].models.always.window = "LH_F2_w";
Locations[n].models.always.window.tech = "LocationWindows";
Locations[n].models.always.window.level = 51;
//Day
Locations[n].models.day.charactersPatch = "LH_F2_p";
//Night
Locations[n].models.night.charactersPatch = "LH_F2_p";
//Environment
Locations[n].environment.weather = "false";
Locations[n].environment.sea = "false";
//Reload map
Locations[n].reload.l1.name = "reload1";
Locations[n].reload.l1.go = "";
Locations[n].reload.l1.emerge = "";
n = n + 1;

В сидоксе.....
Смотрим - LoadMainCharacterInFirstLocation(mainchar.location,"", mainchar.location.from_sea); -
где (если я правильно понял) - mainchar.location - место для перса, а - mainchar.location.from_sea - для корабля Ну и следовательно ничего не трогаем.....

sTeleportLocName = "tutorial_deck";
ReloadProgressUpdate();
LoadMainCharacterInFirstLocation(sTeleportLocName, "", "Oxbay_port");

ReloadProgressEnd();

Запускаемся...... Жуткие тормаза - пока не пройдешь тутор и не выйдешь из таверны на улицу....... Смотрим логи......

В еррорлоге только одна ошибка
RUNTIME ERROR - file: weather\WhrWeather.c; line: 96
invalid index -1 [size:16]
RUNTIME ERROR - file: weather\WhrWeather.c; line: 96
invalid array index
Но мне это не о чем не сказало...... к сожалению sad.gif
В компиле вроде как есть подсказка.......
LoadLocation(ref loc) Oxbay_Tavern
LocationLoader: not loaded back model location.models.always.window, id = Oxbay_Tavern
LocLoadShips: Can't find Location.locators.ships in location: Oxbay_Tavern

______________________________________________________________________________
А, Забыл по поводу локаторов...... В каюте ГГ загружается в - релоад1 - у кровати...... в гостинице этот локатор у двери..... Боцман - в гото3..... в гостинице это у окна - такой расклад вполне приемлем - локаторы совпадают
саблю перепрописываем вместо рандитем в бокс
Scatimon
Ну все ясно.

Код

//Night
Locations[n].models.night.charactersPatch = "LH_F2_p";
//Environment
Locations[n].environment.weather = "true";
Locations[n].environment.sea = "false";
//Reload map


И все норм будет.
Alexad_D
Спасибо ...... заработало.....
Только вот если можно по подробней что это ........ ? Почему нужно именно так? Причем здесь погода? Они же в помещении.....
//Environment
Locations[n].environment.weather = "true";
Locations[n].environment.sea = "false";
Scatimon
Кароче при первом лоаде нужно чтобы идентифицировалась погода, скажем так. Вот мы принудительно включем погоду в локации дом. Из косяков: тока дождик может лить в доме и се. Можно после прохождения тутора поставить на фалс обратно.
Alexad_D
Цитата(Scatimon @ Aug 23 2009, 18:11) *

Из косяков: тока дождик может лить в доме и се. Можно после прохождения тутора поставить на фалс обратно.
А....! Ну теперь понятно почему раньше в туторе иногда "крыша в каюте текла" 1.gif А я блин еще подумал во хоть сейчас не будет. А тут вон оно что Михалыч. А что сложно этот косяк устранить? Хотя в принципе оно и не мешает Тутор то один раз проходить Верхнюю строчку то я не менял, так и оставил - Locations[n].id = "Tutorial_Deck"; Значит все таки я был прав нефиг в сидогс лезть - больше гемора было бы. Еще раз Спасибо
Mr.proper
Цитата(Alexad_D @ Aug 22 2009, 19:58) *

Пропер! Ты возьми любой диалог - по его имени (через поиск) найди и посмотри все - что, где и как на него ссылается ну и делай аналогично.

Я сделал аналогично ни че не пашет,кто может скинуть инфу как делать диалоги в пкм?
Alexad_D
Цитата(Mr.proper @ Aug 23 2009, 19:06) *

Я сделал аналогично ни че не пашет,кто может скинуть инфу как делать диалоги в пкм?
Это пипец какой-то........ lol.gif Ты можешь хотя бы пример привести как ты делал? Как тебе помочь если даже не знаешь как и что ты делал конкретно. Ошибку найти помогут, но делать за тебя никто не будет Какая тебе еще инфа нужна по диалогам? Все здесь есть на форуме. Поищи.
**********************************************
Вот держи -
http://legend.seaward.ru/forum/index.php?s...mp;#entry109995
Только читай внимательно - вникай. Это тебе не на уроке информатики
navy
Цитата
Старт есть, (в номере гостиницы), но все с тормозами пока не пройдешь тутор и не выйдешь в сл. локацию. Если менять старт в сидогс или не будет тутора или дофига что переделывать. И еще забыл добавить - как-то уж больно ярко. Пробовал вариации со значениями в Locations

Внимательно смотри иниты в начале игры, когда начало на палубе. Это надо переделывать. Смотри квест_реакшн.с
Alexad_D
Цитата(navy @ Aug 24 2009, 07:38) *

Внимательно смотри иниты в начале игры, когда начало на палубе. Это надо переделывать. Смотри квест_реакшн.с
Дело было не в бабине.... 1.gif Уже все работает .... Scatimon подсказал что надо, при первом старте, в локацию погоду навесить и стало все ОК

//Environment
Locations[n].environment.weather = "true"; //fix от Scatimon-a
Locations[n].environment.sea = "false";

Никогда бы не додумался сам 3.gif Я даже и не смотрел на эти пункты.
navy
Цитата
Scatimon подсказал что надо, при первом старте, в локацию погоду навесить и стало все ОК

Проблема не только в этом. Смотри. Там куча инитов, отношения, нации и т.д.
Black Angel
Кто напомнит старому сколеротику какой файл отвечает за расчет маневрености судна?Не надо путать с маневреным разворотом и шип_инит.с
Меня интересует то,что при нажатии клавиши право/лево руля корабль поворачивает.Вот где это в движке или же в скриптах?Если в скриптах,то какой файл?
Alexad_D
Цитата(Black Angel @ Aug 24 2009, 17:27) *

......при нажатии клавиши право/лево руля корабль поворачивает. Вот где это ......

Или перефразируй вопрос, или это в - options - в корне игры, или в програмз\контрал\ init_pc.c и init_xbox.c
----------------------------------------------------------------------------

Navy - Так ведь я же глобально ничего не менял там больше ничего не тянется - просто простая подмена локации причем под тем же именем, даже номера локаторов в локации совпадают. Чуть только бут подредактировал чтобы более мене логично было..... из комнаты выгружаешься на второй этаж таверны , ну и малькому чуток путь подредактировал. Я так пробежался по началу игры - вроде как все в норм. Малькольм, тут же, в таверне начинает "нудеть" про экипаж ну и дальше по сценарию верфь, магазин, труба тоже все ОК но только в другой последовательности. Я потому и пошел этим путем. Вообще в самой игре изначально косяк, при начале новой игры, с инициализацией погоды т.к. если шел дождь то " крыша в каюте текла" и раньше...

********************************************************************************


Цитата(Black Angel @ Aug 24 2009, 18:51)
Хорошо.Где находится расчет скорости поворота судна?
Тогда не знаю - чем мог тем помог
Black Angel
Цитата

Или перефразируй вопрос, или это в - options - в корне игры, или в програмз\контрал\ init_pc.c и init_xbox.


Хорошо.Где находится расчет скорости поворота судна?
Scatimon
В sea_ai. Все там. Вроде даже в нескольких файлах. Ищи поиском по названию действия кнопки из init_pc.
ALexusB
Цитата(Black Angel @ Aug 24 2009, 19:51) *

Хорошо.Где находится расчет скорости поворота судна?

смотря в какой версии (говорил - пишите игру). Во всех по -разному
в ПКМ применяются и задаются формулы учета скилов на поворот в AIShips
А вот в к3 и КВЛ (ГПК) в папке скриптс, но файлы разные, что-то типа ШипУтилс
navy
Цитата
ам больше ничего не тянется

Посмотри ветку "Leaving_Oxbay" quest_reaction.c Тогда поймешь что там глобально не тянется biggrin.gif В принципе, если ты не меняешь начальный остров, то можно особо не переделывать, но все равно, внимательно изучи старт игры, иниты.
Alexad_D
Цитата(navy @ Aug 25 2009, 09:14) *

Посмотри ветку "Leaving_Oxbay" quest_reaction.c .......внимательно изучи старт игры, иниты.
1.gif Посмотрел ..........и понял, что я смутно что там понял ..... 3.gif Хотя нет - кое что понял...... Можно смело чуть изменить начальный сюжет - к примеру в городке вместо английских солдат поставить каких-нибудь пиратов-корсаров типа это вольный пиратский город и смело от туда уплыть - потом он станет французским, немного подредактировать первый диалог с Селхардом - сделать что то типа - "Господин губернатор французы захватили Оксбей. Мы в состоянии войны с ними. Им ничто не мешает подтянуть войска и с суши взять штурмом Гринфорд. Самое время нанести удар пока они ослаблены после боя с пиратами" - Ну а дальше все по стандартному сюжету - в результате бравых действий Блейза и согласно сюжету он станет английским. 6.gif Все таки наверное придется лезть квест править т.к. надо свою Беатрис ( она сама подбигает и начинает подбивать меня захватить галеон месного торговцаи валить на нем нафиг с острова так как сюда прут французы ), да как то тюрьму вписать и дом местного "Смотрящего" (Стырил идею наглым оброзом из ВМЛ) 3.gif Ладно пойду реализовывать идею и новый сюжет в жизнь 1.gif
======================================================================

Короче вот что у меня получилось...... кое что не понятно.......
1. Вход в катакомбы я перенес из reload19 в reload10 Но вот с чем столкнулся - У меня игра начинается (после тутора) в таверне. Так вот выходишь в город - Выйти из города в джунгли и войти в катакомбы можно, но ....... если сначала выйти в порт а потом зайти в город опять, то они уже закрыты и не в джунгли, не в катакомбы из города не войти..... С тюрьмой и домом наместника все в порядке. Можно ли было туда раньше попасть или нельзя я не знаю я в самом начале игры туда попадать еще не пробовал.
2. С Беатрис - на нее заведен отдельный тип поведения - LAi_SetbeatriceType (т.к. иначе почему- то не фурычит анимация) В LAi_beatrice.c полностью все взято из LAi_officer.с - только officer везде заменено на beatrice. В чем фишка здесь - Как только я выхожу в город она сразу же бежит ко мне если я начинаю задираться с охраной или с горожанами она влазит в драку на моей стороне Хотя диалога с ней еще не было (он еще не готов стоит заглушка) только название вписано ch.Dialog.Filename = "baba_dialog.c"; В принципе меня это устраивает мне так и надо, но хотелось бы знать почему тогда так себя не ведут офицеры а тупо сидят и ждут пока я к ним сам подойду(по их же образцу) это из-за разных групп локаторов ( у офицеров sit, а у нее goto) или что?
================================================================================
================

Попробовал, убрал все свои изменения в игре на чистую........ Теперь я вообще не могу попасть из оксбея не в джунгли не в катакомбы т.к. в оксбей попадаю через порт.. версия игры не знаю какая, но изначально стоят исправления от 24.08.03
Black Angel
А есть ли какой нибудь рефрешь на огни на корабле?Почему при смене погоды огни на судне не тухнут?Это движком не поддерживается?Я говорю про гпк
Warship
Выключать функцией
void Ship_SetLightsOff(ref rCharacter, float fTime, bool bLights, bool bFlares, bool bNow)

Т.е., если нужно, чтобы за 3 секунды платно затухли, юзать как Ship_SetLightsOff(PChar, 3.0, true, true, false);
Если нужно, чтобы затухли сразу, последний параметр ставь в истину.

Включить динамически нельзя никак.
navy
Цитата
Попробовал, убрал все свои изменения в игре на чистую........ Теперь я вообще не могу попасть из оксбея не в джунгли не в катакомбы т.к. в оксбей попадаю через порт.. версия игры не знаю какая, но изначально стоят исправления от 24.08.03

Включи квест лог в дебаге, увидишь какие квестовые прерывания отрабатывают.
Цитата
почему тогда так себя не ведут офицеры а тупо сидят и ждут пока я к ним сам подойду(по их же образцу) это из-за разных групп локаторов ( у офицеров sit, а у нее goto) или что?

Ты добавил ее в группу ГГ, поэтому она и ведет себя таким образом.
Alexad_D
А вот события, как например - добавление/убавление денег, репутации, предметов, можно только через диалог или обязательно в квест реакшин вписывать это событие. Вот к примеру сидит мужик на земле тоскует, я подхожу спрашиваю - Что приуныл а он отвечает:
- жена за хлебом послала а я деньги потерял.
Я отвечаю:
- Так какие проблемы- сколько?
- 1000
- На тебе 1000
или
- Да пошел ты, раззява, следующий раз умнее будешь....

Ну это грубый пример конечно, но смысл что то вроде этого.... если дал, минус 1000. а репутация +5 а отказал деньги на месте но репутация -5
delfin_
С этим я баловался. Достаточно в диалогах прописать.
Black Angel
Цитата(Warship @ Aug 28 2009, 00:40) *

Выключать функцией
void Ship_SetLightsOff(ref rCharacter, float fTime, bool bLights, bool bFlares, bool bNow)

Т.е., если нужно, чтобы за 3 секунды платно затухли, юзать как Ship_SetLightsOff(PChar, 3.0, true, true, false);
Если нужно, чтобы затухли сразу, последний параметр ставь в истину.

Включить динамически нельзя никак.

спасибо большое
в каком файле находятся проверки фортов на стрелять/не стрелять по вражеским судам?
Cyclopus
Цитата(Black Angel @ Aug 28 2009, 22:30) *

спасибо большое
в каком файле находятся проверки фортов на стрелять/не стрелять по вражеским судам?

Насколько мне известно, в файле AIFort.c должен быть ответ.
Посмотрите там, кажется, видел там что-то подобное.
Вот путь: Пираты Карибского Моря\PROGRAM\SEA_AI\AIFort.c
Alexad_D
При редакции стартового диалога согласно нового сюжета столкнулся вот с какой проблемой:
В диалоге есть три проверки на наличае комплектации оружия
1. Все ли оружие забрали из сундука
case "TakeWeapon":
if(CheckCharacterItem(Pchar, "blade28") == 0 || CheckCharacterItem(Pchar, "Spyglass1") == 0 || CheckCharacterItem(Pchar, "pistol7") == 0)

2. Все взяли из сундука но ничего не одели
case "EquipWeapon":
if(IsEquipCharacterByItem(Pchar, "blade28") == false && IsEquipCharacterByItem(Pchar, "pistol7") == false )

3. Забыли одеть саблю
case "EquipWeapon":
if(IsEquipCharacterByItem(Pchar, "blade28") == false && IsEquipCharacterByItem(Pchar, "pistol7") == true )

4. Забыли одеть пистолет
case "EquipWeapon":
if(IsEquipCharacterByItem(Pchar, "blade28") == true && IsEquipCharacterByItem(Pchar, "pistol7") == false )

5.Все одели
case "EquipWeapon":
if(IsEquipCharacterByItem(Pchar, "blade28") == true && IsEquipCharacterByItem(Pchar, "pistol7") == true )

Так вот в чем глюк - если одеть сначала саблю (как это в диалоге у Моргана),а потом пистолет то пистолет виден но меня перебрасывает на - "забыли одеть саблю"
но если одеть сначала пистолет а потом саблю диалог продолжается как положено но.... пистолета не видно пока не перегрузимся в сл.локацию.

Видно у Моргана тоже что то похожее было. В чем ошибка
Warship
Что значит "не виден"? По твоему кода, что привел, точно ничего не видно. smile.gif

Давай весь кусок кода, мож у тя там переходы стоят неверные. smile.gif
Alexad_D
Цитата(Warship @ Aug 29 2009, 10:59) *

Что значит "не виден"? По твоему кода, что привел, точно ничего не видно. smile.gif
Давай весь кусок кода, мож у тя там переходы стоят неверные. smile.gif

Не видно - это значит визуально не отображается (хотя и присутствует) 1.gif
А вот кусок кода - но толку то там же мои изменения и все в принципе работает если не считать описанный выше нюанс. Можно конечно прописать последовательность нацепливания оружия в тексте диалога, чтобы не заморачиваться smile.gif Просто интересен сам факт - ПОЧЕМУ ТАК!!!
Код
case "See_Weapon":            
            if(CheckCharacterItem(Pchar, "blade28") == 0 || CheckCharacterItem(Pchar, "Spyglass5") == 0 || CheckCharacterItem(Pchar, "pistol7") == 0)
            {
                NextDiag.TempNode = "TakeWeapon";
                dialog.text = DLG_TEXT[17];                           //Ничего не взято из сундука
                link.l1 = DLG_TEXT[18];
                link.l1.go = "Exit";
            }
/*            else
            {

                NextDiag.TempNode = "EquipWeapon";
                dialog.text = DLG_TEXT[19];                            //Ничего не одето из оружия
                link.l1 = DLG_TEXT[18];
                link.l1.go = "Exit";
            }*/
            if(IsEquipCharacterByItem(Pchar, "blade28") == true && IsEquipCharacterByItem(Pchar, "pistol7") == true && IsEquipCharacterByItem(Pchar, "Spyglass5") == true )
            {
                dialog.text = DLG_TEXT[22];
                link.l1 = DLG_TEXT[23];
                link.l1.go = "YesDeal";
                link.l2 = DLG_TEXT[34];
                link.l2.go = "refusal";
                link.l3 = DLG_TEXT[28];
                link.l3.go = "Continue_ToSeriousFight";
            }
            else
            {
                addDialogExitQuest("Tut_EquipWeapon");
                NextDiag.TempNode = "EquipWeapon";
                dialog.text = DLG_TEXT[19];                            //Ничего не одето из оружия
                link.l1 = DLG_TEXT[18];
                link.l1.go = "Exit";
            }

        break;

        case "EquipWeapon":
            //NextDiag.TempNode = "EquipWeapon";
            dialog.text = DLG_TEXT[24];
            link.l1 = DLG_TEXT[18];                                 //Взята только труба
            link.l1.go = "Exit";

            if(IsEquipCharacterByItem(Pchar, "blade1") == true && IsEquipCharacterByItem(Pchar, "pistol7") == false )
            {
                //Dialog.TempNode = "EquipWeapon";
                dialog.text = DLG_TEXT[25];             //забыли пехаль
                link.l1 = DLG_TEXT[18];
                link.l1.go = "Exit";
            }
            if(IsEquipCharacterByItem(Pchar, "blade28") == false && IsEquipCharacterByItem(Pchar, "pistol7") == true )
            {
                //Dialog.TempNode = "EquipWeapon";
                dialog.text = DLG_TEXT[26];               //забыли саблю
                link.l1 = DLG_TEXT[18];
                link.l1.go = "Exit";
            }
            if(IsEquipCharacterByItem(Pchar, "blade28") == true && IsEquipCharacterByItem(Pchar, "pistol7") == true )
            {
                dialog.text = DLG_TEXT[22];
                link.l1 = DLG_TEXT[23];
                link.l1.go = "YesDeal";                  // Согласие завершить сделку
                link.l2 = DLG_TEXT[34];
                link.l2.go = "refusal";                         // Вежливо отказаться и получить трубу в подарок
                link.l3 = DLG_TEXT[28];
                link.l3.go = "Continue_ToSeriousFight";                          // Попытаться  ограбить
            }

        break;
Black Angel
Почему во время боя при попытке выключить огни они не выключаются?
Warship
Цитата(Alexad_D @ Aug 29 2009, 21:44) *

Не видно - это значит визуально не отображается (хотя и присутствует) 1.gif

Видимо оружие надевается флагом PChar.equip.gun = "pistol7", поэтому и не видно.
Уже много раз говорилось, что одевать нужно функцией void EquipCharacterByItem(ref chref, string itemID);

Убери лишнюю закрывающую фигурную скобку в кейсе "EquipWeapon" - наверное из-за нее и не работает.
+ стоит расположить проверки по-иному - сейчас у тебя будет вызываться квест "Tut_EquipWeapon" даже если все оружие надето (проверка ниже по коду).

Далее.
Не стоит юзать проверки "IsEquipCharacterByItem(Pchar, "blade28") == true" - ярчайший пример плохого кода. Функция IsEquipCharacterByItem() сама по себе возвращает логическое значение, зачем его еще и сравнивать?

Цитата(Black Angel @ Aug 30 2009, 06:58) *

Почему во время боя при попытке выключить огни они не выключаются?

Функцией, что я приводил, должны выключаться. Почему нет - хз.
Scatimon
В ПКМ был такой косяк. Нужно перезапустить перса ядром при одевании пекаля. Когда одеваем саблю перезапуск происходит, при одевании пекаля - нет. Поэтому одеваем пекаль, затем саблю - перезапуск - все видно. Кароче поищи ссылку на ядно, тока с масагой про пекаль. Она вроде идентична сабле. Сувать сий кусок кода в место где происходит одевание. Это в CharacterUtilite.c
Поиском ищи фразу MSG_CHARACTER_SETBLADE. Попробуй просто копернуть кусок кода про саблю - в код про пистолет (там рядом). Я делал давным давно - работало.
Black Angel
Цитата(Warship @ Aug 30 2009, 02:32) *

Функцией, что я приводил, должны выключаться. Почему нет - хз.

А если принудительно попробовать через сендмеседж?Кстати,надо было рефреш ставить?
И еще заметил не утром не вечером при использовании функции огни не тухнут,хотя програмно говорит что выключины(проверку сделал)...
Alexad_D
6.gif У меня возник такой вопрос - Если проверить отсутствие определенного предмета у перса, и добавить его в случае чего - можно функцией:

Код


  if(CheckCharacterItem(Pchar, "предмет") == 0) GiveItem2Character(Pchar, "предмет");



То как тогда наоборот - как проверить его присутствие и если есть то удалить .... 3.gif Заменить 0 на 1? Если да, то тогда удалить как? Или это вообще не так делается?
dolphin_sv
Код
if(CheckCharacterItem(Pchar, "id предмета")) TakeItemFromCharacter(Pchar, "id предмета");


Как уже говорили выше - сравнивать bool функции с 1 и 0 глупо, т.к. эта функция сама по себе возвращает или 0 (false) или 1 (true)

CheckCharacterItem(Pchar, "id предмета"), если есть предмет = 1 (true), если нет предмета = 0 (false) (функция сама по себе вызращает логическое значение)

Оператор if основывается на результате логического выражения, результатом которого могут быть ТОЛЬКО два значения (0 и 1) и имеет следующий синтаксис:

Код
if(истина)
{
     оператор 1;
}
else
{
     оператор 2;
}
Alexad_D
Цитата( @ Aug 31 2009)
Как уже говорили выше - сравнивать bool функции с 1 и 0 глупо, т.к. эта функция сама по себе возвращает или 0 (false) или 1 (true)

Цитата( @ Aug 30 2009)
Не стоит юзать проверки "IsEquipCharacterByItem(Pchar, "blade28") == true" - ярчайший пример плохого кода. Функция IsEquipCharacterByItem() сама по себе возвращает логическое значение, зачем его еще и сравнивать?
Отредактировано..
-------------------------------------------------------------------------------------------------------------------------------------------------
1.gif Dolphin_sv и Warship - Если можно то давайте по понятней. Давайте разберем на примере кода диалога, описанного мной выше [quote post='289460'] В чем конкретно у меня ошибка.....
dolphin_sv
Если так, то:
Код
if (CheckCharacterItem(Pchar, "blade28"))    
  {
     TakeItemFromCharacter(Pchar, "blade28");
   }
else
  {
    GiveItem2Character(Pchar, "blade1");
   }


ты пропустил скобки, должно быть if(CheckCharacterItem(Pchar, "blade28")) и без ";" в конце

этот кусок кода проверяет: если у игрока есть сабля "blade28", то у него ее забирают; если у него ее нет, то дают саблю "blade1". Если это то, что тебе надо, то тогда так.

Еще хочу обратить внимание, что данный метод не будет работать с саблей, которая экипирована на персонаже.

PS
То, как ты писал до этого, не то чтобы неправильно, просто неккорректно с точки зрения рациональности кода и правил хорошего тона программирования.

В принципе, вообще всю программу можно писать в одну строку:
if (CheckCharacterItem(Pchar, "blade28")){TakeItemFromCharacter(Pchar, "blade28");}elsе{GiveItem2Character(Pchar, "blade1");}
и так далее, но так никто не делает, потомучто существуют определенные правила и стандарты, то же самое относится и к вышеупомянутому случаю со сравниваемым значением результата логической функции.
Тебя можно понять, ты равняешься на скрипты от Акеллы, но в некоторых местах их явно скриптовали студенты-первокурсники, да еще и двоечники...
Alexad_D
Dolphin_sv 1.gif ...Ну вот, а теперь еще эти коды пытается писать двоечник - девятикласник, который запятые вечно пропускает ........ lol.gif
В смысле: "данный метод не будет работать с саблей, которая экипирована на персонаже"....? - Работает...... перса раздевает как надо.... 1.gif Правда без проверки, сразу, одно снимаем, другое одеваем..... smile.gif
А как грамотней построить проверку - все ли одето или взято из сундука? Пост с кодом выше... Там у меня в чем ошибки? Сейчас у меня не срабатывает указание какой именно предмет не одет, но если все одеты дальше идет все как надо.
dolphin_sv
CheckCharacterItem не проверяет одет предмет или нет, она проверяет - есть ли данный прдмет в инвентаре персонажа или нет, экипированые предметы при это не учитываются.

Проверка - экипирован персонаж предметом или нет, это функция
bool IsEquipCharacterByItem(ref chref, string itemID);

Если тебе нужно забрать предмет, который гипотетически может быть на герое, то:
1. Проверить - одет ли предмет на персонаж, если одет, то снять предмет.
2.Отобрать предмет.
Alexad_D
Цитата(dolphin_sv @ Sep 2 2009, 00:25) *

Dolphin_sv Добрый день. Так у меня же так и сделано!!!!! Имелся ввиду самый верхний пост про диалог ГГ с евреем - торговцем. Сам диалог работает и проверка тоже. Так, как задумывалось.
Но вот насколько грамотно построена эта проверка?(ниже структура)

Если согласились посмотреть что у него есть -

case "See_Weapon":
if(CheckCharacterItem(Pchar, "blade28") == 0 || CheckCharacterItem(Pchar, "Spyglass5") == 0 || CheckCharacterItem(Pchar, "pistol7") == 0)
{
dialog.text = Ничего не взято из сундука - возми
}
else
{
NextDiag.TempNode = "EquipWeapon";
dialog.text = Что то не одето из оружия - одень
}
if(IsEquipCharacterByItem(Pchar, "blade28") == true && IsEquipCharacterByItem(Pchar, "pistol7") == true && IsEquipCharacterByItem(Pchar, "Spyglass5") == true )
{
dialog.text = запрс на согласие сделки
link.l1.go = "YesDeal"; - Согласие
link.l2.go = "refusal"; - Отказ
link.l3.go = " Begin_ToSeriousFight"; Пытаемся ограбить, старик начинает защищать свое добро
}
else
{
addDialogExitQuest("Tut_EquipWeapon");
NextDiag.TempNode = "EquipWeapon";
dialog.text = Ничего не одето из оружия
}
break;

case "EquipWeapon":
if(IsEquipCharacterByItem(Pchar, "blade28") == false && IsEquipCharacterByItem(Pchar, "pistol7") == false )
{
dialog.text = ничего не одето
}
if(IsEquipCharacterByItem(Pchar, "blade28") == true && IsEquipCharacterByItem(Pchar, "pistol7") == false )
{
dialog.text = забыли пехаль
}
if(IsEquipCharacterByItem(Pchar, "blade28") == false && IsEquipCharacterByItem(Pchar, "pistol7") == true )
{
dialog.text = забыли саблю
}
if(IsEquipCharacterByItem(Pchar, "blade28") == true && IsEquipCharacterByItem(Pchar, "pistol7") == true )
{
dialog.text = запрс на согласие сделки
link.l1.go = "YesDeal"; - Согласие
link.l2.go = "refusal"; - Отказ
link.l3.go = " Begin_ToSeriousFight"; - Пытаемся ограбить, старик начинает защищать свое добро
}
break;

Как я понял Ошибка в записи первых двух проверок? Надо так?
if(CheckCharacterItem(Pchar, "blade28") || CheckCharacterItem(Pchar, "Spyglass5") || CheckCharacterItem(Pchar, "pistol7"))
if(IsEquipCharacterByItem(Pchar, "blade28") && IsEquipCharacterByItem(Pchar, "pistol7") && IsEquipCharacterByItem(Pchar, "Spyglass5"))
Первой проверкой, мы проверяем забрали ли мы все из сундука, второй - все ли одели. В чем разница между - || и && ?
================================================================================
===================================
И еще..... Кто знает, где храняться данные о локаторах (goto, sit, reload, box randitem)- чтобы можно было назначить или поменять и как это делается? Имеется ввиду на самой модели помещения. Если на короблях эти локаторы видны в гмвивере то при просмотре помещеня sad.gif - нет
=========================================================

Scatimon и Dolphin_sv - Большое спасибо за объяснения
Scatimon
|| - или
&& - и

if(a || b || c)
{
хоть что-то тру то сюда
}else{
все фалс
}

if(a && b && c)
{
все тру
}else{
хоть что-то фалс то сюда
}
dolphin_sv
Цитата
Как я понял Ошибка в записи первых двух проверок? Надо так?
if(CheckCharacterItem(Pchar, "blade28") || CheckCharacterItem(Pchar, "Spyglass5") || CheckCharacterItem(Pchar, "pistol7"))
if(IsEquipCharacterByItem(Pchar, "blade28") && IsEquipCharacterByItem(Pchar, "pistol7") && IsEquipCharacterByItem(Pchar, "Spyglass5"))


Да, именно так. Только надо писать не "Ничего не взято из сундука", а "Что-то не взято из сундука". Почему так, читай ниже.

Цитата
Первой проверкой, мы проверяем забрали ли мы все из сундука, второй - все ли одели. В чем разница между - || и && ?


&& как и говорили, логическое "и"
|| как и говорили, логическое "или"

a && b - результат true если оба значения true. false, если хотябы одно из них false

a || b - результат true, если хотя бы одно значение true. false - если оба значения false

Еще полезна операция отрицания - !
!true = false и !false = true

Например,
if(IsEquipCharacterByItem(Pchar, "blade28")) - ты проверяешь, экипирован ли НПС предметом "blade28"
а можно с помощью логического отрицания поверить на то, что НПС не экипирован этим предметом:
if(!IsEquipCharacterByItem(Pchar, "blade28"))

Цитата
И еще..... Кто знает, где храняться данные о локаторах (goto, sit, reload, box randitem)- чтобы можно было назначить или поменять и как это делается? Имеется ввиду на самой модели помещения. Если на короблях эти локаторы видны в гмвивере то при просмотре помещеня - нет


Локаторы лучше смотреть в TOOL. В GMViewer их можно просмотреть, для локаций они находятся в отдельных файлах, как правило, для ПКМ это: "имя_локации"_l.gm, а для К3/КВЛ/ГПК "имя локации"_locators.gm
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.