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

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

Закрытая тема
 
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
cJass не работает
Установил плагин cJass'овый, настройки сделал как следует, а код всеравно не компилируется.
» Код:
library AbilityPreloader initializer PreloadAbils requires Ascii

int abcount = 200

private void PreloadAbils() 
{
    int r
    int i = 0
    unit d = CreateUnit(Player(14),SPELL_DUMMY,0.,0.,0.)
    whilenot (i>abcount) 
    {
        if StringLength(I2S(i)) == 1
        {
            r = S2A(A2S('A00')+I2S(i))
        }
        elseif StringLength(I2S(i)) == 2
        {
            r = S2A(A2S('A0')+I2S(i))
        }
        elseif StringLength(I2S(i)) == 3
        {
            r = S2A(A2S('A')+I2S(i))
        }
        UnitAddAbility(d,r)
        UnitRemoveAbility(d,r)
        i++
    }
    RemoveUnit(d)
    d = null
}

endlibrary
[+] замечание от Hanabishi: Дубль темы.
Старый 01.08.2011, 10:12
vladfaust

offline
Опыт: 12,714
Активность:
Это ж Я тебе сделал^^
globals
int abcount = 200
endglobals
Я так всегда делаю. +Объявление локалок без "local" никто не отменял...
Head_Hunter_44 добавил:
+ может напутал с defin'ом что (Spell_Dummy)
Старый 01.08.2011, 10:36
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
Нифига.
Rampage добавил:
Так же не пашет.
Rampage добавил:
Старый 01.08.2011, 10:39
DotaMaster666
Silenced by GadenbIsh
offline
Опыт: 1,259
Активность:
В коде все правильно вроде, а не компилируется - это как:
  1. При сохранении карты вообще не вызывается adicHelper
  2. adicHelper вызывается, но падает с ошибкой
  3. Он вызывается, завершается нормально, но код не перезаписывает
И да, надеюсь в пути к карте нет не английских символов?
Старый 01.08.2011, 10:44
vladfaust

offline
Опыт: 12,714
Активность:
аа... Ты не вставил одну из библиотек, ctypes.j вроде или чета такое. У тебя карта пока что не понимает сокращений C++)
Head_Hunter_44 добавил:
int для нее это нечто неизветсное
Старый 01.08.2011, 10:45
DotaMaster666
Silenced by GadenbIsh
offline
Опыт: 1,259
Активность:
Вроде понял:
#include "lib\\cj_types.j"
Старый 01.08.2011, 10:45
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
Head_Hunter_44, что за библиотека?
Rampage добавил:
Воо, пошло.
Старый 01.08.2011, 10:47
vladfaust

offline
Опыт: 12,714
Активность:
» Цитата из мана
6 Стандартная библиотека
В поставку cJass, кроме парсера, входят также файлы стандартной библиотеки, найти которые вы можете в подпапке "lib" папки "AdicHelper". Эти файлы были созданы специально для облегчения написания кода, а также простой оптимизации некоторых его аспектов. Для использования их при разработке, вы просто подключаете нужные директивой include. Все стандартные подключаемые файлы имеют префикс "cj_" расширение ".j".
6.1 cj_types и cj_typesEx
include "cj_types.j"
include "cj_typesEx.j"
include "cj_types_priv.j"
include "cj_typesEx_priv.j"
Данные подключаемые файлы содержат макросы, приближающие работу с типами в JASS2 к таковой в C++. В первом из них вводятся псевдонимы для элементарных типов, соответствующие наименованиям этих типов в языке C:
define {
int = integer
bool = boolean
void = nothing
float = real
}
Во втором файле определяются конструкции вида new <type> для всех основных типов, например:
define <new timer> = CreateTimer()
Полный список этих конструкций вы можете посмотреть, открыв в текстовом редакторе файл "cj_typesEx.j".
Для использования при создании своих библиотек, созданы версии этих двух файлов, в которых все макросы определяются как приватные. Данные файлы имеют постфикс "_priv" в названии файла.
Head_Hunter_44 добавил:
Рад был помочь)
Старый 01.08.2011, 10:48
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
Сатана, компилируется, но не работает карта сама (в варкрафте непосредственно)...*
Старый 01.08.2011, 10:48
vladfaust

offline
Опыт: 12,714
Активность:
Объявление локалок без "local" никто не отменял...
Старый 01.08.2011, 10:50
DotaMaster666
Silenced by GadenbIsh
offline
Опыт: 1,259
Активность:
libraryr кстати можно тоже писать, используя блоки {}
Попробуйте закомментировать всю библиотеку (/* library ... endlibrary */) и пересохранить карту.
Старый 01.08.2011, 10:51
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
Вообще, по-моему, косяк с AScii. При выключении прелоада, но не библиотеки ASCII тоже не запускается.
С отключеным и тем и тем все ок...
Старый 01.08.2011, 10:54
Elf_Stratigo

offline
Опыт: 4,699
Активность:
где библиотека Ascii? покажи код
Старый 01.08.2011, 10:56
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
» ASCII
library Ascii

///////////////////////////////////////////////////////////////////
//      function Char2Ascii takes string s returns integer
//          integer ascii = Char2Ascii("F")
//
//      function Ascii2Char takes integer a returns string
//          string char = Ascii2Char('F')
//
//      function A2S takes integer a returns string
//          string rawcode = A2S('CODE')
//
//      function S2A takes string s returns integer
//          integer rawcode = S2A("CODE")
//
///////////////////////////////////////////////////////////////////

    globals
        private integer array i // Integers
        private string array c // Characters
    endglobals

    function Char2Ascii takes string s returns integer
        local integer a = i[StringHash(s) / 0x1F0748 + 0x3EA]
        if a == 47 and s == "\\" then
            set a = 92 // "/" and "\\" have same hash
        elseif a >= 65 and a <= 90 and s != c[a] then
            set a = a+32 //shift to lowercase, upper/lower have same hash
        endif
        
        debug if (((a >= 8 and a <= 13) or (a >= 32 and a <= 126))) then
            return a
        debug endif
        //debug call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "ASCII CONVERSION ERROR: INVALID CHAR " + s)
        debug return 0
    endfunction

    function Ascii2Char takes integer a returns string
        debug if ((a >= 8 and a <= 13) or (a >= 32 and a <= 126)) then
            return c[a]
        debug endif
        //debug call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "ASCII CONVERSION ERROR: INVALID INT " + I2S(a))
        debug return null
    endfunction

    function A2S takes integer a returns string
        local string s = ""
        debug if (a >= 8) then
            loop
                set s = c[a - a / 256 * 256] + s
                set a = a / 256
                exitwhen (a == 0)
            endloop
            return s
        debug endif
        //debug call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "ASCII CONVERSION ERROR: INVALID INT " + I2S(a))
        debug return null
    endfunction

    function S2A takes string s returns integer
        local integer a = 0
        local integer l = StringLength(s)
        local integer i = 0
        debug if (l > 0) then
            loop
                set a = a * 256 + Char2Ascii(SubString(s, i, i + 1))
                set i = i + 1
                exitwhen (i == l)
            endloop
            return a
        debug endif
        //debug call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "ASCII CONVERSION ERROR: INVALID STR " + s)
        debug return 0
    endfunction

    private module Init
        private static method onInit takes nothing returns nothing
            set i[931] = 8
            set i[1075] = 9
            set i[1586] = 10
            set i[1340] = 12
            set i[412] = 13
            
            set i[198] = 32
            set i[1979] = 33
            set i[1313] = 34
            set i[1003] = 35
            set i[1264] = 36
            set i[983] = 37
            set i[1277] = 38
            set i[306] = 39
            set i[904] = 40
            set i[934] = 41
            set i[917] = 42
            set i[1972] = 43
            set i[1380] = 44
            set i[1985] = 45
            set i[869] = 46
            
            set i[1906] = 47
            
            set i[883] = 48
            set i[1558] = 49
            set i[684] = 50
            set i[582] = 51
            set i[668] = 52
            set i[538] = 53
            set i[672] = 54
            set i[1173] = 55
            set i[71] = 56
            set i[277] = 57
            
            set i[89] = 58
            set i[1141] = 59
            set i[39] = 60
            set i[1171] = 61
            set i[51] = 62
            set i[305] = 63
            set i[0] = 64
            
            set i[222] = 65
            set i[178] = 66
            set i[236] = 67
            set i[184] = 68
            set i[1295] = 69
            set i[1390] = 70
            set i[1276] = 71
            set i[203] = 72
            set i[1314] = 73
            set i[209] = 74
            set i[1315] = 75
            set i[170] = 76
            set i[1357] = 77
            set i[1343] = 78
            set i[1397] = 79
            set i[1420] = 80
            set i[1419] = 81
            set i[1396] = 82
            set i[1374] = 83
            set i[1407] = 84
            set i[499] = 85
            set i[1465] = 86
            set i[736] = 87
            set i[289] = 88
            set i[986] = 89
            set i[38] = 90
            
            set i[1230] = 91
            set i[1636] = 93
            set i[1416] = 94
            set i[1917] = 95
            set i[217] = 96
            set i[833] = 123
            set i[1219] = 124
            set i[553] = 125
            set i[58] = 126
            
            set c[8] = "\b"
            set c[9] = "\t"
            set c[10] = "\n"
            set c[12] = "\f"
            set c[13] = "\r"
            
            set c[32] = " "
            set c[33] = "!"
            set c[34] = "\""
            set c[35] = "#"
            set c[36] = "$"
            set c[37] = "%"
            set c[38] = "&"
            set c[39] = "'"
            set c[40] = "("
            set c[41] = ")"
            set c[42] = "*"
            set c[43] = "+"
            set c[44] = ","
            set c[45] = "-"
            set c[46] = "."
            
            set c[47] = "/"
            
            set c[48] = "0"
            set c[49] = "1"
            set c[50] = "2"
            set c[51] = "3"
            set c[52] = "4"
            set c[53] = "5"
            set c[54] = "6"
            set c[55] = "7"
            set c[56] = "8"
            set c[57] = "9"
            
            set c[58] = ":"
            set c[59] = ";"
            set c[60] = "<"
            set c[61] = "="
            set c[62] = ">"
            set c[63] = "?"
            set c[64] = "@"
            
            set c[65] = "A"
            set c[66] = "B"
            set c[67] = "C"
            set c[68] = "D"
            set c[69] = "E"
            set c[70] = "F"
            set c[71] = "G"
            set c[72] = "H"
            set c[73] = "I"
            set c[74] = "J"
            set c[75] = "K"
            set c[76] = "L"
            set c[77] = "M"
            set c[78] = "N"
            set c[79] = "O"
            set c[80] = "P"
            set c[81] = "Q"
            set c[82] = "R"
            set c[83] = "S"
            set c[84] = "T"
            set c[85] = "U"
            set c[86] = "V"
            set c[87] = "W"
            set c[88] = "X"
            set c[89] = "Y"
            set c[90] = "Z"
            
            set c[92] = "\\"
            
            set c[97] = "a"
            set c[98] = "b"
            set c[99] = "c"
            set c[100] = "d"
            set c[101] = "e"
            set c[102] = "f"
            set c[103] = "g"
            set c[104] = "h"
            set c[105] = "i"
            set c[106] = "j"
            set c[107] = "k"
            set c[108] = "l"
            set c[109] = "m"
            set c[110] = "n"
            set c[111] = "o"
            set c[112] = "p"
            set c[113] = "q"
            set c[114] = "r"
            set c[115] = "s"
            set c[116] = "t"
            set c[117] = "u"
            set c[118] = "v"
            set c[119] = "w"
            set c[120] = "x"
            set c[121] = "y"
            set c[122] = "z"
            
            set c[91] = "["
            set c[93] = "]"
            set c[94] = "^"
            set c[95] = "_"
            set c[96] = "`"
            set c[123] = "{"
            set c[124] = "|"
            set c[125] = "}"
            set c[126] = "~"
        endmethod
    endmodule

    private struct Inits extends array
        implement Init
    endstruct
endlibrary 
Старый 01.08.2011, 10:59
Elf_Stratigo

offline
Опыт: 4,699
Активность:
у меня всё ок, возможно поток умирает - выводи дебаг сообщения
Старый 01.08.2011, 11:14
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Цитата:
Сообщение от Rampage
Сатана, компилируется, но не работает карта сама (в варкрафте непосредственно)...*


Либа работает, я ее проверил. Минус только один, инициализация скилов увеличила время загрузки нефигово так.

Цитата:
Сообщение от Head_Hunter_44
Я так всегда делаю. +Объявление локалок без "local" никто не отменял...


Блок глобалс, и приставка local в cjass ненужны, если ты не знал ._.

Цитата:
Сообщение от Rampage
SPELL_DUMMY


Тут должен быть ID дамми.

Цитата:
Сообщение от Elf_Stratigo
у меня всё ок, возможно поток умирает - выводи дебаг сообщения


Я не втюхиваю нерабочие либы :3
Старый 01.08.2011, 12:24
Elf_Stratigo

offline
Опыт: 4,699
Активность:
Faion:
Я не втюхиваю нерабочие либы :3
вдруг он что своё куда вписал, проверить то нужно было
Старый 01.08.2011, 12:46
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Цитата:
Сообщение от Elf_Stratigo
вдруг он что своё куда вписал, проверить то нужно было


Тут все в исходном виде.

Кста, мб кто вкурсе как прелоадить, не используя это, а то особо не вникал в этот аспект.

Код:
UnitAddAbility(d,r)
UnitRemoveAbility(d,r)


Т.к. минус данной конструкции - доп. время загрузки, причем неплохо так увеличит я думаю, если скилов прелоадить нужно будет 100+
Старый 01.08.2011, 12:52
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
Не используя это можно - просто нужным юнитам дать абилы,которые дадутся во время игры изначально(даммиками к примеру),то же и с героями - только выставить чтобы на первом уровне не давали никакого эффекта(это если бонусы характеристиками\когти\перчатки скорости и т.д.,у чего можно вообще уровень повышать),все пасивы спрятать в спелбуки(также без эфекта на первом уровне)
P.s. - думаю минусы данной конструкции очевидны
Также можно прелоадить только абилы,нужные для скилов выбранных уже героев(пример - загрузка инвока в доте),минус - лаги во время игры,плюс - уменьшится время загрузки карты,т.к. всех героев взять нельзя(в 90% и более карт) - подгружать абил придется меньше,со спецэффектами - аналогично
Старый 01.08.2011, 13:02
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Ну это я и так знал, но таки надеялся узнать об оптимальном программном способе.
Старый 01.08.2011, 13:09
Закрытая тема

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

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

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

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



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