Jump to content
  • 0

pomoc "if do if"


MajorGames4

Dotaz

Ahojte, chcel by som sa spýtať, "ako sa dá vložiť if do if". Urobil som WeaponMenu, ale také, že hráč zadá ID zbrane, ktorú si chce kúpiť. Chyba je v tom, že medzi zbrane patrí aj minigun, a ja chcem urobiť aby to po zakúpení miigunu napísalo hráčovy napr. "Túto zbraň si kúpiť nemôžeš!". Takto vyzerá môj kód:

 

Spoiler

    if(getpm(id) < 1500) return scm(id,-1,"{FF0000} [Error] Nemáš dostatok peňazí na zakúpenie vlastnej zbrani!");
    gpw(id,strval(inputtext),1000);
    gpm(id,-1500);
    scm(id,-1,"{006600}[Done] Úspešne si si zakúpil Vlastnú Zbraň!");

 

Link to comment
Share on other sites

15 odpovědí na tuto otázku

Recommended Posts

  • 2
if(strval(inputtext) == 38) return SendClientMessage(playerid,-1,"{FF0000} [Error] Minigun si nemôžeš kúpiť!");

 

Edited by EvoLve.
Link to comment
Share on other sites

  • 2

Sice už na to nevidím ale splácal jsem ti toto jako příklad pro ty zbraně.

#define     dialog_weapons      0

// CMD

new
	str[4*30];

format(str, sizeof(str), "Silenced 9mm\t$245\n");
format(str, sizeof(str), "%sCombat Shotgun\t$300\n", str);
format(str, sizeof(str), "%sAK-47\t$350\n", str);
format(str, sizeof(str), "%sSniper Rifle\t$450", str);

ShowPlayerDialog(playerid, dialog_weapons, DIALOG_STYLE_TABLIST, "Zbraně", str, "Koupit", "Zavřit");

// OnDialogResponse

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]){
	switch(dialogid){
	    case dialog_weapons:{
	        if(response){
	            switch(listitem){
	                case 0: BuyWeapon(playerid, 23, 50, 245);
	                case 1: BuyWeapon(playerid, 27, 50, 300);
	                case 2: BuyWeapon(playerid, 30, 50, 350);
	                case 3: BuyWeapon(playerid, 34, 50, 450);
	            }
	        }
	    }
	}
	return true;
}

// Kamkoliv

stock BuyWeapon(playerid, weaponid, ammo, money){
	new
	    str[128];
	    
	if(GetPlayerMoney(playerid) < money) return SendClientMessage(playerid, -1, "nemáš love");
	
	GivePlayerWeapon(playerid, weaponid, ammo);
	GivePlayerMoney(playerid, -money);
	
	format(str, sizeof(str), "jupíej -$%d ale máš %s", money, WeaponName(weaponid));
	SendClientMessage(playerid, -1, str);
	return true;
}

stock WeaponName(weaponid){
	new
	    name[20];

	GetWeaponName(weaponid, name, sizeof(name));
	return name;
}

Dodatek: Moc jsem si tu konverzaci nečetl ale snad to v něčem pomůže :-D

Edited by rEf
Dodatek
Link to comment
Share on other sites

  • 1

Fest mi to vadí, a asi nie len mne.. Tie tvoje define, to si mám furt zistovať čo je napr. 'gpw', 'gpm', 'msg', 'spd'... Ludia ti pomôžu ked si nemusia všetko hľadať čo to znamená, dávaj si to normálne 'GivePlayerWeapon / Money', 'DIALOG_STYLE_MSGBOX', 'ShowPlayerDialog'.. Lebo ja by som tu niež neodpovedal, lebo sa mi to nechce zisťovať.. V Pawne si to maj jak chceš, ale myslím že tu každý píše všetko normálne, a nie skratky..

K tým errorom:

To mám akože skade nabrať ten riadok kde sú tie errory.. Ty tam máš 50 dialogov a 20 formatov.. Tak to si mám vybrať ten ktorý sa mi bude páčiť a opraviť errory ?? A prečo máš tak veľa znakov v premenných ??

new pripoj[1000];
format(pripoj,sizeof(pripoj),"[CONNECT] Hráč %s sa pripojil do hry!",gpn(id));

Tam aj keby som dal 200 ta je veľa, nie to dalších 800.. Zbytočná veľkosť.

Edited by EvoLve.
Link to comment
Share on other sites

  • 0

Dobre, a ešte:

 

Urobil som nový FS, ale keď robím ShowPlayerDialog cez format, tak mi to hádže errory:

Spoiler
#include <a_samp>
#include <zcmd>
//Definície - Základné
#define spd ShowPlayerDialog
#define scm SendClientMessage
#define sph SetPlayerHealth
#define gpw GivePlayerWeapon
#define sps SetPlayerSkin
#define gpm GivePlayerMoney
#define gpn GetPlayerName
#define getpm GetPlayerMoney
#define gpfa GetPlayerFacingAngle
#define gpp GetPlayerPos
#define getpw GetPlayerWeapon
#define cv CreateVehicle
#define spa SetPlayerArmour
#define scmta SendClientMessageToAll
#define id playerid
//Definície - ShowPlayerDialog
#define list DIALOG_STYLE_LIST
#define msg DIALOG_STYLE_MSGBOX
#define text DIALOG_STYLE_INPUT
#define pass DIALOG_STYLE_PASSWORD
#if defined FILTERSCRIPT
public OnFilterScriptInit()
{
 print("\n--------------------------------------");
 print("FilterScript vytvoril *MajorGames4*");
 print("--------------------------------------\n");
 return 1;
}
public OnFilterScriptExit()
{
 return 1;
}
#else
main()
{
 print("\n----------------------------------");
 print("Super Parba v1.0");
 print("----------------------------------\n");
}
#endif
public OnGameModeInit()
{
 // Don't use these lines if it's a filterscript
 SetGameModeText("Blank Script");
 AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
 return 1;
}
public OnGameModeExit()
{
 return 1;
}
public OnPlayerRequestClass(id, classid)
{
 SetPlayerPos(id, 1958.3783, 1343.1572, 15.3746);
 SetPlayerCameraPos(id, 1958.3783, 1343.1572, 15.3746);
 SetPlayerCameraLookAt(id, 1958.3783, 1343.1572, 15.3746);
 return 1;
}
public OnPlayerConnect(id)
{
  new String[1000];
  format(String,sizeof(String),"{FFFFFF}Vítaj na Servery!\n\nAk si nový:\n{CC0000}/register HESLO\n{FFFFFF}Ak už máš účet vytvorený:\n{CC0000}/login HESLO{FFFFFF}Ďakujeme, že si sa rozhodol pre náš Server!");
  spd(id,100,msg,"Vítaj na Servery {006600}*Evolve-HostingSK*",String,"Ok","");
 return 1;
}
public OnPlayerDisconnect(id, reason)
{
 return 1;
}
public OnPlayerSpawn(id)
{
  new pripoj[1000];
  format(pripoj,sizeof(pripoj),"[CONNECT] Hráč %s sa pripojil do hry!",gpn(id));
  scmta(-1,pripoj);
 return 1;
}
public OnPlayerDeath(id, killerid, reason)
{
  gpm(killerid,1000);
  gpm(id,-500);
 return 1;
}
public OnVehicleSpawn(vehicleid)
{
 return 1;
}
public OnVehicleDeath(vehicleid, killerid)
{
 return 1;
}
public OnPlayerText(id, text[])
{
 return 1;
}
cmd(menu,id,params[])
{
  new String[1000];
  format(String,sizeof(String),"Kúpiť zbraň\n"); //Case 0
  format(String,sizeof(String),"Kúpiť skin\n");  //Case 1
  format(String,sizeof(String),"Kúpiť auto\n");  //Case 2
  format(String,sizeof(String),"Pravidlá\n");    //Case 3
 
  spd(id,101,list,"Hlavné Menu",String,"Vybrať","Zrušiť");
  return 1;
}
public OnDialogResponse(id, dialogid, response, listitem, inputtext[])
{
  if(dialogid == 101 && response)
  {
    switch(listitem)
    {
      case 0:
      {
        new String[1000];
        //--------- Každá zbraň má 1,000 AMMO ---------//
        format(String,sizeof(String),"- Každá zbraň má 1,000 AMMO -\n");  //Case 0
        format(String,sizeof(String),"AK47 - (3,000$)\n");                //Case 1
        format(String,sizeof(String),"M4 - (3,000$)\n");                  //Case 2
        format(String,sizeof(String),"Sawn-Off Shotgun - (1,500$)\n");    //Case 3
        format(String,sizeof(String),"Knife - (50$)\n");                  //Case 4
        format(String,sizeof(String),"Desert Eagle - (100$)\n");          //Case 5
        format(String,sizeof(String),"Minigun - (1,500,000$)\n");         //Case 6
        format(String,sizeof(String),"Snipe - (550$)\n");                 //Case 7
                      
        spd(id,102,list,"Kúpiť zbraň",String,"Kúpiť","Zrušiť");    
      }
    }
  }
  if(dialogid == 102 && response)
  {
    case 1:
    {
      if(getpm(id) < 3000) return scm(id,-1,"[ !!! ] Nemáš dostatok peňazí na zakúpenie zbrani.");
      gpw(id,30,1000);
      gpm(id,-3000);
      scm(id,-1,"[DONE] Úspešne si si zakúpil zbraň."); 
    }
    case 2:
    {
      if(getpm(id) < 3000) return scm(id,-1,"[ !!! ] Nemáš dostatok peňazí na zakúpenie zbrani.");
      gpw(id,31,1000);
      gpm(id,-3000);
      scm(id,-1,"[DONE] Úspešne si si zakúpil zbraň.");   
    }
    case 3:
    {
      if(getpm(id) < 1500) return scm(id,-1,"[ !!! ] Nemáš dostatok peňazí na zakúpenie zbrani.");
      gpw(id,26,1000);
      gpm(id,-1500);
      scm(id,-1,"[DONE] Úspešne si si zakúpil zbraň.");
    }
  }
 return 1;
}

Errory:

Spoiler

warning 217: loose indentation
warning 202: number of arguments does not match definition
warning 202: number of arguments does not match definition
warning 217: loose indentation
warning 217: loose indentation
error 010: invalid function or declaration
error 029: invalid expression, assumed zero
error 010: invalid function or declaration
error 014: invalid statement; not in switch
warning 215: expression has no effect
error 001: expected token: ";", but found ":"
error 029: invalid expression, assumed zero
fatal error 107: too many error messages on one line

 

Link to comment
Share on other sites

  • 0
Spoiler

C:\Users\NIC\Desktop\multiFS.pwn(80) : warning 217: loose indentation
C:\Users\NIC\Desktop\multiFS.pwn(91) : warning 202: number of arguments does not match definition
C:\Users\NIC\Desktop\multiFS.pwn(91) : warning 202: number of arguments does not match definition
C:\Users\NIC\Desktop\multiFS.pwn(93) : warning 217: loose indentation
C:\Users\NIC\Desktop\multiFS.pwn(111) : error 010: invalid function or declaration
C:\Users\NIC\Desktop\multiFS.pwn(111) : error 029: invalid expression, assumed zero
C:\Users\NIC\Desktop\multiFS.pwn(113) : error 010: invalid function or declaration
C:\Users\NIC\Desktop\multiFS.pwn(155) : error 002: only a single statement (or expression) can follow each "case"
C:\Users\NIC\Desktop\multiFS.pwn(155) : warning 215: expression has no effect
C:\Users\NIC\Desktop\multiFS.pwn(155) : error 001: expected token: ";", but found "return"
C:\Users\NIC\Desktop\multiFS.pwn(156) : warning 225: unreachable code
C:\Users\NIC\Desktop\multiFS.pwn(160) : warning 209: function "OnDialogResponse" should return a value
C:\Users\NIC\Desktop\multiFS.pwn(161) : error 010: invalid function or declaration

 

Link to comment
Share on other sites

  • 0
před 13 minutami, MajorGames4 said:
  Opětovně skrýt obsah

