|
|
|
|
утечка... утечка...
|
|
Hexing | Дата: Пятница, 05 Августа 2011, 15:34:20 | Сообщение # 1 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Code globals boolean array Selected boolean array preSelected unit array Heroes real array HeroesInt real array HeroesAgi real array HeroesStr real array HeroesMgHeal real array HeroesMgDmg leaderboard array LeaderBoards trigger heroRespawn = CreateTrigger() trigger LevelUp = CreateTrigger() integer array prevLvl endglobals
library mainLib initializer mainInit private function heroResp takes nothing returns nothing local unit u = GetDyingUnit() call ReviveHero(u,GetRectCenterX(gg_rct_spawnLoc),GetRectCenterY(gg_rct_spawnLoc), true ) call PauseUnit(u,true) call TriggerSleepAction(3.00) call PauseUnit(u,false) set u = null endfunction private function UpdateLeaderboard takes nothing returns nothing integer i = 0 /*loop call LeaderboardSetSizeByItemCount(LeaderBoards[i], 2) call LeaderboardSetLabel(LeaderBoards[i], "|c00FF0101Х|r|c00FF4908а|r|c00FF900Fр|r|c00FEC808а|r|c00FEFF01к|r|c008FDF00т|r|c0021C000е|r|c0014D580р|r|c0007EAFFи|r|c000475FFс|r|c000201F Fт|r|c002C01D5и|r|c005500AAк|r|c007F0080и|r \n|c00FE8DFFС|r|c00F280F3и|r|c00E773E8л|r|c00DB67DCа|r|c00D05AD1 |r|c00C44DC5м|r|c00B940BAа|r|c00AD33AEг|r|c00A226A3и|r|c00961A97и|r|c008B0D8C:|r|c007F0080 |r" + I2S(R2I(HeroesMgDmg[i]))+"\n|c0083FF69С|r|c007CFB62и|r|c0076F75Bл|r|c006FF254а|r|c0069EE4D |r|c0062EA46и|r|c005CE63Fс|r|c0055E238ц|r|c004FDD31е|r|c0048D92Aл|r|c0042D523е|r|c003BD11Cн|r|c0035CD15и|r|c002EC80Eя|r|c0028C407:|r|c0021C0 00 |r" + I2S(R2I(HeroesMgHeal[i]))) set i = i+1 exitwhen i == 8 endloop */ endfunction private function HeroUpAstralMage takes unit hero returns nothing local integer lvl = GetUnitLevel(hero) /////// 'A003' = актив книга /////// 'A007' = пассив книга if(lvl == 1) then call SetUnitAbilityLevel(hero, 'A003', 2) return endif if(lvl == 3) then call SetUnitAbilityLevel(hero, 'A003', 3) return endif if(lvl == 2) then call SetUnitAbilityLevel(hero, 'A007', 2) return endif endfunction private function onSelectUp takes unit hero returns nothing local player pl = GetOwningPlayer(hero) local integer utype = GetUnitTypeId(hero) call SetPlayerState(pl, PLAYER_STATE_RESOURCE_LUMBER, GetPlayerState(pl, PLAYER_STATE_RESOURCE_LUMBER) + 5) if(utype == 'H001') then call HeroUpAstralMage(hero) endif endfunction private function SelectHim takes nothing returns nothing local integer id = GetPlayerId(GetTriggerPlayer()) local integer u = GetUnitTypeId(GetTriggerUnit()) if(Selected[id] == true) then return endif if(preSelected[id] == true) then set Selected[id] = true; set Heroes[id] = CreateUnit(Player(id),u ,GetRectCenterX(gg_rct_spawnLoc),GetRectCenterY(gg_rct_spawnLoc),180) set bj_lastCreatedUnit = Heroes[id] // set bj_lastCreatedUnit = CreateUnit(Player(id),u ,GetRectCenterX(gg_rct_spawnLoc),GetRectCenterY(gg_rct_spawnLoc),180) //set Heroes[id] = bj_lastCreatedUnit call TriggerRegisterUnitEvent(heroRespawn, Heroes[id], EVENT_UNIT_DEATH ) call TriggerRegisterUnitEvent(LevelUp,Heroes[id], EVENT_UNIT_HERO_LEVEL) SetPlayerState(Player(id),PLAYER_STATE_RESOURCE_LUMBER,5) if(u == 'H001') then call HeroUpAstralMage(Heroes[id]) endif //call onSelectUp(Heroes[id]) call SetCameraRotateMode(0, 0, 0, 0) if (GetLocalPlayer() == Player(id)) then call PanCameraToTimed(GetUnitX(Heroes[id]),GetUnitY(Heroes[id]),0) call ClearSelection() endif //LB /*set LeaderBoards[id] = CreateLeaderboard() local player pl = GetOwningPlayer(Heroes[id]) call LeaderboardSetLabel(LeaderBoards[id], "|c00FF0101Х|r|c00FF4908а|r|c00FF900Fр|r|c00FEC808а|r|c00FEFF01к|r|c008FDF00т|r|c0021C000е|r|c0014D580р|r|c0007EAFFи|r|c000475FFс|r|c000201F Fт|r|c002C01D5и|r|c005500AAк|r|c007F0080и|r\n\n") call PlayerSetLeaderboard(pl, LeaderBoards[id]) call LeaderboardDisplay(LeaderBoards[id], true) call UpdateLeaderboard()*/ //end LB else set preSelected[id] = true call DisplayTimedTextToPlayer(GetTriggerPlayer(),0,0, 5.00, "|cFF0080FF"+GetUnitName(GetTriggerUnit())+"|r") if(u == 'H001') then call DisplayTimedTextToPlayer(GetTriggerPlayer(),0,0, 5.00, "Путь грации,\nПуть мудрости,\nПуть хаоса.") endif endif endfunction private function deSelectHim takes nothing returns nothing local integer id = GetPlayerId(GetTriggerPlayer()) if(Selected[id] == true) then return endif set preSelected[id] = false endfunction private function ShowSelectHelpMessage takes nothing returns nothing if not(Selected[GetPlayerId(GetLocalPlayer())] == true) call DisplayTimedTextToPlayer( GetLocalPlayer(),0,0, 10.00, "Щелкните по герою, чтобы узнать его хар-ки. Щелкните 2-ой раз чтобы выбрать героя.") endif endfunction function GiveXpGold takes integer xp, integer gold, player who returns nothing local integer index = 0 loop call AddHeroXP(Heroes[index], xp, true) // local texttag xtag = CreateTextTag() call SetTextTagText(xtag,"+" + I2S(xp)+" опыта", 0.0184) call SetTextTagPosUnit(xtag, Heroes[index], 0) call SetTextTagColor(xtag, 255, 0, 255, 100) call SetTextTagPermanent(xtag, false) call SetTextTagLifespan( xtag, 2.00 ) call SetTextTagVelocity(xtag,0,0.02) // set index = index + 1 exitwhen (index == 8) endloop call SetPlayerState(who, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(who, PLAYER_STATE_RESOURCE_GOLD) + gold) endfunction private function DeathActs takes nothing returns nothing local real gold = I2R( GetUnitLevel(GetDyingUnit()) + 7 ) * I2R( GetUnitLevel(GetDyingUnit()) + 7 ) * GetRandomReal(0.1, 0.2) local real xp = I2R( GetUnitLevel(GetDyingUnit()) + 2 ) * I2R(GetUnitLevel(GetDyingUnit()) + 2 ) * GetRandomReal(0.7,1.3) call GiveXpGold(R2I(xp),R2I(gold),GetOwningPlayer(GetKillingUnit())) local texttag gtag = CreateTextTag() call SetTextTagText(gtag,"+" + I2S(R2I(gold))+" золота", 0.0184) call SetTextTagPosUnit(gtag, GetDyingUnit(), 0) call SetTextTagColor(gtag, 255, 255, 0, 100) call SetTextTagPermanent(gtag, false) call SetTextTagLifespan( gtag, 2.00 ) call SetTextTagVelocity(gtag,0,0.03) //**************\\ endfunction private function onPick takes nothing returns nothing local unit picker = GetTriggerUnit() local item picked = GetManipulatedItem() local integer level = GetItemLevel(picked) local integer pos = 0 local integer i = 0 loop if(UnitItemInSlot(picker,i) == picked) then pos = i endif set i = i+1 exitwhen(i==6) endloop set i = 0 loop if not(i == pos) then if(GetItemLevel(UnitItemInSlot(picker,i)) == level) then call UnitDropItemPoint(picker,picked,GetItemX(picked),GetItemY(picked)) call DisplayTimedTextToPlayer( GetOwningPlayer(picker),0,0, 4.00, "У вас уже есть предмет этого типа." ) endif endif set i = i+1 exitwhen(i==6) endloop endfunction private function HeroModify takes player pl, real Int, real Agi, real Str, real MgDmg, real MgHeal returns nothing local integer id = GetPlayerId(pl) set HeroesStr[id] = HeroesStr[id] + Str set HeroesInt[id] = HeroesInt[id] + Int set HeroesAgi[id] = HeroesAgi[id] + Agi call SetHeroInt(Heroes[id], R2I(HeroesInt[id]),true) call SetHeroStr(Heroes[id], R2I(HeroesStr[id]),true) call SetHeroAgi(Heroes[id], R2I(HeroesAgi[id]),true) set HeroesMgDmg[id] = HeroesMgDmg[id]+MgDmg set HeroesMgHeal[id] = HeroesMgHeal[id]+MgHeal endfunction private function onSkillPick takes nothing returns nothing local unit hero = GetLearningUnit() local integer skill = GetLearnedSkill() local player owner = GetOwningPlayer(hero) local effect ef call UnitRemoveAbility(hero,skill) call UnitModifySkillPoints(hero,1) if(GetPlayerState(owner,PLAYER_STATE_RESOURCE_LUMBER) == 0) then call DisplayTimedTextToPlayer( owner,0,0, 4.00, "Недостаточно очков способностей(дерево)" ) return endif SetPlayerState(owner,PLAYER_STATE_RESOURCE_LUMBER,GetPlayerState(owner,PLAYER_STATE_RESOURCE_LUMBER)-1) if(skill == 'A002') then //int .92 agi .31 str .27 dmg 1.1 heal 1.1// мудрость call HeroModify(owner,0.92,0.31,0.27,1.1,1.1) set ef = AddSpecialEffect("Abilities\\Spells\\Items\\TomeOfRetraining\\TomeOfRetrainingCaster.mdl", GetUnitX(hero), GetUnitY(hero)) elseif(skill == 'A004') then //int .79 agi .20 str .51 dmg 2.05 heal 0.15// хаос call HeroModify(owner,0.79,0.20,0.51,2.05,0.15) set ef = AddSpecialEffect("Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl", GetUnitX(hero), GetUnitY(hero)) elseif(skill == 'A005') then //int .75 agi .34 str .41 dmg 0.75 heal 1.45// грация call HeroModify(owner,0.75,0.34,0.41,0.75,1.45) set ef = AddSpecialEffect("Objects\\Spawnmodels\\NightElf\\EntBirthTarget\\EntBirthTarget.mdl", GetUnitX(hero), GetUnitY(hero)) endif call UpdateLeaderboard() set ef = null set hero = null endfunction private function onLevelUp takes nothing returns nothing local unit hero = GetTriggerUnit() local player pl = GetOwningPlayer(hero) local integer utype = GetUnitTypeId(hero) local integer lvl = GetUnitLevel(hero) local integer id = GetPlayerId(pl) call SetPlayerState(pl, PLAYER_STATE_RESOURCE_LUMBER, GetPlayerState(pl, PLAYER_STATE_RESOURCE_LUMBER) + 5*(lvl-prevLvl[id])) set prevLvl[id] = lvl if(utype == 'H001') then call HeroUpAstralMage(hero) endif set hero = null endfunction private function floatDamage takes real x, real y, string text returns nothing local texttag gtag = CreateTextTag() call SetTextTagText(gtag,text, 0.0184) call SetTextTagPosUnit(gtag, GetDyingUnit(), 0) call SetTextTagColor(gtag, 255, 0, 0, 100) call SetTextTagPermanent(gtag, false) call SetTextTagLifespan( gtag, 2.00 ) call SetTextTagVelocity(gtag,0,0.03) set gtag = null endfunction private function CastZabvShar takes unit caster, unit target, integer id returns nothing local real dmg = HeroesMgDmg[id]*1.4 call floatDamage(GetUnitX(target),GetUnitY(target),R2S(dmg)) call UnitDamageTarget(caster, target, dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_MAGIC, WEAPON_TYPE_WHOKNOWS) call PauseUnit(target, true) call TriggerSleepAction(GetRandomReal(0.5,1.25)) call PauseUnit(target, false) endfunction private function CastFrostBoom takes unit caster, unit target, integer id returns nothing local real dmg = HeroesMgDmg[id]*0.7 call floatDamage(GetUnitX(target),GetUnitY(target),R2S(dmg)) call UnitDamagePoint(caster, 0, 250, GetUnitX(target),GetUnitY(target), dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_MAGIC, WEAPON_TYPE_WHOKNOWS) endfunction private function onCastActs takes nothing returns nothing local integer spl = GetSpellAbilityId() local unit caster = GetSpellAbilityUnit() local unit target = GetSpellTargetUnit() local player owner = GetOwningPlayer(caster) local integer id = GetPlayerId(owner) if(spl == 'A006') then //140% call CastZabvShar(caster,target,id) endif if(spl == 'A007') then //70% call CastFrostBoom(caster,target,id) endif endfunction private function SelectHeroActions takes nothing returns nothing local integer index = 0 local timer PeriodicMessage = CreateTimer() call ShowSelectHelpMessage() call TimerStart(PeriodicMessage, 25, true,function ShowSelectHelpMessage) local trigger SelectHeroHim = CreateTrigger() local trigger deSelectHeroHim = CreateTrigger() local trigger PickItem = CreateTrigger() local trigger StatsControl = CreateTrigger() local trigger onCast = CreateTrigger() call TriggerAddAction(SelectHeroHim,function SelectHim) call TriggerAddAction(deSelectHeroHim,function deSelectHim) call TriggerAddAction(PickItem,function onPick) call TriggerAddAction(StatsControl,function onSkillPick) call TriggerAddAction(heroRespawn, function heroResp ) call TriggerAddAction(LevelUp, function onLevelUp ) call TriggerAddAction(onCast, function onCastActs) loop set Selected[index]=false set preSelected[index]=false set HeroesAgi[index]=5 set HeroesStr[index]=5 set HeroesInt[index]=5 set HeroesMgHeal[index]=10 set HeroesMgDmg[index]=10 set prevLvl[index] = 1 call TriggerRegisterPlayerUnitEvent(onCast, Player(index), EVENT_PLAYER_UNIT_SPELL_CAST, null) call TriggerRegisterPlayerUnitEvent( StatsControl,Player(index), EVENT_PLAYER_HERO_SKILL ,null) call TriggerRegisterPlayerUnitEvent(SelectHeroHim, Player(index), EVENT_PLAYER_UNIT_SELECTED, null) call TriggerRegisterPlayerUnitEvent(deSelectHeroHim, Player(index), EVENT_PLAYER_UNIT_DESELECTED, null) call TriggerRegisterPlayerUnitEvent( PickItem,Player(index) , EVENT_PLAYER_UNIT_PICKUP_ITEM, null ) set index = index+1 exitwhen(index == 8) endloop call PanCameraToTimed(GetRectCenterX(gg_rct_spawnLoc),GetRectCenterY(gg_rct_spawnLoc),0) call TriggerSleepAction(0.001) call SetCameraRotateMode(GetRectCenterX(gg_rct_spawnLoc), GetRectCenterY(gg_rct_spawnLoc), 0, 36000) set PeriodicMessage = null set SelectHeroHim = null set deSelectHeroHim = null endfunction private function mainInit takes nothing returns nothing call DisplayTimedTextToPlayer( GetLocalPlayer(),0,0, 4.00, "Добро пожаловать в мир рпг!" ) call SetFloatGameState(GAME_STATE_TIME_OF_DAY, 18.00) call SetPlayerState(Player(PLAYER_NEUTRAL_AGGRESSIVE), PLAYER_STATE_NO_CREEP_SLEEP, 1) call WakePlayerUnits(Player(PLAYER_NEUTRAL_AGGRESSIVE)) local trigger CreepDie = CreateTrigger() call TriggerRegisterPlayerUnitEvent(CreepDie,Player(PLAYER_NEUTRAL_AGGRESSIVE),EVENT_PLAYER_UNIT_DEATH,null) call TriggerAddAction(CreepDie,function DeathActs ) call SelectHeroActions() set CreepDie = null endfunction endlibrary
function GiveReward takes integer xp, integer gold returns nothing local integer index = 0 loop call AddHeroXP(Heroes[index], xp, true) call SetPlayerState(Player(index), PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(Player(index), PLAYER_STATE_RESOURCE_GOLD) + gold) set index = index+1 exitwhen (index == 8) endloop endfunction
Найдите утечку пожалуйста, уже голову сломал... лидерборд повытыкал, функции слепил в одну, getlocalplayer()-ы проверил, ни одна функция внутри не возвращает хендлов... но как только кто-то выберает гера, всех кроме хоста выбрасывает(десинхрон). Вот как такое может быть, у меня же хендлов и локало не создается между GetLocalPlayer()... шо такое? исходники только в личку, проект долго делал) Спойлер не робит почему то, поэтому без него код. За криворукасть кода и бесполезное использование library по губам не бить... я тоже видите-ли настрадался
|
|
|
|
SirNikolas | Дата: Пятница, 05 Августа 2011, 15:48:56 | Сообщение # 2 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Ты хоть объясни, что делает код и на какой функции он вылетает.
|
|
|
|
Hexing | Дата: Пятница, 05 Августа 2011, 16:04:44 | Сообщение # 3 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| В начале всё работает. Перед нами 3 героя, они нейтрально пассивные и их можно выделить. Больше рядом ничего выделяемого нет. глобалки: Code globals boolean array Selected boolean array preSelected endglobals Code local trigger SelectHeroHim = CreateTrigger() local trigger deSelectHeroHim = CreateTrigger() Триггеры отвечающие за выделение героя. Code call TriggerAddAction(SelectHeroHim,function SelectHim) call TriggerAddAction(deSelectHeroHim,function deSelectHim) собственно их действия Code loop set Selected[index]=false //отвечает за то, что герой уже выбран.(тип boolean) set preSelected[index]=false//отвечает за то, что герой уже выделен(тип boolean, так как не нужно следить какой именно юнит выделен, ведь выделить несколько пассивных нельзя, а при десселекте, серавно preSelected = false) call TriggerRegisterPlayerUnitEvent(SelectHeroHim, Player(index), EVENT_PLAYER_UNIT_SELECTED, null) //при выделении... call TriggerRegisterPlayerUnitEvent(deSelectHeroHim, Player(index), EVENT_PLAYER_UNIT_DESELECTED, null) //при "отпускании" set index = index+1 exitwhen(index == 8) endloop тута мы лупим ивенты и обнуляем коечто -- а вот и функции Code private function SelectHim takes nothing returns nothing local integer id = GetPlayerId(GetTriggerPlayer()) local integer u = GetUnitTypeId(GetTriggerUnit()) if(Selected[id] == true) then return endif if(preSelected[id] == true) then set Selected[id] = true; set Heroes[id] = CreateUnit(Player(id),u ,GetRectCenterX(gg_rct_spawnLoc),GetRectCenterY(gg_rct_spawnLoc),180) set bj_lastCreatedUnit = Heroes[id] // set bj_lastCreatedUnit = CreateUnit(Player(id),u ,GetRectCenterX(gg_rct_spawnLoc),GetRectCenterY(gg_rct_spawnLoc),180) //set Heroes[id] = bj_lastCreatedUnit call TriggerRegisterUnitEvent(heroRespawn, Heroes[id], EVENT_UNIT_DEATH ) call TriggerRegisterUnitEvent(LevelUp,Heroes[id], EVENT_UNIT_HERO_LEVEL) SetPlayerState(Player(id),PLAYER_STATE_RESOURCE_LUMBER,5) if(u == 'H001') then call HeroUpAstralMage(Heroes[id]) endif //call onSelectUp(Heroes[id]) call SetCameraRotateMode(0, 0, 0, 0) if (GetLocalPlayer() == Player(id)) then call PanCameraToTimed(GetUnitX(Heroes[id]),GetUnitY(Heroes[id]),0) call ClearSelection() endif //LB set LeaderBoards[id] = CreateLeaderboard() local player pl = GetOwningPlayer(Heroes[id]) call LeaderboardSetLabel(LeaderBoards[id], "|c00FF0101Х|r|c00FF4908а|r|c00FF900Fр|r|c00FEC808а|r|c00FEFF01к|r|c008FDF00т|r|c0021C000е|r|c0014D580р|r|c0007EAFFи|r|c000475FFс|r|c000201F Fт|r|c002C01D5и|r|c005500AAк|r|c007F0080и|r\n\n") call PlayerSetLeaderboard(pl, LeaderBoards[id]) call LeaderboardDisplay(LeaderBoards[id], true) call UpdateLeaderboard() //end LB else set preSelected[id] = true call DisplayTimedTextToPlayer(GetTriggerPlayer(),0,0, 5.00, "|cFF0080FF"+GetUnitName(GetTriggerUnit())+"|r") if(u == 'H001') then call DisplayTimedTextToPlayer(GetTriggerPlayer(),0,0, 5.00, "Путь грации,\nПуть мудрости,\nПуть хаоса.") endif endif endfunction private function deSelectHim takes nothing returns nothing local integer id = GetPlayerId(GetTriggerPlayer()) if(Selected[id] == true) then return endif set preSelected[id] = false endfunction
это всё что может вызвать десинхрон(на мой взгляд)Добавлено (05-08-2011, 16:03) ---------------------------------------------
Code call HeroUpAstralMage(Heroes[id]) в этом ничего страшного точно нет.Добавлено (05-08-2011, 16:04) ---------------------------------------------
Code call SetCameraRotateMode(0, 0, 0, 0) это я вытащил из getlocalplayer-а так как нету бж аналога для одного игрока. Но кажется не помогло
|
|
|
|
FkoFF | Дата: Пятница, 05 Августа 2011, 19:25:01 | Сообщение # 4 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| ммм, скажи мне, а зачем все эти извращения? сделать выбор героев кликом? тогда уж следовало писать систему а не вот это... Плюс ко всему жнпг? аль просто глобалки выбросил нам, что б мы видели?
function Preselect takes player who, unit target returns nothing
if Selected(who,target) then call CreateHero(who,target) else call SetSelected(who,target) endif
endif
как то так это должно выглядеть, тебе не кажется ?)
|
|
|
|
Hexing | Дата: Суббота, 06 Августа 2011, 09:26:40 | Сообщение # 5 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| я знаю это супег-гипер мега извращение... но это моя 1 серьезная мапа, напишу уже кривобока какнибудь, а там кже буду разбираться в след. проэктах, норм писать. Мне бы помощи
|
|
|
|
|
|
|
|
|
|
|