|
|
23.02.2009, 12:33
|
#2162
|
|
Re: М: Скриптинг в Готике
Я изменил немного участок функции func int B_SelectSpell для мага: * * *if((slf.guild == GIL_KDF) || (slf.aivar[AIV_MagicUser] == MAGIC_ALWAYS) || (slf.ID == 100) || (slf.ID == 4) || (slf.ID == 24)) * * *{ * * * * * *if(Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_MELEE) * * * * * *{ * * * * * *if(Npc_HasItems(slf,ItRu_Concussionbolt) == 0) * * * * * *{ * * * * * * * * *CreateInvItems(slf,ItRu_Concussionbolt,1); * * * * * *}; * * * * * *if(Npc_HasItems(slf,ItRu_InstantFireball) == 0) * * * * * *{ * * * * * * * * *CreateInvItems(slf,ItRu_InstantFireball,1); * * * * * *}; * * * * * *if(Npc_HasItems(slf,ItRu_Deathball) == 0) * * * * * *{ * * * * * * * * *CreateInvItems(slf,ItRu_Deathball,1); * * * * * *} * * * * * *else if(C_NpcHasAttackReasonToKill(self)) * * * * * *{ * * * * * * * * *if((self.flags == NPC_FLAG_IMMORTAL) || (Hlp_GetInstanceID(other) == Hlp_GetInstanceID(Raven))) * * * * * * * * *{ * * * * * * * * * * * *B_ReadySpell(slf,SPL_Deathball,SPL_COST_Deathball ); * * * * * * * * *} * * * * * * * * *else * * * * * * * * *{ * * * * * * * * * * * *B_ReadySpell(slf,SPL_InstantFireball,SPL_COST_Ins tantFireball); * * * * * * * * *}; * * * * * * * * *return TRUE; * * * * * *} * * * * * *else * * * * * *{ * * * * * * * * *B_ReadySpell(slf,SPL_ConcussionBolt,SPL_COST_Conc ussionbolt); * * * * * * * * *return TRUE; * * * * * *}; * * * * * * * * *}; * * * * * * * * * * * * * * *if(slf.attribute[ATR_HITPOINTS] < 500) * * * * * *{ * * * * * * * * *if(Npc_HasItems(slf,ItRu_FullHeal) == 0) * * * * * * * * *{ * * * * * * * * *CreateInvItems(slf,ItRu_FullHeal,1); * * * * * * * * *} * * * * * * * * *else * * * * * * * * *{ * * * * * * * * *B_ReadySpell(slf,SPL_FullHeal,SPL_Cost_FullHeal); * * * * * * * * *return TRUE; * * * * * * * * *}; * * * * * *}; * * * * * * * * *}; Цель - заставить мага драться вблизи оружием ближнего боя. Появление руны лечения и кастование лечения должны происходить на любой дистанции 1).Переход на оружие ближнего боя работает, а обратный - нет, но в файле B_select_weapon.d я не нашел ничего, что должно этому помешать. 2). После достижения указанного минимума здоровья выбор руны лечения происходит только в ближнем бою (а факт её появления в инвентаре в любом случае), но NPC не кастует лечение, а замирает. Если же уйти от него, а потом обнажить оружие, то его угрозы приводят к кастованию лечения с последующими обнажением меча и боем. Я очень прошу указать мне на возможные ошибки и причины, которых я не вижу. На мой вопрос о том, что функция регенерации жизни/ маны с кольцами и амулетами в Г2 работает, а с доспехами - нет - прошу не отвечать. Причина очевидна - моя собственная глупость. Всё работает... Спасибо.
|
|
|
23.02.2009, 19:42
|
#2163
|
|
Re: М: Скриптинг в Готике
2 niccolo:
Я внедрил в Г2 свитки вызова элитного орка, но не могу понять причину того, что, если указать guild = GIL_NONE;, то они не могут "зачехлить" своё оружие, так и стоят с топорами в лапах, а guild = GIL_FRIENDLY_ORC; исправляет это недоразумение. Но почему???
|
Так и должно быть, т.к. во 2-м случае это гильдия дружественных людям орков. Кстати, а вы не смотрели, как это прописано у вызванных скелетов в скрипте Story\NPC\Monster\MST_Skeleton.d?
|
|
|
23.02.2009, 20:57
|
#2164
|
|
Re: М: Скриптинг в Готике
2 Dimus. MST_Skeleton.d смотрел, по аналогии сделал. Вызванный орк функционирует в любом случае исправно, но я хочу знать причину неспособности твари вкладывать после боя оружие "в ножны", если гильдия - "NONE". Очевидно, что дело не в отношении к людям хотя бы потому, что обе гильдии вполне лояльны к людям, важнее - тварь сама по себе не обладает интеллектом, а выполняет скриптовую инструкцию, в которой вряд ли прописано держать оружие наготове гильдии "none", но (и это главное) должна быть функция, указывающая действие типа: if "бой закончен", то "зачехлить оружие", которая в случае с вызванной тварью, принадлежащей гильдии "NONE" работает неисправно. Если же Вы полагаете, что несмотря ни на что так должно быть, то я хотел бы узнать почему. Спасибо.
|
|
|
02.03.2009, 15:49
|
#2167
|
|
Re: Скриптинг в Готике
Цитата:
Сообщение от Ukur link=board=gothic&t=1105030050&goto=2326299 date=05/25/05, в 01:50:49
Вопрос по данной функции: void Wld_InsertObject (string name, string point); - разместить в мире визуальный объект name в точке с именем point (может быть как WP, так и FP).***
|
Как я понял, для размещения каких-либо объектов. Нигде не нашел примеров, ни в Г1, ни в Г2(а).
|
А можно по подробнее, какие можно использовать объекты и нужно ли как-нибудь этот объект описывать в скриптах.
|
Повторю вопрос 3-х летней давности: :) Кто-нибудь пользовался этой функцией? И можно по-подробнее, какие можно использовать объекты и нужно ли как-нибудь этот объект описывать в скриптах. :)
|
|
|
04.03.2009, 12:21
|
#2168
|
|
Re: М: Скриптинг в Готике
2dimmell:
И можно по-подробнее, какие можно использовать объекты и нужно ли как-нибудь этот объект описывать в скриптах
|
[pre] Могу привести исходник этой функции из движка, кто знает скрипты, тот поймет её действие: [pre]int Wld_InsertObject() { * * *zCParser* par = zCParser::GetParser(); * * *zSTRING name, point; * * *par->GetParameter(point); * * *par->GetParameter(name); * * *zVEC3 vp = 0; * * *zCWaypoint* wp = ogame->GetWorld()->m_pWayNet->GetWaypoint(point); * * *if(wp) * * * * * *vp = wp->GetPositionWorld(); * * *else * * *{ * * * * * *zCVob* pVob = ogame->GetWorld()->SearchVobByName(point); * * * * * *if(!pVob) * * * * * *{ * * * * * * * * *zerr.Report(zTYPE_WARN, "U: AI: Spawnpoint " + point + " not found. Object " + name + " cannot be spawned."); * * * * * * * * *return 0; * * * * * *} * * * * * *vp = pVob->GetPositionWorld(); * * *} * * *oCMOB* pMob = new oCMOB(); * * *pMob->zCVob::SetVisual(name); * * *pMob->f.tTakeable = FALSE; * * *pMob->SetCollDet(FALSE); * * *ogame->GetSelfPlayerVob()->m_pWorld->AddVob(pMob); * * *pMob->SetOnFloor(vp); * * *pMob->SetCollDet(TRUE); * * *pMob->SetPhysicsEnabled(TRUE); * * *pMob->SetSleeping(TRUE); * * *pMob->Release(); * * *return 0; }[/pre] и для сравнения всем знакомая функция [pre]int Wld_InsertItem() { * * *zCParser* par = zCParser::GetParser(); * * *zSTRING point; * * *par->GetParameter(point); * * *int instance; * * *par->GetParameter(instance); * * *oCVob* pItem = ogame->GetGameWorld()->CreateVob(zTVOB_ITEM, instance); * * *if(!pItem) * * * * * *return 0; * * *zVEC3 pos; * * *zCWaypoint* wp = ogame->GetWorld()->m_pWayNet->GetWaypoint(point); * * *if(wp) * * * * * *pos = wp->GetPositionWorld(); * * *else * * *{ * * * * * *zCVob* pVob = ogame->GetGameWorld()->SearchVobByName(point); * * * * * *if(!pVob) * * * * * * * * *zerr.Report(zTYPE_WARN, "U:WLD: Position-Vob " + point + " not found."); * * * * * *else * * * * * * * * *pos = pVob->GetPositionWorld(); * * *} * * *pItem->SetPositionWorld(pos); * * *ogame->GetGameWorld()->AddVob(pItem); * * *pItem->Release(); * * *return 0; } [/pre]
|
|
|
06.03.2009, 14:58
|
#2171
|
|
Re: М: Скриптинг в Готике
2Magmatic:Условие такое:
Cпойлер(щелкните, чтобы прочесть):
if(Npc_IsDead(scavenger_001)) { Wld_InsertNpc(SHADOWBEAST_001,"FP_ROAM_IMWALD_WOL F_19"); };
Прописываешь падальщика и мракориса, и запускаешь функцию при загрузке главы.
|
|
|
20.03.2009, 11:51
|
#2172
|
|
Re: М: Скриптинг в Готике
Столкнулся со следующей проблемой, которую не удается решить. Может кто что-нить подскажет?
Готика 1.
Требуется: Реализовать следующую последовательность - Диалог. В конце диалога персонаж (Наталья) теряет сознание (падает в обморок.). Диалог кончается. По прошествии заданного времени она приходит в себя, поднимается и начинает следующий диалог.
Как пытался решить: Написал функцию состояния и соответствующую функцию расписания. Поскольку оверлеи обременены глюками, решено делать через обычное расписание. В самой функции отключаются восприятия (иначе не успев упасть сразу начнет новый диалог), проигрывается анимация падения. В END-функции проигрывается анимация вставания и восстанавливаются восприятия. А теперь сама проблема - как заставить выйти из этого состояния через определенное время?
И AI_StartState(self,ZS_Stand,1,"") в LOOP-функции пробовал, и Npc_SetStateTime(self,0) тоже. Лежит и ни на что не реагирует. Там же пробовал ставить *B_SetBabeDefaultPerceptions().
PS: В LOOP-функции ставил и return LOOP_CONTINUE, и return LOOP_END.
|
|
|
20.03.2009, 14:00
|
#2174
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от alex ryz link=board=gothic&t=1105030050&goto=4868043 date=03/20/09, в 12:52:48
А почему бы диалог не прервать? Пусть упадёт, но когда встанет, начнёт первой следующий.
|
Так я его прерываю. Проблема в том, чтобы по истечении определенного небольшого промежутка времени она вышла из этого состояния.
|
|
|
20.03.2009, 15:42
|
#2175
|
|
Re: М: Скриптинг в Готике
Я не совсем понял, что значит "вышла". Если в диалоге запставить NPC выполнять расписание, то вероятно предположить, что из диалога он вывалится. Может так попробовать: { ... AI_Wait(other,int time); AI_PlayAni(other,"падает"); AI_Wait(other,int time); AI_PlayAni(other,"лежит"); AI_Wait(other,int time); AI_PlayAni(other,"встёт"); AI_Wait(other,int time); ... }; И не задействовать ZS_Loop. Всякие ситуации, когда NPC пьёт пиво в диалоге работают и циклов там я не видел.
|
|
|
20.03.2009, 15:51
|
#2176
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от alex ryz link=board=gothic&t=1105030050&goto=4868338 date=03/20/09, в 14:42:33
Я не совсем понял, что значит "вышла". Если в диалоге запставить NPC выполнять расписание, то вероятно предположить, что из диалога он вывалится.
|
Так мне это и требуется. Нужно завершить диалог. При этом она входит в состояние "обморок". Все восприятия отключены. Нужно, чтобы она по истечении заданного времени завершила это состояние, как резальтат снова включатся восприятия и она начнет новый диалог. Задача в том, чтобы заставить ее выйти из данного состояния через промежуток времени. По идее это делают оверлеи. Но они глючные и, как правило, не срабатывают. Я уже на эти грабли наступал.
|
|
|
21.03.2009, 18:16
|
#2179
|
|
Re: М: Скриптинг в Готике
2kraw:
При этом она входит в состояние "обморок". Все восприятия отключены. Нужно, чтобы она по истечении заданного времени завершила это состояние, как резальтат снова включатся восприятия и она начнет новый диалог. Задача в том, чтобы заставить ее выйти из данного состояния через промежуток времени.
|
В Г1. Если отключить все восприятия, то функции состояния не будут вызываются для данного НПС. Необходимо оставить какое-нибудь восприятие активным (можно скриптовое), повесить на него новую функцию состояния и перевести в него НПС, а далее по истечении заданного времени открыть нужные восприятия.
|
|
|
20.04.2009, 00:51
|
#2181
|
|
Re: М: Скриптинг в Готике
Есть диалог:
8<---------------------
instance DIA_EBR_109_Syra_follow1(C_Info) { npc = EBR_109_Syra; nr = 1; condition = DIA_EBR_109_Syra_follow1_Condition; information = DIA_EBR_109_Syra_follow1_Info; permanent = 0; important = 1; description = "Пришли?"; };
func int DIA_EBR_109_Syra_follow1_Condition() { if (Npc_KnowsInfo(hero, DIA_EBR_109_Syra_follow2) && Npc_GetDistToWP(other, "OW_PATH_067") < 300) { return 1; }; };
func void DIA_EBR_109_Syra_follow1_Info() { var c_npc npc831; // var c_npc npc832; // var c_npc npcVel; // self.aivar[AIV_BABE_STAT]=1; Npc_ExchangeRoutine (self, "follow2"); AI_SetWalkMode(self,NPC_RUN); AI_GotoNpc(self, other); AI_Output(self,other,"DIA_EBR_109_Syra_follow1_1" ); //Это и есть Новый лагерь? AI_Output(other,self,"DIA_EBR_109_Syra_follow1_2" ); //Он самый. AI_StopProcessInfos(self); npcVel = Hlp_GetNpc(EBR_108_Velaya); Npc_ExchangeRoutine (npcVel, "staywowp1"); npc831 = Hlp_GetNpc(Org_831_Organisator); Npc_ExchangeRoutine (npc831, "stay"); npc832 = Hlp_GetNpc(Org_832_Organisator); Npc_ExchangeRoutine (npc832, "stay"); }; 8<---------------------
Нет реплики ГГ. Предыдущая реплика есть, а этой нет.
AI_Output(other,self,"DIA_EBR_109_Syra_follow1_2") ; //Он самый.
Никак не пойму в чем дело. Имя DIA_EBR_109_Syra_follow1_2 уникально.
|
|
|
20.04.2009, 01:07
|
#2182
|
|
Re: М: Скриптинг в Готике
2kraw:
Нет реплики ГГ. Предыдущая реплика есть, а этой нет.
|
х\з, иногда случаются необъяснимые вещи, возможно из-за отсутствия реальной озвучки. Вероятно раньше времени срабатывает AI_StopProcessInfos(self); попробуй убрать его, или переместить в самый низ диалога. У тебя для ГГ в условии используются как "hero", так и "other", попробуй использовать везде "hero". Если у тебя диалог "important = 1;", зачем использовать "description = "Пришли?";"
|
|
|
20.04.2009, 10:50
|
#2183
|
|
Re: М: Скриптинг в Готике
Извиняюсь. Отправил не тот диалог. Тот, который я привер ранее, он работает нормально. А не срабатывает этот (точнее не появляется реплика ГГ):
instance DIA_EBR_109_Syra_f1(C_Info) { npc = EBR_109_Syra; nr = 1; condition = DIA_EBR_109_Syra_f1_Condition; information = DIA_EBR_109_Syra_f1_Info; permanent = 0; important = 1; description = "Пришли?"; };
func int DIA_EBR_109_Syra_f1_Condition() { if (Npc_KnowsInfo(hero, DIA_EBR_109_Syra_follow3) && Npc_GetDistToWP(other, "NC_PATH_JARVIS") < 300) { return 1; }; };
func void DIA_EBR_109_Syra_f1_Info() { var c_npc npcJar; // Npc_ExchangeRoutine (self, "follow3"); self.aivar[AIV_BABE_STAT]=1; AI_SetWalkMode(self,NPC_RUN); AI_GotoNpc(self, other); AI_Output(self,other,"DIA_EBR_109_Syra_f1_1") ; //И за воротами тоже Новый лагерь? AI_Output(other,self,"DIA_EBR_109_Syra_f1_2") ; //И там тоже он. Это большой лагерь. AI_StopProcessInfos(self); npcJar = Hlp_GetNpc(SLD_728_Jarvis); Npc_ExchangeRoutine (npcJar, "Syra0"); AI_ContinueRoutine(npcJar); };
|
|
|
23.04.2009, 09:12
|
#2184
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от Ukur link=board=gothic&t=1105030050&goto=4951223 date=04/20/09, в 00:07:25
Вероятно раньше времени срабатывает AI_StopProcessInfos(self); попробуй убрать его, или переместить в самый низ диалога. У тебя для ГГ в условии используются как "hero", так и "other", попробуй использовать везде "hero".
|
Пробовал убирать AI_StopProcessInfos(self); Пробовал ставить "hero". Не помогло.
|
|
|
25.04.2009, 14:37
|
#2191
|
|
Re: М: Скриптинг в Готике
2GeorG:
Можно ли зная ссылку ITEM, получить ссылку на предмет с номером “instanceItem”
|
int Hlp_GetInstanceID (c_item item); - получить ID номер предмета по ссылке на класс item.
|
|
|
25.04.2009, 19:20
|
#2192
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от GeorG link=board=gothic&t=1105030050&goto=4961901 date=04/25/09, в 03:30:10
// возвращает оружие ближнего радиуса поражения, которым экипирован НПС npc. func C_ITEM Npc_GetEquippedMeleeWeapon(var C_NPC npc);
|
Можно ли зная ссылку ITEM, получить ссылку на предмет с номером “instanceItem”
|
Поясню, та функция, которую я взял в цитату возвращает значения в формате ITEM, а мне надо из неё получить ссылку на номер предмета (в формате int)
|
2360:
int Hlp_GetInstanceID (c_item item); - получить ID номер предмета по ссылке на класс item.
|
Ещё вчера днём, делал имено так, но выскакивала ошибка, сегодня в 4 утра ещё раз попробовал и получилось... * Снимаю вопрос,подробности сд есь.
|
|
|
30.04.2009, 01:29
|
#2195
|
|
Re: М: Скриптинг в Готике
Где спелы заклов превращения? *SPL_COST_TRFMEATBUG прописан только в Item, а в спелах пустота. Где прописаны превращения ГГ (и других тварей) в зверюшков? Нашел строку (slf.guild == GIL_GOBBO) && (slf.aivar[AIV_MM_REAL_ID] == ID_GOBBO_MAGE)) Гоблин- маг? Любопытно. ::) 2GeorG:
загадка с подвохом, или что?
|
одна голова хорошо, а две лучше. Проверяю лишний раз, чтобы удостовериться. Я пока не во все скрипты вник. Добавление от 04/29/09, в 21:49:06
Ну же господа! Неужто никто не знает по какому принципу работают заклы превращения? Нашел скрипт b_applytransformedhp, но кажется он для смены гильдий. name = NAME_Spruchrolle; * * *mainflag = ITEM_KAT_RUNE; * * *flags = ITEM_MULTI; * * *value = Value_Sc_TrfScavenger; * * *visual = "ItSc_TrfScavenger.3DS"; * * *material = MAT_LEATHER; * * * spell = SPL_TrfScavenger; * // где лежит этот спелл? * * *cond_atr[2] = ATR_MANA_MAX; * * *cond_value[2] = SPL_Cost_Scroll; * * *wear = WEAR_EFFECT; * * *effect = "SPELLFX_WEAKGLIMMER"; * * *description = NAME_SPL_TrfScavenger; * * *text[0] = NAME_MageScroll; * * *text[1] = NAME_Mana_needed; * * *count[1] = SPL_Cost_TrfScavenger; * * *text[5] = NAME_Value; * * *count[5] = value; Добавление от 04/29/09, в 21:54:18
Вопрос снят. Нашел скрипт Spell_Transform_Alle. Добавление от 04/30/09, в 00:49:31
Последний вопрос на ближайшую неделю. Немецкий я не знаю, переводчика тоже нет. Кто-нибудь скажите, что написано в коментах. Это функции смены тушки чела на чужое тело, типа зверь или зомби? FUNC VOID * * * Mdl_ApplyOverlayMds * * * (var C_NPC n0, VAR STRING s1 ) { }; // mit diesem Befehl werden Animationen auf einem hцheren Layer gestartet // (z.B. hat der Zombie ein Overlay ьber die normalen Human-Animationen)FUNC VOID * * * Mdl_RemoveOverlayMDS * * *(VAR C_NPC self, VAR STRING overlayName) {}; // Entferne ein Overlay-MDSfunc VOID * * *Mdl_ApplyOverlayMDSTimed * * *(VAR C_NPC self, VAR STRING overlayname, VAR FLOAT timeTicks ); // Overlay-MDS wird gestartet und automatisch nach der angegebenen Zeit abgeschaltet
|
|
|
30.04.2009, 09:28
|
#2196
|
|
Re: М: Скриптинг в Готике
2Magmatic:
Последний вопрос на ближайшую неделю. Немецкий я не знаю, переводчика тоже нет. Кто-нибудь скажите, что написано в коментах.
|
А в GS слабо посмотреть? Описание всех функций движка там есть.
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 19:23. Часовой пояс GMT +4.
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|