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

  • Автор темы Автор темы ZLOY
  • Дата начала Дата начала
Люди у морфа на скиле перекачки статов именно в худе на иконке есть реальные статы ,как именно это сделано если моно примерчик)
 
Помогите, пожалуйста. Функция 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()
 
Помогите, пожалуйста. Функция 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
Зашел в свою кастомку спустя пол года перестала корректно работать лвл система дается всего 19 скилл поинтов за 99 уровней.Кто знает что валвы натворили?
 
Зашел в свою кастомку спустя пол года перестала корректно работать лвл система дается всего 19 скилл поинтов за 99 уровней.Кто знает что валвы натворили?
после 30 уровна перестают даватся скилл поинты, выдвавай вручную в ивенте апа уровня
 
Всем доброго времени суток! Решил попробовать себя в создании простой кастомной игры и встретился с проблемой barebones. Когда поставил barebones вокруг персонажа появился синий круг, искал ответы на форуме не нашел, подскажите как его убрать.1589895590976.png
 
Всем доброго времени суток! Решил попробовать себя в создании простой кастомной игры и встретился с проблемой barebones. Когда поставил barebones вокруг персонажа появился синий круг, искал ответы на форуме не нашел, подскажите как его убрать.Посмотреть вложение 1016
скорее всего это из за предмета(возможно)
 
Всем доброго времени суток! Решил попробовать себя в создании простой кастомной игры и встретился с проблемой barebones. Когда поставил barebones вокруг персонажа появился синий круг, искал ответы на форуме не нашел, подскажите как его убрать.Посмотреть вложение 1016
Очень похоже на индикатор вижена, при наведении на портрет героя с зажатым ALT...
 
Всем доброго времени суток! Решил попробовать себя в создании простой кастомной игры и встретился с проблемой barebones. Когда поставил barebones вокруг персонажа появился синий круг, искал ответы на форуме не нашел, подскажите как его убрать.Посмотреть вложение 1016
У меня такое было, если выключить, а затем опять включить туман войны.
 
Столкнулся с проблемой ,что есть челы которые воруют кастомку с каждой твоей обновой и выкладывают как свою. Еще сверху плюшки добавляют от себя дизбалансные, что привлекает себе внимание новичков которые сразу же хотят миллион золото и тд. Как можно закодировать или ограничить кастомку от других лиц
 
Вопросик если скилл выпускает несколько снарядов то как мне можно сделать множитель урона для каждого выпущенного? как то по инстансам разделить?

Код:
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 damage = {
        victim = hTarget,
        attacker = self.caster,
        damage = (self.dmg + self.int_multiplier)*Тута множитель(что здесь не ужели нету цифры чтобы умножить?),
        damage_type = DAMAGE_TYPE_MAGICAL,
        ability=self
        }

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

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

Через модифаер не охота как то , криво это что ли , вот надеюсь что то подскажут тут)
 
Последнее редактирование:
Столкнулся с проблемой ,что есть челы которые воруют кастомку с каждой твоей обновой и выкладывают как свою. Еще сверху плюшки добавляют от себя дизбалансные, что привлекает себе внимание новичков которые сразу же хотят миллион золото и тд. Как можно закодировать или ограничить кастомку от других лиц
Не знаю, как, но можно сделать как у ангел арены что скиллы и другие недоступные
 
Вопросик если скилл выпускает несколько снарядов то как мне можно сделать множитель урона для каждого выпущенного? как то по инстансам разделить?

Код:
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
 
Вопросик если скилл выпускает несколько снарядов то как мне можно сделать множитель урона для каждого выпущенного? как то по инстансам разделить?

Код:
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
Ясно пустая ссылка
Как тогда у ангел арене?
Этот метод возвращает ключ уникальный для кастомки и с ним вы можете обезопасить свои данные, например не писать скилл в файлах доты, а сделать свой сервер на который вы отсылаете запрос, в запросе помимо сопутствующей инфы вы передаёте этот ключ, если ключ от вашей кастомки то вы выполняете действие, иначе - не выполняете. Простой пример. У вас есть код скилла на луа. Вы его достаёте из кастомки и посещаете в бд сервера, при запуске кастомки отправляете запрос на получение этого скилла не забыв добавить ключ вашей кастомки. На сервере при получении запроса вы сначала проверяете ключ и если он совпадает с тем который принадлежит вашей кастомку, то достаёте код из бд и возвращает его в теле ответа. Если ключ не совпадает возвращаете ошибку.
При получении ответа на клиенте(в данном случае клиентом является сервер доты) вы выполняете этот скрипт через loadstring
 
Этот метод возвращает ключ уникальный для кастомки и с ним вы можете обезопасить свои данные, например не писать скилл в файлах доты, а сделать свой сервер на который вы отсылаете запрос, в запросе помимо сопутствующей инфы вы передаёте этот ключ, если ключ от вашей кастомки то вы выполняете действие, иначе - не выполняете. Простой пример. У вас есть код скилла на луа. Вы его достаёте из кастомки и посещаете в бд сервера, при запуске кастомки отправляете запрос на получение этого скилла не забыв добавить ключ вашей кастомки. На сервере при получении запроса вы сначала проверяете ключ и если он совпадает с тем который принадлежит вашей кастомку, то достаёте код из бд и возвращает его в теле ответа. Если ключ не совпадает возвращаете ошибку.
При получении ответа на клиенте(в данном случае клиентом является сервер доты) вы выполняете этот скрипт через loadstring
Как то не понятно.
Можно примерами ?)
 
Реклама: