Sziasztok!
Jármű rendszeremnél szeretném leellenőrizni, hogy a játékos zsebében van e kulcs a járműhöz. Az ellenőrzést rendszám alapján végzem, a játékos zsebe pedig egy nagy string változó.
A jelenség:
A mellékelt képen is látszik(kiirattam a móddal), hogy a zseb változójában benne van a Rendszám, de az strfind ezt nem találja meg. A visszatérése mindig -1 lesz.
FILTERSCRIPTben használom.
Kód:
public OnPlayerKeyStateChange( playerid, newkeys, oldkeys ){
if(newkeys & KEY_YES){
if(IsPlayerInAnyVehicle(playerid)) {
new vehid = GetPlayerVehicleID(playerid);
new str[1048];
GetPVarString(playerid, \"InvItemsZseb\", str, 1048); // a zsebét pvarban tárolom, ezt itt lekérem.
format(str, 1048, \"%s\", str); // ez csak egy próba volt, de nem jött be.
msg(playerid, pred, str); // kiiratom a szebét
msg(playerid, pred, vInfo[vehid][Rendszam]); // kiiratom a rendszámot
if( strfind(vInfo[vehid][Rendszam], str) != -1) { // megnézem a zsebébe bent van e
new engine, lights, alarm, doors, bonnet, boot, objective;
GetVehicleParamsEx(vehid, engine, lights, alarm, doors, bonnet, boot, objective); //psszt. most vettem észre, ez felesleges és nem is ide tartozik.
if(vInfo[vehid][Engine] == 0)
{
SetVehicleParamsEx(vehid, 1, lights, alarm, doors, bonnet, boot, objective);
cmd_me(playerid, \"elindítja a jármű motorját.\");
vInfo[vehid][Engine] = 1;
} else {
SetVehicleParamsEx(vehid, 0, lights, alarm, doors, bonnet, boot, objective);
cmd_me(playerid, \"leállítja a jármű motorját.\");
vInfo[vehid][Engine] = 0;
}
} else {
msg(playerid, pred, \"(( Nincs hozzá kulcsod. ))\"); // ezt írja ki
}
new str2[20];
format(str2, 20, \"%d\",strfind(vInfo[vehid][Rendszam], str, true)); // -1 el tér vissza hiába van bent a kulcs. (ha nincs bent, akkor is.)
msg(playerid, pred, str2);
}
}
return 1;
}
Kép:
[hs width=300 height=300]http://kepfeltoltes.hu/150208/289586673sa-mp-007_www.kepfeltoltes.hu_.png[/hs]
Elnézést, de a paint volt a leggyorsabb megoldás :) Köszönöm előre annak, aki segít.
BackUP
Így ?
if(strfind(vInfo[vehid][Rendszam], str) == -1) return msg(playerid, pred, \"(( Nincs hozzá kulcsod. ))\");
new engine, lights, alarm, doors, bonnet, boot, objective;
GetVehicleParamsEx(vehid, engine, lights, alarm, doors, bonnet, boot, objective); //psszt. most vettem észre, ez felesleges és nem is ide tartozik.
if(vInfo[vehid][Engine] == 0)
{
SetVehicleParamsEx(vehid, 1, lights, alarm, doors, bonnet, boot, objective);
cmd_me(playerid, \"elindítja a jármű motorját.\");
vInfo[vehid][Engine] = 1;
}
else
{
SetVehicleParamsEx(vehid, 0, lights, alarm, doors, bonnet, boot, objective);
cmd_me(playerid, \"leállítja a jármű motorját.\");
vInfo[vehid][Engine] = 0;
}
new str2[20];
format(str2, 20, \"%d\",strfind(vInfo[vehid][Rendszam], str, true)); // -1 el tér vissza hiába van bent a kulcs. (ha nincs bent, akkor is.)
msg(playerid, pred, str2);
}
}
return 1;
}
Nem változott semmi.
if( strfind(vInfo[vehid][Rendszam], str) != -1) { // megnézem a zsebébe bent van e
Helyett:
if( strfind(str, vInfo[vehid][Rendszam]) != -1) { // megnézem a zsebébe bent van e
Elvileg így működnie kéne, azért az str -t kell előre írni mert abban keressük a szöveget, ez esetben a rendszámot.
Így sem jó. Viszont akkor a sampfórumon a wiki hibás? Ott az van írva, hogy az elsőt keressük a másodikban.
De így sem oldódott meg sajnos.
http://wiki.sa-mp.com/wiki/Strfind
Az elsőben keressük a másodikat, rosszul van írva a wikin.
Rendben, köszönöm, de így is -1 a visszatérése.
Megoldva!
Pontosanmi volt a gond, azt nem tudom, tlejesen más módszerrel újraírtamígy tökéletes. Köszönöm annak aki próbált segíteni. :)