Нужна помощь?
Создайте тему в соответствующем разделе
Не нужно писать всё в чат!Загляните на торговую площадку
Там вы можете купить
всё что касается игровых серверовНе хотите бан?
Пожалуйста, ознакомьтесь с нашими правилами
Не нарушайте порядок!Продаёте или покупаете?
Пользуйтесь услугами гаранта
Мы сделаем вашу сделку безопасной
Таблица лидеров
Популярные публикации
Отображаются публикации с наибольшей репутацией на 10/01/18 в Сообщения
-
1 баллСинтаксис не верный у switch-case switch (Math.RandomIntInclusive(0, 1)) case 0: { //ак player.GetInventory().CreateInInventory("CoyoteBag_Green");itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("TTSKOPants");itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("TTsKOJacket_Camo");itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("CombatBoots_Black");itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("CombatKnife");itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("FNX45");itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd");itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd");itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("Mag_AKM_30Rnd");itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("Mag_AKM_30Rnd");itemBs = ItemBase.Cast(itemEnt); itemEnt = player.GetInventory().CreateInInventory( "akm" ); itemEnt.GetInventory().CreateAttachment( "PSO11Optic" ); itemEnt.GetInventory().CreateAttachment( "AK_WoodBttstck" ); itemEnt.GetInventory().CreateAttachment( "AK_WoodHndgrd" ); itemEnt.GetInventory().CreateAttachment( "AK_Suppressor" ); break; } case 1: { //Мка player.GetInventory().CreateInInventory("CoyoteBag_Green");itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("GorkaPants_Autumn");itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("GorkaEJacket_Autumn");itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("CombatBoots_Black");itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("CombatKnife");itemBs = ItemBase.Cast(itemEnt); itemEnt = player.GetInventory().CreateInInventory( "M4A1_Black" ); itemEnt.GetInventory().CreateAttachment( "M4_Suppressor" ); itemEnt.GetInventory().CreateAttachment( "M4_RISHndgrd_Black" ); itemEnt.GetInventory().CreateAttachment( "M4_MPBttstck_Black" ); itemEnt.GetInventory().CreateAttachment( "ACOGOptic" ); player.GetInventory().CreateInInventory("FNX45");itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd");itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd");itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("Mag_STANAGCoupled_30Rnd");itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("Mag_STANAGCoupled_30Rnd");itemBs = ItemBase.Cast(itemEnt); break; } /* default: { //тупо ничего, это не обязательно break; }*/ так верно будет По поводу горячих слотов - вроде бы все просто, только комманду не проверял: player.SetQuickBarEntityShortcut(primary, 0, true); player.SetQuickBarEntityShortcut(axe, 2, true); где player - сам игрок primary и axe - сам объект отспавненный т.е. EntityAI gun = player.GetInventory().CreateInInventory("MP5K"); player.SetQuickBarEntityShortcut(gun, 0, true); или EntityAI gun = player.GetInventory().CreateInInventory("MP5K"); mag = gun.GetInventory().CreateInInventory(mag_type); player.SetQuickBarEntityShortcut(mag, 0, true);
-
1 баллНынче мы закрываем "грибную" тему. Если заглянуть в серверные или стрессовые/экспериментальные логи, то увидим два ругательных сообщения: Их ноги растут из событий TrajectoryHumus и TrajectoryConiferous файла events.xml. События эти обеспечивают спавн грибов на полях и в хвойных лесах. Согласно файлу events.xml, в этих событиях задействованы такие грибы: и вот с ними что-то не в порядке, раз ругаются логи. До кучи видим гриб LactariusMushroom в событии "грибы лиственничного леса" (TrajectoryDeciduous), где все хорошо и гладко. Пытливый ум, нажав Del в аркенсоровском оффлайне и воспользовавшись поиском по ключевому слову Mushroom, увидит базу реально доступных в игре грибов: Как видим, среди них нету BoletusMushroom, PleurotusMushroom, упомянутых в events.xml, но зато присутствует гриб AuriculariaMushroom, еще никак в игре не задействованный. Эта нестыкуха ничуть не смертельна для игры, но беспокоит сердца перфекционистов. Наверняка разработчики и сами со временем разрулят проблему, но нам же хочется "Сегодня! Сейчас! Сию же минуту!". И мы говорим разработчикам: "Подвиньтесь, парни". Мы запускаем свои мозолистые руки в файл gear_food.pbo из папки Addons. Лирическое отступление Корректура файлов .pbo сопряжена с утерей ними цифровых подписей: "внутренней - контрольной суммы" и "разработческой". Игру фатально колбасит от таких битых файлов. И если внутреннюю подпись легко залатать, то разработческую (увы!) нет - нам не по силам подделывать их файлики bisign. Дешевле хакать ехе-шники игры, чтобы напрочь отключить проверку этих cигнатур. Такое по плечу лишь титанам (а они есть, есть среди нас! - я знаю это не понаслышке). Но к нашему счастью, разработчики сами пока что отключили на стрессах и эксперименталках клиента свою же проверку! Да, файлы bisign присутствуют в папках Addons и dta, но оффлайн в настоящее время плюет на них. А вот серверным игрокам не повезло - сервак жОстко проверяет подписи родных БИСовских pbo на клиенте, кикает нарушителей (видите мой фингал под глазом?) и отключить эту проверку маланствами verifySignatures = 0 в server.cfg не выйдет. Но пусть это будет проблемою серверных игроков. Наша же победная дорога на Берлин лишена препон. Как работать с файлами .pbo, подробно излагал тут - http://s-platoon.ru/topic/6844-shamanim-petuhov-na-alkatrase-14/ и теперь не буду назойливо повторяться. Заглядываем в gear_food.pbo и нам в глаза сразу бросается перечень имеющихся грибных 3D-моделей: из них Mushroom_boletus.p3d и mushroom_pleurotus.p3d имеют (и к гадалке не ходи!) отношение к нашим проблемным BoletusMushroom, PleurotusMushroom. Заглянув тут же в папку data, видим достаточный, на первый взгляд, комплект текстур и материалов под эти 3D-модели (разнообразные файлики .paa .rvmat). Нельзя пока судить о степени готовности этих файлов, но нам ничего не мешает попробовать (ну хотя бы попытаться!) с эти багажом втолкнуть данные грибы в игру. Берем в руки ПБО-шный config.bin, переконвертируем его в config.cpp и открываем текстовым редактором. Видим, что в файле отсутствуют конфиги грибов BoletusMushroom, PleurotusMushroom и эти конфиги нам придется творить самостоятельно, заимствуя конфиги от других грибов. Справочники подсказывают, что Boletus и Pleurotus - это наши гриб-боровик и вешенка. За образец им мы возьмем конфиг от съедобного (и даже деликатесного!) гриба-зонтика macrolepiotaMushroom. В результате у нас получается обновленный config.cpp (архив вот прилагается), который надо забросить в gear_food.pbo взаместо прежнего config.bin. Теперь попутно легализуем и гриб AuriculariaMushroom ("Иудино ухо") В жизни он растет на древесных стволах, но мы пока просто поселим его в лиственничный лес. Лезем в events.xml и корректируем запись TrajectoryDeciduous (красненьким и зеленым): Кстати, зелененькие цифры я бы рекомендовал попробовать для всех грибных событий - обеспечат приемлемую на первых порах урожайность. А дальше вы сами найдете свои заветные значения. Грузимся в игру, бродим по полям-лесам, смотрим под ноги (в полях идем к рулонам и стогам сена). Зоркий и настойчивый грибник не останется без добычи, найдет в т.ч. и нашаманенные нами BoletusMushroom, PleurotusMushroom, AuriculariaMushroom. У них довольно приличный внешний вид, хотя и с некоторыми незначительными проблемами. Видимо, эти проблемы и побудили разработчиков временно тормознуть данные грибы. Ешьте все грибы без страха - эффекты токсичности еще пока не задействованы. Можно куховарить, а можно просто сырыми. P.S. Предвижу шквал обвинений в изнасиловании игры: "Результат достигнут мимо ее согласия!.. Обманом!.. С применением грубой силы!.." Ну есть маненько, не отрицаю... Когда имеется время на ухаживания и деньги на цветы и шоколадки, дело можно провернуть и по другому - наши грибы просунуть в игру в качестве мода. Если хотите ухаживать красиво, обзаведитесь софтом для создания ПБО-шек (тулзы от Mikero, пакет BI Tools и т.д.) и продвинутым текстовым редактором notepad++. ПБО-шку по большому счету можно слепить и на колене при помощи PBOManager, но вот без указанного текстовика нам будет совсем тяжко. Придумываем название своему моду (например Mushroom). Ваяем в текстовике опус примерно такого вида: обзываем его config.cpp, запечатываем в ПБО-шку Mushroom.pbo, ПБО-шку помещаем в папочку Addons (свою, отдельную, а не клиентскую!), а эту папочку Addons - в папочку @Mushroom, которую в свою очередь забрасываем в корень клиента. В батник/цээмдешку вашего оффлайна дописываем -mod=@Mushroom; к примеру так: грузимся. Приготовьтесь к долгим женским капризам: то ей строчка не понравится... то чего-то не хватает... а то и скобка лишняя. Придется исправляться, назначать все новые и новые свидания и вести жаркие уговоры. Но если вам хватит настойчивости и шоколадок, результат победы будет поистине царским - желаемое вы сможете получать независимо от наличия разработческих проверок сигнатур, ничего при этом не хакая. Этак можно уговорить и серверную игру: бросить @Mushroom и серваку в корень, в ini-шках !StartServer.ini и !StartClient.ini (вы ведь через SSE играете?) добавить в CommandLine приписку -mod=@Mushroom; и теперь ароматная жарёха из белых грибочков и вешенок появится на столе и у серверных игроков. Приятного всем аппетита! Готовый архив рабочего мода прилагается. config.rar @Mushroom.rar
-
1 баллЛучше всего спавнить машины при старте сервера в процедуре main () в файле init.c Эта процедура выполняется во время инициализации сервера (аналог init.sqf в 0.62) Для тех кто в танке - код спавна расположен между комментариями //CUSTOM SPAWN CAR START и //CUSTOM SPAWN CAR END main() void main() { Print("::: init.c ::: main() ::: "); Hive ce = CreateHive(); if ( ce ) ce.InitOffline(); Weather weather = g_Game.GetWeather(); weather.GetOvercast().SetLimits( 0.0 , 1.0 ); weather.GetRain().SetLimits( 0.0 , 1.0 ); weather.GetFog().SetLimits( 0.0 , 0.25 ); weather.GetOvercast().SetForecastChangeLimits( 0.0, 0.2 ); weather.GetRain().SetForecastChangeLimits( 0.0, 0.1 ); weather.GetFog().SetForecastChangeLimits( 0.15, 0.45 ); weather.GetOvercast().SetForecastTimeLimits( 1800 , 1800 ); weather.GetRain().SetForecastTimeLimits( 600 , 600 ); weather.GetFog().SetForecastTimeLimits( 1800 , 1800 ); weather.GetOvercast().Set( Math.RandomFloatInclusive(0.0, 0.3), 0, 0); weather.GetRain().Set( Math.RandomFloatInclusive(0.0, 0.2), 0, 0); weather.GetFog().Set( Math.RandomFloatInclusive(0.0, 0.1), 0, 0); weather.SetWindMaximumSpeed(15); weather.SetWindFunctionParams(0.1, 0.3, 50); //CUSTOM SPAWN CAR START vector niva_pos = {6063.77, 0, 7871.36}; EntityAI nivaCar = EntityAI.Cast(GetGame().CreateObject("OffroadHatchback", niva_pos, false, true)); nivaCar.SetAllowDamage(false); nivaCar.GetInventory().CreateAttachment( "HatchbackWheel" ); nivaCar.GetInventory().CreateAttachment( "HatchbackWheel" ); nivaCar.GetInventory().CreateAttachment( "HatchbackWheel" ); nivaCar.GetInventory().CreateAttachment( "HatchbackWheel" ); nivaCar.GetInventory().CreateAttachment( "HatchbackHood" ); nivaCar.GetInventory().CreateAttachment( "HatchbackTrunk" ); nivaCar.GetInventory().CreateAttachment( "HatchbackDoors_Driver" ); nivaCar.GetInventory().CreateAttachment( "HatchbackDoors_CoDriver" ); nivaCar.GetInventory().CreateAttachment( "CarBattery" ); nivaCar.GetInventory().CreateAttachment( "SparkPlug" ); nivaCar.GetInventory().CreateAttachment( "EngineBelt" ); nivaCar.GetInventory().CreateAttachment( "CarRadiator" ); Print("::: init.c ::: main() ::: CUSTOM SPAWN CAR: " + nivaCar.ToString() + ", POSITION: " + nivaCar.GetPosition().ToString()); //CUSTOM SPAWN CAR START END } Координаты в данном случае - за магазином в Старом соборе (как было в 0.62) P.S. Традиционно с логгированием - в scripts.log увидим резалт спавна машины P.S.2. Машины глючииит ))))
-
1 баллнемного доработанный (для админа) вариант Мизева Виталия с выдачей стартового лута в зависимости от UID или невыдачей ))) Вобщем-то все тривиально (с тз скриптинга) Добавил логгирование что бы была понятна последовательность выполнения Сейчас сам немного шаманю что к чему см комментарии в коде init.c void main() { Print("::: init.c ::: main() ::: "); Hive ce = CreateHive(); if ( ce ) ce.InitOffline(); Weather weather = g_Game.GetWeather(); weather.GetOvercast().SetLimits( 0.0 , 1.0 ); weather.GetRain().SetLimits( 0.0 , 1.0 ); weather.GetFog().SetLimits( 0.0 , 0.25 ); weather.GetOvercast().SetForecastChangeLimits( 0.0, 0.2 ); weather.GetRain().SetForecastChangeLimits( 0.0, 0.1 ); weather.GetFog().SetForecastChangeLimits( 0.15, 0.45 ); weather.GetOvercast().SetForecastTimeLimits( 1800 , 1800 ); weather.GetRain().SetForecastTimeLimits( 600 , 600 ); weather.GetFog().SetForecastTimeLimits( 1800 , 1800 ); weather.GetOvercast().Set( Math.RandomFloatInclusive(0.0, 0.3), 0, 0); weather.GetRain().Set( Math.RandomFloatInclusive(0.0, 0.2), 0, 0); weather.GetFog().Set( Math.RandomFloatInclusive(0.0, 0.1), 0, 0); weather.SetWindMaximumSpeed(15); weather.SetWindFunctionParams(0.1, 0.3, 50); } class CustomMission: MissionServer { ref array<string> m_pointPlayerPVP = new array<string>;; ref map<string, int> m_playersSetUID = new map<string, int>; void SetRandomHealth(EntityAI itemEnt) { Print("::: init.c ::: SetRandomHealth(EntityAI itemEnt) ::: "); //int rndHlt = Math.RandomInt(40,100); //itemEnt.SetHealth("","",rndHlt); //MY - ЭТО ЭКСПЕРИМЕНТ itemEnt.SetHealth("","",10000); } override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName) { Print("::: init.c ::: CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName) ::: "); Entity playerEnt; if (m_pointPlayerPVP.Count()>0) { Print (m_pointPlayerPVP.Count()); int maxNum = m_pointPlayerPVP.Count(); int numPoint = Math.RandomInt(0, maxNum - 1); pos = m_pointPlayerPVP.Get(numPoint).ToVector(); } playerEnt = GetGame().CreatePlayer(identity, characterName, pos, 0, "NONE");//Creates random player Class.CastTo(m_player, playerEnt); GetGame().SelectPlayer(identity, m_player); return m_player; } override void OnInit() { Print("::: init.c ::: OnInit() ::: "); string line_content; //Выбор координат спавна //ФАЙЛ pointPlayerPVP.lst кладем в папку указанную в параметре запуска сервера -profiles= //Формат координат в файле: X Z Y //Любая ошибка приведет к крашу сервера //Например: //6010.40 0 7742.71 //6386.92 0 7945.12 //6478.50 0 7874.77 //6044.73 0 7699.81 //5966.05 0 7720.02 //5912.13 0 7768.36 //5945.08 0 7759.17 FileHandle file = OpenFile("$profile:pointPlayerPVP.lst", FileMode.READ); Print("::: OpenFile : pointPlayerPVP.lst : $profile"); if (file != 0) { while ( FGets( file, line_content ) > 0 ) { m_pointPlayerPVP.Insert( line_content); } CloseFile(file); } m_pointPlayerPVP.Debug(); array<string> strFileParam; //ФАЙЛ playersSetUID.ini кладем в папку указанную в параметре запуска сервера -profiles= //Формат файла: //Steam UID в привычном виде|номер комплекта //Любая ошибка приведет к крашу сервера //Пример: // 76562298156537007|1 // 76561998116927207|3 //Ели UID в файле нет комплект выбирается рандомно file = OpenFile("$profile:playersSetUID.ini", FileMode.READ); Print("::: OpenFile : playersSetUID.ini : $profile"); if (file != 0) { while ( FGets( file, line_content ) > 0 ) { strFileParam = new array<string>; line_content.Split( "|", strFileParam ); m_playersSetUID.Insert(strFileParam.Get(0), strFileParam.Get(1).ToInt()); } CloseFile(file); } } override void StartingEquipSetup(PlayerBase player, bool clothesChosen) { Print("::: StartingEquipSetup(PlayerBase player, bool clothesChosen) :::"); //Номер комплекта выбирается рандомно int numSet = Math.RandomInt(2,6); /// 1 - Админ сет, 2-6 сеты для всех EntityAI itemEnt; ItemBase itemBs; //Получаем UID //PlayerIdentity p_identity = player.GetIdentity(); //p_identity.GetName(); // Получим имя игрока //p_identity.GetPlainId(); // UID в нашем знакомом виде 7656119********** //p_identity.GetId(); // получим UID в не знакомом виде Ue7dyagee34********* //p_identity.GetPlayerId(); // получим порядковый номер объекта типа игрок PlayerIdentity p_identity = player.GetIdentity(); string p_name = p_identity.GetName(); int p_id = p_identity.GetPlayerId(); if( p_identity ) { string uid_pl = p_identity.GetPlainId(); if (m_playersSetUID.Contains(uid_pl)) { numSet = m_playersSetUID.Get(uid_pl); } } itemEnt = player.GetInventory().CreateInInventory("Rag"); itemBs = ItemBase.Cast(itemEnt); itemBs.SetQuantity(4); SetRandomHealth(itemEnt); itemEnt = player.GetInventory().CreateInInventory("RoadFlare"); itemBs = ItemBase.Cast(itemEnt); switch( numSet ) { case 1: //ADMIN { Print("::: init.c ::: StartingEquipSetup ::: ADMIN ::: NAME:" + p_name + ", UID: " + uid_pl + ", ID: " + p_id.ToString() ); player.RemoveAllItems(); player.GetInventory().CreateInInventory("CoyoteBag_Green"); itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("TTSKOPants"); itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("TTsKOJacket_Camo"); itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("CombatBoots_Black"); itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("CombatKnife"); itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("FNX45"); itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd"); itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd"); itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("Mag_AKM_30Rnd"); itemBs = ItemBase.Cast(itemEnt); player.GetInventory().CreateInInventory("Mag_AKM_30Rnd"); itemBs = ItemBase.Cast(itemEnt); itemEnt = player.GetInventory().CreateInInventory( "akm" ); itemEnt.GetInventory().CreateAttachment( "PSO11Optic" ); itemEnt.GetInventory().CreateAttachment( "AK_WoodBttstck" ); itemEnt.GetInventory().CreateAttachment( "AK_WoodHndgrd" ); itemEnt.GetInventory().CreateAttachment( "AK_Suppressor" ); itemEnt = player.GetInventory().CreateInInventory("Rag"); itemBs = ItemBase.Cast(itemEnt); itemBs.SetQuantity(6); itemEnt = player.GetInventory().CreateInInventory("RoadFlare"); itemBs = ItemBase.Cast(itemEnt); player.SetHealth("","",10000); //ТЕСТ //SetAllowDamage НЕ РАБОТАЕТ ДЛЯ ОНЛАЙНА - БОГЕМЦЫ ВЫКЛЮЧИЛИ //Тут обсуждение - https://forums.dayz.com/topic/240028-pve-server-disable-pvp-damage/ //Есть идея насчет доработки кода обрабатывающего нанесение урона player.SetAllowDamage(false); break; } case 2: { itemEnt = player.GetInventory().CreateInInventory("VSS"); itemBs = ItemBase.Cast(itemEnt); //Шаманим свое break; } case 3: { itemEnt = player.GetInventory().CreateInInventory("AKM"); itemBs = ItemBase.Cast(itemEnt); //Шаманим свое break; } case 4: { itemEnt = player.GetInventory().CreateInInventory("AK74"); itemBs = ItemBase.Cast(itemEnt); //Шаманим свое break; } case 5: { break; } case 6: { break; } } } } Mission CreateCustomMission(string path) { Print("::: init.c ::: CreateCustomMission(string path) ::: "); return new CustomMission(); }
-
Рассылка
