А какая самая лучшая, по вашему мнению, группа (из всего рока в целом)?
Static-X. Не популярный за границей Северной Америки и Австралии индастриал рокбэнд. Хотя в итоге, почти все альбомы были напичканы хитовыми треками и почти каждый их трек (с первых 4 альбомов), побывал в различных играх, фильмах, сериалах, рекламных роликах.
Но имхо, вопрос холиваровский. Сколько людей, столько и вкусов. Популярный рок - Токио Хотел. Самое большее количество фанатов по всему миру (о дааа!). А теперь зададимся вопросом, кто в данной теме подпишется что это группа лучшая в мире?
Любая популярная музыка. Нельзя же её так назвали (уроки английского: слово попса произошло от английского выражения pop-music; кстати pop -> сокращение от слова popular)
vsparker, нешаришь. Мы не говорим о сранных пиратских дисках. Лицухи идут с битрейтом не менее 320 (а бывает и более кстати, хотя в основном всё же 320).
говорить надо за себя, а если у тебя есть какие то данные по данной области то желательно выложи).
Плюс как вариант слушать через уши с плеера - 128 и 320, совсем разные вещи.
И кстати, благодаря таким денежным благодарностям, рок-группы попсеют до ужаса)
Отборное дерьмо может и попсеет со временем, а преданные делу товарищи играют лишь то-что нравится. Деньги лишь стимул к дальнейшему продвижению творчества.
Не отношусь к таким, потому позволяю себе купить музыку. Почему? Да потому что ценю старания людей. Они как бы с этого денежку имеют. Поэтому из принципа не качаю музыку даже, максимум прослушиваю на офф страничке в майспейс.
Куплю и послушаю завтра ^_^. Мне бы поболее, а то время походов за музыкой, а что реально интересно послушать - то почти нереально найти (из нормального я имею ввиду)
Карта - лучшая в плане геймлея из многих рпг, пожалуй я могу только две карты вспомнить (данного типа) что были немного интересней, это старая Черная Дорога и Тру Чаос. Но в них уже давно не играют =(
txt2:narayan атакует 14 новыми идеями(искренне надеюсь что новыми=)). Плюс потренировался с новыми тегами. Интересно узнать мнения лично Адольфа (который вероятно находиться в ShadowZone( и уже давно =( ))
1 .__Typecasting__
Выражаясь простым языком (язык блондинок =D) эта переменная которая являеться как бы хранилищем кучи переменных (т.е в итоге одна переменная разбиваеться на типы, которые присутствуют в функции(карте)). Проще смотреть пример -> их я сделал как можно более простые и понятные.
example [cJass]:
var a[]
a[0]="narayan ownz"
a[5000]=345
a[5]=CreateUnit(Player(15),'ewsp',0,0,0)
Трансформируеться эта небольшая кучка кода, вот в такой мусор.
example [Jass]:
local string array string_a
local integer array integer_a
local unit array unit_a
set string_a[0]="narayan ownz"
set integer_a[5000]=345
set unit_a[5]=CreateUnit(Player(15),'ewsp',0,0,0)
Теперь немного расширим возможности нашего тайпкаста, поближе к дефолту.
Хочу заметить что Vexorian реализовал некое подобие тайпкаста у себя в vJass
example [Vexorian Type Cast]:
struct test
static method create takes string key returns thistype
return thistype(-StringHash(key)) // Сопсно тайпкаст one
endmethod
static method createA takes thistype key returns integer
return integer(key) // и two
endmethod
endstruct
А это мой пример создания тайпкаста в АдикХелпере.
exapmle [cJass]:
void temp(){
string s1 = "33.33"
real f = real(s1)
string s2 = "true"
boolean b = boolean(s2)
string s = "2z4"
integer i = integer(s)
}
Вот тут есть нюансы, так как мы изначально не имеем функции B2I , I2B , B2S , S2B => То нам придеться сделать их самим =). В общем смотрим пример ниже.
example [Jass]:
function cjparser_b2i takes boolean b returns integer
if b then
return 1
endif
return 0
endfunction
function cjparser_i2b takes integer i returns boolean
return i!=0
endfunction
function cjparser_b2s takes boolean b returns string
if b then
return "true"
endif
return "false"
endfunction
function cjparser_s2b takes string s returns boolean
if s=="true" then
return true
endif
return false
endfunction
function temp takes nothing returns nothing
string s1 = "33.33"
real f = S2R(s1)
string s2 = "true"
boolean b = cjparser_s2b(s2)
string s = "2z4"
integer i = I2S(s)
endfunction
Кстати если будет нужный полный пакет функций то я могу легко его составить.
2 .__Clone__
Метод клонировшика, как бы "сшивает" две функции вместе (взят с Java). Объяснять довольно сложно, покажу примером.
expample[cJass]:
int a = 0
int b = clone(a)
str c[]
str d[] = clone(c)
c[0] = "temp"
a = 100
b = 50
b = decapsulation(a)
a = 1000
(decapsulation можно заменить unset)
После чего это все видоизменяеться в
example [Jass]:
integer a = 0
integer b = 0
string array c
string array d
// Как бы клонируються переменные по ходу кода.
set c[0] = "temp"
set d[0] = "temp"
set a=100
set b=100
// Как видим b можно ставить отдельно, a при этом не страдает.
set b=50
// прошла декапсуляция, т.е b не синхронизируеться с a
// а значит не клонируеться более.
set a=1000
Где это удобно юзать? Ну тут как бы есть очень много вещей где я бы мог использовать (в моей текущей наработке с ДгуИ например 0.0)
3 .__instanceof__
Данный метод будет невероятно удобен в использовании статичных ифов или #if. Смотрим примеры.
example[cJass]:
struct temp{}
struct lx extends temp{}
lx this = lx.create
boolean b = (lx instanceof struct)
b = (lx instanceof temp)
b = (lx instanceof lx)
b = (lx instanceof string)
#if b
lx = "Ya stroka"
#else
lx = 1
#endif
Конвертим код, и после парсера выдает.
example[Jass]:
struct temp
endstruct
struct lx extends temp
endstruct
local lx this = lx.create()
local boolean b = true
set b = true
set b = true
set b = false
set lx= 1
4 *.__Conditional Expression__
Данный тип построения функции по моему "впечатляющий", и достаточно быстрый (плюс смотриться красиво)
example [cJass]:
string s = (3<5?"sex":"mex")
string s2 = (s!="sex"?"vox":"dox")
Что преобразуеться в такую конструкцию. Т.Е s = "sex" ; s2 = "dox"
example [Jass]:
string s
string s2
if 3<5 then
set s = "sex"
else
set s = "mex"
endif
if s!= "sex" then
set s2="vox"
else
set s2="dox"
endif
5 .__Усиленный массивчег__
Поддержка массивом не только целочисленных, но и прочих типов
example[cJass]:
unit u=CreateUnit()
int a[]
a["x"]=0
a["xx"]=1
a[u]=2
example[Jass]:
local unit u=CreateUnit()
local integer array a
set a[Modulo(StringHash("x"),8190)]=0
set a[Modulo(StringHash("xx"),8190)]=1
set a[Modulo(GetHandleId(u),8190)]=2
// Кстати величина цифер может быть большой поэтому можно и под Модуло, если цифр больше 3
Кстати было бы удобно если бы можно было составлять такие дефайны
example[define]
typedef<x[type]='value'>={
#if type = handle
x[GetHandleId(type)-0x100000] = value
#elseif type = integer
x[type] = value
#elseif type = string
x[Modulo(StringHash(type),8190)] = value
#elseif type = real
x[R2I(type)] = value
#endif
}
typedef -> как бы указывает что у нас дефайн проверяет типы, ну в общем просто для красоты =)).
6 .__continue__
О да, я нашел способ реализовать это. Т.Е теперь это возможно и в вк3 =) (а VD не догадывался что это реально(вспоминая наш разговор))
example[cJass]:
whinenot(++i>10){
if i == 5{continue}
else{BJDebugMsg("not 5")}
}
Если мы имеем continue у себя в лупе, то луп принимает очень сложную "двойную" так скажем конструкцию. Кстати это невероятно удобно =), плюс добавляет новую фичу с С++ синтаксиса.
example[Jass]:
loop
set cjparse_continue = true
loop
set i=i+1
exitwhen i>10
if i == 5 then
set cjparse_continue = false
exitwhen true
else
call BJDebugMsg("not 5")
endif
endloop
exitwhen cjparse_continue
endloop
7 .__array size__
Фича надстрощик на vJass, берет длинну нашего массива.
example[cJass]:
int x[][20000]
void temp(){
int z = array(x)
}
Это удобно при составлении кода (например в наработках. Вы написали систему, и в ней можно варьировать размер массива, ну собственно тут и пригодиться)
example[Jass]:
globals
constant integer size_cjparser_x=20000
integer array x[size_cjparser_x]
endglobals
function temp takes nothing returns nothing
local integer z = size_cjparser_x
endfunction
Кстати для страктов и приватных можно добавлять суффиксы соответствующие классу записи =).
8 .__Typerestricted__
Как бы то же что и тайпкаст, только мы сами указываем типы. (Переменные могут иметь одно и тоже имя, но обязательно разные классы)
example[cJass]:
array<int,string> a
<int,bool,unit> b=nill
array<int,int>a // Ошибка так как нельзя чтобы два однотипичных значения могли иметь одно имя. Парсер просто должен выдавать ошибку
example[Jass]:
globals
integer array integer_a
string array string_a
// Так как данные обнулены изначально, то и тут они будут обнулены.
integer integer_b=0
boolean boolean_b=false
unit unit_b =null
endglobals
9 .__namespaces__
Обработчик имен. Т.Е обрабатывает переменные тайпкаста только по их имени.
local string array string_a
local real array real_a
local integer array integer_a
local boolean array boolean_a
set string_a [1]="xd"
set real_a [1]=111.5
set integer_a[2]=11
set boolean_a[15]=true
set string_a [4]="omg"
//namespace -> запускает все именные функции, и берет ячейку из массива указанную в полях
call BJDebugMsg(string_a [1]) // ==> BJDebugMsg(1)
call BJDebugMsg(R2S(real_a[1])) // ==> BJDebugMsg(1)
call BJDebugMsg(string_a [4]) // ==> BJDebugMsg(4)
call BJDebugMsg(cjparser_b2s(boolean_a[15])) // ==> BJDebugMsg(15)
// endnamespaces
10 .__package__
Данная фича пришла в голову ну случайно =). Собственно сысл заключаеться в том чтобы упаковывать файлы в спецовые WTS файлы(да это увеличит время загрузки зато, без десинков можно делать перевод)
Что происходит с package? Она тупо записываються в WTS файлы с указанным именем. В то время как выглядит наша функция в норм версии.
Example[Jass]:
function temp takes nothing returns nothing
call BJDebugMsg(GetLocalizedString("STRING_HASH"))
endfunction
Кстати имена пакетов должны быть строго задекларированы, ну т.е количество версий должно быть строго ограничено т.к количество языков ограничено
Кстати это работает на локальных компах, и удобно в том числе и с юнитами. Т.е я помню ADOLF хотел сделать некий редактор импорта, так вот, советую сделать такого типа фичу как =>
example[cJass]:
abstract package('hfoo') eng{
name = "Footman"
tooltipbase = "Human rulzz"
}
abstract package('hfoo') rus{
name = "Пехотинец"
tooltipbase = "Хуманы жрут водку"
}
abstract package(mapHandle) eng{
name = "DotA:AllStars 5000"
description= "5000 heroes"
}
abstract package(mapHandle) rus{
name = "ЗнД:Все Звезды 5000"
description= "5000 героев"
}
Из примера видно,как мы можем использовать "Абстрактный Запаковщик", хотя он использует совсем не абстрактные данные 0.о => т.е записывает в требуемые файлы нужную нам строку.
Бедного футмана, записывают в файл unitData и данный файл клонируют на несколько, учитывая количество переводиммых языков. (т.е самая сложная часть), а вот с мэпхендлом записывает тоже в WTS файл, так как это все в файле конфига обнародуеться (как бы возможно тоже GetLocalizedString)
mapHandle кстати => Берет саму карту, и работает с ней. Имя карты, её дескрипшн (более всроде нечего локализить, ну если только кнопки интерфеса =) аля ДиалогБатоны, но это отдельная история)
11 .__loveMyMagic__
Я люблю красивый код, поэтому хотелось бы предложить такую фичу как класс. Конечно она не будет выполнять предназначеных ему функции (т.е название я тупо взял с Явы можно и переименовать). Фича нам дает небольшое улучшение кодинга.
example[cJass]:
class vector={
real x
real y
real z
}
// Хочу заметить что данные не МАССИВ!!!!
void temp(){
vector.x=0
vector.y=0
vector.z=0
}
Собственно все. Мне так просто удобнее даже программировать (ну т.е я не люблю такой вид записи как IsVisible или Is_Visible Для меня is.visible смотрится нагляднее). Как вариант еще можно заценить такой пример.
example[cJass]:
class is={
bool visible=false
bool detected=false
bool dummy=false
class not={
bool created=false
bool destroy=false
}
}
void temp(){
if is.not.created{createTemp()}
if is.dummy{is.visible=false}
destroyTemp()
if is.not.destroy{is.detected=true}
if is.detected{echo("Чит детектед!")}
}
Отличаеться от стракта тем, что не создает аллокаторов, делокаторов т.е вообще только объявление переменных, но от страктов можно взять такую часть как extends 0.o выглядит это примерно так.
example[cJass]:
class is={
bool visible=false
bool detected=false
bool dummy=false
}
class not extends is={
bool created=false
bool destroy=false
}
void temp(){
if is.not.created{createTemp()}
if is.dummy{is.visible=false}
destroyTemp()
if is.not.destroy{is.detected=true}
if is.detected{echo("Чит детектед!")}
}
//! file in common.j (файл обновился и добавился в импорт)
//! в файл common.j заносяться лишь те функции которые объявлены глобалками!!!!
//! остальная же котовасия как парситься смотрим ниже
function inline_PerfectI2B takes nothing returns boolean
return true
endfunction
//! end in common.j
globals
integer size = 0
boolean temp = inline_PerfectI2B() // inline PerfectI2B -> function Moving to our common.j file!!!!!
endglobals
function inline_GetSize takes nothing returns nothing
set size = size + 1
endfunction
function inline_DecSize takes nothing returns nothing
set size = size - 1
endfunction
function temp takes nothing returns nothing
if temp then
call ForGroup(CreateGroup(),function inline_GetSize)
else
call ForGroup(CreateGroup(),function inline_DecSize)
endif
endfunction
Теперь объясню что наш инлайн, не может брать никакие данные, и возвращает он тоже ничто =), но! он может как бы использовать
такие вещи как возвращение чего либо!!! если находиться внутри переменной. Т.Е если bool b = inline => то возвращает булевую
, если реальная, то реальную.
<<
13.__Struct__
Теперь улучшаем структуры! Т.Е мы можем делать дочерние структуры более простым методом. Сейчас покажу на примере
В итоге мы получаем вполне нормальный код. Т.Е такое действие будет сделать не так уж и трудно.
14 __PerfectName?__
Сомнительная фича которая добавляет перцу к страктам
example[cJass]:
struct
{
float x
float y
} perfectstruct;superstack;vector
example[vJass]:
struct perfectstruct
real x
real y
endstruct
struct superstack
real x
real y
endstruct
struct vector
real x
real y
endstruct
Собственно все. Интересно мнения ADOLF`a насчет всех этих идей.
ЗЫ: В ближайшее время предложу еще пару идеи, пока осмысливаю как бы их лучше реализовать, да и хотелось чтобы автор реагировал на них (хотя вероятно у него проблемы ин реал лайф)
Лол. Не шарите. Если бы я хотел через луп, я бы сделал через него. Но я дал вам самый быстрыи вариант выполнения. Сабстринг можно убрать, но тогда будет тьма дамми функции что является злом. Плюс строки не вызывают утечек. (зевс я могу и в одну строку. а смысл?)
txt2:cJass added:
Адресовано to Adolf
Остальные: "Ваше мнение интересно этим людям" => []
Ну как вариант у меня появилась идея к твоему import'еру. Почему бы ему не интегрировать в карту свой собственный common.j при помощи такой функции include "myFile.j" RUS
где ну include и в Африке инклад, далее файл. А после сладкая фича (Для переводчиков триггеров вообще прет шииикарна) добавляет по Locale ID.
Сделать матпарсер в оптимайзере к примеру
function MyImbaMathFormula takes real r,real x returns real
return 2*r*x*5
endfunction
Что собственно оптимизируеться как
function MyImbaMathFormula takes real r,real x returns real
return r*x*10
endfunction
Ну это самая бредовая идея что была за сегодня у меня XD. В общем она упростит некие подсчеты (только с цифрами).
Пример: x=2z+5y
Конвертируемая версия: set x =(2*z)+(5*y)
Гыгы это не все идеи моего запала ^_^. 2 оптимизатор наверняка пойдет классно такая фича.
constant function Modulo takes integer a,integer b returns nothing
return a-(a/b)*b
endfunction
Ну соотвественно так как приставка констант(то и функция не меняеться XD)
Конвертиться в
define Modulo(a,b) = ##a##-(##a##/##b##)*##b##
(## - вокруг добавил ну как бы так проще.)
А далее по принципе дефанов (ну как бы свапиться позже текстмагросов,но до дефайнов)
P.S to all боюсь что астматик начинает задыхаться от количества кода =(((((.
» StarCraft 2 / Blizzard будут стирать карты с Battle.net
» Warhammer / Анонс Warhammer 40,000: Dark Millenium Online
» StarCraft 2 / StarCraft II Beta - Patch 12
» Музыка и Звук / RocK
» Музыка и Звук / RocK
» Музыка и Звук / RocK
» Музыка и Звук / RocK
» Музыка и Звук / RocK
» Музыка и Звук / RocK
Плюс как вариант слушать через уши с плеера - 128 и 320, совсем разные вещи.
» Музыка и Звук / RocK
» Музыка и Звук / RocK
» StarCraft 2 / Создание разных уровней воды
» Музыка и Звук / RocK
» Музыка и Звук / RocK
» Музыка и Звук / RocK
» WarCraft 3 / God's Land 2
» Diablo / Blizzard: Никаких древ умений в Diablo 3
» WarCraft 3 / Vengeance v.3.26e
» DooM III / Doom 3 SDK 1.3.1
» WarCraft 3 / cJass - дополнение к языку JASS
1 .__Typecasting__
2 .__Clone__
После чего это все видоизменяеться в
3 .__instanceof__
4 *.__Conditional Expression__
5 .__Усиленный массивчег__
6 .__continue__
7 .__array size__
8 .__Typerestricted__
9 .__namespaces__
10 .__package__
Бедного футмана, записывают в файл unitData и данный файл клонируют на несколько, учитывая количество переводиммых языков. (т.е самая сложная часть), а вот с мэпхендлом записывает тоже в WTS файл, так как это все в файле конфига обнародуеться (как бы возможно тоже GetLocalizedString)
11 .__loveMyMagic__
12__inline__
такие вещи как возвращение чего либо!!! если находиться внутри переменной. Т.Е если bool b = inline => то возвращает булевую
, если реальная, то реальную.
14 __PerfectName?__
real x
real y
endstruct
struct superstack
real x
real y
endstruct
struct vector
real x
real y
endstruct
» WarCraft 3 / Библиотека функций
» WarCraft 3 / Библиотека функций
(По скорости быстрее чем 20 обычных проверок GetSpellAbilityId()=='SPELL ID')
» WarCraft 3 / cJass - дополнение к языку JASS
Адресовано to Adolf
Остальные: "Ваше мнение интересно этим людям" => []
include "myFile.j" RUS
return 2*r*x*5
endfunction
function MyImbaMathFormula takes real r,real x returns real
return r*x*10
endfunction
Пример: x=2z+5y
Конвертируемая версия: set x =(2*z)+(5*y)
return a-(a/b)*b
endfunction
Конвертиться в
(## - вокруг добавил ну как бы так проще.)
А далее по принципе дефанов (ну как бы свапиться позже текстмагросов,но до дефайнов)