Простые вопросы #3

UFO

Пользователь
2 Сен 2016
17
0
Люди у морфа на скиле перекачки статов именно в худе на иконке есть реальные статы ,как именно это сделано если моно примерчик)
 

HexMarkoff

Пользователь
8 Май 2020
12
0
Проект
Dugeon rpg
Помогите, пожалуйста. Функция OnEntityKilled слушателя при вызове срабатывает 2 раза

Lua:
if Spawn == nil then
    _G.Spawn = class({})
end

function Spawn:InitGameMode()
    ListenToGameEvent('game_rules_state_change', Dynamic_Wrap(Spawn, 'OnGameRulesStateChange'), self)
    ListenToGameEvent('entity_killed', Dynamic_Wrap(Spawn, 'OnEntityKilled'), self)
end
    
function Spawn:OnGameRulesStateChange( keys )
    local newState = GameRules:State_Get()
    print("event OnGameRulesStateChange has called")

    if newState == DOTA_GAMERULES_STATE_PRE_GAME then
        SpawnBonusBox()
    end
end

function Spawn:OnEntityKilled( keys )
    local killedUnit = EntIndexToHScript( keys.entindex_killed )
    local killerUnit = EntIndexToHScript( keys.entindex_attacker )
    local name = killedUnit:GetUnitName()
    local team = killedUnit:GetTeam()
    print("event OnEntityKilled has called")
    if name == "npc_motherZombie" then
        DropItem(killedUnit, "item_golden_bag", 100) --заменить !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        DropItem(killedUnit, "item_bonus_str5", 50)
        DropItem(killedUnit, "item_bonus_agl5", 50)
        DropItem(killedUnit, "item_bonus_int5", 50)

        local caster_respoint = Entities:FindByName(nil,"spawner_motherZombies"):GetAbsOrigin() --Пробиваем адрес дома
        Timers:CreateTimer(50, function()              --Через сколько секунд появится новый фраер(5)
              local unit = CreateUnitByName(name, caster_respoint + RandomVector( RandomFloat( 0, 50)), true, nil, nil, team) --создаем нового пацыка по трем аргументам ( имя покойного ,адрес дома ,true,nil,nil,команда терпилы)
          end)

      elseif name == "npc_minion_zombie1" then
          DropItem(killedUnit, "item_part_poison", 5)
          DropItem(killedUnit, "item_bonus_str1", 3)
          DropItem(killedUnit, "item_bonus_agl1", 3)
          DropItem(killedUnit, "item_bonus_int1", 3)

              local caster_respoint = Entities:FindByName(nil,"spawner_zombies1"):GetAbsOrigin() --Пробиваем адрес дома
        Timers:CreateTimer(30, function()              --Через сколько секунд появится новый фраер(5)
              local unit = CreateUnitByName(name, caster_respoint + RandomVector( RandomFloat( 0, 50)), true, nil, nil, team) --создаем нового пацыка по трем аргументам ( имя покойного ,адрес дома ,true,nil,nil,команда терпилы)
          end)

      elseif name == "npc_minion_zombie2" then
          DropItem(killedUnit, "item_part_poison", 5)
          DropItem(killedUnit, "item_bonus_str1", 3)
          DropItem(killedUnit, "item_bonus_agl1", 3)
          DropItem(killedUnit, "item_bonus_int1", 3)

              local caster_respoint = Entities:FindByName(nil,"spawner_zombies2"):GetAbsOrigin() --Пробиваем адрес дома
        Timers:CreateTimer(30, function()              --Через сколько секунд появится новый фраер(5)
              local unit = CreateUnitByName(name, caster_respoint + RandomVector( RandomFloat( 0, 50)), true, nil, nil, team) --создаем нового пацыка по трем аргументам ( имя покойного ,адрес дома ,true,nil,nil,команда терпилы)
          end)

      elseif name == "npc_minion_zombie3" then
          DropItem(killedUnit, "item_part_poison", 5)
          DropItem(killedUnit, "item_bonus_str1", 3)
          DropItem(killedUnit, "item_bonus_agl1", 3)
          DropItem(killedUnit, "item_bonus_int1", 3)

              local caster_respoint = Entities:FindByName(nil,"spawner_zombies3"):GetAbsOrigin() --Пробиваем адрес дома
        Timers:CreateTimer(30, function()              --Через сколько секунд появится новый фраер(5)
              local unit = CreateUnitByName(name, caster_respoint + RandomVector( RandomFloat( 0, 50)), true, nil, nil, team) --создаем нового пацыка по трем аргументам ( имя покойного ,адрес дома ,true,nil,nil,команда терпилы)
          end)
      elseif name == "npc_minion_zombie4" then
          DropItem(killedUnit, "item_part_poison", 5)
            DropItem(killedUnit, "item_bonus_str1", 3)
          DropItem(killedUnit, "item_bonus_agl1", 3)
          DropItem(killedUnit, "item_bonus_int1", 3)

              local caster_respoint = Entities:FindByName(nil,"spawner_zombies4"):GetAbsOrigin() --Пробиваем адрес дома
        Timers:CreateTimer(30, function()              --Через сколько секунд появится новый фраер(5)
              local unit = CreateUnitByName(name, caster_respoint + RandomVector( RandomFloat( 0, 50)), true, nil, nil, team) --создаем нового пацыка по трем аргументам ( имя покойного ,адрес дома ,true,nil,nil,команда терпилы)
          end)
    end
end

function DropItem( target, item_name, chance )
    local ranFloat = RandomFloat(0, 100)
    if ranFloat <= chance then
        local unit = target           
        local spawnPoint = unit:GetAbsOrigin()   
        local newItem = CreateItem( item_name, nil, nil )
        local drop = CreateItemOnPositionForLaunch( spawnPoint, newItem )
        local initialPoint = target:GetAbsOrigin() + RandomVector( RandomFloat( 50, 125 ) )

        newItem:LaunchLootInitialHeight( false, 0, 150, 0.75, initialPoint )
    end
end

function goldBag(keys)
    local gold = keys.gold
    GiveGoldPlayers( gold )
end
function GiveGoldPlayers( gold )
    for index=0 ,4 do
        if PlayerResource:HasSelectedHero(index) then
            local player = PlayerResource:GetPlayer(index)
            local hero = PlayerResource:GetSelectedHeroEntity(index)
            hero:ModifyGold(gold, false, 0)
            SendOverheadEventMessage( player, OVERHEAD_ALERT_GOLD, hero, gold, nil )
        end
    end
end

function SpawnBonusBox()
    local name = "npc_seecret_box1"

    local spawnPosition1 = Entities:FindByName(nil,"spawner_box1"):GetAbsOrigin()
    local spawnPosition2 = Entities:FindByName(nil,"spawner_box2"):GetAbsOrigin()
    local spawnPosition3 = Entities:FindByName(nil,"spawner_box3"):GetAbsOrigin()



    local randInt = RandomInt(1, 6)

    if randInt == 1 then
        local unit = CreateUnitByName(name, spawnPosition1 + RandomVector( RandomFloat( 0, 10)), true, nil, nil, DOTA_TEAM_NEUTRALS)
        local unit = CreateUnitByName(name, spawnPosition2 + RandomVector( RandomFloat( 0, 10)), true, nil, nil, DOTA_TEAM_NEUTRALS)

    elseif randInt == 2 then
        local unit = CreateUnitByName(name, spawnPosition2 + RandomVector( RandomFloat( 0, 10)), true, nil, nil, DOTA_TEAM_NEUTRALS)
        local unit = CreateUnitByName(name, spawnPosition3 + RandomVector( RandomFloat( 0, 10)), true, nil, nil, DOTA_TEAM_NEUTRALS)

    elseif randInt == 3 then
        local unit = CreateUnitByName(name, spawnPosition1 + RandomVector( RandomFloat( 0, 10)), true, nil, nil, DOTA_TEAM_NEUTRALS)
        local unit = CreateUnitByName(name, spawnPosition3 + RandomVector( RandomFloat( 0, 10)), true, nil, nil, DOTA_TEAM_NEUTRALS)

    elseif randInt == 4 then
        local unit = CreateUnitByName(name, spawnPosition1 + RandomVector( RandomFloat( 0, 10)), true, nil, nil, DOTA_TEAM_NEUTRALS)

    elseif randInt == 5 then
        local unit = CreateUnitByName(name, spawnPosition2 + RandomVector( RandomFloat( 0, 10)), true, nil, nil, DOTA_TEAM_NEUTRALS)

    elseif randInt == 6 then
        local unit = CreateUnitByName(name, spawnPosition3 + RandomVector( RandomFloat( 0, 10)), true, nil, nil, DOTA_TEAM_NEUTRALS)
    end
end

Spawn:InitGameMode()
 

Дикий Пёс

Друзья CG
28 Июн 2017
411
96
Проект
Petri Reborn
Помогите, пожалуйста. Функция OnEntityKilled слушателя при вызове срабатывает 2 раза

