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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Вот код с обычным перебором всё кашерно:
      Открыть/закрыть
    PHP код:
        else if(strcmp(cmd"/aspecdelveh"true) == 0)
        {
            if(
    PlayerInfo[playerid][pAdmin] < 13) return 1;
            
    tmp strcharsplit(cmdtext,idx);
            if(!
    strlen(tmp)) return SendClientMessage(playerid,COLOR_WHITE," Ââåäèòå: /specdelveh [ðàäèóñ]");
            new 
    Float:pos floatstr(tmp),Float:car_x,Float:car_y,Float:car_z;
            
    //for(new ro=0;ro<MAX_VEHICLES;ro++)
            
    foreach (new ro:Vehicle)
            {
                if(
    GetVehicleModel(ro) > 399)
                {
                    
    GetVehiclePos(ro,car_x,car_y,car_z);
                    if(
    IsPlayerInRangeOfPoint(playerid,pos,car_x,car_y,car_z))
                    {
                        
    RemoveFromVehicle(playerid);
                        
    DestroyVehicle(ro);
                        
    TeleportTime[playerid] = 5;
                    }
                }
            }
            
    format(stringersizeof(stringer), "Àäìèíèñòðàòîð %s óäàëèë âåñü òðàíñïîðò ðÿäîì ñ íèì.",PlayerInfo[playerid][pNames]);
            
    ABroadCast(COLOR_LIGHTRED,stringer,1);
            return 
    1;
        } 

    А с оптимизированным перебором вот такой шлак лезет:
    PHP код:
    [debug]  Accessing element at index 2001 past array upper bound 2000 
    Это что нужно инклуд под себя штопать или как поступать?

  2. #12
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Вот код с обычным перебором всё кашерно:
      Открыть/закрыть
    PHP код:
        else if(strcmp(cmd"/aspecdelveh"true) == 0)
        {
            if(
    PlayerInfo[playerid][pAdmin] < 13) return 1;
            
    tmp strcharsplit(cmdtext,idx);
            if(!
    strlen(tmp)) return SendClientMessage(playerid,COLOR_WHITE," Ââåäèòå: /specdelveh [ðàäèóñ]");
            new 
    Float:pos floatstr(tmp),Float:car_x,Float:car_y,Float:car_z;
            
    //for(new ro=0;ro<MAX_VEHICLES;ro++)
            
    foreach (new ro:Vehicle)
            {
                if(
    GetVehicleModel(ro) > 399)
                {
                    
    GetVehiclePos(ro,car_x,car_y,car_z);
                    if(
    IsPlayerInRangeOfPoint(playerid,pos,car_x,car_y,car_z))
                    {
                        
    RemoveFromVehicle(playerid);
                        
    DestroyVehicle(ro);
                        
    TeleportTime[playerid] = 5;
                    }
                }
            }
            
    format(stringersizeof(stringer), "Àäìèíèñòðàòîð %s óäàëèë âåñü òðàíñïîðò ðÿäîì ñ íèì.",PlayerInfo[playerid][pNames]);
            
    ABroadCast(COLOR_LIGHTRED,stringer,1);
            return 
    1;
        } 

    А с оптимизированным перебором вот такой шлак лезет:
    PHP код:
    [debug]  Accessing element at index 2001 past array upper bound 2000 
    Это что нужно инклуд под себя штопать или как поступать?
    Добавил пару примечаний в первый пост, проверьте.
    Btw, нумерация транспорта начинается не с 0, а с 1, и заканчивается на MAX_VEHICLES, а не на MAX_VEHICLES-1.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  3. Пользователь сказал cпасибо:
    vovandolg (06.01.2016)
  4. #13
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Можно добавить подобную функцию для удаления транспорта внутри цикла.
    PHP код:
    stock DestroyVehicleSafe(&vehicleid)
    {
        
    Iter_SafeRemove(Vehiclevehicleidvehicleid);
        return 
    DestroyVehicle(vehicleid);

    Последний раз редактировалось ziggi; 21.08.2016 в 10:52.

  5. Пользователь сказал cпасибо:
    VVWVV (07.03.2016)
  6. #14
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    у меня почему-то не работает, подключил foreach, потом этот инклуд, создал 1 тс на сервере. попытался зареспавнить через форич, 0 эффекта
    P.S. y_iterate не подключен. Подключен только форич от Y_Less

    Сначала сам перехватил все функции связанные с тс и поработал с итераторами, мой код выглядело почти так же как ваш, но там тоже ничего не работало. Потом нашел ваш инклуд, но эффект тот же, может я что-то не так делаю?


    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    P.S. Исправил, перехватил все функции заново и добавил итераторы
    Последний раз редактировалось Geebrox; 05.10.2016 в 16:35.
    Респект:
    @DeimoS
    @ziggi
    @Daniel_Cortez

  7. #15
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Можно добавить подобную функцию для удаления транспорта внутри цикла.
    PHP код:
    stock DestroyVehicleSafe(&vehicleid)
    {
        
    Iter_SafeRemove(Vehiclevehicleidvehicleid);
        return 
    DestroyVehicle(vehicleid);

    можно и так:

    PHP код:
    stock DestroyVehicleEx(vehicleid)
    {
        new 
    ans DestroyVehicle(vehicleid);
        if(
    ans)
            
    Iter_Remove(Vehiclevehicleid);
        return 
    ans;

    Респект:
    @DeimoS
    @ziggi
    @Daniel_Cortez

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

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

    PHP код:
    stock DestroyVehicleEx(vehicleid)
    {
        new 
    ans DestroyVehicle(vehicleid);
        if(
    ans)
            
    Iter_Remove(Vehiclevehicleid);
        return 
    ans;

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

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

    Steve Pavlina

  9. #17
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Geebrox Посмотреть сообщение
    можно и так:

    PHP код:
    stock DestroyVehicleEx(vehicleid)
    {
        new 
    ans DestroyVehicle(vehicleid);
        if(
    ans)
            
    Iter_Remove(Vehiclevehicleid);
        return 
    ans;

    Не об этом функция. Попробуй удалить транспорт в этом цикле обычной функцией - получишь проблемы. Удалять итератор во время перебора нужно с помощью Iter_SafeRemove.

  10. Пользователь сказал cпасибо:
    Geebrox (05.10.2016)
  11. #18
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Не об этом функция. Попробуй удалить транспорт в этом цикле обычной функцией - получишь проблемы. Удалять итератор во время перебора нужно с помощью Iter_SafeRemove.
    понятно, тогда уж сразу надо в перехват это сунуть
    Респект:
    @DeimoS
    @ziggi
    @Daniel_Cortez

  12. #19
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Geebrox Посмотреть сообщение
    понятно, тогда уж сразу надо в перехват это сунуть
    Не очень правильно изменять параметры функции в перехвате. Но да, можно заменить стандартную DestroyVehicle при условии, что этот перехват будет первым. Тогда код будет выглядеть примерно так:
    PHP код:
    #if defined _ALS_DestroyVehicle
        #error Include dc_foreach_veh.inc higher
    #endif

    stock dc_veh_iter__DestroyVehicle(&vehicleid)
    {
        
    Iter_SafeRemove(Vehiclevehicleidvehicleid);
        return 
    DestroyVehicle(vehicleid);
    }
    #if    defined _ALS_DestroyVehicle
        #undef DestroyVehicle
    #else
        #define _ALS_DestroyVehicle
    #endif
    #define DestroyVehicle(%0) dc_veh_iter__DestroyVehicle(%0) 

  13. Пользователь сказал cпасибо:
    Blood (05.10.2016)
  14. #20
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    да у меня так и есть, этот перехват идет первым, но чуть чуть по другому
    Респект:
    @DeimoS
    @ziggi
    @Daniel_Cortez

 

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

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

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

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

Ваши права

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