Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • 0
Sovest2

Undefined Varible или Any в Single Currency 4.0

 

Никак не могу избавиться от снятия с трупа бота бесконечного количества денег(Если спрятать его и дождаться пока он пропадет),которое отображается как "any".

Проблему пытаюсь исправить в check_wallet.sqf

Вот такой вот текст у меня в check_wallet.sqf

private ["_body", "_hisMoney", "_myMoney"];

_body = _this select 3;
_PlayerNear = _body call dze_isnearest_player;
if (_PlayerNear ) exitWith {cutText [localize "str_pickup_limit_4", "PLAIN DOWN"]};

_name = _body getVariable ["bodyName","Неизвестный"];
_hisMoney = _body getVariable ["cashMoney",0];

diag_log format["_name = %1 , _hisMoney = %2 , _body = %3",_name,_hisMoney,_body];

if( (isNull _body) || (_name == "<NULL-object>") || (_name == "<null>")) exitWith {cutText ["Вы не можете снять деньги с этого трупа,попробуйте еще раз", "PLAIN DOWN"]};

_myMoney = player getVariable ["cashMoney",0];
_myMoney = _myMoney + _hisMoney;


_body setVariable ["cashMoney", 0 , true];
player setVariable ["cashMoney", _myMoney , true];

systemChat format ['Вы забрали %1 монет с %2 !',_hisMoney,_name];

Условие  

_name = "<null>"

Пропускает значение  _name = <null>

 

Код в fn_selfActions.sqf

// Study Body
	if (_player_studybody && !_clothesTaken) then {
		if (s_player_studybody < 0) then {
		 // --------ZUPA - Check Wallet --------
				s_player_studybody = player addAction [("<t color=""#FF0000"">"+("Проверить кошелек") + "</t>"), "custom\singlecurrency\actions\check_wallet.sqf",_cursorTarget, 0, false, true, "",""];
			// ---- ZUPA END ---
		};
		if((s_player_clothes < 0)) then
		{
			s_player_clothes = player addAction [("<t color='#0096ff'>")+("Снять одежду")+("</t>"), "custom\take_clothes\take_clothes.sqf",cursorTarget, -10, false, true];
		};
	} else {
		player removeAction s_player_studybody;
		s_player_studybody = -1;
		player removeAction s_player_clothes;
		s_player_clothes = -1;
	};

 

Изменено пользователем Sovest2 (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

  • 0
27 минут назад, Sovest2 сказал:

Пропускает значение  _name = <null>

 

Это не условие, а присваивание.

== условие.

Это во первых.

 

Во вторых:

На кой хер делать проверки -

 

_PlayerNear ....

далее получать какие то переменные типа -

_name ...

_hisMoney ...

 

и только потом проверять, а ВАЩЩЩЕ, не isNull ли _body с которого это все тянется?

 

Наверное правильней изначально, после -

_body = _this select 3;

 

Проверить

 

if (isNull _body) exitWith {systemChat "А тела то и нету";};

 

А еще лучше, (раз такое мясо) выше добавить:

 

if (isNil "_body") exitWith {systemChat "А нету не то что тела - а ваще нихера";};

 

И только после данных проверок, узнать - _PlayerNear(есть ли игрок рядом)

Далее

_hisMoney ...

(_name - ваще нах не нужен)

Далее проверить - а не 0 ли мани-мани

if (_hisMoney <= 0) exitWith {"Дальше нет смысла продолжать скрипт, т.к. бабла то в трупаке нема...";};

И не надо никаких name=="<Null object>"

и ваще - АЛЕ - такой параметр в виде string вернется только в качестве диага, и в случае если if (isNull _body)

что выше при правильной подстановке уже проверено.

 

 

P.S. сколько жеж лет эту говносистему пытаются в норму привести?))))

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах





  • 0

Ах да, чуть не забыл,(раз уж ты кусок кода выложил оффтопного) -

Передавать в качестве аргумента, в скрипт(снятие шмотки) -

s_player_clothes = player addAction [("<t color='#0096ff'>")+("Снять одежду")+("</t>"), "custom\take_clothes\take_clothes.sqf",cursorTarget, -10, false, true];

 

Надо не абсурдный cursorTarget, который при повороте мошонки может измениться, а ранее определенный _cursorTarget

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
Цитата

if (isNil "_body") exitWith {systemChat "А нету не то что тела - а ваще нихера";};

Спасибо за помощь

 

Вопрос решен

Изменено пользователем Sovest2 (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
32 минуты назад, Sovest2 сказал:

Но значение any пропускает.

чего, куда.........

бррррррр........

 

ты внятно покажи рпт со своим any

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

 

15 часов назад, NoNameUltima сказал:

чего, куда.........

бррррррр........

 

ты внятно покажи рпт со своим any

 

Теперь все работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: Miduznya
      Всем привет, чет не нашел не где как можно в ручную обновить через .bat или .cmd файл
      если есть у кого такой поделитесь плиз. Прошу сильно не пинать если есть такая тема дайте ссылку
    • Автор: BorizzK
      Поскольку штатный чат бегемоты сломали, а чат-одминка лучший способ тестирования функций и параметров/значений на стороне сервера
      Реши сначала на клиенте чат отмоддидь, но потом обнаружил что Даон в VPP своей это уже сделал и мне остается только отмоддидь одну его функцию на стороне сервера, что я и сделал
       
      Посмотрел
       
      На клиенте моддинг строки чата с перехватом 5_Mission\GUI
      ChatInputMenu.c
      modded class ChatInputMenu { override bool OnChange(Widget w, int x, int y, bool finished) { if (!finished) return false; string text = m_edit_box.GetText(); if (text != "" && (text.Substring(0,1)) == "/") { GetRPCManager().SendRPC( "RPC_MissionServer", "HandleChatCommand", new Param1<string>(text), true); m_close_timer.Run(0.1, this, "Close"); //Exit out as we don't want to send commands in chat for others to see. return true; } return super.OnChange(w, x, y, finished); } }; если строка начинается на / то через RPC засылаем на сервер RPC передавая ей текст и завершаем функцию
      ну а если не на / вызываем нативную функцию
       
      На сервере в классе MissionServer зареген RPC "RPC_MissionServer" (используя функционал мода CF)
      void MissionServer() { GetRPCManager().AddRPC( "RPC_MissionServer", "RequestLockServer", this, SingeplayerExecutionType.Server ); m_DEXML = new DEXML; //=============RPC's==================== GetRPCManager().AddRPC( "RPC_ReadFromXML", "GetTypesXML", this, SingeplayerExecutionType.Server ); GetRPCManager().AddRPC( "RPC_MissionServer", "HandleChatCommand", this, SingeplayerExecutionType.Server ); //====================================== } Сервер получая RPC "RPC_MissionServer"   вызывает из этого класса функцию HandleChatCommand (собственно так же используется функционал мода CF)
      Как и что вдаваться в подробности смысла нет

      Вот собственно она
       
      void HandleChatCommand( CallType type, ParamsReadContext ctx, PlayerIdentity sender, Object target) { Param1<string> data; //chat string if ( !ctx.Read( data ) ) return; if (type == CallType.Server) { GetChatCommandManager().ParseCommand(data.param1,sender.GetPlainId()); } } Ну а нам осталось только перехватить то что прилетает в эту функцию и забрать себе
       
      override void HandleChatCommand(CallType type, ParamsReadContext ctx, PlayerIdentity sender, Object target) { Param1<string> data; //chat string if (!ctx.Read(data)) return; if (type == CallType.Server && sender && data.param1) { AdminMod.OnAdminChatRequestVPP(sender, data.param1); return; } } Все получили, все прилетело улетело куда надо
       
      Но!
       
      нам в нашей одминке нужно получить перса отправителя
      Попытка сделать это так:
       
      class AdminMod { void OnAdminChatRequestVPP(Playeridentity sender, string command) { PlayerBase player = GetAdminPlayerByIdentity(sender); if (player) { AdminCommand(player, command); } } PlayerBase GetAdminPlayerByIdentity(PlayerIdentity sender) { array<Man> players = new array<Man>; GetGame().GetPlayers(players); for ( int i = 0; i < players.Count(); ++i ) { if (players[i].GetIdentity() == sender && IsAdmin(sender)) { return PlayerBase.Cast(players[i]); } } return NULL; } bool IsAdmin(PlayerIdentity sender) { if (m_AdminsList.Contains(sender.GetPlainId())) { return true; } return false; } AdminCommand(PlayerBase player, string command); { //тут обрабочик и тп } }  
      Почти все норм
      Но условие
      if (players.GetIdentity() == sender)
      НИКОГДА НЕ РАБОТАЕТ
      ВООБЩЕ
       
      по итогам логгирования выяснил что у одного и того же клиента players.GetIdentity() != sender - хотя в sender прилетает как бы Identity

      Сделал проверку так
      PlayerBase GetAdminPlayerByIdentity(PlayerIdentity sender) { array<Man> players = new array<Man>; GetGame().GetPlayers(players); for ( int i = 0; i < players.Count(); ++i ) { if (players[i].GetIdentity().GetPlainId() == sender.GetPlainId() && IsAdmin(sender)) { return PlayerBase.Cast(players[i]); } } return NULL; } И все взлетело!
       
      НО!
      Как?
      Два разных Identity  и функция GetPlainId() возвращает одинаковые steam UID
       
      Вот как я Вас спрашиваю?

      Или это CF гадит...
       
    • Автор: NoNameUltima
      Есть идейка накатать приложение(в основном под android), с помощью которого игрок Вашего сервера сможет читать, и писать в игровой чат.
      Вход по UID + пароль.(таблица с UID+пасс, хранится в SQL БД).
      Пароли можно выдавать через ВК, или накидать скрипт который будет позволять их создавать в игре.
       
      Как в целом идея?)
    • Автор: danulo95
      в чем ошибка?
      Error in expression <Pos;
              while {1 == 1} do
              {
                  if (str dayz_spawnPos != str _spawnPos) then
                  >
        Error position: <dayz_spawnPos != str _spawnPos) then
                  >
        Error Undefined variable in expression: dayz_spawnpos
  • Наш выбор

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.