![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
igor_pol |
![]()
Сообщение
#1
|
боцман ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 140 Регистрация: 3-December 04 Пользователь №: 169 ![]() |
Первое что я хотел написать "АДМИНЫ!!!!" НЕ ЗВЕРЕЙТЕ ЗА "НЕНУЖНУЮ ТЕМУ"
************************************************** на вопрос зачем создал эту тему отвечу так "Я например НЕ ПРОСТО ЮЗВЕРЬ А КОЕ ЧТО И САМ НАПИСАТЬ МОГУ. И хотел бы чтобы на форуме была тема для тех кто сам хочет что-то добавить в игру. На сайте аддона Алекс вікинул ссылку на описание скриптов ПКМ на английском. Я хотел бы узнать где можно нарыть больше инфы по этом скриптам. И кстати на каком языке они пишуться. Если кто-то знает ----- пишите. И вообще всем програмерам на форуме нужна своя тема. так что ГОСПОДА ПРОГРАМЕРЫ ВАЛИТЕ СЮДА !!!! Может из этого что небудь интересное выйдет!!!!!!(Если тему не УТРУТ) Жду сообщений (может у когот есть идеи на эту тему ) Сообщение отредактировал Догева - Apr 24 2006, 13:36 |
![]() ![]() |
Alexad_D |
![]()
Сообщение
#281
|
матрос ![]() ![]() ![]() Группа: форумчанин Сообщений: 89 Регистрация: 11-July 09 Из: Беларусь. г. Поставы Пользователь №: 20,710 ![]() |
А вот события, как например - добавление/убавление денег, репутации, предметов, можно только через диалог или обязательно в квест реакшин вписывать это событие. Вот к примеру сидит мужик на земле тоскует, я подхожу спрашиваю - Что приуныл а он отвечает:
- жена за хлебом послала а я деньги потерял. Я отвечаю: - Так какие проблемы- сколько? - 1000 - На тебе 1000 или - Да пошел ты, раззява, следующий раз умнее будешь.... Ну это грубый пример конечно, но смысл что то вроде этого.... если дал, минус 1000. а репутация +5 а отказал деньги на месте но репутация -5 |
delfin_ |
![]()
Сообщение
#282
|
Защитнег Бакланаф ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 5,186 Регистрация: 5-December 04 Пользователь №: 174 ![]() |
С этим я баловался. Достаточно в диалогах прописать.
|
Black Angel |
![]()
Сообщение
#283
|
боцман ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 256 Регистрация: 19-August 06 Из: Нижний Новгород Пользователь №: 3,985 ![]() |
Выключать функцией void Ship_SetLightsOff(ref rCharacter, float fTime, bool bLights, bool bFlares, bool bNow) Т.е., если нужно, чтобы за 3 секунды платно затухли, юзать как Ship_SetLightsOff(PChar, 3.0, true, true, false); Если нужно, чтобы затухли сразу, последний параметр ставь в истину. Включить динамически нельзя никак. спасибо большое в каком файле находятся проверки фортов на стрелять/не стрелять по вражеским судам? |
Cyclopus |
![]()
Сообщение
#284
|
Exotic status, isn't it? ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 352 Регистрация: 20-August 09 Пользователь №: 21,051 ![]() |
спасибо большое в каком файле находятся проверки фортов на стрелять/не стрелять по вражеским судам? Насколько мне известно, в файле AIFort.c должен быть ответ. Посмотрите там, кажется, видел там что-то подобное. Вот путь: Пираты Карибского Моря\PROGRAM\SEA_AI\AIFort.c |
Alexad_D |
![]()
Сообщение
#285
|
матрос ![]() ![]() ![]() Группа: форумчанин Сообщений: 89 Регистрация: 11-July 09 Из: Беларусь. г. Поставы Пользователь №: 20,710 ![]() |
При редакции стартового диалога согласно нового сюжета столкнулся вот с какой проблемой:
В диалоге есть три проверки на наличае комплектации оружия 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 |
![]()
Сообщение
#286
|
Гроза морей ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: бета-тестер Сообщений: 441 Регистрация: 29-April 07 Из: Прим. край г. Находка Пользователь №: 9,103 ![]() |
Что значит "не виден"? По твоему кода, что привел, точно ничего не видно.
![]() Давай весь кусок кода, мож у тя там переходы стоят неверные. ![]() |
Alexad_D |
![]()
Сообщение
#287
|
матрос ![]() ![]() ![]() Группа: форумчанин Сообщений: 89 Регистрация: 11-July 09 Из: Беларусь. г. Поставы Пользователь №: 20,710 ![]() |
Что значит "не виден"? По твоему кода, что привел, точно ничего не видно. ![]() Давай весь кусок кода, мож у тя там переходы стоят неверные. ![]() Не видно - это значит визуально не отображается (хотя и присутствует) ![]() А вот кусок кода - но толку то там же мои изменения и все в принципе работает если не считать описанный выше нюанс. Можно конечно прописать последовательность нацепливания оружия в тексте диалога, чтобы не заморачиваться ![]() Код 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 |
![]()
Сообщение
#288
|
боцман ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 256 Регистрация: 19-August 06 Из: Нижний Новгород Пользователь №: 3,985 ![]() |
Почему во время боя при попытке выключить огни они не выключаются?
|
Warship |
![]()
Сообщение
#289
|
Гроза морей ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: бета-тестер Сообщений: 441 Регистрация: 29-April 07 Из: Прим. край г. Находка Пользователь №: 9,103 ![]() |
Не видно - это значит визуально не отображается (хотя и присутствует) ![]() Видимо оружие надевается флагом PChar.equip.gun = "pistol7", поэтому и не видно. Уже много раз говорилось, что одевать нужно функцией void EquipCharacterByItem(ref chref, string itemID); Убери лишнюю закрывающую фигурную скобку в кейсе "EquipWeapon" - наверное из-за нее и не работает. + стоит расположить проверки по-иному - сейчас у тебя будет вызываться квест "Tut_EquipWeapon" даже если все оружие надето (проверка ниже по коду). Далее. Не стоит юзать проверки "IsEquipCharacterByItem(Pchar, "blade28") == true" - ярчайший пример плохого кода. Функция IsEquipCharacterByItem() сама по себе возвращает логическое значение, зачем его еще и сравнивать? Почему во время боя при попытке выключить огни они не выключаются? Функцией, что я приводил, должны выключаться. Почему нет - хз. |
Scatimon |
![]()
Сообщение
#290
|
...Welcome To Scatlend... ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 707 Регистрация: 14-April 05 Из: Москва Пользователь №: 662 ![]() |
В ПКМ был такой косяк. Нужно перезапустить перса ядром при одевании пекаля. Когда одеваем саблю перезапуск происходит, при одевании пекаля - нет. Поэтому одеваем пекаль, затем саблю - перезапуск - все видно. Кароче поищи ссылку на ядно, тока с масагой про пекаль. Она вроде идентична сабле. Сувать сий кусок кода в место где происходит одевание. Это в CharacterUtilite.c
Поиском ищи фразу MSG_CHARACTER_SETBLADE. Попробуй просто копернуть кусок кода про саблю - в код про пистолет (там рядом). Я делал давным давно - работало. |
Black Angel |
![]()
Сообщение
#291
|
боцман ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 256 Регистрация: 19-August 06 Из: Нижний Новгород Пользователь №: 3,985 ![]() |
Функцией, что я приводил, должны выключаться. Почему нет - хз. А если принудительно попробовать через сендмеседж?Кстати,надо было рефреш ставить? И еще заметил не утром не вечером при использовании функции огни не тухнут,хотя програмно говорит что выключины(проверку сделал)... |
Alexad_D |
![]()
Сообщение
#292
|
матрос ![]() ![]() ![]() Группа: форумчанин Сообщений: 89 Регистрация: 11-July 09 Из: Беларусь. г. Поставы Пользователь №: 20,710 ![]() |
![]() Код if(CheckCharacterItem(Pchar, "предмет") == 0) GiveItem2Character(Pchar, "предмет"); То как тогда наоборот - как проверить его присутствие и если есть то удалить .... ![]() |
dolphin_sv |
![]()
Сообщение
#293
|
матрос ![]() ![]() ![]() Группа: форумчанин Сообщений: 88 Регистрация: 23-May 05 Из: Донецк Пользователь №: 771 ![]() |
Код 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 |
![]()
Сообщение
#294
|
матрос ![]() ![]() ![]() Группа: форумчанин Сообщений: 89 Регистрация: 11-July 09 Из: Беларусь. г. Поставы Пользователь №: 20,710 ![]() |
Цитата( @ Aug 31 2009) Как уже говорили выше - сравнивать bool функции с 1 и 0 глупо, т.к. эта функция сама по себе возвращает или 0 (false) или 1 (true) Цитата( @ Aug 30 2009) Не стоит юзать проверки "IsEquipCharacterByItem(Pchar, "blade28") == true" - ярчайший пример плохого кода. Функция IsEquipCharacterByItem() сама по себе возвращает логическое значение, зачем его еще и сравнивать? Отредактировано..------------------------------------------------------------------------------------------------------------------------------------------------- ![]() |
dolphin_sv |
![]()
Сообщение
#295
|
матрос ![]() ![]() ![]() Группа: форумчанин Сообщений: 88 Регистрация: 23-May 05 Из: Донецк Пользователь №: 771 ![]() |
Если так, то:
Код 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 |
![]()
Сообщение
#296
|
матрос ![]() ![]() ![]() Группа: форумчанин Сообщений: 89 Регистрация: 11-July 09 Из: Беларусь. г. Поставы Пользователь №: 20,710 ![]() |
Dolphin_sv
![]() ![]() В смысле: "данный метод не будет работать с саблей, которая экипирована на персонаже"....? - Работает...... перса раздевает как надо.... ![]() ![]() А как грамотней построить проверку - все ли одето или взято из сундука? Пост с кодом выше... Там у меня в чем ошибки? Сейчас у меня не срабатывает указание какой именно предмет не одет, но если все одеты дальше идет все как надо. |
dolphin_sv |
![]()
Сообщение
#297
|
матрос ![]() ![]() ![]() Группа: форумчанин Сообщений: 88 Регистрация: 23-May 05 Из: Донецк Пользователь №: 771 ![]() |
CheckCharacterItem не проверяет одет предмет или нет, она проверяет - есть ли данный прдмет в инвентаре персонажа или нет, экипированые предметы при это не учитываются.
Проверка - экипирован персонаж предметом или нет, это функция bool IsEquipCharacterByItem(ref chref, string itemID); Если тебе нужно забрать предмет, который гипотетически может быть на герое, то: 1. Проверить - одет ли предмет на персонаж, если одет, то снять предмет. 2.Отобрать предмет. |
Alexad_D |
![]()
Сообщение
#298
|
матрос ![]() ![]() ![]() Группа: форумчанин Сообщений: 89 Регистрация: 11-July 09 Из: Беларусь. г. Поставы Пользователь №: 20,710 ![]() |
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)- чтобы можно было назначить или поменять и как это делается? Имеется ввиду на самой модели помещения. Если на короблях эти локаторы видны в гмвивере то при просмотре помещеня ![]() ========================================================= Scatimon и Dolphin_sv - Большое спасибо за объяснения |
Scatimon |
![]()
Сообщение
#299
|
...Welcome To Scatlend... ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 707 Регистрация: 14-April 05 Из: Москва Пользователь №: 662 ![]() |
|| - или
&& - и if(a || b || c) { хоть что-то тру то сюда }else{ все фалс } if(a && b && c) { все тру }else{ хоть что-то фалс то сюда } |
dolphin_sv |
![]()
Сообщение
#300
|
матрос ![]() ![]() ![]() Группа: форумчанин Сообщений: 88 Регистрация: 23-May 05 Из: Донецк Пользователь №: 771 ![]() |
Цитата Как я понял Ошибка в записи первых двух проверок? Надо так? 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 |
![]() ![]() |
Текстовая версия | Сейчас: 13th May 2025 - 00:56 |