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


Фотография

маленький бизнес на большом острове)


Лучший Ответ vlad333000 , 17 June 2014 - 16:36



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

Извиняюсь за вопрос: Уроки по скриптописанию - дочитали до главы "Переменные. 2 часть" ? Называется "публичная переменная"

Как прибавлять и вычитать? Это то что должен знать каждый скриптер (Обязательно к просмотру)

sum1 = a + b; sum2 = a - b;
Перейти к сообщению


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

#1 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 17 June 2014 - 11:40

Есть бот в ларьке, к боту привязано с помощью AddAction пункты меню такие как "пистолет 100 рублей", он запускает скрипт на спавн пистолета. Вопрос в том, как сделать чтоб за убийство вражеских юнитов и уничтожение техники назначались единицы, которые бы суммировались и к которым можно было обратиться при покупке пистолета и они уменьшились бы на 100. Но если у игрока нет такого количества единиц, то выводилось сообщение "недостаточно средств". А так же данные единицы можно бы было увидеть путем запроса того же AddAction игрока и вывести на экран при помощи titles. Можно как то и со стандартным начислением очков, только вот оно может понижаться в случае убийства гражданского а это уже как то не правильно в финансовом смысле. Я не очень понимаю как работает EventHandler и другие обработчики событий, но чувствую они тут понадобится или, что то подобное. Просьба помочь с примером, тогда все будет яснее.

 

Это меню бота в ларьке

menu = unit addAction ["Пистолет 100 рублей", {_hndl = "" execVM "spawn.sqf"}];

 

Это скрипт spawn.sqf

_position = getMarkerPos "mark"; 
_holder = "WeaponHolderSimulated" createVehicle _position;
_holder addWeaponCargo ["hgun_Rook40_F",1];
_holder addMagazineCargo ["16Rnd_9x21_Mag",1];
_position set [2,0]; 
_holder setPosATL _position;

  • 0

#2 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 17 June 2014 - 15:54

 

Есть бот в ларьке, к боту привязано с помощью AddAction пункты меню такие как "пистолет 100 рублей", он запускает скрипт на спавн пистолета. Вопрос в том, как сделать чтоб за убийство вражеских юнитов и уничтожение техники назначались единицы, которые бы суммировались и к которым можно было обратиться при покупке пистолета и они уменьшились бы на 100. Но если у игрока нет такого количества единиц, то выводилось сообщение "недостаточно средств". А так же данные единицы можно бы было увидеть путем запроса того же AddAction игрока и вывести на экран при помощи titles. Можно как то и со стандартным начислением очков, только вот оно может понижаться в случае убийства гражданского а это уже как то не правильно в финансовом смысле. Я не очень понимаю как работает EventHandler и другие обработчики событий, но чувствую они тут понадобится или, что то подобное. Просьба помочь с примером, тогда все будет яснее.

 

Это меню бота в ларьке

menu = unit addAction ["Пистолет 100 рублей", {_hndl = "" execVM "spawn.sqf"}];

 

Это скрипт spawn.sqf

_position = getMarkerPos "mark"; 
_holder = "WeaponHolderSimulated" createVehicle _position;
_holder addWeaponCargo ["hgun_Rook40_F",1];
_holder addMagazineCargo ["16Rnd_9x21_Mag",1];
_position set [2,0]; 
_holder setPosATL _position;

 

1. Начнем с простого для денег нужна глобальная переменная, которая будет доступна всем скриптам

2. По поводу, если нехватает бобла, что мешает в скрипте выдача пистолета написать условие:

if (money>99) hen {
 Выдача пистолета
 } else {
Надпись нехватает бобла (hint "no money")
}

Сообщение отредактировал vlad333000: 17 June 2014 - 15:55

  • 1

#3 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 17 June 2014 - 16:18

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


Сообщение отредактировал Djon: 17 June 2014 - 16:21

  • 0

#4 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 17 June 2014 - 16:36   Лучший Ответ



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

Извиняюсь за вопрос: Уроки по скриптописанию - дочитали до главы "Переменные. 2 часть" ? Называется "публичная переменная"

Как прибавлять и вычитать? Это то что должен знать каждый скриптер (

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

)

sum1 = a + b; sum2 = a - b;

Сообщение отредактировал vlad333000: 17 June 2014 - 16:45

  • 1

#5 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 17 June 2014 - 16:42

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

Ещё лучше воспринимантся когда, паралельно с изучением описанного выше, на практике, разбираете на запчасти чьё то творение, ну на пример Арму 3)


  • 1

#6 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 17 June 2014 - 16:46

 

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

Ещё лучше воспринимантся когда, паралельно с изучением описанного выше, на практике, разбираете на запчасти чьё то творение, ну на пример Арму 3)

 

Золотые слова! Помню, как я издевался над ботами ))) что бы понять что как работает


  • 2

#7 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 17 June 2014 - 16:48

Сейчас еще раз прочитаю, когда читаешь и на практике это применить не получается из-за кучи сопутствующих вопросов, тогда иду сюда))) А на счет разборки Армы, так я ее ж не соберу потом))) В любом случае спасибо тебе огромное за помощь!!!
  • 0

#8 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 17 June 2014 - 16:52

Сейчас еще раз прочитаю, когда читаешь и на практике это применить не получается из-за кучи сопутствующих вопросов, тогда иду сюда))) А на счет разборки Армы, так я ее ж не соберу потом))) В любом случае спасибо тебе огромное за помощь!!!

Что б понять, как написать публичную переменную достаточно прочитать первые 2 абзаца в той главе (вводный абзац включительно) 


  • 1

#9 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 17 June 2014 - 17:11

Что просто достаточно написать money = 0 и переменная money будет создана?


  • 0

#10 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 17 June 2014 - 17:18

Что просто достаточно написать money = 0 и переменная money будет создана?

EPIC WIN!  :clapping:


  • 1

#11 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 17 June 2014 - 17:32

И тогда отнимание и прибавление будет выглядеть так: money = money - 100; money = mondy + 100; ?


  • 0

#12 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 17 June 2014 - 17:48

И все же как будет выглядеть строчка: если игрок убил юнита1 то money = money +100?

 

В таком случае в этот скрипт просто дописываем:

_position = getMarkerPos "mark"; 
_holder = "WeaponHolderSimulated" createVehicle _position;
_holder addWeaponCargo ["hgun_Rook40_F",1];
_holder addMagazineCargo ["16Rnd_9x21_Mag",1];
_position set [2,0]; 
_holder setPosATL _position;
money = money - 100; 
Так?
 
А это как я понял нужно прописать в AddAction как проверка наличия деньжат и будет работать как: если выражение в скобках верно то запуск скрипта выдачи пистолета, если не верно то текст "маловато баблишка сударь"
if (money>99) hen {
 Выдача пистолета
 } else {
Надпись нехватает бобла (hint "no money")
}

Сообщение отредактировал Djon: 17 June 2014 - 17:49

  • 0

#13 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 17 June 2014 - 17:55

if (money>99) hen {
 Выдача пистолета
 } else {
Надпись нехватает бобла (hint "no money")
}

 

Вместо "hen" не "true" должно быть?


  • 0

#14 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 17 June 2014 - 18:18

if (money>99) hen {
 Выдача пистолета
 } else {
Надпись нехватает бобла (hint "no money")
}

 

Вместо "hen" не "true" должно быть?

 

then 

 

А это как я понял нужно прописать в AddAction как проверка наличия деньжат и будет работать как: если выражение в скобках верно то запуск скрипта выдачи пистолета, если не верно то текст "маловато баблишка сударь"

if (money>99) then {
 Выдача пистолета
 } else {
Надпись нехватает бобла (hint "no money")
}

 

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

 

В таком случае в этот скрипт просто дописываем:

_position = getMarkerPos "mark"; 
_holder = "WeaponHolderSimulated" createVehicle _position;
_holder addWeaponCargo ["hgun_Rook40_F",1];
_holder addMagazineCargo ["16Rnd_9x21_Mag",1];
_position set [2,0]; 
_holder setPosATL _position;
money = money - 100; 
Так?

Угу


Сообщение отредактировал vlad333000: 17 June 2014 - 18:20

  • 1

#15 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 17 June 2014 - 18:33

 

И все же как будет выглядеть строчка: если игрок убил юнита1 то money = money +100?

В init.sqf или инициализации бота пишешь 

unit addEventHandler ["Killed",{money = money + 100; hint format ["+100 money = %1",money];}]

В итоге получим - когда убьют unit бобла станет на 100 больше и выведется сообщение о том сколько сейчас бобла (смс формата +100 = сколько сейчас бобла)


Сообщение отредактировал vlad333000: 17 June 2014 - 18:35

  • 1

#16 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 17 June 2014 - 18:35

Спасибо огромное))) Мне пока что для сингла и надо) А в MP я так понял просто другой тип переменных нужно задавать? Или по другому к ним обращаться)


  • 0

#17 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 17 June 2014 - 18:47

Спасибо огромное))) Мне пока что для сингла и надо) А в MP я так понял просто другой тип переменных нужно задавать? Или по другому к ним обращаться)

там вообще придется запиливать передачу данных от сервера к клиенту и обратно, иначе бабло отдаст игрок1 и заспавнит себе пигаль, а у игрока2 пигаля небудет видно и он не сможет его взять и так далее - машинку заспавнил 1 у 2 нет машинки =(


Сообщение отредактировал vlad333000: 17 June 2014 - 18:48

  • 0

#18 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 17 June 2014 - 19:22

Понятно) Ну пока еще мне далеко до этого)


  • 0

#19 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 17 June 2014 - 19:31

Спасибо огромное))) Мне пока что для сингла и надо) А в MP я так понял просто другой тип переменных нужно задавать? Или по другому к ним обращаться)

// при инициализации игрока
_bablo = 1000000;
player setVariable ["Bablo", _bablo, true];

// в инит бота
unit_1 addEventHandler ["Killed", {
    _bablo = (_this select 1) getVariable ["Bablo", 0];
    (_this select 1) setVariable ["Bablo", (_bablo + 100), true];
}];

// получение суммы бабла, которой распологает игрок
// "Bablo" - имя переменной присвоенной юниту, в данном случае игрок
// 0       - если переменная не определена, присвоить переменной _bablo значение 0 
_bablo = player getVariable ["Bablo", 0];

  • 0

#20 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 17 June 2014 - 19:42

 

Спасибо огромное))) Мне пока что для сингла и надо) А в MP я так понял просто другой тип переменных нужно задавать? Или по другому к ним обращаться)

// при инициализации игрока
_bablo = 1000000;
player setVariable ["Bablo", _bablo, true];

// в инит бота
unit_1 addEventHandler ["Killed", {
    _bablo = (_this select 1) getVariable ["Bablo", 0];
    (_this select 1) setVariable ["Bablo", (_bablo + 100), true];
}];

// получение суммы бабла, которой распологает игрок
// "Bablo" - имя переменной присвоенной юниту, в данном случае игрок
// 0       - если переменная не определена, присвоить переменной _bablo значение 0 
_bablo = player getVariable ["Bablo", 0];

Ухты, очень удобный способ. Автор забудь мой способ бери этот!


  • 1




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