Wow - echt cool, eine komplett hirnlose Blacklist zu erstellen und darauf ein paar User zu beleidigen, die einen höheren IQ als sie besitzen...
Beiträge von Crash129
-
-
Würde ich dich im RL kennen, würde ich dir auf die Schulter klopfen
-
Im Krankenhaus bekommste sogar nen Lollipop.
Ich glaube er ist wirklich auf den Kopf gefallen, das er nicht ins Krankenhaus geht... -
Wodka hat en bisschen wenig Prozent. Da such mal lieber was stärkeres zum Desinfizieren. Schön wegbrennen alles.
Wodka ist besser als nichts (Und schmeckt ein wenig besser als Wundalkohol)
-
Kipp Wodka drüber. Hilft aufjedenfall. Wenns brennt hast du alles richtig gemacht mein Junge
(Trink vorher lieber ein wenig dann tuts nicht so weh) -
Ooooooooooooooooooooooh jetzt können die armen Kiddies die zu wenig Geld hab das Spiel nicht mehr gekrackt online spielen anstatt es sich zu kaufen Oooooooooooooooooooooooooooooohhh :'-(
Da bin ich aber wirklich traurig ...
/ironie off
Es geht nur darum, das es in AlterIW gecrackte Server gab.
Nur, weil man keine 60€ für ein 3 Jahre altes Spiel ausgeben will, oder den Nachfolger (der im Prinzip genau das selbe ist und kaum Änderungen aufweist) nicht kaufen möchte, heißt das nicht, das man ein Kiddy ist und/oder kein Geld hat. -
Ok ich möchte auf dieses Plugin umsteigen, aber ich kenn mich nicht so mit MySQL aus und wollte fragen, was in diesem Plugin samp_mysql_strtok ist...
-
Standard Moderntopia halt
Zitatif (strcmp(cmd, "/login", true) ==0 )
{
if(IsPlayerConnected(playerid))
{
new tmppass[64];
if(gPlayerLogged[playerid] == 1)
{
SendClientMessage(playerid, TEAM_AZTECAS_COLOR, "SERVER: You are already logged in.");
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, TEAM_AZTECAS_COLOR, "USAGE: /login [password]");
return 1;
}
//Encrypt(tmp);
OnPlayerLogin(playerid,tmp);
}
return 1;
}Zitatpublic OnPlayerLogin(playerid,password[]) // by Luk0r v1.0
{
MySQLCheckConnection();
new tmp2[256];
new string2[64];
new playername2[MAX_PLAYER_NAME];
new playernamesplit[3][MAX_PLAYER_NAME];
GetPlayerName(playerid, playername2, sizeof(playername2));
split(playername2, playernamesplit, '_');
MySQLFetchAcctSingle(PlayerInfo[playerid][pSQLID], "Password", PlayerInfo[playerid][pKey]);
if(strcmp(PlayerInfo[playerid][pKey],password, true ) == 0 )
{
new Data[1024];
new Field[64];
new rcnt = 1;
MySQLFetchAcctRecord(PlayerInfo[playerid][pSQLID], Data);
samp_mysql_strtok(Field, "|", Data);
while (samp_mysql_strtok(Field, "|", "")==1)
{
if (rcnt == 3) PlayerInfo[playerid][pLevel] = strval(Field);
if (rcnt == 4) PlayerInfo[playerid][pAdmin] = strval(Field);
if (rcnt == 5) PlayerInfo[playerid][pDonateRank] = strval(Field);
if (rcnt == 6) PlayerInfo[playerid][gPupgrade] = strval(Field);
if (rcnt == 7) PlayerInfo[playerid][pConnectTime] = strval(Field);
if (rcnt == PlayerInfo[playerid][pReg] = strval(Field);
if (rcnt == 9) PlayerInfo[playerid][pSex] = strval(Field);
if (rcnt == 10) PlayerInfo[playerid][pAge] = strval(Field);
if (rcnt == 11) PlayerInfo[playerid][pOrigin] = strval(Field);
if (rcnt == 12) PlayerInfo[playerid][pCK] = strval(Field);
if (rcnt == 13) PlayerInfo[playerid][pMuted] = strval(Field);
if (rcnt == 14) PlayerInfo[playerid][pExp] = strval(Field);
if (rcnt == 15) PlayerInfo[playerid][pCash] = strval(Field);
if (rcnt == 16) PlayerInfo[playerid][pAccount] = strval(Field);
if (rcnt == 17) PlayerInfo[playerid][pCrimes] = strval(Field);
if (rcnt == 18) PlayerInfo[playerid][pKills] = strval(Field);
if (rcnt == 19) PlayerInfo[playerid][pDeaths] = strval(Field);
if (rcnt == 20) PlayerInfo[playerid][pArrested] = strval(Field);
if (rcnt == 21) PlayerInfo[playerid][pWantedDeaths] = strval(Field);
if (rcnt == 22) PlayerInfo[playerid][pPhoneBook] = strval(Field);
if (rcnt == 23) PlayerInfo[playerid][pLottoNr] = strval(Field);
if (rcnt == 24) PlayerInfo[playerid][pFishes] = strval(Field);
if (rcnt == 25) PlayerInfo[playerid][pBiggestFish] = strval(Field);
if (rcnt == 26) PlayerInfo[playerid][pJob] = strval(Field);
if (rcnt == 27) PlayerInfo[playerid][pPayCheck] = strval(Field);
if (rcnt == 28) PlayerInfo[playerid][pHeadValue] = strval(Field);
if (rcnt == 29) PlayerInfo[playerid][pJailed] = strval(Field);
if (rcnt == 30) PlayerInfo[playerid][pJailTime] = strval(Field);
if (rcnt == 31) PlayerInfo[playerid][pMats] = strval(Field);
if (rcnt == 32) PlayerInfo[playerid][pDrugs] = strval(Field);
if (rcnt == 33) PlayerInfo[playerid][pLeader] = strval(Field);
if (rcnt == 34) PlayerInfo[playerid][pMember] = strval(Field);
if (rcnt == 35) PlayerInfo[playerid][pFMember] = strval(Field);
if (rcnt == 36) PlayerInfo[playerid][pRank] = strval(Field);
if (rcnt == 37) PlayerInfo[playerid][pChar] = strval(Field);
if (rcnt == 38) PlayerInfo[playerid][pContractTime] = strval(Field);
if (rcnt == 39) PlayerInfo[playerid][pDetSkill] = strval(Field);
if (rcnt == 40) PlayerInfo[playerid][pSexSkill] = strval(Field);
if (rcnt == 41) PlayerInfo[playerid][pBoxSkill] = strval(Field);
if (rcnt == 42) PlayerInfo[playerid][pLawSkill] = strval(Field);
if (rcnt == 43) PlayerInfo[playerid][pMechSkill] = strval(Field);
if (rcnt == 44) PlayerInfo[playerid][pJackSkill] = strval(Field);
if (rcnt == 45) PlayerInfo[playerid][pCarSkill] = strval(Field);
if (rcnt == 46) PlayerInfo[playerid][pNewsSkill] = strval(Field);
if (rcnt == 47) PlayerInfo[playerid][pDrugsSkill] = strval(Field);
if (rcnt == 48) PlayerInfo[playerid][pCookSkill] = strval(Field);
if (rcnt == 49) PlayerInfo[playerid][pFishSkill] = strval(Field);
if (rcnt == 50) PlayerInfo[playerid][pSHealth] = floatstr(Field);
if (rcnt == 51) PlayerInfo[playerid][pHealth] = floatstr(Field);
if (rcnt == 52) PlayerInfo[playerid][pInt] = strval(Field);
if (rcnt == 53) PlayerInfo[playerid][pLocal] = strval(Field);
if (rcnt == 54) PlayerInfo[playerid][pTeam] = strval(Field);
if (rcnt == 55) PlayerInfo[playerid][pModel] = strval(Field);
if (rcnt == 56) PlayerInfo[playerid][pPnumber] = strval(Field);
if (rcnt == 57) PlayerInfo[playerid][pPhousekey] = strval(Field);
if (rcnt == 58) PlayerInfo[playerid][pPcarkey] = strval(Field);
if (rcnt == 59) PlayerInfo[playerid][pPapptkey] = strval(Field);
if (rcnt == 60) PlayerInfo[playerid][pPbiskey] = strval(Field);
if (rcnt == 61) PlayerInfo[playerid][pPos_x] = floatstr(Field);
if (rcnt == 62) PlayerInfo[playerid][pPos_y] = floatstr(Field);
if (rcnt == 63) PlayerInfo[playerid][pPos_z] = floatstr(Field);
if (rcnt == 64) PlayerInfo[playerid][pCarLic] = strval(Field);
if (rcnt == 65) PlayerInfo[playerid][pFlyLic] = strval(Field);
if (rcnt == 66) PlayerInfo[playerid][pBoatLic] = strval(Field);
if (rcnt == 67) PlayerInfo[playerid][pFishLic] = strval(Field);
if (rcnt == 68) PlayerInfo[playerid][pGunLic] = strval(Field);
if (rcnt == 69) PlayerInfo[playerid][pGun1] = strval(Field);
if (rcnt == 70) PlayerInfo[playerid][pGun2] = strval(Field);
if (rcnt == 71) PlayerInfo[playerid][pGun3] = strval(Field);
if (rcnt == 72) PlayerInfo[playerid][pGun4] = strval(Field);
if (rcnt == 73) PlayerInfo[playerid][pAmmo1] = strval(Field);
if (rcnt == 74) PlayerInfo[playerid][pAmmo2] = strval(Field);
if (rcnt == 75) PlayerInfo[playerid][pAmmo3] = strval(Field);
if (rcnt == 76) PlayerInfo[playerid][pAmmo4] = strval(Field);
if (rcnt == 77) PlayerInfo[playerid][pCarTime] = strval(Field);
if (rcnt == 78) PlayerInfo[playerid][pPayDay] = strval(Field);
if (rcnt == 79) PlayerInfo[playerid][pPayDayHad] = strval(Field);
if (rcnt == 80) PlayerInfo[playerid][pCDPlayer] = strval(Field);
if (rcnt == 81) PlayerInfo[playerid][pWins] = strval(Field);
if (rcnt == 82) PlayerInfo[playerid][pLoses] = strval(Field);
if (rcnt == 83) PlayerInfo[playerid][pAlcoholPerk] = strval(Field);
if (rcnt == 84) PlayerInfo[playerid][pDrugPerk] = strval(Field);
if (rcnt == 85) PlayerInfo[playerid][pMiserPerk] = strval(Field);
if (rcnt == 86) PlayerInfo[playerid][pPainPerk] = strval(Field);
if (rcnt == 87) PlayerInfo[playerid][pTraderPerk] = strval(Field);
if (rcnt == 88) PlayerInfo[playerid][pTut] = strval(Field);
if (rcnt == 89) PlayerInfo[playerid][pMissionNr] = strval(Field);
if (rcnt == 90) PlayerInfo[playerid][pWarns] = strval(Field);
if (rcnt == 91) PlayerInfo[playerid][pAdjustable] = strval(Field);
if (rcnt == 92) PlayerInfo[playerid][pFuel] = strval(Field);
if (rcnt == 93) PlayerInfo[playerid][pMarried] = strval(Field);
if (rcnt == 94) PlayerInfo[playerid][pMarriedTo] = strmid(PlayerInfo[playerid][pMarriedTo], Field, 0, strlen(Field)-1, 255);
if (rcnt == 96) PlayerInfo[playerid][pLinked] = strval(Field);
if (rcnt == 97) PlayerInfo[playerid][pDeagle] = strval(Field);
if (rcnt == 98) PlayerInfo[playerid][pShotgun] = strval(Field);
if (rcnt == 99) PlayerInfo[playerid][pRifle] = strval(Field);
if (rcnt == 100) PlayerInfo[playerid][pSDPistol] = strval(Field);
if (rcnt == 101) PlayerInfo[playerid][pMP5] = strval(Field);
if (rcnt == 102) PlayerInfo[playerid][pM4] = strval(Field);
if (rcnt == 103) PlayerInfo[playerid][pAK47] = strval(Field);
rcnt++;
}
samp_mysql_free_result();
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "SERVER: Password does not match your name.");
//fclose(UserFile);
gPlayerLogTries[playerid] += 1;
if(gPlayerLogTries[playerid] == 4) { Ban(playerid); }
return 1;
}
PlayerInfo[playerid][pAdjustable] = 0;
SafeResetPlayerMoney(playerid);
//ConsumingMoney[playerid] = 1;
//CurrentMoney[playerid] = PlayerInfo[playerid][pCash];
SafeGivePlayerMoney(playerid,PlayerInfo[playerid][pCash]);SafeGivePlayerWeapon(playerid,24,PlayerInfo[playerid][pDeagle]);
SafeGivePlayerWeapon(playerid,25,PlayerInfo[playerid][pShotgun]);
SafeGivePlayerWeapon(playerid,33,PlayerInfo[playerid][pRifle]);
SafeGivePlayerWeapon(playerid,23,PlayerInfo[playerid][pSDPistol]);
SafeGivePlayerWeapon(playerid,29,PlayerInfo[playerid][pMP5]);
SafeGivePlayerWeapon(playerid,31,PlayerInfo[playerid][pM4]);
SafeGivePlayerWeapon(playerid,30,PlayerInfo[playerid][pAK47]);if(PlayerInfo[playerid][pReg] == 0)
{
PlayerInfo[playerid][pLevel] = 1;
PlayerInfo[playerid][pSHealth] = 0.0;
PlayerInfo[playerid][pHealth] = 50.0;
PlayerInfo[playerid][pPos_x] = 2246.6;
PlayerInfo[playerid][pPos_y] = -1161.9;
PlayerInfo[playerid][pPos_z] = 1029.7;
PlayerInfo[playerid][pInt] = 15;
PlayerInfo[playerid][pLocal] = 255;
PlayerInfo[playerid][pTeam] = 3;
PlayerInfo[playerid][pModel] = 135;
new randphone = 100000 + random(899999);//minimum 1000 max 9999 //giving one at the start
PlayerInfo[playerid][pPnumber] = randphone;
PlayerInfo[playerid][pPhousekey] = 255;
PlayerInfo[playerid][pPcarkey] = 999;
PlayerInfo[playerid][pPapptkey] = 255;
PlayerInfo[playerid][pPbiskey] = 255;
PlayerInfo[playerid][pAccount] = 0;
PlayerInfo[playerid][pReg] = 1;
SafeGivePlayerMoney(playerid, 500);
}
if(PlayerInfo[playerid][pLevel] == -999) //autoban
{
Ban(playerid);
}
else if(PlayerInfo[playerid][pCK] > 0)
{
Kick(playerid);
}
// Add an entry to the login log
new ipaddress[16];
GetPlayerIp(playerid,ipaddress,sizeof(ipaddress));
MySQLAddLoginRecord(PlayerInfo[playerid][pSQLID], ipaddress);
ClearChatbox(playerid, 8);
format(string2, sizeof(string2), "Server: Welcome to the State of San Andreas, %s.",playernamesplit[0]);
SendClientMessage(playerid, COLOR_WHITE, string2);
SendClientMessage(playerid, COLOR_WHITE, " ");
printf("%s has logged in.",playername2);
if (PlayerInfo[playerid][pDonateRank] > 0)
{
SendClientMessage(playerid, COLOR_WHITE,"People of LS: Thank you for donating so we can live!");
}
if (PlayerInfo[playerid][pAdmin] > 0)
{
format(string2, sizeof(string2), "SERVER: You are logged in as a Level %d Admin.",PlayerInfo[playerid][pAdmin]);
SendClientMessage(playerid, COLOR_WHITE,string2);
}
if (PlayerInfo[playerid][pLinked] == 0)
{
SendClientMessage(playerid, COLOR_LIGHTRED, "WARNING: Your character is not linked to a website account! Register on moderntopia.com or some features will be restricted!");
}
// Reset the FirstSpawn variable
SetTimerEx("UnsetFirstSpawn", 5000, false, "i", playerid);
SetSpawnInfo(playerid, PlayerInfo[playerid][pTeam], PlayerInfo[playerid][pModel], PlayerInfo[playerid][pPos_x], PlayerInfo[playerid][pPos_y], PlayerInfo[playerid][pPos_z], 1.0, -1, -1, -1, -1, -1, -1);
if(gTeam[playerid] == 0)
{
gTeam[playerid] = 3;
}
else
{
gTeam[playerid] = PlayerInfo[playerid][pTeam];
}
gPlayerLogged[playerid] = 1;
SpawnPlayer(playerid);
format(tmp2, sizeof(tmp2), "~w~Welcome ~n~~y~ %s", playername2);
DateProp(playerid);
GameTextForPlayer(playerid, tmp2, 5000, 1);
//SendClientMessage(playerid, COLOR_YELLOW, motd);
if(PlayerInfo[playerid][pFMember] < 255)
{
format(tmp2, sizeof(tmp2), "Family MOTD: %s.", FamilyInfo[PlayerInfo[playerid][pFMember]][FamilyMOTD]);
SendClientMessage(playerid, COLOR_YELLOW, tmp2);
}
//}
return 1;
} -
Hey,
Ich möchte das Moderntopia Script weiterverwenden als Anfangsscript für einen SA-MP Server. So nun mein Problem:
Ich hab das Script erstmal unverändert gelassen, nur die MySQL Daten eingetragen (Ich benutze WAMP Server). Als ich danach versucht habe, mich zu registrieren hat dies auch funktioniert aber als ich dann /login eingegeben hab, hat sich der Server geschlossenZitat[14:50:24] Incoming connection: 127.0.0.1:52167
[14:50:25] [join] Crash129 has joined the server (0:127.0.0.1)
Danach ist Ende...
In der DB ist mein Account auch abgespeichert aber wenn ich jetzt auf den Server joine crasht er schon.
Woran liegt das?
Dieses Plugin nutze ich für MySQL -
Der is net so Buggy und erstellt nur EIN log
-
Hey,
Also wenn man einen Debian VServer hat und dann einen Windows Server (SAMP) mit Wine draufhaut. Gibt es für sowas etwas wie eine restart.sh das wenn der Server mal abschmiert sich automatisch neu startet? -
Das hat garnichts mit timern zu tun... der timer sorgt nur dafür in welchen abständen sich dein tacho aktualisiert. Die Geschwindigkeit selber regelst du aber durch
new Float:distance = (sqxdist+sqydist)/31;
Das heisst wenn du daran etwas änderst bekommst du einen anderen kmh wert...Größer oder kleiner werdent? Gemerkt mein WErt ist im moment zu klein
-
Jetzt unterhaltet euch doch net über Timer pls... Helft mir lieber
-
-
Hey,
Mein Problem: Mein Speed-O-Meter zeigt z.B. bei vollgas mit nem Tahoma nur 40 Km/h an wo mein Cleo Tacho 160 KM/h anzeigt.ZitatEntfernt jemand der mir helfen will, dem schick ich das per Post damit nicht jeder den Script bekommt
Könnte mir bitte jemand behilflich sein?MFG [NK]GtaCrash
-
Ja das weiß ich aber Compile/RUN (F6)
-
Hey,
Wusste net genau wos hin sollte aber das is ja die einzige Kategorie für Pawno und Scripts.
Meine Frage: Wozu dient Compile/Run bei Pawno?MFG [NK]GtaCrash
-
Geht doch gar net dadrunter steht das doch... er kam doch erst nach dem scheiß da aufn Server
-
Nix im Script davon...
-
Zitat
[15:50:06] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:06] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:07] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:07] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:07] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:07] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:07] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:07] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:07] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:07] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:07] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:07] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:08] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:08] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:08] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:08] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:08] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:08] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:08] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:08] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:08] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:09] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:09] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:09] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:09] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:09] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:09] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:09] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:09] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:09] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:09] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:10] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:10] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:10] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:10] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:10] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:10] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:10] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:10] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:10] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:11] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:11] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:11] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:11] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:11] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:11] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:12] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:12] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:12] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:12] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:12] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:13] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:13] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:13] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:13] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:13] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:50:14] Packet was modified, sent by id: 0, ip: 92.226.208.94:3559
[15:51:06] Incoming connection: 92.226.208.94:3569
[15:51:06] [join] Pr0liiike has joined the server (0:92.226.208.94)
[15:51:06] [INFO]: Pr0liiike (0) Has joined the Server. [92.226.208.94]Was is das?