Выбор скина при помощи AddPlayerClassEx и OnPlayerRequestClass.
#1

Как можно сделать выбор скина при помощи AddPlayerClassEx и OnPlayerRequestClass?

Я попопробовал сделать так:
PHP Code:
public OnGameModeInit(){
    
// Selection
        //male
    
AddPlayerClassEx(02300,0,0,00,0,0,0,0,0);
    
AddPlayerClassEx(02120,0,0,00,0,0,0,0,0);
    
AddPlayerClassEx(02000,0,0,00,0,0,0,0,0);
        
//female
    
AddPlayerClassEx(1390,0,0,00,0,0,0,0,0);
    
AddPlayerClassEx(1540,0,0,00,0,0,0,0,0);
    
AddPlayerClassEx(1770,0,0,00,0,0,0,0,0);
        return 
true;

Выбор пола через диалог (mdialog).
PHP Code:
DialogCreate:d_user_select_gender(playerid){
    
Dialog_Open(playeridDialog:d_user_select_genderDIALOG_STYLE_MSGBOX"Выберите пол персонажа"," ","Мужской","Женский");
}
DialogResponse:d_user_select_gender(playeridresponselistiteminputtext[])
{
    if(!
response) return SetPlayerTeam(playerid1), TogglePlayerSpectating(playerid0); //female
    
SetPlayerTeam(playerid0); //male
    
TogglePlayerSpectating(playerid0);
    
//orm_insert(P[playerid][_p_ormid], "OnMySQL_InsertAccount", "d", playerid);
    
return true;

PHP Code:
public OnPlayerRequestClass(playeridclassid)
{
        
printf("Team: %d",GetPlayerTeam(playerid));
    if(
P[playerid][_p_in_game] == true) {
            
// код который не имеет значение в данном случае.
    
}
    else{
                
// Выбор персонажа
        
SetPlayerInterior(playerid0);
        
SetPlayerPos(playerid,1984.4445,157.9501,55.9384);
        
SetPlayerFacingAngle(playerid,0.0);
        
InterpolateCameraPos(playerid1984.4445,160.9501,55.93841984.4445,160.9501,55.93841000);
        
InterpolateCameraLookAt(playerid1984.4445,157.9501,55.93841984.4445,157.9501,55.93841000);
                
// первый вариант
        
if(GetPlayerTeam(playerid) == 0){
            
printf("asdas12312");
            if(
GetPlayerSkin(playerid) == 39) return SetPlayerSkin(playerid230), SetPlayerTeam(playerid0);
            else if(
GetPlayerSkin(playerid) == 54) return SetPlayerSkin(playerid212), SetPlayerTeam(playerid0);
            else if(
GetPlayerSkin(playerid) == 77) return SetPlayerSkin(playerid200), SetPlayerTeam(playerid0);
        }
        else if(
GetPlayerTeam(playerid) == 1){
            
printf("asdas");
            if(
GetPlayerSkin(playerid) == 230) return SetPlayerSkin(playerid39), SetPlayerTeam(playerid0);
            else if(
GetPlayerSkin(playerid) == 212) return SetPlayerSkin(playerid54), SetPlayerTeam(playerid0);
            else if(
GetPlayerSkin(playerid) == 200) return SetPlayerSkin(playerid77), SetPlayerTeam(playerid0);
        }
                
// второй вариант | с использованием switch
                
if(GetPlayerTeam(playerid) == 0){
            switch(
classid){
                case 
0SetPlayerSkin(playerid230);
                case 
1SetPlayerSkin(playerid212);
                case 
2SetPlayerSkin(playerid200);
                default: 
SetPlayerSkin(playerid230);
            }
            return 
true;
        }
        else if(
GetPlayerTeam(playerid) == 1){
            switch(
classid){
                case 
0SetPlayerSkin(playerid39);
                case 
1SetPlayerSkin(playerid54);
                case 
2SetPlayerSkin(playerid77);
                default: 
SetPlayerSkin(playerid39);
            }
            return 
true;
        }
        }
        
printf("%i"classid);
        return 
true;

Оба этих вариантов нерабочие.
Первая заметка:
Обнуление classid или установка какого-то значения ниначто не влияют. Можно поставить classid = 0; и выбор скинов так-же будет работать.

Вторая заметка:
PHP Code:
printf("Team: %d",GetPlayerTeam(playerid)); 
Показывает разные значения в зависимости от "пола" скинов которых я указал.

Между классами 200 и 230 = GetPlayerTeam(playerid) равен нулю.
Между классами 39 и 77 = GetPlayerTeam(playerid) равен 1. Хотя я ничего не меняю...
Я не знаю как это фиксить и возможно это главная причина почему у меня система работает ошибочно.

P.S: Надеюсь я всё доступно объяснил.
Reply
#2

Нашел оптимальный вариант.
PHP Code:
// OnGameModeInit
        // Selection
        //male
    
AddPlayerClass(2300,0,0,00,0,0,0,0,0);
    
AddPlayerClass(2120,0,0,00,0,0,0,0,0);
    
AddPlayerClass(2000,0,0,00,0,0,0,0,0);
        
//female
    
AddPlayerClass(390,0,0,00,0,0,0,0,0);
    
AddPlayerClass(540,0,0,00,0,0,0,0,0);
    
AddPlayerClass(770,0,0,00,0,0,0,0,0); 
PHP Code:
// Диалог
if(!response) return SetPVarInt(playerid"Gender"2), TogglePlayerSpectating(playerid0); //female
    
SetPVarInt(playerid"Gender"1); // male
    
TogglePlayerSpectating(playerid0); 
PHP Code:
// OnPlayerRequestClass
if(GetPVarInt(playerid"Gender") == 1){
            switch(
classid){
                case 
0SetPlayerSkin(playerid230);
                case 
1SetPlayerSkin(playerid212);
                case 
2SetPlayerSkin(playerid200);
                case 
3SetPlayerSkin(playerid230);
                case 
4SetPlayerSkin(playerid212);
                case 
5SetPlayerSkin(playerid200);
            }
        } else if(
GetPVarInt(playerid"Gender") == 2){
            switch(
classid){
                case 
0SetPlayerSkin(playerid39);
                case 
1SetPlayerSkin(playerid54);
                case 
2SetPlayerSkin(playerid77);
                case 
3SetPlayerSkin(playerid39);
                case 
4SetPlayerSkin(playerid54);
                case 
5SetPlayerSkin(playerid77);
            }
        } 
Reply
#3

Загугли "ds__skin_selector". Я в этой библиотеке делал нечто подобное, только в более удобном виде
Reply
#4

Quote:
Originally Posted by Eims
View Post
Загугли "ds__skin_selector". Я в этой библиотеке делал нечто подобное, только в более удобном виде
Спасибо, обязательно посмотрю.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)