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

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

Я попопробовал сделать так:
PHP Code:
public OnGameModeInit(){
    
// Selection
        //male
    
AddPlayerClassEx(0, 230, 0,0,0,0, 0,0,0,0,0,0);
    
AddPlayerClassEx(0, 212, 0,0,0,0, 0,0,0,0,0,0);
    
AddPlayerClassEx(0, 200, 0,0,0,0, 0,0,0,0,0,0);
        
//female
    
AddPlayerClassEx(1, 39, 0,0,0,0, 0,0,0,0,0,0);
    
AddPlayerClassEx(1, 54, 0,0,0,0, 0,0,0,0,0,0);
    
AddPlayerClassEx(1, 77, 0,0,0,0, 0,0,0,0,0,0);
        return 
true;
} 
Выбор пола через диалог (mdialog).
PHP Code:
DialogCreate:d_user_select_gender(playerid){
    
Dialog_Open(playerid, Dialog:d_user_select_gender, DIALOG_STYLE_MSGBOX, "Выберите пол персонажа"," ","Мужской","Женский");
}
DialogResponse:d_user_select_gender(playerid, response, listitem, inputtext[])
{
    if(!
response) return SetPlayerTeam(playerid, 1), TogglePlayerSpectating(playerid, 0); //female
    
SetPlayerTeam(playerid, 0); //male
    
TogglePlayerSpectating(playerid, 0);
    
//orm_insert(P[playerid][_p_ormid], "OnMySQL_InsertAccount", "d", playerid);
    
return true;
} 
PHP Code:
public OnPlayerRequestClass(playerid, classid)
{
        
printf("Team: %d",GetPlayerTeam(playerid));
    if(
P[playerid][_p_in_game] == true) {
            
// код который не имеет значение в данном случае.
    
}
    else{
                
// Выбор персонажа
        
SetPlayerInterior(playerid, 0);
        
SetPlayerPos(playerid,1984.4445,157.9501,55.9384);
        
SetPlayerFacingAngle(playerid,0.0);
        
InterpolateCameraPos(playerid, 1984.4445,160.9501,55.9384, 1984.4445,160.9501,55.9384, 1000);
        
InterpolateCameraLookAt(playerid, 1984.4445,157.9501,55.9384, 1984.4445,157.9501,55.9384, 1000);
                
// первый вариант
        
if(GetPlayerTeam(playerid) == 0){
            
printf("asdas12312");
            if(
GetPlayerSkin(playerid) == 39) return SetPlayerSkin(playerid, 230), SetPlayerTeam(playerid, 0);
            else if(
GetPlayerSkin(playerid) == 54) return SetPlayerSkin(playerid, 212), SetPlayerTeam(playerid, 0);
            else if(
GetPlayerSkin(playerid) == 77) return SetPlayerSkin(playerid, 200), SetPlayerTeam(playerid, 0);
        }
        else if(
GetPlayerTeam(playerid) == 1){
            
printf("asdas");
            if(
GetPlayerSkin(playerid) == 230) return SetPlayerSkin(playerid, 39), SetPlayerTeam(playerid, 0);
            else if(
GetPlayerSkin(playerid) == 212) return SetPlayerSkin(playerid, 54), SetPlayerTeam(playerid, 0);
            else if(
GetPlayerSkin(playerid) == 200) return SetPlayerSkin(playerid, 77), SetPlayerTeam(playerid, 0);
        }
                
// второй вариант | с использованием switch
                
if(GetPlayerTeam(playerid) == 0){
            switch(
classid){
                case 
0: SetPlayerSkin(playerid, 230);
                case 
1: SetPlayerSkin(playerid, 212);
                case 
2: SetPlayerSkin(playerid, 200);
                default: 
SetPlayerSkin(playerid, 230);
            }
            return 
true;
        }
        else if(
GetPlayerTeam(playerid) == 1){
            switch(
classid){
                case 
0: SetPlayerSkin(playerid, 39);
                case 
1: SetPlayerSkin(playerid, 54);
                case 
2: SetPlayerSkin(playerid, 77);
                default: 
SetPlayerSkin(playerid, 39);
            }
            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(230, 0,0,0,0, 0,0,0,0,0,0);
    
AddPlayerClass(212, 0,0,0,0, 0,0,0,0,0,0);
    
AddPlayerClass(200, 0,0,0,0, 0,0,0,0,0,0);
        
//female
    
AddPlayerClass(39, 0,0,0,0, 0,0,0,0,0,0);
    
AddPlayerClass(54, 0,0,0,0, 0,0,0,0,0,0);
    
AddPlayerClass(77, 0,0,0,0, 0,0,0,0,0,0); 
PHP Code:
// Диалог
if(!response) return SetPVarInt(playerid, "Gender", 2), TogglePlayerSpectating(playerid, 0); //female
    
SetPVarInt(playerid, "Gender", 1); // male
    
TogglePlayerSpectating(playerid, 0); 
PHP Code:
// OnPlayerRequestClass
if(GetPVarInt(playerid, "Gender") == 1){
            switch(
classid){
                case 
0: SetPlayerSkin(playerid, 230);
                case 
1: SetPlayerSkin(playerid, 212);
                case 
2: SetPlayerSkin(playerid, 200);
                case 
3: SetPlayerSkin(playerid, 230);
                case 
4: SetPlayerSkin(playerid, 212);
                case 
5: SetPlayerSkin(playerid, 200);
            }
        } else if(
GetPVarInt(playerid, "Gender") == 2){
            switch(
classid){
                case 
0: SetPlayerSkin(playerid, 39);
                case 
1: SetPlayerSkin(playerid, 54);
                case 
2: SetPlayerSkin(playerid, 77);
                case 
3: SetPlayerSkin(playerid, 39);
                case 
4: SetPlayerSkin(playerid, 54);
                case 
5: SetPlayerSkin(playerid, 77);
            }
        } 
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)