Ну так покажи как ты к боту пытаешься обращаться
Ну и да: какой смысл в переменной count, если её значение, в итоге, будет равно значению переменной rows? :)
Ну так покажи как ты к боту пытаешься обращаться
Ну и да: какой смысл в переменной count, если её значение, в итоге, будет равно значению переменной rows? :)
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
PHP код:
CMD:actortext(playerid,params[])
{
if(sscanf(params, "ds[90]", params[0],params[2])) return SCM(playerid,-1,"Введите команду: '/actortext' [id actor] [text] (-1 id сброс анимации)");
if(ped_Actor[params[0]][id_Actor] != params[0]) return SCMError(playerid,"[Server]: {FFFFFF}Данного актера не найдено на сервере.");
new str_r[91];
format(str_r,sizeof(str_r),"%s",params[2]);
if(strcmp_with_isnull(str_r, "-1", true) == 0)
{
SCM(playerid,COLOR_IVORY,"Анимация сброшена");
ClearDynamicActorAnimations(ped_Actor[params[0]][id_Actor]);
AnimationPED(ped_Actor[params[0]][id_Actor]);
UpdateDynamic3DTextLabelText(ped_Actor[params[0]][IdActor3dText],COLOR_ALOGIN,"");
return 1;
}
new str_s[90];
format(str_s,sizeof(str_s),"Проигрываем анимацию боту: %d",ped_Actor[params[0]][id_Actor]);
SCM(playerid,COLOR_IVORY,str_s);
UpdateDynamic3DTextLabelText(ped_Actor[params[0]][IdActor3dText],COLOR_ALOGIN,str_r);
ped_Actor[params[0]][ped_AnimsReload] = 1;
SendActorChat(ped_Actor[params[0]][id_Actor],6000,str_r,COLOR_ALOGIN,true);
return 1;
}
Эмм, у тебя сейчас очень странная проверка на существование бота. В "id_Actor" ты хранишь ID столбца из таблицы с ботами. Этот ID никак не обязан быть идентичным ID бота на сервере.
Да и, в целом, очень странная изначальная идея проверки, ибо ты записываешь ID бота в массив, индексом которого будет тот же самый ID бота, который ты в него записываешь. Какой в этом смысл?
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Вообщем, я тут снова по пробовал мудрить, и вот что получилось:
Работает нормально:
Дальше сделал команду:PHP код:
forward LoadActorCallBack();
public LoadActorCallBack()
{
new rows, fields;
new time = GetTickCount();
cache_get_data(rows, fields,MysqlConnect);
if(rows == 0) return 1;
for(new i; i < rows; i++)
{
ped_Actor[i][id_Actor] = cache_get_field_content_int(i,"id_actor", MysqlConnect);
ped_Actor[i][ped_Skin] = cache_get_field_content_int(i,"ped_skin", MysqlConnect);
cache_get_field_content(i,"ped_names",ped_Actor[i][ped_Names], MysqlConnect, 40);
ped_Actor[i][ped_Pos][0] = cache_get_field_content_float(i,"ped_pos_x", MysqlConnect);
ped_Actor[i][ped_Pos][1] = cache_get_field_content_float(i,"ped_pos_y", MysqlConnect);
ped_Actor[i][ped_Pos][2] = cache_get_field_content_float(i,"ped_pos_z", MysqlConnect);
ped_Actor[i][ped_Pos][3] = cache_get_field_content_float(i,"ped_pos_a", MysqlConnect);
ped_Actor[i][ped_World] = cache_get_field_content_int(i,"ped_World", MysqlConnect);
ped_Actor[i][ped_Interier] = cache_get_field_content_int(i,"ped_Interier", MysqlConnect);
//--------------------
ped_Actor[i][ped_ActorCreate] = CreateDynamicActor(ped_Actor[i][ped_Skin], ped_Actor[i][ped_Pos][0],ped_Actor[i][ped_Pos][1],ped_Actor[i][ped_Pos][2],ped_Actor[i][ped_Pos][3], 0, 100.0, ped_Actor[i][ped_World], ped_Actor[i][ped_Interier]);
//--------------------
ped_Actor[i][IdActor3dText] = CreateDynamic3DTextLabel("-",COLOR_ALOGIN,ped_Actor[i][ped_Pos][0],ped_Actor[i][ped_Pos][1],ped_Actor[i][ped_Pos][2]+ACTOR_CHAT_TEXT_OFFSET_HEIGHT,5.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1, ped_Actor[i][ped_World], ped_Actor[i][ped_Interier], -1, 10.0);
UpdateDynamic3DTextLabelText(ped_Actor[i][IdActor3dText],COLOR_ALOGIN,"");
new str[45];
format(str, sizeof(str), "[%d] %s",ped_Actor[i][id_Actor], ped_Actor[i][ped_Names]);
ped_Actor[i][IdActor3dName] = CreateDynamic3DTextLabel(str, -1,ped_Actor[i][ped_Pos][0],ped_Actor[i][ped_Pos][1],ped_Actor[i][ped_Pos][2]+ACTOR_CHAT_TEXT_OFFSET_HEIGHT+0.1, 15.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID,1,ped_Actor[i][ped_World], ped_Actor[i][ped_Interier], -1, 10.0);
UpdateDynamic3DTextLabelText(ped_Actor[i][IdActor3dName],-1,str);
//--------//
if(ped_Actor[i][ped_Timer] == 0)
{
ped_Actor[i][ped_Timer] = SetTimerEx("OnActorTimer", 78000, true, "dd",i);
}
}
printf("[MySQL]: Система педов загружена за %d (ms)",GetTickCount() - time);
return 1;
}
Ну и чтобы текст шёл и анимация работала:PHP код:
CMD:actortext(playerid,params[])
{
if(sscanf(params, "ds[90]", params[0],params[2])) return SCM(playerid,-1,"Введите команду: '/actortext' [id actor] [text] (-1 id сброс анимации)");
new str_r[91];
format(str_r,sizeof(str_r),"%s",params[2]);
if(strcmp_with_isnull(str_r, "-1", true) == 0)
{
SCM(playerid,COLOR_IVORY,"Анимация сброшена");
ClearDynamicActorAnimations(ped_Actor[params[0]][id_Actor]);
AnimationPED(ped_Actor[params[0]][id_Actor]);
UpdateDynamic3DTextLabelText(ped_Actor[params[0]][IdActor3dText],COLOR_ALOGIN,"");
return 1;
}
new str_s[90];
format(str_s,sizeof(str_s),"Проигрываем анимацию боту: %d",params[0]);
SCM(playerid,COLOR_IVORY,str_s);
ped_Actor[params[0]][ped_AnimsReload] = 1;
ServerActorText(params[0],6000,str_r,COLOR_ALOGIN,true);
return 1;
}
Только вот одно НО:PHP код:
stock ServerActorText(bot_id,visual_time,const text_bot[],color,bool:anims)
{
if(strlen(text_bot) > 0)
{
if(visual_time > 0)
{
if(ped_Actor[bot_id][IdActor3dTextTimer] != 0)
{
KillTimer(ped_Actor[bot_id][IdActor3dTextTimer]);
ped_Actor[bot_id][IdActor3dTextTimer] = 0;
}
UpdateDynamic3DTextLabelText(ped_Actor[bot_id][IdActor3dText],color,text_bot);
ped_Actor[bot_id][IdActor3dTextTimer] = SetTimerEx("OnActorChatEnds", visual_time, false, "dd",ped_Actor[bot_id][id_Actor]);
if(anims == true) ApplyDynamicActorAnimation(ped_Actor[bot_id][ped_ActorCreate], "PED", "IDLE_CHAT", 4.1, 0, 0, 0, 0, visual_time);
}
}
return 1;
}
Почему мне чтобы работало всё нормально приходится использовать:
И-то эта штука вообще не соответствует идам:Код:ped_Actor[bot_id][ped_ActorCreate]
Т.е я загружаю:
создаю актера:Код:ped_Actor[i][id_Actor] образно 3 актера, их иды грузит как 0,1,2
А при использовании текста для актера, всё работает нормально, у каждого актера срабатывает и анимация, и текст над ним, как так то?Код:ped_Actor[i][ped_ActorCreate], тут создание идёт от 1 до 3
Ну так если запутался, то стоит разобраться какой именно принцип работы у того кода, что я тебе предлагал, а не просто под копирку всё сделать и сидеть, ничего не понимая.
Как минимум, можно массив для хранения данных о ботах инициализировать невалидным значением (например, "-1") и уже в проверках на существование бота сделать проверку
if(ped_Actor[params[0]][id_Actor] == -1) return SCMError(playerid,"[Server]: {FFFFFF}Данного актера не найдено на сервере.");
Я тебе это в предыдущем сообщении уже объяснял. Да и ты сам можешь просто посмотреть код загрузки, чтоб узнать что именно в эту переменную загружается.
Твоя единственная сейчас проблема в том, что ты не хочешь сесть и разобраться в том коде, что тебе дали. Не только в том, как код работает, но и в том, какое предназначение будет у тех или иных переменных и какие значения эти переменные смогут вообще хранить.
Последний раз редактировалось DeimoS; 08.04.2021 в 12:05.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
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;
for(new i = 0, id; i < rows; i++)
{
id = ped_Actor[i][id_Actor] = cache_get_field_content_int(i,"id_actor", MysqlConnect);
ped_Actor[id][ped_Skin] = cache_get_field_content_int(i,"ped_skin", MysqlConnect);
cache_get_field_content(i,"ped_names", ped_Actor[id][ped_Names], MysqlConnect, 40);
ped_Actor[id][ped_Pos][0] = cache_get_field_content_float(i,"ped_pos_x", MysqlConnect);
ped_Actor[id][ped_Pos][1] = cache_get_field_content_float(i,"ped_pos_y", MysqlConnect);
ped_Actor[id][ped_Pos][2] = cache_get_field_content_float(i,"ped_pos_z", MysqlConnect);
ped_Actor[id][ped_Pos][3] = cache_get_field_content_float(i,"ped_pos_a", MysqlConnect);
ped_Actor[id][ped_World] = cache_get_field_content_int(i,"ped_World", MysqlConnect);
ped_Actor[id][ped_Interier] = cache_get_field_content_int(i,"ped_Interier", MysqlConnect);
count++;
//--------------------
CreateActorServer(id, ped_Actor[id][ped_Skin], ped_Actor[id][ped_Pos][0],ped_Actor[id][ped_Pos][1],ped_Actor[id][ped_Pos][2],ped_Actor[id][ped_Pos][3], 0, 100.0, ped_Actor[id][ped_World], ped_Actor[id][ped_Interier]);
}
return 1;
}
Так в чём путаница? У тебя есть реальный ID актёра на сервере. Этот же ID используешь для обращения к массиву. Всё. В чём тут можно запутаться? Тебе осталось переписать прошлый код под этот принцип и всё у тебя будет работать.
UPD: Эмм, я тут оказывается не заметил, что ты, в итоге, опять какую-то фигню намудрил с кодом в этом сообщении. Я тебе уже показал как правильно нужно реализовывать загрузку твоих данных с учётом того, как ты потом хочешь к ним обращаться. Зачем ты опять откатился к старому варианту, который, как я уже раз в пятый повторяю, НЕ ГАРАНТИРУЕТ ТЕБЕ, ЧТО ID АКТЁРА И ИНДЕКС МАССИВА ОКАЖУТСЯ ОДИНАКОВЫМИ? Вчитывайся в то, что тебе пишут, пожалуйста.
В итоге и информация из "id_Actor" останется непонятно в какой ячейке, и не будет никакой гарантии того, что индекс массива будет равен ID актёра :)
Последний раз редактировалось DeimoS; 09.04.2021 в 00:16.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Сергей (10.04.2021)
Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)