such mal gezielt nach den undefinierten sachen und werf sie raus
Dann funktioniert die hälfte der Befehle nicht mehr.
such mal gezielt nach den undefinierten sachen und werf sie raus
Dann funktioniert die hälfte der Befehle nicht mehr.
Dann bekomme ich aber diese Errors:
C:\Users\xD\Desktop\\German Gaming Reallife\gamemodes\SS.pwn(3368) : error 017: undefined symbol "UnFreezePlayer"
C:\Users\xD\Desktop\\German Gaming Reallife\gamemodes\SS.pwn(4641) : error 017: undefined symbol "M_OnPlayerConnect"
C:\Users\xD\Desktop\\German Gaming Reallife\gamemodes\SS.pwn(4853) : error 017: undefined symbol "MoneySpam"
C:\Users\xD\Desktop\\German Gaming Reallife\gamemodes\SS.pwn(4853) : warning 215: expression has no effect
C:\Users\xD\Desktop\\German Gaming Reallife\gamemodes\SS.pwn(4853) : error 001: expected token: ";", but found "]"
C:\Users\xD\Desktop\\German Gaming Reallife\gamemodes\SS.pwn(4853) : error 029: invalid expression, assumed zero
C:\Users\xD\Desktop\\German Gaming Reallife\gamemodes\SS.pwn(4853) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
6 Errors.
Wieso bannt der M_Bot die WaffenID 43 hier der Code:
#define M_Bot_BOT_NAME "[SERVERGUARD]"
#define M_BOT_COLOR 0xFF6347AA
|+++++++++++++++++++++++++++++++++++++++++++++++++++++|
|+++++++++ Maercells AntiCheat-Bot © 2009 ++++++++++|
|++++++++++++++++++++++ v1.1 +++++++++++++++++++++++|
|+++++++++++++++++++++++++++++++++++++++++++++++++++++|
|+++++++++++++++++++++++++++++++++++++++++++++++++++++|
native SendClientMessageToAdmins(color,message[]);
native FreezePlayer(playerid);
native UnFreezePlayer(playerid);
native FreezeAll();
native UnFreezeAll();
native GetName(playerid);
native GetIP(playerid);
native GetWeaponSlot(wid);
native GetVehicleDriver(vehicleid);
native M_Kick(playerid);
native M_Ban(playerid);
native M_BanEx(playerid,reason[]);
native M_Log(string[]):
native M_GivePlayerWeapon(playerid,weapon,ammo);
native M_ResetPlayerWeapons(playerid);
native M_GetPlayerMoney(playerid);
native M_ResetPlayerMoney(playerid);
native M_GivePlayerMoney(playerid,summe);
native M_SetPlayerMoney(playerid,summe);
native M_GivePlayerHealth(playerid,Float:health);
native M_GivePlayerArmour(playerid,Float:armour);
native M_SetPlayerPos(playerid,Float:Xpos,Float:Ypos,Float:Zpos,Float:Angle); // Spielerteleport ( + Winkel/Angle)=> Muss nicht dabei sein
native M_SetVehiclePos(playerid,Float:Xpos,Float:Ypos,Float:Zpos,Float:Angle); // Autoteleport ( + Winkel/Angle)=> Muss nicht dabei sein
native EnableM_Bot();
native M_OnPlayerSpawn(playerid);
native M_OnPlayerConnect(playerid);
native M_OnPlayerDeath(playerid,killerid,reason);
native M_OnPlayerUpdate(playerid);
native M_OnPlayerCommandText(playerid,cmdtext[]);
forward KickHim(playerid);
forward BanHim(playerid);
forward BanHimEx(playerid,reason[]);
forward Check();
forward CheckIPFromList(playerid);
forward EnableChecking(playerid);
forward EnablePingWarnAgain(playerid);
forward AFKOn(playerid);
enum SysInfo
{
PMoney,
PWeapon[13],
PAmmo[13],
PLastVehicleID,
PLastInterior,
PInactiveSeconds,
PCheckHighPing,
PHighPingWarns,
PIPWarns,
PBadWordWarns,
PAFK,
PAFKTimer,
Float:PHealth,
Float:PArmour,
Float:PXpos,
Float:PYpos,
Float:PZpos,
Float:PXpos2,
Float:PYpos2,
Float:PZpos2,
PFrozen,
PSpawned,
PCheck
}
new M_Bot[MAX_PLAYERS][SysInfo];
new BanWeaponIDs[] = {
35,
37,
38,
39,
40,
44,
45
};
new BanClanTags[][] = {
"[LoH]",
"[FoD]",
"[LoG]"
};
new BanNames[][] = {
"Suppenhuhn",
"Fabi",
"MiniYoda",
"Jude",
"Fick",
"Kack",
"scheiss"
};
new BadWords[][] = {
"Fick",
"Fresse",
"Hurensohn",
"Huso",
"Schnauze",
"Fotze",
"Wixxer",
"Wichser",
"Kanacke",
"Jude",
"Arsch",
"Hure",
"Nigger",
"verpiss",
"Mistgeburt",
"Fotze",
"Missgeburt",
"Hure",
"Bastard",
"Noob",
"Drecks Server"
};
new Float:GettedHealth,
Float:GettedArmour,
AllFrozen,
MaxPing = 300,
MoneySpam[MAX_PLAYERS];
public EnableChecking(playerid)
{
M_Bot[playerid][PCheck] = 1;
return 1;
}
public EnablePingWarnAgain(playerid)
{
M_Bot[playerid][PCheckHighPing] = 1;
return 1;
}
public AFKOn(playerid)
{
if(IsPlayerConnected(playerid) && M_Bot[playerid][PAFK] == 0)
{
new string[128];
format(string,sizeof string,"*~ [AFK] %s ist in den AFK-Modus gegangen! /afklist ",GetName(playerid));
SendClientMessageToAll(0xAFAFAFAA,string);
M_Bot[playerid][PAFK] = 1;
FreezePlayer(playerid);
KillTimer(M_Bot[playerid][PAFKTimer]);
}
return 1;
}
// ====================================================================================================================
stock SendClientMessageToAdmins(color,message[])
{
for(new i = 0; i < GetMaxPlayers(); i++)
{
if(IsPlayerConnected(i) && IsAnAdmin(i))
{
SendClientMessage(i,color,message);
}
}
}
stock FreezePlayer(playerid)
{
TogglePlayerControllable(playerid,false);
M_Bot[playerid][PFrozen] = 1;
}
stock UnFreezePlayer(playerid)
{
TogglePlayerControllable(playerid,true);
M_Bot[playerid][PFrozen] = 0;
}
stock FreezeAll()
{
for(new i = 0; i < GetMaxPlayers(); i++)
{
if(IsPlayerConnected(i))
{
TogglePlayerControllable(i,false);
AllFrozen = 1;
}
}
}
stock UnFreezeAll()
{
for(new i = 0; i < GetMaxPlayers(); i++)
{
if(IsPlayerConnected(i))
{
TogglePlayerControllable(i,true);
AllFrozen = 0;
}
}
}
stock GetName(playerid)
{
new getthename[MAX_PLAYER_NAME];
GetPlayerName(playerid,getthename,sizeof(getthename));
return getthename;
}
stock GetIP(playerid)
{
new gettheip[15];
GetPlayerIp(playerid,gettheip,sizeof(gettheip));
return gettheip;
}
stock M_Kick(playerid)
{
SetTimerEx("KickHim",100,0,"d",playerid);
}
public KickHim(playerid)
{
Kick(playerid);
return 1;
}
stock M_Ban(playerid)
{
SetTimerEx("BanHim",100,0,"d",playerid);
}
public BanHim(playerid)
{
Ban(playerid);
return 1;
}
stock M_BanEx(playerid,reason[])
{
SetTimerEx("BanHimEx",100,0,"ds",playerid,reason);
}
public BanHimEx(playerid,reason[])
{
BanEx(playerid,reason);
return 1;
}
stock GetVehicleDriver(vehicleid)
{
for(new i = 0; i < GetMaxPlayers(); i++)
{
if(IsPlayerConnected(i) && GetPlayerState(i) == PLAYER_STATE_DRIVER && GetPlayerVehicleID(i) == vehicleid)
{
return i;
}
}
return -1;
}
stock M_WriteIPToBlacklist(ip[])
{
new File:BLACKLISTFILE;
if(!fexist("/M_Bot/M_Black.cfg"))
{
BLACKLISTFILE = fopen("/M_Bot/M_Black.cfg",io_write);
}
else
{
BLACKLISTFILE = fopen("/M_Bot/M_Black.cfg",io_append);
}
if(BLACKLISTFILE)
{
new string[20];
format(string,sizeof(string),"%s\n",ip);
fwrite(BLACKLISTFILE,string);
}
fclose(BLACKLISTFILE);
}
stock M_Log(string[])
{
new File:logfile, mhour, mminute, msecond, myear, mmonth, mday;
if(!fexist("/M_Bot/M_Log.txt"))
{
logfile = fopen("/M_Bot/M_Log.txt",io_write);
}
else
{
logfile = fopen("/M_Bot/M_Log.txt",io_append);
}
gettime(mhour,mminute,msecond);
getdate(myear,mmonth,mday);
format(string,(strlen(string)+32),"Logged %02d.%02d.%d %d:%d:%d: %s\n",mday,mmonth,myear,mhour,mminute,msecond,string);
fwrite(logfile,string);
fclose(logfile);
}
stock M_PutPlayerInVehicle(playerid,vehicleid,seatid)
{
GetVehiclePos(vehicleid,M_Bot[playerid][PXpos],M_Bot[playerid][PYpos],M_Bot[playerid][PZpos]);
PutPlayerInVehicle(playerid,vehicleid,seatid);
}
stock M_SetPlayerPos(playerid,Float:Xpos,Float:Ypos,Float:Zpos,Float:Angle = -1.0)
{
M_Bot[playerid][PXpos] = Xpos;
M_Bot[playerid][PYpos] = Ypos;
M_Bot[playerid][PZpos] = Zpos;
SetPlayerPos(playerid,Xpos,Ypos,Zpos);
if(Angle != -1.0)
{
SetPlayerFacingAngle(playerid,Angle);
}
}
stock M_SetVehiclePos(vehicleid,Float:Xpos,Float:Ypos,Float:Zpos,Float:Angle = -1.0)
{
new playerid = GetVehicleDriver(vehicleid);
if(playerid != -1)
{
M_Bot[playerid][PXpos] = Xpos;
M_Bot[playerid][PYpos] = Ypos;
M_Bot[playerid][PZpos] = Zpos;
}
SetVehiclePos(vehicleid,Xpos,Ypos,Zpos);
if(Angle != -1.0)
{
SetVehicleZAngle(vehicleid,Angle);
}
return 1;
}
stock M_GivePlayerWeapon(playerid,weaponid,ammo)
{
new slot = GetWeaponSlot(weaponid);
if(ammo == 0)
ammo = 1;
M_Bot[playerid][PWeapon][slot] = weaponid;
M_Bot[playerid][PAmmo][slot] += ammo;
GivePlayerWeapon(playerid,weaponid,ammo);
}
stock M_ResetPlayerWeapons(playerid)
{
for(new slot=0; slot<13; slot++)
{
M_Bot[playerid][PWeapon][slot] = -1;
M_Bot[playerid][PAmmo][slot] = 0;
}
ResetPlayerWeapons(playerid);
}
stock M_GetPlayerMoney(playerid)
{
return M_Bot[playerid][PMoney];
}
stock M_ResetPlayerMoney(playerid)
{
M_Bot[playerid][PMoney] = 0;
ResetPlayerMoney(playerid);
}
forward M_GivePlayerMoney(playerid,summe);
public M_GivePlayerMoney(playerid,summe)
{
M_Bot[playerid][PMoney] += summe;
GivePlayerMoney(playerid,summe);
}
stock M_SetPlayerMoney(playerid,summe)
{
ResetPlayerMoney(playerid);
M_Bot[playerid][PMoney] = summe;
GivePlayerMoney(playerid,summe);
}
public CheckIPFromList(playerid)
{
new playerip[15], read[32], TwoNumbersLength = 0, count = 0;
GetPlayerIp(playerid,playerip,sizeof(playerip));
for(new c=0; c<strlen(playerip); c++)
{
if(playerip[code=c] == '.')
{
count++;
}
if(count == 2)
{
TwoNumbersLength = c-1;
break;
}
}
new File:BLACKLISTFILE = fopen("/M_Bot/M_Black.cfg", io_read);
if(BLACKLISTFILE)
{
while(fread(BLACKLISTFILE,read))
{
for(new x=0; x<strlen(read); x++)
{
if(read[x] == '\n')
{
read[x] = '\0';
}
}
if(!strcmp(read,playerip,false,TwoNumbersLength) || !strcmp(read,playerip,false))
{
fclose(BLACKLISTFILE);
return 1;
}
}
}
fclose(BLACKLISTFILE);
/*new playerip[16], read[32], ipstr[4][8], ip[2], ipstr2[4][8], ip2[2];
GetPlayerIp(playerid,playerip,sizeof(playerip));
split(playerip,ipstr2,'.');
ip2[0] = strval(ipstr2[0]);
ip2[1] = strval(ipstr2[1]);
new File:BLACKLISTFILE = fopen("/M_Bot/M_Black.cfg", io_read);
if(BLACKLISTFILE)
{
while(fread(BLACKLISTFILE,read))
{
split(read,ipstr,'.');
ip[0] = strval(ipstr[0]);
ip[1] = strval(ipstr[1]);
if(ip[0] == ip2[0] && ip[1] == ip2[1])
{
fclose(BLACKLISTFILE);
return 1;
}
}
}
fclose(BLACKLISTFILE);*/
return 0;
}
public Check()
{
for(new playerid=0; playerid<GetMaxPlayers(); playerid++)
if(IsPlayerConnected(playerid))
{
new admstring[128], playername[MAX_PLAYER_NAME], weapon = -1, ammo = 0;
GetPlayerName(playerid,playername,sizeof(playername));
GetPlayerPos(playerid,M_Bot[playerid][PXpos2],M_Bot[playerid][PYpos2],M_Bot[playerid][PZpos2]);
//distance = (((M_Bot[playerid][PXpos2]-M_Bot[playerid][PXpos])*(M_Bot[playerid][PXpos2]-M_Bot[playerid][PXpos]))+((M_Bot[playerid][PYpos2]-M_Bot[playerid][PYpos])*(M_Bot[playerid][PYpos2]-M_Bot[playerid][PYpos])))/100;
new differenz = (GetPlayerMoney(playerid) - M_Bot[playerid][PMoney]);
if(differenz >= 4490)
{
format(admstring,sizeof(admstring)," %s: %s ist unter Moneyhackverdacht! Ercheateter Betrag: %d ",M_Bot_BOT_NAME,playername,differenz);
SendClientMessageToAdmins(M_BOT_COLOR,admstring);
M_SetPlayerMoney(playerid,M_Bot[playerid][PMoney]);
M_Log(admstring);
MoneySpam[playerid]++;
}
if(MoneySpam[playerid] >= 20)
{
format(admstring,sizeof(admstring)," %s wurde von %s gebannt! (GRUND: Money Hack)",playername,M_Bot_BOT_NAME);
SendClientMessageToAll(M_BOT_COLOR,admstring);
format(admstring,sizeof(admstring)," Bann von %s (GRUND: MoneyCheat | IP: %s) ",playername,GetIP(playerid));
MoneySpam[playerid] = 0;
M_Log(admstring);
M_BanEx(playerid,"MoneyCheat");
return 1;
}
if(M_Bot[playerid][PSpawned] && M_Bot[playerid][PCheck])
{
if(distance > 1000.0) // Hohe Distanz
if(GetPlayerState(playerid) != PLAYER_STATE_SPECTATING) // Nicht beim Spectaten
if(!IsAPlaneForNoCheck(GetPlayerVehicleID(playerid))) // Nicht wenn man im Flugzeug ist
{
format(admstring,sizeof(admstring)," %s: %s ist unter Speedhack/Teleport-verdacht! ",M_Bot_BOT_NAME,playername);
SendClientMessageToAdmins(M_BOT_COLOR,admstring);
}
}
if(GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_USEJETPACK)
{
format(admstring,sizeof(admstring)," %s wurde von %s gebannt! (GRUND: Jetpack) ",playername,M_Bot_BOT_NAME);
SendClientMessageToAll(M_BOT_COLOR,admstring);
format(admstring,sizeof(admstring)," Bann von %s (GRUND: Jetpack | IP: %s) ",playername,GetIP(playerid));
M_Log(admstring);
M_BanEx(playerid,"Jetpack");
}
for(new w=0; w<sizeof(BanWeaponIDs); w++)
{
GetPlayerWeaponData(playerid,GetWeaponSlot(BanWeaponIDs[w]),weapon,ammo);
if(weapon == BanWeaponIDs[w] && ammo > 0)
{
format(admstring,sizeof(admstring)," %s wurde von %s gebannt! (GRUND: Waffenhack)",playername,M_Bot_BOT_NAME);
SendClientMessageToAll(M_BOT_COLOR,admstring);
format(admstring,sizeof(admstring)," Bann von %s (GRUND: Waffenhack | IP: %s) ",playername,GetIP(playerid));
M_Log(admstring);
M_BanEx(playerid,"Waffenhack");
}
}
if(GetPlayerPing(playerid) >= MaxPing && M_Bot[playerid][PCheckHighPing] && M_Bot[playerid][PSpawned])
{
M_Bot[playerid][PHighPingWarns]++;
if(M_Bot[playerid][PHighPingWarns] >= 5)
{
format(admstring,sizeof(admstring)," %s wurde von %s gekickt! (GRUND: PING: %d | MAXPING: %d) ",playername,M_Bot_BOT_NAME,GetPlayerPing(playerid),MaxPing);
SendClientMessageToAll(M_BOT_COLOR,admstring);
M_Kick(playerid);
M_Log(admstring);
}
else
{
format(admstring,sizeof(admstring)," [!] Dein Ping ist zu hoch! (PING: %d | MAXPING: %d | WARNUNG: %d/5)",GetPlayerPing(playerid),MaxPing,M_Bot[playerid][PHighPingWarns]);
SendClientMessage(playerid,M_BOT_COLOR,admstring);
SetTimerEx("EnablePingWarnAgain",15000,0,"i",playerid);
}
}
if(M_Bot[playerid][PSpawned])
{
M_Bot[playerid][PInactiveSeconds]++;
}
if(M_Bot[playerid][PFrozen] || AllFrozen)
{
FreezePlayer(playerid);
}
if(M_Bot[playerid][PAFK] == 1)
{
GameTextForPlayer(playerid,"~y~Du bist AFK~n~~g~Um aus dem ~r~AFK-Modus~g~ zu gehen:~n~~y~/back",3500,3);
}
M_Bot[playerid][PXpos] = M_Bot[playerid][PXpos2];
M_Bot[playerid][PYpos] = M_Bot[playerid][PYpos2];
M_Bot[playerid][PZpos] = M_Bot[playerid][PZpos2];
M_Bot[playerid][PLastInterior] = GetPlayerInterior(playerid);
}
return 1;
}
stock IsAPlaneForNoCheck(vehicleid)
{
new modelid = GetVehicleModel(vehicleid);
if(modelid == 417 || modelid == 425 || modelid == 447 || modelid == 460 || modelid == 469 || modelid == 476 || modelid == 487 || modelid == 488 || modelid == 497 || modelid == 511 || modelid == 512 || modelid == 513 || modelid == 519 || modelid == 520 || modelid == 548 || modelid == 553 || modelid == 563 || modelid == 577 || modelid == 593)
{
return 1;
}
return 0;
}
stock GetWeaponSlot(wid) // Dank an [NSG]roschti für die Funktion
{
new id;
switch(wid)
{
case 0,1: id=0;
case 2,3,4,5,6,7,8,9: id=1;
case 22,23,24: id=2;
case 25,26,27: id=3;
case 28,29,32: id=4;
case 30,31: id=5;
case 33,34: id=6;
case 35,36,37,38: id=7;
case 16,17,18,19,39: id=8;
case 41,42,43: id=9;
case 10,11,12,13,14,15: id=10;
case 44,45,46: id=11;
case 40: id=12;
case 20,21,47,49,50,53,54: id=(-1);
default: id=(-1);
}
return id;
}
// ====================================================================================================================
EnableM_Bot()
{
SetTimer("Check",2500,1);
AllFrozen = 0;
return 1;
}
M_OnPlayerSpawn(playerid)
{
M_Bot[playerid][PSpawned] = 1;
M_Bot[playerid][PCheck] = 0;
SetTimerEx("EnableChecking",3333,0,"i",playerid);
if(AllFrozen)
{
FreezePlayer(playerid);
}
return 1;
}
M_OnPlayerConnect(playerid)
{
if(!strcmp(M_Bot_BOT_NAME,GetName(playerid),true))
{
M_Kick(playerid);
}
if(CheckIPFromList(playerid))
{
SendClientMessage(playerid,M_BOT_COLOR," Du hast einen PERM-BANN auf diesem Server !");
GameTextForPlayer(playerid,"~r~BYE",60000,3);
M_Kick(playerid);
}
for(new n=0; n<sizeof(BanClanTags); n++)
{
if(strfind(GetName(playerid),BanClanTags[n],false) == 0)
{
new banstring[128];
format(banstring,sizeof(banstring)," Dein Clan %s ist von diesem Server gebannt!",BanClanTags[n]);
SendClientMessage(playerid,M_BOT_COLOR,banstring);
format(banstring,sizeof(banstring)," %s aus dem gebannten Clan %s hat den Server betreten und wurde gebannt!",GetName(playerid),BanClanTags[n]);
SendClientMessageToAdmins(M_BOT_COLOR,banstring);
M_Log(banstring);
format(banstring,sizeof(banstring),"Clan %s",BanClanTags[n]);
M_BanEx(playerid,banstring);
}
}
for(new n=0; n<sizeof(BanNames); n++)
{
if(strcmp(GetName(playerid),BanNames[n],true) == 0)
{
new banstring[128];
format(banstring,sizeof(banstring)," Dein Name %s ist von diesem Server gebannt!",GetName(playerid));
SendClientMessage(playerid,M_BOT_COLOR,banstring);
format(banstring,sizeof(banstring)," %s hat den Server betreten und wurde gebannt!",GetName(playerid));
SendClientMessageToAdmins(M_BOT_COLOR,banstring);
M_Log(banstring);
format(banstring,sizeof(banstring),"Name %s",BanNames[n]);
M_BanEx(playerid,banstring);
}
}
// Reset Vars
M_Bot[playerid][PMoney] = 0;
M_Bot[playerid][PLastInterior] = 0;
M_Bot[playerid][PInactiveSeconds] = 0;
M_Bot[playerid][PIPWarns] = 0;
M_Bot[playerid][PBadWordWarns] = 0;
M_Bot[playerid][PHighPingWarns] = 0;
M_Bot[playerid][PAFK] = 0;
M_Bot[playerid][PFrozen] = 0;
M_Bot[playerid][PSpawned] = 0;
M_Bot[playerid][PCheck] = 0;
M_Bot[playerid][PCheckHighPing] = 0;
for(new slot=0; slot<13; slot++)
{
M_Bot[playerid][PWeapon][slot] = -1;
M_Bot[playerid][PAmmo][slot] = 0;
}
return 1;
}
M_OnPlayerDeath(playerid,killerid,reason)
{
M_Bot[playerid][PSpawned] = 0;
if(GetPlayerState(killerid) == PLAYER_STATE_DRIVER && GetDistanceBetweenPlayers(playerid,killerid) < 20 && (reason == WEAPON_MP5 || reason == WEAPON_VEHICLE || reason == WEAPON_COLLISION))
{
new kickstring[128];
format(kickstring,sizeof(kickstring)," %s wurde von %s gekickt! (GRUND: Fahrer-DriveBy)",GetName(killerid),M_Bot_BOT_NAME);
SendClientMessageToAll(M_BOT_COLOR,kickstring);
M_Kick(killerid);
}
return 1;
}
M_OnPlayerUpdate(playerid)
{
M_Bot[playerid][PInactiveSeconds] = 0;
return 1;
}
M_OnPlayerStateChange(playerid, newstate, oldstate)
{
return 1;
}
M_OnPlayerCommandText(playerid,cmdtext[])
{
new string[128];
/*if(strcmp("/afk",cmdtext,true) == 0)
{
if(!M_Bot[playerid][PAFK])
{
SendClientMessage(playerid,0x33AA33AA,"In 15 Sekunden wirst du in den AFK-Modus gebracht!");
KillTimer(M_Bot[playerid][PAFKTimer]);
M_Bot[playerid][PAFKTimer] = SetTimerEx("AFKOn",15000,0,"i",playerid);
}
else
{
SendClientMessage(playerid,0xAA3333AA,"Du bist schon AFK!");
}
return 1;
}*/
if(strcmp("/back",cmdtext,true) == 0)
{
if(M_Bot[playerid][PAFK])
{
format(string,sizeof string,"*~ [AFK] %s ist vom AFK-Modus zurück!",GetName(playerid));
SendClientMessageToAll(0xAFAFAFAA,string);
M_Bot[playerid][PAFK] = 0;
UnFreezePlayer(playerid);
KillTimer(M_Bot[playerid][PAFKTimer]);
}
else
{
SendClientMessage(playerid,0xAA3333AA,"Du bist nicht AFK!");
}
return 1;
}
if(strcmp("/afklist",cmdtext,true) == 0)
{
new countafk = 0;
SendClientMessage(playerid,0x33AA33AA,"|---------------------- AFK-List -----------------------|");
for(new i=0; i<GetMaxPlayers(); i++)
{
if(IsPlayerConnected(i) && M_Bot[i][PAFK])
{
format(string,sizeof string,"* [AFK] %s",GetName(i));
SendClientMessage(playerid,0x33AA33AA,string);
countafk++;
}
}
if(countafk == 0) SendClientMessage(playerid,0x33AA33AA," Niemand ist AFK !");
SendClientMessage(playerid,0x33AA33AA,"|----------------------------------------------------------|");
return 1;
}
return 1;
}
#define GivePlayerWeapon M_GivePlayerWeapon
#define ResetPlayerWeapons M_ResetPlayerWeapons
#define GivePlayerMoney M_GivePlayerMoney
#define GetPlayerMoney M_GetPlayerMoney
#define ResetPlayerMoney M_ResetPlayerMoney
#define PutPlayerInVehicle M_PutPlayerInVehicle
#define SetVehiclePos M_SetVehiclePos
#define SetPlayerPos M_SetPlayerPos
#define Kick M_Kick
#define Ban M_Ban
#define BanEx M_BanEx
if(GetPlayerVehicleID(playerid) == BundeswehrVehs[1]) || GetPlayerVehicleID(playerid) == BundeswehrVehs[2]) || GetPlayerVehicleID(playerid) == BundeswehrVehs[3]) || GetPlayerVehicleID(playerid) == BundeswehrVehs[4])
{
if(PlayerInfo[playerid][pRank] == 5)
{
}
else
{
RemovePlayerFromVehicle(playerid);
SCM(playerid,rot,"Du besitzt nicht Rank 5");
}
}
Diese Errors kommen:
C:\Users\xD\Desktop\\German Gaming Reallife\gamemodes\SS.pwn(8822) : error 029: invalid expression, assumed zero
C:\Users\xD\Desktop\\German Gaming Reallife\gamemodes\SS.pwn(8822) : warning 215: expression has no effect
C:\Users\xD\Desktop\\German Gaming Reallife\gamemodes\SS.pwn(8822) : error 001: expected token: ";", but found ")"
C:\Users\xD\Desktop\\German Gaming Reallife\gamemodes\SS.pwn(8822) : error 029: invalid expression, assumed zero
C:\Users\xD\Desktop\\German Gaming Reallife\gamemodes\SS.pwn(8822) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.
Verstehe ich nun nicht ganz wie meinst du das?
via PolizeiVehs[50]; ich glaube ich habe es früher mal hin bekommen nur weiß ich nicht mehr wie
Mhh also heißt das es würde zum Beispiel wenn ich den Sultan ab Rank 3 machen würde für alle Fraktionen so sein?
Hey,
Wie kann ich das machen das man ab einem bestimmen Rank erst ein bestimmtes Fahrzeug fahren kann also zum Beispiel der Patriot ab Rank 1 und die NRG-500 ab Rank 2 wie geht das?
Und wenn man mit Rank 1 in die NRG-500 versucht einzusteigen steht dort: Du bist nicht Rank 2 wie geht das?
Es funktioniert nicht für alle nochmal http://www.youtube.com/watch?v=iWZjuycmjIU&feature=youtu.be
Ja der Grafik Treiber ist aktuell... und Windows Updates auch.
Nein habe Fraps seit 2 Wochen nicht mehr benutzt.
Video Online!
Es ist ja extra in dem Bereich GTA Fremdes also gehört es hier rein... ich will Battefield 3 Damit ich die Beta von BF4 noch ein bisschen zocken kann.
Ja und es ist bei 70% und man kann mir ja auch helfen wenn man den Text lesen tut.
Funktioniert es noch? Wäre echt geil
Hey,
Wie kann ich diesen Fraps Bug hier beheben?
In Text was passiert: Also alles ist Bunt alles flackert und passt sich an die Musik an..... und dieser Bug nervt... kann mir jemand helfen?
PS: Das Video wird gerade hochgeladen!
#Kann geschlossen werden habe es selbst heraus gefunden!
Alle Methoden funktionieren nicht... Kann mir jemand helfen?
Ich habe mal ein Screen gemacht für dich das die Paysafecard wirklich existiert hat : )
Hey,
Also wenn ein Adminstrator im OOChat schreibt steht dort Adminstrator Name: Text ( Adminstrator Admin Rank 3 ) aber wenn ein Moderator dort schreiben will passiert nichts ( Admin Rank 1 )... wieso? Ich finde es einfach nicht heraus.
Code:
if(strcmp(cmd, "/ooc", true) == 0 || strcmp(cmd, "/o", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(gPlayerLogged[playerid] == 0)
{
SendClientMessage(playerid, COLOR_GREY, " Du bist noch nicht Eingeloggt !");
return 1;
}
if(PlayerInfo[playerid][pMuted] == 1)
{
SendClientMessage(playerid, TEAM_CYAN_COLOR, " Du kannst nicht sprechen, du bist gemutet !");
return 1;
}
GetPlayerName(playerid, sendername, sizeof(sendername));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result))
{
SendClientMessage(playerid, COLOR_GRAD2, "NUTZUNG: (/o)oc [ooc chat]");
return 1;
}
if(PlayerInfo[playerid][pAdmin] == 1)
{
format(string, sizeof(string), "(( {FF0005}Moderator{FFFFFF} %s: %s ))", sendername, result);
}
if(PlayerInfo[playerid][pAdmin] == 2)
{
format(string, sizeof(string), "(( {FF0005}Super Moderator{FFFFFF} %s: %s ))", sendername, result);
}
else if(PlayerInfo[playerid][pAdmin] == 3)
{
format(string, sizeof(string), "(( {FF0005}Adminstrator{FFFFFF} %s: %s ))", sendername, result);
}
else if(PlayerInfo[playerid][pAdmin] == 1337)
{
format(string, sizeof(string), "(( {FF0005}Adminstrator 1337{FFFFFF} %s: %s ))", sendername, result);
}
else if(PlayerInfo[playerid][pAdmin] == 1338)
{
format(string, sizeof(string), "(( {FF0005}Fraktionsverwalter{FFFFFF} %s: %s ))", sendername, result);
}
else if(PlayerInfo[playerid][pAdmin] == 1339)
{
format(string, sizeof(string), "(( {FF0005}High-Adminstrator{FFFFFF} %s: %s ))", sendername, result);
}
else if(PlayerInfo[playerid][pAdmin] == 2000)
{
format(string, sizeof(string), "(( {FF0005}Server-Manager{FFFFFF} %s: %s ))", sendername, result);
}
else if(PlayerInfo[playerid][pAdmin] == 2001)
{
format(string, sizeof(string), "(( {FF0005}Projektleitung{FFFFFF} %s: %s ))", sendername, result);
}
else if(PlayerInfo[playerid][pAdmin] >= 2002)
{
format(string, sizeof(string), "(( {FF0005}Projektleitung{FFFFFF} %s: %s ))", sendername, result);
}
else if(PlayerInfo[playerid][pSupporter] == 1)
{
format(string, sizeof(string), "(( {FF0005}Supporter{FFFFFF} %s: %s ))", sendername, result);
}
else if(PlayerInfo[playerid][pAdmin] == 0 && (noooc))
{
format(string, sizeof(string), "(({FFFFFF} %s: %s ))", sendername, result);
}
else return 1;
OOCOff(COLOR_OOC,string);
Log("OA-Chat.txt",string);
}
return 1;
}
Bei /aduty kann der Moderator /aduty gehen aber wenn er wieder /aduty macht um den Admin Dienst zu verlassen steht dort Supporter %s hat den.... aber es sollte Moderator %s hat den.... stehen.
Code:
if (strcmp(cmd, "/adminduty", true) == 0 || strcmp(cmd, "/aduty", true) == 0)
{
if(AdminDuty[playerid] == 0)
{
if(PlayerInfo[playerid][pAdmin] == 1)
{
SetPlayerColor(playerid,0xFF0A00FF);
AdminDuty[playerid] = 1;
Mod[playerid] = Create3DTextLabel("Moderator on Duty",0xFF0A00FF,30.0,40.0,50.0,40.0,0);
Attach3DTextLabelToPlayer(Mod[playerid], playerid, 0.0, 0.0, 0.4);
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string,sizeof(string),"Moderator %s ist nun im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
return 1;
}
else if(PlayerInfo[playerid][pAdmin] == 2)
{
SetPlayerColor(playerid,0xFF0A00FF);
AdminDuty[playerid] = 1;
Mod[playerid] = Create3DTextLabel("Super Moderator on Duty",0xFF0A00FF,30.0,40.0,50.0,40.0,0);
Attach3DTextLabelToPlayer(Mod[playerid], playerid, 0.0, 0.0, 0.4);
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string,sizeof(string),"Super Moderator %s ist nun im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
return 1;
}
else if(PlayerInfo[playerid][pAdmin] == 3)
{
SetPlayerColor(playerid,0xFF0A00FF);
AdminDuty[playerid] = 1;
Supermod[playerid] = Create3DTextLabel("Administrator on Duty",0xFF0A00FF,30.0,40.0,50.0,40.0,0);
Attach3DTextLabelToPlayer(Supermod[playerid], playerid, 0.0, 0.0, 0.4);
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string,sizeof(string),"Administrator %s ist nun im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
return 1;
}
else if(PlayerInfo[playerid][pAdmin] == 1337)
{
SetPlayerColor(playerid,0xFF0A00FF);
AdminDuty[playerid] = 1;
Admin[playerid] = Create3DTextLabel("1337 Administrator on Duty",0xFF0A00FF,30.0,40.0,50.0,40.0,0);
Attach3DTextLabelToPlayer(Admin[playerid], playerid, 0.0, 0.0, 0.4);
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string,sizeof(string),"1337 Adminstrator %s ist nun im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
return 1;
}
else if(PlayerInfo[playerid][pAdmin] == 1338)
{
SetPlayerColor(playerid,0xFF0A00FF);
AdminDuty[playerid] = 1;
Admin[playerid] = Create3DTextLabel("Fraktionsverwalter on Duty",0xFF0A00FF,30.0,40.0,50.0,40.0,0);
Attach3DTextLabelToPlayer(Admin[playerid], playerid, 0.0, 0.0, 0.4);
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string,sizeof(string),"Fraktionsverwalter %s ist nun im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
return 1;
}
else if(PlayerInfo[playerid][pAdmin] == 1339)
{
SetPlayerColor(playerid,0xFF0A00FF);
AdminDuty[playerid] = 1;
Admin[playerid] = Create3DTextLabel("High-Adminstrator on Duty",0xFF0A00FF,30.0,40.0,50.0,40.0,0);
Attach3DTextLabelToPlayer(Admin[playerid], playerid, 0.0, 0.0, 0.4);
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string,sizeof(string),"High-Adminstrator %s ist nun im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
return 1;
}
else if(PlayerInfo[playerid][pAdmin] == 2000)
{
SetPlayerColor(playerid,0xFF0A00FF);
AdminDuty[playerid] = 1;
Admin[playerid] = Create3DTextLabel("Server-Manager on Duty",0xFF0A00FF,30.0,40.0,50.0,40.0,0);
Attach3DTextLabelToPlayer(Admin[playerid], playerid, 0.0, 0.0, 0.4);
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string,sizeof(string),"Server-Manager %s ist nun im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
return 1;
}
else if(PlayerInfo[playerid][pAdmin] == 2001)
{
SetPlayerColor(playerid,0xFF0A00FF);
AdminDuty[playerid] = 1;
Admin[playerid] = Create3DTextLabel("Projektleitung on Duty",0xFF0A00FF,30.0,40.0,50.0,40.0,0);
Attach3DTextLabelToPlayer(Admin[playerid], playerid, 0.0, 0.0, 0.4);
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string,sizeof(string),"Projektleitung %s ist nun im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
return 1;
}
else if(PlayerInfo[playerid][pAdmin] == 2002)
{
SetPlayerColor(playerid,0xFF0A00FF);
AdminDuty[playerid] = 1;
Admin[playerid] = Create3DTextLabel("Projektleitung on Duty",0xFF0A00FF,30.0,40.0,50.0,40.0,0);
Attach3DTextLabelToPlayer(Admin[playerid], playerid, 0.0, 0.0, 0.4);
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string,sizeof(string),"Projektleitung %s ist nun im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
return 1;
}
else if(PlayerInfo[playerid][pSupporter] == 1)
{
SetPlayerColor(playerid,0xFF0A00FF);
AdminDuty[playerid] = 1;
Supporter[playerid] = Create3DTextLabel("Supporter on Duty",0xFF0A00FF,30.0,40.0,50.0,40.0,0);
Attach3DTextLabelToPlayer(Supporter[playerid], playerid, 0.0, 0.0, 0.4);
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string,sizeof(string),"Supporter %s ist nun im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
return 1;
}
}
if(AdminDuty[playerid] == 1)
{
if(PlayerInfo[playerid][pAdmin] == 1)
{
format(string,sizeof(string),"Moderator %s ist nun nicht mehr im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
SetPlayerHealth(playerid, 100);
}
if(PlayerInfo[playerid][pAdmin] == 2)
{
format(string,sizeof(string),"Super Moderator %s ist nun nicht mehr im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
SetPlayerHealth(playerid, 100);
}
else if(PlayerInfo[playerid][pAdmin] == 3)
{
format(string,sizeof(string),"Administrator %s ist nun nicht mehr im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
SetPlayerHealth(playerid, 100);
}
else if(PlayerInfo[playerid][pAdmin] == 1337)
{
format(string,sizeof(string),"1337 Administrator %s ist nun nicht mehr im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
SetPlayerHealth(playerid, 100);
}
else if(PlayerInfo[playerid][pAdmin] == 1338)
{
format(string,sizeof(string),"Fraktionsverwalter %s ist nun nicht mehr im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
SetPlayerHealth(playerid, 100);
}
else if(PlayerInfo[playerid][pAdmin] == 1339)
{
format(string,sizeof(string),"High-Adminstrator %s ist nun nicht mehr im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
SetPlayerHealth(playerid, 100);
}
else if(PlayerInfo[playerid][pAdmin] == 2000)
{
format(string,sizeof(string),"Server-Manager %s ist nun nicht mehr im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
SetPlayerHealth(playerid, 100);
}
else if(PlayerInfo[playerid][pAdmin] == 2001)
{
format(string,sizeof(string),"Projektleitung %s ist nun nicht mehr im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
SetPlayerHealth(playerid, 100);
}
else if(PlayerInfo[playerid][pAdmin] == 2002)
{
format(string,sizeof(string),"Projektleitung %s ist nun nicht mehr im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
SetPlayerHealth(playerid, 100);
}
else if(PlayerInfo[playerid][pSupporter] == 1)
{
format(string,sizeof(string),"Supporter %s ist nun nicht mehr im Dienst",sendername,playerid);
SendClientMessageToAll(0xFF0A00FF, string);
SetPlayerHealth(playerid, 100);
}
Delete3DTextLabel(Admin[playerid]);
Delete3DTextLabel(Supermod[playerid]);
Delete3DTextLabel(Mod[playerid]);
Delete3DTextLabel(Supporter[playerid]);
Delete3DTextLabel(Admin[playerid]);
Delete3DTextLabel(Supermod[playerid]);
Delete3DTextLabel(Mod[playerid]);
Delete3DTextLabel(Supporter[playerid]);
AdminDuty[playerid] = 0;
{
if(PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pLeader] == 1)
{
SetPlayerColor(playerid, NAMECOLOR_LSCOP);
}
else
{
SetPlayerColor(playerid,TEAM_HIT_COLOR);
}
}
return 1;
}
return 1;
}
Hey,
Ich versuche seit einer Stunde /auftraggeben zu fixxen.... man kann jemanden den Auftrag geben via /auftraggeben aber man bekommt kein Geld wenn man diese Person tötet der Code:
else if ((strcmp("Auftraggeben", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("Auftraggeben")))
{
if(PlayerInfo[playerid][pRank] < 4)
{
SendClientMessage(playerid, COLOR_GREY, " Du brauchst Rank 4 um Verträge mit Hitmans zu schließen!");
return 0;
}
if(hitfound == 0)
{
SendClientMessage(playerid, COLOR_GREY, " Es wurde nichts gefunden!");
return 0;
}
tmp = strtok(text, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD1, "Verwendung: Givehit [spielerid/teildesnamens]");
return 0;
}
//giveplayerid = strval(tmp);
giveplayerid = ReturnUser(tmp);
if(IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
if(PlayerInfo[giveplayerid][pLeader] != 8 && PlayerInfo[giveplayerid][pMember] != 8)
{
SendClientMessage(playerid, COLOR_GREY, " Dieser Spieler ist kein Hitman!");
return 0;
}
if(GoChase[giveplayerid] < 999)
{
SendClientMessage(playerid, COLOR_GREY, " Dieser Hitman ist bereits beschäftigt!");
return 0;
}
if(IsPlayerConnected(hitid))
{
GetPlayerName(playerid, sendername, sizeof(sendername));
GetPlayerName(giveplayerid, giver, sizeof(giver));
GetPlayerName(hitid, giveplayer, sizeof(giveplayer));
//format(string, sizeof(string), "* You assiGERd%s to kill: %s(ID:%d), for $%d.", giver, giveplayer, hitid, PlayerInfo[hitid][pValue]);
//SendClientMessage(playerid, COLOR_YELLOW, string);
// format(string, sizeof(string), "* Hitman %s has assiGERd you to kill: %s(ID:%d), for $%d.", sendername, giveplayer, hitid, PlayerInfo[hitid][pValue]);
//SendClientMessage(giveplayerid, COLOR_YELLOW, string);
format(string, sizeof(string), "* Hitman %s, stimme Hitman %s zu, %s(ID:%d) für %d$ zu killen.", sendername, giver, giveplayer, hitid, PlayerInfo[hitid][pHeadValue]);
SendFamilyMessage(8, COLOR_YELLOW, string);
GoChase[giveplayerid] = hitid;
GetChased[hitid] = giveplayerid;
GotHit[hitid] = 1;
hitid = 0;
hitfound = 0;
return 0;
}
else
{
SendClientMessage(playerid, COLOR_GREY, " Dieser Spieler ist offline!");
return 0;
}
}
return 0;
}
else
{
SendClientMessage(playerid, COLOR_GREY, " Dieser Hitman ist nicht online!");
return 0;
}
}
und/oder
if(strcmp(cmd, "/auftraggeben", true) == 0)
{
if(IsPlayerInFrac(playerid, 8))
{
if(PlayerInfo[playerid][pRank] < 4)
{
SendClientMessage(playerid, COLOR_GREY, " Du brauchst Rank 4 um Aufträge einem Hitman zuzuteilen");
return 1;
}
if(hitfound == 0)
{
SendClientMessage(playerid, COLOR_GREY, "Es gibt derzeit keine Aufträge, schau vorher unter /auftrag nach.");
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD1, "Benutzung: /auftraggeben [Hitman ID]");
return 1;
}
giveplayerid = ReturnUser(tmp);
if(IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
if(PlayerInfo[giveplayerid][pLeader] != 8 && PlayerInfo[giveplayerid][pMember] != 8)
{
SendClientMessage(playerid, COLOR_GREY, "Dieser Spieler ist kein Hitman!");
return 1;
}
if(GoChase[giveplayerid] < 999)
{
SendClientMessage(playerid, COLOR_GREY, "Dieser Hitman ist bereits beschäftigt!");
return 1;
}
if(IsPlayerConnected(hitid))
{
new giver[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, sizeof(sendername));
GetPlayerName(giveplayerid, giver, sizeof(giver));
GetPlayerName(hitid, giveplayer, sizeof(giveplayer));
format(string, sizeof(string), "* Hitman %s hat %s den Auftrag gegeben, %s(ID:%d) für %d$ zu töten.", sendername, giver, giveplayer, hitid, PlayerInfo[hitid][pHeadValue]);
SendFamilyMessage(8, COLOR_YELLOW, string);
GoChase[giveplayerid] = hitid;
GetChased[hitid] = giveplayerid;
GotHit[hitid] = 1;
hitid = 0;
hitfound = 0;
return 1;
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Dieser Spieler ist offline!");
return 1;
}
}
return 1;
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Dieser Hitman ist nicht online!");
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, "Du bist kein Hitman!");
}
return 1;
}
Meine zweite Frage wäre....
Wie kann ich machen das Supporter immer nur Sultäne Spawnen können also mit /supmobil dann bekommt man ein Sultan in Farben Color 3