Reklama
Strona 1 z 2 12 OstatniaOstatnia
Pokazuje wyniki od 1 do 15 z 17

Temat: [8.42/8.5+][C++] doPlayerAddExhaust

  1. #1
    Avatar Grim90
    Data rejestracji
    2007
    Położenie
    Toruń / Brzozówka
    Wiek
    34
    Posty
    586
    Siła reputacji
    17

    Domyślny [8.42/8.5+][C++] doPlayerAddExhaust

    Jak wiemy, exhausted jest bardzo ważną rzeczą na OTS.
    Cóż, funkcja dająca exhausted była mi bardzo potrzebna, więc ją sobie napisałem i postanowiłem się nią podzielić.

    Jest ona bardzo prosta:

    luascript.cpp
    Szukamy:
    Kod:
    	//doPlayerAddSkillTry(cid, skillid, n)
    	lua_register(m_luaState, "doPlayerAddSkillTry", LuaScriptInterface::luaDoPlayerAddSkillTry);
    Pod tym dodajemy:
    Kod:
    	//doPlayerAddExhaust(cid, exhaust)
    	lua_register(m_luaState, "doPlayerAddExhaust", LuaScriptInterface::luaDoPlayerAddExhaust);
    Szukamy:
    Kod:
    int32_t LuaScriptInterface::luaDoPlayerAddSkillTry(lua_State* L)
    Pod tym dodajemy (jako nową funkcję):
    Kod:
    int32_t LuaScriptInterface::luaDoPlayerAddExhaust(lua_State* L)
    {
    	//doPlayerAddExhaust(uid, type, exhaust)
    	uint32_t exhaust = popNumber(L), type = popNumber(L);
    
    	ScriptEnviroment* env = getScriptEnv();
    	if(Player* player = env->getPlayerByUID(popNumber(L)))
    	{
    		player->addExhaust(exhaust, type);
    		lua_pushboolean(L, LUA_NO_ERROR);
    	}
    	else
    	{
    		reportErrorFunc(getErrorDesc(LUA_ERROR_PLAYER_NOT_FOUND));
    		lua_pushboolean(L, LUA_ERROR);
    	}
    	return 1;
    }
    luascript.h
    Szukamy:
    Kod:
    static int32_t luaDoPlayerAddSkillTry(lua_State* L);
    Pod tym dodajemy:
    Kod:
    static int32_t luaDoPlayerAddExhaust(lua_State* L);
    Testowane na TFS 0.3 pod 8.42.

    Używamy pisząc:
    doPlayerAddExhaust(uid, A, B)
    Gdzie:
    uid - gracz docelowy
    A - rodzaj exhausted:
    1 - na czary agresywne
    2 - na czary nieagresywne
    itd.
    B - czas, długość exhausted
    Piszę skrypty do OTS. Chcesz mieć unikalny quest, lub skrypt na swoim serwerze? Pisz do mnie. Na pewno się dogadamy.
    Piszę skrypty PHP, strony oraz gotowe serwisy, jeśli jesteś zainteresowany, napisz.
    http://radeg.pl

    Masz facebooka? Zapraszamy do grupy: Grim OTS!
    http://www.facebook.com/?ref=logo#!/...07707075989449

  2. #2
    Avatar Killavus
    Data rejestracji
    2005
    Położenie
    Wrocław
    Wiek
    32
    Posty
    915
    Siła reputacji
    19

    Domyślny

    A przypadkiem exhausted nie jest jednym z conditionów i nie jest dodawane przez doPlayerAddCondition? Przynajmniej za czasów jak interesowałem się OTSami najnowsze OTSy tak właśnie miały to rozwiązane...

    Pozdrawiam
    Killavus

  3. Reklama
  4. #3

    Data rejestracji
    2006
    Posty
    27
    Siła reputacji
    0

    Domyślny

    Zgadza się Killa, exhausted obsługiwane jest przez conditions, więc ten kod to tylko niepotrzebny zapychacz silnika
    Ostatnio zmieniony przez Tairens : 13-12-2009, 14:17

  5. #4
    Avatar Grim90
    Data rejestracji
    2007
    Położenie
    Toruń / Brzozówka
    Wiek
    34
    Posty
    586
    Siła reputacji
    17

    Domyślny

    Cytuj Killavus napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    A przypadkiem exhausted nie jest jednym z conditionów i nie jest dodawane przez doPlayerAddCondition? Przynajmniej za czasów jak interesowałem się OTSami najnowsze OTSy tak właśnie miały to rozwiązane...

    Pozdrawiam
    Killavus
    Cytuj Tairens napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Zgadza się Killa, exhausted obsługiwane jest przez conditions, więc ten kod to tylko niepotrzebny zapychacz silnika
    Owszem, z tym, że zastosowałem prosty skrypt z pętlą, gdzie w zasięgu gracza pobierał wszystkie jednostki (graczy) i dawał im exhausted - nie zadziałało. Hadorek osobiście widział, bo testowałem ten czar dla niego. Dla testu wywaliłem z pętli i dałem tylko cidowi - zadziałało. To sprawdziłem, czy prawidłowo pobiera istoty - prawidłowo (ustawiłem, żeby cidowi wyświetlał getCreatureName, jeśli trafi na gracza). W związku z tym condition po prostu jest jakiś zepsuty w pętli...

    Natomiast, gdy zastosowałem moją funkcję - zadziałało przy pętli.

    Oto dwa przykłady:

    Kod:
    local condition = createConditionObject(CONDITION_EXHAUST)
    setConditionParam(condition, CONDITION_PARAM_TICKS, 50000)
    
    function onSay(cid, words, param, channel)
    	local xx
    	local yy
    	
    	for xx = getCreaturePos(cid).x - 4, getCreaturePos(cid).x + 4 do
    		for yy = getCreaturePos(cid).y - 4, getCreaturePos(cid).y + 4 do
    			local poss = {x = xx, y = yy, z = getCreaturePos(cid).z, stackpos = 253}
    			local gracz = getThingFromPos(poss)
    			doSendMagicEffect(poss,1)
    			if isPlayer(gracz.uid) then
    				doSendMagicEffect(poss,3)
    				doPlayerSendTextMessage(cid,22,getCreatureName(gracz.uid))
    				doAddCondition(gracz.uid,condition)
    			end
    		end
    	end
    end
    Kod:
    function onSay(cid, words, param, channel)
    	local xx
    	local yy
    	
    	for xx = getCreaturePos(cid).x - 4, getCreaturePos(cid).x + 4 do
    		for yy = getCreaturePos(cid).y - 4, getCreaturePos(cid).y + 4 do
    			local poss = {x = xx, y = yy, z = getCreaturePos(cid).z, stackpos = 253}
    			local gracz = getThingFromPos(poss)
    			doSendMagicEffect(poss,1)
    			if isPlayer(gracz.uid) then
    				doSendMagicEffect(poss,3)
    				doPlayerSendTextMessage(cid,22,getCreatureName(gracz.uid))
    				doPlayerAddExhaust(gracz.uid, 1, 15000)
    			end
    		end
    	end
    end
    Ostatnio zmieniony przez Grim90 : 13-12-2009, 15:38
    Piszę skrypty do OTS. Chcesz mieć unikalny quest, lub skrypt na swoim serwerze? Pisz do mnie. Na pewno się dogadamy.
    Piszę skrypty PHP, strony oraz gotowe serwisy, jeśli jesteś zainteresowany, napisz.
    http://radeg.pl

    Masz facebooka? Zapraszamy do grupy: Grim OTS!
    http://www.facebook.com/?ref=logo#!/...07707075989449

  6. #5
    Avatar Killavus
    Data rejestracji
    2005
    Położenie
    Wrocław
    Wiek
    32
    Posty
    915
    Siła reputacji
    19

    Domyślny

    Nie jest przypadkiem tak, że w momencie nałożenia conditiona obiekt ten nie jest na 'twardo' łączony z danym UID?

    Pozdrawiam
    Killavus

  7. #6
    Avatar Grim90
    Data rejestracji
    2007
    Położenie
    Toruń / Brzozówka
    Wiek
    34
    Posty
    586
    Siła reputacji
    17

    Domyślny

    Cytuj Killavus napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Nie jest przypadkiem tak, że w momencie nałożenia conditiona obiekt ten nie jest na 'twardo' łączony z danym UID?

    Pozdrawiam
    Killavus
    Czyli musiałbym zastosować 16 conditionów?
    Piszę skrypty do OTS. Chcesz mieć unikalny quest, lub skrypt na swoim serwerze? Pisz do mnie. Na pewno się dogadamy.
    Piszę skrypty PHP, strony oraz gotowe serwisy, jeśli jesteś zainteresowany, napisz.
    http://radeg.pl

    Masz facebooka? Zapraszamy do grupy: Grim OTS!
    http://www.facebook.com/?ref=logo#!/...07707075989449

  8. #7
    Avatar Zloom
    Data rejestracji
    2005
    Położenie
    Kraków
    Posty
    171
    Siła reputacji
    19

    Domyślny

    Mmmmm...
    Kod:
    exhaustion.set(cid, storage, czas)
    Kod:
    exhaustion.check(cid, storage)
    w 0.3.4pl2 wystarczy zlinkować to w data.lua (w nowszych tfs'ach jest już domyślnie włączone)
    Kod:
    dofile(getDataDir() .. "lib/exhaustion.lua")
    Ostatnio zmieniony przez Zloom : 13-12-2009, 16:13

  9. #8
    Avatar Grim90
    Data rejestracji
    2007
    Położenie
    Toruń / Brzozówka
    Wiek
    34
    Posty
    586
    Siła reputacji
    17

    Domyślny

    Cytuj Zloom napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Mmmmm...
    Kod:
    exhaustion.set(cid, storage, czas)
    Kod:
    exhaustion.check(cid, storage)
    w 0.3.4pl2 wystarczy zlinkować to w data.lua (w nowszych tfs'ach jest już domyślnie włączone)
    Kod:
    dofile(getDataDir() .. "lib/exhaustion.lua")
    To jest 'własny' exhausted na cokolwiek, co zechcesz. Nie można go połączyć z czarami, potionami itd. No, chyba, że im też dasz ten zamiast domyślnego.

    #edit
    Cytuj Elf napisał
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Nah, conditions are possible just on load, that's why this has own use. Anyway, I've made possible to use conditions runtime, not just on load :P Check out 0.4
    Ostatnio zmieniony przez Grim90 : 13-12-2009, 18:35
    Piszę skrypty do OTS. Chcesz mieć unikalny quest, lub skrypt na swoim serwerze? Pisz do mnie. Na pewno się dogadamy.
    Piszę skrypty PHP, strony oraz gotowe serwisy, jeśli jesteś zainteresowany, napisz.
    http://radeg.pl

    Masz facebooka? Zapraszamy do grupy: Grim OTS!
    http://www.facebook.com/?ref=logo#!/...07707075989449

  10. #9
    Blady3D

    Domyślny

    Condition można nadać jednej istocie, graczowi, jak chcesz objąć X graczy, musisz dać X conditionów, a to jest strata wydajności. Ta funkcja to ułatwia, mogżna dać jedną, która może objąć wszystkich graczy na serwerze. Przyda się.

    Thx Radeg again :D
    Ostatnio zmieniony przez Blady3D : 14-12-2009, 16:11

  11. #10
    Avatar Grim90
    Data rejestracji
    2007
    Położenie
    Toruń / Brzozówka
    Wiek
    34
    Posty
    586
    Siła reputacji
    17

    Domyślny

    Cytuj Blady3D napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Condition można nadać jednej istocie, graczowi, jak chcesz objąć X graczy, musisz dać X conditionów, a to jest strata wydajności. Ta funkcja to ułatwia, mogżna dać jedną, która może objąć wszystkich graczy na serwerze. Przyda się.

    Thx Radeg again :D
    Pragę dodać, że to nie tylko strata wydajności, ale i bezsensowna strata miejsca w skrypcie. Kto by wolał pisać 50 conditionów dla 50 osób, skoro można wrzucić ten kod i dać po prostu w pętli.
    A i dziękuję za pozytywny komentarz kogoś, kto coś wie na ten temat, a nie na przykład:

    Cytuj Tairens napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Zgadza się Killa, exhausted obsługiwane jest przez conditions, więc ten kod to tylko niepotrzebny zapychacz silnika
    Chyba już się sprzeczamy po raz drugi i znów wyszedłeś na buraka, co?
    Ostatnio zmieniony przez Grim90 : 14-12-2009, 16:30
    Piszę skrypty do OTS. Chcesz mieć unikalny quest, lub skrypt na swoim serwerze? Pisz do mnie. Na pewno się dogadamy.
    Piszę skrypty PHP, strony oraz gotowe serwisy, jeśli jesteś zainteresowany, napisz.
    http://radeg.pl

    Masz facebooka? Zapraszamy do grupy: Grim OTS!
    http://www.facebook.com/?ref=logo#!/...07707075989449

  12. #11

    Data rejestracji
    2006
    Posty
    27
    Siła reputacji
    0

    Domyślny

    Burakiem nadal jesteś Ty, tworząc bzdurne funkcje i próbując ukazać jakiego to nie masz skilla w c++.

  13. #12
    Avatar Grim90
    Data rejestracji
    2007
    Położenie
    Toruń / Brzozówka
    Wiek
    34
    Posty
    586
    Siła reputacji
    17

    Domyślny

    Cytuj Tairens napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Burakiem nadal jesteś Ty, tworząc bzdurne funkcje i próbując ukazać jakiego to nie masz skilla w c++.
    No, ciekawe masz argumenty...
    Jeśli dla ciebie prosty luascript jest pokazaniem skilla to już widzę twój poziom wiedzy.
    Ostatnio zmieniony przez Grim90 : 14-12-2009, 17:14
    Piszę skrypty do OTS. Chcesz mieć unikalny quest, lub skrypt na swoim serwerze? Pisz do mnie. Na pewno się dogadamy.
    Piszę skrypty PHP, strony oraz gotowe serwisy, jeśli jesteś zainteresowany, napisz.
    http://radeg.pl

    Masz facebooka? Zapraszamy do grupy: Grim OTS!
    http://www.facebook.com/?ref=logo#!/...07707075989449

  14. #13
    Avatar Killavus
    Data rejestracji
    2005
    Położenie
    Wrocław
    Wiek
    32
    Posty
    915
    Siła reputacji
    19

    Domyślny

    Cytuj Grim90 napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Pragę dodać, że to nie tylko strata wydajności, ale i bezsensowna strata miejsca w skrypcie. Kto by wolał pisać 50 conditionów dla 50 osób, skoro można wrzucić ten kod i dać po prostu w pętli.
    A i dziękuję za pozytywny komentarz kogoś, kto coś wie na ten temat, a nie na przykład:
    Tak swoją drogą, to nie żadna strata wydajności - bądź co bądź i tak obiekt Condition jest tworzony przy dodawaniu exhausted, tylko niejawnie - wewnątrz implementacji funkcji addExhaust. Więc argument o zwiększeniu wydajności jest co najmniej dyskusyjny - Lua jest bardzo szybkim językiem (jak na języki interpretowane), a tworzenie obiektów jawnie nie jest wcale takie powolne... Zresztą, cóż to za strata miejsca w skrypcie - skoro już używasz pętli, dlaczego nie możesz użyć tablicy, bądź lepiej - tworzyć chwilowe obiekty Condition i łączyć je z aktualnym 'celem'?

    Stąd też naskoczenie na Tairensa, a raczej jego cel jest... hm, bezcelowe i niepoparte żadnymi racjonalnymi argumentami?

    Pozdrawiam
    Killavus

  15. #14
    Avatar Grim90
    Data rejestracji
    2007
    Położenie
    Toruń / Brzozówka
    Wiek
    34
    Posty
    586
    Siła reputacji
    17

    Domyślny

    Cytuj Killavus napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Tak swoją drogą, to nie żadna strata wydajności - bądź co bądź i tak obiekt Condition jest tworzony przy dodawaniu exhausted, tylko niejawnie - wewnątrz implementacji funkcji addExhaust. Więc argument o zwiększeniu wydajności jest co najmniej dyskusyjny - Lua jest bardzo szybkim językiem (jak na języki interpretowane), a tworzenie obiektów jawnie nie jest wcale takie powolne... Zresztą, cóż to za strata miejsca w skrypcie - skoro już używasz pętli, dlaczego nie możesz użyć tablicy, bądź lepiej - tworzyć chwilowe obiekty Condition i łączyć je z aktualnym 'celem'?

    Stąd też naskoczenie na Tairensa, a raczej jego cel jest... hm, bezcelowe i niepoparte żadnymi racjonalnymi argumentami?

    Pozdrawiam
    Killavus
    Co do wydajności - nie będę się kłócił, zapewne masz rację.
    Oczywiście, że można wrzucić pięknie w tablicę i za pomocą pętli wszystko ciachnąć.

    Co do condition: nie można wrzucić condition do środka skryptu. Musi on być PRZED nim. Dokładnie pojawia się taki błąd:
    Cytuj Serwer napisał
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Lua Script Error: [TalkAction Interface]
    data/talkactions/scripts/test.lua:onSay

    luaCreateConditionObject(). This function can only be used while loading the script.

    Lua Script Error: [TalkAction Interface]
    data/talkactions/scripts/test.lua:onSay

    luaSetConditionParam(). This function can only be used while loading the script.
    Zatem muszę twardo podać, ile conditionów ma być, oraz podać ich atrybuty. Przykładowo, jeśli nie wiem, ile będę musiał ich użyć, to co wtedy zrobić? Ja u siebie znalazłem rozwiązanie i użyłem luascriptu, który jest elastyczniejszy.
    Ostatnio zmieniony przez Grim90 : 14-12-2009, 17:52
    Piszę skrypty do OTS. Chcesz mieć unikalny quest, lub skrypt na swoim serwerze? Pisz do mnie. Na pewno się dogadamy.
    Piszę skrypty PHP, strony oraz gotowe serwisy, jeśli jesteś zainteresowany, napisz.
    http://radeg.pl

    Masz facebooka? Zapraszamy do grupy: Grim OTS!
    http://www.facebook.com/?ref=logo#!/...07707075989449

  16. #15
    Avatar Killavus
    Data rejestracji
    2005
    Położenie
    Wrocław
    Wiek
    32
    Posty
    915
    Siła reputacji
    19

    Domyślny

    Cytuj Grim90 napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Co do wydajności - nie będę się kłócił, zapewne masz rację.
    Oczywiście, że można wrzucić pięknie w tablicę i za pomocą pętli wszystko ciachnąć.

    Co do condition: nie można wrzucić condition do środka skryptu. Musi on być PRZED nim. Dokładnie pojawia się taki błąd:


    Zatem muszę twardo podać, ile conditionów ma być, oraz podać ich atrybuty. Przykładowo, jeśli nie wiem, ile będę musiał ich użyć, to co wtedy zrobić? Ja u siebie znalazłem rozwiązanie i użyłem luascriptu, który jest elastyczniejszy.
    Ja bym po prostu zainicjalizował tyle conditionów ile mi maksymalnie potrzebne - chyba nie jest trudno policzyć?

    Swoją drogą, chyba ograniczenie tworzenia obiektów condition do etapu ładowania skryptu do czegoś służyło, więc obchodzenie tego w ten sposób może prowadzić do niebezpieczeństwa niestabilności (zapewne).

    Pozdrawiam
    Killavus
    Ostatnio zmieniony przez Killavus : 14-12-2009, 18:51

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •