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

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±

    Намудрил с Актерами

    Доброго времени суток, что-то запутался, и разобраться не могу, намудрил что-то...
    Вообщем, решил я значит актеров перенести в БД, ну сделал всё чётко, а потом начались проблемы с их идами...
    Я хочу обращаться к ним по ID, я так понимаю, что они создаются изначально не с номера 0, сразу первый созданный это 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 
    0rowsi++) 
        {
            
    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);
            
    count++;
            
    //--------------------
            
    CreateActorServer(i,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]);
        }
        return 
    1;

    PHP код:
    stock CreateActorServer(i,modelFloat:x,Float:yFloat:zFloat:a,invulnerable 1Float:health 100.0worldid = -1interiorid = -1playerid = -1Float:streamdistance STREAMER_ACTOR_SDareaid = -1priority 0
    {
        new 
    bot_id i;
        
    bot_id CreateDynamicActor(modelx,y,z,a,invulnerable,healthworldidinterioridplayerid,streamdistanceareaidpriority); 
        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,1worldidinteriorid, -110.0);
            
    UpdateDynamic3DTextLabelText(ped_Actor[bot_id][IdActor3dText],COLOR_ALOGIN,"");

            new 
    str[45];
            
    format(strsizeof(str), "[%d] %s",bot_idped_Actor[bot_id-1][ped_Names]);
            
    ped_Actor[bot_id][IdActor3dName] = CreateDynamic3DTextLabel(str, -1,x,y,z+1.115.0INVALID_PLAYER_IDINVALID_VEHICLE_ID,1,worldidinteriorid, -110.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"78000true"dd",bot_id);
            }
            
    CreateActorAnim();
        }
        return 
    bot_id

    Последний раз редактировалось Сергей; 04.04.2021 в 01:31.

  2. #2
    Аватар для Pa4enka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2016
    Адрес
    Украина
    Сообщений
    157
    Репутация:
    35 ±
    1. stock CreateActorServer(i,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)
    2. {
    3. new bot_id;
    4. bot_id = CreateDynamicActor(model, x,y,z,a,invulnerable,health, worldid, interiorid, playerid,streamdistance, areaid, priority);
    5. if(bot_id != INVALID_ACTOR_ID)
    6. {
    7. ped_Actor[i][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);
    8. UpdateDynamic3DTextLabelText(ped_Actor[i][IdActor3dText],COLOR_ALOGIN,"");
    9.  
    10. new str[45];
    11. format(str, sizeof(str), "[%d] %s",bot_id, ped_Actor[i][ped_Names]);
    12. ped_Actor[i][IdActor3dName] = CreateDynamic3DTextLabel(str, -1,x,y,z+1.1, 15.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID,1,worldid, interiorid, -1, 10.0);
    13. UpdateDynamic3DTextLabelText(ped_Actor[i][IdActor3dName],-1,str);
    14. //========//
    15. if(ped_Actor[i][ped_Timer] == 0)
    16. {
    17. ped_Actor[i][ped_Timer] = SetTimerEx("OnActorTimer", 78000, true, "dd",bot_id);
    18. }
    19. CreateActorAnim();
    20. }
    21. return bot_id;
    22. }

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

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Цитата Сообщение от Pa4enka Посмотреть сообщение
    1. stock CreateActorServer(i,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)
    2. {
    3. new bot_id;
    4. bot_id = CreateDynamicActor(model, x,y,z,a,invulnerable,health, worldid, interiorid, playerid,streamdistance, areaid, priority);
    5. if(bot_id != INVALID_ACTOR_ID)
    6. {
    7. ped_Actor[i][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);
    8. UpdateDynamic3DTextLabelText(ped_Actor[i][IdActor3dText],COLOR_ALOGIN,"");
    9.  
    10. new str[45];
    11. format(str, sizeof(str), "[%d] %s",bot_id, ped_Actor[i][ped_Names]);
    12. ped_Actor[i][IdActor3dName] = CreateDynamic3DTextLabel(str, -1,x,y,z+1.1, 15.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID,1,worldid, interiorid, -1, 10.0);
    13. UpdateDynamic3DTextLabelText(ped_Actor[i][IdActor3dName],-1,str);
    14. //========//
    15. if(ped_Actor[i][ped_Timer] == 0)
    16. {
    17. ped_Actor[i][ped_Timer] = SetTimerEx("OnActorTimer", 78000, true, "dd",bot_id);
    18. }
    19. CreateActorAnim();
    20. }
    21. return bot_id;
    22. }
    А разница в чём?

  4. #4
    Аватар для Pa4enka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2016
    Адрес
    Украина
    Сообщений
    157
    Репутация:
    35 ±
    Да там почти каждая строка отличается)0
    Попробуй, в целом. Должно сработать.

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

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Цитата Сообщение от Pa4enka Посмотреть сообщение
    Да там почти каждая строка отличается)0
    Попробуй, в целом. Должно сработать.
    Для наглядности:
    Фотография

  6. #6
    Аватар для Pa4enka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2016
    Адрес
    Украина
    Сообщений
    157
    Репутация:
    35 ±
    Так работает или нет?))) Меня больше это интересует. Если нужно будет, я уточню детали.

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

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Цитата Сообщение от Pa4enka Посмотреть сообщение
    Так работает или нет?))) Меня больше это интересует. Если нужно будет, я уточню детали.
    Работает, но всё перепутано, но, и опять же в бд, их иды тоже начинаются с 0
    Обращаюсь к иду 1, текст показывает правильно, анимация не срабатывает, вместо этого срабатывает у ида 0
    Обращаюсь к иду 0, текст показывает, анимация даже не работает.
    Если вернуться к моему методу, всё работает так как должно быть, только вот иды ботов иные, они начинаются с 1, и при обращении к этим идам, всё работает так как должно быть


    PHP код:
    stock SendActorChat(bot_id,visual_time,const text_bot[],color,bool:anims// сказать боту 
    {
        
    printf("SendActorChat: %d | ActorID: %d",bot_id,ped_Actor[bot_id][id_Actor]);
        if(
    IsValidDynamicActor(ped_Actor[bot_id][id_Actor]))
        {
            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("OnActorChatEnd"visual_timefalse"dd",ped_Actor[bot_id][id_Actor]);
                    if(
    anims == trueApplyDynamicActorAnimation(ped_Actor[bot_id][id_Actor], "PED""IDLE_CHAT"4.10000visual_time);
                    return 
    1;
                }
            }
        }
        return 
    0;

    Последний раз редактировалось Сергей; 04.04.2021 в 04:36.

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

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Подыму

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Чтоб всех этих проблем не было, сначала загружай данные о актёре в локальные переменные, после этого создавай актёра по этим данным, записывай его ID и уже этот ID используй как индекс массива, в который уже переноси данные из локальных переменных/создавай всякие 3D тексты и т.п. (вот тут есть пример такой загрузки).

    Это и твою проблему исправит, и сделает код защищённым от возможных ошибок, ибо в текущем виде достаточно создать одного актёра до загрузки твоей системы и она уже начнёт работать некорректно.


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

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

    Steve Pavlina

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

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

    Это и твою проблему исправит, и сделает код защищённым от возможных ошибок, ибо в текущем виде достаточно создать одного актёра до загрузки твоей системы и она уже начнёт работать некорректно.


    При желании, можешь изначально отнимать от ID актёра единицу, дабы твой массив "ped_Actor" заполнялся с нулевой ячейки, а не с первой. Только это, соответственно, придётся во всём скрипте учитывать всякий раз, когда ты начинаешь пытаться обращаться к данными в массиве по ID актёра, так же отнимая единицу.
    Вообщем попробовал я всё таки сделать:
    Опять всё спутано, теперь при обращении к боту, выдает ошибку, что мол такого бота не существует...

    PHP код:
    forward LoadActorCallBack();
    public 
    LoadActorCallBack()
    {
        new 
    rowsfields;
        new 
    time GetTickCount();
        new 
    count 0;
        
    cache_get_data(rowsfields,MysqlConnect);
        if(
    rows == 0) return 1;
        new 
    bot_id 0,buff_ped_Actor[aCreate_Actor];
        for(new 
    rowsi++) 
        {
            
    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], MysqlConnect40);
            
    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], 0100.0buff_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], 0strlen(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_idi);
        }
        
    printf("[MySQL]: Система педов загружена за %d (ms) | Педов: %d",GetTickCount() - time,count);
        return 
    1;

    В логе почему-то так:
    PHP код:
    Загружены АктерыID0bot_id1ID0
    Загружены Актеры
    ID1bot_id2ID1
    Загружены Актеры
    ID2bot_id3ID

    Создаю:
    PHP код:
    stock CreateActor_Server(bot_id,modelFloat:x,Float:yFloat:zFloat:a,invulnerable 1Float:health 100.0worldid = -1interiorid = -1playerid = -1Float:streamdistance STREAMER_ACTOR_SDareaid = -1priority 0)
    {
        
    bot_id CreateDynamicActor(modelx,y,z,a,invulnerable,healthworldidinterioridplayerid,streamdistanceareaidpriority); 
        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,1worldidinteriorid, -110.0);
            
    UpdateDynamic3DTextLabelText(ped_Actor[bot_id][IdActor3dText],COLOR_ALOGIN,"");
            new 
    str[45];
            
    format(strsizeof(str), "[%d] %s",bot_idped_Actor[bot_id-1][ped_Names]);
            
    ped_Actor[bot_id][IdActor3dName] = CreateDynamic3DTextLabel(str, -1,x,y,z+ACTOR_CHAT_TEXT_OFFSET_HEIGHT+0.115.0INVALID_PLAYER_IDINVALID_VEHICLE_ID,1,worldidinteriorid, -110.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"78000true"dd",bot_id);
            }
            
    CreateActorAnim();
        }
        return 
    bot_id;


 

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

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

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

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

Ваши права

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