Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!

OnPlayerDeath работа с кастомным скинов

Мар
33
27
Пользователь
Здравствуйте читатели и скриптеры. Мне нужна помощь по коду. Давайте объясню ситуацию: Если мы играем с компьютера на версии samp 0.3.7 r3, при смерти на сервере и с кастомным скином, и с самповским скинов появляемся в кастом инте госпиталя. А если мы играем с телефона, то если мы умираем с самповским скинов попадаем в больницу, а вот если в кастомном скине - появляемся на этом месте.
Версия сервера 0.3.7 R2, сервер на хостинге.
Пытался при смерти поставить любой самповский скинь, а после телепортации вернуть - не помогает. Сам public OnPlayerdeath работает, я проверял с помощью printf, но не телепортирует в больницу. Так же хочу подметить С ПК РАБОТАЕТ, С ТЕЛЕФОНА НЕТ!
Кто в этом шарит - помогите мне...
 
Мар
33
27
Пользователь
Код из моего мода OnPlayerDeath:

public OnPlayerDeath(playerid, killerid, reason)
{
#if defined debug_mode
printf("[DEBUG] [OnPlayerDeath] playerid:%d | killerid:%d | reason:%d", playerid, killerid, reason);
#endif

#if defined __anti_godmode
antigm_OnPlayerDeath(playerid, killerid, reason);
#endif

reset_player_weapon(playerid);

p_t_info[playerid][p_tp_immune_time] = 3;
p_t_info[playerid][p_gun_immune_time] = 8;
p_t_info[playerid][p_dialog] = -1;

StopAudioStreamForPlayer(playerid);

if(!GetPVarInt(playerid, "p_dead"))
{
if(IsPlayerToSquare(playerid, -891.3302, -2950.0190,2915.9917,560.3257)) SetPVarInt(playerid, "p_dead", 1);
else if(IsPlayerToSquare(playerid,-2929.6589,-2889.1660,-1326.9077,1493.1770)) SetPVarInt(playerid, "p_dead", 2);
else SetPVarInt(playerid, "p_dead", 3);
if(army_player(playerid)) SetPVarInt(playerid, "p_dead", 4);
if(gang_player(playerid) && IsPlayerToSquare(playerid,1843.9275,-2205.1902,2960.9487,-954.5435)) SetPVarInt(playerid, "p_dead", 5);


if(GetPVarInt(playerid, "exam_vehicle")!= 0)
{
is_leave_exam_vehicle {playerid} = 0;
SendClientMessage(playerid, col_gray, ""c_orange_red"* "c_grey"Вы допустили грубые ошибки, экзамен провален.");
GameTextForPlayer(playerid, "~r~FAILED", 5000, 6);
new vehicle_id = GetPVarInt(playerid, "exam_vehicle");
DeletePVar(playerid, "exam_vehicle");
DeletePVar(playerid, "driving_cp");
DisablePlayerRaceCheckpoint(playerid);

SetPVarInt(playerid, "p_dead", GetVehicleModel(vehicle_id));
DestroyVehicle(vehicle_id);
}
}
if(GetPVarInt(playerid, "filling_timer")!= 0)KillTimer(GetPVarInt(playerid, "filling_timer")), DeletePVar(playerid, "filling_timer");
if(GetPVarInt(playerid,"Stol")) ExitBone(playerid);

if(GetPVarInt(playerid, "p_h_bed") > 0)
{
h_bed_toggled[GetPVarInt(playerid, "p_h_bed")-1][GetPlayerVirtualWorld(playerid)-1] = false;
DeletePVar(playerid, "p_h_bed");
}
if((gang_player(playerid)|| mafia_player(playerid)) && IsPlayerToSquare(playerid, 80.8047, 1762.5040, 390.7005, 2093.4778))
{
PlayerInfo[playerid][crim_ammo] = 0;
PlayerInfo[playerid][crim_guns] = 0;
SendClientMessage(playerid, col_gray, "* Перед отправкой в больницу солдаты изъяли у Вас патроны и оружие.");
}

if(GetPVarInt(playerid,"p_masked"))DeletePVar(playerid, "p_masked");

if(PlayerInfo[playerid][timejob])
{
give_money(playerid, PlayerInfo[playerid][salary]);
PlayerInfo[playerid][salary] = 0;
if(PlayerInfo[playerid][timejob] == job_porter || PlayerInfo[playerid][timejob] == job_forklift)
{
give_money(playerid, PlayerInfo[playerid][salary]);
insert_money_log(playerid, INVALID_PLAYER_ID, PlayerInfo[playerid][salary], "зп в порту");

SendClientMessage(playerid, col_white, ""c_green"* "c_white"Вы покинули территорию порта и завершили рабочую смену.");
new __t_string[72];
format(__t_string, sizeof(__t_string), ""c_green"* "c_white"Заработано: "c_green"%d$", PlayerInfo[playerid][salary]);
SendClientMessage(playerid, col_white, __t_string);

new pljob = PlayerInfo[playerid][timejob];

PlayerInfo[playerid][timejob] = 0;
PlayerInfo[playerid][salary] = 0;

if(is_fraction_duty {playerid} == 1)SetPlayerSkin(playerid, PlayerInfo[playerid][org_skin]);
else SetPlayerSkin(playerid, PlayerInfo[playerid][skin]);

hide_payment(playerid);
DisablePlayerCheckpoint(playerid);


if(pljob == job_forklift)
{
if(forklift_ptd[playerid] != PlayerText:-1)
{
PlayerTextDrawDestroy(playerid, forklift_ptd[playerid]);
TextDrawHideForPlayer(playerid, forklift_td);

forklift_ptd[playerid] = PlayerText:-1;
forklift_time[playerid] = -600;
}
new _v_id = player_rentcar[playerid];
player_rentcar[playerid] = INVALID_VEHICLE_ID;

SetVehicleToRespawn(_v_id);
if(GetPVarInt(playerid, "fork_object"))
{
DestroyDynamicObject(GetPVarInt(playerid, "fork_object"));
DeletePVar(playerid, "fork_object");
}
}
else if(pljob == job_porter)
{
if(IsPlayerAttachedObjectSlotUsed(playerid, 1)) RemovePlayerAttachedObject(playerid, 1);
ClearAnimations(playerid);
DeletePVar(playerid, "have_factory_box");
}

}
PlayerInfo[playerid][timejob] = job_none;
if(IsPlayerAttachedObjectSlotUsed(playerid, 0)) RemovePlayerAttachedObject(playerid, 0);
if(IsPlayerAttachedObjectSlotUsed(playerid, 1)) RemovePlayerAttachedObject(playerid, 1);
if(IsPlayerAttachedObjectSlotUsed(playerid, 2)) RemovePlayerAttachedObject(playerid, 2);
if(IsPlayerAttachedObjectSlotUsed(playerid, 3)) RemovePlayerAttachedObject(playerid, 3);
if(IsPlayerAttachedObjectSlotUsed(playerid, 4)) RemovePlayerAttachedObject(playerid, 4);
DisablePlayerCheckpoint(playerid);

}
if(td_db[playerid][1] != PlayerText:-1)
{
for(new j = 0; j < 4; j ++)
{
PlayerTextDrawDestroy(playerid, td_db[playerid][j]);
td_db[playerid][j] = PlayerText:-1;
}
}
if(GetPVarInt(playerid, "PlayerCuffed")> 0)
{
DeletePVar(playerid, "PlayerCuffed");
SetPlayerSpecialAction(playerid, SPECIAL_ACTION_NONE);
RemovePlayerAttachedObject(playerid, 1);
}
if(GetPVarInt(playerid, "PlayerTied")> 0)
{
DeletePVar(playerid, "PlayerTied");
SetPlayerSpecialAction(playerid, SPECIAL_ACTION_NONE);
}

is_ether {playerid} = 0; // отключаем эфир

if(quest_photographer_id[playerid] != -1)
EndJobPhotographer(playerid);
if(p_t_info[playerid][phone_id] != INVALID_PLAYER_ID)
{
SetPlayerSpecialAction(playerid, SPECIAL_ACTION_STOPUSECELLPHONE);
SetPlayerSpecialAction(p_t_info[playerid][phone_id], SPECIAL_ACTION_STOPUSECELLPHONE);
RemovePlayerAttachedObject(playerid, 2);
RemovePlayerAttachedObject(p_t_info[playerid][phone_id], 2);

SendClientMessage(p_t_info[playerid][phone_id], 0x940000FF, "Связь оборвалась...");
me_action(p_t_info[playerid][phone_id], "положил(а) трубку", 5.0);

p_t_info[p_t_info[playerid][phone_id]][phone_id] = INVALID_PLAYER_ID;
p_t_info[p_t_info[playerid][phone_id]][phone_caller] = 0;

p_t_info[playerid][phone_id] = INVALID_PLAYER_ID;
p_t_info[playerid][phone_caller] = 0;
}
if(GetPVarInt(playerid, "p_sm_used")!= 0)
{
CancelSelectTextDraw(playerid);
PlayerTextDrawDestroy(playerid, sm_ptd[playerid]);
sm_ptd[playerid] = PlayerText:INVALID_TEXT_DRAW;
for(new i = 0; i < 4; i ++)
{
TextDrawHideForPlayer(playerid, sm_td);
}
sm_used[GetPVarInt(playerid, "p_sm_used")-1] = false;
DeletePVar(playerid, "p_sm_used");
DeletePVar(playerid, "sm_bet");
}

if(GetPVarInt(playerid, "p_skin_shop") == 1)
{
DeletePVar(playerid, "skin_select_number");
DeletePVar(playerid, "p_skin_shop");

TogglePlayerControllable(playerid, true);
SetCameraBehindPlayer(playerid);
set_world(playerid, 0);

for(new i = 0; i < 19; i ++)
{
TextDrawHideForPlayer(playerid, td_skinshop);
}
CancelSelectTextDraw(playerid);
PlayerTextDrawDestroy(playerid, td_skinshop_price[playerid]);
td_skinshop_price[playerid] = PlayerText:-1;
SetPlayerSkin(playerid, PlayerInfo[playerid][skin]);
}

if(duel_opponent[playerid] != INVALID_PLAYER_ID)
{
new _text_string[144];
format(_text_string, sizeof(_text_string), ""c_green"* "c_white"Вы одержали победу над "c_green"%s"c_white" и выиграли ставку в размере "c_green"%d$", PlayerInfo[playerid][name], duel_price[playerid]);
SendClientMessage(duel_opponent[playerid], col_white, _text_string);

set_health(playerid, 100);
set_health(duel_opponent[playerid], 100);

give_money(duel_opponent[playerid], duel_price[playerid]*2);
insert_money_log(playerid, duel_opponent[playerid], duel_price[playerid], "дуэль");

SendClientMessage(playerid, col_white, ""c_green"* "c_white"Вы проиграли дуэль.");

if(PlayerInfo[duel_opponent[playerid]][jailed] > 0)
{
if(4 > PlayerInfo[duel_opponent[playerid]][jail] > 0)
{
new random_jail_pos = random(2);
set_pos(duel_opponent[playerid], jail_spawn[random_jail_pos][0],
jail_spawn[random_jail_pos][1],
jail_spawn[random_jail_pos][2],
jail_spawn[random_jail_pos][3],
1, PlayerInfo[duel_opponent[playerid]][jail]);
if(is_fraction_duty {duel_opponent[playerid]} == 1)SetPlayerSkin(duel_opponent[playerid], PlayerInfo[duel_opponent[playerid]][org_skin]), SetPlayerColor(duel_opponent[playerid], f_info[PlayerInfo[duel_opponent[playerid]][member] -1][f_radar_color]);
else SetPlayerSkin(duel_opponent[playerid], PlayerInfo[duel_opponent[playerid]][skin]);
}
else if(PlayerInfo[duel_opponent[playerid]][jail] == 10)
{
set_pos(duel_opponent[playerid], 217.9972, 3082.9668, 658.7508, 268.2277, 2, 15);

if(is_fraction_duty {duel_opponent[playerid]} == 1)SetPlayerSkin(duel_opponent[playerid], PlayerInfo[duel_opponent[playerid]][org_skin]), SetPlayerColor(duel_opponent[playerid], f_info[PlayerInfo[duel_opponent[playerid]][member] -1][f_radar_color]);
else SetPlayerSkin(duel_opponent[playerid], PlayerInfo[duel_opponent[playerid]][skin]);
}
}
else set_pos(duel_opponent[playerid], 2057.3447,-1898.6816,13.5538, 354.7014, 0, 0);
SetPVarInt(duel_opponent[playerid], "tp_area_used", 1);


reset_player_weapon(duel_opponent[playerid]);
for(new i = 0; i < 12; i ++)
{
give_weapon(duel_opponent[playerid], duel_guns[duel_opponent[playerid]][0], duel_guns[duel_opponent[playerid]][1]);
}
duel_price[playerid] = 0;
duel_price[duel_opponent[playerid]] = 0;
duel_opponent[duel_opponent[playerid]] = INVALID_PLAYER_ID;
duel_opponent[playerid] = INVALID_PLAYER_ID;

SetPVarInt(playerid, "p_dead", 322);
}
if(GetPVarInt(playerid, "fork_object"))
{
DestroyDynamicObject(GetPVarInt(playerid, "fork_object"));
DeletePVar(playerid, "fork_object");
}
SendClientMessage(playerid, 0xFF0000FF, "!!! OnPlayerDeath Смерть !!!");
return 1;
}




Код тп в госпиталь (комментарии были сделаны временно. Так как с ними/без них ситуация одна и та же)

new Float:hospital_spawn[2][4]=
{
{1479.0599, 1755.7018, 1746.6821, 191.7619},
{1468.4417, 1758.0919, 1746.6821, 93.0609}
};


public OnPlayerDeath
//new customskindeath = GetPlayerSkin(playerid);
SetPlayerSkin(playerid, 1);

new random_h_pos = random(2);
set_pos(playerid, hospital_spawn[random_h_pos][0],
hospital_spawn[random_h_pos][1],
hospital_spawn[random_h_pos][2],
hospital_spawn[random_h_pos][3],
0, PlayerInfo[playerid][hospital]);
if(random_h_pos == 0)
{
SetActorVirtualWorld(playerid, 1);
SetPlayerInterior(playerid, 1);
}
else if(random_h_pos == 1)
{
SetActorVirtualWorld(playerid, 2);
SetPlayerInterior(playerid, 1);
}

//SetPlayerSkin(playerid, customskindeath);
set_health(playerid, 15.0);

if(is_fraction_duty {playerid} == 1)SetPlayerSkin(playerid, PlayerInfo[playerid][org_skin]), SetPlayerColor(playerid, f_info[PlayerInfo[playerid][member] -1][f_radar_color]);
else SetPlayerSkin(playerid, PlayerInfo[playerid][skin]);

SendClientMessage(playerid, col_gray, ""c_orange_red"* "c_grey"Вам придется пройти курс лечения или вылечиться у медика. Займите койку в палате для более эффективного лечения.");
return 1;
}
 
Фев
7
0
Пользователь
Попробуй сделать телепорт через переменную в OnPlayerSpawn. Скорее всего, после смерти на Android происходит пересинхронизация клиента, и позиция перезаписывается, поэтому телепорт из OnPlayerDeath не срабатывает.
 
Мар
33
27
Пользователь
OFFTOP

к слову, у тебя вирт мир ставится на актора, а не игрока



SetPlayerVirtualWorld:
// у тебя
SetActorVirtualWorld(playerid, 1);

// для игроков
SetPlayerVirtualWorld(playerid, 1);
я основу брал, так уже было)
 
Сверху