Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 3 ПерваяПервая 1 2 3 ПоследняяПоследняя
Показано с 11 по 20 из 27
  1. #11
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ну так покажи как ты к боту пытаешься обращаться

    Ну и да: какой смысл в переменной count, если её значение, в итоге, будет равно значению переменной rows? :)
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  2. #12
    Аватар для Сергей
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну так покажи как ты к боту пытаешься обращаться

    Ну и да: какой смысл в переменной count, если её значение, в итоге, будет равно значению переменной rows? :)
    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;


  3. #13
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Эмм, у тебя сейчас очень странная проверка на существование бота. В "id_Actor" ты хранишь ID столбца из таблицы с ботами. Этот ID никак не обязан быть идентичным ID бота на сервере.

    Да и, в целом, очень странная изначальная идея проверки, ибо ты записываешь ID бота в массив, индексом которого будет тот же самый ID бота, который ты в него записываешь. Какой в этом смысл?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  4. #14
    Аватар для Сергей
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Эмм, у тебя сейчас очень странная проверка на существование бота. В "id_Actor" ты хранишь ID столбца из таблицы с ботами. Этот ID никак не обязан быть идентичным ID бота на сервере.

    Да и, в целом, очень странная изначальная идея проверки, ибо ты записываешь ID бота в массив, индексом которого будет тот же самый ID бота, который ты в него записываешь. Какой в этом смысл?
    Так вот именно, запутался вообще....

  5. #15
    Аватар для Сергей
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Эмм, у тебя сейчас очень странная проверка на существование бота. В "id_Actor" ты хранишь ID столбца из таблицы с ботами. Этот ID никак не обязан быть идентичным ID бота на сервере.

    Да и, в целом, очень странная изначальная идея проверки, ибо ты записываешь ID бота в массив, индексом которого будет тот же самый ID бота, который ты в него записываешь. Какой в этом смысл?
    Вообщем, я тут снова по пробовал мудрить, и вот что получилось:

    Работает нормально:
    PHP код:
    forward LoadActorCallBack();
    public 
    LoadActorCallBack()
    {
        new 
    rowsfields;
        new 
    time GetTickCount();
        
    cache_get_data(rowsfields,MysqlConnect);
        if(
    rows == 0) return 1;
        for(new 
    irowsi++) 
        {
            
    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], MysqlConnect40);
            
    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], 0100.0ped_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,1ped_Actor[i][ped_World], ped_Actor[i][ped_Interier], -110.0);
            
    UpdateDynamic3DTextLabelText(ped_Actor[i][IdActor3dText],COLOR_ALOGIN,"");

            new 
    str[45];
            
    format(strsizeof(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.115.0INVALID_PLAYER_IDINVALID_VEHICLE_ID,1,ped_Actor[i][ped_World], ped_Actor[i][ped_Interier], -110.0);
            
    UpdateDynamic3DTextLabelText(ped_Actor[i][IdActor3dName],-1,str);
            
    //--------//
            
    if(ped_Actor[i][ped_Timer] == 0
            {
                
    ped_Actor[i][ped_Timer] = SetTimerEx("OnActorTimer"78000true"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_timefalse"dd",ped_Actor[bot_id][id_Actor]);
                if(
    anims == trueApplyDynamicActorAnimation(ped_Actor[bot_id][ped_ActorCreate], "PED""IDLE_CHAT"4.10000visual_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
    А при использовании текста для актера, всё работает нормально, у каждого актера срабатывает и анимация, и текст над ним, как так то?

  6. #16
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Сергей Посмотреть сообщение
    Так вот именно, запутался вообще....
    Ну так если запутался, то стоит разобраться какой именно принцип работы у того кода, что я тебе предлагал, а не просто под копирку всё сделать и сидеть, ничего не понимая.

    Как минимум, можно массив для хранения данных о ботах инициализировать невалидным значением (например, "-1") и уже в проверках на существование бота сделать проверку
    1. if(ped_Actor[params[0]][id_Actor] == -1) return SCMError(playerid,"[Server]: {FFFFFF}Данного актера не найдено на сервере.");


    Цитата Сообщение от Сергей Посмотреть сообщение
    Код:
    ped_Actor[bot_id][ped_ActorCreate]
    И-то эта штука вообще не соответствует идам:
    Т.е я загружаю:
    Код:
     ped_Actor[i][id_Actor] образно 3 актера, их иды грузит как 0,1,2
    Я тебе это в предыдущем сообщении уже объяснял. Да и ты сам можешь просто посмотреть код загрузки, чтоб узнать что именно в эту переменную загружается.


    Твоя единственная сейчас проблема в том, что ты не хочешь сесть и разобраться в том коде, что тебе дали. Не только в том, как код работает, но и в том, какое предназначение будет у тех или иных переменных и какие значения эти переменные смогут вообще хранить.
    Последний раз редактировалось DeimoS; 08.04.2021 в 12:05.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  7. #17
    Аватар для Сергей
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну так если запутался, то стоит разобраться какой именно принцип работы у того кода, что я тебе предлагал, а не просто под копирку всё сделать и сидеть, ничего не понимая.

    Как минимум, можно массив для хранения данных о ботах инициализировать невалидным значением (например, "-1") и уже в проверках на существование бота сделать проверку
    1. if(ped_Actor[params[0]][id_Actor] == -1) return SCMError(playerid,"[Server]: {FFFFFF}Данного актера не найдено на сервере.");




    Я тебе это в предыдущем сообщении уже объяснял. Да и ты сам можешь просто посмотреть код загрузки, чтоб узнать что именно в эту переменную загружается.


    Твоя единственная сейчас проблема в том, что ты не хочешь сесть и разобраться в том коде, что тебе дали. Не только в том, как код работает, но и в том, какое предназначение будет у тех или иных переменных и какие значения эти переменные смогут вообще хранить.
    Так пытался разобраться, сделал даже другой метод, но, всё рано не вяжется у меня, не пойму...
    Путанится происходит в том, что как мне дальше это всё дело использовать...
    Последний раз редактировалось Сергей; 08.04.2021 в 22:10.

  8. #18
    Аватар для ihNNNNNify
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2018
    Сообщений
    17
    Репутация:
    1 ±
    PHP код:
    forward LoadActorCallBack();
    public 
    LoadActorCallBack()
    {
        new 
    rowsfields;
        new 
    time GetTickCount();
        new 
    count 0;
        
    cache_get_data(rowsfields,MysqlConnect);
        if(
    rows == 0) return 1;
        for(new 
    0idrowsi++) 
        {
            
    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], MysqlConnect40);
            
    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(idped_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], 0100.0ped_Actor[id][ped_World], ped_Actor[id][ped_Interier]);
        }
        return 
    1;


  9. #19
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Сергей Посмотреть сообщение
    Так пытался разобраться, сделал даже другой метод, но, всё рано не вяжется у меня, не пойму...
    Путанится происходит в том, что как мне дальше это всё дело использовать...
    Так в чём путаница? У тебя есть реальный ID актёра на сервере. Этот же ID используешь для обращения к массиву. Всё. В чём тут можно запутаться? Тебе осталось переписать прошлый код под этот принцип и всё у тебя будет работать.

    UPD: Эмм, я тут оказывается не заметил, что ты, в итоге, опять какую-то фигню намудрил с кодом в этом сообщении. Я тебе уже показал как правильно нужно реализовывать загрузку твоих данных с учётом того, как ты потом хочешь к ним обращаться. Зачем ты опять откатился к старому варианту, который, как я уже раз в пятый повторяю, НЕ ГАРАНТИРУЕТ ТЕБЕ, ЧТО ID АКТЁРА И ИНДЕКС МАССИВА ОКАЖУТСЯ ОДИНАКОВЫМИ? Вчитывайся в то, что тебе пишут, пожалуйста.


    Цитата Сообщение от ihNNNNNify Посмотреть сообщение
    PHP код:
    forward LoadActorCallBack();
    public 
    LoadActorCallBack()
    {
        new 
    rowsfields;
        new 
    time GetTickCount();
        new 
    count 0;
        
    cache_get_data(rowsfields,MysqlConnect);
        if(
    rows == 0) return 1;
        for(new 
    0idrowsi++) 
        {
            
    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], MysqlConnect40);
            
    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(idped_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], 0100.0ped_Actor[id][ped_World], ped_Actor[id][ped_Interier]);
        }
        return 
    1;

    В итоге и информация из "id_Actor" останется непонятно в какой ячейке, и не будет никакой гарантии того, что индекс массива будет равен ID актёра :)
    Последний раз редактировалось DeimoS; 09.04.2021 в 00:16.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  10. Пользователь сказал cпасибо:
    Сергей (10.04.2021)
  11. #20
    Аватар для Сергей
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Так в чём путаница? У тебя есть реальный ID актёра на сервере. Этот же ID используешь для обращения к массиву. Всё. В чём тут можно запутаться? Тебе осталось переписать прошлый код под этот принцип и всё у тебя будет работать.

    UPD: Эмм, я тут оказывается не заметил, что ты, в итоге, опять какую-то фигню намудрил с кодом в этом сообщении. Я тебе уже показал как правильно нужно реализовывать загрузку твоих данных с учётом того, как ты потом хочешь к ним обращаться. Зачем ты опять откатился к старому варианту, который, как я уже раз в пятый повторяю, НЕ ГАРАНТИРУЕТ ТЕБЕ, ЧТО ID АКТЁРА И ИНДЕКС МАССИВА ОКАЖУТСЯ ОДИНАКОВЫМИ? Вчитывайся в то, что тебе пишут, пожалуйста.




    В итоге и информация из "id_Actor" останется непонятно в какой ячейке, и не будет никакой гарантии того, что индекс массива будет равен ID актёра :)
    Перечитал ещё все ваши советы по нескольку раз, и понял, благодарю.
    Последний раз редактировалось Сергей; 10.04.2021 в 19:21. Причина: Хотелось бы закрыть тему.

 

 
Страница 2 из 3 ПерваяПервая 1 2 3 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •