Ajuda com pickups - Treze_. - 03/07/2022
Bom, de inicio eu tive problema com ID mas consegui resolver, agora estou com problema de pickups
Código: CMD:comprarcasa(playerid)
{
new doccasa[130];
for(new i = 1;i < MAX_CASA; i++)
{
format(doccasa,130,"Casas/%d.inc",i);
if(IsPlayerInRangeOfPoint(playerid,2, DOF2_GetFloat(doccasa,"X"),DOF2_GetFloat(doccasa,"Y"), DOF2_GetFloat(doccasa,"Z")))
{
DestroyPickup(casas [pickup] [i]);
break;
}
}
return 1;
}
Código: stock carregarcasas()
{
new doccasa[130];
for(new i = 1;i < MAX_CASA; i++)
{
format(doccasa,130,"Casas/%d.inc",i);
if(DOF2_FileExists(doccasa))
{
casas [pickup] [i] = CreateDynamicPickup(1273, 23, casas[x],casas[y], casas [z]);
}
}
return 1;
}
Praticamente cada vez que o player vai digitar o comando /comprarcasa ,o pickup é destruido mas sempre é o anterior exemplo:
o jogador vai comprar a casa id 3,o pickup da casa do id 2 ou 1 q é destruido e do id 3 permanece intacto.-.
RE: Ajuda com pickups - Seck - 03/07/2022
Cade o createpickup? Tem que colocar o id de cada pickup diferente, se colocar todos iguais pode dar conflito
RE: Ajuda com pickups - Treze_. - 03/07/2022
Bom, tem o createdynamicpickup que é criado quando o serve liga
Código: stock carregarcasas()
{
new doccasa[130];
for(new i = 1;i < MAX_CASA; i++)
{
format(doccasa,130,"Casas/%d.inc",i);
if(DOF2_FileExists(doccasa))
{
casas [pickup] [i] = CreateDynamicPickup(1273, 23, casas[x],casas[y], casas [z]);
}
}
return 1;
}
e quando é criado a partir de /criarcasa
Código: CMD:criarcasa(playerid)
{
casas [id] ++;
casas[wordid] ++;
new doccasa[130],str[60];
format(doccasa,130,"Casas/%d.inc",casas[id]);
format(str,60,"Casa id %d criada com sucesso",casas[id]);
SendClientMessage(playerid,-1, str);
GetPlayerPos(playerid,casas[x],casas[y], casas[z]);
casas[pickup] [id] = CreateDynamicPickup(1273, 23, casas[x],casas[y], casas[z]);
return 1;
}
e tem as variáveis só pra deixar anotado aqui
Código: #define MAX_CASA 300
enum infocasa{
id,
tipo,
Float:x,
Float:y,
Float:z,
Float:xinterior,
Float:yinterior,
Float:zinterior,
wordid,
dono,
pickup[MAX_CASA],
Text3D:texto,
valor
};
new casas [infocasa];
RE: Ajuda com pickups - k2bi_YT - 03/07/2022
Fiz algumas alterações, como são mais de uma casa, basicamente deve conter uma variavel pra cada casa, entao na "new casa[..]", deve conter "quantas variaveis serão criadas" pra cada casa.
Recomendo que carregue todas as funções que existe na "enum infocasa", já na stock carregarcasas, assim você não precisa ficar usando a DOF2 toda vez, basta usar os valores salvos na variavel. Caso precise de ajuda na formatação do code, pode me adicionar no DC ou pedir ajuda para algum membro aqui do fórum.
Código PHP: enum infocasa{ id, tipo, Float:x, Float:y, Float:z, Float:xinterior, Float:yinterior, Float:zinterior, wordid, dono, pickup, Text3D:texto, valor
};
new casas[MAX_CASA][infocasa];
CMD:criarcasa(playerid) { new doccasa[65],str[60]; for(new i = 1; i < MAX_CASA; ++i) { format(doccasa, 64,"Casas/%d.inc", i); if(!DOF2_FileExists(doccasa)) { DOF2_CreateFile(doccasa); GetPlayerPos(playerid,casas[i][x],casas[i][y], casas[i][z]); casas[i][pickup] = CreateDynamicPickup(1273, 23, casas[i][x], casas[i][y], casas[i][z]); casas[i][worldid] = i; DOF2_SetString(doccasa, "X", casas[i][x]); DOF2_SetString(doccasa, "Y", casas[i][y]); DOF2_SetString(doccasa, "Z", casas[i][z]); DOF2_SetString(doccasa, "Worldid", casas[i][worldid]); format(str,60,"Casa id %d criada com sucesso", i); SendClientMessage(playerid,-1, str); return true; } } return true; } CMD:comprarcasa(playerid) { new str[130]; for(new i = 1;i != sizeof(casas); i++) { if(IsPlayerInRangeOfPoint(playerid,2, casas[i][x], casas[i][y], casas[i][z])) { DestroyPickup(casas[i][pickup]); format(str, sizeof(str), "Você comprou a casa id %d", i); SendClientMessage(playerid, -1, str); return true; } } return 1; }
stock carregarcasas() { new doccasa[130]; for(new i = 1;i < MAX_CASA; i++) { format(doccasa,130,"Casas/%d.inc",i); if(DOF2_FileExists(doccasa)) { casas[i][x] = DOF2_GetFloat(doccasa,"X"); casas[i][y] = DOF2_GetFloat(doccasa,"Y"); casas[i][z] = DOF2_GetFloat(doccasa,"Z"); casas[i][worldid] = DOF2_GetFloat(doccasa,"worldid"); casas[i][pickup] = CreateDynamicPickup(1273, 23, casas[i][x], casas[i][y], casas[i][z]); } } return 1; }[color=#d4d4d4][size=small][font=Consolas, "Courier New", monospace][color=#d4d4d4][/color][/font][/size][/color]
RE: Ajuda com pickups - Treze_. - 03/07/2022
(03/07/2022 15:33)k2bi_YT Escreveu: Fiz algumas alterações, como são mais de uma casa, basicamente deve conter uma variavel pra cada casa, entao na "new casa[..]", deve conter "quantas variaveis serão criadas" pra cada casa.
Recomendo que carregue todas as funções que existe na "enum infocasa", já na stock carregarcasas, assim você não precisa ficar usando a DOF2 toda vez, basta usar os valores salvos na variavel. Caso precise de ajuda na formatação do code, pode me adicionar no DC ou pedir ajuda para algum membro aqui do fórum.
Código PHP: enum infocasa{ id, tipo, Float:x, Float:y, Float:z, Float:xinterior, Float:yinterior, Float:zinterior, wordid, dono, pickup, Text3D:texto, valor
};
new casas[MAX_CASA][infocasa];
CMD:criarcasa(playerid) { new doccasa[65],str[60]; for(new i = 1; i < MAX_CASA; ++i) { format(doccasa, 64,"Casas/%d.inc", i); if(!DOF2_FileExists(doccasa)) { DOF2_CreateFile(doccasa); GetPlayerPos(playerid,casas[i][x],casas[i][y], casas[i][z]); casas[i][pickup] = CreateDynamicPickup(1273, 23, casas[i][x], casas[i][y], casas[i][z]); casas[i][worldid] = i; DOF2_SetString(doccasa, "X", casas[i][x]); DOF2_SetString(doccasa, "Y", casas[i][y]); DOF2_SetString(doccasa, "Z", casas[i][z]); DOF2_SetString(doccasa, "Worldid", casas[i][worldid]); format(str,60,"Casa id %d criada com sucesso", i); SendClientMessage(playerid,-1, str); return true; } } return true; } CMD:comprarcasa(playerid) { new str[130]; for(new i = 1;i != sizeof(casas); i++) { if(IsPlayerInRangeOfPoint(playerid,2, casas[i][x], casas[i][y], casas[i][z])) { DestroyPickup(casas[i][pickup]); format(str, sizeof(str), "Você comprou a casa id %d", i); SendClientMessage(playerid, -1, str); return true; } } return 1; }
stock carregarcasas() { new doccasa[130]; for(new i = 1;i < MAX_CASA; i++) { format(doccasa,130,"Casas/%d.inc",i); if(DOF2_FileExists(doccasa)) { casas[i][x] = DOF2_GetFloat(doccasa,"X"); casas[i][y] = DOF2_GetFloat(doccasa,"Y"); casas[i][z] = DOF2_GetFloat(doccasa,"Z"); casas[i][worldid] = DOF2_GetFloat(doccasa,"worldid"); casas[i][pickup] = CreateDynamicPickup(1273, 23, casas[i][x], casas[i][y], casas[i][z]); } } return 1; }[color=#d4d4d4][size=small][font=Consolas, "Courier New", monospace][color=#d4d4d4][/color][/font][/size][/color]
Bom, não funcionou mt bem, agora ele ta quebrando o próximo pickup, a mensagem está certa, se estou na casa n°4 ele manda a msg falando q comprou a casa id 4 mas quebra o pickup da casa id 5
RE: Ajuda com pickups - k2bi_YT - 03/07/2022
Altera apenas esse comando, e diga se funcionou corretamente
Código PHP: CMD:comprarcasa(playerid) { new str[130]; for(new i = 0;i != sizeof(casas); i++) { if(IsPlayerInRangeOfPoint(playerid,2, casas[i][x], casas[i][y], casas[i][z]) && IsValidDynamicPickup(casas[i][pickup])) { DestroyPickup(casas[i][pickup]); format(str, sizeof(str), "Você comprou a casa id %d", i); SendClientMessage(playerid, -1, str); return true; } } return true; }
RE: Ajuda com pickups - MarcosBrazz - 03/07/2022
Pelo que eu vi no /criarcasa e carregarcasas() o pickup esta sendo criado pelo streamer (CreateDynamicPickup)
E no /comprarcasa esta destruindo com DestroyPickup(...) nativo, se foi criado com streamer, tem que ser destruido com streamer (DestroyDynamicPickup)
RE: Ajuda com pickups - k2bi_YT - 03/07/2022
(03/07/2022 16:35)MarcosBrazz Escreveu: Pelo que eu vi no /criarcasa e carregarcasas() o pickup esta sendo criado pelo streamer (CreateDynamicPickup)
E no /comprarcasa esta destruindo com DestroyPickup(...) nativo, se foi criado com streamer, tem que ser destruido com streamer (DestroyDynamicPickup)
Boa observação, nao tinha prestado atenção nisso
RE: Ajuda com pickups - Treze_. - 03/07/2022
(03/07/2022 16:13)Treze_. Escreveu: (03/07/2022 15:33)k2bi_YT Escreveu: Fiz algumas alterações, como são mais de uma casa, basicamente deve conter uma variavel pra cada casa, entao na "new casa[..]", deve conter "quantas variaveis serão criadas" pra cada casa.
Recomendo que carregue todas as funções que existe na "enum infocasa", já na stock carregarcasas, assim você não precisa ficar usando a DOF2 toda vez, basta usar os valores salvos na variavel. Caso precise de ajuda na formatação do code, pode me adicionar no DC ou pedir ajuda para algum membro aqui do fórum.
Código PHP: enum infocasa{ id, tipo, Float:x, Float:y, Float:z, Float:xinterior, Float:yinterior, Float:zinterior, wordid, dono, pickup, Text3D:texto, valor
};
new casas[MAX_CASA][infocasa];
CMD:criarcasa(playerid) { new doccasa[65],str[60]; for(new i = 1; i < MAX_CASA; ++i) { format(doccasa, 64,"Casas/%d.inc", i); if(!DOF2_FileExists(doccasa)) { DOF2_CreateFile(doccasa); GetPlayerPos(playerid,casas[i][x],casas[i][y], casas[i][z]); casas[i][pickup] = CreateDynamicPickup(1273, 23, casas[i][x], casas[i][y], casas[i][z]); casas[i][worldid] = i; DOF2_SetString(doccasa, "X", casas[i][x]); DOF2_SetString(doccasa, "Y", casas[i][y]); DOF2_SetString(doccasa, "Z", casas[i][z]); DOF2_SetString(doccasa, "Worldid", casas[i][worldid]); format(str,60,"Casa id %d criada com sucesso", i); SendClientMessage(playerid,-1, str); return true; } } return true; } CMD:comprarcasa(playerid) { new str[130]; for(new i = 1;i != sizeof(casas); i++) { if(IsPlayerInRangeOfPoint(playerid,2, casas[i][x], casas[i][y], casas[i][z])) { DestroyPickup(casas[i][pickup]); format(str, sizeof(str), "Você comprou a casa id %d", i); SendClientMessage(playerid, -1, str); return true; } } return 1; }
stock carregarcasas() { new doccasa[130]; for(new i = 1;i < MAX_CASA; i++) { format(doccasa,130,"Casas/%d.inc",i); if(DOF2_FileExists(doccasa)) { casas[i][x] = DOF2_GetFloat(doccasa,"X"); casas[i][y] = DOF2_GetFloat(doccasa,"Y"); casas[i][z] = DOF2_GetFloat(doccasa,"Z"); casas[i][worldid] = DOF2_GetFloat(doccasa,"worldid"); casas[i][pickup] = CreateDynamicPickup(1273, 23, casas[i][x], casas[i][y], casas[i][z]); } } return 1; }[color=#d4d4d4][size=small][font=Consolas, "Courier New", monospace][color=#d4d4d4][/color][/font][/size][/color]
Bom, não funcionou mt bem, agora ele ta quebrando o próximo pickup, a mensagem está certa, se estou na casa n°4 ele manda a msg falando q comprou a casa id 4 mas quebra o pickup da casa id 5
(03/07/2022 16:35)MarcosBrazz Escreveu: Pelo que eu vi no /criarcasa e carregarcasas() o pickup esta sendo criado pelo streamer (CreateDynamicPickup)
E no /comprarcasa esta destruindo com DestroyPickup(...) nativo, se foi criado com streamer, tem que ser destruido com streamer (DestroyDynamicPickup)
realmente era esse o problema, muito obrigado ai pra quem ajudou
|