[SOURCE] Bücher gestapelt lesbar?

09/07/2015 23:00 Venessen#1
Hallo,
Was habe ich in der Source zu ändern, um Fertigkeitsbücher, Sprachbücher etc. gestapelt lesbar zu machen?
Sprich, beim Lesen soll jeweils nur ein Buch verschwinden und nicht der komplette Stack.

Danke.
09/08/2015 09:28 mrapc#2
Bist du dir sicher dass das im Source gemacht wird?
Wir haben dafür ne Quest die zählt wie viele man hat und dann entsprechend ließt.
09/08/2015 10:15 rollback#3
So müsste es gehen:
Code:
quest fb begin
	state start begin
		when fbvnum.use begin
			local skillVnum = item.get_socket(0)
			local skillLevel = pc.get_skill_level(skillVnum)
			
			if skillLevel >= 40 then
				syschat("Diese Fertigkeit ist bereits auf der höchsten Stufe.")
				return
			elseif skillLevel >= 30 then
				syschat("Um diese Fertigkeit zu steigern benötigst du einen Seelenstein.")
				return
			elseif skillLevel < 20 then
				syschat("Du musst die Fertigkeit meistern, bevor du dieses Buch benutzen kannst.")
				return
			end
			
			local expNeed = 20000
			
			if pc.get_exp() < expNeed then
				syschat("Du benötigst " .. expNeed .. " Erfahrung um dieses Buch zu lesen.")
				return
			end
			
			if pc.getqf("waitTime_" .. skillVnum) > get_time() then
				syschat("Du kannst dieses Buch nur alle 18 Stunden lesen.")
				return
			end
			
			local techLevel = pc.getqf("techLevel_" .. skillVnum)
			local nextTechLevel = skillLevel - techLevel - 20
			
			
			pc.remove_item(item.get_vnum())
			pc.give_exp2(-expNeed)
			pc.setqf("waitTime_" .. skillVnum, get_time() + 60*60*18)
			
			if math.random(100) > 33 then
				syschat("Das Lesen des Buches war nicht erfolgreich ...")
				return
			end
			
			pc.setqf("techLevel_" .. skillVnum, nextTechLevel)
			
			if nextTechLevel == 0 then
				pc.set_skill_level(skillVnum, skillLevel + 1)
				syschat("Die Fertigkeit wurde auf Meisterstufe " .. (skillLevel - 20) .. " erhöht!")
			else
				syschat("Du hast das Buch erfolgreich gelesen, es fehlen noch " .. nextTechLevel .. " weitere, um die Fertigkeit auf die nächste Stufe zu erhöhen.")
			end
		end
	end
end
Allerdings werden Exos / Konzis da nicht berücksichtigt
09/08/2015 10:55 Venessen#4
Danke für eure Hilfestellungen,
Für andere Files gibt es ja eine Dif, durch die man FB´s gestapelt lesen kann.
Somit muss es möglich sein dies zu realisieren.
Da ich nun mit Source arbeite, kann ich keine Difs mehr verwenden und möchte es auch ungerne über Quests lösen.
09/08/2015 11:03 rollback#5
Die Stelle wo es removed wird durch das hier ersetzen:
Code:
item->SetCount(item->GetCount() - 1);
09/08/2015 11:31 xGr33n#6
char_item.cpp:
PHP Code:
case ITEM_SKILLBOOK
2x
PHP Code:
ITEM_MANAGER::instance().RemoveItem(item); 
->
Quote:
Originally Posted by Seחsi View Post
Code:
item->SetCount(item->GetCount() - 1);
09/08/2015 11:47 Venessen#7
PHP Code:
case ITEM_SKILLBOOK:
            {
                if (
IsPolymorphed())
                {
                    
ChatPacket(CHAT_TYPE_INFOLC_TEXT("변신중에는 책을 읽을수 없습니다."));
                    return 
false;
                }

                
DWORD dwVnum 0;

                if (
item->GetVnum() == 50300)
                {
                    
dwVnum item->GetSocket(0);
                }
                else
                {
                    
// 새로운 수련서는 value 0 에 스킬 번호가 있으므로 그것을 사용.
                    
dwVnum item->GetValue(0);
                }

                if (
== dwVnum)
                {
                    
item->SetCount(item->GetCount() - 1);
                    return 
false;
                }

                if (
true == LearnSkillByBook(dwVnum))
                {
                    
item->SetCount(item->GetCount() - 1);

                    
int iReadDelay number(SKILLBOOK_DELAY_MINSKILLBOOK_DELAY_MAX);

                    if (
distribution_test_server)
                        
iReadDelay /= 3;

                    
//한국 본섭의 경우에는 시간을 24시간 고정
                    
if (LC_IsKorea())
                        
iReadDelay 86400;

                    
SetSkillNextReadTime(dwVnumget_global_time() + iReadDelay);
                }
            }
            break; 

Dies funktioniert zwar für Fertigkeitsbücher, allerdings nicht mit Buch der Verwandlung, Sprachbuch etc.


#Edit: Habs gefunden, danke an alle
09/08/2015 12:00 xGr33n#8
Quote:
Originally Posted by Venessen View Post

Dies funktioniert zwar für Fertigkeitsbücher, allerdings nicht mit Buch der Verwandlung, Sprachbuch etc.
char_item.cpp:
PHP Code:
case 50314: case 50315: case 50316
1x
PHP Code:
ITEM_MANAGER::instance().RemoveItem(item); 
->
PHP Code:
item->SetCount(item->GetCount() - 1); 

Wegen Buch der Verwandlung, die restlichen Vnums findest du denke ich selbst, das Prinzip sollte verstanden sein x:
09/08/2015 12:02 Venessen#9
Jawoll, habe alles gefunden, vielen Dank.