Читайте тему выше:
http://www.sukhoi.ru/forum/showthrea...=1#post1616450
car.cpp гоняет машинку по сплайновой дороге туда-сюда. Для поезда нужно проверять как будет работать, он же не развернется сам на рельсах )
Читайте тему выше:
http://www.sukhoi.ru/forum/showthrea...=1#post1616450
car.cpp гоняет машинку по сплайновой дороге туда-сюда. Для поезда нужно проверять как будет работать, он же не развернется сам на рельсах )
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Нет, он разрушает даже самолеты, которые приземлились на аэродроме, но эти самолеты должны быть созданы в той же миссии. Потому что вы создаете самолеты в других миссиях, скрипт не может получить OnPlaneLanded() и OnPlaneCrashLanded() для этих самолетов. Есть 2 решения:
1) Создать отдельный скрипт для уничтожения самолета в каждой миссии.
2) Сделать скрипт так, что он слушал события каждой миссии. В этом случае, необходимо добавить:
Код:public override void Init(maddox.game.ABattle battle, int missionNumber) { base.Init(battle,missionNumber); MissionNumberListener=-1; //Listen to events of every mission }
--- Добавлено ---
Этот код дает вам много ошибок типа "Out of bounds", потому что он пытается убить второго двигателя и на самолете с одним двигателем.
Попробуйте изменить эти строки на:
Код:int iNumOfEngines = (aircraft.Group() as AiAirGroup).aircraftEnginesNum(); for (int i=0; i<iNumOfEngines; i++) { aircraft.hitNamed ((part.NamedDamageTypes)Enum.Parse(typeof(part.NamedDamageTypes),"Eng"+i.ToString()+"TotalFailure")); }
Спасибо большое!!! Завтра потестирую в оффлайне и загружу на сервер. Вставлять MissionNumberListener=-1, как понимаю, лучше в начало файла?
Out of bounds мы получали по-моему именно для 2х-моторных 110х емнип (и только для них). Но в любом случае исправим.
Не подскажете, как корабли, танки, дымы минут через 50 - 75 убрать после их загрузки подмиссией?
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Если объекты создаются только во время загрузки миссий, мы можем уменьшить эту проблему до: объекты должны умереть после минут XXX от их создания. Тогда, мы можем использовать:
Код:public override void OnActorCreated(int missionNumber, string shortName, AiActor actor) { base.OnActorCreated(missionNumber,shortName,actor); //Ground objects will die after 50 min when counted from their birth if (actor is AiGroundActor) Timeout (3000, () => { if (actor != null) { (actor as AiGroundActor).Destroy(); } } ); }
--- Добавлено ---
В методе Init (). Он выполняется, когда миссия начинается. Нет никакой разницы, в каком порядке методы определены в классе, так что вы можете поместить его в начале, конце или середине.
Давайте брать пример. Игрок покидает Spitfire в воздухе, скрипт пытается сделать некоторые повреждения. Spitfire имеет только один двигатель, поэтому скрипт успешно убивает двигателя № 1. Тогда скрипт продолжается, и пытается убить двигатель № 2, которой не существует, и в результате появляется ошибка "Out of bounds".
Я просто предложили такие изменения кода, что скрипт будет убивать не более двигателей, чем есть в самолете.
Периодические загрузки миссии без использования TickCounter():
Код://Runs once, when mission is loaded public override void Init(maddox.game.ABattle battle, int missionNumber) { base.Init(battle,missionNumber); //Planned missions MissionLoader(30,10,"missions/Multi/Dogfight/bombers1.mis"); // 10s from main mission start and repeatedly every 30s MissionLoader(100,60,"missions/Multi/Dogfight/bombers2.mis"); // 60s from main mission start and repeatedly every 100s } public void MissionLoader(int period, int offset, string mission) { if (offset > 0) Timeout(offset, () => {MissionLoader(period,0,mission);}); else { GamePlay.gpPostMissionLoad(mission); Timeout(period, () => {MissionLoader(period,0,mission);}); } }
Спасибо, а как туда отложенные по времени текстовые сообщения вставить как здесь:
Мне трудно что-то менять в коде. Лучше вставлять целый работающий кусок в готовый скрипт, если есть такая возможность.Код:// v.1_17_00. bot-destroying script based on one by oreva using System; using maddox.game; using maddox.game.world; using System.Collections.Generic; public class Mission : AMission { // loading sub-missions public override void OnTickGame() { if (Time.tickCounter() % 216000 == 108000) // 216000=120 min repeat. 108000=60 min delay. { GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_small01.mis"); } if (Time.tickCounter() % 216000 == 215999) // 216000=120 min repeat. 215999=120 min delay. { GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_small02.mis"); } ///////////////////////////////////////////////////////////////////////////////////// if (Time.tickCounter() % 135000 == 9000) // 135000=75 min repeat. 9000=5 min delay. { GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_air01.mis"); // GamePlay.gpHUDLogCenter("mis1 loaded!"); double initTime = 0.0; Timeout(initTime += 600, () => { GamePlay.gpHUDLogCenter("Attention! Enemy activity is expected at E3!"); }); Timeout(initTime += 300, () => { GamePlay.gpHUDLogCenter("Attention! Help is needed at D4!"); }); } if (Time.tickCounter() % 135000 == 54000) // ; 135000=75 min repeat, 54000 - 30 min delay. { GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_ground01.mis"); // GamePlay.gpHUDLogCenter("mis2 loaded"); double initTime = 0.0; Timeout(initTime += 600, () => { GamePlay.gpHUDLogCenter("Attention! Cover your shipping at C4!"); }); Timeout(initTime += 300, () => { GamePlay.gpHUDLogCenter("Attention! All airgroups please proceed to C4!"); }); } if (Time.tickCounter() % 135000 == 99000) // 135000 == 99000 = 75 min repeat, 55 min delay { GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_air02.mis"); // GamePlay.gpHUDLogCenter("mis3 loaded!"); double initTime = 0.0; Timeout(initTime += 600, () => { GamePlay.gpHUDLogCenter("Attention! Enemy activity is expected at E2!"); }); Timeout(initTime += 300, () => { GamePlay.gpHUDLogCenter("Attention! Friendly aircrafts are under attack at D2!"); }); } } // destroys aircraft abandoned by a player. script by oreva private bool isAiControlledPlane (AiAircraft aircraft) { if (aircraft == null) { return false; } Player [] players = GamePlay.gpRemotePlayers (); foreach (Player p in players) { if (p != null && (p.Place () is AiAircraft) && (p.Place () as AiAircraft) == aircraft) { return false; } } return true; } private void destroyPlane (AiAircraft aircraft) { if (aircraft != null) { aircraft.Destroy (); } } private void explodeFuelTank (AiAircraft aircraft) { if (aircraft != null) { aircraft.hitNamed (part.NamedDamageTypes.FuelTank0Exploded); } } private void destroyAiControlledPlane (AiAircraft aircraft) { if (isAiControlledPlane (aircraft)) { destroyPlane (aircraft); } } private void damageAiControlledPlane (AiActor actor) { if (actor == null || !(actor is AiAircraft)) { return; } AiAircraft aircraft = (actor as AiAircraft); if (!isAiControlledPlane (aircraft)) { return; } if (aircraft == null) { return; } aircraft.hitNamed (part.NamedDamageTypes.ControlsElevatorDisabled); aircraft.hitNamed (part.NamedDamageTypes.ControlsAileronsDisabled); aircraft.hitNamed (part.NamedDamageTypes.ControlsRudderDisabled); aircraft.hitNamed (part.NamedDamageTypes.FuelPumpFailure); aircraft.hitNamed (part.NamedDamageTypes.Eng0TotalFailure); aircraft.hitNamed (part.NamedDamageTypes.Eng1TotalFailure); /***Timeout (240, () => {explodeFuelTank (aircraft);} ); * ***/ Timeout (300, () => {destroyPlane (aircraft);} ); } ////////////////////////////////////////////////////////////////////////////////////////////////// public override void OnPlaceLeave (Player player, AiActor actor, int placeIndex) { base.OnPlaceLeave (player, actor, placeIndex); Timeout (1, () => {damageAiControlledPlane (actor);} ); } public override void OnAircraftCrashLanded (int missionNumber, string shortName, AiAircraft aircraft) { base.OnAircraftCrashLanded (missionNumber, shortName, aircraft); Timeout (300, () => { destroyPlane(aircraft); } ); } public override void OnAircraftLanded (int missionNumber, string shortName, AiAircraft aircraft) { base.OnAircraftLanded(missionNumber, shortName, aircraft); Timeout(300, () => { destroyPlane(aircraft); } ); } }
ps. Пока не было времени интегрировать предыдущие изменения, надеюсь займусь вечером.
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Можно ли каким-то образом исключить отсюда артиллерию? Т.е. чтобы зенитки оставались.Код:public override void OnActorCreated(int missionNumber, string shortName, AiActor actor) { base.OnActorCreated(missionNumber,shortName,actor); //Ground objects will die after 50 min when counted from their birth if (actor is AiGroundActor) Timeout (3000, () => { if (actor != null) { (actor as AiGroundActor).Destroy(); } } ); }
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Или вы можете просто удалить объекты, созданные в подмиссиях. В этом случае, вы должны поставить все зенитки в основной миссии.Код:public override void OnActorCreated(int missionNumber, string shortName, AiActor actor) { base.OnActorCreated(missionNumber,shortName,actor); //Ground objects (except AA Guns) will die after 50 min when counted from their birth if (actor is AiGroundActor) if ((actor as AiGroundActor).Type() != maddox.game.world.AiGroundActorType.AAGun) Timeout (3000, () => { if (actor != null) { (actor as AiGroundActor).Destroy(); } } ); }
Код:public override void OnActorCreated(int missionNumber, string shortName, AiActor actor) { base.OnActorCreated(missionNumber,shortName,actor); HUDmsg("Actor "+actor.Name()+" was created."); //Ground objects (except ones created in main mission) will die after 50 min when counted from their birth if (actor is AiGroundActor && missionNumber > 0) Timeout (3000, () => { if (actor != null) { (actor as AiGroundActor).Destroy(); } } ); }
Крайний раз редактировалось zaltys; 15.05.2011 в 19:17.
Спасибо большое! Возьмем 1й вариант, т.к. в подмиссиях иногда зенитки немного добавляем, где нужно.
Противотанковые пушки удалятся? (их лучше удалять, хотя не так принципиально пока их мало у нас совсем).
upd. Вот так получилось. Тестируем. Спасибо за помощь.
Код:// v.1_17_04. script by oreva, zaltys, small_bee using System; using maddox.game; using maddox.game.world; using System.Collections.Generic; public class Mission : AMission { // loading sub-missions public override void OnTickGame() { if (Time.tickCounter() % 216000 == 108000) // 216000=120 min repeat. 108000=60 min delay. { GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_small01.mis"); } if (Time.tickCounter() % 216000 == 215999) // 216000=120 min repeat. 215999=120 min delay. { GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_small02.mis"); } /////////////////////// if (Time.tickCounter() % 162000 == 9000) // 162000=90 min repeat. 9000=5 min delay. { GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_air01.mis"); // GamePlay.gpHUDLogCenter("mis1 loaded!"); double initTime = 0.0; Timeout(initTime += 600, () => { GamePlay.gpHUDLogCenter("Attention! Enemy activity is expected at E3!"); }); Timeout(initTime += 500, () => { GamePlay.gpHUDLogCenter("Attention! Help is needed at D4!"); }); } if (Time.tickCounter() % 162000 == 63000) // ; 162000=90 min repeat, 63000 - 35 min delay. { GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_sea01.mis"); // GamePlay.gpHUDLogCenter("mis2 loaded"); double initTime = 0.0; Timeout(initTime += 500, () => { GamePlay.gpHUDLogCenter("Attention! Cover your shipping at C4!"); }); Timeout(initTime += 300, () => { GamePlay.gpHUDLogCenter("Attention! Friendly ships are under attack at C4!"); }); } if (Time.tickCounter() % 162000 == 117000) // 162000 == 117000 = 90 min repeat, 65 min delay { GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_air02.mis"); // GamePlay.gpHUDLogCenter("mis3 loaded!"); double initTime = 0.0; Timeout(initTime += 600, () => { GamePlay.gpHUDLogCenter("Attention! Enemy activity is expected at E3!"); }); Timeout(initTime += 300, () => { GamePlay.gpHUDLogCenter("Attention! All airgroups please proceed to D2!"); }); } } //////////////////////////////////////////////////////////////////////////////////////////////////// // destroys aircraft abandoned by a player. private bool isAiControlledPlane (AiAircraft aircraft) { if (aircraft == null) { return false; } Player [] players = GamePlay.gpRemotePlayers (); foreach (Player p in players) { if (p != null && (p.Place () is AiAircraft) && (p.Place () as AiAircraft) == aircraft) { return false; } } return true; } private void destroyPlane (AiAircraft aircraft) { if (aircraft != null) { aircraft.Destroy (); } } private void explodeFuelTank (AiAircraft aircraft) { if (aircraft != null) { aircraft.hitNamed (part.NamedDamageTypes.FuelTank0Exploded); } } private void destroyAiControlledPlane (AiAircraft aircraft) { if (isAiControlledPlane (aircraft)) { destroyPlane (aircraft); } } private void damageAiControlledPlane (AiActor actor) { if (actor == null || !(actor is AiAircraft)) { return; } AiAircraft aircraft = (actor as AiAircraft); if (!isAiControlledPlane (aircraft)) { return; } if (aircraft == null) { return; } aircraft.hitNamed (part.NamedDamageTypes.ControlsElevatorDisabled); aircraft.hitNamed (part.NamedDamageTypes.ControlsAileronsDisabled); aircraft.hitNamed (part.NamedDamageTypes.ControlsRudderDisabled); aircraft.hitNamed (part.NamedDamageTypes.FuelPumpFailure); int iNumOfEngines = (aircraft.Group() as AiAirGroup).aircraftEnginesNum(); for (int i = 0; i < iNumOfEngines; i++) { aircraft.hitNamed((part.NamedDamageTypes)Enum.Parse(typeof(part.NamedDamageTypes), "Eng" + i.ToString() + "TotalFailure")); } /***Timeout (240, () => {explodeFuelTank (aircraft);} ); * ***/ Timeout (300, () => {destroyPlane (aircraft);} ); } ////////////////////////////////////////// public override void OnPlaceLeave (Player player, AiActor actor, int placeIndex) { base.OnPlaceLeave (player, actor, placeIndex); Timeout (1, () => {damageAiControlledPlane (actor);} ); } public override void OnAircraftCrashLanded (int missionNumber, string shortName, AiAircraft aircraft) { base.OnAircraftCrashLanded (missionNumber, shortName, aircraft); Timeout (300, () => { destroyPlane(aircraft); } ); } public override void OnAircraftLanded (int missionNumber, string shortName, AiAircraft aircraft) { base.OnAircraftLanded(missionNumber, shortName, aircraft); Timeout(300, () => { destroyPlane(aircraft); } ); } ////////////////////////////////////////////////////////////////////////////////////////////////// //Listen to events of every mission public override void Init(maddox.game.ABattle battle, int missionNumber) { base.Init(battle, missionNumber); MissionNumberListener = -1; //Listen to events of every mission } ////////////////////////////////////////////////////////////////////////////////////////////////// //Ground objects (except AA Guns) will die after 55 min when counted from their birth public override void OnActorCreated(int missionNumber, string shortName, AiActor actor) { base.OnActorCreated(missionNumber, shortName, actor); //Ground objects (except AA Guns) will die after 55 min when counted from their birth if (actor is AiGroundActor) if ((actor as AiGroundActor).Type() != maddox.game.world.AiGroundActorType.AAGun) Timeout(3300, () => { if (actor != null) { (actor as AiGroundActor).Destroy(); } } ); } /**** //Ground objects will die after 55 min when counted from their birth public override void OnActorCreated(int missionNumber, string shortName, AiActor actor) { base.OnActorCreated(missionNumber, shortName, actor); //Ground objects will die after 55 min when counted from their birth if (actor is AiGroundActor) Timeout(3300, () => { if (actor != null) { (actor as AiGroundActor).Destroy(); } } ); } ****/ }
Крайний раз редактировалось -atas-; 15.05.2011 в 19:36.
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Возможно, да. Я думаю, PT оружие будет maddox.game.world.AiGroundActorType.Artillery. Это список актеров наземных объектов:
Если вы хотите сохранить артиллерийских орудий и зенитных орудий, вам необходимо изменить так:Код:Unknown, Medic, Motorcycle, ArmoredCar, Tractor, Car, Amphibian, SPG, Tank, Bus, LightTruck, Truck, Trailer, Balloon, Generator, Predictor, Radar, RadioBeacon, RadioBeamProjector, Listener, AmmoComposition, ContainerShort, ContainerLong, Artillery, AAGun, Plane, EngineWagon, FreightWagon, PassengerWagon, ShipMisc, ShipTransport, ShipSmallWarship, ShipDestroyer, ShipCruiser, ShipBattleship, ShipCarrier, ShipSubmarine, Bridge, House
Код:if ((actor as AiGroundActor).Type() != maddox.game.world.AiGroundActorType.AAGun && (actor as AiGroundActor).Type() != maddox.game.world.AiGroundActorType.Artillery)
Спасибо! Поднял тестовую Repka #3 с этим скриптом.
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Подскажите, пожалуйста, танкеры вот таким образом по сплайнновой дороге, которая просто "дорога" (это невидимый путь?) будут бегать?
[NPC]
18_Chief Ship.Tanker_Medium1 gb /posx 264072.63/posy 205404.94 /script car.cpp/target 0_SplineRoad /sleep 0/skill 2/slowfire 10/tow00_00 1_Static
19_Chief Ship.Tanker_Medium1 de /posx 258181.84/posy 208404.95 /script car.cpp/target 1_SplineRoad /sleep 0/skill 2/slowfire 10/tow00_00 2_Static
Что означают параметры /sleep 0/skill 2/slowfire 10 ?
Какие для них предельные значения?
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Прошу проверить часть скрипта, рандомно загружающую одну из 3х подмиссий, на предмет ошибки. не работает, миссии не грузит.
Заранее благодарствую.
upd. fixed http://www.sukhoi.ru/forum/showthrea...=1#post1621945Код:using System; using maddox.game; using maddox.game.world; using System.Collections.Generic; public class Mission : AMission { // loading sub-missions public override void OnTickGame() { if (Time.tickCounter() % 54000 == 12600) // 54000=30 min repeat. 12600=7 min delay. { // randomly selects 1 of several submissions Random RandomIncident = new Random(); switch (RandomIncident.Next(1, 3)) { case 1: GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_air01.mis"); // GamePlay.gpHUDLogCenter("mis1 loaded!"); double initTime = 0.0; Timeout(initTime += 600, () => { GamePlay.gpHUDLogCenter("Attention! Enemy activity is expected at E3!"); }); Timeout(initTime += 600, () => { GamePlay.gpHUDLogCenter("Attention! Help is needed at E3/D4!"); }); break; case 2: GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_sea01.mis"); // GamePlay.gpHUDLogCenter("mis2 loaded"); double initTime = 0.0; Timeout(initTime += 500, () => { GamePlay.gpHUDLogCenter("Attention! Cover your shipping at C4!"); }); Timeout(initTime += 300, () => { GamePlay.gpHUDLogCenter("Attention! Ships are under attack at C4!"); }); break; case 3: GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_air02.mis"); // GamePlay.gpHUDLogCenter("mis3 loaded!"); double initTime = 0.0; Timeout(initTime += 600, () => { GamePlay.gpHUDLogCenter("Attention! Enemy activity is expected at E2!"); }); Timeout(initTime += 300, () => { GamePlay.gpHUDLogCenter("Attention! All airgroups please proceed to E2/D3!"); }); break; } } /////////////////////// //loads small submissions w/o messages if (Time.tickCounter() % 216000 == 108000) // 216000=120 min repeat. 108000=60 min delay. { GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_small01.mis"); } if (Time.tickCounter() % 216000 == 215999) // 216000=120 min repeat. 215999=120 min delay. { GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/BoF1/BoF1_small02.mis"); } } }
--- Добавлено ---
Подскажите, как можно настраивать GamePlay.gpHUDLogCenter , чтобы писать мельче, другим цветом (ярко-синим, например) и внизу экрана. Как можно возврат каретки / перенос вставить, менять длительность показа?
Было бы неплохо все-таки дать игроку возможность по нажатию клавиши посмотреть текущие цели миссии, которые могут меняться в реальном времени. Например, можно на карте 2ю вкладку сделать для текущих целей и 3ю для общего брифинга, который был в начале миссии. Назначить горячие клавиши ALT-1, 2, 3 например. Для "онлайн-битвы за ресурсы" вещь необходимая.
Крайний раз редактировалось -atas-; 18.05.2011 в 22:59.
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Несколько вопросов возникло
1. Можно ли как-то узнать локаль игрока, подключившегося к серверу (язык его копии игры), что бы отправлять ему сообщения на его языке?
2. Можно ли отключить в чате сообщения о появлении самолетов в таком-то квадрате, а также сообщения кто куда упал и кто ему в этом помог?
3. И присоединяюсь к вопросу - было бы неплохо для HUD сообщения регулировать его позицию и цвет, а также сделать его многострочным (у меня не получилось). И аналогично, регулировать цвет сообщения в чате (по примеру сообщений о повреждениях).
4. Было бы классно добавить в онлайне что-то вроде таблицы с игроками (по кнопке S который), но содержимое такого окна мог бы регулировать сервер или миссия.
GamePlay.gpHUDLogCenter("",123); 123 - длительность показывания, ещё можно показывать определённым игрокам сообщение , по остальным вопросам - пока никак, возможно позже добавится более широкое управление.
угу, передал, вместе с улучшением карты будут думать как сделать.
погляжу, если можно.
в настройке инфоокна, емнип это сообщения сервера - убрать и не будут показываться. Или как сделать чтобы сам сервер не писал их?
насчёт худ-а согласен, надо что-то придумывать, а цвет сообщений в чате вроде и так настраивается, при настройке инфоокна.
ага, это планируется вроде.
Don't happy, be worry
Да, именно сервер. Сейчас он работает как хороший разведчик - скажем я хочу поднять "108-й со старшими офицерами", а сервер красным услужливо подсказывает, что такое дело там-то и там-то появилось.
Аналогично, что бы из миссии можно было задать цвет - скажем сообщение не настолько важное, что бы писать его перед носом большими красными буквами, но тем не менее достаточно полезное для того, что бы его выделить. К тому же чат можно промотать, что бы посмотреть, что приходило ранее, в отличие от HUD сообщений.
угу, понятно, надо наверное фильтр сделать с настройками из сервера.
ясно, в принципе к чату надо доступ наверное сделать серверу, это решит часть вопросов.
По поводу локали игрока - нельзя, но если SayToGroup() использовать с уже существующими сообщениями - они на языке игрока будут.
Don't happy, be worry
В режиме с включенными маркерами(иконками) самолетов можно ли как-то убрать с сервера (или скриптом) стрелки по краям экрана или сделать их абсолютно прозрачными для клиентов?
Можно ли настроить дальность, отображаемую сторону (свои/чужие) и цвет иконок самолетов?
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Подскажите плз, как вращать обьекты в редакторе?
А можно ли сделать иконки для наземных целей? :-)