при компиляции структуры функция alocate генерирует предел в 162 вместо 8к.Как и где настроить чтобы всегда было стандартные 8192

Принятый ответ

Что-то мне кажется, что 162 - это предел для структур, которые содержат в себе массив, поэтому нужно указывать размер, если ставить внутри структуры массив переменных и при этом данный предел - 162. Компилятор разбивает стандартный массив в размере 8192 на более меньшие части. Например, структура - группа юнитов содержит массив юнитов 20, то для каждой структуры будет выделяться строго 20 ячеек общего массива юнитов в размере 8192.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
13
8 лет назад
0
Что-то мне кажется, что 162 - это предел для структур, которые содержат в себе массив, поэтому нужно указывать размер, если ставить внутри структуры массив переменных и при этом данный предел - 162. Компилятор разбивает стандартный массив в размере 8192 на более меньшие части. Например, структура - группа юнитов содержит массив юнитов 20, то для каждой структуры будет выделяться строго 20 ячеек общего массива юнитов в размере 8192.
Принятый ответ
0
17
8 лет назад
0
есть масив но он врядли влияет на эти параметры так как при компиляции других структур видел 8к предела
а лутше сами посмотрите

struct UnitDamageFire{ 
static UnitDamageFire Name[]
static int count = 0
//===================

unit c,u
float damage
string e,origin
int time
//=================
int tt=0,i
int taimer=0
effect ef


private void DamageFire(){

if(GetUnitState(.c,UNIT_STATE_LIFE)>0){
UnitDamage(.u,.c,.damage)

}else{ Remove()}

}



private void Remove(){
DestroyEffect(.ef)
.ef=null
.e = null
.origin =null
.u=null
.c=null
RemoveUnitStruct(.i)
}


private void Action(){
.tt++

if(.tt<.time){

.taimer++
if(.taimer>sek){
.taimer=0
DamageFire()
}


}else{
Remove()

}


}


private void Create(){

.ef = AddSpecialEffectTarget(.e,.c,.origin)


}



//=================================
static void AddToUnitMove(unit c,unit u,float damage,string e,string origin,float time){
int i = Proverka(c)

if(i!=-1){
if(Name[i].u==u){return}

Name[count++] = UnitDamageFire.create() 
Name[count-1].c=c
Name[count-1].u=u
Name[count-1].damage=damage
Name[count-1].e=e
Name[count-1].origin=origin
Name[count-1].time=R2I(time*sek)
Name[count-1].i=count-1
Name[count-1].Create()

}else{

Name[count++] = UnitDamageFire.create() 
Name[count-1].c=c
Name[count-1].u=u
Name[count-1].damage=damage
Name[count-1].e=e
Name[count-1].origin=origin
Name[count-1].time=R2I(time*sek)
Name[count-1].i=count-1
Name[count-1].Create()



  }
}
//================================


static int Proverka(unit u){
int i = 0
while (i<count){
if(Name[i].u==u){return i};i++}
return -1
}
static int ProverkaId(int j){
int i =0
while(i<count){
if(Name[i].i==j){return i};i++}
return -1
}

//Удаление
static void RemoveUnitStruct(int j){
int i = ProverkaId(j)
if(i==-1){return};count--;
Name[i].destroy()
while(i<count){Name[i]=Name[i+1];i++}
}

static void Update(){int i =0;while(i<count){Name[i].Action();i++}}
}//==========end struct
Чтобы оставить комментарий, пожалуйста, войдите на сайт.