Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
  • 0
JustBullet

Меняем скин если если позволит хуманити.

Всем привет!

Как дать запрет на смену скина(скинов), если не достаточно хуманити?

 

Возможно я примерно представляю процедуру, как можно понять кто игрок:

 

private ["_isHero","_isBandit","_isSurvivor",];

 

_isHero = (player getVariable ["humanity",0] > 5000);
_isHero = (player getVariable ["humanity",0] > 5000);
__isSurvivor = ((player getVariable ["humanity",0] < 5000) && (player getVariable ["humanity",0] > -5000));
 

if (_isHero) then {

 

};

 

if (_isBandit) then {

 

};

 

if (_isSurvivor) then {

 

};

Но список скинов не маленький и где процедуру вписывать, пока не представляю.

Я не стремлюсь за всем готовым но вдруг кто то встречал такой скрипт или есть совет, буду признателен!

Edited by JustBullet (see edit history)

Share this post


Link to post
Share on other sites

17 answers to this question

Recommended Posts

  • 0

Тема не в том разделе.

А если посмотреть так код правильнее будет выглядеть
 

private ["_isHero","_isBandit","_isSurvivor",];

 
_isHero = (player getVariable ["humanity",0] > 5000);      //Герой
_isBandit = (player getVariable ["humanity",0] > -5000));  //Бандит
_isSurvivor = (player getVariable ["humanity",0] < 5000); //Выживший
 

if (_isHero) then {

 

};

 

if (_isBandit) then {

 

};

 

if (_isSurvivor) then {

 

};

 

То есть 

> 5000);  // Означает что для героя надо набрать больше 5000 хуманити
> -5000);  //Это означает что нужно набрать меньше 5000 хуманити для бандита
< 5000);  // А этот код обозначает что выживший он будет пока не набрал 5000 хуманити или отрицательной или положительной

 

Количество хуманити можно изменить по своим нуждам и классы,я указал в коде где какой.
 

Share this post


Link to post
Share on other sites







  • 0

извиняюсь если тема не в том разделе, я новенький, исправлюсь)), надеюсь простительно.

*********************************************************************************************

 

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

Edited by JustBullet (see edit history)

Share this post


Link to post
Share on other sites
  • 0

Это значит что пока ты не наберёшь -5000 хуманити ты будешь кепкой.

 


_isSurvivor = (player getVariable ["humanity",0] < 5000); //Выживший 
 

 

 

 

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

Приведу пример:

Если ты допустим захочешь сделать для героя 20 к хуманити,ты пишешь

 

 

_isHero = (player getVariable ["humanity",0] > 20000); //Герой  
 

 

 

 

А если допустим бандита  -20 к хуманити,ты пишешь

 

_isBandit = (player getVariable ["humanity",0] > -20000));         //Бандит

 

Собственно у кепки выставляем :

 

_isSurvivor = (player getVariable ["humanity",0] < 20000); //Выживший

 

То есть персонаж будет кепкой пока не пересечёт отметку в хуманити или 20к или  - 20к

 

 

Надеюсь правильно понял твой вопрос

Share this post


Link to post
Share on other sites
  • 0

что то я не пойму, то ли при сохранении что то происходит но я писал так когда создавал тему так:

 

_isHero = (player getVariable ["humanity",0] > 5000);
_isBandit = (player getVariable ["humanity",0] < -5000); // ТУт я думал что отрицательное значение вопринимается как меньшее.
_isSurvivor = ((player getVariable ["humanity",0] < 5000) && (player getVariable ["humanity",0] > -5000));
 

 

теперь понятно но тогда думаю вот так будет лучше:

 

_isHero = (player getVariable ["humanity",0] > 5000);
_isBandit = (player getVariable ["humanity",0] > -5000);
_isSurvivor = ((player getVariable ["humanity",0] < -5000) && (player getVariable ["humanity",0] > 5000));

Да! Спасибо за подробный ответ и я извиняюсь, корректировал и не ожидал что вы так быстро ответите! Немного каламбура навел удоляя свои сообщения...

Edited by JustBullet (see edit history)

Share this post


Link to post
Share on other sites
  • 0

_isSurvivor = ((player getVariable ["humanity",0] < 5000) && (player getVariable ["humanity",0] > -5000));  
 

 

вот именно это.

 

то есть персонаж будет кепкой пока не пересечёт отметку в хуманити или 20к или  - 20к

 

Если так посмотреть то

 

можно для героя выставить к примеру 15 к хуманити а для бандита -20 ,приведу пример:

 

 

 

 

_isSurvivor = ((player getVariable ["humanity",0] < 15000) && (player getVariable ["humanity",0] > 20000));
 

 

 

 

Собственно выше этого кода выставляется  для героя и бандита кол-во хуманити нужное для каждого из персонажа,за них отвечают 1 и 2 строка а 3 определяет сколько нужно кепке набрать что-бы перейти к какому то одному классу.

 

 

 

_isHero = (player getVariable ["humanity",0] > 20000); _isBandit = (player getVariable ["humanity",0] > -15000); _isSurvivor = ((player getVariable ["humanity",0] < 20000) && (player getVariable ["humanity",0] > -15000));
 

Share this post


Link to post
Share on other sites
  • 0

Теперь мне понятно благодаря Вам Esquire, большое спасибо!

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

 

Я думаю просто туда проверки вписать эти и перечислить список разрешенных одежд для персонажа в зависимости от их статуса хуманити. А в будущем может вывести в отдельный удобный список. Кто знает, может и скрипт получиться нормальный.

 

Еще вопрос, если кто знает, как проверить что одето на игроке?

Edited by JustBullet (see edit history)

Share this post


Link to post
Share on other sites
  • 0

Проверить можно через БД и через InfiSTAR.

Нарушение правил форума.

Правило 3.7

"Создание темы в несоответствующем разделе"

Тема перенесена.
Предупреждение выдано.

Share this post


Link to post
Share on other sites
  • 0

Теперь мне понятно благодаря Вам Esquire, большое спасибо!

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

 

Я думаю просто туда проверки вписать эти и перечислить список разрешенных одежд для персонажа в зависимости от их статуса хуманити. А в будущем может вывести в отдельный удобный список. Кто знает, может и скрипт получиться нормальный.

 

Еще вопрос, если кто знает, как проверить что одето на игроке?

проверку вставлять в фаил ui_selectSlot.sqf после строки _item = gearSlotData _control;

 

 

_skinList= ["скин1","скин2"];

if ((_item in _skinList)&&_isBandit) exitWith {}; // бандит не сможет использовать дынные скины.

 

 

Проверить можно через БД и через InfiSTAR.

 

жуть...

 

проверить можно 

_PlayerSkin = typeOf Player;

Share this post


Link to post
Share on other sites
  • 0

проверку вставлять в фаил ui_selectSlot.sqf после строки _item = gearSlotData _control;

 

 

_skinList= ["скин1","скин2"];

if ((_item in _skinList)&&_isBandit) exitWith {}; // бандит не сможет использовать дынные скины.

 

 

 

жуть...

 

проверить можно 

_PlayerSkin = typeOf Player;

а, я просто вопроса не допонял. Прочел в основном последний и написал.

Share this post


Link to post
Share on other sites
  • 0

проверку вставлять в фаил ui_selectSlot.sqf после строки _item = gearSlotData _control;

 

 

_skinList= ["скин1","скин2"];

if ((_item in _skinList)&&_isBandit) exitWith {}; // бандит не сможет использовать дынные скины.

 

 

жуть...

 

проверить можно

_PlayerSkin = typeOf Player;

Зачем там проверять? Можно в player_ChangeClothes.sqf все нормально ограничить, не засорять слоты.

Share this post


Link to post
Share on other sites
  • 0

 

Зачем там проверять? Можно в player_ChangeClothes.sqf все нормально ограничить, не засорять слоты.

ты сначала мне расскажи где ты такой файл нашел в дейзкоде?

Share this post


Link to post
Share on other sites
  • 0

 

ты сначала мне расскажи где ты такой файл нашел в дейзкоде?

Ну сорян, на память писал. Называется player_WearClothes.sqf

Share this post


Link to post
Share on other sites
  • 0

Ну сорян, на память писал. Называется player_WearClothes.sqf

можно и там. даже лучше будет. 

Share this post


Link to post
Share on other sites
  • 0

файл player_wearClothes.sqf
 

 

Сделал так: добавил глобальную переменную _status, герой, бандит или виживальщий, я так понимаю в нее будут записываться параметры хуманити?

записал в нее собственно эти значения:

_status = (player getVariable ["humanity",0]);

добавил:

_skinHero = ["Soldier_Sniper_PMC_DZ"];

_skinBandit = ["Bandit1_DZ"];

это для сравнения и собственно две проверки:
 
if ((_item in _skinBandit) && _status > 5000) exitWith {}; // Hero

if ((_item in _skinHero) && _status > -5000) exitWith {}; // Bandit

 
но по моему это как то тупо у меня. Думаю что я делаю что то не правельно и сравнивать лучше через "case" но в этом языке я не в курсе как записывать диалоги, две недели всего вожусь, не судите строго, начинашка я :)))
private ["_status","_item","_onLadder","_hasclothesitem","_config","_text","_myModel","_itemNew","_currentSex","_newSex","_model","_playerNear"];


if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_83") , "PLAIN DOWN"] };
DZE_ActionInProgress = true;


_item = _this;
call gear_ui_init;


_onLadder =        (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
if (_onLadder) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_player_21") , "PLAIN DOWN"]};


_hasclothesitem = _this in magazines player;
_config = configFile >> "CfgMagazines";
_text = getText (_config >> _item >> "displayName");


if (!_hasclothesitem) exitWith { DZE_ActionInProgress = false; cutText [format[(localize "str_player_31"),_text,"wear"] , "PLAIN DOWN"]};


if (vehicle player != player) exitWith { DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_85"), "PLAIN DOWN"]};


//if (!isNull (unitBackpack player)) exitWith { DZE_ActionInProgress = false; cutText [(localize "STR_EPOCH_ACTIONS_9"), "PLAIN DOWN"] };


if ("CSGAS" in (magazines player)) exitWith { DZE_ActionInProgress = false; cutText [(localize "STR_EPOCH_ACTIONS_10"), "PLAIN DOWN"] };


_myModel = (typeOf player);
_itemNew = "Skin_" + _myModel;


_skinHero = ["Soldier_Sniper_PMC_DZ"];
_skinBandit = ["Bandit1_DZ"];


if ( (isClass(_config >> _itemNew)) ) then
{
    if ( (isClass(_config >> _item)) ) then
    {
        // Current sex of player skin
        _currentSex = getText (configFile >> "CfgSurvival" >> "Skins" >> _itemNew >> "sex");


        // Sex of new skin
        _newSex = getText (configFile >> "CfgSurvival" >> "Skins" >> _item >> "sex");


        if(_currentSex == _newSex) then
        {
            _status = (player getVariable ["humanity",0]);
            
            // Get model name from config
            _model = getText (configFile >> "CfgSurvival" >> "Skins" >> _item >> "playerModel");
            if (_model != _myModel) then
            {
                if ((_item in _skinBandit) && _status > 5000) exitWith {}; // Hero
                if ((_item in _skinHero) && _status > -5000) exitWith {}; // Bandit


                if(([player,_item] call BIS_fnc_invRemove) == 1) then
                {
                    player addMagazine _itemNew;
                    [dayz_playerUID,dayz_characterID,_model] spawn player_humanityMorph;
                };
            };


        } else
        {
            cutText [(localize "str_epoch_player_86"), "PLAIN DOWN"];
        };
    };
};


DZE_ActionInProgress = false;
 

 

двигаюсь хоть в верном частично направлении?

Edited by JustBullet (see edit history)

Share this post


Link to post
Share on other sites
  • 0

я полагаю что само условие о смене нужно блокировать но не уверен как это работает:

 

if ((_item in _skinBandit) && _status > 5000) exitWith {}; // Hero
 

 

толи оно останавливает весь код что идет ниже, толи продолжает, я еще не знаю эти нюансы... если продолжает то надо добавить переменную что то типо trigge = false; и сравнивать тогда ну как то так, подскажите парни.

Share this post


Link to post
Share on other sites
  • 0

я полагаю что само условие о смене нужно блокировать но не уверен как это работает:

 

if ((_item in _skinBandit) && _status > 5000) exitWith {}; // Hero
 

 

толи оно останавливает весь код что идет ниже, толи продолжает, я еще не знаю эти нюансы... если продолжает то надо добавить переменную что то типо trigge = false; и сравнивать тогда ну как то так, подскажите парни.

private ["_isHero","_isSurvivor","_isBandit","_item","_onLadder","_hasclothesitem","_config","_text","_myModel","_itemNew","_currentSex","_newSex","_model","_playerNear"];

if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_83") , "PLAIN DOWN"] };
DZE_ActionInProgress = true;

_isHero = (player getVariable ["humanity",0] > 5000); // <-------      
_isBandit = (player getVariable ["humanity",0] < -5000)); // <------- 
_item = _this;
call gear_ui_init;

_onLadder =		(getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
if (_onLadder) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_player_21") , "PLAIN DOWN"]};

_hasclothesitem = _this in magazines player;
_config = configFile >> "CfgMagazines";
_text = getText (_config >> _item >> "displayName");

if (!_hasclothesitem) exitWith { DZE_ActionInProgress = false; cutText [format[(localize "str_player_31"),_text,"wear"] , "PLAIN DOWN"]};

if (_isHero) exitWith { hint "Слишком большое хуманити" }; // <--------
if (_isBandit) exitWith { hint "Слишком маленькое Хуманити" }; // <-------

if (vehicle player != player) exitWith { DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_85"), "PLAIN DOWN"]};

//if (!isNull (unitBackpack player)) exitWith { DZE_ActionInProgress = false; cutText [(localize "STR_EPOCH_ACTIONS_9"), "PLAIN DOWN"] };

if ("CSGAS" in (magazines player)) exitWith { DZE_ActionInProgress = false; cutText [(localize "STR_EPOCH_ACTIONS_10"), "PLAIN DOWN"] };

_myModel = (typeOf player);
_itemNew = "Skin_" + _myModel;

//diag_log ("Debug Clothes: model In: " + str(_itemNew) + " Out: " + str(_item));

if ( (isClass(_config >> _itemNew)) ) then {
	if ( (isClass(_config >> _item)) ) then {
		// Current sex of player skin
		
		_currentSex = getText (configFile >> "CfgSurvival" >> "Skins" >> _itemNew >> "sex");
		// Sex of new skin
		_newSex = getText (configFile >> "CfgSurvival" >> "Skins" >> _item >> "sex");
		//diag_log ("Debug Clothes: sex In: " + str(_currentSex) + " Out: " + str(_newSex));

		if(_currentSex == _newSex) then {
			// Get model name from config
			_model = getText (configFile >> "CfgSurvival" >> "Skins" >> _item >> "playerModel");
			if (_model != _myModel) then {
				if(([player,_item] call BIS_fnc_invRemove) == 1) then {
					player addMagazine _itemNew;
					[dayz_playerUID,dayz_characterID,_model] spawn player_humanityMorph;
				};
			};

		} else {
			cutText [(localize "str_epoch_player_86"), "PLAIN DOWN"];
		};
	};
};
DZE_ActionInProgress = false;

Share this post


Link to post
Share on other sites
  • 0

 

толи оно останавливает весь код что идет ниже, толи продолжает, я еще не знаю эти нюансы... если продолжает то надо добавить переменную что то типо trigge = false; и сравнивать тогда ну как то так, подскажите парни.

 

https://community.bistudio.com/wiki/exitWith

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.