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
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;
	};

 

Edited by Sovest2 (see edit history)

Share this post


Link to post
Share on other sites

5 answers to this question

Recommended Posts

  • 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. сколько жеж лет эту говносистему пытаются в норму привести?))))

 

 

 

Share this post


Link to post
Share on other sites



  • 0

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

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

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

 

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

Share this post


Link to post
Share on other sites
  • 0
Цитата

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

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

 

Вопрос решен

Edited by Sovest2 (see edit history)

Share this post


Link to post
Share on other sites
  • 0
32 минуты назад, Sovest2 сказал:

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

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

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

 

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

Share this post


Link to post
Share on other sites
  • 0

 

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

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

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

 

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

 

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

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

  • Similar Content

    • By Miduznya
      Всем привет, чет не нашел не где как можно в ручную обновить через .bat или .cmd файл
      если есть у кого такой поделитесь плиз. Прошу сильно не пинать если есть такая тема дайте ссылку
    • By 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 гадит...
       
    • By NoNameUltima
      Есть идейка накатать приложение(в основном под android), с помощью которого игрок Вашего сервера сможет читать, и писать в игровой чат.
      Вход по UID + пароль.(таблица с UID+пасс, хранится в SQL БД).
      Пароли можно выдавать через ВК, или накидать скрипт который будет позволять их создавать в игре.
       
      Как в целом идея?)
    • By 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
  • Our picks

×
×
  • 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.