Jump to content
  • 0

pomoc Problem s odecitanim shop + inventar prosím o pomoc


Pingvin

Dotaz

Ahoj mam takto udělaní zacatek modu spis jen shop inventar a ukladani a kdyz si koupim napr Pizzu tak mi to pricte ale kdyz ji chci snist tak mi to neodecte ani nenapise spravu snedl jsi pizzu 

 

Snažil jsem se snad 15 min a nic furt t o nejde :(

 

V tom zamodrenem je chyba nekde a nemuzu stele přijit nato kde :(

 

prosím o pomoc:

 

tady je kod :

 

#include <a_samp>
#include <dutils>
#include <dudb>
//==============================================================================
//                              [  BARVY  ]                                   //
//==============================================================================
#define BARVA 0xEFEFF7AA // Pak si můžete změnit !
//==============================================================================
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
//==============================  new   ========================================
new shop;
//========================== new [ MA_PLAYERS ] ================================
new PLAYERLIST_authed[MAX_PLAYERS];
new pivo[MAX_PLAYERS];
new pizza[MAX_PLAYERS];
//==============================================================================
//                [  STOCK ]                                     //
//==============================================================================
stock Jmeno(playerid){
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
return name;
}
//==============================================================================
stock PlayerName(playerid)
{
new name[255];
GetPlayerName(playerid, name, 255);
return name;
}
//==============================================================================
stock SystemMsg(playerid,msg[])
{
if ((IsPlayerConnected(playerid))&&(strlen(msg)>0))
{
SendClientMessage(playerid,COLOR_SYSTEM,msg);
}
stock PlayerName(playerid)
{
new name[255];
GetPlayerName(playerid, name, 255);
return name;
}
return 1;
}
//==============================================================================
public OnGameModeInit()
{
 
SetGameModeText("Kukysek");
AddPlayerClass(23,-2021.3691,173.5547,28.7263,83.0676,0,0,0,0,0,0); // spawn novi
shop = CreatePickup(1239,1,-2034.0510,178.7934,28.7263,-1);
return 1;
}
 
public OnGameModeExit()
{
return 1;
}
 
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, -2034.0510,178.7934,28.7263);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
return 1;
}
 
public OnPlayerConnect(playerid)
{
PLAYERLIST_authed[playerid] = false;
if (!PLAYERLIST_authed[playerid])
{
if(udb_Exists(PlayerName(playerid))) // Když jeho ucet existuje
{
ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Registrace","Vítej zpět !\nNapiš heslo !","Použít","Odpojit"); // existuje
}    else    {
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Registrace","Vítej !\nZaregistruj se, napiš heslo","Použít","Odpojit"); //neexistuje
}
}
return 1;
}
 
public OnPlayerDisconnect(playerid, reason)
{
if (PLAYERLIST_authed[playerid]) 
{
//============================ UKLADANI PRI ODCHODU ============================
dUserSetINT(PlayerName(playerid)).("Pivo",pivo[playerid]);
dUserSetINT(PlayerName(playerid)).("Pizza",pizza[playerid]);
dUserSetINT(PlayerName(playerid)).("penize",GetPlayerMoney(playerid)); 
}
PLAYERLIST_authed[playerid] = false; 
return 1;
}
 
public OnPlayerSpawn(playerid)
{
return 1;
}
 
public OnPlayerDeath(playerid, killerid, reason)
{
return 1;
}
 
public OnVehicleSpawn(vehicleid)
{
return 1;
}
 
public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}
 
public OnPlayerText(playerid, text[])
{
return 1;
}
 
public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(osoba,5,cmdtext);
////////////////////////////////////////////////////////////////////////////////
if (strcmp("/inventar", cmdtext, true, 10) == 0)
{
 
}
return 0;
}
 
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
return 1;
}
 
public OnPlayerExitVehicle(playerid, vehicleid)
{
return 1;
}
 
public OnPlayerStateChange(playerid, newstate, oldstate)
{
return 1;
}
 
public OnPlayerEnterCheckpoint(playerid)
{
return 1;
}
 
public OnPlayerLeaveCheckpoint(playerid)
{
return 1;
}
 
public OnPlayerEnterRaceCheckpoint(playerid)
{
return 1;
}
 
public OnPlayerLeaveRaceCheckpoint(playerid)
{
return 1;
}
 
public OnRconCommand(cmd[])
{
return 1;
}
 
public OnPlayerRequestSpawn(playerid)
{
return 1;
}
 
public OnObjectMoved(objectid)
{
return 1;
}
 
public OnPlayerObjectMoved(playerid, objectid)
{
return 1;
}
 
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == shop) {
ShowPlayerDialog(playerid,10,DIALOG_STYLE_LIST,"Obchod se zbraněmi","Koupit pivo\nkoupit pizzu","Koupit","Zrušit");
}
return 1;
}
 
public OnVehicleMod(playerid, vehicleid, componentid)
{
return 1;
}
 
public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
return 1;
}
 
public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
return 1;
}
 
public OnPlayerSelectedMenuRow(playerid, row)
{
return 1;
}
 
public OnPlayerExitedMenu(playerid)
{
return 1;
}
 
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
return 1;
}
 
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
return 1;
}
 
public OnRconLoginAttempt(ip[], password[], success)
{
return 1;
}
 
public OnPlayerUpdate(playerid)
{
return 1;
}
 
public OnPlayerStreamIn(playerid, forplayerid)
{
return 1;
}
 
public OnPlayerStreamOut(playerid, forplayerid)
{
return 1;
}
 
public OnVehicleStreamIn(vehicleid, forplayerid)
{
return 1;
}
 
public OnVehicleStreamOut(vehicleid, forplayerid)
{
return 1;
}
 
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 1)
{
if(response == 1)
{
if (udb_Exists(PlayerName(playerid))) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Registrace","Přihlaš se ! napiš heslo","Použít","Odpojit");
if (strlen(inputtext)==0) return ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Registrace","Musíš napsat heslo !","Použít","Odpojit");
if (udb_Create(PlayerName(playerid),inputtext)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Registrace","Víborně, nyní napiš znovu heslo !","Použít","Odpojit");
}
if(response == 2)
{
Kick(playerid);
}
}
//==============================================================================
if(dialogid == 2)
{
if(response == 1)
{
if (strlen(inputtext)==0) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Registrace","Musíš zadat heslo !\nNapiš heslo !","Použít","Odpojit");
if (udb_CheckLogin(PlayerName(playerid),inputtext))
{
//==============================================================================
pivo[playerid] = dUserINT(PlayerName(playerid)).("Pivo");
pizza[playerid] = dUserINT(PlayerName(playerid)).("Pizza");
GivePlayerMoney(playerid,dUserINT(PlayerName(playerid)).("Penize")-GetPlayerMoney(playerid));
PLAYERLIST_authed[playerid] = true;
return SendClientMessage(playerid, BARVA, "Úspěšně přihlášen !");
}
return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Registrace","Nespravne heslo !","Použít","Odpojit");
}
if(response == 2)
{
Kick(playerid);
}
}
//===============================================================
if(dialogid == 10)  //dialog číslo 1
{
if(response == 1)
{
if(listitem == 0)  //První věc co jste napsali v dialogu
{
SendClientMessage(playerid,-1,"Kúpil si si Rožok !");
pivo[playerid]++;
GivePlayerMoney(playerid,-10);
}
if(listitem == 1) //a to stejné u dalších věcí
{
SendClientMessage(playerid,-1,"Kúpil si si Rožok !");
pizza[playerid]++;
GivePlayerMoney(playerid,-10);
}
}
//==============================================================================
if(dialogid == 20) 
{
if(response == 1) 
{
if(listitem == 0)
{
new Float:health;
if(pivo[playerid] ==0) return SendClientMessage(playerid,-1,"[  !  ] Nemáš žadne pivo!");
if(health>=95) return SendClientMessage(playerid,-1,"[  !  ] {FFFFFF}Hráč není zraněný !");
{
pivo[playerid]--;
SendClientMessage(playerid,-1,"vypil jsi pivo");
GetPlayerHealth(playerid,health);
SetPlayerHealth(playerid,health+35);
if(health > 100) return SetPlayerHealth(playerid,100);
}
}
//--------------------------
if(listitem == 1)
{
if(pizza[playerid]<=0) return SendClientMessage(playerid,-1,"[  !  ] Nemáš žadnou pizzs!");
if(pizza[playerid]>=1)
{
pizza[playerid]--;
SendClientMessage(playerid,-1,"Snedl jsi pizzu");
new Float:health;
GetPlayerHealth(playerid,health);
SetPlayerHealth(playerid,health+35);
if(health > 100) return SetPlayerHealth(playerid,100);
}
}
return 1;
}
}
}
return 0;
}
 
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}
 
dcmd_osoba(playerid, params[])
{
#pragma unused params
new str[128];
format(str,128,"Pivo: %dKS\nPivo: %dKS",pivo[playerid],pizza[playerid]); //Formát
ShowPlayerDialog(playerid,20,DIALOG_STYLE_LIST,"Info",str,"Pokračovať",""); //Zobrazí dialóg
return 1;
}

Edited by vEnd
Spoiler
Link to comment
Share on other sites

4 odpovědí na tuto otázku

Recommended Posts

  • 0

Zdravím,

takže na začátek tvůj kód je příšerný a nepřehledný. Všiml sis vůbec toho, že ve stocku SystemMsg máš další stock? Asi ne vid? Kdyby jsi taboval nic takové by se ti nestalo. Za druhé je poznat, že máš některé kódy zkopírované, což by nevadilo, ovšem kdyby sis je upravil. Nejsou to nějaké zásadní věci, zvětšiny jde o nadpisy dialogů či zprávy, co hráčům posíláš. A jelikož to uvádíš jako mód, budeš ho mít ve výsledku celý zmatlaný a budeš ho moci celý předělat. Možná si říkáš, že to nejdříve naplácáš, zkopíruješ a pak upravíš, ale tahle cesta vede jen do pekla, jelikož na 100% na něco zapomeneš a pak se to v bůh ví jak dlouhém kódu bude velice špatně hledat. Za třetí tvůj mód nemá žádný řád, což možná souvisí i s druhým bodem, mluvím hlavně o tom, že veškerá data ukládáš pod tagem se velkým začínajícím písmenem a jeden z nich s malým, ovšem při čtení čteš všechny 3 s velkým začínajícím písmenem... A za čtvrté neznáš vůbec základy, koukni se jak má OnDialogResponse vypadat, kdy používat return a kdy ne. Občas máš zbytečné podmínky.

 

Co jsem na první pohled viděl, tak jsem upravil, je možné, že tam ještě nějaké chybku budou. Smazal jsem callbacky, které nepoužíváš, aby jsme se tu netahali s dlouhými kódy. Přečti si komentáře. Souvisí s těmi body nahoře.

A hlavně začni tabovat, jelikož né každý tu je zvědavý na nepřehledné a neodtabované kódy.

 

 

 

#include <a_samp>
#include <dutils>
#include <dudb>
//==============================================================================
//                              [  BARVY  ]                                   //
//==============================================================================
#define BARVA 0xEFEFF7AA // Pak si můžete změnit !
//==============================================================================
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
//==============================  new   ========================================
new shop;
//========================== new [ MA_PLAYERS ] ================================
new PLAYERLIST_authed[MAX_PLAYERS];
new pivo[MAX_PLAYERS];
new pizza[MAX_PLAYERS];
//==============================================================================
//               [  STOCK ]                                     //
//==============================================================================
stock Jmeno(playerid){
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
return name;
}
//==============================================================================
stock PlayerName(playerid)
{
	new name[255];
	GetPlayerName(playerid, name, 255);
	return name;
}
//==============================================================================
stock SystemMsg(playerid,msg[])
{
	if ((IsPlayerConnected(playerid))&&(strlen(msg)>0))
	{
		SendClientMessage(playerid,COLOR_SYSTEM,msg);
	}
	return 1;
}
//==============================================================================
public OnGameModeInit()
{

	SetGameModeText("Kukysek");
	AddPlayerClass(23,-2021.3691,173.5547,28.7263,83.0676,0,0,0,0,0,0); // spawn novi
	shop = CreatePickup(1239,1,-2034.0510,178.7934,28.7263,-1);
	return 1;
}

public OnGameModeExit()
{
	return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
	SetPlayerPos(playerid, -2034.0510,178.7934,28.7263);
	SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
	return 1;
}

public OnPlayerConnect(playerid)
{
	PLAYERLIST_authed[playerid] = false;
	if (!PLAYERLIST_authed[playerid])
	{
		if(udb_Exists(PlayerName(playerid))) // Když jeho ucet existuje
		{
			ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Registrace","Vítej zpět !\nNapiš heslo !","Použít","Odpojit"); // existuje
		}else{
			ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Registrace","Vítej !\nZaregistruj se, napiš heslo","Použít","Odpojit"); //neexistuje
		}
	}
	return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
	if (PLAYERLIST_authed[playerid])
	{
		//============================ UKLADANI PRI ODCHODU ============================
		dUserSetINT(PlayerName(playerid)).("Pivo",pivo[playerid]);
		dUserSetINT(PlayerName(playerid)).("Pizza",pizza[playerid]);
		dUserSetINT(PlayerName(playerid)).("Penize",GetPlayerMoney(playerid)); //zachovej si nějaký řád, proč předchozí dvě začínají velkým písmenem a penize jsou malým?
	}
	PLAYERLIST_authed[playerid] = false;
	return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
	dcmd(osoba,5,cmdtext);
	return 0;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
	if(pickupid == shop) {
		ShowPlayerDialog(playerid,10,DIALOG_STYLE_LIST,"Obchod se zbraněmi","Koupit pivo\nkoupit pizzu","Koupit","Zrušit"); //wtf obchod se zbraněmi? 
	}
	return 1;
}


public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	if(dialogid == 1)
	{
		if(response == 1)
		{
			if (udb_Exists(PlayerName(playerid))) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Registrace","Přihlaš se ! napiš heslo","Použít","Odpojit");
			if (strlen(inputtext)==0) return ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Registrace","Musíš napsat heslo !","Použít","Odpojit");
			if (udb_Create(PlayerName(playerid),inputtext)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Registrace","Víborně, nyní napiš znovu heslo !","Použít","Odpojit");
		}
		if(response == 2)
		{
			Kick(playerid);
		}
		return 1;//zapomněl jsi na return 1;, takže si to myslí, že jsi dialog nenašel a na konci publicu vrátí 0, což zabričíní to, že bude hledat dál (ve FS) i když to nění třeba, protože jsi dialog našel --> tohle ti může dělat problémy
	}
	//==============================================================================
	if(dialogid == 2)
	{
		if(response == 1)
		{
			if (strlen(inputtext)==0) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Registrace","Musíš zadat heslo !\nNapiš heslo !","Použít","Odpojit");
			if (udb_CheckLogin(PlayerName(playerid),inputtext))
			{
				pivo[playerid] = dUserINT(PlayerName(playerid)).("Pivo");
				pizza[playerid] = dUserINT(PlayerName(playerid)).("Pizza");
				GivePlayerMoney(playerid,dUserINT(PlayerName(playerid)).("Penize")-GetPlayerMoney(playerid)); //to je to učem mluvím, ukládáš pod malým a čteš pod velkým.. !!!
				PLAYERLIST_authed[playerid] = true;
				SendClientMessage(playerid, BARVA, "Úspěšně přihlášen !");//proč máš tady return?, odstraním ho a potom použiji else a return
			}
			else return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Registrace","Nespravne heslo !","Použít","Odpojit");
		}
		if(response == 2)
		{
			Kick(playerid);
		}
		return 1;//to samé co výše
	}
	//===============================================================
	if(dialogid == 10)
	{
		if(response == 1)
		{
			if(listitem == 0)
			{
				SendClientMessage(playerid,-1,"Kúpil si si Rožok !"); //rožok? 
				pivo[playerid]++;
				GivePlayerMoney(playerid,-10);
			}
			if(listitem == 1) //a to stejné u dalších věcí
			{
				SendClientMessage(playerid,-1,"Kúpil si si Rožok !");//rožok? 
				pizza[playerid]++;
				GivePlayerMoney(playerid,-10);
			}
		}
		return 1; //to samé
	}
	//==============================================================================
	if(dialogid == 20)
	{
		if(response == 1)
		{
			if(listitem == 0)
			{
				new Float:health;
				if(pivo[playerid] <=0) return SendClientMessage(playerid,-1,"[  !  ] Nemáš žadne pivo!");
				if(health>=95) return SendClientMessage(playerid,-1,"[  !  ] {FFFFFF}Hráč není zraněný !");
				{
					pivo[playerid]--;
					SendClientMessage(playerid,-1,"vypil jsi pivo");
					GetPlayerHealth(playerid,health);
					SetPlayerHealth(playerid,health+35);
					if(health > 100) SetPlayerHealth(playerid,100); //proč return
					//--> return použij v případě, že se něco nepovedlo, jako to máš použito výše (viz. Hráč nění zraněný). Return ti totiž ukončí callback bez
					//toho aniž by ti vrátil 1 nebo 0, to ti sice vrátí fce SetPlayerHealth, ale 1 v případě že se fce vyvolala úspěšně a 0 když ne a no ty ty nemůžeš spoléhat
					//ty chceš aby ho to vyléčilo a pokračovalo dál, jelikož na konci dialogu vracíš 1, což znamená že jsi našel dialog
					
					//Pozn.: Je to to samé kdyby si chtěl třeba psaní mezi teamem (zaměstnání) ty cyklem projedeš všechny hráče a ti co uvnitř cyklu splňují podmínku, že jsou ve stejném zaměstnání, tak jim odešleš zprávu
					//kdyby jsi to napsal takto:
					/*
					for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++)
    				{
        				if(PlayerJob[i] != PlayerJob[playerid]) return 0; // --> to by ti zapříčinilo ukončení cyklu, takže pokud by zrovna id 0 (nebo další id za ním) nebyl tvůj kolega ukončí se cyklus a dál nepokračuje...
        				else
        					SCM(i, -1, "Kolega píše: nějaká zpráva");
    				}
					*/
				}
			}
	//--------------------------
			if(listitem == 1)
			{
				if(pizza[playerid]<=0) return SendClientMessage(playerid,-1,"[  !  ] Nemáš žadnou pizzs!");
				//tady jsi měl úplně zbytečnou podmínku, jelikož ti všechno ošetřila už ta podmínka předtím
				pizza[playerid]--;
				SendClientMessage(playerid,-1,"Snedl jsi pizzu");
				new Float:health;
				GetPlayerHealth(playerid,health);
				SetPlayerHealth(playerid,health+35);
				if(health > 100) SetPlayerHealth(playerid,100); //proč return
			}
			//tady si vracel 1, proč v respose, return 1 se dává na konci dialogu?
		}
		return 1;
	}
	return 0;
}

dcmd_osoba(playerid, params[])
{
	#pragma unused params
	new str[128];
	format(str,128,"Pivo: %dKS\nPivo: %dKS", pivo[playerid], pizza[playerid]); //Formát
	ShowPlayerDialog(playerid,20,DIALOG_STYLE_LIST,"Info",str,"Pokračovať",""); //Zobrazí dialóg
	return 1;
}
 

 

 

 

PS: Tento kód nemusí stále fungovat, jenom si ho uprav a pak to když tak dořešíme. ;)

Edited by GaRGoyLeS
Link to comment
Share on other sites

  • 0

Ok dekuji moc za pomoc

 

a díky za pripomínky a rady vvemu si je k srdci

 

mas skyp ?


Vse funguje jak ma


Tema mužete zavřít [    LOCK   ]

 

 

 

VŠE VYŘEŠENO : 

 

PS:  Pingvin

Edited by Pingvin
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...