quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,598Активность: |
Системы опыта и респауна крипов
2 редкие наработки на XGMНедавно я наткнулся на тему о Триггерной системе распределения опыта а также на тему о Респауне крипов, собираясь кинуть авторам ссылки на старые темы я обнаружил что на сайте есть одна гуишная, неработоспособная наработка системы распределения опыта, 2 системы респауна крипов основанных на RB(return bug)
return bug и GameСache неактуальны с момента выхода патча 1.24а И я решил сделать собственные системы, которые будут актуальны... Система распределения опыта v 1.0d + GUIПлюсы моей системы распределения опыта
» Код системы
((код jass
Настройка системы опыта
******************************************************************************************** function bj_areaOfSharingExpr takes nothing returns real return 1000.0 область в коротрой героям будут давать опыт endfunction ********************************************************** Давать опыт союзникам? function bj_boolGiveExprBounty takes nothing returns boolean return true если нет замени true на false (тока без ошибок) endfunction ********************************************************** Случайное количество опыта? или всегда одно значение за моба function bj_boolRandomExpFactor takes nothing returns boolean return true endfunction ********************************************************** Фактор случайного опыта (сколько процентов плюс или минус) function bj_randomExpFactor takes nothing returns real local real FACTOR = 0.20 << вот тута меняем фактор if(FACTOR >=1.00)then не трогать! set FACTOR = FACTOR /100.00 не трогать! endif не трогать! return FACTOR не трогать! endfunction (ну несли вы сильно умный впишите конекретные значения и удалите раздел настройки) ********************************************************** фастор уменьшения опыта взависимости от растояния, те сколько вычесть опыта из числа взависимости от растоятния... function GetExprReductionFactor takes unit uMonster, unit uKiller returns real local real dx = GetUnitX(uMonster) - GetUnitX(uKiller) local real dy = GetUnitY(uMonster) - GetUnitY(uKiller) return SquareRoot(dx * dx + dy * dy)/50.00 50 можно сменить на ваше число, также можно и свою функцию вставить endfunction ********************************************************** функция проверки уровня героя, его можно настроеть как вам угодно function IsHeroLevelRequired takes unit uHero, unit uMonster returns boolean return (GetHeroLevel(uHero) - GetUnitLevel(uMonster)) < 4 ставим сюда своё условие если это неустраивает к примеру если юнит таково то типа то недавать опыт (IsUnitType(uMonster) != 'n000') можно вписать любое выражение результатом которого будет true или false endfunction дополнитеные условия function Trig_Hero_Exp_Conditions takes nothing returns boolean условия является ли return IsUnitType( GetKillingUnit(), UNIT_TYPE_HERO ) endfunction ********************************************************************************************
далее меняем настройки на свой старх и риск ////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////// function Cond_AllyInRangeFilter takes nothing returns boolean return IsUnitType( GetFilterUnit(), UNIT_TYPE_HERO ) and IsUnitAlly(GetFilterUnit(),bj_groupEnumOwningPlayer) and GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) > 0.00 and IsHeroLevelRequired(GetFilterUnit(),bj_lastCreatedUnit) endfunction опыт за юнита Автор NETRAT можно нарыть в библиотеке функций сайта XGM function aow_GetApxExpBounty takes unit u returns real return SquareRoot((GetUnitState(u, UNIT_STATE_MAX_LIFE) + GetUnitState(u, UNIT_STATE_MAX_MANA)) * GetUnitLevel(u)) * 2 endfunction function Group_AddHeroExp takes nothing returns nothing функция добавления опыта...
local unit hero = GetEnumUnit() local integer HeroExpr = R2I(aow_GetApxExpBounty(bj_lastCreatedUnit) - GetExprReductionFactor(bj_lastCreatedUnit,hero)) if(bj_boolRandomExpFactor()) then set HeroExpr = HeroExpr+R2I(GetRandomReal(PercentToInt(bj_randomExpFactor(),HeroExpr),-PercentToInt(bj_randomExpFactor(),HeroExpr))) endif call FloatingTextFadeout(GetOwningPlayer(hero),hero,"|cff00CD00+"+I2S(HeroExpr)+"|r")// текстаг, эту строку можно удалить call AddHeroXP(hero,HeroExpr,false) endfunction function Trig_Hero_Exp_Actions takes nothing returns nothing
local unit uHero = GetKillingUnit() local integer HeroExpr = 0 local group grp = CreateGroup() local boolexpr e local string s if(bj_boolGiveExprBounty()) then set bj_lastCreatedUnit = GetDyingUnit() set bj_groupEnumOwningPlayer = GetOwningPlayer(uHero) set e = Filter(function Cond_AllyInRangeFilter) call GroupEnumUnitsInRange(grp, GetUnitX(bj_lastCreatedUnit),GetUnitY(bj_lastCreatedUnit),bj_areaOfSharingExpr(),e) call ForGroup(grp, function Group_AddHeroExp) call DestroyBoolExpr(e) call DestroyGroup(grp) else set HeroExpr = R2I( aow_GetApxExpBounty(bj_lastCreatedUnit) - GetExprReductionFactor(bj_lastCreatedUnit,uHero)) if(bj_boolRandomExpFactor()) then set HeroExpr = HeroExpr+GetRandomInt(PercentToInt(bj_randomExpFactor(),HeroExpr),-PercentToInt(bj_randomExpFactor(),HeroExpr)) endif call FloatingTextFadeout(GetOwningPlayer(uHero),uHero,"|cff00CD00+"+I2S(HeroExpr)+"|r") текстаг, эту строку можно удалить call AddHeroXP(uHero,HeroExpr,false) endif set uHero = null set grp = null set e = null endfunction ===========================================================================
function InitTrig_Hero_Exp takes nothing returns nothing set gg_trg_Hero_Exp = CreateTrigger( ) call TriggerRegisterPlayerUnitEvent(gg_trg_Hero_Exp, Player(PLAYER_NEUTRAL_AGGRESSIVE), EVENT_PLAYER_UNIT_DEATH, null) call TriggerAddCondition( gg_trg_Hero_Exp, Condition( function Trig_Hero_Exp_Conditions ) ) call TriggerAddAction( gg_trg_Hero_Exp, function Trig_Hero_Exp_Actions ) endfunction )) Поправки системы
Система респауна нейтральных криповПлюсы системы
Поправки системы
((кат Читать гуишникам
ДЛЯ РАБОТЫ СИСТЕМЫ НУЖНЫ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ
Поэтому пере копирование папки с системой, убедитесь что у вас стоит параметр - создавать неизвестные переменные пр вставке триггеров. Как это узнать - оч просто, открываем редактор, щёлкаем на вкладку фаил. ищем внизу всплывающего меню вкладку - Параметры, щелкаем по ней... Ищем внизу меню строчку - Автом. создавать неизв. переменные во время вставки триггеров Там должна стоять галочка как на скрине >- s2.ipicture.ru/uploads/20120520/5C2OpNt1.jpg Затем смело копируем с вою папку, если это система респауна то удаляем зачёркнутый триггер Creep Respawn v2.0 он нам ненужен, и ставим свои настройки в гуи триггере init System )) ((кат код системы
((код jass
Кастом код карты
функции создания и удалени крипов эти функции необязательны для работы системы, но они могут понадобится для создания и удаления крипов во время игры function CreateCreepOfType takes integer CreepType, real SX, real SY, real SA returns unit local integer creepId set bj_lastCreatedUnit = CreateUnit(Player(12),CreepType,SX,SY,SA) set creepId = GetHandleId(bj_lastCreatedUnit) call SaveReal(bj_lastCreatedHashtable,creepId,0,SX) call SaveReal(bj_lastCreatedHashtable,creepId,1,SY) call SaveReal(bj_lastCreatedHashtable,creepId,2,SA) return bj_lastCreatedUnit endfunction function RemoveCreep takes unit fp_uCreep returns nothing
call FlushChildHashtable(bj_lastCreatedHashtable, GetHandleId(fp_uCreep)) call RemoveUnit(fp_uCreep) set fp_uCreep = null endfunction триггер Init Creps function Bolexp_UnitFiler_Conditions takes nothing returns boolean return GetOwningPlayer(GetFilterUnit()) == Player(PLAYER_NEUTRAL_AGGRESSIVE) endfunction function Group_SaveCrepsPos_Actions takes nothing returns nothing
local unit uNeutralCreep = GetEnumUnit() local integer hashId = GetHandleId(uNeutralCreep) call SaveReal(bj_lastCreatedHashtable,hashId,0,GetUnitX(uNeutralCreep)) call SaveReal(bj_lastCreatedHashtable,hashId,1,GetUnitY(uNeutralCreep)) call SaveReal(bj_lastCreatedHashtable,hashId,2,GetUnitFacing(uNeutralCreep)) set uNeutralCreep = null endfunction function Trig_Init_Creps_Actions takes nothing returns nothing
local group grp = CreateGroup() local boolexpr NeutralFilter = Condition( function Bolexp_UnitFiler_Conditions ) call GroupEnumUnitsInRect(grp, bj_mapInitialPlayableArea, NeutralFilter)
call DestroyBoolExpr(NeutralFilter) call ForGroup(grp, function Group_SaveCrepsPos_Actions) call DestroyGroup(grp) call DestroyBoolExpr(NeutralFilter) set NeutralFilter = null set grp = null call TriggerClearActions(gg_trg_Init_Creps) call DestroyTrigger(gg_trg_Init_Creps) set gg_trg_Init_Creps = null endfunction ===========================================================================
function InitTrig_Init_Creps takes nothing returns nothing set gg_trg_Init_Creps = CreateTrigger( ) call TriggerRegisterTimerEvent(gg_trg_Init_Creps, 0.20, false) call TriggerAddAction( gg_trg_Init_Creps, function Trig_Init_Creps_Actions) set bj_lastCreatedHashtable = InitHashtable() инит хеш таблицы endfunction Код триггера Creeps resp
function bj_boolDelCorpse takes nothing returns boolean удялать трупы? return false endfunction function bj_boolShowDeathFX takes nothing returns boolean показать спецэффект при смерти крипа?
return true endfunction function bj_CreepDeathEffect takes nothing returns string спецэффект при смерти крипа...
return "Abilities\\Spells\\Orc\\FeralSpirit\\feralspiritdone.mdl" endfunction function bj_boolShowRespFX takes nothing returns boolean показать спецэффект при смерти крипа?
return true endfunction function bj_CreepRepsEffect takes nothing returns string спецэффект при респауне крипа...
return "Abilities\\Spells\\Human\\Resurrect\\ResurrectTarget.mdl" endfunction function bj_boolRandomType takes nothing returns boolean спаунить крипов разного типа, но одного и тогоже уровня?
return true endfunction function bj_boolCheckVisiblyPos takes nothing returns boolean проверять нет ли поблизости юнитов игроков
return false незабудьте что если включить этот параметр крипы небудут возрождатся пока любой игрок видит их точку респауна endfunction function bj_creepRespTimeout takes nothing returns real задержка перед респауном крипа
return 1.01 можно поставить return GetUnitLevel(GetDyingUnit())* 5.00 тогда крипы будут возродатся исходя их их уровня умноженного на 5 endfunction ################################################################################################### ################################################################################################### function IsSpawnPosVisibly_Conditions takes real PX, real PY returns boolean local integer nIndex = 0 if not bj_boolCheckVisiblyPos() then return true endif loop exitwhen nIndex > 11 if(IsVisibleToPlayer(PX,PY,Player(nIndex)))then return false endif set nIndex = nIndex + 1 endloop return true endfunction function Timer_Creep_Respawn_Actions takes nothing returns nothing
local timer t = GetExpiredTimer() local integer TimerId = GetHandleId(t) local real UnitX = LoadReal(bj_lastCreatedHashtable,TimerId,0) local real UnitY = LoadReal(bj_lastCreatedHashtable,TimerId,1) local real UnitA = LoadReal(bj_lastCreatedHashtable,TimerId,2) local integer LevelOrType = LoadInteger(bj_lastCreatedHashtable,TimerId,3) local unit NewCreep local integer NewCreepId if IsSpawnPosVisibly_Conditions(UnitX,UnitY) then if bj_boolRandomType() then set NewCreep = CreateUnit(Player(PLAYER_NEUTRAL_AGGRESSIVE),ChooseRandomCreep(LevelOrType),UnitX,UnitY,UnitA) else set NewCreep = CreateUnit(Player(PLAYER_NEUTRAL_AGGRESSIVE),LevelOrType,UnitX,UnitY,UnitA) endif set NewCreepId = GetHandleId(NewCreep) if bj_boolShowRespFX() then call DestroyEffect(AddSpecialEffectTarget(bj_CreepRepsEffect(),NewCreep,"origin")) endif call SaveReal(bj_lastCreatedHashtable,NewCreepId,0,UnitX) call SaveReal(bj_lastCreatedHashtable,NewCreepId,1,UnitY) call SaveReal(bj_lastCreatedHashtable,NewCreepId,2,UnitA) call FlushChildHashtable(bj_lastCreatedHashtable,TimerId) call PauseTimer(t) call DestroyTimer(t) endif set NewCreep = null set t = null endfunction function Trig_Creep_Resp_Actions takes nothing returns nothing
local unit DiedCreep = GetDyingUnit() local timer t = CreateTimer() local integer TimerId = GetHandleId(t) local integer CreepId = GetHandleId(DiedCreep) if(bj_boolShowDeathFX() and bj_boolDelCorpse())then call DestroyEffect(AddSpecialEffect(bj_CreepDeathEffect(),GetUnitX(DiedCreep),GetUnitY(DiedCreep))) elseif bj_boolShowDeathFX() and not(bj_boolDelCorpse()) then call DestroyEffect(AddSpecialEffectTarget(bj_CreepDeathEffect(),DiedCreep,"origin")) endif call SaveReal(bj_lastCreatedHashtable,TimerId,0,LoadReal(bj_lastCreatedHashtable,CreepId,0)) call SaveReal(bj_lastCreatedHashtable,TimerId,1,LoadReal(bj_lastCreatedHashtable,CreepId,1)) call SaveReal(bj_lastCreatedHashtable,TimerId,2,LoadReal(bj_lastCreatedHashtable,CreepId,2)) if(bj_boolRandomType()) then call SaveInteger(bj_lastCreatedHashtable,TimerId,3,GetUnitLevel(DiedCreep)) else call SaveInteger(bj_lastCreatedHashtable,TimerId,3,GetUnitTypeId(DiedCreep)) endif call FlushChildHashtable(bj_lastCreatedHashtable,CreepId) if(bj_boolDelCorpse()) then call RemoveUnit(DiedCreep) endif call TimerStart(t,bj_creepRespTimeout(),true, function Timer_Creep_Respawn_Actions) set DiedCreep = null set t = null endfunction ===========================================================================
function InitTrig_Creep_Resp takes nothing returns nothing set gg_trg_Creep_Resp = CreateTrigger( ) call TriggerRegisterPlayerUnitEvent(gg_trg_Creep_Resp, Player(PLAYER_NEUTRAL_AGGRESSIVE), EVENT_PLAYER_UNIT_DEATH, null) call TriggerAddAction( gg_trg_Creep_Resp, function Trig_Creep_Resp_Actions ) endfunction )) ))
» CRS библиотека
((код jass
library CreepRespawnSystem initializer InitCreps
globals
boolean bj_DESTROY_CORPSE = true удалять трупы умерших крипов. boolean bj_SHOW_DEATH_EFFECT = true показать спецэффект при смерте крипа. boolean bj_SHOW_RESPAWN_EFFECT = true показать спецэфект при респауне boolean bj_RANDOM_CREEP_TYPE = true респаунить каждый раз разных крипов но одного и того же уровня. boolean bj_CHECK_REPAWN_POS = false// проверять видит ли игрок точку респауна, и если видит пропустить респаун string bj_DEATH_EFFECT = "Abilities\\Spells\\Orc\\FeralSpirit\\feralspiritdone.mdl" спецэффект при смерти крипа string bj_RESPAWN_EFFECT = "Abilities\\Spells\\Human\\Resurrect\\ResurrectTarget.mdl" спецэффект при респауне крипа real bj_CREEP_SAVE_INTERVAL = 0.20 задержка перед работой системы... Необходимо в тех картах где создание крипов просиходит во время игры. real bj_RESP_TIMEOUT = 2.00 player bj_PLAYER_NEUTRAL_AGGRESSIVE = Player( 12 ) Нетрально враждебный, если в вашей крате вы использует другоuо игрока то введите его номер в Player( № ) впспомогательные переменные системы unit bj_Neutral_Creep integer bj_HandleInteger integer bj_TimerId location bl_TempPoint endglobals private function bj_creepRespTimeout takes nothing returns real задержка перед респауном крипа можно вести конкретное время или выражение
return bj_RESP_TIMEOUT * GetUnitLevel( GetDyingUnit( ) ) в данном случие врмя респауна равно уровень крипа умнноженный на bj_RESP_TIMEOUT (2 сек) endfunction private function Bolexp_UnitFiler_Conditions takes nothing returns boolean
return GetOwningPlayer( GetFilterUnit( ) ) == bj_PLAYER_NEUTRAL_AGGRESSIVE endfunction далее вмешательство в код настоятельно не рекомендуется... ******************************************************************************************** ******************************************************************************************** function CreateCreepOfType takes integer CreepType, real SX, real SY, real SA returns unit set bj_lastCreatedUnit = CreateUnit( bj_PLAYER_NEUTRAL_AGGRESSIVE, CreepType, SX, SY, SA ) set bj_HandleInteger = GetHandleId( bj_lastCreatedUnit ) call SaveReal( bj_lastCreatedHashtable, bj_HandleInteger, 0, SX ) call SaveReal( bj_lastCreatedHashtable, bj_HandleInteger, 1, SY ) call SaveReal( bj_lastCreatedHashtable, bj_HandleInteger, 2, SA ) return bj_lastCreatedUnit endfunction function RemoveCreep takes unit fp_uCreep returns nothing
call FlushChildHashtable( bj_lastCreatedHashtable, GetHandleId( fp_uCreep ) ) call RemoveUnit( fp_uCreep ) set fp_uCreep = null endfunction private function Group_SaveCrepsPos_Actions takes nothing returns nothing
set bj_Neutral_Creep = GetEnumUnit( ) set bj_HandleInteger = GetHandleId( bj_Neutral_Creep ) call SaveReal( bj_lastCreatedHashtable, bj_HandleInteger, 0, GetUnitX( bj_Neutral_Creep ) ) call SaveReal( bj_lastCreatedHashtable, bj_HandleInteger, 1, GetUnitY( bj_Neutral_Creep ) ) call SaveReal( bj_lastCreatedHashtable, bj_HandleInteger, 2, GetUnitFacing( bj_Neutral_Creep ) ) endfunction private function AddSpecialEffectZ takes string path, real x, real y, real z returns effect
set bl_TempPoint = Location( x, y ) set z = z + GetLocationZ( bl_TempPoint ) + 10.00 call RemoveLocation( bl_TempPoint ) set bj_lastCreatedDestructable = CreateDestructableZ( 'OTip', x, y, z, 0.00, 1, 0 ) set bj_lastCreatedEffect = AddSpecialEffect( path, x, y ) call RemoveDestructable( bj_lastCreatedDestructable ) return bj_lastCreatedEffect endfunction private function IsSpawnPosVisibly_Conditions takes real PX, real PY returns boolean local integer nIndex = 0 if not bj_CHECK_REPAWN_POS then return true endif loop exitwhen nIndex > 11 if ( IsVisibleToPlayer( PX, PY, Player( nIndex ) ) ) then return false endif set nIndex = nIndex + 1 endloop return true endfunction private function Timer_Creep_Respawn_Actions takes nothing returns nothing
local timer t = GetExpiredTimer( ) local integer TimerId = GetHandleId( t ) local real UnitX = LoadReal( bj_lastCreatedHashtable, TimerId, 0 ) local real UnitY = LoadReal( bj_lastCreatedHashtable, TimerId, 1 ) local real UnitA = LoadReal( bj_lastCreatedHashtable, TimerId, 2 ) local integer LevelOrType = LoadInteger( bj_lastCreatedHashtable, TimerId, 3 ) if IsSpawnPosVisibly_Conditions( UnitX, UnitY ) then
if bj_RANDOM_CREEP_TYPE then set bj_Neutral_Creep = CreateUnit( bj_PLAYER_NEUTRAL_AGGRESSIVE, ChooseRandomCreep( LevelOrType ), UnitX, UnitY, UnitA ) else set bj_Neutral_Creep = CreateUnit( bj_PLAYER_NEUTRAL_AGGRESSIVE, LevelOrType, UnitX, UnitY, UnitA ) endif set bj_HandleInteger = GetHandleId( bj_Neutral_Creep ) if bj_SHOW_RESPAWN_EFFECT then call DestroyEffect( AddSpecialEffectTarget( bj_RESPAWN_EFFECT, bj_Neutral_Creep, "origin" ) ) endif call SaveReal( bj_lastCreatedHashtable, bj_HandleInteger, 0, UnitX ) call SaveReal( bj_lastCreatedHashtable, bj_HandleInteger, 1, UnitY ) call SaveReal( bj_lastCreatedHashtable, bj_HandleInteger, 2, UnitA ) call FlushChildHashtable( bj_lastCreatedHashtable, TimerId ) call PauseTimer( t ) call DestroyTimer( t ) endif set t = null endfunction private function Trig_Creep_Resp_Actions takes nothing returns nothing local timer t = CreateTimer( ) set bj_Neutral_Creep = GetDyingUnit() set bj_TimerId = GetHandleId( t ) set bj_HandleInteger = GetHandleId( bj_Neutral_Creep ) if ( bj_SHOW_DEATH_EFFECT and bj_DESTROY_CORPSE and IsUnitType( bj_Neutral_Creep, UNIT_TYPE_FLYING ) ) then call DestroyEffect( AddSpecialEffectZ( bj_DEATH_EFFECT, GetUnitX( bj_Neutral_Creep ), GetUnitY( bj_Neutral_Creep ), GetUnitFlyHeight( bj_Neutral_Creep ) ) ) elseif bj_SHOW_DEATH_EFFECT then call DestroyEffect( AddSpecialEffect( bj_DEATH_EFFECT, GetUnitX( bj_Neutral_Creep ),GetUnitY( bj_Neutral_Creep ) ) ) endif call SaveReal( bj_lastCreatedHashtable, bj_TimerId, 0, LoadReal( bj_lastCreatedHashtable, bj_HandleInteger, 0 ) ) call SaveReal( bj_lastCreatedHashtable, bj_TimerId, 1, LoadReal( bj_lastCreatedHashtable, bj_HandleInteger, 1 ) ) call SaveReal( bj_lastCreatedHashtable, bj_TimerId, 2, LoadReal( bj_lastCreatedHashtable, bj_HandleInteger, 2 ) ) if ( bj_RANDOM_CREEP_TYPE ) then call SaveInteger( bj_lastCreatedHashtable, bj_TimerId, 3, GetUnitLevel( bj_Neutral_Creep ) ) else call SaveInteger( bj_lastCreatedHashtable, bj_TimerId, 3, GetUnitTypeId( bj_Neutral_Creep ) ) endif call FlushChildHashtable( bj_lastCreatedHashtable, bj_HandleInteger ) if ( bj_DESTROY_CORPSE ) then call RemoveUnit( bj_Neutral_Creep ) endif call TimerStart( t, bj_creepRespTimeout( ), true, function Timer_Creep_Respawn_Actions ) set t = null endfunction private function SaveCreepRespPos takes nothing returns nothing local group grp = CreateGroup( ) local boolexpr NeutralFilter = Condition( function Bolexp_UnitFiler_Conditions ) local trigger trg = CreateTrigger( ) call TriggerRegisterPlayerUnitEvent( trg, bj_PLAYER_NEUTRAL_AGGRESSIVE, EVENT_PLAYER_UNIT_DEATH, null ) call TriggerAddAction( trg, function Trig_Creep_Resp_Actions ) call DestroyTimer( GetExpiredTimer( ) ) call GroupEnumUnitsInRect( grp, bj_mapInitialPlayableArea, NeutralFilter ) call DestroyBoolExpr( NeutralFilter ) call ForGroup( grp, function Group_SaveCrepsPos_Actions ) call DestroyGroup( grp ) call DestroyBoolExpr( NeutralFilter ) set NeutralFilter = null set trg = null set grp = null endfunction private function InitCreps takes nothing returns nothing set bj_lastCreatedHashtable = InitHashtable( ) call TimerStart( CreateTimer( ), bj_CREEP_SAVE_INTERVAL, false, function SaveCreepRespPos ) endfunction endlibrary )) Теперь есть GUI версия системы, и все версии в 1 карте Добавлена версия без хештаблиц, на ситеме XAT by ToadCop Если есть вопросы по настройке системы или вам что то непонятно, пишите мне, я quq_CCCP помогу вам решить ваши проблему и настроить мою систему. Отредактировано quq_CCCP, 25.09.2012 в 16:04. |
10.04.2012, 13:48 | #1
+9/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DaeDR
offline
Опыт:
8,074Активность: |
Но ведь можно использовать define.
» Пример
При компиляции вместо AREA будет поставлено значение 500.0 Но есть и "минусы" (для некоторых): Требует JNGP
DaeDR добавил: Опыт в области 500.0 как-то маловато. Ведь дальность у героя и моба может быть намного больше. Может лучше поставить 700-1000 AOE? |
10.04.2012, 14:42 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,598Активность: |
DaeDR, настроить легко на своё усмотрение... хоть 10000 ренж |
10.04.2012, 14:52 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DaeDR
offline
Опыт:
8,074Активность: |
quq_CCCP, Это конечно да. Но многие используют наработки, даже не глядя в них) Код респауна выложи тоже. Будет хоть на что посмотреть) |
10.04.2012, 14:54 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,598Активность: |
DaeDR, запусти карту, там действительно есть на что посмотреть, довольно удобная наработка...ну я её еще доделаю... |
10.04.2012, 14:56 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DaeDR
offline
Опыт:
8,074Активность: |
Такой вопрос. Почему бы не самоинициализировать Хеш-таблицу и запустить триггер респауна?
» Например вот так
Тогда новичкам вообще не придется с этим заморачиваться, следовательно будет больше желающих ее использовать. |
10.04.2012, 15:03 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,598Активность: |
DaeDR, исключительно для удобства пользователей, у которых всё в одном триггере инициализации, а кстати.мб сделать версии на vJass/cJass для особо продвинутых? скоро доработаю |
10.04.2012, 15:06 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DaeDR
offline
Опыт:
8,074Активность: |
Как понять это:
Что это за функция? За что она отвечает? я чего-то не понял
DaeDR добавил:
Даже не знаю. "Продвинутые" делают сами. Особых сложностей тут нет |
10.04.2012, 15:07 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,598Активность: |
DaeDR:
Всегда один тип респится, или разные типы крипов но 1 и того же уровня... |
10.04.2012, 15:08 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DaeDR
offline
Опыт:
8,074Активность: |
Но возможно стоит сделать версию через define. Для тех, кто использует JNGP это будет намного лучше и удобней
DaeDR добавил: quq_CCCP: Стоит слегка изменить в примере для понимания |
10.04.2012, 15:09 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,598Активность: |
DaeDR, я правда не экспериментировал со всеми настройками, поставил самые красочные, ну можно пробовать не удалять трупы, и не создавать эффекты, и время респа сделать 5* на уровень моба, пробуй... |
10.04.2012, 15:12 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DaeDR
offline
Опыт:
8,074Активность: |
Есть такая строчка в коде респауна:
» Код
Мм.. разбирать все по косточкам? А то очень скучно
DaeDR добавил:
Меня интересует только реализация. Сам такую могу сделать без проблем |
10.04.2012, 15:16 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,598Активность: |
DaeDR, да я только за разумную критику, ну это только первая версия, я еще многое доработаю, и переделаю... Но многим и этого хватит за глаза.... |
10.04.2012, 15:17 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DaeDR
offline
Опыт:
8,074Активность: |
Может стоит дополнить одну функцию (по респауну)
» Было
Таймер воскрешения действует с периодичностью, заданной вначале. Но если в первый раз при возрождении моб будет виден, то его воскрешение отложится на длительное время. Может добавить еще одну строчку?
» Стало
|
10.04.2012, 15:29 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,598Активность: |
DaeDR, ну буду исправлять, скоро скину новую версию и код... |
10.04.2012, 15:35 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DaeDR
offline
Опыт:
8,074Активность: |
|
10.04.2012, 15:55 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,598Активность: |
DaeDR, где там утечки? бул еспр удаляется как и локация, там то на то и выходит... см содежание функции.. |
10.04.2012, 16:03 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DaeDR
offline
Опыт:
8,074Активность: |
GetUnitLoc(uHero) - точка, которая точно не удаляется!
Хм. а вот Filter(function Cond_AllyInRangeFilter) не знаю. Но я всегда делаю через local boolexpr А группа действительно удаляется) не заметил DaeDR добавил:
И строки не удаляются
Хотя кто-то мне сказал, что через переменные это не поможет, но все же:
На душе будет спокойней |
10.04.2012, 16:08 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,598Активность: |
DaeDR, ну через local location loc call Removelocation(loc ) и всё... ну можно чисто нативками но там то на то и выдет... а нафиг ты строку обнуляеш? нулл не хендлу присвоил? это то же базовый тип, их ненужно обнулять... Отредактировано quq_CCCP, 10.04.2012 в 16:14. |
10.04.2012, 16:08 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DaeDR
offline
Опыт:
8,074Активность: |
DaeDR добавил: И вот еще: Передача и хранение данных в варкрафте. |
10.04.2012, 16:21 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|