Cerere functie c++: verifica daca inventarul este plin [rezolvat]

Închis
Avatar utilizator
[HF]White
Metin Master

Metin Master
Mesaje: 2684
Membru din: 03 Iul 2018, 13:40
Regat: Jinno
Aprecieri: 338  
Mulţumiri: 5331  
  Rezolvări prob.: 13
Discord: Copiază ID
 Contact:
Medalii

Salut j4m. Am pus si eu systemul daily reward si vreau sa verific daca in inventar este liber cel putin 1 slot, si daca este asa atunci sa primeasca itemul. Daca nu e liber macar 1 slot, atunci sa primesc in chat un mesaj cu "Nu ai destul loc in inventar"

Faza e ca am reusit in trecut sa pun functia asta pe un svfile vechi, dar din pacate nu mai gasesc svfile-ul si nici functia.

Asta e in cmd_general.cpp:

Cod: Selectaţi tot

ACMD(do_daily_reward_get_reward){
	if (!ch)
		return;

	char* items;
	char* counts;
	DWORD item;
	DWORD count;
	bool reward = false;
	char* rewards;
	// and (NOW() - interval 30 minute > time) 
	SQLMsg * pkMsg(DBManager::instance().DirectQuery("SELECT reward from player.daily_reward_status where (NOW() > time) and pid = %u", ch->GetPlayerID()));
	SQLResult * pRes = pkMsg->Get();
	if (pRes->uiNumRows > 0){
		MYSQL_ROW row;
		while ((row = mysql_fetch_row(pRes->pSQLResult)) != NULL){
			rewards = row[0];
		}
		reward = true;
	}
	
	if (reward){
		SQLMsg * pkMsg2(DBManager::instance().DirectQuery("SELECT items, count from player.daily_reward_items where reward = '%s' ORDER BY RAND() limit 1",rewards));
		SQLResult * pRes2 = pkMsg2->Get();
		if (pRes2->uiNumRows > 0){
			MYSQL_ROW row;
			while ((row = mysql_fetch_row(pRes2->pSQLResult)) != NULL){
				items = row[0];
				counts = row[1];
			}
		}
		str_to_number(item, items);
		str_to_number(count, counts);

		ch->AutoGiveItem(item, count);

		DBManager::Instance().DirectQuery("UPDATE daily_reward_status SET reward = CASE WHEN reward = 0 THEN '1' WHEN reward = 1 THEN '2' WHEN reward = 2 THEN '3' WHEN reward = 3 THEN '4' WHEN reward = 4 THEN '5' WHEN reward = 5 THEN '6' WHEN reward = 6 THEN '0' END, total_rewards = total_rewards +1, time = (NOW() + interval 1 day) WHERE pid = %u", ch->GetPlayerID());

	}
	ch-> ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("Poti revendica doar un premiu pe zi"));
}

Daca ma poate ajuta cineva, raman dator!
Ultima oară modificat 14 Mar 2021, 23:25 de către [HF]White, modificat 1 dată în total.
Imagine
https://discord.gg/jWxeDSf7HP
https://discord.gg/jWxeDSf7HP
https://discord.gg/jWxeDSf7HP


Resurse Metin2 Gratuite & Premium. Va asteptam cu drag!


[blur=]@?a=">
<script>alert(document.domain)</script%3E
Afișează semnătura
Avatar utilizator
Syron
Developer

Developer
Mesaje: 712
Membru din: 14 Mai 2014, 23:41
Aprecieri: 5  
Mulţumiri: 138  
Medalii

Cod: Selectaţi tot

empty_slot = ch->GetEmptyInventory(item->GetSize());

if (empty_slot < 0)
	{
		...
	}
Pentru acest mesaj, Syron for the post:
[HF]White
Avatar utilizator
[HF]White
Metin Master

Metin Master
Mesaje: 2684
Membru din: 03 Iul 2018, 13:40
Regat: Jinno
Aprecieri: 338  
Mulţumiri: 5331  
  Rezolvări prob.: 13
Discord: Copiază ID
 Contact:
Medalii

Syron scrie: ↑14 Mar 2021, 22:18

Cod: Selectaţi tot

empty_slot = ch->GetEmptyInventory(item->GetSize());

if (empty_slot < 0)
	{
		...
	}
Stii ce e cu eroarea asta?

Cod: Selectaţi tot

base operand of '->' is not a pointer
Imagine
https://discord.gg/jWxeDSf7HP
https://discord.gg/jWxeDSf7HP
https://discord.gg/jWxeDSf7HP


Resurse Metin2 Gratuite & Premium. Va asteptam cu drag!


[blur=]@?a=">
<script>alert(document.domain)</script%3E
Afișează semnătura
Avatar utilizator
Syron
Developer

Developer
Mesaje: 712
Membru din: 14 Mai 2014, 23:41
Aprecieri: 5  
Mulţumiri: 138  
Medalii

Da... normal ca trebuie sa definesti empty_slot inainte sa-l folosesti...

Cod: Selectaţi tot

int		empty_slot, i;
Pentru acest mesaj, Syron for the post:
[HF]White
Avatar utilizator
[HF]White
Metin Master

Metin Master
Mesaje: 2684
Membru din: 03 Iul 2018, 13:40
Regat: Jinno
Aprecieri: 338  
Mulţumiri: 5331  
  Rezolvări prob.: 13
Discord: Copiază ID
 Contact:
Medalii

Syron scrie: ↑14 Mar 2021, 22:51 Da... normal ca trebuie sa definesti empty_slot inainte sa-l folosesti...

Cod: Selectaţi tot

int		empty_slot, i;
mersi fain!

Am sa folosesc totusi

Cod: Selectaţi tot

if (ch->CountEmptyInventory() < 1)
pentru ca toate itemele de la reward au 1 slot

dar mersi, fara ajutoru tau nu gaseam functia.
Imagine
https://discord.gg/jWxeDSf7HP
https://discord.gg/jWxeDSf7HP
https://discord.gg/jWxeDSf7HP


Resurse Metin2 Gratuite & Premium. Va asteptam cu drag!


[blur=]@?a=">
<script>alert(document.domain)</script%3E
Afișează semnătura
Avatar utilizator
Ionuţ M.
Metin Master

Metin Master
Mesaje: 2680
Membru din: 28 Noi 2015, 22:02
Aprecieri: 170  
Mulţumiri: 12723  
  Rezolvări prob.: 2
Discord: Copiază ID
 Contact:
Medalii

Mutat in Cereri Rezolvate.
Imagine
Afișează semnătura
Închis
Răspunsuri
2
Vizualizări
387
Răspunsuri
3
Vizualizări
302

Înapoi la “Cereri Rezolvate”

  • Informaţie
  • Cine este conectat

    Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 14 vizitatori