Хоть ты, надеюсь АИ делаешь для своих карт? Ща посмотрю чё за мапка.
Добавлено (11 Ноября 2012, 20:53:14) --------------------------------------------- Бууууууу! Ну какого хера, опять с мобами воевать? Это так трудно? Просите меня или Лавсона... И я не вижу там 30 героев, порядка 13 их там.
Naturekid, Это бета 4. Rapture, опять бетвен дист. балуется. поправил. Ланд. Dreii скачал с хайва) Тут ещё много героев поправить надо, точно Миранамэ и Арк-Арак'a.
Сообщение отредактировал [HoBu4oK] - Понедельник, 12 Ноября 2012, 04:28:14
Ty3uK, нет его уже давно нету, описание писал я. Он сделал основу нашел ланд, сделал 2-ух героев, потом стали делать героев по очереди, еще он FICS пихнул, а потом опять в мост ушел. А я где-то неделю назад сел за неё сделал 4 героя, новый айтем ну короче продолжил.
Сообщение отредактировал [HoBu4oK] - Понедельник, 12 Ноября 2012, 10:21:04
[HoBu4oK], 1 делом в любую мапу надо запилить АИ. Уже будет на 2.5 уровня выше казаться. А так, попадись твоя карта мне в очередном паке карт, скачанных с эпиквара - я бы мб успел только заметить удобство покупок всего через 1 магазин и закрыл бы её и удалил. Карта без АИ - не карта, а набросок. И создаёт нерадостные впечатления о возможностях автора. Вот так. Даже Tower Defence должны содержать АИ, хотя как вариант вообще предназначены для игры в одиночку.
Написание АИ не является сколько-нибудь сложным занятием. Простейший код совершенствуется путём экспериментов - игр с этими ботами... Базовый АИ который Бежит воевать на лайн, отступает при малом ХП и покупает фиксированный набор предметов пишется вообще минут за 6. А сдлеав ИИ хотя бы для 1 карты можно уже тупо копипастить, делая лишь изменения по предметам локациям и т.п. И преувеличений тут нет. Я например начинал с того что ковырнул 2.5 corridors beta version ещё в триггерах и не шарил, почти 0 был. Можешь глянуть её на епикваре, она открытая, могу как вариант с какой-нить своей мапы показать секцию триггеров АИ Некоторые настолько фанатично относятся к этому делу, что пишут ИИ для каждого перса детально, но по мне это лишнее. Небольшую скидку на тип юнита мы делаем при закупах, ну и ещё где-то там. А так универсализируем и помещаем всё это страшное занятие в 10-12 триггеров как максимум.
Добавлено (12 Ноября 2012, 13:15:28) ---------------------------------------------
Quote (|HoBu4oK|)
Блин, я как овошь с идеями, полный 0 оригинального нечего нелезит просто здохни.
Хочешь совет? Распакуй Assets.zip игры Puzzle Quest и собезъянничай чё-нить оттуда. Играл же наверное? Почерпнуть всяких идеек с этой игрухи море можно.
не особо сложно, но и не очень легко. на гуи накатать можно, но вот когда сидишт и выверяешь свой код до мелочей, на написание базовых команд уходит не менее 30 минут. у меня, ибо я не умею его продумывать
Naturekid, Неиграл) Да щяс ешё минут 5 посижу и придумаю что-то фиговое, запилю подумаю, что норм, мб нватури норм дудет)
Добавлено (12 Ноября 2012, 13:24:53) ---------------------------------------------
Quote (Ty3uK)
продумывать
Ахаха. У меня такой бардак в коде что, не то что продумать, короче говоря открыл ты мою карту глянул триггеры героев, закрыл. Самый афигеный код.
Code
scope KoldynOne {
void RemoveAbillity() { timer t = GetExpiredTimer();int id = GetHandleId(t);unit c = LoadUnitHandle(Hash,id,0); UnitRemoveAbility(c,'A03D');DestroyTimer(t);FlushChildHashtable(Hash,id);c = null;t = null; }
void KoldynHp() { timer t = GetExpiredTimer();int id = GetHandleId(t);unit u = LoadUnitHandle(Hash,id,0),d = LoadUnitHandle(Hash,id,1) real x1 = GetUnitX(d), y1 = GetUnitY(d); real x2 = GetUnitX(u), y2 = GetUnitY(u); real angle = Atan2(y2-y1,x2-x1)+30*bj_DEGTORAD; real x = x1 + 30. * Cos(angle), y = y1 + 30. * Sin(angle); if DistanceBetweenCoords(x1,y1,x2,y2) > 35 { SetUnitX(d,x);SetUnitY(d,y);SetUnitFacing(d,angle*bj_RADTODEG); else FadingTextSingle(GetOwningPlayer(u),"+"+I2S(R2I((GetWidgetLife(u)*(3.+2.*GetUnitAbilityLevel(u,'A03C')))*.01)),150, 0, 50,GetUnitX(u), GetWidgetY(u),.2,.4,.75) SetWidgetLife(u,GetWidgetLife(u)+(GetWidgetLife(u)*(3.+2.*GetUnitAbilityLevel(u,'A03C')))*.01) PauseTimer(t);DestroyTimer(t);RemoveUnit(d);FlushChildHashtable(Hash,id); } t = null u = null d = null }
callback onUnitSpellEffect('A03C') { timer t = CreateTimer();int id = GetHandleId(t);unit u = GetTriggerUnit();unit c = GetSpellTargetUnit() unit d = CreateUnit(GetOwningPlayer(u),'h00N',GetUnitX(u),GetUnitY(u),Atan2(GetSpellTargetY()-GetWidgetY(u),GetSpellTargetX()-GetWidgetX(u))*57.29582 7) SaveUnitHandle(Hash,id,0,u);SaveUnitHandle(Hash,id,1,d);SaveUnitHandle(Hash,id,2,c); TimerStart(t,.04,true,\ lambda void() { timer t = GetExpiredTimer();int id = GetHandleId(t); unit u = LoadUnitHandle(Hash,id,0),c = LoadUnitHandle(Hash,id,2), d = LoadUnitHandle(Hash,id,1); real x1 = GetUnitX(d), y1 = GetUnitY(d); real x2 = GetUnitX(c), y2 = GetUnitY(c); real angle = Atan2(y2-y1,x2-x1)+30*bj_DEGTORAD; real x = x1 + 30. * Cos(angle), y = y1 + 30. * Sin(angle); if DistanceBetweenCoords(x1,y1,x2,y2) > 35 { SetUnitX(d,x);SetUnitY(d,y);SetUnitFacing(d,angle*bj_RADTODEG); else DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\DeathCoil\\DeathCoilSpecialArt.mdl",c,"chest"));UnitAddAbility(c,'A03D'); FadingTextSingle(GetOwningPlayer(u),I2S(R2I(GetWidgetLife(c)*(5.+5.*GetUnitAbilityLevel(u,'A03C'))*.01))+"!",150, 0, 130,GetWidgetX(c), GetWidgetY(c),.3,.6,1.); UnitDamageTarget(u,c,GetWidgetLife(c)*(5.+5.*GetUnitAbilityLevel(u,'A03C'))*.01,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERS A L , null); PauseTimer(t);DestroyTimer(t);FlushChildHashtable(Hash,id); timer nt = CreateTimer();int nid = GetHandleId(nt);SaveUnitHandle(Hash,nid,0,u);SaveUnitHandle(Hash,nid,1,d); timer ct = CreateTimer();int cid = GetHandleId(ct);SaveUnitHandle(Hash,cid,0,c); TimerStart(nt,.04,true,function KoldynHp);TimerStart(ct,3.,false,function RemoveAbillity); } }) } }
Code
scope KoldynTwo {
private void AnimSpeed(unit u,real time){ timer t = CreateTimer();SaveUnitHandle(Hash,GetHandleId(t),0,u);SetUnitTimeScale(u,.05) TimerStart(t,time,false,\ lambda void(){ timer t = GetExpiredTimer();SetUnitTimeScale(LoadUnitHandle(Hash,GetHandleId(t),0),1.);DestroyTimer(t);FlushChildHashtable(Hash,GetHandleId(t)); }) }
callback onUnitSpellEffect('A03E') { timer t = CreateTimer();int id = GetHandleId(t);unit u = GetTriggerUnit(),c = GetSpellTargetUnit();SaveUnitHandle(Hash,id,2,c);SaveReal(Hash,id,4,0); unit d = CreateUnit(GetOwningPlayer(u),'h00O',GetUnitX(u),GetUnitY(u),Atan2(GetSpellTargetY()-GetWidgetY(u),GetSpellTargetX()-GetWidgetX(u))*57.29582 7) SaveUnitHandle(Hash,id,0,u);SaveUnitHandle(Hash,id,1,d); if UnitAddAbility(d,'Amrf') { UnitRemoveAbility(d,'Amrf') } TimerStart(t, .02, true,\ lambda void(){ timer t = GetExpiredTimer();int id = GetHandleId(t);unit u = LoadUnitHandle(Hash,id,0),d = LoadUnitHandle(Hash,id,1),c = LoadUnitHandle(Hash,id,2); real z = LoadReal(Hash,id,3),dis = LoadReal(Hash,id,4); real x = GetUnitX(d),y = GetUnitY(d); real x1 = GetUnitX(c),y1 = GetUnitY(c) real angle = Atan2(y1-y,x1-x) if DistanceBetweenCoords(x,y,x1,y1) / 2 > dis { SetUnitX(d,x+20.*Cos(angle));SetUnitY(d,y+20.*Sin(angle));z = z + 20.; SetUnitFlyHeight(d,z,0.); else SetUnitX(d,x+20.*Cos(angle));SetUnitY(d,y+20.*Sin(angle));z = z - 20.; SetUnitFlyHeight(d,z,0.) } SaveReal(Hash,id,3,z); SaveReal(Hash,id,4,dis+10.); if z <= 0. then FadingTextSingle(GetOwningPlayer(u),I2S(R2I(25+25*GetUnitAbilityLevel(u,'A03E')+(GetUnitState(c,UNIT_STATE_MAX_LIFE)*.05*GetUnitAbilityLevel (u,'A03E'))))+"!",150, 0, 130,GetWidgetX(c), GetWidgetY(c),.3,.6,1.); DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\DeathPact\\DeathPactTarget.mdl",c,"origin")); AnimSpeed(c,3); unit dum = CreateUnit(GetOwningPlayer(u),'h008',x,y,0);UnitAddAbility(dum,'A03F');IssueTargetOrderById(dum,852075,c); UnitDamageTarget(u,c,25+25*GetUnitAbilityLevel(u,'A03E')+(GetUnitState(c,UNIT_STATE_MAX_LIFE)*.05*GetUnitAbilityLevel(u,'A03E')),true,false, null,null,null) PauseTimer(t);DestroyTimer(t);RemoveUnit(d);FlushChildHashtable(Hash,id); endif
}) } }
Даже назнаю может и утечки есть, я не особо из-за этого парюсь. Ешё по превычке мешаю cJass и Jass2
Добавлено (12 Ноября 2012, 13:29:46) --------------------------------------------- Ty3uK, узнаёшь свою нароботку?) [под 2-ым сполером]
Сообщение отредактировал [HoBu4oK] - Понедельник, 12 Ноября 2012, 13:28:19
Ладно... как простой любитель АоСов я канечно же погамал в эту мапу ^^ пускай хоть и в сингле хд
1. На старте у таверны видны ХП-бары... их просто убрать, ведь это здания... Так же можно убить кольца выбора вокруг таверн... зачем? ну просто они так близко стоят друг в другу... да и сам кольца им впринципе не нужны ._.
2. На карте, у правой границ, по середине.. открыт кусок карты... и ... ничего нету... я не понял зачем это нужно... на на карте там отмечается белый квадрат = моё здание (ааа, всё понял, это там такой способ выбора магазина организован... тем не менее можно сделать иначе!)
3. Параметрый Атаки/Защиты/Силы/Ловкости/Разума написаны таким цветом, что лично мне они не то чтобы не мешают, а я их даже при необходимости не увижу нет, увидеть их можно, но мне с моим ХКК пришлось приподнять сраку со стула сто бы увидеть что там написано... хД
4. Огненная Панда? ... ну это прямо такой ответ от КЭПа ... Ну например Огненный Воин? ну судя по его клинкам - он точно воин! хд и название герой в игре "Огеная Панда" ..
5. Поставь панде голос обычного пивовара... ну или... какого нить другого юнита... например повелителя огня! зачем? - просто когда бегаешь правый клик героя начинает клинить на одной и той же фразе (тоже самое у лучницы какой то было)
6. При смерти панды проигрывай анимацию смерти... Да, её нету в списке анимаций, но её всё равно можно воспроизвести по номеру...
7. Первый спелл - не смотря что по логике у него хоткей Q я интуитивно именно так его первый раз и заюзал... НО... в описании стоит кнопка [W], справьте... Некоторые деревья в результате взрыва не валятся наверно они слишком декоративный хД
вообще урон идёт внутри круга, как я понял... поэтому если стараться визуально задеть врага - он не будет подвержен урону... (( Вообще я бы предложил сделать некую бомбу, которую нужно бросить на область, ну и в ней собственно взрыв... (типа граныты)
8. Второй спелл - ошалело усиляет первый... Нету ни накого спецэффекта при применении... Нету эффект самого баффа... мало того, так ещё Иконка самого спелла бело-голубая, а все остальные более к огню как-то... И иконка баффа на жертве имеет вообще другой вид, от друидов-медведей такую синюю... Я бы предложил и-там-и-там поставь одинаковую, ту которая идёт на 2 м уровне улучшения друидов-медведий, и постовить этот спелл 1м, а 1й - 2м.
И переделать спелл вот так: Делает выпад который замедляет врага на 30% на 3 секунды, при этом нанося 60/90/120/150 ед. физического урона. Если жертва будет подверженна спеллу "Взрыв", то получит ещё столько же урона, но уже магического! Мана 60, перезарядка 10 / 8 / 6 / 4 сек., ренж милишный 150 аое норм.
Это сделает его тычковым-нюком хД будет просто страшно приближаться в панде, а то влепит, и потом ещё подорвёт хД
9. Третий спелл - простенький, я такие раньше любил делать. Даёт просто АС и Агилу. Неплохо, но... Спецэффект - ужасен! или поставь что нить другое, или вообще его нафиг уберите... АС + Агила = more speed ^^ ... хороший бонус для ДД... но ... не вижу другой связи со спеллами... ну кроме ульта, он огого
Можно приурочить эффект снижения брони для "Взрыва", для того что бы повысить патенцеала физ.урона исходящего от панды... Например -80% брони на 2/3/4/5 сек все го задел взрыв... или... -1/2/3/4 ед. на 6 сек. или... -6 ед. на 1/2/3/4 сек...
Так же есть пара идей для внесения разнообразия в сам спелл:
Вариант 1 - Аура с бонусом Даёт +8/16/24/32 к Ловкости самому герою, и распространяет вокруг героя ауру дающую скорость атаки (+10/20/30/40%), ренж до 700 аое
Вариант 2 - Кастовый бонус При касте любого своего спелла даёт некий довольно высокий бонус к скорости атаки. Например +30/50/70/90% ас на 3 секунды. ...в таком случаи после "Тычка" враг будет замедлен и ему можно будет неплохо надавать с руки... ...после "Взрыва" броня будет ниже, а атака будет стремительнее = больше урона!
10. Ультимейд - не понравился... слишком простой :С и слишком сильный описание умопомрачительное... я только после активации понял что даёт спелл... там написано что "...увеличивает и хар-ки на 2 от текущих статов" т.е. если было 30 агилы, то станет 30+2 ... ведь 32 на 2 больше чем 30... в действительности всё выглядет иначе... если было 30, то станет 60... потому что 60 = 30 * 2 ... тут идёт умножение... статы увеличиваются В 2 РАЗА... в общем надо понятнее написать...
да и не вижу особого смысла так сильно поднимать статы героя... у него на 7м уровне под ультой уже 100+ агилы и 31 брони...
11. Деревья слишком быстро восстанавливаются после уничтожения... и мало того, так ещё они могу вплотную зажать героя при восстановлении! Таким образом 1й скилл панды можно использовать как ловушку, подошёл к лесу, сломал... пробежал... враги за тобой... ты их там чем нить затормозил.... ну и ясное дело - ЛЕС ИХ ПОГЛОТИТ хД
12. Предмет дающий +5% ас за 500г... это шутка?? Тут есть носок на 500г который жаёт +5 агилы... 5 агилы = 5 ас... если не ошибаюсь... а ещё 5 агилы дают дамаг ловкачам и немного брони... Некое неравновесие на лицо...
13. Предметы "Сапоги Атаки" имеет иконку без затемнённой версии, в игре просто зелёный квадрат появляется где не надо... А ещё сам рецепт этого предмета имеет ошибку в описании, там два раза написано "Даёт: Даёт:" но разными цветами )))
14. В описании рецепта "Скипетра Магии" допущено много ошибок напротив самой ауры...