Wiki
Clone wikiEFLC-Multiplayer / API Player Events
On Player
Connect
#!c++ //REGISTER ON MAIN: apiPlayerEvents::registerPlayerJoin(onPlayerConnect); bool onPlayerConnect(int playerid) { //Only getIp() is available at this connection stage //Deny the player connection if their IP is "192.168.0.1" if(strcmp(apiPlayer::get(playerid).getIp(), "192.168.0.1") == 0) { return false; //returning false makes the server drop the player connection } return true; }
Credentials
#!c++ //REGISTER ON MAIN: apiPlayerEvents::registerPlayerCredentials(onPlayerCredentials) bool onPlayerCredentials(int playerid) { //The player has successfully connected here. You can use all the apiPlayer class methods. apiPlayer::get(playerid).setSkin(1613899343); //Changes the player skin to NIKO's model apiMath::Vector3 spawnPos(-205.476f, 630.067f, 13.8088f); //Creates a vector with Central Park coordinates apiPlayer::get(playerid).spawn(spawnPos); //Finally we tell the player to Spawn return true; }
Respawn
#!c++ //REGISTER ON MAIN: apiPlayerEvents::registerPlayerRespawn(onPlayerRespawn) bool onPlayerRespawn(int playerid) { //This function is called when the player respawn after dying apiPlayer::get(playerid).removeWeapon(0); //Remove all weapons return true; }
Disconnect
#!c++ //REGISTER ON MAIN: apiPlayerEvents::registerPlayerLeft(onPlayerLeft) void onPlayerLeft(int playerid, int reason) { if(reason == 0) { char buf[50] = ""; sprintf_s(buf, "%s used /q", apiPlayer::get(playerid).getNick()); apiPlayer::sendMsgToAll(buf, 0xFF0000FF); } else if(reason == 1) { //Do nothing } }
AFK
#!c++ //REGISTER ON MAIN: apiPlayerEvents::registerPlayerAfk(onPlayerAfk) void onPlayerAfk(int playerid, bool status) { if(!status) return; //No longet AFK char buf[50] = ""; sprintf_s(buf, "%s is afk", apiPlayer::get(playerid).getNick()); apiPlayer::sendMsgToAll(buf, 0xFF0000FF); }
Swap Weapon
#!c++ //REGISTER ON MAIN: apiPlayerEvents::registerPlayerWeaponChanged(onPlayeChangeWeapon) bool onPlayeChangeWeapon(int playerid, int weapon, int ammo) { //Lets prevent players from using RPGs if(weapon == 18) return false; //Returning false will block the change return true; }
Weapons updated
#!c++ //REGISTER ON MAIN: apiPlayerEvents::registerPlayerWeaponsArrived(onPlayerWeaponsUpdated) bool onPlayerWeaponsUpdated(int playerid) { //This event is only trigged by the requestWeapons() method apiPlayer::player& p = apiPlayer::get(playerid); char buffer[40] = ""; int bWeapon = 0, bAmmo = 0; unsigned int size = p.getWeaponsSize(); for(unsigned int i = 0; i < size; i++) { p.getWeaponData(i, bWeapon, bAmmo); sprintf_s(buffer, "Weapon: %i, Ammo: %i", bWeapon, bAmmo); p.sendMsg(buffer, 0xFFFFFFFF); } return true; }
Chat
#!c++ //REGISTER ON MAIN: apiPlayerEvents::registerPlayerChat(onPlayerChat) void onPlayerChat(int playerid, const char* chat) { //A full example for this event is available at the demo project char buffer[130] = ""; sprintf_s(buffer, "%s: %s", apiPlayer::get(playerid).getNick(), chat); apiPlayer::sendMsgToAll(buffer, 0xFFFFFFFF); }
Death
#!c++ //REGISTER ON MAIN: apiPlayerEvents::registerPlayerDeath(onPlayerDeath) void onPlayerDeath(int playerid, int agentType, int agentId) { if(agentType == 0 && apiPlayer::isOn(agentId)) { //They were killed by another player } else if(agentType == 1 && apiVehicle::isVehicle(agentId)) { //They were killed by a vehicle } }
HP Change
#!c++ //REGISTER ON MAIN: apiPlayerEvents::registerPlayerHpChange(onPlayerHpChanged) void onPlayerHpChanged(int playerid, int agentType, int agentId) { //This function is called when the player HP changes //Use the example "onPlayerDeath" for reference }
Armor change
#!c++ //REGISTER ON MAIN: apiPlayerEvents::registerPlayerArmor(onPlayerArmorChanged) void onPlayerArmorChanged(int playerid, int newValue) { if(newValue > apiPlayer::get(playerid).getArmor()) { //Is the player using hacks?... If you say so apiPlayer::get(playerid).setArmor(0); } }
Dialog List Response
#!c++ //REGISTER ON MAIN: apiPlayerEvents::registerPlayerDialogListResponse(onPlayerDialogResponse) void onPlayerDialogResponse(int playerid, unsigned int dialogId, int buttonId, int rowId) { //A full example is available at the demo project //buttonId: 1 left btn, 0 right btn //rowId: 0 - row amount or -1 if none were selected }
Left Vehicle
#!c++ //REGISTER ON MAIN: apiPlayerEvents::registerLeftVehicle(onPlayerLeftVehicle) void onPlayerLeftVehicle(int playerid, int vehicleId, int seatId) { //WARNING: Do NOT delete the vehicle in this event //vehicleId: ID of the vehicle the player was inside //seatId: 0 being the driver's seat and 1-5 as passenger seats }
Entered vehicle
#!c++ //REGISTER ON MAIN: apiPlayerEvents::registerEnteredVehicle(onPlayerEnteredVehicle) void onPlayerEnteredVehicle(int playerid, int vehicleId, int seatId) { //WARNING: Do NOT delete the vehicle in this event //The player is inside the vehicle bool drivingLicense = true; //Add your logic for this if(seatId == 0 && !drivingLicense) { apiPlayer::get(playerid).removeFromVehicle(); } }
Entering Vehicle
#!c++ //REGISTER ON MAIN: apiPlayerEvents::registerEnteringVehicle(onPlayerRequestVehicleEntry) void onPlayerRequestVehicleEntry(int playerid, int vehicleId, int seatId, bool carjack) { //WARNING: Do NOT delete the vehicle in this event //The player entering the vehicle if(carjack) { apiPlayer::get(playerid).removeFromVehicle(); apiPlayer::get(playerid).sendMsg("Please dont carjack", 0xFFFF0000); } }
Enter Checkpoint
#!c++ //REGISTER ON MAIN: apiPlayerEvents::registerPlayerEnterCP(onPlayerEnterCheckPoint) void onPlayerEnterCheckPoint(int playerid, int checkpointId) { //The player is inside the checkpoint radius char buffer[40] = ""; sprintf_s(buffer, "You are inside checkpoint: %i", checkpointId); apiPlayer::get(playerid).sendMsg(buffer, 0xFFFFFFFF); }
Exit checkpoint
#!c++ //REGISTER ON MAIN: apiPlayerEvents::registerPlayerExitCP(onPlayerExitCheckPoint) void onPlayerExitCheckPoint(int playerid, int checkpointId) { //The player is no longer inside the checkpoint radius }
Updated