-
Sziasztok. Ezt a parancsot még anno találtam az egyik módba nagyon minimálisat módosítottam rajta.Akár hogy próbálom meg nézegetem hogy hol a hiba egyszerűen nem találom az lenne a gondom hogy mikor 0 id-vel én fent vagyok egyedül akkor minden oké de mikor már más akar nevet cserélni akkor össze kavarja a házakat boltokat van mikor duplázza a házat is és egyszerűen nem tudom mi a kínja lehet.
COMMAND:nick(playerid, params[])
{
if(APlayerData[playerid][LoggedIn] == true)
{
if(MudarNick[playerid] == true)
{ //return SendClientMessage(playerid, -1, \"{FF0000}[HIBA] Tulajdonosnak engedélyezni kell a parancs használatatá!\");
if (APlayerData[playerid][PlayerScore] < 1700) return SendClientMessage(playerid, 0xFFFFFFFF, \"{FF0000} Sajnos 1600 pont kell ahoz hogy nevet tudj változtatni!\");
{
new File[90], NovoNick[24], str[150];
GetPlayerName(playerid, NovoNick, sizeof(NovoNick));
if(sscanf(params,\"s[24]\", NovoNick)) return SendClientMessage(playerid, 0x00FF99AA, \"Hásznalat: {FF0000}/nick [másik néed]\");
new Name[50], del[128];
GetPlayerName(playerid, Name, sizeof(Name));
if(strlen(params) < 4) return SendClientMessage(playerid, -1, \"» {FF0000}Minimum 4 karakter lehet a neved!\");
if(strlen(params) > 20) return SendClientMessage(playerid, -1, \"{FFFF00}Maximum 24 karakter lehet a neved!\");
for(new asd; asd < sizeof(badnames); ++asd)
{
if(strfind(NovoNick,badnames[asd]) != -1)
{
return SendClientMessage(playerid,-1,\"{FF0000}[ERRO] Ilyen karaktert nem írhatsz a nevedbe. Mert csatlakozáskor nem fogja engedni a samp hogy csatlakozz!\");
}
}
format(File, sizeof(File), \"ServerData/Players/%s.ini\", NovoNick);
format(str, sizeof(str), \"ServerData/Players/%s.ini\", Name);
if(fexist(File)) return SendClientMessage(playerid, -1, \"{FF0000}Nem lehet az új nevedre módosítani mert már használatba van!\");
SendClientMessage(playerid, -1, \" \");
format(del,sizeof(del),\"Nick neved sikeresen módosítva erre: {FFFF00}%s {FF0000}Relogolj és gyere fel az új nick neveddel\", NovoNick);
SendClientMessage(playerid, 0xFF0000AA, del);
SendClientMessage(playerid, -1, \"{FFFF00}3.000.000$\");
SendClientMessage(playerid, -1, \"{FFFF00}Ne felejtsd el az új nick nevedet!.\");
SendClientMessage(playerid, -1, \"{FF0000}Szerver levont 1600 pontot a név módosításért!!\");
SendClientMessage(playerid, -1, \" \");
RewardPlayer(playerid, -3000000, 0);
RewardPlayer(playerid, 0, -1600);
frename(str, File);
SetPlayerName(playerid, NovoNick);
APlayerData[playerid][PlayerName] = NovoNick;
PlayerFile_Save(playerid);
format(File, sizeof(File), PlayerFile, Name);
if (fexist(File))
fremove(File);
format(File, sizeof(File), BankFile, Name);
if (fexist(File))
{
BankFile_Save(playerid);
fremove(File);
}
BankFile_Load(playerid);
//----------------------[Casa do Jogador]------------------------------------------// HouseFile_Load(HouseID
new HouseID, BusID;
for (new HouseSlot; HouseSlot < MAX_HOUSESPERPLAYER; HouseSlot++)
{
HouseID = APlayerData[playerid][Houses][HouseSlot];
if (HouseID != 0)
{
AHouseData[HouseID][Owned] = true;
format(AHouseData[HouseID][Owner], 24, NovoNick);
HouseFile_Save(HouseID);
House_UpdateEntrance(HouseID);
House_RemoveVehicles(HouseID);
HouseFile_Load(HouseID, true);
}
}
//----------------------[Empresa do Jogador]--------------------------------------------//
for (new BusSlot; BusSlot < MAX_BUSINESSPERPLAYER; BusSlot++)
{
BusID = APlayerData[playerid][business][busSlot];
if (BusID != 0)
{
ABusinessData[busID][Owned] = true;
format(ABusinessData[busID][Owner], 24, NovoNick);
BusinessFile_Save(BusID);
Business_UpdateEntrance(BusID);
}
}
MudarNick[playerid] = false;
}
}
else
SendClientMessage(playerid, -1, \"{FF0000}[HIBA] Tulajdonosnak engedélyezni kell a parancs használatatá!\");
}
else
SendClientMessage(playerid, -1, \"{FFFF00}[HIBA]Parancs használatához lépj be a profilodba!\");
return true;
}
-
Az elején így kezded a feltételeket aztán váltasz:
if(FELTÉTEL)
{
// kód
}
else
{
return SendClientMessage(...);
}
Itt a { felesleges, mivel szöveget írsz ki...el van írva, 1700 pontot ellenőrzöl és 1600-at írsz ki a szövegben...
if (APlayerData[playerid][PlayerScore] < 1700) return SendClientMessage(playerid, 0xFFFFFFFF, \"{FF0000} Sajnos 1600 pont kell ahoz hogy nevet tudj változtatni!\");
{
Itt van még egy elírás:
if(strlen(params) > 20) return SendClientMessage(playerid, -1, \"{FFFF00}Maximum 24 karakter lehet a neved!\");
van még pár elírás azokat nem sorolom fel...
GetPlayerName(playerid, NovoNick, sizeof(NovoNick));
if(sscanf(params,\"s[20]\", NovoNick)) return SendClientMessage(playerid, 0x00FF99AA, \"Hásznalat: {FF0000}/nick [másik neved]\");
felesleges lekérned a játékos nevét GetPlayerName-el ha a következő sorban felülírod...
Itt a helyedben az elfogadható karaktereket sorolnám fel...mert rengeteg olyan van amit az SA-MP nem fogad el...
for(new asd; asd < sizeof(badnames); ++asd)
{
if(strfind(NovoNick,badnames[asd]) != -1)
{
return SendClientMessage(playerid,-1,\"{FF0000}[ERRO] Ilyen karaktert nem írhatsz a nevedbe. Mert csatlakozáskor nem fogja engedni a samp hogy csatlakozz!\");
}
}
Vagy simán az átnevezés visszatérési értéke alapján írnék ki egy üzenetet...
http://wiki.sa-mp.com/wiki/SetPlayerName
A háznál direkt törölted a járműveket? ha igen akkor azt a részt rakd vissza, mert töröltem...
Ezt nézd meg, hogy jó e:
COMMAND:nick(playerid, params[])
{
// HA NINCS bejelentkezve
if(APlayerData[playerid][LoggedIn] == false){ return SendClientMessage(playerid, -1, \"{FFFF00}[HIBA]Parancs használatához lépj be a profilodba!\"); }
// HA NEM engedélyezte a tulajdonos a névváltást
if(MudarNick[playerid] == false) { return SendClientMessage(playerid, -1, \"{FF0000}[HIBA] Tulajdonosnak engedélyezni kell a parancs használatatát!\"); }
// HA NINCS 1700 pontja
if (APlayerData[playerid][PlayerScore] < 1700) return SendClientMessage(playerid, 0xFFFFFFFF, \"{FF0000} Sajnos 1700 pont kell ahoz hogy nevet tudj változtatni!\");
// Beírt paraméter ellenőrzés (írt e be és, hogy 4-20 karakter között van e)
new NovoNick[21];
if(sscanf(params,\"s[20]\", NovoNick) || !(4 <= strlen(NovoNick) <= 20)) return SendClientMessage(playerid, 0x00FF99AA, \"Hásznalat: {FF0000}/nick [másik neved (4-20 karakter)]\");
//
new Name[21], str[128], OldFile[45], NewFile[45];
GetPlayerName(playerid, Name, sizeof(Name));
//
format(OldFile, sizeof(OldFile), \"ServerData/Players/%s.ini\", Name);
if(fexist(OldFile) || SetPlayerName(playerid, NovoNick) != 1) { return SendClientMessage(playerid, -1, \"{FF0000}Nem lehet az új nevedre módosítani mert már használatba van vagy nem megfelelő a név!\"); }
//
format(NewFile, sizeof(NewFile), \"ServerData/Players/%s.ini\", NovoNick);
APlayerData[playerid][PlayerName] = NovoNick;
frename(OldFile, NewFile);
PlayerFile_Save(playerid);
//
format(OldFile, sizeof(OldFile), PlayerFile, Name);
if (fexist(OldFile)) { fremove(OldFile); }
//
format(OldFile, sizeof(OldFile), BankFile, Name);
if (fexist(OldFile))
{
BankFile_Save(playerid);
fremove(OldFile);
}
BankFile_Load(playerid);
//
SendClientMessage(playerid, -1, \" \");
format(str,sizeof(str),\"Nick neved sikeresen módosítva erre: {FFFF00}%s {FF0000}Relogolj és gyere fel az új nick neveddel\", NovoNick);
SendClientMessage(playerid, 0xFF0000AA, str);
SendClientMessage(playerid, 0xFFFF0000, \"3.000.000$\");
SendClientMessage(playerid, 0xFFFF0000, \"Ne felejtsd el az új nick nevedet!.\");
SendClientMessage(playerid, 0xFFFF0000, \"Szerver levont 1700 pontot a név módosításért!!\");
SendClientMessage(playerid, -1, \" \");
//
RewardPlayer(playerid, -3000000, 0);
RewardPlayer(playerid, 0, -1600);
//
new hid, bid;
// Házak
for (new h; h < MAX_HOUSESPERPLAYER; h++)
{
hid = APlayerData[playerid][Houses][h];
if (hid != 0)
{
format(AHouseData[hid][Owner], 24, NovoNick);
HouseFile_Save(hid);
House_UpdateEntrance(hid);
}
}
// Üzletek
for (new b; b < MAX_BUSINESSPERPLAYER; b++)
{
bid = APlayerData[playerid][business];
if (bid != 0)
{
format(ABusinessData[bid][Owner], 24, NovoNick);
BusinessFile_Save(bid);
Business_UpdateEntrance(bid);
}
}
//
MudarNick[playerid] = false;
return true;
}
nem tudom fordításnál lehet e hiba, mert munkahelyen vagyok, nincs pawno-m :)
-
Köszi a segítséget ki fogom próbálni hogy működik-e ..
Edit:
D:\\modom\\gamemodes\\PPC_Trucking.pwn(2507) : error 047: array sizes do not match, or destination array is too small
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
1 Error.
COMMAND:nick(playerid, params[])
{
// HA NINCS bejelentkezve
if(APlayerData[playerid][LoggedIn] == false){ return SendClientMessage(playerid, -1, \"{FFFF00}[HIBA]Parancs használatához lépj be a profilodba!\"); }
// HA NEM engedélyezte a tulajdonos a névváltást
if(MudarNick[playerid] == false) { return SendClientMessage(playerid, -1, \"{FF0000}[HIBA] Tulajdonosnak engedélyezni kell a parancs használatatát!\"); }
// HA NINCS 1700 pontja
if (APlayerData[playerid][PlayerScore] < 1700) return SendClientMessage(playerid, 0xFFFFFFFF, \"{FF0000} Sajnos 1700 pont kell ahoz hogy nevet tudj változtatni!\");
// Beírt paraméter ellenőrzés (írt e be és, hogy 4-20 karakter között van e)
new NovoNick[21];
if(sscanf(params,\"s[20]\", NovoNick) || !(4 <= strlen(NovoNick) <= 20)) return SendClientMessage(playerid, 0x00FF99AA, \"Hásznalat: {FF0000}/nick [másik neved (4-20 karakter)]\");
//
new Name[21], str[128], OldFile[45], NewFile[45];
GetPlayerName(playerid, Name, sizeof(Name));
//
format(OldFile, sizeof(OldFile), \"ServerData/Players/%s.ini\", Name);
if(fexist(OldFile) || SetPlayerName(playerid, NovoNick) != 1) { return SendClientMessage(playerid, -1, \"{FF0000}Nem lehet az új nevedre módosítani mert már használatba van vagy nem megfelelő a név!\"); }
//
format(NewFile, sizeof(NewFile), \"ServerData/Players/%s.ini\", NovoNick);
APlayerData[playerid][PlayerName] = NovoNick; //erre írja ez a sor: 2507
frename(OldFile, NewFile);
PlayerFile_Save(playerid);
//
format(OldFile, sizeof(OldFile), PlayerFile, Name);
if (fexist(OldFile)) { fremove(OldFile); }
//
format(OldFile, sizeof(OldFile), BankFile, Name);
if (fexist(OldFile))
{
BankFile_Save(playerid);
fremove(OldFile);
}
BankFile_Load(playerid);
//
SendClientMessage(playerid, -1, \" \");
format(str,sizeof(str),\"Nick neved sikeresen módosítva erre: {FFFF00}%s {FF0000}Relogolj és gyere fel az új nick neveddel\", NovoNick);
SendClientMessage(playerid, 0xFF0000AA, str);
SendClientMessage(playerid, 0xFFFF0000, \"3.000.000$\");
SendClientMessage(playerid, 0xFFFF0000, \"Ne felejtsd el az új nick nevedet!.\");
SendClientMessage(playerid, 0xFFFF0000, \"Szerver levont 1700 pontot a név módosításért!!\");
SendClientMessage(playerid, -1, \" \");
//
RewardPlayer(playerid, -3000000, 0);
RewardPlayer(playerid, 0, -1600);
//
new hid, bid;
// Házak
for (new h; h < MAX_HOUSESPERPLAYER; h++)
{
hid = APlayerData[playerid][Houses][h];
if (hid != 0)
{
format(AHouseData[hid][Owner], 24, NovoNick);
HouseFile_Save(hid);
House_UpdateEntrance(hid);
}
}
// Üzletek
for (new b; b < MAX_BUSINESSPERPLAYER; b++)
{
bid = APlayerData[playerid][business];
if (bid != 0)
{
format(ABusinessData[bid][Owner], 24, NovoNick);
BusinessFile_Save(bid);
Business_UpdateEntrance(bid);
}
}
//
MudarNick[playerid] = false;
return true;
}
Valamiért errort ír akár hogy nézem nem látom a problémát
-
APlayerData[playerid][PlayerName] = NovoNick; //erre írja ez a sor: 2507
Nem teszteltem, de próbáld meg így...
format(APlayerData[playerid][PlayerName], MAX_PLAYER_NAME, \"%s\", NovoNick);
-
Köszi de ez itt meg fogta tudásomat. Valamiért azt írja \"Nem lehet az új nevedre módosítani mert már használatba van vagy nem megfelelő a név!\" nem értem mi a kínja ennek.
-
format(OldFile, sizeof(OldFile), \"ServerData/Players/%s.ini\", Name);
if(fexist(OldFile) || SetPlayerName(playerid, NovoNick) != 1) { return SendClientMessage(playerid, -1, \"{FF0000}Nem lehet az új nevedre módosítani mert már használatba van vagy nem megfelelő a név!\"); }
helyett
format(OldFile, sizeof(OldFile), \"ServerData/Players/%s.ini\", NovoNick); // itt keresd a módosítást
if(fexist(OldFile) || SetPlayerName(playerid, NovoNick) != 1) { return SendClientMessage(playerid, -1, \"{FF0000}Nem lehet az új nevedre módosítani mert már használatba van vagy nem megfelelő a név!\"); }
-
//[...]
new NovoNick[21];
if(sscanf(params,\"s[20]\", // [.....]
nem egyértelmű?
különben is mi a faszért ilyen random nagyságú tömböt adsz meg?
most nincs jó kedvem
-
APlayerData enumerotoránál hány cellás PlayerName-nek? Mert a NovoNick változónak a mérete nem egyezik a \'PlayerName\' cella számával.
Ha MAX_PLAYER_NAME-et adtál meg neki, akkor
new NovoNick[MAX_PLAYER_NAME];
kell megadnod.
-
Sikerült köszönöm a segítséget. Zárok teljesen működik.