Нужна помощь?
Создайте тему в соответствующем разделе
Не нужно писать всё в чат!Загляните на торговую площадку
Там вы можете купить
всё что касается игровых серверовНе хотите бан?
Пожалуйста, ознакомьтесь с нашими правилами
Не нарушайте порядок!Продаёте или покупаете?
Пользуйтесь услугами гаранта
Мы сделаем вашу сделку безопасной
Таблица лидеров
Популярные публикации
Отображаются публикации с наибольшей репутацией на 12/10/18 в Сообщения
-
2 балла
[DayZ 0.63] Сообщения о смертях игроков в чат
BorizzK и ещё один отреагировал на
123new за сообщение в теме
Автор скрипта: http://s-platoon.ru/profile/14721-borizzk/ Все благодарности за этот скрипт непосредственно автору скрипта, не мне! И так, установка: 1. Первым делом нам необходим чистый стандартный сервер DayZ (без модов, поскольку моды могу приводить к неработоспособности частей гайда). Установить его можно по инструкции, например, так: Замечу сразу, гайд сделан для версии игры 0.63.149525 2. Заходим в папку 'DTA' и распаковываем с 'PBO-MANAGER' архив 'scripts.pbo', получив папку 'scripts'. 3. Перемещаем папку 'scripts с' папки 'DTA' в корень папки сервера 4. Переходим по следующему пути: scripts\4_World\Entities\ManBase\PlayerBase.c и открываем файл. В самом его начале после кода class PlayerBase extends ManBase { добавляем код // BY BORIZZ.K, s-platoon.ru (ThX Mizev, NoNameUltima, 123New and DaOne) //MY --- //PLAYER DEATH with MESSAGES START //MY int killscore = 0; // usage p_killer.killscore = p_killer.killscore + 1; // for kills count in EEKilled function. //p_killer must be PlayerBase - use p_killer = PlayerBase.Cast(killer) //See EEKilled function int diescore = 0; // usage Player.diescore = Player.diescore + 1; // for death count in EEKilled function. //Player must be playerbase void Message_PlayerKilled(Object player_obj, Object killer) { //MY --- PlayerBase p_Killer = NULL; // Killer PlayerBase Player = player_obj; // Killed player PlayerIdentity Player_Identity = Player.GetIdentity(); //Killed player Identity string Player_Name = Player_Identity.GetName(); //Killed player name string p_UID = Player_Identity.GetPlainId(); // Killed player UID bool enableSaveKills = true; // enable/disable save kill count to profile/file by Killer UID bool enableSaveDies = true; // enable/disable save death count to profile/file by Player UID if ( GetGame().ServerConfigGetInt("enableSaveKills") == 0 ) //place parameter enableSaveKills = 0; for disable SaveKills to server profile { enableSaveKills = false; } if ( GetGame().ServerConfigGetInt("enableSaveDies") == 0 )//place parameter enableSaveDies = 0; for disable SaveDies to server profile { enableSaveDies = false; } string deathMsg = ""; string deathMsgDist = ""; string deathMsgKillScore = ""; string DebugMessage; Print("::: EEKilled: Debug: Input: killer " + killer.ToString() + " => Class: " + killer.GetType() + ", Player " + Player.ToString() + " => Class: " + Player.GetType()); //DEBUG //Phase #1 if ( killer.IsMan() ) { if ( killer.IsKindOf("SurvivorBase") ) { p_Killer = PlayerBase.Cast(killer); DebugMessage = "killer.IsMan(): killer.IsKindOf('SurvivorBase'): killer " + p_Killer.ToString() + " kill player " + Player.ToString(); //DEBUG } } else { if ( killer.IsItemBase() ) { ItemBase bitem = ItemBase.Cast(killer); p_Killer = PlayerBase.Cast(bitem.GetHierarchyRootPlayer()); DebugMessage = "killer.IsItemBase(): killer " + p_Killer.ToString() + " => " + bitem.ToString() + " kill player " + Player.ToString(); //DEBUG } else { DebugMessage = "killer " + killer.ToString() + " kill player " + Player.ToString(); //DEBUG } } Print("::: EEKilled Debug: " + DebugMessage); //DEBUG //Phase #2 if (p_Killer) { if (Player == p_Killer) { deathMsg = Player_Name + " committed suicide."; } else { PlayerIdentity Killer_Identity = p_Killer.GetIdentity(); string killer_name = Killer_Identity.GetName(); string k_UID = Killer_Identity.GetPlainId(); //Get killer UID vector position_killer = p_Killer.GetPosition(); vector position_player = Player.GetPosition(); int dist = vector.Distance(position_player, position_killer); EntityAI itemInHands = p_Killer.GetHumanInventory().GetEntityInHands(); if (enableSaveKills) { string strkillscore; g_Game.GetProfileString("killscore"+k_UID,strkillscore); if (strkillscore) { Print("::: EEKilled Debug: LoadKills: Killer: " + killer_name + ", loaded killscore: " + strkillscore); //DEBUG p_Killer.killscore = strkillscore.ToInt(); } } p_Killer.killscore = p_Killer.killscore + 1; //You must declare a variable: int KillScore = 0; in PlayerBase class if (enableSaveKills) { g_Game.SetProfileString("killscore"+k_UID,p_Killer.killscore.ToString()); g_Game.SaveProfile(); Print("::: EEKilled Debug: SaveKills: Killer: " + killer_name + ", killscore: " + diescore.ToString()); //DEBUG } if ( itemInHands.IsItemBase() ) { ItemBase item = ItemBase.Cast(itemInHands); string className = item.GetType(); deathMsg = killer_name + " kill: " + Player_Name; deathMsgDist = " from a distance: " + dist.ToString() + "m by " + className; deathMsgKillScore = killer_name + " kills: " + p_Killer.killscore.ToString(); } else { deathMsg = killer_name + " kill: " + Player_Name; deathMsgDist = " from a distance: " + dist.ToString() + "m."; deathMsgKillScore = killer_name + " kills: " + p_Killer.killscore.ToString(); } } } else { if ( killer.IsKindOf("AnimalBase") ) { deathMsg = Player_Name + " killed by animal."; } else { if ( killer.IsKindOf("ZombieBase") ) { deathMsg = Player_Name + " killed by zombie."; } else { deathMsg = Player_Name + " died for an unknown reason."; } } } //Phase #3 GetGame().ChatPlayer(5, deathMsg); Print("::: EEKilled Debug: killer: " + killer.ToString () + " ::: " + deathMsg); //DEBUG if (deathMsgDist) { GetGame().ChatPlayer(5, deathMsgDist); Print("::: EEKilled Debug: killer: " + killer.ToString () + " ::: " + deathMsgDist); //DEBUG } if (deathMsgKillScore) { GetGame().ChatPlayer(5, deathMsgKillScore); Print("::: EEKilled Debug: killer: " + killer.ToString () + " ::: " + deathMsgKillScore); //DEBUG } if (enableSaveDies) { string strdiescore; g_Game.GetProfileString("diescore"+p_UID,strdiescore); if (strdiescore) { Print("::: EEKilled Debug: Load Die's: Player: " + Player_Name + ", loaded diescore: " + strdiescore); //DEBUG Player.diescore = strdiescore.ToInt(); } } Player.diescore = Player.diescore + 1; if (enableSaveDies) { g_Game.SetProfileString("diescore"+p_UID,Player.diescore.ToString()); g_Game.SaveProfile(); Print("::: EEKilled Debug: SaveDeath: Player: " + Player_Name + ", diescore: " + diescore.ToString()); //DEBUG } //MY --- if( GetHumanInventory().GetEntityInHands() ) { if( CanDropEntity(player_obj) ) { if( !IsRestrained() ) { GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(ServerDropEntity,1000,false,( GetHumanInventory().GetEntityInHands())); } } } } затем находим функцию override void EEKilled( Object killer ) { и перед строкой Print("EEKilled, you have died"); добавляем Message_PlayerKilled(this, killer); 4. В параметры запуска сервера добавляем: -FilePatching 5. В 'config-файл' сервера (тот файл где название сервера) добавляем: enableSaveKills = 1; // Включение сохранения счетчика убийств по игрокам enableSaveDies = 1; // Включение сохранения счетчика смертей по игрокам где 1 - включено, 0 - выключено 6. Сохраняем, запускаем сервер и радуемся. Сообщения о смертях игроков будут у вас как в чате, так и в script.log. Где хранятся счетчики убийств и смертей? Ответ: Они хранятся в profile сервера игры. Т.е. после 1-го запуска создаются 2 файла (как у клиента игры в документах windows в папку dayz) в файлах с расширениями ".vars.DayZProfile" и ".DayZProfile". При удалении этих файлов счетчики сбросятся! ВАЖНО: Скажу сразу, добавить систему кастомного логирования вместо базового можно, но добавлять ее вам прийдется до иницилизации данного файла playerbase.c, поскольку уже в playerbase.c вы будете вызывать функцию, которая должна быть заранее определена и известна серверу! Добавлю, что сейчас масса модов, которые в своем составе имеют данный класс. Они также могут переписывать его, там самым приводя данный гайд в неработоспособность. Самый лучший вариант проверки гайда - на чистом сервере игры без модов. P.S. Данная тема является копией утраченной темы на нашем форуме, восстановлена по просьбам 'трудящихся'. Надеюсь, она вам поможет. -
1 баллПока изучал возможность анимировать движение обьекта и тд итп через CallLater, OnUpdate и OnTick починил AirDrop 1. Поскольку GetVelocity и SetVelocity (Как и GetSpeed) на стророне сервера не работают и если заспавнить любой обьект, кроме модели игрока он остается неподвижным в пространстве (у меня на тестовом сервере нивы висят над старым собором гроздями, хотя раньше сами падали если заспавнить на высоте) В функции GetAirPlaneInfo() Создание обьекта-шаблона с которого ранее читалась скорость падения (контейнер никогда сам не падал, физикой обьекта не заложено, потому и нужен самостоятельно падающий обьект) меняем PhysicsBody = EntityAI.Cast( GetGame().CreateObject( "offroadhatchmack", m_Platform.GetPosition(), false, true ) ); или что там раньше спавнилось на PhysicsBody = EntityAI.Cast( GetGame().CreateObject( "SurvivorM_Cyril", m_Platform.GetPosition(), false, true ) ); спавн модели игрока дает нам его падение с высоты на поверхность, тем самым мы можем прочитать в последствии изменение его высоты в процессе падения, где ранее читалась его скорость через GetVelocity (но оно не работает как я уже написал) Затем в функции MoveAirPlane() Заменяем Условие (где проверялось - какова скорость обьекта-шаблона и если скорость 0, значит обькт на поверхности) if (GetVelocity(PhysicsBody)[0] < 0.0001 && GetVelocity(PhysicsBody)[1] < 0.0001 && GetVelocity(PhysicsBody)[2] < 0.0001) на if (PhysicsBody.GetPosition()[1] <= Ground) те просто проверка, достиг ли обьект-шаблон поверхности (на самом деле высоты поверхности над уровнем моря в текущем положении) рекомендую так же удалить или закомментировать чуть ниже //DropEffect = EntityAI.Cast(GetGame().CreateObject( "LandMineTrap", m_AirDrop.GetPosition())); //DropEffect.SetOrientation("0 0 0"); //DropEffect.GetCompEM().SwitchOn(); //DropEffect.Delete(); и усе работает ))) Измененный вариант крайней редакции прилагаю Гайд по установке на гитхабе Сейчас немного дорабатываю этот скрпит Будет полное управление из чат-админки Изменение места создания эйродропа и тп Ну так, чисто побаловаться Вот сейчас у меня здание летает над собором )))) AirDrop.c
-
1 баллNoNameUltima Хочу добавить немного ОФФа Нафиг тут телебонькать видосы на тему - "смотри как у меня" ? Тут не видеохостинг и не ресурс по мерянью пиписьками Есть что сказать/показать по существу? Велкам - показывай, обьясняй, делись опытом Нечего сказать? Иди в ютьюб и показывай комьюнити КАК ТЫ МОЖЕШЬ НАСКРИПТИТЬ
-
1 баллPopka 123new такая ошибка говорит что include использован в классе или внутри функции если же include использован вне класса то смотреть скобки { }
-
1 баллEvGeNu4 Попробую завтра Времени нет хронически дейзю урывками
-
Рассылка

NoNameUltima