• 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!

Pare pytan do obeznanych w przerobkach silnika!

legolas23

New Member
Joined
Jan 8, 2009
Messages
537
Reaction score
3
Witam chciałbym przerobić silnik mojego otsa jednak najpierw wole zasięgnąć opinii u ludzi ,którzy przerabiają swoje silniki ,ponieważ nie wiem czy niektóre z nich nie zniszczą stabilności serwera lub dadzą szanse debugowania go przez nieuczciwych graczy.

Oto lista moich przeróbek:

1. Anti elfbot debug system
2. Osobne naliczanie fragów dla każdej postaci od początku gry
3. Rangi zależne od ilości fragów zdobytych w sumie w grze
4. System happy hour w którym podwaja się mnożnik expa zależny od stage'a gracza kiedy gra miedzy godzina 19 a 20
5. Możliwość bicia z dwóch broni naraz tylko dla knighta.

Proszę o wyrażanie swoich opinii na temat tych modyfikacji :)

O właśnie silnik to tfs 0.3.4pl2
Pozdrawiam
legolas23
 
Mysle, ze jezeli kod jest dobrze napisany to nie powinien powodowac bledow/utrudniac rozgrywki... Wiec zadaj sobie pytania, czy wszystko poprawnie jest zrobione, zoptymalizowane.
 
A dlaczego zmiany maja powodowac utrate stabilnosci? Jesli napiszesz to kiepsko to beda problemy, jesli zabezpieczysz sie na wszelkie mozliwosci to bedzie ok :)

Swoja droga - czesc tych feature'ow mozna wykonac bez modyfikacji zrodel silnika, a w lua.
 
W zasadzie jedyna rzeczą której się boje jest system double expa. Bo niezbyt mam pomysł jak to zrobić i gdzie ;p Może jakaś porada?

@KaczooH
Które są wykonywalne w lua?
 
Moze setPlayerExtraExpRate(cid, value)?

W lua mozesz zrobic 2, 3, 4. Pierwsze jest typowo silnikowe, ostatnie takze.
 
A 2-gie w jaki sposób? Modyfikacja kill.lua?

Druga sprawa ,jak pobrać exp rate playera? Czy istnieje taka funkcja?
 
Last edited:
Tak, funkcja onKill i zapisujesz fragi w storage. Mniej więcej coś takiego.
Code:
function onKill(cid, target, lastHit)
	if(not isPlayer(target)) then
		return true
	end
	
	if(not lastHit) then
		return true
	end
	
	local storage = getPlayerStorageValue(cid, 6969)
	if(storage == -1) then
		storage = 0
	end
	
	setPlayerStorageValue(cid, 6969, (storage + 1))
	return true
end
 
Ok napisalem skrypt na godzinkę doble expa ,jednak nie wiem czy jeżeli gracz wyloguje jego mnożnik niezostanie podwójny. Jak zrobić żeby przy dedzie loginie lub innym typie disconecta z serwerem exp powracał do normy?

Rep++ za skrypcik Piotrek
;)

Oto skrypt
Code:
----Event by legolas23-------

function onThink(interval, lastExecution)
    local players = getPlayersOnline()
    local list = {}
    for i, tid in ipairs(players) do
    list[i] = tid
end
addEvent(odlicz, 1*60*1000)
addEvent(sprawdz, 5*60*1000)
doBroadcastMessage('Event double expa rozpoczety! Przez godzine bedziecie dostawac doswiadczenie podwojnie!') 
addEvent(sprawdz, 10*60*1000)
addEvent(sprawdz, 10*60*1000)
addEvent(sprawdz, 10*60*1000)
addEvent(sprawdz, 10*60*1000)
addEvent(sprawdz, 10*60*1000)
addEvent(zakoncz, 5*60*1000)
addEvent(expik, 1*1000)

return TRUE
end
---------------funkcje---------------
function odlicz()
doBroadcastMessage('Za 5 miut rozpoczyna sie double exp event!')
end
function zakoncz()
doBroadcastMessage('Za 5 miut konczy sie double exp event!') 
end
function sprawdz()
for i, tid in ipairs(players) do
if (getPlayerLevel(cid) => 100)
doPlayerSetExperienceRate(cid, 50)
elseif (getPlayerLevel(cid) => 200)
doPlayerSetExperienceRate(cid, 20)
else
doPlayerSetExperienceRate(cid, 200)
end
onDeath()
doPlayerSetExperienceRate(cid, norm exp)
return true
end
onLogout()
doPlayerSetExperienceRate(cid, norm exp)
end
end


function expik()
doBroadcastMessage('Koniec double exp eventu!')
for i, tid in ipairs(players) do
if (getPlayerLevel(cid) => 100)
doPlayerSetExperienceRate(cid, 25)
elseif (getPlayerLevel(cid) => 200)
doPlayerSetExperienceRate(cid, 10)
else
doPlayerSetExperienceRate(cid, 100)
end
onDeath()
doPlayerSetExperienceRate(cid, norm exp)
return true
end
onLogout()
doPlayerSetExperienceRate(cid, norm exp)
end
end

Poprawione :)
 
Last edited:
onDeath()
doPlayerSetExperienceRate(cid, norm exp)
return true
end

onLogout()
doPlayerSetExperienceRate(cid, norm exp)
end
 
Back
Top