Перейти к содержимому


Фотография

Проблема при создании миссии.


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 43

#1 OFFLINE   valka1000

valka1000

    Ефрейтор

  • Пользователи
  • 33 сообщений
  • Откуда:Кривой Рог

Отправлено 11 August 2014 - 13:33

Народ прошу помощи.

Создаю миссию  PVP, в миссии создаю слоты для игроков и каждому бойцу даю имя, а в скрипте комплектую

каждого игрока амуницией и оружием по имени слота.

 

Слотов 35, когда заходит человек 10 все нормально, все появляются и все получают свои комплекты одежды,

гранат, аптечек и оружия.

 

Проблема начинается когда заходит много народу, все получают свои комплекты а потом вещи ( аптечки, рожки с патронами, гранаты и т.д ) начинают "размножаться" ! Сервер начинает тупить. В итоге 2-3 минуты и у всех не по 5 рожков и 2 аптечки а по 80 и более рожков и 50 и более аптечек !

 

подскажите куда копать и в чем может быть причина !?


  • 0

#2 OFFLINE   HarryWorner

HarryWorner

    Лейтенант

  • Модераторы
  • 1035 сообщений

Отправлено 11 August 2014 - 15:19

valka1000, каким способом (подробно) ведется раздача стволов? Или Скрипт в студию.


  • 0

#3 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 11 August 2014 - 16:58

 

 а в скрипте комплектую

каждого игрока амуницией и оружием по имени слота.

Плохая идея!

/*
init.sqf
*/

if !(isDedicated) then {
  player execVM "equp.sqf";
};


/*
equp.sqf
*/

_unit = _this;

_unit addWeapon "SuperGun";
_unit addMagazine "ДаДайМнеКучуМагазинов";
итд

Сообщение отредактировал SteelRat: 11 August 2014 - 17:04

  • 0

#4 OFFLINE   valka1000

valka1000

    Ефрейтор

  • Пользователи
  • 33 сообщений
  • Откуда:Кривой Рог

Отправлено 11 August 2014 - 19:02

 

 

 а в скрипте комплектую

каждого игрока амуницией и оружием по имени слота.

Плохая идея!

/*
init.sqf
*/

if !(isDedicated) then {
  player execVM "equp.sqf";
};


/*
equp.sqf
*/

_unit = _this;

_unit addWeapon "SuperGun";
_unit addMagazine "ДаДайМнеКучуМагазинов";
итд

Не понял... Можно пояснить ?

 


  • 0

#5 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 11 August 2014 - 19:53

 

 

 

 а в скрипте комплектую

каждого игрока амуницией и оружием по имени слота.

Плохая идея!

/*
init.sqf
*/

if !(isDedicated) then {
  player execVM "equp.sqf";
};


/*
equp.sqf
*/

_unit = _this;

_unit addWeapon "SuperGun";
_unit addMagazine "ДаДайМнеКучуМагазинов";
итд

Не понял... Можно пояснить ?

 

 

 

Эта часть пишется в init.sqf миссии, при инициализации игрока этот код


if !(isDedicated) then {
  player execVM "equp.sqf";
};

вызывает для исполнения другой код, который вы разместите в файле equp.sqf

_unit = _this;

_unit addWeapon "SuperGun";
_unit addMagazine "ДаДайМнеКучуМагазинов";
итд

который и будет экипировать подключившегося игрока, и именно его, потому что вы обратились к нему вежливо, и персонально

player

И ещё, в этой ветке уже столько раз обслюнявили эту тему, полистайте, сотый раз я эту тему рассусоливать не буду, уж не обессудьте.


  • 0

#6 OFFLINE   valka1000

valka1000

    Ефрейтор

  • Пользователи
  • 33 сообщений
  • Откуда:Кривой Рог

Отправлено 11 August 2014 - 22:03

 

 

 

 

 а в скрипте комплектую

каждого игрока амуницией и оружием по имени слота.

Плохая идея!

/*
init.sqf
*/

if !(isDedicated) then {
  player execVM "equp.sqf";
};


/*
equp.sqf
*/

_unit = _this;

_unit addWeapon "SuperGun";
_unit addMagazine "ДаДайМнеКучуМагазинов";
итд

Не понял... Можно пояснить ?

 

 

 

Эта часть пишется в init.sqf миссии, при инициализации игрока этот код


if !(isDedicated) then {
  player execVM "equp.sqf";
};

вызывает для исполнения другой код, который вы разместите в файле equp.sqf

_unit = _this;

_unit addWeapon "SuperGun";
_unit addMagazine "ДаДайМнеКучуМагазинов";
итд

который и будет экипировать подключившегося игрока, и именно его, потому что вы обратились к нему вежливо, и персонально

player

И ещё, в этой ветке уже столько раз обслюнявили эту тему, полистайте, сотый раз я эту тему рассусоливать не буду, уж не обессудьте.

 

 

Так у меня все так и сделано ! В init стоит вызов на скрипт в котором вежливо каждому слоту ( red1, red2, .... blu1, blu2 и т.д. ) сначала все отбирается а потом выдается то что надо ... Самое интересное что когда на сервер заходит челове 7-10 все ОК ! А как только попробовали зайти 35 началось клонирование аптечек, патронов и т.д. 

 

P.S. Тут к сожалению не нашел похожих проблем и ответов с их решением, поэтому и написал.


  • 0

#7 OFFLINE   xPride

xPride

    Старшина

  • Команда HMG
  • 494 сообщений
  • Отряд:[LC]

Отправлено 11 August 2014 - 23:28

попробуйте так:

 

equip.sqf

private ["_func_equip"];
_func_equip =
{
    switch (player) do
      {
        case red1:
          {
            player addWeapon "pukan1";
          };
        case red2: 
          {
            player addWeapon "pukan1";
          };
       };
};


if(!isDedicated)then
{
  waitUntil {time > 0}
  sleep 0.5;
// раскоментировать то, что будет добавляться в _func_equip
// removeAllWeapons player;
// removeAllAssignedItems player; 
// removeHeadGear player;  
// removeUniform player;
// removeVest player;  
// removeBackPack player;  
  sleep 0.5;
  player call _func_equip;
};

init.sqf

{ [] execVM "equip.sqf"; } foreach [red1,red2.....redN];

  • 0

#8 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 12 August 2014 - 01:47

 

 

Так у меня все так и сделано ! В init стоит вызов на скрипт в котором вежливо каждому слоту ( red1, red2, .... blu1, blu2 и т.д. ) 

 

Пусть мои слова вас ни сколько не обидят, и попробуйте мне объяснить, к чему такие извращения?

Чем вас не устроило, сразу, конкретное и без оговорочное

player

Поймите, ваш глюк именно на этой почве.

 

PS не стесняйтесь показать нам ваше творение, глядишь так и проблема быстрее разрешится)

 

 


Сообщение отредактировал SteelRat: 12 August 2014 - 01:52

  • 0

#9 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 12 August 2014 - 09:17

SteelRat, меня больше волнует эта хрень будет синхронизироваться в МП? Или у него там будут голые бегать?
  • 0

#10 OFFLINE   HarryWorner

HarryWorner

    Лейтенант

  • Модераторы
  • 1035 сообщений

Отправлено 12 August 2014 - 09:50

vlad333000, какая синхронизация? Инит файл работает локально, вам ведь не нужно передавать глобальные значения для выдачи оружия и экипировки. 


  • 0

#11 OFFLINE   valka1000

valka1000

    Ефрейтор

  • Пользователи
  • 33 сообщений
  • Откуда:Кривой Рог

Отправлено 12 August 2014 - 12:35

Я и не стесняюсь. Просто я далеко от компа с миссией и пока добрался ...

И еще всем огромное спасибо что помогаете !!!

 

Так вот:

 

В init.sqf написано:

 

[] execVM "scripts\amunition.sqf";

 

А в scripts\amunition.sqf:

 


  • 0

#12 OFFLINE   HarryWorner

HarryWorner

    Лейтенант

  • Модераторы
  • 1035 сообщений

Отправлено 12 August 2014 - 14:20

valka1000, каждый раз при заходе нового игрока на сервере активируется данный скрипт. И так если мы имеем даже 5 игроков, то данные команды выполняются ровно пять раз, у всех игроков удаляются оружия и снова выдается за считанные милисекунды. Из-за этого и возникает такой бардак. Закрепите к сообщению архив с миссией, чтобы можно было нам исправить что есть с использованием оператора выбора.


  • 0

#13 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 12 August 2014 - 16:05

valka1000, каждый раз при заходе нового игрока на сервере активируется данный скрипт. И так если мы имеем даже 5 игроков, то данные команды выполняются ровно пять раз, у всех игроков удаляются оружия и снова выдается за считанные милисекунды. Из-за этого и возникает такой бардак. Закрепите к сообщению архив с миссией, чтобы можно было нам исправить что есть с использованием оператора выбора.

Именно подобный вариант событий я и предполагал.


  • 0

#14 OFFLINE   valka1000

valka1000

    Ефрейтор

  • Пользователи
  • 33 сообщений
  • Откуда:Кривой Рог

Отправлено 12 August 2014 - 16:23

Вот архив:

 

Прикрепленные файлы


  • 0

#15 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 12 August 2014 - 16:35

Реально! Вот который раз уже, об одном и том же

/*
	Пишем в инит игрока, или как вам нравится, слота
*/	
[this] execVM "scripts\amunition.sqf";


//	 шаблон файла amunition.sqf

_unit 	= _this;

//	Вот это достаточно прописать один раз, и именно в этом месте
removeAllWeapons _unit;
removeAllItems _unit;
removeAllAssignedItems _unit;
removeBackpack _unit;
removeGoggles _unit;

//	Далее раздача слонов
switch (_unit) do
{
    case red1:
    {
        // red1 - Командир
		_unit forceAddUniform "U_I_CombatUniform";
		_unit addVest "V_PlateCarrier3_rgr";
		_unit addHeadgear "H_Booniehat_indp";
		_unit addBackpack "B_AssaultPack_khk";
		_unit addItem "NVGoggles";
		_unit assignItem "NVGoggles";
		_unit addItem "ItemMap";
		_unit assignItem "ItemMap";
		_unit addItem "ItemCompass";
		_unit assignItem "ItemCompass";
		_unit addItem "ItemWatch";
		_unit assignItem "ItemWatch";
		_unit addItem "ItemRadio";
		_unit assignItem "ItemRadio";
 
		_unit addItemToBackpack "FirstAidKit";
		_unit addItemToBackpack "FirstAidKit";
		_unit addItemToBackpack "SmokeShell";
		_unit addItemToBackpack "SmokeShell";
		
		//Оружие и патроны
		_unit addMagazines ["30Rnd_65x39_caseless_green",15];
		_unit addMagazines ["1Rnd_HE_Grenade_shell",6];
 
		_unit addWeapon "arifle_Katiba_GL_ACO_F";
    };
    case red11: 
    {
        // red11 - Командир
		_unit forceAddUniform "U_I_CombatUniform";
		_unit addVest "V_PlateCarrier3_rgr";
		_unit addHeadgear "H_Booniehat_indp";
		_unit addBackpack "B_AssaultPack_khk";
		_unit addItem "NVGoggles";
		_unit assignItem "NVGoggles";
		_unit addItem "ItemMap";
		_unit assignItem "ItemMap";
		_unit addItem "ItemCompass";
		_unit assignItem "ItemCompass";
		_unit addItem "ItemWatch";
		_unit assignItem "ItemWatch";
		_unit addItem "ItemRadio";
		_unit assignItem "ItemRadio";
 
		_unit addItemToBackpack "FirstAidKit";
		_unit addItemToBackpack "FirstAidKit";
		_unit addItemToBackpack "SmokeShell";
		_unit addItemToBackpack "SmokeShell";
 
		//Оружие и патроны
		_unit addMagazines ["30Rnd_65x39_caseless_green",15];
		_unit addMagazines ["1Rnd_HE_Grenade_shell",6];
		_unit addWeapon "arifle_Katiba_GL_ACO_F";
    };
	
	... итд
	
	default {};	// если клиент не определён, как не повезло), остаётся в чём мать родила
};


Сообщение отредактировал SteelRat: 12 August 2014 - 16:40

  • 0

#16 OFFLINE   valka1000

valka1000

    Ефрейтор

  • Пользователи
  • 33 сообщений
  • Откуда:Кривой Рог

Отправлено 12 August 2014 - 16:37

И все равно я до конца не понял. Вы хотите сказать что скрипт вызывается при каждом заходе игрока. Получается что зашел

red1 ему выдалось все что его касается. Когда заходит например red3 то часть скрипта для red1 повторяется !? Но ведь в скрипте

четко написано сначала все забрать а потом дать то что надо. То есть по любому просто все забраться у чара а потом выдать по новой, а не склонировать кучу шмота. Ну и опять же последний зашедший - по такому принципу должен обновить комплекты у всех а относительно его скрипт выполняется один раз и у него дубляжа не должно быть ! А он есть .... 

 

Ну и самое главное не пойму как меня спасет вариант с использованием конструкции switch если по идее red1 уже зашел и switch его то же увидит и 

выполнить часть скрипта для него и для только зашедшего red3 ( например )?


  • 0

#17 OFFLINE   valka1000

valka1000

    Ефрейтор

  • Пользователи
  • 33 сообщений
  • Откуда:Кривой Рог

Отправлено 12 August 2014 - 16:43

 

Реально! Вот который раз уже, об одном и том же

/*
	Пишем в инит игрока, или как вам нравится, слота
*/	
[this] execVM "scripts\amunition.sqf";


//	 шаблон файла amunition.sqf

_unit 	= _this;

//	Вот это достаточно прописать один раз, и именно в этом месте
removeAllWeapons _unit;
removeAllItems _unit;
removeAllAssignedItems _unit;
removeBackpack _unit;
removeGoggles _unit;

//	Далее раздача слонов
switch (_unit) do
{
    case red1:
    {
        // red1 - Командир
		_unit forceAddUniform "U_I_CombatUniform";
		_unit addVest "V_PlateCarrier3_rgr";
		_unit addHeadgear "H_Booniehat_indp";
		_unit addBackpack "B_AssaultPack_khk";
		_unit addItem "NVGoggles";
		_unit assignItem "NVGoggles";
		_unit addItem "ItemMap";
		_unit assignItem "ItemMap";
		_unit addItem "ItemCompass";
		_unit assignItem "ItemCompass";
		_unit addItem "ItemWatch";
		_unit assignItem "ItemWatch";
		_unit addItem "ItemRadio";
		_unit assignItem "ItemRadio";
 
		_unit addItemToBackpack "FirstAidKit";
		_unit addItemToBackpack "FirstAidKit";
		_unit addItemToBackpack "SmokeShell";
		_unit addItemToBackpack "SmokeShell";
		
		//Оружие и патроны
		_unit addMagazines ["30Rnd_65x39_caseless_green",15];
		_unit addMagazines ["1Rnd_HE_Grenade_shell",6];
 
		_unit addWeapon "arifle_Katiba_GL_ACO_F";
    };
    case red2: 
    {
        // red11 - Командир
		_unit forceAddUniform "U_I_CombatUniform";
		_unit addVest "V_PlateCarrier3_rgr";
		_unit addHeadgear "H_Booniehat_indp";
		_unit addBackpack "B_AssaultPack_khk";
		_unit addItem "NVGoggles";
		_unit assignItem "NVGoggles";
		_unit addItem "ItemMap";
		_unit assignItem "ItemMap";
		_unit addItem "ItemCompass";
		_unit assignItem "ItemCompass";
		_unit addItem "ItemWatch";
		_unit assignItem "ItemWatch";
		_unit addItem "ItemRadio";
		_unit assignItem "ItemRadio";
 
		_unit addItemToBackpack "FirstAidKit";
		_unit addItemToBackpack "FirstAidKit";
		_unit addItemToBackpack "SmokeShell";
		_unit addItemToBackpack "SmokeShell";
 
		//Оружие и патроны
		_unit addMagazines ["30Rnd_65x39_caseless_green",15];
		_unit addMagazines ["1Rnd_HE_Grenade_shell",6];
		_unit addWeapon "arifle_Katiba_GL_ACO_F";
    };
	
	... итд
	
	default {};	// если клиент не определён, как не повезло), остаётся в чём мать родила
};

Спасибо огромное ! 

Я проверю этот вариант обязательно !

 

Но хочу понять вот что, конструкция switch + case фактически подставляет вместо _unit имя слота ( red1, red2 и т.д. ) Так чем она отличается от того что сделал я ?

То есть почему со switch вме будет работать нормально а при прямом прописывании оно будет первому зашедшему red1 ( например ) выполнять то что к нему относиться 35 раз. 

 


Сообщение отредактировал valka1000: 12 August 2014 - 16:46

  • 0

#18 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 12 August 2014 - 16:47

Пардон! Поправочка

/*
	Пишем в инит игрока, или как вам нравится, слота
*/	
0 = [this] execVM "scripts\amunition.sqf";

  • 0

#19 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 12 August 2014 - 16:55

 

И все равно я до конца не понял. Вы хотите сказать что скрипт вызывается при каждом заходе игрока. Получается что зашел

red1 ему выдалось все что его касается. Когда заходит например red3 то часть скрипта для red1 повторяется !?

 

Да, в вашем случае каждый заходящий инициализирует удаление и раздачу для ВСЕХ.

 

 

Ну и самое главное не пойму как меня спасет вариант с использованием конструкции switch если по идее red1 уже зашел и switch его то же увидит и 

выполнить часть скрипта для него и для только зашедшего red3 ( например )?

И как раз применение конструкции

switch (true) do {};

избавляет от не желательного эффекта.

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

 

А это для общего развития, так сказать

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

http://arma3.ru/foru...kriptopisaniiu/


  • 0

#20 OFFLINE   xPride

xPride

    Старшина

  • Команда HMG
  • 494 сообщений
  • Отряд:[LC]

Отправлено 12 August 2014 - 17:00

SteelRat,

Да не нужно в инит, раз юниты все именованные, лишняя работа.

 

valka1000,

проверьте вариант в приложении (сделал только для юнитов red1 и red2, дальше сами)

 

Прикрепленные файлы


  • 0




Яндекс.Метрика