[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 712367»
Архив - только для чтения
Форум » Гильдии » Гильдия картоделов » Вопросы по скриптам и динам. скриптам.
Вопросы по скриптам и динам. скриптам.
AlexandrVДата: Среда, 30.10.2013, 15:18 | Сообщение # 1
Гвардеец
Группа: Проверенные
Сообщений: 1305
Награды: 4
Репутация: 29
Статус: Offline
Тема создана мной для обсуждения, вопросов и разговоров по любым скриптам игры KAM

Собственно 1 вопрос.

Нужно при создании солдата записывать ID создаваемой армии
Как это сделать если число создаваемых солдат неизвестно какой размер задать массиву или как сделать безразмерный массив.


Скайп - borisov.alexandr.7_1
 
JeryДата: Суббота, 02.11.2013, 05:42 | Сообщение # 2
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Во-первых в скриптах нельзя создавать солдат, можно создавать сразу армию солдат функцией GiveGroup, которая при успешном создании армии солдат вернет ID этой армии либо вернет -1 если армию невозможно было создать.
Во-вторых про изменение размеров массива, в паскале есть стандартные функции для этого попробуй использовать их, насколько я помню они работали.


«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
 
AlexandrVДата: Суббота, 02.11.2013, 12:20 | Сообщение # 3
Гвардеец
Группа: Проверенные
Сообщений: 1305
Награды: 4
Репутация: 29
Статус: Offline
Jery
1 Я знаю но можно сконвентировать IDGroup в IDUnit 
2 напиши мне эти команды. Я не изучал паскаль знаю только денамические массивы но там нужно задавать размер а каждый новый размер будет рушить те ячейки которые там есть тоесть стирать его. Можно использовать указатели но в них до сих пор не могу разобраться.
GroupMember - Возвращает ID солдата в группе но вопрос а как туда записать туда слдата вообще как они нумеруются например если 1 солдат то туда 0 ставить а если их 9 в 3 ряда построены.


Скайп - borisov.alexandr.7_1
 
JeryДата: Суббота, 02.11.2013, 17:00 | Сообщение # 4
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Че куда записывать? groupMember возвращает ID солдата из группы. В группе все солдаты пронумерованы от 0 до n-1. Нулевой тот что с флагом все остальные хрен знает. Нельзя добавлять солдат в группы можно только объединять группы или разделять группы. Можно объединить группу из одного солдата с большой группой.

По поводу массивов, как только заканчивается один массив создавай новый в котором больше ячеек и копируй туда старый. Можешь сделать 2 массива, один например на 100 ячеек другой на 0 и сделать глобальный счетчик, который показывает сколько ячеек занято. Как только он равен 100, ты делаешь второй массив равным 200 ячеек и копируешь туда 100 значений из первого, делаешь первый массив из 0 ячеек. Потом если кончается второй делаешь первый на 400 и обнуляешь второй и тд.

GroupID нельзя сконвертировать в UnitID, это семантически разные вещи. Из группы с некоторым GroupID можно вытащить UnitID какого-то солдата используя GroupMember.


«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
 
AlexandrVДата: Суббота, 02.11.2013, 17:51 | Сообщение # 5
Гвардеец
Группа: Проверенные
Сообщений: 1305
Награды: 4
Репутация: 29
Статус: Offline
Цитата Jery ()
GroupID нельзя сконвертировать в UnitID, это семантически разные вещи. Из группы с некоторым GroupID можно вытащить UnitID какого-то солдата используя GroupMember.

Я знаю что нельзя я про вытащить и имею в ввиду.

Просто 1 команда это GroupID а вторая это номер солдата но как его узнать как они там нумеруются допустим есть число войно 9 в 3 ряда

к примеру:

SSS
SSS
SSS

И как они тут нумеруются


Скайп - borisov.alexandr.7_1
 
JeryДата: Воскресенье, 03.11.2013, 01:27 | Сообщение # 6
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Я не знаю и по-моему это совсем не важно, потому что разделить группу на одного солдата и остальную часть за 1 команду никак нельзя. Только группу из 2х или 3х человек. Нумеруются они как-то от 0 до 8.

«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)

Сообщение отредактировал Jery - Воскресенье, 03.11.2013, 01:31
 
AlexandrVДата: Среда, 06.11.2013, 15:02 | Сообщение # 7
Гвардеец
Группа: Проверенные
Сообщений: 1305
Награды: 4
Репутация: 29
Статус: Offline
У меня возникли вопросы. Сначала скажу вот процедура которая собственно и пересоздает массив без потери данныйх

Код
Procedure Add_Sto_Array;
begin
   SetLength(ArrayMasivArmy2,Length(ArrayMasivArmy1));
   ArrayMasivArmy2:=ArrayMasivArmy1;
   SetLength(ArrayMasivArmy1,Length(ArrayMasivArmy2)+100);
   ArrayMasivArmy1:=ArrayMasivArmy2;
