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

Podpowiedz

cyna

New Member
Joined
Feb 7, 2009
Messages
236
Reaction score
2
Elo.

1.
Mam ogólnie 2 pytania do Was. Na niektórych serwerach jest takie coś, że kiedy stanie się na kratkę to wypycha z niej w inne miejsce, jak można zrobić coś takiego? Bo czasem jak loguje dużo graczy na raz to wyskakują debugi.

2.
Możecie podpowiedzieć jak zrobić, żeby na wybranym obszarze nie można było używać czarów typu UE?
 
1. Skrypt typu onLogin, jeśli gracz loguje się na danej kratce, skrypt zlicza ilość osób na niej i jeśli stoi tam więcej niż X osób to gracz jest pushowany na dowolne wolne miejsce obok. Jednak lepszą opcją będzie ogarnięcie jakiegoś nowszego reva na którym ten bug nie występuje.
2. Poprzez storage, przy wejściu na dany obszar gracz dostaje storage DISABLE_UE (najlepiej dodać tego consta w libach), a po padnięciu/opuszczeniu go storage się kasuje.
A w spellach ustawiasz (nie testowałem, ale powinno działać):
Code:
function onCastSpell(cid, var)
	if (getPlayerStorageValue(cid, DISABLE_UE) > 0) then
		return false
	else
		return doCombat(cid, combat, var)
	end
end
 
1. Skrypt typu onLogin, jeśli gracz loguje się na danej kratce, skrypt zlicza ilość osób na niej i jeśli stoi tam więcej niż X osób to gracz jest pushowany na dowolne wolne miejsce obok. Jednak lepszą opcją będzie ogarnięcie jakiegoś nowszego reva na którym ten bug nie występuje.
2. Poprzez storage, przy wejściu na dany obszar gracz dostaje storage DISABLE_UE (najlepiej dodać tego consta w libach), a po padnięciu/opuszczeniu go storage się kasuje.
A w spellach ustawiasz (nie testowałem, ale powinno działać):
Code:
function onCastSpell(cid, var)
	if (getPlayerStorageValue(cid, DISABLE_UE) > 0) then
		return false
	else
		return doCombat(cid, combat, var)
	end
end

nie trzeba na storage, można tak samo sprawdzić czy gracz znajduje się na pozycji należącej do obszaru jakiegoś ;p
 
nie trzeba na storage, można tak samo sprawdzić czy gracz znajduje się na pozycji należącej do obszaru jakiegoś ;p
Jak kto woli, jednak jeśli doda się więcej obszarów bez UE, to albo trzeba je dawać obok siebie, albo dopisywać coraz więcej warunków (i to do każdego skryptu osobno), a poza tym używając storage można zablokować możliwość używania UE w każdej chwili.

@down
Zapomniałem, że można użyć funkcji ;p
 
Last edited:
Jak kto woli, jednak jeśli doda się więcej obszarów bez UE, to albo trzeba je dawać obok siebie, albo dopisywać coraz więcej warunków (i to do każdego skryptu osobno), a poza tym używając storage można zablokować możliwość używania UE w każdej chwili.

lol co ty pierdzielisz

robisz sobie lokalne obszary, a potem prostą funkcję sprawdzająca czy gracz znajduje się wewnątrz jakiegoś obszaru, a jeśli dasz storage, to potem jak gracz wyjdzie z obszaru to co? btw lepiej jest zapisać w localu pare obszarów niż na mapie dawać miliony actionid, że się wchodzi na teren bez ue
 
A jeszcze lepiej wejdź w source / spells.cpp i znajdź:

Code:
bool Spell::checkSpell(Player* player) const

I pod tym dodaj:
Code:
const Position& pos = player->getPosition();
	if (pos.x >= POZYCJAODX && pos.x <= POZYCJADOX && pos.y >= POZYCJAODY && pos.y <= POZYCJADOY && pos.z == POZYCJAZ)
	{
		player->sendCancelMessage(RET_NOTPOSSIBLE);
		g_game.addMagicEffect(pos, MAGIC_EFFECT_POFF);
		return false;
	}

Aaa ty chciałeś na UE fuck, mniejsza... może sie to komuś przyda na wszystkie czary/runy xd




Edit:

Jak ma być na obszar dla ue to podmień końcówke swojego skryptu UE, czyli to co mówił semi.
Code:
function onCastSpell(cid, var)
if isInRange(getCreaturePosition(cid), {x = odx, y = ody, z = odz}, {x = dox, y = doy, z = doz}) then
doCreatureSay(cid, "Nie mozesz uzyc tutaj UE, bo uzywasz skrypta potara yo.", TALKTYPE_ORANGE_1) return false
end
	return doCombat(cid, combat, var)
end
 
Back
Top