Форма входа
 
Приветствуем тебя, корсар Юнга!

Гость, мы рады вас видеть. Пожалуйста зарегистрируйтесь или авторизуйтесь!


Купить игры
 



Чат
 
500


Статистика
 
Пользователи, посетившие сайт за текущий день:
Danila130, Andrey__3010, Kriogener
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Модератор форума: NikK  
Урок № 3. Пишем диалоги персонажам
MettДата: Пятница, 01.01.2016, 06:00 | Сообщение # 261
Капитан I ранга
Группа: Корсар
Сообщений: 586
Награды: 91
Репутация: 565
Статус: В открытом море
а вообще korsary4 прав - надо и корабль ставить и координаты с глобалки

я очень активно пользуюсь дебагером и только сейчас глянул код телепортов
Код
...
    int i = FindLocation(loc);
    if (i != -1)
    {
        if(CheckAttribute(&locations[i],"fastreload"))
        {
   if (GetCityFrom_Sea(locations[i].fastreload) != "")
      {
          setCharacterShipLocation(pchar, GetCityFrom_Sea(locations[i].fastreload));
          setWDMPointXZ(GetCityFrom_Sea(locations[i].fastreload));
      }
     }
     else
     {
         if (locations[i].type == "seashore" || locations[i].type == "mayak" || locations[i].type == "port")
         {
             setCharacterShipLocation(pchar, loc));
          setWDMPointXZ(loc);
         }
     }
     DoQuestReloadToLocation(loc, grp, ltr, "");
     Log_Info(loc);
    }
...


Что толку, если не можешь сделать мир лучше.
ActidДата: Пятница, 01.01.2016, 22:41 | Сообщение # 262
Пороховая обезьяна
Группа: Корсар
Сообщений: 9
Награды: 0
Репутация: 7
Статус: В открытом море
Цитата korsary4 ()
setWDMPointXZ("Tortuga_town")

если его прописываю то окно диолога не открывается :(
NathanielДата: Пятница, 01.01.2016, 23:30 | Сообщение # 263
Контр-адмирал
Группа: Капитан
Сообщений: 8036
Награды: 347
Репутация: 1845
Статус: В открытом море
Цитата Actid ()
если его прописываю то окно диолога не открывается

В синтаксисе ошибки не были случайно допущены?


Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор.
Но я не нашёл там никого, кто не был бы моим другом!
ActidДата: Суббота, 02.01.2016, 00:11 | Сообщение # 264
Пороховая обезьяна
Группа: Корсар
Сообщений: 9
Награды: 0
Репутация: 7
Статус: В открытом море
вроде нет
Код
case "06":
    DialogExit();
    NextDiag.CurrentNode = NextDiag.TempNode;
    LAi_SetPlayerType(pchar);
    DoReloadCharacterToLocation("IslaMona_town", "reload", "reload1_back")
    SetCharacterShipLocation(pchar, "IslaMona_town");
    setWDMPointXZ("IslaMona_town")
   break;
MettДата: Суббота, 02.01.2016, 00:14 | Сообщение # 265
Капитан I ранга
Группа: Корсар
Сообщений: 586
Награды: 91
Репутация: 565
Статус: В открытом море
Actid,
Код
setWDMPointXZ("IslaMona_town")

в конце надо точку с запятой ставить


Что толку, если не можешь сделать мир лучше.
ActidДата: Суббота, 02.01.2016, 01:33 | Сообщение # 266
Пороховая обезьяна
Группа: Корсар
Сообщений: 9
Награды: 0
Репутация: 7
Статус: В открытом море
Цитата Mett ()
в конце надо точку с запятой ставить
всеровно не работает
Код
   DialogExit();
    NextDiag.CurrentNode = NextDiag.TempNode;
    LAi_SetPlayerType(pchar);
    DoReloadCharacterToLocation("Tortuga_town", "reload", "reload1_back")
    SetCharacterShipLocation(pchar, "Tortuga_town");
    setWDMPointXZ("Tortuga_town");
MettДата: Суббота, 02.01.2016, 02:43 | Сообщение # 267
Капитан I ранга
Группа: Корсар
Сообщений: 586
Награды: 91
Репутация: 565
Статус: В открытом море
Actid,
Код
DoReloadCharacterToLocation("Tortuga_town", "reload", "reload1_back")

в конце надо точку с запятой ставить


Что толку, если не можешь сделать мир лучше.
DufreinДата: Суббота, 02.01.2016, 02:47 | Сообщение # 268
Капитан II ранга
Группа: Корсар
Сообщений: 436
Награды: 14
Репутация: 93
Статус: В открытом море
Actid, Вам нужно выучить синтаксис C#, прежде чем приступать к кодингу :)


NathanielДата: Воскресенье, 03.01.2016, 15:28 | Сообщение # 269
Контр-адмирал
Группа: Капитан
Сообщений: 8036
Награды: 347
Репутация: 1845
Статус: В открытом море
Цитата Actid ()
вроде нет...

Цитата Actid ()
всеровно не работает...

Цитата Mett ()
в конце надо точку с запятой ставить...

Цитата Corss ()
Вам нужно выучить синтаксис C#, прежде чем приступать к кодингу...

Actid, включите отладочные логи. Инструкция в вопросе №7 в нашем FAQ в этом же разделе. И всё-таки не помешает почитать про базовые правила синтаксиса С/С++ в свободное время в любом самоучителе. Расставление скобок и знаков препинания - не менее важно, чем написание кода. Это как на уроках алгебры в школе: решить уравнение можете и правильно, а за неверно расставленные скобки получите "тройку", хотя решение было верным!..


Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор.
Но я не нашёл там никого, кто не был бы моим другом!
pavel_86regДата: Четверг, 05.01.2017, 19:01 | Сообщение # 270
Пороховая обезьяна
Группа: Пират
Сообщений: 9
Награды: 0
Репутация: 0
Статус: В открытом море
Помогите пожалуйста разобраться с диалогом,что нужно прописать,что бы он не зацикливался?
Потому что если например добавить НПС который дает денег,то я могу подходить к нему сколько угодно и каждый раз диалог один и тот же.
korsary4Дата: Пятница, 06.01.2017, 01:22 | Сообщение # 271
Адмирал
Группа: Администратор
Сообщений: 5204
Награды: 496
Репутация: 1935
Статус: В открытом море
Цитата pavel_86reg ()
что нужно прописать,что бы он не зацикливался?

Сменить ему реплику, после предыдущего диалога.

Цитата pavel_86reg ()
Потому что если например добавить НПС который дает денег,то я могу подходить к нему сколько угодно и каждый раз диалог один и тот же


В предыдущем кейсе каком-нибудь того диалога, добавь также NextDiag.TempNode = "dialog_TempNode";
А тот кейс с новым диалогом будет тоже иметь ту строку:

Код
  case "dialog_TempNode":
   NextDiag.TempNode = "dialog_TempNode";  
   dialog.text = "Юла-бла.";
   link.l1 = "Бла-бла";
   link.l1.go = "exit";  
  break;    



Единственное, что можно сказать об удаче с уверенностью — она изменит.
--------
pavel_86regДата: Пятница, 06.01.2017, 10:32 | Сообщение # 272
Пороховая обезьяна
Группа: Пират
Сообщений: 9
Награды: 0
Репутация: 0
Статус: В открытом море
Цитата korsary4 ()
В предыдущем кейсе каком-нибудь того диалога, добавь также NextDiag.TempNode = "dialog_TempNode";

Спасибо!То есть получается строчка "NextDiag.TempNode = "dialog_TempNode" как раз и служит неким свитчем?
Alister18Дата: Понедельник, 10.07.2017, 01:48 | Сообщение # 273
Матрос
Группа: Корсар
Сообщений: 24
Награды: 0
Репутация: 0
Статус: В открытом море
Уважаемые, подскажите пожалуйста. У меня персонаж стоит на Ямайке (Порт-Рояль), я по квесту должен передать предмет в Бас-Тер, как сделать диалог так, чтобы после Бас-Тера тот персонаж что на Ямайке говорил уже новый диалог? скриптами занимаюсь не так давно, интересное это занятие.

Пусть час не пробил, жди, не уставая,
Пусть лгут лжецы, не снисходи до них;
Умей прощать и не кажись, прощая,
Великодушней и мудрей других.

Киплинг
korsary4Дата: Понедельник, 10.07.2017, 10:19 | Сообщение # 274
Адмирал
Группа: Администратор
Сообщений: 5204
Награды: 496
Репутация: 1935
Статус: В открытом море
Код
sld =  CharacterFromID("Beliz_Rodrigo");
sld.dialog.currentnode = "dialog_quest_4";    


Как вариант, поменять просто ветку диалога тому нпс на ямайке.



Единственное, что можно сказать об удаче с уверенностью — она изменит.
--------
Alister18Дата: Понедельник, 10.07.2017, 10:38 | Сообщение # 275
Матрос
Группа: Корсар
Сообщений: 24
Награды: 0
Репутация: 0
Статус: В открытом море
Цитата korsary4 ()
Как вариант, поменять просто ветку диалога тому нпс на ямайке.

Не совсем понял. Эти строки вставлять в файл диалога нпс что на ямайке? Если да, то куда?


Пусть час не пробил, жди, не уставая,
Пусть лгут лжецы, не снисходи до них;
Умей прощать и не кажись, прощая,
Великодушней и мудрей других.

Киплинг
korsary4Дата: Понедельник, 10.07.2017, 12:15 | Сообщение # 276
Адмирал
Группа: Администратор
Сообщений: 5204
Награды: 496
Репутация: 1935
Статус: В открытом море
Alister18,
да можно прям в файле диалога вот так, в конце общения после передачи предмета:

Код
case "dialog_quest_3":
sld = CharacterFromID("Beliz_Rodrigo");
sld.dialog.currentnode = "dialog_quest_4";
dialog.text = "Но... Как же? Я думала...";
link.l1 = "";
link.l1.go = "exit";
break;



Единственное, что можно сказать об удаче с уверенностью — она изменит.
--------
NathanielДата: Понедельник, 10.07.2017, 20:17 | Сообщение # 277
Контр-адмирал
Группа: Капитан
Сообщений: 8036
Награды: 347
Репутация: 1845
Статус: В открытом море
Цитата korsary4 ()
можно прям в файле диалога вот так...

Хм... Я обычно пишу эти строки после "exit", уже перед закрытием кейса.


Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор.
Но я не нашёл там никого, кто не был бы моим другом!
Alister18Дата: Понедельник, 10.07.2017, 20:29 | Сообщение # 278
Матрос
Группа: Корсар
Сообщений: 24
Награды: 0
Репутация: 0
Статус: В открытом море
korsary4, всё заработало! Спасибо, месье! -give_rose-

Добавлено (10.07.2017, 20:29)
---------------------------------------------
Можно задать ещё один вопрос, так сказать "не отходя от кассы"?
Пишу диалог, в ходе которого добавляю нпц на другой остров (за основу взял Лоу из пиратской линейки).
Дело в том, что я хочу поставить обычную девушку. Прописываю код Лоу, изменяю всё под женского персонажа, захожу в игру - а там стоит горожанка с "Ураганом" и анимация как у Даниэль. Как сделать обычную девушку? Ну можно как Изабелла, всмысле с анимацией Изабеллы.

Код
case "dialog9":
     dialog.text = "Как все сделаешь найдешь меня в городе, я еще тут задержусь. Ах да, чуть не забыл, спасибо!";     
     link.l1 = "Пока не за что...";
     link.l1.go = "exit";
    NextDiag.TempNode = "Second_1";
    sld = GetCharacter(NPC_GenerateCharacter("MariFushe", "CitizenWom_1", "woman", "woman", 30, FRANCE, 1, true));
   sld.name = "Мари";
   sld.lastname = "Фуше";
   sld.rank = 5;
   sld.city = "BasTer";
   sld.location    = "basTer_HouseS3";
   sld.location.group = "goto";
   sld.location.locator = "goto2";
   sld.dialog.filename   = "MariFushe.c"
   sld.greeting = "Gr_EvilPirate";
   LAi_SetCitizenType(sld);
   LAi_group_MoveCharacter(sld, "FRANCE_CITIZENS");
   
    break;
    

Может дело в этой строке? И, если не тяжело, объясните эту строку.
Код
sld = GetCharacter(NPC_GenerateCharacter("MariFushe", "CitizenWom_1", "woman", "woman", 30, FRANCE, 1, true));


Пусть час не пробил, жди, не уставая,
Пусть лгут лжецы, не снисходи до них;
Умей прощать и не кажись, прощая,
Великодушней и мудрей других.

Киплинг


Сообщение отредактировал Alister18 - Понедельник, 10.07.2017, 21:27
NathanielДата: Понедельник, 10.07.2017, 22:15 | Сообщение # 279
Контр-адмирал
Группа: Капитан
Сообщений: 8036
Награды: 347
Репутация: 1845
Статус: В открытом море
Цитата Alister18 ()
Может дело в этой строке?

Скорее всего, дело в неподходящем месте для скрипта создания NPC. Он написан вроде как правильно, но не обрабатывается у Вас или перетирается чем-то другим. По собственному опыту знаю, что такой код лучше писать в LSC_Q2Utilite, в reaction_functions или в отдельном файле. А из диалога выше просто вызовите эту функцию.

Цитата Alister18 ()
объясните эту строку...

Вы создали NPC с ID "MariFushe" (по такому ID вы обращаетесь к NPC в примере кода выше), моделью "CitizenWom_1", анимацией "woman", полом "woman", 30 ранга; француженку.


Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор.
Но я не нашёл там никого, кто не был бы моим другом!
Alister18Дата: Понедельник, 10.07.2017, 23:25 | Сообщение # 280
Матрос
Группа: Корсар
Сообщений: 24
Награды: 0
Репутация: 0
Статус: В открытом море
Nathaniel, спасибо. Решение проблемы нашлось в диалоге с Изабеллой!
Вместо кода Лоу, вставил код Розиты Фернандес и все получилось!)
Не подскажешь за что отвечает эта строчка?
Код
sld.dialog.currentnode = "";


Как сделать, чтобы нпц после разговора бежал в локацию (портовое управление, например), стоял там и и с ним можно было говорить?
Пробую так (пиратская линейка, первая встреча с Гудли):
Код
case "PiratesMan1_2":
   DialogExit();
   NextDiag.CurrentNode = "Tavern_1";
   chrDisableReloadToLocation = true;
   bDisableFastReload = true;
   FreeSitLocator("PuertoPrincipe_tavern", "sit3");
   LAi_SetActorType(npchar);
   LAi_ActorRunToLocation(npchar, "reload", "reload5", "PuertoPrincipe_tavern", "sit", "sit3", "PiratesLine_toTavern", -1);
  break;

Не помогло, хотя локаторы заменил и false выставил в "chrDisableReloadToLocation = true;". Не помогло, ибо:
1. Я не успеваю договорить диалог а нпц уже побежал в заданную локацию, я захожу за ним а говорить нельзя!
2. Если пишу код отдельным кейсом, то после разговора нпц не бежит в локацию, а бродит, как и бродил, по городу!
При повторном разговоре, уже диалог не начинается - нпц сразу берит в локацию, но разговаривать с ним по-прежнему нельзя!
Подскажите пожалуйста!


Пусть час не пробил, жди, не уставая,
Пусть лгут лжецы, не снисходи до них;
Умей прощать и не кажись, прощая,
Великодушней и мудрей других.

Киплинг


Сообщение отредактировал Alister18 - Вторник, 11.07.2017, 01:48
Поиск:

Copyright Pirates-Life.Ru © 2008-2024


Семь Футов под Килем - Бухта Корсаров и Пиратов!