• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!
  • 2026 staff recruitment is open! Check it out and consider applying!

Taski - Nawiększe zadane obrażenia albo ostatni hit

Nutaharion

New Member
Joined
Oct 29, 2008
Messages
133
Reaction score
4
Location
Poland
Cześć,

Gdy ludzie wykonują zadanie np. na zabijanie potworków to wystarczy 1 dmg, by również dostać zwiększenie storage value. Np. ktoś odejmie 1 hp demonowi, a ktoś inny go dobije to razem zdobywają punkt do storage value.

Chciałbym coś zrobić, żeby wartość storage zwiększała się graczowi który zadał najwięcej obrażeń, ew. jak to jest niezbyt możliwe to ktoś kto zada ostatni hit potworkowi.

Pozdrawiam i liczę na pomoc,

Nutaharion
 
Code:
	-- Deathlist
	deathListEnabled = true
	deathListRequiredTime = 1 * 60 * 1000
	deathAssistCount = 20
	maxDeathRecords = 5

O to chodzi, tak?

Jeżeli tak, to działa tylko ta część odpowiedzialna za deathListRequiredTime, czyli po minucie jak ktoś dobije potworka to już mu nie nalicza zabicia. Tak czy siak, nawet jak zadam 1 dmg, a ktoś inny zaraz dobije to i tak zlicza ;/ A za to chyba powinien odpowiadać parametr deathAssistCount.

Jeżeli coś pokręciłem to poproszę większe naprowadzenie :P


Pozdrawiam,
 
onDeath to chyba funkcja dla ludzi, a mnie by obchodziła funkcja onKill, bo to ona odpowiada za zliczanie potworów.

Może wkleję kod odpowiadający za to liczenie, i wtedy coś się wymyśli.

LUA:
local msgType = MESSAGE_STATUS_CONSOLE_ORANGE
 
function onKill(cid, target, lastHit)
 
	if (getCreatureName(target) == "Larva") then
		if isPlayer(target) then return true 
		end
 
		if getCreatureStorage(cid, 6023) == 0 then
			if getCreatureStorage(cid, 6025) < 0 then
				doCreatureSetStorage(cid, 6025, 0)
			end
				doCreatureSetStorage(cid, 6025, getCreatureStorage(cid, 6025) + 1)

			if getCreatureStorage(cid, 6023) == 0 then
				if getCreatureStorage(cid, 6025) == 100 then
					doCreatureSetStorage(cid,6023,1)
					doCreatureSetStorage(cid,6024,0)
					doPlayerSendTextMessage(cid, msgType, "You killed 100 larvas, go back to Sephora and tell she about it.")	
				elseif (getCreatureStorage(cid, 6019) > 100) then
					doPlayerSendTextMessage(cid, msgType, "You already killed all required larvas. Go and talk with Sephora.")
				else
					doPlayerSendTextMessage(cid, msgType, "You already killed "..getCreatureStorage(cid, 6025).." of 100 larvas.")
				end
			end
		end
	end

	return true
end
 
Nie poddawaj się!

LUA:
	function onDeath(cid, corpose, deathList)
..
end




Twój skrypt będzie się różnić tylko tym, iż gracza będziesz musiał wyciągnąć z deathList a ofiarą będzie cid (zamiast target), więcej nie pomogę bo struktury tej tablicy nie znam :)
 
Last edited:
Nie wiem czemu masz takie parametry, w source jest co innego (no chyba, ze w 0.4 sie cos zmienilo)...
[cpp]
//onKill(cid, target, damage, flags)
if(m_interface->reserveEnv())
{
uint32_t flags = 0;
if(entry.isLast())
flags |= 1;
[/cpp]
[cpp]
scriptstream << "local damage = " << entry.getDamage() << std::endl;
[/cpp]
Wiec, albo tak, albo tak jak dalem do gory.

#up
Co tzn nie dziala?
 
Jeżeli to powinno działać to informuję iż nie działa ;)

Jak 10 osób walnie po 1 HP, a 11 dobije to wszystkie 11 dostają :->
bo nie ograniczyłeś pętli może? zresztą po co ci potwory, które mają 11hp?

PHP:
local mostDamage = deathList[2] -- 1 = last hit killer, 2 = most damage, 3-#deathList = others.
 
bo nie ograniczyłeś pętli może? zresztą po co ci potwory, które mają 11hp?

PHP:
local mostDamage = deathList[2] -- 1 = last hit killer, 2 = most damage, 3-#deathList = others.

to tylko, przykład, że mają 11 hp :P

Weźmy np. demona, jest task na demony, podejdzie jakiś gracz, walnie np. z HMM'a za 20 podczas gdy ktoś inny będzie go bił i jak ten drugi gracz go zabije to ten co walnął HMM'a też dostaje punkt za demona :P
 
#up
Co tzn nie dziala?

Skoro w funkcji onKill(cid, target, lastHit) jest last hit to właśnie myślałem, że łapać będzie tylko osobę która zadała ostatnia hit (chociaż osobiście wolałbym kto zadał większe obrażenia danemu potworkowi). Niestety nawet jak 10 osób zaatakuje potwora to wszystkie 10 dostają zwiększenie storage odpowiadające za zliczanie potworka.

Uciążliwe jest to dlatego, że jeden ze skryptów (również onKill) zlicza liczbę potworów zabitych przez gracza a 2 zlicza liczbę zabitych potworków w ogóle na servie. I przez to za 1 potworka, 2 graczy otrzymuje zwiększenie wartości dla swojego storage i dla global (czyli 2 graczy zabija 1 demona, global storage rosnie o 2, i kazdy z graczy otrzymuje swoje wlasne storage +1)

A chciałbym, żeby global storage rosło o 1, i tylko 1 z graczy (ten co zadał najwięcej DMG) otrzymał swoje storage +1.
 
Skoro masz cos takiego
onKill(cid, target, lastHit)
tzn, ze masz 0.3.6pl1 (albo inna dystrybucje z ta sama wersja skryptu)
lastHit to parametr, ktorego musisz najpierw uzyc.
jak mowia nam zrodla 0.3.6pl1 lastHit to parametr bool, co oznacza, ze Twoj skrypt musi wygladac tak:
LUA:
local msgType = MESSAGE_STATUS_CONSOLE_ORANGE
 
function onKill(cid, target, lastHit)
 
	if (getCreatureName(target) == "Larva") then
		if isPlayer(target) or not lastHit then return true 
		end
 
		if getCreatureStorage(cid, 6023) == 0 then
			if getCreatureStorage(cid, 6025) < 0 then
				doCreatureSetStorage(cid, 6025, 0)
			end
				doCreatureSetStorage(cid, 6025, getCreatureStorage(cid, 6025) + 1)
 
			if getCreatureStorage(cid, 6023) == 0 then
				if getCreatureStorage(cid, 6025) == 100 then
					doCreatureSetStorage(cid,6023,1)
					doCreatureSetStorage(cid,6024,0)
					doPlayerSendTextMessage(cid, msgType, "You killed 100 larvas, go back to Sephora and tell she about it.")	
				elseif (getCreatureStorage(cid, 6019) > 100) then
					doPlayerSendTextMessage(cid, msgType, "You already killed all required larvas. Go and talk with Sephora.")
				else
					doPlayerSendTextMessage(cid, msgType, "You already killed "..getCreatureStorage(cid, 6025).." of 100 larvas.")
				end
			end
		end
	end
 
	return true
end
#edit
chcesz to Ci moge sellnac fajny tasksystem z gotowym npc i latwym ustawianiem nowych taskow (nagrody w expie i gp)
 
Skoro masz cos takiego
tzn, ze masz 0.3.6pl1 (albo inna dystrybucje z ta sama wersja skryptu)
lastHit to parametr, ktorego musisz najpierw uzyc.
jak mowia nam zrodla 0.3.6pl1 lastHit to parametr bool, co oznacza, ze Twoj skrypt musi wygladac tak:

A możliwe by było przerobienie tego na to kto zada największe obrażenia :P
Troszkę głupio jak ktoś się wysili i ktoś mu będzie dobijał :)
 
to bys musial se na ondeath zrobic, albo przekompilowac ta funkcje na taka jak w 0.4
 
Back
Top