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

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

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

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

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

Передача параметров в функцию и класс Param. Need help!

Ситуация такая

В функцию надо передать 27 разнашерстных параметров

если указывать больше 19 при запуске сервер крашит без крашлога и тп

Передавать через массивы? вариант, но хотелось бы сделать красиво-красиво

 

Взялся за класс Param

прикинул - Param'сы бывают от 1 до 5 параметровые

Значит можно передать 5 шт Param5 и 1 Param2

 

Взялся тестить

void FormingAreas()
{
		private ref Param5<string, int, vector, float, int> MainParams;
		MainParams									= new Param5<string, int, vector, float, int>("", 0, vector.Zero, 0.0, 0);
		MainParams.param1 								= "AREA 1";
		MainParams.param2 								= 1;
		MainParams.param3 								= vector.Zero;
		MainParams.param4 								= 1.1;
		MainParams.param5 								= 2;

        AddAreaParams(MainParams);
}

 

Собственно ошибка возникает тут

 

void AddAreaParams(Param p)
 {
  ref Areas Area        = new ref Areas;

  //AreaMainParams
  Param AreaMainParams  = Param.Cast(p);
  Area.name         	= AreaMainParams.param1; //318 строка
  Area.id         	= AreaMainParams.param2;
  Area.center       	= AreaMainParams.param3;
  Area.center[1]    	= GetGame().SurfaceY(Area.center[0], Area.center[2]);
  Area.radius       	= AreaMainParams.param4;
  Area.maxplayers      	= AreaMainParams.param5;

Тут про компиляции ошибочка

$CurrentDir://mpmissions//dayzOffline.chernarusplus//_MOD//StrikeAreas//StrikeAreasClass.c(318): Can't find variable 'param1'

 

Можно конечно определить MainParams в классе и передавать через него вызывая AddAreaParams без параметров

 

Но хотелось бы разобраться именно с таким вариантом

 

Спасибо!

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

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


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

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

  • 0
44 минуты назад, BorizzK сказал:

Передавать через массивы? вариант, но хотелось бы сделать красиво-красиво

 

а через массивы не красиво-красиво?

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


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





  • 0

AntonivkA 

Не красиво

Ключевое разнотипность

Тип Param  в нативных классах много где используется именно для передачи различных РАЗНОТИПНЫХ параметров, поэтому хочу использовать тименно его.

 

 

 

 

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


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

Все

Разобрался

Усе получилось

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: thessend
      Начну сначала.
      У меня стоит радиационная зона на скриптах перенесенная в мод( с добавлением агента и лечением) собственно при нахождении в зоне накапливаются агенты(логично,да) и есть от этих агентов лечение, тоже добавленное на основе витаминок сделанное которое при использовании убирает N кол-во агентов. Их в пачке 10 штук. 
      Суть темы в том, что при использовании этой самой таблетки остальные таблетки становятся зараженными сальмонеллой. Откуда она берется я так и не смог выяснить вообще. 
      Если нужна еще какая то информация - пишите, дополню. 
       
       
    • Автор: BorizzK
      В проверке где убит игрок
      Если игрок убит в сейфзоне
      Телепортим убивца на лобное место
      Убираем ему весь лут
      Публично казним!
       
      ну это потом
       
      пока просто p_Killer.SetHealth(0);
       
      Все как бы почти хорошо, кроме одного момента
      Функцию нужно вызвать не сразу, а с задержкой секунд 10
       
      что-то типа
      GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(p_Killer.KaznFunction, 10000, true);
       
      но это будет вызывать KaznFunction каждые 10 сек, а мне надо 1 раз
       
      Вопрос - как?
       
      Всем спасибо!))
       
      P.S.
      понятно что в своей функции я теоретически могу
      GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(p_Killer.KaznFunction);
       
       
    • Автор: 123new
      Автор скрипта: http://s-platoon.ru/profile/48-nonameultima/
      Все благодарности за этот скрипт непосредственно автору скрипта, не мне!

       
      Установка:
      1. Описание: Создаем собственный класс, для сохранения логов.
      Код класса:
      class Ultima_Server_Class_Logs { private FileHandle fhandle; void Ultima_Server_Class_Logs() { } void ~Ultima_Server_Class_Logs() { } void SaveLog(string fName, string fLine) { if ( !FileExist(fName) ) { fhandle = OpenFile(fName, FileMode.WRITE); } else { fhandle = OpenFile(fName, FileMode.APPEND); } if ( fhandle == 0 ) { Print("[#Ultima]: [Журналы]: Не удалось открыть файл для записи: " + fName); Print("[#Ultima]: [Журналы]: [Запись]: " + fLine); return; } FPrintln(fhandle, fLine); CloseFile(fhandle); } } 2. Данный файл сохраняем под именем класса:
      Ultima_Server_Class_Logs.c
      И помещаем в папку:
      ....\DayZServer\scripts\5_Mission\mission
       
      Пример использования:
      *Для примера берем файл:
      missionServer.c
      В область переменных добавляем:
      private ref Ultima_Server_Class_Logs Log = new Ultima_Server_Class_Logs(); И далее в любой процедуре, можем логгировать события.
      К примеру так:
      Log.SaveLog("$profile:MyLogFile.txt", "Записываем строку");  
      Добавлено от 123new:
      Если у вас нет папки scripts в папке с сервером игры, откройте папку dta, распакуйте папку scripts из pbo-файла scripts.pbo и переместите в папку с сервером.
      Чтобы папка считывалась сервером, необходимо добавить параметр запуска сервера '-FilePatching'.
      Чтобы запись в файлы работала, необходимо добавить параметр запуска сервера '-scrAllowFileWrite'
    • Автор: DrTauren
      Собственно, из названия понятно, что в этом гайде мы научимся отключать уровень стамины игрока, отключать усталость

      Инструкция:
      1) Находим файл dta/scripts.pbo и распаковываем его при помощи PBO Manager и копируем только что распакованную папку scripts в корневую папку сервера
      2) Открываем файл scripts/3_Game/constants.c и изменяем этот код под себя:
      const int STAMINA_DRAIN_STANDING_SPRINT_PER_SEC = 5; //в единицах (сколько единиц выносливости отбавляется при ускорении) const int STAMINA_DRAIN_CROUCHED_SPRINT_PER_SEC = 1; //в единицах (сколько единиц выносливости отбавляется при ускорении на корточках) const int STAMINA_DRAIN_PRONE_SPRINT_PER_SEC = 3; //в единицах (сколько единиц выносливости отбавляется при ускорении лёжа) const float STAMINA_DRAIN_HOLD_BREATH = 0.2; //в единицах (сколько единиц выносливости отбавляется при задержке дыхания) const int STAMINA_DRAIN_JUMP = 20; //в единицах (сколько единиц выносливости отбавляется при прыжке) const int STAMINA_DRAIN_MELEE_LIGHT = 5; //в единицах (сколько единиц выносливости отбавляется при лёгком ударе в ближнем бою) const float STAMINA_DRAIN_MELEE_HEAVY = 20; //в единицах (сколько единиц выносливости отбавляется при сильном ударе в ближнем бою) const int STAMINA_DRAIN_MELEE_EVADE = 8; //в единицах (сколько единиц выносливости отбавляется при уклонении) Таким образом мы можем отключить усталость игрока, стамина всегда будет максимальная. Для этого нужно всего лишь установить все параметры на значение 0
       
    • Автор: MRX818
      как добавить свой класс при спавне.(для випок)
      я так понял надо в файле classConfig ?
      например так ["VIP Снайпер","FR_Assault_GL","SurvivorWcombat_DZ",["30Rnd_556x45_Stanag",2],["M4A1_AIM_CAMO"],"",[],[],0,20000,0], (а где прописывать для отдельного игрока).
  • Наш выбор

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

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

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