[STOCK] checkPlayerSpawn

В този раздел можете да намерите полезни кодове и уроци свързани с PAWN скриптинга.
Аватар
Frozen Ninja
Извън линия
Потребител
Потребител
Мнения: 24
Регистриран на: 25 Фев 2017, 01:33

[STOCK] checkPlayerSpawn

Мнение от Frozen Ninja » 25 Фев 2017, 18:53

Този код прави проверка дали играчът е в CT или T spawn.

Код за потвърждение: Избери целия код

stock checkPlayerSpawn(index)
{
	new Float:vOrigin[3], iClassname[32], iEnt
	 
    entity_get_vector(index, EV_VEC_origin, vOrigin)
	
    while( (iEnt = find_ent_in_sphere(index, vOrigin, 128.0) ) != 0)
    {
        entity_get_string(iEnt, EV_SZ_classname, iClassname,31)
        
        if(equal(iClassname, "info_player_start"))
        {
            return 0
        }
		
        else if(equal(iClassname, "info_player_deathmatch"))
        {
            return 1
        }
    }
}
Начин на използване:

Код за потвърждение: Избери целия код

public func(id)
{
	if(checkPlayerSpawn(id) == 0)
	{
		//Играчът е в CT  Spawn
	}
	else if(checkPlayerSpawn(id) == 1)
	{
		//Играчът е в TT Spawn
	}
}

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Re: [STOCK] checkPlayerSpawn

Мнение от OciXCrom » 25 Фев 2017, 20:13

Леко неправилно е направен, тъй като ако играчът не се намира в нито един spawn, то пак ще върне 0, а и ще изкара грешка, тъй като не е сложен return в края на функцията. Също така, по-логично ще е да връща 2 за CT и 1 за Т, понеже тези числа се ползват с get_user_team:

Код за потвърждение: Избери целия код

stock checkPlayerSpawn(id, Float:fRadius = 128.0)
{
    new Float:vOrigin[3], szClassname[32], iEnt
    entity_get_vector(id, EV_VEC_origin, vOrigin)
   
    while((iEnt = find_ent_in_sphere(iEnt, vOrigin, fRadius)) != 0)
    {
        entity_get_string(iEnt, EV_SZ_classname, szClassname, charsmax(szClassname))
       
        if(equal(szClassname, "info_player_start"))
            return 2
      
        else if(equal(szClassname, "info_player_deathmatch"))
            return 1
    }
    
    return 0
} 

Код за потвърждение: Избери целия код

public func(id)
{
    if(checkPlayerSpawn(id) == 1)
    {
        // Играчът е в TT spawn
    }
    else if(checkPlayerSpawn(id) == 2)
    {
        // Играчът е в CT spawn
    }
}
//Едит: току що тествах кода и сървърът забива при използване на функцията. Проблемът беше в този ред:
while((iEnt = find_ent_in_sphere(id, vOrigin, fRadius)) != 0)
id трябва да е iEnt.

Аватар
Frozen Ninja
Извън линия
Потребител
Потребител
Мнения: 24
Регистриран на: 25 Фев 2017, 01:33

Re: [STOCK] checkPlayerSpawn

Мнение от Frozen Ninja » 25 Фев 2017, 22:24

Благодаря за редакцията.Ще се опитам да намеря по скопосан начин, за да не забива.

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Re: [STOCK] checkPlayerSpawn

Мнение от OciXCrom » 25 Фев 2017, 22:27

Тъкмо си редактирах мнението. Намерих проблема и поправих кода.

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Полезни кодове/уроци”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 11 госта