Lua:
if Spawn == nil then
    _G.Spawn = class({})
end

function Spawn:InitGameMode()
    ListenToGameEvent('game_rules_state_change', Dynamic_Wrap(Spawn, 'OnGameRulesStateChange'), self)
    ListenToGameEvent('entity_killed', Dynamic_Wrap(Spawn, 'OnEntityKilled'), self)
end
   
function Spawn:OnGameRulesStateChange( keys )
    local newState = GameRules:State_Get()
    print("event OnGameRulesStateChange has called")

    if newState == DOTA_GAMERULES_STATE_PRE_GAME then
        SpawnBonusBox()
    end
end

function Spawn:OnEntityKilled( keys )
    local killedUnit = EntIndexToHScript( keys.entindex_killed )
    local killerUnit = EntIndexToHScript( keys.entindex_attacker )
    local name = killedUnit:GetUnitName()
    local team = killedUnit:GetTeam()
    print("event OnEntityKilled has called")
    if name == "npc_motherZombie" then
        DropItem(killedUnit, "item_golden_bag", 100) --заменить !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        DropItem(killedUnit, "item_bonus_str5", 50)
        DropItem(killedUnit, "item_bonus_agl5", 50)
        DropItem(killedUnit, "item_bonus_int5", 50)

        local caster_respoint = Entities:FindByName(nil,"spawner_motherZombies"):GetAbsOrigin() --Пробиваем адрес дома
        Timers:CreateTimer(50, function()              --Через сколько секунд появится новый фраер(5)
              local unit = CreateUnitByName(name, caster_respoint + RandomVector( RandomFloat( 0, 50)), true, nil, nil, team) --создаем нового пацыка по трем аргументам ( имя покойного ,адрес дома ,true,nil,nil,команда терпилы)
          end)

      elseif name == "npc_minion_zombie1" then
          DropItem(killedUnit, "item_part_poison", 5)
          DropItem(killedUnit, "item_bonus_str1", 3)
          DropItem(killedUnit, "item_bonus_agl1", 3)
          DropItem(killedUnit, "item_bonus_int1", 3)

              local caster_respoint = Entities:FindByName(nil,"spawner_zombies1"):GetAbsOrigin() --Пробиваем адрес дома
        Timers:CreateTimer(30, function()              --Через сколько секунд появится новый фраер(5)
              local unit = CreateUnitByName(name, caster_respoint + RandomVector( RandomFloat( 0, 50)), true, nil, nil, team) --создаем нового пацыка по трем аргументам ( имя покойного ,адрес дома ,true,nil,nil,команда терпилы)
          end)

      elseif name == "npc_minion_zombie2" then
          DropItem(killedUnit, "item_part_poison", 5)
          DropItem(killedUnit, "item_bonus_str1", 3)
          DropItem(killedUnit, "item_bonus_agl1", 3)
          DropItem(killedUnit, "item_bonus_int1", 3)

              local caster_respoint = Entities:FindByName(nil,"spawner_zombies2"):GetAbsOrigin() --Пробиваем адрес дома
        Timers:CreateTimer(30, function()              --Через сколько секунд появится новый фраер(5)
              local unit = CreateUnitByName(name, caster_respoint + RandomVector( RandomFloat( 0, 50)), true, nil, nil, team) --создаем нового пацыка по трем аргументам ( имя покойного ,адрес дома ,true,nil,nil,команда терпилы)
          end)

      elseif name == "npc_minion_zombie3" then
          DropItem(killedUnit, "item_part_poison", 5)
          DropItem(killedUnit, "item_bonus_str1", 3)
          DropItem(killedUnit, "item_bonus_agl1", 3)
          DropItem(killedUnit, "item_bonus_int1", 3)

              local caster_respoint = Entities:FindByName(nil,"spawner_zombies3"):GetAbsOrigin() --Пробиваем адрес дома
        Timers:CreateTimer(30, function()              --Через сколько секунд появится новый фраер(5)
              local unit = CreateUnitByName(name, caster_respoint + RandomVector( RandomFloat( 0, 50)), true, nil, nil, team) --создаем нового пацыка по трем аргументам ( имя покойного ,адрес дома ,true,nil,nil,команда терпилы)
          end)
      elseif name == "npc_minion_zombie4" then
          DropItem(killedUnit, "item_part_poison", 5)
            DropItem(killedUnit, "item_bonus_str1", 3)
          DropItem(killedUnit, "item_bonus_agl1", 3)
          DropItem(killedUnit, "item_bonus_int1", 3)

              local caster_respoint = Entities:FindByName(nil,"spawner_zombies4"):GetAbsOrigin() --Пробиваем адрес дома
        Timers:CreateTimer(30, function()              --Через сколько секунд появится новый фраер(5)
              local unit = CreateUnitByName(name, caster_respoint + RandomVector( RandomFloat( 0, 50)), true, nil, nil, team) --создаем нового пацыка по трем аргументам ( имя покойного ,адрес дома ,true,nil,nil,команда терпилы)
          end)
    end
end

function DropItem( target, item_name, chance )
    local ranFloat = RandomFloat(0, 100)
    if ranFloat <= chance then
        local unit = target          
        local spawnPoint = unit:GetAbsOrigin()  
        local newItem = CreateItem( item_name, nil, nil )
        local drop = CreateItemOnPositionForLaunch( spawnPoint, newItem )
        local initialPoint = target:GetAbsOrigin() + RandomVector( RandomFloat( 50, 125 ) )

        newItem:LaunchLootInitialHeight( false, 0, 150, 0.75, initialPoint )
    end
end

function goldBag(keys)
    local gold = keys.gold
    GiveGoldPlayers( gold )
end
function GiveGoldPlayers( gold )
    for index=0 ,4 do
        if PlayerResource:HasSelectedHero(index) then
            local player = PlayerResource:GetPlayer(index)
            local hero = PlayerResource:GetSelectedHeroEntity(index)
            hero:ModifyGold(gold, false, 0)
            SendOverheadEventMessage( player, OVERHEAD_ALERT_GOLD, hero, gold, nil )
        end
    end
end

function SpawnBonusBox()
    local name = "npc_seecret_box1"

    local spawnPosition1 = Entities:FindByName(nil,"spawner_box1"):GetAbsOrigin()
    local spawnPosition2 = Entities:FindByName(nil,"spawner_box2"):GetAbsOrigin()
    local spawnPosition3 = Entities:FindByName(nil,"spawner_box3"):GetAbsOrigin()



    local randInt = RandomInt(1, 6)

    if randInt == 1 then
        local unit = CreateUnitByName(name, spawnPosition1 + RandomVector( RandomFloat( 0, 10)), true, nil, nil, DOTA_TEAM_NEUTRALS)
        local unit = CreateUnitByName(name, spawnPosition2 + RandomVector( RandomFloat( 0, 10)), true, nil, nil, DOTA_TEAM_NEUTRALS)

    elseif randInt == 2 then
        local unit = CreateUnitByName(name, spawnPosition2 + RandomVector( RandomFloat( 0, 10)), true, nil, nil, DOTA_TEAM_NEUTRALS)
        local unit = CreateUnitByName(name, spawnPosition3 + RandomVector( RandomFloat( 0, 10)), true, nil, nil, DOTA_TEAM_NEUTRALS)

    elseif randInt == 3 then
        local unit = CreateUnitByName(name, spawnPosition1 + RandomVector( RandomFloat( 0, 10)), true, nil, nil, DOTA_TEAM_NEUTRALS)
        local unit = CreateUnitByName(name, spawnPosition3 + RandomVector( RandomFloat( 0, 10)), true, nil, nil, DOTA_TEAM_NEUTRALS)

    elseif randInt == 4 then
        local unit = CreateUnitByName(name, spawnPosition1 + RandomVector( RandomFloat( 0, 10)), true, nil, nil, DOTA_TEAM_NEUTRALS)

    elseif randInt == 5 then
        local unit = CreateUnitByName(name, spawnPosition2 + RandomVector( RandomFloat( 0, 10)), true, nil, nil, DOTA_TEAM_NEUTRALS)

    elseif randInt == 6 then
        local unit = CreateUnitByName(name, spawnPosition3 + RandomVector( RandomFloat( 0, 10)), true, nil, nil, DOTA_TEAM_NEUTRALS)
    end
end

Spawn:InitGameMode()
это можно сократить раз в 15 минимум
 
  • Нравится
Реакции: HexMarkoff

alex_gadzy

Пользователь
28 Июн 2019
49
2
Зашел в свою кастомку спустя пол года перестала корректно работать лвл система дается всего 19 скилл поинтов за 99 уровней.Кто знает что валвы натворили?
 

Дикий Пёс

Друзья CG
28 Июн 2017
411
96
Проект
Petri Reborn
Зашел в свою кастомку спустя пол года перестала корректно работать лвл система дается всего 19 скилл поинтов за 99 уровней.Кто знает что валвы натворили?
после 30 уровна перестают даватся скилл поинты, выдвавай вручную в ивенте апа уровня
 

simondv4

Новичок
19 Май 2020
1
0
Всем доброго времени суток! Решил попробовать себя в создании простой кастомной игры и встретился с проблемой barebones. Когда поставил barebones вокруг персонажа появился синий круг, искал ответы на форуме не нашел, подскажите как его убрать.1589895590976.png
 

DDSuper

Друзья CG
31 Май 2019
405
57
Всем доброго времени суток! Решил попробовать себя в создании простой кастомной игры и встретился с проблемой barebones. Когда поставил barebones вокруг персонажа появился синий круг, искал ответы на форуме не нашел, подскажите как его убрать.Посмотреть вложение 1016
скорее всего это из за предмета(возможно)
 

muRLoc

Активный
25 Ноя 2018
83
23
Всем доброго времени суток! Решил попробовать себя в создании простой кастомной игры и встретился с проблемой barebones. Когда поставил barebones вокруг персонажа появился синий круг, искал ответы на форуме не нашел, подскажите как его убрать.Посмотреть вложение 1016
Очень похоже на индикатор вижена, при наведении на портрет героя с зажатым ALT...
 
20 Дек 2016
892
170
Всем доброго времени суток! Решил попробовать себя в создании простой кастомной игры и встретился с проблемой barebones. Когда поставил barebones вокруг персонажа появился синий круг, искал ответы на форуме не нашел, подскажите как его убрать.Посмотреть вложение 1016
У меня такое было, если выключить, а затем опять включить туман войны.
 

barto

Пользователь
25 Апр 2020
12
2
Проект
net
Столкнулся с проблемой ,что есть челы которые воруют кастомку с каждой твоей обновой и выкладывают как свою. Еще сверху плюшки добавляют от себя дизбалансные, что привлекает себе внимание новичков которые сразу же хотят миллион золото и тд. Как можно закодировать или ограничить кастомку от других лиц
 

UFO

Пользователь
2 Сен 2016
17
0
Вопросик если скилл выпускает несколько снарядов то как мне можно сделать множитель урона для каждого выпущенного? как то по инстансам разделить?

Код:
function zzz:OnProjectileHit(hTarget, vLocation)
    if hTarget ~= nil then

     local damage = {
        victim = hTarget,
        attacker = self.caster,
        damage = (self.dmg + self.int_multiplier)*Тута множитель,
        damage_type = DAMAGE_TYPE_MAGICAL,
        ability=self
        }

        ApplyDamage( damage )
    end
 end
 

DDSuper

Друзья CG
31 Май 2019
405
57
Вопросик если скилл выпускает несколько снарядов то как мне можно сделать множитель урона для каждого выпущенного? как то по инстансам разделить?

Код:
function zzz:OnProjectileHit(hTarget, vLocation)
    if hTarget ~= nil then

     local damage = {
        victim = hTarget,
        attacker = self.caster,
        damage = (self.dmg + self.int_multiplier)*Тута множитель(что здесь не ужели нету цифры чтобы умножить?),
        damage_type = DAMAGE_TYPE_MAGICAL,
        ability=self
        }

        ApplyDamage( damage )
    end
end
А цифра есть для умножение? Или это в скобках, умножитель который, только вместо звезды, плюсик. ?
 

DDSuper

Друзья CG
31 Май 2019
405
57
Столкнулся с проблемой ,что есть челы которые воруют кастомку с каждой твоей обновой и выкладывают как свою. Еще сверху плюшки добавляют от себя дизбалансные, что привлекает себе внимание новичков которые сразу же хотят миллион золото и тд. Как можно закодировать или ограничить кастомку от других лиц
Не знаю, как, но можно сделать как у ангел арены что скиллы и другие недоступные
 

UFO

Пользователь
2 Сен 2016
17
0
А цифра есть для умножение? Или это в скобках, умножитель который, только вместо звезды, плюсик. ?
Эта цифра что то вроди множителя урона , скил наносит 100% урона (dmg=Totaldmg*1)
По задумке нужно что бы следующий снаряд нанёс 50% урона (т.е. dmg=Totaldmg*0.5)

Ну тоесть передать любую цифру через self не проблема вопрос в том как понять что второй снаряд зацепил ту же цель что и первый)

Через модифаер не охота как то , криво это что ли , вот надеюсь что то подскажут тут)
 
Последнее редактирование:

LAPKI

Продвинутый
26 Окт 2018
271
61
Столкнулся с проблемой ,что есть челы которые воруют кастомку с каждой твоей обновой и выкладывают как свою. Еще сверху плюшки добавляют от себя дизбалансные, что привлекает себе внимание новичков которые сразу же хотят миллион золото и тд. Как можно закодировать или ограничить кастомку от других лиц
Не знаю, как, но можно сделать как у ангел арены что скиллы и другие недоступные
 

muRLoc

Активный
25 Ноя 2018
83
23
Вопросик если скилл выпускает несколько снарядов то как мне можно сделать множитель урона для каждого выпущенного? как то по инстансам разделить?

Код:
function zzz:OnProjectileHit(hTarget, vLocation)
    if hTarget ~= nil then

     local damage = {
        victim = hTarget,
        attacker = self.caster,
        damage = (self.dmg + self.int_multiplier)*Тута множитель,
        damage_type = DAMAGE_TYPE_MAGICAL,
        ability=self
        }

        ApplyDamage( damage )
    end
end
Код:
function zzz:OnProjectileHit(hTarget, vLocation)
    if hTarget ~= nil then

        local total_damage = self.dmg + self.int_multiplier
        local hit_multiplier = 0.5
        local damage_table = {
        victim = hTarget,
        attacker = self.caster,
        damage_type = DAMAGE_TYPE_MAGICAL,
        ability=self
        }

        if hTarget.hit_damage and hTarget.hit_damage > 0 then
            total_damage = hTarget.hit_damage * hit_multiplier 
            hTarget.hit_damage = total_damage
        else
            hTarget.hit_damage = total_damage
        end

        damage_table.damage = total_damage,
        ApplyDamage( damage_table )
    end
 end
Тебе остается только придумать как обнулять hTarget.hit_damage
 

ZLOY

Администратор
Команда форума
27 Июн 2016
953
182
Вопросик если скилл выпускает несколько снарядов то как мне можно сделать множитель урона для каждого выпущенного? как то по инстансам разделить?

Код:
function zzz:OnProjectileHit(hTarget, vLocation)
    if hTarget ~= nil then

     local damage = {
        victim = hTarget,
        attacker = self.caster,
        damage = (self.dmg + self.int_multiplier)*Тута множитель,
        damage_type = DAMAGE_TYPE_MAGICAL,
        ability=self
        }

        ApplyDamage( damage )
    end
end
 
  • Нравится
Реакции: Dangalor и UFO

LAPKI

Продвинутый
26 Окт 2018
271
61
Ясно пустая ссылка
Как тогда у ангел арене?
Этот метод возвращает ключ уникальный для кастомки и с ним вы можете обезопасить свои данные, например не писать скилл в файлах доты, а сделать свой сервер на который вы отсылаете запрос, в запросе помимо сопутствующей инфы вы передаёте этот ключ, если ключ от вашей кастомки то вы выполняете действие, иначе - не выполняете. Простой пример. У вас есть код скилла на луа. Вы его достаёте из кастомки и посещаете в бд сервера, при запуске кастомки отправляете запрос на получение этого скилла не забыв добавить ключ вашей кастомки. На сервере при получении запроса вы сначала проверяете ключ и если он совпадает с тем который принадлежит вашей кастомку, то достаёте код из бд и возвращает его в теле ответа. Если ключ не совпадает возвращаете ошибку.
При получении ответа на клиенте(в данном случае клиентом является сервер доты) вы выполняете этот скрипт через loadstring
 

DDSuper

Друзья CG
31 Май 2019
405
57
Этот метод возвращает ключ уникальный для кастомки и с ним вы можете обезопасить свои данные, например не писать скилл в файлах доты, а сделать свой сервер на который вы отсылаете запрос, в запросе помимо сопутствующей инфы вы передаёте этот ключ, если ключ от вашей кастомки то вы выполняете действие, иначе - не выполняете. Простой пример. У вас есть код скилла на луа. Вы его достаёте из кастомки и посещаете в бд сервера, при запуске кастомки отправляете запрос на получение этого скилла не забыв добавить ключ вашей кастомки. На сервере при получении запроса вы сначала проверяете ключ и если он совпадает с тем который принадлежит вашей кастомку, то достаёте код из бд и возвращает его в теле ответа. Если ключ не совпадает возвращаете ошибку.
При получении ответа на клиенте(в данном случае клиентом является сервер доты) вы выполняете этот скрипт через loadstring
Как то не понятно.
Можно примерами ?)
 
Реклама: