09.04.2012, 18:21
(
Последний раз редактировалось RebeloX; 09.04.2012 в 20:02.
Причина: Atualizaзгo - Obrigado Pedro (:
)
Criaзгo sistema de casas em MySQL
Boas pessoal, hoje irei ensinar como vocкs podem fazer o vosso sistema de casas em MySQL, primeiro de tudo vocкs deverгo saber usar MySQL, neste caso eu irei usar o Plugin do BlueG a R7 que й o update mais recente que ele fez, entгo vamos lб comeзar.
pawn Код:
#define M_HOUSE (100) //Aqui serб o mбximo de casas do servidor, coloque as que vocк quiser...
new entrou[MAX_PLAYERS];
new ChaveCasa[MAX_PLAYERS];
new MysqlC; //Estб й uma variбvel que iremos usar mais para a frente.
new const
mysql_host[] = "localhost", //Nгo troque
mysql_user[] = "root", //Nгo troque
mysql_password = "1234", //mude para a password do seu MySQL
mysql_database[] = "samp"; //esta й a nossa database, vocк deverб criar uma assim.
new query[500]; //Sim iremos necessitar de 500 cйlulas.
enum hInfo{
hOwner[25], //Aqui serб gravado o nome do comprador...
Float:hEX, //Coordenada da entrada X
Float:hEY, //Coordenada da entrada Y
Float:hEZ, //Coordenada da entrada Z
Float:hSX, //Coordenada para a saнda X
Float:hSY, //Coordenada para a saнda Y
Float:hSZ, //Coordenada para a saнda Z
hMundo, //Aqui serб o mundo da casa
hInt, //Aqui serб o interior da casa
hVenda, //Aqui serб uma variбvel para verificar se a casa estб a venda ou nгo.
hPreco, //Aqui serб o preзo da casa.
hLock //Aqui serб uma variбvel para trancar a casa.
};
new HouseInfo[M_HOUSE][hInfo];
pawn Код:
//OnGameModeInIt
MysqlStartConnection();
//Fim do GM
forward MysqlStartConnection();
public MysqlStartConnection(){
MysqlC = mysql_connect(mysql_host,mysql_user,mysql_database,mysql_password); //aqui й a conexгo a database
if(!MysqlC){
print("Foi impossivel conectar a database, reveja as definiзхes novamente");
SendRconCommand("exit"); //Iremos fechar o servidor para nгo haver problemas com as casas...
}
print("Conectado a database.");
mysql_function_query(MysqlC,
"CREATE TABLE IF NOT EXISTS `casas` ( \
`id` int(11) NOT NULL AUTO_INCREMENT, \
`owner` varchar(25) NOT NULL, \
`EX` double NOT NULL, \
`EY` double NOT NULL, \
`EZ` double NOT NULL, \
`Interior` int(11) NOT NULL, \
`Mundo` int(11) NOT NULL, \
`Venda` int(11) NOT NULL, \
`Preco` int(11) NOT NULL, \
PRIMARY KEY (`id`) \
)",false,"r@MysqlStartConnection","s","casas");
//Aqui iremos criar uma tabela com esses parвmetros caso nгo existir, depois iremos mandar uma resposta de sucesso para a public r@MysqlStartConnection.
LoadHouse(); //Eu gosto muito de usar funзхes inglesas, poupгo mais espaзo...
return 1;
}
forward r@MysqlStartConnection(text[]);
public r@MysqlStartConnection(text[]){
printf("tabela %s criada com sucesso",text);
return 1;
}
pawn Код:
forward LoadHouse();
public LoadHouse(){
for(new i = 0; i<M_HOUSE; i++){
mysql_format(MysqlC,query,"SELECT * FROM `casas` WHERE id=%d",i); //Aqui iremos formatar o nosso query, isto significa assim "SELECIONAR TUDO DA TABELA `casas` ONDE o id й igual a %d", lembrando que o * й igual a TUDO, vocк tem que usar * nгo pode usar ALL й sempre * ou o parвmetro em especifico.
mysql_function_query(MysqlC,query,true,"r@LoadHouse","i",i);
}
return 1;
}
forward r@LoadHouse(i);
public r@LoadHouse(i){
new rows,fields;
cache_get_data(rows,fields,MysqlC);
cache_get_field_content(0,"owner",query,MysqlC);
strmid(query,HouseInfo[i][hOwner],0,strlen(query),255);
cache_get_field_content(0,"EX",query,MysqlC);
HouseInfo[i][hEX] = floatstr(query);
cache_get_field_content(0,"EZ",query,MysqlC);
HouseInfo[i][hEZ] = floatstr(query);
cache_get_field_content(0,"EZ",query,MysqlC);
HouseInfo[i][hEZ] = floatstr(query);
cache_get_field_content(0,"Interior",query,MysqlC);
HouseInfo[i][hInt] = strval(query);
cache_get_field_content(0,"Mundo",query,MysqlC);
HouseInfo[i][hMundo] = strval(query);
cache_get_field_content(0,"Venda",query,MysqlC);
HouseInfo[i][hVenda] = strval(query);
cache_get_field_content(0,"Preco",query,MysqlC);
HouseInfo[i][hPreco] = strval(query);
CreateExit(i,HouseInfo[i][hInt]);
return 1;
}
forward CreateExit(i,var);
public CreateExit(i,var){
if(var == 1){
HouseInfo[i][hSX] = 223.1929;
HouseInfo[i][hSY] = 1287.0780;
HouseInfo[i][hSZ] = 1082.1406;
}
else if(var == 2){
HouseInfo[i][hSX] = 225.756989;
HouseInfo[i][hSY] = 1240.000000;
HouseInfo[i][hSZ] = 1082.149902;
}
//Enfim vб adicionando mais interiores e pegando a coordenada da saнda deles...
return 1;
}
pawn Код:
CMD:criarcasa(playerid,params[]){
if(isnull(params))
return SendClientMessage(playerid,-1,"USE: /criarcasa [ID da casa]");
CheckHouse(strval(params));
return 1;
}
forward CheckHouse(playerid,var);
public CheckHouse(playerid,var){
mysql_format(MysqlC,query,"SELECT * FROM `casas` WHERE id=%d",var);
mysql_function_query(MysqlC,query,true,"r@CheckHouse","ii",playerid,var);
return 1;
}
forward r@CheckHouse(playerid,var);
public r@CheckHouse(playerid,var){
new rows,fields;
cache_get_data(rows,fields);
if(rows){
SendClientMessage(playerid,-1,"Jб existe uma casa com este id...");
}
else {
new Float:hPos[3];
GetPlayerPos(playerid,hPos[0],hPos[1],hPos[2]);
HouseInfo[var][hEX] = hPos[0];
HouseInfo[var][hEY] = hPos[1];
HouseInfo[var][hEZ] = hPos[2];
mysql_format(MysqlS,query,"INSERT INTO `casas` (owner,EX,EY,EZ,mundo,interior,venda,preco) VALUES ('EM-VENDA',%f,%f,%f,1,1,1,1000);",HouseInfo[hid][hEX],HouseInfo[hid][hEY],HouseInfo[hid][hEZ]);
mysql_function_query(MysqlS,query,true,"r@CheckSave","i",playerid);
}
}
forward r@CheckSave(playerid);
public r@CheckSave(playerid){
SCM(playerid,-1,"Casa Criada Com sucesso.");
return 1;
}
pawn Код:
CMD:comprarcasa(playerid){
new pname[25],money = GetPlayerMoney(playerid);
GetPlayerName(playerid,pname,sizeof(pname));
for(new i=0; i<M_HOUSE; i++){
if(IsPlayerInRangeOfPoint(playerid,10,HouseInfo[i][hEX],HouseInfo[i][hEY],HouseInfo[i][hEZ]))
{
if(ChaveCasa[playerid] != 9999)
return SendClientMessage(playerid,-1,"Ei nigga vocк jб tem uma casa, vende ela (/vendercasa)");
else if(HouseInfo[i][hVenda] == 1){
f(money > HouseInfo[i][hPreco]){
GivePlayerMoney(playerid,-HouseInfo[i][hPreco]);
strmid(pname,HouseInfo[i][hOwner],0,strlen(pname),255);
format(result,sizeof(result),"Vocк pagou %d$ pela casa, sua chave й %d",HouseInfo[i][hPreco],i);
SendClientMessage(playerid,-1,result);
ChaveCasa[playerid] = i;
HouseInfo[i][hVenda] = 0;
UpdateHouse(playerid,housei);
}
else
return SendClientMessage(playerid,-1,"Vocк nгo tem esse dinheiro...");
}
}
}
return 1;
}
CMD:sair(playerid){
for(new i=0; i<M_HOUSE; i++){
if(IsPlayerInRangeOfPoint(playerid,3,HouseInfo[i][hSX], HouseInfo[i][hSY], HouseInfo[i][hSZ])){
if(Entrou[playerid] == i){
SetPlayerInterior(playerid,0);
SetPlayerPos(playerid,HouseInfo[i][hEX],HouseInfo[i][hEY],HouseInfo[i][hEZ]);
SetCameraBehindPlayer(playerid);
SetPlayerVirtualWorld(playerid,0);
Entrou[playerid] = 9999;
}
}
}
return 1;
}
CMD:entrar(playerid){
for(new i=0; i<M_HOUSE; i++){
if(IsPlayerInRangeOfPoint(playerid,10,HouseInfo[i][hEX],HouseInfo[i][hEY],HouseInfo[i][hEZ]))
{
if(HouseInfo[i][hLocked] == 0 || ChaveCasa[playerid] == i){
SetPlayerInterior(playerid,HouseInfo[i][hInt]);
SetPlayerVirtualWorld(playerid,HouseInfo[i][hWorld]);
SetPlayerPos(playerid,HouseInfo[i][hSX],HouseInfo[i][hSY],HouseInfo[i][hSZ]);
GameTextForPlayer(playerid,"~g~Bem Vindo a casa",3000,1);
Entrou[playerid] = i;
}
else {
GameTextForPlayer(playerid,"~r~Trancada use /destrancar",3000,1);
}
}
}
return 1;
}
CMD:trancar(playerid){
for(new i=0; i<M_HOUSE; i++){
if(IsPlayerInRangeOfPoint(playerid,10,HouseInfo[i][hEX],HouseInfo[i][hEY],HouseInfo[i][hEZ]))
{
if(ChaveCasa[playerid] == i){
if(HouseInfo[i][hLocked] == 0){
HouseInfo[i][hLocked] = 1;
GameTextForPlayer(playerid,"~r~Casa trandaca",3000,1);
}
else if(HouseInfo[i][hLocked] == 1){
SCM(playerid,-1,"((A sua casa jб estб destrancada, use /trancar para trancar a mesma.))");
}
}
}
}
return 1;
}
CMD:destrancar(playerid){
for(new i=0; i<M_HOUSE; i++){
if(IsPlayerInRangeOfPoint(playerid,10,HouseInfo[i][hEX],HouseInfo[i][hEY],HouseInfo[i][hEZ]))
{
if(ChaveCasa[playerid] == i){
if(HouseInfo[i][hLocked] == 0){
SCM(playerid,-1,"((A sua casa jб estб destrancada, use /trancar para trancar a mesma.))");
}
else if(HouseInfo[i][hLocked] == 1){
HouseInfo[i][hLocked] = 0;
GameTextForPlayer(playerid,"~g~Casa destrandaca",3000,1);
}
}
}
}
return 1;
}
CMD:vendercasa(playerid){
if(ChaveCasa[playerid] == 9999)
return SCM(playerid,-1,"ERRO: vocк nгo tem nenhuma casa.");
else {
new housei = ChaveCasa[playerid];
GivePlayerMoney(playerid,HouseInfo[housei][hPreco]);
HouseInfo[housei][hVenda] = 1;
format(result,sizeof(result),"~w~Vocк vendeu a sua casa por ~g~%d$",HouseInfo[housei][hPreco]);
GameTextForPlayer(playerid,result,3000,1);
ChaveCasa[playerid] = 9999;
UpdateHouse(playerid,housei);
}
return 1;
}
forward UpdateHouse(playerid,hid);
public UpdateHouse(playerid,hid){
mysql_format(MysqlS,query,"UPDATE `casas` SET owner='%s' , venda=%d WHERE id=%d",HouseInfo[hid][hOwner],HouseInfo[hid][hVenda],hid);
mysql_function_query(MysqlS,query,true,"r@UpdateHouse","ii",playerid,hid);
return 1;
}[/i]
Bem por agora й isto pessoal, eu acho que jб deu para entender, acho que nгo preciso de explicar comandinho por comandinho, pois este tutorial й grande, mas bem, espero que gostem, eu estarei a fazer um sistema de criaзгo de casas caso queiram usar ele eu irei atualizar a pбgina quando o mesmo tiver feito, lembrando que ele gravarб em MySQL pessoal.
~Le Crйditos