C:\Users\NIC\Desktop\multiFS.pwn(80) : warning 217: loose indentation
C:\Users\NIC\Desktop\multiFS.pwn(91) : warning 202: number of arguments does not match definition
C:\Users\NIC\Desktop\multiFS.pwn(91) : warning 202: number of arguments does not match definition
C:\Users\NIC\Desktop\multiFS.pwn(93) : warning 217: loose indentation
C:\Users\NIC\Desktop\multiFS.pwn(111) : error 010: invalid function or declaration
C:\Users\NIC\Desktop\multiFS.pwn(111) : error 029: invalid expression, assumed zero
C:\Users\NIC\Desktop\multiFS.pwn(113) : error 010: invalid function or declaration
C:\Users\NIC\Desktop\multiFS.pwn(155) : error 002: only a single statement (or expression) can follow each "case"
C:\Users\NIC\Desktop\multiFS.pwn(155) : warning 215: expression has no effect
C:\Users\NIC\Desktop\multiFS.pwn(155) : error 001: expected token: ";", but found "return"
C:\Users\NIC\Desktop\multiFS.pwn(156) : warning 225: unreachable code
C:\Users\NIC\Desktop\multiFS.pwn(160) : warning 209: function "OnDialogResponse" should return a value
C:\Users\NIC\Desktop\multiFS.pwn(161) : error 010: invalid function or declaration

 

A jak máme vědět, že řádek 80 je zrovna ten a ten a 91 ten atd.? 

Link to comment
Share on other sites

  • 0

ACH... dobre budem najkonkrétnejší.

 

Chcem skrátka vedieť, ako sa pracuje case pri format().

Takže keď mám napr.:

Spoiler

        format(String,sizeof(String),"- Každá zbraň má 1,000 AMMO -\n");  
        format(String,sizeof(String),"AK47 - (3,000$)\n");         
        format(String,sizeof(String),"M4 - (3,000$)\n");       
        format(String,sizeof(String),"Sawn-Off Shotgun - (1,500$)\n");  
        format(String,sizeof(String),"Knife - (50$)\n");                  
        format(String,sizeof(String),"Desert Eagle - (100$)\n");        
        format(String,sizeof(String),"Minigun - (1,500,000$)\n");
        format(String,sizeof(String),"Snipe - (550$)\n");
                      
        spd(id,102,list,"Kúpiť zbraň",String,"Kúpiť","Zrušiť");

Ako vytvorím na jednotlivé riadky, čo sa má stať?

Link to comment
Share on other sites

  • 0

Moc nechápu dotaz. Jede to normálně po sobě. Např:

 

new id[3];
new getnick[MAX_PLAYER_NAME], nick[16];
GetPlayerName(playerid, getnick, sizeof(getnick));
format(id, sizeof(id), "Tvoje id je: %i", playerid);
SendClientMessage(playerid, C_WHITE, id); //Vypíše ID
format(nick, sizeof(nick), "Tvůj nick je: %s", getnick);
SendClientMessage(playerid, C_WHITE, nick); //Vypíše nick

 

Edited by ForestCZE
Link to comment
Share on other sites

  • 0
před 48 minutami, MajorGames4 said:

ACH... dobre budem najkonkrétnejší.

 

Chcem skrátka vedieť, ako sa pracuje case pri format().

Takže keď mám napr.:

  Opětovně skrýt obsah

        format(String,sizeof(String),"- Každá zbraň má 1,000 AMMO -\n");  
        format(String,sizeof(String),"AK47 - (3,000$)\n");         
        format(String,sizeof(String),"M4 - (3,000$)\n");       
        format(String,sizeof(String),"Sawn-Off Shotgun - (1,500$)\n");  
        format(String,sizeof(String),"Knife - (50$)\n");                  
        format(String,sizeof(String),"Desert Eagle - (100$)\n");        
        format(String,sizeof(String),"Minigun - (1,500,000$)\n");
        format(String,sizeof(String),"Snipe - (550$)\n");
                      
        spd(id,102,list,"Kúpiť zbraň",String,"Kúpiť","Zrušiť");

Ako vytvorím na jednotlivé riadky, čo sa má stať?

No nie, ty tu pošleš 20 tisíc riadkov FilterScriptu, Errory a každý ma prekontrolovať riadok po riadku kde sa nachádza tá chyba.. Takto si to predstavuješ ??

Premenná String má obsah "AK47 - (3,000$)\n" atď. A ten string vložíš ako text do Dialógu.. Tak ako asi sa bude robiť case ? Pomocov switch :) Čiže nejako takto

switch(listitem)
{
	case 0: // AK47
	case 1: // ...
}

:o Problém vyriešený

 

A v dialógu ti zobrazí posledný format.. Daj to takto

format(String,sizeof(String),"%sKúpiť zbraň\n", String);
format(String,sizeof(String),"%sKúpiť skin\n", String);
format(String,sizeof(String),"%sKúpiť auto\n", String);
format(String,sizeof(String),"%sPravidlá\n", String);

 

Edited by EvoLve.
Formátovanie v Dialógu
Link to comment
Share on other sites

  • 0

Ok diky, ešte tu mám jeden problém:

Chcel som urobiť aj TIP system, tak som použil random. Lenže mi to na servery nefunguje. Errory mi to nehádže nič, skrátka FS pekne ide, ale tie tipy sa nezobrazujú.

Kód:

Spoiler
public OnFilterScriptInit()
{
 print("\n--------------------------------------");
 print("FilterScript vytvoril *MajorGames4*");
 print("--------------------------------------\n");
 
  SetTimer("timer",120*1000,true);
 return 1;
}
forward timer();
public timer()
{
  new nahoda = random(7);
  switch(nahoda)
  {
    case 0: scmta(-1,"{33CC00}[TIP] Na Servery sú dostupné príkazy: /menu a ďalšie sa pridávajú.");
    case 1: scmta(-1,"{33CC00}[TIP] Prečítaj si čo bude nové v ďalšom update! /menu --> Update.");
    case 2: scmta(-1,"{33CC00}[TIP] Získaj peniaze zabíjaním hráčov, a plnením eventov.");
    case 3: scmta(-1,"{33CC00}[TIP] Máš problém? Kontaktuj on-line admina na Servery.");
    case 4: scmta(-1,"{33CC00}[TIP] Chystáme aj premium systém.");
    case 5: scmta(-1,"{33CC00}[TIP] Chceš peniaze zadarmo? /freemoney.");
    case 6: scmta(-1,"{33CC00}[TIP] Chceš náhodnú zbraň zadarmo? /freeweap.");
    case 7: scmta(-1,"{33CC00}[TIP] Pozvi na server hráčov, a získaj 10,000$.");
  }
  return 1;
}

Includy, ktoré aktuálne používam vo FS:

Spoiler

#include <a_samp>

#include <zcmd>

Prípadne, aký na to potrebujem include?

Link to comment
Share on other sites

  • 0

No zásadný problém tam nevidím... Pošli definíciu scmta.

Taktiež keď dáš random(7) tak máš hodnoty 0..6, takže case 7 sa ti nikdy nevykoná

 

PS: sprav si kontrolu či sa ti volá public (daj tam print, aj do OnFSInit), taktiež môžeš pri settimer kontrolovať hodnotu ktorú vracia - či ti náhodou nevráti 0, ale to nepredpokladám

Edited by Quiter
Link to comment
Share on other sites

  • 0

Definícia je: #define scmta SendClientMessageToAll

Ešte dodám:

V tomto FS kde som dal ten TIP system mám viacej príkazov. Môže to byť aj tým že jdnoduche ten FS "je moc ťažký a server ho jednoducho nenačíta celý"?

Link to comment
Share on other sites

  • 0
před 4 hodinami, MajorGames4 said:

Definícia je: #define scmta SendClientMessageToAll

Ešte dodám:

V tomto FS kde som dal ten TIP system mám viacej príkazov. Môže to byť aj tým že jdnoduche ten FS "je moc ťažký a server ho jednoducho nenačíta celý"?

Pochybujem...

Skôr si myslím že ti koliduje názov timeru s nejakým timerom v móde... spravil si si tie printy? Ak nie, na čo čakáš?

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...