PDA

Просмотр полной версии : [Вопрос] Ивент ДМ.



kala4iks
26.02.2017, 15:11
Всем добрый день, сделал ивент ДМ. но столкнулся с тем что когда я убиваю игрока участник не отбавляется и из за этого не заканчивается ивент с победителем.

new DMJoinPeople = 0;


public OnPlayerDisconnect


if(GetPVarInt(playerid,"DMJoin") == 1)DMJoinPeople --;


public OnPlayerDeath


if(GetPVarInt(playerid,"DMJoin") == 1)DMJoinPeople --;


if(DMJoinPeople == 1 && Zona[zOpened] == 0)
{
if(GetPVarInt(i,"DMJoin") == 1)
{
new str[124];
format(str,sizeof(str),"%s стал победителем ''DeathMatch''.",sendername(i));
sendToAll(0x9519F2AA,str);
TextDrawHideForPlayer(i,jointime[i]),TextDrawHideForPlayer(i,joinmember[i]);
OnPlayerReSpawn(i);
}
SetPVarInt(i,"DMJoin",0);
DMJoinPeople = 0;
}


if(dmtimes > 0)
{
dmtimes --;
foreach(new i: Player)
{
f(string,FixText("Участники: ~r~%d"),DMJoinPeople);
TextDrawSetString(joinmember[i],string);
f(string,FixText("До старта: %d"),dmtimes);
TextDrawSetString(jointime[i],string);
}
}


StartJoinDM()
{
foreach(Player,i)
{
if(GetPVarInt(i,"DMJoin") == 1)
{
TogglePlayerControllable(i,1);
GivePlayerWeaponAC(i,24,999);
GivePlayerWeaponAC(i,25,999);
GivePlayerWeaponAC(i,31,999);
SetPlayerColor(i,0xFF6347AA);
TextDrawHideForPlayer(i,jointime[i]);
}
}
sendToAll(0x9519F2AA,"Регистрация на ивент закончена | Все участники подключились.");
Zona[zOpened] = 0;
}
publics ZoneEnd() if(Zona[zOpened] == 1) StartJoinDM();
publics NotStartDM()
{
if(DMJoinPeople < 2 && DMJoinPeople != 0)
{
foreach(Player,i)
{
if(GetPVarInt(i,"DMJoin") == 1)
{
send(i,0x9519F2AA,"Ивент не состоялся, потому что вы были единственным участником.");
OnPlayerReSpawn(i);
TogglePlayerControllable(i,1);
TextDrawHideForPlayer(i,jointime[i]),TextDrawHideForPlayer(i,joinmember[i]);
}
SetPVarInt(i,"DMJoin",0);
}
}
DMJoinPeople = 0;
return 1;
}


CMD:join(playerid, params[])
{
if(Zona[zOpened] == 0)return send(playerid,0xFF0000AA,"[ОШИБКА] {FFFFFF}В данный момент нет открытых ивентов.");
if(IsPlayerInAnyVehicle(playerid))return send(playerid,0xFF0000AA,"[ОШИБКА] {FFFFFF}Для подключения к ивенту выйдите из транспорта.");
if(Player[playerid][pJailed] == true)return send(playerid, COLOR_RED, ""vError"Вы находитесь в тюрьме!");
new Float:fX,Float:y,Float:z,Float:hp,Float:armour,string[40];
GetPlayerPos(playerid,fX,y,z);
GetPlayerArmour(playerid,armour);
GetPlayerHealth(playerid,hp);
SetPVarFloat(playerid,"PosXJoin",fX);
SetPVarFloat(playerid,"PosYJoin",y);
SetPVarFloat(playerid,"PosZJoin",z);
SetPVarInt(playerid,"JoinInt",GetPlayerInterior(playerid));
SetPVarInt(playerid,"JoinVW",GetPlayerVirtualWorld(playerid));
for(new a = 1; a<13; a++)
{
format(string,40,"JoinGun%i",a);
SetPVarInt(playerid,string,Player[playerid][pGun][a]);
format(string,40,"JoinAmmo%i",a);
SetPVarInt(playerid,string,Player[playerid][pAmmo][a]);
}
SetPVarFloat(playerid,"JoinArmour",armour);
SetPVarFloat(playerid,"JoinHeal",hp);
switch(Zona[zOpened])
{
case 1:
{
new rad = random(sizeof(DMSpawn));
ServerSetPlayerPos(playerid,DMSpawn[rad][0],DMSpawn[rad][1],DMSpawn[rad][2]);
ServerResetPlayerWeapons(playerid);
SetPlayerInterior(playerid,10),SetPlayerVirtualWorld(playerid,0);
ServerGivePlayerArmour(playerid,100),ServerGivePlayerHealth(playerid,100);
TextDrawShowForPlayer(playerid, jointime[playerid]); TextDrawShowForPlayer(playerid,joinmember[playerid]);
SetPVarInt(playerid,"DMJoin",1);
Freeze(playerid);
DMJoinPeople ++;
if(DMJoinPeople >= 20) StartJoinDM();
}
}
return 1;
}


CMD:zone(playerid)
{
dmtimes = 30;
Zona[zOpened] = 1;
DMJoinPeople = 0;
sendToAll(0x9519F2AA,"Открыта регистрация на DeathMatch | Карта: BattleField | Макс.Участников: 20 | Присоединиться: ''/join''.");
SetTimer("NotStartDM",30001,0),SetTimer("ZoneEnd",30000,0);
return 1;
}

$continue$
26.02.2017, 16:15
ну так отнимай в OnPlayerDeath

kala4iks
26.02.2017, 16:35
ну так отнимай в OnPlayerDeath

Так оно там и стоит чтоб отнималось я в коде указал но оно не отнимается.

В


public OnPlayerDeath


if(GetPVarInt(playerid,"DMJoin") == 1)DMJoinPeople --;

DeimoS
26.02.2017, 17:23
Во-первых, PVar нужно не обнулять, а удалять, если не хочешь бессмысленных просадок в скорости обработки pVar впоследствии.
Во-вторых, после смерти так же стоит удалять pVar, если ты не хочешь словить баг (сейчас я могу умереть на ивенте и после каждая моя смерть будет отнимать от ивента одного участника)
В-третьих, раз уж ты используешь foreach, гораздо лучше и проще создать новый итератор для игроков на ивенте и работать с ним, а не писать винегрет, который написал ты

_lizard
26.02.2017, 17:35
upd, нашёл :D (http://forum.sa-mp.com/showthread.php?t=570937) можно пост дельнуть

kala4iks
26.02.2017, 18:45
Сделал вместо


if(GetPVarInt(playerid,"DMJoin") == 1)


new PIJoinDM[MAX_PLAYERS];
if(PIJoinDM[playerid] == 1)

Но когда игрок выходит из игры или когда я убиваю игрока то не убавляется. А прибавление работает нормально.

vovandolg
26.02.2017, 21:05
Сделал вместо


if(GetPVarInt(playerid,"DMJoin") == 1)


new PIJoinDM[MAX_PLAYERS];
if(PIJoinDM[playerid] == 1)

Но когда игрок выходит из игры или когда я убиваю игрока то не убавляется. А прибавление работает нормально.

покажи ещё раз весь код, который теперь у тебя на данный момент...

kala4iks
26.02.2017, 21:14
покажи ещё раз весь код, который теперь у тебя на данный момент...


Ко всем new

new PIJoinDM[MAX_PLAYERS];

В public OnPlayerConnect


PIJoinDM[playerid] = 0;

В public OnPlayerDisconnect


if(PIJoinDM[playerid] == 1)DMJoinPeople --;

В public OnPlayerDeath


if(PIJoinDM[playerid] == 1)DMJoinPeople --;

В public OnPlayerSpawn


else if(PIJoinDM[playerid] == 1)
{
TextDrawHideForPlayer(playerid,jointime[playerid]),TextDrawHideForPlayer(playerid,joinmember[playerid]);
GivePlayerWeaponAC(playerid,GetPVarInt(playerid,"JoinGun0"),GetPVarInt(playerid,"JoinAmmo0"));
GivePlayerWeaponAC(playerid,GetPVarInt(playerid,"JoinGun1"),GetPVarInt(playerid,"JoinAmmo1"));
GivePlayerWeaponAC(playerid,GetPVarInt(playerid,"JoinGun2"),GetPVarInt(playerid,"JoinAmmo2"));
GivePlayerWeaponAC(playerid,GetPVarInt(playerid,"JoinGun3"),GetPVarInt(playerid,"JoinAmmo3"));
GivePlayerWeaponAC(playerid,GetPVarInt(playerid,"JoinGun4"),GetPVarInt(playerid,"JoinAmmo4"));
GivePlayerWeaponAC(playerid,GetPVarInt(playerid,"JoinGun5"),GetPVarInt(playerid,"JoinAmmo5"));
ServerSetPlayerPos(playerid,GetPVarFloat(playerid,"PosXJoin"),GetPVarFloat(playerid,"PosYJoin"),GetPVarFloat(playerid,"PosZJoin"));
SetPlayerInterior(playerid,GetPVarInt(playerid,"JoinInt"));
SetPlayerVirtualWorld(playerid,GetPVarInt(playerid,"JoinVW"));
ServerGivePlayerArmour(playerid, GetPVarFloat(playerid,"JoinArmour"));
ServerGivePlayerHealth(playerid, GetPVarFloat(playerid,"JoinHeal"));
PIJoinDM[playerid] = 0;
}

В stock PlayerUpdate


foreach(new i: Player)
{
if(DMJoinPeople == 1 && Zona[zOpened] == 0)
{
if(PIJoinDM[i] == 1)
{
new str[124];
format(str,sizeof(str),"%s стал победителем ''DeathMatch''.",sendername(i));
sendToAll(0x9519F2AA,str);
TextDrawHideForPlayer(i,jointime[i]),TextDrawHideForPlayer(i,joinmember[i]);
OnPlayerReSpawn(i);
PIJoinDM[i] = 0;
DMJoinPeople = 0;
}
}
}


StartJoinDM()
{
foreach(Player,i)
{
if(PIJoinDM[i] == 1)
{
TogglePlayerControllable(i,1);
GivePlayerWeaponAC(i,24,999);
GivePlayerWeaponAC(i,25,999);
GivePlayerWeaponAC(i,31,999);
TextDrawHideForPlayer(i,jointime[i]);
}
}
sendToAll(0x9519F2AA,"Регистрация на ивент закончена | Все участники подключились.");
Zona[zOpened] = 0;
}
publics ZoneEnd() if(Zona[zOpened] == 1) StartJoinDM();
publics NotStartDM()
{
if(DMJoinPeople < 2 && DMJoinPeople != 0)
{
foreach(Player,i)
{
if(PIJoinDM[i] == 1)
{
send(i,0x9519F2AA,"Ивент не состоялся, потому что вы были единственным участником.");
OnPlayerReSpawn(i);
TogglePlayerControllable(i,1);
TextDrawHideForPlayer(i,jointime[i]),TextDrawHideForPlayer(i,joinmember[i]);
}
PIJoinDM[i] = 0;
}
}
DMJoinPeople = 0;
return 1;
}


CMD:join(playerid, params[])
{
if(Zona[zOpened] == 0)return send(playerid,0xFF0000AA,"[ОШИБКА] {FFFFFF}В данный момент нет открытых ивентов.");
if(IsPlayerInAnyVehicle(playerid))return send(playerid,0xFF0000AA,"[ОШИБКА] {FFFFFF}Для подключения к ивенту выйдите из транспорта.");
if(Player[playerid][pJailed] == true)return send(playerid, COLOR_RED, ""vError"Вы находитесь в тюрьме!");
new Float:fX,Float:y,Float:z,Float:hp,Float:armour,string[40];
GetPlayerPos(playerid,fX,y,z);
GetPlayerArmour(playerid,armour);
GetPlayerHealth(playerid,hp);
SetPVarFloat(playerid,"PosXJoin",fX);
SetPVarFloat(playerid,"PosYJoin",y);
SetPVarFloat(playerid,"PosZJoin",z);
SetPVarInt(playerid,"JoinInt",GetPlayerInterior(playerid));
SetPVarInt(playerid,"JoinVW",GetPlayerVirtualWorld(playerid));
for(new a = 1; a<13; a++)
{
format(string,40,"JoinGun%i",a);
SetPVarInt(playerid,string,Player[playerid][pGun][a]);
format(string,40,"JoinAmmo%i",a);
SetPVarInt(playerid,string,Player[playerid][pAmmo][a]);
}
SetPVarFloat(playerid,"JoinArmour",armour);
SetPVarFloat(playerid,"JoinHeal",hp);
switch(Zona[zOpened])
{
case 1:
{
new rad = random(sizeof(DMSpawn));
ServerSetPlayerPos(playerid,DMSpawn[rad][0],DMSpawn[rad][1],DMSpawn[rad][2]);
ServerResetPlayerWeapons(playerid);
SetPlayerInterior(playerid,10),SetPlayerVirtualWorld(playerid,0);
ServerGivePlayerArmour(playerid,100),ServerGivePlayerHealth(playerid,100);
TextDrawShowForPlayer(playerid, jointime[playerid]); TextDrawShowForPlayer(playerid,joinmember[playerid]);
PIJoinDM[playerid] = 1;
Freeze(playerid);
DMJoinPeople ++;
if(DMJoinPeople >= 20) StartJoinDM();
}
}
return 1;
}

vovandolg
27.02.2017, 13:50
//-----------------------------------------
stock ZashkvarPlayerIsJoinDM(playerid)
{
if(PIJoinDM[playerid] == 1)
{
PIJoinDM[playerid] = 0;
DMJoinPeople --;
return 1;
}
return 0;
}

stock PlayerUpdate()
{
if(DMJoinPeople == 1 && Zona[zOpened] == 0)
{
foreach(new i: Player)
{
if(ZashkvarPlayerIsJoinDM(i) == 1)
{
new str[124];
format(str, sizeof(str), "%s стал победителем ''DeathMatch''.", sendername(i));
TextDrawHideForPlayer(i, jointime[i]);
TextDrawHideForPlayer(i, joinmember[i]);
sendToAll(0x9519F2AA, str);
OnPlayerReSpawn(i);
}
}
}
return 1;
}


//-----------------------------------------
//в коннекте можешь не обнулять, дисконнектом очищать правильнее будет
public OnPlayerDisconnect(playerid, reason)
{
ZashkvarPlayerIsJoinDM(playerid);
return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
ZashkvarPlayerIsJoinDM(playerid);
return 1;
}

public OnPlayerSpawn(playerid)
{
if(PIJoinDM[playerid] == 1)
{
//PIJoinDM[playerid] = 0; // тут что? обнулять не обнулять, если игрок будет в дм зоне, то не обнуляй.
TextDrawHideForPlayer(playerid, jointime[playerid]);
TextDrawHideForPlayer(playerid, joinmember[playerid]);
GivePlayerWeaponAC(playerid, GetPVarInt(playerid,"JoinGun0"), GetPVarInt(playerid,"JoinAmmo0"));
GivePlayerWeaponAC(playerid, GetPVarInt(playerid,"JoinGun1"), GetPVarInt(playerid,"JoinAmmo1"));
GivePlayerWeaponAC(playerid, GetPVarInt(playerid,"JoinGun2"), GetPVarInt(playerid,"JoinAmmo2"));
GivePlayerWeaponAC(playerid, GetPVarInt(playerid,"JoinGun3"), GetPVarInt(playerid,"JoinAmmo3"));
GivePlayerWeaponAC(playerid, GetPVarInt(playerid,"JoinGun4"), GetPVarInt(playerid,"JoinAmmo4"));
GivePlayerWeaponAC(playerid, GetPVarInt(playerid,"JoinGun5"), GetPVarInt(playerid,"JoinAmmo5"));
ServerSetPlayerPos(playerid, GetPVarFloat(playerid,"PosXJoin"), GetPVarFloat(playerid,"PosYJoin"), GetPVarFloat(playerid,"PosZJoin"));
SetPlayerInterior(playerid, GetPVarInt(playerid,"JoinInt"));
SetPlayerVirtualWorld(playerid, GetPVarInt(playerid,"JoinVW"));
ServerGivePlayerArmour(playerid, GetPVarFloat(playerid,"JoinArmour"));
ServerGivePlayerHealth(playerid, GetPVarFloat(playerid,"JoinHeal"));
}
return 1;
}

kala4iks
27.02.2017, 15:39
//-----------------------------------------
stock ZashkvarPlayerIsJoinDM(playerid)
{
if(PIJoinDM[playerid] == 1)
{
PIJoinDM[playerid] = 0;
DMJoinPeople --;
return 1;
}
return 0;
}

stock PlayerUpdate()
{
if(DMJoinPeople == 1 && Zona[zOpened] == 0)
{
foreach(new i: Player)
{
if(ZashkvarPlayerIsJoinDM(i) == 1)
{
new str[124];
format(str, sizeof(str), "%s стал победителем ''DeathMatch''.", sendername(i));
TextDrawHideForPlayer(i, jointime[i]);
TextDrawHideForPlayer(i, joinmember[i]);
sendToAll(0x9519F2AA, str);
OnPlayerReSpawn(i);
}
}
}
return 1;
}


//-----------------------------------------
//в коннекте можешь не обнулять, дисконнектом очищать правильнее будет
public OnPlayerDisconnect(playerid, reason)
{
ZashkvarPlayerIsJoinDM(playerid);
return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
ZashkvarPlayerIsJoinDM(playerid);
return 1;
}

public OnPlayerSpawn(playerid)
{
if(PIJoinDM[playerid] == 1)
{
//PIJoinDM[playerid] = 0; // тут что? обнулять не обнулять, если игрок будет в дм зоне, то не обнуляй.
TextDrawHideForPlayer(playerid, jointime[playerid]);
TextDrawHideForPlayer(playerid, joinmember[playerid]);
GivePlayerWeaponAC(playerid, GetPVarInt(playerid,"JoinGun0"), GetPVarInt(playerid,"JoinAmmo0"));
GivePlayerWeaponAC(playerid, GetPVarInt(playerid,"JoinGun1"), GetPVarInt(playerid,"JoinAmmo1"));
GivePlayerWeaponAC(playerid, GetPVarInt(playerid,"JoinGun2"), GetPVarInt(playerid,"JoinAmmo2"));
GivePlayerWeaponAC(playerid, GetPVarInt(playerid,"JoinGun3"), GetPVarInt(playerid,"JoinAmmo3"));
GivePlayerWeaponAC(playerid, GetPVarInt(playerid,"JoinGun4"), GetPVarInt(playerid,"JoinAmmo4"));
GivePlayerWeaponAC(playerid, GetPVarInt(playerid,"JoinGun5"), GetPVarInt(playerid,"JoinAmmo5"));
ServerSetPlayerPos(playerid, GetPVarFloat(playerid,"PosXJoin"), GetPVarFloat(playerid,"PosYJoin"), GetPVarFloat(playerid,"PosZJoin"));
SetPlayerInterior(playerid, GetPVarInt(playerid,"JoinInt"));
SetPlayerVirtualWorld(playerid, GetPVarInt(playerid,"JoinVW"));
ServerGivePlayerArmour(playerid, GetPVarFloat(playerid,"JoinArmour"));
ServerGivePlayerHealth(playerid, GetPVarFloat(playerid,"JoinHeal"));
}
return 1;
}



Не помогло все равно не убавляется при убийстве

DeimoS
27.02.2017, 20:06
Весь OnPlayerDeath в студию

kala4iks
27.02.2017, 20:24
Весь OnPlayerDeath в студию


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;
}

А это 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;
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;
}

DeimoS
27.02.2017, 21:33
не вижу в предоставленном тобой коде тех действий с вычитанием единицы из DMJoinPeople

kala4iks
27.02.2017, 22:29
не вижу в предоставленном тобой коде тех действий с вычитанием единицы из DMJoinPeople

Раньше было вот так но выше человек посоветовал в stock это все запихнуть я и сделал так как он написал а вот как я использовал.


if(PIJoinDM[playerid] == 1)DMJoinPeople --;

- - - Добавлено - - -


Раньше было вот так но выше человек посоветовал в stock это все запихнуть я и сделал так как он написал а вот как я использовал.


if(PIJoinDM[playerid] == 1)DMJoinPeople --;

А вот собственно код который предоставил человек выше.


stock ZashkvarPlayerIsJoinDM(playerid)
{
if(PIJoinDM[playerid] == 1)
{
PIJoinDM[playerid] = 0;
DMJoinPeople --;
return 1;
}
return 0;
}

DeimoS
28.02.2017, 09:50
Ну так просто прологируй

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;
}

vovandolg
28.02.2017, 12:26
Почему бы просто не юзать все эти манёвры в начале каллбеков?
Почему надо вниз совать перед сотнями 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;
}

kala4iks
28.02.2017, 12:50
Ну так просто прологируй

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;
}

Вот это засчитало убийство на ивенте


OnPlayerDeath(1, 0, 0)
[11:38:41] OnPlayerDeath 6
[11:38:41] OnPlayerDeath (1)
[11:38:41] OnPlayerDeath 8
[11:38:41] [kill] Vlad_Stor killed kala4iks

DeimoS
28.02.2017, 16:57
Эмм, а как ты проверяешь, что игроков нет на ДМ зоне?

kala4iks
28.02.2017, 18:25
Почему бы просто не юзать все эти манёвры в начале каллбеков?
Почему надо вниз совать перед сотнями return,
ясен пень что может не отниматься если в какое то условие с return ты впадёшь.




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;
}


Поставил выше тоже не помогло.

- - - Добавлено - - -


Эмм, а как ты проверяешь, что игроков нет на ДМ зоне?


if(PIJoinDM[playerid] == 1)

vovandolg
28.02.2017, 19:04
Поставил выше тоже не помогло.

И в public OnPlayerDeath тоже в самом верху поставил?:big_boss:

kala4iks
28.02.2017, 19:20
И в public OnPlayerDeath тоже в самом верху поставил?:big_boss:

Да все как вы написали сделал но вообще как не отнималось так и не отнимается не пойму из за чего вот прибавляется когда заходят на ивент это работает но если убью игрока не хочет отнимать.

vovandolg
28.02.2017, 19:24
OnPlayerReSpawn покажи, что там за чудо спавн у тебя)

kala4iks
28.02.2017, 19:32
OnPlayerReSpawn покажи, что там за чудо спавн у тебя)


stock OnPlayerReSpawn(playerid) return SetPVarInt(playerid,"ReSpawn",1), OnPlayerSpawn(playerid);

DeimoS
28.02.2017, 20:17
if(PIJoinDM[playerid] == 1)

Эмм, что? -_-
Я не проверку того, находится ли игрок на ивенте, прошу. Я спрашиваю как ты определяешь то, сколько человек осталось на ивенте

vovandolg
28.02.2017, 20:30
stock OnPlayerReSpawn(playerid) return SetPVarInt(playerid,"ReSpawn",1), OnPlayerSpawn(playerid);

Ну вот и разобрались))
надо было сразу к этому моменту подойти)





В public OnPlayerSpawn



else if(PIJoinDM[playerid] == 1)
{
TextDrawHideForPlayer(playerid,jointime[playerid]),TextDrawHideForPlayer(playerid,joinmember[playerid]);
GivePlayerWeaponAC(playerid,GetPVarInt(playerid,"JoinGun0"),GetPVarInt(playerid,"JoinAmmo0"));
GivePlayerWeaponAC(playerid,GetPVarInt(playerid,"JoinGun1"),GetPVarInt(playerid,"JoinAmmo1"));
GivePlayerWeaponAC(playerid,GetPVarInt(playerid,"JoinGun2"),GetPVarInt(playerid,"JoinAmmo2"));
GivePlayerWeaponAC(playerid,GetPVarInt(playerid,"JoinGun3"),GetPVarInt(playerid,"JoinAmmo3"));
GivePlayerWeaponAC(playerid,GetPVarInt(playerid,"JoinGun4"),GetPVarInt(playerid,"JoinAmmo4"));
GivePlayerWeaponAC(playerid,GetPVarInt(playerid,"JoinGun5"),GetPVarInt(playerid,"JoinAmmo5"));
ServerSetPlayerPos(playerid,GetPVarFloat(playerid,"PosXJoin"),GetPVarFloat(playerid,"PosYJoin"),GetPVarFloat(playerid,"PosZJoin"));
SetPlayerInterior(playerid,GetPVarInt(playerid,"JoinInt"));
SetPlayerVirtualWorld(playerid,GetPVarInt(playerid,"JoinVW"));
ServerGivePlayerArmour(playerid, GetPVarFloat(playerid,"JoinArmour"));
ServerGivePlayerHealth(playerid, GetPVarFloat(playerid,"JoinHeal"));
PIJoinDM[playerid] = 0; // о прикольна)) мёртвая душа +1, убери это обнуление отсюда!
}

kala4iks
28.02.2017, 22:44
Эмм, что? -_-
Я не проверку того, находится ли игрок на ивенте, прошу. Я спрашиваю как ты определяешь то, сколько человек осталось на ивенте

Ну вообще через .


DMJoinPeople

DeimoS
28.02.2017, 23:19
Ну вообще через .


DMJoinPeople

Покажи конкретный код.
А лучше - целиком код всей системы, начиная с того, как создаёшь переменные и заканчивая тем, как проверяешь количество игроков. Вся проблема сейчас лишь в том, что ты чего-то недопонимаешь и поэтому делаешь не так, как нужно. И нам трудно понять что ты конкретно не так делаешь по огрызкам кода

kala4iks
01.03.2017, 00:58
Покажи конкретный код.
А лучше - целиком код всей системы, начиная с того, как создаёшь переменные и заканчивая тем, как проверяешь количество игроков. Вся проблема сейчас лишь в том, что ты чего-то недопонимаешь и поэтому делаешь не так, как нужно. И нам трудно понять что ты конкретно не так делаешь по огрызкам кода

Я уже не первый раз кидаю но кину еще раз. Мне конечно не сложно может я и где-то ошибся.


new PIJoinDM[MAX_PLAYERS];
new DMJoinPeople;
new dmtimes = 0;
new Text:jointime[MAX_PLAYERS];
new Text:joinmember[MAX_PLAYERS];





stock ZashkvarPlayerIsJoinDM(playerid)
{
if(PIJoinDM[playerid] == 1)
{
DMJoinPeople --;
return 1;
}
return 0;
}

В stock PlayerUpdate()


if(DMJoinPeople == 1 && Zona[zOpened] == 0)
{
foreach(new i: Player)
{
if(ZashkvarPlayerIsJoinDM(i) == 1)
{
new str[124];
format(str,sizeof(str),"%s стал победителем ''DeathMatch''.",sendername(i));
sendToAll(0x9519F2AA,str);
TextDrawHideForPlayer(i,jointime[i]),TextDrawHideForPlayer(i,joinmember[i]);
OnPlayerReSpawn(i);
PIJoinDM[i] = 0;
DMJoinPeople = 0;
}
}
}


StartJoinDM()
{
foreach(Player,i)
{
if(PIJoinDM[i] == 1)
{
TogglePlayerControllable(i,1);
GivePlayerWeaponAC(i,24,999);
GivePlayerWeaponAC(i,25,999);
GivePlayerWeaponAC(i,31,999);
TextDrawHideForPlayer(i,jointime[i]);
}
}
sendToAll(0x9519F2AA,"Регистрация на ивент закончена | Все участники подключились.");
Zona[zOpened] = 0;
}
publics ZoneEnd() if(Zona[zOpened] == 1) StartJoinDM();
publics NotStartDM()
{
if(DMJoinPeople < 2 && DMJoinPeople != 0)
{
foreach(Player,i)
{
if(PIJoinDM[i] == 1)
{
send(i,0x9519F2AA,"Ивент не состоялся, потому что вы были единственным участником.");
OnPlayerReSpawn(i);
TogglePlayerControllable(i,1);
TextDrawHideForPlayer(i,jointime[i]),TextDrawHideForPlayer(i,joinmember[i]);
}
PIJoinDM[i] = 0;
}
}
DMJoinPeople = 0;
return 1;
}


if(dmtimes > 0)
{
dmtimes --;
foreach(new i: Player)
{
f(string,FixText("Участники: ~r~%d"),DMJoinPeople);
TextDrawSetString(joinmember[i],string);
f(string,FixText("До старта: %d"),dmtimes);
TextDrawSetString(jointime[i],string);
}
}


CMD:join(playerid, params[])
{
if(Zona[zOpened] == 0)return send(playerid,0xFF0000AA,"[ОШИБКА] {FFFFFF}В данный момент нет открытых ивентов.");
if(IsPlayerInAnyVehicle(playerid))return send(playerid,0xFF0000AA,"[ОШИБКА] {FFFFFF}Для подключения к ивенту выйдите из транспорта.");
if(Player[playerid][pJailed] == true)return send(playerid, COLOR_RED, ""vError"Вы находитесь в тюрьме!");
new Float:fX,Float:y,Float:z,Float:hp,Float:armour,string[40];
GetPlayerPos(playerid,fX,y,z);
GetPlayerArmour(playerid,armour);
GetPlayerHealth(playerid,hp);
SetPVarFloat(playerid,"PosXJoin",fX);
SetPVarFloat(playerid,"PosYJoin",y);
SetPVarFloat(playerid,"PosZJoin",z);
SetPVarInt(playerid,"JoinInt",GetPlayerInterior(playerid));
SetPVarInt(playerid,"JoinVW",GetPlayerVirtualWorld(playerid));
for(new a = 1; a<13; a++)
{
format(string,40,"JoinGun%i",a);
SetPVarInt(playerid,string,Player[playerid][pGun][a]);
format(string,40,"JoinAmmo%i",a);
SetPVarInt(playerid,string,Player[playerid][pAmmo][a]);
}
SetPVarFloat(playerid,"JoinArmour",armour);
SetPVarFloat(playerid,"JoinHeal",hp);
switch(Zona[zOpened])
{
case 1:
{
new rad = random(sizeof(DMSpawn));
ServerSetPlayerPos(playerid,DMSpawn[rad][0],DMSpawn[rad][1],DMSpawn[rad][2]);
ServerResetPlayerWeapons(playerid);
SetPlayerInterior(playerid,10),SetPlayerVirtualWorld(playerid,0);
ServerGivePlayerArmour(playerid,100),ServerGivePlayerHealth(playerid,100);
TextDrawShowForPlayer(playerid, jointime[playerid]); TextDrawShowForPlayer(playerid,joinmember[playerid]);
PIJoinDM[playerid] = 1;
Freeze(playerid);
DMJoinPeople ++;
if(DMJoinPeople >= 20) StartJoinDM();
}
}
return 1;
}


CMD:zone(playerid)
{
dmtimes = 30;
Zona[zOpened] = 1;
DMJoinPeople = 0;
sendToAll(0x9519F2AA,"Открыта регистрация на DeathMatch | Карта: BattleField | Макс.Участников: 20 | Присоединиться: ''/join''.");
SetTimer("NotStartDM",30001,0),SetTimer("ZoneEnd",30000,0);
return 1;
}

В OnplayerSpawn


else if(PIJoinDM[playerid] == 1)
{
TextDrawHideForPlayer(playerid,jointime[playerid]),TextDrawHideForPlayer(playerid,joinmember[playerid]);
GivePlayerWeaponAC(playerid,GetPVarInt(playerid,"JoinGun0"),GetPVarInt(playerid,"JoinAmmo0"));
GivePlayerWeaponAC(playerid,GetPVarInt(playerid,"JoinGun1"),GetPVarInt(playerid,"JoinAmmo1"));
GivePlayerWeaponAC(playerid,GetPVarInt(playerid,"JoinGun2"),GetPVarInt(playerid,"JoinAmmo2"));
GivePlayerWeaponAC(playerid,GetPVarInt(playerid,"JoinGun3"),GetPVarInt(playerid,"JoinAmmo3"));
GivePlayerWeaponAC(playerid,GetPVarInt(playerid,"JoinGun4"),GetPVarInt(playerid,"JoinAmmo4"));
GivePlayerWeaponAC(playerid,GetPVarInt(playerid,"JoinGun5"),GetPVarInt(playerid,"JoinAmmo5"));
ServerSetPlayerPos(playerid,GetPVarFloat(playerid,"PosXJoin"),GetPVarFloat(playerid,"PosYJoin"),GetPVarFloat(playerid,"PosZJoin"));
SetPlayerInterior(playerid,GetPVarInt(playerid,"JoinInt"));
SetPlayerVirtualWorld(playerid,GetPVarInt(playerid,"JoinVW"));
ServerGivePlayerArmour(playerid, GetPVarFloat(playerid,"JoinArmour"));
ServerGivePlayerHealth(playerid, GetPVarFloat(playerid,"JoinHeal"));
//PIJoinDM[playerid] = 0;
}

vovandolg
01.03.2017, 02:07
Такое ощущение что при чтении информации отсюда у тебя она обработалась наискось и ты её переделал вообще так как не надо, сравни свой код с начальным или хотя бы до этого который ты кидал, у тебя алгоритмы по другому встали, то есть мы по сути по старым алгоритмам тебе даём решение, а ты на ходу пишешь новые и пытаешься из каждого нас сделать вангу, мол не чего страшного пусть мысли мои читают.

Определись уже с кодом.

А вообще складывается такое ощущение что тебя подослали сюда чтобы нервы потрепать...

DeimoS
01.03.2017, 10:56
Во-первых, зачем ты опять убрал обнуление PIJoinDM в ZashkvarPlayerIsJoinDM?
Во-вторых, что это за проверка такая? -_-

foreach(new i: Player)
{
if(ZashkvarPlayerIsJoinDM(i) == 1)
{
ты сам-то понимаешь как должна работать данная система? Судя по коду - не особо.
Составь прямо в этой теме алгоритм работы системы в виде текста и покажи его нам (как будешь добавлять новых игроков. Как будешь удалять их. Как будешь проверять их количество и т.п.). Мы его подправим и будешь реализовывать его в виде кода

И да, всё же прислушайся к совету с итератором (http://pro-pawn.ru/showthread.php?14959-%D0%9A%D0%BE%D0%BB-%D0%B2%D0%BE-%D0%B8%D0%B3%D1%80%D0%BE%D0%BA%D0%BE%D0%B2-%D0%BD%D0%B0-%D0%94%D0%9C-%D0%B7%D0%BE%D0%BD%D0%B5&p=82638&viewfull=1#post82638). Код станет в разы проще и понятнее.

vovandolg
01.03.2017, 11:56
Во-вторых, что это за проверка такая? -_-

foreach(new i: Player)
{
if(ZashkvarPlayerIsJoinDM(i) == 1)
{
ты сам-то понимаешь как должна работать данная система? Судя по коду - не особо.

возьмём выше и посмотрим


if(DMJoinPeople == 1 && Zona[zOpened] == 0) // тут проверка на то что 1 человек остался
//далее тот код что выше где и до-обнуляется всё последнее


В общем то по сути там обнуления в этой проверке ZashkvarPlayerIsJoinDM,
что и должно быть если она будет = 1,
а если 0 то не затронет обнуление,
и тут не в этой проверке дело, проблема давно решена по сути,
просто кто то меняет постоянно код, а мы пишем его к старым версиям.

kala4iks
01.03.2017, 14:10
возьмём выше и посмотрим


if(DMJoinPeople == 1 && Zona[zOpened] == 0) // тут проверка на то что 1 человек остался
//далее тот код что выше где и до-обнуляется всё последнее


В общем то по сути там обнуления в этой проверке ZashkvarPlayerIsJoinDM,
что и должно быть если она будет = 1,
а если 0 то не затронет обнуление,
и тут не в этой проверке дело, проблема давно решена по сути,
просто кто то меняет постоянно код, а мы пишем его к старым версиям.

Ну так я делал как вы говорили, и не чего не помогло вот я и менял код,

И я создал команду что отнимает количество участников так она тоже не работает, работает только если прибавлять а если отнимать не работает.Скорей всего из за этого и не срабатывает победитель.

vovandolg
01.03.2017, 15:49
Ну так я делал как вы говорили, и не чего не помогло вот я и менял код,

И я создал команду что отнимает количество участников так она тоже не работает, работает только если прибавлять а если отнимать не работает.Скорей всего из за этого и не срабатывает победитель.

Кратко опишу твою систему изначально
1) благодаря тому что ты респавнил игрока ты ему сбивал флаг того что он в дм зоне(в итоге по дм зоне бегали мёртвые души)
2) в OnPlayerDeath и Disconnect у тебя обнуляторы стояли в конце(до этого я чувствую код не доходил), от чего бы тоже не отнималось

Но так как ты сейчас выложил третью версию своего кода, я понял что ты не ждёшь пока тебе дадут решение(и то верно, но на крайняк делал бы бекап, как ты видишь тут отвечают пока что и форум активный), поэтому даже ковыряться не охото смотреть что ты там снова начудил, все решения давно выше в комментариях были написаны, если конечно же ты не припрятал у себя там какой то каллбек который так же играет роль в этой проблеме.

kala4iks
01.03.2017, 16:58
Кратко опишу твою систему изначально
1) благодаря тому что ты респавнил игрока ты ему сбивал флаг того что он в дм зоне(в итоге по дм зоне бегали мёртвые души)
2) в OnPlayerDeath и Disconnect у тебя обнуляторы стояли в конце(до этого я чувствую код не доходил), от чего бы тоже не отнималось

Но так как ты сейчас выложил третью версию своего кода, я понял что ты не ждёшь пока тебе дадут решение(и то верно, но на крайняк делал бы бекап, как ты видишь тут отвечают пока что и форум активный), поэтому даже ковыряться не охото смотреть что ты там снова начудил, все решения давно выше в комментариях были написаны, если конечно же ты не припрятал у себя там какой то каллбек который так же играет роль в этой проблеме.

Я взял для теста другой мод и сделал эту систему в другом моде так вот там все работает, а в этом не хочет. отниматься участники.

vasyok28
01.03.2017, 17:21
Скорей всего у вас присутствует перехваты, либо выход за пределы массива. (прошу прощение если об этом здесь уже говорили)