|
|
|
|
Героя не считает за героя 0_о
|
|
Remos | Дата: Воскресенье, 18 Апреля 2010, 02:11:01 | Сообщение # 1 |
2 уровень
Группа: Пользователи
Сообщений: 22
Награды: 0
Репутация: 0
Блокировки:
| Копирую любого стандартного героя игры,добавляю его в *алтарь королей* когда покупаю героя в алтаре,он не исчезает,и можно его строить как простых юнитов,много(кстати когда он умирает,воскрешается он как стандартный герой)... Как зделать так чтобы его щитало за героя,и чтобы его портрет после покупки исезал...? Помогите !!Добавлено (18-04-2010, 02:11) --------------------------------------------- Ненашел редактора соопщения 1-го... Нашел тему http://warcraft3ft.info/board/kak_sdelat_tavernu_s_gerojami/14-1-0-1155 Там описано про круги и т.п. Я делаю простую карту на расстройку... Можно както в 2 предложениях сказать как зделать чтобы герой исчезал и нельзя больше было заказывать героя пока не улутшиш замок З.Ы. Еще раз напомню что я простую расстройку делать...Трагерами пользоватся НЕумею.
|
|
|
|
Fox3 | Дата: Воскресенье, 18 Апреля 2010, 03:35:32 | Сообщение # 2 |
6 уровень
Группа: Проверенные
Сообщений: 247
Награды: 0
Репутация: 10
Блокировки:
| Ну чтобы герой полностью исчезал без тригерров не сделаеш
|
|
|
|
Unetco | Дата: Воскресенье, 18 Апреля 2010, 08:05:52 | Сообщение # 3 |
10 уровень
Группа: Проверенные
Сообщений: 2307
Награды: 2
Репутация: 648
Блокировки:
| Quote (Remos) З.Ы. Еще раз напомню что я простую расстройку делать...Трагерами пользоватся НЕумею. Для этого триггеры не нужны. Нужно только сделать хороший и сбалансированный ландшафт, расставить стартовые позиции и указать сколько игроков в карте максимум.
|
|
|
|
Sucks | Дата: Воскресенье, 18 Апреля 2010, 08:41:27 | Сообщение # 4 |
7 уровень
Группа: Проверенные
Сообщений: 377
Награды: 0
Репутация: 90
Блокировки:
| Quote (Remos) Как зделать так чтобы его щитало за героя,и чтобы его портрет после покупки исезал...? Ни разу такой проблемы не было, руки наверное просто настолько глубоко запихнуты..) Добавлено (18-04-2010, 08:41) --------------------------------------------- И если у тебя в триггерах не будет этой функции (выделил синим) то ты ЛЮБЫХ геров сможешь призывать неограниченное кол-во раз (ограничевается только крепостью, замком и аналогом)
Сообщение отредактировал Sucks - Воскресенье, 18 Апреля 2010, 08:43:28 |
|
|
|
SirNikolas | Дата: Воскресенье, 18 Апреля 2010, 08:59:52 | Сообщение # 5 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| В Редакторе Объектов "Технологии - Требования - Используемые классы" ставь на 1.
|
|
|
|
Sucks | Дата: Воскресенье, 18 Апреля 2010, 09:20:03 | Сообщение # 6 |
7 уровень
Группа: Проверенные
Сообщений: 377
Награды: 0
Репутация: 90
Блокировки:
| Quote (SirNikolas) В Редакторе Объектов "Технологии - Требования - Используемые классы" ставь на 1. У стандарт героев стоит 3. Не в этом дело.
|
|
|
|
Remos | Дата: Воскресенье, 18 Апреля 2010, 10:16:02 | Сообщение # 7 |
2 уровень
Группа: Пользователи
Сообщений: 22
Награды: 0
Репутация: 0
Блокировки:
| Все стандартные герои сразу исчезают(рабатают как нужно) из алтаря,и больше нельзя покупать героев пока не улутшиш крепость !!! А новый(точнее скопированный стандартный) нехочет так делать Добавлено (18-04-2010, 10:16) --------------------------------------------- Могу скинуть карту,тем кто помоет разобраться...Невиду как тут залить ее...пишу свой скайп,я там всегда remos81 пишите,скину.
|
|
|
|
Profi | Дата: Воскресенье, 18 Апреля 2010, 12:11:59 | Сообщение # 8 |
7 уровень
Группа: Проверенные
Сообщений: 332
Награды: 0
Репутация: 131
Блокировки:
| В игровых константах нужно добавить нестандартного героя в соответствующее поле. Поищи там, там будут добавлены уже все стандартные...
|
|
|
|
EvilMan | Дата: Воскресенье, 18 Апреля 2010, 12:48:00 | Сообщение # 9 |
3 уровень
Группа: Заблокированные
Сообщений: 65
Награды: 0
Репутация: -15
Блокировки:
| не много ступил лучше бы не создавал нового а изменял стандартного и было бы все норм
Мне откровенно @^*%$ на минусы!
|
|
|
|
Remos | Дата: Воскресенье, 18 Апреля 2010, 13:51:45 | Сообщение # 10 |
2 уровень
Группа: Пользователи
Сообщений: 22
Награды: 0
Репутация: 0
Блокировки:
| Профи,спасибо поищу. ЕвилМан,ррр....читай !!!! Я так и делал !! Я взял за основу героя из простой таверны ! Изменил ему модеть,и т.п. Но он нехочет быть героем !) З.Ы. Посмотрю сейчас в константах,если решу проблему,отпишу.Добавлено (18-04-2010, 13:51) --------------------------------------------- Профи,проблему решил частично ! Герой теперь исчезает,и его считает за героя...НО...но если его заказать на 2 уровне крепости,все герои исчезнут как и должноо быть,а когда крепость улутшиш,он опять появится...т.е. я могу зделать 3 одинаковых героя 0_о.... Макс количество у героя стоит 1. Используемые классы 3. Что делать ?
|
|
|
|
Sucks | Дата: Воскресенье, 18 Апреля 2010, 13:58:46 | Сообщение # 11 |
7 уровень
Группа: Проверенные
Сообщений: 377
Награды: 0
Репутация: 90
Блокировки:
| Quote (Remos) Я взял за основу героя из простой таверны А может дело в том что он из таверны? Попробуй создать, допустим, из паладина.
|
|
|
|
Remos | Дата: Воскресенье, 18 Апреля 2010, 14:16:00 | Сообщение # 12 |
2 уровень
Группа: Пользователи
Сообщений: 22
Награды: 0
Репутация: 0
Блокировки:
| Пробовал,аналогично.
|
|
|
|
Enforcer | Дата: Воскресенье, 18 Апреля 2010, 14:27:23 | Сообщение # 13 |
Энф Когда-то смотрел за порядком
Группа: Ветераны
Сообщений: 3127
Награды: 7
Репутация: 981
Блокировки:
| Я триггерами решил дело. При покупке героя игроку Установить максимум героев = 0. Действует на всех типов героев, включая нестандартные.
Сообщение отредактировал Enforcer - Воскресенье, 18 Апреля 2010, 14:35:07 |
|
|
|
Remos | Дата: Воскресенье, 18 Апреля 2010, 14:40:11 | Сообщение # 14 |
2 уровень
Группа: Пользователи
Сообщений: 22
Награды: 0
Репутация: 0
Блокировки:
| Enforcer, Это все конечно хорошо,но в триггерах я 0 Добавлено (18-04-2010, 14:40) --------------------------------------------- И еще раз скажу что я делаю НЕ псевдодоту,я делаю обычную расстройку,так что тут припокупке героя,установить колич героев на 0,не прокатит...Читай тему
|
|
|
|
[DUОS] | Дата: Воскресенье, 18 Апреля 2010, 15:51:33 | Сообщение # 15 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Code function MeleeStartingVisibility takes nothing returns nothing // Start by setting the ToD. call SetFloatGameState(GAME_STATE_TIME_OF_DAY, bj_MELEE_STARTING_TOD)
// call FogMaskEnable(true) // call FogEnable(true) endfunction Code function MeleeStartingHeroLimit takes nothing returns nothing local integer index
set index = 0 loop // max heroes per player call SetPlayerMaxHeroesAllowed(bj_MELEE_HERO_LIMIT, Player(index))
// each player is restricted to a limit per hero type as well call ReducePlayerTechMaxAllowed(Player(index), 'Hamg', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Hmkg', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Hpal', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Hblm', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Obla', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Ofar', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Otch', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Oshd', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Edem', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Ekee', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Emoo', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Ewar', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Udea', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Udre', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Ulic', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Ucrl', bj_MELEE_HERO_TYPE_LIMIT)
call ReducePlayerTechMaxAllowed(Player(index), 'Npbm', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Nbrn', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Nngs', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Nplh', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Nbst', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Nalc', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Ntin', bj_MELEE_HERO_TYPE_LIMIT) call ReducePlayerTechMaxAllowed(Player(index), 'Nfir', bj_MELEE_HERO_TYPE_LIMIT)
set index = index + 1 exitwhen index == bj_MAX_PLAYERS endloop endfunction Code function MeleeGrantHeroItems takes nothing returns nothing local integer index local trigger trig
// Initialize the twinked hero counts. set index = 0 loop set bj_meleeTwinkedHeroes[index] = 0
set index = index + 1 exitwhen index == bj_MAX_PLAYER_SLOTS endloop
// Register for an event whenever a hero is trained, so that we can give // him/her their starting items. set index = 0 loop set trig = CreateTrigger() call TriggerRegisterPlayerUnitEvent(trig, Player(index), EVENT_PLAYER_UNIT_TRAIN_FINISH, filterMeleeTrainedUnitIsHeroBJ) call TriggerAddAction(trig, function MeleeGrantItemsToTrainedHero)
set index = index + 1 exitwhen index == bj_MAX_PLAYERS endloop
// Register for an event whenever a neutral hero is hired, so that we // can give him/her their starting items. set trig = CreateTrigger() call TriggerRegisterPlayerUnitEvent(trig, Player(PLAYER_NEUTRAL_PASSIVE), EVENT_PLAYER_UNIT_SELL, filterMeleeTrainedUnitIsHeroBJ) call TriggerAddAction(trig, function MeleeGrantItemsToHiredHero)
// Flag that we are giving starting items to heroes, so that the melee // starting units code can create them as necessary. set bj_meleeGrantHeroItems = true endfunction Code function MeleeStartingResources takes nothing returns nothing local integer index local player indexPlayer local version v local integer startingGold local integer startingLumber
set v = VersionGet() if (v == VERSION_REIGN_OF_CHAOS) then set startingGold = bj_MELEE_STARTING_GOLD_V0 set startingLumber = bj_MELEE_STARTING_LUMBER_V0 else set startingGold = bj_MELEE_STARTING_GOLD_V1 set startingLumber = bj_MELEE_STARTING_LUMBER_V1 endif
// Set each player's starting resources. set index = 0 loop set indexPlayer = Player(index) if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then call SetPlayerState(indexPlayer, PLAYER_STATE_RESOURCE_GOLD, startingGold) call SetPlayerState(indexPlayer, PLAYER_STATE_RESOURCE_LUMBER, startingLumber) endif
set index = index + 1 exitwhen index == bj_MAX_PLAYERS endloop endfunction Code function MeleeClearExcessUnits takes nothing returns nothing local integer index local real locX local real locY local player indexPlayer
set index = 0 loop set indexPlayer = Player(index)
// If the player slot is being used, clear any nearby creeps. if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then set locX = GetStartLocationX(GetPlayerStartLocation(indexPlayer)) set locY = GetStartLocationY(GetPlayerStartLocation(indexPlayer))
call MeleeClearNearbyUnits(locX, locY, bj_MELEE_CLEAR_UNITS_RADIUS) endif
set index = index + 1 exitwhen index == bj_MAX_PLAYERS endloop endfunction Code function MeleeStartingUnits takes nothing returns nothing local integer index local player indexPlayer local location indexStartLoc local race indexRace
call Preloader( "scripts\\SharedMelee.pld" )
set index = 0 loop set indexPlayer = Player(index) if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then set indexStartLoc = GetStartLocationLoc(GetPlayerStartLocation(indexPlayer)) set indexRace = GetPlayerRace(indexPlayer)
// Create initial race-specific starting units if (indexRace == RACE_HUMAN) then call MeleeStartingUnitsHuman(indexPlayer, indexStartLoc, true, true, true) elseif (indexRace == RACE_ORC) then call MeleeStartingUnitsOrc(indexPlayer, indexStartLoc, true, true, true) elseif (indexRace == RACE_UNDEAD) then call MeleeStartingUnitsUndead(indexPlayer, indexStartLoc, true, true, true) elseif (indexRace == RACE_NIGHTELF) then call MeleeStartingUnitsNightElf(indexPlayer, indexStartLoc, true, true, true) else call MeleeStartingUnitsUnknownRace(indexPlayer, indexStartLoc, true, true, true) endif endif
set index = index + 1 exitwhen index == bj_MAX_PLAYERS endloop endfunction Code function MeleeStartingAI takes nothing returns nothing local integer index local player indexPlayer local race indexRace
set index = 0 loop set indexPlayer = Player(index) if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then set indexRace = GetPlayerRace(indexPlayer) if (GetPlayerController(indexPlayer) == MAP_CONTROL_COMPUTER) then // Run a race-specific melee AI script. if (indexRace == RACE_HUMAN) then call PickMeleeAI(indexPlayer, "human.ai", null, null) elseif (indexRace == RACE_ORC) then call PickMeleeAI(indexPlayer, "orc.ai", null, null) elseif (indexRace == RACE_UNDEAD) then call PickMeleeAI(indexPlayer, "undead.ai", null, null) call RecycleGuardPosition(bj_ghoul[index]) elseif (indexRace == RACE_NIGHTELF) then call PickMeleeAI(indexPlayer, "elf.ai", null, null) else // Unrecognized race. endif call ShareEverythingWithTeamAI(indexPlayer) endif endif
set index = index + 1 exitwhen index == bj_MAX_PLAYERS endloop endfunction Code function MeleeInitVictoryDefeat takes nothing returns nothing local trigger trig local integer index local player indexPlayer
// Create a timer window for the "finish soon" timeout period, it has no timer // because it is driven by real time (outside of the game state to avoid desyncs) set bj_finishSoonTimerDialog = CreateTimerDialog(null)
// Set a trigger to fire when we receive a "finish soon" game event set trig = CreateTrigger() call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_SOON) call TriggerAddAction(trig, function MeleeTriggerTournamentFinishSoon)
// Set a trigger to fire when we receive a "finish now" game event set trig = CreateTrigger() call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_NOW) call TriggerAddAction(trig, function MeleeTriggerTournamentFinishNow)
// Set up each player's mortality code. set index = 0 loop set indexPlayer = Player(index)
// Make sure this player slot is playing. if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then set bj_meleeDefeated[index] = false set bj_meleeVictoried[index] = false
// Create a timer and timer window in case the player is crippled. set bj_playerIsCrippled[index] = false set bj_playerIsExposed[index] = false set bj_crippledTimer[index] = CreateTimer() set bj_crippledTimerWindows[index] = CreateTimerDialog(bj_crippledTimer[index]) call TimerDialogSetTitle(bj_crippledTimerWindows[index], MeleeGetCrippledTimerMessage(indexPlayer))
// Set a trigger to fire whenever a building is cancelled for this player. set trig = CreateTrigger() call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_CANCEL, null) call TriggerAddAction(trig, function MeleeTriggerActionConstructCancel)
// Set a trigger to fire whenever a unit dies for this player. set trig = CreateTrigger() call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_DEATH, null) call TriggerAddAction(trig, function MeleeTriggerActionUnitDeath)
// Set a trigger to fire whenever a unit begins construction for this player set trig = CreateTrigger() call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_START, null) call TriggerAddAction(trig, function MeleeTriggerActionUnitConstructionStart)
// Set a trigger to fire whenever this player defeats-out set trig = CreateTrigger() call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_DEFEAT) call TriggerAddAction(trig, function MeleeTriggerActionPlayerDefeated)
// Set a trigger to fire whenever this player leaves set trig = CreateTrigger() call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE) call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)
// Set a trigger to fire whenever this player changes his/her alliances. set trig = CreateTrigger() call TriggerRegisterPlayerAllianceChange(trig, indexPlayer, ALLIANCE_PASSIVE) call TriggerRegisterPlayerStateEvent(trig, indexPlayer, PLAYER_STATE_ALLIED_VICTORY, EQUAL, 1) call TriggerAddAction(trig, function MeleeTriggerActionAllianceChange) else set bj_meleeDefeated[index] = true set bj_meleeVictoried[index] = false
// Handle leave events for observers if (IsPlayerObserver(indexPlayer)) then // Set a trigger to fire whenever this player leaves set trig = CreateTrigger() call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE) call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft) endif endif
set index = index + 1 exitwhen index == bj_MAX_PLAYERS endloop
// Test for victory / defeat at startup, in case the user has already won / lost. // Allow for a short time to pass first, so that the map can finish loading. call TimerStart(CreateTimer(), 2.0, false, function MeleeTriggerActionAllianceChange) endfunction О,да... тут ещё и половина БЖшных функций... Близзы не тащат. А насчёт героев - там же при создании нового гера меняется ID. Пускай иниц. сражения автор сконвертирует (Правка -> Конвертировать в текст", затем вставит этот код выше (по частям). Чтобы гер был только один раз доступен, в редакторе объектов нажми Ctrl-D. Посмотри на своего нестандартного героя, что ты вставил. Там перед его именем будет надпись в формате 'XXXX'. Эту надпись копируешь и после call ReducePlayerTechMaxAllowed(Player(index), 'Nfir', bj_MELEE_HERO_TYPE_LIMIT) вставляешь call ReducePlayerTechMaxAllowed(Player(index), 'XXXX', bj_MELEE_HERO_TYPE_LIMIT), где ХХХХ - твой тип нестандартного героя. Не умеете вы новичкам объяснять.
|
|
|
|
Remos | Дата: Воскресенье, 18 Апреля 2010, 16:22:23 | Сообщение # 16 |
2 уровень
Группа: Пользователи
Сообщений: 22
Награды: 0
Репутация: 0
Блокировки:
| Всем спасибо,проблема решилась...БЕЗ триггеров Тему можно закрывать.
|
|
|
|
|
|
|
|
|
|
|