[Needs Solving :(] Entering a Car and Getting Kicked Out. Helpp Pleasee!!!!!
#1

hey guys i recently made a garbage truck job and added it to my server i added the addstaticvehicles as so:

AddStaticVehicleEx(408,2170.0000,-1984.2969,14.0998,270.0000,1,1,60); // Garbage Truck garbagejob
AddStaticVehicleEx(408,2170.0000,-1978.5972,14.1096,270.0000,1,1,60); // Garbage Truck garbagejob
AddStaticVehicleEx(408,2183.7861,-1993.4991,14.0846,360.0000,1,1,60); // Garbage Truck garbagejob
AddStaticVehicleEx(408,2190.9241,-1998.2997,14.0873,360.0000,1,1,60); // Garbage Truck garbagejob


and the job and everything works fine but when i actually go and enter the garbage trucks i automatically get kicked out and frozen for no reason at all.

if(IsAGarbageTruck(newcar))//garbagejob
{
if(PlayerInfo[playerid][pJob] == 24)
{
SendClientMessage(playerid, COLOR_LIGHTBLUE, " INFO: You can collect rubbish for a pay check.");
SendClientMessage(playerid, COLOR_WHITE, " INFO: Type /collect to get started");
}
else
{
SendClientMessage(playerid, COLOR_WHITE, " You are not a Garbage Collector.");
}
}



and the job is id 24 and it does show up the messages stated:

SendClientMessage(playerid, COLOR_LIGHTBLUE, " INFO: You can collect rubbish for a pay check.");
SendClientMessage(playerid, COLOR_WHITE, " INFO: Type /collect to get started

the problem as i have said is that it just kicks me could someone help. (if you need other stuff from the script then please ask)
Reply
#2

How does your

IsAGarbageTruck looks like?

mine is:

Код:
public IsAGarbageTruck(carid)//garbagejob
{
	if(carid >= 96 && carid <= 99)
	{
		return 1;
	}
	return 0;
}
and it works fine. and by the way, garbage job is ID: 19 not 24.
Reply
#3

no i changed mine to 24 because i have other jobs and one already has job id 19

my isagarbagetruck is:

public IsAGarbageTruck(carid)//garbagejob
{
if(carid == 79 || carid == 80 || carid == 81 || carid == 82)
{
return 1;
}
return 0;
}

since the car id's 99 and all those didn't work

i got the id's 79 from the trucks anyway lol. sneakily i got in and before i got kicked out i did /getvehid and got them and those work fine it just keeps kicking me out

thanks anyway

Reply
#4

if you don't have in mind that you aint using garbage trucks for something else, i suggest you to work with the " model " number not the ID
model number is always the same except its different type of vehicle.
Reply
#5

but is that the reason i am getting kicked?
Reply
#6

because the id sometimes it trick you.... try using the model id...
Reply
#7

i have tried

public IsAGarbageTruck(carid)//garbagejob
{
if(GetVehicleModel) == 40
{
return 1;
}
return 0;
}

but:

(3124) : error 076: syntax error in the expression, or invalid function call
(3124) : error 029: invalid expression, assumed zero
(3124) : warning 215: expression has no effect
(3124) : error 001: expected token: ";", but found ")"
(3124) : fatal error 107: too many error messages on one line


line 3124 is the line that says if(GetVehicleModel) == 40
Reply
#8

GetVehicleModel is used incorrect i guess.. + it needs some params

GetVehicleModel(vehicleid) .... So in your use must be

Код:
public IsAGarbageTruck(carmodel)
{
if(GetVehicleModel(carid) == 408)
{
return 1;
}
return 0;
}
And also when you're using the funcstion you should use this
such as:
Код:
public OnPlayerEnterVehicle(playerid,vehicleid)
{
if(IsAGarbageTruck(GetVehicleModel(vehicleid)))
{
// Your stuff here if player enter in garbage truck
return 1;
}
Reply
#9

did that and now

(3130) : error 076: syntax error in the expression, or invalid function call
(3130) : error 029: invalid expression, assumed zero
(3130) : warning 215: expression has no effect
(3130) : error 001: expected token: ";", but found ")"
(3130) : fatal error 107: too many error messages on one line


from this

[line 3130] if(GetVehicleModel) == 40

public IsAGarbageTruck(carid)//garbagejob
{
if(GetVehicleModel) == 40
{
return 1;
}
return 0;
}

and for that code thing you gave me i did

if(IsAGarbageTruck(GetVehicleModel(vehicleid)))
{
SendClientMessage(playerid, COLOR_LIGHTBLUE, " INFO: You can collect rubbish for a pay check.");
SendClientMessage(playerid, COLOR_WHITE, " INFO: Type /collect to get started");
}
Reply
#10

i told you already.. the function " GetVehicleModel ... it requires a parameter.... so it should be "GetVehicleModel(vehicleid)"

NOT GetVehicleModel
Reply
#11

Quote:
Originally Posted by Jawz
public IsAGarbageTruck(carid)//garbagejob
{
if(GetVehicleModel) == 40
{
return 1;
}
return 0;
}
This is horribly wrong! Use this:

Код:
public IsAGarbageTruck(carid)//garbagejob
{
	if (GetVehicleModel(carid) == 408)
	{
		return 1;
	}
	return 0;
}
Or even shorten it:
Код:
IsAGarbageTruck(carid)//garbagejob
{
	return (GetVehicleModel(carid) == 408); //This will work with the same result
}
Reply
#12

Sorry, wrong tghout
Reply
#13

ok this is confusing could someone just gimme fully working code(that uses the vehicle id not car id) that i should use please
Reply
#14

actually mick88 i tried ur way and it still compiles but when i try to get into a truck it kicks me out AGAIN

Reply
#15

How about you show us what you've got in OnPlayerEnterVehicle, OnPlayerUpdate and on any timers you have running? If it's something to do with vehicles it might help. Also, does it actually kick you from the game? And only when you enter trashmaster? Or is it game crashing? If it kicks you out, then it could be messed up anticheat... Look into filterscripts as well.
Reply
#16

ok it doesn't kick me out of the game just the trashmaster vehicle and it only happens with that vehicle no others

OnPlayerEnterVehicle:

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(gTeam[playerid] >= 1||gTeam[playerid] >= 3||gTeam[playerid] >= 4)
{
if (IsACopCar(vehicleid) && !ispassenger)
{
if(PlayerInfo[playerid][pLeader]==1||PlayerInfo[playerid][pLeader]==2||PlayerInfo[playerid][pLeader]==3||PlayerInfo[playerid][pMember]==1||PlayerInfo[playerid][pMember]==2||PlayerInfo[playerid][pMember]==3||PlayerInfo[playerid][pLeader]==17||PlayerInfo[playerid][pMember]==17) {}
else {
//WantedPoints[playerid]+=2;
//SetPlayerCriminal(playerid,255, "Stealing A Police Vehicle");
new Float:cx, Float:cy, Float:cz;
GetPlayerPos(playerid, cx, cy, cz);
SetPlayerPos(playerid, cx, cy, cz);
}
}
if (IsNgCar(vehicleid) && !ispassenger)
{
if(PlayerInfo[playerid][pLeader]==1||PlayerInfo[playerid][pLeader]==2||PlayerInfo[playerid][pLeader]==3||PlayerInfo[playerid][pMember]==1||PlayerInfo[playerid][pMember]==2||PlayerInfo[playerid][pMember]==3) {}
else {
//WantedPoints[playerid]+=2;
//SetPlayerCriminal(playerid,255, "Stealing A Police Vehicle");
new Float:cx, Float:cy, Float:cz;
GetPlayerPos(playerid, cx, cy, cz);
SetPlayerPos(playerid, cx, cy, cz);
}
}
if (IsAnAmbulance(vehicleid) && !ispassenger)
{
if(PlayerInfo[playerid][pLeader]==4||PlayerInfo[playerid][pMember]==4) {}
else {
//WantedPoints[playerid]+=2;
//SetPlayerCriminal(playerid,255, "Stealing A Police Vehicle");
new Float:cx, Float:cy, Float:cz;
GetPlayerPos(playerid, cx, cy, cz);
SetPlayerPos(playerid, cx, cy, cz);
}
}
if (IsAnFiretruck(vehicleid) && !ispassenger)
{
if(PlayerInfo[playerid][pLeader]==4||PlayerInfo[playerid][pMember]==4) {}
else
{
//WantedPoints[playerid]+=2;
//SetPlayerCriminal(playerid,255, "Stealing A Police Vehicle");
new Float:cx, Float:cy, Float:cz;
GetPlayerPos(playerid, cx, cy, cz);
SetPlayerPos(playerid, cx, cy, cz);
}
}
if (IsATank(vehicleid) && !ispassenger)
{
if(PlayerInfo[playerid][pLeader]==3||PlayerInfo[playerid][pMember]==3) {}
else {
//WantedPoints[playerid]+=2;
//SetPlayerCriminal(playerid,255, "Stealing A Police Vehicle");
new Float:cx, Float:cy, Float:cz;
GetPlayerPos(playerid, cx, cy, cz);
SetPlayerPos(playerid, cx, cy, cz);
}
}
if(IsAnOwnableCar(vehicleid) && CarInfo[vehicleid][cLock] == 1 && CarInfo[vehicleid][cOwned] == 1)
{
if(PlayerInfo[playerid][pAdmin] >= 1337 && AdminDuty[playerid] == 1) { }
else
{
new Float:cx, Float:cy, Float:cz;
GetPlayerPos(playerid, cx, cy, cz);
SetPlayerPos(playerid, cx, cy, cz);
}
}
}
return 1;
}

OnPlayerUpdate:

public OnPlayerUpdate(playerid)
{
if(IsPlayerConnected(playerid))
{
if(gPlayerLogged[playerid])
{
new string3[64];
new playername3[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername3, sizeof(playername3));
format(string3, sizeof(string3), "users/%s.ini", playername3);
new File: hFile = fopen(string3, io_write);
if (hFile)
{
new var[64];
format(var, 64, "Key=%s\n", PlayerInfo[playerid][pKey]);fwrite(hFile, var);
PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid);
format(var, 64, "Level=%d\n",PlayerInfo[playerid][pLevel]);fwrite(hFile, var);
format(var, 64, "AdminLevel=%d\n",PlayerInfo[playerid][pAdmin]);fwrite(hFile, var);
format(var, 64, "DonateRank=%d\n",PlayerInfo[playerid][pDonateRank]);fwrite(hFile, var);
format(var, 64, "UpgradePoints=%d\n",PlayerInfo[playerid][gPupgrade]);fwrite(hFile, var);
format(var, 64, "ConnectedTime=%d\n",PlayerInfo[playerid][pConnectTime]);fwrite(hFile, var);
format(var, 64, "Registered=%d\n",PlayerInfo[playerid][pReg]);fwrite(hFile, var);
format(var, 64, "Sex=%d\n",PlayerInfo[playerid][pSex]);fwrite(hFile, var);
format(var, 64, "Age=%d\n",PlayerInfo[playerid][pAge]);fwrite(hFile, var);
format(var, 64, "Origin=%d\n",PlayerInfo[playerid][pOrigin]);fwrite(hFile, var);
format(var, 64, "CK=%d\n",PlayerInfo[playerid][pCK]);fwrite(hFile, var);
format(var, 64, "Muted=%d\n",PlayerInfo[playerid][pMuted]);fwrite(hFile, var);
format(var, 64, "Respect=%d\n",PlayerInfo[playerid][pExp]);fwrite(hFile, var);
format(var, 64, "Money=%d\n",PlayerInfo[playerid][pCash]);fwrite(hFile, var);
format(var, 64, "Bank=%d\n",PlayerInfo[playerid][pAccount]);fwrite(hFile, var);
format(var, 64, "Crimes=%d\n",PlayerInfo[playerid][pCrimes]);fwrite(hFile, var);
format(var, 64, "Kills=%d\n",PlayerInfo[playerid][pKills]);fwrite(hFile, var);
format(var, 64, "Deaths=%d\n",PlayerInfo[playerid][pDeaths]);fwrite(hFile, var);
format(var, 64, "Arrested=%d\n",PlayerInfo[playerid][pArrested]);fwrite(hFile, var);
format(var, 64, "WantedDeaths=%d\n",PlayerInfo[playerid][pWantedDeaths]);fwrite(hFile, var);
format(var, 64, "Phonebook=%d\n",PlayerInfo[playerid][pPhoneBook]);fwrite(hFile, var);
format(var, 64, "LottoNr=%d\n",PlayerInfo[playerid][pLottoNr]);fwrite(hFile, var);
format(var, 64, "Fishes=%d\n",PlayerInfo[playerid][pFishes]);fwrite(hFile, var);
format(var, 64, "BiggestFish=%d\n",PlayerInfo[playerid][pBiggestFish]);fwrite(hFile, var);
format(var, 64, "Job=%d\n",PlayerInfo[playerid][pJob]);fwrite(hFile, var);
format(var, 64, "Paycheck=%d\n",PlayerInfo[playerid][pPayCheck]);fwrite(hFile, var);
format(var, 64, "HeadValue=%d\n",PlayerInfo[playerid][pHeadValue]);fwrite(hFile, var);
format(var, 64, "Jailed=%d\n",PlayerInfo[playerid][pJailed]);fwrite(hFile, var);
format(var, 64, "JailTime=%d\n",PlayerInfo[playerid][pJailTime]);fwrite(hFile, var);
format(var, 64, "Materials=%d\n",PlayerInfo[playerid][pMats]);fwrite(hFile, var);
format(var, 64, "Drugs=%d\n",PlayerInfo[playerid][pDrugs]);fwrite(hFile, var);
format(var, 64, "Leader=%d\n",PlayerInfo[playerid][pLeader]);fwrite(hFile, var);
format(var, 64, "Member=%d\n",PlayerInfo[playerid][pMember]);fwrite(hFile, var);
format(var, 64, "FMember=%d\n",PlayerInfo[playerid][pFMember]);fwrite(hFile, var);
format(var, 64, "Rank=%d\n",PlayerInfo[playerid][pRank]);fwrite(hFile, var);
format(var, 64, "Char=%d\n",PlayerInfo[playerid][pChar]);fwrite(hFile, var);
format(var, 64, "ContractTime=%d\n",PlayerInfo[playerid][pContractTime]);fwrite(hFile, var);
format(var, 64, "DetSkill=%d\n",PlayerInfo[playerid][pDetSkill]);fwrite(hFile, var);
format(var, 64, "SexSkill=%d\n",PlayerInfo[playerid][pSexSkill]);fwrite(hFile, var);
format(var, 64, "BoxSkill=%d\n",PlayerInfo[playerid][pBoxSkill]);fwrite(hFile, var);
format(var, 64, "LawSkill=%d\n",PlayerInfo[playerid][pLawSkill]);fwrite(hFile, var);
format(var, 64, "MechSkill=%d\n",PlayerInfo[playerid][pMechSkill]);fwrite(hFile, var);
format(var, 64, "JackSkill=%d\n",PlayerInfo[playerid][pJackSkill]);fwrite(hFile, var);
format(var, 64, "CarSkill=%d\n",PlayerInfo[playerid][pCarSkill]);fwrite(hFile, var);
format(var, 64, "NewsSkill=%d\n",PlayerInfo[playerid][pNewsSkill]);fwrite(hFile, var);
format(var, 64, "DrugsSkill=%d\n",PlayerInfo[playerid][pDrugsSkill]);fwrite(hFile, var);
format(var, 64, "CookSkill=%d\n",PlayerInfo[playerid][pCookSkill]);fwrite(hFile, var);
format(var, 64, "FishSkill=%d\n",PlayerInfo[playerid][pFishSkill]);fwrite(hFile, var);
format(var, 64, "pSHealth=%.1f\n",PlayerInfo[playerid][pSHealth]);fwrite(hFile, var);
GetPlayerHealth(playerid,PlayerInfo[playerid][pHealth]);
format(var, 64, "pHealth=%.1f\n",PlayerInfo[playerid][pHealth]);fwrite(hFile, var);
format(var, 64, "Int=%d\n",PlayerInfo[playerid][pInt]);fwrite(hFile, var);
format(var, 64, "Local=%d\n",PlayerInfo[playerid][pLocal]);fwrite(hFile, var);
format(var, 64, "Team=%d\n",PlayerInfo[playerid][pTeam]);fwrite(hFile, var);
format(var, 64, "Model=%d\n",PlayerInfo[playerid][pModel]);fwrite(hFile, var);
format(var, 64, "PhoneNr=%d\n",PlayerInfo[playerid][pPnumber]);fwrite(hFile, var);
format(var, 64, "Car=%d\n",PlayerInfo[playerid][pPcarkey]);fwrite(hFile, var);
format(var, 64, "Car2=%d\n",PlayerInfo[playerid][pPcarkey2]);fwrite(hFile, var);
format(var, 64, "Car3=%d\n",PlayerInfo[playerid][pPcarkey3]);fwrite(hFile, var);
format(var, 64, "House=%d\n",PlayerInfo[playerid][pPhousekey]);fwrite(hFile, var);
format(var, 64, "Bizz=%d\n",PlayerInfo[playerid][pPbiskey]);fwrite(hFile, var);
if ((PlayerInfo[playerid][pPos_x]==0.0 && PlayerInfo[playerid][pPos_y]==0.0 && PlayerInfo[playerid][pPos_z]==0.0))
{
PlayerInfo[playerid][pPos_x] = 1684.9;
PlayerInfo[playerid][pPos_y] = -2244.5;
PlayerInfo[playerid][pPos_z] = 13.5;
}
if(Spectate[playerid] != 255)
{
PlayerInfo[playerid][pPos_x] = Unspec[playerid][sPx];
PlayerInfo[playerid][pPos_y] = Unspec[playerid][sPy];
PlayerInfo[playerid][pPos_z] = Unspec[playerid][sPz];
PlayerInfo[playerid][pInt] = Unspec[playerid][sPint];
PlayerInfo[playerid][pLocal] = Unspec[playerid][sLocal];
}
new Float, Float:y, Float:z;
GetPlayerPos(playerid,x,y,z);
PlayerInfo[playerid][pPos_x] = x;
PlayerInfo[playerid][pPos_y] = y;
PlayerInfo[playerid][pPos_z] = z;
format(var, 64, "Pos_x=%.1f\n",PlayerInfo[playerid][pPos_x]);fwrite(hFile, var);
format(var, 64, "Pos_y=%.1f\n",PlayerInfo[playerid][pPos_y]);fwrite(hFile, var);
format(var, 64, "Pos_z=%.1f\n",PlayerInfo[playerid][pPos_z]);fwrite(hFile, var);
format(var, 64, "CarLic=%d\n",PlayerInfo[playerid][pCarLic]);fwrite(hFile, var);
format(var, 64, "FlyLic=%d\n",PlayerInfo[playerid][pFlyLic]);fwrite(hFile, var);
format(var, 64, "BoatLic=%d\n",PlayerInfo[playerid][pBoatLic]);fwrite(hFile, var);
format(var, 64, "FishLic=%d\n",PlayerInfo[playerid][pFishLic]);fwrite(hFile, var);
format(var, 64, "GunLic=%d\n",PlayerInfo[playerid][pGunLic]);fwrite(hFile, var);
format(var, 64, "Gun1=%d\n",PlayerInfo[playerid][pGun1]);fwrite(hFile, var);
format(var, 64, "Gun2=%d\n",PlayerInfo[playerid][pGun2]);fwrite(hFile, var);
format(var, 64, "Gun3=%d\n",PlayerInfo[playerid][pGun3]);fwrite(hFile, var);
format(var, 64, "Gun4=%d\n",PlayerInfo[playerid][pGun4]);fwrite(hFile, var);
format(var, 64, "Ammo1=%d\n",PlayerInfo[playerid][pAmmo1]);fwrite(hFile, var);
format(var, 64, "Ammo2=%d\n",PlayerInfo[playerid][pAmmo2]);fwrite(hFile, var);
format(var, 64, "Ammo3=%d\n",PlayerInfo[playerid][pAmmo3]);fwrite(hFile, var);
format(var, 64, "Ammo4=%d\n",PlayerInfo[playerid][pAmmo4]);fwrite(hFile, var);
format(var, 64, "CarTime=%d\n",PlayerInfo[playerid][pCarTime]);fwrite(hFile, var);
format(var, 64, "PayDay=%d\n",PlayerInfo[playerid][pPayDay]);fwrite(hFile, var);
format(var, 64, "PayDayHad=%d\n",PlayerInfo[playerid][pPayDayHad]);fwrite(hFile, var);
format(var, 64, "Watch=%d\n",PlayerInfo[playerid][pWatch]);fwrite(hFile, var);
format(var, 64, "Crashed=%d\n",PlayerInfo[playerid][pCrashed]);fwrite(hFile, var);
format(var, 64, "Wins=%d\n",PlayerInfo[playerid][pWins]);fwrite(hFile, var);
format(var, 64, "Loses=%d\n",PlayerInfo[playerid][pLoses]);fwrite(hFile, var);
format(var, 64, "AlcoholPerk=%d\n",PlayerInfo[playerid][pAlcoholPerk]);fwrite(hFile, var);
format(var, 64, "DrugPerk=%d\n",PlayerInfo[playerid][pDrugPerk]);fwrite(hFile, var);
format(var, 64, "MiserPerk=%d\n",PlayerInfo[playerid][pMiserPerk]);fwrite(hFile, var);
format(var, 64, "PainPerk=%d\n",PlayerInfo[playerid][pPainPerk]);fwrite(hFile, var);
format(var, 64, "TraderPerk=%d\n",PlayerInfo[playerid][pTraderPerk]);fwrite(hFile, var);
format(var, 64, "Tutorial=%d\n",PlayerInfo[playerid][pTut]);fwrite(hFile, var);
format(var, 64, "Mission=%d\n",PlayerInfo[playerid][pMissionNr]);fwrite(hFile, var);
format(var, 64, "Warnings=%d\n",PlayerInfo[playerid][pWarns]);fwrite(hFile, var);
format(var, 64, "VirWorld=%d\n",PlayerInfo[playerid][pVirWorld]);fwrite(hFile, var);
if(PlayerInfo[playerid][pDonateRank] < 1) { PlayerInfo[playerid][pFuel] = 0; }
format(var, 64, "Fuel=%d\n",PlayerInfo[playerid][pFuel]);fwrite(hFile, var);
format(var, 64, "Married=%d\n",PlayerInfo[playerid][pMarried]);fwrite(hFile, var);
format(var, 64, "MarriedTo=%s\n",PlayerInfo[playerid][pMarriedTo]);fwrite(hFile, var);
format(var, 64, "FishTool=%d\n",PlayerInfo[playerid][pFishTool]);fwrite(hFile, var);
format(var, 64, "Note1=%s\n",PlayerInfo[playerid][pNote1]);fwrite(hFile, var);
format(var, 64, "Note1s=%d\n",PlayerInfo[playerid][pNote1s]);fwrite(hFile, var);
format(var, 64, "Note2=%s\n",PlayerInfo[playerid][pNote2]);fwrite(hFile, var);
format(var, 64, "Note2s=%d\n",PlayerInfo[playerid][pNote2s]);fwrite(hFile, var);
format(var, 64, "Note3=%s\n",PlayerInfo[playerid][pNote3]);fwrite(hFile, var);
format(var, 64, "Note3s=%d\n",PlayerInfo[playerid][pNote3s]);fwrite(hFile, var);
format(var, 64, "Note4=%s\n",PlayerInfo[playerid][pNote4]);fwrite(hFile, var);
format(var, 64, "Note4s=%d\n",PlayerInfo[playerid][pNote4s]);fwrite(hFile, var);
format(var, 64, "Note5=%s\n",PlayerInfo[playerid][pNote5]);fwrite(hFile, var);
format(var, 64, "Note5s=%d\n",PlayerInfo[playerid][pNote5s]);fwrite(hFile, var);
format(var, 64, "InvWeapon=%d\n",PlayerInfo[playerid][pInvWeapon]);fwrite(hFile, var);
format(var, 64, "InvAmmo=%d\n",PlayerInfo[playerid][pInvAmmo]);fwrite(hFile, var);
format(var, 64, "Lighter=%d\n",PlayerInfo[playerid][pLighter]);fwrite(hFile, var);
format(var, 64, "Cigarettes=%d\n",PlayerInfo[playerid][pCigarettes]);fwrite(hFile, var);
format(var, 64, "Locked=%d\n",PlayerInfo[playerid][pLocked]);fwrite(hFile, var);
fclose(hFile);
}
}
}
return 1;
}

thanks
Reply
#17

sorry double post
Reply
#18

Dont ever save files under OnPlayerUpdate.
Reply
#19

what you mean? and mick u found the problem?
Reply
#20

bump mick
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)