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

Nowy Condition

Hindori

New Member
Joined
Jan 24, 2009
Messages
157
Reaction score
2
Siema!
Przechodzą od razu do rzeczy, potrzebuje nowego conditiona. Co on ma robić? Otóż ma zmniejszać prędkość do zera tak jak mocna paraliżka ,a także użyty na monstrze blokować używanie czarów. W ostateczności zamiast blokowania może nadawać storage value dla celu i jak się skończy to jest usuwać. Przydało by się także by tak jak w condition_poison itp dało się ustawić efekt i co ile ma się on pojawiać. Ktoś podoła?

TFS 0.3.6pl1 (tibia 8.54)
 
doCreatureSetNoMove(cid, cannotMove) + Exhaust ?

O ile dobrze pamiętam nie działa na target.
 
no i co mi to da? Ja potrzebuje calego conditiona... Spell obszar i co? nic tym nie zrobie
 
Jeśli byś chciał to mógł byś z tym zrobić bardzo wiele. Wątpię aby ktoś z PB pomógł. Pomyśl jeszcze nad moją propozycją.
 
No ale co ja moge zrobić z tym jeśli chce spell obszarowy? Mając conditiona zajmowalo by mi to 3 linijki a tak to tylko niepotrzebne zawalanie skryptu.
 
Racja niepotrzebne zawalanie skryptu, z tą różnica że możesz osiągnąć zamierzony cel ale możesz też czekać na pomoc tylko że tak na prawdę nikogo tu nie obchodzi to że nie umiesz. Może znajdzie się parę osób które nakierują Cie na właściwy tor powiedzą jak powinieneś to zrobić ale na pewno nie zrobią tego za Ciebie.

Jest jeszcze jedno wyjście chyba najlepsze dla wszystkich, abyś sam nauczył się wszystkiego co potrzebne do stworzenia nowego conditiona oraz aby spełniał on Twoje wymagania.

62 lajki, bez przesady ;]

Pozdrawiam
Kurczok
 
Hehe na pewno nie ja. Nie jestem na tyle fajny aby sobie dawać lajki ;D
 
Na karamy robiłem dodatkowe condition bo tam 0.2 i hujnia była.

Zrobie w założeniu o ten silnik, jak potem sam sobie nie ogarniesz to widocznie jesteś noobem i daleko nie zajdziesz xd

1. W condition.cpp powinieneś mieć coś takiego:
Code:
Condition* Condition::createCondition(ConditionId_t _id, ConditionType_t _type, int32_t _ticks, int32_t param)
{
	switch((int32_t)_type)
	{
		case CONDITION_POISON:
		case CONDITION_FIRE:
		case CONDITION_ENERGY:
..

Wpakuje gdzieś między te cast takie coś
Code:
		case CONDITION_NOWA:
powinno wyglądać gdzies tak
Code:
		case CONDITION_POISON:
		case CONDITION_FIRE:
		case CONDITION_NOWA:
		case CONDITION_ENERGY:


Potem w condition.h szukasz sobie
Code:
enum ConditionType_t {

Wazna jest ostatnia wartosc ja mam:
Code:
enum ConditionType_t
{
	CONDITION_NONE			= 0,
	CONDITION_POISON		= 1,
	CONDITION_FIRE			= 2,
	CONDITION_ENERGY		= 4,
	CONDITION_LIFEDRAIN		= 8,
	CONDITION_HASTE			= 16,
	CONDITION_PARALYZE		= 32,
	CONDITION_OUTFIT		= 64,
	CONDITION_INVISIBLE		= 128,
	CONDITION_LIGHT			= 256,
	CONDITION_MANASHIELD		= 512,
	CONDITION_INFIGHT		= 1024,
	CONDITION_DRUNK			= 2048,
	CONDITION_EXHAUST_WEAPON	= 4096,
	CONDITION_REGENERATION		= 8192,
	CONDITION_SOUL          	= 16384,
	CONDITION_DROWN         	= 32768,
	CONDITION_MUTED         	= 65536,
	CONDITION_TRADETICKS		= 131072,
	CONDITION_YELLTICKS		= 262144,
	CONDITION_ATTRIBUTES		= 524288,
	CONDITION_FREEZING		= 1048576,
	CONDITION_DAZZLED		= 2097152,
	CONDITION_CURSED		= 4194304,
	CONDITION_EXHAUST_COMBAT	= 8388608,
	CONDITION_EXHAUST_HEAL		= 16777216,
	CONDITION_PACIFIED		= 33554432
};

czyli ostatnia to
Code:
	CONDITION_PACIFIED		= 33554432
no wiec now wartosc bedzie miala 2 x wieksza wartosc czyli
Code:
	CONDITION_NOWA		= 67108864

Powinno to wyglądac mniej wiecej tak
Code:
	CONDITION_EXHAUST_COMBAT	= 8388608,
	CONDITION_EXHAUST_HEAL		= 16777216,
	CONDITION_PACIFIED		= 33554432,
	CONDITION_NOWA		= 67108864
};

No prawie gotowe. Jeszcze w libach (np global.lua) dodaj sobie tam gdzie masz conditions
Code:
CONDITION_NOWA = 67108864

Gotowe, powinno działać.
Piane na szybko ;d
 
No wiesz takiego zwykłego conditiona to ja umiem dodać lecz niestety nie jarze jak zrobić by dzięki niemu blokowane było używanie spelli czy też dodanie storage value.
 
Tak jak napisał:
doCreatureSetNoMove(cid, cannotMove) + Exhaust ?

O ile dobrze pamiętam nie działa na target.

Po co Ci condition o_O
No wiesz takiego zwykłego conditiona to ja umiem dodać lecz niestety nie jarze jak zrobić by dzięki niemu blokowane było używanie spelli czy też dodanie storage value.

Po co babrać się w source o_O

Lua:
function onTargetTitle(cid, pos)
	--- tutaj ustaw sobie, paraliżowanie... oraz exhaust i storage value jeśli ci się chce, to oczywiście linijki przed samym wywołaniem spella
	--- chyba mając pozycję potrafisz pobrać gracza? jeśli nie to niepotrzebnie się produkuje...
end
setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTitle")

Przypominam, że jeśli spell ma pewien obszar to w/w funkcja onTargetTitle wykona się oddzielnie dla każdej kratki, a zmienna cid to zmienna gracza wywołującego spell.

PS: Przy użyciu funkcji doCreatureSetNoMove można zrobić genialny stun system, widziałem go kiedyś na jakimś niemieckim forum.

#EDIT#
Jeśli teraz sobie nie poradzi, to naprawdę możecie się z niego już śmiać xD
 
No to się śmiej ale skoro pytam to chyba nie wiem?...

Napisałem tak:
Lua:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_POISONDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 76)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1)

area = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 2, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
}

local area1 = createCombatArea(area)
setCombatArea(combat, area1)

function onTargetTitle(cid, pos)
doCreatureSetNoMove(pos, true)
addEvent(doCreatureSetNoMove, 5000, pos, false) 
end
setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTitle")

function onCastSpell(cid, var)
	doCreatureSay(cid, "Sleep Powder!", TALKTYPE_MONSTER)
	doCombat(cid, combat, var)
end

Niestety nie umiem pobrac tego gracza z obszaru. Jeśli chodzi o spell w cel to problemu nie mam tylko przy obszarze nie wiem jak pobrać tą pozycje żeby użyło to tylko tam gdzie sa monstry.
 
Sprawdź każdy sqm na którym wykonywał się będzie skrypt/czar jeśli jest tam gracz to wykonaj dane funkcje jeśli nie to utwórz efekt i tyle.

@hellboy

Wiesz może czy doCreatureSetNoMove działa już na target, ponieważ kiedyś testowałem i nie działała.
 
A jak mam to sprawdzić? Bo za bardzo nie wiem :S Jestem raczej zielony w pisaniu bardziej złożonych spelli.

@Kurczok Na target nie wywala błędu ale nie działa.
 
Sprawdź każdy sqm na którym wykonywał się będzie skrypt/czar jeśli jest tam gracz to wykonaj dane funkcje jeśli nie to utwórz efekt i tyle.

@hellboy

Wiesz może czy doCreatureSetNoMove działa już na target, ponieważ kiedyś testowałem i nie działała.

Kiedyś (za czasów gdy siedziałem na TFSie 0.3) działał na graczy, nie ważne, czy to cid, czy pobrany target z ziemi. Dzięki temu był w końcu możliwy stun system o którym wspominałem.

doCreatureSetNoMove(cid, true/false) lub doCreatureSetNoMove(cid, 1/0)
 
Last edited:
PHP:
addEvent(doCreatureSetNoMove, 5000, pos, false)
To nie zadziała, ja bym spróbował tak:​
PHP:
addEvent(doCreatureSetNoMove, 5000, getTopCreature(pos).uid, false)
I chyba jeszcze przed tym sprawdzić czy jest jakiś potwór na tej kratce.​
 
Pobierz pozycje Cid następnie zrób pętle która będzie sprawdzała sqm koło Ciebie czyli twojapozycja.x+1 itd następnie sprawdzasz czy jest ktoś na tej pozycji wykonujesz co ma się wykonać i przechodzisz dalej do sprawdzania.

Na pewno można to zrobić dużo prościej ale nie chce mi się kombinować.
 
Pobierz pozycje Cid następnie zrób pętle która będzie sprawdzała sqm koło Ciebie czyli twojapozycja.x+1 itd następnie sprawdzasz czy jest ktoś na tej pozycji wykonujesz co ma się wykonać i przechodzisz dalej do sprawdzania.

Na pewno można to zrobić dużo prościej ale nie chce mi się kombinować.

Nie po to się produkowałem, żeby coś takiego teraz przeczytać :/

Masz tutaj przeróbkę spella eternal_winter.lua z OTServa, bo aż mnie nosi jak widzę co tutaj radzą... Pod TFS spelle wyglądają podobnie, jeśli nie tak samo.

Lua:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ICETORNADO)

function onGetFormulaValues(cid, level, maglevel)
	local min = ((level/5)+(maglevel*6))
	local max = ((level/5)+(maglevel*12))
	return -min, -max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local area = createCombatArea(AREA_CROSS5X5)
setCombatArea(combat, area)

function onTargetTitle(cid, pos)
	local topItem = getThingfromPos({x = pos.x, y = pos.y, z = pos.z, stackpos = STACKPOS_TOP_MOVABLE_ITEM_OR_CREATURE})
	if isPlayer(topItem.uid) then
		doCreatureSetNoMove(topItem.uid, true)
	end
end
setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTitle")

function onCastSpell(cid, var)
	return doCombat(cid, combat, var)
end


#EDIT#
Łap ten link do stun systemu
http://open-tibia.de/index.php?page=Thread&postID=47&highlight=stun+system#post47
 
Last edited:
Back
Top