Changeset 172

Show
Ignore:
Timestamp:
12/15/09 18:08:17 (9 months ago)
Author:
sausage
Message:

Jukeboxes,
Fix hook functions with object handle arguments

Location:
eoserv/trunk
Files:
11 modified

Legend:

Unmodified
Added
Removed
  • eoserv/trunk/config.extra.ini

    r169 r172  
    7474## BankUpgradeStep (number) 
    7575# Amount extra each upgrade costs 
    76 BankUpgradeStep  = 1000 
     76BankUpgradeStep = 1000 
     77 
     78## JukeboxSongs (number) 
     79# Number of songs a jukebox has 
     80JukeboxSongs = 20 
     81 
     82## JukeboxPrice (number) 
     83# Cost to play a song on a jukebox 
     84JukeboxPrice = 25 
    7785 
    7886 
  • eoserv/trunk/config.ini

    r171 r172  
    480480Deadly = no 
    481481 
     482## JukeboxTimer (number) 
     483# Amount of time to lock a jukebox after a song is requested 
     484# 0 to disable 
     485JukeboxTimer = 1m30s 
     486 
    482487 
    483488## RATES ## 
  • eoserv/trunk/src/character.cpp

    r171 r172  
    214214        this->party = 0; 
    215215        this->map = this->world->GetMap(0); 
     216 
     217        this->jukebox_open = false; 
    216218} 
    217219 
     
    733735        this->y = y; 
    734736        this->sitting = SIT_STAND; 
     737 
     738        this->shop_npc = 0; 
     739        this->bank_npc = 0; 
     740        this->jukebox_open = true; 
    735741 
    736742        this->warp_anim = animation; 
  • eoserv/trunk/src/character.hpp

    r171 r172  
    111111                NPC *shop_npc; 
    112112                NPC *bank_npc; 
     113                bool jukebox_open; 
    113114 
    114115                WarpAnimation warp_anim; 
     
    250251                SCRIPT_REGISTER_VARIABLE("NPC @", " shop_npc", shop_npc); 
    251252                SCRIPT_REGISTER_VARIABLE("NPC @", " bank_npc", bank_npc); 
     253                SCRIPT_REGISTER_VARIABLE("bool", " jukebox_open", jukebox_open); 
    252254                SCRIPT_REGISTER_VARIABLE("WarpAnimation", "warp_anim", warp_anim); 
    253255                SCRIPT_REGISTER_VARIABLE("PtrList<Character_Item>", "inventory", inventory); 
  • eoserv/trunk/src/handlers/Jukebox.cpp

    r168 r172  
    66 
    77#include "handlers.h" 
     8 
     9#include "map.hpp" 
    810 
    911CLIENT_F_FUNC(Jukebox) 
     
    1517                case PACKET_OPEN: // Opened the jukebox listing 
    1618                { 
     19                        if (this->state < EOClient::PlayingModal) return false; 
    1720 
     21                        unsigned char x = reader.GetChar(); 
     22                        unsigned char y = reader.GetChar(); 
     23 
     24                        if (!this->player->character->InRange(x, y) 
     25                         || this->player->character->map->GetSpec(x, y) != Map_Tile::Jukebox) 
     26                        { 
     27                                return true; 
     28                        } 
     29 
     30                        reply.SetID(PACKET_JUKEBOX, PACKET_OPEN); 
     31                        reply.AddShort(this->player->character->mapid); 
     32 
     33                        if (this->player->character->map->jukebox_protect > Timer::GetTime()) 
     34                        { 
     35                                reply.AddString(this->player->character->map->jukebox_player); 
     36                        } 
     37 
     38                        this->player->character->jukebox_open = true; 
     39 
     40                        CLIENT_SEND(reply); 
    1841                } 
    1942                break; 
     
    2144                case PACKET_MSG: // Requested a song 
    2245                { 
     46                        if (this->state < EOClient::PlayingModal) return false; 
    2347 
     48                        reader.GetChar(); 
     49                        reader.GetChar(); 
     50                        short track = reader.GetShort(); 
     51 
     52                        if (!this->player->character->jukebox_open 
     53                         || this->player->character->map->jukebox_protect > Timer::GetTime() 
     54                         || (track < 0 || track > static_cast<int>(this->server->world->config["JukeboxSongs"])) 
     55                         || this->player->character->HasItem(1) < static_cast<int>(this->server->world->config["JukeboxPrice"])) 
     56                        { 
     57                                return true; 
     58                        } 
     59 
     60                        this->player->character->DelItem(1, static_cast<int>(this->server->world->config["JukeboxPrice"])); 
     61 
     62                        this->player->character->map->jukebox_player = this->player->character->name; 
     63                        this->player->character->map->jukebox_protect = Timer::GetTime() + static_cast<int>(this->server->world->config["JukeboxTimer"]); 
     64 
     65                        reply.SetID(PACKET_JUKEBOX, PACKET_AGREE); 
     66                        reply.AddInt(this->player->character->HasItem(1)); 
     67 
     68                        CLIENT_SEND(reply); 
     69 
     70                        PacketBuilder builder(PACKET_JUKEBOX, PACKET_USE); 
     71                        builder.AddShort(track + 1); 
     72                        UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) 
     73                        { 
     74                                character->player->client->SendBuilder(builder); 
     75                        } 
    2476                } 
    2577                break; 
  • eoserv/trunk/src/handlers/Walk.cpp

    r171 r172  
    5252                                        this->player->character->shop_npc = 0; 
    5353                                        this->player->character->bank_npc = 0; 
     54                                        this->player->character->jukebox_open = true; 
    5455                                        if (!this->player->character->Walk(direction)) 
    5556                                        { 
  • eoserv/trunk/src/hook.cpp

    r171 r172  
    7777#include <typeinfo> 
    7878 
    79 template <> void Hook_Call::SetArg<Shared *>(ScriptContext *ctx, int argc, Shared *arg) { printf("A %s [%i = %x]\n", typeid(arg).name(), argc, arg); ctx->as->SetArgAddress(argc, arg); } 
    8079template <> void Hook_Call::SetArg<asBYTE>(ScriptContext *ctx, int argc, asBYTE arg)    { printf("A %s [%i = %i]\n", typeid(arg).name(), argc, arg); ctx->as->SetArgByte(argc, arg);    } 
    8180        template <> void Hook_Call::SetArg<char>(ScriptContext *ctx, int argc, char arg)      { return SetArg(ctx, argc, (asBYTE)arg); } 
  • eoserv/trunk/src/hook.hpp

    r171 r172  
    7979                } 
    8080 
    81                 template <typename T> static void SetArg(ScriptContext *ctx, int argc, T arg) { ctx->as->SetArgObject(argc, &arg); } 
     81                template <typename T> static void SetArg(ScriptContext *ctx, int argc, T arg) { ctx->as->SetArgObject(argc, arg); } 
    8282 
    8383                template <typename T> Hook_Call &operator [](T arg) 
  • eoserv/trunk/src/main.cpp

    r171 r172  
    377377                eoserv_config_default(config, "BankUpgradeBase"    , 1000); 
    378378                eoserv_config_default(config, "BankUpgradeStep"    , 1000); 
     379                eoserv_config_default(config, "JukeboxSongs"       , 20); 
     380                eoserv_config_default(config, "JukeboxPrice"       , 25); 
     381                eoserv_config_default(config, "JukeboxTimer"       , 90); 
    379382                eoserv_config_default(config, "MaxBankGold"        , 2000000000); 
    380383                eoserv_config_default(config, "MaxItem"            , 10000000); 
  • eoserv/trunk/src/map.cpp

    r171 r172  
    213213        this->world = world; 
    214214        this->exists = false; 
     215        this->jukebox_protect = 0.0; 
    215216 
    216217        if (world->arenas_config[util::to_string(id) + ".enabled"]) 
  • eoserv/trunk/src/map.hpp

    r171 r172  
    279279                PtrVector<PtrVector<Map_Tile> > tiles; 
    280280                bool exists; 
     281                double jukebox_protect; 
     282                std::string jukebox_player; 
    281283 
    282284                Arena *arena; 
     
    357359                SCRIPT_REGISTER_VARIABLE("PtrVector<PtrVector<Map_Tile>>", "tiles", tiles); 
    358360                SCRIPT_REGISTER_VARIABLE("bool", "exists", exists); 
     361                SCRIPT_REGISTER_VARIABLE("double", "jukebox_protect", jukebox_protect); 
     362                SCRIPT_REGISTER_VARIABLE("string", "jukebox_player", jukebox_player); 
    359363                SCRIPT_REGISTER_VARIABLE("Arena @", " arena", arena); 
    360364                SCRIPT_REGISTER_FUNCTION("int GenerateItemID()", GenerateItemID);