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

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 13
  1. #1
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,360
    Репутация:
    113 ±

    Убийство командой

    Есть же /sethp и ей подобные, так вот что я хочу сделать.
    Надо так чтобы килл другого игрока командой засчитало ещё и кто убил, не просто переменные забить как делается,
    а прогнать каким то образом через калбэк OnPlayerDeath(playerid, killerid, reason);
    Если юзать выдачу HP и сразу калбэк то получается абракадабра вплоть до багов или киков от фейк киллов,
    если юзать чисто OnPlayerDeath то не че не происходит(оно и ежу понятно он вызывается при смерти, а не для смерти),
    это вообще реализуемо или я только зря теряю время?
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    А теперь ещё раз и по-русски
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,360
    Репутация:
    113 ±
    ааа...
    когда убиваешь стволом другого игрока срабатывает OnPlayerDeath
    когда сетаешь хп другой игрок помирает от INVALID_PLAYER_ID
    а мне надо сделать в команде(и в одном паблике потом ещё) имитацию убийства,
    что Вася убил Петю и на выбор чем он убил...
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    ааа...
    когда убиваешь стволом другого игрока срабатывает OnPlayerDeath
    когда сетаешь хп другой игрок помирает от INVALID_PLAYER_ID
    а мне надо сделать в команде(и в одном паблике потом ещё) имитацию убийства,
    что Вася убил Петю и на выбор чем он убил...
    Ну вот сама функция
    PHP код:
    stock FakeKill(killerkilleeweaponid)//killer - ID убийцы | killee - ID умершего игрока.
    {
        if(!
    IsPlayerConnected(killer))//Если убийца не подключён
        
    {
            
    SendDeathMessage(INVALID_PLAYER_IDkilleeWEAPON_DROWN);//Указываем про самоубийство
            
    return 0;
        } 
        if(!
    IsPlayerConnected(killee))//Если убитый не подключён
        
    {
            return -
    1;
        }
        else
        {
            
    SendDeathMessage(killerkilleeweaponid);
            
    //И тут остальные действия, связанные с убийством (выдача денег/работа с другими переменными)
        
    }
        return 
    1;

    Использование:
    PHP код:
    FakeKill(ID_убийцыID_убитогоID_оружия); 
    Пример использования:
    PHP код:
    CMD:fakekill(playerid,params[])
    {
        new 
    killer
            
    killee,
            
    weaponid;
        if(!
    sscanf(params"iii"killerkilleeweaponid)) 
            return 
    SendClientMessage(playerid0x0000FFFF"Использование: {FFFFFF}/kill <ID убийцы> <ID убиваемого игрока> <ID оружия>");
        if(
    FakeKill(killerkilleeweaponid) == -1) return  SendClientMessage(playerid0xFF0000FF"Ошибка: {FFFFFF}ID, который вы указали в качестве убийцы, не подключён");
        
    SendClientMessage(playerid0x0000FFFF"Использование: {FFFFFF}Вы совершили фейковое убийство");
        return 
    1;

    Функция возвращает:
    -1 - если убитый игрок не подключён (никаких действий не произойдёт)
    0 - если убийца не подключён (отправит в чат сообщение о суициде
    1 - если оба игрока подключены (отправит сообщение о убийстве
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,360
    Репутация:
    113 ±
    Мне надо чтобы при сетании на ноль калбэк OnPlayerDeath прогоняло весь, а не вывод мессэйджа о смерти)
    Так как в этом калбэке много инфы в посмертии, а такие мелочи я и сам могу сделать)
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

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

    Статус
    Оффлайн
    Регистрация
    08.12.2015
    Адрес
    San Fierro
    Сообщений
    204
    Репутация:
    38 ±
    Могу предположить что можно завести спец-переменную для таких случаев и записать админа-убийцу.

    Типа:

    PHP код:
    public OnPlayerDeath(...)
    {
        new 
    my_killerid;

        if(
    p_info[playerid][killedByAdmin] != -1)
            
    my_killerid p_info[playerid][killedByAdmin];
        else
            
    my_killerid killerid;

        .....


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

    Статус
    Оффлайн
    Регистрация
    06.11.2015
    Сообщений
    35
    Репутация:
    9 ±

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

    Статус
    Оффлайн
    Регистрация
    08.12.2015
    Адрес
    San Fierro
    Сообщений
    204
    Репутация:
    38 ±
    Тогда уж легче напрямую вызвать, но зачем два раза вызывать калбэк?

  9. #9
    Аватар для SliM
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.11.2015
    Сообщений
    35
    Репутация:
    9 ±
    Цитата Сообщение от TheMallard Посмотреть сообщение
    Тогда уж легче напрямую вызвать, но зачем два раза вызывать калбэк?
    Вызывая напрямую можно всю динамическую память забить, если быть кривожопомруком. А если ты не кривожопорук, то напрямую точно не будешь вызывать:) Мое предложение итак бред, понял это как только нажал на кномпку "отправить сообщение", после установки нуль-ХП игроку он умрет и колбэк OnPlayerDeath выполнится, после чего еще раз выполнится (CallLocalFunction) и оба раза с разными аргументами:) Нужен костыль с перехватами и подменой аргументов.

    Добавлено:

    Такая последовательность событий мне пришла в голову, состоит из 5-ти шагов.
    шаг 1:
    PHP код:
    new
        
    player_killerid [MAX_PLAYERS],
        
    player_reason [MAX_PLAYERS]

    шаг 2:
    PHP код:
    CMDkill()
    {
        
    PlayerFakeDeath (params [0], playeridparams [1]) // в params [0] ид убитого в [1] причина (оружие).

    шаг 3:
    PHP код:
    PlayerFakeDeath (playeridkilleridreason)
    {
        
    SetPlayerHealth (playerid0.0);
        
    player_killerid [playerid] = killerid;
        
    player_reason [playerid] = reason;

    шаг 4
    PHP код:
    public OnPlayerDeath (playeridkilleridreason)
    {
        if (
    player_killerid [playerid] != 0xFFFF)
            
    killerid player_killerid [playerid];
        if (
    player_reason [playerid] != 0xFF)
            
    reason player_reason [playerid];
            
        
    //ваш код

    шаг 5
    PHP код:
    public OnPlayerSpawn (playerid)
    {
        
    player_killerid [playerid] = 0xFFFF;
        
    player_reason [playerid] = 0xFF;

        
    //ваш код

    и лучше перестраховаться проверкой на INVALID_PLAYER_ID, дабы избежать выхода за пределы массивов player_killerid и player_reason
    Последний раз редактировалось SliM; 08.04.2016 в 10:56.

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,360
    Репутация:
    113 ±
    Цитата Сообщение от TheMallard Посмотреть сообщение
    Могу предположить что можно завести спец-переменную для таких случаев и записать админа-убийцу.

    Типа:

    PHP код:
    public OnPlayerDeath(...)
    {
        new 
    my_killerid;

        if(
    p_info[playerid][killedByAdmin] != -1)
            
    my_killerid p_info[playerid][killedByAdmin];
        else
            
    my_killerid killerid;

        .....

    Такое тоже умеем)
    Вот только в паблике этого калбэка свои проверки и переменные которые обязательны к воспроизведению при такой смерти)

    Цитата Сообщение от SliM Посмотреть сообщение
    Вызывая напрямую можно всю динамическую память забить, если быть кривожопомруком. А если ты не кривожопорук, то напрямую точно не будешь вызывать:)
    У меня вызов идёт из команды и в посмертии от сетания, рекурсии не будет, единственное что калбэк срабатывает два раза,
    Позже вечерком ещё тестану как замыслил, отпишусь...

    - - - Добавлено - - -

    Как бы так вам толком объяснить чтобы не писали лишний мусор,
    игрок умирает и идёт запись в аргументы OnPlayerDeath(playerid, killerid, reason);
    При сетании идут аргументы самоубийства или поцеловал землю вроде того и убийца 0xFFFF,
    а мне нужно чтобы в аргументы писануло кто и как убил, вот и вызываю второй раз этот калбэк!
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

 

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

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

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

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

Ваши права

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