Сейчас 00:48:32 Пятница, 29 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
[Вопрос] HCL-код
WedeR00Дата: Четверг, 28 Июня 2012, 21:45:56 | Сообщение # 1
6 уровень
Группа: Проверенные
Сообщений: 162
Награды: 0
Репутация: 29
Блокировки:
Нерабочий код:
Code

function readhcl takes nothing returns nothing
          local integer i
          local integer j
          local integer h
          local integer v
          local string chars = "abcdefghijklmnopqrstuvwxyz0123456789 -=,."
          local integer array map
          local boolean array blocked
      
          set blocked[0] = true
          set blocked[50] = true
          set blocked[60] = true
          set blocked[70] = true
          set blocked[80] = true
          set blocked[90] = true
          set blocked[100] = true
          set i = 0
          set j = 0
      
          loop
              if blocked[j] then
                  set j = j + 1
              endif
              exitwhen j >= 256
              set map[j] = i
              set i = i + 1
              set j = j + 1
          endloop
            
          set i = 0
          loop
              exitwhen i >= 12
              set h = R2I(100*GetPlayerHandicap(Player(i)) + 0.5)
              if not blocked[h] then
                  set h = map[h]
                  set v = h/6
                  set h = h-v*6
      call SetPlayerHandicap(Player(i), h*0.11 + 0.55)
                  set command = command + SubString(chars, v, v+1)
              endif
              set i = i + 1
          endloop
endfunction

Переменная command в шапке global.
Запуск триггера по инициализации.

Проверка:
Code

function botu1 takes nothing returns nothing
      call DisplayTextToForce( GetPlayersAll(), ( "Hcl is : " + command ) )
endfunction


Карта, в которой все работает.

Исходный код библиотеки:
Code

///////////////////////////////////////////
/// HostBot Command Library
/// Last Modified: September 14, 2009
/// Authors: Strilanc,   
/// v1.01
///////////////////////////////////////////
/// Reads a command string transparently encoded into player handicaps by hostbots.
/// Allows at most one character from "abcdefghijklmnopqrstuvwxyz0123456789 -=,." per player.
/// Empty slots don't count towards the player count, but computers do.
///////////////////////////////////////////
library HCL initializer init
      globals
          private string command = ""
      endglobals
        
      public function GetCommandString takes nothing returns string
          return command
      endfunction
        
      private function init takes nothing returns nothing
          local integer i
          local integer j
          local integer h
          local integer v
          local string chars = "abcdefghijklmnopqrstuvwxyz0123456789 -=,."
          local integer array map
          local boolean array blocked

          //precompute mapping [have to avoid invalid and normal handicaps]
          set blocked[0] = true
          set blocked[50] = true
          set blocked[60] = true
          set blocked[70] = true
          set blocked[80] = true
          set blocked[90] = true
          set blocked[100] = true
          set i = 0
          set j = 0
          loop
              if blocked[j] then
                  set j = j + 1
              endif
              exitwhen j >= 256
              set map[j] = i
              set i = i + 1
              set j = j + 1
          endloop
            
          //Extract command string from player handicaps
          set i = 0
          loop
              exitwhen i >= 12
              set h = R2I(100*GetPlayerHandicap(Player(i)) + 0.5)
              if not blocked[h] then
                  set h = map[h]
                  set v = h/6
                  set h = h-v*6
                  call SetPlayerHandicap(Player(i), 0.5 + h/10.0)
                  set command = command + SubString(chars, v, v+1)
              endif
              set i = i + 1
          endloop
      endfunction
endlibrary


Итог: при проверке выводит сообщение "Hcl is :". Проверяется на хост-боте, т.е. сам hcl установлен и на карте-примере он работает.

Где ошибка??? Часа полтора сижу и верчу скрипт.


Сообщение отредактировал WedeR00 - Четверг, 28 Июня 2012, 21:55:36
 

SirNikolasДата: Пятница, 29 Июня 2012, 07:04:08 | Сообщение # 2
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Зачем изменять код библиотеки и убирать приватность? Просто копируешь либу к себе в шапку и пишешь:
Code
call DisplayTextToPlayer(GetLocalPlayer(), HCL_GetCommandString())
За производительность можешь не беспокоиться, при выключенном Debug mode'е функция будет инлайниться.


 

WedeR00Дата: Пятница, 29 Июня 2012, 10:01:03 | Сообщение # 3
6 уровень
Группа: Проверенные
Сообщений: 162
Награды: 0
Репутация: 29
Блокировки:
Quote (WedeR00)
Просто копируешь либу к себе в шапку и пишешь:

Имеется ввиду в шапку global? Если так, то карта отказывается работать :(
 

SirNikolasДата: Пятница, 29 Июня 2012, 10:34:34 | Сообщение # 4
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
В нестандартный код карты.

Добавлено (29 Июнь 2012, 10:34:34)
---------------------------------------------
Кстати, JNGP есть?


 

WedeR00Дата: Пятница, 29 Июня 2012, 10:44:59 | Сообщение # 5
6 уровень
Группа: Проверенные
Сообщений: 162
Награды: 0
Репутация: 29
Блокировки:
Quote (SirNikolas)
Кстати, JNGP есть?


Есть, но у меня карта в разборке и все скрипты в файле war3map.j

Если в него просто вставить либ, то так же не будет работать :(
 

SirNikolasДата: Пятница, 29 Июня 2012, 11:21:51 | Сообщение # 6
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
У вас вообще этот хост-бот есть? И настроен ли он?

 

WedeR00Дата: Пятница, 29 Июня 2012, 11:27:26 | Сообщение # 7
6 уровень
Группа: Проверенные
Сообщений: 162
Награды: 0
Репутация: 29
Блокировки:
Quote (SirNikolas)
У вас вообще этот хост-бот есть? И настроен ли он?


Да, на карте примере он работает.

Я плачу :) Ошибка была вовсе не в скрипте, всего лишь отсутствовал запуск этой функции.
Итог: (что нужно добавить в скрипт)
Code

global
  trigger tgr_readhcl
  string   command    = ""
endglobal


Code

function readhcl takes nothing returns nothing  
           local integer i  
           local integer j  
           local integer h  
           local integer v  
           local string chars = "abcdefghijklmnopqrstuvwxyz0123456789 -=,."  
           local integer array map  
           local boolean array blocked  
        
           set blocked[0] = true  
           set blocked[50] = true  
           set blocked[60] = true  
           set blocked[70] = true  
           set blocked[80] = true  
           set blocked[90] = true  
           set blocked[100] = true  
           set i = 0  
           set j = 0  
        
           loop  
               if blocked[j] then  
                   set j = j + 1  
               endif  
               exitwhen j >= 256  
               set map[j] = i  
               set i = i + 1  
               set j = j + 1  
           endloop  
              
           set i = 0  
           loop  
               exitwhen i >= 12  
               set h = R2I(100*GetPlayerHandicap(Player(i)) + 0.5)  
               if not blocked[h] then  
                   set h = map[h]  
                   set v = h/6  
                   set h = h-v*6  
       call SetPlayerHandicap(Player(i), h*0.11 + 0.55)  
                   set command = command + SubString(chars, v, v+1)  
               endif  
               set i = i + 1  
           endloop  
endfunction  


Code

function InitTriggers takes nothing returns nothing
  set tgr_readhcl = CreateTrigger()
        call TriggerAddAction(tgr_readhcl, function readhcl)
endfunction


Code

function Initialization takes nothing returns nothing
         call readhcl()
endfunction


Если Ваша карта редактируется в редакторе World Editor, то Вам в эту тему.

Спасибо, SirNikolas, за оказание поддержки.

Тему можно закрыть.
 

SirNikolasДата: Пятница, 29 Июня 2012, 15:47:34 | Сообщение # 8
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (WedeR00)
всего лишь отсутствовал запуск этой функции.
Какой запуск? Если бы вы скопировали билблиотеку (которая наинается со слов "library HCL"), она бы самоинициализировалась. И глобальная строка там есть. Просто она приватная.


 

WedeR00Дата: Пятница, 29 Июня 2012, 19:31:37 | Сообщение # 9
6 уровень
Группа: Проверенные
Сообщений: 162
Награды: 0
Репутация: 29
Блокировки:
Quote (SirNikolas)
Какой запуск?

call readhcl() - в тригге Инитиализации.

А вот скопировать библиотеку мне так и не удалось. Я не смог найти толковый гайд, но мой способ работает на отлично! Карта уже несколько часов стоит на ботах.
 

SirNikolasДата: Суббота, 30 Июня 2012, 09:19:24 | Сообщение # 10
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Ну ладно.

 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz