Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 9 из 9
  1. #1
    Аватар для felix_font
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.07.2014
    Сообщений
    19
    Репутация:
    1 ±

    Некорректная смерть / Игрок не умирает

    Здравствуйте.
    Уже недели 2 я не могу разобрать данный баг и причину возникновения.

    Вообщем объясняю:
    Игрок умирает (или его убивают) он стоит мертвый и может ходить, также может стрелять, но урон не наносит.
    Другим игрокам видно что он лежит на земле (когда он стреляет видно что летят пули, но они не наносят урон)
    Если игрок во время этого бага пригнет с высоти или в него стрельнут еще раз, он нормально умрет и респавнится в нужном месте.

    Предоставляю вам спавн и деатх функцию:

    PHP код:
    public OnPlayerSpawn(playerid)
    {
        
    PlayerPlaySound(playerid,1063,0.0,0.0,0.0); 
        
    TextDrawShowForPlayer(playeridServerLogo[0]), TextDrawShowForPlayer(playeridServerLogo[1]), TextDrawShowForPlayer(playeridServerLogo[2]), TextDrawShowForPlayer(playeridServerLogo[3]); 
        if(!
    GetPVarInt(playerid"Logged"))
        {
            
    send(playerid"Прежде чем заспавниться, нужно быть авторизированым."); 
            return 
    1;
        }
        if(
    uInfo[playerid][pJustConnected])
        {
            
    uInfo[playerid][pJustConnected] = false;
            
    SendClientMessage(playeridCOLOR_WHITE"Для ознакомление с сервером введите команду /help");
        }

        
    SetTimerEx("UpdatePlayerInfo"300false"d"playerid);
        
    ChangeSpawnInfo(playerid, .post 1);
        
    SetPlayerHealth(playerid1000.0), SetTimerEx("SpawnShieldDisable"2000false"d"playerid);
        
        for(new 
    010i++) SetPlayerSkillLevel(playeridi1000);
        
        return 
    1;
    }

    public 
    OnPlayerDeath(playeridkilleridreason)
    {
        new 
    animlib[32], animname[32];
        
    GetAnimationName(uInfo[playerid][pLastAnim],animlib,32,animname,32); 
        if(
    strcmp(animlib"PED"true) != 0ClearAnimations(playerid);

        if(
    killerid == INVALID_PLAYER_IDSendDeathMessage(INVALID_PLAYER_ID,playerid,reason);
        else
        {
            
    // Killer
            
    SendDeathMessage(killerid,playerid,reason);
            
    pInfo[killerid][pKills] += 1;
            
    pInfo[killerid][pMoney] += 100;
            
    SetPlayerInfo(killerid);
            
            
    // Victim
            
    pInfo[playerid][pDeaths] += 1;
            
            if(
    TDM_Info[TDM_Started] == true)
            {
                switch(
    uInfo[playerid][pTeam])
                {
                case 
    1TDM_Info[TDM_Score_2] += 1;
                case 
    2TDM_Info[TDM_Score_1] += 1;
                }
                new 
    temp[48];
                
    format(temp48"~r~You killed by %s"uInfo[killerid][pName]);
                
    GameTextForPlayer(playeridtemp20005);
            }
            if(
    uInfo[killerid][pZoneType] == DeathMatchZone)
            {
                new 
    Float:health;
                
    GetPlayerHealth(killeridhealth);
                
                if(
    health 51SetPlayerHealth(killerid, (health+50.0));
                else 
    SetPlayerHealth(killerid100.0);
            }
            if(
    uInfo[killerid][pZoneType] == RaceDeathMatchZone)
            {
                
    RDM_PlayerKills[killerid] += 1;
                if(
    RDM_PlayerKills[killerid] > RDM_Info[RDM_LeaderKills])
                {
                    
    RDM_Info[RDM_LeaderIndex] = killerid;
                    
    RDM_Info[RDM_LeaderKills] = RDM_PlayerKills[killerid];
                }
            }
            
            if(
    pInfo[killerid][pKills] > TopStats[20][TS_Kills]) TopStats_Update(killerid);
        }
        
        
    ChangeSpawnInfo(playerid);
        return 
    1;


    Код HTML:
    new animlib[32], animname[32];
    GetAnimationName(uInfo[playerid][pLastAnim],animlib,32,animname,32); 
    if(strcmp(animlib, "PED", true) != 0) ClearAnimations(playerid);
    Этот код я нашел в интернете, он вроде должен был исправить данный баг. Но.... Он его не исправляет. Если убрать этот код, то баг остается.

    p.s. Раньше этот баг был потому как в Spawn Post не было *return 1;* потому был баг, сегодня он снова появился, хотя ретурн на месте.

    Буду очень благодарен если поможете исправить баг или подсказать в чем причина.
    Т.к. это единственный баг который я не могу пофиксить.

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

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Интересно. Обычно так бывает, когда игрок умирает в тот момент, когда он горит.

    Что за функция ChangeSpawnInfo?

  3. #3
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Цитата Сообщение от Londlem Посмотреть сообщение
    Интересно. Обычно так бывает, когда игрок умирает в тот момент, когда он горит.

    Что за функция ChangeSpawnInfo?
    Код HTML:
    SetSpawnInfo в OnPlayerDeath ведь можно использовать?
    [18:43:54] Салвакоръ: А что ща функция вообще?

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

    Статус
    Оффлайн
    Регистрация
    15.07.2014
    Сообщений
    19
    Репутация:
    1 ±
    PHP код:
    #define SetPlayerSpawnInfo(%0,%1,%2,%3,%4,%5,%6) SetSpawnInfo(%0, %1, %2, %3, %4, %5, %6, -1 ,-1, -1, -1, -1, -1)

    stock ChangeSpawnInfo(ipost 0)
    {
        if(
    post == 0) {
            new 
    rand;
            switch(
    uInfo[i][pZone])
            {
            case 
    VW_SpawnZone:
                {
                    
    rand random(sizeof(SpawnsZone_1));
                    
    SetPlayerSpawnInfo(i255uInfo[i][pSkin], SpawnsZone_1[rand][0], SpawnsZone_1[rand][1], SpawnsZone_1[rand][2], SpawnsZone_1[rand][3]);
                }
            }
        }
        else {
            switch(
    uInfo[i][pZone])
            {
            case 
    VW_SpawnZone:
                {
                    
    ResetPlayerWeapons(i);
                    
    SetPlayerTeam(i255);
                    
    SetPlayerVirtualWorld(i0);
                    
    SetPlayerInterior(i0);
                    
    SetPlayerHealthEx(i100);
                    
    SetPlayerArmour(i0);
                    
    SetPlayerWeather(i12);
                    
    SetPlayerTime(i160);
                }
            }
        }

    Функцию обрезал. Там были кейси для всех зон.
    Я думаю хватает спавн зоны, т.к. там тоже есть этот баг.

    Если еще что-то дать. Говорите.
    p.s. Могу дать только части кода, весь мод увы не дам)

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

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Попробуйте убрать эту функцию в конце паблика.

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

    Статус
    Оффлайн
    Регистрация
    15.07.2014
    Сообщений
    19
    Репутация:
    1 ±
    Ах да, постояв в афк минут 20, баг почему-то пропал.
    Магия вне хогвардса....
    Вот этот баг иногда есть а иногда нет.

    Щас попробую потестить без этого.
    Однако без этой функции не обойтись.
    Этот баг не всегда есть, потому чтобы узнать остался ли баг нужно не мало времени.
    Куда тогда эту функцию засунуть?

    Может в функцию "OnPlayerStateChange"
    С условием "if(newstate == PLAYER_STATE_WASTED)" (Игрок умер или находится в выборе класса);

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

    Статус
    Оффлайн
    Регистрация
    15.07.2014
    Сообщений
    19
    Репутация:
    1 ±
    Отключил все связанное со спавном и авторизацией.
    Баг остался.

    Завтра попробую до конца закоментировать остальной код мода.

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

    Статус
    Оффлайн
    Регистрация
    15.07.2014
    Сообщений
    19
    Репутация:
    1 ±
    Вроде бы нашел причину бага.
    Хотя причина не точная....
    Данная проблема возникала при включенном собейте (видимо он кривой).
    Хотя на сколько я помню когда тестил с другом, у него был тот же баг но без собейта.
    Т.к. никто не вкурсе данной проблемы - модеры закройте тему.
    Всем спасибо кто пытались помочь.

  9. #9
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Увы, закрыто.

 

 

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

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

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

Ваши права

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