[Вопрос] 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
Блокировки:
| Ну ладно.
|
|
|
|