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

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

Закрытая тема
 
R2on

offline
Опыт: 111
Активность:
как нарисовать итемы командой
Здравствуйте! понадобилась одна вещь: что бы при введении команды и ID рисовался необходимый артефакт(пример: -item I00F). Код накалябал, но итемы не появляються.
if SubString(GetTriggerPlayer(),0,5)=="-item"then
call CreateItemLoc( S2I(SubString(GetTriggerPlayer(),6,10)), GetUnitLoc(GetTriggerUnit()) )
call DisplayTimedTextToPlayer(GetTriggerPlayer(),0,0,10,"|cffffa500попытка")
подозреваю, что ошибка кроется тут:
call CreateItemLoc( S2I(SubString(GetTriggerPlayer(),6,10)), GetUnitLoc(GetTriggerUnit()) )
а именно тут: S2I(SubString(GetTriggerPlayer(),6,10))
я пока изучаю native, но похоже S2I не годится для этого примера. ведь идентификаторы предмета могут быть даже "bspt"
помогите пожалуйста разобраться
native R2I takes real r returns integer
native I2S takes integer i returns string
native R2S takes real r returns string
native S2I takes string s returns integer
native R2SW takes real r, integer width, integer precision returns string
есть ли среди них тот, что мне нужен? или помимо этого списка есть еще масса других?
Старый 06.07.2011, 01:12
ZeToX2007

offline
Опыт: 7,009
Активность:
Мб так зделать:

-item 1
-item 2


переводим S2I("1")=1

и прибавляем: 'I000' + 1
Старый 06.07.2011, 04:40
silumin

offline
Опыт: 11,153
Активность:
Код:
function S2HId takes string str returns integer
local string ASCII = "0123456789*******ABCDEFGHIJKLMNOPQRSTUVWXYZ******abcdefghigklmnopqrstuvwxyz"
local string s1 = SubString(str,0,1)
local string s2 = SubString(str,1,2)
local string s3 = SubString(str,2,3)
local string s4 = SubString(str,3,4)
local string S
local integer i = 0
local integer i1 = 0
local integer i2 = 0
local integer i3 = 0
local integer i4 = 0
  loop
    set S = SubString(ASCII,i,i+1)
    if S==s1 then
      set i1 = 48 + i
    endif
    if S==s2 then
      set i2 = 48 + i
    endif
    if S==s3 then
      set i3 = 48 + i
    endif
    if S==s4 then
      set i4 = 48 + i
    endif
    exitwhen i==74
    set i = i + 1
  endloop
return 16777216*i1+65536*i2+256*i3+i4
endfunction
Вводишь строку "I00A", а на выходе получаешь число 'I00A'.

Отредактировано silumin, 06.07.2011 в 09:28.
Старый 06.07.2011, 09:18
vladfaust

offline
Опыт: 12,714
Активность:
Вдогонку, вот система перевода "туда" и "обратно":
» Code
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
Старый 06.07.2011, 11:48
R2on

offline
Опыт: 111
Активность:
Head_Hunter_44, СПАСИБО БОЛЬШОЕ! правда в вашем коде очень много лишнего, например зачем нужно вот это:

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] = "/"
в общем несколько переделал код и заработало!
FKoFF:
я тебе могу с уверенностью сказать где появляются итемы - в самом центре карты, по той простой причине что GetTriggerUnit() не существует в триггере, который запускается реакцией на событие "Player chat Message".
в этом месте у меня стоят координаты юнита. для тгго, что бы нарисовать итем, надо выделить любого юнита или здание. и только теперь пишем -item BNSD и хоп- итем появляется около ног юнита или у здания. Спасибо большое, за код равкодов, без него я бы так и плутал в семи соснах!
if SubString(sdfsdfsdfsdfsdghfsdfsd,0,5)=="-craf"then
call CreateItemLoc( OLOLOLOYAVODITELNLO(SubString(sdfsdfsdfsdfsdghfsdfsd,6,10)), GetUnitLoc(TyTCTouTYHuT) )
Старый 06.07.2011, 12:17
Закрытая тема

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

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

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

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



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