![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#226
|
|
Level 2 ![]() Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Эх... ясно, пасиб... Но буду иметь ввиду на всякий случай.
|
![]()
Сообщение
#227
|
|
Level 1 Класс: Мастер Оружия Характер: Lawful Good Раса: Человек ![]() |
Народ, не могу разобраться в некоторых вещах.
1) Пытаюсь написать скрипт, что бы один НПС атаковал другова. Neverwinter Script void main() { object oVoin = GetObjectByTag("BOEC1"); object oVoin2 = GetObjectByTag("BOEC2"); AssingCommand(oVoin, ActionAttack(oVoin2)); } Компилятр выдаёт мне: 4000_tboi_os.nss(6): ERROR: UNDEFINED INDENTIFIER 2) В Вики был самоучитель из 4-х уроков. Там был приведён пример скрипта, что-бы НПС пел: Neverwinter Script void main() { ClearAllActions(); ActionSpeakString(39;This is the song that never ends.39(IMG:style_emoticons/kolobok_light/wink3.gif) ; ActionWait(1.5); ActionSpeakString(39;Yes it goes on and on, my friends.39(IMG:style_emoticons/kolobok_light/wink3.gif) ; ActionWait(1.5); ActionSpeakString(39;Some people started singing it not knowing what it was.39(IMG:style_emoticons/kolobok_light/wink3.gif) ; ActionWait(1.5); ActionSpeakString(39;And now they39;ll keep on singing it forever, just because:39(IMG:style_emoticons/kolobok_light/wink3.gif) ; } Компилятор так-же выдал ошибку: Script2.nss(4): ERROR: UNDEFINED IDENTIFIER Может это правила написания для 1-го NWN? Возможно я чего-то не понял? Если по 1-му вопросу, то я задаю 2 объекта которые определяются по тэгам и отдаю команду (т.е. oVoin c тэгом BOEC1 атакует oVoin2 c тэгом BOEC2). По втрому вообще понять не могу. Может мне нужно именно задать объект? Зарание спасибо! Простите за мультипост, допустил гругую ошибку в предыдущем посте и не могу найти кнопку для редактирования (IMG:style_emoticons/kolobok_light/vava.gif) Neverwinter Script void main() { ClearAllActions(); ActionSpeakString(39;This is the song that never ends.39(IMG:style_emoticons/kolobok_light/wink3.gif) ActionWait(1.5); ActionSpeakString(39;Yes it goes on and on, my friends.39(IMG:style_emoticons/kolobok_light/wink3.gif) ActionWait(1.5); ActionSpeakString(39;Some people started singing it not knowing what it was.39(IMG:style_emoticons/kolobok_light/wink3.gif) ActionWait(1.5); ActionSpeakString(39;And now they keep on singing it forever, just because39(IMG:style_emoticons/kolobok_light/wink3.gif) } Опять... редактор заменил символ " ' " на "' (IMG:style_emoticons/kolobok_light/wink3.gif) " |
![]()
Сообщение
#228
|
|
Level 7 ![]() ![]() Класс: Некромант Характер: True Neutral Раса: Нежить ![]() |
В первом скрипте ошибка, должно быть AssignCommand(последние две буквы assign). Ну и чтобы совсем хорошо было, надо добавить перед этим AssignCommand(oVoin, ClearAllActions());
Во втором - кавычки должны быть двойные: не ('), а ("), надо не забывать закрывать скобки и ставить в конце строки ; Neverwinter Script void main() { ClearAllActions(); ActionSpeakString("This is the song that never ends."); ActionWait(1.5); ActionSpeakString("Yes it goes on and on, my friends."); ActionWait(1.5); ActionSpeakString("Some people started singing it not knowing what it was."); ActionWait(1.5); ActionSpeakString("And now they'll keep on singing it forever, just because..."); } Сообщение отредактировал greye - Jan 3 2009, 15:05 |
![]()
Сообщение
#229
|
|
Level 1 Класс: Мастер Оружия Характер: Lawful Good Раса: Человек ![]() |
В первом скрипте ошибка, должно быть AssignCommand(последние две буквы assign). Ну и чтобы совсем хорошо было, надо добавить перед этим AssignCommand(oVoin, ClearAllActions()); Во втором - кавычки должны быть двойные: не ('), а ("), надо не забывать закрывать скобки и ставить в конце строки ; По первому компилятор "дал добро". Спасибо!) А по второму, ковычки я ставлю двойные и точку с зяпятой тоже ставлю, но компилятор всё равно в той-же строке ошибку выдаёт (IMG:style_emoticons/kolobok_light/sad.gif) |
![]()
Сообщение
#230
|
|
Level 1 Класс: Мастер Оружия Характер: Lawful Good Раса: Человек ![]() |
Второй скрип запахал!)) В ковычках дело было... а в примере одна была (IMG:style_emoticons/kolobok_light/smile.gif)
А второй скрипт без ошибок, но не рабочий... не хотят они друг друга атаковать. |
![]()
Сообщение
#231
|
|
Level 1 Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Чувствуется, у админов и у всех остальных летние каникулы. Но все же, вдруг кто зайдет. Не могу написать скрипт одевания брони на ГГ через диалог. Поможите, люди добрые, подскажите, что здесь не так:
Neverwinter Script // Проба. Одеть вещь в слот. void main() { object oPC = GetPCSpeaker(); object oItem = GetObjectByTag("NW_CLOTH018"); AssignCommand( oPC, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST) ); } И почему у меня эта долбаное действие ActionEquipItem вообще не работает, вплоть до того, что не работает стандартный скрипт ga_equip_slot ? Может быть, кто-то знает, какой командой в этом случае можно заменить ActionEquipItem? |
![]()
Сообщение
#232
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Neverwinter Script object oItem = GetObjectByTag("NW_CLOTH018"); может быть дело в том, что таких объектов много, и берётся объект не в инвентаре героя; тогда лучше использовать функцию: Neverwinter Script object GetItemPossessedBy(object oCreature, string sItemTag) ещё может быть стоит попробовать добавить перед одеванием ActionPauseConversation(), а после ActionResumeConversation()... |
![]()
Сообщение
#233
|
|
Level 1 Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Ух. Спасибо, что вообще ответил, но я, к сожалению, ничего не поняла. Я же не скриптер, а полный ламер. Вместо object oItem = GetObjectByTag мне надо написать object GetItemPossessedBy? Так у меня не компилируется, или как там... И непонятно, куда писать тег вещи. (object oCreature, string sItemTag("NW_CLOTH018") )? Тогда что за oCreature?
ActionPauseConversation() - это Neverwinter Script void ActionPauseConversation(); ? Так все равно не компилируется. Я понимаю, для тебя это вопросы из серии "детский сад - штаны на лямках". Вероятно, мне стоит со всем этим перейти в "скрипты для новичков", я в эту тему-то написала потому что стандартный скрипт тоже не работает. Если тебе не очень влом, разжуй мне, пожалуйста, все это в любой теме, в какой тут положено, или просто покажи на этом примере, чтобы я поняла принцип. Может, и еще кому пригодится. |
![]()
Сообщение
#234
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
объясню, но вряд ли кому-то это ещё пригодится, т.к. каждому нужны объяснения для себя отдельно.
Во-первых, странно, что стандартный скрипт не работает, может быть дело не в скрипте, а в опечатке в теге, или перепутывании его с резрефом. oCreature и sItemTag - это параметры функции GetItemPossessedBy, чтобы её запустить, надо вместо них записать что нам надо, в данном случае нам нужен предмет с тегом у игрока, сделовательно oCreature - игрок, sItemTag - тэг Neverwinter Script object oItem = GetItemPossessedBy(oPC, "NW_CLOTH018");
Сообщение отредактировал azathoth - Jul 26 2009, 05:18 |
![]()
Сообщение
#235
|
|
Level 1 Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Вах, сработало! Спасибо огромное, - а то я уже неделю бъюсь!
Но стандартный скрипт ga_equip_slot у меня не работает точно, я ничего не напутала. Поэтому кладу сюда получившийся скриптик имени azathoth для счастья будущих поколений, - вдруг у кого-то еще возникнут такие проблемы. Скрипт одевает броню на ГГ через диалог, и только после того, как через ga_give_item добавляешь эту самую броню в инвентарь ГГ на предыдущей фразе. Neverwinter Script //:: Проба. Одеть броню на ГГ. void main() { object oPC = GetPCSpeaker(); object oItem = GetItemPossessedBy(oPC, "NW_CLOTH018"); AssignCommand( oPC, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST) ); } azathoth, спасибо. Ты мне просто весь сценарий спас. |
![]()
Сообщение
#236
|
|
Level 1 Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Еще вопрос, - к azathoth, или еще к кому-нибудь.
Мне надо написать скрипт - расовую проверку, - объединить дварфов, гномов и хоббитов как бы в одну расу, чтобы не вешать на одну фразу три проверки сразу (у меня там еще проверки висят, некрасиво получится, если на одной фразе штук десять скриптов будет висеть, да и не уверена, что это возможно.) Я попыталась приравнять гномов и хоббитов к дварфам, чтобы можно было в окошке sRase(String) выставить единицу, и не париться. Но, что ни напишу, все компилируется, но ни хрена не работает. Сначала я просто написала Neverwinter Script else if(sRace == "gnome" || nRace == 1) Не сработало. Оно и понятно, - выше по списку числятся дварфы, у которых тоже прописана цифра 1. Тогда я переписала: Neverwinter Script else if (sRace == "halfling" || nRace == 3) { return (nRacialType == 1 || nRacialType == 11); } Опять не сработало. Пишу другой вариант: Neverwinter Script else if(sRace == "gnome" || nRace == 3) { nRacialType = GetRacialType(oPC); nCheck = RACIAL_TYPE_GNOME; return (nRacialType == 1 || nRacialType == 11); } Не работает. Если я пишу гномам nRace == 1, это не влияет. Я думаю, может дело в субрасах. Пишу: Neverwinter Script else if(GetStringLeft(sRace, 13) == "lightfoothalf" || nRace == 15) { return (nRacialType == 1 || nRacialType == 11); } И опять, блин, не работает. Вопрос, - что бы тут еще можно было написать, чтобы заработало, а то этот скрипт видит одних дварфов, как и стандартный скрипт gc_check_race_pc, и толку с него нет никакого. Почему не срабатывает return? Неясно. Если бы я разбиралась в скриптах, я бы, конечно, не мучила бы стандартный скрипт, а написала бы что-то вроде "дварфы, гномы, хоббиты == True, все остальные == False", но я вообще без понятия как и в какой форме такое пишут. Со стандартными скриптами иногда хоть что-то путное выходит. Так что, - в очередной раз, помогите, плиз, кто-нибудь. |
![]()
Сообщение
#237
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
должно быть что-то такое:
Neverwinter Script int nRacialType = GetRacialType(oPC); return (nRacialType==RACIAL_TYPE_GNOME || nRacialType==RACIAL_TYPE_DWARF || nRacialType==RACIAL_TYPE_HALFLING); эта конструкция вернет TRUE, если раса игрока одна из трех. А на какие условия втыкать работу этого блока - тебе виднее. Можно замутить что-то универсальное, чтобы из диалога передавался символьный код, например GDH, который понимался бы скриптом как гномы/дварфы/халфлинги. Но имхо под конкретный модуль проще сделать несколько общих скриптов. Если у тебя всегда такая комбинация карликов, то проще сделать для этого отдельный скрипт и не париться. зы: не уверен в правильности расовых констант, пишу по памяти. |
![]()
Сообщение
#238
|
|
Level 1 Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Lex, прости, но вообще не поняла. Я же говорю, - я не скриптер, не программер, - я сценарист.
Мне что, писать Neverwinter Script // gc_check_race_PC_correct int StartingConditional(string sRace) { object oPC = GetPCSpeaker(); int nRacialType = GetRacialType(oPC); return (nRacialType==RACIAL_TYPE_GNOME || nRacialType==RACIAL_TYPE_DWARF || nRacialType==RACIAL_TYPE_HALFLING); } ? Но если я пишу (string sRace), это предполагает, что будет окно sRase(String), - и что мне в это окно писать? А если я не пишу (string sRace), то что вместо него написать-то? Или мне по-прежнему основываться на стандартном скрипте, и расписывать все расы, типа if(sRace == "dwarf" || nRace == 1) , но как? Какой смысл возвращать расу гномов к "RACIAL_TYPE_GNOME", уж не говоря о том, что в стандартном скрипте не int nRacialType = GetRacialType(oPC); , а int nRacialType = GetSubRace(oPC); . На этом мысль останавливается. А что касается таких замороченных заклинаний, как "символьный код GDH", так на нашем болоте об этой темной некромантии и не слыхивали, и я таких словов вообще не знаю. Ты уж, пожалуйста, будь проще с народом. |
![]()
Сообщение
#239
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
а ты не пиши (string sRace). И вместо него ничего не пиши. Для данного скрипта тебе вводные параметры из диалога не нужны.
Neverwinter Script int StartingConditional() { int nRacialType = GetRacialType(GetPCSpeaker()); return (nRacialType==RACIAL_TYPE_GNOME || nRacialType==RACIAL_TYPE_DWARF || nRacialType==RACIAL_TYPE_HALFLING); } А что касается таких замороченных заклинаний, как "символьный код GDH", так на нашем болоте об этой темной некромантии и не слыхивали, и я таких словов вообще не знаю. Ты уж, пожалуйста, будь проще с народом. я лишь имел ввиду передачу из диалога данных в виде строки "GHD", которая бы скриптом расценивалась как: "TRUE, если игрок Gnone, Halfling или Dwarf". Но сейчас я еще раз над этим подумал - плохая идея. Получится большой скрипт (разбор сторки на символы, анализ символов, формирование результата бинарным сложением для упрощения проверки и собственно сама проверка), и нужно будет каждый раз верно ставить буквы. Имхо проще несколько более простых скриптов без внешних параметров. |
![]()
Сообщение
#240
|
|
Level 1 Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Ес-с, работает. Не знала, что после int StartingConditional надо скобки оставлять :-). Может быть, в итоге я чему-то выучусь, и перестану уже тупить, но пока до этого далеко.
Спасибо огромное. |
![]()
Сообщение
#241
|
|
Пушкин ![]() Класс: Обыватель Характер: Chaotic Neutral Раса: Гигант NWN: Тексты ![]() |
Общий вопрос. Известно, что Обсидиан отличается от Авроры интерфейсом и некоторыми функциями - я слышал про cutscenes и ActionSit. Я здесь не говорю про маппинг, который может отличаться сильно. Меня интересуют основные, традиционные функции скриптов Авроры. Годны ли они в целом? Иными словами, если я возьму типичный, средней сложности скрипт для Авроры с проверками пола, времени суток и т.п., или скрипт со spawn и уничтожением объектов, с установкой глобальных переменных, такого рода вещами, сколько из этого придется менять?
|
![]()
Сообщение
#242
|
|
Level 18 ![]() Класс: Страж Тьмы Характер: True Neutral Раса: Человек МАСТЕР D&D ![]() |
В целом скрипты не отличаются и их можно использовать в обоих редакторах. Полный список неработающих функций должен быть на офф форумею К слову, ActionSit одна из них. Более подробно расскажет комадна шарда БГ или Ванес, он тож активно переносил все на НВН2.
http://nwvault.ign.com/View.php?view=NWN2A...6#_Toc146633941 |
![]()
Сообщение
#243
|
|
Пушкин ![]() Класс: Обыватель Характер: Chaotic Neutral Раса: Гигант NWN: Тексты ![]() |
Спасибо.
Еще вопрос: задавался ли кто-нибудь системой скриптов для изучения заклинаний (spell research)? |
![]()
Сообщение
#244
|
|
Level 1 Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
Приветствую уважаемых мастеров. У меня такой вопрос - как сделать, чтобы после смерти персонаж возрождался не в месте гибели, а в указанном мною. Вопрос второй - как сделать чтобы после смерти персонаж вообще не воскрешался, а вылетала табличка из НВН2 (игра окончена, все свободны: загрузка или выход). Заранее спасибо.
З.Ы Да да, я уже знаю. Я НУБ и ламер=) |
![]()
Сообщение
#245
|
|
Level 18 ![]() Класс: Страж Тьмы Характер: True Neutral Раса: Человек МАСТЕР D&D ![]() |
Neverwinter Script V1.1 l Ќ gui_death_respawn_self Щ mod_onplayerdeath Щ mod_onplayerrespawn Щ 0 Ц ? E † // gui_death_respawn_self
/* NWN2 Default Death Screen 'Respawn' callback */ // BMA-OEI 7/20/06 // BMA-OEI 11/08/06 -- Close SCREEN_DEATH_DEFAULT /* You can place your real respawn script in here or you can use it like I did and execute it on the player. */ #include "ginc_death" void main() { //ResurrectCreature( OBJECT_SELF ); ExecuteScript("mod_onplayerrespawn",OBJECT_SELF); CloseGUIScreen( OBJECT_SELF, "SCREEN_DEATH_DEFAULT" ); }/* mod_onplayerdeath */ const string GUI_DEFAULT_DEATH_SCREEN = "SCREEN_DEATH_DEFAULT"; // Display death pop-up to oPlayer void ShowDefaultDeathScreen( object oPlayer ); void main() { object oPlayer = GetLastPlayerDied(); DelayCommand( 2.5f, ShowDefaultDeathScreen( oPlayer ) ); } // Display death pop-up to oPlayer void ShowDefaultDeathScreen( object oPlayer ) { DisplayGuiScreen( oPlayer, GUI_DEFAULT_DEATH_SCREEN, FALSE ); //DisplayMessageBox( oPlayer, 0, GetStringByStrRef(181408), "gui_death_respawn_self", "", FALSE, "", 6603, "", 0, "" ); }/* mod_onplayerrespawn */ #include "nw_i0_plot" #include "ginc_death" #include "x0_i0_transport" //:: Applies an XP and GP penalty //:: to the player respawning //:: object oDead - Player who died. void ApplyPenalty(object oDead); //:: Gets the tag of the destination waypoint //:: object oDead - Player who died. string GetDestinationTag(object oDead); //:: Gets the respawning player object GetRespawningPlayer(); //:: Gets the respawn point, if any //:: sDestTag - tag of the destination waypoint //:: oDead - Player who died object GetRespawnPoint(string sDestTag, object oDead); void main() { //Create initial variables object oRespawner = GetRespawningPlayer(); object oArea = GetArea(oRespawner); string sDestTag = GetDestinationTag(oRespawner); object oRespawnPoint = GetRespawnPoint(sDestTag, oRespawner); location lDeathSpot = GetLocation(GetLastRespawnButtonPresser()); location lRespawnPoint; //Apply effects to PC ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectRe surrection(),oRespawner); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHe al(GetMaxHitPoints(oRespawner)), oRespawner); RemoveEffects(oRespawner); //Apply death penalty ApplyPenalty(oRespawner); //Transport PC if (GetIsObjectValid(oRespawnPoint)) { lRespawnPoint = GetLocation(oRespawnPoint); TransportToLocation(oRespawner,lRespawnPoint); } //Bring PC back to life DelayCommand(1.5,ResurrectCreature(oRespawner)); } void ApplyPenalty(object oDead) { location lDeathSpot = GetLocation(oDead); int nXP = GetXP(oDead); int nPenalty = 50 * GetHitDice(oDead); int nHD = GetHitDice(oDead); // * You can not lose a level with this respawning int nMin = ((nHD * (nHD - 1)) / 2) * 1000; int nNewXP = nXP - nPenalty; if (nNewXP < nMin) nNewXP = nMin; SetXP(oDead, nNewXP); int nGoldToTake = FloatToInt(0.10 * GetGold(oDead)); // * a cap of 10 000gp taken from you if (nGoldToTake > 10000) { nGoldToTake = 10000; } AssignCommand(oDead, TakeGoldFromCreature(nGoldToTake, oDead, TRUE)); DelayCommand(4.0, FloatingTextStrRefOnCreature(58299, oDead, FALSE)); DelayCommand(4.8, FloatingTextStrRefOnCreature(58300, oDead, FALSE)); } string GetDestinationTag(object oDead) { //You can go about determining where the respawn waypoint //is located a number of ways. In here I have two examples. // Determined by setting a string variable on the area called sRespawn // Manually set it. string sTag = ""; object oArea = GetArea(oDead); //Get tag based on area level variable sTag = GetLocalString(oArea,"sRespawnTag"); //Check for tag and default to a module level variable if(sTag == "") { sTag = GetLocalString(GetModule(),"sRespawnTag"); } //Manually set tag //sTag = ""; return sTag; } object GetRespawningPlayer() { //This should be OBJECT_SELF, however if not then //we can use the player that last pressed the respawn //button. object oPlayer = OBJECT_INVALID; oPlayer = OBJECT_SELF; //Make sure this is a PC if(!GetIsPC(oPlayer)) { oPlayer = GetLastRespawnButtonPresser(); } return oPlayer; } object GetRespawnPoint(string sDestTag, object oDead) { //Get the waypoint object by using the destination //tag. First we try for one in the current area by //using GetNearestObjectByTag, otherwise we jsut get //an object with that tag. object oRespawnPoint = OBJECT_INVALID; oRespawnPoint = GetNearestObjectByTag(sDestTag,oDead); if(!GetIsObjectValid(oRespawnPoint)) { oRespawnPoint = GetWaypointByTag(sDestTag); } return oRespawnPoint; } |
![]()
Сообщение
#246
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Грифон, ты опасен!
Подумай над своей реакцией, если бы я на твои ранние вопросы по скриптам так бы отвечал (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#247
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Lex, тогда парня надо отправлять сразу в тему по обучению скриптам. Через месяц выкладывать даваемое по кускам (IMG:style_emoticons/kolobok_light/smile.gif)
|
![]()
Сообщение
#248
|
|
Level 1 Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
Хех, спасиб . Попробую разобраться в данном скрипте.
|
![]()
Сообщение
#249
|
|
Level 18 ![]() Класс: Страж Тьмы Характер: True Neutral Раса: Человек МАСТЕР D&D ![]() |
Lex, я на то и рассчитывал, что гуру скриптинга сразу же прокомментируют, выкинут лишнее и вынесут вердикт. (IMG:style_emoticons/kolobok_light/biggrin.gif)
|
![]()
Сообщение
#250
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Lex, я на то и рассчитывал, что гуру скриптинга сразу же прокомментируют, выкинут лишнее и вынесут вердикт. (IMG:style_emoticons/kolobok_light/biggrin.gif) я вердикт выше вынес: ты опаcен (IMG:style_emoticons/kolobok_light/smile.gif) ) по теме: если нужно ТОЛЬКО респ в какой-то точке (без штрафов и прочей фигни) или вообще его убрать - то 3/4 скрипта можно выкинуть. А вот если планируется еще куча мелких фич, динамическое изменение места респауна и тд - то выкидывать придется не так уж и много. Но в любом случае, чтобы скрипт заработал - нужно еще понаставить доп. объектов и переменные задать. |
![]() ![]() |
Текстовая версия | Сейчас: 30th April 2025 - 08:32 |