Szerző Téma: Parancshiba.  (Megtekintve 1039 alkalommal)

Nem elérhető kos

  • 292
    • Profil megtekintése
Parancshiba.
« Dátum: 2014. május 24. - 14:50:15 »
0 Show voters
Üdv.
Nos megcsináltam egy ilyen parancsot, de bugol valamiért :/  :shurg: Valaki ötlet, hogy lehetne mûködõképes?  :hmmm:
 

CMD:f(playerid,params[])
{
    new slot, id, fegyo, ammo;
if(!strcmp(params[1],\"e\",true))
{
    if(params[1])
      return SendClientMessage(playerid,Red,\"Használat: /fegyver elõvesz [név / id]\");
        if(params[2] == id)
if(id < 1 || id >= sizeof(aWeaponNames))
   return SendClientMessage(playerid,Red,\"Nincs ilyen fegyver\");
    slot = GetGunSlot(id);
GetPlayerWeaponData(playerid, slot, fegyo, ammo);
if(fegyo != id || ammo == 0)
   return SendClientMessage(playerid,Red,\"Nincs ilyen fegyvered!\");
        if(TiltottFegyver(id))
{
   SendClientMessage(playerid,Red,\"Hoppá, ez tiltott fegyver! Legközelebb bann jár érte!\");
   FegyverElvesz(playerid, id);
   return 1;
}
if(IsPlayerInAnyVehicle(playerid) && (id == 22 || id == 23 || id == 24))
   return SendClientMessage(playerid,Red,\"Ezt nem veheted elõ jármûben\");
Fegyvere[playerid] = id;
SetPlayerArmedWeapon(playerid, id);
SendClientMessage(playerid,-1,\"Elõvettél egy fegyvert!\");
if(id >= 24 && id <= 34)
{
   ApplyAnimation(playerid,\"UZI\",\"UZI_reload\",4.0,0,0,0,0,0);
}
}//else {SendClientMessage(playerid,Red,\"/f [e]\");}
return 1;
}

 
Kiraktam helyetted a PREFIX-et + a code-t code=pawn-ra cseréltem.
« Utoljára szerkesztve: 2014. május 31. - 23:10:08 írta kos »

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
Parancshiba.
« Válasz #1 Dátum: 2014. május 24. - 17:39:16 »
0 Show voters
Igaz, hogy a params egy tömb de ott nem számokat, hanem egy nagy szöveget tárol a cucc. Így hát, fel kell darabolnod sscanfal. A kódot pár helyen rövidítettem, optimalizáltam, hogy jobban átláthassam, így több esetleges hibát is megtaláljak benne. Remélem nem lesz baj, és remélem mûködik, és, hogy segíthettem neked!
 
CMD:f(playerid, params[]) return cmd_fegyver(playerid, params[]);
CMD:fegyver(playerid, params[])
{
new muvelet[8], id, slot, fegyo, ammo;
if(sscanf(params, \"s[8]\", muvelet)) return SendClientMessage(playerid, Red, \"Használat: /f(egyver) e(lõvesz) [név / id]\");
if(!strcmp(\"e\", muvelet, true) || !strcmp(\"elovesz\", muvelet, true) || !strcmp(\"elõvesz\", muvelet, true)) {
if(!sscanf(params, \"s[8]d\", muvelet, id)) {
   if(id < 1 || sizeof(aWeaponNames) <= id) return SendClientMessage(playerid, Red, \"Nincs ilyen fegyver!\");
   slot = GetGunSlot(id);
   GetPlayerWeaponData(playerid, slot, fegyo, ammo);
   if(fegyo != id || ammo == 0) return SendClientMessage(playerid, Red, \"Nincs ilyen fegyvered!\");
        if(TiltottFegyver(id)) {
      SendClientMessage(playerid,Red,\"Hoppá, ez tiltott fegyver! Legközelebb bann jár érte!\");
      return FegyverElvesz(playerid, id), 1;
   }
   if(IsPlayerInAnyVehicle(playerid) && (id == 22 || id == 23 || id == 24)) return SendClientMessage(playerid,Red,\"Ezt nem veheted elõ jármûben\");
   Fegyvere[playerid] = id;
   SetPlayerArmedWeapon(playerid, id);
   SendClientMessage(playerid, -1, \"Elõvettél egy fegyvert!\");
   if(24 <= id <= 34) ApplyAnimation(playerid, \"UZI\", \"UZI_reload\", 4.0, 0, 0, 0, 0, 0);
}
}
return 1;
}

 
Fontos hogy meglegyen az sscanf pluginod a plugins mappában, a server.cfg-ben, és a módban includeolva is.
Sok szerencsét, további jó scriptelést! :thumbsup:
Szerk.: Most sem jó? ID-re sem? Server log-ban nem ír valami furcsát?
« Utoljára szerkesztve: 2014. május 24. - 23:10:05 írta KovaNovik »

Nem elérhető kos

  • 292
    • Profil megtekintése
Parancshiba.
« Válasz #2 Dátum: 2014. május 24. - 21:51:50 »
0 Show voters
Köszi a segítséget, de még így sem akar mûködni.  :shurg:
De, látom, hogy így már nem bugos a kód.  :yes:
Viszont, még mindig valami nem szuperálhat benne, mivel még mindig nem akarja végrehajtani az elõvételt.  :hmmm:
Nos sajnos nem írt ki semmi furcsát, csak annyi vehetõ észre, hogy nem veszi elõ.
« Utoljára szerkesztve: 2014. május 27. - 16:10:01 írta kos »

Nem elérhető kos

  • 292
    • Profil megtekintése
Parancshiba.
« Válasz #3 Dátum: 2014. május 27. - 16:18:21 »
0 Show voters
:thumbsup: Viszont teljesen átalakítottam, most így néz ki:
 

CMD:f(playerid,params[])
{
    new muvelet[30],fegyver[32],fegyvere,loszer;
if(sscanf(params,\"s[30]\",muvelet)) return SendClientMessage(playerid,-1,\"Használat: /f(egyver) e(lõvesz) k(elrak) r(eload)\");
if(Egyezik(muvelet,\"e\"))
{
    if(!sscanf(params,\"s[30]s[32]\",muvelet,fegyver))
{
    fegyvere = -1;
   for(new w; w < 48; w++) if(strfind(aWeaponNames[w],fegyver,true) != -1){ fegyvere = w; break; }
   if(fegyvere == -1) fegyvere = strval(fegyver);
   if(fegyvere < 0 || fegyvere > sizeof(aWeaponNames)) return SendClientMessage(playerid,-1,\"Error: Nincs ilyen fegyver!\");
   //if(pInfo[playerid][m4tar] <= 0 || pInfo[playerid][ak47tar] <= 0 || pInfo[playerid][mp5tar] <= 0 || pInfo[playerid][combattar] <= 0 || pInfo[playerid][shotguntar] <= 0 || pInfo[playerid][snipertar] <= 0 || pInfo[playerid][rifletar] <= 0 || pInfo[playerid][deagletar] <= 0 || pInfo[playerid][silencedtar] <= 0) return SendClientMessage(playerid,-1,\"Nincs tárad!\");
   //if(pInfo[playerid][m4] <= 0 || pInfo[playerid][ak47] <= 0 || pInfo[playerid][mp5] <= 0 || pInfo[playerid][combat] <= 0 || pInfo[playerid][shotgun] <= 0 || pInfo[playerid][sniper] <= 0 || pInfo[playerid][rifle] <= 0 || pInfo[playerid][deagle] <= 0 || pInfo[playerid][silenced] <= 0) return SendClientMessage(playerid,-1,\"Nincs fegyvered!\");
            if(Eloveve[playerid] == 0)
   {
                //if(!strcmp(fegyver,\"m4\",true))
       if(Egyezik(fegyver,\"m4\"))
      {
         pInfo[playerid][m4tar] -= 1;
         loszer = 50;
         pInfo[playerid][m4loszer] -= loszer;
         pInfo[playerid][m4] -= 1;
         GivePlayerWeapon(playerid,fegyvere,50);
         Eloveve[playerid] = 1;
      }
   }else{SendClientMessage(playerid,-1,\"Van már a kezedben fegyver!\");}
}else{SendClientMessage(playerid,-1,\"Használat: /f(egyver) e(lõvesz) [Fegyver Név / ID]\");}
}
        return 1;
}

 
az a vicces fegyver adás parancsnán hasonlóan van, és full jó, de itt egyszerûen valamiért nem jó....
 
if(Eloveve[playerid] == 0)

 
Eddig tuti lefut, de ami benne van az már nem, hisz nem adja oda a dolgokat, de azt nem értem, ha hasonlóan mûködik a fegyveradásnál, akkor elõvételnél miért nem jó?  :wall:  :facepalm:
Valaki ötlet?  :unsure:
[mod]Javítottam code=pawno-t code=pawn-ra[/mod]
« Utoljára szerkesztve: 2014. május 27. - 16:29:20 írta Flash »

Nem elérhető kos

  • 292
    • Profil megtekintése
Parancshiba.
« Válasz #4 Dátum: 2014. május 31. - 23:09:18 »
0 Show voters
megoldottam :)

Nem elérhető kos

  • 292
    • Profil megtekintése
Parancshiba.
« Válasz #5 Dátum: 2014. május 24. - 14:50:15 »
0 Show voters
Üdv.
Nos megcsináltam egy ilyen parancsot, de bugol valamiért :/  :shurg: Valaki ötlet, hogy lehetne mûködõképes?  :hmmm:
 

CMD:f(playerid,params[])
{
    new slot, id, fegyo, ammo;
if(!strcmp(params[1],\"e\",true))
{
    if(params[1])
      return SendClientMessage(playerid,Red,\"Használat: /fegyver elõvesz [név / id]\");
        if(params[2] == id)
if(id < 1 || id >= sizeof(aWeaponNames))
   return SendClientMessage(playerid,Red,\"Nincs ilyen fegyver\");
    slot = GetGunSlot(id);
GetPlayerWeaponData(playerid, slot, fegyo, ammo);
if(fegyo != id || ammo == 0)
   return SendClientMessage(playerid,Red,\"Nincs ilyen fegyvered!\");
        if(TiltottFegyver(id))
{
   SendClientMessage(playerid,Red,\"Hoppá, ez tiltott fegyver! Legközelebb bann jár érte!\");
   FegyverElvesz(playerid, id);
   return 1;
}
if(IsPlayerInAnyVehicle(playerid) && (id == 22 || id == 23 || id == 24))
   return SendClientMessage(playerid,Red,\"Ezt nem veheted elõ jármûben\");
Fegyvere[playerid] = id;
SetPlayerArmedWeapon(playerid, id);
SendClientMessage(playerid,-1,\"Elõvettél egy fegyvert!\");
if(id >= 24 && id <= 34)
{
   ApplyAnimation(playerid,\"UZI\",\"UZI_reload\",4.0,0,0,0,0,0);
}
}//else {SendClientMessage(playerid,Red,\"/f [e]\");}
return 1;
}

 
Kiraktam helyetted a PREFIX-et + a code-t code=pawn-ra cseréltem.
« Utoljára szerkesztve: 2014. május 31. - 23:10:08 írta kos »

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
Parancshiba.
« Válasz #6 Dátum: 2014. május 24. - 17:39:16 »
0 Show voters
Igaz, hogy a params egy tömb de ott nem számokat, hanem egy nagy szöveget tárol a cucc. Így hát, fel kell darabolnod sscanfal. A kódot pár helyen rövidítettem, optimalizáltam, hogy jobban átláthassam, így több esetleges hibát is megtaláljak benne. Remélem nem lesz baj, és remélem mûködik, és, hogy segíthettem neked!
 
CMD:f(playerid, params[]) return cmd_fegyver(playerid, params[]);
CMD:fegyver(playerid, params[])
{
new muvelet[8], id, slot, fegyo, ammo;
if(sscanf(params, \"s[8]\", muvelet)) return SendClientMessage(playerid, Red, \"Használat: /f(egyver) e(lõvesz) [név / id]\");
if(!strcmp(\"e\", muvelet, true) || !strcmp(\"elovesz\", muvelet, true) || !strcmp(\"elõvesz\", muvelet, true)) {
if(!sscanf(params, \"s[8]d\", muvelet, id)) {
   if(id < 1 || sizeof(aWeaponNames) <= id) return SendClientMessage(playerid, Red, \"Nincs ilyen fegyver!\");
   slot = GetGunSlot(id);
   GetPlayerWeaponData(playerid, slot, fegyo, ammo);
   if(fegyo != id || ammo == 0) return SendClientMessage(playerid, Red, \"Nincs ilyen fegyvered!\");
        if(TiltottFegyver(id)) {
      SendClientMessage(playerid,Red,\"Hoppá, ez tiltott fegyver! Legközelebb bann jár érte!\");
      return FegyverElvesz(playerid, id), 1;
   }
   if(IsPlayerInAnyVehicle(playerid) && (id == 22 || id == 23 || id == 24)) return SendClientMessage(playerid,Red,\"Ezt nem veheted elõ jármûben\");
   Fegyvere[playerid] = id;
   SetPlayerArmedWeapon(playerid, id);
   SendClientMessage(playerid, -1, \"Elõvettél egy fegyvert!\");
   if(24 <= id <= 34) ApplyAnimation(playerid, \"UZI\", \"UZI_reload\", 4.0, 0, 0, 0, 0, 0);
}
}
return 1;
}

 
Fontos hogy meglegyen az sscanf pluginod a plugins mappában, a server.cfg-ben, és a módban includeolva is.
Sok szerencsét, további jó scriptelést! :thumbsup:
Szerk.: Most sem jó? ID-re sem? Server log-ban nem ír valami furcsát?
« Utoljára szerkesztve: 2014. május 24. - 23:10:05 írta KovaNovik »

Nem elérhető kos

  • 292
    • Profil megtekintése
Parancshiba.
« Válasz #7 Dátum: 2014. május 24. - 21:51:50 »
0 Show voters
Köszi a segítséget, de még így sem akar mûködni.  :shurg:
De, látom, hogy így már nem bugos a kód.  :yes:
Viszont, még mindig valami nem szuperálhat benne, mivel még mindig nem akarja végrehajtani az elõvételt.  :hmmm:
Nos sajnos nem írt ki semmi furcsát, csak annyi vehetõ észre, hogy nem veszi elõ.
« Utoljára szerkesztve: 2014. május 27. - 16:10:01 írta kos »

Nem elérhető kos

  • 292
    • Profil megtekintése
Parancshiba.
« Válasz #8 Dátum: 2014. május 27. - 16:18:21 »
0 Show voters
:thumbsup: Viszont teljesen átalakítottam, most így néz ki:
 

CMD:f(playerid,params[])
{
    new muvelet[30],fegyver[32],fegyvere,loszer;
if(sscanf(params,\"s[30]\",muvelet)) return SendClientMessage(playerid,-1,\"Használat: /f(egyver) e(lõvesz) k(elrak) r(eload)\");
if(Egyezik(muvelet,\"e\"))
{
    if(!sscanf(params,\"s[30]s[32]\",muvelet,fegyver))
{
    fegyvere = -1;
   for(new w; w < 48; w++) if(strfind(aWeaponNames[w],fegyver,true) != -1){ fegyvere = w; break; }
   if(fegyvere == -1) fegyvere = strval(fegyver);
   if(fegyvere < 0 || fegyvere > sizeof(aWeaponNames)) return SendClientMessage(playerid,-1,\"Error: Nincs ilyen fegyver!\");
   //if(pInfo[playerid][m4tar] <= 0 || pInfo[playerid][ak47tar] <= 0 || pInfo[playerid][mp5tar] <= 0 || pInfo[playerid][combattar] <= 0 || pInfo[playerid][shotguntar] <= 0 || pInfo[playerid][snipertar] <= 0 || pInfo[playerid][rifletar] <= 0 || pInfo[playerid][deagletar] <= 0 || pInfo[playerid][silencedtar] <= 0) return SendClientMessage(playerid,-1,\"Nincs tárad!\");
   //if(pInfo[playerid][m4] <= 0 || pInfo[playerid][ak47] <= 0 || pInfo[playerid][mp5] <= 0 || pInfo[playerid][combat] <= 0 || pInfo[playerid][shotgun] <= 0 || pInfo[playerid][sniper] <= 0 || pInfo[playerid][rifle] <= 0 || pInfo[playerid][deagle] <= 0 || pInfo[playerid][silenced] <= 0) return SendClientMessage(playerid,-1,\"Nincs fegyvered!\");
            if(Eloveve[playerid] == 0)
   {
                //if(!strcmp(fegyver,\"m4\",true))
       if(Egyezik(fegyver,\"m4\"))
      {
         pInfo[playerid][m4tar] -= 1;
         loszer = 50;
         pInfo[playerid][m4loszer] -= loszer;
         pInfo[playerid][m4] -= 1;
         GivePlayerWeapon(playerid,fegyvere,50);
         Eloveve[playerid] = 1;
      }
   }else{SendClientMessage(playerid,-1,\"Van már a kezedben fegyver!\");}
}else{SendClientMessage(playerid,-1,\"Használat: /f(egyver) e(lõvesz) [Fegyver Név / ID]\");}
}
        return 1;
}

 
az a vicces fegyver adás parancsnán hasonlóan van, és full jó, de itt egyszerûen valamiért nem jó....
 
if(Eloveve[playerid] == 0)

 
Eddig tuti lefut, de ami benne van az már nem, hisz nem adja oda a dolgokat, de azt nem értem, ha hasonlóan mûködik a fegyveradásnál, akkor elõvételnél miért nem jó?  :wall:  :facepalm:
Valaki ötlet?  :unsure:
[mod]Javítottam code=pawno-t code=pawn-ra[/mod]
« Utoljára szerkesztve: 2014. május 27. - 16:29:20 írta Flash »

Nem elérhető kos

  • 292
    • Profil megtekintése
Parancshiba.
« Válasz #9 Dátum: 2014. május 31. - 23:09:18 »
0 Show voters
megoldottam :)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal