Весь OnPlayerDeath в студию
Вид для печати
Весь OnPlayerDeath в студию
А это OnplayerDisconnect где тоже не убовляется если игрок вышел.PHP код:
public OnPlayerDeath(playerid,killerid,reason)
{
new playername[40],killername[40];
GetPlayerName(playerid,playername,sizeof(playername));
GetPlayerName(killerid,killername,sizeof(killername));
if(Player[killerid][pMember] == 1 || Player[killerid][pMember] == 2)
{
if(GetPlayerWantedLevel(playerid) > 0)
{
new string[124];
ServerResetPlayerWeapons(playerid);
Player[playerid][pJailed] = true;
Player[playerid][pJailTime] = GetPlayerWantedLevel(playerid)* 10 * 60;
Player[playerid][pJailBlock] = false;
GivePlayerKapusta(playerid,-GetPlayerWantedLevel(playerid)*300);
GivePlayerKapusta(killerid,GetPlayerWantedLevel(playerid)*300);
f(string,"Ты %s игрока %s[%d] в тюрьму и %s $%d.",GetPVarInt(killerid,"Sex") == 1 ? ("посадил") : ("посадила"),sendername(playerid),playerid,GetPVarInt(killerid,"Sex") == 1 ? ("получил") : ("получила"),GetPlayerWantedLevel(playerid)*300);
send(killerid,0xFFFF00AA,string);
f(string,"Тебя %s в тюрьму %s[%d].",GetPVarInt(killerid,"Sex") == 1 ? ("посадил") : ("посадила"),sendername(killerid),killerid);
send(playerid,0xFFFF00AA,string);
SetPlayerWantedLevel(playerid,0);
Player[playerid][pWanted] = 0;
OnPlayerReSpawn(playerid);
SaveAccount(playerid);
return 1;
}
else
{
new rand = random(100)+50;
Player[killerid][pHunterValue] +=rand;
GivePlayerKapusta(killerid,-500);
SaveAccount(playerid);
return 1;
}
}
if(GoWar == true)
{
if(Player[playerid][pMember] == DefenceFraction && Player[killerid][pMember] == AtackFraction)
{
AtackPoint++;
SendDeathMessage(killerid,playerid,reason);
return 1;
}
if(Player[playerid][pMember] == AtackFraction && Player[killerid][pMember] == DefenceFraction)
{
DefencePoint++;
SendDeathMessage(killerid,playerid,reason);
return 1;
}
}
if(GetPVarInt(playerid,"DrivingTest"))
{
DisablePlayerRaceCheckpoint(playerid);
DrivingTestTime[playerid] = 0;
DeletePVar(playerid,"DrivingTest");
DeletePVar(playerid,"DrivingTestHealth");
DeletePVar(playerid,"DrivingTestError");
}
if(GetPVarInt(playerid,"DrivingTestMoto"))
{
DisablePlayerRaceCheckpoint(playerid);
DrivingTestMotoTime[playerid] = 0;
DeletePVar(playerid,"DrivingTestMoto");
DeletePVar(playerid,"DrivingTestMotoHealth");
DeletePVar(playerid,"DrivingTestMotoError");
}
ZashkvarPlayerIsJoinDM(playerid);
return 1;
}
PHP код:
public OnPlayerDisconnect(playerid,reason)
{
KillTimer(FP_TimerPlayer[playerid]);
if(prokol[playerid] == true)
{
DestroyDynamicObject(proko2[playerid]);
prokol[playerid] = false;
}
new string[100];
switch(reason)
{
case 0:f(string,"(( %s[%d] вылетел%s с сервера. IP %s ))",sendername(playerid),playerid,GetPVarInt(playerid,"Sex") == 1 ? ("") : ("а"),Player[playerid][pIP]),ABroadCast(COLOR_GREY,string,1);
case 1:f(string,"(( %s[%d] %s с сервера. IP: %s ))",sendername(playerid),playerid,GetPVarInt(playerid,"Sex") == 1 ? ("вышел") : ("вышла"),Player[playerid][pIP]),ABroadCast(COLOR_GREY,string,1);
case 2:f(string,"(( %s[%d] кикнут%s с сервера. IP: %s ))",sendername(playerid),playerid,GetPVarInt(playerid,"Sex") == 1 ? ("") : ("а"),Player[playerid][pIP]),ABroadCast(COLOR_GREY,string,1);
}
if(Player[playerid][pPhousekey] != 0) HouseInfo[Player[playerid][pPhousekey]][hDel] = (GetPVarInt(playerid,"pVip") != 0 ? 60 : 30);
if(Player[playerid][pAdmin] != 0) Forveh_DestroyVehicle(CreateCar[playerid]);
SaveAccount(playerid);
foreach(new i: Player)
{
if(GetPlayerState(i) == PLAYER_STATE_SPECTATING && Player[i][Spectating][0] == playerid)
{
GameTextForPlayer(i,"PLAYER DISCONNECTED",3000,3);
cmd::specoff(i);
}
}
foreach(new i: Player)
{
if(toglogin[i] == true)
{
switch(reason)
{
case 0:f(string,"%s вылетел%s с сервера.",sendername(playerid),GetPVarInt(playerid, "Sex") == 1 ? ("") : ("а"));
case 1:f(string,"%s покинул%s сервер.",sendername(playerid),GetPVarInt(playerid, "Sex") == 1 ? ("") : ("а"));
case 2:f(string,"%s был%s кикнут%s сервером.",sendername(playerid),GetPVarInt(playerid, "Sex") == 1 ? ("") : ("а"),GetPVarInt(playerid, "Sex") == 1 ? ("") : ("а"));
}
send(i,0xFF6C3CAA,string);
}
}
foreach(new i : Player)
{
if(Logged[i] == false) return true;
if(TaxiAccepted[i] < 999)
{
if(TaxiAccepted[i] == playerid)
{
TaxiAccepted[i] = 999;
GameTextForPlayer(i, "~w~ЏAKC… AЂOмEмЏ~n~~r~ЊOK…мУ‡ …‚PУ", 5000, 1);
TaxiCallTime[i] = 0;
DisablePlayerCheckpoint(i);
}
}
}
if(GotHit[playerid] == true)
{
if(GetChased[playerid] < 999)
{
if(IsPlayerConnected(GetChased[playerid]))
{
send(GetChased[playerid], COLOR_YELLOW, "Ваша цель покинула сервер.");
GoChase[GetChased[playerid]] = 999;
}
}
}
if(bustation[playerid] == true) bustation[playerid] = false;
if(TaxiDuty[playerid] == 1) TaxiDrivers -= 1;
if(MedicDuty[playerid] == 1) Medics -= 1;
if(MechDuty[playerid] == 1) Mechanics -= 1;
AntiFakeKill[playerid] = false;
cheatlimit[playerid] = 0;
ZashkvarPlayerIsJoinDM(playerid);
DisablePlayerRaceCheckpoint(playerid);
RemovePlayerVariables(playerid);
DeletePVar(playerid,"chatS");
DeletePVar(playerid,"chatPM");
DeletePVar(playerid,"chatM");
DeletePVar(playerid,"chatME");
DeletePVar(playerid,"chatL");
DeletePVar(playerid,"chaD");
return 1;
}
не вижу в предоставленном тобой коде тех действий с вычитанием единицы из DMJoinPeople
Раньше было вот так но выше человек посоветовал в stock это все запихнуть я и сделал так как он написал а вот как я использовал.
- - - Добавлено - - -PHP код:
if(PIJoinDM[playerid] == 1)DMJoinPeople --;
А вот собственно код который предоставил человек выше.
PHP код:
stock ZashkvarPlayerIsJoinDM(playerid)
{
if(PIJoinDM[playerid] == 1)
{
PIJoinDM[playerid] = 0;
DMJoinPeople --;
return 1;
}
return 0;
}
Ну так просто прологируй
PHP код:
public OnPlayerDeath(playerid,killerid,reason)
{
printf("\n\nOnPlayerDeath(%d, %d, %d)", playerid,killerid,reason);
new playername[40],killername[40];
GetPlayerName(playerid,playername,sizeof(playername));
GetPlayerName(killerid,killername,sizeof(killername));
if(Player[killerid][pMember] == 1 || Player[killerid][pMember] == 2)
{
print("OnPlayerDeath 1");
if(GetPlayerWantedLevel(playerid) > 0)
{
new string[124];
ServerResetPlayerWeapons(playerid);
Player[playerid][pJailed] = true;
Player[playerid][pJailTime] = GetPlayerWantedLevel(playerid)* 10 * 60;
Player[playerid][pJailBlock] = false;
GivePlayerKapusta(playerid,-GetPlayerWantedLevel(playerid)*300);
GivePlayerKapusta(killerid,GetPlayerWantedLevel(playerid)*300);
f(string,"Ты %s игрока %s[%d] в тюрьму и %s $%d.",GetPVarInt(killerid,"Sex") == 1 ? ("посадил") : ("посадила"),sendername(playerid),playerid,GetPVarInt(killerid,"Sex") == 1 ? ("получил") : ("получила"),GetPlayerWantedLevel(playerid)*300);
send(killerid,0xFFFF00AA,string);
f(string,"Тебя %s в тюрьму %s[%d].",GetPVarInt(killerid,"Sex") == 1 ? ("посадил") : ("посадила"),sendername(killerid),killerid);
send(playerid,0xFFFF00AA,string);
SetPlayerWantedLevel(playerid,0);
Player[playerid][pWanted] = 0;
OnPlayerReSpawn(playerid);
SaveAccount(playerid);
print("OnPlayerDeath 2");
return 1;
}
else
{
new rand = random(100)+50;
Player[killerid][pHunterValue] +=rand;
GivePlayerKapusta(killerid,-500);
SaveAccount(playerid);
print("OnPlayerDeath 3");
return 1;
}
}
if(GoWar == true)
{
if(Player[playerid][pMember] == DefenceFraction && Player[killerid][pMember] == AtackFraction)
{
AtackPoint++;
SendDeathMessage(killerid,playerid,reason);
print("OnPlayerDeath 4");
return 1;
}
if(Player[playerid][pMember] == AtackFraction && Player[killerid][pMember] == DefenceFraction)
{
DefencePoint++;
SendDeathMessage(killerid,playerid,reason);
print("OnPlayerDeath 5");
return 1;
}
}
if(GetPVarInt(playerid,"DrivingTest"))
{
DisablePlayerRaceCheckpoint(playerid);
DrivingTestTime[playerid] = 0;
DeletePVar(playerid,"DrivingTest");
DeletePVar(playerid,"DrivingTestHealth");
DeletePVar(playerid,"DrivingTestError");
}
if(GetPVarInt(playerid,"DrivingTestMoto"))
{
DisablePlayerRaceCheckpoint(playerid);
DrivingTestMotoTime[playerid] = 0;
DeletePVar(playerid,"DrivingTestMoto");
DeletePVar(playerid,"DrivingTestMotoHealth");
DeletePVar(playerid,"DrivingTestMotoError");
}
print("OnPlayerDeath 6");
printf("OnPlayerDeath (%d)" , ZashkvarPlayerIsJoinDM(playerid));
print("OnPlayerDeath 8");
return 1;
}
Почему бы просто не юзать все эти манёвры в начале каллбеков?
Почему надо вниз совать перед сотнями return,
ясен пень что может не отниматься если в какое то условие с return ты впадёшь.
Цитата:
А это OnplayerDisconnect где тоже не убовляется если игрок вышел.
Код:public OnPlayerDisconnect(playerid,reason)
{
KillTimer(FP_TimerPlayer[playerid]);
if(prokol[playerid] == true)
{
DestroyDynamicObject(proko2[playerid]);
prokol[playerid] = false;
}
new string[100];
switch(reason)
{
case 0:f(string,"(( %s[%d] вылетел%s с сервера. IP %s ))",sendername(playerid),playerid,GetPVarInt(playerid,"Sex") == 1 ? ("") : ("а"),Player[playerid][pIP]),ABroadCast(COLOR_GREY,string,1);
case 1:f(string,"(( %s[%d] %s с сервера. IP: %s ))",sendername(playerid),playerid,GetPVarInt(playerid,"Sex") == 1 ? ("вышел") : ("вышла"),Player[playerid][pIP]),ABroadCast(COLOR_GREY,string,1);
case 2:f(string,"(( %s[%d] кикнут%s с сервера. IP: %s ))",sendername(playerid),playerid,GetPVarInt(playerid,"Sex") == 1 ? ("") : ("а"),Player[playerid][pIP]),ABroadCast(COLOR_GREY,string,1);
}
if(Player[playerid][pPhousekey] != 0) HouseInfo[Player[playerid][pPhousekey]][hDel] = (GetPVarInt(playerid,"pVip") != 0 ? 60 : 30);
if(Player[playerid][pAdmin] != 0) Forveh_DestroyVehicle(CreateCar[playerid]);
SaveAccount(playerid);
foreach(new i: Player)
{
if(GetPlayerState(i) == PLAYER_STATE_SPECTATING && Player[i][Spectating][0] == playerid)
{
GameTextForPlayer(i,"PLAYER DISCONNECTED",3000,3);
cmd::specoff(i);
}
}
foreach(new i: Player)
{
if(toglogin[i] == true)
{
switch(reason)
{
case 0:f(string,"%s вылетел%s с сервера.",sendername(playerid),GetPVarInt(playerid, "Sex") == 1 ? ("") : ("а"));
case 1:f(string,"%s покинул%s сервер.",sendername(playerid),GetPVarInt(playerid, "Sex") == 1 ? ("") : ("а"));
case 2:f(string,"%s был%s кикнут%s сервером.",sendername(playerid),GetPVarInt(playerid, "Sex") == 1 ? ("") : ("а"),GetPVarInt(playerid, "Sex") == 1 ? ("") : ("а"));
}
send(i,0xFF6C3CAA,string);
}
}
foreach(new i : Player)
{
if(Logged[i] == false) return true; // заменить на continue; или будет как ниже написано
// подключается игрок к серверу, ещё не авторизовался
// а тут ты такой выходишь и бац.. в этом месте ты обрываешь весь код который ниже
if(TaxiAccepted[i] < 999)
{
if(TaxiAccepted[i] == playerid)
{
TaxiAccepted[i] = 999;
GameTextForPlayer(i, "~w~ЏAKC… AЂOмEмЏ~n~~r~ЊOK…мУ‡ …‚PУ", 5000, 1);
TaxiCallTime[i] = 0;
DisablePlayerCheckpoint(i);
}
}
}
if(GotHit[playerid] == true)
{
if(GetChased[playerid] < 999)
{
if(IsPlayerConnected(GetChased[playerid]))
{
send(GetChased[playerid], COLOR_YELLOW, "Ваша цель покинула сервер.");
GoChase[GetChased[playerid]] = 999;
}
}
}
if(bustation[playerid] == true) bustation[playerid] = false;
if(TaxiDuty[playerid] == 1) TaxiDrivers -= 1;
if(MedicDuty[playerid] == 1) Medics -= 1;
if(MechDuty[playerid] == 1) Mechanics -= 1;
AntiFakeKill[playerid] = false;
cheatlimit[playerid] = 0;
ZashkvarPlayerIsJoinDM(playerid);
DisablePlayerRaceCheckpoint(playerid);
RemovePlayerVariables(playerid);
DeletePVar(playerid,"chatS");
DeletePVar(playerid,"chatPM");
DeletePVar(playerid,"chatM");
DeletePVar(playerid,"chatME");
DeletePVar(playerid,"chatL");
DeletePVar(playerid,"chaD");
return 1;
}
Эмм, а как ты проверяешь, что игроков нет на ДМ зоне?