end;


Нужны 2 функции.

1 Функция

Пример типа: Type TBoolMods=(asTrue, asFalse, asError);

1) - Нужно чтобы она возвращала asTrue своего типа если все ячейки не равняются -1
2) - Нужно чтобы она возвращала asFalse своего типа если не все не равняются -1
3) - Нужно чтобы она возвращала asError своего типа если некоторые ячейки скажем так в разброс идут то -1 то id юнита

2 Функция

Собственно чтобы она востанавливала массив чтобы все id юнитов шли по порядку а не в разброс.

Также по поводу как идет нумерация юнитов в армии. Дабы получить id юнита в армии надо знать его номер и id группы.

С помощью всего этого я хочу сделать настоящий вирус. Скажем так Чуму. Усложнит мою миссию да и станет более интересной.


Скайп - borisov.alexandr.7_1
 
JeryДата: Четверг, 07.11.2013, 07:25 | Сообщение # 8
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Я почитал про SetLenght по моему достаточно только SetLength(ArrayMasivArmy1,Length(ArrayMasivArmy1)+100);

1 функция выглядит как ненужный хлам.
2 функция называется сортировкой http://ru.wikipedia.org/wiki....A%D0%B0 тут есть реализация прямо на паскале. Но тоже не знаю зачем она тебе нужна.


«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)

Сообщение отредактировал Jery - Четверг, 07.11.2013, 07:25
 
AlexandrVДата: Четверг, 07.11.2013, 18:11 | Сообщение # 9
Гвардеец
Группа: Проверенные
Сообщений: 1305
Награды: 4
Репутация: 29
Статус: Offline
Цитата Jery ()
1 функция выглядит как ненужный хлам.

Я еще вчера вечером проверил на Delphi и переделал/

Цитата Jery ()
2 функция называется сортировкой http://ru.wikipedia.org/wiki....A%D0%B0 тут есть реализация прямо на паскале. Но тоже не знаю зачем она тебе нужна.

Как это зачем ведь будет реализована смерть солдатов в армии и нужно чтобы массив всегда был сортирован от меньшего к большему тоесть чтобы -1 шло сразу после id номеров.

Хотя в принципе смысла в создании массива нет есть только в том чтобы сделать собственную обработку на Чуму.
Из массива через определенное количество времени будет выбераться случайно число из 100 и браться id юнита которого мы будем убивать. Также за эту смерть если умер юнит будет отниматься 1 процент миссии. При достижении статуса миссии до 0 миссия будет считаться проигранной. Но для этого надо чтобы все числа в массиве шли по порядку как легкий вариант от большего к меньшему тоесть чтобы все числа с -1 были после id номеров.


Скайп - borisov.alexandr.7_1
 
JeryДата: Четверг, 07.11.2013, 19:44 | Сообщение # 10
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Что мешает рандомить число от 1 до размера массива, и проверять выпала ли ячейка -1. Если выпала то рандомить заного, а если нормальная ячейка то убивать юнита и уменьшать свои счетчики.

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

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


«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)

Сообщение отредактировал Jery - Четверг, 07.11.2013, 19:51
 
AlexandrVДата: Четверг, 07.11.2013, 20:03 | Сообщение # 11
Гвардеец
Группа: Проверенные
Сообщений: 1305
Награды: 4
Репутация: 29
Статус: Offline
Jery, Не напишешь скрипт. Врядли я смогу это сделать.

Скайп - borisov.alexandr.7_1
 
JeryДата: Пятница, 08.11.2013, 06:30 | Сообщение # 12
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Нет не напишу

«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
 
AlexandrVДата: Среда, 13.11.2013, 21:01 | Сообщение # 13
Гвардеец
Группа: Проверенные
Сообщений: 1305
Награды: 4
Репутация: 29
Статус: Offline
Скажите пожалуйста, а в ночной версии ремейка появился скрипт который бы позволял создавать армию с появлением ее из казармы, школы, склада. А то неоткуда появление короля это будет смотреться глупо.

Скайп - borisov.alexandr.7_1
 
JeryДата: Среда, 13.11.2013, 22:03 | Сообщение # 14
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Хотел выругаться. С появлением кого?

«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
 
KromДата: Четверг, 14.11.2013, 09:10 | Сообщение # 15
Воитель
Группа: Супер Модераторы
Сообщений: 2513
Награды: 25
Репутация: 153
Статус: Offline
Jery, "с появлением ее из казармы, школы, склада" "короля" видимо ...

AlexandrV, можно создавать юнитов в любом удобном месте, хоть у школы хоть у дубильни.


Нашли баг в КаМ Ремейке? Отправьте отчет на contact@kamremake.com с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
 
Форум » Гильдии » Гильдия картоделов » Вопросы по скриптам и динам. скриптам.
Страница 1 из 712367»
Поиск: