Reklama
Pokazuje wyniki od 1 do 11 z 11

Temat: [8.42/8.5][C++] Efekt oraz napis po założeniu/zdjęciu przedmiotu

  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++] Efekt oraz napis po założeniu/zdjęciu przedmiotu

    Prosty ale i ciekawy kodzik :)
    Pisałem w TFS 0.3. Zaczynajmy!

    items.cpp
    Szukamy:
    Kod:
    else if(tmpStrValue == "name")
    {
    	if(readXMLString(itemAttributesNode, "value", strValue))
    		it.name = strValue;
    }
    Pod spodem dodajemy:
    Kod:
    else if(tmpStrValue == "weartext")
    {
    	if(readXMLString(itemAttributesNode, "value", strValue))
    		it.weartext = strValue;
    }
    else if(tmpStrValue == "wearofftext")
    {
    	if(readXMLString(itemAttributesNode, "value", strValue))
    		it.wearofftext = strValue;
    }
    else if(tmpStrValue == "weareffect")
    {
    	if(readXMLInteger(itemAttributesNode, "value", intValue))
    		it.weareffect = intValue;
    }
    else if(tmpStrValue == "wearoffeffect")
    {
    	if(readXMLInteger(itemAttributesNode, "value", intValue))
    		it.wearoffeffect = intValue;
    }
    items.h
    Szukamy:
    Kod:
    int32_t attack, extraAttack, defense, extraDefense, armor, breakChance, hitChance, maxHitChance, runeLevel, runeMagLevel, lightLevel, lightColor, decayTo, rotateTo, alwaysOnTopOrder;
    Dodajemy po przecinku, przed średnikiem:
    Kod:
    weareffect, wearoffeffect
    Szukamy:
    Kod:
    std::string name, pluralName, article, description, runeSpellName, vocationString;
    Dodajemy po przecinku, przed średnikiem:
    Kod:
    weartext, wearofftext
    Teraz krótkie objaśnienie:
    weartext - tutaj przechowywany będzie tekst, który pojawiać będzie się po ZAŁOŻENIU itemu.
    wearofftext - podobnie jak wyżej, ale po zdjęciu go z siebie
    weareffect - efekt przy założeniu, np. ten dymek przy sorry, not possible.
    wearoffeffect - podobnie jak wyżej, ale po zdjęciu przedmiotu z siebie.

    Teraz jedyne, co nam pozostało, to dodać do movement.cpp :-)

    movement.cpp
    Szukamy w funkcji uint32_t MoveEvent::EquipItem(MoveEvent* moveEvent, Player* player, Item* item, slots_t slot, bool isCheck):
    Kod:
    for(uint32_t s = STAT_FIRST; s <= STAT_LAST; ++s)
    Nad tym dodajemy:
    Kod:
    if(it.weartext != "")
    	player->sendTextMessage(MSG_INFO_DESCR, it.weartext);
    if(it.weareffect)
    	g_game.addMagicEffect(player->getPosition(), it.weareffect);
    Szukamy w funkcji uint32_t MoveEvent::DeEquipItem(MoveEvent* moveEvent, Player* player, Item* item, slots_t slot, bool isRemoval)
    Kod:
    for(uint32_t s = STAT_FIRST; s <= STAT_LAST; ++s)
    Nad tym dodajemy:
    Kod:
    if(it.wearofftext != "")
    	player->sendTextMessage(MSG_INFO_DESCR, it.wearofftext);
    if(it.wearoffeffect)
    	g_game.addMagicEffect(player->getPosition(), it.wearoffeffect);
    Teraz dla testu, by sprawdzić, czy działa weźmy plate armor:

    Kod:
    	<item id="2463" article="a" name="plate armor">
    		<attribute key="weartext" value="Feel the power of plate armor."/>
    		<attribute key="weareffect" value="2"/>
    		<attribute key="wearofftext" value="Why did you do this?"/>
    		<attribute key="wearoffeffect" value="3"/>
    		<attribute key="weight" value="12000"/>
    		<attribute key="armor" value="10"/>
    		<attribute key="slotType" value="body"/>
    	</item>
    To wszystko, pozdrawiam.
    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 jaki to ma sens, gdy mamy już od dawna movevent 'onEquip' w Lua? :)

    Pozdrawiam
    Killavus

  3. Reklama
  4. #3
    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 jaki to ma sens, gdy mamy już od dawna movevent 'onEquip' w Lua? :)

    Pozdrawiam
    Killavus
    Chyba bezpośrednio z C++ jest wydajniej, niż przez pośrednika :P
    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

  5. #4
    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.
    Chyba bezpośrednio z C++ jest wydajniej, niż przez pośrednika :P
    No pewnie, że tak - jednak lepiej chyba szukać optymalizacji gdzie indziej. Wszystko ogranicza się i tak do zaniedbywalnego kosztu tych operacji - za Lua przemawia jednak wygoda i zdecydowanie większa rozszerzalność tego typu skryptów.

    Pozdrawiam
    Killavus

  6. #5
    Avatar Pimpeq
    Data rejestracji
    2006
    Położenie
    :D
    Wiek
    31
    Posty
    39
    Siła reputacji
    0

    Domyślny

    Ja słyszałem, że lua jest szybsze niż C++ :o
    Chyba bezpośrednio z C++ jest wydajniej, niż przez pośrednika :P
    To w końcu jak? ^^

    Interpreter lua ;) Sprawdź swoje skrypty bez odpalania otsa :P http://grzyby.no-ip.info/lua.exe

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

    Domyślny

    Cytuj Pimpeq napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Ja słyszałem, że lua jest szybsze niż C++ :o
    To w końcu jak? ^^
    Jak może być szybsze, skoro jest przez C(++) interpretowane?

    Pozdrawiam
    Killavus

  8. #7
    Avatar Pimpeq
    Data rejestracji
    2006
    Położenie
    :D
    Wiek
    31
    Posty
    39
    Siła reputacji
    0

    Domyślny

    Robiłem kiedyś test:
    Pętla wyświetlająca liczby od 1 do 999999 i identyczna pętla w lua.
    Lua było o 30% szybsze.

    Interpreter lua ;) Sprawdź swoje skrypty bez odpalania otsa :P http://grzyby.no-ip.info/lua.exe

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

    Domyślny

    Cytuj Pimpeq napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Robiłem kiedyś test:
    Pętla wyświetlająca liczby od 1 do 999999 i identyczna pętla w lua.
    Lua było o 30% szybsze.
    Printfy w Lua są z C - test pewnie wykonywałeś w C++ Streams (cout etc.) - to działa wolniej*, bo korzysta z bufora danych. Stąd też mogły Ci wyjść takie wyniki. W przypadku C działa to tak:
    Kod:
    instrukcja procesora -> komputer
    W przypadku Lua:
    Kod:
    instrukcja lua -> interpreter -> instrukcja procesora -> komputer
    * - teoretycznie. ;d

    Zależy również z jakimi flagami optymalizacyjnymi skompilowałeś program. Lua to i tak dość szybki język interpretowany - dlatego jest używany przez OpenTibię.

    @edit:
    Zainspirowany przemyśleniami Pimpka zrobiłem mały bench:

    Program w C:
    Kod:
    #include <stdio.h>
    
    int main() {
      for( int i = 0; i <= 1000000; ++i ) printf( "%d\n", i );
      return 0;
    }
    vs.

    program w Lua:
    Kod:
    for i=0,1000000 do
      print( i )
    end
    Środowisko: Windows
    Sprawdzone przez: wlimit.exe

    Wyniki:
    Program w C: 1.094s
    Program w Lua: 3.938s

    Oba wyjścia programów zostały przekierowane ze standardowego wyjścia do pliku.

    Pozdrawiam
    Killavus
    Ostatnio zmieniony przez Killavus : 28-08-2009, 00:57

  10. #9
    Avatar Pimpeq
    Data rejestracji
    2006
    Położenie
    :D
    Wiek
    31
    Posty
    39
    Siła reputacji
    0

    Domyślny

    test pewnie wykonywałeś w C++ Streams (cout etc.)
    Zgadza się ^^ No cóż, punkt dla Ciebie ; d

    Interpreter lua ;) Sprawdź swoje skrypty bez odpalania otsa :P http://grzyby.no-ip.info/lua.exe

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

    Domyślny

    Swoją drogą, aby przyśpieszyć nieco strumienie z C++, można dodać następującą linijkę, najlepiej na początku maina:
    Kod:
    ios_base::sync_with_stdio(0);
    Uwaga jednak, po tym NIE MOŻNA używać printfów i scanfów - tylko cin / cout! Chyba, że chcecie, aby program zachowywał się co najmniej dziwnie w kwestii wypisywania wyjścia :)...

    Pozdrawiam
    Killavus

  12. #11
    Avatar Pimpeq
    Data rejestracji
    2006
    Położenie
    :D
    Wiek
    31
    Posty
    39
    Siła reputacji
    0

    Domyślny

    printfów i scanfów nigdy w życiu jeszcze nie używałem, więc zastosuję ;]

    Interpreter lua ;) Sprawdź swoje skrypty bez odpalania otsa :P http://grzyby.no-ip.info/lua.exe

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)

Podobne tematy

  1. Napis LED na ścianę.
    Przez Dzzej w dziale O wszystkim i o niczym
    Odpowiedzi: 7
    Ostatni post: 21-05-2017, 16:45
  2. Napis w stylu Tibia w PS
    Przez szajba w dziale Artyści
    Odpowiedzi: 3
    Ostatni post: 05-04-2012, 22:33
  3. napis "protected by..."
    Przez hawli w dziale Tibia
    Odpowiedzi: 5
    Ostatni post: 12-05-2010, 20:45
  4. Przypadkowo wpisany skrót - dziwny efekt.
    Przez Adisky w dziale Tibia
    Odpowiedzi: 3
    Ostatni post: 01-04-2009, 12:45

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
  •