Сообщение от
DeimoS
Чтоб всех этих проблем не было, сначала загружай данные о актёре в локальные переменные, после этого создавай актёра по этим данным, записывай его ID и уже этот ID используй как индекс массива, в который уже переноси данные из локальных переменных/создавай всякие 3D тексты и т.п. (вот
тут есть пример такой загрузки).
Это и твою проблему исправит, и сделает код защищённым от возможных ошибок, ибо в текущем виде достаточно создать одного актёра до загрузки твоей системы и она уже начнёт работать некорректно.
При желании, можешь изначально отнимать от ID актёра единицу, дабы твой массив "ped_Actor" заполнялся с нулевой ячейки, а не с первой. Только это, соответственно, придётся во всём скрипте учитывать всякий раз, когда ты начинаешь пытаться обращаться к данными в массиве по ID актёра, так же отнимая единицу.
Вообщем попробовал я всё таки сделать:
Опять всё спутано, теперь при обращении к боту, выдает ошибку, что мол такого бота не существует...
PHP код:
forward LoadActorCallBack();
public LoadActorCallBack()
{
new rows, fields;
new time = GetTickCount();
new count = 0;
cache_get_data(rows, fields,MysqlConnect);
if(rows == 0) return 1;
new bot_id = 0,buff_ped_Actor[aCreate_Actor];
for(new i ; i < rows; i++)
{
buff_ped_Actor[id_Actor] = cache_get_field_content_int(i,"id_actor", MysqlConnect);
buff_ped_Actor[ped_Skin] = cache_get_field_content_int(i,"ped_skin", MysqlConnect);
cache_get_field_content(i,"ped_names",buff_ped_Actor[ped_Names], MysqlConnect, 40);
buff_ped_Actor[ped_Pos][0] = cache_get_field_content_float(i,"ped_pos_x", MysqlConnect);
buff_ped_Actor[ped_Pos][1] = cache_get_field_content_float(i,"ped_pos_y", MysqlConnect);
buff_ped_Actor[ped_Pos][2] = cache_get_field_content_float(i,"ped_pos_z", MysqlConnect);
buff_ped_Actor[ped_Pos][3] = cache_get_field_content_float(i,"ped_pos_a", MysqlConnect);
buff_ped_Actor[ped_World] = cache_get_field_content_int(i,"ped_World", MysqlConnect);
buff_ped_Actor[ped_Interier] = cache_get_field_content_int(i,"ped_Interier", MysqlConnect);
count++;
//--------------------
bot_id = CreateActor_Server(buff_ped_Actor[id_Actor],buff_ped_Actor[ped_Skin], buff_ped_Actor[ped_Pos][0],buff_ped_Actor[ped_Pos][1],buff_ped_Actor[ped_Pos][2],buff_ped_Actor[ped_Pos][3], 0, 100.0, buff_ped_Actor[ped_World], buff_ped_Actor[ped_Interier]);
//--------------------
ped_Actor[bot_id][id_Actor] = buff_ped_Actor[id_Actor];
ped_Actor[bot_id][ped_Skin] = buff_ped_Actor[ped_Skin];
strmid(ped_Actor[bot_id][ped_Names], buff_ped_Actor[ped_Names], 0, strlen(buff_ped_Actor[ped_Names]), 40);
ped_Actor[bot_id][ped_Pos][0] = buff_ped_Actor[ped_Pos][0];
ped_Actor[bot_id][ped_Pos][1] = buff_ped_Actor[ped_Pos][1];
ped_Actor[bot_id][ped_Pos][2] = buff_ped_Actor[ped_Pos][2];
ped_Actor[bot_id][ped_Pos][3] = buff_ped_Actor[ped_Pos][3];
ped_Actor[bot_id][ped_World] = buff_ped_Actor[ped_World];
ped_Actor[bot_id][ped_Interier] = buff_ped_Actor[ped_Interier];
//--------------------
printf("Загружены Актеры: ID: %d, bot_id: %d, ID: %d", ped_Actor[bot_id][id_Actor], bot_id, i);
}
printf("[MySQL]: Система педов загружена за %d (ms) | Педов: %d",GetTickCount() - time,count);
return 1;
}
В логе почему-то так:
PHP код:
Загружены Актеры: ID: 0, bot_id: 1, ID: 0
Загружены Актеры: ID: 1, bot_id: 2, ID: 1
Загружены Актеры: ID: 2, bot_id: 3, ID: 2
Создаю:
PHP код:
stock CreateActor_Server(bot_id,model, Float:x,Float:y, Float:z, Float:a,invulnerable = 1, Float:health = 100.0, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_ACTOR_SD, areaid = -1, priority = 0)
{
bot_id = CreateDynamicActor(model, x,y,z,a,invulnerable,health, worldid, interiorid, playerid,streamdistance, areaid, priority);
if(bot_id != INVALID_ACTOR_ID)
{
ped_Actor[bot_id][IdActor3dText] = CreateDynamic3DTextLabel("-",COLOR_ALOGIN,x,y,z+ACTOR_CHAT_TEXT_OFFSET_HEIGHT,5.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1, worldid, interiorid, -1, 10.0);
UpdateDynamic3DTextLabelText(ped_Actor[bot_id][IdActor3dText],COLOR_ALOGIN,"");
new str[45];
format(str, sizeof(str), "[%d] %s",bot_id, ped_Actor[bot_id-1][ped_Names]);
ped_Actor[bot_id][IdActor3dName] = CreateDynamic3DTextLabel(str, -1,x,y,z+ACTOR_CHAT_TEXT_OFFSET_HEIGHT+0.1, 15.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID,1,worldid, interiorid, -1, 10.0);
UpdateDynamic3DTextLabelText(ped_Actor[bot_id][IdActor3dName],-1,str);
//========//
if(ped_Actor[bot_id][ped_Timer] == 0)
{
ped_Actor[bot_id][ped_Timer] = SetTimerEx("OnActorTimer", 78000, true, "dd",bot_id);
}
CreateActorAnim();
}
return bot_id;
}