12.07.2018, 18:33
Как можно сделать выбор скина при помощи AddPlayerClassEx и OnPlayerRequestClass?
Я попопробовал сделать так:
Выбор пола через диалог (mdialog).
Оба этих вариантов нерабочие.
Первая заметка:
Обнуление classid или установка какого-то значения ниначто не влияют. Можно поставить classid = 0; и выбор скинов так-же будет работать.
Вторая заметка:
Показывает разные значения в зависимости от "пола" скинов которых я указал.
Между классами 200 и 230 = GetPlayerTeam(playerid) равен нулю.
Между классами 39 и 77 = GetPlayerTeam(playerid) равен 1. Хотя я ничего не меняю...
Я не знаю как это фиксить и возможно это главная причина почему у меня система работает ошибочно.
P.S: Надеюсь я всё доступно объяснил.
Я попопробовал сделать так:
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;
}
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: Надеюсь я всё доступно объяснил.