|
|
14.02.2012, 17:18
|
#2524
|
|
Re: М: Скриптинг в Готике
Сори за наглость :-/ а как это прописать? Если не трудно не могли бы примерно написать код, век буду помнить! Я сделал так
Cпойлер(щелкните, чтобы прочесть):
func void DIA_ORG_2000_VOR_Info() { AI_Output(other,self,"DIA_ORG_2000_VOR_15_00" ); //Вот 10 кусков руды. AI_Output(self,other,"DIA_ORG_2000_VOR_03_01" ); //Щас тебе откроют ворота. AI_StopProcessInfos(self); B_GiveInvItems(other,self,ItMiNugget,10); var C_Npc Guard; Guard = Hlp_GetNpc(ORG_2001_GUARD); AI_SetWalkMode(Guard,NPC_WALK); AI_GotoWP(Guard,"NC_LOCKOUT_VWHEEL"); AI_UseMob(Guard,"VWHEEL",1); AI_UseMob(Guard,"VWHEEL",-1); if(Wld_GetMobState(Guard,"VWHEEL") == 1) { if(Npc_GetDistToNpc(Guard,hero) >= 3000) { AI_SetWalkMode(Guard,NPC_WALK); AI_UseMob(Guard,"VWHEEL",0); AI_UseMob(Guard,"VWHEEL",-1); AI_ContinueRoutine(Guard); }; }; };
Добавление от 02/14/12, в 02:05:41
К примеру какова функция сканирования расстояния (self,other) :-/ Добавление от 02/14/12, в 17:38:01
Хех Спасибо всем в особенности "in soviet russia" за совет, разобрался! вот чё сделал, могет еому пригодиться Создал новое ZS расписание
Cпойлер(щелкните, чтобы прочесть):
func void ZS_AAA() { PrintDebugNpc(PD_TA_FRAME,"ZS_AAA"); GuardPerception(); AI_Standup(self); AI_SetWalkMode(self,NPC_WALK); AI_GotoWP(self,self.wp); if(Npc_GetDistToNpc(self,hero) >= 2000) { PrintDebugNpc(PD_TA_CHECK,"...Tor offen!"); AI_UseMob(self,"VWHEEL",0); AI_UseMob(self,"VWHEEL",-1); AI_AlignToWP(self); Npc_ExchangeRoutine(self,"start"); AI_ContinueRoutine(self); }; };
func void ZS_AAA_End() { PrintDebugNpc(PD_TA_FRAME,"ZS_AAA_End"); };
Его можно менять под каждого непися И вставил в функции диалога просто название рутины этого непися
Cпойлер(щелкните, чтобы прочесть):
func void DIA_ORG_2000_VOR_Info() { AI_Output(other,self,"DIA_ORG_2000_VOR_15_00" ); //Вот 10 кусков руды. AI_Output(self,other,"DIA_ORG_2000_VOR_03_01" ); //Щас тебе откроют ворота. AI_StopProcessInfos(self); B_GiveInvItems(other,self,ItMiNugget,10); var C_Npc Guard; Guard = Hlp_GetNpc(ORG_2001_GUARD); AI_SetWalkMode(Guard,NPC_WALK); AI_GotoWP(Guard,"NC_LOCKOUT_VWHEEL"); AI_UseMob(Guard,"VWHEEL",1); AI_UseMob(Guard,"VWHEEL",-1); Npc_ExchangeRoutine(Guard,"Open"); AI_ContinueRoutine(Guard); };
. Вот что у непися
Cпойлер(щелкните, чтобы прочесть):
daily_routine = Rtn_start_2001; };
func void Rtn_start_2001() { TA_Boss(8,0,22,0,"VAROTA1"); TA_Boss(22,0,8,0,"VAROTA1"); };
func void Rtn_Open_2001() { TA_AAA(8,0,22,0,"NC_LOCKOUT_VWHEEL"); TA_AAA(22,0,8,0,"NC_LOCKOUT_VWHEEL"); };
Ну всё. Ещё раз огромное СПАСИБО за подсказку! ;)
|
|
|
16.02.2012, 23:59
|
#2526
|
|
Re: М: Скриптинг в Готике
2Berian:
Всем привет. Ещё один вопросик! Надо добавить полноценный пункт меню со своими разветвления, в совершенно другое именно разветвление диалога
|
Создай новую часть диалога и условием соедини с предыдущим. Так сделаны все диалоги в игре, открой любого НПЦ с большим количеством ветвлений.
|
|
|
27.04.2012, 16:54
|
#2529
|
|
Re: М: Скриптинг в Готике
2Злой Гений: 1. поконкретней напишите что хотите сделать. Если надо просто добавить функцию статуям Белиара, то это можно сделать и в простом блокноте типа Notepad++ Подробнее ЗДЕСЬ2. Функции типа b_MM_AssessDamage(), B_AssessDamage(), B_AssessMagic() и т.д.
|
|
|
22.07.2012, 14:59
|
#2535
|
|
Re: М: Скриптинг в Готике
2Tony92:
Собственно вопрос: никто не пытался найти механизм работы этой регенерации? Ведь должна же быть где то функция, которая работает с этими параметрами и делает весь этот процесс.
|
без проблем и глюков работает любая регенерация с любым шагом сделанная с использованием циклического триггера без использования atr_regeneratehp/mana Добавление от 07/22/12, в 15:01:12
подскажите, как можно сделать меч-вампир? т.е. чтобы при ударе он восстанавливал определенное кол-во жизни?
|
по аналогии с когтем Белиара. См. B_BeliarsWeaponSpecialDamage.d
|
|
|
03.09.2012, 01:34
|
#2536
|
|
Re: М: Скриптинг в Готике
Всем привет.Подскажите пожалуйста,вот скрипт игры в карты(21) проблема в том что в 3 раунде всегда получается только ничья
Cпойлер(щелкните, чтобы прочесть):
instance DIA_Nagur_Carts(C_Info) { npc = VLK_493_Nagur; nr = 6; condition = DIA_Nagur_Carts_Condition; information = DIA_Nagur_Carts_Info; permanent = TRUE; description = "Давай сиграем в карты?"; };
func int DIA_Nagur_Carts_Condition() { if(hero.guild == GIL_NONE) { return TRUE; }; return FALSE; };
func void DIA_Nagur_Carts_Info() { AI_Output(other,self,"DIA_Nagur_Carts_15_00") ; //Давай сиграем в карты? AI_Output(self,other,"DIA_Nagur_Carts_15_00") ; //Давай!Делай ставки Info_ClearChoices(DIA_Nagur_Carts); Info_AddChoice(DIA_Nagur_Carts,"Но у меня недостаточно золота ... (НАЗАД)",DIA_Nagur_Carts_BACK); Info_AddChoice(DIA_Nagur_Carts,"(50 золота)",DIA_Nagur_Carts_50); Info_AddChoice(DIA_Nagur_Carts,"(100 золота)",DIA_Nagur_Carts_100); Info_AddChoice(DIA_Nagur_Carts,"(200 золота)",DIA_Nagur_Carts_200); };
func void DIA_Nagur_Carts_BACK() { AI_Output(other,self,"DIA_Nagur_Carts_BACK_15_00" ); //Но у меня недостаточно золота... AI_Output(self,other,"DIA_Nagur_Carts_BACK_10_01" ); //Тогда проваливай. Info_ClearChoices(DIA_Nagur_Carts); };
func void DIA_Nagur_Carts_50() { if(Npc_HasItems(other,ItMi_Gold) >= 50) { Nagur_Carts_banned = False; B_GiveInvItems(other,self,ItMi_Gold,50); Npc_RemoveInvItems(self,ItMi_Gold,Npc_HasItems(se lf,ItMi_Gold)); CreateInvItems(self,ItMi_Gold,100); AI_Output(self,other,"DIA_Nagur_Carts_50_10_0 0"); //Начинаем 1 раунд. round = 1; random1 = Hlp_Random(11); random2 = Hlp_Random(11); if(random1 == 0) { cartschange1 = 1; }; if(random1 == 1) { cartschange1 = 2; }; if(random1 == 2) { cartschange1 = 3; }; if(random1 == 3) { cartschange1 = 4; }; if(random1 == 4) { cartschange1 = 5; }; if(random1 == 5) { cartschange1 = 6; }; if(random1 == 6) { cartschange1 = 7; }; if(random1 == 7) { cartschange1 = 8; }; if(random1 == 8) { cartschange1 = 9; }; if(random1 == 9) { cartschange1 = 10; }; if(random1 == 10) { cartschange1 = 11; }; if(random2 == 0) { cartschange2 = 1; }; if(random2 == 1) { cartschange2 = 2; }; if(random2 == 2) { cartschange2 = 3; }; if(random2 == 3) { cartschange2 = 4; }; if(random2 == 4) { cartschange2 = 5; }; if(random2 == 5) { cartschange2 = 6; }; if(random2 == 6) { cartschange2 = 7; }; if(random2 == 7) { cartschange2 = 8; }; if(random2 == 8) { cartschange2 = 9; }; if(random2 == 9) { cartschange2 = 10; }; if(random2 == 10) { cartschange2 = 11; }; AI_Output(self,other,"DIA_Nagur_Carts_50_10_0 1"); //Закончился 1 раунд. concatText = ConcatStrings("Мои очки - 1 раунд ",IntToString(cartschange1)); PrintScreen(concatText,-1,35,FONT_Screen,5); concatText = ConcatStrings("Нагура очки - 1 раунд ",IntToString(cartschange2)); PrintScreen(concatText,-1,40,FONT_Screen,5); round = 2; Info_ClearChoices(DIA_Nagur_Carts); Info_AddChoice(DIA_Nagur_Carts,"2 раунд",DIA_Nagur_Carts_50_2round); } else if(Npc_HasItems(other,ItMi_Gold) < 50) { AI_Output(self,other,"DIA_Nagur_Carts_50_10_1 2"); //Возвращайся, когда у тебя будет достаточно золота. PrintScreen(Print_NotEnoughGold,-1,-1,FONT_Screen,2); }; };
func void DIA_Nagur_Carts_50_2round() { if(round == 2) { AI_Output(self,other,"DIA_Nagur_Carts_50_2round_1 0_00"); //Начинаем 2 раунд. random1 = Hlp_Random(11); random2 = Hlp_Random(11); if(random1 == 0) { cartschange1 = cartschange1 + 1; }; if(random1 == 1) { cartschange1 = cartschange1 + 2; }; if(random1 == 2) { cartschange1 = cartschange1 + 3; }; if(random1 == 3) { cartschange1 = cartschange1 + 4; }; if(random1 == 4) { cartschange1 = cartschange1 + 5; }; if(random1 == 5) { cartschange1 = cartschange1 + 6; }; if(random1 == 6) { cartschange1 = cartschange1 + 7; }; if(random1 == 7) { cartschange1 = cartschange1 + 8; }; if(random1 == 8) { cartschange1 = cartschange1 + 9; }; if(random1 == 9) { cartschange1 = cartschange1 + 10; }; if(random1 == 10) { cartschange1 = cartschange1 + 11; }; if(random2 == 0) { cartschange2 = cartschange2 + 1; }; if(random2 == 1) { cartschange2 = cartschange2 + 2; }; if(random2 == 2) { cartschange2 = cartschange2 + 3; }; if(random2 == 3) { cartschange2 = cartschange2 + 4; }; if(random2 == 4) { cartschange2 = cartschange2 + 5; }; if(random2 == 5) { cartschange2 = cartschange2 + 6; }; if(random2 == 6) { cartschange2 = cartschange2 + 7; }; if(random2 == 7) { cartschange2 = cartschange2 + 8; }; if(random2 == 8) { cartschange2 = cartschange2 + 9; }; if(random2 == 9) { cartschange2 = cartschange2 + 10; }; if(random2 == 10) { cartschange2 = cartschange2 + 11; }; AI_Output(self,other,"DIA_Nagur_Carts_50_2round_1 0_01"); //Закончился 2 раунд. concatText = ConcatStrings("Мои очки - 2 раунд ",IntToString(cartschange1)); PrintScreen(concatText,-1,45,FONT_Screen,5); concatText = ConcatStrings("Нагура очки - 2 раунд ",IntToString(cartschange2)); PrintScreen(concatText,-1,50,FONT_Screen,5); if((round == 2) && (cartschange1 > 21) && (cartschange2 < 21) && (Nagur_Carts_banned == FALSE)) { AI_Output(self,other,"DIA_Nagur_Carts_50_2round_1 0_04"); //Ты проиграл во 2 раунде. Npc_RemoveInvItems(self,ItMi_Gold,Npc_HasItems(se lf,ItMi_Gold)); Nagur_Carts_banned = TRUE; AI_StopProcessInfos(self); Info_ClearChoices(DIA_Nagur_Carts); } else if((round == 2) && (cartschange2 > 21) && (cartschange1 < 21) && (Nagur_Carts_banned == FALSE)) { AI_Output(self,other,"DIA_Nagur_Carts_50_10_2roun d_03"); //Ты выиграл во 2 раунде. B_GiveInvItems(self,other,ItMi_Gold,100); Nagur_Carts_banned = TRUE; AI_StopProcessInfos(self); Info_ClearChoices(DIA_Nagur_Carts); } else if((round == 2) && (cartschange1 > 21) && (cartschange2 > 21) && (Nagur_Carts_banned == FALSE)) { AI_Output(self,other,"DIA_Nagur_Carts_50_2round_1 0_04"); //Ничья во 2 раунде. B_GiveInvItems(self,other,ItMi_Gold,50); Npc_RemoveInvItems(self,ItMi_Gold,Npc_HasItems(se lf,ItMi_Gold)); Nagur_Carts_banned = TRUE; AI_StopProcessInfos(self); Info_ClearChoices(DIA_Nagur_Carts); } else { round = 3; Info_ClearChoices(DIA_Nagur_Carts); Info_AddChoice(DIA_Nagur_Carts,"3 раунд",DIA_Nagur_Carts_50_3round); }; }; };
func void DIA_Nagur_Carts_50_3round() { if(round == 3) { AI_Output(self,other,"DIA_Nagur_Carts_50_3round_1 0_00"); //Начинаем 3 раунд. random1 = Hlp_Random(11); random2 = Hlp_Random(11); if(random1 == 0) { cartschange1 = cartschange1 + 1; }; if(random1 == 1) { cartschange1 = cartschange1 + 2; }; if(random1 == 2) { cartschange1 = cartschange1 + 3; }; if(random1 == 3) { cartschange1 = cartschange1 + 4; }; if(random1 == 4) { cartschange1 = cartschange1 + 5; }; if(random1 == 5) { cartschange1 = cartschange1 + 6; }; if(random1 == 6) { cartschange1 = cartschange1 + 7; }; if(random1 == 7) { cartschange1 = cartschange1 + 8; }; if(random1 == 8) { cartschange1 = cartschange1 + 9; }; if(random1 == 9) { cartschange1 = cartschange1 + 10; }; if(random1 == 10) { cartschange1 = cartschange1 + 11; }; if(random2 == 0) { cartschange2 = cartschange2 + 1; }; if(random2 == 1) { cartschange2 = cartschange2 + 2; }; if(random2 == 2) { cartschange2 = cartschange2 + 3; }; if(random2 == 3) { cartschange2 = cartschange2 + 4; }; if(random2 == 4) { cartschange2 = cartschange2 + 5; }; if(random2 == 5) { cartschange2 = cartschange2 + 6; }; if(random2 == 6) { cartschange2 = cartschange2 + 7; }; if(random2 == 7) { cartschange2 = cartschange2 + 8; }; if(random2 == 8) { cartschange2 = cartschange2 + 9; }; if(random2 == 9) { cartschange2 = cartschange2 + 10; }; if(random2 == 10) { cartschange2 = cartschange2 + 11; }; AI_Output(self,other,"DIA_Nagur_Carts_50_3round_1 0_01"); //Закончился 3 раунд. concatText = ConcatStrings("Мои очки - 3 раунд ",IntToString(cartschange1)); PrintScreen(concatText,-1,55,FONT_Screen,5); concatText = ConcatStrings("Нагура очки - 3 раунд ",IntToString(cartschange2)); PrintScreen(concatText,-1,60,FONT_Screen,5); if((round == 3) && (cartschange1 > 21) && (cartschange2 > 21) && (Nagur_Carts_banned == FALSE)) { AI_Output(self,other,"DIA_Nagur_Carts_50_3round_1 0_2"); //Ничья в 3 раунде. B_GiveInvItems(self,other,ItMi_Gold,50); Npc_RemoveInvItems(self,ItMi_Gold,Npc_HasItems(se lf,ItMi_Gold)); Nagur_Carts_banned = TRUE; AI_StopProcessInfos(self); Info_ClearChoices(DIA_Nagur_Carts); } else if((round == 3) && ((cartschange1 == cartschange2) < 22) && (Nagur_Carts_banned == FALSE)) { AI_Output(self,other,"DIA_Nagur_Carts_50_3round_1 0_3"); //Ничья в 3 раунде. B_GiveInvItems(self,other,ItMi_Gold,50); Npc_RemoveInvItems(self,ItMi_Gold,Npc_HasItems(se lf,ItMi_Gold)); Nagur_Carts_banned = TRUE; AI_StopProcessInfos(self); Info_ClearChoices(DIA_Nagur_Carts); } else if((round >= 3) && ((cartschange1 > cartschange2) < 22) && (Nagur_Carts_banned == FALSE)) { AI_Output(self,other,"DIA_Nagur_Carts_50_3round_1 0_4"); //Ты выиграл в 3 раунде. B_GiveInvItems(self,other,ItMi_Gold,100); Nagur_Carts_banned = TRUE; AI_StopProcessInfos(self); Info_ClearChoices(DIA_Nagur_Carts); } else if((round >= 3) && (cartschange1 > 21) && (cartschange2 < 22) && (Nagur_Carts_banned == FALSE)) { AI_Output(self,other,"DIA_Nagur_Carts_50_3round_1 0_5"); //Ты проиграл в 3 раунде. Npc_RemoveInvItems(self,ItMi_Gold,Npc_HasItems(se lf,ItMi_Gold)); Nagur_Carts_banned = TRUE; AI_StopProcessInfos(self); Info_ClearChoices(DIA_Nagur_Carts); } else if((round >= 3) && (cartschange2 > 21) && (cartschange1 < 22) && (Nagur_Carts_banned == FALSE)) { AI_Output(self,other,"DIA_Nagur_Carts_50_3round_1 0_5"); //Ты выиграл в 3 раунде. B_GiveInvItems(self,other,ItMi_Gold,100); Nagur_Carts_banned = TRUE; AI_StopProcessInfos(self); Info_ClearChoices(DIA_Nagur_Carts); } else if((round >= 3) && ((cartschange2 > cartschange1) < 22) && (Nagur_Carts_banned == FALSE)) { AI_Output(self,other,"DIA_Nagur_Carts_50_3round_1 0_5"); //Ты проиграл в 3 раунде. Npc_RemoveInvItems(self,ItMi_Gold,Npc_HasItems(se lf,ItMi_Gold)); Nagur_Carts_banned = TRUE; AI_StopProcessInfos(self); Info_ClearChoices(DIA_Nagur_Carts); }; }; };
func void DIA_Nagur_Carts_100() { AI_StopProcessInfos(self); };
func void DIA_Nagur_Carts_200() { AI_StopProcessInfos(self); };
|
|
|
03.09.2012, 01:44
|
#2537
|
|
Re: М: Скриптинг в Готике
Долгое время решался сюда зайти и задать вопросы по скриптингу. Много накопилось :) 1. Допустим при разговоре с нпс создается в блокноте запись - (сегодня 5 день).вопрос как сделать так чтобы топик менял цифру числа но запись не менял,не удаляя топик только. 2. Можно ли на экран линии жизни и маны поставить еще и цифры,если да то как примерно или где посмотреть пример. 3. хочу бриану сделать ежедневное появление сырой стали
Cпойлер(щелкните, чтобы прочесть):
var int briendaynow;
func void B_GiveTradeInv_Brian(var C_Npc slf) { if((Kapitel >= 1) && (Brian_ItemsGiven_Chapter_1 == FALSE)) { CreateInvItems(slf,ItMi_Gold,20); CreateInvItems(slf,ItMiSwordraw,2); Brian_ItemsGiven_Chapter_1 = TRUE; briendaynow = Wld_GetDay(); }; if((Kapitel >= 1) && (Brian_ItemsGiven_Chapter_1 == TRUE) && (briendaynow < daynow)) { CreateInvItems(Brian,ItMi_Gold,20); CreateInvItems(Brian,ItMiSwordraw,2); briendaynow = Wld_GetDay(); };
только ничего не выходит
|
|
|
03.09.2012, 13:52
|
#2538
|
|
Re: М: Скриптинг в Готике
2Joha:1. Скачайте уроки скриптологии от Vam и изучите список функций работы с дневником - там нет средств для переименования или удаления тем. 2. Не знаю, т.к я видел только моды, изменяющие внешний вид и количество полосок. :-/ 3. В функции B_GiveTradeInv инвентарь торговца пополняется только 1 раз в главу. Лучше введите генерацию нескольких стальных заготовок 1 раз в день в каком-нибудь диалоге с Брайаном, например, DIA_Brian_WASKAUFEN_Info. Или добавьте в расписание Брайана, чтобы он периодически подходил к кузнечному горну в то время, когда Харад работает на наковальне или охлаждает заготовки мечей - тогда в его инвентаре будут появляться сырые и раскалённые заготовки. Но учтите, что появление бесконечных стальных заготовок даже у одного NPC убьёт игровой баланс, т.к. на продаже простых самокованных мечей можно наварить значительный капитал. Недаром в G2a_NR_ScriptPatch этот эксплойт были ликвидирован:
- Больше нельзя получить от кузнецов дополнительные стальные заготовки, а от алхимиков дополнительные мензурки.
|
|
|
|
03.09.2012, 15:43
|
#2539
|
|
Re: М: Скриптинг в Готике
Добрый день. Возникла проблема при компиляции скрипта такого рода - сначала была ошибка неизвестного concatTex,объявил,теперь ошибка не возвращает значение MILWEAPONTAKE1Left.
Cпойлер(щелкните, чтобы прочесть):
var int concatText; // грубейшая ошибка в типе переменной - должно быть string!
instance DIA_MIL_6_WEAPONTAKE1(C_Info) { * * *nr = 3; * * *condition = DIA_MIL_6_WEAPONTAKE1_Condition; * * *information = DIA_MIL_6_WEAPONTAKE1_Info; * * *permanent = TRUE; * * *description = "Нужен меч?"; };
func int DIA_MIL_6_WEAPONTAKE1_Condition() { * * *if((MIS_MIL_WEAPONTAKE1 == LOG_Running) && (Npc_HasItems(self,ItMw_1H_Common_01) == 0) && (Npc_HasItems(other,ItMw_1H_Common_01) >= 1)) * * *{ * * * * * *return TRUE; * * *}; * * *return FALSE; };
func void DIA_MIL_6_WEAPONTAKE1_Info() { * * *AI_Output(other,self,"DIA_MIL_6_WEAPONTAKE_15_00" ); * * *//Нужен меч? * * *AI_Output(self,other,"DIA_MIL_6_WEAPONTAKE_06_01" ); * * *//Конечно, давай *его сюда. Кто же откажется от такого подарка судьбы. * * *B_GiveInvItems(other,self,ItMw_1H_Common_01,1); * * *MILWEAPONTAKE1 = MILWEAPONTAKE1 + 1; * * *AI_EquipBestMeleeWeapon(self); * * *MILWEAPONTAKE1Left = (MIL_POPULARY - MILWEAPONTAKE1); * * *concatText = ConcatStrings("Осталось мечей ",IntToString(MILWEAPONTAKE1Left)); * * *PrintScreen(concatText,-1,45,FONT_Screen,5); };
func void B_AssignAmbientInfos_MIL_6(var C_Npc slf) { * * *dia_mil_6_exit.npc = Hlp_GetInstanceID(slf); * * *dia_mil_6_join.npc = Hlp_GetInstanceID(slf); * * *dia_mil_6_people.npc = Hlp_GetInstanceID(slf); * * *dia_mil_6_location.npc = Hlp_GetInstanceID(slf); * * *dia_mil_6_standard.npc = Hlp_GetInstanceID(slf); * * *DIA_MIL_6_WEAPONTAKE1.npc = Hlp_GetInstanceID(slf); };
А вот етот скрипт работает
Cпойлер(щелкните, чтобы прочесть):
instance DIA_Wambo_WEAPONTAKE1(C_Info) { * * *npc = Mil_316_Wambo; * * *nr = 3; * * *condition = DIA_Wambo_WEAPONTAKE1_Condition; * * *information = DIA_Wambo_WEAPONTAKE1_Info; * * *permanent = TRUE; * * *description = "Нужен меч?"; };
func int DIA_Wambo_WEAPONTAKE1_Condition() { * * *if((MIS_MIL_WEAPONTAKE1 == LOG_Running) && (Npc_HasItems(self,ItMw_1H_Common_01) == 0) && (Npc_HasItems(other,ItMw_1H_Common_01) >= 1)) * * *{ * * * * * *return TRUE; * * *}; * * *return FALSE; };
func void DIA_Wambo_WEAPONTAKE1_Info() { * * *AI_Output(other,self,"DIA_Wambo_WEAPONTAKE_15_00" ); * * *//Нужен меч? * * *AI_Output(self,other,"DIA_Wambo_WEAPONTAKE_06_01" ); * * *//Конечно, давай его сюда. Кто же откажется от такой стали. * * *B_GiveInvItems(other,self,ItMw_1H_Common_01,1); * * *MILWEAPONTAKE1 = MILWEAPONTAKE1 + 1; * * *AI_EquipBestMeleeWeapon(self); * * *MILWEAPONTAKE1Left = (MIL_POPULARY - MILWEAPONTAKE1); * * *concatText = ConcatStrings("Осталось мечей",IntToString(MILWEAPONTAKE1Left)); * * *PrintScreen(concatText,-1,45,FONT_Screen,5); };
|
|
|
03.09.2012, 21:43
|
#2540
|
 |
|
 |
|
A.G.F.C.
Регистрация: 18.02.2008
Сообщений: 0
|
|
 |
|
 |
|
Re: М: Скриптинг в Готике
2Joha:
...
concatText = ConcatStrings("Осталось мечей ",IntToString(MILWEAPONTAKE1Left));
|
Если не ошибаюсь, имеет место несовпадение типов переменных. Добавление от 09/03/12, в 21:50:27 2Dimus:
изучите список функций работы с дневником - там нет средств для переименования или удаления тем
|
А строковую переменную можно в дневник записать? Если да, то можно для каждой записи в дневнике (там, где это нужно по замыслу автора) сформировать строковую переменную "Сегодня NN день." и сделать такую запись в дневник.
|
|
|
03.09.2012, 23:06
|
#2542
|
|
Re: М: Скриптинг в Готике
2ElderGamer:
Если не ошибаюсь, имеет место несовпадение типов переменных.
|
Да, вместо типа int должен быть string.
А строковую переменную можно в дневник записать?
|
Разумеется, можно.
|
|
|
03.09.2012, 23:25
|
#2543
|
|
Re: М: Скриптинг в Готике
Cпойлер(щелкните, чтобы прочесть):
AI_Output(other,self,"DIA_Wambo_WEAPONTAKE_15_00") ; * * *//Нужен меч? * * *AI_Output(self,other,"DIA_Wambo_WEAPONTAKE_06_01" ); * * *//Конечно, давай его сюда. Кто же откажется от такой стали. * * *B_GiveInvItems(other,self,ItMw_1H_Common_01,1); * * *MILWEAPONTAKE1 = MILWEAPONTAKE1 + 1; * * *AI_EquipBestMeleeWeapon(self); * * *MILWEAPONTAKE1Left = (MIL_POPULARY - MILWEAPONTAKE1); * * *concatText = ConcatStrings("Осталось мечей",IntToString(MILWEAPONTAKE1Left)); * * *PrintScreen(concatText,-1,45,FONT_Screen,5);
попробую еще раз спросить.вот эта часть скрипта в диалоге с ополченцем с имеющим личный например dia_mil_wambo работает а вот вставляю этот скрипт сюда B_AssignAmbientInfos_MIL_6 то ругается компилятор 1 ошибка неопределен concatText . 2 ошибка функция не возвращает return - int
Cпойлер(щелкните, чтобы прочесть):
concatText = ConcatStrings("Осталось мечей",IntToString(MILWEAPONTAKE1Left)); * * *PrintScreen(concatText,-1,45,FONT_Screen,5);
И может кто ответить на этот пост? http://forums.gothic.ag/showthread.p...0&goto=6991947 Спасибо
|
|
|
04.09.2012, 06:46
|
#2544
|
|
Re: М: Скриптинг в Готике
2Joha:
Ну так определи переменную заранее, в чем дело-то? Или ты думаешь, что мы тут тебя будем программированию учить?
а вот вставляю этот скрипт сюда
|
Значит при вставлянии пропадает определение переменной, только и всего.
|
|
|
26.09.2012, 15:37
|
#2545
|
|
Re: М: Скриптинг в Готике
2Joha:
И может кто ответить на этот пост?
|
А что это за условия такие: ((cartschange1 == cartschange2) < 22) Даже если предположить что движок сможет додуматься и обработать - любом случае и 1 и 0 < 22 Распишите отдельно: (cartschange1 == cartschange2) && (cartschange1 < 22) И еще: лучше прописывать условия в виде: if(random1 <= 1) ... else if(random1 <= 2) ... else if(random1 <= 9) ... else // для значения <= 10 ... для более корректной обработки, тогда в любом случае присвоится значение
|
|
|
01.11.2012, 10:48
|
#2547
|
|
Re: М: Скриптинг в Готике
2DEXARD:Для подсчёта количества предметов у ГГ и NPC используется функция
Cпойлер(щелкните, чтобы прочесть):
int Npc_HasItems (c_npc n0, int itemInstance); - возвращает количество предметов itemInstance у НПС n0.
Эта инфа взята из уроков скриптологии от Vam (ссылка на на предидущей странице темы).
|
|
|
01.11.2012, 16:16
|
#2548
|
 |
|
 |
|
A.G.F.C.
Регистрация: 18.02.2008
Сообщений: 0
|
|
 |
|
 |
|
Re: М: Скриптинг в Готике
Есть и более сложные случаи. Не знаю, как это делается в Г2, а в Г1 для определения количества боеприпасов для экипированного в данный момент оружия (либо лук, либо арбалет - боеприпасы разные) используется функция func int Npc_GetInvItemBySlot(var C_NPC npc, var int category, var int slot);
Cпойлер(щелкните, чтобы прочесть):
// возвращает кол- во предметов, которые находятся у НПС npc, // где category – категория инвентаря // (INV_WEAPON, INV_ARMOR, INV_RUNE, INV_MAGIC, INV_FOOD, INV_POTION, INV_DOC, INV_MISC) // slot – номер слота предмета.
|
|
|
15.11.2012, 20:49
|
#2549
|
|
Re: М: Скриптинг в Готике
Не знаю, в ту ли тему пишу. Проблема с анимацией во второй части. Переношу из первой анимацию Excalibur_1, используется в храме Спящего, где герой втыкает клинок в камень в полу. Перенес .asc модель, все .man'ы, прописал в Humans.mds. Но хоть тресни, анимация не работает, герой просто встает перед камнем и все. До этого переносил по этому же алгоритму анимацию Barrelo, где герой прячется в бочку, она работает, а Excalibur_1 нет.
|
|
|
17.11.2012, 16:37
|
#2554
|
|
Re: М: Скриптинг в Готике
2JohaNBlack:
Мне кажется, ты не прав насчет работы только с msb.
|
Каждый вправе иметь собственное мнение ;) 2JohaNBlack:
Я уже перенес несколько анимации, отсутсвующих во второй части, и прописывал их только в mds файле мода, не удаляя старый mds или msb. И они работают, а конкретно эта - нет.
|
Я перенес ВСЕ анимации из Г1 в Г2-НВ, которых там не было и каждый раз движком игры перекомпилировал MDS в MSB. Чтобы удачно это сделать все анимации должны быть распакованы из vdf файлов, а для недостающих должны быть "сырые" декомпилированные ASC файлы.
|
|
|
17.11.2012, 16:49
|
#2556
|
|
Re: М: Скриптинг в Готике
2JohaNBlack:
asc файлы есть в vdf мода
|
В vdf вообще ничего не должно быть из сырья. Также после распаковки всех анимаций из VDF, сами vdf должны быть отключены (удалить или переименовать расширение vdf на другое, например .disabled)
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 10:45. Часовой пояс GMT +4.
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|