Is there any vector or any way to access all Player class objects?
I would like to extend Player class and access those objects using the object and not the playerid parameter. |
class Players {
public:
....
static MyPlayer *GetPlayer(int playerid) {
// Retrieve the existing Player object from players or add a new one.
}
...
private:
// A comparison function for std::set - compares two players using on their IDs.
static int ComparePlayers(const MyPlayer *p, const MyPlayer *q) {
return p->GetId() - q->GetId();
}
static std::set<MyPlayer*, ComparePlayers> players;
};
bool OnPlayerConnect(int playerid) {
MyPlayer *player = Players::GetPlayer(playerid);
// Do stuff with player
}
class MyPlayer :
public Player
{
explicit MyPlayer(int x) : Player(x) { }
};
What does the 'Plugin does not conform to architecture.' error message mean? What did I leave out?
Edit: This is utterly embarassing. I thought I didn't even need to read the CMake stuff since I just wanted to create a quick test, but no. I've read that this error is caused by not having a .def file for your project, trying cmake now |
extern "C"
{
bool __stdcall OnPlayerConnect(int playerid)
{
int giveplayerid;
char join[144];
SendClientMessage(playerid, COLOR_GREEN, "Hello.");
sprintf(join, "%s joined to us. IP: %s", giveplayerid, ReturnIP(giveplayerid));
SendPlayerMessageToAll(giveplayerid, join);
return true;
}
}
Hi. I don't know it's an bug or maybe I'm doing something wrong. Further - I've this code:
pawn Code:
How to fix it? |
extern "C"
{
bool __stdcall OnPlayerConnect(int playerid)
{
char join[144], name[24];
GetPlayerName(playerid, name, 24);
SendClientMessage(playerid, COLOR_GREEN, "Hello.");
sprintf(join, "%s joined to us. IP: %s", name, ReturnIP(playerid));
SendClientMessageToAll(COLOR_GREEN, join);
return true;
}
}
int GetVehicleModelIDFromName(char vname[])
{
for(int i = 0; i < 211; i++)
{
if(strfind(aVehicleNames[i], vname) != -1) // I don't know what I could replace strfind. When I'm tried with string::vname.find - I've an bug - when I wrote "/car infernus", I received Landstalker...
return i + 400;
}
return -1;
}
int GetVehicleModelIDFromName(std::string vname)
{
for(int i = 0; i < 211; i++)
{
if( vname.find( aVehicleNames[i] ) != std::string::npos )
{
return i + 400;
}
}
return -1;
}
My issue was another, but thanks.
But now I would like to use the strfind function, that in C++ and GDK don't exists. So... how I can modify this code to work properly? pawn Code:
|
pawn Code:
|
#include <algorithm>
#include <string>
#include <map>
std::map<std::string,unsigned int> Vehicles;
void InitVehicleNames()
{
//for consistency use only lowercase, or uppercase, but not both
Vehicles["landstalker"] = 400;
Vehicles["bravura"] = 401;
//....
}
unsigned int GetVehicleIdFromName(std::string name)//returns 0 when not found
{
//uncomment if you want case-insensetive compare
//std::string lowername(name);
//std::transform(name.begin(), name.end(), name.begin(), ::tolower);
if(Vehicles.find(name) != Vehicles.end())
return Vehicles[name];//change 'name' to 'lowername' for case insensetive compare
return 0;
}
else if(strcmp(cmd, "/car") == 0)
{
int carid;
char
string[148],
*cmd;
cmd = strtok(const_cast<char*>(cmdtext), " ");
#define strtok_special(a,b) cmd = strtok(NULL, " "); if(cmd == 0 || !strlen(cmd)) return a; b = strval(cmd);
strtok_special(SendClientMessage(playerid, COLOR_WHITE, "/car [id / name]"), carid);
if(!strlen(cmd)) return SendClientMessage(playerid, COLOR_ADMIN, "Where is your car name?");
carid = GetVehicleModelIDFromName(cmd);
//if(carid < 400 || carid > 611) return SendClientMessage(playerid, COLOR_ADMIN, "That vehicle name was not found"); // I suggested this code, but it nothing happens even it is commented. I've only message below, but without car name and ID...
sprintf(string, "Car: %s, ID: %d", aVehicleNames[carid - MIN_VEHI_ID], carid);
SendClientMessage(playerid, COLOR_GREEN, string);
CreatePlayerVehicle(playerid, carid);
return true;
}
#include <string>
#include <iostream>
char aVehicleNames[212][32] =
{
{"Landstalker"},
{"Bravura"},
{"Buffalo"},
{"Linerunner"},
{"Perrenial"},
{"Sentinel"},
{"Dumper"},
{"Firetruck"},
{"Trashmaster"},
{"Stretch"},
{"Manana"},
{"Infernus"},
{"Voodoo"},
{"Pony"},
{"Mule"},
{"Cheetah"},
{"Ambulance"},
{"Leviathan"},
{"Moonbeam"},
{"Esperanto"},
{"Taxi"},
{"Washington"},
{"Bobcat"},
{"MrWhoopee"},
{"BFInjection"},
{"Hunter"},
{"Premier"},
{"Enforcer"},
{"Securicar"},
{"Banshee"},
{"Predator"},
{"Bus"},
{"Rhino"},
{"Barracks"},
{"Hotknife"},
{"Trailer1"},
{"Previon"},
{"Coach"},
{"Cabbie"},
{"Stallion"},
{"Rumpo"},
{"RCBandit"},
{"Romero"},
{"Packer"},
{"Monster"},
{"Admiral"},
{"Squalo"},
{"Seasparrow"},
{"Pizzaboy"},
{"Tram"},
{"Trailer2"},
{"Turismo"},
{"Speeder"},
{"Reefer"},
{"Tropic"},
{"Flatbed"},
{"Yankee"},
{"Caddy"},
{"Solair"},
{"BerkleyRCVan"},
{"Skimmer"},
{"PCJ-600"},
{"Faggio"},
{"Freeway"},
{"RCBaron"},
{"RCRaider"},
{"Glendale"},
{"Oceanic"},
{"Sanchez"},
{"Sparrow"},
{"Patriot"},
{"Quad"},
{"Coastguard"},
{"Dinghy"},
{"Hermes"},
{"Sabre"},
{"Rustler"},
{"ZR-350"},
{"Walton"},
{"Regina"},
{"Comet"},
{"BMX"},
{"Burrito"},
{"Camper"},
{"Marquis"},
{"Baggage"},
{"Dozer"},
{"Maverick"},
{"NewsChopper"},
{"Rancher"},
{"FBIRancher"},
{"Virgo"},
{"Greenwood"},
{"Jetmax"},
{"Hotring"},
{"Sandking"},
{"Blista Compact"},
{"Police Maverick"},
{"Boxville"},
{"Benson"},
{"Mesa"},
{"RCGoblin"},
{"HotringRacer A"},
{"HotringRacer B"},
{"BloodringBanger"},
{"Rancher"},
{"SuperGT"},
{"Elegant"},
{"Journey"},
{"Bike"},
{"MountainBike"},
{"Beagle"},
{"Cropdust"},
{"Stunt"},
{"Tanker"},
{"Roadtrain"},
{"Nebula"},
{"Majestic"},
{"Buccaneer"},
{"Shamal"},
{"Hydra"},
{"FCR-900"},
{"NRG-500"},
{"HPV1000"},
{"CementTruck"},
{"TowTruck"},
{"Fortune"},
{"Cadrona"},
{"FBITruck"},
{"Willard"},
{"Forklift"},
{"Tractor"},
{"Combine"},
{"Feltzer"},
{"Remington"},
{"Slamvan"},
{"Blade"},
{"Freight"},
{"Streak"},
{"Vortex"},
{"Vincent"},
{"Bullet"},
{"Clover"},
{"Sadler"},
{"FiretruckLA"},
{"Hustler"},
{"Intruder"},
{"Primo"},
{"Cargobob"},
{"Tampa"},
{"Sunrise"},
{"Merit"},
{"Utility"},
{"Nevada"},
{"Yosemite"},
{"Windsor"},
{"MonsterA"},
{"MonsterB"},
{"Uranus"},
{"Jester"},
{"Sultan"},
{"Stratum"},
{"Elegy"},
{"Raindance"},
{"RC Tiger"},
{"Flash"},
{"Tahoma"},
{"Savanna"},
{"Bandito"},
{"FreightFlat"},
{"StreakCarriage"},
{"Kart"},
{"Mower"},
{"Duneride"},
{"Sweeper"},
{"Broadway"},
{"Tornado"},
{"AT-400"},
{"DFT-30"},
{"Huntley"},
{"Stafford"},
{"BF-400"},
{"Newsvan"},
{"Tug"},
{"Trailer 3"},
{"Emperor"},
{"Wayfarer"},
{"Euros"},
{"Hotdog"},
{"Club"},
{"FreightCarriage"},
{"Trailer3"},
{"Andromada"},
{"Dodo"},
{"RCCam"},
{"Launch"},
{"PoliceCar(LSPD)"},
{"PoliceCar(SFPD)"},
{"PoliceCar(LVPD)"},
{"PoliceRanger"},
{"Picador"},
{"S.W.A.T.Van"},
{"Alpha"},
{"Phoenix"},
{"Glendale"},
{"Sadler"},
{"LuggageTrailerA"},
{"LuggageTrailerB"},
{"StairTrailer"},
{"Boxville"},
{"FarmPlow"},
{"UtilityTrailer"}
};
int GetVehicleModelIDFromName(std::string vname)
{
for(int i = 0; i < 211; i++)
{
if( vname.find( aVehicleNames[i] ) != std::string::npos )
{
return i + 400;
}
}
return -1;
}
int main()
{
std::cout << "Infernus ID == " <<
GetVehicleModelIDFromName("Infernus") << std::endl;
return 0;
}
#include <fstream>
#include <sstream>
int main()
{
std::ofstream out("vehiclemap.txt");
if( out.is_open() )
{
out << "std::unordered_map<std::string, int> gVehicleMap;\n\n";
for(int i = 0; i < 211; i++)
{
std::stringstream buffer;
buffer << "gVehicleMap.insert( std::make_pair<std::string, int>( (std::string)\""
<< aVehicleNames[i] << "\", " << GetVehicleModelIDFromName( aVehicleNames[i] )
<< ") );" << std::endl;
out << buffer.str();
}
out.close();
}
return 0;
}