вопросы по разработке кам ремейк
|
Krom | Дата: Пятница, 21.06.2013, 16:30 | Сообщение # 226 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| AlexandrV, смотря что ты хочешь сделать.
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| | |
Alexandr_5 | Дата: Пятница, 21.06.2013, 16:44 | Сообщение # 227 |
Воитель
Группа: Проверенные
Сообщений: 1330
Награды: 4
Репутация: 33
Статус: Offline
| Krom, Уничтожать здания при потери золотого рудника а перед этим показать сообщение. Код Procedure OnMissionStart; begin Actions.ShowMsg(0,'О нет, вы посмотрите, Афины атакуют золотой рудник. Если граждане потеряют этот рудник то и город потерян.'); end;
Procedure OnTick; var ActivDestoryedHouse:Boolean; begin If States.HouseDestroyed(4) then begin ActivDestoryedHouse:=True; end else begin ActivDestoryedHouse:=False; end; If ActivDestoryedHouse then begin Actions.HouseAddDamage(11,10); Actions.HouseAddDamage(8,10); Actions.HouseAddDamage(27,10); Actions.HouseAddDamage(0,10); end; end;
Итог: Показывает только сообщения а здания не разрушает интересно почему
Сообщение отредактировал AlexandrV - Пятница, 21.06.2013, 16:44 |
|
| | |
Krom | Дата: Пятница, 21.06.2013, 16:52 | Сообщение # 228 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Можно проще - делаешь обработчик события OnHouseDestoyed и в нем проверяешь какой именно дом уничтожился, если нужный рудник то уничтожаешь другие здания.
Советую не хранить текст в скрипте, а использовать libx, тогда можно миссию будет проще перевести на другие языки.
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| | |
Alexandr_5 | Дата: Пятница, 21.06.2013, 17:17 | Сообщение # 229 |
Воитель
Группа: Проверенные
Сообщений: 1330
Награды: 4
Репутация: 33
Статус: Offline
| Krom, А как текст считывать из Libx
Добавлено (21.06.2013, 17:03) --------------------------------------------- Код var ActivDestoryedHouse:Boolean; Procedure OnMissionStart; begin Actions.ShowMsg(0,'О нет, вы посмотрите, Афины атакуют золотой рудник. Если граждане потеряют этот рудник то и город потерян.'); end; Procedure OnHouseDestoyed(aHouseID: Integer; aDestroyerIndex: Integer); begin if (aHouseID = 4)and(aDestroyerIndex = 1) then begin ActivDestoryedHouse:=True; end else begin ActivDestoryedHouse:=False; end; end;
Procedure OnTick; begin If ActivDestoryedHouse then begin Actions.HouseAddDamage(11,10); Actions.HouseAddDamage(8,10); Actions.HouseAddDamage(27,10); Actions.HouseAddDamage(0,10); end; end;
А теперь почему не хочет разрушать здания может разрушать надо както по другому. И вообще по идеи надо указыват у какого игрока разрушать надо какое здание и сколько отнимать
Добавлено (21.06.2013, 17:17) --------------------------------------------- Решил коечто проверить
Код var ActivDestoryedHouse:Boolean; Procedure OnMissionStart; begin Actions.ShowMsg(0,'О нет, вы посмотрите, Афины атакуют золотой рудник. Если граждане потеряют этот рудник то и город потерян.'); end; Procedure OnHouseDestoyed(aHouseID: Integer; aDestroyerIndex: Integer); begin if aHouseID = 4 then begin ActivDestoryedHouse:=True; end; end;
Procedure OnTick; begin If ActivDestoryedHouse = true then begin Actions.HouseAddDamage(11,10); Actions.HouseAddDamage(8,10); Actions.HouseAddDamage(27,10); Actions.HouseAddDamage(0,10); Actions.HouseDestroy(11,True); end; end;
Оно в принципе не хочет работать. Ошибок нет но и здание не разрушает.
Сообщение отредактировал AlexandrV - Пятница, 21.06.2013, 17:20 |
|
| | |
Krom | Дата: Пятница, 21.06.2013, 17:35 | Сообщение # 230 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Похоже, что ты неверно используешь HouseAddDamage - почему там стоят константы (11, 8, 27, 0, 11), как ты их получил? Тебе надо при запуске миссии сделать что-то типа
HouseToKill1 := States.HouseAt(X, Y); чтобы получить Ид дома по координатам Х,Y
и потом внизу вот так это применять: Actions.HouseAddDamage(HouseToKill1, 10);
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| | |
Alexandr_5 | Дата: Пятница, 21.06.2013, 17:39 | Сообщение # 231 |
Воитель
Группа: Проверенные
Сообщений: 1330
Награды: 4
Репутация: 33
Статус: Offline
| Krom, я получил ID домов по этой теме
https://code.google.com/p/castlesand/wiki/MissionScriptsLookups
HouseToKill1 А какого типа переменная
и как узнать координаты здания. Даже в ремейке это сложно.
|
|
| | |
Krom | Дата: Пятница, 21.06.2013, 17:44 | Сообщение # 232 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| AlexandrV, В таблицах перечислены ID типов домов, это не тоже самое что уникальный индекс дома в игре (HouseId).
HouseId: Integer;
Узнать координаты здания можно в редакторе карт, они выводятся в левом верхнем углу рядом с миникартой. Наводишь курсор на вход дома и смотришь координаты. Точно не помню, может быть их можно брать прямо так, или нужно отнять по 1 от каждой компоненты (т.е. если вход на 45:45 то в скрипте указывать 45:45 или 44:44 - просто не помню)
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| | |
Alexandr_5 | Дата: Пятница, 21.06.2013, 17:45 | Сообщение # 233 |
Воитель
Группа: Проверенные
Сообщений: 1330
Награды: 4
Репутация: 33
Статус: Offline
| Код var ActivDestoryedHouse:Boolean; HouseToKill1:Integer; Procedure OnMissionStart; begin Actions.ShowMsg(0,'О нет, вы посмотрите, Афины атакуют золотой рудник. Если граждане потеряют этот рудник то и город потерян.'); end; Procedure OnHouseDestoyed(aHouseID: Integer; aDestroyerIndex: Integer); begin if aHouseID = 4 then begin ActivDestoryedHouse:=True; end; end;
Procedure OnTick; begin If ActivDestoryedHouse = true then begin HouseToKill1 := States.HouseAt(63, 61); Actions.HouseAddDamage(HouseToKill1,10); end; end;
или
Код var ActivDestoryedHouse:Boolean; HouseToKill1:Integer; Procedure OnMissionStart; begin Actions.ShowMsg(0,'О нет, вы посмотрите, Афины атакуют золотой рудник. Если граждане потеряют этот рудник то и город потерян.'); end; Procedure OnHouseDestoyed(aHouseID: Integer; aDestroyerIndex: Integer); begin if aHouseID = 4 then begin ActivDestoryedHouse:=True; end; end;
Procedure OnTick; begin If ActivDestoryedHouse = true then begin HouseToKill1 := States.HouseAt(62, 60); Actions.HouseAddDamage(HouseToKill1,10); end; end;
Не работает. Не разрушает координаты должны быть верными
Сообщение отредактировал AlexandrV - Пятница, 21.06.2013, 17:48 |
|
| | |
Krom | Дата: Пятница, 21.06.2013, 17:50 | Сообщение # 234 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| AlexandrV, значит надо заниматься отладкой и искать в чем причина, неправильные координаты, или тип дома, или что-то еще.
Что если ты оставишь только эту процедуру в файле а все остальное уберешь?
Procedure OnTick; var HouseToKill1: Integer; begin HouseToKill1 := States.HouseAt(63, 61); Actions.HouseAddDamage(HouseToKill1, 10); end;
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| | |
Alexandr_5 | Дата: Пятница, 21.06.2013, 17:53 | Сообщение # 235 |
Воитель
Группа: Проверенные
Сообщений: 1330
Награды: 4
Репутация: 33
Статус: Offline
| Krom, Спасибо неправильно ID здание было вот так работает. Теперь надо разобраться как узнать уничтожено ли здание или нет
Код var ActivDestoryedHouse:Boolean; HouseToKill1:Integer; Procedure OnMissionStart; begin Actions.ShowMsg(0,'О нет, вы посмотрите, Афины атакуют золотой рудник. Если граждане потеряют этот рудник то и город потерян.'); end;
Procedure OnTick; begin HouseToKill1 := States.HouseAt(62, 60); Actions.HouseAddDamage(HouseToKill1,10); end;
|
|
| | |
Krom | Дата: Пятница, 21.06.2013, 17:55 | Сообщение # 236 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| AlexandrV, в остальном все так же останется - пишешь код в OnHouseDestroyed
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| | |
Alexandr_5 | Дата: Пятница, 21.06.2013, 18:28 | Сообщение # 237 |
Воитель
Группа: Проверенные
Сообщений: 1330
Награды: 4
Репутация: 33
Статус: Offline
| Код var ActivDestoryedHouse:Boolean; HouseToKill1:Integer; Procedure OnMissionStart; begin Actions.ShowMsg(0,'О нет, вы посмотрите, Афины атакуют золотой рудник. Если граждане потеряют этот рудник то и город потерян.'); end; Procedure OnHouseDestoyed(aHouseID: Integer; aDestroyerIndex: Integer); begin if aHouseID = States.HouseAt(36, 49) then begin ActivDestoryedHouse:=True; end; end;
Procedure OnTick; begin if ActivDestoryedHouse = true then begin HouseToKill1 := States.HouseAt(62, 60); Actions.HouseAddDamage(HouseToKill1,10); end; end;
Почему он переменной не возвращает True когда здание уничтожено
Добавлено (21.06.2013, 18:09) --------------------------------------------- Понял ошибку. Я делал проверку на разрушен ли железный рудник а надо на золотой а не железный
Код var ActivDestoryedHouse:Boolean; HouseToKill1:Integer; Procedure OnMissionStart; begin Actions.ShowMsg(0,'О нет, вы посмотрите, Афины атакуют золотой рудник. Если граждане потеряют этот рудник то и город потерян.'); end; Procedure OnHouseDestoyed(aHouseID: Integer; aDestroyerIndex: Integer); begin if aHouseID = 5 then begin ActivDestoryedHouse:=True; end; end;
Procedure OnTick; begin If ActivDestoryedHouse = true then begin HouseToKill1 := States.HouseAt(62, 60); Actions.HouseAddDamage(HouseToKill1,10); end; end;
и так тоже не работаетДобавлено (21.06.2013, 18:28) --------------------------------------------- Решил проблемму Код var HouseToKill1:Integer; Procedure OnMissionStart; begin Actions.ShowMsg(0,'О нет, вы посмотрите, Афины атакуют золотой рудник. Если граждане потеряют этот рудник то и город потерян.'); end;
Procedure OnTick; begin If States.HouseAt(37, 50) <= 0 then begin HouseToKill1 := States.HouseAt(62, 60); Actions.HouseAddDamage(HouseToKill1,10); end; end;
Но это не правильно. Если Здания нет в этом месте это не означает что его вообще нет впрочем мне это сейчас подходит так как нужно узнать уничтожено ли определенное здание
Сообщение отредактировал AlexandrV - Пятница, 21.06.2013, 18:13 |
|
| | |
Alexandr_5 | Дата: Вторник, 25.06.2013, 12:20 | Сообщение # 238 |
Воитель
Группа: Проверенные
Сообщений: 1330
Награды: 4
Репутация: 33
Статус: Offline
| Код Const Timers1:integer=10; var HouseToKill1:Integer; Activ1,Activ2:Boolean; Procedure OnMissionStart; begin Actions.ShowMsg(0,'<$0>'); end;
Procedure OnTick; begin If (States.HouseAt(37, 50) <= 0)And(Activ1 = False) then begin Activ1 := False; Activ2:=True; end; If Activ2 = true then begin If Timers1 > 0 then begin Timers1:=Timers1-1; end else begin HouseToKill1 := States.HouseAt(62, 60); Actions.HouseAddDamage(HouseToKill1,3); end; end; end;
2 проблеммы
1 Почему это текст не считывается
2 Эта проблема возникла позже когда я добавил константу и переделал код
[Error] (1:14): is ('=') expectedДобавлено (25.06.2013, 12:20) --------------------------------------------- Скажите мне все параметры Libx за кроме [$FFFFFF] и |
Сообщение отредактировал AlexandrV - Суббота, 22.06.2013, 12:16 |
|
| | |
Jery | Дата: Вторник, 25.06.2013, 19:34 | Сообщение # 239 |
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
| Воу воу я конечно не знаю как там в паскале обстоят дела, но наверно константа на то и константа, что ее значение присваивается при объявлении и больше не изменяется. А у тебя Timers1:=Timers1-1; и еще и объявлена неправильно.
«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
Сообщение отредактировал Jery - Вторник, 25.06.2013, 19:36 |
|
| | |
Alexandr_5 | Дата: Суббота, 27.07.2013, 19:58 | Сообщение # 240 |
Воитель
Группа: Проверенные
Сообщений: 1330
Награды: 4
Репутация: 33
Статус: Offline
| Видно да я тоже об этом подумал. Хотя без разницы. Миссия сдохла.
Добавлено (25.06.2013, 23:25) --------------------------------------------- Есть скрипт для проверки какому игроку принадлежит определенное здание
Добавлено (26.06.2013, 00:35) --------------------------------------------- Код Var t1:Array[1..4] of Integer; b1,b2:Boolean; b3:Array[1..4] of boolean; procedure OnMissionStart; begin b1:=True; b2:=False; b3[1]:=False; b3[2]:=False; b3[3]:=False; b3[4]:=True; t1[1]:=10; t1[2]:=20; t1[3]:=30; t1[4]:=40; end; Procedure OnTick; begin if States.PlayerDefeated(1) then begin Actions.GiveHouse(2,11,139,4); if (States.HouseOwner(States.HouseAt(139,4)) = 2)and(b1 = true) then begin Actions.ShowMsgGoto(0,139,4,'<$0>'); b1:=False; b2:=True; end; If (States.UnitAt(135,3) = 0)and(b2 = true) then begin Actions.ShowMsg(0,'<$4>'); b3[1]:=True; b3[2]:=True; b3[3]:=True; b3[4]:=True; b2:=False; end; If (t1[1] > 0)and(b3[1]=true) then begin t1[1]:=t1[1]-1; end; If (t1[1] <= 0)and(b3[1]=true) then begin Actions.ShowMsg(0,'<$1>'); b3[1]:=False; end; If (t1[2] > 0)and(b3[2]=true) then begin t1[2]:=t1[2]-1; end; If (t1[3] <= 0)and(b3[3]=true) then begin Actions.ShowMsg(0,'<$2>'); b3[3]:=False; end; If (t1[3] > 0)and(b3[3]=true) then begin t1[3]:=t1[3]-1; end; If (t1[3] <= 0)and(b3[3]=true) then begin Actions.ShowMsg(0,'<$3>'); b3[3]:=False; end; If (t1[4] > 0)and(b3[4]=true) then begin t1[4]:=t1[4]-1; end; If (t1[4] <= 0)and(b3[4]=true) then begin Actions.PlayerWin([0],true); b3[4]:=False; end; end; end;
Вот скрипт написал для первой миссии. Вродебы должно быть все верно. надеюсь ниче не перепутал.Добавлено (27.06.2013, 20:13) --------------------------------------------- Андрей проверь скрипт. Не увеен что будет работать а сам проверить не могу так как миссию не могу пройти
Код Var t1:Array[1..4] of Integer; b1,b2:Boolean; b3:Array[1..4] of boolean; procedure OnMissionStart; begin b1:=True; b2:=False; b3[1]:=False; b3[2]:=False; b3[3]:=False; b3[4]:=True; t1[1]:=10; t1[2]:=20; t1[3]:=30; t1[4]:=40; end; Procedure OnTick; begin if States.PlayerDefeated(1) then begin Actions.GiveHouse(2,11,139,4); if (States.HouseOwner(States.HouseAt(139,4)) = 2)and(b1 = true) then begin Actions.ShowMsgGoto(0,139,4,'<$0>'); b1:=False; b2:=True; end; If (States.UnitAt(135,3) = 0)and(b2 = true) then begin Actions.ShowMsg(0,'<$4>'); b3[1]:=True; b3[2]:=True; b3[3]:=True; b3[4]:=True; b2:=False; end; If (t1[1] > 0)and(b3[1]=true) then begin t1[1]:=t1[1]-1; end; If (t1[1] <= 0)and(b3[1]=true) then begin Actions.ShowMsg(0,'<$1>'); b3[1]:=False; end; If (t1[2] > 0)and(b3[2]=true) then begin t1[2]:=t1[2]-1; end; If (t1[3] <= 0)and(b3[3]=true) then begin Actions.ShowMsg(0,'<$2>'); b3[3]:=False; end; If (t1[3] > 0)and(b3[3]=true) then begin t1[3]:=t1[3]-1; end; If (t1[3] <= 0)and(b3[3]=true) then begin Actions.ShowMsg(0,'<$3>'); b3[3]:=False; end; If (t1[4] > 0)and(b3[4]=true) then begin t1[4]:=t1[4]-1; end; If (t1[4] <= 0)and(b3[4]=true) then begin Actions.PlayerWin([0],true); b3[4]:=False; end; end; end; Добавлено (27.07.2013, 19:58) --------------------------------------------- Хочу узнать какие это языки Код [Save Language] MaxSL=22 SL0=eng SL1=rus SL2=ukr SL3=bel SL4=ptb SL5=bul SL6=chn SL7=cze SL8=dut SL9=est SL10=fre SL11=ger SL12=hun SL13=ita SL14=jpn SL15=lit SL16=nor SL17=pol SL18=rom SL19=svk SL20=spa SL21=swe SL22=tur MaxGlawSL=1 GlawSL0=0 GlawSL1=1 eng, rus, ukr Я знаю а вот что значат остальные. Буду очень признателен если вы к каждому языку предоставите флаг или имя иконки флага из ремейка.
Это параметры для выбора сколько переводов будет сохранено.
Сообщение отредактировал AlexandrV - Среда, 26.06.2013, 00:42 |
|
| |
|