2001union2001
Дебютант
Проблема: Когда я выдаю админку игроку , ему дается новый сгенерированный админ.пароль. Если игрок перезайдет - пароль слетает, а в mysql [accounts -> pDostup] так и стоит 0 вместо "того нужного" админ.пароля :bc: .
Скриншот структуры [pDostup]:
[Команда выдачи админки]:
[stock SaveAccounts()]:
[stock OnPlayerUpdateRL(playerid)]:
[stock OnPlayerLogin(playerid, password[])]:
[public OnPlayerDisconnect(playerid, reason)]:
Примечание:
1. Вместо OnPlayerUpdateRL(playerid); пробовал впиливать SaveAccount(): но толку не было.
2. Лог mysql чистый и лог сервера тоже.
3. Мне писали что переменная игрока объявлена как integer, а надо string, а т.е. сделать из нее массив. Но я гусь в павно :ao:
Скриншот структуры [pDostup]:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
(Не реклама :au: ).[Команда выдачи админки]:
PHP:
CMD:editadm(playerid,params[])
{
if(PlayerInfo[playerid][pAdmin] != 12) return true;
if(!IsPlayerConnected(playerid)) return true;
if(sscanf(params,"dd",params[0],params[1])) return SendClientMessage(playerid, COLOR_WHITE, "{FFA200}[Подсказка]: {FFFFFF} /editadm [id] [уровень]");
if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid,COLOR_WHITE,"Ошибка: Игрок не найден.");
if(params[1] > 12 || params[1] < 0) return SendClientMessage(playerid,COLOR_WHITE,"Ошибка: Нельзя меньше 1 и больше 12");
if(params[1] == 0)
{
PlayerInfo[params[0]][pAdmin] = 0;
PlayerInfo[params[0]][pDostup] = 0;
dostup[params[0]] = 0;
SendMes(params[0], COLOR_WHITE, "{6495ED}Администратор %s аннулировал Вам полномочия администратора!",PlayerInfo[playerid][pName]);
SendMes(playerid, COLOR_WHITE, "{6495ED}Аннулирование прав администратора у игрока %s прошло успешно.", PlayerInfo[params[0]][pName]);
OnPlayerUpdateRL(playerid);
return true;
}
PlayerInfo[params[0]][pAdmin] = params[1];
if(PlayerInfo[params[0]][pAdmin] != 0)
OnPlayerUpdateRL(playerid);
{
if(PlayerInfo[params[0]][pDostup] == 0 || PlayerInfo[params[0]][pDostup] == 2038) PlayerInfo[params[0]][pDostup] = 1000+random(8999);
}
if(PlayerInfo[params[0]][pAdmin] != 0)
{
if(PlayerInfo[params[0]][pDostup] == 0 || PlayerInfo[params[0]][pDostup] == 2038)
{
PlayerInfo[params[0]][pDostup] = 1000+random(8999);
OnPlayerUpdateRL(playerid);
}
}
else PlayerInfo[params[0]][pDostup] = 0;
format(stringer1, sizeof(stringer1), "%s назначил(а) Вас администраторам %d ранга. Ваш админ-пароль: %d", PlayerInfo[playerid][pName], params[1],PlayerInfo[params[0]][pDostup]);
SendClientMessage(params[0], COLOR_ORANGE, "Вас назначили на административные права, чтобы узнать команды введите: /ahelp");
SendClientMessage(params[0], COLOR_ORANGE,stringer1);
format(stringer1, sizeof(stringer1), "Вы назначили %s администратором %d ранга", PlayerInfo[params[0]][pName], params[1]);
SendClientMessage(playerid, COLOR_ORANGE,stringer1);
OnPlayerUpdateRL(playerid);
return true;
}
PHP:
stock SaveAccounts()
{
PlayerForeach(i) { if(IsPlayerConnected(i)) OnPlayerUpdateRL(i); }
}
PHP:
stock OnPlayerUpdateRL(playerid)
{
if(gPlayerLogged[playerid] == 1 && IsPlayerConnected(playerid))
{
if(saveplayer[playerid] != 0) return true;
saveplayer[playerid] = 5;
new sendername[24];
GetPlayerName(playerid,sendername,24);
new str[2048];
format(str,sizeof(str),"UPDATE `"TABLE_ACCOUNT"` SET `pLevel` = '%d',`pPhousekey` = '%d',`pPbiskey` = '%d',`pPsbiskey` = '%d',`pAdmin` = '%d',`pFuelcar` = '%f',`pHeadValue` = '%d',`pContract` = '%d',`pCar` = '%d',`pHelper` = '%d', ",
PlayerInfo[playerid][pLevel],
PlayerInfo[playerid][pPhousekey],PlayerInfo[playerid][pPbiskey],
PlayerInfo[playerid][pPsbiskey],PlayerInfo[playerid][pAdmin],
PlayerInfo[playerid][pFuelcar],
PlayerInfo[playerid][pHeadValue],PlayerInfo[playerid][pContract],
PlayerInfo[playerid][pCar], PlayerInfo[playerid][pHelper]);
format(str,sizeof(str),"%s `pDonatemoney2` = '%d', `pDonateAdd` = '%d', `pPodarok` = '%d', `pDonateRank` = '%d',`pDonateRankTime` = '%d',`pReg` = '%d',`pSex` = '%d',`pMuted` = '%d',`pExp` = '%d',`pCash` = '%d',`pJailed` = '%d',`pJailTime` = '%d',`pMats` = '%d',`pDrugs` = '%d',`pLeader` = '%d',`pMember` = '%d', ",str,
PlayerInfo[playerid][pDonatemoney2],PlayerInfo[playerid][pDonateAdd], PlayerInfo[playerid][pPodarok],
PlayerInfo[playerid][pDonateRank],PlayerInfo[playerid][pDonateRankTime],
PlayerInfo[playerid][pReg],PlayerInfo[playerid][pSex],
PlayerInfo[playerid][pMuted],PlayerInfo[playerid][pExp],
PlayerInfo[playerid][pCash],
PlayerInfo[playerid][pJailed],PlayerInfo[playerid][pJailTime],
PlayerInfo[playerid][pMats],PlayerInfo[playerid][pDrugs],
PlayerInfo[playerid][pLeader],PlayerInfo[playerid][pMember]);
format(str,sizeof(str),"%s `pRank` = '%d',`pJob` = '%d',`pVodPrava` = '%d',`pBizLic` = '%d',`pFlyLic` = '%d',`pBoatLic` = '%d',`pFishLic` = '%d',`pGunLic` = '%d', ",str,
PlayerInfo[playerid][pRank],PlayerInfo[playerid][pJob],
PlayerInfo[playerid][pVodPrava],PlayerInfo[playerid][pBizLic],
PlayerInfo[playerid][pFlyLic],PlayerInfo[playerid][pBoatLic],
PlayerInfo[playerid][pFishLic],PlayerInfo[playerid][pGunLic]);
format(str,sizeof(str),"%s `pSDPistol` = '%d',`pDesertEagle` = '%d',`pShotGun` = '%d',`pMP5` = '%d',`pAK47` = '%d',`pM4` = '%d',`pChar` = '%d',`pModel` = '%d', `pBankPass` = '%d', `pBankKart` = '%d', ",str,
PlayerInfo[playerid][pSDPistol],
PlayerInfo[playerid][pDesertEagle],PlayerInfo[playerid][pShotGun],
PlayerInfo[playerid][pMP5],PlayerInfo[playerid][pAK47],
PlayerInfo[playerid][pM4],PlayerInfo[playerid][pChar],
PlayerInfo[playerid][pModel], PlayerInfo[playerid][pBankPass], PlayerInfo[playerid][pBankKart]);
format(str,sizeof(str),"%s `pPnumber` = '%d',`pPayDayHad` = '%d',`pWarns` = '%d',`punWarns` = '%d',`punWarnstime` = '%d',`pFuel` = '%d',`pRobTime` = '%d',`pExitTied` = '%d',`pExitTiedNomer` = '%d',`pGrabSkill` = '%d',`pGrabTime` = '%d',`pReportTime` = '%d',`pVerevka` = '%d',`pOtmbI4ka` = '%d',`pAutoTime` = '%d', ",str,
PlayerInfo[playerid][pPnumber],PlayerInfo[playerid][pPayDayHad],
PlayerInfo[playerid][pWarns],PlayerInfo[playerid][punWarns],
PlayerInfo[playerid][punWarnstime],PlayerInfo[playerid][pFuel],
PlayerInfo[playerid][pRobTime],PlayerInfo[playerid][pExitTied],
PlayerInfo[playerid][pExitTiedNomer],PlayerInfo[playerid][pGrabSkill],
PlayerInfo[playerid][pGrabTime],PlayerInfo[playerid][pReportTime],
PlayerInfo[playerid][pVerevka],
PlayerInfo[playerid][pOtmbI4ka],PlayerInfo[playerid][pAutoTime]);
format(str,sizeof(str),"%s `pAutoSkill` = '%d',`pMarried` = '%d',`pMuteTime` = '%d',`pMobile` = '%d',`pBank` = '%d',`pLocked2` = '%d',`pBoxSkill` = '%d',`pKongfuSkill` = '%d',`pKickboxSkill` = '%d',`pFightSkill` = '%d',`pFightSkil` = '%d',`pFightTime` = '%d',`pHospital` = '%d' = '%d',`pDostup` = '%d',`pZakonp` = '%d', ",str,
PlayerInfo[playerid][pAutoSkill],PlayerInfo[playerid][pMarried],
PlayerInfo[playerid][pMuteTime],PlayerInfo[playerid][pMobile],
PlayerInfo[playerid][pBank],PlayerInfo[playerid][pLocked2],
PlayerInfo[playerid][pBoxSkill],PlayerInfo[playerid][pKongfuSkill],
PlayerInfo[playerid][pKickboxSkill],PlayerInfo[playerid][pFightSkill],
PlayerInfo[playerid][pFightSkil],PlayerInfo[playerid][pFightTime],
PlayerInfo[playerid][pDostup],PlayerInfo[playerid][pZakonp]);
format(str,sizeof(str),"%s `pBanTime1` = '%d',`pBanData1` = '%d',`pVipTime` = '%d',`pHouse` = '%d',`pVipData` = '%d',`pBanKol` = '%d',`pNarcoLomka` = '%d',`pProz` = '%d',`pKolesocar` = '%d',`pPokraska` = '%d',`pSpoiler` = '%d',`pHood` = '%d',`pExhaust` = '%d',`pLamps` = '%d',`pSideskirt` = '%d',`pVozdyx` = '%d',`pVcol1` = '%d',`pVcol2` = '%d',`pBamper1` = '%d',`pBamper2` = '%d', ",str,
PlayerInfo[playerid][pBanTime1],PlayerInfo[playerid][pBanData1],
PlayerInfo[playerid][pVipTime],PlayerInfo[playerid][pHouse],
PlayerInfo[playerid][pVipData],PlayerInfo[playerid][pBanKol],
PlayerInfo[playerid][pNarcoLomka],PlayerInfo[playerid][pProz],
PlayerInfo[playerid][pKolesocar],PlayerInfo[playerid][pPokraska],
PlayerInfo[playerid][pSpoiler],PlayerInfo[playerid][pHood],
PlayerInfo[playerid][pExhaust],PlayerInfo[playerid][pLamps],
PlayerInfo[playerid][pSideskirt],PlayerInfo[playerid][pVozdyx],
PlayerInfo[playerid][pVcol1],PlayerInfo[playerid][pVcol2],
PlayerInfo[playerid][pBamper1],PlayerInfo[playerid][pBamper2]);
format(str,sizeof(str),"%s `pNitro` = '%d',`pGidra` = '%d',`pMestoJail` = '%d',`pWanted` = '%d',`pHousecash` = '%d',`pTut` = '%d',`pNumbercar` = '%s',`pIpReg` = '%s' WHERE `Name` = '%s'",str,
PlayerInfo[playerid][pNitro],PlayerInfo[playerid][pGidra],PlayerInfo[playerid][pMestoJail],
PlayerInfo[playerid][pWanted],PlayerInfo[playerid][pHousecash],
PlayerInfo[playerid][pTut],PlayerInfo[playerid][pNumbercar],
PlayerInfo[playerid][pIpReg],sendername);
mysql_function_query(dbHandle, str, false, "", "");
printf("Аккаунт %s был успешно сохранен.(%d)",sendername,strlen(str));
}
else printf("[ERROR] Ошибка сохранения.");
return 1;
}
PHP:
stock OnPlayerLogin(playerid, password[])
{
new sendername[24];
GetPlayerName(playerid,sendername,24);
mysql_format(dbHandle,QUERY,sizeof(QUERY),"SELECT * FROM `"TABLE_ACCOUNT"` WHERE `Name` = '%s' AND `pKey` = '%e'", sendername, password);
mysql_function_query(dbHandle, QUERY, true, "LoginCallback","ds", playerid, password);
return true;
}
PHP:
public OnPlayerDisconnect(playerid, reason)
{
if(GetPVarInt(playerid, "Kick") != 0) KillTimer(GetPVarInt(playerid, "Kick"));
for (new cmdid; cmdid < MAX_CMDS; cmdid++) if(AntiFlood[playerid][cmdid] > 0) AntiFlood[playerid][cmdid] = 0;
if(activemusic[playerid] == true)
{
activemusic[playerid] = false;
StopAudioStreamForPlayer(playerid);
}
KillTimer(RTimer[playerid]);
if(tChainSaw[playerid] != -1) KillTimer(tChainSaw[playerid]), tChainSaw[playerid] = -1;
PlayerTextDrawDestroy(playerid,CarSpeed[playerid]);
PlayerTextDrawDestroy(playerid,CarFuel[playerid]);
PlayerTextDrawDestroy(playerid,CarMilliage[playerid]);
PlayerTextDrawDestroy(playerid,CarLights[playerid]);
PlayerTextDrawDestroy(playerid,CarEngine[playerid]);
TextDrawHideForPlayer(playerid, SBox);
Delete3DTextLabel(AdminText3D[playerid]);
IsConnected{playerid} = 0;
if(TeamPain[playerid] == 1) BluePlayer--;
if(TeamPain[playerid] == 2) RedPlayer--;
TeamPain[playerid] = 0;
KillPain[playerid] = 0;
DeathPain[playerid] = 0;
if(IsACop(playerid)) zakonn --;
if(PlantObject[playerid] != -1)
{
DestroyObject(PlantObject[playerid]);
PlantObject[playerid] = -1;
}
if(ContractInfo[playerid][cHitman] != INVALID_PLAYER_ID)
{
if(IsPlayerConnected(ContractInfo[playerid][cHitman]))
{
SendMes(ContractInfo[playerid][cHitman],COLOR_YELLOW,"~~~ Жертва %s[%d] вышла из игры ~~~", PlayerInfo[playerid][pName],playerid);
ContractInfo[ContractInfo[playerid][cHitman]][cZakaz] = INVALID_PLAYER_ID;
}
}
if(PlayerInfo[playerid][pAdmin] > 0)
{
format(stringer1, sizeof(stringer1), "[A] вышел %s [lvl: %d]",PlayerInfo[playerid][pName],PlayerInfo[playerid][pAdmin]);
Delete3DTextLabel(AdminText3D[playerid]);
ABroadCast(0xF4B800AA,stringer1,1);
}
mysql_format(dbHandle, QUERY, sizeof(QUERY), "UPDATE `"TABLE_ACCOUNT"` SET `pOnline` = '1001' WHERE `Name` = '%s'",PlayerInfo[playerid][pName]);
mysql_function_query(dbHandle, QUERY, false, "", "");
ResetCarInfo(playerid);
if(PlayerCuffed[playerid] > 0 && PlayerInfo[playerid][pWanted] > 0 || Tazer[playerid] > 0 && PlayerInfo[playerid][pWanted] > 0)
{
PlayerInfo[playerid][pJailTime] = PlayerInfo[playerid][pWanted]*600;
PlayerInfo[playerid][pJailed] = 1;
PlayerInfo[playerid][pCash] -= 1000000;
PlayerInfo[playerid][pMestoJail] = 2;
}
if(GetPVarInt(playerid,"GzOn") == 1)
{
SetPVarInt(playerid,"GzOn",0);
PlayerTextDrawDestroy(playerid, BandaCapt1a[playerid]);
PlayerTextDrawDestroy(playerid, BandaCapt2a[playerid]);
PlayerTextDrawDestroy(playerid, ScoreCapt1a[playerid]);
PlayerTextDrawDestroy(playerid, ScoreCapt2a[playerid]);
PlayerTextDrawDestroy(playerid, ScoreCaptTire[playerid]);
PlayerTextDrawDestroy(playerid, CaptTime[playerid]);
PlayerTextDrawDestroy(playerid, ScoreCapt[playerid]);
PlayerTextDrawDestroy(playerid, Textdraw4[playerid]);
}
if(RB[playerid] != 255)
{
DestroyDynamicObject(BlockPost[RB[playerid]]);
DestroyDynamic3DTextLabel(Block3D[RB[playerid]]);
RB[playerid] = 255;
rbtime[playerid] = 0;
}
if(PlayerTied[playerid] > 0)
{
format(stringer1, sizeof(stringer1), " %s вышел из игры при похищении, данный игрок будет наказан.", PlayerInfo[playerid][pName]);
SendClientMessageToAll(COLOR_LIGHTRED, stringer1);
PlayerInfo[playerid][pExitTied]++;
PlayerInfo[playerid][pExitTiedNomer] = 1;
}
CancelSelectTextDraw(playerid);
if(boy[playerid] == 1)
{
ring = 0;
boy[playerid] = 0;
boy[fightid[playerid]] = 0;
TimeBox[playerid] = 0;
TimeBoxAll[playerid] = 0;
TimeBox[fightid[playerid]] = 0;
TimeBoxAll[fightid[playerid]] = 0;
SetPlayerPos(fightid[playerid],770.7488,6.9432,1000.7118);
SetPlayerFacingAngle(fightid[playerid], 90.0);
switch(PlayerInfo[fightid[playerid]][pFightSkil])
{
case 0..49: PlayerInfo[fightid[playerid]][pFightSkil]++, PlayerInfo[fightid[playerid]][pFightTime]= 600;
case 50: PlayerInfo[fightid[playerid]][pFightSkill]++, PlayerInfo[fightid[playerid]][pFightTime]= 600;
case 51..99: PlayerInfo[fightid[playerid]][pFightSkil]++, PlayerInfo[fightid[playerid]][pFightTime]= 540;
case 100: PlayerInfo[fightid[playerid]][pFightSkill]++, PlayerInfo[fightid[playerid]][pFightTime]= 540;
case 101..149: PlayerInfo[fightid[playerid]][pFightSkil]++, PlayerInfo[fightid[playerid]][pFightTime]= 480;
case 150: PlayerInfo[fightid[playerid]][pFightSkill]++, PlayerInfo[fightid[playerid]][pFightTime]= 480;
case 151..199: PlayerInfo[fightid[playerid]][pFightSkil]++, PlayerInfo[fightid[playerid]][pFightTime]= 420;
case 200: PlayerInfo[fightid[playerid]][pFightSkill]++, PlayerInfo[fightid[playerid]][pFightTime]= 420;
}
SendMes(fightid[playerid],COLOR_LIGHTRED," Ваш противник вышел из игры на ринге. Время до след. боя: %d секунд", PlayerInfo[fightid[playerid]][pFightTime]);
PlayerInfo[playerid][pFightTime] = 600;
fightid[playerid] = INVALID_PLAYER_ID;
fightid[fightid[playerid]] = INVALID_PLAYER_ID;
TogglePlayerControllable(fightid[playerid], 0);
}
PlayerForeach(i)
{
if(GetPlayerState(i) == PLAYER_STATE_SPECTATING && gSpectateID[i] == playerid)
{
StopSpectate(i);
SetPlayerHealth(i, 100);
GameTextForPlayer(i,"~w~RECON ~r~ OFF~n~ ~r~PLAYER DISCONNECT", 5000, 3);
}
}
if(PlayerInfo[playerid][pJob] == 2)
{
if(gcontract[playerid] == 1)
{
Delete3DTextLabel(Meh3d[GetPlayerVehicleID(playerid)]);
gcontract[playerid] = 0;
}
}
if(PlayerInfo[playerid][pPhousekey] !=255)
{
PlayerInfo[playerid][pProz] = PlayerInfo[playerid][pProz];
if(caridhouse[playerid] != 0)
{
DestroyVehicle(caridhouse[playerid]);
caridhouse[playerid] = 0;
}
}
new playersip[16];
new year, month,day;
zips[playerid] = 0;
getdate(year, month, day);
new hour, minute, second;
gettime(hour, minute, second);
GetPlayerIp(playerid,playersip,sizeof(playersip));
if(IsPlayerAttachedObjectSlotUsed(playerid,1)) RemovePlayerAttachedObject(playerid,1);
if(SelectChar[playerid] == INVALID_PLAYER_ID)
{
SetPlayerSkin(playerid, OldSkin[playerid]);
PlayerInfo[playerid][pChar] = OldSkin[playerid];
SelectChar[playerid] = 0;
}
OnPlayerUpdateRL(playerid);
tune[playerid] = 0;
soglasen[playerid] = 0;
SelectCharPlace[playerid] = 0;
CharPrice[playerid] = 0;
SelectCharID[playerid] = 0;
SelectChar[playerid] = 0;
PicCP[playerid] = 0;
takephone[playerid] = 0;
gag[playerid] = 0;
dostup[playerid] = 0;
PicCP[playerid] = 0;
enterbiz[playerid] = 0;
PlayerInfo[playerid][pDrugtime] = 0;
PlayerInfo[playerid][pGunfbiTime] = 0;
forma[playerid] = 0;
proverkaforma[playerid] = 0;
keys[playerid] = 0;
SetPlayerSkills(playerid);
SelectCharPlace[playerid] = 0;
CharPrice[playerid] = 0;
SelectCharID[playerid] = 0;
SelectChar[playerid] = 0;
if(TransportDuty[playerid] == 1) TaxiDrivers -= 1;
if(PlayerInfo[playerid][pMember] == 4) Medics -= 1;
if(PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pMember] == 10 || PlayerInfo[playerid][pMember] == 21 ) Police +=1;
else if(PlayerInfo[playerid][pJob] == 2) Mechanics -= 1;
if(TransportCost[playerid] > 0 && TransportDriver[playerid] != INVALID_PLAYER_ID)
{
if(IsPlayerConnected(TransportDriver[playerid]))
{
TransportMoney[TransportDriver[playerid]] += TransportCost[playerid];
TransportTime[TransportDriver[playerid]] = 0;
TransportCost[TransportDriver[playerid]] = 0;
format(stringer1, sizeof(stringer1), "~g~+%d",TransportCost[playerid]);
GameTextForPlayer(TransportDriver[playerid], stringer1, 5000, 1);
}
}
return true;
}
1. Вместо OnPlayerUpdateRL(playerid); пробовал впиливать SaveAccount(): но толку не было.
2. Лог mysql чистый и лог сервера тоже.
3. Мне писали что переменная игрока объявлена как integer, а надо string, а т.е. сделать из нее массив. Но я гусь в павно :ao:
Последнее редактирование:
