Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Problem z levelem [SRC]


Rekomendowane odpowiedzi

Opublikowano

Cześć, zniosłem limit yang na serwerze wszystko ładnie działa mam problem, bo gdy zniosłem limit to coś sie stało z expem, a raczej z levelem, bo gdy używam pierścienia anty expa to wbija mi lvl z 1 do 80, a potem po ubiciu np. dzikiego psa dostaje lvl zabijam drugiego tez dostaje lvl jest tak z każdym mobem powie mi ktoś, w jakim pliku mogłem coś źle zrobić, jaki plik odpowiada za to ?­

sygna.png

Opublikowano

@Endymion

 

Używam tego questa dzieje sie to z każdym questem

quest exp_curse begin
	state start begin
		when 80002.use begin
			pc.setqf("lastexp",pc.get_exp())
			syschat("You are under the curse of the goddess. You will gain no experience.")
			set_state(use)
		end
	end
	
	state use begin
		when 80002.use begin
			syschat("You lifted the curse of the goddess. You gain experience again.")
			set_state(start)
		end
		
		when login begin
			syschat("You are currently under the curse of the goddess and gain no experience.")
		end
		
		when kill or party_kill begin
			local current = pc.get_exp()
			local doll = pc.count_item(80002)
			if doll == 0 then
				syschat("The curse of the Goddess has lifted. You will gain Experience again.")
				set_state(start)
			end
			if current < pc.getqf("lastexp") then
				pc.setqf("lastexp",current)
			end
			if not npc.is_pc() then
				local dif = pc.get_exp()-pc.getqf("lastexp")
				pc.give_exp2(-dif)
			end
		end
	end
end 

­

sygna.png

Opublikowano

@Endymion

 

Możesz troche jaśniej ?

­

W sensie, że w game (source) w pliku questlua_pc.cpp musisz edytować funkcję o nazwie: pc_give_exp2


Omnes puerum deriserunt.

Opublikowano


int pc_give_exp2(lua_State* L){

CQuestManager& q = CQuestManager::instance();

LPCHARACTER ch = q.GetCurrentCharacterPtr();

if (!lua_isnumber(L,1))

return 0;

 

long long exp = (long long)rint(lua_tonumber(L,1));

 

PC* pPC = CQuestManager::instance().GetCurrentPC();

ch->PointChange(POINT_EXP, exp);

return 0;

}

 

Opublikowano
int pc_give_exp2(lua_State* L){
		CQuestManager& q = CQuestManager::instance();
		LPCHARACTER ch = q.GetCurrentCharacterPtr();
		if (!lua_isnumber(L,1))
			return 0;

		long long exp = (long long)rint(lua_tonumber(L,1));

		PC* pPC = CQuestManager::instance().GetCurrentPC();
		ch->PointChange(POINT_EXP, exp);
		return 0;
	}

 

@Endymion

 

Ok super działa bardzo dziękuje mam jeszcze jeden problem po zwiększeniu Golda jak Selam np. 30 sztabek po 500kk na raz poprzez kliknięcie to kasy nie dodaje a jakąś tam ilość mi odejmuje i na czacie pisze.

3b7e62996f54e45fee946d375f73c302.png

­

sygna.png

Opublikowano

@Endymion

 

Ok super działa bardzo dziękuje mam jeszcze jeden problem po zwiększeniu Golda jak Selam np. 30 sztabek po 500kk na raz poprzez kliknięcie to kasy nie dodaje a jakąś tam ilość mi odejmuje i na czacie pisze.

3b7e62996f54e45fee946d375f73c302.png

­

Musiałbym to przeanalizować przeglądając Twój kod. Tak na logiczne myślenie:

int pc_change_money(lua_State * L)
{
long long gold = (long long)lua_tonumber(L, -1);
...
 
Tutaj powinien być long long a go nie masz. Poszukaj jeszcze tego lc_textu i tam będzie bankowo %d od przekazania wartości i zamień to na %lld albo %dll. Już nie pamiętam które jest prawidłowe, ale raczej pierwsze.

 

Opublikowano

@Endymion

 

Ok dzięki wszystko działa moge sprzedawać tylko że na czacie pisze jeszcze błędnie czasem na + czasem znów na - w cliencie tez oczymś zapomniałem ?

	int pc_change_money(lua_State * L)
	{
		long long gold = (long long)lua_tonumber(L, -1);

		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();

		if (gold + ch->GetGold() < 0)
			sys_err("QUEST wrong ChangeGold %dll (now %dll)", gold, ch->GetGold());
		else
		{
			DBManager::instance().SendMoneyLog(MONEY_LOG_QUEST, ch->GetPlayerID(), gold);
			ch->PointChange(POINT_GOLD, gold, true);
		}

		return 0;
	} 

­

sygna.png

Opublikowano

Nie no to lc_text pewnie używa %d do przekazania wartości, a %d przyjmuje max wartosc inta dlatego w game i locale string musisz dac %lld czy tam %dll. Pogoogluj ktore jest odpowiednie bo serio nie pamietam. :p

 

Opublikowano

Ogolnie to chodzi o ChatPacket. Treści wiadomości sa czytane z locale_string.txt i Do tego wykorzystuje sie lc_text. Poszukaj tego dziwnego oznakowania odnośnie "Otrzymałeś %d Yang." i potem szukaj go w game zmieniając wszędzie %d na %lld czy tam %dll bo przekazujecie za duze wartości jak na int.

 

Opublikowano

@Endymion a w którym pliczku to znajdę? Bo mam z tym mały problem.

W całym game, musisz zmienić i zmienić w wywołaniach stringu od Yangów ten %d bo w samym locale_string też musisz to zrobić.

 

Opublikowano

W całym game, musisz zmienić i zmienić w wywołaniach stringu od Yangów ten %d bo w samym locale_string też musisz to zrobić.

A okej :>, dzięki

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...