XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
EviLInside

offline
Опыт: 3,543
Активность:
Нужен триггер распределения опыта
Короче , нужен триггер распределения опыта:
  1. Герой убивший другого героя получает 10%(для примера) от полного опыта убитого героя (если он находился в облости смерти героя , не далее 1000(т.е в ед. редактора)
2)Герой находившийся рядом при убйстве в области 1000, 4% от полного опыта убитого героя.
3)Те кто дальше 1000 не получают ничего.
P.S Если не трудно выложите карту с примером, и було бы лучше что б выполнено всё это было не на jass.
Старый 22.08.2006, 16:54
Nomak16
Принц Артес
offline
Опыт: 5,867
Активность:
Вот первый пункт я чтото непонял, можно поподробней?
Старый 22.08.2006, 19:01
IceBear
Вождь Мирового Картостроя
offline
Опыт: 7,800
Активность:
Я тоже понял, но в отдалении... Пиши попадробней.
Старый 22.08.2006, 19:03
Greshnikk

offline
Опыт: 897
Активность:
насчет первого пункта попробую обьяснить:
я понел так. допустим я убил героя 5 лвл. у него было 1000 опыта (на шкале опыта) то я получу 100 опыта. Если я убью чара 25 лвл (у него было 25000 опыта) то я получу 2500 опыта правильно.
Старый 22.08.2006, 19:10
DioD

offline
Опыт: 45,134
Активность:
не на джаз не получиться на джаз у меня есть готовая системка.
Старый 22.08.2006, 19:43
EviLInside

offline
Опыт: 3,543
Активность:
Давай на jass , тока не мог бы там строки с чуть более подробным объяснением вписать ?
Старый 22.08.2006, 20:15
DioD

offline
Опыт: 45,134
Активность:
Код:
function Bounty_Main_Action takes nothing returns nothing
    local unit    Dead_U_1 = GetDyingUnit()
    local unit    Kill_U_1 = GetKillingUnit()
    local unit    Temp_U_1
    local integer Base_I_1 = GetRandomInt(1,6)
    local integer Gold_I_1
    local integer Crys_I_1
    local integer Expr_I_1
    local integer Temp_I_1 = IMaxBJ(GetUnitLevel(Dead_U_1),GetHeroLevel(Dead_U_1))
    local integer Temp_I_2 = IMaxBJ(1,Temp_I_1)
    local string  Text_S_1
    local string  Temp_S_1
    local string  Temp_S_2
    local player  Owne_P_1 = GetOwningPlayer(Kill_U_1)
    local texttag TTag_T_1 = CreateTextTag()
    local real    Xcoo_R_1 = GetUnitX(Dead_U_1)
    local real    Ycoo_R_1 = GetUnitY(Dead_U_1)
    local group   Grou_G_1 = CreateGroup()
    local force   Forc_F_1 = CreateForce()
    local boolean Bool_B_1 = GetPlayerSlotState(Owne_P_1) == PLAYER_SLOT_STATE_PLAYING
    local boolean Bool_B_2 = GetPlayerController(Owne_P_1) == MAP_CONTROL_USER
    
    if IsUnitType(Dead_U_1,UNIT_TYPE_STRUCTURE) then
        set Gold_I_1 = Base_I_1*Temp_I_2*6
        set Crys_I_1 = 18
        set Expr_I_1 = 40*Temp_I_2
        set Temp_S_1 = "+"
        set Temp_S_2 = "|n|c0000FF00+"
        set Text_S_1 = Temp_S_1+I2S(Gold_I_1)+Temp_S_2+I2S(Crys_I_1)
    elseif IsUnitType(Dead_U_1,UNIT_TYPE_ANCIENT) then
        set Gold_I_1 = Base_I_1*Temp_I_2*3
        set Crys_I_1 = 12
        set Expr_I_1 = 4*Temp_I_2
        set Temp_S_1 = "+"
        set Temp_S_2 = "|n|c0000FF00+"
        set Text_S_1 = Temp_S_1+I2S(Gold_I_1)+Temp_S_2+I2S(Crys_I_1)
    elseif IsUnitType(Dead_U_1,UNIT_TYPE_HERO) then
        set Gold_I_1 = Base_I_1*Temp_I_2*2
        set Crys_I_1 = 6
        set Expr_I_1 = 8*Temp_I_2
        set Temp_S_1 = "+"
        set Temp_S_2 = "|n|c0000FF00+"
        set Text_S_1 = Temp_S_1+I2S(Gold_I_1)+Temp_S_2+I2S(Crys_I_1)
    else
        set Gold_I_1 = Base_I_1*Temp_I_2*1
        set Crys_I_1 = 1
        set Expr_I_1 = 4*Temp_I_2
        set Temp_S_1 = "+"
        set Temp_S_2 = "|n|c0000FF00+"
        set Text_S_1 = Temp_S_1+I2S(Gold_I_1)+Temp_S_2+I2S(Crys_I_1)
    endif
    if Bool_B_1 and Bool_B_2 then
        set Temp_U_1 = CreateUnit(Owne_P_1,'u006',-12288,-12288,0)
        call SetUnitExplodedBJ (Temp_U_1, true)
        call UnitApplyTimedLife(Temp_U_1, 'BTLF',60)
        call SetUnitUseFood    (Temp_U_1, true)
        set Temp_I_1 = GetPlayerState ( Owne_P_1, PLAYER_STATE_RESOURCE_FOOD_USED )
        set Temp_I_2 = GetPlayerState ( Owne_P_1, PLAYER_STATE_RESOURCE_FOOD_CAP  )
        call SetPlayerState(Owne_P_1,PLAYER_STATE_RESOURCE_FOOD_CAP,IMaxBJ(Temp_I_1,Temp_I_2)  )
        call SetPlayerHandicapXP(Owne_P_1,GetPlayerHandicapXP(Owne_P_1)+ 0.2)
        
        call SetPlayerState(Owne_P_1,PLAYER_STATE_RESOURCE_GOLD   , Gold_I_1 + GetPlayerState(Owne_P_1,PLAYER_STATE_RESOURCE_GOLD) )
        call SetPlayerState(Owne_P_1,PLAYER_STATE_GOLD_GATHERED   , Gold_I_1 + GetPlayerState(Owne_P_1,PLAYER_STATE_GOLD_GATHERED) )
        call SetPlayerState(Owne_P_1,PLAYER_STATE_RESOURCE_LUMBER , Crys_I_1 + GetPlayerState(Owne_P_1,PLAYER_STATE_RESOURCE_LUMBER) )
        call SetPlayerState(Owne_P_1,PLAYER_STATE_LUMBER_GATHERED , Crys_I_1 + GetPlayerState(Owne_P_1,PLAYER_STATE_LUMBER_GATHERED) )
        
        if IsUnitType(Kill_U_1,UNIT_TYPE_HERO) and not IsSuspendedXP(Kill_U_1) then
            set Temp_S_1 = "|n|c000000FF+"
            set Text_S_1 = Text_S_1+Temp_S_1+I2S(Expr_I_1)
            call AddHeroXP(Kill_U_1,Expr_I_1,true)
        endif
        set Temp_S_1="Abilities\\Spells\\Other\\Transmute\\PileofGold.mdl"
        if GetLocalPlayer() != Owne_P_1 then
            set Temp_S_1=""
        endif
        call InstantSFX(Temp_S_1,Xcoo_R_1,Ycoo_R_1)
        call FadeTextTag(Text_S_1,Xcoo_R_1,Ycoo_R_1,Owne_P_1)
                
    else
        call GroupEnumUnitsInRange(Grou_G_1,Xcoo_R_1,Ycoo_R_1,600,null)
        set Temp_S_2 = "+"+I2S(Gold_I_1/3+1)
        loop
            set Temp_U_1 = FirstOfGroup (Grou_G_1)
            exitwhen Temp_U_1 == null
            if IsUnitType(Temp_U_1,UNIT_TYPE_HERO) and IsUnitEnemy(Dead_U_1,GetOwningPlayer(Temp_U_1)) then
                call GroupRemoveUnit(Grou_G_1,Temp_U_1)
                if not IsPlayerInForce(GetOwningPlayer(Temp_U_1),Forc_F_1) then
                    call ForceAddPlayer(Forc_F_1,GetOwningPlayer(Temp_U_1))
                    call SetPlayerState(GetOwningPlayer(Temp_U_1),PLAYER_STATE_RESOURCE_GOLD,Gold_I_1/3+1 + GetPlayerState(GetOwningPlayer(Temp_U_1),PLAYER_STATE_RESOURCE_GOLD)  )
                    call SetPlayerState(GetOwningPlayer(Temp_U_1),PLAYER_STATE_GOLD_GATHERED,Gold_I_1/3+1 + GetPlayerState(GetOwningPlayer(Temp_U_1),PLAYER_STATE_GOLD_GATHERED) )
                    call FadeTextTag(Temp_S_2,Xcoo_R_1,Ycoo_R_1,GetOwningPlayer(Temp_U_1))
                    if GetLocalPlayer() == GetOwningPlayer(Temp_U_1) then
                        set Temp_S_1="Abilities\\Spells\\Other\\Transmute\\PileofGold.mdl"
                    else
                        set Temp_S_1=""
                    endif
                endif
            else
                call GroupRemoveUnit(Grou_G_1,Temp_U_1)
            endif
        endloop
        call InstantSFX(Temp_S_1,Xcoo_R_1,Ycoo_R_1)
    endif
    
    set Dead_U_1   = null
    set Kill_U_1   = null
    set Temp_U_1 = null
    set Text_S_1   = ""
    set Temp_S_1 = ""
    set Temp_S_2 = ""
    set TTag_T_1   = null
    call DestroyForce(Forc_F_1)
    call DestroyGroup(Grou_G_1)
    set Grou_G_1   = null
    set Forc_F_1   = null
endfunction

function Bounty_Main_Condition takes nothing returns boolean
    return IsUnitEnemy(GetKillingUnit(), GetOwningPlayer(GetDyingUnit())) and GetUnitTypeId(GetDyingUnit())!='u018'
endfunction

function Bounty_Child_Condition takes nothing returns boolean
    return GetUnitTypeId(GetDyingUnit())=='u018'
endfunction

function Bounty_Child_Action takes nothing returns nothing
    local player  Owner = GetOwningPlayer(GetDyingUnit())
    local integer Gold  = GetPlayerState(Owner, PLAYER_STATE_RESOURCE_GOLD)
    local integer GoldG = GetPlayerState(Owner, PLAYER_STATE_GOLD_GATHERED)
    local integer Food  = GetPlayerState(Owner, PLAYER_STATE_RESOURCE_FOOD_USED)
    call SetPlayerState(Owner,PLAYER_STATE_RESOURCE_GOLD , Gold  + Food + 1)
    call SetPlayerState(Owner,PLAYER_STATE_GOLD_GATHERED , GoldG + Food + 1)
    call SetPlayerHandicapXP(Owner,GetPlayerHandicapXP(Owner)-0.2)
    set Owner = null
endfunction

function InitTrig_Income_Main takes nothing returns nothing
    local trigger Main  = CreateTrigger()
    local trigger Child = CreateTrigger()
    local integer Loop  = 0
    call Preload("Abilities\\Spells\\Other\\Transmute\\PileofGold.mdl")
    loop
        exitwhen Loop == 15
        call TriggerRegisterPlayerUnitEvent(Main ,Player(Loop) ,EVENT_PLAYER_UNIT_DEATH,null)
        call TriggerRegisterPlayerUnitEvent(Child,Player(Loop) ,EVENT_PLAYER_UNIT_DEATH,null)
        set Loop = Loop + 1
    endloop
    call TriggerAddCondition(Main  , Condition( function Bounty_Main_Condition  ) )
    call TriggerAddCondition(Child , Condition( function Bounty_Child_Condition ) )
    call TriggerAddAction   (Main  , function  Bounty_Main_Action  )
    call TriggerAddAction   (Child , function  Bounty_Child_Action )
    set Main  = null
    set Child = null
    set Loop  = 0
endfunction

вопросы в личку
Старый 22.08.2006, 21:26
Greshnikk

offline
Опыт: 897
Активность:
DioDхммм судя по всему ты мастер Jass. Все утечки предусмотрел..
зачем if IsUnitType(Dead_U_1,UNIT_TYPE_STRUCTURE) ?? мы что опыт за здания берем?
и еще зачем call SetUnitExplodedBJ (Temp_U_1, true) ? нельзя просто remove сделать ? Хотя кого я учу )))
Старый 23.08.2006, 08:02
DioD

offline
Опыт: 45,134
Активность:
это не удля удаления того кто умер...
система чуток багнута и не доделана,хотя всё это временно.
Старый 23.08.2006, 10:59
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 21:56.