19

» StarCraft 2 / StarCraft II Beta - Patch 12

Та кто теперь будет тараканов делать :(. имхо беспонту ап вообще.
19

» Музыка и Звук / RocK

necumity:
А какая самая лучшая, по вашему мнению, группа (из всего рока в целом)?
Static-X. Не популярный за границей Северной Америки и Австралии индастриал рокбэнд. Хотя в итоге, почти все альбомы были напичканы хитовыми треками и почти каждый их трек (с первых 4 альбомов), побывал в различных играх, фильмах, сериалах, рекламных роликах.
Но имхо, вопрос холиваровский. Сколько людей, столько и вкусов. Популярный рок - Токио Хотел. Самое большее количество фанатов по всему миру (о дааа!). А теперь зададимся вопросом, кто в данной теме подпишется что это группа лучшая в мире?
19

» Музыка и Звук / RocK

vsparker:
narayan, не ощющаю воровства в том, что беру что-то из открытых источников =).
Ога. Только я уверен те треки что ты слушаешь не в свободном распространении.
CeraRalaz:
Попса:
Любая популярная музыка. Нельзя же её так назвали (уроки английского: слово попса произошло от английского выражения pop-music; кстати pop -> сокращение от слова popular)
Так что в данную категорию можно вписать:
vsparker:
ориентация на бОльшую аудиторию; бОльшая аудитория - это больше денег
19

» Музыка и Звук / RocK

vsparker, спорить нет смысла. Если ты кибер гопник - то тебя уже не изменить. Ты как воровал, так и будешь воровать треки.
19

» Музыка и Звук / RocK

vsparker, нешаришь. Мы не говорим о сранных пиратских дисках. Лицухи идут с битрейтом не менее 320 (а бывает и более кстати, хотя в основном всё же 320).
vsparker:
у большинства нет
говорить надо за себя, а если у тебя есть какие то данные по данной области то желательно выложи).
Плюс как вариант слушать через уши с плеера - 128 и 320, совсем разные вещи.
19

» Музыка и Звук / RocK

Andreyka, ты забываешь про онлайн покупки. на почте переплата будет не более 3-5 уе.
19

» Музыка и Звук / RocK

HappyAndRu:
И кстати, благодаря таким денежным благодарностям, рок-группы попсеют до ужаса)
Отборное дерьмо может и попсеет со временем, а преданные делу товарищи играют лишь то-что нравится. Деньги лишь стимул к дальнейшему продвижению творчества.
19

» Музыка и Звук / RocK

Andreyka:
не Европа и не Америка
Цены за сервис здесь - по сравнению с СНГ, чуть более завышенные.
Andreyka:
школьник/студент из России/Украины
Не отношусь к таким, потому позволяю себе купить музыку. Почему? Да потому что ценю старания людей. Они как бы с этого денежку имеют. Поэтому из принципа не качаю музыку даже, максимум прослушиваю на офф страничке в майспейс.
Andreyka:
Кроме того, в наших музыкальных магазинах кроме всяких ледигаг с фифтицентами ничего не продают.
Вот только не надо =). Надо знать где искать. Есть множество специализированных магазинов.
19

» Музыка и Звук / RocK

Куплю и послушаю завтра ^_^. Мне бы поболее, а то время походов за музыкой, а что реально интересно послушать - то почти нереально найти (из нормального я имею ввиду)
19

» Музыка и Звук / RocK

В последнее время подсел на индастриал =/. Посоветуйте что нить хорошее из жанра.
19

» WarCraft 3 / God's Land 2

Ландшафт стырен. Вот и все доводы -_-. (Судил по миникарте и скринам), вырван из древнючей карты - оторая кстати - опенсорц
19

» WarCraft 3 / Vengeance v.3.26e

Карта - лучшая в плане геймлея из многих рпг, пожалуй я могу только две карты вспомнить (данного типа) что были немного интересней, это старая Черная Дорога и Тру Чаос. Но в них уже давно не играют =(
19

» DooM III / Doom 3 SDK 1.3.1

Не шаришь химик. Можно грохать свою игру, полноценную.
19

» WarCraft 3 / cJass - дополнение к языку JASS

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__

Обработчик имен. Т.Е обрабатывает переменные тайпкаста только по их имени.
example[cJass]:
 var a[]
 a[1]="xd"
 a[1]=115.0
 a[2]=11
 a[15]=true
 a[4]="omg"
 namespace a{
  BJDebugMsg(1)
  BJDebugMsg(4)
  BJDebugMsg(15)
 }
example[Jass]:
 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 файлы(да это увеличит время загрузки зато, без десинков можно делать перевод)
Итак как работает данная система.
Example[cJass]:
package eng{
 STRING_HASH = "My mother say"
}
package rus{
 STRING_HASH = "Моя мама сказала"
}
package ger{
 STRING_HASH = "Githler CAPUT!"
}

void temp(){
 BJDebugMsg(STRING_HASH)
}
Что происходит с 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 .__love​My​Magic__

Я люблю красивый код, поэтому хотелось бы предложить такую фичу как класс. Конечно она не будет выполнять предназначеных ему функции (т.е название я тупо взял с Явы можно и переименовать). Фича нам дает небольшое улучшение кодинга.
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("Чит детектед!")}
}

12__inline__

То же что и си.
example[cJass]:
int  size = 0
bool temp = inline PerfectI2B(){return true}

void temp()
{
	if temp
	{
	    ForGroup(CreateGroup(),inline GetSize(size++))
	}
	else
	{
	    ForGroup(CreateGroup(),inline DecSize(size--))
	}
} 
Компилятор процеживает всю эту кашу в.
example[Jass]:
//! 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__
Теперь улучшаем структуры! Т.Е мы можем делать дочерние структуры более простым методом. Сейчас покажу на примере
>> example[cJass]:
struct parent
{
    struct childA
	{
	    struct childC
		{
		}
	}
	struct childB
	{
	}
}
Такая вот котовасия перепарситься в более простую вещь.
example[vJass]:
struct parent
endstruct
struct childA extends parent
endstruct
struct childC extends childA
endstruct
struct childB extends parent
endstruct
В итоге мы получаем вполне нормальный код. Т.Е такое действие будет сделать не так уж и трудно.

14 __​Perfect​Name?__

Сомнительная фича которая добавляет перцу к страктам
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 насчет всех этих идей.
ЗЫ: В ближайшее время предложу еще пару идеи, пока осмысливаю как бы их лучше реализовать, да и хотелось чтобы автор реагировал на них (хотя вероятно у него проблемы ин реал лайф)
Да... Хреново у тебя с новым форматированием... ©VD
19

» WarCraft 3 / Библиотека функций

Лол. Не шарите. Если бы я хотел через луп, я бы сделал через него. Но я дал вам самый быстрыи вариант выполнения. Сабстринг можно убрать, но тогда будет тьма дамми функции что является злом. Плюс строки не вызывают утечек. (зевс я могу и в одну строку. а смысл?)
19

» WarCraft 3 / Библиотека функций

Ловите, наверное самая быстрая функция по касту "тригерных" магий =)
(По скорости быстрее чем 20 обычных проверок GetSpellAbilityId()=='SPELL ID')
СабСтринг для того чтобы не "тригерные" магии не отлавливал (для нешаряших или недопонявщих.)

function SpellCast takes nothing returns boolean
local string s=GetObjectName(GetSpellAbilityId())
if SubString(s,StringLength(s)-4,StringLength(s))=="Exec" then
 call ExecuteFunc(s)
endif
return false
endfunction
function InitTrig_Spell_Cast takes nothing returns nothing
local trigger t=CreateTrigger()
call TriggerAddCondition(t,Condition(function SpellCast))
call TriggerRegisterPlayerUnitEvent(t,Player(0x00),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x01),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x02),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x03),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x04),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x05),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x06),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x07),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x08),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x09),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x0A),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x0B),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x0C),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x0D),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x0E),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x0F),EVENT_PLAYER_UNIT_SPELL_CAST,null)
set t=null
endfunction
19

» WarCraft 3 / cJass - дополнение к языку JASS

txt2:cJass added:
Адресовано to Adolf
Остальные: "Ваше мнение интересно этим людям" => []
  1. Ну как вариант у меня появилась идея к твоему import'еру. Почему бы ему не интегрировать в карту свой собственный common.j при помощи такой функции
    include "myFile.j" RUS
где ну include и в Африке инклад, далее файл. А после сладкая фича (Для переводчиков триггеров вообще прет шииикарна) добавляет по Locale ID.
  1. Сделать матпарсер в оптимайзере к примеру
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
  1. Ну это самая бредовая идея что была за сегодня у меня XD. В общем она упростит некие подсчеты (только с цифрами).
    Пример: x=2z+5y
    Конвертируемая версия: set x =(2*z)+(5*y)
  1. Гыгы это не все идеи моего запала ^_^. 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 боюсь что астматик начинает задыхаться от количества кода =(((((.