Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6

Тема: Массивы

  1. #1
    Аватар для tonline_kms65
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.09.2016
    Адрес
    Комсомольск на Амуре
    Сообщений
    8
    Репутация:
    0 ±

    Массивы

    Всем здравствуйте.
    У меня вопрос. Понимаю что не в тему. Но язык в принципе такой же.

    Я пишу плагин "Drone". Плагин для Counter-Strike:Source.



    Суть плагина - любой игрок, из любой команды может создавать Дронов, и так же может брать созданных кем-то Дронов (которые валяются безхозные). Можно удаленно вызвать Дрона, если он не занят кем -то.

    Теперь к сути проблемы:
    Задаю переменные таким образом:
     Код

    PHP код:
    #define MAX_ENT 128
    enum eDrone
    {
        
    bool:DroneUsed=false//0 (Этот элемент и так 0. ложь я ему задаю на всякий случай)
        
    DroneID// 1
        
    DroneCamID// 2
        
    DroneGlowSpriteID// 3
    };

    new 
    FreeDron[MAX_ENT+1][eDrone]; // свободный Дрон
    new ClientDron[MAXPLAYERS+1][eDrone]; // это Дрон занятый
    new count// общее кол-во Дронов на сервере 


    Проблема возникает после разрушения какого нибудь из Дронов.
    При count = 3;
    После разрушения 1 Дрона не видно 3 Дрон. Второй Дрон видно.
    После разрушения 2 Дрона не видно 3 Дрон. Первый Дрон видно.
    После разрушения 3 Дрона Первый и Второй Дроны видно.

    Тоже самое и при count = 5 и т.д.
    Во всех случаях, после разрушения, последний Дрон не виден(недоступен). Ну и естественно при разрушении последнего Дрона все оставшиеся Дроны отлично видно.
    Т.е. получается что сам массив как бы сдвигается что ли, до нулевого (после последнего). Или наоборот, не сдвигается.
    (Не виден это не визуально, не видно в плане его доступности.)
    Дрон просто не определяется по его ID.
    И соответственно попытка вызвать или взять Дрона не получается. В общем проблема такого плана. Может быть здесь кто нибудь с таким сталкивался.

    Еще раз прошу прощения за то что мой плагин не для SA:MP. Повторюсь - язык точно такой же.
    Последний раз редактировалось DeimoS; 20.09.2016 в 13:16.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Во-первых, вопрос всё же не по SA-MP, поэтому перенёс тему в более подходящий раздел.
    Во-вторых, нужно смотреть код разрушения, а не объявление массивов
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    20.09.2016
    Адрес
    Комсомольск на Амуре
    Сообщений
    8
    Репутация:
    0 ±
    HookSingleEntityOutput(ent_dron, "OnHealthChanged", Drone_Hurt, false); // Функция при изменении HP Дрона
    HookSingleEntityOutput(ent_dron, "OnBreak", Drone_Break, false);
    // Функция при разрушении Дрона


     Drone_Break


    public Drone_Break(const String:output[], caller, activator, Float:delay){
    if(!IsValidEntity(caller)) return;
    AcceptEntityInput(caller, "KillHierarchy");
    AcceptEntityInput(caller, "Kill");
    --count;

    }



     Drone_Hurt


    public Drone_Hurt(const String:output[], caller, activator, Float:delay){
    if(!IsValidEntity(caller)) return;

    int healch = GetEntProp(caller, Prop_Data, "m_iHealth");
    int killer = GetEntPropEnt(caller, Prop_Data, "m_hLastAttacker");
    int client = GetEntPropEnt(caller, Prop_Send, "m_PredictableID");
    int ID_anim = GetIndexAnimID(caller);

    if(client > 0 && client <= MaxClients){
    if(IsClientInGame(client)){

    if (healch <= 50){ // При HP меньше или = 50 поджигаем и меняем скин модели на горелый
    IgniteEntity(caller, 2.0 );
    if (ID_anim !=0){
    DispatchKeyValue(ID_anim, "skin", "2"); // устанавливаем модели горелый вид
    }
    }

    if (healch <= 0){
    if (camera[client] == true){
    SetEntProp ( client, Prop_Send, "m_iObserverMode" , 0 ); // норм вид
    SetEntProp ( client, Prop_Send, "m_iFOV" , 90 );
    SetClientViewEntity(client, client);
    SetEntityRenderMode(client, RENDER_TRANSCOLOR);
    SetEntityRenderColor(client, 255, 255, 255, 255);
    SetEntityMoveType(client, MOVETYPE_ISOMETRIC); // MOVETYPE_WALK
    SetClientOverlay(client, "");
    camera[client] = false;
    }


    if (TimerSpeedDrone[client] != INVALID_HANDLE){ // таймер убиваем
    KillTimer(TimerSpeedDrone[client], false);
    TimerSpeedDrone[client] = INVALID_HANDLE;
    }
    StopSound(caller, SNDCHAN_AUTO, DRON_FLY1_SOUND);

    if (killer != -1){ // если Дрон разрушен как то по другому.
    if (killer != client){
    PrintCenterText(killer, "Ты сбил Дрона %N! %i", client, client);
    PrintToChat (killer, "Ты сбил Дрона %N! %i", client, client);
    PrintCenterText(client, "Твоего Дрона сбил %N!", killer);
    PrintToChat (client, "Твоего Дрона сбил %N!", killer);

    } else if (killer == client){
    PrintCenterText(client, "Ты уничтожил своего Дрона!");
    PrintToChat(client, "Ты уничтожил своего Дрона!");
    }
    } else {
    PrintCenterText(client, "Твой Дрон разрушен!");
    PrintToChat (client, "Твой Дрон разрушен!");
    }

    EmitSoundToAll(
    DRONE_DEBRIS_SOUND,
    caller,
    SNDCHAN_AUTO,
    SNDLEVEL_NORMAL,
    SND_NOFLAGS,
    SNDVOL_NORMAL,
    125,
    -1,
    NULL_VECTOR,
    NULL_VECTOR,
    true,
    0.0);


    }
    }
    }
    }


    Мне предлагают сделать массивы динамическими. Но я сомневаюсь что это поможет.
    Спасибо за ответ.
    Последний раз редактировалось tonline_kms65; 20.09.2016 в 14:21.

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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Покажи где и как ты работаешь с теми массивами из 1 поста. Также нужен код вызова, взятия дронов, не помешает код создания. В общем, нужен весь код, связанный с дронами.

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

    Статус
    Оффлайн
    Регистрация
    20.09.2016
    Адрес
    Комсомольск на Амуре
    Сообщений
    8
    Репутация:
    0 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Покажи где и как ты работаешь с теми массивами из 1 поста. Также нужен код вызова, взятия дронов, не помешает код создания. В общем, нужен весь код, связанный с дронами.
    Работа с ними везде. Начиная от создания ENT до момента его разрушения.

    Создаю ENT, называю Дрон.
    В массив FreeDron записываю данные из этой ENT.
    FreeDron[][] это массив для свободной(не занятой клиентом) ENT (Дрона).

    ClientDron[][] этот массив для ENT занятой клиентом. В этот массив записываю данные из созданной ENT Дрона при активации клиентом (проще - если клиент начал использовать Дрона)

    Весь код к сожалению показать не могу. Его отсюда утащат, переделают, и будут продавать как свой. Обычная история. Желающих, как не странно, много.
    Уже декомпилить тестовый плагин пытались.

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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от tonline_kms65 Посмотреть сообщение
    Работа с ними везде. Начиная от создания ENT до момента его разрушения.

    Создаю ENT, называю Дрон.
    В массив FreeDron записываю данные из этой ENT.
    FreeDron[][] это массив для свободной(не занятой клиентом) ENT (Дрона).

    ClientDron[][] этот массив для ENT занятой клиентом. В этот массив записываю данные из созданной ENT Дрона при активации клиентом (проще - если клиент начал использовать Дрона)

    Весь код к сожалению показать не могу. Его отсюда утащат, переделают, и будут продавать как свой. Обычная история. Желающих, как не странно, много.
    Уже декомпилить тестовый плагин пытались.
    Где-то есть ошибка, а чтобы решить проблему тебе нужно её исправить. Это всё, чем тебе можно помочь с тем количеством информации, которое ты предоставил.

 

 

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

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

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

Ваши права

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